diff --git a/main/404.html b/main/404.html index f1ab5608..0bcc6cc6 100644 --- a/main/404.html +++ b/main/404.html @@ -1 +1 @@ -
\ No newline at end of file +
\ No newline at end of file diff --git a/main/404/index.html b/main/404/index.html index f676840c..8962647c 100644 --- a/main/404/index.html +++ b/main/404/index.html @@ -1 +1 @@ -
\ No newline at end of file +
\ No newline at end of file diff --git a/main/app-385a1458e63b69783f96.js b/main/app-385a1458e63b69783f96.js deleted file mode 100644 index 760bff33..00000000 --- a/main/app-385a1458e63b69783f96.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunkjustice40_tool=self.webpackChunkjustice40_tool||[]).push([[143],{1506:function(module){eval("function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nmodule.exports = _assertThisInitialized;\nmodule.exports.default = module.exports, module.exports.__esModule = true;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qcz8zYzk2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxzQkFBeUIsbUJBQW1CLHlCQUF5QiIsImZpbGUiOiIxNTA2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gIGlmIChzZWxmID09PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIH1cblxuICByZXR1cm4gc2VsZjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfYXNzZXJ0VGhpc0luaXRpYWxpemVkO1xubW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHMsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1506\n")},676:function(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__){"use strict";eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": function() { return /* binding */ _arrayLikeToArray; }\n/* harmony export */ });\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hcnJheUxpa2VUb0FycmF5LmpzPzZiNzUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQWU7QUFDZjs7QUFFQSx3Q0FBd0MsU0FBUztBQUNqRDtBQUNBOztBQUVBO0FBQ0EiLCJmaWxlIjoiNjc2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHtcbiAgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7XG5cbiAgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7XG4gICAgYXJyMltpXSA9IGFycltpXTtcbiAgfVxuXG4gIHJldHVybiBhcnIyO1xufSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///676\n')},1788:function(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__){"use strict";eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": function() { return /* binding */ _inheritsLoose; }\n/* harmony export */ });\n/* harmony import */ var _setPrototypeOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4665);\n\nfunction _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n (0,_setPrototypeOf_js__WEBPACK_IMPORTED_MODULE_0__/* .default */ .Z)(subClass, superClass);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlLmpzPzc0OGUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFpRDtBQUNsQztBQUNmO0FBQ0E7QUFDQSxFQUFFLG9FQUFjO0FBQ2hCIiwiZmlsZSI6IjE3ODguanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgc2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vc2V0UHJvdG90eXBlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pbmhlcml0c0xvb3NlKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcy5wcm90b3R5cGUpO1xuICBzdWJDbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBzdWJDbGFzcztcbiAgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1788\n')},4665:function(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__){"use strict";eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": function() { return /* binding */ _setPrototypeOf; }\n/* harmony export */ });\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zZXRQcm90b3R5cGVPZi5qcz9iMzgwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsImZpbGUiOiI0NjY1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgby5fX3Byb3RvX18gPSBwO1xuICAgIHJldHVybiBvO1xuICB9O1xuXG4gIHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7XG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4665\n')},7329:function(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__){"use strict";eval('\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n "Z": function() { return /* binding */ _toConsumableArray; }\n});\n\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js\nvar arrayLikeToArray = __webpack_require__(676);\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return (0,arrayLikeToArray/* default */.Z)(arr);\n}\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/iterableToArray.js\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);\n}\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js\nvar unsupportedIterableToArray = __webpack_require__(2961);\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js\nfunction _nonIterableSpread() {\n throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");\n}\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js\n\n\n\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || (0,unsupportedIterableToArray/* default */.Z)(arr) || _nonIterableSpread();\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hcnJheVdpdGhvdXRIb2xlcy5qcz82MDA1Iiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2l0ZXJhYmxlVG9BcnJheS5qcz9kYjkwIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL25vbkl0ZXJhYmxlU3ByZWFkLmpzPzM0MjciLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Db25zdW1hYmxlQXJyYXkuanM/MjkwOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBcUQ7QUFDdEM7QUFDZixpQ0FBaUMsbUNBQWdCO0FBQ2pELEM7O0FDSGU7QUFDZjtBQUNBLEM7Ozs7QUNGZTtBQUNmO0FBQ0EsQzs7QUNGdUQ7QUFDSjtBQUNzQjtBQUNsQjtBQUN4QztBQUNmLFNBQVMsa0JBQWlCLFNBQVMsZ0JBQWUsU0FBUyw2Q0FBMEIsU0FBUyxrQkFBaUI7QUFDL0ciLCJmaWxlIjoiNzMyOS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhcnJheUxpa2VUb0FycmF5IGZyb20gXCIuL2FycmF5TGlrZVRvQXJyYXkuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkoYXJyKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHtcbiAgaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgaXRlcltTeW1ib2wuaXRlcmF0b3JdICE9IG51bGwgfHwgaXRlcltcIkBAaXRlcmF0b3JcIl0gIT0gbnVsbCkgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn0iLCJpbXBvcnQgYXJyYXlXaXRob3V0SG9sZXMgZnJvbSBcIi4vYXJyYXlXaXRob3V0SG9sZXMuanNcIjtcbmltcG9ydCBpdGVyYWJsZVRvQXJyYXkgZnJvbSBcIi4vaXRlcmFibGVUb0FycmF5LmpzXCI7XG5pbXBvcnQgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkgZnJvbSBcIi4vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanNcIjtcbmltcG9ydCBub25JdGVyYWJsZVNwcmVhZCBmcm9tIFwiLi9ub25JdGVyYWJsZVNwcmVhZC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikge1xuICByZXR1cm4gYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBpdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IG5vbkl0ZXJhYmxlU3ByZWFkKCk7XG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7329\n')},2961:function(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__){"use strict";eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": function() { return /* binding */ _unsupportedIterableToArray; }\n/* harmony export */ });\n/* harmony import */ var _arrayLikeToArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(676);\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === "string") return (0,_arrayLikeToArray_js__WEBPACK_IMPORTED_MODULE_0__/* .default */ .Z)(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === "Object" && o.constructor) n = o.constructor.name;\n if (n === "Map" || n === "Set") return Array.from(o);\n if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return (0,_arrayLikeToArray_js__WEBPACK_IMPORTED_MODULE_0__/* .default */ .Z)(o, minLen);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qcz8wNmM1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBcUQ7QUFDdEM7QUFDZjtBQUNBLG9DQUFvQyxzRUFBZ0I7QUFDcEQ7QUFDQTtBQUNBO0FBQ0Esc0ZBQXNGLHNFQUFnQjtBQUN0RyIsImZpbGUiOiIyOTYxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFycmF5TGlrZVRvQXJyYXkgZnJvbSBcIi4vYXJyYXlMaWtlVG9BcnJheS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikge1xuICBpZiAoIW8pIHJldHVybjtcbiAgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xuICB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7XG4gIGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7XG4gIGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pO1xuICBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2961\n')},7154:function(module){eval("function _extends() {\n module.exports = _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n module.exports.default = module.exports, module.exports.__esModule = true;\n return _extends.apply(this, arguments);\n}\n\nmodule.exports = _extends;\nmodule.exports.default = module.exports, module.exports.__esModule = true;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2V4dGVuZHMuanM/YTU1OSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0EsbUJBQW1CLHNCQUFzQjtBQUN6Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxFQUFFLHNCQUF5QixtQkFBbUIseUJBQXlCO0FBQ3ZFO0FBQ0E7O0FBRUE7QUFDQSxzQkFBeUIsbUJBQW1CLHlCQUF5QiIsImZpbGUiOiI3MTU0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX2V4dGVuZHMoKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTtcblxuICAgICAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9O1xuXG4gIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbiAgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2V4dGVuZHM7XG5tb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7154\n")},5354:function(module,__unused_webpack_exports,__webpack_require__){eval("var setPrototypeOf = __webpack_require__(9489);\n\nfunction _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n setPrototypeOf(subClass, superClass);\n}\n\nmodule.exports = _inheritsLoose;\nmodule.exports.default = module.exports, module.exports.__esModule = true;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2luaGVyaXRzTG9vc2UuanM/NTViNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxQkFBcUIsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHNCQUF5QixtQkFBbUIseUJBQXlCIiwiZmlsZSI6IjUzNTQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKFwiLi9zZXRQcm90b3R5cGVPZi5qc1wiKTtcblxuZnVuY3Rpb24gX2luaGVyaXRzTG9vc2Uoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzLnByb3RvdHlwZSk7XG4gIHN1YkNsYXNzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IHN1YkNsYXNzO1xuICBzZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2luaGVyaXRzTG9vc2U7XG5tb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5354\n")},5318:function(module){eval('function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n "default": obj\n };\n}\n\nmodule.exports = _interopRequireDefault;\nmodule.exports.default = module.exports, module.exports.__esModule = true;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdC5qcz80ZWE0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxzQkFBeUIsbUJBQW1CLHlCQUF5QiIsImZpbGUiOiI1MzE4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHtcbiAgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHtcbiAgICBcImRlZmF1bHRcIjogb2JqXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdDtcbm1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5318\n')},7316:function(module){eval("function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nmodule.exports = _objectWithoutPropertiesLoose;\nmodule.exports.default = module.exports, module.exports.__esModule = true;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UuanM/ZjBlNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGFBQWEsdUJBQXVCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxzQkFBeUIsbUJBQW1CLHlCQUF5QiIsImZpbGUiOiI3MzE2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkge1xuICBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTtcbiAgdmFyIHRhcmdldCA9IHt9O1xuICB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7XG4gIHZhciBrZXksIGk7XG5cbiAgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHtcbiAgICBrZXkgPSBzb3VyY2VLZXlzW2ldO1xuICAgIGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7XG4gICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2U7XG5tb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7316\n")},9489:function(module){eval("function _setPrototypeOf(o, p) {\n module.exports = _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n module.exports.default = module.exports, module.exports.__esModule = true;\n return _setPrototypeOf(o, p);\n}\n\nmodule.exports = _setPrototypeOf;\nmodule.exports.default = module.exports, module.exports.__esModule = true;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3NldFByb3RvdHlwZU9mLmpzPzRhNGIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxFQUFFLHNCQUF5QixtQkFBbUIseUJBQXlCO0FBQ3ZFO0FBQ0E7O0FBRUE7QUFDQSxzQkFBeUIsbUJBQW1CLHlCQUF5QiIsImZpbGUiOiI5NDg5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgcmV0dXJuIG87XG4gIH07XG5cbiAgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHMsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuICByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9zZXRQcm90b3R5cGVPZjtcbm1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9489\n")},7625:function(I,g,C){var B={"./en":4574,"./en.js":4574,"./es":3745,"./es.js":3745,"./ses":6867,"./ses.js":6867};function n(I){var g=Q(I);return C(g)}function Q(I){if(!C.o(B,I)){var g=new Error("Cannot find module '"+I+"'");throw g.code="MODULE_NOT_FOUND",g}return B[I]}n.keys=function(){return Object.keys(B)},n.resolve=Q,I.exports=n,n.id=7625},7991:function(I){"use strict";I.exports=JSON.parse('{"data":{"en-001":{"year-short":{"0":"this yr","1":"next yr","future":{"one":"in {0} yr","other":"in {0} yr"},"past":{"one":"{0} yr ago","other":"{0} yr ago"},"-1":"last yr"},"year-narrow":{"0":"this yr","1":"next yr","future":{"one":"in {0} yr","other":"in {0} yr"},"past":{"one":"{0} yr ago","other":"{0} yr ago"},"-1":"last yr"},"quarter-short":{"0":"this qtr.","1":"next qtr.","future":{"one":"in {0} qtr","other":"in {0} qtr"},"past":{"one":"{0} qtr ago","other":"{0} qtr ago"},"-1":"last qtr."},"quarter-narrow":{"0":"this qtr.","1":"next qtr.","future":{"one":"in {0} qtr","other":"in {0} qtr"},"past":{"one":"{0} qtr ago","other":"{0} qtr ago"},"-1":"last qtr."},"month-short":{"0":"this mo","1":"next mo","future":{"one":"in {0} mo","other":"in {0} mo"},"past":{"one":"{0} mo ago","other":"{0} mo ago"},"-1":"last mo"},"month-narrow":{"0":"this mo","1":"next mo","future":{"one":"in {0} mo","other":"in {0} mo"},"past":{"one":"{0} mo ago","other":"{0} mo ago"},"-1":"last mo"},"week-short":{"0":"this wk","1":"next wk","future":{"one":"in {0} wk","other":"in {0} wk"},"past":{"one":"{0} wk ago","other":"{0} wk ago"},"-1":"last wk"},"week-narrow":{"0":"this wk","1":"next wk","future":{"one":"in {0} wk","other":"in {0} wk"},"past":{"one":"{0} wk ago","other":"{0} wk ago"},"-1":"last wk"},"hour-short":{"0":"this hour","future":{"one":"in {0} hr","other":"in {0} hr"},"past":{"one":"{0} hr ago","other":"{0} hr ago"}},"hour-narrow":{"0":"this hour","future":{"one":"in {0} hr","other":"in {0} hr"},"past":{"one":"{0} hr ago","other":"{0} hr ago"}},"minute-short":{"0":"this minute","future":{"one":"in {0} min","other":"in {0} min"},"past":{"one":"{0} min ago","other":"{0} min ago"}},"minute-narrow":{"0":"this minute","future":{"one":"in {0} min","other":"in {0} min"},"past":{"one":"{0} min ago","other":"{0} min ago"}},"second-short":{"0":"now","future":{"one":"in {0} sec","other":"in {0} sec"},"past":{"one":"{0} sec ago","other":"{0} sec ago"}},"second-narrow":{"0":"now","future":{"one":"in {0} sec","other":"in {0} sec"},"past":{"one":"{0} sec ago","other":"{0} sec ago"}}},"en-150":{"year-short":{"0":"this yr","1":"next yr","future":{"one":"in {0} yr","other":"in {0} yr"},"past":{"one":"{0} yr ago","other":"{0} yr ago"},"-1":"last yr"},"year-narrow":{"0":"this yr","1":"next yr","future":{"one":"in {0} yr","other":"in {0} yr"},"past":{"one":"{0} yr ago","other":"{0} yr ago"},"-1":"last yr"},"quarter-short":{"0":"this qtr.","1":"next qtr.","future":{"one":"in {0} qtr","other":"in {0} qtr"},"past":{"one":"{0} qtr ago","other":"{0} qtr ago"},"-1":"last qtr."},"quarter-narrow":{"0":"this qtr.","1":"next qtr.","future":{"one":"in {0} qtr","other":"in {0} qtr"},"past":{"one":"{0} qtr ago","other":"{0} qtr ago"},"-1":"last qtr."},"month-short":{"0":"this mo","1":"next mo","future":{"one":"in {0} mo","other":"in {0} mo"},"past":{"one":"{0} mo ago","other":"{0} mo ago"},"-1":"last mo"},"month-narrow":{"0":"this mo","1":"next mo","future":{"one":"in {0} mo","other":"in {0} mo"},"past":{"one":"{0} mo ago","other":"{0} mo ago"},"-1":"last mo"},"week-short":{"0":"this wk","1":"next wk","future":{"one":"in {0} wk","other":"in {0} wk"},"past":{"one":"{0} wk ago","other":"{0} wk ago"},"-1":"last wk"},"week-narrow":{"0":"this wk","1":"next wk","future":{"one":"in {0} wk","other":"in {0} wk"},"past":{"one":"{0} wk ago","other":"{0} wk ago"},"-1":"last wk"},"hour-short":{"0":"this hour","future":{"one":"in {0} hr","other":"in {0} hr"},"past":{"one":"{0} hr ago","other":"{0} hr ago"}},"hour-narrow":{"0":"this hour","future":{"one":"in {0} hr","other":"in {0} hr"},"past":{"one":"{0} hr ago","other":"{0} hr ago"}},"minute-short":{"0":"this minute","future":{"one":"in {0} min","other":"in {0} min"},"past":{"one":"{0} min ago","other":"{0} min ago"}},"minute-narrow":{"0":"this minute","future":{"one":"in {0} min","other":"in {0} min"},"past":{"one":"{0} min ago","other":"{0} min ago"}},"second-short":{"0":"now","future":{"one":"in {0} sec","other":"in {0} sec"},"past":{"one":"{0} sec ago","other":"{0} sec ago"}},"second-narrow":{"0":"now","future":{"one":"in {0} sec","other":"in {0} sec"},"past":{"one":"{0} sec ago","other":"{0} sec ago"}}},"en-AU":{"year-short":{"0":"this yr","1":"next yr","future":{"one":"in {0} yr","other":"in {0} yrs"},"past":{"one":"{0} yr ago","other":"{0} yrs ago"},"-1":"last yr"},"year-narrow":{"0":"this yr","1":"next yr","future":{"one":"in {0} yr","other":"in {0} yrs"},"past":{"one":"{0} yr ago","other":"{0} yrs ago"},"-1":"last yr"},"quarter-short":{"0":"this qtr.","1":"next qtr.","future":{"one":"in {0} qtr","other":"in {0} qtrs"},"past":{"one":"{0} qtr ago","other":"{0} qtrs ago"},"-1":"last qtr."},"quarter-narrow":{"0":"this qtr.","1":"next qtr.","future":{"one":"in {0} qtr","other":"in {0} qtrs"},"past":{"one":"in {0} qtr ago","other":"{0} qtrs ago"},"-1":"last qtr."},"month-short":{"0":"this mo","1":"next mo","future":{"one":"in {0} mo.","other":"in {0} mo."},"past":{"one":"{0} mo. ago","other":"{0} mo. ago"},"-1":"last mo"},"month-narrow":{"0":"this mo","1":"next mo","future":{"one":"in {0} mo.","other":"in {0} mo."},"past":{"one":"{0} mo. ago","other":"{0} mo. ago"},"-1":"last mo"},"week-short":{"0":"this wk","1":"next wk","future":{"one":"in {0} wk","other":"in {0} wks"},"past":{"one":"{0} wk ago","other":"{0} wks ago"},"-1":"last wk"},"week-narrow":{"0":"this wk","1":"next wk","future":{"one":"in {0} wk","other":"in {0} wks"},"past":{"one":"{0} wk ago","other":"{0} wks ago"},"-1":"last wk"},"hour-short":{"0":"this hour","future":{"one":"in {0} hr","other":"in {0} hrs"},"past":{"one":"{0} hr ago","other":"{0} hrs ago"}},"hour-narrow":{"0":"this hour","future":{"one":"in {0} hr","other":"in {0} hrs"},"past":{"one":"{0} hr ago","other":"{0} hrs ago"}},"minute-short":{"0":"this minute","future":{"one":"in {0} min.","other":"in {0} mins"},"past":{"one":"{0} min. ago","other":"{0} mins ago"}},"minute-narrow":{"0":"this minute","future":{"one":"in {0} min.","other":"in {0} mins"},"past":{"one":"{0} min. ago","other":"{0} mins ago"}},"second-short":{"0":"now","future":{"one":"in {0} sec.","other":"in {0} secs"},"past":{"one":"{0} sec. ago","other":"{0} secs ago"}},"second-narrow":{"0":"now","future":{"one":"in {0} sec.","other":"in {0} secs"},"past":{"one":"{0} sec. ago","other":"{0} secs ago"}}},"en-CA":{"year-short":{"0":"this yr","1":"next yr","future":{"one":"in {0} yr.","other":"in {0} yrs."},"past":{"one":"{0} yr. ago","other":"{0} yrs. ago"},"-1":"last yr"},"year-narrow":{"0":"this yr","1":"next yr","future":{"one":"in {0} yr.","other":"in {0} yrs."},"past":{"one":"{0} yr. ago","other":"{0} yrs. ago"},"-1":"last yr"},"quarter-short":{"0":"this qtr.","1":"next qtr.","future":{"one":"in {0} qtr.","other":"in {0} qtrs."},"past":{"one":"{0} qtr. ago","other":"{0} qtrs. ago"},"-1":"last qtr."},"quarter-narrow":{"0":"this qtr.","1":"next qtr.","future":{"one":"in {0} qtr.","other":"in {0} qtrs."},"past":{"one":"{0} qtr. ago","other":"{0} qtrs. ago"},"-1":"last qtr."},"month-short":{"0":"this mo","1":"next mo","future":{"one":"in {0} mo.","other":"in {0} mos."},"past":{"one":"{0} mo. ago","other":"{0} mos. ago"},"-1":"last mo"},"month-narrow":{"0":"this mo","1":"next mo","future":{"one":"in {0} mo.","other":"in {0} mos."},"past":{"one":"{0} mo. ago","other":"{0} mos. ago"},"-1":"last mo"},"week-short":{"0":"this wk","1":"next wk","future":{"one":"in {0} wk.","other":"in {0} wks."},"past":{"one":"{0} wk. ago","other":"{0} wks. ago"},"-1":"last wk"},"week-narrow":{"0":"this wk","1":"next wk","future":{"one":"in {0} wk.","other":"in {0} wks."},"past":{"one":"{0} wk. ago","other":"{0} wks. ago"},"-1":"last wk"},"hour-short":{"0":"this hour","future":{"one":"in {0} hr.","other":"in {0} hrs."},"past":{"one":"{0} hr. ago","other":"{0} hrs. ago"}},"hour-narrow":{"0":"this hour","future":{"one":"in {0} hr.","other":"in {0} hrs."},"past":{"one":"{0} hr. ago","other":"{0} hrs. ago"}},"minute-short":{"0":"this minute","future":{"one":"in {0} min.","other":"in {0} mins."},"past":{"one":"{0} min. ago","other":"{0} mins. ago"}},"minute-narrow":{"0":"this minute","future":{"one":"in {0} min.","other":"in {0} mins."},"past":{"one":"{0} min. ago","other":"{0} mins. ago"}},"second-short":{"0":"now","future":{"one":"in {0} sec.","other":"in {0} secs."},"past":{"one":"{0} sec. ago","other":"{0} secs. ago"}},"second-narrow":{"0":"now","future":{"one":"in {0} sec.","other":"in {0} secs."},"past":{"one":"{0} sec. ago","other":"{0} secs. ago"}}},"en-SG":{"quarter-short":{"0":"this qtr","1":"next qtr","future":{"one":"in {0} qtr","other":"in {0} qtrs"},"past":{"one":"{0} qtr ago","other":"{0} qtrs ago"},"-1":"last qtr"},"quarter-narrow":{"0":"this qtr","1":"next qtr","future":{"one":"in {0} qtr","other":"in {0} qtr"},"past":{"one":"{0} qtr ago","other":"{0} qtr ago"},"-1":"last qtr"},"month-short":{"0":"this mth","1":"next mth","future":{"one":"in {0} mth","other":"in {0} mth"},"past":{"one":"{0} mth ago","other":"{0} mth ago"},"-1":"last mth"}},"en":{"nu":["latn"],"year":{"0":"this year","1":"next year","future":{"one":"in {0} year","other":"in {0} years"},"past":{"one":"{0} year ago","other":"{0} years ago"},"-1":"last year"},"year-short":{"0":"this yr.","1":"next yr.","future":{"one":"in {0} yr.","other":"in {0} yr."},"past":{"one":"{0} yr. ago","other":"{0} yr. ago"},"-1":"last yr."},"year-narrow":{"0":"this yr.","1":"next yr.","future":{"one":"in {0} yr.","other":"in {0} yr."},"past":{"one":"{0} yr. ago","other":"{0} yr. ago"},"-1":"last yr."},"quarter":{"0":"this quarter","1":"next quarter","future":{"one":"in {0} quarter","other":"in {0} quarters"},"past":{"one":"{0} quarter ago","other":"{0} quarters ago"},"-1":"last quarter"},"quarter-short":{"0":"this qtr.","1":"next qtr.","future":{"one":"in {0} qtr.","other":"in {0} qtrs."},"past":{"one":"{0} qtr. ago","other":"{0} qtrs. ago"},"-1":"last qtr."},"quarter-narrow":{"0":"this qtr.","1":"next qtr.","future":{"one":"in {0} qtr.","other":"in {0} qtrs."},"past":{"one":"{0} qtr. ago","other":"{0} qtrs. ago"},"-1":"last qtr."},"month":{"0":"this month","1":"next month","future":{"one":"in {0} month","other":"in {0} months"},"past":{"one":"{0} month ago","other":"{0} months ago"},"-1":"last month"},"month-short":{"0":"this mo.","1":"next mo.","future":{"one":"in {0} mo.","other":"in {0} mo."},"past":{"one":"{0} mo. ago","other":"{0} mo. ago"},"-1":"last mo."},"month-narrow":{"0":"this mo.","1":"next mo.","future":{"one":"in {0} mo.","other":"in {0} mo."},"past":{"one":"{0} mo. ago","other":"{0} mo. ago"},"-1":"last mo."},"week":{"0":"this week","1":"next week","future":{"one":"in {0} week","other":"in {0} weeks"},"past":{"one":"{0} week ago","other":"{0} weeks ago"},"-1":"last week"},"week-short":{"0":"this wk.","1":"next wk.","future":{"one":"in {0} wk.","other":"in {0} wk."},"past":{"one":"{0} wk. ago","other":"{0} wk. ago"},"-1":"last wk."},"week-narrow":{"0":"this wk.","1":"next wk.","future":{"one":"in {0} wk.","other":"in {0} wk."},"past":{"one":"{0} wk. ago","other":"{0} wk. ago"},"-1":"last wk."},"day":{"0":"today","1":"tomorrow","future":{"one":"in {0} day","other":"in {0} days"},"past":{"one":"{0} day ago","other":"{0} days ago"},"-1":"yesterday"},"day-short":{"0":"today","1":"tomorrow","future":{"one":"in {0} day","other":"in {0} days"},"past":{"one":"{0} day ago","other":"{0} days ago"},"-1":"yesterday"},"day-narrow":{"0":"today","1":"tomorrow","future":{"one":"in {0} day","other":"in {0} days"},"past":{"one":"{0} day ago","other":"{0} days ago"},"-1":"yesterday"},"hour":{"0":"this hour","future":{"one":"in {0} hour","other":"in {0} hours"},"past":{"one":"{0} hour ago","other":"{0} hours ago"}},"hour-short":{"0":"this hour","future":{"one":"in {0} hr.","other":"in {0} hr."},"past":{"one":"{0} hr. ago","other":"{0} hr. ago"}},"hour-narrow":{"0":"this hour","future":{"one":"in {0} hr.","other":"in {0} hr."},"past":{"one":"{0} hr. ago","other":"{0} hr. ago"}},"minute":{"0":"this minute","future":{"one":"in {0} minute","other":"in {0} minutes"},"past":{"one":"{0} minute ago","other":"{0} minutes ago"}},"minute-short":{"0":"this minute","future":{"one":"in {0} min.","other":"in {0} min."},"past":{"one":"{0} min. ago","other":"{0} min. ago"}},"minute-narrow":{"0":"this minute","future":{"one":"in {0} min.","other":"in {0} min."},"past":{"one":"{0} min. ago","other":"{0} min. ago"}},"second":{"0":"now","future":{"one":"in {0} second","other":"in {0} seconds"},"past":{"one":"{0} second ago","other":"{0} seconds ago"}},"second-short":{"0":"now","future":{"one":"in {0} sec.","other":"in {0} sec."},"past":{"one":"{0} sec. ago","other":"{0} sec. ago"}},"second-narrow":{"0":"now","future":{"one":"in {0} sec.","other":"in {0} sec."},"past":{"one":"{0} sec. ago","other":"{0} sec. ago"}}}},"availableLocales":["en-001","en-150","en-AE","en-AG","en-AI","en-AS","en-AT","en-AU","en-BB","en-BE","en-BI","en-BM","en-BS","en-BW","en-BZ","en-CA","en-CC","en-CH","en-CK","en-CM","en-CX","en-CY","en-DE","en-DG","en-DK","en-DM","en-ER","en-FI","en-FJ","en-FK","en-FM","en-GB","en-GD","en-GG","en-GH","en-GI","en-GM","en-GU","en-GY","en-HK","en-IE","en-IL","en-IM","en-IN","en-IO","en-JE","en-JM","en-KE","en-KI","en-KN","en-KY","en-LC","en-LR","en-LS","en-MG","en-MH","en-MO","en-MP","en-MS","en-MT","en-MU","en-MW","en-MY","en-NA","en-NF","en-NG","en-NL","en-NR","en-NU","en-NZ","en-PG","en-PH","en-PK","en-PN","en-PR","en-PW","en-RW","en-SB","en-SC","en-SD","en-SE","en-SG","en-SH","en-SI","en-SL","en-SS","en-SX","en-SZ","en-TC","en-TK","en-TO","en-TT","en-TV","en-TZ","en-UG","en-UM","en-US-POSIX","en-US","en-VC","en-VG","en-VI","en-VU","en-WS","en-ZA","en-ZM","en-ZW","en"],"aliases":{},"parentLocales":{"en-150":"en-001","en-AG":"en-001","en-AI":"en-001","en-AU":"en-001","en-BB":"en-001","en-BM":"en-001","en-BS":"en-001","en-BW":"en-001","en-BZ":"en-001","en-CA":"en-001","en-CC":"en-001","en-CK":"en-001","en-CM":"en-001","en-CX":"en-001","en-CY":"en-001","en-DG":"en-001","en-DM":"en-001","en-ER":"en-001","en-FJ":"en-001","en-FK":"en-001","en-FM":"en-001","en-GB":"en-001","en-GD":"en-001","en-GG":"en-001","en-GH":"en-001","en-GI":"en-001","en-GM":"en-001","en-GY":"en-001","en-HK":"en-001","en-IE":"en-001","en-IL":"en-001","en-IM":"en-001","en-IN":"en-001","en-IO":"en-001","en-JE":"en-001","en-JM":"en-001","en-KE":"en-001","en-KI":"en-001","en-KN":"en-001","en-KY":"en-001","en-LC":"en-001","en-LR":"en-001","en-LS":"en-001","en-MG":"en-001","en-MO":"en-001","en-MS":"en-001","en-MT":"en-001","en-MU":"en-001","en-MW":"en-001","en-MY":"en-001","en-NA":"en-001","en-NF":"en-001","en-NG":"en-001","en-NR":"en-001","en-NU":"en-001","en-NZ":"en-001","en-PG":"en-001","en-PH":"en-001","en-PK":"en-001","en-PN":"en-001","en-PW":"en-001","en-RW":"en-001","en-SB":"en-001","en-SC":"en-001","en-SD":"en-001","en-SG":"en-001","en-SH":"en-001","en-SL":"en-001","en-SS":"en-001","en-SX":"en-001","en-SZ":"en-001","en-TC":"en-001","en-TK":"en-001","en-TO":"en-001","en-TT":"en-001","en-TV":"en-001","en-TZ":"en-001","en-UG":"en-001","en-VC":"en-001","en-VG":"en-001","en-VU":"en-001","en-WS":"en-001","en-ZA":"en-001","en-ZM":"en-001","en-ZW":"en-001","en-AT":"en-150","en-BE":"en-150","en-CH":"en-150","en-DE":"en-150","en-DK":"en-150","en-FI":"en-150","en-NL":"en-150","en-SE":"en-150","en-SI":"en-150"}}')},7684:function(I){"use strict";I.exports=JSON.parse('{"data":{"es-419":{"week-short":{"0":"esta sem.","1":"próx. sem.","future":{"one":"dentro de {0} sem.","other":"dentro de {0} sem."},"past":{"one":"hace {0} sem.","other":"hace {0} sem."},"-1":"sem. pas."},"week-narrow":{"0":"esta sem.","1":"próx. sem.","future":{"one":"dentro de {0} sem.","other":"dentro de {0} sem."},"past":{"one":"hace {0} sem.","other":"hace {0} sem."},"-1":"sem. pas."}},"es-AR":{"day-short":{"0":"hoy","1":"mañana","2":"pasado mañana","future":{"one":"dentro de {0} días","other":"dentro de {0} días"},"past":{"one":"hace {0} días","other":"hace {0} días"},"-2":"anteayer","-1":"ayer"},"day-narrow":{"0":"hoy","1":"mañana","2":"pasado mañana","future":{"one":"dentro de {0} días","other":"dentro de {0} días"},"past":{"one":"hace {0} días","other":"hace {0} días"},"-2":"anteayer","-1":"ayer"},"second-short":{"0":"ahora","future":{"one":"dentro de {0} seg.","other":"dentro de {0} seg."},"past":{"one":"hace {0} seg.","other":"hace {0} seg."}},"second-narrow":{"0":"ahora","future":{"one":"dentro de {0} seg.","other":"dentro de {0} seg."},"past":{"one":"hace {0} seg.","other":"hace {0} seg."}}},"es-MX":{"year":{"0":"este año","1":"el año próximo","future":{"one":"dentro de {0} año","other":"dentro de {0} años"},"past":{"one":"hace {0} año","other":"hace {0} años"},"-1":"el año pasado"},"year-short":{"0":"este año","1":"el próximo año","future":{"one":"en {0} a","other":"en {0} a"},"past":{"one":"hace {0} a","other":"hace {0} a"},"-1":"el año pasado"},"year-narrow":{"0":"este año","1":"el próximo año","future":{"one":"en {0} a","other":"en {0} a"},"past":{"one":"-{0} a","other":"-{0} a"},"-1":"el año pasado"},"quarter":{"0":"este trimestre","1":"el próximo trimestre","future":{"one":"en {0} trimestre","other":"dentro de {0} trimetres"},"past":{"one":"hace {0} trimestre","other":"hace {0} trimestres"},"-1":"el trimestre pasado"},"quarter-short":{"0":"este trimestre","1":"el próximo trimestre","future":{"one":"en {0} trim.","other":"en {0} trim"},"past":{"one":"hace {0} trim.","other":"hace {0} trim."},"-1":"el trimestre pasado"},"quarter-narrow":{"0":"este trimestre","1":"el próximo trimestre","future":{"one":"en {0} trim.","other":"en {0} trim."},"past":{"one":"-{0} T","other":"-{0} T"},"-1":"el trimestre pasado"},"month":{"0":"este mes","1":"el mes próximo","future":{"one":"en {0} mes","other":"en {0} meses"},"past":{"one":"hace {0} mes","other":"hace {0} meses"},"-1":"el mes pasado"},"month-short":{"0":"este mes","1":"el próximo mes","future":{"one":"en {0} m","other":"en {0} m"},"past":{"one":"hace {0} m","other":"hace {0} m"},"-1":"el mes pasado"},"month-narrow":{"0":"este mes","1":"el próximo mes","future":{"one":"+{0} m","other":"+{0} m"},"past":{"one":"-{0} m","other":"-{0} m"},"-1":"el mes pasado"},"week":{"0":"esta semana","1":"la semana próxima","future":{"one":"dentro de {0} semana","other":"dentro de {0} semanas"},"past":{"one":"hace {0} semana","other":"hace {0} semanas"},"-1":"la semana pasada"},"week-short":{"0":"esta sem.","1":"próx. sem.","future":{"one":"en {0} sem.","other":"en {0} sem."},"past":{"one":"hace {0} sem.","other":"hace {0} sem."},"-1":"sem. pas."},"day-short":{"0":"hoy","1":"mañana","2":"pasado mañana","future":{"one":"en {0} día","other":"en {0} días"},"past":{"one":"hace {0} día","other":"hace {0} días"},"-2":"anteayer","-1":"ayer"},"day-narrow":{"0":"hoy","1":"mañana","2":"pasado mañana","future":{"one":"+{0} día","other":"en {0} días"},"past":{"one":"hace {0} día","other":"hace {0} días"},"-2":"anteayer","-1":"ayer"},"hour-short":{"0":"esta hora","future":{"one":"en {0} h","other":"en {0} n"},"past":{"one":"hace {0} h","other":"hace {0} h"}},"minute-short":{"0":"este minuto","future":{"one":"en {0} min","other":"en {0} min"},"past":{"one":"hace {0} min","other":"hace {0} min"}},"minute-narrow":{"0":"este minuto","future":{"one":"en {0} min","other":"en {0} min"},"past":{"one":"hace {0} min","other":"hace {0} min"}},"second-short":{"0":"ahora","future":{"one":"en {0} s","other":"en {0} s"},"past":{"one":"hace {0} s","other":"hace {0} s"}},"second-narrow":{"0":"ahora","future":{"one":"+{0} s","other":"+{0} s"},"past":{"one":"hace {0} s","other":"hace {0} s"}}},"es-PY":{"second-short":{"0":"ahora","future":{"one":"dentro de {0} seg.","other":"dentro de {0} seg."},"past":{"one":"hace {0} seg.","other":"hace {0} seg."}},"second-narrow":{"0":"ahora","future":{"one":"dentro de {0} seg.","other":"dentro de {0} seg."},"past":{"one":"hace {0} seg.","other":"hace {0} seg."}}},"es-SV":{"day":{"0":"hoy","1":"mañana","2":"pasado mañana","future":{"one":"dentro de {0} día","other":"dentro de {0} días"},"past":{"one":"hace {0} día","other":"hace {0} días"},"-2":"antier","-1":"ayer"}},"es-US":{"year":{"0":"este año","1":"el año próximo","future":{"one":"dentro de {0} año","other":"dentro de {0} años"},"past":{"one":"hace {0} año","other":"hace {0} años"},"-1":"el año pasado"},"quarter":{"0":"este trimestre","1":"el próximo trimestre","future":{"one":"dentro de {0} trimetre","other":"dentro de {0} trimetres"},"past":{"one":"hace {0} trimestre","other":"hace {0} trimestres"},"-1":"el trimestre pasado"},"month":{"0":"este mes","1":"el mes próximo","future":{"one":"dentro de {0} mes","other":"dentro de {0} meses"},"past":{"one":"hace {0} mes","other":"hace {0} meses"},"-1":"el mes pasado"},"week":{"0":"esta semana","1":"la semana próxima","future":{"one":"dentro de {0} semana","other":"dentro de {0} semanas"},"past":{"one":"hace {0} semana","other":"hace {0} semanas"},"-1":"la semana pasada"}},"es":{"nu":["latn"],"year":{"0":"este año","1":"el próximo año","future":{"one":"dentro de {0} año","other":"dentro de {0} años"},"past":{"one":"hace {0} año","other":"hace {0} años"},"-1":"el año pasado"},"year-short":{"0":"este año","1":"el próximo año","future":{"one":"dentro de {0} a","other":"dentro de {0} a"},"past":{"one":"hace {0} a","other":"hace {0} a"},"-1":"el año pasado"},"year-narrow":{"0":"este año","1":"el próximo año","future":{"one":"dentro de {0} a","other":"dentro de {0} a"},"past":{"one":"hace {0} a","other":"hace {0} a"},"-1":"el año pasado"},"quarter":{"0":"este trimestre","1":"el próximo trimestre","future":{"one":"dentro de {0} trimestre","other":"dentro de {0} trimestres"},"past":{"one":"hace {0} trimestre","other":"hace {0} trimestres"},"-1":"el trimestre pasado"},"quarter-short":{"0":"este trimestre","1":"el próximo trimestre","future":{"one":"dentro de {0} trim.","other":"dentro de {0} trim."},"past":{"one":"hace {0} trim.","other":"hace {0} trim."},"-1":"el trimestre pasado"},"quarter-narrow":{"0":"este trimestre","1":"el próximo trimestre","future":{"one":"dentro de {0} trim.","other":"dentro de {0} trim."},"past":{"one":"hace {0} trim.","other":"hace {0} trim."},"-1":"el trimestre pasado"},"month":{"0":"este mes","1":"el próximo mes","future":{"one":"dentro de {0} mes","other":"dentro de {0} meses"},"past":{"one":"hace {0} mes","other":"hace {0} meses"},"-1":"el mes pasado"},"month-short":{"0":"este mes","1":"el próximo mes","future":{"one":"dentro de {0} m","other":"dentro de {0} m"},"past":{"one":"hace {0} m","other":"hace {0} m"},"-1":"el mes pasado"},"month-narrow":{"0":"este mes","1":"el próximo mes","future":{"one":"dentro de {0} m","other":"dentro de {0} m"},"past":{"one":"hace {0} m","other":"hace {0} m"},"-1":"el mes pasado"},"week":{"0":"esta semana","1":"la próxima semana","future":{"one":"dentro de {0} semana","other":"dentro de {0} semanas"},"past":{"one":"hace {0} semana","other":"hace {0} semanas"},"-1":"la semana pasada"},"week-short":{"0":"esta sem.","1":"próx. sem.","future":{"one":"dentro de {0} sem.","other":"dentro de {0} sem."},"past":{"one":"hace {0} sem.","other":"hace {0} sem."},"-1":"sem. ant."},"week-narrow":{"0":"esta sem.","1":"próx. sem.","future":{"one":"dentro de {0} sem.","other":"dentro de {0} sem."},"past":{"one":"hace {0} sem.","other":"hace {0} sem."},"-1":"sem. ant."},"day":{"0":"hoy","1":"mañana","2":"pasado mañana","future":{"one":"dentro de {0} día","other":"dentro de {0} días"},"past":{"one":"hace {0} día","other":"hace {0} días"},"-2":"anteayer","-1":"ayer"},"day-short":{"0":"hoy","1":"mañana","2":"pasado mañana","future":{"one":"dentro de {0} día","other":"dentro de {0} días"},"past":{"one":"hace {0} día","other":"hace {0} días"},"-2":"anteayer","-1":"ayer"},"day-narrow":{"0":"hoy","1":"mañana","2":"pasado mañana","future":{"one":"dentro de {0} día","other":"dentro de {0} días"},"past":{"one":"hace {0} día","other":"hace {0} días"},"-2":"anteayer","-1":"ayer"},"hour":{"0":"esta hora","future":{"one":"dentro de {0} hora","other":"dentro de {0} horas"},"past":{"one":"hace {0} hora","other":"hace {0} horas"}},"hour-short":{"0":"esta hora","future":{"one":"dentro de {0} h","other":"dentro de {0} h"},"past":{"one":"hace {0} h","other":"hace {0} h"}},"hour-narrow":{"0":"esta hora","future":{"one":"dentro de {0} h","other":"dentro de {0} h"},"past":{"one":"hace {0} h","other":"hace {0} h"}},"minute":{"0":"este minuto","future":{"one":"dentro de {0} minuto","other":"dentro de {0} minutos"},"past":{"one":"hace {0} minuto","other":"hace {0} minutos"}},"minute-short":{"0":"este minuto","future":{"one":"dentro de {0} min","other":"dentro de {0} min"},"past":{"one":"hace {0} min","other":"hace {0} min"}},"minute-narrow":{"0":"este minuto","future":{"one":"dentro de {0} min","other":"dentro de {0} min"},"past":{"one":"hace {0} min","other":"hace {0} min"}},"second":{"0":"ahora","future":{"one":"dentro de {0} segundo","other":"dentro de {0} segundos"},"past":{"one":"hace {0} segundo","other":"hace {0} segundos"}},"second-short":{"0":"ahora","future":{"one":"dentro de {0} s","other":"dentro de {0} s"},"past":{"one":"hace {0} s","other":"hace {0} s"}},"second-narrow":{"0":"ahora","future":{"one":"dentro de {0} s","other":"dentro de {0} s"},"past":{"one":"hace {0} s","other":"hace {0} s"}}}},"availableLocales":["es-419","es-AR","es-BO","es-BR","es-BZ","es-CL","es-CO","es-CR","es-CU","es-DO","es-EA","es-EC","es-GQ","es-GT","es-HN","es-IC","es-MX","es-NI","es-PA","es-PE","es-PH","es-PR","es-PY","es-SV","es-US","es-UY","es-VE","es"],"aliases":{},"parentLocales":{"es-AR":"es-419","es-BO":"es-419","es-BR":"es-419","es-BZ":"es-419","es-CL":"es-419","es-CO":"es-419","es-CR":"es-419","es-CU":"es-419","es-DO":"es-419","es-EC":"es-419","es-GT":"es-419","es-HN":"es-419","es-MX":"es-419","es-NI":"es-419","es-PA":"es-419","es-PE":"es-419","es-PR":"es-419","es-PY":"es-419","es-SV":"es-419","es-US":"es-419","es-UY":"es-419","es-VE":"es-419"}}')},8385:function(I){"use strict";I.exports=JSON.parse('{"data":{"ses":{"nu":["latn"],"year":{"0":"this year","1":"next year","future":{"other":"+{0} y"},"past":{"other":"-{0} y"},"-1":"last year"},"year-short":{"0":"this year","1":"next year","future":{"other":"+{0} y"},"past":{"other":"-{0} y"},"-1":"last year"},"year-narrow":{"0":"this year","1":"next year","future":{"other":"+{0} y"},"past":{"other":"-{0} y"},"-1":"last year"},"quarter":{"0":"this quarter","1":"next quarter","future":{"other":"+{0} Q"},"past":{"other":"-{0} Q"},"-1":"last quarter"},"quarter-short":{"0":"this quarter","1":"next quarter","future":{"other":"+{0} Q"},"past":{"other":"-{0} Q"},"-1":"last quarter"},"quarter-narrow":{"0":"this quarter","1":"next quarter","future":{"other":"+{0} Q"},"past":{"other":"-{0} Q"},"-1":"last quarter"},"month":{"0":"this month","1":"next month","future":{"other":"+{0} m"},"past":{"other":"-{0} m"},"-1":"last month"},"month-short":{"0":"this month","1":"next month","future":{"other":"+{0} m"},"past":{"other":"-{0} m"},"-1":"last month"},"month-narrow":{"0":"this month","1":"next month","future":{"other":"+{0} m"},"past":{"other":"-{0} m"},"-1":"last month"},"week":{"0":"this week","1":"next week","future":{"other":"+{0} w"},"past":{"other":"-{0} w"},"-1":"last week"},"week-short":{"0":"this week","1":"next week","future":{"other":"+{0} w"},"past":{"other":"-{0} w"},"-1":"last week"},"week-narrow":{"0":"this week","1":"next week","future":{"other":"+{0} w"},"past":{"other":"-{0} w"},"-1":"last week"},"day":{"0":"Hõo","1":"Suba","future":{"other":"+{0} d"},"past":{"other":"-{0} d"},"-1":"Bi"},"day-short":{"0":"Hõo","1":"Suba","future":{"other":"+{0} d"},"past":{"other":"-{0} d"},"-1":"Bi"},"day-narrow":{"0":"Hõo","1":"Suba","future":{"other":"+{0} d"},"past":{"other":"-{0} d"},"-1":"Bi"},"hour":{"0":"this hour","future":{"other":"+{0} h"},"past":{"other":"-{0} h"}},"hour-short":{"0":"this hour","future":{"other":"+{0} h"},"past":{"other":"-{0} h"}},"hour-narrow":{"0":"this hour","future":{"other":"+{0} h"},"past":{"other":"-{0} h"}},"minute":{"0":"this minute","future":{"other":"+{0} min"},"past":{"other":"-{0} min"}},"minute-short":{"0":"this minute","future":{"other":"+{0} min"},"past":{"other":"-{0} min"}},"minute-narrow":{"0":"this minute","future":{"other":"+{0} min"},"past":{"other":"-{0} min"}},"second":{"0":"now","future":{"other":"+{0} s"},"past":{"other":"-{0} s"}},"second-short":{"0":"now","future":{"other":"+{0} s"},"past":{"other":"-{0} s"}},"second-narrow":{"0":"now","future":{"other":"+{0} s"},"past":{"other":"-{0} s"}}}},"availableLocales":["ses"],"aliases":{},"parentLocales":{}}')},1666:function(I,g,C){var B={"./en":8079,"./en.js":8079,"./en.json":7991,"./es":4033,"./es.js":4033,"./es.json":7684,"./ses":9584,"./ses.js":9584,"./ses.json":8385};function n(I){var g=Q(I);return C(g)}function Q(I){if(!C.o(B,I)){var g=new Error("Cannot find module '"+I+"'");throw g.code="MODULE_NOT_FOUND",g}return B[I]}n.keys=function(){return Object.keys(B)},n.resolve=Q,I.exports=n,n.id=1666},3012:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar __spreadArrays = this && this.__spreadArrays || function () {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) {\n s += arguments[i].length;\n }\n\n for (var r = Array(s), k = 0, i = 0; i < il; i++) {\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) {\n r[k] = a[j];\n }\n }\n\n return r;\n};\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n\nvar intl_utils_1 = __webpack_require__(2650);\n\nfunction validateInstance(instance, method) {\n if (!(instance instanceof PluralRules)) {\n throw new TypeError(\"Method Intl.PluralRules.prototype.\" + method + \" called on incompatible receiver \" + String(instance));\n }\n}\n/**\n * https://tc39.es/ecma402/#sec-torawprecision\n * @param x\n * @param minPrecision\n * @param maxPrecision\n */\n\n\nfunction toRawPrecision(x, minPrecision, maxPrecision) {\n var m = x.toPrecision(maxPrecision);\n\n if (~m.indexOf('.') && maxPrecision > minPrecision) {\n var cut = maxPrecision - minPrecision;\n\n while (cut > 0 && m[m.length - 1] === '0') {\n m = m.slice(0, m.length - 1);\n cut--;\n }\n\n if (m[m.length - 1] === '.') {\n return m.slice(0, m.length - 1);\n }\n }\n\n return m;\n}\n/**\n * https://tc39.es/ecma402/#sec-torawfixed\n * @param x\n * @param minInteger\n * @param minFraction\n * @param maxFraction\n */\n\n\nfunction toRawFixed(x, minInteger, minFraction, maxFraction) {\n var cut = maxFraction - minFraction;\n var m = x.toFixed(maxFraction);\n\n while (cut > 0 && m[m.length - 1] === '0') {\n m = m.slice(0, m.length - 1);\n cut--;\n }\n\n if (m[m.length - 1] === '.') {\n m = m.slice(0, m.length - 1);\n }\n\n var int = m.split('.')[0].length;\n\n if (int < minInteger) {\n var z = '';\n\n for (; z.length < minInteger - int; z += '0') {\n ;\n }\n\n m = z + m;\n }\n\n return m;\n}\n\nfunction formatNumericToString(internalSlotMap, pl, x) {\n var minimumSignificantDigits = intl_utils_1.getInternalSlot(internalSlotMap, pl, 'minimumSignificantDigits');\n var maximumSignificantDigits = intl_utils_1.getInternalSlot(internalSlotMap, pl, 'maximumSignificantDigits');\n\n if (minimumSignificantDigits !== undefined && maximumSignificantDigits !== undefined) {\n return toRawPrecision(x, minimumSignificantDigits, maximumSignificantDigits);\n }\n\n return toRawFixed(x, intl_utils_1.getInternalSlot(internalSlotMap, pl, 'minimumIntegerDigits'), intl_utils_1.getInternalSlot(internalSlotMap, pl, 'minimumFractionDigits'), intl_utils_1.getInternalSlot(internalSlotMap, pl, 'maximumFractionDigits'));\n}\n\nvar PluralRules =\n/** @class */\nfunction () {\n function PluralRules(locales, options) {\n // test262/test/intl402/RelativeTimeFormat/constructor/constructor/newtarget-undefined.js\n // Cannot use `new.target` bc of IE11 & TS transpiles it to something else\n var newTarget = this && this instanceof PluralRules ? this.constructor : void 0;\n\n if (!newTarget) {\n throw new TypeError(\"Intl.PluralRules must be called with 'new'\");\n }\n\n var requestedLocales = intl_utils_1.getCanonicalLocales(locales);\n var opt = Object.create(null);\n var opts = options === undefined ? Object.create(null) : intl_utils_1.toObject(options);\n intl_utils_1.setInternalSlot(PluralRules.__INTERNAL_SLOT_MAP__, this, 'initializedPluralRules', true);\n var matcher = intl_utils_1.getOption(opts, 'localeMatcher', 'string', ['best fit', 'lookup'], 'best fit');\n opt.localeMatcher = matcher;\n intl_utils_1.setInternalSlot(PluralRules.__INTERNAL_SLOT_MAP__, this, 'type', intl_utils_1.getOption(opts, 'type', 'string', ['cardinal', 'ordinal'], 'cardinal'));\n intl_utils_1.setNumberFormatDigitOptions(PluralRules.__INTERNAL_SLOT_MAP__, this, opts, 0, 3);\n var r = intl_utils_1.createResolveLocale(PluralRules.getDefaultLocale)(PluralRules.availableLocales, requestedLocales, opt, PluralRules.relevantExtensionKeys, PluralRules.localeData);\n intl_utils_1.setInternalSlot(PluralRules.__INTERNAL_SLOT_MAP__, this, 'locale', r.locale);\n }\n\n PluralRules.prototype.resolvedOptions = function () {\n var _this = this;\n\n validateInstance(this, 'resolvedOptions');\n var opts = Object.create(null);\n opts.locale = intl_utils_1.getInternalSlot(PluralRules.__INTERNAL_SLOT_MAP__, this, 'locale');\n opts.type = intl_utils_1.getInternalSlot(PluralRules.__INTERNAL_SLOT_MAP__, this, 'type');\n ['minimumIntegerDigits', 'minimumFractionDigits', 'maximumFractionDigits', 'minimumSignificantDigits', 'maximumSignificantDigits'].forEach(function (field) {\n var val = intl_utils_1.getInternalSlot(PluralRules.__INTERNAL_SLOT_MAP__, _this, field);\n\n if (val !== undefined) {\n opts[field] = val;\n }\n });\n opts.pluralCategories = __spreadArrays(PluralRules.localeData[opts.locale].categories[opts.type]);\n return opts;\n };\n\n PluralRules.prototype.select = function (val) {\n validateInstance(this, 'select');\n var locale = intl_utils_1.getInternalSlot(PluralRules.__INTERNAL_SLOT_MAP__, this, 'locale');\n var type = intl_utils_1.getInternalSlot(PluralRules.__INTERNAL_SLOT_MAP__, this, 'type');\n return PluralRules.localeData[locale].fn(formatNumericToString(PluralRules.__INTERNAL_SLOT_MAP__, this, Math.abs(Number(val))), type == 'ordinal');\n };\n\n PluralRules.prototype.toString = function () {\n return '[object Intl.PluralRules]';\n };\n\n PluralRules.supportedLocalesOf = function (locales, options) {\n return intl_utils_1.supportedLocales(PluralRules.availableLocales, intl_utils_1.getCanonicalLocales(locales), options);\n };\n\n PluralRules.__addLocaleData = function () {\n var data = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n data[_i] = arguments[_i];\n }\n\n var _loop_1 = function _loop_1(datum) {\n var availableLocales = Object.keys(__spreadArrays(datum.availableLocales, Object.keys(datum.aliases), Object.keys(datum.parentLocales)).reduce(function (all, k) {\n all[k] = true;\n return all;\n }, {}));\n availableLocales.forEach(function (locale) {\n try {\n PluralRules.localeData[locale] = intl_utils_1.unpackData(locale, datum);\n } catch (e) {\n if (intl_utils_1.isMissingLocaleDataError(e)) {\n // If we just don't have data for certain locale, that's ok\n return;\n }\n\n throw e;\n }\n });\n };\n\n for (var _a = 0, data_1 = data; _a < data_1.length; _a++) {\n var datum = data_1[_a];\n\n _loop_1(datum);\n }\n\n PluralRules.availableLocales = Object.keys(PluralRules.localeData);\n\n if (!PluralRules.__defaultLocale) {\n PluralRules.__defaultLocale = PluralRules.availableLocales[0];\n }\n };\n\n PluralRules.getDefaultLocale = function () {\n return PluralRules.__defaultLocale;\n };\n\n PluralRules.localeData = {};\n PluralRules.availableLocales = [];\n PluralRules.__defaultLocale = 'en';\n PluralRules.relevantExtensionKeys = [];\n PluralRules.polyfilled = true;\n PluralRules.__INTERNAL_SLOT_MAP__ = new WeakMap();\n return PluralRules;\n}();\n\nexports.PluralRules = PluralRules;\n\ntry {\n // https://github.com/tc39/test262/blob/master/test/intl402/PluralRules/length.js\n Object.defineProperty(PluralRules, 'length', {\n value: 0,\n writable: false,\n enumerable: false,\n configurable: true\n }); // https://github.com/tc39/test262/blob/master/test/intl402/RelativeTimeFormat/constructor/length.js\n\n Object.defineProperty(PluralRules.prototype.constructor, 'length', {\n value: 0,\n writable: false,\n enumerable: false,\n configurable: true\n }); // https://github.com/tc39/test262/blob/master/test/intl402/RelativeTimeFormat/constructor/supportedLocalesOf/length.js\n\n Object.defineProperty(PluralRules.supportedLocalesOf, 'length', {\n value: 1,\n writable: false,\n enumerable: false,\n configurable: true\n });\n} catch (ex) {// Meta fixes for test262\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AZm9ybWF0anMvaW50bC1wbHVyYWxydWxlcy9kaXN0L2NvcmUuanM/NjIxMiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLCtDQUErQyxRQUFRO0FBQ3ZEO0FBQ0E7O0FBRUEsc0NBQXNDLFFBQVE7QUFDOUMsb0RBQW9ELFFBQVE7QUFDNUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsOENBQTZDO0FBQzdDO0FBQ0EsQ0FBQyxFQUFDOztBQUVGLG1CQUFtQixtQkFBTyxDQUFDLElBQXNCOztBQUVqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsVUFBVSw2QkFBNkI7QUFDdkM7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxvQkFBb0IsdUJBQXVCO0FBQzNDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLElBQUk7QUFDWDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQSxtQ0FBbUMsb0JBQW9CO0FBQ3ZEOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCxtQkFBbUI7O0FBRW5CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRyxFQUFFOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHLEVBQUU7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDLGFBQWE7QUFDZCIsImZpbGUiOiIzMDEyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfX3NwcmVhZEFycmF5cyA9IHRoaXMgJiYgdGhpcy5fX3NwcmVhZEFycmF5cyB8fCBmdW5jdGlvbiAoKSB7XG4gIGZvciAodmFyIHMgPSAwLCBpID0gMCwgaWwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgaWw7IGkrKykge1xuICAgIHMgKz0gYXJndW1lbnRzW2ldLmxlbmd0aDtcbiAgfVxuXG4gIGZvciAodmFyIHIgPSBBcnJheShzKSwgayA9IDAsIGkgPSAwOyBpIDwgaWw7IGkrKykge1xuICAgIGZvciAodmFyIGEgPSBhcmd1bWVudHNbaV0sIGogPSAwLCBqbCA9IGEubGVuZ3RoOyBqIDwgamw7IGorKywgaysrKSB7XG4gICAgICByW2tdID0gYVtqXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcjtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBpbnRsX3V0aWxzXzEgPSByZXF1aXJlKFwiQGZvcm1hdGpzL2ludGwtdXRpbHNcIik7XG5cbmZ1bmN0aW9uIHZhbGlkYXRlSW5zdGFuY2UoaW5zdGFuY2UsIG1ldGhvZCkge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIFBsdXJhbFJ1bGVzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJNZXRob2QgSW50bC5QbHVyYWxSdWxlcy5wcm90b3R5cGUuXCIgKyBtZXRob2QgKyBcIiBjYWxsZWQgb24gaW5jb21wYXRpYmxlIHJlY2VpdmVyIFwiICsgU3RyaW5nKGluc3RhbmNlKSk7XG4gIH1cbn1cbi8qKlxuICogaHR0cHM6Ly90YzM5LmVzL2VjbWE0MDIvI3NlYy10b3Jhd3ByZWNpc2lvblxuICogQHBhcmFtIHhcbiAqIEBwYXJhbSBtaW5QcmVjaXNpb25cbiAqIEBwYXJhbSBtYXhQcmVjaXNpb25cbiAqL1xuXG5cbmZ1bmN0aW9uIHRvUmF3UHJlY2lzaW9uKHgsIG1pblByZWNpc2lvbiwgbWF4UHJlY2lzaW9uKSB7XG4gIHZhciBtID0geC50b1ByZWNpc2lvbihtYXhQcmVjaXNpb24pO1xuXG4gIGlmICh+bS5pbmRleE9mKCcuJykgJiYgbWF4UHJlY2lzaW9uID4gbWluUHJlY2lzaW9uKSB7XG4gICAgdmFyIGN1dCA9IG1heFByZWNpc2lvbiAtIG1pblByZWNpc2lvbjtcblxuICAgIHdoaWxlIChjdXQgPiAwICYmIG1bbS5sZW5ndGggLSAxXSA9PT0gJzAnKSB7XG4gICAgICBtID0gbS5zbGljZSgwLCBtLmxlbmd0aCAtIDEpO1xuICAgICAgY3V0LS07XG4gICAgfVxuXG4gICAgaWYgKG1bbS5sZW5ndGggLSAxXSA9PT0gJy4nKSB7XG4gICAgICByZXR1cm4gbS5zbGljZSgwLCBtLmxlbmd0aCAtIDEpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtO1xufVxuLyoqXG4gKiBodHRwczovL3RjMzkuZXMvZWNtYTQwMi8jc2VjLXRvcmF3Zml4ZWRcbiAqIEBwYXJhbSB4XG4gKiBAcGFyYW0gbWluSW50ZWdlclxuICogQHBhcmFtIG1pbkZyYWN0aW9uXG4gKiBAcGFyYW0gbWF4RnJhY3Rpb25cbiAqL1xuXG5cbmZ1bmN0aW9uIHRvUmF3Rml4ZWQoeCwgbWluSW50ZWdlciwgbWluRnJhY3Rpb24sIG1heEZyYWN0aW9uKSB7XG4gIHZhciBjdXQgPSBtYXhGcmFjdGlvbiAtIG1pbkZyYWN0aW9uO1xuICB2YXIgbSA9IHgudG9GaXhlZChtYXhGcmFjdGlvbik7XG5cbiAgd2hpbGUgKGN1dCA+IDAgJiYgbVttLmxlbmd0aCAtIDFdID09PSAnMCcpIHtcbiAgICBtID0gbS5zbGljZSgwLCBtLmxlbmd0aCAtIDEpO1xuICAgIGN1dC0tO1xuICB9XG5cbiAgaWYgKG1bbS5sZW5ndGggLSAxXSA9PT0gJy4nKSB7XG4gICAgbSA9IG0uc2xpY2UoMCwgbS5sZW5ndGggLSAxKTtcbiAgfVxuXG4gIHZhciBpbnQgPSBtLnNwbGl0KCcuJylbMF0ubGVuZ3RoO1xuXG4gIGlmIChpbnQgPCBtaW5JbnRlZ2VyKSB7XG4gICAgdmFyIHogPSAnJztcblxuICAgIGZvciAoOyB6Lmxlbmd0aCA8IG1pbkludGVnZXIgLSBpbnQ7IHogKz0gJzAnKSB7XG4gICAgICA7XG4gICAgfVxuXG4gICAgbSA9IHogKyBtO1xuICB9XG5cbiAgcmV0dXJuIG07XG59XG5cbmZ1bmN0aW9uIGZvcm1hdE51bWVyaWNUb1N0cmluZyhpbnRlcm5hbFNsb3RNYXAsIHBsLCB4KSB7XG4gIHZhciBtaW5pbXVtU2lnbmlmaWNhbnREaWdpdHMgPSBpbnRsX3V0aWxzXzEuZ2V0SW50ZXJuYWxTbG90KGludGVybmFsU2xvdE1hcCwgcGwsICdtaW5pbXVtU2lnbmlmaWNhbnREaWdpdHMnKTtcbiAgdmFyIG1heGltdW1TaWduaWZpY2FudERpZ2l0cyA9IGludGxfdXRpbHNfMS5nZXRJbnRlcm5hbFNsb3QoaW50ZXJuYWxTbG90TWFwLCBwbCwgJ21heGltdW1TaWduaWZpY2FudERpZ2l0cycpO1xuXG4gIGlmIChtaW5pbXVtU2lnbmlmaWNhbnREaWdpdHMgIT09IHVuZGVmaW5lZCAmJiBtYXhpbXVtU2lnbmlmaWNhbnREaWdpdHMgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB0b1Jhd1ByZWNpc2lvbih4LCBtaW5pbXVtU2lnbmlmaWNhbnREaWdpdHMsIG1heGltdW1TaWduaWZpY2FudERpZ2l0cyk7XG4gIH1cblxuICByZXR1cm4gdG9SYXdGaXhlZCh4LCBpbnRsX3V0aWxzXzEuZ2V0SW50ZXJuYWxTbG90KGludGVybmFsU2xvdE1hcCwgcGwsICdtaW5pbXVtSW50ZWdlckRpZ2l0cycpLCBpbnRsX3V0aWxzXzEuZ2V0SW50ZXJuYWxTbG90KGludGVybmFsU2xvdE1hcCwgcGwsICdtaW5pbXVtRnJhY3Rpb25EaWdpdHMnKSwgaW50bF91dGlsc18xLmdldEludGVybmFsU2xvdChpbnRlcm5hbFNsb3RNYXAsIHBsLCAnbWF4aW11bUZyYWN0aW9uRGlnaXRzJykpO1xufVxuXG52YXIgUGx1cmFsUnVsZXMgPVxuLyoqIEBjbGFzcyAqL1xuZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBQbHVyYWxSdWxlcyhsb2NhbGVzLCBvcHRpb25zKSB7XG4gICAgLy8gdGVzdDI2Mi90ZXN0L2ludGw0MDIvUmVsYXRpdmVUaW1lRm9ybWF0L2NvbnN0cnVjdG9yL2NvbnN0cnVjdG9yL25ld3RhcmdldC11bmRlZmluZWQuanNcbiAgICAvLyBDYW5ub3QgdXNlIGBuZXcudGFyZ2V0YCBiYyBvZiBJRTExICYgVFMgdHJhbnNwaWxlcyBpdCB0byBzb21ldGhpbmcgZWxzZVxuICAgIHZhciBuZXdUYXJnZXQgPSB0aGlzICYmIHRoaXMgaW5zdGFuY2VvZiBQbHVyYWxSdWxlcyA/IHRoaXMuY29uc3RydWN0b3IgOiB2b2lkIDA7XG5cbiAgICBpZiAoIW5ld1RhcmdldCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludGwuUGx1cmFsUnVsZXMgbXVzdCBiZSBjYWxsZWQgd2l0aCAnbmV3J1wiKTtcbiAgICB9XG5cbiAgICB2YXIgcmVxdWVzdGVkTG9jYWxlcyA9IGludGxfdXRpbHNfMS5nZXRDYW5vbmljYWxMb2NhbGVzKGxvY2FsZXMpO1xuICAgIHZhciBvcHQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHZhciBvcHRzID0gb3B0aW9ucyA9PT0gdW5kZWZpbmVkID8gT2JqZWN0LmNyZWF0ZShudWxsKSA6IGludGxfdXRpbHNfMS50b09iamVjdChvcHRpb25zKTtcbiAgICBpbnRsX3V0aWxzXzEuc2V0SW50ZXJuYWxTbG90KFBsdXJhbFJ1bGVzLl9fSU5URVJOQUxfU0xPVF9NQVBfXywgdGhpcywgJ2luaXRpYWxpemVkUGx1cmFsUnVsZXMnLCB0cnVlKTtcbiAgICB2YXIgbWF0Y2hlciA9IGludGxfdXRpbHNfMS5nZXRPcHRpb24ob3B0cywgJ2xvY2FsZU1hdGNoZXInLCAnc3RyaW5nJywgWydiZXN0IGZpdCcsICdsb29rdXAnXSwgJ2Jlc3QgZml0Jyk7XG4gICAgb3B0LmxvY2FsZU1hdGNoZXIgPSBtYXRjaGVyO1xuICAgIGludGxfdXRpbHNfMS5zZXRJbnRlcm5hbFNsb3QoUGx1cmFsUnVsZXMuX19JTlRFUk5BTF9TTE9UX01BUF9fLCB0aGlzLCAndHlwZScsIGludGxfdXRpbHNfMS5nZXRPcHRpb24ob3B0cywgJ3R5cGUnLCAnc3RyaW5nJywgWydjYXJkaW5hbCcsICdvcmRpbmFsJ10sICdjYXJkaW5hbCcpKTtcbiAgICBpbnRsX3V0aWxzXzEuc2V0TnVtYmVyRm9ybWF0RGlnaXRPcHRpb25zKFBsdXJhbFJ1bGVzLl9fSU5URVJOQUxfU0xPVF9NQVBfXywgdGhpcywgb3B0cywgMCwgMyk7XG4gICAgdmFyIHIgPSBpbnRsX3V0aWxzXzEuY3JlYXRlUmVzb2x2ZUxvY2FsZShQbHVyYWxSdWxlcy5nZXREZWZhdWx0TG9jYWxlKShQbHVyYWxSdWxlcy5hdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzLCBvcHQsIFBsdXJhbFJ1bGVzLnJlbGV2YW50RXh0ZW5zaW9uS2V5cywgUGx1cmFsUnVsZXMubG9jYWxlRGF0YSk7XG4gICAgaW50bF91dGlsc18xLnNldEludGVybmFsU2xvdChQbHVyYWxSdWxlcy5fX0lOVEVSTkFMX1NMT1RfTUFQX18sIHRoaXMsICdsb2NhbGUnLCByLmxvY2FsZSk7XG4gIH1cblxuICBQbHVyYWxSdWxlcy5wcm90b3R5cGUucmVzb2x2ZWRPcHRpb25zID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB2YWxpZGF0ZUluc3RhbmNlKHRoaXMsICdyZXNvbHZlZE9wdGlvbnMnKTtcbiAgICB2YXIgb3B0cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgb3B0cy5sb2NhbGUgPSBpbnRsX3V0aWxzXzEuZ2V0SW50ZXJuYWxTbG90KFBsdXJhbFJ1bGVzLl9fSU5URVJOQUxfU0xPVF9NQVBfXywgdGhpcywgJ2xvY2FsZScpO1xuICAgIG9wdHMudHlwZSA9IGludGxfdXRpbHNfMS5nZXRJbnRlcm5hbFNsb3QoUGx1cmFsUnVsZXMuX19JTlRFUk5BTF9TTE9UX01BUF9fLCB0aGlzLCAndHlwZScpO1xuICAgIFsnbWluaW11bUludGVnZXJEaWdpdHMnLCAnbWluaW11bUZyYWN0aW9uRGlnaXRzJywgJ21heGltdW1GcmFjdGlvbkRpZ2l0cycsICdtaW5pbXVtU2lnbmlmaWNhbnREaWdpdHMnLCAnbWF4aW11bVNpZ25pZmljYW50RGlnaXRzJ10uZm9yRWFjaChmdW5jdGlvbiAoZmllbGQpIHtcbiAgICAgIHZhciB2YWwgPSBpbnRsX3V0aWxzXzEuZ2V0SW50ZXJuYWxTbG90KFBsdXJhbFJ1bGVzLl9fSU5URVJOQUxfU0xPVF9NQVBfXywgX3RoaXMsIGZpZWxkKTtcblxuICAgICAgaWYgKHZhbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG9wdHNbZmllbGRdID0gdmFsO1xuICAgICAgfVxuICAgIH0pO1xuICAgIG9wdHMucGx1cmFsQ2F0ZWdvcmllcyA9IF9fc3ByZWFkQXJyYXlzKFBsdXJhbFJ1bGVzLmxvY2FsZURhdGFbb3B0cy5sb2NhbGVdLmNhdGVnb3JpZXNbb3B0cy50eXBlXSk7XG4gICAgcmV0dXJuIG9wdHM7XG4gIH07XG5cbiAgUGx1cmFsUnVsZXMucHJvdG90eXBlLnNlbGVjdCA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICB2YWxpZGF0ZUluc3RhbmNlKHRoaXMsICdzZWxlY3QnKTtcbiAgICB2YXIgbG9jYWxlID0gaW50bF91dGlsc18xLmdldEludGVybmFsU2xvdChQbHVyYWxSdWxlcy5fX0lOVEVSTkFMX1NMT1RfTUFQX18sIHRoaXMsICdsb2NhbGUnKTtcbiAgICB2YXIgdHlwZSA9IGludGxfdXRpbHNfMS5nZXRJbnRlcm5hbFNsb3QoUGx1cmFsUnVsZXMuX19JTlRFUk5BTF9TTE9UX01BUF9fLCB0aGlzLCAndHlwZScpO1xuICAgIHJldHVybiBQbHVyYWxSdWxlcy5sb2NhbGVEYXRhW2xvY2FsZV0uZm4oZm9ybWF0TnVtZXJpY1RvU3RyaW5nKFBsdXJhbFJ1bGVzLl9fSU5URVJOQUxfU0xPVF9NQVBfXywgdGhpcywgTWF0aC5hYnMoTnVtYmVyKHZhbCkpKSwgdHlwZSA9PSAnb3JkaW5hbCcpO1xuICB9O1xuXG4gIFBsdXJhbFJ1bGVzLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gJ1tvYmplY3QgSW50bC5QbHVyYWxSdWxlc10nO1xuICB9O1xuXG4gIFBsdXJhbFJ1bGVzLnN1cHBvcnRlZExvY2FsZXNPZiA9IGZ1bmN0aW9uIChsb2NhbGVzLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIGludGxfdXRpbHNfMS5zdXBwb3J0ZWRMb2NhbGVzKFBsdXJhbFJ1bGVzLmF2YWlsYWJsZUxvY2FsZXMsIGludGxfdXRpbHNfMS5nZXRDYW5vbmljYWxMb2NhbGVzKGxvY2FsZXMpLCBvcHRpb25zKTtcbiAgfTtcblxuICBQbHVyYWxSdWxlcy5fX2FkZExvY2FsZURhdGEgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGRhdGEgPSBbXTtcblxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICBkYXRhW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuXG4gICAgdmFyIF9sb29wXzEgPSBmdW5jdGlvbiBfbG9vcF8xKGRhdHVtKSB7XG4gICAgICB2YXIgYXZhaWxhYmxlTG9jYWxlcyA9IE9iamVjdC5rZXlzKF9fc3ByZWFkQXJyYXlzKGRhdHVtLmF2YWlsYWJsZUxvY2FsZXMsIE9iamVjdC5rZXlzKGRhdHVtLmFsaWFzZXMpLCBPYmplY3Qua2V5cyhkYXR1bS5wYXJlbnRMb2NhbGVzKSkucmVkdWNlKGZ1bmN0aW9uIChhbGwsIGspIHtcbiAgICAgICAgYWxsW2tdID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGFsbDtcbiAgICAgIH0sIHt9KSk7XG4gICAgICBhdmFpbGFibGVMb2NhbGVzLmZvckVhY2goZnVuY3Rpb24gKGxvY2FsZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIFBsdXJhbFJ1bGVzLmxvY2FsZURhdGFbbG9jYWxlXSA9IGludGxfdXRpbHNfMS51bnBhY2tEYXRhKGxvY2FsZSwgZGF0dW0pO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgaWYgKGludGxfdXRpbHNfMS5pc01pc3NpbmdMb2NhbGVEYXRhRXJyb3IoZSkpIHtcbiAgICAgICAgICAgIC8vIElmIHdlIGp1c3QgZG9uJ3QgaGF2ZSBkYXRhIGZvciBjZXJ0YWluIGxvY2FsZSwgdGhhdCdzIG9rXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGZvciAodmFyIF9hID0gMCwgZGF0YV8xID0gZGF0YTsgX2EgPCBkYXRhXzEubGVuZ3RoOyBfYSsrKSB7XG4gICAgICB2YXIgZGF0dW0gPSBkYXRhXzFbX2FdO1xuXG4gICAgICBfbG9vcF8xKGRhdHVtKTtcbiAgICB9XG5cbiAgICBQbHVyYWxSdWxlcy5hdmFpbGFibGVMb2NhbGVzID0gT2JqZWN0LmtleXMoUGx1cmFsUnVsZXMubG9jYWxlRGF0YSk7XG5cbiAgICBpZiAoIVBsdXJhbFJ1bGVzLl9fZGVmYXVsdExvY2FsZSkge1xuICAgICAgUGx1cmFsUnVsZXMuX19kZWZhdWx0TG9jYWxlID0gUGx1cmFsUnVsZXMuYXZhaWxhYmxlTG9jYWxlc1swXTtcbiAgICB9XG4gIH07XG5cbiAgUGx1cmFsUnVsZXMuZ2V0RGVmYXVsdExvY2FsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gUGx1cmFsUnVsZXMuX19kZWZhdWx0TG9jYWxlO1xuICB9O1xuXG4gIFBsdXJhbFJ1bGVzLmxvY2FsZURhdGEgPSB7fTtcbiAgUGx1cmFsUnVsZXMuYXZhaWxhYmxlTG9jYWxlcyA9IFtdO1xuICBQbHVyYWxSdWxlcy5fX2RlZmF1bHRMb2NhbGUgPSAnZW4nO1xuICBQbHVyYWxSdWxlcy5yZWxldmFudEV4dGVuc2lvbktleXMgPSBbXTtcbiAgUGx1cmFsUnVsZXMucG9seWZpbGxlZCA9IHRydWU7XG4gIFBsdXJhbFJ1bGVzLl9fSU5URVJOQUxfU0xPVF9NQVBfXyA9IG5ldyBXZWFrTWFwKCk7XG4gIHJldHVybiBQbHVyYWxSdWxlcztcbn0oKTtcblxuZXhwb3J0cy5QbHVyYWxSdWxlcyA9IFBsdXJhbFJ1bGVzO1xuXG50cnkge1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS90ZXN0MjYyL2Jsb2IvbWFzdGVyL3Rlc3QvaW50bDQwMi9QbHVyYWxSdWxlcy9sZW5ndGguanNcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBsdXJhbFJ1bGVzLCAnbGVuZ3RoJywge1xuICAgIHZhbHVlOiAwLFxuICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSk7IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Rlc3QyNjIvYmxvYi9tYXN0ZXIvdGVzdC9pbnRsNDAyL1JlbGF0aXZlVGltZUZvcm1hdC9jb25zdHJ1Y3Rvci9sZW5ndGguanNcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUGx1cmFsUnVsZXMucHJvdG90eXBlLmNvbnN0cnVjdG9yLCAnbGVuZ3RoJywge1xuICAgIHZhbHVlOiAwLFxuICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSk7IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Rlc3QyNjIvYmxvYi9tYXN0ZXIvdGVzdC9pbnRsNDAyL1JlbGF0aXZlVGltZUZvcm1hdC9jb25zdHJ1Y3Rvci9zdXBwb3J0ZWRMb2NhbGVzT2YvbGVuZ3RoLmpzXG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBsdXJhbFJ1bGVzLnN1cHBvcnRlZExvY2FsZXNPZiwgJ2xlbmd0aCcsIHtcbiAgICB2YWx1ZTogMSxcbiAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pO1xufSBjYXRjaCAoZXgpIHsvLyBNZXRhIGZpeGVzIGZvciB0ZXN0MjYyXG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3012\n")},4574:function(){eval('/* @generated */\n// prettier-ignore\nif (Intl.PluralRules && typeof Intl.PluralRules.__addLocaleData === \'function\') {\n Intl.PluralRules.__addLocaleData({\n "data": {\n "en": {\n "categories": {\n "cardinal": ["one", "other"],\n "ordinal": ["one", "two", "few", "other"]\n },\n "fn": function fn(n, ord) {\n var s = String(n).split(\'.\'),\n v0 = !s[1],\n t0 = Number(s[0]) == n,\n n10 = t0 && s[0].slice(-1),\n n100 = t0 && s[0].slice(-2);\n if (ord) return n10 == 1 && n100 != 11 ? \'one\' : n10 == 2 && n100 != 12 ? \'two\' : n10 == 3 && n100 != 13 ? \'few\' : \'other\';\n return n == 1 && v0 ? \'one\' : \'other\';\n }\n }\n },\n "aliases": {},\n "parentLocales": {\n "en-150": "en-001",\n "en-AG": "en-001",\n "en-AI": "en-001",\n "en-AU": "en-001",\n "en-BB": "en-001",\n "en-BM": "en-001",\n "en-BS": "en-001",\n "en-BW": "en-001",\n "en-BZ": "en-001",\n "en-CA": "en-001",\n "en-CC": "en-001",\n "en-CK": "en-001",\n "en-CM": "en-001",\n "en-CX": "en-001",\n "en-CY": "en-001",\n "en-DG": "en-001",\n "en-DM": "en-001",\n "en-ER": "en-001",\n "en-FJ": "en-001",\n "en-FK": "en-001",\n "en-FM": "en-001",\n "en-GB": "en-001",\n "en-GD": "en-001",\n "en-GG": "en-001",\n "en-GH": "en-001",\n "en-GI": "en-001",\n "en-GM": "en-001",\n "en-GY": "en-001",\n "en-HK": "en-001",\n "en-IE": "en-001",\n "en-IL": "en-001",\n "en-IM": "en-001",\n "en-IN": "en-001",\n "en-IO": "en-001",\n "en-JE": "en-001",\n "en-JM": "en-001",\n "en-KE": "en-001",\n "en-KI": "en-001",\n "en-KN": "en-001",\n "en-KY": "en-001",\n "en-LC": "en-001",\n "en-LR": "en-001",\n "en-LS": "en-001",\n "en-MG": "en-001",\n "en-MO": "en-001",\n "en-MS": "en-001",\n "en-MT": "en-001",\n "en-MU": "en-001",\n "en-MW": "en-001",\n "en-MY": "en-001",\n "en-NA": "en-001",\n "en-NF": "en-001",\n "en-NG": "en-001",\n "en-NR": "en-001",\n "en-NU": "en-001",\n "en-NZ": "en-001",\n "en-PG": "en-001",\n "en-PH": "en-001",\n "en-PK": "en-001",\n "en-PN": "en-001",\n "en-PW": "en-001",\n "en-RW": "en-001",\n "en-SB": "en-001",\n "en-SC": "en-001",\n "en-SD": "en-001",\n "en-SG": "en-001",\n "en-SH": "en-001",\n "en-SL": "en-001",\n "en-SS": "en-001",\n "en-SX": "en-001",\n "en-SZ": "en-001",\n "en-TC": "en-001",\n "en-TK": "en-001",\n "en-TO": "en-001",\n "en-TT": "en-001",\n "en-TV": "en-001",\n "en-TZ": "en-001",\n "en-UG": "en-001",\n "en-VC": "en-001",\n "en-VG": "en-001",\n "en-VU": "en-001",\n "en-WS": "en-001",\n "en-ZA": "en-001",\n "en-ZM": "en-001",\n "en-ZW": "en-001",\n "en-AT": "en-150",\n "en-BE": "en-150",\n "en-CH": "en-150",\n "en-DE": "en-150",\n "en-DK": "en-150",\n "en-FI": "en-150",\n "en-NL": "en-150",\n "en-SE": "en-150",\n "en-SI": "en-150"\n },\n "availableLocales": ["en"]\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AZm9ybWF0anMvaW50bC1wbHVyYWxydWxlcy9kaXN0L2xvY2FsZS1kYXRhL2VuLmpzPzQ3N2MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsR0FBRztBQUNIIiwiZmlsZSI6IjQ1NzQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBAZ2VuZXJhdGVkICovXG4vLyBwcmV0dGllci1pZ25vcmVcbmlmIChJbnRsLlBsdXJhbFJ1bGVzICYmIHR5cGVvZiBJbnRsLlBsdXJhbFJ1bGVzLl9fYWRkTG9jYWxlRGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xuICBJbnRsLlBsdXJhbFJ1bGVzLl9fYWRkTG9jYWxlRGF0YSh7XG4gICAgXCJkYXRhXCI6IHtcbiAgICAgIFwiZW5cIjoge1xuICAgICAgICBcImNhdGVnb3JpZXNcIjoge1xuICAgICAgICAgIFwiY2FyZGluYWxcIjogW1wib25lXCIsIFwib3RoZXJcIl0sXG4gICAgICAgICAgXCJvcmRpbmFsXCI6IFtcIm9uZVwiLCBcInR3b1wiLCBcImZld1wiLCBcIm90aGVyXCJdXG4gICAgICAgIH0sXG4gICAgICAgIFwiZm5cIjogZnVuY3Rpb24gZm4obiwgb3JkKSB7XG4gICAgICAgICAgdmFyIHMgPSBTdHJpbmcobikuc3BsaXQoJy4nKSxcbiAgICAgICAgICAgICAgdjAgPSAhc1sxXSxcbiAgICAgICAgICAgICAgdDAgPSBOdW1iZXIoc1swXSkgPT0gbixcbiAgICAgICAgICAgICAgbjEwID0gdDAgJiYgc1swXS5zbGljZSgtMSksXG4gICAgICAgICAgICAgIG4xMDAgPSB0MCAmJiBzWzBdLnNsaWNlKC0yKTtcbiAgICAgICAgICBpZiAob3JkKSByZXR1cm4gbjEwID09IDEgJiYgbjEwMCAhPSAxMSA/ICdvbmUnIDogbjEwID09IDIgJiYgbjEwMCAhPSAxMiA/ICd0d28nIDogbjEwID09IDMgJiYgbjEwMCAhPSAxMyA/ICdmZXcnIDogJ290aGVyJztcbiAgICAgICAgICByZXR1cm4gbiA9PSAxICYmIHYwID8gJ29uZScgOiAnb3RoZXInO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBcImFsaWFzZXNcIjoge30sXG4gICAgXCJwYXJlbnRMb2NhbGVzXCI6IHtcbiAgICAgIFwiZW4tMTUwXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUFHXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUFJXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUFVXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUJCXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUJNXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUJTXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUJXXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUJaXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUNBXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUNDXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUNLXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUNNXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUNYXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUNZXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLURHXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLURNXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUVSXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUZKXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUZLXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUZNXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUdCXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUdEXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUdHXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUdIXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUdJXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUdNXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUdZXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUhLXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUlFXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUlMXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUlNXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUlOXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUlPXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUpFXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUpNXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUtFXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUtJXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUtOXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUtZXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUxDXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUxSXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUxTXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLU1HXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLU1PXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLU1TXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLU1UXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLU1VXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLU1XXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLU1ZXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLU5BXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLU5GXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLU5HXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLU5SXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLU5VXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLU5aXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVBHXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVBIXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVBLXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVBOXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVBXXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVJXXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVNCXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVNDXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVNEXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVNHXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVNIXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVNMXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVNTXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVNYXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVNaXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVRDXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVRLXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVRPXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVRUXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVRWXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVRaXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVVHXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVZDXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVZHXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVZVXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVdTXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVpBXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVpNXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVpXXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUFUXCI6IFwiZW4tMTUwXCIsXG4gICAgICBcImVuLUJFXCI6IFwiZW4tMTUwXCIsXG4gICAgICBcImVuLUNIXCI6IFwiZW4tMTUwXCIsXG4gICAgICBcImVuLURFXCI6IFwiZW4tMTUwXCIsXG4gICAgICBcImVuLURLXCI6IFwiZW4tMTUwXCIsXG4gICAgICBcImVuLUZJXCI6IFwiZW4tMTUwXCIsXG4gICAgICBcImVuLU5MXCI6IFwiZW4tMTUwXCIsXG4gICAgICBcImVuLVNFXCI6IFwiZW4tMTUwXCIsXG4gICAgICBcImVuLVNJXCI6IFwiZW4tMTUwXCJcbiAgICB9LFxuICAgIFwiYXZhaWxhYmxlTG9jYWxlc1wiOiBbXCJlblwiXVxuICB9KTtcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4574\n')},3745:function(){eval('/* @generated */\n// prettier-ignore\nif (Intl.PluralRules && typeof Intl.PluralRules.__addLocaleData === \'function\') {\n Intl.PluralRules.__addLocaleData({\n "data": {\n "es": {\n "categories": {\n "cardinal": ["one", "other"],\n "ordinal": ["other"]\n },\n "fn": function fn(n, ord) {\n if (ord) return \'other\';\n return n == 1 ? \'one\' : \'other\';\n }\n }\n },\n "aliases": {},\n "parentLocales": {\n "es-AR": "es-419",\n "es-BO": "es-419",\n "es-BR": "es-419",\n "es-BZ": "es-419",\n "es-CL": "es-419",\n "es-CO": "es-419",\n "es-CR": "es-419",\n "es-CU": "es-419",\n "es-DO": "es-419",\n "es-EC": "es-419",\n "es-GT": "es-419",\n "es-HN": "es-419",\n "es-MX": "es-419",\n "es-NI": "es-419",\n "es-PA": "es-419",\n "es-PE": "es-419",\n "es-PR": "es-419",\n "es-PY": "es-419",\n "es-SV": "es-419",\n "es-US": "es-419",\n "es-UY": "es-419",\n "es-VE": "es-419"\n },\n "availableLocales": ["es"]\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AZm9ybWF0anMvaW50bC1wbHVyYWxydWxlcy9kaXN0L2xvY2FsZS1kYXRhL2VzLmpzPzNmZTYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxHQUFHO0FBQ0giLCJmaWxlIjoiMzc0NS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIEBnZW5lcmF0ZWQgKi9cbi8vIHByZXR0aWVyLWlnbm9yZVxuaWYgKEludGwuUGx1cmFsUnVsZXMgJiYgdHlwZW9mIEludGwuUGx1cmFsUnVsZXMuX19hZGRMb2NhbGVEYXRhID09PSAnZnVuY3Rpb24nKSB7XG4gIEludGwuUGx1cmFsUnVsZXMuX19hZGRMb2NhbGVEYXRhKHtcbiAgICBcImRhdGFcIjoge1xuICAgICAgXCJlc1wiOiB7XG4gICAgICAgIFwiY2F0ZWdvcmllc1wiOiB7XG4gICAgICAgICAgXCJjYXJkaW5hbFwiOiBbXCJvbmVcIiwgXCJvdGhlclwiXSxcbiAgICAgICAgICBcIm9yZGluYWxcIjogW1wib3RoZXJcIl1cbiAgICAgICAgfSxcbiAgICAgICAgXCJmblwiOiBmdW5jdGlvbiBmbihuLCBvcmQpIHtcbiAgICAgICAgICBpZiAob3JkKSByZXR1cm4gJ290aGVyJztcbiAgICAgICAgICByZXR1cm4gbiA9PSAxID8gJ29uZScgOiAnb3RoZXInO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBcImFsaWFzZXNcIjoge30sXG4gICAgXCJwYXJlbnRMb2NhbGVzXCI6IHtcbiAgICAgIFwiZXMtQVJcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtQk9cIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtQlJcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtQlpcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtQ0xcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtQ09cIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtQ1JcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtQ1VcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtRE9cIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtRUNcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtR1RcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtSE5cIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtTVhcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtTklcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtUEFcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtUEVcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtUFJcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtUFlcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtU1ZcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtVVNcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtVVlcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtVkVcIjogXCJlcy00MTlcIlxuICAgIH0sXG4gICAgXCJhdmFpbGFibGVMb2NhbGVzXCI6IFtcImVzXCJdXG4gIH0pO1xufSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3745\n')},6867:function(){eval('/* @generated */\n// prettier-ignore\nif (Intl.PluralRules && typeof Intl.PluralRules.__addLocaleData === \'function\') {\n Intl.PluralRules.__addLocaleData({\n "data": {\n "ses": {\n "categories": {\n "cardinal": ["other"],\n "ordinal": ["other"]\n },\n "fn": function fn(n, ord) {\n return \'other\';\n }\n }\n },\n "aliases": {},\n "parentLocales": {},\n "availableLocales": ["ses"]\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AZm9ybWF0anMvaW50bC1wbHVyYWxydWxlcy9kaXN0L2xvY2FsZS1kYXRhL3Nlcy5qcz8yOTM5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxpQkFBaUI7QUFDakIsdUJBQXVCO0FBQ3ZCO0FBQ0EsR0FBRztBQUNIIiwiZmlsZSI6IjY4NjcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBAZ2VuZXJhdGVkICovXG4vLyBwcmV0dGllci1pZ25vcmVcbmlmIChJbnRsLlBsdXJhbFJ1bGVzICYmIHR5cGVvZiBJbnRsLlBsdXJhbFJ1bGVzLl9fYWRkTG9jYWxlRGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xuICBJbnRsLlBsdXJhbFJ1bGVzLl9fYWRkTG9jYWxlRGF0YSh7XG4gICAgXCJkYXRhXCI6IHtcbiAgICAgIFwic2VzXCI6IHtcbiAgICAgICAgXCJjYXRlZ29yaWVzXCI6IHtcbiAgICAgICAgICBcImNhcmRpbmFsXCI6IFtcIm90aGVyXCJdLFxuICAgICAgICAgIFwib3JkaW5hbFwiOiBbXCJvdGhlclwiXVxuICAgICAgICB9LFxuICAgICAgICBcImZuXCI6IGZ1bmN0aW9uIGZuKG4sIG9yZCkge1xuICAgICAgICAgIHJldHVybiAnb3RoZXInO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBcImFsaWFzZXNcIjoge30sXG4gICAgXCJwYXJlbnRMb2NhbGVzXCI6IHt9LFxuICAgIFwiYXZhaWxhYmxlTG9jYWxlc1wiOiBbXCJzZXNcIl1cbiAgfSk7XG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///6867\n')},2157:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n\nvar core_1 = __webpack_require__(3012);\n\nif (typeof Intl.PluralRules === 'undefined' || !Intl.PluralRules.polyfilled && new Intl.PluralRules('en', {\n minimumFractionDigits: 2\n}).select(1) === 'one') {\n Object.defineProperty(Intl, 'PluralRules', {\n value: core_1.PluralRules,\n writable: true,\n enumerable: false,\n configurable: true\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AZm9ybWF0anMvaW50bC1wbHVyYWxydWxlcy9kaXN0L3BvbHlmaWxsLmpzP2FkY2QiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsOENBQTZDO0FBQzdDO0FBQ0EsQ0FBQyxFQUFDOztBQUVGLGFBQWEsbUJBQU8sQ0FBQyxJQUFROztBQUU3QjtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJmaWxlIjoiMjE1Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgY29yZV8xID0gcmVxdWlyZShcIi4vY29yZVwiKTtcblxuaWYgKHR5cGVvZiBJbnRsLlBsdXJhbFJ1bGVzID09PSAndW5kZWZpbmVkJyB8fCAhSW50bC5QbHVyYWxSdWxlcy5wb2x5ZmlsbGVkICYmIG5ldyBJbnRsLlBsdXJhbFJ1bGVzKCdlbicsIHtcbiAgbWluaW11bUZyYWN0aW9uRGlnaXRzOiAyXG59KS5zZWxlY3QoMSkgPT09ICdvbmUnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJbnRsLCAnUGx1cmFsUnVsZXMnLCB7XG4gICAgdmFsdWU6IGNvcmVfMS5QbHVyYWxSdWxlcyxcbiAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSk7XG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2157\n")},3228:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("__webpack_require__(2157);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AZm9ybWF0anMvaW50bC1wbHVyYWxydWxlcy9wb2x5ZmlsbC5qcz8xYTM5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1CQUFPLENBQUMsSUFBaUIiLCJmaWxlIjoiMzIyOC5qcyIsInNvdXJjZXNDb250ZW50IjpbInJlcXVpcmUoJy4vZGlzdC9wb2x5ZmlsbCcpOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3228\n")},9905:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar __assign = this && this.__assign || function () {\n __assign = Object.assign || function (t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n\n for (var p in s) {\n if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n }\n\n return t;\n };\n\n return __assign.apply(this, arguments);\n};\n\nvar __values = this && this.__values || function (o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator,\n m = s && o[s],\n i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function next() {\n if (o && i >= o.length) o = void 0;\n return {\n value: o && o[i++],\n done: !o\n };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\n\nvar __read = this && this.__read || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o),\n r,\n ar = [],\n e;\n\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {\n ar.push(r.value);\n }\n } catch (error) {\n e = {\n error: error\n };\n } finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n } finally {\n if (e) throw e.error;\n }\n }\n\n return ar;\n};\n\nvar __spread = this && this.__spread || function () {\n for (var ar = [], i = 0; i < arguments.length; i++) {\n ar = ar.concat(__read(arguments[i]));\n }\n\n return ar;\n};\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n\nvar intl_utils_1 = __webpack_require__(2650);\n\nfunction unpackData(locale, localeData) {\n var localeHierarchy = intl_utils_1.getLocaleHierarchy(locale, localeData.aliases, localeData.parentLocales);\n var dataToMerge = localeHierarchy.map(function (l) {\n return localeData.data[l];\n }).filter(Boolean);\n\n if (!dataToMerge.length) {\n throw new Error(\"Missing locale data for \\\"\" + locale + \"\\\", lookup hierarchy: \" + localeHierarchy.join(', '));\n }\n\n dataToMerge.reverse();\n return dataToMerge.reduce(function (all, d) {\n return __assign(__assign({}, all), d);\n }, {\n nu: []\n });\n}\n/**\n * https://tc39.es/proposal-intl-relative-time/#sec-singularrelativetimeunit\n * @param unit\n */\n\n\nfunction singularRelativeTimeUnit(unit) {\n intl_utils_1.invariant(typeof unit === 'string', \"unit must be a string, instead got \" + typeof unit, TypeError);\n if (unit === 'seconds') return 'second';\n if (unit === 'minutes') return 'minute';\n if (unit === 'hours') return 'hour';\n if (unit === 'days') return 'day';\n if (unit === 'weeks') return 'week';\n if (unit === 'months') return 'month';\n if (unit === 'quarters') return 'quarter';\n if (unit === 'years') return 'year';\n\n if (unit !== 'second' && unit !== 'minute' && unit !== 'hour' && unit !== 'day' && unit !== 'week' && unit !== 'month' && unit !== 'quarter' && unit !== 'year') {\n throw new RangeError(\"Invalid unit \" + unit);\n }\n\n return unit;\n}\n\nvar NUMBERING_SYSTEM_REGEX = /^[a-z0-9]{3,8}(-[a-z0-9]{3,8})*$/i;\n/**\n * https://tc39.es/proposal-intl-relative-time/#sec-makepartslist\n * @param pattern\n * @param unit\n * @param parts\n */\n\nfunction makePartsList(pattern, unit, parts) {\n var e_1, _a, e_2, _b;\n\n var patternParts = intl_utils_1.partitionPattern(pattern);\n var result = [];\n\n try {\n for (var patternParts_1 = __values(patternParts), patternParts_1_1 = patternParts_1.next(); !patternParts_1_1.done; patternParts_1_1 = patternParts_1.next()) {\n var patternPart = patternParts_1_1.value;\n\n if (intl_utils_1.isLiteralPart(patternPart)) {\n result.push({\n type: 'literal',\n value: patternPart.value\n });\n } else {\n intl_utils_1.invariant(patternPart.type === '0', \"Malformed pattern \" + pattern);\n\n try {\n for (var parts_1 = (e_2 = void 0, __values(parts)), parts_1_1 = parts_1.next(); !parts_1_1.done; parts_1_1 = parts_1.next()) {\n var part = parts_1_1.value;\n result.push({\n type: part.type,\n value: part.value,\n unit: unit\n });\n }\n } catch (e_2_1) {\n e_2 = {\n error: e_2_1\n };\n } finally {\n try {\n if (parts_1_1 && !parts_1_1.done && (_b = parts_1.return)) _b.call(parts_1);\n } finally {\n if (e_2) throw e_2.error;\n }\n }\n }\n }\n } catch (e_1_1) {\n e_1 = {\n error: e_1_1\n };\n } finally {\n try {\n if (patternParts_1_1 && !patternParts_1_1.done && (_a = patternParts_1.return)) _a.call(patternParts_1);\n } finally {\n if (e_1) throw e_1.error;\n }\n }\n\n return result;\n}\n\nfunction objectIs(x, y) {\n if (Object.is) {\n return Object.is(x, y);\n } // SameValue algorithm\n\n\n if (x === y) {\n // Steps 1-5, 7-10\n // Steps 6.b-6.e: +0 != -0\n return x !== 0 || 1 / x === 1 / y;\n } // Step 6.a: NaN == NaN\n\n\n return x !== x && y !== y;\n}\n\nfunction toString(arg) {\n return arg + '';\n}\n/**\n * PartitionRelativeTimePattern\n * @param rtf\n * @param value\n * @param unit\n */\n\n\nfunction partitionRelativeTimePattern(internalSlotMap, rtf, value, unit) {\n intl_utils_1.invariant(typeof value === 'number', \"value must be number, instead got \" + typeof value, TypeError);\n intl_utils_1.invariant(typeof unit === 'string', \"unit must be number, instead got \" + typeof value, TypeError);\n\n if (isNaN(value) || value === Infinity || value === -Infinity) {\n throw new RangeError(\"Invalid value \" + value);\n }\n\n var resolvedUnit = singularRelativeTimeUnit(unit);\n var fields = intl_utils_1.getInternalSlot(internalSlotMap, rtf, 'fields');\n var style = intl_utils_1.getInternalSlot(internalSlotMap, rtf, 'style');\n var entry = resolvedUnit;\n\n if (style === 'short') {\n entry = unit + \"-short\";\n } else if (style === 'narrow') {\n entry = unit + \"-narrow\";\n }\n\n if (!(entry in fields)) {\n entry = unit;\n }\n\n var patterns = fields[entry];\n var numeric = intl_utils_1.getInternalSlot(internalSlotMap, rtf, 'numeric');\n\n if (numeric === 'auto') {\n if (toString(value) in patterns) {\n return [{\n type: 'literal',\n value: patterns[toString(value)]\n }];\n }\n }\n\n var tl = 'future';\n\n if (objectIs(value, -0) || value < 0) {\n tl = 'past';\n }\n\n var po = patterns[tl];\n var pluralRules = intl_utils_1.getInternalSlot(internalSlotMap, rtf, 'pluralRules');\n var numberFormat = intl_utils_1.getInternalSlot(internalSlotMap, rtf, 'numberFormat');\n var fv = typeof numberFormat.formatToParts === 'function' ? numberFormat.formatToParts(Math.abs(value)) : // TODO: If formatToParts is not supported, we assume the whole formatted\n // number is a part\n [{\n type: 'literal',\n value: numberFormat.format(Math.abs(value)),\n unit: unit\n }];\n var pr = pluralRules.select(value);\n var pattern = po[pr];\n return makePartsList(pattern, resolvedUnit, fv);\n}\n\nvar RelativeTimeFormat =\n/** @class */\nfunction () {\n function RelativeTimeFormat(locales, options) {\n // test262/test/intl402/RelativeTimeFormat/constructor/constructor/newtarget-undefined.js\n // Cannot use `new.target` bc of IE11 & TS transpiles it to something else\n var newTarget = this && this instanceof RelativeTimeFormat ? this.constructor : void 0;\n\n if (!newTarget) {\n throw new TypeError(\"Intl.RelativeTimeFormat must be called with 'new'\");\n }\n\n intl_utils_1.setInternalSlot(RelativeTimeFormat.__INTERNAL_SLOT_MAP__, this, 'initializedRelativeTimeFormat', true);\n var requestedLocales = intl_utils_1.getCanonicalLocales(locales);\n var opt = Object.create(null);\n var opts = options === undefined ? Object.create(null) : intl_utils_1.toObject(options);\n var matcher = intl_utils_1.getOption(opts, 'localeMatcher', 'string', ['best fit', 'lookup'], 'best fit');\n opt.localeMatcher = matcher;\n var numberingSystem = intl_utils_1.getOption(opts, 'numberingSystem', 'string', undefined, undefined);\n\n if (numberingSystem !== undefined) {\n if (!NUMBERING_SYSTEM_REGEX.test(numberingSystem)) {\n throw new RangeError(\"Invalid numbering system \" + numberingSystem);\n }\n }\n\n opt.nu = numberingSystem;\n var r = intl_utils_1.createResolveLocale(RelativeTimeFormat.getDefaultLocale)(RelativeTimeFormat.availableLocales, requestedLocales, opt, RelativeTimeFormat.relevantExtensionKeys, RelativeTimeFormat.localeData);\n var locale = r.locale,\n nu = r.nu;\n intl_utils_1.setInternalSlot(RelativeTimeFormat.__INTERNAL_SLOT_MAP__, this, 'locale', locale);\n intl_utils_1.setInternalSlot(RelativeTimeFormat.__INTERNAL_SLOT_MAP__, this, 'style', intl_utils_1.getOption(opts, 'style', 'string', ['long', 'narrow', 'short'], 'long'));\n intl_utils_1.setInternalSlot(RelativeTimeFormat.__INTERNAL_SLOT_MAP__, this, 'numeric', intl_utils_1.getOption(opts, 'numeric', 'string', ['always', 'auto'], 'always'));\n intl_utils_1.setInternalSlot(RelativeTimeFormat.__INTERNAL_SLOT_MAP__, this, 'fields', RelativeTimeFormat.localeData[locale]);\n intl_utils_1.setInternalSlot(RelativeTimeFormat.__INTERNAL_SLOT_MAP__, this, 'numberFormat', new Intl.NumberFormat(locales));\n intl_utils_1.setInternalSlot(RelativeTimeFormat.__INTERNAL_SLOT_MAP__, this, 'pluralRules', new Intl.PluralRules(locales));\n intl_utils_1.setInternalSlot(RelativeTimeFormat.__INTERNAL_SLOT_MAP__, this, 'numberingSystem', nu);\n }\n\n RelativeTimeFormat.prototype.format = function (value, unit) {\n if (typeof this !== 'object') {\n throw new TypeError('format was called on a non-object');\n }\n\n if (!intl_utils_1.getInternalSlot(RelativeTimeFormat.__INTERNAL_SLOT_MAP__, this, 'initializedRelativeTimeFormat')) {\n throw new TypeError('format was called on a invalid context');\n }\n\n return partitionRelativeTimePattern(RelativeTimeFormat.__INTERNAL_SLOT_MAP__, this, Number(value), toString(unit)).map(function (el) {\n return el.value;\n }).join('');\n };\n\n RelativeTimeFormat.prototype.formatToParts = function (value, unit) {\n if (typeof this !== 'object') {\n throw new TypeError('formatToParts was called on a non-object');\n }\n\n if (!intl_utils_1.getInternalSlot(RelativeTimeFormat.__INTERNAL_SLOT_MAP__, this, 'initializedRelativeTimeFormat')) {\n throw new TypeError('formatToParts was called on a invalid context');\n }\n\n return partitionRelativeTimePattern(RelativeTimeFormat.__INTERNAL_SLOT_MAP__, this, Number(value), toString(unit));\n };\n\n RelativeTimeFormat.prototype.resolvedOptions = function () {\n if (typeof this !== 'object') {\n throw new TypeError('resolvedOptions was called on a non-object');\n }\n\n if (!intl_utils_1.getInternalSlot(RelativeTimeFormat.__INTERNAL_SLOT_MAP__, this, 'initializedRelativeTimeFormat')) {\n throw new TypeError('resolvedOptions was called on a invalid context');\n } // test262/test/intl402/RelativeTimeFormat/prototype/resolvedOptions/type.js\n\n\n return {\n locale: intl_utils_1.getInternalSlot(RelativeTimeFormat.__INTERNAL_SLOT_MAP__, this, 'locale'),\n style: intl_utils_1.getInternalSlot(RelativeTimeFormat.__INTERNAL_SLOT_MAP__, this, 'style'),\n numeric: intl_utils_1.getInternalSlot(RelativeTimeFormat.__INTERNAL_SLOT_MAP__, this, 'numeric'),\n numberingSystem: intl_utils_1.getInternalSlot(RelativeTimeFormat.__INTERNAL_SLOT_MAP__, this, 'numberingSystem')\n };\n };\n\n RelativeTimeFormat.supportedLocalesOf = function (locales, options) {\n return intl_utils_1.supportedLocales(RelativeTimeFormat.availableLocales, intl_utils_1.getCanonicalLocales(locales), options);\n };\n\n RelativeTimeFormat.__addLocaleData = function () {\n var e_3, _a;\n\n var data = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n data[_i] = arguments[_i];\n }\n\n var _loop_1 = function _loop_1(datum) {\n var availableLocales = Object.keys(__spread(datum.availableLocales, Object.keys(datum.aliases), Object.keys(datum.parentLocales)).reduce(function (all, k) {\n all[k] = true;\n return all;\n }, {}));\n availableLocales.forEach(function (locale) {\n try {\n RelativeTimeFormat.localeData[locale] = unpackData(locale, datum);\n } catch (e) {// If we can't unpack this data, ignore the locale\n }\n });\n };\n\n try {\n for (var data_1 = __values(data), data_1_1 = data_1.next(); !data_1_1.done; data_1_1 = data_1.next()) {\n var datum = data_1_1.value;\n\n _loop_1(datum);\n }\n } catch (e_3_1) {\n e_3 = {\n error: e_3_1\n };\n } finally {\n try {\n if (data_1_1 && !data_1_1.done && (_a = data_1.return)) _a.call(data_1);\n } finally {\n if (e_3) throw e_3.error;\n }\n }\n\n RelativeTimeFormat.availableLocales = Object.keys(RelativeTimeFormat.localeData);\n\n if (!RelativeTimeFormat.__defaultLocale) {\n RelativeTimeFormat.__defaultLocale = RelativeTimeFormat.availableLocales[0];\n }\n };\n\n RelativeTimeFormat.getDefaultLocale = function () {\n return RelativeTimeFormat.__defaultLocale;\n };\n\n RelativeTimeFormat.localeData = {};\n RelativeTimeFormat.availableLocales = [];\n RelativeTimeFormat.__defaultLocale = 'en';\n RelativeTimeFormat.relevantExtensionKeys = ['nu'];\n RelativeTimeFormat.polyfilled = true;\n RelativeTimeFormat.__INTERNAL_SLOT_MAP__ = new WeakMap();\n return RelativeTimeFormat;\n}();\n\nexports.default = RelativeTimeFormat;\n\ntry {\n // IE11 does not have Symbol\n if (typeof Symbol !== 'undefined') {\n Object.defineProperty(RelativeTimeFormat.prototype, Symbol.toStringTag, {\n value: 'Intl.RelativeTimeFormat',\n writable: false,\n enumerable: false,\n configurable: true\n });\n } // https://github.com/tc39/test262/blob/master/test/intl402/RelativeTimeFormat/constructor/length.js\n\n\n Object.defineProperty(RelativeTimeFormat.prototype.constructor, 'length', {\n value: 0,\n writable: false,\n enumerable: false,\n configurable: true\n }); // https://github.com/tc39/test262/blob/master/test/intl402/RelativeTimeFormat/constructor/supportedLocalesOf/length.js\n\n Object.defineProperty(RelativeTimeFormat.supportedLocalesOf, 'length', {\n value: 1,\n writable: false,\n enumerable: false,\n configurable: true\n });\n} catch (e) {// Meta fix so we're test262-compliant, not important\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AZm9ybWF0anMvaW50bC1yZWxhdGl2ZXRpbWVmb3JtYXQvZGlzdC9jb3JlLmpzPzcyNDIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWI7QUFDQTtBQUNBLDRDQUE0QyxPQUFPO0FBQ25EOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLDBCQUEwQixzQkFBc0I7QUFDaEQ7QUFDQTs7QUFFQTtBQUNBOztBQUVBLDhDQUE2QztBQUM3QztBQUNBLENBQUMsRUFBQzs7QUFFRixtQkFBbUIsbUJBQU8sQ0FBQyxJQUFzQjs7QUFFakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsK0JBQStCO0FBQy9CLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSx3Q0FBd0MsSUFBSSxXQUFXLElBQUk7QUFDM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLCtGQUErRix3QkFBd0I7QUFDdkg7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQOztBQUVBO0FBQ0EseUZBQXlGLGlCQUFpQjtBQUMxRztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQSxvQkFBb0IsdUJBQXVCO0FBQzNDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLElBQUk7QUFDWDtBQUNBO0FBQ0E7QUFDQSxTQUFTLFlBQVk7QUFDckI7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQSxpRUFBaUUsZ0JBQWdCO0FBQ2pGOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQsZUFBZTs7QUFFZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHLEVBQUU7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDLFlBQVk7QUFDYiIsImZpbGUiOiI5OTA1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfX2Fzc2lnbiA9IHRoaXMgJiYgdGhpcy5fX2Fzc2lnbiB8fCBmdW5jdGlvbiAoKSB7XG4gIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodCkge1xuICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcblxuICAgICAgZm9yICh2YXIgcCBpbiBzKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0O1xuICB9O1xuXG4gIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcblxudmFyIF9fdmFsdWVzID0gdGhpcyAmJiB0aGlzLl9fdmFsdWVzIHx8IGZ1bmN0aW9uIChvKSB7XG4gIHZhciBzID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvcixcbiAgICAgIG0gPSBzICYmIG9bc10sXG4gICAgICBpID0gMDtcbiAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XG4gIGlmIChvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHtcbiAgICBuZXh0OiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlOiBvICYmIG9baSsrXSxcbiAgICAgICAgZG9uZTogIW9cbiAgICAgIH07XG4gICAgfVxuICB9O1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG59O1xuXG52YXIgX19yZWFkID0gdGhpcyAmJiB0aGlzLl9fcmVhZCB8fCBmdW5jdGlvbiAobywgbikge1xuICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghbSkgcmV0dXJuIG87XG4gIHZhciBpID0gbS5jYWxsKG8pLFxuICAgICAgcixcbiAgICAgIGFyID0gW10sXG4gICAgICBlO1xuXG4gIHRyeSB7XG4gICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIHtcbiAgICAgIGFyLnB1c2goci52YWx1ZSk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGUgPSB7XG4gICAgICBlcnJvcjogZXJyb3JcbiAgICB9O1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKGUpIHRocm93IGUuZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGFyO1xufTtcblxudmFyIF9fc3ByZWFkID0gdGhpcyAmJiB0aGlzLl9fc3ByZWFkIHx8IGZ1bmN0aW9uICgpIHtcbiAgZm9yICh2YXIgYXIgPSBbXSwgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICBhciA9IGFyLmNvbmNhdChfX3JlYWQoYXJndW1lbnRzW2ldKSk7XG4gIH1cblxuICByZXR1cm4gYXI7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgaW50bF91dGlsc18xID0gcmVxdWlyZShcIkBmb3JtYXRqcy9pbnRsLXV0aWxzXCIpO1xuXG5mdW5jdGlvbiB1bnBhY2tEYXRhKGxvY2FsZSwgbG9jYWxlRGF0YSkge1xuICB2YXIgbG9jYWxlSGllcmFyY2h5ID0gaW50bF91dGlsc18xLmdldExvY2FsZUhpZXJhcmNoeShsb2NhbGUsIGxvY2FsZURhdGEuYWxpYXNlcywgbG9jYWxlRGF0YS5wYXJlbnRMb2NhbGVzKTtcbiAgdmFyIGRhdGFUb01lcmdlID0gbG9jYWxlSGllcmFyY2h5Lm1hcChmdW5jdGlvbiAobCkge1xuICAgIHJldHVybiBsb2NhbGVEYXRhLmRhdGFbbF07XG4gIH0pLmZpbHRlcihCb29sZWFuKTtcblxuICBpZiAoIWRhdGFUb01lcmdlLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgbG9jYWxlIGRhdGEgZm9yIFxcXCJcIiArIGxvY2FsZSArIFwiXFxcIiwgbG9va3VwIGhpZXJhcmNoeTogXCIgKyBsb2NhbGVIaWVyYXJjaHkuam9pbignLCAnKSk7XG4gIH1cblxuICBkYXRhVG9NZXJnZS5yZXZlcnNlKCk7XG4gIHJldHVybiBkYXRhVG9NZXJnZS5yZWR1Y2UoZnVuY3Rpb24gKGFsbCwgZCkge1xuICAgIHJldHVybiBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgYWxsKSwgZCk7XG4gIH0sIHtcbiAgICBudTogW11cbiAgfSk7XG59XG4vKipcbiAqIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1pbnRsLXJlbGF0aXZlLXRpbWUvI3NlYy1zaW5ndWxhcnJlbGF0aXZldGltZXVuaXRcbiAqIEBwYXJhbSB1bml0XG4gKi9cblxuXG5mdW5jdGlvbiBzaW5ndWxhclJlbGF0aXZlVGltZVVuaXQodW5pdCkge1xuICBpbnRsX3V0aWxzXzEuaW52YXJpYW50KHR5cGVvZiB1bml0ID09PSAnc3RyaW5nJywgXCJ1bml0IG11c3QgYmUgYSBzdHJpbmcsIGluc3RlYWQgZ290IFwiICsgdHlwZW9mIHVuaXQsIFR5cGVFcnJvcik7XG4gIGlmICh1bml0ID09PSAnc2Vjb25kcycpIHJldHVybiAnc2Vjb25kJztcbiAgaWYgKHVuaXQgPT09ICdtaW51dGVzJykgcmV0dXJuICdtaW51dGUnO1xuICBpZiAodW5pdCA9PT0gJ2hvdXJzJykgcmV0dXJuICdob3VyJztcbiAgaWYgKHVuaXQgPT09ICdkYXlzJykgcmV0dXJuICdkYXknO1xuICBpZiAodW5pdCA9PT0gJ3dlZWtzJykgcmV0dXJuICd3ZWVrJztcbiAgaWYgKHVuaXQgPT09ICdtb250aHMnKSByZXR1cm4gJ21vbnRoJztcbiAgaWYgKHVuaXQgPT09ICdxdWFydGVycycpIHJldHVybiAncXVhcnRlcic7XG4gIGlmICh1bml0ID09PSAneWVhcnMnKSByZXR1cm4gJ3llYXInO1xuXG4gIGlmICh1bml0ICE9PSAnc2Vjb25kJyAmJiB1bml0ICE9PSAnbWludXRlJyAmJiB1bml0ICE9PSAnaG91cicgJiYgdW5pdCAhPT0gJ2RheScgJiYgdW5pdCAhPT0gJ3dlZWsnICYmIHVuaXQgIT09ICdtb250aCcgJiYgdW5pdCAhPT0gJ3F1YXJ0ZXInICYmIHVuaXQgIT09ICd5ZWFyJykge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiSW52YWxpZCB1bml0IFwiICsgdW5pdCk7XG4gIH1cblxuICByZXR1cm4gdW5pdDtcbn1cblxudmFyIE5VTUJFUklOR19TWVNURU1fUkVHRVggPSAvXlthLXowLTldezMsOH0oLVthLXowLTldezMsOH0pKiQvaTtcbi8qKlxuICogaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLWludGwtcmVsYXRpdmUtdGltZS8jc2VjLW1ha2VwYXJ0c2xpc3RcbiAqIEBwYXJhbSBwYXR0ZXJuXG4gKiBAcGFyYW0gdW5pdFxuICogQHBhcmFtIHBhcnRzXG4gKi9cblxuZnVuY3Rpb24gbWFrZVBhcnRzTGlzdChwYXR0ZXJuLCB1bml0LCBwYXJ0cykge1xuICB2YXIgZV8xLCBfYSwgZV8yLCBfYjtcblxuICB2YXIgcGF0dGVyblBhcnRzID0gaW50bF91dGlsc18xLnBhcnRpdGlvblBhdHRlcm4ocGF0dGVybik7XG4gIHZhciByZXN1bHQgPSBbXTtcblxuICB0cnkge1xuICAgIGZvciAodmFyIHBhdHRlcm5QYXJ0c18xID0gX192YWx1ZXMocGF0dGVyblBhcnRzKSwgcGF0dGVyblBhcnRzXzFfMSA9IHBhdHRlcm5QYXJ0c18xLm5leHQoKTsgIXBhdHRlcm5QYXJ0c18xXzEuZG9uZTsgcGF0dGVyblBhcnRzXzFfMSA9IHBhdHRlcm5QYXJ0c18xLm5leHQoKSkge1xuICAgICAgdmFyIHBhdHRlcm5QYXJ0ID0gcGF0dGVyblBhcnRzXzFfMS52YWx1ZTtcblxuICAgICAgaWYgKGludGxfdXRpbHNfMS5pc0xpdGVyYWxQYXJ0KHBhdHRlcm5QYXJ0KSkge1xuICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgdHlwZTogJ2xpdGVyYWwnLFxuICAgICAgICAgIHZhbHVlOiBwYXR0ZXJuUGFydC52YWx1ZVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGludGxfdXRpbHNfMS5pbnZhcmlhbnQocGF0dGVyblBhcnQudHlwZSA9PT0gJzAnLCBcIk1hbGZvcm1lZCBwYXR0ZXJuIFwiICsgcGF0dGVybik7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBmb3IgKHZhciBwYXJ0c18xID0gKGVfMiA9IHZvaWQgMCwgX192YWx1ZXMocGFydHMpKSwgcGFydHNfMV8xID0gcGFydHNfMS5uZXh0KCk7ICFwYXJ0c18xXzEuZG9uZTsgcGFydHNfMV8xID0gcGFydHNfMS5uZXh0KCkpIHtcbiAgICAgICAgICAgIHZhciBwYXJ0ID0gcGFydHNfMV8xLnZhbHVlO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAgICB0eXBlOiBwYXJ0LnR5cGUsXG4gICAgICAgICAgICAgIHZhbHVlOiBwYXJ0LnZhbHVlLFxuICAgICAgICAgICAgICB1bml0OiB1bml0XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVfMl8xKSB7XG4gICAgICAgICAgZV8yID0ge1xuICAgICAgICAgICAgZXJyb3I6IGVfMl8xXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHBhcnRzXzFfMSAmJiAhcGFydHNfMV8xLmRvbmUgJiYgKF9iID0gcGFydHNfMS5yZXR1cm4pKSBfYi5jYWxsKHBhcnRzXzEpO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBpZiAoZV8yKSB0aHJvdyBlXzIuZXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChlXzFfMSkge1xuICAgIGVfMSA9IHtcbiAgICAgIGVycm9yOiBlXzFfMVxuICAgIH07XG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChwYXR0ZXJuUGFydHNfMV8xICYmICFwYXR0ZXJuUGFydHNfMV8xLmRvbmUgJiYgKF9hID0gcGF0dGVyblBhcnRzXzEucmV0dXJuKSkgX2EuY2FsbChwYXR0ZXJuUGFydHNfMSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBvYmplY3RJcyh4LCB5KSB7XG4gIGlmIChPYmplY3QuaXMpIHtcbiAgICByZXR1cm4gT2JqZWN0LmlzKHgsIHkpO1xuICB9IC8vIFNhbWVWYWx1ZSBhbGdvcml0aG1cblxuXG4gIGlmICh4ID09PSB5KSB7XG4gICAgLy8gU3RlcHMgMS01LCA3LTEwXG4gICAgLy8gU3RlcHMgNi5iLTYuZTogKzAgIT0gLTBcbiAgICByZXR1cm4geCAhPT0gMCB8fCAxIC8geCA9PT0gMSAvIHk7XG4gIH0gLy8gU3RlcCA2LmE6IE5hTiA9PSBOYU5cblxuXG4gIHJldHVybiB4ICE9PSB4ICYmIHkgIT09IHk7XG59XG5cbmZ1bmN0aW9uIHRvU3RyaW5nKGFyZykge1xuICByZXR1cm4gYXJnICsgJyc7XG59XG4vKipcbiAqIFBhcnRpdGlvblJlbGF0aXZlVGltZVBhdHRlcm5cbiAqIEBwYXJhbSBydGZcbiAqIEBwYXJhbSB2YWx1ZVxuICogQHBhcmFtIHVuaXRcbiAqL1xuXG5cbmZ1bmN0aW9uIHBhcnRpdGlvblJlbGF0aXZlVGltZVBhdHRlcm4oaW50ZXJuYWxTbG90TWFwLCBydGYsIHZhbHVlLCB1bml0KSB7XG4gIGludGxfdXRpbHNfMS5pbnZhcmlhbnQodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJywgXCJ2YWx1ZSBtdXN0IGJlIG51bWJlciwgaW5zdGVhZCBnb3QgXCIgKyB0eXBlb2YgdmFsdWUsIFR5cGVFcnJvcik7XG4gIGludGxfdXRpbHNfMS5pbnZhcmlhbnQodHlwZW9mIHVuaXQgPT09ICdzdHJpbmcnLCBcInVuaXQgbXVzdCBiZSBudW1iZXIsIGluc3RlYWQgZ290IFwiICsgdHlwZW9mIHZhbHVlLCBUeXBlRXJyb3IpO1xuXG4gIGlmIChpc05hTih2YWx1ZSkgfHwgdmFsdWUgPT09IEluZmluaXR5IHx8IHZhbHVlID09PSAtSW5maW5pdHkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkludmFsaWQgdmFsdWUgXCIgKyB2YWx1ZSk7XG4gIH1cblxuICB2YXIgcmVzb2x2ZWRVbml0ID0gc2luZ3VsYXJSZWxhdGl2ZVRpbWVVbml0KHVuaXQpO1xuICB2YXIgZmllbGRzID0gaW50bF91dGlsc18xLmdldEludGVybmFsU2xvdChpbnRlcm5hbFNsb3RNYXAsIHJ0ZiwgJ2ZpZWxkcycpO1xuICB2YXIgc3R5bGUgPSBpbnRsX3V0aWxzXzEuZ2V0SW50ZXJuYWxTbG90KGludGVybmFsU2xvdE1hcCwgcnRmLCAnc3R5bGUnKTtcbiAgdmFyIGVudHJ5ID0gcmVzb2x2ZWRVbml0O1xuXG4gIGlmIChzdHlsZSA9PT0gJ3Nob3J0Jykge1xuICAgIGVudHJ5ID0gdW5pdCArIFwiLXNob3J0XCI7XG4gIH0gZWxzZSBpZiAoc3R5bGUgPT09ICduYXJyb3cnKSB7XG4gICAgZW50cnkgPSB1bml0ICsgXCItbmFycm93XCI7XG4gIH1cblxuICBpZiAoIShlbnRyeSBpbiBmaWVsZHMpKSB7XG4gICAgZW50cnkgPSB1bml0O1xuICB9XG5cbiAgdmFyIHBhdHRlcm5zID0gZmllbGRzW2VudHJ5XTtcbiAgdmFyIG51bWVyaWMgPSBpbnRsX3V0aWxzXzEuZ2V0SW50ZXJuYWxTbG90KGludGVybmFsU2xvdE1hcCwgcnRmLCAnbnVtZXJpYycpO1xuXG4gIGlmIChudW1lcmljID09PSAnYXV0bycpIHtcbiAgICBpZiAodG9TdHJpbmcodmFsdWUpIGluIHBhdHRlcm5zKSB7XG4gICAgICByZXR1cm4gW3tcbiAgICAgICAgdHlwZTogJ2xpdGVyYWwnLFxuICAgICAgICB2YWx1ZTogcGF0dGVybnNbdG9TdHJpbmcodmFsdWUpXVxuICAgICAgfV07XG4gICAgfVxuICB9XG5cbiAgdmFyIHRsID0gJ2Z1dHVyZSc7XG5cbiAgaWYgKG9iamVjdElzKHZhbHVlLCAtMCkgfHwgdmFsdWUgPCAwKSB7XG4gICAgdGwgPSAncGFzdCc7XG4gIH1cblxuICB2YXIgcG8gPSBwYXR0ZXJuc1t0bF07XG4gIHZhciBwbHVyYWxSdWxlcyA9IGludGxfdXRpbHNfMS5nZXRJbnRlcm5hbFNsb3QoaW50ZXJuYWxTbG90TWFwLCBydGYsICdwbHVyYWxSdWxlcycpO1xuICB2YXIgbnVtYmVyRm9ybWF0ID0gaW50bF91dGlsc18xLmdldEludGVybmFsU2xvdChpbnRlcm5hbFNsb3RNYXAsIHJ0ZiwgJ251bWJlckZvcm1hdCcpO1xuICB2YXIgZnYgPSB0eXBlb2YgbnVtYmVyRm9ybWF0LmZvcm1hdFRvUGFydHMgPT09ICdmdW5jdGlvbicgPyBudW1iZXJGb3JtYXQuZm9ybWF0VG9QYXJ0cyhNYXRoLmFicyh2YWx1ZSkpIDogLy8gVE9ETzogSWYgZm9ybWF0VG9QYXJ0cyBpcyBub3Qgc3VwcG9ydGVkLCB3ZSBhc3N1bWUgdGhlIHdob2xlIGZvcm1hdHRlZFxuICAvLyBudW1iZXIgaXMgYSBwYXJ0XG4gIFt7XG4gICAgdHlwZTogJ2xpdGVyYWwnLFxuICAgIHZhbHVlOiBudW1iZXJGb3JtYXQuZm9ybWF0KE1hdGguYWJzKHZhbHVlKSksXG4gICAgdW5pdDogdW5pdFxuICB9XTtcbiAgdmFyIHByID0gcGx1cmFsUnVsZXMuc2VsZWN0KHZhbHVlKTtcbiAgdmFyIHBhdHRlcm4gPSBwb1twcl07XG4gIHJldHVybiBtYWtlUGFydHNMaXN0KHBhdHRlcm4sIHJlc29sdmVkVW5pdCwgZnYpO1xufVxuXG52YXIgUmVsYXRpdmVUaW1lRm9ybWF0ID1cbi8qKiBAY2xhc3MgKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gUmVsYXRpdmVUaW1lRm9ybWF0KGxvY2FsZXMsIG9wdGlvbnMpIHtcbiAgICAvLyB0ZXN0MjYyL3Rlc3QvaW50bDQwMi9SZWxhdGl2ZVRpbWVGb3JtYXQvY29uc3RydWN0b3IvY29uc3RydWN0b3IvbmV3dGFyZ2V0LXVuZGVmaW5lZC5qc1xuICAgIC8vIENhbm5vdCB1c2UgYG5ldy50YXJnZXRgIGJjIG9mIElFMTEgJiBUUyB0cmFuc3BpbGVzIGl0IHRvIHNvbWV0aGluZyBlbHNlXG4gICAgdmFyIG5ld1RhcmdldCA9IHRoaXMgJiYgdGhpcyBpbnN0YW5jZW9mIFJlbGF0aXZlVGltZUZvcm1hdCA/IHRoaXMuY29uc3RydWN0b3IgOiB2b2lkIDA7XG5cbiAgICBpZiAoIW5ld1RhcmdldCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludGwuUmVsYXRpdmVUaW1lRm9ybWF0IG11c3QgYmUgY2FsbGVkIHdpdGggJ25ldydcIik7XG4gICAgfVxuXG4gICAgaW50bF91dGlsc18xLnNldEludGVybmFsU2xvdChSZWxhdGl2ZVRpbWVGb3JtYXQuX19JTlRFUk5BTF9TTE9UX01BUF9fLCB0aGlzLCAnaW5pdGlhbGl6ZWRSZWxhdGl2ZVRpbWVGb3JtYXQnLCB0cnVlKTtcbiAgICB2YXIgcmVxdWVzdGVkTG9jYWxlcyA9IGludGxfdXRpbHNfMS5nZXRDYW5vbmljYWxMb2NhbGVzKGxvY2FsZXMpO1xuICAgIHZhciBvcHQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHZhciBvcHRzID0gb3B0aW9ucyA9PT0gdW5kZWZpbmVkID8gT2JqZWN0LmNyZWF0ZShudWxsKSA6IGludGxfdXRpbHNfMS50b09iamVjdChvcHRpb25zKTtcbiAgICB2YXIgbWF0Y2hlciA9IGludGxfdXRpbHNfMS5nZXRPcHRpb24ob3B0cywgJ2xvY2FsZU1hdGNoZXInLCAnc3RyaW5nJywgWydiZXN0IGZpdCcsICdsb29rdXAnXSwgJ2Jlc3QgZml0Jyk7XG4gICAgb3B0LmxvY2FsZU1hdGNoZXIgPSBtYXRjaGVyO1xuICAgIHZhciBudW1iZXJpbmdTeXN0ZW0gPSBpbnRsX3V0aWxzXzEuZ2V0T3B0aW9uKG9wdHMsICdudW1iZXJpbmdTeXN0ZW0nLCAnc3RyaW5nJywgdW5kZWZpbmVkLCB1bmRlZmluZWQpO1xuXG4gICAgaWYgKG51bWJlcmluZ1N5c3RlbSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoIU5VTUJFUklOR19TWVNURU1fUkVHRVgudGVzdChudW1iZXJpbmdTeXN0ZW0pKSB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiSW52YWxpZCBudW1iZXJpbmcgc3lzdGVtIFwiICsgbnVtYmVyaW5nU3lzdGVtKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBvcHQubnUgPSBudW1iZXJpbmdTeXN0ZW07XG4gICAgdmFyIHIgPSBpbnRsX3V0aWxzXzEuY3JlYXRlUmVzb2x2ZUxvY2FsZShSZWxhdGl2ZVRpbWVGb3JtYXQuZ2V0RGVmYXVsdExvY2FsZSkoUmVsYXRpdmVUaW1lRm9ybWF0LmF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMsIG9wdCwgUmVsYXRpdmVUaW1lRm9ybWF0LnJlbGV2YW50RXh0ZW5zaW9uS2V5cywgUmVsYXRpdmVUaW1lRm9ybWF0LmxvY2FsZURhdGEpO1xuICAgIHZhciBsb2NhbGUgPSByLmxvY2FsZSxcbiAgICAgICAgbnUgPSByLm51O1xuICAgIGludGxfdXRpbHNfMS5zZXRJbnRlcm5hbFNsb3QoUmVsYXRpdmVUaW1lRm9ybWF0Ll9fSU5URVJOQUxfU0xPVF9NQVBfXywgdGhpcywgJ2xvY2FsZScsIGxvY2FsZSk7XG4gICAgaW50bF91dGlsc18xLnNldEludGVybmFsU2xvdChSZWxhdGl2ZVRpbWVGb3JtYXQuX19JTlRFUk5BTF9TTE9UX01BUF9fLCB0aGlzLCAnc3R5bGUnLCBpbnRsX3V0aWxzXzEuZ2V0T3B0aW9uKG9wdHMsICdzdHlsZScsICdzdHJpbmcnLCBbJ2xvbmcnLCAnbmFycm93JywgJ3Nob3J0J10sICdsb25nJykpO1xuICAgIGludGxfdXRpbHNfMS5zZXRJbnRlcm5hbFNsb3QoUmVsYXRpdmVUaW1lRm9ybWF0Ll9fSU5URVJOQUxfU0xPVF9NQVBfXywgdGhpcywgJ251bWVyaWMnLCBpbnRsX3V0aWxzXzEuZ2V0T3B0aW9uKG9wdHMsICdudW1lcmljJywgJ3N0cmluZycsIFsnYWx3YXlzJywgJ2F1dG8nXSwgJ2Fsd2F5cycpKTtcbiAgICBpbnRsX3V0aWxzXzEuc2V0SW50ZXJuYWxTbG90KFJlbGF0aXZlVGltZUZvcm1hdC5fX0lOVEVSTkFMX1NMT1RfTUFQX18sIHRoaXMsICdmaWVsZHMnLCBSZWxhdGl2ZVRpbWVGb3JtYXQubG9jYWxlRGF0YVtsb2NhbGVdKTtcbiAgICBpbnRsX3V0aWxzXzEuc2V0SW50ZXJuYWxTbG90KFJlbGF0aXZlVGltZUZvcm1hdC5fX0lOVEVSTkFMX1NMT1RfTUFQX18sIHRoaXMsICdudW1iZXJGb3JtYXQnLCBuZXcgSW50bC5OdW1iZXJGb3JtYXQobG9jYWxlcykpO1xuICAgIGludGxfdXRpbHNfMS5zZXRJbnRlcm5hbFNsb3QoUmVsYXRpdmVUaW1lRm9ybWF0Ll9fSU5URVJOQUxfU0xPVF9NQVBfXywgdGhpcywgJ3BsdXJhbFJ1bGVzJywgbmV3IEludGwuUGx1cmFsUnVsZXMobG9jYWxlcykpO1xuICAgIGludGxfdXRpbHNfMS5zZXRJbnRlcm5hbFNsb3QoUmVsYXRpdmVUaW1lRm9ybWF0Ll9fSU5URVJOQUxfU0xPVF9NQVBfXywgdGhpcywgJ251bWJlcmluZ1N5c3RlbScsIG51KTtcbiAgfVxuXG4gIFJlbGF0aXZlVGltZUZvcm1hdC5wcm90b3R5cGUuZm9ybWF0ID0gZnVuY3Rpb24gKHZhbHVlLCB1bml0KSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZm9ybWF0IHdhcyBjYWxsZWQgb24gYSBub24tb2JqZWN0Jyk7XG4gICAgfVxuXG4gICAgaWYgKCFpbnRsX3V0aWxzXzEuZ2V0SW50ZXJuYWxTbG90KFJlbGF0aXZlVGltZUZvcm1hdC5fX0lOVEVSTkFMX1NMT1RfTUFQX18sIHRoaXMsICdpbml0aWFsaXplZFJlbGF0aXZlVGltZUZvcm1hdCcpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdmb3JtYXQgd2FzIGNhbGxlZCBvbiBhIGludmFsaWQgY29udGV4dCcpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJ0aXRpb25SZWxhdGl2ZVRpbWVQYXR0ZXJuKFJlbGF0aXZlVGltZUZvcm1hdC5fX0lOVEVSTkFMX1NMT1RfTUFQX18sIHRoaXMsIE51bWJlcih2YWx1ZSksIHRvU3RyaW5nKHVuaXQpKS5tYXAoZnVuY3Rpb24gKGVsKSB7XG4gICAgICByZXR1cm4gZWwudmFsdWU7XG4gICAgfSkuam9pbignJyk7XG4gIH07XG5cbiAgUmVsYXRpdmVUaW1lRm9ybWF0LnByb3RvdHlwZS5mb3JtYXRUb1BhcnRzID0gZnVuY3Rpb24gKHZhbHVlLCB1bml0KSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZm9ybWF0VG9QYXJ0cyB3YXMgY2FsbGVkIG9uIGEgbm9uLW9iamVjdCcpO1xuICAgIH1cblxuICAgIGlmICghaW50bF91dGlsc18xLmdldEludGVybmFsU2xvdChSZWxhdGl2ZVRpbWVGb3JtYXQuX19JTlRFUk5BTF9TTE9UX01BUF9fLCB0aGlzLCAnaW5pdGlhbGl6ZWRSZWxhdGl2ZVRpbWVGb3JtYXQnKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZm9ybWF0VG9QYXJ0cyB3YXMgY2FsbGVkIG9uIGEgaW52YWxpZCBjb250ZXh0Jyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnRpdGlvblJlbGF0aXZlVGltZVBhdHRlcm4oUmVsYXRpdmVUaW1lRm9ybWF0Ll9fSU5URVJOQUxfU0xPVF9NQVBfXywgdGhpcywgTnVtYmVyKHZhbHVlKSwgdG9TdHJpbmcodW5pdCkpO1xuICB9O1xuXG4gIFJlbGF0aXZlVGltZUZvcm1hdC5wcm90b3R5cGUucmVzb2x2ZWRPcHRpb25zID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0eXBlb2YgdGhpcyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3Jlc29sdmVkT3B0aW9ucyB3YXMgY2FsbGVkIG9uIGEgbm9uLW9iamVjdCcpO1xuICAgIH1cblxuICAgIGlmICghaW50bF91dGlsc18xLmdldEludGVybmFsU2xvdChSZWxhdGl2ZVRpbWVGb3JtYXQuX19JTlRFUk5BTF9TTE9UX01BUF9fLCB0aGlzLCAnaW5pdGlhbGl6ZWRSZWxhdGl2ZVRpbWVGb3JtYXQnKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigncmVzb2x2ZWRPcHRpb25zIHdhcyBjYWxsZWQgb24gYSBpbnZhbGlkIGNvbnRleHQnKTtcbiAgICB9IC8vIHRlc3QyNjIvdGVzdC9pbnRsNDAyL1JlbGF0aXZlVGltZUZvcm1hdC9wcm90b3R5cGUvcmVzb2x2ZWRPcHRpb25zL3R5cGUuanNcblxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxvY2FsZTogaW50bF91dGlsc18xLmdldEludGVybmFsU2xvdChSZWxhdGl2ZVRpbWVGb3JtYXQuX19JTlRFUk5BTF9TTE9UX01BUF9fLCB0aGlzLCAnbG9jYWxlJyksXG4gICAgICBzdHlsZTogaW50bF91dGlsc18xLmdldEludGVybmFsU2xvdChSZWxhdGl2ZVRpbWVGb3JtYXQuX19JTlRFUk5BTF9TTE9UX01BUF9fLCB0aGlzLCAnc3R5bGUnKSxcbiAgICAgIG51bWVyaWM6IGludGxfdXRpbHNfMS5nZXRJbnRlcm5hbFNsb3QoUmVsYXRpdmVUaW1lRm9ybWF0Ll9fSU5URVJOQUxfU0xPVF9NQVBfXywgdGhpcywgJ251bWVyaWMnKSxcbiAgICAgIG51bWJlcmluZ1N5c3RlbTogaW50bF91dGlsc18xLmdldEludGVybmFsU2xvdChSZWxhdGl2ZVRpbWVGb3JtYXQuX19JTlRFUk5BTF9TTE9UX01BUF9fLCB0aGlzLCAnbnVtYmVyaW5nU3lzdGVtJylcbiAgICB9O1xuICB9O1xuXG4gIFJlbGF0aXZlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YgPSBmdW5jdGlvbiAobG9jYWxlcywgb3B0aW9ucykge1xuICAgIHJldHVybiBpbnRsX3V0aWxzXzEuc3VwcG9ydGVkTG9jYWxlcyhSZWxhdGl2ZVRpbWVGb3JtYXQuYXZhaWxhYmxlTG9jYWxlcywgaW50bF91dGlsc18xLmdldENhbm9uaWNhbExvY2FsZXMobG9jYWxlcyksIG9wdGlvbnMpO1xuICB9O1xuXG4gIFJlbGF0aXZlVGltZUZvcm1hdC5fX2FkZExvY2FsZURhdGEgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGVfMywgX2E7XG5cbiAgICB2YXIgZGF0YSA9IFtdO1xuXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgIGRhdGFbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG5cbiAgICB2YXIgX2xvb3BfMSA9IGZ1bmN0aW9uIF9sb29wXzEoZGF0dW0pIHtcbiAgICAgIHZhciBhdmFpbGFibGVMb2NhbGVzID0gT2JqZWN0LmtleXMoX19zcHJlYWQoZGF0dW0uYXZhaWxhYmxlTG9jYWxlcywgT2JqZWN0LmtleXMoZGF0dW0uYWxpYXNlcyksIE9iamVjdC5rZXlzKGRhdHVtLnBhcmVudExvY2FsZXMpKS5yZWR1Y2UoZnVuY3Rpb24gKGFsbCwgaykge1xuICAgICAgICBhbGxba10gPSB0cnVlO1xuICAgICAgICByZXR1cm4gYWxsO1xuICAgICAgfSwge30pKTtcbiAgICAgIGF2YWlsYWJsZUxvY2FsZXMuZm9yRWFjaChmdW5jdGlvbiAobG9jYWxlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgUmVsYXRpdmVUaW1lRm9ybWF0LmxvY2FsZURhdGFbbG9jYWxlXSA9IHVucGFja0RhdGEobG9jYWxlLCBkYXR1bSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHsvLyBJZiB3ZSBjYW4ndCB1bnBhY2sgdGhpcyBkYXRhLCBpZ25vcmUgdGhlIGxvY2FsZVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgdHJ5IHtcbiAgICAgIGZvciAodmFyIGRhdGFfMSA9IF9fdmFsdWVzKGRhdGEpLCBkYXRhXzFfMSA9IGRhdGFfMS5uZXh0KCk7ICFkYXRhXzFfMS5kb25lOyBkYXRhXzFfMSA9IGRhdGFfMS5uZXh0KCkpIHtcbiAgICAgICAgdmFyIGRhdHVtID0gZGF0YV8xXzEudmFsdWU7XG5cbiAgICAgICAgX2xvb3BfMShkYXR1bSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZV8zXzEpIHtcbiAgICAgIGVfMyA9IHtcbiAgICAgICAgZXJyb3I6IGVfM18xXG4gICAgICB9O1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoZGF0YV8xXzEgJiYgIWRhdGFfMV8xLmRvbmUgJiYgKF9hID0gZGF0YV8xLnJldHVybikpIF9hLmNhbGwoZGF0YV8xKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChlXzMpIHRocm93IGVfMy5lcnJvcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBSZWxhdGl2ZVRpbWVGb3JtYXQuYXZhaWxhYmxlTG9jYWxlcyA9IE9iamVjdC5rZXlzKFJlbGF0aXZlVGltZUZvcm1hdC5sb2NhbGVEYXRhKTtcblxuICAgIGlmICghUmVsYXRpdmVUaW1lRm9ybWF0Ll9fZGVmYXVsdExvY2FsZSkge1xuICAgICAgUmVsYXRpdmVUaW1lRm9ybWF0Ll9fZGVmYXVsdExvY2FsZSA9IFJlbGF0aXZlVGltZUZvcm1hdC5hdmFpbGFibGVMb2NhbGVzWzBdO1xuICAgIH1cbiAgfTtcblxuICBSZWxhdGl2ZVRpbWVGb3JtYXQuZ2V0RGVmYXVsdExvY2FsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gUmVsYXRpdmVUaW1lRm9ybWF0Ll9fZGVmYXVsdExvY2FsZTtcbiAgfTtcblxuICBSZWxhdGl2ZVRpbWVGb3JtYXQubG9jYWxlRGF0YSA9IHt9O1xuICBSZWxhdGl2ZVRpbWVGb3JtYXQuYXZhaWxhYmxlTG9jYWxlcyA9IFtdO1xuICBSZWxhdGl2ZVRpbWVGb3JtYXQuX19kZWZhdWx0TG9jYWxlID0gJ2VuJztcbiAgUmVsYXRpdmVUaW1lRm9ybWF0LnJlbGV2YW50RXh0ZW5zaW9uS2V5cyA9IFsnbnUnXTtcbiAgUmVsYXRpdmVUaW1lRm9ybWF0LnBvbHlmaWxsZWQgPSB0cnVlO1xuICBSZWxhdGl2ZVRpbWVGb3JtYXQuX19JTlRFUk5BTF9TTE9UX01BUF9fID0gbmV3IFdlYWtNYXAoKTtcbiAgcmV0dXJuIFJlbGF0aXZlVGltZUZvcm1hdDtcbn0oKTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gUmVsYXRpdmVUaW1lRm9ybWF0O1xuXG50cnkge1xuICAvLyBJRTExIGRvZXMgbm90IGhhdmUgU3ltYm9sXG4gIGlmICh0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJykge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZWxhdGl2ZVRpbWVGb3JtYXQucHJvdG90eXBlLCBTeW1ib2wudG9TdHJpbmdUYWcsIHtcbiAgICAgIHZhbHVlOiAnSW50bC5SZWxhdGl2ZVRpbWVGb3JtYXQnLFxuICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgfSAvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS90ZXN0MjYyL2Jsb2IvbWFzdGVyL3Rlc3QvaW50bDQwMi9SZWxhdGl2ZVRpbWVGb3JtYXQvY29uc3RydWN0b3IvbGVuZ3RoLmpzXG5cblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUmVsYXRpdmVUaW1lRm9ybWF0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciwgJ2xlbmd0aCcsIHtcbiAgICB2YWx1ZTogMCxcbiAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pOyAvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS90ZXN0MjYyL2Jsb2IvbWFzdGVyL3Rlc3QvaW50bDQwMi9SZWxhdGl2ZVRpbWVGb3JtYXQvY29uc3RydWN0b3Ivc3VwcG9ydGVkTG9jYWxlc09mL2xlbmd0aC5qc1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZWxhdGl2ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mLCAnbGVuZ3RoJywge1xuICAgIHZhbHVlOiAxLFxuICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSk7XG59IGNhdGNoIChlKSB7Ly8gTWV0YSBmaXggc28gd2UncmUgdGVzdDI2Mi1jb21wbGlhbnQsIG5vdCBpbXBvcnRhbnRcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9905\n")},8079:function(){eval('/* @generated */\n// prettier-ignore\nif (Intl.RelativeTimeFormat && typeof Intl.RelativeTimeFormat.__addLocaleData === \'function\') {\n Intl.RelativeTimeFormat.__addLocaleData({\n "data": {\n "en-001": {\n "year-short": {\n "0": "this yr",\n "1": "next yr",\n "future": {\n "one": "in {0} yr",\n "other": "in {0} yr"\n },\n "past": {\n "one": "{0} yr ago",\n "other": "{0} yr ago"\n },\n "-1": "last yr"\n },\n "year-narrow": {\n "0": "this yr",\n "1": "next yr",\n "future": {\n "one": "in {0} yr",\n "other": "in {0} yr"\n },\n "past": {\n "one": "{0} yr ago",\n "other": "{0} yr ago"\n },\n "-1": "last yr"\n },\n "quarter-short": {\n "0": "this qtr.",\n "1": "next qtr.",\n "future": {\n "one": "in {0} qtr",\n "other": "in {0} qtr"\n },\n "past": {\n "one": "{0} qtr ago",\n "other": "{0} qtr ago"\n },\n "-1": "last qtr."\n },\n "quarter-narrow": {\n "0": "this qtr.",\n "1": "next qtr.",\n "future": {\n "one": "in {0} qtr",\n "other": "in {0} qtr"\n },\n "past": {\n "one": "{0} qtr ago",\n "other": "{0} qtr ago"\n },\n "-1": "last qtr."\n },\n "month-short": {\n "0": "this mo",\n "1": "next mo",\n "future": {\n "one": "in {0} mo",\n "other": "in {0} mo"\n },\n "past": {\n "one": "{0} mo ago",\n "other": "{0} mo ago"\n },\n "-1": "last mo"\n },\n "month-narrow": {\n "0": "this mo",\n "1": "next mo",\n "future": {\n "one": "in {0} mo",\n "other": "in {0} mo"\n },\n "past": {\n "one": "{0} mo ago",\n "other": "{0} mo ago"\n },\n "-1": "last mo"\n },\n "week-short": {\n "0": "this wk",\n "1": "next wk",\n "future": {\n "one": "in {0} wk",\n "other": "in {0} wk"\n },\n "past": {\n "one": "{0} wk ago",\n "other": "{0} wk ago"\n },\n "-1": "last wk"\n },\n "week-narrow": {\n "0": "this wk",\n "1": "next wk",\n "future": {\n "one": "in {0} wk",\n "other": "in {0} wk"\n },\n "past": {\n "one": "{0} wk ago",\n "other": "{0} wk ago"\n },\n "-1": "last wk"\n },\n "hour-short": {\n "0": "this hour",\n "future": {\n "one": "in {0} hr",\n "other": "in {0} hr"\n },\n "past": {\n "one": "{0} hr ago",\n "other": "{0} hr ago"\n }\n },\n "hour-narrow": {\n "0": "this hour",\n "future": {\n "one": "in {0} hr",\n "other": "in {0} hr"\n },\n "past": {\n "one": "{0} hr ago",\n "other": "{0} hr ago"\n }\n },\n "minute-short": {\n "0": "this minute",\n "future": {\n "one": "in {0} min",\n "other": "in {0} min"\n },\n "past": {\n "one": "{0} min ago",\n "other": "{0} min ago"\n }\n },\n "minute-narrow": {\n "0": "this minute",\n "future": {\n "one": "in {0} min",\n "other": "in {0} min"\n },\n "past": {\n "one": "{0} min ago",\n "other": "{0} min ago"\n }\n },\n "second-short": {\n "0": "now",\n "future": {\n "one": "in {0} sec",\n "other": "in {0} sec"\n },\n "past": {\n "one": "{0} sec ago",\n "other": "{0} sec ago"\n }\n },\n "second-narrow": {\n "0": "now",\n "future": {\n "one": "in {0} sec",\n "other": "in {0} sec"\n },\n "past": {\n "one": "{0} sec ago",\n "other": "{0} sec ago"\n }\n }\n },\n "en-150": {\n "year-short": {\n "0": "this yr",\n "1": "next yr",\n "future": {\n "one": "in {0} yr",\n "other": "in {0} yr"\n },\n "past": {\n "one": "{0} yr ago",\n "other": "{0} yr ago"\n },\n "-1": "last yr"\n },\n "year-narrow": {\n "0": "this yr",\n "1": "next yr",\n "future": {\n "one": "in {0} yr",\n "other": "in {0} yr"\n },\n "past": {\n "one": "{0} yr ago",\n "other": "{0} yr ago"\n },\n "-1": "last yr"\n },\n "quarter-short": {\n "0": "this qtr.",\n "1": "next qtr.",\n "future": {\n "one": "in {0} qtr",\n "other": "in {0} qtr"\n },\n "past": {\n "one": "{0} qtr ago",\n "other": "{0} qtr ago"\n },\n "-1": "last qtr."\n },\n "quarter-narrow": {\n "0": "this qtr.",\n "1": "next qtr.",\n "future": {\n "one": "in {0} qtr",\n "other": "in {0} qtr"\n },\n "past": {\n "one": "{0} qtr ago",\n "other": "{0} qtr ago"\n },\n "-1": "last qtr."\n },\n "month-short": {\n "0": "this mo",\n "1": "next mo",\n "future": {\n "one": "in {0} mo",\n "other": "in {0} mo"\n },\n "past": {\n "one": "{0} mo ago",\n "other": "{0} mo ago"\n },\n "-1": "last mo"\n },\n "month-narrow": {\n "0": "this mo",\n "1": "next mo",\n "future": {\n "one": "in {0} mo",\n "other": "in {0} mo"\n },\n "past": {\n "one": "{0} mo ago",\n "other": "{0} mo ago"\n },\n "-1": "last mo"\n },\n "week-short": {\n "0": "this wk",\n "1": "next wk",\n "future": {\n "one": "in {0} wk",\n "other": "in {0} wk"\n },\n "past": {\n "one": "{0} wk ago",\n "other": "{0} wk ago"\n },\n "-1": "last wk"\n },\n "week-narrow": {\n "0": "this wk",\n "1": "next wk",\n "future": {\n "one": "in {0} wk",\n "other": "in {0} wk"\n },\n "past": {\n "one": "{0} wk ago",\n "other": "{0} wk ago"\n },\n "-1": "last wk"\n },\n "hour-short": {\n "0": "this hour",\n "future": {\n "one": "in {0} hr",\n "other": "in {0} hr"\n },\n "past": {\n "one": "{0} hr ago",\n "other": "{0} hr ago"\n }\n },\n "hour-narrow": {\n "0": "this hour",\n "future": {\n "one": "in {0} hr",\n "other": "in {0} hr"\n },\n "past": {\n "one": "{0} hr ago",\n "other": "{0} hr ago"\n }\n },\n "minute-short": {\n "0": "this minute",\n "future": {\n "one": "in {0} min",\n "other": "in {0} min"\n },\n "past": {\n "one": "{0} min ago",\n "other": "{0} min ago"\n }\n },\n "minute-narrow": {\n "0": "this minute",\n "future": {\n "one": "in {0} min",\n "other": "in {0} min"\n },\n "past": {\n "one": "{0} min ago",\n "other": "{0} min ago"\n }\n },\n "second-short": {\n "0": "now",\n "future": {\n "one": "in {0} sec",\n "other": "in {0} sec"\n },\n "past": {\n "one": "{0} sec ago",\n "other": "{0} sec ago"\n }\n },\n "second-narrow": {\n "0": "now",\n "future": {\n "one": "in {0} sec",\n "other": "in {0} sec"\n },\n "past": {\n "one": "{0} sec ago",\n "other": "{0} sec ago"\n }\n }\n },\n "en-AU": {\n "year-short": {\n "0": "this yr",\n "1": "next yr",\n "future": {\n "one": "in {0} yr",\n "other": "in {0} yrs"\n },\n "past": {\n "one": "{0} yr ago",\n "other": "{0} yrs ago"\n },\n "-1": "last yr"\n },\n "year-narrow": {\n "0": "this yr",\n "1": "next yr",\n "future": {\n "one": "in {0} yr",\n "other": "in {0} yrs"\n },\n "past": {\n "one": "{0} yr ago",\n "other": "{0} yrs ago"\n },\n "-1": "last yr"\n },\n "quarter-short": {\n "0": "this qtr.",\n "1": "next qtr.",\n "future": {\n "one": "in {0} qtr",\n "other": "in {0} qtrs"\n },\n "past": {\n "one": "{0} qtr ago",\n "other": "{0} qtrs ago"\n },\n "-1": "last qtr."\n },\n "quarter-narrow": {\n "0": "this qtr.",\n "1": "next qtr.",\n "future": {\n "one": "in {0} qtr",\n "other": "in {0} qtrs"\n },\n "past": {\n "one": "in {0} qtr ago",\n "other": "{0} qtrs ago"\n },\n "-1": "last qtr."\n },\n "month-short": {\n "0": "this mo",\n "1": "next mo",\n "future": {\n "one": "in {0} mo.",\n "other": "in {0} mo."\n },\n "past": {\n "one": "{0} mo. ago",\n "other": "{0} mo. ago"\n },\n "-1": "last mo"\n },\n "month-narrow": {\n "0": "this mo",\n "1": "next mo",\n "future": {\n "one": "in {0} mo.",\n "other": "in {0} mo."\n },\n "past": {\n "one": "{0} mo. ago",\n "other": "{0} mo. ago"\n },\n "-1": "last mo"\n },\n "week-short": {\n "0": "this wk",\n "1": "next wk",\n "future": {\n "one": "in {0} wk",\n "other": "in {0} wks"\n },\n "past": {\n "one": "{0} wk ago",\n "other": "{0} wks ago"\n },\n "-1": "last wk"\n },\n "week-narrow": {\n "0": "this wk",\n "1": "next wk",\n "future": {\n "one": "in {0} wk",\n "other": "in {0} wks"\n },\n "past": {\n "one": "{0} wk ago",\n "other": "{0} wks ago"\n },\n "-1": "last wk"\n },\n "hour-short": {\n "0": "this hour",\n "future": {\n "one": "in {0} hr",\n "other": "in {0} hrs"\n },\n "past": {\n "one": "{0} hr ago",\n "other": "{0} hrs ago"\n }\n },\n "hour-narrow": {\n "0": "this hour",\n "future": {\n "one": "in {0} hr",\n "other": "in {0} hrs"\n },\n "past": {\n "one": "{0} hr ago",\n "other": "{0} hrs ago"\n }\n },\n "minute-short": {\n "0": "this minute",\n "future": {\n "one": "in {0} min.",\n "other": "in {0} mins"\n },\n "past": {\n "one": "{0} min. ago",\n "other": "{0} mins ago"\n }\n },\n "minute-narrow": {\n "0": "this minute",\n "future": {\n "one": "in {0} min.",\n "other": "in {0} mins"\n },\n "past": {\n "one": "{0} min. ago",\n "other": "{0} mins ago"\n }\n },\n "second-short": {\n "0": "now",\n "future": {\n "one": "in {0} sec.",\n "other": "in {0} secs"\n },\n "past": {\n "one": "{0} sec. ago",\n "other": "{0} secs ago"\n }\n },\n "second-narrow": {\n "0": "now",\n "future": {\n "one": "in {0} sec.",\n "other": "in {0} secs"\n },\n "past": {\n "one": "{0} sec. ago",\n "other": "{0} secs ago"\n }\n }\n },\n "en-CA": {\n "year-short": {\n "0": "this yr",\n "1": "next yr",\n "future": {\n "one": "in {0} yr.",\n "other": "in {0} yrs."\n },\n "past": {\n "one": "{0} yr. ago",\n "other": "{0} yrs. ago"\n },\n "-1": "last yr"\n },\n "year-narrow": {\n "0": "this yr",\n "1": "next yr",\n "future": {\n "one": "in {0} yr.",\n "other": "in {0} yrs."\n },\n "past": {\n "one": "{0} yr. ago",\n "other": "{0} yrs. ago"\n },\n "-1": "last yr"\n },\n "quarter-short": {\n "0": "this qtr.",\n "1": "next qtr.",\n "future": {\n "one": "in {0} qtr.",\n "other": "in {0} qtrs."\n },\n "past": {\n "one": "{0} qtr. ago",\n "other": "{0} qtrs. ago"\n },\n "-1": "last qtr."\n },\n "quarter-narrow": {\n "0": "this qtr.",\n "1": "next qtr.",\n "future": {\n "one": "in {0} qtr.",\n "other": "in {0} qtrs."\n },\n "past": {\n "one": "{0} qtr. ago",\n "other": "{0} qtrs. ago"\n },\n "-1": "last qtr."\n },\n "month-short": {\n "0": "this mo",\n "1": "next mo",\n "future": {\n "one": "in {0} mo.",\n "other": "in {0} mos."\n },\n "past": {\n "one": "{0} mo. ago",\n "other": "{0} mos. ago"\n },\n "-1": "last mo"\n },\n "month-narrow": {\n "0": "this mo",\n "1": "next mo",\n "future": {\n "one": "in {0} mo.",\n "other": "in {0} mos."\n },\n "past": {\n "one": "{0} mo. ago",\n "other": "{0} mos. ago"\n },\n "-1": "last mo"\n },\n "week-short": {\n "0": "this wk",\n "1": "next wk",\n "future": {\n "one": "in {0} wk.",\n "other": "in {0} wks."\n },\n "past": {\n "one": "{0} wk. ago",\n "other": "{0} wks. ago"\n },\n "-1": "last wk"\n },\n "week-narrow": {\n "0": "this wk",\n "1": "next wk",\n "future": {\n "one": "in {0} wk.",\n "other": "in {0} wks."\n },\n "past": {\n "one": "{0} wk. ago",\n "other": "{0} wks. ago"\n },\n "-1": "last wk"\n },\n "hour-short": {\n "0": "this hour",\n "future": {\n "one": "in {0} hr.",\n "other": "in {0} hrs."\n },\n "past": {\n "one": "{0} hr. ago",\n "other": "{0} hrs. ago"\n }\n },\n "hour-narrow": {\n "0": "this hour",\n "future": {\n "one": "in {0} hr.",\n "other": "in {0} hrs."\n },\n "past": {\n "one": "{0} hr. ago",\n "other": "{0} hrs. ago"\n }\n },\n "minute-short": {\n "0": "this minute",\n "future": {\n "one": "in {0} min.",\n "other": "in {0} mins."\n },\n "past": {\n "one": "{0} min. ago",\n "other": "{0} mins. ago"\n }\n },\n "minute-narrow": {\n "0": "this minute",\n "future": {\n "one": "in {0} min.",\n "other": "in {0} mins."\n },\n "past": {\n "one": "{0} min. ago",\n "other": "{0} mins. ago"\n }\n },\n "second-short": {\n "0": "now",\n "future": {\n "one": "in {0} sec.",\n "other": "in {0} secs."\n },\n "past": {\n "one": "{0} sec. ago",\n "other": "{0} secs. ago"\n }\n },\n "second-narrow": {\n "0": "now",\n "future": {\n "one": "in {0} sec.",\n "other": "in {0} secs."\n },\n "past": {\n "one": "{0} sec. ago",\n "other": "{0} secs. ago"\n }\n }\n },\n "en-SG": {\n "quarter-short": {\n "0": "this qtr",\n "1": "next qtr",\n "future": {\n "one": "in {0} qtr",\n "other": "in {0} qtrs"\n },\n "past": {\n "one": "{0} qtr ago",\n "other": "{0} qtrs ago"\n },\n "-1": "last qtr"\n },\n "quarter-narrow": {\n "0": "this qtr",\n "1": "next qtr",\n "future": {\n "one": "in {0} qtr",\n "other": "in {0} qtr"\n },\n "past": {\n "one": "{0} qtr ago",\n "other": "{0} qtr ago"\n },\n "-1": "last qtr"\n },\n "month-short": {\n "0": "this mth",\n "1": "next mth",\n "future": {\n "one": "in {0} mth",\n "other": "in {0} mth"\n },\n "past": {\n "one": "{0} mth ago",\n "other": "{0} mth ago"\n },\n "-1": "last mth"\n }\n },\n "en": {\n "nu": ["latn"],\n "year": {\n "0": "this year",\n "1": "next year",\n "future": {\n "one": "in {0} year",\n "other": "in {0} years"\n },\n "past": {\n "one": "{0} year ago",\n "other": "{0} years ago"\n },\n "-1": "last year"\n },\n "year-short": {\n "0": "this yr.",\n "1": "next yr.",\n "future": {\n "one": "in {0} yr.",\n "other": "in {0} yr."\n },\n "past": {\n "one": "{0} yr. ago",\n "other": "{0} yr. ago"\n },\n "-1": "last yr."\n },\n "year-narrow": {\n "0": "this yr.",\n "1": "next yr.",\n "future": {\n "one": "in {0} yr.",\n "other": "in {0} yr."\n },\n "past": {\n "one": "{0} yr. ago",\n "other": "{0} yr. ago"\n },\n "-1": "last yr."\n },\n "quarter": {\n "0": "this quarter",\n "1": "next quarter",\n "future": {\n "one": "in {0} quarter",\n "other": "in {0} quarters"\n },\n "past": {\n "one": "{0} quarter ago",\n "other": "{0} quarters ago"\n },\n "-1": "last quarter"\n },\n "quarter-short": {\n "0": "this qtr.",\n "1": "next qtr.",\n "future": {\n "one": "in {0} qtr.",\n "other": "in {0} qtrs."\n },\n "past": {\n "one": "{0} qtr. ago",\n "other": "{0} qtrs. ago"\n },\n "-1": "last qtr."\n },\n "quarter-narrow": {\n "0": "this qtr.",\n "1": "next qtr.",\n "future": {\n "one": "in {0} qtr.",\n "other": "in {0} qtrs."\n },\n "past": {\n "one": "{0} qtr. ago",\n "other": "{0} qtrs. ago"\n },\n "-1": "last qtr."\n },\n "month": {\n "0": "this month",\n "1": "next month",\n "future": {\n "one": "in {0} month",\n "other": "in {0} months"\n },\n "past": {\n "one": "{0} month ago",\n "other": "{0} months ago"\n },\n "-1": "last month"\n },\n "month-short": {\n "0": "this mo.",\n "1": "next mo.",\n "future": {\n "one": "in {0} mo.",\n "other": "in {0} mo."\n },\n "past": {\n "one": "{0} mo. ago",\n "other": "{0} mo. ago"\n },\n "-1": "last mo."\n },\n "month-narrow": {\n "0": "this mo.",\n "1": "next mo.",\n "future": {\n "one": "in {0} mo.",\n "other": "in {0} mo."\n },\n "past": {\n "one": "{0} mo. ago",\n "other": "{0} mo. ago"\n },\n "-1": "last mo."\n },\n "week": {\n "0": "this week",\n "1": "next week",\n "future": {\n "one": "in {0} week",\n "other": "in {0} weeks"\n },\n "past": {\n "one": "{0} week ago",\n "other": "{0} weeks ago"\n },\n "-1": "last week"\n },\n "week-short": {\n "0": "this wk.",\n "1": "next wk.",\n "future": {\n "one": "in {0} wk.",\n "other": "in {0} wk."\n },\n "past": {\n "one": "{0} wk. ago",\n "other": "{0} wk. ago"\n },\n "-1": "last wk."\n },\n "week-narrow": {\n "0": "this wk.",\n "1": "next wk.",\n "future": {\n "one": "in {0} wk.",\n "other": "in {0} wk."\n },\n "past": {\n "one": "{0} wk. ago",\n "other": "{0} wk. ago"\n },\n "-1": "last wk."\n },\n "day": {\n "0": "today",\n "1": "tomorrow",\n "future": {\n "one": "in {0} day",\n "other": "in {0} days"\n },\n "past": {\n "one": "{0} day ago",\n "other": "{0} days ago"\n },\n "-1": "yesterday"\n },\n "day-short": {\n "0": "today",\n "1": "tomorrow",\n "future": {\n "one": "in {0} day",\n "other": "in {0} days"\n },\n "past": {\n "one": "{0} day ago",\n "other": "{0} days ago"\n },\n "-1": "yesterday"\n },\n "day-narrow": {\n "0": "today",\n "1": "tomorrow",\n "future": {\n "one": "in {0} day",\n "other": "in {0} days"\n },\n "past": {\n "one": "{0} day ago",\n "other": "{0} days ago"\n },\n "-1": "yesterday"\n },\n "hour": {\n "0": "this hour",\n "future": {\n "one": "in {0} hour",\n "other": "in {0} hours"\n },\n "past": {\n "one": "{0} hour ago",\n "other": "{0} hours ago"\n }\n },\n "hour-short": {\n "0": "this hour",\n "future": {\n "one": "in {0} hr.",\n "other": "in {0} hr."\n },\n "past": {\n "one": "{0} hr. ago",\n "other": "{0} hr. ago"\n }\n },\n "hour-narrow": {\n "0": "this hour",\n "future": {\n "one": "in {0} hr.",\n "other": "in {0} hr."\n },\n "past": {\n "one": "{0} hr. ago",\n "other": "{0} hr. ago"\n }\n },\n "minute": {\n "0": "this minute",\n "future": {\n "one": "in {0} minute",\n "other": "in {0} minutes"\n },\n "past": {\n "one": "{0} minute ago",\n "other": "{0} minutes ago"\n }\n },\n "minute-short": {\n "0": "this minute",\n "future": {\n "one": "in {0} min.",\n "other": "in {0} min."\n },\n "past": {\n "one": "{0} min. ago",\n "other": "{0} min. ago"\n }\n },\n "minute-narrow": {\n "0": "this minute",\n "future": {\n "one": "in {0} min.",\n "other": "in {0} min."\n },\n "past": {\n "one": "{0} min. ago",\n "other": "{0} min. ago"\n }\n },\n "second": {\n "0": "now",\n "future": {\n "one": "in {0} second",\n "other": "in {0} seconds"\n },\n "past": {\n "one": "{0} second ago",\n "other": "{0} seconds ago"\n }\n },\n "second-short": {\n "0": "now",\n "future": {\n "one": "in {0} sec.",\n "other": "in {0} sec."\n },\n "past": {\n "one": "{0} sec. ago",\n "other": "{0} sec. ago"\n }\n },\n "second-narrow": {\n "0": "now",\n "future": {\n "one": "in {0} sec.",\n "other": "in {0} sec."\n },\n "past": {\n "one": "{0} sec. ago",\n "other": "{0} sec. ago"\n }\n }\n }\n },\n "availableLocales": ["en-001", "en-150", "en-AE", "en-AG", "en-AI", "en-AS", "en-AT", "en-AU", "en-BB", "en-BE", "en-BI", "en-BM", "en-BS", "en-BW", "en-BZ", "en-CA", "en-CC", "en-CH", "en-CK", "en-CM", "en-CX", "en-CY", "en-DE", "en-DG", "en-DK", "en-DM", "en-ER", "en-FI", "en-FJ", "en-FK", "en-FM", "en-GB", "en-GD", "en-GG", "en-GH", "en-GI", "en-GM", "en-GU", "en-GY", "en-HK", "en-IE", "en-IL", "en-IM", "en-IN", "en-IO", "en-JE", "en-JM", "en-KE", "en-KI", "en-KN", "en-KY", "en-LC", "en-LR", "en-LS", "en-MG", "en-MH", "en-MO", "en-MP", "en-MS", "en-MT", "en-MU", "en-MW", "en-MY", "en-NA", "en-NF", "en-NG", "en-NL", "en-NR", "en-NU", "en-NZ", "en-PG", "en-PH", "en-PK", "en-PN", "en-PR", "en-PW", "en-RW", "en-SB", "en-SC", "en-SD", "en-SE", "en-SG", "en-SH", "en-SI", "en-SL", "en-SS", "en-SX", "en-SZ", "en-TC", "en-TK", "en-TO", "en-TT", "en-TV", "en-TZ", "en-UG", "en-UM", "en-US-POSIX", "en-US", "en-VC", "en-VG", "en-VI", "en-VU", "en-WS", "en-ZA", "en-ZM", "en-ZW", "en"],\n "aliases": {},\n "parentLocales": {\n "en-150": "en-001",\n "en-AG": "en-001",\n "en-AI": "en-001",\n "en-AU": "en-001",\n "en-BB": "en-001",\n "en-BM": "en-001",\n "en-BS": "en-001",\n "en-BW": "en-001",\n "en-BZ": "en-001",\n "en-CA": "en-001",\n "en-CC": "en-001",\n "en-CK": "en-001",\n "en-CM": "en-001",\n "en-CX": "en-001",\n "en-CY": "en-001",\n "en-DG": "en-001",\n "en-DM": "en-001",\n "en-ER": "en-001",\n "en-FJ": "en-001",\n "en-FK": "en-001",\n "en-FM": "en-001",\n "en-GB": "en-001",\n "en-GD": "en-001",\n "en-GG": "en-001",\n "en-GH": "en-001",\n "en-GI": "en-001",\n "en-GM": "en-001",\n "en-GY": "en-001",\n "en-HK": "en-001",\n "en-IE": "en-001",\n "en-IL": "en-001",\n "en-IM": "en-001",\n "en-IN": "en-001",\n "en-IO": "en-001",\n "en-JE": "en-001",\n "en-JM": "en-001",\n "en-KE": "en-001",\n "en-KI": "en-001",\n "en-KN": "en-001",\n "en-KY": "en-001",\n "en-LC": "en-001",\n "en-LR": "en-001",\n "en-LS": "en-001",\n "en-MG": "en-001",\n "en-MO": "en-001",\n "en-MS": "en-001",\n "en-MT": "en-001",\n "en-MU": "en-001",\n "en-MW": "en-001",\n "en-MY": "en-001",\n "en-NA": "en-001",\n "en-NF": "en-001",\n "en-NG": "en-001",\n "en-NR": "en-001",\n "en-NU": "en-001",\n "en-NZ": "en-001",\n "en-PG": "en-001",\n "en-PH": "en-001",\n "en-PK": "en-001",\n "en-PN": "en-001",\n "en-PW": "en-001",\n "en-RW": "en-001",\n "en-SB": "en-001",\n "en-SC": "en-001",\n "en-SD": "en-001",\n "en-SG": "en-001",\n "en-SH": "en-001",\n "en-SL": "en-001",\n "en-SS": "en-001",\n "en-SX": "en-001",\n "en-SZ": "en-001",\n "en-TC": "en-001",\n "en-TK": "en-001",\n "en-TO": "en-001",\n "en-TT": "en-001",\n "en-TV": "en-001",\n "en-TZ": "en-001",\n "en-UG": "en-001",\n "en-VC": "en-001",\n "en-VG": "en-001",\n "en-VU": "en-001",\n "en-WS": "en-001",\n "en-ZA": "en-001",\n "en-ZM": "en-001",\n "en-ZW": "en-001",\n "en-AT": "en-150",\n "en-BE": "en-150",\n "en-CH": "en-150",\n "en-DE": "en-150",\n "en-DK": "en-150",\n "en-FI": "en-150",\n "en-NL": "en-150",\n "en-SE": "en-150",\n "en-SI": "en-150"\n }\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AZm9ybWF0anMvaW50bC1yZWxhdGl2ZXRpbWVmb3JtYXQvZGlzdC9sb2NhbGUtZGF0YS9lbi5qcz8zZTMyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsMEJBQTBCLEVBQUU7QUFDNUIsV0FBVztBQUNYO0FBQ0EscUJBQXFCLEVBQUU7QUFDdkIsdUJBQXVCLEVBQUU7QUFDekIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsMEJBQTBCLEVBQUU7QUFDNUIsV0FBVztBQUNYO0FBQ0EscUJBQXFCLEVBQUU7QUFDdkIsdUJBQXVCLEVBQUU7QUFDekIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsMEJBQTBCLEVBQUU7QUFDNUIsV0FBVztBQUNYO0FBQ0EscUJBQXFCLEVBQUU7QUFDdkIsdUJBQXVCLEVBQUU7QUFDekIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsMEJBQTBCLEVBQUU7QUFDNUIsV0FBVztBQUNYO0FBQ0EscUJBQXFCLEVBQUU7QUFDdkIsdUJBQXVCLEVBQUU7QUFDekIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsMEJBQTBCLEVBQUU7QUFDNUIsV0FBVztBQUNYO0FBQ0EscUJBQXFCLEVBQUU7QUFDdkIsdUJBQXVCLEVBQUU7QUFDekIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsMEJBQTBCLEVBQUU7QUFDNUIsV0FBVztBQUNYO0FBQ0EscUJBQXFCLEVBQUU7QUFDdkIsdUJBQXVCLEVBQUU7QUFDekIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsMEJBQTBCLEVBQUU7QUFDNUIsV0FBVztBQUNYO0FBQ0EscUJBQXFCLEVBQUU7QUFDdkIsdUJBQXVCLEVBQUU7QUFDekIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsMEJBQTBCLEVBQUU7QUFDNUIsV0FBVztBQUNYO0FBQ0EscUJBQXFCLEVBQUU7QUFDdkIsdUJBQXVCLEVBQUU7QUFDekIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsRUFBRTtBQUMxQiwwQkFBMEIsRUFBRTtBQUM1QixXQUFXO0FBQ1g7QUFDQSxxQkFBcUIsRUFBRTtBQUN2Qix1QkFBdUIsRUFBRTtBQUN6QjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsRUFBRTtBQUMxQiwwQkFBMEIsRUFBRTtBQUM1QixXQUFXO0FBQ1g7QUFDQSxxQkFBcUIsRUFBRTtBQUN2Qix1QkFBdUIsRUFBRTtBQUN6QjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsRUFBRTtBQUMxQiwwQkFBMEIsRUFBRTtBQUM1QixXQUFXO0FBQ1g7QUFDQSxxQkFBcUIsRUFBRTtBQUN2Qix1QkFBdUIsRUFBRTtBQUN6QjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsRUFBRTtBQUMxQiwwQkFBMEIsRUFBRTtBQUM1QixXQUFXO0FBQ1g7QUFDQSxxQkFBcUIsRUFBRTtBQUN2Qix1QkFBdUIsRUFBRTtBQUN6QjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsRUFBRTtBQUMxQiwwQkFBMEIsRUFBRTtBQUM1QixXQUFXO0FBQ1g7QUFDQSxxQkFBcUIsRUFBRTtBQUN2Qix1QkFBdUIsRUFBRTtBQUN6QjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsRUFBRTtBQUMxQiwwQkFBMEIsRUFBRTtBQUM1QixXQUFXO0FBQ1g7QUFDQSxxQkFBcUIsRUFBRTtBQUN2Qix1QkFBdUIsRUFBRTtBQUN6QjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsRUFBRTtBQUMxQiwwQkFBMEIsRUFBRTtBQUM1QixXQUFXO0FBQ1g7QUFDQSxxQkFBcUIsRUFBRTtBQUN2Qix1QkFBdUIsRUFBRTtBQUN6QixXQUFXO0FBQ1g7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsRUFBRTtBQUMxQiwwQkFBMEIsRUFBRTtBQUM1QixXQUFXO0FBQ1g7QUFDQSxxQkFBcUIsRUFBRTtBQUN2Qix1QkFBdUIsRUFBRTtBQUN6QixXQUFXO0FBQ1g7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsRUFBRTtBQUMxQiwwQkFBMEIsRUFBRTtBQUM1QixXQUFXO0FBQ1g7QUFDQSxxQkFBcUIsRUFBRTtBQUN2Qix1QkFBdUIsRUFBRTtBQUN6QixXQUFXO0FBQ1g7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsRUFBRTtBQUMxQiwwQkFBMEIsRUFBRTtBQUM1QixXQUFXO0FBQ1g7QUFDQSx3QkFBd0IsRUFBRTtBQUMxQix1QkFBdUIsRUFBRTtBQUN6QixXQUFXO0FBQ1g7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsRUFBRTtBQUMxQiwwQkFBMEIsRUFBRTtBQUM1QixXQUFXO0FBQ1g7QUFDQSxxQkFBcUIsRUFBRTtBQUN2Qix1QkFBdUIsRUFBRTtBQUN6QixXQUFXO0FBQ1g7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsRUFBRTtBQUMxQiwwQkFBMEIsRUFBRTtBQUM1QixXQUFXO0FBQ1g7QUFDQSxxQkFBcUIsRUFBRTtBQUN2Qix1QkFBdUIsRUFBRTtBQUN6QixXQUFXO0FBQ1g7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsRUFBRTtBQUMxQiwwQkFBMEIsRUFBRTtBQUM1QixXQUFXO0FBQ1g7QUFDQSxxQkFBcUIsRUFBRTtBQUN2Qix1QkFBdUIsRUFBRTtBQUN6QixXQUFXO0FBQ1g7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsRUFBRTtBQUMxQiwwQkFBMEIsRUFBRTtBQUM1QixXQUFXO0FBQ1g7QUFDQSxxQkFBcUIsRUFBRTtBQUN2Qix1QkFBdUIsRUFBRTtBQUN6QixXQUFXO0FBQ1g7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsMEJBQTBCLEVBQUU7QUFDNUIsV0FBVztBQUNYO0FBQ0EscUJBQXFCLEVBQUU7QUFDdkIsdUJBQXVCLEVBQUU7QUFDekI7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsMEJBQTBCLEVBQUU7QUFDNUIsV0FBVztBQUNYO0FBQ0EscUJBQXFCLEVBQUU7QUFDdkIsdUJBQXVCLEVBQUU7QUFDekI7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsMEJBQTBCLEVBQUU7QUFDNUIsV0FBVztBQUNYO0FBQ0EscUJBQXFCLEVBQUU7QUFDdkIsdUJBQXVCLEVBQUU7QUFDekI7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsMEJBQTBCLEVBQUU7QUFDNUIsV0FBVztBQUNYO0FBQ0EscUJBQXFCLEVBQUU7QUFDdkIsdUJBQXVCLEVBQUU7QUFDekI7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsMEJBQTBCLEVBQUU7QUFDNUIsV0FBVztBQUNYO0FBQ0EscUJBQXFCLEVBQUU7QUFDdkIsdUJBQXVCLEVBQUU7QUFDekI7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsMEJBQTBCLEVBQUU7QUFDNUIsV0FBVztBQUNYO0FBQ0EscUJBQXFCLEVBQUU7QUFDdkIsdUJBQXVCLEVBQUU7QUFDekI7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsMEJBQTBCLEVBQUU7QUFDNUIsV0FBVztBQUNYO0FBQ0EscUJBQXFCLEVBQUU7QUFDdkIsdUJBQXVCLEVBQUU7QUFDekIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsMEJBQTBCLEVBQUU7QUFDNUIsV0FBVztBQUNYO0FBQ0EscUJBQXFCLEVBQUU7QUFDdkIsdUJBQXVCLEVBQUU7QUFDekIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsMEJBQTBCLEVBQUU7QUFDNUIsV0FBVztBQUNYO0FBQ0EscUJBQXFCLEVBQUU7QUFDdkIsdUJBQXVCLEVBQUU7QUFDekIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsMEJBQTBCLEVBQUU7QUFDNUIsV0FBVztBQUNYO0FBQ0EscUJBQXFCLEVBQUU7QUFDdkIsdUJBQXVCLEVBQUU7QUFDekIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsMEJBQTBCLEVBQUU7QUFDNUIsV0FBVztBQUNYO0FBQ0EscUJBQXFCLEVBQUU7QUFDdkIsdUJBQXVCLEVBQUU7QUFDekIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsMEJBQTBCLEVBQUU7QUFDNUIsV0FBVztBQUNYO0FBQ0EscUJBQXFCLEVBQUU7QUFDdkIsdUJBQXVCLEVBQUU7QUFDekIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsMEJBQTBCLEVBQUU7QUFDNUIsV0FBVztBQUNYO0FBQ0EscUJBQXFCLEVBQUU7QUFDdkIsdUJBQXVCLEVBQUU7QUFDekIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsMEJBQTBCLEVBQUU7QUFDNUIsV0FBVztBQUNYO0FBQ0EscUJBQXFCLEVBQUU7QUFDdkIsdUJBQXVCLEVBQUU7QUFDekIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsRUFBRTtBQUMxQiwwQkFBMEIsRUFBRTtBQUM1QixXQUFXO0FBQ1g7QUFDQSxxQkFBcUIsRUFBRTtBQUN2Qix1QkFBdUIsRUFBRTtBQUN6QjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsRUFBRTtBQUMxQiwwQkFBMEIsRUFBRTtBQUM1QixXQUFXO0FBQ1g7QUFDQSxxQkFBcUIsRUFBRTtBQUN2Qix1QkFBdUIsRUFBRTtBQUN6QjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsRUFBRTtBQUMxQiwwQkFBMEIsRUFBRTtBQUM1QixXQUFXO0FBQ1g7QUFDQSxxQkFBcUIsRUFBRTtBQUN2Qix1QkFBdUIsRUFBRTtBQUN6QjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsRUFBRTtBQUMxQiwwQkFBMEIsRUFBRTtBQUM1QixXQUFXO0FBQ1g7QUFDQSxxQkFBcUIsRUFBRTtBQUN2Qix1QkFBdUIsRUFBRTtBQUN6QjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsRUFBRTtBQUMxQiwwQkFBMEIsRUFBRTtBQUM1QixXQUFXO0FBQ1g7QUFDQSxxQkFBcUIsRUFBRTtBQUN2Qix1QkFBdUIsRUFBRTtBQUN6QjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsRUFBRTtBQUMxQiwwQkFBMEIsRUFBRTtBQUM1QixXQUFXO0FBQ1g7QUFDQSxxQkFBcUIsRUFBRTtBQUN2Qix1QkFBdUIsRUFBRTtBQUN6QjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsRUFBRTtBQUMxQiwwQkFBMEIsRUFBRTtBQUM1QixXQUFXO0FBQ1g7QUFDQSxxQkFBcUIsRUFBRTtBQUN2Qix1QkFBdUIsRUFBRTtBQUN6QjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsRUFBRTtBQUMxQiwwQkFBMEIsRUFBRTtBQUM1QixXQUFXO0FBQ1g7QUFDQSxxQkFBcUIsRUFBRTtBQUN2Qix1QkFBdUIsRUFBRTtBQUN6QjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsRUFBRTtBQUMxQiwwQkFBMEIsRUFBRTtBQUM1QixXQUFXO0FBQ1g7QUFDQSxxQkFBcUIsRUFBRTtBQUN2Qix1QkFBdUIsRUFBRTtBQUN6QjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIIiwiZmlsZSI6IjgwNzkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBAZ2VuZXJhdGVkICovXG4vLyBwcmV0dGllci1pZ25vcmVcbmlmIChJbnRsLlJlbGF0aXZlVGltZUZvcm1hdCAmJiB0eXBlb2YgSW50bC5SZWxhdGl2ZVRpbWVGb3JtYXQuX19hZGRMb2NhbGVEYXRhID09PSAnZnVuY3Rpb24nKSB7XG4gIEludGwuUmVsYXRpdmVUaW1lRm9ybWF0Ll9fYWRkTG9jYWxlRGF0YSh7XG4gICAgXCJkYXRhXCI6IHtcbiAgICAgIFwiZW4tMDAxXCI6IHtcbiAgICAgICAgXCJ5ZWFyLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIHlyXCIsXG4gICAgICAgICAgXCIxXCI6IFwibmV4dCB5clwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IHlyXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaW4gezB9IHlyXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSB5ciBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0geXIgYWdvXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJsYXN0IHlyXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ5ZWFyLW5hcnJvd1wiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyB5clwiLFxuICAgICAgICAgIFwiMVwiOiBcIm5leHQgeXJcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSB5clwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSB5clwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0geXIgYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IHlyIGFnb1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwibGFzdCB5clwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicXVhcnRlci1zaG9ydFwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyBxdHIuXCIsXG4gICAgICAgICAgXCIxXCI6IFwibmV4dCBxdHIuXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0gcXRyXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaW4gezB9IHF0clwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0gcXRyIGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSBxdHIgYWdvXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJsYXN0IHF0ci5cIlxuICAgICAgICB9LFxuICAgICAgICBcInF1YXJ0ZXItbmFycm93XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIHF0ci5cIixcbiAgICAgICAgICBcIjFcIjogXCJuZXh0IHF0ci5cIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSBxdHJcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJpbiB7MH0gcXRyXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSBxdHIgYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IHF0ciBhZ29cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImxhc3QgcXRyLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibW9udGgtc2hvcnRcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgbW9cIixcbiAgICAgICAgICBcIjFcIjogXCJuZXh0IG1vXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0gbW9cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJpbiB7MH0gbW9cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiezB9IG1vIGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSBtbyBhZ29cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImxhc3QgbW9cIlxuICAgICAgICB9LFxuICAgICAgICBcIm1vbnRoLW5hcnJvd1wiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyBtb1wiLFxuICAgICAgICAgIFwiMVwiOiBcIm5leHQgbW9cIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSBtb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSBtb1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0gbW8gYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IG1vIGFnb1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwibGFzdCBtb1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwid2Vlay1zaG9ydFwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyB3a1wiLFxuICAgICAgICAgIFwiMVwiOiBcIm5leHQgd2tcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSB3a1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSB3a1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0gd2sgYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IHdrIGFnb1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwibGFzdCB3a1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwid2Vlay1uYXJyb3dcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgd2tcIixcbiAgICAgICAgICBcIjFcIjogXCJuZXh0IHdrXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0gd2tcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJpbiB7MH0gd2tcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiezB9IHdrIGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSB3ayBhZ29cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImxhc3Qgd2tcIlxuICAgICAgICB9LFxuICAgICAgICBcImhvdXItc2hvcnRcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgaG91clwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IGhyXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaW4gezB9IGhyXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSBociBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0gaHIgYWdvXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiaG91ci1uYXJyb3dcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgaG91clwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IGhyXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaW4gezB9IGhyXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSBociBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0gaHIgYWdvXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwibWludXRlLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIG1pbnV0ZVwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IG1pblwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSBtaW5cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiezB9IG1pbiBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0gbWluIGFnb1wiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcIm1pbnV0ZS1uYXJyb3dcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgbWludXRlXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0gbWluXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaW4gezB9IG1pblwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0gbWluIGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSBtaW4gYWdvXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwic2Vjb25kLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJub3dcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSBzZWNcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJpbiB7MH0gc2VjXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSBzZWMgYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IHNlYyBhZ29cIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJzZWNvbmQtbmFycm93XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJub3dcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSBzZWNcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJpbiB7MH0gc2VjXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSBzZWMgYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IHNlYyBhZ29cIlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwiZW4tMTUwXCI6IHtcbiAgICAgICAgXCJ5ZWFyLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIHlyXCIsXG4gICAgICAgICAgXCIxXCI6IFwibmV4dCB5clwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IHlyXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaW4gezB9IHlyXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSB5ciBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0geXIgYWdvXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJsYXN0IHlyXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ5ZWFyLW5hcnJvd1wiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyB5clwiLFxuICAgICAgICAgIFwiMVwiOiBcIm5leHQgeXJcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSB5clwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSB5clwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0geXIgYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IHlyIGFnb1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwibGFzdCB5clwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicXVhcnRlci1zaG9ydFwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyBxdHIuXCIsXG4gICAgICAgICAgXCIxXCI6IFwibmV4dCBxdHIuXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0gcXRyXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaW4gezB9IHF0clwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0gcXRyIGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSBxdHIgYWdvXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJsYXN0IHF0ci5cIlxuICAgICAgICB9LFxuICAgICAgICBcInF1YXJ0ZXItbmFycm93XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIHF0ci5cIixcbiAgICAgICAgICBcIjFcIjogXCJuZXh0IHF0ci5cIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSBxdHJcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJpbiB7MH0gcXRyXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSBxdHIgYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IHF0ciBhZ29cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImxhc3QgcXRyLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibW9udGgtc2hvcnRcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgbW9cIixcbiAgICAgICAgICBcIjFcIjogXCJuZXh0IG1vXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0gbW9cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJpbiB7MH0gbW9cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiezB9IG1vIGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSBtbyBhZ29cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImxhc3QgbW9cIlxuICAgICAgICB9LFxuICAgICAgICBcIm1vbnRoLW5hcnJvd1wiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyBtb1wiLFxuICAgICAgICAgIFwiMVwiOiBcIm5leHQgbW9cIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSBtb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSBtb1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0gbW8gYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IG1vIGFnb1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwibGFzdCBtb1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwid2Vlay1zaG9ydFwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyB3a1wiLFxuICAgICAgICAgIFwiMVwiOiBcIm5leHQgd2tcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSB3a1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSB3a1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0gd2sgYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IHdrIGFnb1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwibGFzdCB3a1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwid2Vlay1uYXJyb3dcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgd2tcIixcbiAgICAgICAgICBcIjFcIjogXCJuZXh0IHdrXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0gd2tcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJpbiB7MH0gd2tcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiezB9IHdrIGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSB3ayBhZ29cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImxhc3Qgd2tcIlxuICAgICAgICB9LFxuICAgICAgICBcImhvdXItc2hvcnRcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgaG91clwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IGhyXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaW4gezB9IGhyXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSBociBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0gaHIgYWdvXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiaG91ci1uYXJyb3dcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgaG91clwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IGhyXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaW4gezB9IGhyXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSBociBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0gaHIgYWdvXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwibWludXRlLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIG1pbnV0ZVwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IG1pblwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSBtaW5cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiezB9IG1pbiBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0gbWluIGFnb1wiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcIm1pbnV0ZS1uYXJyb3dcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgbWludXRlXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0gbWluXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaW4gezB9IG1pblwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0gbWluIGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSBtaW4gYWdvXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwic2Vjb25kLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJub3dcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSBzZWNcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJpbiB7MH0gc2VjXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSBzZWMgYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IHNlYyBhZ29cIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJzZWNvbmQtbmFycm93XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJub3dcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSBzZWNcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJpbiB7MH0gc2VjXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSBzZWMgYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IHNlYyBhZ29cIlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwiZW4tQVVcIjoge1xuICAgICAgICBcInllYXItc2hvcnRcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgeXJcIixcbiAgICAgICAgICBcIjFcIjogXCJuZXh0IHlyXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0geXJcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJpbiB7MH0geXJzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSB5ciBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0geXJzIGFnb1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwibGFzdCB5clwiXG4gICAgICAgIH0sXG4gICAgICAgIFwieWVhci1uYXJyb3dcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgeXJcIixcbiAgICAgICAgICBcIjFcIjogXCJuZXh0IHlyXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0geXJcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJpbiB7MH0geXJzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSB5ciBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0geXJzIGFnb1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwibGFzdCB5clwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicXVhcnRlci1zaG9ydFwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyBxdHIuXCIsXG4gICAgICAgICAgXCIxXCI6IFwibmV4dCBxdHIuXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0gcXRyXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaW4gezB9IHF0cnNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiezB9IHF0ciBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0gcXRycyBhZ29cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImxhc3QgcXRyLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicXVhcnRlci1uYXJyb3dcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgcXRyLlwiLFxuICAgICAgICAgIFwiMVwiOiBcIm5leHQgcXRyLlwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IHF0clwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSBxdHJzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSBxdHIgYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IHF0cnMgYWdvXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJsYXN0IHF0ci5cIlxuICAgICAgICB9LFxuICAgICAgICBcIm1vbnRoLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIG1vXCIsXG4gICAgICAgICAgXCIxXCI6IFwibmV4dCBtb1wiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IG1vLlwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSBtby5cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiezB9IG1vLiBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0gbW8uIGFnb1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwibGFzdCBtb1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwibW9udGgtbmFycm93XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIG1vXCIsXG4gICAgICAgICAgXCIxXCI6IFwibmV4dCBtb1wiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IG1vLlwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSBtby5cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiezB9IG1vLiBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0gbW8uIGFnb1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwibGFzdCBtb1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwid2Vlay1zaG9ydFwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyB3a1wiLFxuICAgICAgICAgIFwiMVwiOiBcIm5leHQgd2tcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSB3a1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSB3a3NcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiezB9IHdrIGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSB3a3MgYWdvXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJsYXN0IHdrXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ3ZWVrLW5hcnJvd1wiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyB3a1wiLFxuICAgICAgICAgIFwiMVwiOiBcIm5leHQgd2tcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSB3a1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSB3a3NcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiezB9IHdrIGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSB3a3MgYWdvXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJsYXN0IHdrXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJob3VyLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIGhvdXJcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSBoclwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSBocnNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiezB9IGhyIGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSBocnMgYWdvXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiaG91ci1uYXJyb3dcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgaG91clwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IGhyXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaW4gezB9IGhyc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0gaHIgYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IGhycyBhZ29cIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJtaW51dGUtc2hvcnRcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgbWludXRlXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0gbWluLlwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSBtaW5zXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSBtaW4uIGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSBtaW5zIGFnb1wiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcIm1pbnV0ZS1uYXJyb3dcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgbWludXRlXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0gbWluLlwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSBtaW5zXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSBtaW4uIGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSBtaW5zIGFnb1wiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcInNlY29uZC1zaG9ydFwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwibm93XCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0gc2VjLlwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSBzZWNzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSBzZWMuIGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSBzZWNzIGFnb1wiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcInNlY29uZC1uYXJyb3dcIjoge1xuICAgICAgICAgIFwiMFwiOiBcIm5vd1wiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IHNlYy5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJpbiB7MH0gc2Vjc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0gc2VjLiBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0gc2VjcyBhZ29cIlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwiZW4tQ0FcIjoge1xuICAgICAgICBcInllYXItc2hvcnRcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgeXJcIixcbiAgICAgICAgICBcIjFcIjogXCJuZXh0IHlyXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0geXIuXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaW4gezB9IHlycy5cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiezB9IHlyLiBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0geXJzLiBhZ29cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImxhc3QgeXJcIlxuICAgICAgICB9LFxuICAgICAgICBcInllYXItbmFycm93XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIHlyXCIsXG4gICAgICAgICAgXCIxXCI6IFwibmV4dCB5clwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IHlyLlwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSB5cnMuXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSB5ci4gYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IHlycy4gYWdvXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJsYXN0IHlyXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJxdWFydGVyLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIHF0ci5cIixcbiAgICAgICAgICBcIjFcIjogXCJuZXh0IHF0ci5cIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSBxdHIuXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaW4gezB9IHF0cnMuXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSBxdHIuIGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSBxdHJzLiBhZ29cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImxhc3QgcXRyLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicXVhcnRlci1uYXJyb3dcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgcXRyLlwiLFxuICAgICAgICAgIFwiMVwiOiBcIm5leHQgcXRyLlwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IHF0ci5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJpbiB7MH0gcXRycy5cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiezB9IHF0ci4gYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IHF0cnMuIGFnb1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwibGFzdCBxdHIuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtb250aC1zaG9ydFwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyBtb1wiLFxuICAgICAgICAgIFwiMVwiOiBcIm5leHQgbW9cIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSBtby5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJpbiB7MH0gbW9zLlwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0gbW8uIGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSBtb3MuIGFnb1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwibGFzdCBtb1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwibW9udGgtbmFycm93XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIG1vXCIsXG4gICAgICAgICAgXCIxXCI6IFwibmV4dCBtb1wiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IG1vLlwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSBtb3MuXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSBtby4gYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IG1vcy4gYWdvXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJsYXN0IG1vXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ3ZWVrLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIHdrXCIsXG4gICAgICAgICAgXCIxXCI6IFwibmV4dCB3a1wiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IHdrLlwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSB3a3MuXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSB3ay4gYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IHdrcy4gYWdvXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJsYXN0IHdrXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ3ZWVrLW5hcnJvd1wiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyB3a1wiLFxuICAgICAgICAgIFwiMVwiOiBcIm5leHQgd2tcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSB3ay5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJpbiB7MH0gd2tzLlwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0gd2suIGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSB3a3MuIGFnb1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwibGFzdCB3a1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiaG91ci1zaG9ydFwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyBob3VyXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0gaHIuXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaW4gezB9IGhycy5cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiezB9IGhyLiBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0gaHJzLiBhZ29cIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJob3VyLW5hcnJvd1wiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyBob3VyXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0gaHIuXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaW4gezB9IGhycy5cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiezB9IGhyLiBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0gaHJzLiBhZ29cIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJtaW51dGUtc2hvcnRcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgbWludXRlXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0gbWluLlwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSBtaW5zLlwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0gbWluLiBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0gbWlucy4gYWdvXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwibWludXRlLW5hcnJvd1wiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyBtaW51dGVcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSBtaW4uXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaW4gezB9IG1pbnMuXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSBtaW4uIGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSBtaW5zLiBhZ29cIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJzZWNvbmQtc2hvcnRcIjoge1xuICAgICAgICAgIFwiMFwiOiBcIm5vd1wiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IHNlYy5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJpbiB7MH0gc2Vjcy5cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiezB9IHNlYy4gYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IHNlY3MuIGFnb1wiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcInNlY29uZC1uYXJyb3dcIjoge1xuICAgICAgICAgIFwiMFwiOiBcIm5vd1wiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IHNlYy5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJpbiB7MH0gc2Vjcy5cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiezB9IHNlYy4gYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IHNlY3MuIGFnb1wiXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJlbi1TR1wiOiB7XG4gICAgICAgIFwicXVhcnRlci1zaG9ydFwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyBxdHJcIixcbiAgICAgICAgICBcIjFcIjogXCJuZXh0IHF0clwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IHF0clwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSBxdHJzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSBxdHIgYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IHF0cnMgYWdvXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJsYXN0IHF0clwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicXVhcnRlci1uYXJyb3dcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgcXRyXCIsXG4gICAgICAgICAgXCIxXCI6IFwibmV4dCBxdHJcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSBxdHJcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJpbiB7MH0gcXRyXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSBxdHIgYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IHF0ciBhZ29cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImxhc3QgcXRyXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtb250aC1zaG9ydFwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyBtdGhcIixcbiAgICAgICAgICBcIjFcIjogXCJuZXh0IG10aFwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IG10aFwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSBtdGhcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiezB9IG10aCBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0gbXRoIGFnb1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwibGFzdCBtdGhcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJlblwiOiB7XG4gICAgICAgIFwibnVcIjogW1wibGF0blwiXSxcbiAgICAgICAgXCJ5ZWFyXCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIHllYXJcIixcbiAgICAgICAgICBcIjFcIjogXCJuZXh0IHllYXJcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSB5ZWFyXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaW4gezB9IHllYXJzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSB5ZWFyIGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSB5ZWFycyBhZ29cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImxhc3QgeWVhclwiXG4gICAgICAgIH0sXG4gICAgICAgIFwieWVhci1zaG9ydFwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyB5ci5cIixcbiAgICAgICAgICBcIjFcIjogXCJuZXh0IHlyLlwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IHlyLlwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSB5ci5cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiezB9IHlyLiBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0geXIuIGFnb1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwibGFzdCB5ci5cIlxuICAgICAgICB9LFxuICAgICAgICBcInllYXItbmFycm93XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIHlyLlwiLFxuICAgICAgICAgIFwiMVwiOiBcIm5leHQgeXIuXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0geXIuXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaW4gezB9IHlyLlwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0geXIuIGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSB5ci4gYWdvXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJsYXN0IHlyLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicXVhcnRlclwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyBxdWFydGVyXCIsXG4gICAgICAgICAgXCIxXCI6IFwibmV4dCBxdWFydGVyXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0gcXVhcnRlclwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSBxdWFydGVyc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0gcXVhcnRlciBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0gcXVhcnRlcnMgYWdvXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJsYXN0IHF1YXJ0ZXJcIlxuICAgICAgICB9LFxuICAgICAgICBcInF1YXJ0ZXItc2hvcnRcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgcXRyLlwiLFxuICAgICAgICAgIFwiMVwiOiBcIm5leHQgcXRyLlwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IHF0ci5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJpbiB7MH0gcXRycy5cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiezB9IHF0ci4gYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IHF0cnMuIGFnb1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwibGFzdCBxdHIuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJxdWFydGVyLW5hcnJvd1wiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyBxdHIuXCIsXG4gICAgICAgICAgXCIxXCI6IFwibmV4dCBxdHIuXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0gcXRyLlwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSBxdHJzLlwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0gcXRyLiBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0gcXRycy4gYWdvXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJsYXN0IHF0ci5cIlxuICAgICAgICB9LFxuICAgICAgICBcIm1vbnRoXCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIG1vbnRoXCIsXG4gICAgICAgICAgXCIxXCI6IFwibmV4dCBtb250aFwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IG1vbnRoXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaW4gezB9IG1vbnRoc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0gbW9udGggYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IG1vbnRocyBhZ29cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImxhc3QgbW9udGhcIlxuICAgICAgICB9LFxuICAgICAgICBcIm1vbnRoLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIG1vLlwiLFxuICAgICAgICAgIFwiMVwiOiBcIm5leHQgbW8uXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0gbW8uXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaW4gezB9IG1vLlwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0gbW8uIGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSBtby4gYWdvXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJsYXN0IG1vLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibW9udGgtbmFycm93XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIG1vLlwiLFxuICAgICAgICAgIFwiMVwiOiBcIm5leHQgbW8uXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0gbW8uXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaW4gezB9IG1vLlwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0gbW8uIGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSBtby4gYWdvXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJsYXN0IG1vLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwid2Vla1wiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyB3ZWVrXCIsXG4gICAgICAgICAgXCIxXCI6IFwibmV4dCB3ZWVrXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0gd2Vla1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSB3ZWVrc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0gd2VlayBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0gd2Vla3MgYWdvXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJsYXN0IHdlZWtcIlxuICAgICAgICB9LFxuICAgICAgICBcIndlZWstc2hvcnRcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgd2suXCIsXG4gICAgICAgICAgXCIxXCI6IFwibmV4dCB3ay5cIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSB3ay5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJpbiB7MH0gd2suXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSB3ay4gYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IHdrLiBhZ29cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImxhc3Qgd2suXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ3ZWVrLW5hcnJvd1wiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyB3ay5cIixcbiAgICAgICAgICBcIjFcIjogXCJuZXh0IHdrLlwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IHdrLlwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSB3ay5cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiezB9IHdrLiBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0gd2suIGFnb1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwibGFzdCB3ay5cIlxuICAgICAgICB9LFxuICAgICAgICBcImRheVwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidG9kYXlcIixcbiAgICAgICAgICBcIjFcIjogXCJ0b21vcnJvd1wiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IGRheVwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSBkYXlzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSBkYXkgYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IGRheXMgYWdvXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJ5ZXN0ZXJkYXlcIlxuICAgICAgICB9LFxuICAgICAgICBcImRheS1zaG9ydFwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidG9kYXlcIixcbiAgICAgICAgICBcIjFcIjogXCJ0b21vcnJvd1wiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IGRheVwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSBkYXlzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSBkYXkgYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IGRheXMgYWdvXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJ5ZXN0ZXJkYXlcIlxuICAgICAgICB9LFxuICAgICAgICBcImRheS1uYXJyb3dcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRvZGF5XCIsXG4gICAgICAgICAgXCIxXCI6IFwidG9tb3Jyb3dcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSBkYXlcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJpbiB7MH0gZGF5c1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0gZGF5IGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSBkYXlzIGFnb1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwieWVzdGVyZGF5XCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJob3VyXCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIGhvdXJcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSBob3VyXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaW4gezB9IGhvdXJzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSBob3VyIGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSBob3VycyBhZ29cIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJob3VyLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIGhvdXJcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSBoci5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJpbiB7MH0gaHIuXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSBoci4gYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IGhyLiBhZ29cIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJob3VyLW5hcnJvd1wiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyBob3VyXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0gaHIuXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaW4gezB9IGhyLlwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0gaHIuIGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSBoci4gYWdvXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwibWludXRlXCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIG1pbnV0ZVwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IG1pbnV0ZVwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSBtaW51dGVzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSBtaW51dGUgYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IG1pbnV0ZXMgYWdvXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwibWludXRlLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIG1pbnV0ZVwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IG1pbi5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJpbiB7MH0gbWluLlwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0gbWluLiBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0gbWluLiBhZ29cIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJtaW51dGUtbmFycm93XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIG1pbnV0ZVwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IG1pbi5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJpbiB7MH0gbWluLlwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0gbWluLiBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0gbWluLiBhZ29cIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJzZWNvbmRcIjoge1xuICAgICAgICAgIFwiMFwiOiBcIm5vd1wiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IHNlY29uZFwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSBzZWNvbmRzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSBzZWNvbmQgYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IHNlY29uZHMgYWdvXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwic2Vjb25kLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJub3dcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSBzZWMuXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaW4gezB9IHNlYy5cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiezB9IHNlYy4gYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IHNlYy4gYWdvXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwic2Vjb25kLW5hcnJvd1wiOiB7XG4gICAgICAgICAgXCIwXCI6IFwibm93XCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0gc2VjLlwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSBzZWMuXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSBzZWMuIGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSBzZWMuIGFnb1wiXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBcImF2YWlsYWJsZUxvY2FsZXNcIjogW1wiZW4tMDAxXCIsIFwiZW4tMTUwXCIsIFwiZW4tQUVcIiwgXCJlbi1BR1wiLCBcImVuLUFJXCIsIFwiZW4tQVNcIiwgXCJlbi1BVFwiLCBcImVuLUFVXCIsIFwiZW4tQkJcIiwgXCJlbi1CRVwiLCBcImVuLUJJXCIsIFwiZW4tQk1cIiwgXCJlbi1CU1wiLCBcImVuLUJXXCIsIFwiZW4tQlpcIiwgXCJlbi1DQVwiLCBcImVuLUNDXCIsIFwiZW4tQ0hcIiwgXCJlbi1DS1wiLCBcImVuLUNNXCIsIFwiZW4tQ1hcIiwgXCJlbi1DWVwiLCBcImVuLURFXCIsIFwiZW4tREdcIiwgXCJlbi1ES1wiLCBcImVuLURNXCIsIFwiZW4tRVJcIiwgXCJlbi1GSVwiLCBcImVuLUZKXCIsIFwiZW4tRktcIiwgXCJlbi1GTVwiLCBcImVuLUdCXCIsIFwiZW4tR0RcIiwgXCJlbi1HR1wiLCBcImVuLUdIXCIsIFwiZW4tR0lcIiwgXCJlbi1HTVwiLCBcImVuLUdVXCIsIFwiZW4tR1lcIiwgXCJlbi1IS1wiLCBcImVuLUlFXCIsIFwiZW4tSUxcIiwgXCJlbi1JTVwiLCBcImVuLUlOXCIsIFwiZW4tSU9cIiwgXCJlbi1KRVwiLCBcImVuLUpNXCIsIFwiZW4tS0VcIiwgXCJlbi1LSVwiLCBcImVuLUtOXCIsIFwiZW4tS1lcIiwgXCJlbi1MQ1wiLCBcImVuLUxSXCIsIFwiZW4tTFNcIiwgXCJlbi1NR1wiLCBcImVuLU1IXCIsIFwiZW4tTU9cIiwgXCJlbi1NUFwiLCBcImVuLU1TXCIsIFwiZW4tTVRcIiwgXCJlbi1NVVwiLCBcImVuLU1XXCIsIFwiZW4tTVlcIiwgXCJlbi1OQVwiLCBcImVuLU5GXCIsIFwiZW4tTkdcIiwgXCJlbi1OTFwiLCBcImVuLU5SXCIsIFwiZW4tTlVcIiwgXCJlbi1OWlwiLCBcImVuLVBHXCIsIFwiZW4tUEhcIiwgXCJlbi1QS1wiLCBcImVuLVBOXCIsIFwiZW4tUFJcIiwgXCJlbi1QV1wiLCBcImVuLVJXXCIsIFwiZW4tU0JcIiwgXCJlbi1TQ1wiLCBcImVuLVNEXCIsIFwiZW4tU0VcIiwgXCJlbi1TR1wiLCBcImVuLVNIXCIsIFwiZW4tU0lcIiwgXCJlbi1TTFwiLCBcImVuLVNTXCIsIFwiZW4tU1hcIiwgXCJlbi1TWlwiLCBcImVuLVRDXCIsIFwiZW4tVEtcIiwgXCJlbi1UT1wiLCBcImVuLVRUXCIsIFwiZW4tVFZcIiwgXCJlbi1UWlwiLCBcImVuLVVHXCIsIFwiZW4tVU1cIiwgXCJlbi1VUy1QT1NJWFwiLCBcImVuLVVTXCIsIFwiZW4tVkNcIiwgXCJlbi1WR1wiLCBcImVuLVZJXCIsIFwiZW4tVlVcIiwgXCJlbi1XU1wiLCBcImVuLVpBXCIsIFwiZW4tWk1cIiwgXCJlbi1aV1wiLCBcImVuXCJdLFxuICAgIFwiYWxpYXNlc1wiOiB7fSxcbiAgICBcInBhcmVudExvY2FsZXNcIjoge1xuICAgICAgXCJlbi0xNTBcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tQUdcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tQUlcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tQVVcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tQkJcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tQk1cIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tQlNcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tQldcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tQlpcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tQ0FcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tQ0NcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tQ0tcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tQ01cIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tQ1hcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tQ1lcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tREdcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tRE1cIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tRVJcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tRkpcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tRktcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tRk1cIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tR0JcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tR0RcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tR0dcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tR0hcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tR0lcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tR01cIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tR1lcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tSEtcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tSUVcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tSUxcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tSU1cIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tSU5cIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tSU9cIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tSkVcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tSk1cIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tS0VcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tS0lcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tS05cIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tS1lcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tTENcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tTFJcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tTFNcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tTUdcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tTU9cIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tTVNcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tTVRcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tTVVcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tTVdcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tTVlcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tTkFcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tTkZcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tTkdcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tTlJcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tTlVcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tTlpcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tUEdcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tUEhcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tUEtcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tUE5cIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tUFdcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tUldcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tU0JcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tU0NcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tU0RcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tU0dcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tU0hcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tU0xcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tU1NcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tU1hcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tU1pcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tVENcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tVEtcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tVE9cIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tVFRcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tVFZcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tVFpcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tVUdcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tVkNcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tVkdcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tVlVcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tV1NcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tWkFcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tWk1cIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tWldcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tQVRcIjogXCJlbi0xNTBcIixcbiAgICAgIFwiZW4tQkVcIjogXCJlbi0xNTBcIixcbiAgICAgIFwiZW4tQ0hcIjogXCJlbi0xNTBcIixcbiAgICAgIFwiZW4tREVcIjogXCJlbi0xNTBcIixcbiAgICAgIFwiZW4tREtcIjogXCJlbi0xNTBcIixcbiAgICAgIFwiZW4tRklcIjogXCJlbi0xNTBcIixcbiAgICAgIFwiZW4tTkxcIjogXCJlbi0xNTBcIixcbiAgICAgIFwiZW4tU0VcIjogXCJlbi0xNTBcIixcbiAgICAgIFwiZW4tU0lcIjogXCJlbi0xNTBcIlxuICAgIH1cbiAgfSk7XG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8079\n')},4033:function(){eval('/* @generated */\n// prettier-ignore\nif (Intl.RelativeTimeFormat && typeof Intl.RelativeTimeFormat.__addLocaleData === \'function\') {\n Intl.RelativeTimeFormat.__addLocaleData({\n "data": {\n "es-419": {\n "week-short": {\n "0": "esta sem.",\n "1": "próx. sem.",\n "future": {\n "one": "dentro de {0} sem.",\n "other": "dentro de {0} sem."\n },\n "past": {\n "one": "hace {0} sem.",\n "other": "hace {0} sem."\n },\n "-1": "sem. pas."\n },\n "week-narrow": {\n "0": "esta sem.",\n "1": "próx. sem.",\n "future": {\n "one": "dentro de {0} sem.",\n "other": "dentro de {0} sem."\n },\n "past": {\n "one": "hace {0} sem.",\n "other": "hace {0} sem."\n },\n "-1": "sem. pas."\n }\n },\n "es-AR": {\n "day-short": {\n "0": "hoy",\n "1": "mañana",\n "2": "pasado mañana",\n "future": {\n "one": "dentro de {0} días",\n "other": "dentro de {0} días"\n },\n "past": {\n "one": "hace {0} días",\n "other": "hace {0} días"\n },\n "-2": "anteayer",\n "-1": "ayer"\n },\n "day-narrow": {\n "0": "hoy",\n "1": "mañana",\n "2": "pasado mañana",\n "future": {\n "one": "dentro de {0} días",\n "other": "dentro de {0} días"\n },\n "past": {\n "one": "hace {0} días",\n "other": "hace {0} días"\n },\n "-2": "anteayer",\n "-1": "ayer"\n },\n "second-short": {\n "0": "ahora",\n "future": {\n "one": "dentro de {0} seg.",\n "other": "dentro de {0} seg."\n },\n "past": {\n "one": "hace {0} seg.",\n "other": "hace {0} seg."\n }\n },\n "second-narrow": {\n "0": "ahora",\n "future": {\n "one": "dentro de {0} seg.",\n "other": "dentro de {0} seg."\n },\n "past": {\n "one": "hace {0} seg.",\n "other": "hace {0} seg."\n }\n }\n },\n "es-MX": {\n "year": {\n "0": "este año",\n "1": "el año próximo",\n "future": {\n "one": "dentro de {0} año",\n "other": "dentro de {0} años"\n },\n "past": {\n "one": "hace {0} año",\n "other": "hace {0} años"\n },\n "-1": "el año pasado"\n },\n "year-short": {\n "0": "este año",\n "1": "el próximo año",\n "future": {\n "one": "en {0} a",\n "other": "en {0} a"\n },\n "past": {\n "one": "hace {0} a",\n "other": "hace {0} a"\n },\n "-1": "el año pasado"\n },\n "year-narrow": {\n "0": "este año",\n "1": "el próximo año",\n "future": {\n "one": "en {0} a",\n "other": "en {0} a"\n },\n "past": {\n "one": "-{0} a",\n "other": "-{0} a"\n },\n "-1": "el año pasado"\n },\n "quarter": {\n "0": "este trimestre",\n "1": "el próximo trimestre",\n "future": {\n "one": "en {0} trimestre",\n "other": "dentro de {0} trimetres"\n },\n "past": {\n "one": "hace {0} trimestre",\n "other": "hace {0} trimestres"\n },\n "-1": "el trimestre pasado"\n },\n "quarter-short": {\n "0": "este trimestre",\n "1": "el próximo trimestre",\n "future": {\n "one": "en {0} trim.",\n "other": "en {0} trim"\n },\n "past": {\n "one": "hace {0} trim.",\n "other": "hace {0} trim."\n },\n "-1": "el trimestre pasado"\n },\n "quarter-narrow": {\n "0": "este trimestre",\n "1": "el próximo trimestre",\n "future": {\n "one": "en {0} trim.",\n "other": "en {0} trim."\n },\n "past": {\n "one": "-{0} T",\n "other": "-{0} T"\n },\n "-1": "el trimestre pasado"\n },\n "month": {\n "0": "este mes",\n "1": "el mes próximo",\n "future": {\n "one": "en {0} mes",\n "other": "en {0} meses"\n },\n "past": {\n "one": "hace {0} mes",\n "other": "hace {0} meses"\n },\n "-1": "el mes pasado"\n },\n "month-short": {\n "0": "este mes",\n "1": "el próximo mes",\n "future": {\n "one": "en {0} m",\n "other": "en {0} m"\n },\n "past": {\n "one": "hace {0} m",\n "other": "hace {0} m"\n },\n "-1": "el mes pasado"\n },\n "month-narrow": {\n "0": "este mes",\n "1": "el próximo mes",\n "future": {\n "one": "+{0} m",\n "other": "+{0} m"\n },\n "past": {\n "one": "-{0} m",\n "other": "-{0} m"\n },\n "-1": "el mes pasado"\n },\n "week": {\n "0": "esta semana",\n "1": "la semana próxima",\n "future": {\n "one": "dentro de {0} semana",\n "other": "dentro de {0} semanas"\n },\n "past": {\n "one": "hace {0} semana",\n "other": "hace {0} semanas"\n },\n "-1": "la semana pasada"\n },\n "week-short": {\n "0": "esta sem.",\n "1": "próx. sem.",\n "future": {\n "one": "en {0} sem.",\n "other": "en {0} sem."\n },\n "past": {\n "one": "hace {0} sem.",\n "other": "hace {0} sem."\n },\n "-1": "sem. pas."\n },\n "day-short": {\n "0": "hoy",\n "1": "mañana",\n "2": "pasado mañana",\n "future": {\n "one": "en {0} día",\n "other": "en {0} días"\n },\n "past": {\n "one": "hace {0} día",\n "other": "hace {0} días"\n },\n "-2": "anteayer",\n "-1": "ayer"\n },\n "day-narrow": {\n "0": "hoy",\n "1": "mañana",\n "2": "pasado mañana",\n "future": {\n "one": "+{0} día",\n "other": "en {0} días"\n },\n "past": {\n "one": "hace {0} día",\n "other": "hace {0} días"\n },\n "-2": "anteayer",\n "-1": "ayer"\n },\n "hour-short": {\n "0": "esta hora",\n "future": {\n "one": "en {0} h",\n "other": "en {0} n"\n },\n "past": {\n "one": "hace {0} h",\n "other": "hace {0} h"\n }\n },\n "minute-short": {\n "0": "este minuto",\n "future": {\n "one": "en {0} min",\n "other": "en {0} min"\n },\n "past": {\n "one": "hace {0} min",\n "other": "hace {0} min"\n }\n },\n "minute-narrow": {\n "0": "este minuto",\n "future": {\n "one": "en {0} min",\n "other": "en {0} min"\n },\n "past": {\n "one": "hace {0} min",\n "other": "hace {0} min"\n }\n },\n "second-short": {\n "0": "ahora",\n "future": {\n "one": "en {0} s",\n "other": "en {0} s"\n },\n "past": {\n "one": "hace {0} s",\n "other": "hace {0} s"\n }\n },\n "second-narrow": {\n "0": "ahora",\n "future": {\n "one": "+{0} s",\n "other": "+{0} s"\n },\n "past": {\n "one": "hace {0} s",\n "other": "hace {0} s"\n }\n }\n },\n "es-PY": {\n "second-short": {\n "0": "ahora",\n "future": {\n "one": "dentro de {0} seg.",\n "other": "dentro de {0} seg."\n },\n "past": {\n "one": "hace {0} seg.",\n "other": "hace {0} seg."\n }\n },\n "second-narrow": {\n "0": "ahora",\n "future": {\n "one": "dentro de {0} seg.",\n "other": "dentro de {0} seg."\n },\n "past": {\n "one": "hace {0} seg.",\n "other": "hace {0} seg."\n }\n }\n },\n "es-SV": {\n "day": {\n "0": "hoy",\n "1": "mañana",\n "2": "pasado mañana",\n "future": {\n "one": "dentro de {0} día",\n "other": "dentro de {0} días"\n },\n "past": {\n "one": "hace {0} día",\n "other": "hace {0} días"\n },\n "-2": "antier",\n "-1": "ayer"\n }\n },\n "es-US": {\n "year": {\n "0": "este año",\n "1": "el año próximo",\n "future": {\n "one": "dentro de {0} año",\n "other": "dentro de {0} años"\n },\n "past": {\n "one": "hace {0} año",\n "other": "hace {0} años"\n },\n "-1": "el año pasado"\n },\n "quarter": {\n "0": "este trimestre",\n "1": "el próximo trimestre",\n "future": {\n "one": "dentro de {0} trimetre",\n "other": "dentro de {0} trimetres"\n },\n "past": {\n "one": "hace {0} trimestre",\n "other": "hace {0} trimestres"\n },\n "-1": "el trimestre pasado"\n },\n "month": {\n "0": "este mes",\n "1": "el mes próximo",\n "future": {\n "one": "dentro de {0} mes",\n "other": "dentro de {0} meses"\n },\n "past": {\n "one": "hace {0} mes",\n "other": "hace {0} meses"\n },\n "-1": "el mes pasado"\n },\n "week": {\n "0": "esta semana",\n "1": "la semana próxima",\n "future": {\n "one": "dentro de {0} semana",\n "other": "dentro de {0} semanas"\n },\n "past": {\n "one": "hace {0} semana",\n "other": "hace {0} semanas"\n },\n "-1": "la semana pasada"\n }\n },\n "es": {\n "nu": ["latn"],\n "year": {\n "0": "este año",\n "1": "el próximo año",\n "future": {\n "one": "dentro de {0} año",\n "other": "dentro de {0} años"\n },\n "past": {\n "one": "hace {0} año",\n "other": "hace {0} años"\n },\n "-1": "el año pasado"\n },\n "year-short": {\n "0": "este año",\n "1": "el próximo año",\n "future": {\n "one": "dentro de {0} a",\n "other": "dentro de {0} a"\n },\n "past": {\n "one": "hace {0} a",\n "other": "hace {0} a"\n },\n "-1": "el año pasado"\n },\n "year-narrow": {\n "0": "este año",\n "1": "el próximo año",\n "future": {\n "one": "dentro de {0} a",\n "other": "dentro de {0} a"\n },\n "past": {\n "one": "hace {0} a",\n "other": "hace {0} a"\n },\n "-1": "el año pasado"\n },\n "quarter": {\n "0": "este trimestre",\n "1": "el próximo trimestre",\n "future": {\n "one": "dentro de {0} trimestre",\n "other": "dentro de {0} trimestres"\n },\n "past": {\n "one": "hace {0} trimestre",\n "other": "hace {0} trimestres"\n },\n "-1": "el trimestre pasado"\n },\n "quarter-short": {\n "0": "este trimestre",\n "1": "el próximo trimestre",\n "future": {\n "one": "dentro de {0} trim.",\n "other": "dentro de {0} trim."\n },\n "past": {\n "one": "hace {0} trim.",\n "other": "hace {0} trim."\n },\n "-1": "el trimestre pasado"\n },\n "quarter-narrow": {\n "0": "este trimestre",\n "1": "el próximo trimestre",\n "future": {\n "one": "dentro de {0} trim.",\n "other": "dentro de {0} trim."\n },\n "past": {\n "one": "hace {0} trim.",\n "other": "hace {0} trim."\n },\n "-1": "el trimestre pasado"\n },\n "month": {\n "0": "este mes",\n "1": "el próximo mes",\n "future": {\n "one": "dentro de {0} mes",\n "other": "dentro de {0} meses"\n },\n "past": {\n "one": "hace {0} mes",\n "other": "hace {0} meses"\n },\n "-1": "el mes pasado"\n },\n "month-short": {\n "0": "este mes",\n "1": "el próximo mes",\n "future": {\n "one": "dentro de {0} m",\n "other": "dentro de {0} m"\n },\n "past": {\n "one": "hace {0} m",\n "other": "hace {0} m"\n },\n "-1": "el mes pasado"\n },\n "month-narrow": {\n "0": "este mes",\n "1": "el próximo mes",\n "future": {\n "one": "dentro de {0} m",\n "other": "dentro de {0} m"\n },\n "past": {\n "one": "hace {0} m",\n "other": "hace {0} m"\n },\n "-1": "el mes pasado"\n },\n "week": {\n "0": "esta semana",\n "1": "la próxima semana",\n "future": {\n "one": "dentro de {0} semana",\n "other": "dentro de {0} semanas"\n },\n "past": {\n "one": "hace {0} semana",\n "other": "hace {0} semanas"\n },\n "-1": "la semana pasada"\n },\n "week-short": {\n "0": "esta sem.",\n "1": "próx. sem.",\n "future": {\n "one": "dentro de {0} sem.",\n "other": "dentro de {0} sem."\n },\n "past": {\n "one": "hace {0} sem.",\n "other": "hace {0} sem."\n },\n "-1": "sem. ant."\n },\n "week-narrow": {\n "0": "esta sem.",\n "1": "próx. sem.",\n "future": {\n "one": "dentro de {0} sem.",\n "other": "dentro de {0} sem."\n },\n "past": {\n "one": "hace {0} sem.",\n "other": "hace {0} sem."\n },\n "-1": "sem. ant."\n },\n "day": {\n "0": "hoy",\n "1": "mañana",\n "2": "pasado mañana",\n "future": {\n "one": "dentro de {0} día",\n "other": "dentro de {0} días"\n },\n "past": {\n "one": "hace {0} día",\n "other": "hace {0} días"\n },\n "-2": "anteayer",\n "-1": "ayer"\n },\n "day-short": {\n "0": "hoy",\n "1": "mañana",\n "2": "pasado mañana",\n "future": {\n "one": "dentro de {0} día",\n "other": "dentro de {0} días"\n },\n "past": {\n "one": "hace {0} día",\n "other": "hace {0} días"\n },\n "-2": "anteayer",\n "-1": "ayer"\n },\n "day-narrow": {\n "0": "hoy",\n "1": "mañana",\n "2": "pasado mañana",\n "future": {\n "one": "dentro de {0} día",\n "other": "dentro de {0} días"\n },\n "past": {\n "one": "hace {0} día",\n "other": "hace {0} días"\n },\n "-2": "anteayer",\n "-1": "ayer"\n },\n "hour": {\n "0": "esta hora",\n "future": {\n "one": "dentro de {0} hora",\n "other": "dentro de {0} horas"\n },\n "past": {\n "one": "hace {0} hora",\n "other": "hace {0} horas"\n }\n },\n "hour-short": {\n "0": "esta hora",\n "future": {\n "one": "dentro de {0} h",\n "other": "dentro de {0} h"\n },\n "past": {\n "one": "hace {0} h",\n "other": "hace {0} h"\n }\n },\n "hour-narrow": {\n "0": "esta hora",\n "future": {\n "one": "dentro de {0} h",\n "other": "dentro de {0} h"\n },\n "past": {\n "one": "hace {0} h",\n "other": "hace {0} h"\n }\n },\n "minute": {\n "0": "este minuto",\n "future": {\n "one": "dentro de {0} minuto",\n "other": "dentro de {0} minutos"\n },\n "past": {\n "one": "hace {0} minuto",\n "other": "hace {0} minutos"\n }\n },\n "minute-short": {\n "0": "este minuto",\n "future": {\n "one": "dentro de {0} min",\n "other": "dentro de {0} min"\n },\n "past": {\n "one": "hace {0} min",\n "other": "hace {0} min"\n }\n },\n "minute-narrow": {\n "0": "este minuto",\n "future": {\n "one": "dentro de {0} min",\n "other": "dentro de {0} min"\n },\n "past": {\n "one": "hace {0} min",\n "other": "hace {0} min"\n }\n },\n "second": {\n "0": "ahora",\n "future": {\n "one": "dentro de {0} segundo",\n "other": "dentro de {0} segundos"\n },\n "past": {\n "one": "hace {0} segundo",\n "other": "hace {0} segundos"\n }\n },\n "second-short": {\n "0": "ahora",\n "future": {\n "one": "dentro de {0} s",\n "other": "dentro de {0} s"\n },\n "past": {\n "one": "hace {0} s",\n "other": "hace {0} s"\n }\n },\n "second-narrow": {\n "0": "ahora",\n "future": {\n "one": "dentro de {0} s",\n "other": "dentro de {0} s"\n },\n "past": {\n "one": "hace {0} s",\n "other": "hace {0} s"\n }\n }\n }\n },\n "availableLocales": ["es-419", "es-AR", "es-BO", "es-BR", "es-BZ", "es-CL", "es-CO", "es-CR", "es-CU", "es-DO", "es-EA", "es-EC", "es-GQ", "es-GT", "es-HN", "es-IC", "es-MX", "es-NI", "es-PA", "es-PE", "es-PH", "es-PR", "es-PY", "es-SV", "es-US", "es-UY", "es-VE", "es"],\n "aliases": {},\n "parentLocales": {\n "es-AR": "es-419",\n "es-BO": "es-419",\n "es-BR": "es-419",\n "es-BZ": "es-419",\n "es-CL": "es-419",\n "es-CO": "es-419",\n "es-CR": "es-419",\n "es-CU": "es-419",\n "es-DO": "es-419",\n "es-EC": "es-419",\n "es-GT": "es-419",\n "es-HN": "es-419",\n "es-MX": "es-419",\n "es-NI": "es-419",\n "es-PA": "es-419",\n "es-PE": "es-419",\n "es-PR": "es-419",\n "es-PY": "es-419",\n "es-SV": "es-419",\n "es-US": "es-419",\n "es-UY": "es-419",\n "es-VE": "es-419"\n }\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AZm9ybWF0anMvaW50bC1yZWxhdGl2ZXRpbWVmb3JtYXQvZGlzdC9sb2NhbGUtZGF0YS9lcy5qcz9mY2VlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLEVBQUU7QUFDakMsaUNBQWlDLEVBQUU7QUFDbkMsV0FBVztBQUNYO0FBQ0EsMEJBQTBCLEVBQUU7QUFDNUIsNEJBQTRCLEVBQUU7QUFDOUIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLEVBQUU7QUFDakMsaUNBQWlDLEVBQUU7QUFDbkMsV0FBVztBQUNYO0FBQ0EsMEJBQTBCLEVBQUU7QUFDNUIsNEJBQTRCLEVBQUU7QUFDOUIsV0FBVztBQUNYO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLEVBQUU7QUFDakMsaUNBQWlDLEVBQUU7QUFDbkMsV0FBVztBQUNYO0FBQ0EsMEJBQTBCLEVBQUU7QUFDNUIsNEJBQTRCLEVBQUU7QUFDOUIsV0FBVztBQUNYO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixFQUFFO0FBQ2pDLGlDQUFpQyxFQUFFO0FBQ25DLFdBQVc7QUFDWDtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLDRCQUE0QixFQUFFO0FBQzlCLFdBQVc7QUFDWDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixFQUFFO0FBQ2pDLGlDQUFpQyxFQUFFO0FBQ25DLFdBQVc7QUFDWDtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLDRCQUE0QixFQUFFO0FBQzlCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixFQUFFO0FBQ2pDLGlDQUFpQyxFQUFFO0FBQ25DLFdBQVc7QUFDWDtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLDRCQUE0QixFQUFFO0FBQzlCO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixFQUFFO0FBQ2pDLGlDQUFpQyxFQUFFO0FBQ25DLFdBQVc7QUFDWDtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLDRCQUE0QixFQUFFO0FBQzlCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLDRCQUE0QixFQUFFO0FBQzlCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHNCQUFzQixFQUFFO0FBQ3hCLHdCQUF3QixFQUFFO0FBQzFCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLGlDQUFpQyxFQUFFO0FBQ25DLFdBQVc7QUFDWDtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLDRCQUE0QixFQUFFO0FBQzlCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLDRCQUE0QixFQUFFO0FBQzlCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHNCQUFzQixFQUFFO0FBQ3hCLHdCQUF3QixFQUFFO0FBQzFCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNB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O0FBQ2pDLGlDQUFpQyxFQUFFO0FBQ25DLFdBQVc7QUFDWDtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLDRCQUE0QixFQUFFO0FBQzlCLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixFQUFFO0FBQ2pDLGlDQUFpQyxFQUFFO0FBQ25DLFdBQVc7QUFDWDtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLDRCQUE0QixFQUFFO0FBQzlCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixFQUFFO0FBQ2pDLGlDQUFpQyxFQUFFO0FBQ25DLFdBQVc7QUFDWDtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLDRCQUE0QixFQUFFO0FBQzlCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixFQUFFO0FBQ2pDLGlDQUFpQyxFQUFFO0FBQ25DLFdBQVc7QUFDWDtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLDRCQUE0QixFQUFFO0FBQzlCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixFQUFFO0FBQ2pDLGlDQUFpQyxFQUFFO0FBQ25DLFdBQVc7QUFDWDtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLDRCQUE0QixFQUFFO0FBQzlCLFdBQVc7QUFDWDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixFQUFFO0FBQ2pDLGlDQUFpQyxFQUFFO0FBQ25DLFdBQVc7QUFDWDtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLDRCQUE0QixFQUFFO0FBQzlCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixFQUFFO0FBQ2pDLGlDQUFpQyxFQUFFO0FBQ25DLFdBQVc7QUFDWDtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLDRCQUE0QixFQUFFO0FBQzlCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixFQUFFO0FBQ2pDLGlDQUFpQyxFQUFFO0FBQ25DLFdBQVc7QUFDWDtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLDRCQUE0QixFQUFFO0FBQzlCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixFQUFFO0FBQ2pDLGlDQUFpQyxFQUFFO0FBQ25DLFdBQVc7QUFDWDtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLDRCQUE0QixFQUFFO0FBQzlCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixFQUFFO0FBQ2pDLGlDQUFpQyxFQUFFO0FBQ25DLFdBQVc7QUFDWDtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLDRCQUE0QixFQUFFO0FBQzlCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixFQUFFO0FBQ2pDLGlDQUFpQyxFQUFFO0FBQ25DLFdBQVc7QUFDWDtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLDRCQUE0QixFQUFFO0FBQzlCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixFQUFFO0FBQ2pDLGlDQUFpQyxFQUFFO0FBQ25DLFdBQVc7QUFDWDtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLDRCQUE0QixFQUFFO0FBQzlCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixFQUFFO0FBQ2pDLGlDQUFpQyxFQUFFO0FBQ25DLFdBQVc7QUFDWDtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLDRCQUE0QixFQUFFO0FBQzlCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixFQUFFO0FBQ2pDLGlDQUFpQyxFQUFFO0FBQ25DLFdBQVc7QUFDWDtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLDRCQUE0QixFQUFFO0FBQzlCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixFQUFFO0FBQ2pDLGlDQUFpQyxFQUFFO0FBQ25DLFdBQVc7QUFDWDtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLDRCQUE0QixFQUFFO0FBQzlCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixFQUFFO0FBQ2pDLGlDQUFpQyxFQUFFO0FBQ25DLFdBQVc7QUFDWDtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLDRCQUE0QixFQUFFO0FBQzlCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixFQUFFO0FBQ2pDLGlDQUFpQyxFQUFFO0FBQ25DLFdBQVc7QUFDWDtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLDRCQUE0QixFQUFFO0FBQzlCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLEVBQUU7QUFDakMsaUNBQWlDLEVBQUU7QUFDbkMsV0FBVztBQUNYO0FBQ0EsMEJBQTBCLEVBQUU7QUFDNUIsNEJBQTRCLEVBQUU7QUFDOUIsV0FBVztBQUNYO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixFQUFFO0FBQ2pDLGlDQUFpQyxFQUFFO0FBQ25DLFdBQVc7QUFDWDtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLDRCQUE0QixFQUFFO0FBQzlCLFdBQVc7QUFDWDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsRUFBRTtBQUNqQyxpQ0FBaUMsRUFBRTtBQUNuQyxXQUFXO0FBQ1g7QUFDQSwwQkFBMEIsRUFBRTtBQUM1Qiw0QkFBNEIsRUFBRTtBQUM5QixXQUFXO0FBQ1g7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsRUFBRTtBQUNqQyxpQ0FBaUMsRUFBRTtBQUNuQyxXQUFXO0FBQ1g7QUFDQSwwQkFBMEIsRUFBRTtBQUM1Qiw0QkFBNEIsRUFBRTtBQUM5QjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsRUFBRTtBQUNqQyxpQ0FBaUMsRUFBRTtBQUNuQyxXQUFXO0FBQ1g7QUFDQSwwQkFBMEIsRUFBRTtBQUM1Qiw0QkFBNEIsRUFBRTtBQUM5QjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsRUFBRTtBQUNqQyxpQ0FBaUMsRUFBRTtBQUNuQyxXQUFXO0FBQ1g7QUFDQSwwQkFBMEIsRUFBRTtBQUM1Qiw0QkFBNEIsRUFBRTtBQUM5QjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsRUFBRTtBQUNqQyxpQ0FBaUMsRUFBRTtBQUNuQyxXQUFXO0FBQ1g7QUFDQSwwQkFBMEIsRUFBRTtBQUM1Qiw0QkFBNEIsRUFBRTtBQUM5QjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsRUFBRTtBQUNqQyxpQ0FBaUMsRUFBRTtBQUNuQyxXQUFXO0FBQ1g7QUFDQSwwQkFBMEIsRUFBRTtBQUM1Qiw0QkFBNEIsRUFBRTtBQUM5QjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsRUFBRTtBQUNqQyxpQ0FBaUMsRUFBRTtBQUNuQyxXQUFXO0FBQ1g7QUFDQSwwQkFBMEIsRUFBRTtBQUM1Qiw0QkFBNEIsRUFBRTtBQUM5QjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsRUFBRTtBQUNqQyxpQ0FBaUMsRUFBRTtBQUNuQyxXQUFXO0FBQ1g7QUFDQSwwQkFBMEIsRUFBRTtBQUM1Qiw0QkFBNEIsRUFBRTtBQUM5QjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsRUFBRTtBQUNqQyxpQ0FBaUMsRUFBRTtBQUNuQyxXQUFXO0FBQ1g7QUFDQSwwQkFBMEIsRUFBRTtBQUM1Qiw0QkFBNEIsRUFBRTtBQUM5QjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsRUFBRTtBQUNqQyxpQ0FBaUMsRUFBRTtBQUNuQyxXQUFXO0FBQ1g7QUFDQSwwQkFBMEIsRUFBRTtBQUM1Qiw0QkFBNEIsRUFBRTtBQUM5QjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIIiwiZmlsZSI6IjQwMzMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBAZ2VuZXJhdGVkICovXG4vLyBwcmV0dGllci1pZ25vcmVcbmlmIChJbnRsLlJlbGF0aXZlVGltZUZvcm1hdCAmJiB0eXBlb2YgSW50bC5SZWxhdGl2ZVRpbWVGb3JtYXQuX19hZGRMb2NhbGVEYXRhID09PSAnZnVuY3Rpb24nKSB7XG4gIEludGwuUmVsYXRpdmVUaW1lRm9ybWF0Ll9fYWRkTG9jYWxlRGF0YSh7XG4gICAgXCJkYXRhXCI6IHtcbiAgICAgIFwiZXMtNDE5XCI6IHtcbiAgICAgICAgXCJ3ZWVrLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJlc3RhIHNlbS5cIixcbiAgICAgICAgICBcIjFcIjogXCJwcsOzeC4gc2VtLlwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiZGVudHJvIGRlIHswfSBzZW0uXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiZGVudHJvIGRlIHswfSBzZW0uXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImhhY2UgezB9IHNlbS5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJoYWNlIHswfSBzZW0uXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJzZW0uIHBhcy5cIlxuICAgICAgICB9LFxuICAgICAgICBcIndlZWstbmFycm93XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJlc3RhIHNlbS5cIixcbiAgICAgICAgICBcIjFcIjogXCJwcsOzeC4gc2VtLlwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiZGVudHJvIGRlIHswfSBzZW0uXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiZGVudHJvIGRlIHswfSBzZW0uXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImhhY2UgezB9IHNlbS5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJoYWNlIHswfSBzZW0uXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJzZW0uIHBhcy5cIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJlcy1BUlwiOiB7XG4gICAgICAgIFwiZGF5LXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJob3lcIixcbiAgICAgICAgICBcIjFcIjogXCJtYcOxYW5hXCIsXG4gICAgICAgICAgXCIyXCI6IFwicGFzYWRvIG1hw7FhbmFcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImRlbnRybyBkZSB7MH0gZMOtYXNcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJkZW50cm8gZGUgezB9IGTDrWFzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImhhY2UgezB9IGTDrWFzXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaGFjZSB7MH0gZMOtYXNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMlwiOiBcImFudGVheWVyXCIsXG4gICAgICAgICAgXCItMVwiOiBcImF5ZXJcIlxuICAgICAgICB9LFxuICAgICAgICBcImRheS1uYXJyb3dcIjoge1xuICAgICAgICAgIFwiMFwiOiBcImhveVwiLFxuICAgICAgICAgIFwiMVwiOiBcIm1hw7FhbmFcIixcbiAgICAgICAgICBcIjJcIjogXCJwYXNhZG8gbWHDsWFuYVwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiZGVudHJvIGRlIHswfSBkw61hc1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImRlbnRybyBkZSB7MH0gZMOtYXNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaGFjZSB7MH0gZMOtYXNcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJoYWNlIHswfSBkw61hc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0yXCI6IFwiYW50ZWF5ZXJcIixcbiAgICAgICAgICBcIi0xXCI6IFwiYXllclwiXG4gICAgICAgIH0sXG4gICAgICAgIFwic2Vjb25kLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJhaG9yYVwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiZGVudHJvIGRlIHswfSBzZWcuXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiZGVudHJvIGRlIHswfSBzZWcuXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImhhY2UgezB9IHNlZy5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJoYWNlIHswfSBzZWcuXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwic2Vjb25kLW5hcnJvd1wiOiB7XG4gICAgICAgICAgXCIwXCI6IFwiYWhvcmFcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImRlbnRybyBkZSB7MH0gc2VnLlwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImRlbnRybyBkZSB7MH0gc2VnLlwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJoYWNlIHswfSBzZWcuXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaGFjZSB7MH0gc2VnLlwiXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJlcy1NWFwiOiB7XG4gICAgICAgIFwieWVhclwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwiZXN0ZSBhw7FvXCIsXG4gICAgICAgICAgXCIxXCI6IFwiZWwgYcOxbyBwcsOzeGltb1wiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiZGVudHJvIGRlIHswfSBhw7FvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiZGVudHJvIGRlIHswfSBhw7Fvc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJoYWNlIHswfSBhw7FvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaGFjZSB7MH0gYcOxb3NcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImVsIGHDsW8gcGFzYWRvXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ5ZWFyLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJlc3RlIGHDsW9cIixcbiAgICAgICAgICBcIjFcIjogXCJlbCBwcsOzeGltbyBhw7FvXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJlbiB7MH0gYVwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImVuIHswfSBhXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImhhY2UgezB9IGFcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJoYWNlIHswfSBhXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJlbCBhw7FvIHBhc2Fkb1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwieWVhci1uYXJyb3dcIjoge1xuICAgICAgICAgIFwiMFwiOiBcImVzdGUgYcOxb1wiLFxuICAgICAgICAgIFwiMVwiOiBcImVsIHByw7N4aW1vIGHDsW9cIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImVuIHswfSBhXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiZW4gezB9IGFcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiLXswfSBhXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiLXswfSBhXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJlbCBhw7FvIHBhc2Fkb1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwicXVhcnRlclwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwiZXN0ZSB0cmltZXN0cmVcIixcbiAgICAgICAgICBcIjFcIjogXCJlbCBwcsOzeGltbyB0cmltZXN0cmVcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImVuIHswfSB0cmltZXN0cmVcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJkZW50cm8gZGUgezB9IHRyaW1ldHJlc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJoYWNlIHswfSB0cmltZXN0cmVcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJoYWNlIHswfSB0cmltZXN0cmVzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJlbCB0cmltZXN0cmUgcGFzYWRvXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJxdWFydGVyLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJlc3RlIHRyaW1lc3RyZVwiLFxuICAgICAgICAgIFwiMVwiOiBcImVsIHByw7N4aW1vIHRyaW1lc3RyZVwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiZW4gezB9IHRyaW0uXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiZW4gezB9IHRyaW1cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaGFjZSB7MH0gdHJpbS5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJoYWNlIHswfSB0cmltLlwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwiZWwgdHJpbWVzdHJlIHBhc2Fkb1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwicXVhcnRlci1uYXJyb3dcIjoge1xuICAgICAgICAgIFwiMFwiOiBcImVzdGUgdHJpbWVzdHJlXCIsXG4gICAgICAgICAgXCIxXCI6IFwiZWwgcHLDs3hpbW8gdHJpbWVzdHJlXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJlbiB7MH0gdHJpbS5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJlbiB7MH0gdHJpbS5cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiLXswfSBUXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiLXswfSBUXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJlbCB0cmltZXN0cmUgcGFzYWRvXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtb250aFwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwiZXN0ZSBtZXNcIixcbiAgICAgICAgICBcIjFcIjogXCJlbCBtZXMgcHLDs3hpbW9cIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImVuIHswfSBtZXNcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJlbiB7MH0gbWVzZXNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaGFjZSB7MH0gbWVzXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaGFjZSB7MH0gbWVzZXNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImVsIG1lcyBwYXNhZG9cIlxuICAgICAgICB9LFxuICAgICAgICBcIm1vbnRoLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJlc3RlIG1lc1wiLFxuICAgICAgICAgIFwiMVwiOiBcImVsIHByw7N4aW1vIG1lc1wiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiZW4gezB9IG1cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJlbiB7MH0gbVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJoYWNlIHswfSBtXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaGFjZSB7MH0gbVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwiZWwgbWVzIHBhc2Fkb1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwibW9udGgtbmFycm93XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJlc3RlIG1lc1wiLFxuICAgICAgICAgIFwiMVwiOiBcImVsIHByw7N4aW1vIG1lc1wiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiK3swfSBtXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiK3swfSBtXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcIi17MH0gbVwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcIi17MH0gbVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwiZWwgbWVzIHBhc2Fkb1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwid2Vla1wiOiB7XG4gICAgICAgICAgXCIwXCI6IFwiZXN0YSBzZW1hbmFcIixcbiAgICAgICAgICBcIjFcIjogXCJsYSBzZW1hbmEgcHLDs3hpbWFcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImRlbnRybyBkZSB7MH0gc2VtYW5hXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiZGVudHJvIGRlIHswfSBzZW1hbmFzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImhhY2UgezB9IHNlbWFuYVwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImhhY2UgezB9IHNlbWFuYXNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImxhIHNlbWFuYSBwYXNhZGFcIlxuICAgICAgICB9LFxuICAgICAgICBcIndlZWstc2hvcnRcIjoge1xuICAgICAgICAgIFwiMFwiOiBcImVzdGEgc2VtLlwiLFxuICAgICAgICAgIFwiMVwiOiBcInByw7N4LiBzZW0uXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJlbiB7MH0gc2VtLlwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImVuIHswfSBzZW0uXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImhhY2UgezB9IHNlbS5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJoYWNlIHswfSBzZW0uXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJzZW0uIHBhcy5cIlxuICAgICAgICB9LFxuICAgICAgICBcImRheS1zaG9ydFwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwiaG95XCIsXG4gICAgICAgICAgXCIxXCI6IFwibWHDsWFuYVwiLFxuICAgICAgICAgIFwiMlwiOiBcInBhc2FkbyBtYcOxYW5hXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJlbiB7MH0gZMOtYVwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImVuIHswfSBkw61hc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJoYWNlIHswfSBkw61hXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaGFjZSB7MH0gZMOtYXNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMlwiOiBcImFudGVheWVyXCIsXG4gICAgICAgICAgXCItMVwiOiBcImF5ZXJcIlxuICAgICAgICB9LFxuICAgICAgICBcImRheS1uYXJyb3dcIjoge1xuICAgICAgICAgIFwiMFwiOiBcImhveVwiLFxuICAgICAgICAgIFwiMVwiOiBcIm1hw7FhbmFcIixcbiAgICAgICAgICBcIjJcIjogXCJwYXNhZG8gbWHDsWFuYVwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiK3swfSBkw61hXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiZW4gezB9IGTDrWFzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImhhY2UgezB9IGTDrWFcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJoYWNlIHswfSBkw61hc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0yXCI6IFwiYW50ZWF5ZXJcIixcbiAgICAgICAgICBcIi0xXCI6IFwiYXllclwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiaG91ci1zaG9ydFwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwiZXN0YSBob3JhXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJlbiB7MH0gaFwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImVuIHswfSBuXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImhhY2UgezB9IGhcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJoYWNlIHswfSBoXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwibWludXRlLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJlc3RlIG1pbnV0b1wiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiZW4gezB9IG1pblwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImVuIHswfSBtaW5cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaGFjZSB7MH0gbWluXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaGFjZSB7MH0gbWluXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwibWludXRlLW5hcnJvd1wiOiB7XG4gICAgICAgICAgXCIwXCI6IFwiZXN0ZSBtaW51dG9cIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImVuIHswfSBtaW5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJlbiB7MH0gbWluXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImhhY2UgezB9IG1pblwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImhhY2UgezB9IG1pblwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcInNlY29uZC1zaG9ydFwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwiYWhvcmFcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImVuIHswfSBzXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiZW4gezB9IHNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaGFjZSB7MH0gc1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImhhY2UgezB9IHNcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJzZWNvbmQtbmFycm93XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJhaG9yYVwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiK3swfSBzXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiK3swfSBzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImhhY2UgezB9IHNcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJoYWNlIHswfSBzXCJcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcImVzLVBZXCI6IHtcbiAgICAgICAgXCJzZWNvbmQtc2hvcnRcIjoge1xuICAgICAgICAgIFwiMFwiOiBcImFob3JhXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJkZW50cm8gZGUgezB9IHNlZy5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJkZW50cm8gZGUgezB9IHNlZy5cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaGFjZSB7MH0gc2VnLlwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImhhY2UgezB9IHNlZy5cIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJzZWNvbmQtbmFycm93XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJhaG9yYVwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiZGVudHJvIGRlIHswfSBzZWcuXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiZGVudHJvIGRlIHswfSBzZWcuXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImhhY2UgezB9IHNlZy5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJoYWNlIHswfSBzZWcuXCJcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcImVzLVNWXCI6IHtcbiAgICAgICAgXCJkYXlcIjoge1xuICAgICAgICAgIFwiMFwiOiBcImhveVwiLFxuICAgICAgICAgIFwiMVwiOiBcIm1hw7FhbmFcIixcbiAgICAgICAgICBcIjJcIjogXCJwYXNhZG8gbWHDsWFuYVwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiZGVudHJvIGRlIHswfSBkw61hXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiZGVudHJvIGRlIHswfSBkw61hc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJoYWNlIHswfSBkw61hXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaGFjZSB7MH0gZMOtYXNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMlwiOiBcImFudGllclwiLFxuICAgICAgICAgIFwiLTFcIjogXCJheWVyXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwiZXMtVVNcIjoge1xuICAgICAgICBcInllYXJcIjoge1xuICAgICAgICAgIFwiMFwiOiBcImVzdGUgYcOxb1wiLFxuICAgICAgICAgIFwiMVwiOiBcImVsIGHDsW8gcHLDs3hpbW9cIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImRlbnRybyBkZSB7MH0gYcOxb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImRlbnRybyBkZSB7MH0gYcOxb3NcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaGFjZSB7MH0gYcOxb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImhhY2UgezB9IGHDsW9zXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJlbCBhw7FvIHBhc2Fkb1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwicXVhcnRlclwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwiZXN0ZSB0cmltZXN0cmVcIixcbiAgICAgICAgICBcIjFcIjogXCJlbCBwcsOzeGltbyB0cmltZXN0cmVcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImRlbnRybyBkZSB7MH0gdHJpbWV0cmVcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJkZW50cm8gZGUgezB9IHRyaW1ldHJlc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJoYWNlIHswfSB0cmltZXN0cmVcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJoYWNlIHswfSB0cmltZXN0cmVzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJlbCB0cmltZXN0cmUgcGFzYWRvXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtb250aFwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwiZXN0ZSBtZXNcIixcbiAgICAgICAgICBcIjFcIjogXCJlbCBtZXMgcHLDs3hpbW9cIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImRlbnRybyBkZSB7MH0gbWVzXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiZGVudHJvIGRlIHswfSBtZXNlc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJoYWNlIHswfSBtZXNcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJoYWNlIHswfSBtZXNlc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwiZWwgbWVzIHBhc2Fkb1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwid2Vla1wiOiB7XG4gICAgICAgICAgXCIwXCI6IFwiZXN0YSBzZW1hbmFcIixcbiAgICAgICAgICBcIjFcIjogXCJsYSBzZW1hbmEgcHLDs3hpbWFcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImRlbnRybyBkZSB7MH0gc2VtYW5hXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiZGVudHJvIGRlIHswfSBzZW1hbmFzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImhhY2UgezB9IHNlbWFuYVwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImhhY2UgezB9IHNlbWFuYXNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImxhIHNlbWFuYSBwYXNhZGFcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJlc1wiOiB7XG4gICAgICAgIFwibnVcIjogW1wibGF0blwiXSxcbiAgICAgICAgXCJ5ZWFyXCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJlc3RlIGHDsW9cIixcbiAgICAgICAgICBcIjFcIjogXCJlbCBwcsOzeGltbyBhw7FvXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJkZW50cm8gZGUgezB9IGHDsW9cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJkZW50cm8gZGUgezB9IGHDsW9zXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImhhY2UgezB9IGHDsW9cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJoYWNlIHswfSBhw7Fvc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwiZWwgYcOxbyBwYXNhZG9cIlxuICAgICAgICB9LFxuICAgICAgICBcInllYXItc2hvcnRcIjoge1xuICAgICAgICAgIFwiMFwiOiBcImVzdGUgYcOxb1wiLFxuICAgICAgICAgIFwiMVwiOiBcImVsIHByw7N4aW1vIGHDsW9cIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImRlbnRybyBkZSB7MH0gYVwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImRlbnRybyBkZSB7MH0gYVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJoYWNlIHswfSBhXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaGFjZSB7MH0gYVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwiZWwgYcOxbyBwYXNhZG9cIlxuICAgICAgICB9LFxuICAgICAgICBcInllYXItbmFycm93XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJlc3RlIGHDsW9cIixcbiAgICAgICAgICBcIjFcIjogXCJlbCBwcsOzeGltbyBhw7FvXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJkZW50cm8gZGUgezB9IGFcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJkZW50cm8gZGUgezB9IGFcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaGFjZSB7MH0gYVwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImhhY2UgezB9IGFcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImVsIGHDsW8gcGFzYWRvXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJxdWFydGVyXCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJlc3RlIHRyaW1lc3RyZVwiLFxuICAgICAgICAgIFwiMVwiOiBcImVsIHByw7N4aW1vIHRyaW1lc3RyZVwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiZGVudHJvIGRlIHswfSB0cmltZXN0cmVcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJkZW50cm8gZGUgezB9IHRyaW1lc3RyZXNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaGFjZSB7MH0gdHJpbWVzdHJlXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaGFjZSB7MH0gdHJpbWVzdHJlc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwiZWwgdHJpbWVzdHJlIHBhc2Fkb1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwicXVhcnRlci1zaG9ydFwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwiZXN0ZSB0cmltZXN0cmVcIixcbiAgICAgICAgICBcIjFcIjogXCJlbCBwcsOzeGltbyB0cmltZXN0cmVcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImRlbnRybyBkZSB7MH0gdHJpbS5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJkZW50cm8gZGUgezB9IHRyaW0uXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImhhY2UgezB9IHRyaW0uXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaGFjZSB7MH0gdHJpbS5cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImVsIHRyaW1lc3RyZSBwYXNhZG9cIlxuICAgICAgICB9LFxuICAgICAgICBcInF1YXJ0ZXItbmFycm93XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJlc3RlIHRyaW1lc3RyZVwiLFxuICAgICAgICAgIFwiMVwiOiBcImVsIHByw7N4aW1vIHRyaW1lc3RyZVwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiZGVudHJvIGRlIHswfSB0cmltLlwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImRlbnRybyBkZSB7MH0gdHJpbS5cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaGFjZSB7MH0gdHJpbS5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJoYWNlIHswfSB0cmltLlwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwiZWwgdHJpbWVzdHJlIHBhc2Fkb1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwibW9udGhcIjoge1xuICAgICAgICAgIFwiMFwiOiBcImVzdGUgbWVzXCIsXG4gICAgICAgICAgXCIxXCI6IFwiZWwgcHLDs3hpbW8gbWVzXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJkZW50cm8gZGUgezB9IG1lc1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImRlbnRybyBkZSB7MH0gbWVzZXNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaGFjZSB7MH0gbWVzXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaGFjZSB7MH0gbWVzZXNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImVsIG1lcyBwYXNhZG9cIlxuICAgICAgICB9LFxuICAgICAgICBcIm1vbnRoLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJlc3RlIG1lc1wiLFxuICAgICAgICAgIFwiMVwiOiBcImVsIHByw7N4aW1vIG1lc1wiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiZGVudHJvIGRlIHswfSBtXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiZGVudHJvIGRlIHswfSBtXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImhhY2UgezB9IG1cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJoYWNlIHswfSBtXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJlbCBtZXMgcGFzYWRvXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtb250aC1uYXJyb3dcIjoge1xuICAgICAgICAgIFwiMFwiOiBcImVzdGUgbWVzXCIsXG4gICAgICAgICAgXCIxXCI6IFwiZWwgcHLDs3hpbW8gbWVzXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJkZW50cm8gZGUgezB9IG1cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJkZW50cm8gZGUgezB9IG1cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaGFjZSB7MH0gbVwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImhhY2UgezB9IG1cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImVsIG1lcyBwYXNhZG9cIlxuICAgICAgICB9LFxuICAgICAgICBcIndlZWtcIjoge1xuICAgICAgICAgIFwiMFwiOiBcImVzdGEgc2VtYW5hXCIsXG4gICAgICAgICAgXCIxXCI6IFwibGEgcHLDs3hpbWEgc2VtYW5hXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJkZW50cm8gZGUgezB9IHNlbWFuYVwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImRlbnRybyBkZSB7MH0gc2VtYW5hc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJoYWNlIHswfSBzZW1hbmFcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJoYWNlIHswfSBzZW1hbmFzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJsYSBzZW1hbmEgcGFzYWRhXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ3ZWVrLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJlc3RhIHNlbS5cIixcbiAgICAgICAgICBcIjFcIjogXCJwcsOzeC4gc2VtLlwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiZGVudHJvIGRlIHswfSBzZW0uXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiZGVudHJvIGRlIHswfSBzZW0uXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImhhY2UgezB9IHNlbS5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJoYWNlIHswfSBzZW0uXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJzZW0uIGFudC5cIlxuICAgICAgICB9LFxuICAgICAgICBcIndlZWstbmFycm93XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJlc3RhIHNlbS5cIixcbiAgICAgICAgICBcIjFcIjogXCJwcsOzeC4gc2VtLlwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiZGVudHJvIGRlIHswfSBzZW0uXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiZGVudHJvIGRlIHswfSBzZW0uXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImhhY2UgezB9IHNlbS5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJoYWNlIHswfSBzZW0uXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJzZW0uIGFudC5cIlxuICAgICAgICB9LFxuICAgICAgICBcImRheVwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwiaG95XCIsXG4gICAgICAgICAgXCIxXCI6IFwibWHDsWFuYVwiLFxuICAgICAgICAgIFwiMlwiOiBcInBhc2FkbyBtYcOxYW5hXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJkZW50cm8gZGUgezB9IGTDrWFcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJkZW50cm8gZGUgezB9IGTDrWFzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImhhY2UgezB9IGTDrWFcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJoYWNlIHswfSBkw61hc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0yXCI6IFwiYW50ZWF5ZXJcIixcbiAgICAgICAgICBcIi0xXCI6IFwiYXllclwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGF5LXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJob3lcIixcbiAgICAgICAgICBcIjFcIjogXCJtYcOxYW5hXCIsXG4gICAgICAgICAgXCIyXCI6IFwicGFzYWRvIG1hw7FhbmFcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImRlbnRybyBkZSB7MH0gZMOtYVwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImRlbnRybyBkZSB7MH0gZMOtYXNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaGFjZSB7MH0gZMOtYVwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImhhY2UgezB9IGTDrWFzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTJcIjogXCJhbnRlYXllclwiLFxuICAgICAgICAgIFwiLTFcIjogXCJheWVyXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJkYXktbmFycm93XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJob3lcIixcbiAgICAgICAgICBcIjFcIjogXCJtYcOxYW5hXCIsXG4gICAgICAgICAgXCIyXCI6IFwicGFzYWRvIG1hw7FhbmFcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImRlbnRybyBkZSB7MH0gZMOtYVwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImRlbnRybyBkZSB7MH0gZMOtYXNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaGFjZSB7MH0gZMOtYVwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImhhY2UgezB9IGTDrWFzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTJcIjogXCJhbnRlYXllclwiLFxuICAgICAgICAgIFwiLTFcIjogXCJheWVyXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJob3VyXCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJlc3RhIGhvcmFcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImRlbnRybyBkZSB7MH0gaG9yYVwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImRlbnRybyBkZSB7MH0gaG9yYXNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaGFjZSB7MH0gaG9yYVwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImhhY2UgezB9IGhvcmFzXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiaG91ci1zaG9ydFwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwiZXN0YSBob3JhXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJkZW50cm8gZGUgezB9IGhcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJkZW50cm8gZGUgezB9IGhcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaGFjZSB7MH0gaFwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImhhY2UgezB9IGhcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJob3VyLW5hcnJvd1wiOiB7XG4gICAgICAgICAgXCIwXCI6IFwiZXN0YSBob3JhXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJkZW50cm8gZGUgezB9IGhcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJkZW50cm8gZGUgezB9IGhcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaGFjZSB7MH0gaFwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImhhY2UgezB9IGhcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJtaW51dGVcIjoge1xuICAgICAgICAgIFwiMFwiOiBcImVzdGUgbWludXRvXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJkZW50cm8gZGUgezB9IG1pbnV0b1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImRlbnRybyBkZSB7MH0gbWludXRvc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJoYWNlIHswfSBtaW51dG9cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJoYWNlIHswfSBtaW51dG9zXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwibWludXRlLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJlc3RlIG1pbnV0b1wiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiZGVudHJvIGRlIHswfSBtaW5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJkZW50cm8gZGUgezB9IG1pblwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJoYWNlIHswfSBtaW5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJoYWNlIHswfSBtaW5cIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJtaW51dGUtbmFycm93XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJlc3RlIG1pbnV0b1wiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiZGVudHJvIGRlIHswfSBtaW5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJkZW50cm8gZGUgezB9IG1pblwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJoYWNlIHswfSBtaW5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJoYWNlIHswfSBtaW5cIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJzZWNvbmRcIjoge1xuICAgICAgICAgIFwiMFwiOiBcImFob3JhXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJkZW50cm8gZGUgezB9IHNlZ3VuZG9cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJkZW50cm8gZGUgezB9IHNlZ3VuZG9zXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImhhY2UgezB9IHNlZ3VuZG9cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJoYWNlIHswfSBzZWd1bmRvc1wiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcInNlY29uZC1zaG9ydFwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwiYWhvcmFcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImRlbnRybyBkZSB7MH0gc1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImRlbnRybyBkZSB7MH0gc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJoYWNlIHswfSBzXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaGFjZSB7MH0gc1wiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcInNlY29uZC1uYXJyb3dcIjoge1xuICAgICAgICAgIFwiMFwiOiBcImFob3JhXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJkZW50cm8gZGUgezB9IHNcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJkZW50cm8gZGUgezB9IHNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaGFjZSB7MH0gc1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImhhY2UgezB9IHNcIlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgXCJhdmFpbGFibGVMb2NhbGVzXCI6IFtcImVzLTQxOVwiLCBcImVzLUFSXCIsIFwiZXMtQk9cIiwgXCJlcy1CUlwiLCBcImVzLUJaXCIsIFwiZXMtQ0xcIiwgXCJlcy1DT1wiLCBcImVzLUNSXCIsIFwiZXMtQ1VcIiwgXCJlcy1ET1wiLCBcImVzLUVBXCIsIFwiZXMtRUNcIiwgXCJlcy1HUVwiLCBcImVzLUdUXCIsIFwiZXMtSE5cIiwgXCJlcy1JQ1wiLCBcImVzLU1YXCIsIFwiZXMtTklcIiwgXCJlcy1QQVwiLCBcImVzLVBFXCIsIFwiZXMtUEhcIiwgXCJlcy1QUlwiLCBcImVzLVBZXCIsIFwiZXMtU1ZcIiwgXCJlcy1VU1wiLCBcImVzLVVZXCIsIFwiZXMtVkVcIiwgXCJlc1wiXSxcbiAgICBcImFsaWFzZXNcIjoge30sXG4gICAgXCJwYXJlbnRMb2NhbGVzXCI6IHtcbiAgICAgIFwiZXMtQVJcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtQk9cIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtQlJcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtQlpcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtQ0xcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtQ09cIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtQ1JcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtQ1VcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtRE9cIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtRUNcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtR1RcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtSE5cIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtTVhcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtTklcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtUEFcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtUEVcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtUFJcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtUFlcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtU1ZcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtVVNcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtVVlcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtVkVcIjogXCJlcy00MTlcIlxuICAgIH1cbiAgfSk7XG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4033\n')},9584:function(){eval('/* @generated */\n// prettier-ignore\nif (Intl.RelativeTimeFormat && typeof Intl.RelativeTimeFormat.__addLocaleData === \'function\') {\n Intl.RelativeTimeFormat.__addLocaleData({\n "data": {\n "ses": {\n "nu": ["latn"],\n "year": {\n "0": "this year",\n "1": "next year",\n "future": {\n "other": "+{0} y"\n },\n "past": {\n "other": "-{0} y"\n },\n "-1": "last year"\n },\n "year-short": {\n "0": "this year",\n "1": "next year",\n "future": {\n "other": "+{0} y"\n },\n "past": {\n "other": "-{0} y"\n },\n "-1": "last year"\n },\n "year-narrow": {\n "0": "this year",\n "1": "next year",\n "future": {\n "other": "+{0} y"\n },\n "past": {\n "other": "-{0} y"\n },\n "-1": "last year"\n },\n "quarter": {\n "0": "this quarter",\n "1": "next quarter",\n "future": {\n "other": "+{0} Q"\n },\n "past": {\n "other": "-{0} Q"\n },\n "-1": "last quarter"\n },\n "quarter-short": {\n "0": "this quarter",\n "1": "next quarter",\n "future": {\n "other": "+{0} Q"\n },\n "past": {\n "other": "-{0} Q"\n },\n "-1": "last quarter"\n },\n "quarter-narrow": {\n "0": "this quarter",\n "1": "next quarter",\n "future": {\n "other": "+{0} Q"\n },\n "past": {\n "other": "-{0} Q"\n },\n "-1": "last quarter"\n },\n "month": {\n "0": "this month",\n "1": "next month",\n "future": {\n "other": "+{0} m"\n },\n "past": {\n "other": "-{0} m"\n },\n "-1": "last month"\n },\n "month-short": {\n "0": "this month",\n "1": "next month",\n "future": {\n "other": "+{0} m"\n },\n "past": {\n "other": "-{0} m"\n },\n "-1": "last month"\n },\n "month-narrow": {\n "0": "this month",\n "1": "next month",\n "future": {\n "other": "+{0} m"\n },\n "past": {\n "other": "-{0} m"\n },\n "-1": "last month"\n },\n "week": {\n "0": "this week",\n "1": "next week",\n "future": {\n "other": "+{0} w"\n },\n "past": {\n "other": "-{0} w"\n },\n "-1": "last week"\n },\n "week-short": {\n "0": "this week",\n "1": "next week",\n "future": {\n "other": "+{0} w"\n },\n "past": {\n "other": "-{0} w"\n },\n "-1": "last week"\n },\n "week-narrow": {\n "0": "this week",\n "1": "next week",\n "future": {\n "other": "+{0} w"\n },\n "past": {\n "other": "-{0} w"\n },\n "-1": "last week"\n },\n "day": {\n "0": "Hõo",\n "1": "Suba",\n "future": {\n "other": "+{0} d"\n },\n "past": {\n "other": "-{0} d"\n },\n "-1": "Bi"\n },\n "day-short": {\n "0": "Hõo",\n "1": "Suba",\n "future": {\n "other": "+{0} d"\n },\n "past": {\n "other": "-{0} d"\n },\n "-1": "Bi"\n },\n "day-narrow": {\n "0": "Hõo",\n "1": "Suba",\n "future": {\n "other": "+{0} d"\n },\n "past": {\n "other": "-{0} d"\n },\n "-1": "Bi"\n },\n "hour": {\n "0": "this hour",\n "future": {\n "other": "+{0} h"\n },\n "past": {\n "other": "-{0} h"\n }\n },\n "hour-short": {\n "0": "this hour",\n "future": {\n "other": "+{0} h"\n },\n "past": {\n "other": "-{0} h"\n }\n },\n "hour-narrow": {\n "0": "this hour",\n "future": {\n "other": "+{0} h"\n },\n "past": {\n "other": "-{0} h"\n }\n },\n "minute": {\n "0": "this minute",\n "future": {\n "other": "+{0} min"\n },\n "past": {\n "other": "-{0} min"\n }\n },\n "minute-short": {\n "0": "this minute",\n "future": {\n "other": "+{0} min"\n },\n "past": {\n "other": "-{0} min"\n }\n },\n "minute-narrow": {\n "0": "this minute",\n "future": {\n "other": "+{0} min"\n },\n "past": {\n "other": "-{0} min"\n }\n },\n "second": {\n "0": "now",\n "future": {\n "other": "+{0} s"\n },\n "past": {\n "other": "-{0} s"\n }\n },\n "second-short": {\n "0": "now",\n "future": {\n "other": "+{0} s"\n },\n "past": {\n "other": "-{0} s"\n }\n },\n "second-narrow": {\n "0": "now",\n "future": {\n "other": "+{0} s"\n },\n "past": {\n "other": "-{0} s"\n }\n }\n }\n },\n "availableLocales": ["ses"],\n "aliases": {},\n "parentLocales": {}\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AZm9ybWF0anMvaW50bC1yZWxhdGl2ZXRpbWVmb3JtYXQvZGlzdC9sb2NhbGUtZGF0YS9zZXMuanM/Mjg4ZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLFdBQVc7QUFDWDtBQUNBLHdCQUF3QixFQUFFO0FBQzFCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLFdBQVc7QUFDWDtBQUNBLHdCQUF3QixFQUFFO0FBQzFCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLFdBQVc7QUFDWDtBQUNBLHdCQUF3QixFQUFFO0FBQzFCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLFdBQVc7QUFDWDtBQUNBLHdCQUF3QixFQUFFO0FBQzFCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLFdBQVc7QUFDWDtBQUNBLHdCQUF3QixFQUFFO0FBQzFCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLFdBQVc7QUFDWDtBQUNBLHdCQUF3QixFQUFFO0FBQzFCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLFdBQVc7QUFDWDtBQUNBLHdCQUF3QixFQUFFO0FBQzFCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLFdBQVc7QUFDWDtBQUNBLHdCQUF3QixFQUFFO0FBQzFCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLFdBQVc7QUFDWDtBQUNBLHdCQUF3QixFQUFFO0FBQzFCO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBLEdBQUc7QUFDSCIsImZpbGUiOiI5NTg0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogQGdlbmVyYXRlZCAqL1xuLy8gcHJldHRpZXItaWdub3JlXG5pZiAoSW50bC5SZWxhdGl2ZVRpbWVGb3JtYXQgJiYgdHlwZW9mIEludGwuUmVsYXRpdmVUaW1lRm9ybWF0Ll9fYWRkTG9jYWxlRGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xuICBJbnRsLlJlbGF0aXZlVGltZUZvcm1hdC5fX2FkZExvY2FsZURhdGEoe1xuICAgIFwiZGF0YVwiOiB7XG4gICAgICBcInNlc1wiOiB7XG4gICAgICAgIFwibnVcIjogW1wibGF0blwiXSxcbiAgICAgICAgXCJ5ZWFyXCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIHllYXJcIixcbiAgICAgICAgICBcIjFcIjogXCJuZXh0IHllYXJcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiK3swfSB5XCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiLXswfSB5XCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJsYXN0IHllYXJcIlxuICAgICAgICB9LFxuICAgICAgICBcInllYXItc2hvcnRcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgeWVhclwiLFxuICAgICAgICAgIFwiMVwiOiBcIm5leHQgeWVhclwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCIrezB9IHlcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCItezB9IHlcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImxhc3QgeWVhclwiXG4gICAgICAgIH0sXG4gICAgICAgIFwieWVhci1uYXJyb3dcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgeWVhclwiLFxuICAgICAgICAgIFwiMVwiOiBcIm5leHQgeWVhclwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCIrezB9IHlcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCItezB9IHlcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImxhc3QgeWVhclwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicXVhcnRlclwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyBxdWFydGVyXCIsXG4gICAgICAgICAgXCIxXCI6IFwibmV4dCBxdWFydGVyXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvdGhlclwiOiBcIit7MH0gUVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvdGhlclwiOiBcIi17MH0gUVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwibGFzdCBxdWFydGVyXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJxdWFydGVyLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIHF1YXJ0ZXJcIixcbiAgICAgICAgICBcIjFcIjogXCJuZXh0IHF1YXJ0ZXJcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiK3swfSBRXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiLXswfSBRXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJsYXN0IHF1YXJ0ZXJcIlxuICAgICAgICB9LFxuICAgICAgICBcInF1YXJ0ZXItbmFycm93XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIHF1YXJ0ZXJcIixcbiAgICAgICAgICBcIjFcIjogXCJuZXh0IHF1YXJ0ZXJcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiK3swfSBRXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiLXswfSBRXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJsYXN0IHF1YXJ0ZXJcIlxuICAgICAgICB9LFxuICAgICAgICBcIm1vbnRoXCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIG1vbnRoXCIsXG4gICAgICAgICAgXCIxXCI6IFwibmV4dCBtb250aFwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCIrezB9IG1cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCItezB9IG1cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImxhc3QgbW9udGhcIlxuICAgICAgICB9LFxuICAgICAgICBcIm1vbnRoLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIG1vbnRoXCIsXG4gICAgICAgICAgXCIxXCI6IFwibmV4dCBtb250aFwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCIrezB9IG1cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCItezB9IG1cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImxhc3QgbW9udGhcIlxuICAgICAgICB9LFxuICAgICAgICBcIm1vbnRoLW5hcnJvd1wiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyBtb250aFwiLFxuICAgICAgICAgIFwiMVwiOiBcIm5leHQgbW9udGhcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiK3swfSBtXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiLXswfSBtXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJsYXN0IG1vbnRoXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ3ZWVrXCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIHdlZWtcIixcbiAgICAgICAgICBcIjFcIjogXCJuZXh0IHdlZWtcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiK3swfSB3XCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiLXswfSB3XCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJsYXN0IHdlZWtcIlxuICAgICAgICB9LFxuICAgICAgICBcIndlZWstc2hvcnRcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgd2Vla1wiLFxuICAgICAgICAgIFwiMVwiOiBcIm5leHQgd2Vla1wiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCIrezB9IHdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCItezB9IHdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImxhc3Qgd2Vla1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwid2Vlay1uYXJyb3dcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgd2Vla1wiLFxuICAgICAgICAgIFwiMVwiOiBcIm5leHQgd2Vla1wiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCIrezB9IHdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCItezB9IHdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImxhc3Qgd2Vla1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGF5XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJIw7VvXCIsXG4gICAgICAgICAgXCIxXCI6IFwiU3ViYVwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCIrezB9IGRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCItezB9IGRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcIkJpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJkYXktc2hvcnRcIjoge1xuICAgICAgICAgIFwiMFwiOiBcIkjDtW9cIixcbiAgICAgICAgICBcIjFcIjogXCJTdWJhXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvdGhlclwiOiBcIit7MH0gZFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvdGhlclwiOiBcIi17MH0gZFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwiQmlcIlxuICAgICAgICB9LFxuICAgICAgICBcImRheS1uYXJyb3dcIjoge1xuICAgICAgICAgIFwiMFwiOiBcIkjDtW9cIixcbiAgICAgICAgICBcIjFcIjogXCJTdWJhXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvdGhlclwiOiBcIit7MH0gZFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvdGhlclwiOiBcIi17MH0gZFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwiQmlcIlxuICAgICAgICB9LFxuICAgICAgICBcImhvdXJcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgaG91clwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCIrezB9IGhcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCItezB9IGhcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJob3VyLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIGhvdXJcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiK3swfSBoXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiLXswfSBoXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiaG91ci1uYXJyb3dcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgaG91clwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCIrezB9IGhcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCItezB9IGhcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJtaW51dGVcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgbWludXRlXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvdGhlclwiOiBcIit7MH0gbWluXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiLXswfSBtaW5cIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJtaW51dGUtc2hvcnRcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgbWludXRlXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvdGhlclwiOiBcIit7MH0gbWluXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiLXswfSBtaW5cIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJtaW51dGUtbmFycm93XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIG1pbnV0ZVwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCIrezB9IG1pblwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvdGhlclwiOiBcIi17MH0gbWluXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwic2Vjb25kXCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJub3dcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiK3swfSBzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiLXswfSBzXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwic2Vjb25kLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJub3dcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiK3swfSBzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiLXswfSBzXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwic2Vjb25kLW5hcnJvd1wiOiB7XG4gICAgICAgICAgXCIwXCI6IFwibm93XCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvdGhlclwiOiBcIit7MH0gc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvdGhlclwiOiBcIi17MH0gc1wiXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBcImF2YWlsYWJsZUxvY2FsZXNcIjogW1wic2VzXCJdLFxuICAgIFwiYWxpYXNlc1wiOiB7fSxcbiAgICBcInBhcmVudExvY2FsZXNcIjoge31cbiAgfSk7XG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9584\n')},8709:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n\nvar core_1 = __webpack_require__(9905);\n\nif (!('RelativeTimeFormat' in Intl)) {\n Object.defineProperty(Intl, 'RelativeTimeFormat', {\n value: core_1.default,\n writable: true,\n enumerable: false,\n configurable: true\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AZm9ybWF0anMvaW50bC1yZWxhdGl2ZXRpbWVmb3JtYXQvZGlzdC9wb2x5ZmlsbC5qcz83ODNjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhOztBQUViLDhDQUE2QztBQUM3QztBQUNBLENBQUMsRUFBQzs7QUFFRixhQUFhLG1CQUFPLENBQUMsSUFBUTs7QUFFN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIIiwiZmlsZSI6Ijg3MDkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIGNvcmVfMSA9IHJlcXVpcmUoXCIuL2NvcmVcIik7XG5cbmlmICghKCdSZWxhdGl2ZVRpbWVGb3JtYXQnIGluIEludGwpKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJbnRsLCAnUmVsYXRpdmVUaW1lRm9ybWF0Jywge1xuICAgIHZhbHVlOiBjb3JlXzEuZGVmYXVsdCxcbiAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSk7XG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8709\n")},5316:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("__webpack_require__(8709);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AZm9ybWF0anMvaW50bC1yZWxhdGl2ZXRpbWVmb3JtYXQvcG9seWZpbGwuanM/OWM0ZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtQkFBTyxDQUFDLElBQWlCIiwiZmlsZSI6IjUzMTYuanMiLCJzb3VyY2VzQ29udGVudCI6WyJyZXF1aXJlKCcuL2Rpc3QvcG9seWZpbGwnKTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5316\n")},2650:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n "InternalSlotToken": function() { return /* reexport */ InternalSlotToken; },\n "SANCTIONED_UNITS": function() { return /* reexport */ SANCTIONED_UNITS; },\n "createResolveLocale": function() { return /* reexport */ createResolveLocale; },\n "defaultNumberOption": function() { return /* reexport */ defaultNumberOption; },\n "getAliasesByLang": function() { return /* reexport */ getAliasesByLang; },\n "getCanonicalLocales": function() { return /* reexport */ getCanonicalLocales; },\n "getInternalSlot": function() { return /* reexport */ getInternalSlot; },\n "getLocaleHierarchy": function() { return /* reexport */ getLocaleHierarchy; },\n "getMultiInternalSlots": function() { return /* reexport */ getMultiInternalSlots; },\n "getNumberOption": function() { return /* reexport */ getNumberOption; },\n "getOption": function() { return /* reexport */ getOption; },\n "getParentLocalesByLang": function() { return /* reexport */ getParentLocalesByLang; },\n "invariant": function() { return /* reexport */ invariant/* invariant */.k; },\n "isLiteralPart": function() { return /* reexport */ isLiteralPart; },\n "isMissingLocaleDataError": function() { return /* reexport */ isMissingLocaleDataError; },\n "isWellFormedCurrencyCode": function() { return /* reexport */ isWellFormedCurrencyCode; },\n "objectIs": function() { return /* reexport */ objectIs; },\n "partitionPattern": function() { return /* reexport */ partitionPattern; },\n "removeUnitNamespace": function() { return /* reexport */ removeUnitNamespace; },\n "selectUnit": function() { return /* reexport */ selectUnit; },\n "setInternalSlot": function() { return /* reexport */ setInternalSlot; },\n "setMultiInternalSlots": function() { return /* reexport */ setMultiInternalSlots; },\n "setNumberFormatDigitOptions": function() { return /* reexport */ setNumberFormatDigitOptions; },\n "supportedLocales": function() { return /* reexport */ supportedLocales; },\n "toObject": function() { return /* reexport */ toObject; },\n "toString": function() { return /* reexport */ polyfill_utils_toString; },\n "unpackData": function() { return /* reexport */ unpackData; }\n});\n\n;// CONCATENATED MODULE: ./node_modules/@formatjs/intl-utils/lib/diff.js\nvar __assign = undefined && undefined.__assign || function () {\n __assign = Object.assign || function (t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n\n for (var p in s) {\n if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n }\n\n return t;\n };\n\n return __assign.apply(this, arguments);\n};\n\nvar MS_PER_SECOND = 1e3;\nvar SECS_PER_MIN = 60;\nvar SECS_PER_HOUR = SECS_PER_MIN * 60;\nvar SECS_PER_DAY = SECS_PER_HOUR * 24;\nvar SECS_PER_WEEK = SECS_PER_DAY * 7;\nfunction selectUnit(from, to, thresholds) {\n if (to === void 0) {\n to = Date.now();\n }\n\n if (thresholds === void 0) {\n thresholds = {};\n }\n\n var resolvedThresholds = __assign(__assign({}, DEFAULT_THRESHOLDS), thresholds || {});\n\n var secs = (+from - +to) / MS_PER_SECOND;\n\n if (Math.abs(secs) < resolvedThresholds.second) {\n return {\n value: Math.round(secs),\n unit: \'second\'\n };\n }\n\n var mins = secs / SECS_PER_MIN;\n\n if (Math.abs(mins) < resolvedThresholds.minute) {\n return {\n value: Math.round(mins),\n unit: \'minute\'\n };\n }\n\n var hours = secs / SECS_PER_HOUR;\n\n if (Math.abs(hours) < resolvedThresholds.hour) {\n return {\n value: Math.round(hours),\n unit: \'hour\'\n };\n }\n\n var days = secs / SECS_PER_DAY;\n\n if (Math.abs(days) < resolvedThresholds.day) {\n return {\n value: Math.round(days),\n unit: \'day\'\n };\n }\n\n var fromDate = new Date(from);\n var toDate = new Date(to);\n var years = fromDate.getFullYear() - toDate.getFullYear();\n\n if (Math.round(Math.abs(years)) > 0) {\n return {\n value: Math.round(years),\n unit: \'year\'\n };\n }\n\n var months = years * 12 + fromDate.getMonth() - toDate.getMonth();\n\n if (Math.round(Math.abs(months)) > 0) {\n return {\n value: Math.round(months),\n unit: \'month\'\n };\n }\n\n var weeks = secs / SECS_PER_WEEK;\n return {\n value: Math.round(weeks),\n unit: \'week\'\n };\n}\nvar DEFAULT_THRESHOLDS = {\n second: 45,\n minute: 45,\n hour: 22,\n day: 5\n};\n;// CONCATENATED MODULE: ./node_modules/@formatjs/intl-utils/lib/aliases.js\n/* @generated */\n// prettier-ignore \n/* harmony default export */ var aliases = ({\n "aa-SAAHO": "ssy",\n "aam": "aas",\n "aar": "aa",\n "abk": "ab",\n "adp": "dz",\n "afr": "af",\n "aju": "jrb",\n "aka": "ak",\n "alb": "sq",\n "als": "sq",\n "amh": "am",\n "ara": "ar",\n "arb": "ar",\n "arg": "an",\n "arm": "hy",\n "art-lojban": "jbo",\n "asd": "snz",\n "asm": "as",\n "aue": "ktz",\n "ava": "av",\n "ave": "ae",\n "aym": "ay",\n "ayr": "ay",\n "ayx": "nun",\n "az-AZ": "az-Latn-AZ",\n "aze": "az",\n "azj": "az",\n "bak": "ba",\n "bam": "bm",\n "baq": "eu",\n "bcc": "bal",\n "bcl": "bik",\n "bel": "be",\n "ben": "bn",\n "bgm": "bcg",\n "bh": "bho",\n "bih": "bho",\n "bis": "bi",\n "bjd": "drl",\n "bod": "bo",\n "bos": "bs",\n "bre": "br",\n "bs-BA": "bs-Latn-BA",\n "bul": "bg",\n "bur": "my",\n "bxk": "luy",\n "bxr": "bua",\n "cat": "ca",\n "ccq": "rki",\n "cel-gaulish": "xtg-x-cel-gaulish",\n "ces": "cs",\n "cha": "ch",\n "che": "ce",\n "chi": "zh",\n "chu": "cu",\n "chv": "cv",\n "cjr": "mom",\n "cka": "cmr",\n "cld": "syr",\n "cmk": "xch",\n "cmn": "zh",\n "cnr": "sr-ME",\n "cor": "kw",\n "cos": "co",\n "coy": "pij",\n "cqu": "quh",\n "cre": "cr",\n "cwd": "cr",\n "cym": "cy",\n "cze": "cs",\n "dan": "da",\n "deu": "de",\n "dgo": "doi",\n "dhd": "mwr",\n "dik": "din",\n "diq": "zza",\n "dit": "dif",\n "div": "dv",\n "drh": "mn",\n "drw": "fa-af",\n "dut": "nl",\n "dzo": "dz",\n "ekk": "et",\n "ell": "el",\n "emk": "man",\n "eng": "en",\n "epo": "eo",\n "esk": "ik",\n "est": "et",\n "eus": "eu",\n "ewe": "ee",\n "fao": "fo",\n "fas": "fa",\n "fat": "ak",\n "fij": "fj",\n "fin": "fi",\n "fra": "fr",\n "fre": "fr",\n "fry": "fy",\n "fuc": "ff",\n "ful": "ff",\n "gav": "dev",\n "gaz": "om",\n "gbo": "grb",\n "geo": "ka",\n "ger": "de",\n "gfx": "vaj",\n "ggn": "gvr",\n "gla": "gd",\n "gle": "ga",\n "glg": "gl",\n "glv": "gv",\n "gno": "gon",\n "gre": "el",\n "grn": "gn",\n "gti": "nyc",\n "gug": "gn",\n "guj": "gu",\n "guv": "duz",\n "gya": "gba",\n "ha-Latn-GH": "ha-GH",\n "ha-Latn-NE": "ha-NE",\n "ha-Latn-NG": "ha-NG",\n "hat": "ht",\n "hau": "ha",\n "hbs": "sr-Latn",\n "hdn": "hai",\n "hea": "hmn",\n "heb": "he",\n "her": "hz",\n "him": "srx",\n "hin": "hi",\n "hmo": "ho",\n "hrr": "jal",\n "hrv": "hr",\n "hun": "hu",\n "hye": "hy",\n "i-ami": "ami",\n "i-bnn": "bnn",\n "i-hak": "hak",\n "i-klingon": "tlh",\n "i-lux": "lb",\n "i-navajo": "nv",\n "i-pwn": "pwn",\n "i-tao": "tao",\n "i-tay": "tay",\n "i-tsu": "tsu",\n "i-default": "en-x-i-default",\n "i-enochian": "und-x-i-enochian",\n "i-mingo": "see-x-i-mingo",\n "ibi": "opa",\n "ibo": "ig",\n "ice": "is",\n "ido": "io",\n "iii": "ii",\n "ike": "iu",\n "iku": "iu",\n "ile": "ie",\n "ilw": "gal",\n "in": "id",\n "ina": "ia",\n "ind": "id",\n "ipk": "ik",\n "isl": "is",\n "ita": "it",\n "iw": "he",\n "jav": "jv",\n "jeg": "oyb",\n "ji": "yi",\n "jpn": "ja",\n "jw": "jv",\n "kal": "kl",\n "kan": "kn",\n "kas": "ks",\n "kat": "ka",\n "kau": "kr",\n "kaz": "kk",\n "kgc": "tdf",\n "kgh": "kml",\n "khk": "mn",\n "khm": "km",\n "kik": "ki",\n "kin": "rw",\n "kir": "ky",\n "kk-Cyrl-KZ": "kk-KZ",\n "kmr": "ku",\n "knc": "kr",\n "kng": "kg",\n "knn": "kok",\n "koj": "kwv",\n "kom": "kv",\n "kon": "kg",\n "kor": "ko",\n "kpv": "kv",\n "krm": "bmf",\n "ks-Arab-IN": "ks-IN",\n "ktr": "dtp",\n "kua": "kj",\n "kur": "ku",\n "kvs": "gdj",\n "kwq": "yam",\n "kxe": "tvd",\n "ky-Cyrl-KG": "ky-KG",\n "kzj": "dtp",\n "kzt": "dtp",\n "lao": "lo",\n "lat": "la",\n "lav": "lv",\n "lbk": "bnc",\n "lii": "raq",\n "lim": "li",\n "lin": "ln",\n "lit": "lt",\n "llo": "ngt",\n "lmm": "rmx",\n "ltz": "lb",\n "lub": "lu",\n "lug": "lg",\n "lvs": "lv",\n "mac": "mk",\n "mah": "mh",\n "mal": "ml",\n "mao": "mi",\n "mar": "mr",\n "may": "ms",\n "meg": "cir",\n "mhr": "chm",\n "mkd": "mk",\n "mlg": "mg",\n "mlt": "mt",\n "mn-Cyrl-MN": "mn-MN",\n "mnk": "man",\n "mo": "ro",\n "mol": "ro",\n "mon": "mn",\n "mri": "mi",\n "ms-Latn-BN": "ms-BN",\n "ms-Latn-MY": "ms-MY",\n "ms-Latn-SG": "ms-SG",\n "msa": "ms",\n "mst": "mry",\n "mup": "raj",\n "mwj": "vaj",\n "mya": "my",\n "myd": "aog",\n "myt": "mry",\n "nad": "xny",\n "nau": "na",\n "nav": "nv",\n "nbl": "nr",\n "ncp": "kdz",\n "nde": "nd",\n "ndo": "ng",\n "nep": "ne",\n "nld": "nl",\n "nno": "nn",\n "nns": "nbr",\n "nnx": "ngv",\n "no": "nb",\n "no-bok": "nb",\n "no-BOKMAL": "nb",\n "no-nyn": "nn",\n "no-NYNORSK": "nn",\n "nob": "nb",\n "nor": "nb",\n "npi": "ne",\n "nts": "pij",\n "nya": "ny",\n "oci": "oc",\n "ojg": "oj",\n "oji": "oj",\n "ori": "or",\n "orm": "om",\n "ory": "or",\n "oss": "os",\n "oun": "vaj",\n "pa-IN": "pa-Guru-IN",\n "pa-PK": "pa-Arab-PK",\n "pan": "pa",\n "pbu": "ps",\n "pcr": "adx",\n "per": "fa",\n "pes": "fa",\n "pli": "pi",\n "plt": "mg",\n "pmc": "huw",\n "pmu": "phr",\n "pnb": "lah",\n "pol": "pl",\n "por": "pt",\n "ppa": "bfy",\n "ppr": "lcq",\n "prs": "fa-AF",\n "pry": "prt",\n "pus": "ps",\n "puz": "pub",\n "que": "qu",\n "quz": "qu",\n "rmy": "rom",\n "roh": "rm",\n "ron": "ro",\n "rum": "ro",\n "run": "rn",\n "rus": "ru",\n "sag": "sg",\n "san": "sa",\n "sca": "hle",\n "scc": "sr",\n "scr": "hr",\n "sgn-BE-FR": "sfb",\n "sgn-BE-NL": "vgt",\n "sgn-CH-DE": "sgg",\n "sh": "sr-Latn",\n "shi-MA": "shi-Tfng-MA",\n "sin": "si",\n "skk": "oyb",\n "slk": "sk",\n "slo": "sk",\n "slv": "sl",\n "sme": "se",\n "smo": "sm",\n "sna": "sn",\n "snd": "sd",\n "som": "so",\n "sot": "st",\n "spa": "es",\n "spy": "kln",\n "sqi": "sq",\n "sr-BA": "sr-Cyrl-BA",\n "sr-ME": "sr-Latn-ME",\n "sr-RS": "sr-Cyrl-RS",\n "sr-XK": "sr-Cyrl-XK",\n "src": "sc",\n "srd": "sc",\n "srp": "sr",\n "ssw": "ss",\n "sun": "su",\n "swa": "sw",\n "swc": "sw-CD",\n "swe": "sv",\n "swh": "sw",\n "tah": "ty",\n "tam": "ta",\n "tat": "tt",\n "tdu": "dtp",\n "tel": "te",\n "tgk": "tg",\n "tgl": "fil",\n "tha": "th",\n "thc": "tpo",\n "thx": "oyb",\n "tib": "bo",\n "tie": "ras",\n "tir": "ti",\n "tkk": "twm",\n "tl": "fil",\n "tlw": "weo",\n "tmp": "tyj",\n "tne": "kak",\n "tnf": "fa-af",\n "ton": "to",\n "tsf": "taj",\n "tsn": "tn",\n "tso": "ts",\n "ttq": "tmh",\n "tuk": "tk",\n "tur": "tr",\n "tw": "ak",\n "twi": "ak",\n "tzm-Latn-MA": "tzm-MA",\n "ug-Arab-CN": "ug-CN",\n "uig": "ug",\n "ukr": "uk",\n "umu": "del",\n "uok": "ema",\n "urd": "ur",\n "uz-AF": "uz-Arab-AF",\n "uz-UZ": "uz-Latn-UZ",\n "uzb": "uz",\n "uzn": "uz",\n "vai-LR": "vai-Vaii-LR",\n "ven": "ve",\n "vie": "vi",\n "vol": "vo",\n "wel": "cy",\n "wln": "wa",\n "wol": "wo",\n "xba": "cax",\n "xho": "xh",\n "xia": "acn",\n "xkh": "waw",\n "xpe": "kpe",\n "xsj": "suj",\n "xsl": "den",\n "ybd": "rki",\n "ydd": "yi",\n "yid": "yi",\n "yma": "lrr",\n "ymt": "mtm",\n "yor": "yo",\n "yos": "zom",\n "yue-CN": "yue-Hans-CN",\n "yue-HK": "yue-Hant-HK",\n "yuu": "yug",\n "zai": "zap",\n "zh-CN": "zh-Hans-CN",\n "zh-guoyu": "zh",\n "zh-hakka": "hak",\n "zh-HK": "zh-Hant-HK",\n "zh-min-nan": "nan",\n "zh-MO": "zh-Hant-MO",\n "zh-SG": "zh-Hans-SG",\n "zh-TW": "zh-Hant-TW",\n "zh-xiang": "hsn",\n "zh-min": "nan-x-zh-min",\n "zha": "za",\n "zho": "zh",\n "zsm": "ms",\n "zul": "zu",\n "zyb": "za"\n});\n;// CONCATENATED MODULE: ./node_modules/@formatjs/intl-utils/lib/parentLocales.js\n/* @generated */\n// prettier-ignore \n/* harmony default export */ var parentLocales = ({\n "en-150": "en-001",\n "en-AG": "en-001",\n "en-AI": "en-001",\n "en-AU": "en-001",\n "en-BB": "en-001",\n "en-BM": "en-001",\n "en-BS": "en-001",\n "en-BW": "en-001",\n "en-BZ": "en-001",\n "en-CA": "en-001",\n "en-CC": "en-001",\n "en-CK": "en-001",\n "en-CM": "en-001",\n "en-CX": "en-001",\n "en-CY": "en-001",\n "en-DG": "en-001",\n "en-DM": "en-001",\n "en-ER": "en-001",\n "en-FJ": "en-001",\n "en-FK": "en-001",\n "en-FM": "en-001",\n "en-GB": "en-001",\n "en-GD": "en-001",\n "en-GG": "en-001",\n "en-GH": "en-001",\n "en-GI": "en-001",\n "en-GM": "en-001",\n "en-GY": "en-001",\n "en-HK": "en-001",\n "en-IE": "en-001",\n "en-IL": "en-001",\n "en-IM": "en-001",\n "en-IN": "en-001",\n "en-IO": "en-001",\n "en-JE": "en-001",\n "en-JM": "en-001",\n "en-KE": "en-001",\n "en-KI": "en-001",\n "en-KN": "en-001",\n "en-KY": "en-001",\n "en-LC": "en-001",\n "en-LR": "en-001",\n "en-LS": "en-001",\n "en-MG": "en-001",\n "en-MO": "en-001",\n "en-MS": "en-001",\n "en-MT": "en-001",\n "en-MU": "en-001",\n "en-MW": "en-001",\n "en-MY": "en-001",\n "en-NA": "en-001",\n "en-NF": "en-001",\n "en-NG": "en-001",\n "en-NR": "en-001",\n "en-NU": "en-001",\n "en-NZ": "en-001",\n "en-PG": "en-001",\n "en-PH": "en-001",\n "en-PK": "en-001",\n "en-PN": "en-001",\n "en-PW": "en-001",\n "en-RW": "en-001",\n "en-SB": "en-001",\n "en-SC": "en-001",\n "en-SD": "en-001",\n "en-SG": "en-001",\n "en-SH": "en-001",\n "en-SL": "en-001",\n "en-SS": "en-001",\n "en-SX": "en-001",\n "en-SZ": "en-001",\n "en-TC": "en-001",\n "en-TK": "en-001",\n "en-TO": "en-001",\n "en-TT": "en-001",\n "en-TV": "en-001",\n "en-TZ": "en-001",\n "en-UG": "en-001",\n "en-VC": "en-001",\n "en-VG": "en-001",\n "en-VU": "en-001",\n "en-WS": "en-001",\n "en-ZA": "en-001",\n "en-ZM": "en-001",\n "en-ZW": "en-001",\n "en-AT": "en-150",\n "en-BE": "en-150",\n "en-CH": "en-150",\n "en-DE": "en-150",\n "en-DK": "en-150",\n "en-FI": "en-150",\n "en-NL": "en-150",\n "en-SE": "en-150",\n "en-SI": "en-150",\n "es-AR": "es-419",\n "es-BO": "es-419",\n "es-BR": "es-419",\n "es-BZ": "es-419",\n "es-CL": "es-419",\n "es-CO": "es-419",\n "es-CR": "es-419",\n "es-CU": "es-419",\n "es-DO": "es-419",\n "es-EC": "es-419",\n "es-GT": "es-419",\n "es-HN": "es-419",\n "es-MX": "es-419",\n "es-NI": "es-419",\n "es-PA": "es-419",\n "es-PE": "es-419",\n "es-PR": "es-419",\n "es-PY": "es-419",\n "es-SV": "es-419",\n "es-US": "es-419",\n "es-UY": "es-419",\n "es-VE": "es-419",\n "pt-AO": "pt-PT",\n "pt-CH": "pt-PT",\n "pt-CV": "pt-PT",\n "pt-FR": "pt-PT",\n "pt-GQ": "pt-PT",\n "pt-GW": "pt-PT",\n "pt-LU": "pt-PT",\n "pt-MO": "pt-PT",\n "pt-MZ": "pt-PT",\n "pt-ST": "pt-PT",\n "pt-TL": "pt-PT",\n "zh-Hant-MO": "zh-Hant-HK"\n});\n// EXTERNAL MODULE: ./node_modules/@formatjs/intl-utils/lib/invariant.js\nvar invariant = __webpack_require__(5981);\n;// CONCATENATED MODULE: ./node_modules/@formatjs/intl-utils/lib/polyfill-utils.js\n\n\n\n/**\n * https://tc39.es/ecma262/#sec-toobject\n * @param arg\n */\n\nfunction toObject(arg) {\n if (arg == null) {\n throw new TypeError(\'undefined/null cannot be converted to object\');\n }\n\n return Object(arg);\n}\n/**\n * https://tc39.es/ecma262/#sec-tostring\n */\n\nfunction polyfill_utils_toString(o) {\n // Only symbol is irregular...\n if (typeof o === \'symbol\') {\n throw TypeError(\'Cannot convert a Symbol value to a string\');\n }\n\n return String(o);\n}\n/**\n * https://tc39.es/ecma402/#sec-getoption\n * @param opts\n * @param prop\n * @param type\n * @param values\n * @param fallback\n */\n\nfunction getOption(opts, prop, type, values, fallback) {\n // const descriptor = Object.getOwnPropertyDescriptor(opts, prop);\n var value = opts[prop];\n\n if (value !== undefined) {\n if (type !== \'boolean\' && type !== \'string\') {\n throw new TypeError(\'invalid type\');\n }\n\n if (type === \'boolean\') {\n value = Boolean(value);\n }\n\n if (type === \'string\') {\n value = polyfill_utils_toString(value);\n }\n\n if (values !== undefined && !values.filter(function (val) {\n return val == value;\n }).length) {\n throw new RangeError(value + " is not within " + values.join(\', \'));\n }\n\n return value;\n }\n\n return fallback;\n}\n/**\n * https://tc39.es/ecma402/#sec-defaultnumberoption\n * @param val\n * @param min\n * @param max\n * @param fallback\n */\n\nfunction defaultNumberOption(val, min, max, fallback) {\n if (val !== undefined) {\n val = Number(val);\n\n if (isNaN(val) || val < min || val > max) {\n throw new RangeError(val + " is outside of range [" + min + ", " + max + "]");\n }\n\n return Math.floor(val);\n }\n\n return fallback;\n}\n/**\n * https://tc39.es/ecma402/#sec-getnumberoption\n * @param options\n * @param property\n * @param min\n * @param max\n * @param fallback\n */\n\nfunction getNumberOption(options, property, minimum, maximum, fallback) {\n var val = options[property];\n return defaultNumberOption(val, minimum, maximum, fallback);\n}\nfunction getAliasesByLang(lang) {\n return Object.keys(aliases).reduce(function (all, locale) {\n if (locale.split(\'-\')[0] === lang) {\n all[locale] = aliases[locale];\n }\n\n return all;\n }, {});\n}\nfunction getParentLocalesByLang(lang) {\n return Object.keys(parentLocales).reduce(function (all, locale) {\n if (locale.split(\'-\')[0] === lang) {\n all[locale] = parentLocales[locale];\n }\n\n return all;\n }, {});\n}\nfunction setInternalSlot(map, pl, field, value) {\n if (!map.get(pl)) {\n map.set(pl, Object.create(null));\n }\n\n var slots = map.get(pl);\n slots[field] = value;\n}\nfunction setMultiInternalSlots(map, pl, props) {\n for (var _i = 0, _a = Object.keys(props); _i < _a.length; _i++) {\n var k = _a[_i];\n setInternalSlot(map, pl, k, props[k]);\n }\n}\nfunction getInternalSlot(map, pl, field) {\n return getMultiInternalSlots(map, pl, field)[field];\n}\nfunction getMultiInternalSlots(map, pl) {\n var fields = [];\n\n for (var _i = 2; _i < arguments.length; _i++) {\n fields[_i - 2] = arguments[_i];\n }\n\n var slots = map.get(pl);\n\n if (!slots) {\n throw new TypeError(pl + " InternalSlot has not been initialized");\n }\n\n return fields.reduce(function (all, f) {\n all[f] = slots[f];\n return all;\n }, Object.create(null));\n}\nfunction isLiteralPart(patternPart) {\n return patternPart.type === \'literal\';\n}\nfunction partitionPattern(pattern) {\n var result = [];\n var beginIndex = pattern.indexOf(\'{\');\n var endIndex = 0;\n var nextIndex = 0;\n var length = pattern.length;\n\n while (beginIndex < pattern.length && beginIndex > -1) {\n endIndex = pattern.indexOf(\'}\', beginIndex);\n (0,invariant/* invariant */.k)(endIndex > beginIndex, "Invalid pattern " + pattern);\n\n if (beginIndex > nextIndex) {\n result.push({\n type: \'literal\',\n value: pattern.substring(nextIndex, beginIndex)\n });\n }\n\n result.push({\n type: pattern.substring(beginIndex + 1, endIndex),\n value: undefined\n });\n nextIndex = endIndex + 1;\n beginIndex = pattern.indexOf(\'{\', nextIndex);\n }\n\n if (nextIndex < length) {\n result.push({\n type: \'literal\',\n value: pattern.substring(nextIndex, length)\n });\n }\n\n return result;\n}\n/**\n * https://tc39.es/ecma402/#sec-setnfdigitoptions\n * https://tc39.es/proposal-unified-intl-numberformat/section11/numberformat_diff_out.html#sec-setnfdigitoptions\n * @param intlObj\n * @param opts\n * @param mnfdDefault\n * @param mxfdDefault\n */\n\nfunction setNumberFormatDigitOptions(internalSlotMap, intlObj, opts, mnfdDefault, mxfdDefault) {\n var mnid = getNumberOption(opts, \'minimumIntegerDigits\', 1, 21, 1);\n var mnfd = opts.minimumFractionDigits;\n var mxfd = opts.maximumFractionDigits;\n var mnsd = opts.minimumSignificantDigits;\n var mxsd = opts.maximumSignificantDigits;\n setInternalSlot(internalSlotMap, intlObj, \'minimumIntegerDigits\', mnid);\n\n if (mnsd !== undefined || mxsd !== undefined) {\n setInternalSlot(internalSlotMap, intlObj, \'roundingType\', \'significantDigits\');\n mnsd = defaultNumberOption(mnsd, 1, 21, 1);\n mxsd = defaultNumberOption(mxsd, mnsd, 21, 21);\n setInternalSlot(internalSlotMap, intlObj, \'minimumSignificantDigits\', mnsd);\n setInternalSlot(internalSlotMap, intlObj, \'maximumSignificantDigits\', mxsd);\n } else if (mnfd !== undefined || mxfd !== undefined) {\n setInternalSlot(internalSlotMap, intlObj, \'roundingType\', \'fractionDigits\');\n mnfd = defaultNumberOption(mnfd, 0, 20, mnfdDefault);\n var mxfdActualDefault = Math.max(mnfd, mxfdDefault);\n mxfd = defaultNumberOption(mxfd, mnfd, 20, mxfdActualDefault);\n setInternalSlot(internalSlotMap, intlObj, \'minimumFractionDigits\', mnfd);\n setInternalSlot(internalSlotMap, intlObj, \'maximumFractionDigits\', mxfd);\n } else if (getInternalSlot(internalSlotMap, intlObj, \'notation\') === \'compact\') {\n setInternalSlot(internalSlotMap, intlObj, \'roundingType\', \'compactRounding\');\n } else {\n setInternalSlot(internalSlotMap, intlObj, \'roundingType\', \'fractionDigits\');\n setInternalSlot(internalSlotMap, intlObj, \'minimumFractionDigits\', mnfdDefault);\n setInternalSlot(internalSlotMap, intlObj, \'maximumFractionDigits\', mxfdDefault);\n }\n}\nfunction objectIs(x, y) {\n if (Object.is) {\n return Object.is(x, y);\n } // SameValue algorithm\n\n\n if (x === y) {\n // Steps 1-5, 7-10\n // Steps 6.b-6.e: +0 != -0\n return x !== 0 || 1 / x === 1 / y;\n } // Step 6.a: NaN == NaN\n\n\n return x !== x && y !== y;\n}\nvar NOT_A_Z_REGEX = /[^A-Z]/;\n/**\n * This follows https://tc39.es/ecma402/#sec-case-sensitivity-and-case-mapping\n * @param str string to convert\n */\n\nfunction toUpperCase(str) {\n return str.replace(/([a-z])/g, function (_, c) {\n return c.toUpperCase();\n });\n}\n/**\n * https://tc39.es/proposal-unified-intl-numberformat/section6/locales-currencies-tz_proposed_out.html#sec-iswellformedcurrencycode\n * @param currency\n */\n\n\nfunction isWellFormedCurrencyCode(currency) {\n currency = toUpperCase(currency);\n\n if (currency.length !== 3) {\n return false;\n }\n\n if (NOT_A_Z_REGEX.test(currency)) {\n return false;\n }\n\n return true;\n}\n;// CONCATENATED MODULE: ./node_modules/@formatjs/intl-utils/lib/get-canonical-locales.js\n/**\n * IE11-safe version of getCanonicalLocales since it\'s ES2016\n * @param locales locales\n */\nfunction getCanonicalLocales(locales) {\n // IE11\n var getCanonicalLocales = Intl.getCanonicalLocales;\n\n if (typeof getCanonicalLocales === \'function\') {\n return getCanonicalLocales(locales);\n } // NOTE: we must NOT call `supportedLocalesOf` of a formatjs polyfill, or their implementation\n // will even eventually call this method recursively. Here we use `Intl.DateTimeFormat` since it\n // is not polyfilled by `@formatjs`.\n // TODO: Fix TypeScript type def for this bc undefined is just fine\n\n\n return Intl.DateTimeFormat.supportedLocalesOf(locales);\n}\n;// CONCATENATED MODULE: ./node_modules/@formatjs/intl-utils/lib/resolve-locale.js\nvar __extends = undefined && undefined.__extends || function () {\n var _extendStatics = function extendStatics(d, b) {\n _extendStatics = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function (d, b) {\n d.__proto__ = b;\n } || function (d, b) {\n for (var p in b) {\n if (b.hasOwnProperty(p)) d[p] = b[p];\n }\n };\n\n return _extendStatics(d, b);\n };\n\n return function (d, b) {\n _extendStatics(d, b);\n\n function __() {\n this.constructor = d;\n }\n\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\n\nvar resolve_locale_assign = undefined && undefined.__assign || function () {\n resolve_locale_assign = Object.assign || function (t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n\n for (var p in s) {\n if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n }\n\n return t;\n };\n\n return resolve_locale_assign.apply(this, arguments);\n};\n\n\n\n\nfunction createResolveLocale(getDefaultLocale) {\n var lookupMatcher = createLookupMatcher(getDefaultLocale);\n var bestFitMatcher = createBestFitMatcher(getDefaultLocale);\n /**\n * https://tc39.es/ecma402/#sec-resolvelocale\n */\n\n return function resolveLocale(availableLocales, requestedLocales, options, relevantExtensionKeys, localeData) {\n var matcher = options.localeMatcher;\n var r;\n\n if (matcher === \'lookup\') {\n r = lookupMatcher(availableLocales, requestedLocales);\n } else {\n r = bestFitMatcher(availableLocales, requestedLocales);\n }\n\n var foundLocale = r.locale;\n var result = {\n locale: \'\',\n dataLocale: foundLocale\n };\n var supportedExtension = \'-u\';\n\n for (var _i = 0, relevantExtensionKeys_1 = relevantExtensionKeys; _i < relevantExtensionKeys_1.length; _i++) {\n var key = relevantExtensionKeys_1[_i];\n var foundLocaleData = localeData[foundLocale];\n (0,invariant/* invariant */.k)(typeof foundLocaleData === \'object\' && foundLocaleData !== null, "locale data " + key + " must be an object");\n var keyLocaleData = foundLocaleData[key];\n (0,invariant/* invariant */.k)(Array.isArray(keyLocaleData), "keyLocaleData for " + key + " must be an array");\n var value = keyLocaleData[0];\n (0,invariant/* invariant */.k)(typeof value === \'string\' || value === null, \'value must be string or null\');\n var supportedExtensionAddition = \'\';\n\n if (r.extension) {\n var requestedValue = unicodeExtensionValue(r.extension, key);\n\n if (requestedValue !== undefined) {\n if (requestedValue !== \'\') {\n if (~keyLocaleData.indexOf(requestedValue)) {\n value = requestedValue;\n supportedExtensionAddition = "-" + key + "-" + value;\n }\n } else if (~requestedValue.indexOf(\'true\')) {\n value = \'true\';\n supportedExtensionAddition = "-" + key;\n }\n }\n }\n\n if (key in options) {\n var optionsValue = options[key];\n (0,invariant/* invariant */.k)(typeof optionsValue === \'string\' || typeof optionsValue === \'undefined\' || optionsValue === null, \'optionsValue must be String, Undefined or Null\');\n\n if (~keyLocaleData.indexOf(optionsValue)) {\n if (optionsValue !== value) {\n value = optionsValue;\n supportedExtensionAddition = \'\';\n }\n }\n }\n\n result[key] = value;\n supportedExtension += supportedExtensionAddition;\n }\n\n if (supportedExtension.length > 2) {\n var privateIndex = foundLocale.indexOf(\'-x-\');\n\n if (privateIndex === -1) {\n foundLocale = foundLocale + supportedExtension;\n } else {\n var preExtension = foundLocale.slice(0, privateIndex);\n var postExtension = foundLocale.slice(privateIndex, foundLocale.length);\n foundLocale = preExtension + supportedExtension + postExtension;\n }\n\n foundLocale = getCanonicalLocales(foundLocale)[0];\n }\n\n result.locale = foundLocale;\n return result;\n };\n}\n/**\n * https://tc39.es/ecma402/#sec-unicodeextensionvalue\n * @param extension\n * @param key\n */\n\nfunction unicodeExtensionValue(extension, key) {\n (0,invariant/* invariant */.k)(key.length === 2, \'key must have 2 elements\');\n var size = extension.length;\n var searchValue = "-" + key + "-";\n var pos = extension.indexOf(searchValue);\n\n if (pos !== -1) {\n var start = pos + 4;\n var end = start;\n var k = start;\n var done = false;\n\n while (!done) {\n var e = extension.indexOf(\'-\', k);\n var len = void 0;\n\n if (e === -1) {\n len = size - k;\n } else {\n len = e - k;\n }\n\n if (len === 2) {\n done = true;\n } else if (e === -1) {\n end = size;\n done = true;\n } else {\n end = e;\n k = e + 1;\n }\n }\n\n return extension.slice(start, end);\n }\n\n searchValue = "-" + key;\n pos = extension.indexOf(searchValue);\n\n if (pos !== -1 && pos + 3 === size) {\n return \'\';\n }\n\n return undefined;\n}\n\nvar UNICODE_EXTENSION_SEQUENCE_REGEX = /-u(?:-[0-9a-z]{2,8})+/gi;\n/**\n * https://tc39.es/ecma402/#sec-bestavailablelocale\n * @param availableLocales\n * @param locale\n */\n\nfunction bestAvailableLocale(availableLocales, locale) {\n var candidate = locale;\n\n while (true) {\n if (~availableLocales.indexOf(candidate)) {\n return candidate;\n }\n\n var pos = candidate.lastIndexOf(\'-\');\n\n if (!~pos) {\n return undefined;\n }\n\n if (pos >= 2 && candidate[pos - 2] === \'-\') {\n pos -= 2;\n }\n\n candidate = candidate.slice(0, pos);\n }\n}\n\nfunction createLookupMatcher(getDefaultLocale) {\n /**\n * https://tc39.es/ecma402/#sec-lookupmatcher\n */\n return function lookupMatcher(availableLocales, requestedLocales) {\n var result = {\n locale: \'\'\n };\n\n for (var _i = 0, requestedLocales_1 = requestedLocales; _i < requestedLocales_1.length; _i++) {\n var locale = requestedLocales_1[_i];\n var noExtensionLocale = locale.replace(UNICODE_EXTENSION_SEQUENCE_REGEX, \'\');\n var availableLocale = bestAvailableLocale(availableLocales, noExtensionLocale);\n\n if (availableLocale) {\n result.locale = availableLocale;\n\n if (locale !== noExtensionLocale) {\n result.extension = locale.slice(noExtensionLocale.length + 1, locale.length);\n }\n\n return result;\n }\n }\n\n result.locale = getDefaultLocale();\n return result;\n };\n}\n\nfunction createBestFitMatcher(getDefaultLocale) {\n return function bestFitMatcher(availableLocales, requestedLocales) {\n var result = {\n locale: \'\'\n };\n\n for (var _i = 0, requestedLocales_2 = requestedLocales; _i < requestedLocales_2.length; _i++) {\n var locale = requestedLocales_2[_i];\n var noExtensionLocale = locale.replace(UNICODE_EXTENSION_SEQUENCE_REGEX, \'\');\n var availableLocale = bestAvailableLocale(availableLocales, noExtensionLocale);\n\n if (availableLocale) {\n result.locale = availableLocale;\n\n if (locale !== noExtensionLocale) {\n result.extension = locale.slice(noExtensionLocale.length + 1, locale.length);\n }\n\n return result;\n }\n }\n\n result.locale = getDefaultLocale();\n return result;\n };\n}\n\nfunction getLocaleHierarchy(locale, aliases, parentLocales) {\n var results = [locale];\n\n if (aliases[locale]) {\n locale = aliases[locale];\n results.push(locale);\n }\n\n var parentLocale = parentLocales[locale];\n\n if (parentLocale) {\n results.push(parentLocale);\n }\n\n var localeParts = locale.split(\'-\');\n\n for (var i = localeParts.length; i > 1; i--) {\n results.push(localeParts.slice(0, i - 1).join(\'-\'));\n }\n\n return results;\n}\n\nfunction lookupSupportedLocales(availableLocales, requestedLocales) {\n var subset = [];\n\n for (var _i = 0, requestedLocales_3 = requestedLocales; _i < requestedLocales_3.length; _i++) {\n var locale = requestedLocales_3[_i];\n var noExtensionLocale = locale.replace(UNICODE_EXTENSION_SEQUENCE_REGEX, \'\');\n var availableLocale = bestAvailableLocale(availableLocales, noExtensionLocale);\n\n if (availableLocale) {\n subset.push(availableLocale);\n }\n }\n\n return subset;\n}\n\nfunction supportedLocales(availableLocales, requestedLocales, options) {\n var matcher = \'best fit\';\n\n if (options !== undefined) {\n options = toObject(options);\n matcher = getOption(options, \'localeMatcher\', \'string\', [\'lookup\', \'best fit\'], \'best fit\');\n }\n\n if (matcher === \'best fit\') {\n return lookupSupportedLocales(availableLocales, requestedLocales);\n }\n\n return lookupSupportedLocales(availableLocales, requestedLocales);\n}\n\nvar MissingLocaleDataError =\n/** @class */\nfunction (_super) {\n __extends(MissingLocaleDataError, _super);\n\n function MissingLocaleDataError() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = \'MISSING_LOCALE_DATA\';\n return _this;\n }\n\n return MissingLocaleDataError;\n}(Error);\n\nfunction isMissingLocaleDataError(e) {\n return e.type === \'MISSING_LOCALE_DATA\';\n}\nfunction unpackData(locale, localeData,\n/** By default shallow merge the dictionaries. */\nreducer) {\n if (reducer === void 0) {\n reducer = function reducer(all, d) {\n return resolve_locale_assign(resolve_locale_assign({}, all), d);\n };\n }\n\n var localeHierarchy = getLocaleHierarchy(locale, localeData.aliases, localeData.parentLocales);\n var dataToMerge = localeHierarchy.map(function (l) {\n return localeData.data[l];\n }).filter(Boolean);\n\n if (!dataToMerge.length) {\n throw new MissingLocaleDataError("Missing locale data for \\"" + locale + "\\", lookup hierarchy: " + localeHierarchy.join(\', \'));\n }\n\n dataToMerge.reverse();\n return dataToMerge.reduce(reducer, {});\n}\n;// CONCATENATED MODULE: ./node_modules/@formatjs/intl-utils/lib/units.js\n// https://tc39.es/proposal-unified-intl-numberformat/section6/locales-currencies-tz_diff_out.html#sec-issanctionedsimpleunitidentifier\nvar SANCTIONED_UNITS = [\'angle-degree\', \'area-acre\', \'area-hectare\', \'concentr-percent\', \'digital-bit\', \'digital-byte\', \'digital-gigabit\', \'digital-gigabyte\', \'digital-kilobit\', \'digital-kilobyte\', \'digital-megabit\', \'digital-megabyte\', \'digital-petabyte\', \'digital-terabit\', \'digital-terabyte\', \'duration-day\', \'duration-hour\', \'duration-millisecond\', \'duration-minute\', \'duration-month\', \'duration-second\', \'duration-week\', \'duration-year\', \'length-centimeter\', \'length-foot\', \'length-inch\', \'length-kilometer\', \'length-meter\', \'length-mile-scandinavian\', \'length-mile\', \'length-millimeter\', \'length-yard\', \'mass-gram\', \'mass-kilogram\', \'mass-ounce\', \'mass-pound\', \'mass-stone\', \'temperature-celsius\', \'temperature-fahrenheit\', \'volume-fluid-ounce\', \'volume-gallon\', \'volume-liter\', \'volume-milliliter\']; // In CLDR, the unit name always follows the form `namespace-unit` pattern.\n// For example: `digital-bit` instead of `bit`. This function removes the namespace prefix.\n\nfunction removeUnitNamespace(unit) {\n return unit.replace(/^(.*?)-/, \'\');\n}\n;// CONCATENATED MODULE: ./node_modules/@formatjs/intl-utils/lib/number-types.js\nvar InternalSlotToken;\n\n(function (InternalSlotToken) {\n // To prevent collision with {0} in CLDR\n InternalSlotToken["compactName"] = "compactName";\n InternalSlotToken["compactSymbol"] = "compactSymbol";\n InternalSlotToken["currencyCode"] = "currencyCode";\n InternalSlotToken["currencyName"] = "currencyName";\n InternalSlotToken["currencyNarrowSymbol"] = "currencyNarrowSymbol";\n InternalSlotToken["currencySymbol"] = "currencySymbol";\n InternalSlotToken["minusSign"] = "minusSign";\n InternalSlotToken["number"] = "number";\n InternalSlotToken["percentSign"] = "percentSign";\n InternalSlotToken["plusSign"] = "plusSign";\n InternalSlotToken["scientificExponent"] = "scientificExponent";\n InternalSlotToken["scientificSeparator"] = "scientificSeparator";\n InternalSlotToken["unitName"] = "unitName";\n InternalSlotToken["unitNarrowSymbol"] = "unitNarrowSymbol";\n InternalSlotToken["unitSymbol"] = "unitSymbol";\n})(InternalSlotToken || (InternalSlotToken = {}));\n;// CONCATENATED MODULE: ./node_modules/@formatjs/intl-utils/lib/index.js\n\n\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AZm9ybWF0anMvaW50bC11dGlscy9saWIvZGlmZi5qcz83Y2M4Iiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL0Bmb3JtYXRqcy9pbnRsLXV0aWxzL2xpYi9hbGlhc2VzLmpzPzU5OTYiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvQGZvcm1hdGpzL2ludGwtdXRpbHMvbGliL3BhcmVudExvY2FsZXMuanM/ZTYzMCIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AZm9ybWF0anMvaW50bC11dGlscy9saWIvcG9seWZpbGwtdXRpbHMuanM/YzlkMiIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AZm9ybWF0anMvaW50bC11dGlscy9saWIvZ2V0LWNhbm9uaWNhbC1sb2NhbGVzLmpzP2VmMWMiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvQGZvcm1hdGpzL2ludGwtdXRpbHMvbGliL3Jlc29sdmUtbG9jYWxlLmpzPzQyNmQiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvQGZvcm1hdGpzL2ludGwtdXRpbHMvbGliL3VuaXRzLmpzPzEyYTYiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvQGZvcm1hdGpzL2ludGwtdXRpbHMvbGliL251bWJlci10eXBlcy5qcz85M2U0Iiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL0Bmb3JtYXRqcy9pbnRsLXV0aWxzL2xpYi9pbmRleC5qcz80MGYyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsZUFBZSxTQUFJLElBQUksU0FBSTtBQUMzQjtBQUNBLDRDQUE0QyxPQUFPO0FBQ25EOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLCtDQUErQyx1Q0FBdUM7O0FBRXRGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRTs7QUNuR0E7QUFDQTtBQUNBLDRDQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxFOztBQ3ZhRDtBQUNBO0FBQ0Esa0RBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxFOzs7O0FDbkkrQjtBQUNZO0FBQ0o7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFTyxTQUFTLHVCQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxjQUFjLHVCQUFRO0FBQ3RCOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFTztB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QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVPO0FBQ1A7O0FBRUE7QUFDQSxjQUFjLFFBQVE7QUFDdEIsY0FBYyxTQUFTO0FBQ3ZCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFTTtBQUNQO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxxQkFBUSxDQUFDLHFCQUFRLEdBQUc7QUFDakM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHVDQUF1QztBQUN2QyxDOztBQ3ZXQTtBQUNPLHN5QkFBc3lCO0FBQzd5Qjs7QUFFTztBQUNQO0FBQ0EsQzs7QUNOTzs7QUFFUDtBQUNBLGdDQUFnQyxFQUFFO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsOENBQThDLEc7O0FDbkJYO0FBQytSO0FBQ2hNO0FBQzNHO0FBQ087QUFDK0IiLCJmaWxlIjoiMjY1MC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBfX2Fzc2lnbiA9IHRoaXMgJiYgdGhpcy5fX2Fzc2lnbiB8fCBmdW5jdGlvbiAoKSB7XG4gIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodCkge1xuICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcblxuICAgICAgZm9yICh2YXIgcCBpbiBzKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0O1xuICB9O1xuXG4gIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcblxudmFyIE1TX1BFUl9TRUNPTkQgPSAxZTM7XG52YXIgU0VDU19QRVJfTUlOID0gNjA7XG52YXIgU0VDU19QRVJfSE9VUiA9IFNFQ1NfUEVSX01JTiAqIDYwO1xudmFyIFNFQ1NfUEVSX0RBWSA9IFNFQ1NfUEVSX0hPVVIgKiAyNDtcbnZhciBTRUNTX1BFUl9XRUVLID0gU0VDU19QRVJfREFZICogNztcbmV4cG9ydCBmdW5jdGlvbiBzZWxlY3RVbml0KGZyb20sIHRvLCB0aHJlc2hvbGRzKSB7XG4gIGlmICh0byA9PT0gdm9pZCAwKSB7XG4gICAgdG8gPSBEYXRlLm5vdygpO1xuICB9XG5cbiAgaWYgKHRocmVzaG9sZHMgPT09IHZvaWQgMCkge1xuICAgIHRocmVzaG9sZHMgPSB7fTtcbiAgfVxuXG4gIHZhciByZXNvbHZlZFRocmVzaG9sZHMgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgREVGQVVMVF9USFJFU0hPTERTKSwgdGhyZXNob2xkcyB8fCB7fSk7XG5cbiAgdmFyIHNlY3MgPSAoK2Zyb20gLSArdG8pIC8gTVNfUEVSX1NFQ09ORDtcblxuICBpZiAoTWF0aC5hYnMoc2VjcykgPCByZXNvbHZlZFRocmVzaG9sZHMuc2Vjb25kKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbHVlOiBNYXRoLnJvdW5kKHNlY3MpLFxuICAgICAgdW5pdDogJ3NlY29uZCdcbiAgICB9O1xuICB9XG5cbiAgdmFyIG1pbnMgPSBzZWNzIC8gU0VDU19QRVJfTUlOO1xuXG4gIGlmIChNYXRoLmFicyhtaW5zKSA8IHJlc29sdmVkVGhyZXNob2xkcy5taW51dGUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IE1hdGgucm91bmQobWlucyksXG4gICAgICB1bml0OiAnbWludXRlJ1xuICAgIH07XG4gIH1cblxuICB2YXIgaG91cnMgPSBzZWNzIC8gU0VDU19QRVJfSE9VUjtcblxuICBpZiAoTWF0aC5hYnMoaG91cnMpIDwgcmVzb2x2ZWRUaHJlc2hvbGRzLmhvdXIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IE1hdGgucm91bmQoaG91cnMpLFxuICAgICAgdW5pdDogJ2hvdXInXG4gICAgfTtcbiAgfVxuXG4gIHZhciBkYXlzID0gc2VjcyAvIFNFQ1NfUEVSX0RBWTtcblxuICBpZiAoTWF0aC5hYnMoZGF5cykgPCByZXNvbHZlZFRocmVzaG9sZHMuZGF5KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbHVlOiBNYXRoLnJvdW5kKGRheXMpLFxuICAgICAgdW5pdDogJ2RheSdcbiAgICB9O1xuICB9XG5cbiAgdmFyIGZyb21EYXRlID0gbmV3IERhdGUoZnJvbSk7XG4gIHZhciB0b0RhdGUgPSBuZXcgRGF0ZSh0byk7XG4gIHZhciB5ZWFycyA9IGZyb21EYXRlLmdldEZ1bGxZZWFyKCkgLSB0b0RhdGUuZ2V0RnVsbFllYXIoKTtcblxuICBpZiAoTWF0aC5yb3VuZChNYXRoLmFicyh5ZWFycykpID4gMCkge1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogTWF0aC5yb3VuZCh5ZWFycyksXG4gICAgICB1bml0OiAneWVhcidcbiAgICB9O1xuICB9XG5cbiAgdmFyIG1vbnRocyA9IHllYXJzICogMTIgKyBmcm9tRGF0ZS5nZXRNb250aCgpIC0gdG9EYXRlLmdldE1vbnRoKCk7XG5cbiAgaWYgKE1hdGgucm91bmQoTWF0aC5hYnMobW9udGhzKSkgPiAwKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbHVlOiBNYXRoLnJvdW5kKG1vbnRocyksXG4gICAgICB1bml0OiAnbW9udGgnXG4gICAgfTtcbiAgfVxuXG4gIHZhciB3ZWVrcyA9IHNlY3MgLyBTRUNTX1BFUl9XRUVLO1xuICByZXR1cm4ge1xuICAgIHZhbHVlOiBNYXRoLnJvdW5kKHdlZWtzKSxcbiAgICB1bml0OiAnd2VlaydcbiAgfTtcbn1cbmV4cG9ydCB2YXIgREVGQVVMVF9USFJFU0hPTERTID0ge1xuICBzZWNvbmQ6IDQ1LFxuICBtaW51dGU6IDQ1LFxuICBob3VyOiAyMixcbiAgZGF5OiA1XG59OyIsIi8qIEBnZW5lcmF0ZWQgKi9cbi8vIHByZXR0aWVyLWlnbm9yZSAgXG5leHBvcnQgZGVmYXVsdCB7XG4gIFwiYWEtU0FBSE9cIjogXCJzc3lcIixcbiAgXCJhYW1cIjogXCJhYXNcIixcbiAgXCJhYXJcIjogXCJhYVwiLFxuICBcImFia1wiOiBcImFiXCIsXG4gIFwiYWRwXCI6IFwiZHpcIixcbiAgXCJhZnJcIjogXCJhZlwiLFxuICBcImFqdVwiOiBcImpyYlwiLFxuICBcImFrYVwiOiBcImFrXCIsXG4gIFwiYWxiXCI6IFwic3FcIixcbiAgXCJhbHNcIjogXCJzcVwiLFxuICBcImFtaFwiOiBcImFtXCIsXG4gIFwiYXJhXCI6IFwiYXJcIixcbiAgXCJhcmJcIjogXCJhclwiLFxuICBcImFyZ1wiOiBcImFuXCIsXG4gIFwiYXJtXCI6IFwiaHlcIixcbiAgXCJhcnQtbG9qYmFuXCI6IFwiamJvXCIsXG4gIFwiYXNkXCI6IFwic256XCIsXG4gIFwiYXNtXCI6IFwiYXNcIixcbiAgXCJhdWVcIjogXCJrdHpcIixcbiAgXCJhdmFcIjogXCJhdlwiLFxuICBcImF2ZVwiOiBcImFlXCIsXG4gIFwiYXltXCI6IFwiYXlcIixcbiAgXCJheXJcIjogXCJheVwiLFxuICBcImF5eFwiOiBcIm51blwiLFxuICBcImF6LUFaXCI6IFwiYXotTGF0bi1BWlwiLFxuICBcImF6ZVwiOiBcImF6XCIsXG4gIFwiYXpqXCI6IFwiYXpcIixcbiAgXCJiYWtcIjogXCJiYVwiLFxuICBcImJhbVwiOiBcImJtXCIsXG4gIFwiYmFxXCI6IFwiZXVcIixcbiAgXCJiY2NcIjogXCJiYWxcIixcbiAgXCJiY2xcIjogXCJiaWtcIixcbiAgXCJiZWxcIjogXCJiZVwiLFxuICBcImJlblwiOiBcImJuXCIsXG4gIFwiYmdtXCI6IFwiYmNnXCIsXG4gIFwiYmhcIjogXCJiaG9cIixcbiAgXCJiaWhcIjogXCJiaG9cIixcbiAgXCJiaXNcIjogXCJiaVwiLFxuICBcImJqZFwiOiBcImRybFwiLFxuICBcImJvZFwiOiBcImJvXCIsXG4gIFwiYm9zXCI6IFwiYnNcIixcbiAgXCJicmVcIjogXCJiclwiLFxuICBcImJzLUJBXCI6IFwiYnMtTGF0bi1CQVwiLFxuICBcImJ1bFwiOiBcImJnXCIsXG4gIFwiYnVyXCI6IFwibXlcIixcbiAgXCJieGtcIjogXCJsdXlcIixcbiAgXCJieHJcIjogXCJidWFcIixcbiAgXCJjYXRcIjogXCJjYVwiLFxuICBcImNjcVwiOiBcInJraVwiLFxuICBcImNlbC1nYXVsaXNoXCI6IFwieHRnLXgtY2VsLWdhdWxpc2hcIixcbiAgXCJjZXNcIjogXCJjc1wiLFxuICBcImNoYVwiOiBcImNoXCIsXG4gIFwiY2hlXCI6IFwiY2VcIixcbiAgXCJjaGlcIjogXCJ6aFwiLFxuICBcImNodVwiOiBcImN1XCIsXG4gIFwiY2h2XCI6IFwiY3ZcIixcbiAgXCJjanJcIjogXCJtb21cIixcbiAgXCJja2FcIjogXCJjbXJcIixcbiAgXCJjbGRcIjogXCJzeXJcIixcbiAgXCJjbWtcIjogXCJ4Y2hcIixcbiAgXCJjbW5cIjogXCJ6aFwiLFxuICBcImNuclwiOiBcInNyLU1FXCIsXG4gIFwiY29yXCI6IFwia3dcIixcbiAgXCJjb3NcIjogXCJjb1wiLFxuICBcImNveVwiOiBcInBpalwiLFxuICBcImNxdVwiOiBcInF1aFwiLFxuICBcImNyZVwiOiBcImNyXCIsXG4gIFwiY3dkXCI6IFwiY3JcIixcbiAgXCJjeW1cIjogXCJjeVwiLFxuICBcImN6ZVwiOiBcImNzXCIsXG4gIFwiZGFuXCI6IFwiZGFcIixcbiAgXCJkZXVcIjogXCJkZVwiLFxuICBcImRnb1wiOiBcImRvaVwiLFxuICBcImRoZFwiOiBcIm13clwiLFxuICBcImRpa1wiOiBcImRpblwiLFxuICBcImRpcVwiOiBcInp6YVwiLFxuICBcImRpdFwiOiBcImRpZlwiLFxuICBcImRpdlwiOiBcImR2XCIsXG4gIFwiZHJoXCI6IFwibW5cIixcbiAgXCJkcndcIjogXCJmYS1hZlwiLFxuICBcImR1dFwiOiBcIm5sXCIsXG4gIFwiZHpvXCI6IFwiZHpcIixcbiAgXCJla2tcIjogXCJldFwiLFxuICBcImVsbFwiOiBcImVsXCIsXG4gIFwiZW1rXCI6IFwibWFuXCIsXG4gIFwiZW5nXCI6IFwiZW5cIixcbiAgXCJlcG9cIjogXCJlb1wiLFxuICBcImVza1wiOiBcImlrXCIsXG4gIFwiZXN0XCI6IFwiZXRcIixcbiAgXCJldXNcIjogXCJldVwiLFxuICBcImV3ZVwiOiBcImVlXCIsXG4gIFwiZmFvXCI6IFwiZm9cIixcbiAgXCJmYXNcIjogXCJmYVwiLFxuICBcImZhdFwiOiBcImFrXCIsXG4gIFwiZmlqXCI6IFwiZmpcIixcbiAgXCJmaW5cIjogXCJmaVwiLFxuICBcImZyYVwiOiBcImZyXCIsXG4gIFwiZnJlXCI6IFwiZnJcIixcbiAgXCJmcnlcIjogXCJmeVwiLFxuICBcImZ1Y1wiOiBcImZmXCIsXG4gIFwiZnVsXCI6IFwiZmZcIixcbiAgXCJnYXZcIjogXCJkZXZcIixcbiAgXCJnYXpcIjogXCJvbVwiLFxuICBcImdib1wiOiBcImdyYlwiLFxuICBcImdlb1wiOiBcImthXCIsXG4gIFwiZ2VyXCI6IFwiZGVcIixcbiAgXCJnZnhcIjogXCJ2YWpcIixcbiAgXCJnZ25cIjogXCJndnJcIixcbiAgXCJnbGFcIjogXCJnZFwiLFxuICBcImdsZVwiOiBcImdhXCIsXG4gIFwiZ2xnXCI6IFwiZ2xcIixcbiAgXCJnbHZcIjogXCJndlwiLFxuICBcImdub1wiOiBcImdvblwiLFxuICBcImdyZVwiOiBcImVsXCIsXG4gIFwiZ3JuXCI6IFwiZ25cIixcbiAgXCJndGlcIjogXCJueWNcIixcbiAgXCJndWdcIjogXCJnblwiLFxuICBcImd1alwiOiBcImd1XCIsXG4gIFwiZ3V2XCI6IFwiZHV6XCIsXG4gIFwiZ3lhXCI6IFwiZ2JhXCIsXG4gIFwiaGEtTGF0bi1HSFwiOiBcImhhLUdIXCIsXG4gIFwiaGEtTGF0bi1ORVwiOiBcImhhLU5FXCIsXG4gIFwiaGEtTGF0bi1OR1wiOiBcImhhLU5HXCIsXG4gIFwiaGF0XCI6IFwiaHRcIixcbiAgXCJoYXVcIjogXCJoYVwiLFxuICBcImhic1wiOiBcInNyLUxhdG5cIixcbiAgXCJoZG5cIjogXCJoYWlcIixcbiAgXCJoZWFcIjogXCJobW5cIixcbiAgXCJoZWJcIjogXCJoZVwiLFxuICBcImhlclwiOiBcImh6XCIsXG4gIFwiaGltXCI6IFwic3J4XCIsXG4gIFwiaGluXCI6IFwiaGlcIixcbiAgXCJobW9cIjogXCJob1wiLFxuICBcImhyclwiOiBcImphbFwiLFxuICBcImhydlwiOiBcImhyXCIsXG4gIFwiaHVuXCI6IFwiaHVcIixcbiAgXCJoeWVcIjogXCJoeVwiLFxuICBcImktYW1pXCI6IFwiYW1pXCIsXG4gIFwiaS1ibm5cIjogXCJibm5cIixcbiAgXCJpLWhha1wiOiBcImhha1wiLFxuICBcImkta2xpbmdvblwiOiBcInRsaFwiLFxuICBcImktbHV4XCI6IFwibGJcIixcbiAgXCJpLW5hdmFqb1wiOiBcIm52XCIsXG4gIFwiaS1wd25cIjogXCJwd25cIixcbiAgXCJpLXRhb1wiOiBcInRhb1wiLFxuICBcImktdGF5XCI6IFwidGF5XCIsXG4gIFwiaS10c3VcIjogXCJ0c3VcIixcbiAgXCJpLWRlZmF1bHRcIjogXCJlbi14LWktZGVmYXVsdFwiLFxuICBcImktZW5vY2hpYW5cIjogXCJ1bmQteC1pLWVub2NoaWFuXCIsXG4gIFwiaS1taW5nb1wiOiBcInNlZS14LWktbWluZ29cIixcbiAgXCJpYmlcIjogXCJvcGFcIixcbiAgXCJpYm9cIjogXCJpZ1wiLFxuICBcImljZVwiOiBcImlzXCIsXG4gIFwiaWRvXCI6IFwiaW9cIixcbiAgXCJpaWlcIjogXCJpaVwiLFxuICBcImlrZVwiOiBcIml1XCIsXG4gIFwiaWt1XCI6IFwiaXVcIixcbiAgXCJpbGVcIjogXCJpZVwiLFxuICBcImlsd1wiOiBcImdhbFwiLFxuICBcImluXCI6IFwiaWRcIixcbiAgXCJpbmFcIjogXCJpYVwiLFxuICBcImluZFwiOiBcImlkXCIsXG4gIFwiaXBrXCI6IFwiaWtcIixcbiAgXCJpc2xcIjogXCJpc1wiLFxuICBcIml0YVwiOiBcIml0XCIsXG4gIFwiaXdcIjogXCJoZVwiLFxuICBcImphdlwiOiBcImp2XCIsXG4gIFwiamVnXCI6IFwib3liXCIsXG4gIFwiamlcIjogXCJ5aVwiLFxuICBcImpwblwiOiBcImphXCIsXG4gIFwiandcIjogXCJqdlwiLFxuICBcImthbFwiOiBcImtsXCIsXG4gIFwia2FuXCI6IFwia25cIixcbiAgXCJrYXNcIjogXCJrc1wiLFxuICBcImthdFwiOiBcImthXCIsXG4gIFwia2F1XCI6IFwia3JcIixcbiAgXCJrYXpcIjogXCJra1wiLFxuICBcImtnY1wiOiBcInRkZlwiLFxuICBcImtnaFwiOiBcImttbFwiLFxuICBcImtoa1wiOiBcIm1uXCIsXG4gIFwia2htXCI6IFwia21cIixcbiAgXCJraWtcIjogXCJraVwiLFxuICBcImtpblwiOiBcInJ3XCIsXG4gIFwia2lyXCI6IFwia3lcIixcbiAgXCJray1DeXJsLUtaXCI6IFwia2stS1pcIixcbiAgXCJrbXJcIjogXCJrdVwiLFxuICBcImtuY1wiOiBcImtyXCIsXG4gIFwia25nXCI6IFwia2dcIixcbiAgXCJrbm5cIjogXCJrb2tcIixcbiAgXCJrb2pcIjogXCJrd3ZcIixcbiAgXCJrb21cIjogXCJrdlwiLFxuICBcImtvblwiOiBcImtnXCIsXG4gIFwia29yXCI6IFwia29cIixcbiAgXCJrcHZcIjogXCJrdlwiLFxuICBcImtybVwiOiBcImJtZlwiLFxuICBcImtzLUFyYWItSU5cIjogXCJrcy1JTlwiLFxuICBcImt0clwiOiBcImR0cFwiLFxuICBcImt1YVwiOiBcImtqXCIsXG4gIFwia3VyXCI6IFwia3VcIixcbiAgXCJrdnNcIjogXCJnZGpcIixcbiAgXCJrd3FcIjogXCJ5YW1cIixcbiAgXCJreGVcIjogXCJ0dmRcIixcbiAgXCJreS1DeXJsLUtHXCI6IFwia3ktS0dcIixcbiAgXCJrempcIjogXCJkdHBcIixcbiAgXCJrenRcIjogXCJkdHBcIixcbiAgXCJsYW9cIjogXCJsb1wiLFxuICBcImxhdFwiOiBcImxhXCIsXG4gIFwibGF2XCI6IFwibHZcIixcbiAgXCJsYmtcIjogXCJibmNcIixcbiAgXCJsaWlcIjogXCJyYXFcIixcbiAgXCJsaW1cIjogXCJsaVwiLFxuICBcImxpblwiOiBcImxuXCIsXG4gIFwibGl0XCI6IFwibHRcIixcbiAgXCJsbG9cIjogXCJuZ3RcIixcbiAgXCJsbW1cIjogXCJybXhcIixcbiAgXCJsdHpcIjogXCJsYlwiLFxuICBcImx1YlwiOiBcImx1XCIsXG4gIFwibHVnXCI6IFwibGdcIixcbiAgXCJsdnNcIjogXCJsdlwiLFxuICBcIm1hY1wiOiBcIm1rXCIsXG4gIFwibWFoXCI6IFwibWhcIixcbiAgXCJtYWxcIjogXCJtbFwiLFxuICBcIm1hb1wiOiBcIm1pXCIsXG4gIFwibWFyXCI6IFwibXJcIixcbiAgXCJtYXlcIjogXCJtc1wiLFxuICBcIm1lZ1wiOiBcImNpclwiLFxuICBcIm1oclwiOiBcImNobVwiLFxuICBcIm1rZFwiOiBcIm1rXCIsXG4gIFwibWxnXCI6IFwibWdcIixcbiAgXCJtbHRcIjogXCJtdFwiLFxuICBcIm1uLUN5cmwtTU5cIjogXCJtbi1NTlwiLFxuICBcIm1ua1wiOiBcIm1hblwiLFxuICBcIm1vXCI6IFwicm9cIixcbiAgXCJtb2xcIjogXCJyb1wiLFxuICBcIm1vblwiOiBcIm1uXCIsXG4gIFwibXJpXCI6IFwibWlcIixcbiAgXCJtcy1MYXRuLUJOXCI6IFwibXMtQk5cIixcbiAgXCJtcy1MYXRuLU1ZXCI6IFwibXMtTVlcIixcbiAgXCJtcy1MYXRuLVNHXCI6IFwibXMtU0dcIixcbiAgXCJtc2FcIjogXCJtc1wiLFxuICBcIm1zdFwiOiBcIm1yeVwiLFxuICBcIm11cFwiOiBcInJhalwiLFxuICBcIm13alwiOiBcInZhalwiLFxuICBcIm15YVwiOiBcIm15XCIsXG4gIFwibXlkXCI6IFwiYW9nXCIsXG4gIFwibXl0XCI6IFwibXJ5XCIsXG4gIFwibmFkXCI6IFwieG55XCIsXG4gIFwibmF1XCI6IFwibmFcIixcbiAgXCJuYXZcIjogXCJudlwiLFxuICBcIm5ibFwiOiBcIm5yXCIsXG4gIFwibmNwXCI6IFwia2R6XCIsXG4gIFwibmRlXCI6IFwibmRcIixcbiAgXCJuZG9cIjogXCJuZ1wiLFxuICBcIm5lcFwiOiBcIm5lXCIsXG4gIFwibmxkXCI6IFwibmxcIixcbiAgXCJubm9cIjogXCJublwiLFxuICBcIm5uc1wiOiBcIm5iclwiLFxuICBcIm5ueFwiOiBcIm5ndlwiLFxuICBcIm5vXCI6IFwibmJcIixcbiAgXCJuby1ib2tcIjogXCJuYlwiLFxuICBcIm5vLUJPS01BTFwiOiBcIm5iXCIsXG4gIFwibm8tbnluXCI6IFwibm5cIixcbiAgXCJuby1OWU5PUlNLXCI6IFwibm5cIixcbiAgXCJub2JcIjogXCJuYlwiLFxuICBcIm5vclwiOiBcIm5iXCIsXG4gIFwibnBpXCI6IFwibmVcIixcbiAgXCJudHNcIjogXCJwaWpcIixcbiAgXCJueWFcIjogXCJueVwiLFxuICBcIm9jaVwiOiBcIm9jXCIsXG4gIFwib2pnXCI6IFwib2pcIixcbiAgXCJvamlcIjogXCJvalwiLFxuICBcIm9yaVwiOiBcIm9yXCIsXG4gIFwib3JtXCI6IFwib21cIixcbiAgXCJvcnlcIjogXCJvclwiLFxuICBcIm9zc1wiOiBcIm9zXCIsXG4gIFwib3VuXCI6IFwidmFqXCIsXG4gIFwicGEtSU5cIjogXCJwYS1HdXJ1LUlOXCIsXG4gIFwicGEtUEtcIjogXCJwYS1BcmFiLVBLXCIsXG4gIFwicGFuXCI6IFwicGFcIixcbiAgXCJwYnVcIjogXCJwc1wiLFxuICBcInBjclwiOiBcImFkeFwiLFxuICBcInBlclwiOiBcImZhXCIsXG4gIFwicGVzXCI6IFwiZmFcIixcbiAgXCJwbGlcIjogXCJwaVwiLFxuICBcInBsdFwiOiBcIm1nXCIsXG4gIFwicG1jXCI6IFwiaHV3XCIsXG4gIFwicG11XCI6IFwicGhyXCIsXG4gIFwicG5iXCI6IFwibGFoXCIsXG4gIFwicG9sXCI6IFwicGxcIixcbiAgXCJwb3JcIjogXCJwdFwiLFxuICBcInBwYVwiOiBcImJmeVwiLFxuICBcInBwclwiOiBcImxjcVwiLFxuICBcInByc1wiOiBcImZhLUFGXCIsXG4gIFwicHJ5XCI6IFwicHJ0XCIsXG4gIFwicHVzXCI6IFwicHNcIixcbiAgXCJwdXpcIjogXCJwdWJcIixcbiAgXCJxdWVcIjogXCJxdVwiLFxuICBcInF1elwiOiBcInF1XCIsXG4gIFwicm15XCI6IFwicm9tXCIsXG4gIFwicm9oXCI6IFwicm1cIixcbiAgXCJyb25cIjogXCJyb1wiLFxuICBcInJ1bVwiOiBcInJvXCIsXG4gIFwicnVuXCI6IFwicm5cIixcbiAgXCJydXNcIjogXCJydVwiLFxuICBcInNhZ1wiOiBcInNnXCIsXG4gIFwic2FuXCI6IFwic2FcIixcbiAgXCJzY2FcIjogXCJobGVcIixcbiAgXCJzY2NcIjogXCJzclwiLFxuICBcInNjclwiOiBcImhyXCIsXG4gIFwic2duLUJFLUZSXCI6IFwic2ZiXCIsXG4gIFwic2duLUJFLU5MXCI6IFwidmd0XCIsXG4gIFwic2duLUNILURFXCI6IFwic2dnXCIsXG4gIFwic2hcIjogXCJzci1MYXRuXCIsXG4gIFwic2hpLU1BXCI6IFwic2hpLVRmbmctTUFcIixcbiAgXCJzaW5cIjogXCJzaVwiLFxuICBcInNra1wiOiBcIm95YlwiLFxuICBcInNsa1wiOiBcInNrXCIsXG4gIFwic2xvXCI6IFwic2tcIixcbiAgXCJzbHZcIjogXCJzbFwiLFxuICBcInNtZVwiOiBcInNlXCIsXG4gIFwic21vXCI6IFwic21cIixcbiAgXCJzbmFcIjogXCJzblwiLFxuICBcInNuZFwiOiBcInNkXCIsXG4gIFwic29tXCI6IFwic29cIixcbiAgXCJzb3RcIjogXCJzdFwiLFxuICBcInNwYVwiOiBcImVzXCIsXG4gIFwic3B5XCI6IFwia2xuXCIsXG4gIFwic3FpXCI6IFwic3FcIixcbiAgXCJzci1CQVwiOiBcInNyLUN5cmwtQkFcIixcbiAgXCJzci1NRVwiOiBcInNyLUxhdG4tTUVcIixcbiAgXCJzci1SU1wiOiBcInNyLUN5cmwtUlNcIixcbiAgXCJzci1YS1wiOiBcInNyLUN5cmwtWEtcIixcbiAgXCJzcmNcIjogXCJzY1wiLFxuICBcInNyZFwiOiBcInNjXCIsXG4gIFwic3JwXCI6IFwic3JcIixcbiAgXCJzc3dcIjogXCJzc1wiLFxuICBcInN1blwiOiBcInN1XCIsXG4gIFwic3dhXCI6IFwic3dcIixcbiAgXCJzd2NcIjogXCJzdy1DRFwiLFxuICBcInN3ZVwiOiBcInN2XCIsXG4gIFwic3doXCI6IFwic3dcIixcbiAgXCJ0YWhcIjogXCJ0eVwiLFxuICBcInRhbVwiOiBcInRhXCIsXG4gIFwidGF0XCI6IFwidHRcIixcbiAgXCJ0ZHVcIjogXCJkdHBcIixcbiAgXCJ0ZWxcIjogXCJ0ZVwiLFxuICBcInRna1wiOiBcInRnXCIsXG4gIFwidGdsXCI6IFwiZmlsXCIsXG4gIFwidGhhXCI6IFwidGhcIixcbiAgXCJ0aGNcIjogXCJ0cG9cIixcbiAgXCJ0aHhcIjogXCJveWJcIixcbiAgXCJ0aWJcIjogXCJib1wiLFxuICBcInRpZVwiOiBcInJhc1wiLFxuICBcInRpclwiOiBcInRpXCIsXG4gIFwidGtrXCI6IFwidHdtXCIsXG4gIFwidGxcIjogXCJmaWxcIixcbiAgXCJ0bHdcIjogXCJ3ZW9cIixcbiAgXCJ0bXBcIjogXCJ0eWpcIixcbiAgXCJ0bmVcIjogXCJrYWtcIixcbiAgXCJ0bmZcIjogXCJmYS1hZlwiLFxuICBcInRvblwiOiBcInRvXCIsXG4gIFwidHNmXCI6IFwidGFqXCIsXG4gIFwidHNuXCI6IFwidG5cIixcbiAgXCJ0c29cIjogXCJ0c1wiLFxuICBcInR0cVwiOiBcInRtaFwiLFxuICBcInR1a1wiOiBcInRrXCIsXG4gIFwidHVyXCI6IFwidHJcIixcbiAgXCJ0d1wiOiBcImFrXCIsXG4gIFwidHdpXCI6IFwiYWtcIixcbiAgXCJ0em0tTGF0bi1NQVwiOiBcInR6bS1NQVwiLFxuICBcInVnLUFyYWItQ05cIjogXCJ1Zy1DTlwiLFxuICBcInVpZ1wiOiBcInVnXCIsXG4gIFwidWtyXCI6IFwidWtcIixcbiAgXCJ1bXVcIjogXCJkZWxcIixcbiAgXCJ1b2tcIjogXCJlbWFcIixcbiAgXCJ1cmRcIjogXCJ1clwiLFxuICBcInV6LUFGXCI6IFwidXotQXJhYi1BRlwiLFxuICBcInV6LVVaXCI6IFwidXotTGF0bi1VWlwiLFxuICBcInV6YlwiOiBcInV6XCIsXG4gIFwidXpuXCI6IFwidXpcIixcbiAgXCJ2YWktTFJcIjogXCJ2YWktVmFpaS1MUlwiLFxuICBcInZlblwiOiBcInZlXCIsXG4gIFwidmllXCI6IFwidmlcIixcbiAgXCJ2b2xcIjogXCJ2b1wiLFxuICBcIndlbFwiOiBcImN5XCIsXG4gIFwid2xuXCI6IFwid2FcIixcbiAgXCJ3b2xcIjogXCJ3b1wiLFxuICBcInhiYVwiOiBcImNheFwiLFxuICBcInhob1wiOiBcInhoXCIsXG4gIFwieGlhXCI6IFwiYWNuXCIsXG4gIFwieGtoXCI6IFwid2F3XCIsXG4gIFwieHBlXCI6IFwia3BlXCIsXG4gIFwieHNqXCI6IFwic3VqXCIsXG4gIFwieHNsXCI6IFwiZGVuXCIsXG4gIFwieWJkXCI6IFwicmtpXCIsXG4gIFwieWRkXCI6IFwieWlcIixcbiAgXCJ5aWRcIjogXCJ5aVwiLFxuICBcInltYVwiOiBcImxyclwiLFxuICBcInltdFwiOiBcIm10bVwiLFxuICBcInlvclwiOiBcInlvXCIsXG4gIFwieW9zXCI6IFwiem9tXCIsXG4gIFwieXVlLUNOXCI6IFwieXVlLUhhbnMtQ05cIixcbiAgXCJ5dWUtSEtcIjogXCJ5dWUtSGFudC1IS1wiLFxuICBcInl1dVwiOiBcInl1Z1wiLFxuICBcInphaVwiOiBcInphcFwiLFxuICBcInpoLUNOXCI6IFwiemgtSGFucy1DTlwiLFxuICBcInpoLWd1b3l1XCI6IFwiemhcIixcbiAgXCJ6aC1oYWtrYVwiOiBcImhha1wiLFxuICBcInpoLUhLXCI6IFwiemgtSGFudC1IS1wiLFxuICBcInpoLW1pbi1uYW5cIjogXCJuYW5cIixcbiAgXCJ6aC1NT1wiOiBcInpoLUhhbnQtTU9cIixcbiAgXCJ6aC1TR1wiOiBcInpoLUhhbnMtU0dcIixcbiAgXCJ6aC1UV1wiOiBcInpoLUhhbnQtVFdcIixcbiAgXCJ6aC14aWFuZ1wiOiBcImhzblwiLFxuICBcInpoLW1pblwiOiBcIm5hbi14LXpoLW1pblwiLFxuICBcInpoYVwiOiBcInphXCIsXG4gIFwiemhvXCI6IFwiemhcIixcbiAgXCJ6c21cIjogXCJtc1wiLFxuICBcInp1bFwiOiBcInp1XCIsXG4gIFwienliXCI6IFwiemFcIlxufTsiLCIvKiBAZ2VuZXJhdGVkICovXG4vLyBwcmV0dGllci1pZ25vcmUgIFxuZXhwb3J0IGRlZmF1bHQge1xuICBcImVuLTE1MFwiOiBcImVuLTAwMVwiLFxuICBcImVuLUFHXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tQUlcIjogXCJlbi0wMDFcIixcbiAgXCJlbi1BVVwiOiBcImVuLTAwMVwiLFxuICBcImVuLUJCXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tQk1cIjogXCJlbi0wMDFcIixcbiAgXCJlbi1CU1wiOiBcImVuLTAwMVwiLFxuICBcImVuLUJXXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tQlpcIjogXCJlbi0wMDFcIixcbiAgXCJlbi1DQVwiOiBcImVuLTAwMVwiLFxuICBcImVuLUNDXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tQ0tcIjogXCJlbi0wMDFcIixcbiAgXCJlbi1DTVwiOiBcImVuLTAwMVwiLFxuICBcImVuLUNYXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tQ1lcIjogXCJlbi0wMDFcIixcbiAgXCJlbi1ER1wiOiBcImVuLTAwMVwiLFxuICBcImVuLURNXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tRVJcIjogXCJlbi0wMDFcIixcbiAgXCJlbi1GSlwiOiBcImVuLTAwMVwiLFxuICBcImVuLUZLXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tRk1cIjogXCJlbi0wMDFcIixcbiAgXCJlbi1HQlwiOiBcImVuLTAwMVwiLFxuICBcImVuLUdEXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tR0dcIjogXCJlbi0wMDFcIixcbiAgXCJlbi1HSFwiOiBcImVuLTAwMVwiLFxuICBcImVuLUdJXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tR01cIjogXCJlbi0wMDFcIixcbiAgXCJlbi1HWVwiOiBcImVuLTAwMVwiLFxuICBcImVuLUhLXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tSUVcIjogXCJlbi0wMDFcIixcbiAgXCJlbi1JTFwiOiBcImVuLTAwMVwiLFxuICBcImVuLUlNXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tSU5cIjogXCJlbi0wMDFcIixcbiAgXCJlbi1JT1wiOiBcImVuLTAwMVwiLFxuICBcImVuLUpFXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tSk1cIjogXCJlbi0wMDFcIixcbiAgXCJlbi1LRVwiOiBcImVuLTAwMVwiLFxuICBcImVuLUtJXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tS05cIjogXCJlbi0wMDFcIixcbiAgXCJlbi1LWVwiOiBcImVuLTAwMVwiLFxuICBcImVuLUxDXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tTFJcIjogXCJlbi0wMDFcIixcbiAgXCJlbi1MU1wiOiBcImVuLTAwMVwiLFxuICBcImVuLU1HXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tTU9cIjogXCJlbi0wMDFcIixcbiAgXCJlbi1NU1wiOiBcImVuLTAwMVwiLFxuICBcImVuLU1UXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tTVVcIjogXCJlbi0wMDFcIixcbiAgXCJlbi1NV1wiOiBcImVuLTAwMVwiLFxuICBcImVuLU1ZXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tTkFcIjogXCJlbi0wMDFcIixcbiAgXCJlbi1ORlwiOiBcImVuLTAwMVwiLFxuICBcImVuLU5HXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tTlJcIjogXCJlbi0wMDFcIixcbiAgXCJlbi1OVVwiOiBcImVuLTAwMVwiLFxuICBcImVuLU5aXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tUEdcIjogXCJlbi0wMDFcIixcbiAgXCJlbi1QSFwiOiBcImVuLTAwMVwiLFxuICBcImVuLVBLXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tUE5cIjogXCJlbi0wMDFcIixcbiAgXCJlbi1QV1wiOiBcImVuLTAwMVwiLFxuICBcImVuLVJXXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tU0JcIjogXCJlbi0wMDFcIixcbiAgXCJlbi1TQ1wiOiBcImVuLTAwMVwiLFxuICBcImVuLVNEXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tU0dcIjogXCJlbi0wMDFcIixcbiAgXCJlbi1TSFwiOiBcImVuLTAwMVwiLFxuICBcImVuLVNMXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tU1NcIjogXCJlbi0wMDFcIixcbiAgXCJlbi1TWFwiOiBcImVuLTAwMVwiLFxuICBcImVuLVNaXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tVENcIjogXCJlbi0wMDFcIixcbiAgXCJlbi1US1wiOiBcImVuLTAwMVwiLFxuICBcImVuLVRPXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tVFRcIjogXCJlbi0wMDFcIixcbiAgXCJlbi1UVlwiOiBcImVuLTAwMVwiLFxuICBcImVuLVRaXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tVUdcIjogXCJlbi0wMDFcIixcbiAgXCJlbi1WQ1wiOiBcImVuLTAwMVwiLFxuICBcImVuLVZHXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tVlVcIjogXCJlbi0wMDFcIixcbiAgXCJlbi1XU1wiOiBcImVuLTAwMVwiLFxuICBcImVuLVpBXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tWk1cIjogXCJlbi0wMDFcIixcbiAgXCJlbi1aV1wiOiBcImVuLTAwMVwiLFxuICBcImVuLUFUXCI6IFwiZW4tMTUwXCIsXG4gIFwiZW4tQkVcIjogXCJlbi0xNTBcIixcbiAgXCJlbi1DSFwiOiBcImVuLTE1MFwiLFxuICBcImVuLURFXCI6IFwiZW4tMTUwXCIsXG4gIFwiZW4tREtcIjogXCJlbi0xNTBcIixcbiAgXCJlbi1GSVwiOiBcImVuLTE1MFwiLFxuICBcImVuLU5MXCI6IFwiZW4tMTUwXCIsXG4gIFwiZW4tU0VcIjogXCJlbi0xNTBcIixcbiAgXCJlbi1TSVwiOiBcImVuLTE1MFwiLFxuICBcImVzLUFSXCI6IFwiZXMtNDE5XCIsXG4gIFwiZXMtQk9cIjogXCJlcy00MTlcIixcbiAgXCJlcy1CUlwiOiBcImVzLTQxOVwiLFxuICBcImVzLUJaXCI6IFwiZXMtNDE5XCIsXG4gIFwiZXMtQ0xcIjogXCJlcy00MTlcIixcbiAgXCJlcy1DT1wiOiBcImVzLTQxOVwiLFxuICBcImVzLUNSXCI6IFwiZXMtNDE5XCIsXG4gIFwiZXMtQ1VcIjogXCJlcy00MTlcIixcbiAgXCJlcy1ET1wiOiBcImVzLTQxOVwiLFxuICBcImVzLUVDXCI6IFwiZXMtNDE5XCIsXG4gIFwiZXMtR1RcIjogXCJlcy00MTlcIixcbiAgXCJlcy1ITlwiOiBcImVzLTQxOVwiLFxuICBcImVzLU1YXCI6IFwiZXMtNDE5XCIsXG4gIFwiZXMtTklcIjogXCJlcy00MTlcIixcbiAgXCJlcy1QQVwiOiBcImVzLTQxOVwiLFxuICBcImVzLVBFXCI6IFwiZXMtNDE5XCIsXG4gIFwiZXMtUFJcIjogXCJlcy00MTlcIixcbiAgXCJlcy1QWVwiOiBcImVzLTQxOVwiLFxuICBcImVzLVNWXCI6IFwiZXMtNDE5XCIsXG4gIFwiZXMtVVNcIjogXCJlcy00MTlcIixcbiAgXCJlcy1VWVwiOiBcImVzLTQxOVwiLFxuICBcImVzLVZFXCI6IFwiZXMtNDE5XCIsXG4gIFwicHQtQU9cIjogXCJwdC1QVFwiLFxuICBcInB0LUNIXCI6IFwicHQtUFRcIixcbiAgXCJwdC1DVlwiOiBcInB0LVBUXCIsXG4gIFwicHQtRlJcIjogXCJwdC1QVFwiLFxuICBcInB0LUdRXCI6IFwicHQtUFRcIixcbiAgXCJwdC1HV1wiOiBcInB0LVBUXCIsXG4gIFwicHQtTFVcIjogXCJwdC1QVFwiLFxuICBcInB0LU1PXCI6IFwicHQtUFRcIixcbiAgXCJwdC1NWlwiOiBcInB0LVBUXCIsXG4gIFwicHQtU1RcIjogXCJwdC1QVFwiLFxuICBcInB0LVRMXCI6IFwicHQtUFRcIixcbiAgXCJ6aC1IYW50LU1PXCI6IFwiemgtSGFudC1IS1wiXG59OyIsImltcG9ydCBhbGlhc2VzIGZyb20gJy4vYWxpYXNlcyc7XG5pbXBvcnQgcGFyZW50TG9jYWxlcyBmcm9tICcuL3BhcmVudExvY2FsZXMnO1xuaW1wb3J0IHsgaW52YXJpYW50IH0gZnJvbSAnLi9pbnZhcmlhbnQnO1xuLyoqXG4gKiBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvb2JqZWN0XG4gKiBAcGFyYW0gYXJnXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHRvT2JqZWN0KGFyZykge1xuICBpZiAoYXJnID09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd1bmRlZmluZWQvbnVsbCBjYW5ub3QgYmUgY29udmVydGVkIHRvIG9iamVjdCcpO1xuICB9XG5cbiAgcmV0dXJuIE9iamVjdChhcmcpO1xufVxuLyoqXG4gKiBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvc3RyaW5nXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHRvU3RyaW5nKG8pIHtcbiAgLy8gT25seSBzeW1ib2wgaXMgaXJyZWd1bGFyLi4uXG4gIGlmICh0eXBlb2YgbyA9PT0gJ3N5bWJvbCcpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IGEgU3ltYm9sIHZhbHVlIHRvIGEgc3RyaW5nJyk7XG4gIH1cblxuICByZXR1cm4gU3RyaW5nKG8pO1xufVxuLyoqXG4gKiBodHRwczovL3RjMzkuZXMvZWNtYTQwMi8jc2VjLWdldG9wdGlvblxuICogQHBhcmFtIG9wdHNcbiAqIEBwYXJhbSBwcm9wXG4gKiBAcGFyYW0gdHlwZVxuICogQHBhcmFtIHZhbHVlc1xuICogQHBhcmFtIGZhbGxiYWNrXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE9wdGlvbihvcHRzLCBwcm9wLCB0eXBlLCB2YWx1ZXMsIGZhbGxiYWNrKSB7XG4gIC8vIGNvbnN0IGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9wdHMsIHByb3ApO1xuICB2YXIgdmFsdWUgPSBvcHRzW3Byb3BdO1xuXG4gIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHR5cGUgIT09ICdib29sZWFuJyAmJiB0eXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCB0eXBlJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgPT09ICdib29sZWFuJykge1xuICAgICAgdmFsdWUgPSBCb29sZWFuKHZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHZhbHVlID0gdG9TdHJpbmcodmFsdWUpO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZXMgIT09IHVuZGVmaW5lZCAmJiAhdmFsdWVzLmZpbHRlcihmdW5jdGlvbiAodmFsKSB7XG4gICAgICByZXR1cm4gdmFsID09IHZhbHVlO1xuICAgIH0pLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IodmFsdWUgKyBcIiBpcyBub3Qgd2l0aGluIFwiICsgdmFsdWVzLmpvaW4oJywgJykpO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxsYmFjaztcbn1cbi8qKlxuICogaHR0cHM6Ly90YzM5LmVzL2VjbWE0MDIvI3NlYy1kZWZhdWx0bnVtYmVyb3B0aW9uXG4gKiBAcGFyYW0gdmFsXG4gKiBAcGFyYW0gbWluXG4gKiBAcGFyYW0gbWF4XG4gKiBAcGFyYW0gZmFsbGJhY2tcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZGVmYXVsdE51bWJlck9wdGlvbih2YWwsIG1pbiwgbWF4LCBmYWxsYmFjaykge1xuICBpZiAodmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YWwgPSBOdW1iZXIodmFsKTtcblxuICAgIGlmIChpc05hTih2YWwpIHx8IHZhbCA8IG1pbiB8fCB2YWwgPiBtYXgpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKHZhbCArIFwiIGlzIG91dHNpZGUgb2YgcmFuZ2UgW1wiICsgbWluICsgXCIsIFwiICsgbWF4ICsgXCJdXCIpO1xuICAgIH1cblxuICAgIHJldHVybiBNYXRoLmZsb29yKHZhbCk7XG4gIH1cblxuICByZXR1cm4gZmFsbGJhY2s7XG59XG4vKipcbiAqIGh0dHBzOi8vdGMzOS5lcy9lY21hNDAyLyNzZWMtZ2V0bnVtYmVyb3B0aW9uXG4gKiBAcGFyYW0gb3B0aW9uc1xuICogQHBhcmFtIHByb3BlcnR5XG4gKiBAcGFyYW0gbWluXG4gKiBAcGFyYW0gbWF4XG4gKiBAcGFyYW0gZmFsbGJhY2tcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TnVtYmVyT3B0aW9uKG9wdGlvbnMsIHByb3BlcnR5LCBtaW5pbXVtLCBtYXhpbXVtLCBmYWxsYmFjaykge1xuICB2YXIgdmFsID0gb3B0aW9uc1twcm9wZXJ0eV07XG4gIHJldHVybiBkZWZhdWx0TnVtYmVyT3B0aW9uKHZhbCwgbWluaW11bSwgbWF4aW11bSwgZmFsbGJhY2spO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldEFsaWFzZXNCeUxhbmcobGFuZykge1xuICByZXR1cm4gT2JqZWN0LmtleXMoYWxpYXNlcykucmVkdWNlKGZ1bmN0aW9uIChhbGwsIGxvY2FsZSkge1xuICAgIGlmIChsb2NhbGUuc3BsaXQoJy0nKVswXSA9PT0gbGFuZykge1xuICAgICAgYWxsW2xvY2FsZV0gPSBhbGlhc2VzW2xvY2FsZV07XG4gICAgfVxuXG4gICAgcmV0dXJuIGFsbDtcbiAgfSwge30pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcmVudExvY2FsZXNCeUxhbmcobGFuZykge1xuICByZXR1cm4gT2JqZWN0LmtleXMocGFyZW50TG9jYWxlcykucmVkdWNlKGZ1bmN0aW9uIChhbGwsIGxvY2FsZSkge1xuICAgIGlmIChsb2NhbGUuc3BsaXQoJy0nKVswXSA9PT0gbGFuZykge1xuICAgICAgYWxsW2xvY2FsZV0gPSBwYXJlbnRMb2NhbGVzW2xvY2FsZV07XG4gICAgfVxuXG4gICAgcmV0dXJuIGFsbDtcbiAgfSwge30pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHNldEludGVybmFsU2xvdChtYXAsIHBsLCBmaWVsZCwgdmFsdWUpIHtcbiAgaWYgKCFtYXAuZ2V0KHBsKSkge1xuICAgIG1hcC5zZXQocGwsIE9iamVjdC5jcmVhdGUobnVsbCkpO1xuICB9XG5cbiAgdmFyIHNsb3RzID0gbWFwLmdldChwbCk7XG4gIHNsb3RzW2ZpZWxkXSA9IHZhbHVlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHNldE11bHRpSW50ZXJuYWxTbG90cyhtYXAsIHBsLCBwcm9wcykge1xuICBmb3IgKHZhciBfaSA9IDAsIF9hID0gT2JqZWN0LmtleXMocHJvcHMpOyBfaSA8IF9hLmxlbmd0aDsgX2krKykge1xuICAgIHZhciBrID0gX2FbX2ldO1xuICAgIHNldEludGVybmFsU2xvdChtYXAsIHBsLCBrLCBwcm9wc1trXSk7XG4gIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnRlcm5hbFNsb3QobWFwLCBwbCwgZmllbGQpIHtcbiAgcmV0dXJuIGdldE11bHRpSW50ZXJuYWxTbG90cyhtYXAsIHBsLCBmaWVsZClbZmllbGRdO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldE11bHRpSW50ZXJuYWxTbG90cyhtYXAsIHBsKSB7XG4gIHZhciBmaWVsZHMgPSBbXTtcblxuICBmb3IgKHZhciBfaSA9IDI7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgIGZpZWxkc1tfaSAtIDJdID0gYXJndW1lbnRzW19pXTtcbiAgfVxuXG4gIHZhciBzbG90cyA9IG1hcC5nZXQocGwpO1xuXG4gIGlmICghc2xvdHMpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHBsICsgXCIgSW50ZXJuYWxTbG90IGhhcyBub3QgYmVlbiBpbml0aWFsaXplZFwiKTtcbiAgfVxuXG4gIHJldHVybiBmaWVsZHMucmVkdWNlKGZ1bmN0aW9uIChhbGwsIGYpIHtcbiAgICBhbGxbZl0gPSBzbG90c1tmXTtcbiAgICByZXR1cm4gYWxsO1xuICB9LCBPYmplY3QuY3JlYXRlKG51bGwpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0xpdGVyYWxQYXJ0KHBhdHRlcm5QYXJ0KSB7XG4gIHJldHVybiBwYXR0ZXJuUGFydC50eXBlID09PSAnbGl0ZXJhbCc7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFydGl0aW9uUGF0dGVybihwYXR0ZXJuKSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGJlZ2luSW5kZXggPSBwYXR0ZXJuLmluZGV4T2YoJ3snKTtcbiAgdmFyIGVuZEluZGV4ID0gMDtcbiAgdmFyIG5leHRJbmRleCA9IDA7XG4gIHZhciBsZW5ndGggPSBwYXR0ZXJuLmxlbmd0aDtcblxuICB3aGlsZSAoYmVnaW5JbmRleCA8IHBhdHRlcm4ubGVuZ3RoICYmIGJlZ2luSW5kZXggPiAtMSkge1xuICAgIGVuZEluZGV4ID0gcGF0dGVybi5pbmRleE9mKCd9JywgYmVnaW5JbmRleCk7XG4gICAgaW52YXJpYW50KGVuZEluZGV4ID4gYmVnaW5JbmRleCwgXCJJbnZhbGlkIHBhdHRlcm4gXCIgKyBwYXR0ZXJuKTtcblxuICAgIGlmIChiZWdpbkluZGV4ID4gbmV4dEluZGV4KSB7XG4gICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgIHR5cGU6ICdsaXRlcmFsJyxcbiAgICAgICAgdmFsdWU6IHBhdHRlcm4uc3Vic3RyaW5nKG5leHRJbmRleCwgYmVnaW5JbmRleClcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgIHR5cGU6IHBhdHRlcm4uc3Vic3RyaW5nKGJlZ2luSW5kZXggKyAxLCBlbmRJbmRleCksXG4gICAgICB2YWx1ZTogdW5kZWZpbmVkXG4gICAgfSk7XG4gICAgbmV4dEluZGV4ID0gZW5kSW5kZXggKyAxO1xuICAgIGJlZ2luSW5kZXggPSBwYXR0ZXJuLmluZGV4T2YoJ3snLCBuZXh0SW5kZXgpO1xuICB9XG5cbiAgaWYgKG5leHRJbmRleCA8IGxlbmd0aCkge1xuICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgIHR5cGU6ICdsaXRlcmFsJyxcbiAgICAgIHZhbHVlOiBwYXR0ZXJuLnN1YnN0cmluZyhuZXh0SW5kZXgsIGxlbmd0aClcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG4vKipcbiAqIGh0dHBzOi8vdGMzOS5lcy9lY21hNDAyLyNzZWMtc2V0bmZkaWdpdG9wdGlvbnNcbiAqIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC11bmlmaWVkLWludGwtbnVtYmVyZm9ybWF0L3NlY3Rpb24xMS9udW1iZXJmb3JtYXRfZGlmZl9vdXQuaHRtbCNzZWMtc2V0bmZkaWdpdG9wdGlvbnNcbiAqIEBwYXJhbSBpbnRsT2JqXG4gKiBAcGFyYW0gb3B0c1xuICogQHBhcmFtIG1uZmREZWZhdWx0XG4gKiBAcGFyYW0gbXhmZERlZmF1bHRcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc2V0TnVtYmVyRm9ybWF0RGlnaXRPcHRpb25zKGludGVybmFsU2xvdE1hcCwgaW50bE9iaiwgb3B0cywgbW5mZERlZmF1bHQsIG14ZmREZWZhdWx0KSB7XG4gIHZhciBtbmlkID0gZ2V0TnVtYmVyT3B0aW9uKG9wdHMsICdtaW5pbXVtSW50ZWdlckRpZ2l0cycsIDEsIDIxLCAxKTtcbiAgdmFyIG1uZmQgPSBvcHRzLm1pbmltdW1GcmFjdGlvbkRpZ2l0cztcbiAgdmFyIG14ZmQgPSBvcHRzLm1heGltdW1GcmFjdGlvbkRpZ2l0cztcbiAgdmFyIG1uc2QgPSBvcHRzLm1pbmltdW1TaWduaWZpY2FudERpZ2l0cztcbiAgdmFyIG14c2QgPSBvcHRzLm1heGltdW1TaWduaWZpY2FudERpZ2l0cztcbiAgc2V0SW50ZXJuYWxTbG90KGludGVybmFsU2xvdE1hcCwgaW50bE9iaiwgJ21pbmltdW1JbnRlZ2VyRGlnaXRzJywgbW5pZCk7XG5cbiAgaWYgKG1uc2QgIT09IHVuZGVmaW5lZCB8fCBteHNkICE9PSB1bmRlZmluZWQpIHtcbiAgICBzZXRJbnRlcm5hbFNsb3QoaW50ZXJuYWxTbG90TWFwLCBpbnRsT2JqLCAncm91bmRpbmdUeXBlJywgJ3NpZ25pZmljYW50RGlnaXRzJyk7XG4gICAgbW5zZCA9IGRlZmF1bHROdW1iZXJPcHRpb24obW5zZCwgMSwgMjEsIDEpO1xuICAgIG14c2QgPSBkZWZhdWx0TnVtYmVyT3B0aW9uKG14c2QsIG1uc2QsIDIxLCAyMSk7XG4gICAgc2V0SW50ZXJuYWxTbG90KGludGVybmFsU2xvdE1hcCwgaW50bE9iaiwgJ21pbmltdW1TaWduaWZpY2FudERpZ2l0cycsIG1uc2QpO1xuICAgIHNldEludGVybmFsU2xvdChpbnRlcm5hbFNsb3RNYXAsIGludGxPYmosICdtYXhpbXVtU2lnbmlmaWNhbnREaWdpdHMnLCBteHNkKTtcbiAgfSBlbHNlIGlmIChtbmZkICE9PSB1bmRlZmluZWQgfHwgbXhmZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgc2V0SW50ZXJuYWxTbG90KGludGVybmFsU2xvdE1hcCwgaW50bE9iaiwgJ3JvdW5kaW5nVHlwZScsICdmcmFjdGlvbkRpZ2l0cycpO1xuICAgIG1uZmQgPSBkZWZhdWx0TnVtYmVyT3B0aW9uKG1uZmQsIDAsIDIwLCBtbmZkRGVmYXVsdCk7XG4gICAgdmFyIG14ZmRBY3R1YWxEZWZhdWx0ID0gTWF0aC5tYXgobW5mZCwgbXhmZERlZmF1bHQpO1xuICAgIG14ZmQgPSBkZWZhdWx0TnVtYmVyT3B0aW9uKG14ZmQsIG1uZmQsIDIwLCBteGZkQWN0dWFsRGVmYXVsdCk7XG4gICAgc2V0SW50ZXJuYWxTbG90KGludGVybmFsU2xvdE1hcCwgaW50bE9iaiwgJ21pbmltdW1GcmFjdGlvbkRpZ2l0cycsIG1uZmQpO1xuICAgIHNldEludGVybmFsU2xvdChpbnRlcm5hbFNsb3RNYXAsIGludGxPYmosICdtYXhpbXVtRnJhY3Rpb25EaWdpdHMnLCBteGZkKTtcbiAgfSBlbHNlIGlmIChnZXRJbnRlcm5hbFNsb3QoaW50ZXJuYWxTbG90TWFwLCBpbnRsT2JqLCAnbm90YXRpb24nKSA9PT0gJ2NvbXBhY3QnKSB7XG4gICAgc2V0SW50ZXJuYWxTbG90KGludGVybmFsU2xvdE1hcCwgaW50bE9iaiwgJ3JvdW5kaW5nVHlwZScsICdjb21wYWN0Um91bmRpbmcnKTtcbiAgfSBlbHNlIHtcbiAgICBzZXRJbnRlcm5hbFNsb3QoaW50ZXJuYWxTbG90TWFwLCBpbnRsT2JqLCAncm91bmRpbmdUeXBlJywgJ2ZyYWN0aW9uRGlnaXRzJyk7XG4gICAgc2V0SW50ZXJuYWxTbG90KGludGVybmFsU2xvdE1hcCwgaW50bE9iaiwgJ21pbmltdW1GcmFjdGlvbkRpZ2l0cycsIG1uZmREZWZhdWx0KTtcbiAgICBzZXRJbnRlcm5hbFNsb3QoaW50ZXJuYWxTbG90TWFwLCBpbnRsT2JqLCAnbWF4aW11bUZyYWN0aW9uRGlnaXRzJywgbXhmZERlZmF1bHQpO1xuICB9XG59XG5leHBvcnQgZnVuY3Rpb24gb2JqZWN0SXMoeCwgeSkge1xuICBpZiAoT2JqZWN0LmlzKSB7XG4gICAgcmV0dXJuIE9iamVjdC5pcyh4LCB5KTtcbiAgfSAvLyBTYW1lVmFsdWUgYWxnb3JpdGhtXG5cblxuICBpZiAoeCA9PT0geSkge1xuICAgIC8vIFN0ZXBzIDEtNSwgNy0xMFxuICAgIC8vIFN0ZXBzIDYuYi02LmU6ICswICE9IC0wXG4gICAgcmV0dXJuIHggIT09IDAgfHwgMSAvIHggPT09IDEgLyB5O1xuICB9IC8vIFN0ZXAgNi5hOiBOYU4gPT0gTmFOXG5cblxuICByZXR1cm4geCAhPT0geCAmJiB5ICE9PSB5O1xufVxudmFyIE5PVF9BX1pfUkVHRVggPSAvW15BLVpdLztcbi8qKlxuICogVGhpcyBmb2xsb3dzIGh0dHBzOi8vdGMzOS5lcy9lY21hNDAyLyNzZWMtY2FzZS1zZW5zaXRpdml0eS1hbmQtY2FzZS1tYXBwaW5nXG4gKiBAcGFyYW0gc3RyIHN0cmluZyB0byBjb252ZXJ0XG4gKi9cblxuZnVuY3Rpb24gdG9VcHBlckNhc2Uoc3RyKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZSgvKFthLXpdKS9nLCBmdW5jdGlvbiAoXywgYykge1xuICAgIHJldHVybiBjLnRvVXBwZXJDYXNlKCk7XG4gIH0pO1xufVxuLyoqXG4gKiBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtdW5pZmllZC1pbnRsLW51bWJlcmZvcm1hdC9zZWN0aW9uNi9sb2NhbGVzLWN1cnJlbmNpZXMtdHpfcHJvcG9zZWRfb3V0Lmh0bWwjc2VjLWlzd2VsbGZvcm1lZGN1cnJlbmN5Y29kZVxuICogQHBhcmFtIGN1cnJlbmN5XG4gKi9cblxuXG5leHBvcnQgZnVuY3Rpb24gaXNXZWxsRm9ybWVkQ3VycmVuY3lDb2RlKGN1cnJlbmN5KSB7XG4gIGN1cnJlbmN5ID0gdG9VcHBlckNhc2UoY3VycmVuY3kpO1xuXG4gIGlmIChjdXJyZW5jeS5sZW5ndGggIT09IDMpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoTk9UX0FfWl9SRUdFWC50ZXN0KGN1cnJlbmN5KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufSIsIi8qKlxuICogSUUxMS1zYWZlIHZlcnNpb24gb2YgZ2V0Q2Fub25pY2FsTG9jYWxlcyBzaW5jZSBpdCdzIEVTMjAxNlxuICogQHBhcmFtIGxvY2FsZXMgbG9jYWxlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2Fub25pY2FsTG9jYWxlcyhsb2NhbGVzKSB7XG4gIC8vIElFMTFcbiAgdmFyIGdldENhbm9uaWNhbExvY2FsZXMgPSBJbnRsLmdldENhbm9uaWNhbExvY2FsZXM7XG5cbiAgaWYgKHR5cGVvZiBnZXRDYW5vbmljYWxMb2NhbGVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGdldENhbm9uaWNhbExvY2FsZXMobG9jYWxlcyk7XG4gIH0gLy8gTk9URTogd2UgbXVzdCBOT1QgY2FsbCBgc3VwcG9ydGVkTG9jYWxlc09mYCBvZiBhIGZvcm1hdGpzIHBvbHlmaWxsLCBvciB0aGVpciBpbXBsZW1lbnRhdGlvblxuICAvLyB3aWxsIGV2ZW4gZXZlbnR1YWxseSBjYWxsIHRoaXMgbWV0aG9kIHJlY3Vyc2l2ZWx5LiBIZXJlIHdlIHVzZSBgSW50bC5EYXRlVGltZUZvcm1hdGAgc2luY2UgaXRcbiAgLy8gaXMgbm90IHBvbHlmaWxsZWQgYnkgYEBmb3JtYXRqc2AuXG4gIC8vIFRPRE86IEZpeCBUeXBlU2NyaXB0IHR5cGUgZGVmIGZvciB0aGlzIGJjIHVuZGVmaW5lZCBpcyBqdXN0IGZpbmVcblxuXG4gIHJldHVybiBJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZihsb2NhbGVzKTtcbn0iLCJ2YXIgX19leHRlbmRzID0gdGhpcyAmJiB0aGlzLl9fZXh0ZW5kcyB8fCBmdW5jdGlvbiAoKSB7XG4gIHZhciBfZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIGV4dGVuZFN0YXRpY3MoZCwgYikge1xuICAgIF9leHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IHtcbiAgICAgIF9fcHJvdG9fXzogW11cbiAgICB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgIGQuX19wcm90b19fID0gYjtcbiAgICB9IHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICBmb3IgKHZhciBwIGluIGIpIHtcbiAgICAgICAgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdO1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gX2V4dGVuZFN0YXRpY3MoZCwgYik7XG4gIH07XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgX2V4dGVuZFN0YXRpY3MoZCwgYik7XG5cbiAgICBmdW5jdGlvbiBfXygpIHtcbiAgICAgIHRoaXMuY29uc3RydWN0b3IgPSBkO1xuICAgIH1cblxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgfTtcbn0oKTtcblxudmFyIF9fYXNzaWduID0gdGhpcyAmJiB0aGlzLl9fYXNzaWduIHx8IGZ1bmN0aW9uICgpIHtcbiAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0KSB7XG4gICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICBzID0gYXJndW1lbnRzW2ldO1xuXG4gICAgICBmb3IgKHZhciBwIGluIHMpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdFtwXSA9IHNbcF07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHQ7XG4gIH07XG5cbiAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xuXG5pbXBvcnQgeyBnZXRDYW5vbmljYWxMb2NhbGVzIH0gZnJvbSAnLi9nZXQtY2Fub25pY2FsLWxvY2FsZXMnO1xuaW1wb3J0IHsgaW52YXJpYW50IH0gZnJvbSAnLi9pbnZhcmlhbnQnO1xuaW1wb3J0IHsgdG9PYmplY3QsIGdldE9wdGlvbiB9IGZyb20gJy4vcG9seWZpbGwtdXRpbHMnO1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlc29sdmVMb2NhbGUoZ2V0RGVmYXVsdExvY2FsZSkge1xuICB2YXIgbG9va3VwTWF0Y2hlciA9IGNyZWF0ZUxvb2t1cE1hdGNoZXIoZ2V0RGVmYXVsdExvY2FsZSk7XG4gIHZhciBiZXN0Rml0TWF0Y2hlciA9IGNyZWF0ZUJlc3RGaXRNYXRjaGVyKGdldERlZmF1bHRMb2NhbGUpO1xuICAvKipcbiAgICogaHR0cHM6Ly90YzM5LmVzL2VjbWE0MDIvI3NlYy1yZXNvbHZlbG9jYWxlXG4gICAqL1xuXG4gIHJldHVybiBmdW5jdGlvbiByZXNvbHZlTG9jYWxlKGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMsIG9wdGlvbnMsIHJlbGV2YW50RXh0ZW5zaW9uS2V5cywgbG9jYWxlRGF0YSkge1xuICAgIHZhciBtYXRjaGVyID0gb3B0aW9ucy5sb2NhbGVNYXRjaGVyO1xuICAgIHZhciByO1xuXG4gICAgaWYgKG1hdGNoZXIgPT09ICdsb29rdXAnKSB7XG4gICAgICByID0gbG9va3VwTWF0Y2hlcihhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgciA9IGJlc3RGaXRNYXRjaGVyKGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMpO1xuICAgIH1cblxuICAgIHZhciBmb3VuZExvY2FsZSA9IHIubG9jYWxlO1xuICAgIHZhciByZXN1bHQgPSB7XG4gICAgICBsb2NhbGU6ICcnLFxuICAgICAgZGF0YUxvY2FsZTogZm91bmRMb2NhbGVcbiAgICB9O1xuICAgIHZhciBzdXBwb3J0ZWRFeHRlbnNpb24gPSAnLXUnO1xuXG4gICAgZm9yICh2YXIgX2kgPSAwLCByZWxldmFudEV4dGVuc2lvbktleXNfMSA9IHJlbGV2YW50RXh0ZW5zaW9uS2V5czsgX2kgPCByZWxldmFudEV4dGVuc2lvbktleXNfMS5sZW5ndGg7IF9pKyspIHtcbiAgICAgIHZhciBrZXkgPSByZWxldmFudEV4dGVuc2lvbktleXNfMVtfaV07XG4gICAgICB2YXIgZm91bmRMb2NhbGVEYXRhID0gbG9jYWxlRGF0YVtmb3VuZExvY2FsZV07XG4gICAgICBpbnZhcmlhbnQodHlwZW9mIGZvdW5kTG9jYWxlRGF0YSA9PT0gJ29iamVjdCcgJiYgZm91bmRMb2NhbGVEYXRhICE9PSBudWxsLCBcImxvY2FsZSBkYXRhIFwiICsga2V5ICsgXCIgbXVzdCBiZSBhbiBvYmplY3RcIik7XG4gICAgICB2YXIga2V5TG9jYWxlRGF0YSA9IGZvdW5kTG9jYWxlRGF0YVtrZXldO1xuICAgICAgaW52YXJpYW50KEFycmF5LmlzQXJyYXkoa2V5TG9jYWxlRGF0YSksIFwia2V5TG9jYWxlRGF0YSBmb3IgXCIgKyBrZXkgKyBcIiBtdXN0IGJlIGFuIGFycmF5XCIpO1xuICAgICAgdmFyIHZhbHVlID0ga2V5TG9jYWxlRGF0YVswXTtcbiAgICAgIGludmFyaWFudCh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8IHZhbHVlID09PSBudWxsLCAndmFsdWUgbXVzdCBiZSBzdHJpbmcgb3IgbnVsbCcpO1xuICAgICAgdmFyIHN1cHBvcnRlZEV4dGVuc2lvbkFkZGl0aW9uID0gJyc7XG5cbiAgICAgIGlmIChyLmV4dGVuc2lvbikge1xuICAgICAgICB2YXIgcmVxdWVzdGVkVmFsdWUgPSB1bmljb2RlRXh0ZW5zaW9uVmFsdWUoci5leHRlbnNpb24sIGtleSk7XG5cbiAgICAgICAgaWYgKHJlcXVlc3RlZFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZiAocmVxdWVzdGVkVmFsdWUgIT09ICcnKSB7XG4gICAgICAgICAgICBpZiAofmtleUxvY2FsZURhdGEuaW5kZXhPZihyZXF1ZXN0ZWRWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgdmFsdWUgPSByZXF1ZXN0ZWRWYWx1ZTtcbiAgICAgICAgICAgICAgc3VwcG9ydGVkRXh0ZW5zaW9uQWRkaXRpb24gPSBcIi1cIiArIGtleSArIFwiLVwiICsgdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmICh+cmVxdWVzdGVkVmFsdWUuaW5kZXhPZigndHJ1ZScpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9ICd0cnVlJztcbiAgICAgICAgICAgIHN1cHBvcnRlZEV4dGVuc2lvbkFkZGl0aW9uID0gXCItXCIgKyBrZXk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChrZXkgaW4gb3B0aW9ucykge1xuICAgICAgICB2YXIgb3B0aW9uc1ZhbHVlID0gb3B0aW9uc1trZXldO1xuICAgICAgICBpbnZhcmlhbnQodHlwZW9mIG9wdGlvbnNWYWx1ZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIG9wdGlvbnNWYWx1ZSA9PT0gJ3VuZGVmaW5lZCcgfHwgb3B0aW9uc1ZhbHVlID09PSBudWxsLCAnb3B0aW9uc1ZhbHVlIG11c3QgYmUgU3RyaW5nLCBVbmRlZmluZWQgb3IgTnVsbCcpO1xuXG4gICAgICAgIGlmICh+a2V5TG9jYWxlRGF0YS5pbmRleE9mKG9wdGlvbnNWYWx1ZSkpIHtcbiAgICAgICAgICBpZiAob3B0aW9uc1ZhbHVlICE9PSB2YWx1ZSkge1xuICAgICAgICAgICAgdmFsdWUgPSBvcHRpb25zVmFsdWU7XG4gICAgICAgICAgICBzdXBwb3J0ZWRFeHRlbnNpb25BZGRpdGlvbiA9ICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXN1bHRba2V5XSA9IHZhbHVlO1xuICAgICAgc3VwcG9ydGVkRXh0ZW5zaW9uICs9IHN1cHBvcnRlZEV4dGVuc2lvbkFkZGl0aW9uO1xuICAgIH1cblxuICAgIGlmIChzdXBwb3J0ZWRFeHRlbnNpb24ubGVuZ3RoID4gMikge1xuICAgICAgdmFyIHByaXZhdGVJbmRleCA9IGZvdW5kTG9jYWxlLmluZGV4T2YoJy14LScpO1xuXG4gICAgICBpZiAocHJpdmF0ZUluZGV4ID09PSAtMSkge1xuICAgICAgICBmb3VuZExvY2FsZSA9IGZvdW5kTG9jYWxlICsgc3VwcG9ydGVkRXh0ZW5zaW9uO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHByZUV4dGVuc2lvbiA9IGZvdW5kTG9jYWxlLnNsaWNlKDAsIHByaXZhdGVJbmRleCk7XG4gICAgICAgIHZhciBwb3N0RXh0ZW5zaW9uID0gZm91bmRMb2NhbGUuc2xpY2UocHJpdmF0ZUluZGV4LCBmb3VuZExvY2FsZS5sZW5ndGgpO1xuICAgICAgICBmb3VuZExvY2FsZSA9IHByZUV4dGVuc2lvbiArIHN1cHBvcnRlZEV4dGVuc2lvbiArIHBvc3RFeHRlbnNpb247XG4gICAgICB9XG5cbiAgICAgIGZvdW5kTG9jYWxlID0gZ2V0Q2Fub25pY2FsTG9jYWxlcyhmb3VuZExvY2FsZSlbMF07XG4gICAgfVxuXG4gICAgcmVzdWx0LmxvY2FsZSA9IGZvdW5kTG9jYWxlO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59XG4vKipcbiAqIGh0dHBzOi8vdGMzOS5lcy9lY21hNDAyLyNzZWMtdW5pY29kZWV4dGVuc2lvbnZhbHVlXG4gKiBAcGFyYW0gZXh0ZW5zaW9uXG4gKiBAcGFyYW0ga2V5XG4gKi9cblxuZnVuY3Rpb24gdW5pY29kZUV4dGVuc2lvblZhbHVlKGV4dGVuc2lvbiwga2V5KSB7XG4gIGludmFyaWFudChrZXkubGVuZ3RoID09PSAyLCAna2V5IG11c3QgaGF2ZSAyIGVsZW1lbnRzJyk7XG4gIHZhciBzaXplID0gZXh0ZW5zaW9uLmxlbmd0aDtcbiAgdmFyIHNlYXJjaFZhbHVlID0gXCItXCIgKyBrZXkgKyBcIi1cIjtcbiAgdmFyIHBvcyA9IGV4dGVuc2lvbi5pbmRleE9mKHNlYXJjaFZhbHVlKTtcblxuICBpZiAocG9zICE9PSAtMSkge1xuICAgIHZhciBzdGFydCA9IHBvcyArIDQ7XG4gICAgdmFyIGVuZCA9IHN0YXJ0O1xuICAgIHZhciBrID0gc3RhcnQ7XG4gICAgdmFyIGRvbmUgPSBmYWxzZTtcblxuICAgIHdoaWxlICghZG9uZSkge1xuICAgICAgdmFyIGUgPSBleHRlbnNpb24uaW5kZXhPZignLScsIGspO1xuICAgICAgdmFyIGxlbiA9IHZvaWQgMDtcblxuICAgICAgaWYgKGUgPT09IC0xKSB7XG4gICAgICAgIGxlbiA9IHNpemUgLSBrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGVuID0gZSAtIGs7XG4gICAgICB9XG5cbiAgICAgIGlmIChsZW4gPT09IDIpIHtcbiAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKGUgPT09IC0xKSB7XG4gICAgICAgIGVuZCA9IHNpemU7XG4gICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZW5kID0gZTtcbiAgICAgICAgayA9IGUgKyAxO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBleHRlbnNpb24uc2xpY2Uoc3RhcnQsIGVuZCk7XG4gIH1cblxuICBzZWFyY2hWYWx1ZSA9IFwiLVwiICsga2V5O1xuICBwb3MgPSBleHRlbnNpb24uaW5kZXhPZihzZWFyY2hWYWx1ZSk7XG5cbiAgaWYgKHBvcyAhPT0gLTEgJiYgcG9zICsgMyA9PT0gc2l6ZSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbnZhciBVTklDT0RFX0VYVEVOU0lPTl9TRVFVRU5DRV9SRUdFWCA9IC8tdSg/Oi1bMC05YS16XXsyLDh9KSsvZ2k7XG4vKipcbiAqIGh0dHBzOi8vdGMzOS5lcy9lY21hNDAyLyNzZWMtYmVzdGF2YWlsYWJsZWxvY2FsZVxuICogQHBhcmFtIGF2YWlsYWJsZUxvY2FsZXNcbiAqIEBwYXJhbSBsb2NhbGVcbiAqL1xuXG5mdW5jdGlvbiBiZXN0QXZhaWxhYmxlTG9jYWxlKGF2YWlsYWJsZUxvY2FsZXMsIGxvY2FsZSkge1xuICB2YXIgY2FuZGlkYXRlID0gbG9jYWxlO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgaWYgKH5hdmFpbGFibGVMb2NhbGVzLmluZGV4T2YoY2FuZGlkYXRlKSkge1xuICAgICAgcmV0dXJuIGNhbmRpZGF0ZTtcbiAgICB9XG5cbiAgICB2YXIgcG9zID0gY2FuZGlkYXRlLmxhc3RJbmRleE9mKCctJyk7XG5cbiAgICBpZiAoIX5wb3MpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKHBvcyA+PSAyICYmIGNhbmRpZGF0ZVtwb3MgLSAyXSA9PT0gJy0nKSB7XG4gICAgICBwb3MgLT0gMjtcbiAgICB9XG5cbiAgICBjYW5kaWRhdGUgPSBjYW5kaWRhdGUuc2xpY2UoMCwgcG9zKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVMb29rdXBNYXRjaGVyKGdldERlZmF1bHRMb2NhbGUpIHtcbiAgLyoqXG4gICAqIGh0dHBzOi8vdGMzOS5lcy9lY21hNDAyLyNzZWMtbG9va3VwbWF0Y2hlclxuICAgKi9cbiAgcmV0dXJuIGZ1bmN0aW9uIGxvb2t1cE1hdGNoZXIoYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcykge1xuICAgIHZhciByZXN1bHQgPSB7XG4gICAgICBsb2NhbGU6ICcnXG4gICAgfTtcblxuICAgIGZvciAodmFyIF9pID0gMCwgcmVxdWVzdGVkTG9jYWxlc18xID0gcmVxdWVzdGVkTG9jYWxlczsgX2kgPCByZXF1ZXN0ZWRMb2NhbGVzXzEubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgbG9jYWxlID0gcmVxdWVzdGVkTG9jYWxlc18xW19pXTtcbiAgICAgIHZhciBub0V4dGVuc2lvbkxvY2FsZSA9IGxvY2FsZS5yZXBsYWNlKFVOSUNPREVfRVhURU5TSU9OX1NFUVVFTkNFX1JFR0VYLCAnJyk7XG4gICAgICB2YXIgYXZhaWxhYmxlTG9jYWxlID0gYmVzdEF2YWlsYWJsZUxvY2FsZShhdmFpbGFibGVMb2NhbGVzLCBub0V4dGVuc2lvbkxvY2FsZSk7XG5cbiAgICAgIGlmIChhdmFpbGFibGVMb2NhbGUpIHtcbiAgICAgICAgcmVzdWx0LmxvY2FsZSA9IGF2YWlsYWJsZUxvY2FsZTtcblxuICAgICAgICBpZiAobG9jYWxlICE9PSBub0V4dGVuc2lvbkxvY2FsZSkge1xuICAgICAgICAgIHJlc3VsdC5leHRlbnNpb24gPSBsb2NhbGUuc2xpY2Uobm9FeHRlbnNpb25Mb2NhbGUubGVuZ3RoICsgMSwgbG9jYWxlLmxlbmd0aCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJlc3VsdC5sb2NhbGUgPSBnZXREZWZhdWx0TG9jYWxlKCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQmVzdEZpdE1hdGNoZXIoZ2V0RGVmYXVsdExvY2FsZSkge1xuICByZXR1cm4gZnVuY3Rpb24gYmVzdEZpdE1hdGNoZXIoYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcykge1xuICAgIHZhciByZXN1bHQgPSB7XG4gICAgICBsb2NhbGU6ICcnXG4gICAgfTtcblxuICAgIGZvciAodmFyIF9pID0gMCwgcmVxdWVzdGVkTG9jYWxlc18yID0gcmVxdWVzdGVkTG9jYWxlczsgX2kgPCByZXF1ZXN0ZWRMb2NhbGVzXzIubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgbG9jYWxlID0gcmVxdWVzdGVkTG9jYWxlc18yW19pXTtcbiAgICAgIHZhciBub0V4dGVuc2lvbkxvY2FsZSA9IGxvY2FsZS5yZXBsYWNlKFVOSUNPREVfRVhURU5TSU9OX1NFUVVFTkNFX1JFR0VYLCAnJyk7XG4gICAgICB2YXIgYXZhaWxhYmxlTG9jYWxlID0gYmVzdEF2YWlsYWJsZUxvY2FsZShhdmFpbGFibGVMb2NhbGVzLCBub0V4dGVuc2lvbkxvY2FsZSk7XG5cbiAgICAgIGlmIChhdmFpbGFibGVMb2NhbGUpIHtcbiAgICAgICAgcmVzdWx0LmxvY2FsZSA9IGF2YWlsYWJsZUxvY2FsZTtcblxuICAgICAgICBpZiAobG9jYWxlICE9PSBub0V4dGVuc2lvbkxvY2FsZSkge1xuICAgICAgICAgIHJlc3VsdC5leHRlbnNpb24gPSBsb2NhbGUuc2xpY2Uobm9FeHRlbnNpb25Mb2NhbGUubGVuZ3RoICsgMSwgbG9jYWxlLmxlbmd0aCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJlc3VsdC5sb2NhbGUgPSBnZXREZWZhdWx0TG9jYWxlKCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExvY2FsZUhpZXJhcmNoeShsb2NhbGUsIGFsaWFzZXMsIHBhcmVudExvY2FsZXMpIHtcbiAgdmFyIHJlc3VsdHMgPSBbbG9jYWxlXTtcblxuICBpZiAoYWxpYXNlc1tsb2NhbGVdKSB7XG4gICAgbG9jYWxlID0gYWxpYXNlc1tsb2NhbGVdO1xuICAgIHJlc3VsdHMucHVzaChsb2NhbGUpO1xuICB9XG5cbiAgdmFyIHBhcmVudExvY2FsZSA9IHBhcmVudExvY2FsZXNbbG9jYWxlXTtcblxuICBpZiAocGFyZW50TG9jYWxlKSB7XG4gICAgcmVzdWx0cy5wdXNoKHBhcmVudExvY2FsZSk7XG4gIH1cblxuICB2YXIgbG9jYWxlUGFydHMgPSBsb2NhbGUuc3BsaXQoJy0nKTtcblxuICBmb3IgKHZhciBpID0gbG9jYWxlUGFydHMubGVuZ3RoOyBpID4gMTsgaS0tKSB7XG4gICAgcmVzdWx0cy5wdXNoKGxvY2FsZVBhcnRzLnNsaWNlKDAsIGkgLSAxKS5qb2luKCctJykpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdHM7XG59XG5cbmZ1bmN0aW9uIGxvb2t1cFN1cHBvcnRlZExvY2FsZXMoYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcykge1xuICB2YXIgc3Vic2V0ID0gW107XG5cbiAgZm9yICh2YXIgX2kgPSAwLCByZXF1ZXN0ZWRMb2NhbGVzXzMgPSByZXF1ZXN0ZWRMb2NhbGVzOyBfaSA8IHJlcXVlc3RlZExvY2FsZXNfMy5sZW5ndGg7IF9pKyspIHtcbiAgICB2YXIgbG9jYWxlID0gcmVxdWVzdGVkTG9jYWxlc18zW19pXTtcbiAgICB2YXIgbm9FeHRlbnNpb25Mb2NhbGUgPSBsb2NhbGUucmVwbGFjZShVTklDT0RFX0VYVEVOU0lPTl9TRVFVRU5DRV9SRUdFWCwgJycpO1xuICAgIHZhciBhdmFpbGFibGVMb2NhbGUgPSBiZXN0QXZhaWxhYmxlTG9jYWxlKGF2YWlsYWJsZUxvY2FsZXMsIG5vRXh0ZW5zaW9uTG9jYWxlKTtcblxuICAgIGlmIChhdmFpbGFibGVMb2NhbGUpIHtcbiAgICAgIHN1YnNldC5wdXNoKGF2YWlsYWJsZUxvY2FsZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN1YnNldDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvcnRlZExvY2FsZXMoYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcywgb3B0aW9ucykge1xuICB2YXIgbWF0Y2hlciA9ICdiZXN0IGZpdCc7XG5cbiAgaWYgKG9wdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgIG9wdGlvbnMgPSB0b09iamVjdChvcHRpb25zKTtcbiAgICBtYXRjaGVyID0gZ2V0T3B0aW9uKG9wdGlvbnMsICdsb2NhbGVNYXRjaGVyJywgJ3N0cmluZycsIFsnbG9va3VwJywgJ2Jlc3QgZml0J10sICdiZXN0IGZpdCcpO1xuICB9XG5cbiAgaWYgKG1hdGNoZXIgPT09ICdiZXN0IGZpdCcpIHtcbiAgICByZXR1cm4gbG9va3VwU3VwcG9ydGVkTG9jYWxlcyhhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzKTtcbiAgfVxuXG4gIHJldHVybiBsb29rdXBTdXBwb3J0ZWRMb2NhbGVzKGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMpO1xufVxuXG52YXIgTWlzc2luZ0xvY2FsZURhdGFFcnJvciA9XG4vKiogQGNsYXNzICovXG5mdW5jdGlvbiAoX3N1cGVyKSB7XG4gIF9fZXh0ZW5kcyhNaXNzaW5nTG9jYWxlRGF0YUVycm9yLCBfc3VwZXIpO1xuXG4gIGZ1bmN0aW9uIE1pc3NpbmdMb2NhbGVEYXRhRXJyb3IoKSB7XG4gICAgdmFyIF90aGlzID0gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG5cbiAgICBfdGhpcy50eXBlID0gJ01JU1NJTkdfTE9DQUxFX0RBVEEnO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHJldHVybiBNaXNzaW5nTG9jYWxlRGF0YUVycm9yO1xufShFcnJvcik7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc01pc3NpbmdMb2NhbGVEYXRhRXJyb3IoZSkge1xuICByZXR1cm4gZS50eXBlID09PSAnTUlTU0lOR19MT0NBTEVfREFUQSc7XG59XG5leHBvcnQgZnVuY3Rpb24gdW5wYWNrRGF0YShsb2NhbGUsIGxvY2FsZURhdGEsXG4vKiogQnkgZGVmYXVsdCBzaGFsbG93IG1lcmdlIHRoZSBkaWN0aW9uYXJpZXMuICovXG5yZWR1Y2VyKSB7XG4gIGlmIChyZWR1Y2VyID09PSB2b2lkIDApIHtcbiAgICByZWR1Y2VyID0gZnVuY3Rpb24gcmVkdWNlcihhbGwsIGQpIHtcbiAgICAgIHJldHVybiBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgYWxsKSwgZCk7XG4gICAgfTtcbiAgfVxuXG4gIHZhciBsb2NhbGVIaWVyYXJjaHkgPSBnZXRMb2NhbGVIaWVyYXJjaHkobG9jYWxlLCBsb2NhbGVEYXRhLmFsaWFzZXMsIGxvY2FsZURhdGEucGFyZW50TG9jYWxlcyk7XG4gIHZhciBkYXRhVG9NZXJnZSA9IGxvY2FsZUhpZXJhcmNoeS5tYXAoZnVuY3Rpb24gKGwpIHtcbiAgICByZXR1cm4gbG9jYWxlRGF0YS5kYXRhW2xdO1xuICB9KS5maWx0ZXIoQm9vbGVhbik7XG5cbiAgaWYgKCFkYXRhVG9NZXJnZS5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgTWlzc2luZ0xvY2FsZURhdGFFcnJvcihcIk1pc3NpbmcgbG9jYWxlIGRhdGEgZm9yIFxcXCJcIiArIGxvY2FsZSArIFwiXFxcIiwgbG9va3VwIGhpZXJhcmNoeTogXCIgKyBsb2NhbGVIaWVyYXJjaHkuam9pbignLCAnKSk7XG4gIH1cblxuICBkYXRhVG9NZXJnZS5yZXZlcnNlKCk7XG4gIHJldHVybiBkYXRhVG9NZXJnZS5yZWR1Y2UocmVkdWNlciwge30pO1xufSIsIi8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC11bmlmaWVkLWludGwtbnVtYmVyZm9ybWF0L3NlY3Rpb242L2xvY2FsZXMtY3VycmVuY2llcy10el9kaWZmX291dC5odG1sI3NlYy1pc3NhbmN0aW9uZWRzaW1wbGV1bml0aWRlbnRpZmllclxuZXhwb3J0IHZhciBTQU5DVElPTkVEX1VOSVRTID0gWydhbmdsZS1kZWdyZWUnLCAnYXJlYS1hY3JlJywgJ2FyZWEtaGVjdGFyZScsICdjb25jZW50ci1wZXJjZW50JywgJ2RpZ2l0YWwtYml0JywgJ2RpZ2l0YWwtYnl0ZScsICdkaWdpdGFsLWdpZ2FiaXQnLCAnZGlnaXRhbC1naWdhYnl0ZScsICdkaWdpdGFsLWtpbG9iaXQnLCAnZGlnaXRhbC1raWxvYnl0ZScsICdkaWdpdGFsLW1lZ2FiaXQnLCAnZGlnaXRhbC1tZWdhYnl0ZScsICdkaWdpdGFsLXBldGFieXRlJywgJ2RpZ2l0YWwtdGVyYWJpdCcsICdkaWdpdGFsLXRlcmFieXRlJywgJ2R1cmF0aW9uLWRheScsICdkdXJhdGlvbi1ob3VyJywgJ2R1cmF0aW9uLW1pbGxpc2Vjb25kJywgJ2R1cmF0aW9uLW1pbnV0ZScsICdkdXJhdGlvbi1tb250aCcsICdkdXJhdGlvbi1zZWNvbmQnLCAnZHVyYXRpb24td2VlaycsICdkdXJhdGlvbi15ZWFyJywgJ2xlbmd0aC1jZW50aW1ldGVyJywgJ2xlbmd0aC1mb290JywgJ2xlbmd0aC1pbmNoJywgJ2xlbmd0aC1raWxvbWV0ZXInLCAnbGVuZ3RoLW1ldGVyJywgJ2xlbmd0aC1taWxlLXNjYW5kaW5hdmlhbicsICdsZW5ndGgtbWlsZScsICdsZW5ndGgtbWlsbGltZXRlcicsICdsZW5ndGgteWFyZCcsICdtYXNzLWdyYW0nLCAnbWFzcy1raWxvZ3JhbScsICdtYXNzLW91bmNlJywgJ21hc3MtcG91bmQnLCAnbWFzcy1zdG9uZScsICd0ZW1wZXJhdHVyZS1jZWxzaXVzJywgJ3RlbXBlcmF0dXJlLWZhaHJlbmhlaXQnLCAndm9sdW1lLWZsdWlkLW91bmNlJywgJ3ZvbHVtZS1nYWxsb24nLCAndm9sdW1lLWxpdGVyJywgJ3ZvbHVtZS1taWxsaWxpdGVyJ107IC8vIEluIENMRFIsIHRoZSB1bml0IG5hbWUgYWx3YXlzIGZvbGxvd3MgdGhlIGZvcm0gYG5hbWVzcGFjZS11bml0YCBwYXR0ZXJuLlxuLy8gRm9yIGV4YW1wbGU6IGBkaWdpdGFsLWJpdGAgaW5zdGVhZCBvZiBgYml0YC4gVGhpcyBmdW5jdGlvbiByZW1vdmVzIHRoZSBuYW1lc3BhY2UgcHJlZml4LlxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlVW5pdE5hbWVzcGFjZSh1bml0KSB7XG4gIHJldHVybiB1bml0LnJlcGxhY2UoL14oLio/KS0vLCAnJyk7XG59IiwiZXhwb3J0IHZhciBJbnRlcm5hbFNsb3RUb2tlbjtcblxuKGZ1bmN0aW9uIChJbnRlcm5hbFNsb3RUb2tlbikge1xuICAvLyBUbyBwcmV2ZW50IGNvbGxpc2lvbiB3aXRoIHswfSBpbiBDTERSXG4gIEludGVybmFsU2xvdFRva2VuW1wiY29tcGFjdE5hbWVcIl0gPSBcImNvbXBhY3ROYW1lXCI7XG4gIEludGVybmFsU2xvdFRva2VuW1wiY29tcGFjdFN5bWJvbFwiXSA9IFwiY29tcGFjdFN5bWJvbFwiO1xuICBJbnRlcm5hbFNsb3RUb2tlbltcImN1cnJlbmN5Q29kZVwiXSA9IFwiY3VycmVuY3lDb2RlXCI7XG4gIEludGVybmFsU2xvdFRva2VuW1wiY3VycmVuY3lOYW1lXCJdID0gXCJjdXJyZW5jeU5hbWVcIjtcbiAgSW50ZXJuYWxTbG90VG9rZW5bXCJjdXJyZW5jeU5hcnJvd1N5bWJvbFwiXSA9IFwiY3VycmVuY3lOYXJyb3dTeW1ib2xcIjtcbiAgSW50ZXJuYWxTbG90VG9rZW5bXCJjdXJyZW5jeVN5bWJvbFwiXSA9IFwiY3VycmVuY3lTeW1ib2xcIjtcbiAgSW50ZXJuYWxTbG90VG9rZW5bXCJtaW51c1NpZ25cIl0gPSBcIm1pbnVzU2lnblwiO1xuICBJbnRlcm5hbFNsb3RUb2tlbltcIm51bWJlclwiXSA9IFwibnVtYmVyXCI7XG4gIEludGVybmFsU2xvdFRva2VuW1wicGVyY2VudFNpZ25cIl0gPSBcInBlcmNlbnRTaWduXCI7XG4gIEludGVybmFsU2xvdFRva2VuW1wicGx1c1NpZ25cIl0gPSBcInBsdXNTaWduXCI7XG4gIEludGVybmFsU2xvdFRva2VuW1wic2NpZW50aWZpY0V4cG9uZW50XCJdID0gXCJzY2llbnRpZmljRXhwb25lbnRcIjtcbiAgSW50ZXJuYWxTbG90VG9rZW5bXCJzY2llbnRpZmljU2VwYXJhdG9yXCJdID0gXCJzY2llbnRpZmljU2VwYXJhdG9yXCI7XG4gIEludGVybmFsU2xvdFRva2VuW1widW5pdE5hbWVcIl0gPSBcInVuaXROYW1lXCI7XG4gIEludGVybmFsU2xvdFRva2VuW1widW5pdE5hcnJvd1N5bWJvbFwiXSA9IFwidW5pdE5hcnJvd1N5bWJvbFwiO1xuICBJbnRlcm5hbFNsb3RUb2tlbltcInVuaXRTeW1ib2xcIl0gPSBcInVuaXRTeW1ib2xcIjtcbn0pKEludGVybmFsU2xvdFRva2VuIHx8IChJbnRlcm5hbFNsb3RUb2tlbiA9IHt9KSk7IiwiZXhwb3J0IHsgc2VsZWN0VW5pdCB9IGZyb20gJy4vZGlmZic7XG5leHBvcnQgeyBkZWZhdWx0TnVtYmVyT3B0aW9uLCBnZXRBbGlhc2VzQnlMYW5nLCBnZXRJbnRlcm5hbFNsb3QsIGdldE11bHRpSW50ZXJuYWxTbG90cywgZ2V0TnVtYmVyT3B0aW9uLCBnZXRPcHRpb24sIGdldFBhcmVudExvY2FsZXNCeUxhbmcsIGlzTGl0ZXJhbFBhcnQsIHBhcnRpdGlvblBhdHRlcm4sIHNldEludGVybmFsU2xvdCwgc2V0TXVsdGlJbnRlcm5hbFNsb3RzLCBzZXROdW1iZXJGb3JtYXREaWdpdE9wdGlvbnMsIHRvT2JqZWN0LCBvYmplY3RJcywgaXNXZWxsRm9ybWVkQ3VycmVuY3lDb2RlLCB0b1N0cmluZyB9IGZyb20gJy4vcG9seWZpbGwtdXRpbHMnO1xuZXhwb3J0IHsgY3JlYXRlUmVzb2x2ZUxvY2FsZSwgZ2V0TG9jYWxlSGllcmFyY2h5LCBzdXBwb3J0ZWRMb2NhbGVzLCB1bnBhY2tEYXRhLCBpc01pc3NpbmdMb2NhbGVEYXRhRXJyb3IgfSBmcm9tICcuL3Jlc29sdmUtbG9jYWxlJztcbmV4cG9ydCAqIGZyb20gJy4vdW5pdHMnO1xuZXhwb3J0ICogZnJvbSAnLi9udW1iZXItdHlwZXMnO1xuZXhwb3J0IHsgZ2V0Q2Fub25pY2FsTG9jYWxlcyB9IGZyb20gJy4vZ2V0LWNhbm9uaWNhbC1sb2NhbGVzJztcbmV4cG9ydCB7IGludmFyaWFudCB9IGZyb20gJy4vaW52YXJpYW50JzsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2650\n')},5981:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "k": function() { return /* binding */ invariant; }\n/* harmony export */ });\nfunction invariant(condition, message, Err) {\n if (Err === void 0) {\n Err = Error;\n }\n\n if (!condition) {\n throw new Err(message);\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AZm9ybWF0anMvaW50bC11dGlscy9saWIvaW52YXJpYW50LmpzPzQ5NWIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiNTk4MS5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBpbnZhcmlhbnQoY29uZGl0aW9uLCBtZXNzYWdlLCBFcnIpIHtcbiAgaWYgKEVyciA9PT0gdm9pZCAwKSB7XG4gICAgRXJyID0gRXJyb3I7XG4gIH1cblxuICBpZiAoIWNvbmRpdGlvbikge1xuICAgIHRocm93IG5ldyBFcnIobWVzc2FnZSk7XG4gIH1cbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5981\n')},2393:function(__unused_webpack_module,exports){"use strict";eval('var __webpack_unused_export__;\n\n\n__webpack_unused_export__ = true;\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar getLocation = function getLocation(source) {\n var _source$location = source.location,\n search = _source$location.search,\n hash = _source$location.hash,\n href = _source$location.href,\n origin = _source$location.origin,\n protocol = _source$location.protocol,\n host = _source$location.host,\n hostname = _source$location.hostname,\n port = _source$location.port;\n var pathname = source.location.pathname;\n\n if (!pathname && href && canUseDOM) {\n var url = new URL(href);\n pathname = url.pathname;\n }\n\n return {\n pathname: encodeURI(decodeURI(pathname)),\n search: search,\n hash: hash,\n href: href,\n origin: origin,\n protocol: protocol,\n host: host,\n hostname: hostname,\n port: port,\n state: source.history.state,\n key: source.history.state && source.history.state.key || "initial"\n };\n};\n\nvar createHistory = function createHistory(source, options) {\n var listeners = [];\n var location = getLocation(source);\n var transitioning = false;\n\n var resolveTransition = function resolveTransition() {};\n\n return {\n get location() {\n return location;\n },\n\n get transitioning() {\n return transitioning;\n },\n\n _onTransitionComplete: function _onTransitionComplete() {\n transitioning = false;\n resolveTransition();\n },\n listen: function listen(listener) {\n listeners.push(listener);\n\n var popstateListener = function popstateListener() {\n location = getLocation(source);\n listener({\n location: location,\n action: "POP"\n });\n };\n\n source.addEventListener("popstate", popstateListener);\n return function () {\n source.removeEventListener("popstate", popstateListener);\n listeners = listeners.filter(function (fn) {\n return fn !== listener;\n });\n };\n },\n navigate: function navigate(to) {\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n state = _ref.state,\n _ref$replace = _ref.replace,\n replace = _ref$replace === undefined ? false : _ref$replace;\n\n if (typeof to === "number") {\n source.history.go(to);\n } else {\n state = _extends({}, state, {\n key: Date.now() + ""\n }); // try...catch iOS Safari limits to 100 pushState calls\n\n try {\n if (transitioning || replace) {\n source.history.replaceState(state, null, to);\n } else {\n source.history.pushState(state, null, to);\n }\n } catch (e) {\n source.location[replace ? "replace" : "assign"](to);\n }\n }\n\n location = getLocation(source);\n transitioning = true;\n var transition = new Promise(function (res) {\n return resolveTransition = res;\n });\n listeners.forEach(function (listener) {\n return listener({\n location: location,\n action: "PUSH"\n });\n });\n return transition;\n }\n };\n}; ////////////////////////////////////////////////////////////////////////////////\n// Stores history entries in memory for testing or other platforms like Native\n\n\nvar createMemorySource = function createMemorySource() {\n var initialPath = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "/";\n var searchIndex = initialPath.indexOf("?");\n var initialLocation = {\n pathname: searchIndex > -1 ? initialPath.substr(0, searchIndex) : initialPath,\n search: searchIndex > -1 ? initialPath.substr(searchIndex) : ""\n };\n var index = 0;\n var stack = [initialLocation];\n var states = [null];\n return {\n get location() {\n return stack[index];\n },\n\n addEventListener: function addEventListener(name, fn) {},\n removeEventListener: function removeEventListener(name, fn) {},\n history: {\n get entries() {\n return stack;\n },\n\n get index() {\n return index;\n },\n\n get state() {\n return states[index];\n },\n\n pushState: function pushState(state, _, uri) {\n var _uri$split = uri.split("?"),\n pathname = _uri$split[0],\n _uri$split$ = _uri$split[1],\n search = _uri$split$ === undefined ? "" : _uri$split$;\n\n index++;\n stack.push({\n pathname: pathname,\n search: search.length ? "?" + search : search\n });\n states.push(state);\n },\n replaceState: function replaceState(state, _, uri) {\n var _uri$split2 = uri.split("?"),\n pathname = _uri$split2[0],\n _uri$split2$ = _uri$split2[1],\n search = _uri$split2$ === undefined ? "" : _uri$split2$;\n\n stack[index] = {\n pathname: pathname,\n search: search\n };\n states[index] = state;\n },\n go: function go(to) {\n var newIndex = index + to;\n\n if (newIndex < 0 || newIndex > states.length - 1) {\n return;\n }\n\n index = newIndex;\n }\n }\n };\n}; ////////////////////////////////////////////////////////////////////////////////\n// global history - uses window.history as the source if available, otherwise a\n// memory history\n\n\nvar canUseDOM = !!(typeof window !== "undefined" && window.document && window.document.createElement);\n\nvar getSource = function getSource() {\n return canUseDOM ? window : createMemorySource();\n};\n\nvar globalHistory = createHistory(getSource());\nvar navigate = globalHistory.navigate; ////////////////////////////////////////////////////////////////////////////////\n\nexports.V5 = globalHistory;\n__webpack_unused_export__ = navigate;\n__webpack_unused_export__ = createHistory;\n__webpack_unused_export__ = createMemorySource;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AZ2F0c2J5anMvcmVhY2gtcm91dGVyL2xpYi9oaXN0b3J5LmpzPzZiMDgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFhOztBQUViLHlCQUFrQjs7QUFFbEI7QUFDQSxpQkFBaUIsc0JBQXNCO0FBQ3ZDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBLHVGQUF1RjtBQUN2RjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUCwyQkFBMkI7QUFDM0I7QUFDQSxTQUFTLEVBQUU7O0FBRVg7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTCw0REFBNEQ7QUFDNUQsa0VBQWtFO0FBQ2xFO0FBQ0E7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0Esc0NBQXNDOztBQUV0QyxVQUFxQjtBQUNyQix5QkFBZ0I7QUFDaEIseUJBQXFCO0FBQ3JCLHlCQUEwQiIsImZpbGUiOiIyMzkzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkge1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59O1xuXG52YXIgZ2V0TG9jYXRpb24gPSBmdW5jdGlvbiBnZXRMb2NhdGlvbihzb3VyY2UpIHtcbiAgdmFyIF9zb3VyY2UkbG9jYXRpb24gPSBzb3VyY2UubG9jYXRpb24sXG4gICAgICBzZWFyY2ggPSBfc291cmNlJGxvY2F0aW9uLnNlYXJjaCxcbiAgICAgIGhhc2ggPSBfc291cmNlJGxvY2F0aW9uLmhhc2gsXG4gICAgICBocmVmID0gX3NvdXJjZSRsb2NhdGlvbi5ocmVmLFxuICAgICAgb3JpZ2luID0gX3NvdXJjZSRsb2NhdGlvbi5vcmlnaW4sXG4gICAgICBwcm90b2NvbCA9IF9zb3VyY2UkbG9jYXRpb24ucHJvdG9jb2wsXG4gICAgICBob3N0ID0gX3NvdXJjZSRsb2NhdGlvbi5ob3N0LFxuICAgICAgaG9zdG5hbWUgPSBfc291cmNlJGxvY2F0aW9uLmhvc3RuYW1lLFxuICAgICAgcG9ydCA9IF9zb3VyY2UkbG9jYXRpb24ucG9ydDtcbiAgdmFyIHBhdGhuYW1lID0gc291cmNlLmxvY2F0aW9uLnBhdGhuYW1lO1xuXG4gIGlmICghcGF0aG5hbWUgJiYgaHJlZiAmJiBjYW5Vc2VET00pIHtcbiAgICB2YXIgdXJsID0gbmV3IFVSTChocmVmKTtcbiAgICBwYXRobmFtZSA9IHVybC5wYXRobmFtZTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcGF0aG5hbWU6IGVuY29kZVVSSShkZWNvZGVVUkkocGF0aG5hbWUpKSxcbiAgICBzZWFyY2g6IHNlYXJjaCxcbiAgICBoYXNoOiBoYXNoLFxuICAgIGhyZWY6IGhyZWYsXG4gICAgb3JpZ2luOiBvcmlnaW4sXG4gICAgcHJvdG9jb2w6IHByb3RvY29sLFxuICAgIGhvc3Q6IGhvc3QsXG4gICAgaG9zdG5hbWU6IGhvc3RuYW1lLFxuICAgIHBvcnQ6IHBvcnQsXG4gICAgc3RhdGU6IHNvdXJjZS5oaXN0b3J5LnN0YXRlLFxuICAgIGtleTogc291cmNlLmhpc3Rvcnkuc3RhdGUgJiYgc291cmNlLmhpc3Rvcnkuc3RhdGUua2V5IHx8IFwiaW5pdGlhbFwiXG4gIH07XG59O1xuXG52YXIgY3JlYXRlSGlzdG9yeSA9IGZ1bmN0aW9uIGNyZWF0ZUhpc3Rvcnkoc291cmNlLCBvcHRpb25zKSB7XG4gIHZhciBsaXN0ZW5lcnMgPSBbXTtcbiAgdmFyIGxvY2F0aW9uID0gZ2V0TG9jYXRpb24oc291cmNlKTtcbiAgdmFyIHRyYW5zaXRpb25pbmcgPSBmYWxzZTtcblxuICB2YXIgcmVzb2x2ZVRyYW5zaXRpb24gPSBmdW5jdGlvbiByZXNvbHZlVHJhbnNpdGlvbigpIHt9O1xuXG4gIHJldHVybiB7XG4gICAgZ2V0IGxvY2F0aW9uKCkge1xuICAgICAgcmV0dXJuIGxvY2F0aW9uO1xuICAgIH0sXG5cbiAgICBnZXQgdHJhbnNpdGlvbmluZygpIHtcbiAgICAgIHJldHVybiB0cmFuc2l0aW9uaW5nO1xuICAgIH0sXG5cbiAgICBfb25UcmFuc2l0aW9uQ29tcGxldGU6IGZ1bmN0aW9uIF9vblRyYW5zaXRpb25Db21wbGV0ZSgpIHtcbiAgICAgIHRyYW5zaXRpb25pbmcgPSBmYWxzZTtcbiAgICAgIHJlc29sdmVUcmFuc2l0aW9uKCk7XG4gICAgfSxcbiAgICBsaXN0ZW46IGZ1bmN0aW9uIGxpc3RlbihsaXN0ZW5lcikge1xuICAgICAgbGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuXG4gICAgICB2YXIgcG9wc3RhdGVMaXN0ZW5lciA9IGZ1bmN0aW9uIHBvcHN0YXRlTGlzdGVuZXIoKSB7XG4gICAgICAgIGxvY2F0aW9uID0gZ2V0TG9jYXRpb24oc291cmNlKTtcbiAgICAgICAgbGlzdGVuZXIoe1xuICAgICAgICAgIGxvY2F0aW9uOiBsb2NhdGlvbixcbiAgICAgICAgICBhY3Rpb246IFwiUE9QXCJcbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgICBzb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcihcInBvcHN0YXRlXCIsIHBvcHN0YXRlTGlzdGVuZXIpO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc291cmNlLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb3BzdGF0ZVwiLCBwb3BzdGF0ZUxpc3RlbmVyKTtcbiAgICAgICAgbGlzdGVuZXJzID0gbGlzdGVuZXJzLmZpbHRlcihmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICByZXR1cm4gZm4gIT09IGxpc3RlbmVyO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgfSxcbiAgICBuYXZpZ2F0ZTogZnVuY3Rpb24gbmF2aWdhdGUodG8pIHtcbiAgICAgIHZhciBfcmVmID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSxcbiAgICAgICAgICBzdGF0ZSA9IF9yZWYuc3RhdGUsXG4gICAgICAgICAgX3JlZiRyZXBsYWNlID0gX3JlZi5yZXBsYWNlLFxuICAgICAgICAgIHJlcGxhY2UgPSBfcmVmJHJlcGxhY2UgPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogX3JlZiRyZXBsYWNlO1xuXG4gICAgICBpZiAodHlwZW9mIHRvID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgIHNvdXJjZS5oaXN0b3J5LmdvKHRvKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXRlID0gX2V4dGVuZHMoe30sIHN0YXRlLCB7XG4gICAgICAgICAga2V5OiBEYXRlLm5vdygpICsgXCJcIlxuICAgICAgICB9KTsgLy8gdHJ5Li4uY2F0Y2ggaU9TIFNhZmFyaSBsaW1pdHMgdG8gMTAwIHB1c2hTdGF0ZSBjYWxsc1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKHRyYW5zaXRpb25pbmcgfHwgcmVwbGFjZSkge1xuICAgICAgICAgICAgc291cmNlLmhpc3RvcnkucmVwbGFjZVN0YXRlKHN0YXRlLCBudWxsLCB0byk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNvdXJjZS5oaXN0b3J5LnB1c2hTdGF0ZShzdGF0ZSwgbnVsbCwgdG8pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHNvdXJjZS5sb2NhdGlvbltyZXBsYWNlID8gXCJyZXBsYWNlXCIgOiBcImFzc2lnblwiXSh0byk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbG9jYXRpb24gPSBnZXRMb2NhdGlvbihzb3VyY2UpO1xuICAgICAgdHJhbnNpdGlvbmluZyA9IHRydWU7XG4gICAgICB2YXIgdHJhbnNpdGlvbiA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgcmV0dXJuIHJlc29sdmVUcmFuc2l0aW9uID0gcmVzO1xuICAgICAgfSk7XG4gICAgICBsaXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbiAobGlzdGVuZXIpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RlbmVyKHtcbiAgICAgICAgICBsb2NhdGlvbjogbG9jYXRpb24sXG4gICAgICAgICAgYWN0aW9uOiBcIlBVU0hcIlxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHRyYW5zaXRpb247XG4gICAgfVxuICB9O1xufTsgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFN0b3JlcyBoaXN0b3J5IGVudHJpZXMgaW4gbWVtb3J5IGZvciB0ZXN0aW5nIG9yIG90aGVyIHBsYXRmb3JtcyBsaWtlIE5hdGl2ZVxuXG5cbnZhciBjcmVhdGVNZW1vcnlTb3VyY2UgPSBmdW5jdGlvbiBjcmVhdGVNZW1vcnlTb3VyY2UoKSB7XG4gIHZhciBpbml0aWFsUGF0aCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogXCIvXCI7XG4gIHZhciBzZWFyY2hJbmRleCA9IGluaXRpYWxQYXRoLmluZGV4T2YoXCI/XCIpO1xuICB2YXIgaW5pdGlhbExvY2F0aW9uID0ge1xuICAgIHBhdGhuYW1lOiBzZWFyY2hJbmRleCA+IC0xID8gaW5pdGlhbFBhdGguc3Vic3RyKDAsIHNlYXJjaEluZGV4KSA6IGluaXRpYWxQYXRoLFxuICAgIHNlYXJjaDogc2VhcmNoSW5kZXggPiAtMSA/IGluaXRpYWxQYXRoLnN1YnN0cihzZWFyY2hJbmRleCkgOiBcIlwiXG4gIH07XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBzdGFjayA9IFtpbml0aWFsTG9jYXRpb25dO1xuICB2YXIgc3RhdGVzID0gW251bGxdO1xuICByZXR1cm4ge1xuICAgIGdldCBsb2NhdGlvbigpIHtcbiAgICAgIHJldHVybiBzdGFja1tpbmRleF07XG4gICAgfSxcblxuICAgIGFkZEV2ZW50TGlzdGVuZXI6IGZ1bmN0aW9uIGFkZEV2ZW50TGlzdGVuZXIobmFtZSwgZm4pIHt9LFxuICAgIHJlbW92ZUV2ZW50TGlzdGVuZXI6IGZ1bmN0aW9uIHJlbW92ZUV2ZW50TGlzdGVuZXIobmFtZSwgZm4pIHt9LFxuICAgIGhpc3Rvcnk6IHtcbiAgICAgIGdldCBlbnRyaWVzKCkge1xuICAgICAgICByZXR1cm4gc3RhY2s7XG4gICAgICB9LFxuXG4gICAgICBnZXQgaW5kZXgoKSB7XG4gICAgICAgIHJldHVybiBpbmRleDtcbiAgICAgIH0sXG5cbiAgICAgIGdldCBzdGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHN0YXRlc1tpbmRleF07XG4gICAgICB9LFxuXG4gICAgICBwdXNoU3RhdGU6IGZ1bmN0aW9uIHB1c2hTdGF0ZShzdGF0ZSwgXywgdXJpKSB7XG4gICAgICAgIHZhciBfdXJpJHNwbGl0ID0gdXJpLnNwbGl0KFwiP1wiKSxcbiAgICAgICAgICAgIHBhdGhuYW1lID0gX3VyaSRzcGxpdFswXSxcbiAgICAgICAgICAgIF91cmkkc3BsaXQkID0gX3VyaSRzcGxpdFsxXSxcbiAgICAgICAgICAgIHNlYXJjaCA9IF91cmkkc3BsaXQkID09PSB1bmRlZmluZWQgPyBcIlwiIDogX3VyaSRzcGxpdCQ7XG5cbiAgICAgICAgaW5kZXgrKztcbiAgICAgICAgc3RhY2sucHVzaCh7XG4gICAgICAgICAgcGF0aG5hbWU6IHBhdGhuYW1lLFxuICAgICAgICAgIHNlYXJjaDogc2VhcmNoLmxlbmd0aCA/IFwiP1wiICsgc2VhcmNoIDogc2VhcmNoXG4gICAgICAgIH0pO1xuICAgICAgICBzdGF0ZXMucHVzaChzdGF0ZSk7XG4gICAgICB9LFxuICAgICAgcmVwbGFjZVN0YXRlOiBmdW5jdGlvbiByZXBsYWNlU3RhdGUoc3RhdGUsIF8sIHVyaSkge1xuICAgICAgICB2YXIgX3VyaSRzcGxpdDIgPSB1cmkuc3BsaXQoXCI/XCIpLFxuICAgICAgICAgICAgcGF0aG5hbWUgPSBfdXJpJHNwbGl0MlswXSxcbiAgICAgICAgICAgIF91cmkkc3BsaXQyJCA9IF91cmkkc3BsaXQyWzFdLFxuICAgICAgICAgICAgc2VhcmNoID0gX3VyaSRzcGxpdDIkID09PSB1bmRlZmluZWQgPyBcIlwiIDogX3VyaSRzcGxpdDIkO1xuXG4gICAgICAgIHN0YWNrW2luZGV4XSA9IHtcbiAgICAgICAgICBwYXRobmFtZTogcGF0aG5hbWUsXG4gICAgICAgICAgc2VhcmNoOiBzZWFyY2hcbiAgICAgICAgfTtcbiAgICAgICAgc3RhdGVzW2luZGV4XSA9IHN0YXRlO1xuICAgICAgfSxcbiAgICAgIGdvOiBmdW5jdGlvbiBnbyh0bykge1xuICAgICAgICB2YXIgbmV3SW5kZXggPSBpbmRleCArIHRvO1xuXG4gICAgICAgIGlmIChuZXdJbmRleCA8IDAgfHwgbmV3SW5kZXggPiBzdGF0ZXMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGluZGV4ID0gbmV3SW5kZXg7XG4gICAgICB9XG4gICAgfVxuICB9O1xufTsgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIGdsb2JhbCBoaXN0b3J5IC0gdXNlcyB3aW5kb3cuaGlzdG9yeSBhcyB0aGUgc291cmNlIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGFcbi8vIG1lbW9yeSBoaXN0b3J5XG5cblxudmFyIGNhblVzZURPTSA9ICEhKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgd2luZG93LmRvY3VtZW50ICYmIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcblxudmFyIGdldFNvdXJjZSA9IGZ1bmN0aW9uIGdldFNvdXJjZSgpIHtcbiAgcmV0dXJuIGNhblVzZURPTSA/IHdpbmRvdyA6IGNyZWF0ZU1lbW9yeVNvdXJjZSgpO1xufTtcblxudmFyIGdsb2JhbEhpc3RvcnkgPSBjcmVhdGVIaXN0b3J5KGdldFNvdXJjZSgpKTtcbnZhciBuYXZpZ2F0ZSA9IGdsb2JhbEhpc3RvcnkubmF2aWdhdGU7IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmV4cG9ydHMuZ2xvYmFsSGlzdG9yeSA9IGdsb2JhbEhpc3Rvcnk7XG5leHBvcnRzLm5hdmlnYXRlID0gbmF2aWdhdGU7XG5leHBvcnRzLmNyZWF0ZUhpc3RvcnkgPSBjcmVhdGVIaXN0b3J5O1xuZXhwb3J0cy5jcmVhdGVNZW1vcnlTb3VyY2UgPSBjcmVhdGVNZW1vcnlTb3VyY2U7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2393\n')},2098:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval('\n\nexports.__esModule = true;\nexports.shallowCompare = exports.validateRedirect = exports.insertParams = exports.resolve = exports.match = exports.pick = exports.startsWith = undefined;\n\nvar _invariant = __webpack_require__(1143);\n\nvar _invariant2 = _interopRequireDefault(_invariant);\n\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n} ////////////////////////////////////////////////////////////////////////////////\n// startsWith(string, search) - Check if `string` starts with `search`\n\n\nvar startsWith = function startsWith(string, search) {\n return string.substr(0, search.length) === search;\n}; ////////////////////////////////////////////////////////////////////////////////\n// pick(routes, uri)\n//\n// Ranks and picks the best route to match. Each segment gets the highest\n// amount of points, then the type of segment gets an additional amount of\n// points where\n//\n// static > dynamic > splat > root\n//\n// This way we don\'t have to worry about the order of our routes, let the\n// computers do it.\n//\n// A route looks like this\n//\n// { path, default, value }\n//\n// And a returned match looks like:\n//\n// { route, params, uri }\n//\n// I know, I should use TypeScript not comments for these types.\n\n\nvar pick = function pick(routes, uri) {\n var match = void 0;\n var default_ = void 0;\n\n var _uri$split = uri.split("?"),\n uriPathname = _uri$split[0];\n\n var uriSegments = segmentize(uriPathname);\n var isRootUri = uriSegments[0] === "";\n var ranked = rankRoutes(routes);\n\n for (var i = 0, l = ranked.length; i < l; i++) {\n var missed = false;\n var route = ranked[i].route;\n\n if (route.default) {\n default_ = {\n route: route,\n params: {},\n uri: uri\n };\n continue;\n }\n\n var routeSegments = segmentize(route.path);\n var params = {};\n var max = Math.max(uriSegments.length, routeSegments.length);\n var index = 0;\n\n for (; index < max; index++) {\n var routeSegment = routeSegments[index];\n var uriSegment = uriSegments[index];\n\n if (isSplat(routeSegment)) {\n // Hit a splat, just grab the rest, and return a match\n // uri: /files/documents/work\n // route: /files/*\n var param = routeSegment.slice(1) || "*";\n params[param] = uriSegments.slice(index).map(decodeURIComponent).join("/");\n break;\n }\n\n if (uriSegment === undefined) {\n // URI is shorter than the route, no match\n // uri: /users\n // route: /users/:userId\n missed = true;\n break;\n }\n\n var dynamicMatch = paramRe.exec(routeSegment);\n\n if (dynamicMatch && !isRootUri) {\n var matchIsNotReserved = reservedNames.indexOf(dynamicMatch[1]) === -1;\n !matchIsNotReserved ? false ? 0 : (0, _invariant2.default)(false) : void 0;\n var value = decodeURIComponent(uriSegment);\n params[dynamicMatch[1]] = value;\n } else if (routeSegment !== uriSegment) {\n // Current segments don\'t match, not dynamic, not splat, so no match\n // uri: /users/123/settings\n // route: /users/:id/profile\n missed = true;\n break;\n }\n }\n\n if (!missed) {\n match = {\n route: route,\n params: params,\n uri: "/" + uriSegments.slice(0, index).join("/")\n };\n break;\n }\n }\n\n return match || default_ || null;\n}; ////////////////////////////////////////////////////////////////////////////////\n// match(path, uri) - Matches just one path to a uri, also lol\n\n\nvar match = function match(path, uri) {\n return pick([{\n path: path\n }], uri);\n}; ////////////////////////////////////////////////////////////////////////////////\n// resolve(to, basepath)\n//\n// Resolves URIs as though every path is a directory, no files. Relative URIs\n// in the browser can feel awkward because not only can you be "in a directory"\n// you can be "at a file", too. For example\n//\n// browserSpecResolve(\'foo\', \'/bar/\') => /bar/foo\n// browserSpecResolve(\'foo\', \'/bar\') => /foo\n//\n// But on the command line of a file system, it\'s not as complicated, you can\'t\n// `cd` from a file, only directories. This way, links have to know less about\n// their current path. To go deeper you can do this:\n//\n// \n// // instead of\n// \n//\n// Just like `cd`, if you want to go deeper from the command line, you do this:\n//\n// cd deeper\n// # not\n// cd $(pwd)/deeper\n//\n// By treating every path as a directory, linking to relative paths should\n// require less contextual information and (fingers crossed) be more intuitive.\n\n\nvar resolve = function resolve(to, base) {\n // /foo/bar, /baz/qux => /foo/bar\n if (startsWith(to, "/")) {\n return to;\n }\n\n var _to$split = to.split("?"),\n toPathname = _to$split[0],\n toQuery = _to$split[1];\n\n var _base$split = base.split("?"),\n basePathname = _base$split[0];\n\n var toSegments = segmentize(toPathname);\n var baseSegments = segmentize(basePathname); // ?a=b, /users?b=c => /users?a=b\n\n if (toSegments[0] === "") {\n return addQuery(basePathname, toQuery);\n } // profile, /users/789 => /users/789/profile\n\n\n if (!startsWith(toSegments[0], ".")) {\n var pathname = baseSegments.concat(toSegments).join("/");\n return addQuery((basePathname === "/" ? "" : "/") + pathname, toQuery);\n } // ./ /users/123 => /users/123\n // ../ /users/123 => /users\n // ../.. /users/123 => /\n // ../../one /a/b/c/d => /a/b/one\n // .././one /a/b/c/d => /a/b/c/one\n\n\n var allSegments = baseSegments.concat(toSegments);\n var segments = [];\n\n for (var i = 0, l = allSegments.length; i < l; i++) {\n var segment = allSegments[i];\n if (segment === "..") segments.pop();else if (segment !== ".") segments.push(segment);\n }\n\n return addQuery("/" + segments.join("/"), toQuery);\n}; ////////////////////////////////////////////////////////////////////////////////\n// insertParams(path, params)\n\n\nvar insertParams = function insertParams(path, params) {\n var _path$split = path.split("?"),\n pathBase = _path$split[0],\n _path$split$ = _path$split[1],\n query = _path$split$ === undefined ? "" : _path$split$;\n\n var segments = segmentize(pathBase);\n var constructedPath = "/" + segments.map(function (segment) {\n var match = paramRe.exec(segment);\n return match ? params[match[1]] : segment;\n }).join("/");\n var _params$location = params.location;\n _params$location = _params$location === undefined ? {} : _params$location;\n var _params$location$sear = _params$location.search,\n search = _params$location$sear === undefined ? "" : _params$location$sear;\n var searchSplit = search.split("?")[1] || "";\n constructedPath = addQuery(constructedPath, query, searchSplit);\n return constructedPath;\n};\n\nvar validateRedirect = function validateRedirect(from, to) {\n var filter = function filter(segment) {\n return isDynamic(segment);\n };\n\n var fromString = segmentize(from).filter(filter).sort().join("/");\n var toString = segmentize(to).filter(filter).sort().join("/");\n return fromString === toString;\n}; ////////////////////////////////////////////////////////////////////////////////\n// Junk\n\n\nvar paramRe = /^:(.+)/;\nvar SEGMENT_POINTS = 4;\nvar STATIC_POINTS = 3;\nvar DYNAMIC_POINTS = 2;\nvar SPLAT_PENALTY = 1;\nvar ROOT_POINTS = 1;\n\nvar isRootSegment = function isRootSegment(segment) {\n return segment === "";\n};\n\nvar isDynamic = function isDynamic(segment) {\n return paramRe.test(segment);\n};\n\nvar isSplat = function isSplat(segment) {\n return segment && segment[0] === "*";\n};\n\nvar rankRoute = function rankRoute(route, index) {\n var score = route.default ? 0 : segmentize(route.path).reduce(function (score, segment) {\n score += SEGMENT_POINTS;\n if (isRootSegment(segment)) score += ROOT_POINTS;else if (isDynamic(segment)) score += DYNAMIC_POINTS;else if (isSplat(segment)) score -= SEGMENT_POINTS + SPLAT_PENALTY;else score += STATIC_POINTS;\n return score;\n }, 0);\n return {\n route: route,\n score: score,\n index: index\n };\n};\n\nvar rankRoutes = function rankRoutes(routes) {\n return routes.map(rankRoute).sort(function (a, b) {\n return a.score < b.score ? 1 : a.score > b.score ? -1 : a.index - b.index;\n });\n};\n\nvar segmentize = function segmentize(uri) {\n return uri // strip starting/ending slashes\n .replace(/(^\\/+|\\/+$)/g, "").split("/");\n};\n\nvar addQuery = function addQuery(pathname) {\n for (var _len = arguments.length, query = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n query[_key - 1] = arguments[_key];\n }\n\n query = query.filter(function (q) {\n return q && q.length > 0;\n });\n return pathname + (query && query.length > 0 ? "?" + query.join("&") : "");\n};\n\nvar reservedNames = ["uri", "path"];\n/**\n * Shallow compares two objects.\n * @param {Object} obj1 The first object to compare.\n * @param {Object} obj2 The second object to compare.\n */\n\nvar shallowCompare = function shallowCompare(obj1, obj2) {\n var obj1Keys = Object.keys(obj1);\n return obj1Keys.length === Object.keys(obj2).length && obj1Keys.every(function (key) {\n return obj2.hasOwnProperty(key) && obj1[key] === obj2[key];\n });\n}; ////////////////////////////////////////////////////////////////////////////////\n\n\nexports.startsWith = startsWith;\nexports.pick = pick;\nexports.match = match;\nexports.resolve = resolve;\nexports.insertParams = insertParams;\nexports.validateRedirect = validateRedirect;\nexports.shallowCompare = shallowCompare;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AZ2F0c2J5anMvcmVhY2gtcm91dGVyL2xpYi91dGlscy5qcz9hNDIyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhOztBQUViLGtCQUFrQjtBQUNsQixzQkFBc0IsR0FBRyx3QkFBd0IsR0FBRyxvQkFBb0IsR0FBRyxlQUFlLEdBQUcsYUFBYSxHQUFHLFlBQVksR0FBRyxrQkFBa0I7O0FBRTlJLGlCQUFpQixtQkFBTyxDQUFDLElBQVc7O0FBRXBDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEOzs7QUFHQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsb0NBQW9DLE9BQU87QUFDM0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsVUFBVSxhQUFhO0FBQ3ZCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsOEJBQThCLE1BQXFDLEdBQUcsQ0FBdUs7QUFDN087QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFO0FBQ0Y7OztBQUdBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLEVBQUUsVUFBVSxRQUFRO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLDhDQUE4Qzs7QUFFOUM7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQSx5Q0FBeUMsT0FBTztBQUNoRDtBQUNBLHlDQUF5QztBQUN6Qzs7QUFFQTtBQUNBLEVBQUU7QUFDRjs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLHdEQUF3RDtBQUN4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EscURBQXFELHFEQUFxRCxtRUFBbUU7QUFDN0s7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHFGQUFxRixhQUFhO0FBQ2xHO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsRUFBRTs7O0FBR0Ysa0JBQWtCO0FBQ2xCLFlBQVk7QUFDWixhQUFhO0FBQ2IsZUFBZTtBQUNmLG9CQUFvQjtBQUNwQix3QkFBd0I7QUFDeEIsc0JBQXNCIiwiZmlsZSI6IjIwOTguanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuc2hhbGxvd0NvbXBhcmUgPSBleHBvcnRzLnZhbGlkYXRlUmVkaXJlY3QgPSBleHBvcnRzLmluc2VydFBhcmFtcyA9IGV4cG9ydHMucmVzb2x2ZSA9IGV4cG9ydHMubWF0Y2ggPSBleHBvcnRzLnBpY2sgPSBleHBvcnRzLnN0YXJ0c1dpdGggPSB1bmRlZmluZWQ7XG5cbnZhciBfaW52YXJpYW50ID0gcmVxdWlyZShcImludmFyaWFudFwiKTtcblxudmFyIF9pbnZhcmlhbnQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaW52YXJpYW50KTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHtcbiAgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHtcbiAgICBkZWZhdWx0OiBvYmpcbiAgfTtcbn0gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIHN0YXJ0c1dpdGgoc3RyaW5nLCBzZWFyY2gpIC0gQ2hlY2sgaWYgYHN0cmluZ2Agc3RhcnRzIHdpdGggYHNlYXJjaGBcblxuXG52YXIgc3RhcnRzV2l0aCA9IGZ1bmN0aW9uIHN0YXJ0c1dpdGgoc3RyaW5nLCBzZWFyY2gpIHtcbiAgcmV0dXJuIHN0cmluZy5zdWJzdHIoMCwgc2VhcmNoLmxlbmd0aCkgPT09IHNlYXJjaDtcbn07IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBwaWNrKHJvdXRlcywgdXJpKVxuLy9cbi8vIFJhbmtzIGFuZCBwaWNrcyB0aGUgYmVzdCByb3V0ZSB0byBtYXRjaC4gRWFjaCBzZWdtZW50IGdldHMgdGhlIGhpZ2hlc3Rcbi8vIGFtb3VudCBvZiBwb2ludHMsIHRoZW4gdGhlIHR5cGUgb2Ygc2VnbWVudCBnZXRzIGFuIGFkZGl0aW9uYWwgYW1vdW50IG9mXG4vLyBwb2ludHMgd2hlcmVcbi8vXG4vLyAgICAgc3RhdGljID4gZHluYW1pYyA+IHNwbGF0ID4gcm9vdFxuLy9cbi8vIFRoaXMgd2F5IHdlIGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgdGhlIG9yZGVyIG9mIG91ciByb3V0ZXMsIGxldCB0aGVcbi8vIGNvbXB1dGVycyBkbyBpdC5cbi8vXG4vLyBBIHJvdXRlIGxvb2tzIGxpa2UgdGhpc1xuLy9cbi8vICAgICB7IHBhdGgsIGRlZmF1bHQsIHZhbHVlIH1cbi8vXG4vLyBBbmQgYSByZXR1cm5lZCBtYXRjaCBsb29rcyBsaWtlOlxuLy9cbi8vICAgICB7IHJvdXRlLCBwYXJhbXMsIHVyaSB9XG4vL1xuLy8gSSBrbm93LCBJIHNob3VsZCB1c2UgVHlwZVNjcmlwdCBub3QgY29tbWVudHMgZm9yIHRoZXNlIHR5cGVzLlxuXG5cbnZhciBwaWNrID0gZnVuY3Rpb24gcGljayhyb3V0ZXMsIHVyaSkge1xuICB2YXIgbWF0Y2ggPSB2b2lkIDA7XG4gIHZhciBkZWZhdWx0XyA9IHZvaWQgMDtcblxuICB2YXIgX3VyaSRzcGxpdCA9IHVyaS5zcGxpdChcIj9cIiksXG4gICAgICB1cmlQYXRobmFtZSA9IF91cmkkc3BsaXRbMF07XG5cbiAgdmFyIHVyaVNlZ21lbnRzID0gc2VnbWVudGl6ZSh1cmlQYXRobmFtZSk7XG4gIHZhciBpc1Jvb3RVcmkgPSB1cmlTZWdtZW50c1swXSA9PT0gXCJcIjtcbiAgdmFyIHJhbmtlZCA9IHJhbmtSb3V0ZXMocm91dGVzKTtcblxuICBmb3IgKHZhciBpID0gMCwgbCA9IHJhbmtlZC5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICB2YXIgbWlzc2VkID0gZmFsc2U7XG4gICAgdmFyIHJvdXRlID0gcmFua2VkW2ldLnJvdXRlO1xuXG4gICAgaWYgKHJvdXRlLmRlZmF1bHQpIHtcbiAgICAgIGRlZmF1bHRfID0ge1xuICAgICAgICByb3V0ZTogcm91dGUsXG4gICAgICAgIHBhcmFtczoge30sXG4gICAgICAgIHVyaTogdXJpXG4gICAgICB9O1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgdmFyIHJvdXRlU2VnbWVudHMgPSBzZWdtZW50aXplKHJvdXRlLnBhdGgpO1xuICAgIHZhciBwYXJhbXMgPSB7fTtcbiAgICB2YXIgbWF4ID0gTWF0aC5tYXgodXJpU2VnbWVudHMubGVuZ3RoLCByb3V0ZVNlZ21lbnRzLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gMDtcblxuICAgIGZvciAoOyBpbmRleCA8IG1heDsgaW5kZXgrKykge1xuICAgICAgdmFyIHJvdXRlU2VnbWVudCA9IHJvdXRlU2VnbWVudHNbaW5kZXhdO1xuICAgICAgdmFyIHVyaVNlZ21lbnQgPSB1cmlTZWdtZW50c1tpbmRleF07XG5cbiAgICAgIGlmIChpc1NwbGF0KHJvdXRlU2VnbWVudCkpIHtcbiAgICAgICAgLy8gSGl0IGEgc3BsYXQsIGp1c3QgZ3JhYiB0aGUgcmVzdCwgYW5kIHJldHVybiBhIG1hdGNoXG4gICAgICAgIC8vIHVyaTogICAvZmlsZXMvZG9jdW1lbnRzL3dvcmtcbiAgICAgICAgLy8gcm91dGU6IC9maWxlcy8qXG4gICAgICAgIHZhciBwYXJhbSA9IHJvdXRlU2VnbWVudC5zbGljZSgxKSB8fCBcIipcIjtcbiAgICAgICAgcGFyYW1zW3BhcmFtXSA9IHVyaVNlZ21lbnRzLnNsaWNlKGluZGV4KS5tYXAoZGVjb2RlVVJJQ29tcG9uZW50KS5qb2luKFwiL1wiKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmICh1cmlTZWdtZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gVVJJIGlzIHNob3J0ZXIgdGhhbiB0aGUgcm91dGUsIG5vIG1hdGNoXG4gICAgICAgIC8vIHVyaTogICAvdXNlcnNcbiAgICAgICAgLy8gcm91dGU6IC91c2Vycy86dXNlcklkXG4gICAgICAgIG1pc3NlZCA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICB2YXIgZHluYW1pY01hdGNoID0gcGFyYW1SZS5leGVjKHJvdXRlU2VnbWVudCk7XG5cbiAgICAgIGlmIChkeW5hbWljTWF0Y2ggJiYgIWlzUm9vdFVyaSkge1xuICAgICAgICB2YXIgbWF0Y2hJc05vdFJlc2VydmVkID0gcmVzZXJ2ZWROYW1lcy5pbmRleE9mKGR5bmFtaWNNYXRjaFsxXSkgPT09IC0xO1xuICAgICAgICAhbWF0Y2hJc05vdFJlc2VydmVkID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gKDAsIF9pbnZhcmlhbnQyLmRlZmF1bHQpKGZhbHNlLCBcIjxSb3V0ZXI+IGR5bmFtaWMgc2VnbWVudCBcXFwiXCIgKyBkeW5hbWljTWF0Y2hbMV0gKyBcIlxcXCIgaXMgYSByZXNlcnZlZCBuYW1lLiBQbGVhc2UgdXNlIGEgZGlmZmVyZW50IG5hbWUgaW4gcGF0aCBcXFwiXCIgKyByb3V0ZS5wYXRoICsgXCJcXFwiLlwiKSA6ICgwLCBfaW52YXJpYW50Mi5kZWZhdWx0KShmYWxzZSkgOiB2b2lkIDA7XG4gICAgICAgIHZhciB2YWx1ZSA9IGRlY29kZVVSSUNvbXBvbmVudCh1cmlTZWdtZW50KTtcbiAgICAgICAgcGFyYW1zW2R5bmFtaWNNYXRjaFsxXV0gPSB2YWx1ZTtcbiAgICAgIH0gZWxzZSBpZiAocm91dGVTZWdtZW50ICE9PSB1cmlTZWdtZW50KSB7XG4gICAgICAgIC8vIEN1cnJlbnQgc2VnbWVudHMgZG9uJ3QgbWF0Y2gsIG5vdCBkeW5hbWljLCBub3Qgc3BsYXQsIHNvIG5vIG1hdGNoXG4gICAgICAgIC8vIHVyaTogICAvdXNlcnMvMTIzL3NldHRpbmdzXG4gICAgICAgIC8vIHJvdXRlOiAvdXNlcnMvOmlkL3Byb2ZpbGVcbiAgICAgICAgbWlzc2VkID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFtaXNzZWQpIHtcbiAgICAgIG1hdGNoID0ge1xuICAgICAgICByb3V0ZTogcm91dGUsXG4gICAgICAgIHBhcmFtczogcGFyYW1zLFxuICAgICAgICB1cmk6IFwiL1wiICsgdXJpU2VnbWVudHMuc2xpY2UoMCwgaW5kZXgpLmpvaW4oXCIvXCIpXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1hdGNoIHx8IGRlZmF1bHRfIHx8IG51bGw7XG59OyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gbWF0Y2gocGF0aCwgdXJpKSAtIE1hdGNoZXMganVzdCBvbmUgcGF0aCB0byBhIHVyaSwgYWxzbyBsb2xcblxuXG52YXIgbWF0Y2ggPSBmdW5jdGlvbiBtYXRjaChwYXRoLCB1cmkpIHtcbiAgcmV0dXJuIHBpY2soW3tcbiAgICBwYXRoOiBwYXRoXG4gIH1dLCB1cmkpO1xufTsgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIHJlc29sdmUodG8sIGJhc2VwYXRoKVxuLy9cbi8vIFJlc29sdmVzIFVSSXMgYXMgdGhvdWdoIGV2ZXJ5IHBhdGggaXMgYSBkaXJlY3RvcnksIG5vIGZpbGVzLiAgUmVsYXRpdmUgVVJJc1xuLy8gaW4gdGhlIGJyb3dzZXIgY2FuIGZlZWwgYXdrd2FyZCBiZWNhdXNlIG5vdCBvbmx5IGNhbiB5b3UgYmUgXCJpbiBhIGRpcmVjdG9yeVwiXG4vLyB5b3UgY2FuIGJlIFwiYXQgYSBmaWxlXCIsIHRvby4gRm9yIGV4YW1wbGVcbi8vXG4vLyAgICAgYnJvd3NlclNwZWNSZXNvbHZlKCdmb28nLCAnL2Jhci8nKSA9PiAvYmFyL2Zvb1xuLy8gICAgIGJyb3dzZXJTcGVjUmVzb2x2ZSgnZm9vJywgJy9iYXInKSA9PiAvZm9vXG4vL1xuLy8gQnV0IG9uIHRoZSBjb21tYW5kIGxpbmUgb2YgYSBmaWxlIHN5c3RlbSwgaXQncyBub3QgYXMgY29tcGxpY2F0ZWQsIHlvdSBjYW4ndFxuLy8gYGNkYCBmcm9tIGEgZmlsZSwgb25seSBkaXJlY3Rvcmllcy4gIFRoaXMgd2F5LCBsaW5rcyBoYXZlIHRvIGtub3cgbGVzcyBhYm91dFxuLy8gdGhlaXIgY3VycmVudCBwYXRoLiBUbyBnbyBkZWVwZXIgeW91IGNhbiBkbyB0aGlzOlxuLy9cbi8vICAgICA8TGluayB0bz1cImRlZXBlclwiLz5cbi8vICAgICAvLyBpbnN0ZWFkIG9mXG4vLyAgICAgPExpbmsgdG89YHske3Byb3BzLnVyaX0vZGVlcGVyfWAvPlxuLy9cbi8vIEp1c3QgbGlrZSBgY2RgLCBpZiB5b3Ugd2FudCB0byBnbyBkZWVwZXIgZnJvbSB0aGUgY29tbWFuZCBsaW5lLCB5b3UgZG8gdGhpczpcbi8vXG4vLyAgICAgY2QgZGVlcGVyXG4vLyAgICAgIyBub3Rcbi8vICAgICBjZCAkKHB3ZCkvZGVlcGVyXG4vL1xuLy8gQnkgdHJlYXRpbmcgZXZlcnkgcGF0aCBhcyBhIGRpcmVjdG9yeSwgbGlua2luZyB0byByZWxhdGl2ZSBwYXRocyBzaG91bGRcbi8vIHJlcXVpcmUgbGVzcyBjb250ZXh0dWFsIGluZm9ybWF0aW9uIGFuZCAoZmluZ2VycyBjcm9zc2VkKSBiZSBtb3JlIGludHVpdGl2ZS5cblxuXG52YXIgcmVzb2x2ZSA9IGZ1bmN0aW9uIHJlc29sdmUodG8sIGJhc2UpIHtcbiAgLy8gL2Zvby9iYXIsIC9iYXovcXV4ID0+IC9mb28vYmFyXG4gIGlmIChzdGFydHNXaXRoKHRvLCBcIi9cIikpIHtcbiAgICByZXR1cm4gdG87XG4gIH1cblxuICB2YXIgX3RvJHNwbGl0ID0gdG8uc3BsaXQoXCI/XCIpLFxuICAgICAgdG9QYXRobmFtZSA9IF90byRzcGxpdFswXSxcbiAgICAgIHRvUXVlcnkgPSBfdG8kc3BsaXRbMV07XG5cbiAgdmFyIF9iYXNlJHNwbGl0ID0gYmFzZS5zcGxpdChcIj9cIiksXG4gICAgICBiYXNlUGF0aG5hbWUgPSBfYmFzZSRzcGxpdFswXTtcblxuICB2YXIgdG9TZWdtZW50cyA9IHNlZ21lbnRpemUodG9QYXRobmFtZSk7XG4gIHZhciBiYXNlU2VnbWVudHMgPSBzZWdtZW50aXplKGJhc2VQYXRobmFtZSk7IC8vID9hPWIsIC91c2Vycz9iPWMgPT4gL3VzZXJzP2E9YlxuXG4gIGlmICh0b1NlZ21lbnRzWzBdID09PSBcIlwiKSB7XG4gICAgcmV0dXJuIGFkZFF1ZXJ5KGJhc2VQYXRobmFtZSwgdG9RdWVyeSk7XG4gIH0gLy8gcHJvZmlsZSwgL3VzZXJzLzc4OSA9PiAvdXNlcnMvNzg5L3Byb2ZpbGVcblxuXG4gIGlmICghc3RhcnRzV2l0aCh0b1NlZ21lbnRzWzBdLCBcIi5cIikpIHtcbiAgICB2YXIgcGF0aG5hbWUgPSBiYXNlU2VnbWVudHMuY29uY2F0KHRvU2VnbWVudHMpLmpvaW4oXCIvXCIpO1xuICAgIHJldHVybiBhZGRRdWVyeSgoYmFzZVBhdGhuYW1lID09PSBcIi9cIiA/IFwiXCIgOiBcIi9cIikgKyBwYXRobmFtZSwgdG9RdWVyeSk7XG4gIH0gLy8gLi8gICAgICAgICAvdXNlcnMvMTIzICA9PiAgL3VzZXJzLzEyM1xuICAvLyAuLi8gICAgICAgIC91c2Vycy8xMjMgID0+ICAvdXNlcnNcbiAgLy8gLi4vLi4gICAgICAvdXNlcnMvMTIzICA9PiAgL1xuICAvLyAuLi8uLi9vbmUgIC9hL2IvYy9kICAgID0+ICAvYS9iL29uZVxuICAvLyAuLi8uL29uZSAgIC9hL2IvYy9kICAgID0+ICAvYS9iL2Mvb25lXG5cblxuICB2YXIgYWxsU2VnbWVudHMgPSBiYXNlU2VnbWVudHMuY29uY2F0KHRvU2VnbWVudHMpO1xuICB2YXIgc2VnbWVudHMgPSBbXTtcblxuICBmb3IgKHZhciBpID0gMCwgbCA9IGFsbFNlZ21lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIHZhciBzZWdtZW50ID0gYWxsU2VnbWVudHNbaV07XG4gICAgaWYgKHNlZ21lbnQgPT09IFwiLi5cIikgc2VnbWVudHMucG9wKCk7ZWxzZSBpZiAoc2VnbWVudCAhPT0gXCIuXCIpIHNlZ21lbnRzLnB1c2goc2VnbWVudCk7XG4gIH1cblxuICByZXR1cm4gYWRkUXVlcnkoXCIvXCIgKyBzZWdtZW50cy5qb2luKFwiL1wiKSwgdG9RdWVyeSk7XG59OyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gaW5zZXJ0UGFyYW1zKHBhdGgsIHBhcmFtcylcblxuXG52YXIgaW5zZXJ0UGFyYW1zID0gZnVuY3Rpb24gaW5zZXJ0UGFyYW1zKHBhdGgsIHBhcmFtcykge1xuICB2YXIgX3BhdGgkc3BsaXQgPSBwYXRoLnNwbGl0KFwiP1wiKSxcbiAgICAgIHBhdGhCYXNlID0gX3BhdGgkc3BsaXRbMF0sXG4gICAgICBfcGF0aCRzcGxpdCQgPSBfcGF0aCRzcGxpdFsxXSxcbiAgICAgIHF1ZXJ5ID0gX3BhdGgkc3BsaXQkID09PSB1bmRlZmluZWQgPyBcIlwiIDogX3BhdGgkc3BsaXQkO1xuXG4gIHZhciBzZWdtZW50cyA9IHNlZ21lbnRpemUocGF0aEJhc2UpO1xuICB2YXIgY29uc3RydWN0ZWRQYXRoID0gXCIvXCIgKyBzZWdtZW50cy5tYXAoZnVuY3Rpb24gKHNlZ21lbnQpIHtcbiAgICB2YXIgbWF0Y2ggPSBwYXJhbVJlLmV4ZWMoc2VnbWVudCk7XG4gICAgcmV0dXJuIG1hdGNoID8gcGFyYW1zW21hdGNoWzFdXSA6IHNlZ21lbnQ7XG4gIH0pLmpvaW4oXCIvXCIpO1xuICB2YXIgX3BhcmFtcyRsb2NhdGlvbiA9IHBhcmFtcy5sb2NhdGlvbjtcbiAgX3BhcmFtcyRsb2NhdGlvbiA9IF9wYXJhbXMkbG9jYXRpb24gPT09IHVuZGVmaW5lZCA/IHt9IDogX3BhcmFtcyRsb2NhdGlvbjtcbiAgdmFyIF9wYXJhbXMkbG9jYXRpb24kc2VhciA9IF9wYXJhbXMkbG9jYXRpb24uc2VhcmNoLFxuICAgICAgc2VhcmNoID0gX3BhcmFtcyRsb2NhdGlvbiRzZWFyID09PSB1bmRlZmluZWQgPyBcIlwiIDogX3BhcmFtcyRsb2NhdGlvbiRzZWFyO1xuICB2YXIgc2VhcmNoU3BsaXQgPSBzZWFyY2guc3BsaXQoXCI/XCIpWzFdIHx8IFwiXCI7XG4gIGNvbnN0cnVjdGVkUGF0aCA9IGFkZFF1ZXJ5KGNvbnN0cnVjdGVkUGF0aCwgcXVlcnksIHNlYXJjaFNwbGl0KTtcbiAgcmV0dXJuIGNvbnN0cnVjdGVkUGF0aDtcbn07XG5cbnZhciB2YWxpZGF0ZVJlZGlyZWN0ID0gZnVuY3Rpb24gdmFsaWRhdGVSZWRpcmVjdChmcm9tLCB0bykge1xuICB2YXIgZmlsdGVyID0gZnVuY3Rpb24gZmlsdGVyKHNlZ21lbnQpIHtcbiAgICByZXR1cm4gaXNEeW5hbWljKHNlZ21lbnQpO1xuICB9O1xuXG4gIHZhciBmcm9tU3RyaW5nID0gc2VnbWVudGl6ZShmcm9tKS5maWx0ZXIoZmlsdGVyKS5zb3J0KCkuam9pbihcIi9cIik7XG4gIHZhciB0b1N0cmluZyA9IHNlZ21lbnRpemUodG8pLmZpbHRlcihmaWx0ZXIpLnNvcnQoKS5qb2luKFwiL1wiKTtcbiAgcmV0dXJuIGZyb21TdHJpbmcgPT09IHRvU3RyaW5nO1xufTsgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIEp1bmtcblxuXG52YXIgcGFyYW1SZSA9IC9eOiguKykvO1xudmFyIFNFR01FTlRfUE9JTlRTID0gNDtcbnZhciBTVEFUSUNfUE9JTlRTID0gMztcbnZhciBEWU5BTUlDX1BPSU5UUyA9IDI7XG52YXIgU1BMQVRfUEVOQUxUWSA9IDE7XG52YXIgUk9PVF9QT0lOVFMgPSAxO1xuXG52YXIgaXNSb290U2VnbWVudCA9IGZ1bmN0aW9uIGlzUm9vdFNlZ21lbnQoc2VnbWVudCkge1xuICByZXR1cm4gc2VnbWVudCA9PT0gXCJcIjtcbn07XG5cbnZhciBpc0R5bmFtaWMgPSBmdW5jdGlvbiBpc0R5bmFtaWMoc2VnbWVudCkge1xuICByZXR1cm4gcGFyYW1SZS50ZXN0KHNlZ21lbnQpO1xufTtcblxudmFyIGlzU3BsYXQgPSBmdW5jdGlvbiBpc1NwbGF0KHNlZ21lbnQpIHtcbiAgcmV0dXJuIHNlZ21lbnQgJiYgc2VnbWVudFswXSA9PT0gXCIqXCI7XG59O1xuXG52YXIgcmFua1JvdXRlID0gZnVuY3Rpb24gcmFua1JvdXRlKHJvdXRlLCBpbmRleCkge1xuICB2YXIgc2NvcmUgPSByb3V0ZS5kZWZhdWx0ID8gMCA6IHNlZ21lbnRpemUocm91dGUucGF0aCkucmVkdWNlKGZ1bmN0aW9uIChzY29yZSwgc2VnbWVudCkge1xuICAgIHNjb3JlICs9IFNFR01FTlRfUE9JTlRTO1xuICAgIGlmIChpc1Jvb3RTZWdtZW50KHNlZ21lbnQpKSBzY29yZSArPSBST09UX1BPSU5UUztlbHNlIGlmIChpc0R5bmFtaWMoc2VnbWVudCkpIHNjb3JlICs9IERZTkFNSUNfUE9JTlRTO2Vsc2UgaWYgKGlzU3BsYXQoc2VnbWVudCkpIHNjb3JlIC09IFNFR01FTlRfUE9JTlRTICsgU1BMQVRfUEVOQUxUWTtlbHNlIHNjb3JlICs9IFNUQVRJQ19QT0lOVFM7XG4gICAgcmV0dXJuIHNjb3JlO1xuICB9LCAwKTtcbiAgcmV0dXJuIHtcbiAgICByb3V0ZTogcm91dGUsXG4gICAgc2NvcmU6IHNjb3JlLFxuICAgIGluZGV4OiBpbmRleFxuICB9O1xufTtcblxudmFyIHJhbmtSb3V0ZXMgPSBmdW5jdGlvbiByYW5rUm91dGVzKHJvdXRlcykge1xuICByZXR1cm4gcm91dGVzLm1hcChyYW5rUm91dGUpLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICByZXR1cm4gYS5zY29yZSA8IGIuc2NvcmUgPyAxIDogYS5zY29yZSA+IGIuc2NvcmUgPyAtMSA6IGEuaW5kZXggLSBiLmluZGV4O1xuICB9KTtcbn07XG5cbnZhciBzZWdtZW50aXplID0gZnVuY3Rpb24gc2VnbWVudGl6ZSh1cmkpIHtcbiAgcmV0dXJuIHVyaSAvLyBzdHJpcCBzdGFydGluZy9lbmRpbmcgc2xhc2hlc1xuICAucmVwbGFjZSgvKF5cXC8rfFxcLyskKS9nLCBcIlwiKS5zcGxpdChcIi9cIik7XG59O1xuXG52YXIgYWRkUXVlcnkgPSBmdW5jdGlvbiBhZGRRdWVyeShwYXRobmFtZSkge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgcXVlcnkgPSBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgcXVlcnlbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgcXVlcnkgPSBxdWVyeS5maWx0ZXIoZnVuY3Rpb24gKHEpIHtcbiAgICByZXR1cm4gcSAmJiBxLmxlbmd0aCA+IDA7XG4gIH0pO1xuICByZXR1cm4gcGF0aG5hbWUgKyAocXVlcnkgJiYgcXVlcnkubGVuZ3RoID4gMCA/IFwiP1wiICsgcXVlcnkuam9pbihcIiZcIikgOiBcIlwiKTtcbn07XG5cbnZhciByZXNlcnZlZE5hbWVzID0gW1widXJpXCIsIFwicGF0aFwiXTtcbi8qKlxuICogU2hhbGxvdyBjb21wYXJlcyB0d28gb2JqZWN0cy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmoxIFRoZSBmaXJzdCBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmoyIFRoZSBzZWNvbmQgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKi9cblxudmFyIHNoYWxsb3dDb21wYXJlID0gZnVuY3Rpb24gc2hhbGxvd0NvbXBhcmUob2JqMSwgb2JqMikge1xuICB2YXIgb2JqMUtleXMgPSBPYmplY3Qua2V5cyhvYmoxKTtcbiAgcmV0dXJuIG9iajFLZXlzLmxlbmd0aCA9PT0gT2JqZWN0LmtleXMob2JqMikubGVuZ3RoICYmIG9iajFLZXlzLmV2ZXJ5KGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gb2JqMi5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIG9iajFba2V5XSA9PT0gb2JqMltrZXldO1xuICB9KTtcbn07IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cblxuZXhwb3J0cy5zdGFydHNXaXRoID0gc3RhcnRzV2l0aDtcbmV4cG9ydHMucGljayA9IHBpY2s7XG5leHBvcnRzLm1hdGNoID0gbWF0Y2g7XG5leHBvcnRzLnJlc29sdmUgPSByZXNvbHZlO1xuZXhwb3J0cy5pbnNlcnRQYXJhbXMgPSBpbnNlcnRQYXJhbXM7XG5leHBvcnRzLnZhbGlkYXRlUmVkaXJlY3QgPSB2YWxpZGF0ZVJlZGlyZWN0O1xuZXhwb3J0cy5zaGFsbG93Q29tcGFyZSA9IHNoYWxsb3dDb21wYXJlOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2098\n')},9771:function(__unused_webpack_module,exports){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", ({\n value: true\n}));\nexports.default = void 0;\n\nfunction startsWith(string, target, position) {\n var length = string.length;\n position = position == null ? 0 : position;\n\n if (position < 0) {\n position = 0;\n } else if (position > length) {\n position = length;\n }\n\n target = "".concat(target);\n return string.slice(position, position + target.length) == target;\n}\n\nfunction getBrowserLang() {\n if (typeof window === "undefined") {\n return null;\n }\n\n var lang = window.navigator.languages && window.navigator.languages[0] || window.navigator.language || window.navigator.browserLanguage || window.navigator.userLanguage || window.navigator.systemLanguage || null;\n return lang;\n}\n\nfunction normalizeCode(code) {\n return code.toLowerCase().replace(/-/, "_");\n}\n\nfunction getPreferredLanguage(options) {\n if (!options) {\n return getBrowserLang();\n }\n\n var languages = options.languages,\n fallback = options.fallback;\n\n if (!options.languages) {\n return fallback;\n } // some browsers report language as en-US instead of en_US\n\n\n var browserLanguage = normalizeCode(getBrowserLang());\n\n if (!browserLanguage) {\n return fallback;\n }\n\n var match = languages.filter(function (lang) {\n return normalizeCode(lang) === browserLanguage;\n });\n\n if (match.length > 0) {\n return match[0] || fallback;\n } // en == en_US\n\n\n var matchCodeOnly = languages.filter(function (lang) {\n return startsWith(browserLanguage, lang);\n });\n return matchCodeOnly[0] || fallback;\n}\n\nvar _default = getPreferredLanguage;\nexports.default = _default;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9icm93c2VyLWxhbmcvZGlzdC9pbmRleC5qcz9iNmY0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhOztBQUViLDhDQUE2QztBQUM3QztBQUNBLENBQUMsRUFBQztBQUNGLGVBQWU7O0FBRWY7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBLGVBQWUiLCJmaWxlIjoiOTc3MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuXG5mdW5jdGlvbiBzdGFydHNXaXRoKHN0cmluZywgdGFyZ2V0LCBwb3NpdGlvbikge1xuICB2YXIgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aDtcbiAgcG9zaXRpb24gPSBwb3NpdGlvbiA9PSBudWxsID8gMCA6IHBvc2l0aW9uO1xuXG4gIGlmIChwb3NpdGlvbiA8IDApIHtcbiAgICBwb3NpdGlvbiA9IDA7XG4gIH0gZWxzZSBpZiAocG9zaXRpb24gPiBsZW5ndGgpIHtcbiAgICBwb3NpdGlvbiA9IGxlbmd0aDtcbiAgfVxuXG4gIHRhcmdldCA9IFwiXCIuY29uY2F0KHRhcmdldCk7XG4gIHJldHVybiBzdHJpbmcuc2xpY2UocG9zaXRpb24sIHBvc2l0aW9uICsgdGFyZ2V0Lmxlbmd0aCkgPT0gdGFyZ2V0O1xufVxuXG5mdW5jdGlvbiBnZXRCcm93c2VyTGFuZygpIHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBsYW5nID0gd2luZG93Lm5hdmlnYXRvci5sYW5ndWFnZXMgJiYgd2luZG93Lm5hdmlnYXRvci5sYW5ndWFnZXNbMF0gfHwgd2luZG93Lm5hdmlnYXRvci5sYW5ndWFnZSB8fCB3aW5kb3cubmF2aWdhdG9yLmJyb3dzZXJMYW5ndWFnZSB8fCB3aW5kb3cubmF2aWdhdG9yLnVzZXJMYW5ndWFnZSB8fCB3aW5kb3cubmF2aWdhdG9yLnN5c3RlbUxhbmd1YWdlIHx8IG51bGw7XG4gIHJldHVybiBsYW5nO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVDb2RlKGNvZGUpIHtcbiAgcmV0dXJuIGNvZGUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC8tLywgXCJfXCIpO1xufVxuXG5mdW5jdGlvbiBnZXRQcmVmZXJyZWRMYW5ndWFnZShvcHRpb25zKSB7XG4gIGlmICghb3B0aW9ucykge1xuICAgIHJldHVybiBnZXRCcm93c2VyTGFuZygpO1xuICB9XG5cbiAgdmFyIGxhbmd1YWdlcyA9IG9wdGlvbnMubGFuZ3VhZ2VzLFxuICAgICAgZmFsbGJhY2sgPSBvcHRpb25zLmZhbGxiYWNrO1xuXG4gIGlmICghb3B0aW9ucy5sYW5ndWFnZXMpIHtcbiAgICByZXR1cm4gZmFsbGJhY2s7XG4gIH0gLy8gc29tZSBicm93c2VycyByZXBvcnQgbGFuZ3VhZ2UgYXMgZW4tVVMgaW5zdGVhZCBvZiBlbl9VU1xuXG5cbiAgdmFyIGJyb3dzZXJMYW5ndWFnZSA9IG5vcm1hbGl6ZUNvZGUoZ2V0QnJvd3NlckxhbmcoKSk7XG5cbiAgaWYgKCFicm93c2VyTGFuZ3VhZ2UpIHtcbiAgICByZXR1cm4gZmFsbGJhY2s7XG4gIH1cblxuICB2YXIgbWF0Y2ggPSBsYW5ndWFnZXMuZmlsdGVyKGZ1bmN0aW9uIChsYW5nKSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZUNvZGUobGFuZykgPT09IGJyb3dzZXJMYW5ndWFnZTtcbiAgfSk7XG5cbiAgaWYgKG1hdGNoLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gbWF0Y2hbMF0gfHwgZmFsbGJhY2s7XG4gIH0gLy8gZW4gPT0gZW5fVVNcblxuXG4gIHZhciBtYXRjaENvZGVPbmx5ID0gbGFuZ3VhZ2VzLmZpbHRlcihmdW5jdGlvbiAobGFuZykge1xuICAgIHJldHVybiBzdGFydHNXaXRoKGJyb3dzZXJMYW5ndWFnZSwgbGFuZyk7XG4gIH0pO1xuICByZXR1cm4gbWF0Y2hDb2RlT25seVswXSB8fCBmYWxsYmFjaztcbn1cblxudmFyIF9kZWZhdWx0ID0gZ2V0UHJlZmVycmVkTGFuZ3VhZ2U7XG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9771\n')},6494:function(module){"use strict";eval("\n\nmodule.exports = Object.assign;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9nYXRzYnkvZGlzdC9pbnRlcm5hbC1wbHVnaW5zL2J1bmRsZS1vcHRpbWlzYXRpb25zL3BvbHlmaWxscy9vYmplY3QtYXNzaWduLmpzP2ViZmIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIiLCJmaWxlIjoiNjQ5NC5qcyIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5hc3NpZ247Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///6494\n")},5706:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar reactIs = __webpack_require__(8812);\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\n\n\nvar REACT_STATICS = {\n childContextTypes: true,\n contextType: true,\n contextTypes: true,\n defaultProps: true,\n displayName: true,\n getDefaultProps: true,\n getDerivedStateFromError: true,\n getDerivedStateFromProps: true,\n mixins: true,\n propTypes: true,\n type: true\n};\nvar KNOWN_STATICS = {\n name: true,\n length: true,\n prototype: true,\n caller: true,\n callee: true,\n arguments: true,\n arity: true\n};\nvar FORWARD_REF_STATICS = {\n '$$typeof': true,\n render: true,\n defaultProps: true,\n displayName: true,\n propTypes: true\n};\nvar MEMO_STATICS = {\n '$$typeof': true,\n compare: true,\n defaultProps: true,\n displayName: true,\n propTypes: true,\n type: true\n};\nvar TYPE_STATICS = {};\nTYPE_STATICS[reactIs.ForwardRef] = FORWARD_REF_STATICS;\nTYPE_STATICS[reactIs.Memo] = MEMO_STATICS;\n\nfunction getStatics(component) {\n // React v16.11 and below\n if (reactIs.isMemo(component)) {\n return MEMO_STATICS;\n } // React v16.12 and above\n\n\n return TYPE_STATICS[component['$$typeof']] || REACT_STATICS;\n}\n\nvar defineProperty = Object.defineProperty;\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = Object.prototype;\n\nfunction hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n if (typeof sourceComponent !== 'string') {\n // don't hoist over string (html) components\n if (objectPrototype) {\n var inheritedComponent = getPrototypeOf(sourceComponent);\n\n if (inheritedComponent && inheritedComponent !== objectPrototype) {\n hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n }\n }\n\n var keys = getOwnPropertyNames(sourceComponent);\n\n if (getOwnPropertySymbols) {\n keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n }\n\n var targetStatics = getStatics(targetComponent);\n var sourceStatics = getStatics(sourceComponent);\n\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n\n if (!KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) {\n var descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n\n try {\n // Avoid failures from read-only properties\n defineProperty(targetComponent, key, descriptor);\n } catch (e) {}\n }\n }\n }\n\n return targetComponent;\n}\n\nmodule.exports = hoistNonReactStatics;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9ob2lzdC1ub24tcmVhY3Qtc3RhdGljcy9kaXN0L2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzLmNqcy5qcz83MzFjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhOztBQUViLGNBQWMsbUJBQU8sQ0FBQyxJQUFVO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsbUJBQW1CLGlCQUFpQjtBQUNwQzs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiI1NzA2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgcmVhY3RJcyA9IHJlcXVpcmUoJ3JlYWN0LWlzJyk7XG4vKipcbiAqIENvcHlyaWdodCAyMDE1LCBZYWhvbyEgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5cblxudmFyIFJFQUNUX1NUQVRJQ1MgPSB7XG4gIGNoaWxkQ29udGV4dFR5cGVzOiB0cnVlLFxuICBjb250ZXh0VHlwZTogdHJ1ZSxcbiAgY29udGV4dFR5cGVzOiB0cnVlLFxuICBkZWZhdWx0UHJvcHM6IHRydWUsXG4gIGRpc3BsYXlOYW1lOiB0cnVlLFxuICBnZXREZWZhdWx0UHJvcHM6IHRydWUsXG4gIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvcjogdHJ1ZSxcbiAgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzOiB0cnVlLFxuICBtaXhpbnM6IHRydWUsXG4gIHByb3BUeXBlczogdHJ1ZSxcbiAgdHlwZTogdHJ1ZVxufTtcbnZhciBLTk9XTl9TVEFUSUNTID0ge1xuICBuYW1lOiB0cnVlLFxuICBsZW5ndGg6IHRydWUsXG4gIHByb3RvdHlwZTogdHJ1ZSxcbiAgY2FsbGVyOiB0cnVlLFxuICBjYWxsZWU6IHRydWUsXG4gIGFyZ3VtZW50czogdHJ1ZSxcbiAgYXJpdHk6IHRydWVcbn07XG52YXIgRk9SV0FSRF9SRUZfU1RBVElDUyA9IHtcbiAgJyQkdHlwZW9mJzogdHJ1ZSxcbiAgcmVuZGVyOiB0cnVlLFxuICBkZWZhdWx0UHJvcHM6IHRydWUsXG4gIGRpc3BsYXlOYW1lOiB0cnVlLFxuICBwcm9wVHlwZXM6IHRydWVcbn07XG52YXIgTUVNT19TVEFUSUNTID0ge1xuICAnJCR0eXBlb2YnOiB0cnVlLFxuICBjb21wYXJlOiB0cnVlLFxuICBkZWZhdWx0UHJvcHM6IHRydWUsXG4gIGRpc3BsYXlOYW1lOiB0cnVlLFxuICBwcm9wVHlwZXM6IHRydWUsXG4gIHR5cGU6IHRydWVcbn07XG52YXIgVFlQRV9TVEFUSUNTID0ge307XG5UWVBFX1NUQVRJQ1NbcmVhY3RJcy5Gb3J3YXJkUmVmXSA9IEZPUldBUkRfUkVGX1NUQVRJQ1M7XG5UWVBFX1NUQVRJQ1NbcmVhY3RJcy5NZW1vXSA9IE1FTU9fU1RBVElDUztcblxuZnVuY3Rpb24gZ2V0U3RhdGljcyhjb21wb25lbnQpIHtcbiAgLy8gUmVhY3QgdjE2LjExIGFuZCBiZWxvd1xuICBpZiAocmVhY3RJcy5pc01lbW8oY29tcG9uZW50KSkge1xuICAgIHJldHVybiBNRU1PX1NUQVRJQ1M7XG4gIH0gLy8gUmVhY3QgdjE2LjEyIGFuZCBhYm92ZVxuXG5cbiAgcmV0dXJuIFRZUEVfU1RBVElDU1tjb21wb25lbnRbJyQkdHlwZW9mJ11dIHx8IFJFQUNUX1NUQVRJQ1M7XG59XG5cbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIGdldFByb3RvdHlwZU9mID0gT2JqZWN0LmdldFByb3RvdHlwZU9mO1xudmFyIG9iamVjdFByb3RvdHlwZSA9IE9iamVjdC5wcm90b3R5cGU7XG5cbmZ1bmN0aW9uIGhvaXN0Tm9uUmVhY3RTdGF0aWNzKHRhcmdldENvbXBvbmVudCwgc291cmNlQ29tcG9uZW50LCBibGFja2xpc3QpIHtcbiAgaWYgKHR5cGVvZiBzb3VyY2VDb21wb25lbnQgIT09ICdzdHJpbmcnKSB7XG4gICAgLy8gZG9uJ3QgaG9pc3Qgb3ZlciBzdHJpbmcgKGh0bWwpIGNvbXBvbmVudHNcbiAgICBpZiAob2JqZWN0UHJvdG90eXBlKSB7XG4gICAgICB2YXIgaW5oZXJpdGVkQ29tcG9uZW50ID0gZ2V0UHJvdG90eXBlT2Yoc291cmNlQ29tcG9uZW50KTtcblxuICAgICAgaWYgKGluaGVyaXRlZENvbXBvbmVudCAmJiBpbmhlcml0ZWRDb21wb25lbnQgIT09IG9iamVjdFByb3RvdHlwZSkge1xuICAgICAgICBob2lzdE5vblJlYWN0U3RhdGljcyh0YXJnZXRDb21wb25lbnQsIGluaGVyaXRlZENvbXBvbmVudCwgYmxhY2tsaXN0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIga2V5cyA9IGdldE93blByb3BlcnR5TmFtZXMoc291cmNlQ29tcG9uZW50KTtcblxuICAgIGlmIChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICAgIGtleXMgPSBrZXlzLmNvbmNhdChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlQ29tcG9uZW50KSk7XG4gICAgfVxuXG4gICAgdmFyIHRhcmdldFN0YXRpY3MgPSBnZXRTdGF0aWNzKHRhcmdldENvbXBvbmVudCk7XG4gICAgdmFyIHNvdXJjZVN0YXRpY3MgPSBnZXRTdGF0aWNzKHNvdXJjZUNvbXBvbmVudCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuXG4gICAgICBpZiAoIUtOT1dOX1NUQVRJQ1Nba2V5XSAmJiAhKGJsYWNrbGlzdCAmJiBibGFja2xpc3Rba2V5XSkgJiYgIShzb3VyY2VTdGF0aWNzICYmIHNvdXJjZVN0YXRpY3Nba2V5XSkgJiYgISh0YXJnZXRTdGF0aWNzICYmIHRhcmdldFN0YXRpY3Nba2V5XSkpIHtcbiAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlQ29tcG9uZW50LCBrZXkpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gQXZvaWQgZmFpbHVyZXMgZnJvbSByZWFkLW9ubHkgcHJvcGVydGllc1xuICAgICAgICAgIGRlZmluZVByb3BlcnR5KHRhcmdldENvbXBvbmVudCwga2V5LCBkZXNjcmlwdG9yKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0Q29tcG9uZW50O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhvaXN0Tm9uUmVhY3RTdGF0aWNzOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///5706\n")},165:function(__unused_webpack_module,exports){"use strict";eval('/** @license React v16.13.1\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\nvar b = "function" === typeof Symbol && Symbol.for,\n c = b ? Symbol.for("react.element") : 60103,\n d = b ? Symbol.for("react.portal") : 60106,\n e = b ? Symbol.for("react.fragment") : 60107,\n f = b ? Symbol.for("react.strict_mode") : 60108,\n g = b ? Symbol.for("react.profiler") : 60114,\n h = b ? Symbol.for("react.provider") : 60109,\n k = b ? Symbol.for("react.context") : 60110,\n l = b ? Symbol.for("react.async_mode") : 60111,\n m = b ? Symbol.for("react.concurrent_mode") : 60111,\n n = b ? Symbol.for("react.forward_ref") : 60112,\n p = b ? Symbol.for("react.suspense") : 60113,\n q = b ? Symbol.for("react.suspense_list") : 60120,\n r = b ? Symbol.for("react.memo") : 60115,\n t = b ? Symbol.for("react.lazy") : 60116,\n v = b ? Symbol.for("react.block") : 60121,\n w = b ? Symbol.for("react.fundamental") : 60117,\n x = b ? Symbol.for("react.responder") : 60118,\n y = b ? Symbol.for("react.scope") : 60119;\n\nfunction z(a) {\n if ("object" === typeof a && null !== a) {\n var u = a.$$typeof;\n\n switch (u) {\n case c:\n switch (a = a.type, a) {\n case l:\n case m:\n case e:\n case g:\n case f:\n case p:\n return a;\n\n default:\n switch (a = a && a.$$typeof, a) {\n case k:\n case n:\n case t:\n case r:\n case h:\n return a;\n\n default:\n return u;\n }\n\n }\n\n case d:\n return u;\n }\n }\n}\n\nfunction A(a) {\n return z(a) === m;\n}\n\nexports.AsyncMode = l;\nexports.ConcurrentMode = m;\nexports.ContextConsumer = k;\nexports.ContextProvider = h;\nexports.Element = c;\nexports.ForwardRef = n;\nexports.Fragment = e;\nexports.Lazy = t;\nexports.Memo = r;\nexports.Portal = d;\nexports.Profiler = g;\nexports.StrictMode = f;\nexports.Suspense = p;\n\nexports.isAsyncMode = function (a) {\n return A(a) || z(a) === l;\n};\n\nexports.isConcurrentMode = A;\n\nexports.isContextConsumer = function (a) {\n return z(a) === k;\n};\n\nexports.isContextProvider = function (a) {\n return z(a) === h;\n};\n\nexports.isElement = function (a) {\n return "object" === typeof a && null !== a && a.$$typeof === c;\n};\n\nexports.isForwardRef = function (a) {\n return z(a) === n;\n};\n\nexports.isFragment = function (a) {\n return z(a) === e;\n};\n\nexports.isLazy = function (a) {\n return z(a) === t;\n};\n\nexports.isMemo = function (a) {\n return z(a) === r;\n};\n\nexports.isPortal = function (a) {\n return z(a) === d;\n};\n\nexports.isProfiler = function (a) {\n return z(a) === g;\n};\n\nexports.isStrictMode = function (a) {\n return z(a) === f;\n};\n\nexports.isSuspense = function (a) {\n return z(a) === p;\n};\n\nexports.isValidElementType = function (a) {\n return "string" === typeof a || "function" === typeof a || a === e || a === m || a === g || a === f || a === p || a === q || "object" === typeof a && null !== a && (a.$$typeof === t || a.$$typeof === r || a.$$typeof === h || a.$$typeof === k || a.$$typeof === n || a.$$typeof === w || a.$$typeof === x || a.$$typeof === y || a.$$typeof === v);\n};\n\nexports.typeOf = z;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9yZWFjdC1pcy9janMvcmVhY3QtaXMucHJvZHVjdGlvbi5taW4uanM/YWQxMiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ2E7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGlCQUFpQjtBQUNqQixzQkFBc0I7QUFDdEIsdUJBQXVCO0FBQ3ZCLHVCQUF1QjtBQUN2QixlQUFlO0FBQ2Ysa0JBQWtCO0FBQ2xCLGdCQUFnQjtBQUNoQixZQUFZO0FBQ1osWUFBWTtBQUNaLGNBQWM7QUFDZCxnQkFBZ0I7QUFDaEIsa0JBQWtCO0FBQ2xCLGdCQUFnQjs7QUFFaEIsbUJBQW1CO0FBQ25CO0FBQ0E7O0FBRUEsd0JBQXdCOztBQUV4Qix5QkFBeUI7QUFDekI7QUFDQTs7QUFFQSx5QkFBeUI7QUFDekI7QUFDQTs7QUFFQSxpQkFBaUI7QUFDakI7QUFDQTs7QUFFQSxvQkFBb0I7QUFDcEI7QUFDQTs7QUFFQSxrQkFBa0I7QUFDbEI7QUFDQTs7QUFFQSxjQUFjO0FBQ2Q7QUFDQTs7QUFFQSxjQUFjO0FBQ2Q7QUFDQTs7QUFFQSxnQkFBZ0I7QUFDaEI7QUFDQTs7QUFFQSxrQkFBa0I7QUFDbEI7QUFDQTs7QUFFQSxvQkFBb0I7QUFDcEI7QUFDQTs7QUFFQSxrQkFBa0I7QUFDbEI7QUFDQTs7QUFFQSwwQkFBMEI7QUFDMUI7QUFDQTs7QUFFQSxjQUFjIiwiZmlsZSI6IjE2NS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBAbGljZW5zZSBSZWFjdCB2MTYuMTMuMVxuICogcmVhY3QtaXMucHJvZHVjdGlvbi5taW4uanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgYiA9IFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIFN5bWJvbCAmJiBTeW1ib2wuZm9yLFxuICAgIGMgPSBiID8gU3ltYm9sLmZvcihcInJlYWN0LmVsZW1lbnRcIikgOiA2MDEwMyxcbiAgICBkID0gYiA/IFN5bWJvbC5mb3IoXCJyZWFjdC5wb3J0YWxcIikgOiA2MDEwNixcbiAgICBlID0gYiA/IFN5bWJvbC5mb3IoXCJyZWFjdC5mcmFnbWVudFwiKSA6IDYwMTA3LFxuICAgIGYgPSBiID8gU3ltYm9sLmZvcihcInJlYWN0LnN0cmljdF9tb2RlXCIpIDogNjAxMDgsXG4gICAgZyA9IGIgPyBTeW1ib2wuZm9yKFwicmVhY3QucHJvZmlsZXJcIikgOiA2MDExNCxcbiAgICBoID0gYiA/IFN5bWJvbC5mb3IoXCJyZWFjdC5wcm92aWRlclwiKSA6IDYwMTA5LFxuICAgIGsgPSBiID8gU3ltYm9sLmZvcihcInJlYWN0LmNvbnRleHRcIikgOiA2MDExMCxcbiAgICBsID0gYiA/IFN5bWJvbC5mb3IoXCJyZWFjdC5hc3luY19tb2RlXCIpIDogNjAxMTEsXG4gICAgbSA9IGIgPyBTeW1ib2wuZm9yKFwicmVhY3QuY29uY3VycmVudF9tb2RlXCIpIDogNjAxMTEsXG4gICAgbiA9IGIgPyBTeW1ib2wuZm9yKFwicmVhY3QuZm9yd2FyZF9yZWZcIikgOiA2MDExMixcbiAgICBwID0gYiA/IFN5bWJvbC5mb3IoXCJyZWFjdC5zdXNwZW5zZVwiKSA6IDYwMTEzLFxuICAgIHEgPSBiID8gU3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlX2xpc3RcIikgOiA2MDEyMCxcbiAgICByID0gYiA/IFN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vXCIpIDogNjAxMTUsXG4gICAgdCA9IGIgPyBTeW1ib2wuZm9yKFwicmVhY3QubGF6eVwiKSA6IDYwMTE2LFxuICAgIHYgPSBiID8gU3ltYm9sLmZvcihcInJlYWN0LmJsb2NrXCIpIDogNjAxMjEsXG4gICAgdyA9IGIgPyBTeW1ib2wuZm9yKFwicmVhY3QuZnVuZGFtZW50YWxcIikgOiA2MDExNyxcbiAgICB4ID0gYiA/IFN5bWJvbC5mb3IoXCJyZWFjdC5yZXNwb25kZXJcIikgOiA2MDExOCxcbiAgICB5ID0gYiA/IFN5bWJvbC5mb3IoXCJyZWFjdC5zY29wZVwiKSA6IDYwMTE5O1xuXG5mdW5jdGlvbiB6KGEpIHtcbiAgaWYgKFwib2JqZWN0XCIgPT09IHR5cGVvZiBhICYmIG51bGwgIT09IGEpIHtcbiAgICB2YXIgdSA9IGEuJCR0eXBlb2Y7XG5cbiAgICBzd2l0Y2ggKHUpIHtcbiAgICAgIGNhc2UgYzpcbiAgICAgICAgc3dpdGNoIChhID0gYS50eXBlLCBhKSB7XG4gICAgICAgICAgY2FzZSBsOlxuICAgICAgICAgIGNhc2UgbTpcbiAgICAgICAgICBjYXNlIGU6XG4gICAgICAgICAgY2FzZSBnOlxuICAgICAgICAgIGNhc2UgZjpcbiAgICAgICAgICBjYXNlIHA6XG4gICAgICAgICAgICByZXR1cm4gYTtcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBzd2l0Y2ggKGEgPSBhICYmIGEuJCR0eXBlb2YsIGEpIHtcbiAgICAgICAgICAgICAgY2FzZSBrOlxuICAgICAgICAgICAgICBjYXNlIG46XG4gICAgICAgICAgICAgIGNhc2UgdDpcbiAgICAgICAgICAgICAgY2FzZSByOlxuICAgICAgICAgICAgICBjYXNlIGg6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGE7XG5cbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICAgIGNhc2UgZDpcbiAgICAgICAgcmV0dXJuIHU7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIEEoYSkge1xuICByZXR1cm4geihhKSA9PT0gbTtcbn1cblxuZXhwb3J0cy5Bc3luY01vZGUgPSBsO1xuZXhwb3J0cy5Db25jdXJyZW50TW9kZSA9IG07XG5leHBvcnRzLkNvbnRleHRDb25zdW1lciA9IGs7XG5leHBvcnRzLkNvbnRleHRQcm92aWRlciA9IGg7XG5leHBvcnRzLkVsZW1lbnQgPSBjO1xuZXhwb3J0cy5Gb3J3YXJkUmVmID0gbjtcbmV4cG9ydHMuRnJhZ21lbnQgPSBlO1xuZXhwb3J0cy5MYXp5ID0gdDtcbmV4cG9ydHMuTWVtbyA9IHI7XG5leHBvcnRzLlBvcnRhbCA9IGQ7XG5leHBvcnRzLlByb2ZpbGVyID0gZztcbmV4cG9ydHMuU3RyaWN0TW9kZSA9IGY7XG5leHBvcnRzLlN1c3BlbnNlID0gcDtcblxuZXhwb3J0cy5pc0FzeW5jTW9kZSA9IGZ1bmN0aW9uIChhKSB7XG4gIHJldHVybiBBKGEpIHx8IHooYSkgPT09IGw7XG59O1xuXG5leHBvcnRzLmlzQ29uY3VycmVudE1vZGUgPSBBO1xuXG5leHBvcnRzLmlzQ29udGV4dENvbnN1bWVyID0gZnVuY3Rpb24gKGEpIHtcbiAgcmV0dXJuIHooYSkgPT09IGs7XG59O1xuXG5leHBvcnRzLmlzQ29udGV4dFByb3ZpZGVyID0gZnVuY3Rpb24gKGEpIHtcbiAgcmV0dXJuIHooYSkgPT09IGg7XG59O1xuXG5leHBvcnRzLmlzRWxlbWVudCA9IGZ1bmN0aW9uIChhKSB7XG4gIHJldHVybiBcIm9iamVjdFwiID09PSB0eXBlb2YgYSAmJiBudWxsICE9PSBhICYmIGEuJCR0eXBlb2YgPT09IGM7XG59O1xuXG5leHBvcnRzLmlzRm9yd2FyZFJlZiA9IGZ1bmN0aW9uIChhKSB7XG4gIHJldHVybiB6KGEpID09PSBuO1xufTtcblxuZXhwb3J0cy5pc0ZyYWdtZW50ID0gZnVuY3Rpb24gKGEpIHtcbiAgcmV0dXJuIHooYSkgPT09IGU7XG59O1xuXG5leHBvcnRzLmlzTGF6eSA9IGZ1bmN0aW9uIChhKSB7XG4gIHJldHVybiB6KGEpID09PSB0O1xufTtcblxuZXhwb3J0cy5pc01lbW8gPSBmdW5jdGlvbiAoYSkge1xuICByZXR1cm4geihhKSA9PT0gcjtcbn07XG5cbmV4cG9ydHMuaXNQb3J0YWwgPSBmdW5jdGlvbiAoYSkge1xuICByZXR1cm4geihhKSA9PT0gZDtcbn07XG5cbmV4cG9ydHMuaXNQcm9maWxlciA9IGZ1bmN0aW9uIChhKSB7XG4gIHJldHVybiB6KGEpID09PSBnO1xufTtcblxuZXhwb3J0cy5pc1N0cmljdE1vZGUgPSBmdW5jdGlvbiAoYSkge1xuICByZXR1cm4geihhKSA9PT0gZjtcbn07XG5cbmV4cG9ydHMuaXNTdXNwZW5zZSA9IGZ1bmN0aW9uIChhKSB7XG4gIHJldHVybiB6KGEpID09PSBwO1xufTtcblxuZXhwb3J0cy5pc1ZhbGlkRWxlbWVudFR5cGUgPSBmdW5jdGlvbiAoYSkge1xuICByZXR1cm4gXCJzdHJpbmdcIiA9PT0gdHlwZW9mIGEgfHwgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgYSB8fCBhID09PSBlIHx8IGEgPT09IG0gfHwgYSA9PT0gZyB8fCBhID09PSBmIHx8IGEgPT09IHAgfHwgYSA9PT0gcSB8fCBcIm9iamVjdFwiID09PSB0eXBlb2YgYSAmJiBudWxsICE9PSBhICYmIChhLiQkdHlwZW9mID09PSB0IHx8IGEuJCR0eXBlb2YgPT09IHIgfHwgYS4kJHR5cGVvZiA9PT0gaCB8fCBhLiQkdHlwZW9mID09PSBrIHx8IGEuJCR0eXBlb2YgPT09IG4gfHwgYS4kJHR5cGVvZiA9PT0gdyB8fCBhLiQkdHlwZW9mID09PSB4IHx8IGEuJCR0eXBlb2YgPT09IHkgfHwgYS4kJHR5cGVvZiA9PT0gdik7XG59O1xuXG5leHBvcnRzLnR5cGVPZiA9IHo7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///165\n')},8812:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nif (true) {\n module.exports = __webpack_require__(165);\n} else {}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9yZWFjdC1pcy9pbmRleC5qcz8zOTgxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhOztBQUViLElBQUksSUFBcUM7QUFDekMsRUFBRSx5Q0FBNEQ7QUFDOUQsQ0FBQyxNQUFNIiwiZmlsZSI6Ijg4MTIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanMnKTtcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8812\n")},9108:function(module){"use strict";eval("\n\nfunction shallowEqualObjects(objA, objB) {\n if (objA === objB) {\n return true;\n }\n\n if (!objA || !objB) {\n return false;\n }\n\n var aKeys = Object.keys(objA);\n var bKeys = Object.keys(objB);\n var len = aKeys.length;\n\n if (bKeys.length !== len) {\n return false;\n }\n\n for (var i = 0; i < len; i++) {\n var key = aKeys[i];\n\n if (objA[key] !== objB[key] || !Object.prototype.hasOwnProperty.call(objB, key)) {\n return false;\n }\n }\n\n return true;\n}\n\nmodule.exports = shallowEqualObjects;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9zaGFsbG93LWVxdWFsL29iamVjdHMvaW5kZXguanM/MzYxMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxpQkFBaUIsU0FBUztBQUMxQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6IjkxMDguanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIHNoYWxsb3dFcXVhbE9iamVjdHMob2JqQSwgb2JqQikge1xuICBpZiAob2JqQSA9PT0gb2JqQikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKCFvYmpBIHx8ICFvYmpCKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIGFLZXlzID0gT2JqZWN0LmtleXMob2JqQSk7XG4gIHZhciBiS2V5cyA9IE9iamVjdC5rZXlzKG9iakIpO1xuICB2YXIgbGVuID0gYUtleXMubGVuZ3RoO1xuXG4gIGlmIChiS2V5cy5sZW5ndGggIT09IGxlbikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICB2YXIga2V5ID0gYUtleXNbaV07XG5cbiAgICBpZiAob2JqQVtrZXldICE9PSBvYmpCW2tleV0gfHwgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmpCLCBrZXkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2hhbGxvd0VxdWFsT2JqZWN0czsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9108\n")},8037:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval('var __webpack_unused_export__;\n\n\nvar _interopRequireDefault = __webpack_require__(5318);\n\n__webpack_unused_export__ = true;\nexports.dq = withPrefix;\nexports.mc = withAssetPrefix;\nexports.c4 = exports.ZP = void 0;\n\nvar _objectWithoutPropertiesLoose2 = _interopRequireDefault(__webpack_require__(7316));\n\nvar _assertThisInitialized2 = _interopRequireDefault(__webpack_require__(1506));\n\nvar _inheritsLoose2 = _interopRequireDefault(__webpack_require__(5354));\n\nvar _extends2 = _interopRequireDefault(__webpack_require__(7154));\n\nvar _propTypes = _interopRequireDefault(__webpack_require__(5697));\n\nvar _react = _interopRequireDefault(__webpack_require__(7294));\n\nvar _reachRouter = __webpack_require__(9499);\n\nvar _utils = __webpack_require__(2098);\n\nvar _parsePath = __webpack_require__(1752);\n\nexports.cP = _parsePath.parsePath;\nvar _excluded = ["to", "getProps", "onClick", "onMouseEnter", "activeClassName", "activeStyle", "innerRef", "partiallyActive", "state", "replace", "_location"];\n\nvar isAbsolutePath = function isAbsolutePath(path) {\n return path === null || path === void 0 ? void 0 : path.startsWith("/");\n};\n\nfunction withPrefix(path, prefix) {\n var _ref, _prefix;\n\n if (prefix === void 0) {\n prefix = getGlobalBasePrefix();\n }\n\n if (!isLocalLink(path)) {\n return path;\n }\n\n if (path.startsWith("./") || path.startsWith("../")) {\n return path;\n }\n\n var base = (_ref = (_prefix = prefix) !== null && _prefix !== void 0 ? _prefix : getGlobalPathPrefix()) !== null && _ref !== void 0 ? _ref : "/";\n return "" + (base !== null && base !== void 0 && base.endsWith("/") ? base.slice(0, -1) : base) + (path.startsWith("/") ? path : "/" + path);\n} // These global values are wrapped in typeof clauses to ensure the values exist.\n// This is especially problematic in unit testing of this component.\n\n\nvar getGlobalPathPrefix = function getGlobalPathPrefix() {\n return false ? 0 : "/justice40-tool/main";\n};\n\nvar getGlobalBasePrefix = function getGlobalBasePrefix() {\n return false ? 0 : "/justice40-tool/main";\n};\n\nvar isLocalLink = function isLocalLink(path) {\n return path && !path.startsWith("http://") && !path.startsWith("https://") && !path.startsWith("//");\n};\n\nfunction withAssetPrefix(path) {\n return withPrefix(path, getGlobalPathPrefix());\n}\n\nfunction absolutify(path, current) {\n // If it\'s already absolute, return as-is\n if (isAbsolutePath(path)) {\n return path;\n }\n\n return (0, _utils.resolve)(path, current);\n}\n\nvar rewriteLinkPath = function rewriteLinkPath(path, relativeTo) {\n if (typeof path === "number") {\n return path;\n }\n\n if (!isLocalLink(path)) {\n return path;\n }\n\n return isAbsolutePath(path) ? withPrefix(path) : absolutify(path, relativeTo);\n};\n\nvar NavLinkPropTypes = {\n activeClassName: _propTypes.default.string,\n activeStyle: _propTypes.default.object,\n partiallyActive: _propTypes.default.bool\n}; // Set up IntersectionObserver\n\nvar createIntersectionObserver = function createIntersectionObserver(el, cb) {\n var io = new window.IntersectionObserver(function (entries) {\n entries.forEach(function (entry) {\n if (el === entry.target) {\n // Check if element is within viewport, remove listener, destroy observer, and run link callback.\n // MSEdge doesn\'t currently support isIntersecting, so also test for an intersectionRatio > 0\n if (entry.isIntersecting || entry.intersectionRatio > 0) {\n io.unobserve(el);\n io.disconnect();\n cb();\n }\n }\n });\n }); // Add element to the observer\n\n io.observe(el);\n return {\n instance: io,\n el: el\n };\n};\n\nfunction GatsbyLinkLocationWrapper(props) {\n return /*#__PURE__*/_react.default.createElement(_reachRouter.Location, null, function (_ref2) {\n var location = _ref2.location;\n return /*#__PURE__*/_react.default.createElement(GatsbyLink, (0, _extends2.default)({}, props, {\n _location: location\n }));\n });\n}\n\nvar GatsbyLink = /*#__PURE__*/function (_React$Component) {\n (0, _inheritsLoose2.default)(GatsbyLink, _React$Component);\n\n function GatsbyLink(props) {\n var _this;\n\n _this = _React$Component.call(this, props) || this; // Default to no support for IntersectionObserver\n\n _this.defaultGetProps = function (_ref3) {\n var isPartiallyCurrent = _ref3.isPartiallyCurrent,\n isCurrent = _ref3.isCurrent;\n\n if (_this.props.partiallyActive ? isPartiallyCurrent : isCurrent) {\n return {\n className: [_this.props.className, _this.props.activeClassName].filter(Boolean).join(" "),\n style: (0, _extends2.default)({}, _this.props.style, _this.props.activeStyle)\n };\n }\n\n return null;\n };\n\n var IOSupported = false;\n\n if (typeof window !== "undefined" && window.IntersectionObserver) {\n IOSupported = true;\n }\n\n _this.state = {\n IOSupported: IOSupported\n };\n _this.handleRef = _this.handleRef.bind((0, _assertThisInitialized2.default)(_this));\n return _this;\n }\n\n var _proto = GatsbyLink.prototype;\n\n _proto._prefetch = function _prefetch() {\n var currentPath = window.location.pathname; // reach router should have the correct state\n\n if (this.props._location && this.props._location.pathname) {\n currentPath = this.props._location.pathname;\n }\n\n var rewrittenPath = rewriteLinkPath(this.props.to, currentPath);\n var newPathName = (0, _parsePath.parsePath)(rewrittenPath).pathname; // Prefech is used to speed up next navigations. When you use it on the current navigation,\n // there could be a race-condition where Chrome uses the stale data instead of waiting for the network to complete\n\n if (currentPath !== newPathName) {\n ___loader.enqueue(newPathName);\n }\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps, prevState) {\n // Preserve non IO functionality if no support\n if (this.props.to !== prevProps.to && !this.state.IOSupported) {\n this._prefetch();\n }\n };\n\n _proto.componentDidMount = function componentDidMount() {\n // Preserve non IO functionality if no support\n if (!this.state.IOSupported) {\n this._prefetch();\n }\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n if (!this.io) {\n return;\n }\n\n var _this$io = this.io,\n instance = _this$io.instance,\n el = _this$io.el;\n instance.unobserve(el);\n instance.disconnect();\n };\n\n _proto.handleRef = function handleRef(ref) {\n var _this2 = this;\n\n if (this.props.innerRef && this.props.innerRef.hasOwnProperty("current")) {\n this.props.innerRef.current = ref;\n } else if (this.props.innerRef) {\n this.props.innerRef(ref);\n }\n\n if (this.state.IOSupported && ref) {\n // If IO supported and element reference found, setup Observer functionality\n this.io = createIntersectionObserver(ref, function () {\n _this2._prefetch();\n });\n }\n };\n\n _proto.render = function render() {\n var _this3 = this;\n\n var _this$props = this.props,\n to = _this$props.to,\n _this$props$getProps = _this$props.getProps,\n getProps = _this$props$getProps === void 0 ? this.defaultGetProps : _this$props$getProps,\n _onClick = _this$props.onClick,\n _onMouseEnter = _this$props.onMouseEnter,\n $activeClassName = _this$props.activeClassName,\n $activeStyle = _this$props.activeStyle,\n $innerRef = _this$props.innerRef,\n partiallyActive = _this$props.partiallyActive,\n state = _this$props.state,\n replace = _this$props.replace,\n _location = _this$props._location,\n rest = (0, _objectWithoutPropertiesLoose2.default)(_this$props, _excluded);\n\n if (false) {}\n\n var prefixedTo = rewriteLinkPath(to, _location.pathname);\n\n if (!isLocalLink(prefixedTo)) {\n return /*#__PURE__*/_react.default.createElement("a", (0, _extends2.default)({\n href: prefixedTo\n }, rest));\n }\n\n return /*#__PURE__*/_react.default.createElement(_reachRouter.Link, (0, _extends2.default)({\n to: prefixedTo,\n state: state,\n getProps: getProps,\n innerRef: this.handleRef,\n onMouseEnter: function onMouseEnter(e) {\n if (_onMouseEnter) {\n _onMouseEnter(e);\n }\n\n ___loader.hovering((0, _parsePath.parsePath)(prefixedTo).pathname);\n },\n onClick: function onClick(e) {\n if (_onClick) {\n _onClick(e);\n }\n\n if (e.button === 0 && // ignore right clicks\n !_this3.props.target && // let browser handle "target=_blank"\n !e.defaultPrevented && // onClick prevented default\n !e.metaKey && // ignore clicks with modifier keys...\n !e.altKey && !e.ctrlKey && !e.shiftKey) {\n e.preventDefault();\n var shouldReplace = replace;\n\n var isCurrent = encodeURI(prefixedTo) === _location.pathname;\n\n if (typeof replace !== "boolean" && isCurrent) {\n shouldReplace = true;\n } // Make sure the necessary scripts and data are\n // loaded before continuing.\n\n\n window.___navigate(prefixedTo, {\n state: state,\n replace: shouldReplace\n });\n }\n\n return true;\n }\n }, rest));\n };\n\n return GatsbyLink;\n}(_react.default.Component);\n\nGatsbyLink.propTypes = (0, _extends2.default)({}, NavLinkPropTypes, {\n onClick: _propTypes.default.func,\n to: _propTypes.default.string.isRequired,\n replace: _propTypes.default.bool,\n state: _propTypes.default.object\n});\n\nvar _default = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {\n return /*#__PURE__*/_react.default.createElement(GatsbyLinkLocationWrapper, (0, _extends2.default)({\n innerRef: ref\n }, props));\n});\n\nexports.ZP = _default;\n\nvar navigate = function navigate(to, options) {\n window.___navigate(rewriteLinkPath(to, window.location.pathname), options);\n};\n\nexports.c4 = navigate;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9nYXRzYnktbGluay9pbmRleC5qcz9mOTkwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBYTs7QUFFYiw2QkFBNkIsbUJBQU8sQ0FBQyxJQUE4Qzs7QUFFbkYseUJBQWtCO0FBQ2xCLFVBQWtCO0FBQ2xCLFVBQXVCO0FBQ3ZCLFVBQWdCLEdBQUcsVUFBZTs7QUFFbEMsNERBQTRELG1CQUFPLENBQUMsSUFBcUQ7O0FBRXpILHFEQUFxRCxtQkFBTyxDQUFDLElBQThDOztBQUUzRyw2Q0FBNkMsbUJBQU8sQ0FBQyxJQUFzQzs7QUFFM0YsdUNBQXVDLG1CQUFPLENBQUMsSUFBZ0M7O0FBRS9FLHdDQUF3QyxtQkFBTyxDQUFDLElBQVk7O0FBRTVELG9DQUFvQyxtQkFBTyxDQUFDLElBQU87O0FBRW5ELG1CQUFtQixtQkFBTyxDQUFDLElBQXdCOztBQUVuRCxhQUFhLG1CQUFPLENBQUMsSUFBa0M7O0FBRXZELGlCQUFpQixtQkFBTyxDQUFDLElBQWM7O0FBRXZDLFVBQWlCO0FBQ2pCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7OztBQUdBO0FBQ0EsU0FBUyxNQUFxQyxHQUFHLENBQW9FLEdBQUcsc0JBQWU7QUFDdkk7O0FBRUE7QUFDQSxTQUFTLE1BQXFDLEdBQUcsQ0FBZ0UsR0FBRyxzQkFBYTtBQUNqSTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUcsRUFBRTs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsMEZBQTBGO0FBQzFGO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsdURBQXVEOztBQUV2RDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsMENBQTBDO0FBQzFDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsK0NBQStDOztBQUUvQztBQUNBO0FBQ0E7O0FBRUE7QUFDQSx3RUFBd0U7QUFDeEU7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsUUFBUSxLQUF5RCxFQUFFLEVBRTlEOztBQUVMOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLFdBQVc7QUFDWDs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQSxDQUFDOztBQUVELGdEQUFnRDtBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7O0FBRUQsVUFBZTs7QUFFZjtBQUNBO0FBQ0E7O0FBRUEsVUFBZ0IiLCJmaWxlIjoiODAzNy5qcyIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMud2l0aFByZWZpeCA9IHdpdGhQcmVmaXg7XG5leHBvcnRzLndpdGhBc3NldFByZWZpeCA9IHdpdGhBc3NldFByZWZpeDtcbmV4cG9ydHMubmF2aWdhdGUgPSBleHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5cbnZhciBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIikpO1xuXG52YXIgX2Fzc2VydFRoaXNJbml0aWFsaXplZDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2Fzc2VydFRoaXNJbml0aWFsaXplZFwiKSk7XG5cbnZhciBfaW5oZXJpdHNMb29zZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2luaGVyaXRzTG9vc2VcIikpO1xuXG52YXIgX2V4dGVuZHMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9leHRlbmRzXCIpKTtcblxudmFyIF9wcm9wVHlwZXMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJwcm9wLXR5cGVzXCIpKTtcblxudmFyIF9yZWFjdCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcInJlYWN0XCIpKTtcblxudmFyIF9yZWFjaFJvdXRlciA9IHJlcXVpcmUoXCJAZ2F0c2J5anMvcmVhY2gtcm91dGVyXCIpO1xuXG52YXIgX3V0aWxzID0gcmVxdWlyZShcIkBnYXRzYnlqcy9yZWFjaC1yb3V0ZXIvbGliL3V0aWxzXCIpO1xuXG52YXIgX3BhcnNlUGF0aCA9IHJlcXVpcmUoXCIuL3BhcnNlLXBhdGhcIik7XG5cbmV4cG9ydHMucGFyc2VQYXRoID0gX3BhcnNlUGF0aC5wYXJzZVBhdGg7XG52YXIgX2V4Y2x1ZGVkID0gW1widG9cIiwgXCJnZXRQcm9wc1wiLCBcIm9uQ2xpY2tcIiwgXCJvbk1vdXNlRW50ZXJcIiwgXCJhY3RpdmVDbGFzc05hbWVcIiwgXCJhY3RpdmVTdHlsZVwiLCBcImlubmVyUmVmXCIsIFwicGFydGlhbGx5QWN0aXZlXCIsIFwic3RhdGVcIiwgXCJyZXBsYWNlXCIsIFwiX2xvY2F0aW9uXCJdO1xuXG52YXIgaXNBYnNvbHV0ZVBhdGggPSBmdW5jdGlvbiBpc0Fic29sdXRlUGF0aChwYXRoKSB7XG4gIHJldHVybiBwYXRoID09PSBudWxsIHx8IHBhdGggPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBhdGguc3RhcnRzV2l0aChcIi9cIik7XG59O1xuXG5mdW5jdGlvbiB3aXRoUHJlZml4KHBhdGgsIHByZWZpeCkge1xuICB2YXIgX3JlZiwgX3ByZWZpeDtcblxuICBpZiAocHJlZml4ID09PSB2b2lkIDApIHtcbiAgICBwcmVmaXggPSBnZXRHbG9iYWxCYXNlUHJlZml4KCk7XG4gIH1cblxuICBpZiAoIWlzTG9jYWxMaW5rKHBhdGgpKSB7XG4gICAgcmV0dXJuIHBhdGg7XG4gIH1cblxuICBpZiAocGF0aC5zdGFydHNXaXRoKFwiLi9cIikgfHwgcGF0aC5zdGFydHNXaXRoKFwiLi4vXCIpKSB7XG4gICAgcmV0dXJuIHBhdGg7XG4gIH1cblxuICB2YXIgYmFzZSA9IChfcmVmID0gKF9wcmVmaXggPSBwcmVmaXgpICE9PSBudWxsICYmIF9wcmVmaXggIT09IHZvaWQgMCA/IF9wcmVmaXggOiBnZXRHbG9iYWxQYXRoUHJlZml4KCkpICE9PSBudWxsICYmIF9yZWYgIT09IHZvaWQgMCA/IF9yZWYgOiBcIi9cIjtcbiAgcmV0dXJuIFwiXCIgKyAoYmFzZSAhPT0gbnVsbCAmJiBiYXNlICE9PSB2b2lkIDAgJiYgYmFzZS5lbmRzV2l0aChcIi9cIikgPyBiYXNlLnNsaWNlKDAsIC0xKSA6IGJhc2UpICsgKHBhdGguc3RhcnRzV2l0aChcIi9cIikgPyBwYXRoIDogXCIvXCIgKyBwYXRoKTtcbn0gLy8gVGhlc2UgZ2xvYmFsIHZhbHVlcyBhcmUgd3JhcHBlZCBpbiB0eXBlb2YgY2xhdXNlcyB0byBlbnN1cmUgdGhlIHZhbHVlcyBleGlzdC5cbi8vIFRoaXMgaXMgZXNwZWNpYWxseSBwcm9ibGVtYXRpYyBpbiB1bml0IHRlc3Rpbmcgb2YgdGhpcyBjb21wb25lbnQuXG5cblxudmFyIGdldEdsb2JhbFBhdGhQcmVmaXggPSBmdW5jdGlvbiBnZXRHbG9iYWxQYXRoUHJlZml4KCkge1xuICByZXR1cm4gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gdHlwZW9mIF9fUEFUSF9QUkVGSVhfXyAhPT0gXCJ1bmRlZmluZWRcIiA/IF9fUEFUSF9QUkVGSVhfXyA6IHVuZGVmaW5lZCA6IF9fUEFUSF9QUkVGSVhfXztcbn07XG5cbnZhciBnZXRHbG9iYWxCYXNlUHJlZml4ID0gZnVuY3Rpb24gZ2V0R2xvYmFsQmFzZVByZWZpeCgpIHtcbiAgcmV0dXJuIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHR5cGVvZiBfX0JBU0VfUEFUSF9fICE9PSBcInVuZGVmaW5lZFwiID8gX19CQVNFX1BBVEhfXyA6IHVuZGVmaW5lZCA6IF9fQkFTRV9QQVRIX187XG59O1xuXG52YXIgaXNMb2NhbExpbmsgPSBmdW5jdGlvbiBpc0xvY2FsTGluayhwYXRoKSB7XG4gIHJldHVybiBwYXRoICYmICFwYXRoLnN0YXJ0c1dpdGgoXCJodHRwOi8vXCIpICYmICFwYXRoLnN0YXJ0c1dpdGgoXCJodHRwczovL1wiKSAmJiAhcGF0aC5zdGFydHNXaXRoKFwiLy9cIik7XG59O1xuXG5mdW5jdGlvbiB3aXRoQXNzZXRQcmVmaXgocGF0aCkge1xuICByZXR1cm4gd2l0aFByZWZpeChwYXRoLCBnZXRHbG9iYWxQYXRoUHJlZml4KCkpO1xufVxuXG5mdW5jdGlvbiBhYnNvbHV0aWZ5KHBhdGgsIGN1cnJlbnQpIHtcbiAgLy8gSWYgaXQncyBhbHJlYWR5IGFic29sdXRlLCByZXR1cm4gYXMtaXNcbiAgaWYgKGlzQWJzb2x1dGVQYXRoKHBhdGgpKSB7XG4gICAgcmV0dXJuIHBhdGg7XG4gIH1cblxuICByZXR1cm4gKDAsIF91dGlscy5yZXNvbHZlKShwYXRoLCBjdXJyZW50KTtcbn1cblxudmFyIHJld3JpdGVMaW5rUGF0aCA9IGZ1bmN0aW9uIHJld3JpdGVMaW5rUGF0aChwYXRoLCByZWxhdGl2ZVRvKSB7XG4gIGlmICh0eXBlb2YgcGF0aCA9PT0gXCJudW1iZXJcIikge1xuICAgIHJldHVybiBwYXRoO1xuICB9XG5cbiAgaWYgKCFpc0xvY2FsTGluayhwYXRoKSkge1xuICAgIHJldHVybiBwYXRoO1xuICB9XG5cbiAgcmV0dXJuIGlzQWJzb2x1dGVQYXRoKHBhdGgpID8gd2l0aFByZWZpeChwYXRoKSA6IGFic29sdXRpZnkocGF0aCwgcmVsYXRpdmVUbyk7XG59O1xuXG52YXIgTmF2TGlua1Byb3BUeXBlcyA9IHtcbiAgYWN0aXZlQ2xhc3NOYW1lOiBfcHJvcFR5cGVzLmRlZmF1bHQuc3RyaW5nLFxuICBhY3RpdmVTdHlsZTogX3Byb3BUeXBlcy5kZWZhdWx0Lm9iamVjdCxcbiAgcGFydGlhbGx5QWN0aXZlOiBfcHJvcFR5cGVzLmRlZmF1bHQuYm9vbFxufTsgLy8gU2V0IHVwIEludGVyc2VjdGlvbk9ic2VydmVyXG5cbnZhciBjcmVhdGVJbnRlcnNlY3Rpb25PYnNlcnZlciA9IGZ1bmN0aW9uIGNyZWF0ZUludGVyc2VjdGlvbk9ic2VydmVyKGVsLCBjYikge1xuICB2YXIgaW8gPSBuZXcgd2luZG93LkludGVyc2VjdGlvbk9ic2VydmVyKGZ1bmN0aW9uIChlbnRyaWVzKSB7XG4gICAgZW50cmllcy5mb3JFYWNoKGZ1bmN0aW9uIChlbnRyeSkge1xuICAgICAgaWYgKGVsID09PSBlbnRyeS50YXJnZXQpIHtcbiAgICAgICAgLy8gQ2hlY2sgaWYgZWxlbWVudCBpcyB3aXRoaW4gdmlld3BvcnQsIHJlbW92ZSBsaXN0ZW5lciwgZGVzdHJveSBvYnNlcnZlciwgYW5kIHJ1biBsaW5rIGNhbGxiYWNrLlxuICAgICAgICAvLyBNU0VkZ2UgZG9lc24ndCBjdXJyZW50bHkgc3VwcG9ydCBpc0ludGVyc2VjdGluZywgc28gYWxzbyB0ZXN0IGZvciAgYW4gaW50ZXJzZWN0aW9uUmF0aW8gPiAwXG4gICAgICAgIGlmIChlbnRyeS5pc0ludGVyc2VjdGluZyB8fCBlbnRyeS5pbnRlcnNlY3Rpb25SYXRpbyA+IDApIHtcbiAgICAgICAgICBpby51bm9ic2VydmUoZWwpO1xuICAgICAgICAgIGlvLmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgICBjYigpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH0pOyAvLyBBZGQgZWxlbWVudCB0byB0aGUgb2JzZXJ2ZXJcblxuICBpby5vYnNlcnZlKGVsKTtcbiAgcmV0dXJuIHtcbiAgICBpbnN0YW5jZTogaW8sXG4gICAgZWw6IGVsXG4gIH07XG59O1xuXG5mdW5jdGlvbiBHYXRzYnlMaW5rTG9jYXRpb25XcmFwcGVyKHByb3BzKSB7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX3JlYWN0LmRlZmF1bHQuY3JlYXRlRWxlbWVudChfcmVhY2hSb3V0ZXIuTG9jYXRpb24sIG51bGwsIGZ1bmN0aW9uIChfcmVmMikge1xuICAgIHZhciBsb2NhdGlvbiA9IF9yZWYyLmxvY2F0aW9uO1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovX3JlYWN0LmRlZmF1bHQuY3JlYXRlRWxlbWVudChHYXRzYnlMaW5rLCAoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHt9LCBwcm9wcywge1xuICAgICAgX2xvY2F0aW9uOiBsb2NhdGlvblxuICAgIH0pKTtcbiAgfSk7XG59XG5cbnZhciBHYXRzYnlMaW5rID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gICgwLCBfaW5oZXJpdHNMb29zZTIuZGVmYXVsdCkoR2F0c2J5TGluaywgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gR2F0c2J5TGluayhwcm9wcykge1xuICAgIHZhciBfdGhpcztcblxuICAgIF90aGlzID0gX1JlYWN0JENvbXBvbmVudC5jYWxsKHRoaXMsIHByb3BzKSB8fCB0aGlzOyAvLyBEZWZhdWx0IHRvIG5vIHN1cHBvcnQgZm9yIEludGVyc2VjdGlvbk9ic2VydmVyXG5cbiAgICBfdGhpcy5kZWZhdWx0R2V0UHJvcHMgPSBmdW5jdGlvbiAoX3JlZjMpIHtcbiAgICAgIHZhciBpc1BhcnRpYWxseUN1cnJlbnQgPSBfcmVmMy5pc1BhcnRpYWxseUN1cnJlbnQsXG4gICAgICAgICAgaXNDdXJyZW50ID0gX3JlZjMuaXNDdXJyZW50O1xuXG4gICAgICBpZiAoX3RoaXMucHJvcHMucGFydGlhbGx5QWN0aXZlID8gaXNQYXJ0aWFsbHlDdXJyZW50IDogaXNDdXJyZW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY2xhc3NOYW1lOiBbX3RoaXMucHJvcHMuY2xhc3NOYW1lLCBfdGhpcy5wcm9wcy5hY3RpdmVDbGFzc05hbWVdLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKSxcbiAgICAgICAgICBzdHlsZTogKDAsIF9leHRlbmRzMi5kZWZhdWx0KSh7fSwgX3RoaXMucHJvcHMuc3R5bGUsIF90aGlzLnByb3BzLmFjdGl2ZVN0eWxlKVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuXG4gICAgdmFyIElPU3VwcG9ydGVkID0gZmFsc2U7XG5cbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB3aW5kb3cuSW50ZXJzZWN0aW9uT2JzZXJ2ZXIpIHtcbiAgICAgIElPU3VwcG9ydGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIElPU3VwcG9ydGVkOiBJT1N1cHBvcnRlZFxuICAgIH07XG4gICAgX3RoaXMuaGFuZGxlUmVmID0gX3RoaXMuaGFuZGxlUmVmLmJpbmQoKDAsIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQyLmRlZmF1bHQpKF90aGlzKSk7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IEdhdHNieUxpbmsucHJvdG90eXBlO1xuXG4gIF9wcm90by5fcHJlZmV0Y2ggPSBmdW5jdGlvbiBfcHJlZmV0Y2goKSB7XG4gICAgdmFyIGN1cnJlbnRQYXRoID0gd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lOyAvLyByZWFjaCByb3V0ZXIgc2hvdWxkIGhhdmUgdGhlIGNvcnJlY3Qgc3RhdGVcblxuICAgIGlmICh0aGlzLnByb3BzLl9sb2NhdGlvbiAmJiB0aGlzLnByb3BzLl9sb2NhdGlvbi5wYXRobmFtZSkge1xuICAgICAgY3VycmVudFBhdGggPSB0aGlzLnByb3BzLl9sb2NhdGlvbi5wYXRobmFtZTtcbiAgICB9XG5cbiAgICB2YXIgcmV3cml0dGVuUGF0aCA9IHJld3JpdGVMaW5rUGF0aCh0aGlzLnByb3BzLnRvLCBjdXJyZW50UGF0aCk7XG4gICAgdmFyIG5ld1BhdGhOYW1lID0gKDAsIF9wYXJzZVBhdGgucGFyc2VQYXRoKShyZXdyaXR0ZW5QYXRoKS5wYXRobmFtZTsgLy8gUHJlZmVjaCBpcyB1c2VkIHRvIHNwZWVkIHVwIG5leHQgbmF2aWdhdGlvbnMuIFdoZW4geW91IHVzZSBpdCBvbiB0aGUgY3VycmVudCBuYXZpZ2F0aW9uLFxuICAgIC8vIHRoZXJlIGNvdWxkIGJlIGEgcmFjZS1jb25kaXRpb24gd2hlcmUgQ2hyb21lIHVzZXMgdGhlIHN0YWxlIGRhdGEgaW5zdGVhZCBvZiB3YWl0aW5nIGZvciB0aGUgbmV0d29yayB0byBjb21wbGV0ZVxuXG4gICAgaWYgKGN1cnJlbnRQYXRoICE9PSBuZXdQYXRoTmFtZSkge1xuICAgICAgX19fbG9hZGVyLmVucXVldWUobmV3UGF0aE5hbWUpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uY29tcG9uZW50RGlkVXBkYXRlID0gZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKSB7XG4gICAgLy8gUHJlc2VydmUgbm9uIElPIGZ1bmN0aW9uYWxpdHkgaWYgbm8gc3VwcG9ydFxuICAgIGlmICh0aGlzLnByb3BzLnRvICE9PSBwcmV2UHJvcHMudG8gJiYgIXRoaXMuc3RhdGUuSU9TdXBwb3J0ZWQpIHtcbiAgICAgIHRoaXMuX3ByZWZldGNoKCk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5jb21wb25lbnREaWRNb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIC8vIFByZXNlcnZlIG5vbiBJTyBmdW5jdGlvbmFsaXR5IGlmIG5vIHN1cHBvcnRcbiAgICBpZiAoIXRoaXMuc3RhdGUuSU9TdXBwb3J0ZWQpIHtcbiAgICAgIHRoaXMuX3ByZWZldGNoKCk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5jb21wb25lbnRXaWxsVW5tb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIGlmICghdGhpcy5pbykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBfdGhpcyRpbyA9IHRoaXMuaW8sXG4gICAgICAgIGluc3RhbmNlID0gX3RoaXMkaW8uaW5zdGFuY2UsXG4gICAgICAgIGVsID0gX3RoaXMkaW8uZWw7XG4gICAgaW5zdGFuY2UudW5vYnNlcnZlKGVsKTtcbiAgICBpbnN0YW5jZS5kaXNjb25uZWN0KCk7XG4gIH07XG5cbiAgX3Byb3RvLmhhbmRsZVJlZiA9IGZ1bmN0aW9uIGhhbmRsZVJlZihyZWYpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIGlmICh0aGlzLnByb3BzLmlubmVyUmVmICYmIHRoaXMucHJvcHMuaW5uZXJSZWYuaGFzT3duUHJvcGVydHkoXCJjdXJyZW50XCIpKSB7XG4gICAgICB0aGlzLnByb3BzLmlubmVyUmVmLmN1cnJlbnQgPSByZWY7XG4gICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLmlubmVyUmVmKSB7XG4gICAgICB0aGlzLnByb3BzLmlubmVyUmVmKHJlZik7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc3RhdGUuSU9TdXBwb3J0ZWQgJiYgcmVmKSB7XG4gICAgICAvLyBJZiBJTyBzdXBwb3J0ZWQgYW5kIGVsZW1lbnQgcmVmZXJlbmNlIGZvdW5kLCBzZXR1cCBPYnNlcnZlciBmdW5jdGlvbmFsaXR5XG4gICAgICB0aGlzLmlvID0gY3JlYXRlSW50ZXJzZWN0aW9uT2JzZXJ2ZXIocmVmLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzMi5fcHJlZmV0Y2goKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgdG8gPSBfdGhpcyRwcm9wcy50byxcbiAgICAgICAgX3RoaXMkcHJvcHMkZ2V0UHJvcHMgPSBfdGhpcyRwcm9wcy5nZXRQcm9wcyxcbiAgICAgICAgZ2V0UHJvcHMgPSBfdGhpcyRwcm9wcyRnZXRQcm9wcyA9PT0gdm9pZCAwID8gdGhpcy5kZWZhdWx0R2V0UHJvcHMgOiBfdGhpcyRwcm9wcyRnZXRQcm9wcyxcbiAgICAgICAgX29uQ2xpY2sgPSBfdGhpcyRwcm9wcy5vbkNsaWNrLFxuICAgICAgICBfb25Nb3VzZUVudGVyID0gX3RoaXMkcHJvcHMub25Nb3VzZUVudGVyLFxuICAgICAgICAkYWN0aXZlQ2xhc3NOYW1lID0gX3RoaXMkcHJvcHMuYWN0aXZlQ2xhc3NOYW1lLFxuICAgICAgICAkYWN0aXZlU3R5bGUgPSBfdGhpcyRwcm9wcy5hY3RpdmVTdHlsZSxcbiAgICAgICAgJGlubmVyUmVmID0gX3RoaXMkcHJvcHMuaW5uZXJSZWYsXG4gICAgICAgIHBhcnRpYWxseUFjdGl2ZSA9IF90aGlzJHByb3BzLnBhcnRpYWxseUFjdGl2ZSxcbiAgICAgICAgc3RhdGUgPSBfdGhpcyRwcm9wcy5zdGF0ZSxcbiAgICAgICAgcmVwbGFjZSA9IF90aGlzJHByb3BzLnJlcGxhY2UsXG4gICAgICAgIF9sb2NhdGlvbiA9IF90aGlzJHByb3BzLl9sb2NhdGlvbixcbiAgICAgICAgcmVzdCA9ICgwLCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZTIuZGVmYXVsdCkoX3RoaXMkcHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmICFpc0xvY2FsTGluayh0bykpIHtcbiAgICAgIGNvbnNvbGUud2FybihcIkV4dGVybmFsIGxpbmsgXCIgKyB0byArIFwiIHdhcyBkZXRlY3RlZCBpbiBhIExpbmsgY29tcG9uZW50LiBVc2UgdGhlIExpbmsgY29tcG9uZW50IG9ubHkgZm9yIGludGVybmFsIGxpbmtzLiBTZWU6IGh0dHBzOi8vZ2F0c2J5LmRldi9pbnRlcm5hbC1saW5rc1wiKTtcbiAgICB9XG5cbiAgICB2YXIgcHJlZml4ZWRUbyA9IHJld3JpdGVMaW5rUGF0aCh0bywgX2xvY2F0aW9uLnBhdGhuYW1lKTtcblxuICAgIGlmICghaXNMb2NhbExpbmsocHJlZml4ZWRUbykpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovX3JlYWN0LmRlZmF1bHQuY3JlYXRlRWxlbWVudChcImFcIiwgKDAsIF9leHRlbmRzMi5kZWZhdWx0KSh7XG4gICAgICAgIGhyZWY6IHByZWZpeGVkVG9cbiAgICAgIH0sIHJlc3QpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gLyojX19QVVJFX18qL19yZWFjdC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoX3JlYWNoUm91dGVyLkxpbmssICgwLCBfZXh0ZW5kczIuZGVmYXVsdCkoe1xuICAgICAgdG86IHByZWZpeGVkVG8sXG4gICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICBnZXRQcm9wczogZ2V0UHJvcHMsXG4gICAgICBpbm5lclJlZjogdGhpcy5oYW5kbGVSZWYsXG4gICAgICBvbk1vdXNlRW50ZXI6IGZ1bmN0aW9uIG9uTW91c2VFbnRlcihlKSB7XG4gICAgICAgIGlmIChfb25Nb3VzZUVudGVyKSB7XG4gICAgICAgICAgX29uTW91c2VFbnRlcihlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIF9fX2xvYWRlci5ob3ZlcmluZygoMCwgX3BhcnNlUGF0aC5wYXJzZVBhdGgpKHByZWZpeGVkVG8pLnBhdGhuYW1lKTtcbiAgICAgIH0sXG4gICAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKGUpIHtcbiAgICAgICAgaWYgKF9vbkNsaWNrKSB7XG4gICAgICAgICAgX29uQ2xpY2soZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZS5idXR0b24gPT09IDAgJiYgLy8gaWdub3JlIHJpZ2h0IGNsaWNrc1xuICAgICAgICAhX3RoaXMzLnByb3BzLnRhcmdldCAmJiAvLyBsZXQgYnJvd3NlciBoYW5kbGUgXCJ0YXJnZXQ9X2JsYW5rXCJcbiAgICAgICAgIWUuZGVmYXVsdFByZXZlbnRlZCAmJiAvLyBvbkNsaWNrIHByZXZlbnRlZCBkZWZhdWx0XG4gICAgICAgICFlLm1ldGFLZXkgJiYgLy8gaWdub3JlIGNsaWNrcyB3aXRoIG1vZGlmaWVyIGtleXMuLi5cbiAgICAgICAgIWUuYWx0S2V5ICYmICFlLmN0cmxLZXkgJiYgIWUuc2hpZnRLZXkpIHtcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgdmFyIHNob3VsZFJlcGxhY2UgPSByZXBsYWNlO1xuXG4gICAgICAgICAgdmFyIGlzQ3VycmVudCA9IGVuY29kZVVSSShwcmVmaXhlZFRvKSA9PT0gX2xvY2F0aW9uLnBhdGhuYW1lO1xuXG4gICAgICAgICAgaWYgKHR5cGVvZiByZXBsYWNlICE9PSBcImJvb2xlYW5cIiAmJiBpc0N1cnJlbnQpIHtcbiAgICAgICAgICAgIHNob3VsZFJlcGxhY2UgPSB0cnVlO1xuICAgICAgICAgIH0gLy8gTWFrZSBzdXJlIHRoZSBuZWNlc3Nhcnkgc2NyaXB0cyBhbmQgZGF0YSBhcmVcbiAgICAgICAgICAvLyBsb2FkZWQgYmVmb3JlIGNvbnRpbnVpbmcuXG5cblxuICAgICAgICAgIHdpbmRvdy5fX19uYXZpZ2F0ZShwcmVmaXhlZFRvLCB7XG4gICAgICAgICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICAgICAgICByZXBsYWNlOiBzaG91bGRSZXBsYWNlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9LCByZXN0KSk7XG4gIH07XG5cbiAgcmV0dXJuIEdhdHNieUxpbms7XG59KF9yZWFjdC5kZWZhdWx0LkNvbXBvbmVudCk7XG5cbkdhdHNieUxpbmsucHJvcFR5cGVzID0gKDAsIF9leHRlbmRzMi5kZWZhdWx0KSh7fSwgTmF2TGlua1Byb3BUeXBlcywge1xuICBvbkNsaWNrOiBfcHJvcFR5cGVzLmRlZmF1bHQuZnVuYyxcbiAgdG86IF9wcm9wVHlwZXMuZGVmYXVsdC5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgcmVwbGFjZTogX3Byb3BUeXBlcy5kZWZhdWx0LmJvb2wsXG4gIHN0YXRlOiBfcHJvcFR5cGVzLmRlZmF1bHQub2JqZWN0XG59KTtcblxudmFyIF9kZWZhdWx0ID0gLyojX19QVVJFX18qL19yZWFjdC5kZWZhdWx0LmZvcndhcmRSZWYoZnVuY3Rpb24gKHByb3BzLCByZWYpIHtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fcmVhY3QuZGVmYXVsdC5jcmVhdGVFbGVtZW50KEdhdHNieUxpbmtMb2NhdGlvbldyYXBwZXIsICgwLCBfZXh0ZW5kczIuZGVmYXVsdCkoe1xuICAgIGlubmVyUmVmOiByZWZcbiAgfSwgcHJvcHMpKTtcbn0pO1xuXG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDtcblxudmFyIG5hdmlnYXRlID0gZnVuY3Rpb24gbmF2aWdhdGUodG8sIG9wdGlvbnMpIHtcbiAgd2luZG93Ll9fX25hdmlnYXRlKHJld3JpdGVMaW5rUGF0aCh0bywgd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lKSwgb3B0aW9ucyk7XG59O1xuXG5leHBvcnRzLm5hdmlnYXRlID0gbmF2aWdhdGU7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8037\n')},1752:function(__unused_webpack_module,exports){"use strict";eval('\n\nexports.__esModule = true;\nexports.parsePath = parsePath;\n\nfunction parsePath(path) {\n var pathname = path || "/";\n var search = "";\n var hash = "";\n var hashIndex = pathname.indexOf("#");\n\n if (hashIndex !== -1) {\n hash = pathname.substr(hashIndex);\n pathname = pathname.substr(0, hashIndex);\n }\n\n var searchIndex = pathname.indexOf("?");\n\n if (searchIndex !== -1) {\n search = pathname.substr(searchIndex);\n pathname = pathname.substr(0, searchIndex);\n }\n\n return {\n pathname: pathname,\n search: search === "?" ? "" : search,\n hash: hash === "#" ? "" : hash\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9nYXRzYnktbGluay9wYXJzZS1wYXRoLmpzPzcyZWUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsa0JBQWtCO0FBQ2xCLGlCQUFpQjs7QUFFakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMTc1Mi5qcyIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5wYXJzZVBhdGggPSBwYXJzZVBhdGg7XG5cbmZ1bmN0aW9uIHBhcnNlUGF0aChwYXRoKSB7XG4gIHZhciBwYXRobmFtZSA9IHBhdGggfHwgXCIvXCI7XG4gIHZhciBzZWFyY2ggPSBcIlwiO1xuICB2YXIgaGFzaCA9IFwiXCI7XG4gIHZhciBoYXNoSW5kZXggPSBwYXRobmFtZS5pbmRleE9mKFwiI1wiKTtcblxuICBpZiAoaGFzaEluZGV4ICE9PSAtMSkge1xuICAgIGhhc2ggPSBwYXRobmFtZS5zdWJzdHIoaGFzaEluZGV4KTtcbiAgICBwYXRobmFtZSA9IHBhdGhuYW1lLnN1YnN0cigwLCBoYXNoSW5kZXgpO1xuICB9XG5cbiAgdmFyIHNlYXJjaEluZGV4ID0gcGF0aG5hbWUuaW5kZXhPZihcIj9cIik7XG5cbiAgaWYgKHNlYXJjaEluZGV4ICE9PSAtMSkge1xuICAgIHNlYXJjaCA9IHBhdGhuYW1lLnN1YnN0cihzZWFyY2hJbmRleCk7XG4gICAgcGF0aG5hbWUgPSBwYXRobmFtZS5zdWJzdHIoMCwgc2VhcmNoSW5kZXgpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBwYXRobmFtZTogcGF0aG5hbWUsXG4gICAgc2VhcmNoOiBzZWFyY2ggPT09IFwiP1wiID8gXCJcIiA6IHNlYXJjaCxcbiAgICBoYXNoOiBoYXNoID09PSBcIiNcIiA/IFwiXCIgOiBoYXNoXG4gIH07XG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1752\n')},9679:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("var __webpack_unused_export__;\n\n\n__webpack_unused_export__ = true;\nexports.p2 = exports.$C = void 0;\n\nvar _scrollHandler = __webpack_require__(1432);\n\nexports.$C = _scrollHandler.ScrollHandler;\n\nvar _useScrollRestoration = __webpack_require__(4855);\n\nexports.p2 = _useScrollRestoration.useScrollRestoration;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9nYXRzYnktcmVhY3Qtcm91dGVyLXNjcm9sbC9pbmRleC5qcz9lZTEyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBYTs7QUFFYix5QkFBa0I7QUFDbEIsVUFBNEIsR0FBRyxVQUFxQjs7QUFFcEQscUJBQXFCLG1CQUFPLENBQUMsSUFBa0I7O0FBRS9DLFVBQXFCOztBQUVyQiw0QkFBNEIsbUJBQU8sQ0FBQyxJQUEwQjs7QUFFOUQsVUFBNEIiLCJmaWxlIjoiOTY3OS5qcyIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy51c2VTY3JvbGxSZXN0b3JhdGlvbiA9IGV4cG9ydHMuU2Nyb2xsQ29udGV4dCA9IHZvaWQgMDtcblxudmFyIF9zY3JvbGxIYW5kbGVyID0gcmVxdWlyZShcIi4vc2Nyb2xsLWhhbmRsZXJcIik7XG5cbmV4cG9ydHMuU2Nyb2xsQ29udGV4dCA9IF9zY3JvbGxIYW5kbGVyLlNjcm9sbEhhbmRsZXI7XG5cbnZhciBfdXNlU2Nyb2xsUmVzdG9yYXRpb24gPSByZXF1aXJlKFwiLi91c2Utc2Nyb2xsLXJlc3RvcmF0aW9uXCIpO1xuXG5leHBvcnRzLnVzZVNjcm9sbFJlc3RvcmF0aW9uID0gX3VzZVNjcm9sbFJlc3RvcmF0aW9uLnVzZVNjcm9sbFJlc3RvcmF0aW9uOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///9679\n")},1432:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval('\n\nvar _interopRequireDefault = __webpack_require__(5318);\n\nexports.__esModule = true;\nexports.ScrollHandler = exports.ScrollContext = void 0;\n\nvar _assertThisInitialized2 = _interopRequireDefault(__webpack_require__(1506));\n\nvar _inheritsLoose2 = _interopRequireDefault(__webpack_require__(5354));\n\nvar React = _interopRequireWildcard(__webpack_require__(7294));\n\nvar _propTypes = _interopRequireDefault(__webpack_require__(5697));\n\nvar _sessionStorage = __webpack_require__(1142);\n\nfunction _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }\n\nfunction _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nvar ScrollContext = /*#__PURE__*/React.createContext(new _sessionStorage.SessionStorage());\nexports.ScrollContext = ScrollContext;\nScrollContext.displayName = "GatsbyScrollContext";\n\nvar ScrollHandler = /*#__PURE__*/function (_React$Component) {\n (0, _inheritsLoose2.default)(ScrollHandler, _React$Component);\n\n function ScrollHandler() {\n var _this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n _this._stateStorage = new _sessionStorage.SessionStorage();\n _this._isTicking = false;\n _this._latestKnownScrollY = 0;\n\n _this.scrollListener = function () {\n _this._latestKnownScrollY = window.scrollY;\n\n if (!_this._isTicking) {\n _this._isTicking = true;\n requestAnimationFrame(_this._saveScroll.bind((0, _assertThisInitialized2.default)(_this)));\n }\n };\n\n _this.windowScroll = function (position, prevProps) {\n if (_this.shouldUpdateScroll(prevProps, _this.props)) {\n window.scrollTo(0, position);\n }\n };\n\n _this.scrollToHash = function (hash, prevProps) {\n var node = document.getElementById(hash.substring(1));\n\n if (node && _this.shouldUpdateScroll(prevProps, _this.props)) {\n node.scrollIntoView();\n }\n };\n\n _this.shouldUpdateScroll = function (prevRouterProps, routerProps) {\n var shouldUpdateScroll = _this.props.shouldUpdateScroll;\n\n if (!shouldUpdateScroll) {\n return true;\n } // Hack to allow accessing this._stateStorage.\n\n\n return shouldUpdateScroll.call((0, _assertThisInitialized2.default)(_this), prevRouterProps, routerProps);\n };\n\n return _this;\n }\n\n var _proto = ScrollHandler.prototype;\n\n _proto._saveScroll = function _saveScroll() {\n var key = this.props.location.key || null;\n\n if (key) {\n this._stateStorage.save(this.props.location, key, this._latestKnownScrollY);\n }\n\n this._isTicking = false;\n };\n\n _proto.componentDidMount = function componentDidMount() {\n window.addEventListener("scroll", this.scrollListener);\n var scrollPosition;\n var _this$props$location = this.props.location,\n key = _this$props$location.key,\n hash = _this$props$location.hash;\n\n if (key) {\n scrollPosition = this._stateStorage.read(this.props.location, key);\n }\n\n if (scrollPosition) {\n this.windowScroll(scrollPosition, undefined);\n } else if (hash) {\n this.scrollToHash(decodeURI(hash), undefined);\n }\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n window.removeEventListener("scroll", this.scrollListener);\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n var _this$props$location2 = this.props.location,\n hash = _this$props$location2.hash,\n key = _this$props$location2.key;\n var scrollPosition;\n\n if (key) {\n scrollPosition = this._stateStorage.read(this.props.location, key);\n }\n /** There are two pieces of state: the browser url and\n * history state which keeps track of scroll position\n * Native behaviour prescribes that we ought to restore scroll position\n * when a user navigates back in their browser (this is the `POP` action)\n * Currently, reach router has a bug that prevents this at https://github.com/reach/router/issues/228\n * So we _always_ stick to the url as a source of truth — if the url\n * contains a hash, we scroll to it\n */\n\n\n if (hash) {\n this.scrollToHash(decodeURI(hash), prevProps);\n } else {\n this.windowScroll(scrollPosition, prevProps);\n }\n };\n\n _proto.render = function render() {\n return /*#__PURE__*/React.createElement(ScrollContext.Provider, {\n value: this._stateStorage\n }, this.props.children);\n };\n\n return ScrollHandler;\n}(React.Component);\n\nexports.ScrollHandler = ScrollHandler;\nScrollHandler.propTypes = {\n shouldUpdateScroll: _propTypes.default.func,\n children: _propTypes.default.element.isRequired,\n location: _propTypes.default.object.isRequired\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9nYXRzYnktcmVhY3Qtcm91dGVyLXNjcm9sbC9zY3JvbGwtaGFuZGxlci5qcz8xMjdjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhOztBQUViLDZCQUE2QixtQkFBTyxDQUFDLElBQThDOztBQUVuRixrQkFBa0I7QUFDbEIscUJBQXFCLEdBQUcscUJBQXFCOztBQUU3QyxxREFBcUQsbUJBQU8sQ0FBQyxJQUE4Qzs7QUFFM0csNkNBQTZDLG1CQUFPLENBQUMsSUFBc0M7O0FBRTNGLG9DQUFvQyxtQkFBTyxDQUFDLElBQU87O0FBRW5ELHdDQUF3QyxtQkFBTyxDQUFDLElBQVk7O0FBRTVELHNCQUFzQixtQkFBTyxDQUFDLElBQW1COztBQUVqRCxnREFBZ0QsZ0RBQWdELHVDQUF1QyxzQ0FBc0Msb0ZBQW9GLDJEQUEyRCxFQUFFLGVBQWU7O0FBRTdVLG9EQUFvRCw2Q0FBNkMsWUFBWSxFQUFFLDRFQUE0RSxTQUFTLGdCQUFnQixFQUFFLG1EQUFtRCwrQkFBK0IsdUJBQXVCLEVBQUUsaUJBQWlCLHNGQUFzRix1QkFBdUIsMkVBQTJFLHFGQUFxRixzQ0FBc0MsMENBQTBDLEVBQUUsT0FBTyx3QkFBd0IsRUFBRSxFQUFFLEVBQUUsc0JBQXNCLGFBQWEsd0JBQXdCLEVBQUUsZUFBZTs7QUFFbHlCO0FBQ0EscUJBQXFCO0FBQ3JCOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSx1RUFBdUUsYUFBYTtBQUNwRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTzs7O0FBR1A7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQSxDQUFDOztBQUVELHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjE0MzIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLlNjcm9sbEhhbmRsZXIgPSBleHBvcnRzLlNjcm9sbENvbnRleHQgPSB2b2lkIDA7XG5cbnZhciBfYXNzZXJ0VGhpc0luaXRpYWxpemVkMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXNzZXJ0VGhpc0luaXRpYWxpemVkXCIpKTtcblxudmFyIF9pbmhlcml0c0xvb3NlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHNMb29zZVwiKSk7XG5cbnZhciBSZWFjdCA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5cbnZhciBfcHJvcFR5cGVzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwicHJvcC10eXBlc1wiKSk7XG5cbnZhciBfc2Vzc2lvblN0b3JhZ2UgPSByZXF1aXJlKFwiLi9zZXNzaW9uLXN0b3JhZ2VcIik7XG5cbmZ1bmN0aW9uIF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShub2RlSW50ZXJvcCkgeyBpZiAodHlwZW9mIFdlYWtNYXAgIT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIG51bGw7IHZhciBjYWNoZUJhYmVsSW50ZXJvcCA9IG5ldyBXZWFrTWFwKCk7IHZhciBjYWNoZU5vZGVJbnRlcm9wID0gbmV3IFdlYWtNYXAoKTsgcmV0dXJuIChfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUgPSBmdW5jdGlvbiBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUobm9kZUludGVyb3ApIHsgcmV0dXJuIG5vZGVJbnRlcm9wID8gY2FjaGVOb2RlSW50ZXJvcCA6IGNhY2hlQmFiZWxJbnRlcm9wOyB9KShub2RlSW50ZXJvcCk7IH1cblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQob2JqLCBub2RlSW50ZXJvcCkgeyBpZiAoIW5vZGVJbnRlcm9wICYmIG9iaiAmJiBvYmouX19lc01vZHVsZSkgeyByZXR1cm4gb2JqOyB9IGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIG9iaiAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2Ygb2JqICE9PSBcImZ1bmN0aW9uXCIpIHsgcmV0dXJuIHsgZGVmYXVsdDogb2JqIH07IH0gdmFyIGNhY2hlID0gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKG5vZGVJbnRlcm9wKTsgaWYgKGNhY2hlICYmIGNhY2hlLmhhcyhvYmopKSB7IHJldHVybiBjYWNoZS5nZXQob2JqKTsgfSB2YXIgbmV3T2JqID0ge307IHZhciBoYXNQcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjsgZm9yICh2YXIga2V5IGluIG9iaikgeyBpZiAoa2V5ICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSB7IHZhciBkZXNjID0gaGFzUHJvcGVydHlEZXNjcmlwdG9yID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIGtleSkgOiBudWxsOyBpZiAoZGVzYyAmJiAoZGVzYy5nZXQgfHwgZGVzYy5zZXQpKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuZXdPYmosIGtleSwgZGVzYyk7IH0gZWxzZSB7IG5ld09ialtrZXldID0gb2JqW2tleV07IH0gfSB9IG5ld09iai5kZWZhdWx0ID0gb2JqOyBpZiAoY2FjaGUpIHsgY2FjaGUuc2V0KG9iaiwgbmV3T2JqKTsgfSByZXR1cm4gbmV3T2JqOyB9XG5cbnZhciBTY3JvbGxDb250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUNvbnRleHQobmV3IF9zZXNzaW9uU3RvcmFnZS5TZXNzaW9uU3RvcmFnZSgpKTtcbmV4cG9ydHMuU2Nyb2xsQ29udGV4dCA9IFNjcm9sbENvbnRleHQ7XG5TY3JvbGxDb250ZXh0LmRpc3BsYXlOYW1lID0gXCJHYXRzYnlTY3JvbGxDb250ZXh0XCI7XG5cbnZhciBTY3JvbGxIYW5kbGVyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gICgwLCBfaW5oZXJpdHNMb29zZTIuZGVmYXVsdCkoU2Nyb2xsSGFuZGxlciwgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gU2Nyb2xsSGFuZGxlcigpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfUmVhY3QkQ29tcG9uZW50LmNhbGwuYXBwbHkoX1JlYWN0JENvbXBvbmVudCwgW3RoaXNdLmNvbmNhdChhcmdzKSkgfHwgdGhpcztcbiAgICBfdGhpcy5fc3RhdGVTdG9yYWdlID0gbmV3IF9zZXNzaW9uU3RvcmFnZS5TZXNzaW9uU3RvcmFnZSgpO1xuICAgIF90aGlzLl9pc1RpY2tpbmcgPSBmYWxzZTtcbiAgICBfdGhpcy5fbGF0ZXN0S25vd25TY3JvbGxZID0gMDtcblxuICAgIF90aGlzLnNjcm9sbExpc3RlbmVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuX2xhdGVzdEtub3duU2Nyb2xsWSA9IHdpbmRvdy5zY3JvbGxZO1xuXG4gICAgICBpZiAoIV90aGlzLl9pc1RpY2tpbmcpIHtcbiAgICAgICAgX3RoaXMuX2lzVGlja2luZyA9IHRydWU7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShfdGhpcy5fc2F2ZVNjcm9sbC5iaW5kKCgwLCBfYXNzZXJ0VGhpc0luaXRpYWxpemVkMi5kZWZhdWx0KShfdGhpcykpKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3RoaXMud2luZG93U2Nyb2xsID0gZnVuY3Rpb24gKHBvc2l0aW9uLCBwcmV2UHJvcHMpIHtcbiAgICAgIGlmIChfdGhpcy5zaG91bGRVcGRhdGVTY3JvbGwocHJldlByb3BzLCBfdGhpcy5wcm9wcykpIHtcbiAgICAgICAgd2luZG93LnNjcm9sbFRvKDAsIHBvc2l0aW9uKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3RoaXMuc2Nyb2xsVG9IYXNoID0gZnVuY3Rpb24gKGhhc2gsIHByZXZQcm9wcykge1xuICAgICAgdmFyIG5vZGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChoYXNoLnN1YnN0cmluZygxKSk7XG5cbiAgICAgIGlmIChub2RlICYmIF90aGlzLnNob3VsZFVwZGF0ZVNjcm9sbChwcmV2UHJvcHMsIF90aGlzLnByb3BzKSkge1xuICAgICAgICBub2RlLnNjcm9sbEludG9WaWV3KCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF90aGlzLnNob3VsZFVwZGF0ZVNjcm9sbCA9IGZ1bmN0aW9uIChwcmV2Um91dGVyUHJvcHMsIHJvdXRlclByb3BzKSB7XG4gICAgICB2YXIgc2hvdWxkVXBkYXRlU2Nyb2xsID0gX3RoaXMucHJvcHMuc2hvdWxkVXBkYXRlU2Nyb2xsO1xuXG4gICAgICBpZiAoIXNob3VsZFVwZGF0ZVNjcm9sbCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gLy8gSGFjayB0byBhbGxvdyBhY2Nlc3NpbmcgdGhpcy5fc3RhdGVTdG9yYWdlLlxuXG5cbiAgICAgIHJldHVybiBzaG91bGRVcGRhdGVTY3JvbGwuY2FsbCgoMCwgX2Fzc2VydFRoaXNJbml0aWFsaXplZDIuZGVmYXVsdCkoX3RoaXMpLCBwcmV2Um91dGVyUHJvcHMsIHJvdXRlclByb3BzKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFNjcm9sbEhhbmRsZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5fc2F2ZVNjcm9sbCA9IGZ1bmN0aW9uIF9zYXZlU2Nyb2xsKCkge1xuICAgIHZhciBrZXkgPSB0aGlzLnByb3BzLmxvY2F0aW9uLmtleSB8fCBudWxsO1xuXG4gICAgaWYgKGtleSkge1xuICAgICAgdGhpcy5fc3RhdGVTdG9yYWdlLnNhdmUodGhpcy5wcm9wcy5sb2NhdGlvbiwga2V5LCB0aGlzLl9sYXRlc3RLbm93blNjcm9sbFkpO1xuICAgIH1cblxuICAgIHRoaXMuX2lzVGlja2luZyA9IGZhbHNlO1xuICB9O1xuXG4gIF9wcm90by5jb21wb25lbnREaWRNb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIHRoaXMuc2Nyb2xsTGlzdGVuZXIpO1xuICAgIHZhciBzY3JvbGxQb3NpdGlvbjtcbiAgICB2YXIgX3RoaXMkcHJvcHMkbG9jYXRpb24gPSB0aGlzLnByb3BzLmxvY2F0aW9uLFxuICAgICAgICBrZXkgPSBfdGhpcyRwcm9wcyRsb2NhdGlvbi5rZXksXG4gICAgICAgIGhhc2ggPSBfdGhpcyRwcm9wcyRsb2NhdGlvbi5oYXNoO1xuXG4gICAgaWYgKGtleSkge1xuICAgICAgc2Nyb2xsUG9zaXRpb24gPSB0aGlzLl9zdGF0ZVN0b3JhZ2UucmVhZCh0aGlzLnByb3BzLmxvY2F0aW9uLCBrZXkpO1xuICAgIH1cblxuICAgIGlmIChzY3JvbGxQb3NpdGlvbikge1xuICAgICAgdGhpcy53aW5kb3dTY3JvbGwoc2Nyb2xsUG9zaXRpb24sIHVuZGVmaW5lZCk7XG4gICAgfSBlbHNlIGlmIChoYXNoKSB7XG4gICAgICB0aGlzLnNjcm9sbFRvSGFzaChkZWNvZGVVUkkoaGFzaCksIHVuZGVmaW5lZCk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5jb21wb25lbnRXaWxsVW5tb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIHRoaXMuc2Nyb2xsTGlzdGVuZXIpO1xuICB9O1xuXG4gIF9wcm90by5jb21wb25lbnREaWRVcGRhdGUgPSBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzKSB7XG4gICAgdmFyIF90aGlzJHByb3BzJGxvY2F0aW9uMiA9IHRoaXMucHJvcHMubG9jYXRpb24sXG4gICAgICAgIGhhc2ggPSBfdGhpcyRwcm9wcyRsb2NhdGlvbjIuaGFzaCxcbiAgICAgICAga2V5ID0gX3RoaXMkcHJvcHMkbG9jYXRpb24yLmtleTtcbiAgICB2YXIgc2Nyb2xsUG9zaXRpb247XG5cbiAgICBpZiAoa2V5KSB7XG4gICAgICBzY3JvbGxQb3NpdGlvbiA9IHRoaXMuX3N0YXRlU3RvcmFnZS5yZWFkKHRoaXMucHJvcHMubG9jYXRpb24sIGtleSk7XG4gICAgfVxuICAgIC8qKiAgVGhlcmUgYXJlIHR3byBwaWVjZXMgb2Ygc3RhdGU6IHRoZSBicm93c2VyIHVybCBhbmRcbiAgICAgKiBoaXN0b3J5IHN0YXRlIHdoaWNoIGtlZXBzIHRyYWNrIG9mIHNjcm9sbCBwb3NpdGlvblxuICAgICAqIE5hdGl2ZSBiZWhhdmlvdXIgcHJlc2NyaWJlcyB0aGF0IHdlIG91Z2h0IHRvIHJlc3RvcmUgc2Nyb2xsIHBvc2l0aW9uXG4gICAgICogd2hlbiBhIHVzZXIgbmF2aWdhdGVzIGJhY2sgaW4gdGhlaXIgYnJvd3NlciAodGhpcyBpcyB0aGUgYFBPUGAgYWN0aW9uKVxuICAgICAqIEN1cnJlbnRseSwgcmVhY2ggcm91dGVyIGhhcyBhIGJ1ZyB0aGF0IHByZXZlbnRzIHRoaXMgYXQgaHR0cHM6Ly9naXRodWIuY29tL3JlYWNoL3JvdXRlci9pc3N1ZXMvMjI4XG4gICAgICogU28gd2UgX2Fsd2F5c18gc3RpY2sgdG8gdGhlIHVybCBhcyBhIHNvdXJjZSBvZiB0cnV0aCDigJQgaWYgdGhlIHVybFxuICAgICAqIGNvbnRhaW5zIGEgaGFzaCwgd2Ugc2Nyb2xsIHRvIGl0XG4gICAgICovXG5cblxuICAgIGlmIChoYXNoKSB7XG4gICAgICB0aGlzLnNjcm9sbFRvSGFzaChkZWNvZGVVUkkoaGFzaCksIHByZXZQcm9wcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMud2luZG93U2Nyb2xsKHNjcm9sbFBvc2l0aW9uLCBwcmV2UHJvcHMpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChTY3JvbGxDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICB2YWx1ZTogdGhpcy5fc3RhdGVTdG9yYWdlXG4gICAgfSwgdGhpcy5wcm9wcy5jaGlsZHJlbik7XG4gIH07XG5cbiAgcmV0dXJuIFNjcm9sbEhhbmRsZXI7XG59KFJlYWN0LkNvbXBvbmVudCk7XG5cbmV4cG9ydHMuU2Nyb2xsSGFuZGxlciA9IFNjcm9sbEhhbmRsZXI7XG5TY3JvbGxIYW5kbGVyLnByb3BUeXBlcyA9IHtcbiAgc2hvdWxkVXBkYXRlU2Nyb2xsOiBfcHJvcFR5cGVzLmRlZmF1bHQuZnVuYyxcbiAgY2hpbGRyZW46IF9wcm9wVHlwZXMuZGVmYXVsdC5lbGVtZW50LmlzUmVxdWlyZWQsXG4gIGxvY2F0aW9uOiBfcHJvcFR5cGVzLmRlZmF1bHQub2JqZWN0LmlzUmVxdWlyZWRcbn07Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1432\n')},1142:function(__unused_webpack_module,exports){"use strict";eval('\n\nexports.__esModule = true;\nexports.SessionStorage = void 0;\nvar STATE_KEY_PREFIX = "@@scroll|";\nvar GATSBY_ROUTER_SCROLL_STATE = "___GATSBY_REACT_ROUTER_SCROLL";\n\nvar SessionStorage = /*#__PURE__*/function () {\n function SessionStorage() {}\n\n var _proto = SessionStorage.prototype;\n\n _proto.read = function read(location, key) {\n var stateKey = this.getStateKey(location, key);\n\n try {\n var value = window.sessionStorage.getItem(stateKey);\n return value ? JSON.parse(value) : 0;\n } catch (e) {\n if (false) {}\n\n if (window && window[GATSBY_ROUTER_SCROLL_STATE] && window[GATSBY_ROUTER_SCROLL_STATE][stateKey]) {\n return window[GATSBY_ROUTER_SCROLL_STATE][stateKey];\n }\n\n return 0;\n }\n };\n\n _proto.save = function save(location, key, value) {\n var stateKey = this.getStateKey(location, key);\n var storedValue = JSON.stringify(value);\n\n try {\n window.sessionStorage.setItem(stateKey, storedValue);\n } catch (e) {\n if (window && window[GATSBY_ROUTER_SCROLL_STATE]) {\n window[GATSBY_ROUTER_SCROLL_STATE][stateKey] = JSON.parse(storedValue);\n } else {\n window[GATSBY_ROUTER_SCROLL_STATE] = {};\n window[GATSBY_ROUTER_SCROLL_STATE][stateKey] = JSON.parse(storedValue);\n }\n\n if (false) {}\n }\n };\n\n _proto.getStateKey = function getStateKey(location, key) {\n var stateKeyBase = "" + STATE_KEY_PREFIX + location.pathname;\n return key === null || typeof key === "undefined" ? stateKeyBase : stateKeyBase + "|" + key;\n };\n\n return SessionStorage;\n}();\n\nexports.SessionStorage = SessionStorage;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9nYXRzYnktcmVhY3Qtcm91dGVyLXNjcm9sbC9zZXNzaW9uLXN0b3JhZ2UuanM/ZmUxNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0I7QUFDbEIsc0JBQXNCO0FBQ3RCO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxVQUFVLEtBQXFDLEVBQUUsRUFFMUM7O0FBRVA7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQSxVQUFVLEtBQXFDLEVBQUUsRUFFMUM7QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRCxzQkFBc0IiLCJmaWxlIjoiMTE0Mi5qcyIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5TZXNzaW9uU3RvcmFnZSA9IHZvaWQgMDtcbnZhciBTVEFURV9LRVlfUFJFRklYID0gXCJAQHNjcm9sbHxcIjtcbnZhciBHQVRTQllfUk9VVEVSX1NDUk9MTF9TVEFURSA9IFwiX19fR0FUU0JZX1JFQUNUX1JPVVRFUl9TQ1JPTExcIjtcblxudmFyIFNlc3Npb25TdG9yYWdlID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gU2Vzc2lvblN0b3JhZ2UoKSB7fVxuXG4gIHZhciBfcHJvdG8gPSBTZXNzaW9uU3RvcmFnZS5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLnJlYWQgPSBmdW5jdGlvbiByZWFkKGxvY2F0aW9uLCBrZXkpIHtcbiAgICB2YXIgc3RhdGVLZXkgPSB0aGlzLmdldFN0YXRlS2V5KGxvY2F0aW9uLCBrZXkpO1xuXG4gICAgdHJ5IHtcbiAgICAgIHZhciB2YWx1ZSA9IHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKHN0YXRlS2V5KTtcbiAgICAgIHJldHVybiB2YWx1ZSA/IEpTT04ucGFyc2UodmFsdWUpIDogMDtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcIltnYXRzYnktcmVhY3Qtcm91dGVyLXNjcm9sbF0gVW5hYmxlIHRvIGFjY2VzcyBzZXNzaW9uU3RvcmFnZTsgc2Vzc2lvblN0b3JhZ2UgaXMgbm90IGF2YWlsYWJsZS5cIik7XG4gICAgICB9XG5cbiAgICAgIGlmICh3aW5kb3cgJiYgd2luZG93W0dBVFNCWV9ST1VURVJfU0NST0xMX1NUQVRFXSAmJiB3aW5kb3dbR0FUU0JZX1JPVVRFUl9TQ1JPTExfU1RBVEVdW3N0YXRlS2V5XSkge1xuICAgICAgICByZXR1cm4gd2luZG93W0dBVFNCWV9ST1VURVJfU0NST0xMX1NUQVRFXVtzdGF0ZUtleV07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uc2F2ZSA9IGZ1bmN0aW9uIHNhdmUobG9jYXRpb24sIGtleSwgdmFsdWUpIHtcbiAgICB2YXIgc3RhdGVLZXkgPSB0aGlzLmdldFN0YXRlS2V5KGxvY2F0aW9uLCBrZXkpO1xuICAgIHZhciBzdG9yZWRWYWx1ZSA9IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcblxuICAgIHRyeSB7XG4gICAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShzdGF0ZUtleSwgc3RvcmVkVmFsdWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmICh3aW5kb3cgJiYgd2luZG93W0dBVFNCWV9ST1VURVJfU0NST0xMX1NUQVRFXSkge1xuICAgICAgICB3aW5kb3dbR0FUU0JZX1JPVVRFUl9TQ1JPTExfU1RBVEVdW3N0YXRlS2V5XSA9IEpTT04ucGFyc2Uoc3RvcmVkVmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2luZG93W0dBVFNCWV9ST1VURVJfU0NST0xMX1NUQVRFXSA9IHt9O1xuICAgICAgICB3aW5kb3dbR0FUU0JZX1JPVVRFUl9TQ1JPTExfU1RBVEVdW3N0YXRlS2V5XSA9IEpTT04ucGFyc2Uoc3RvcmVkVmFsdWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcIltnYXRzYnktcmVhY3Qtcm91dGVyLXNjcm9sbF0gVW5hYmxlIHRvIHNhdmUgc3RhdGUgaW4gc2Vzc2lvblN0b3JhZ2U7IHNlc3Npb25TdG9yYWdlIGlzIG5vdCBhdmFpbGFibGUuXCIpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uZ2V0U3RhdGVLZXkgPSBmdW5jdGlvbiBnZXRTdGF0ZUtleShsb2NhdGlvbiwga2V5KSB7XG4gICAgdmFyIHN0YXRlS2V5QmFzZSA9IFwiXCIgKyBTVEFURV9LRVlfUFJFRklYICsgbG9jYXRpb24ucGF0aG5hbWU7XG4gICAgcmV0dXJuIGtleSA9PT0gbnVsbCB8fCB0eXBlb2Yga2V5ID09PSBcInVuZGVmaW5lZFwiID8gc3RhdGVLZXlCYXNlIDogc3RhdGVLZXlCYXNlICsgXCJ8XCIgKyBrZXk7XG4gIH07XG5cbiAgcmV0dXJuIFNlc3Npb25TdG9yYWdlO1xufSgpO1xuXG5leHBvcnRzLlNlc3Npb25TdG9yYWdlID0gU2Vzc2lvblN0b3JhZ2U7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1142\n')},4855:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nexports.__esModule = true;\nexports.useScrollRestoration = useScrollRestoration;\n\nvar _scrollHandler = __webpack_require__(1432);\n\nvar _react = __webpack_require__(7294);\n\nvar _reachRouter = __webpack_require__(9499);\n\nfunction useScrollRestoration(identifier) {\n var location = (0, _reachRouter.useLocation)();\n var state = (0, _react.useContext)(_scrollHandler.ScrollContext);\n var ref = (0, _react.useRef)(null);\n (0, _react.useLayoutEffect)(function () {\n if (ref.current) {\n var position = state.read(location, identifier);\n ref.current.scrollTo(0, position || 0);\n }\n }, [location.key]);\n return {\n ref: ref,\n onScroll: function onScroll() {\n if (ref.current) {\n state.save(location, identifier, ref.current.scrollTop);\n }\n }\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9nYXRzYnktcmVhY3Qtcm91dGVyLXNjcm9sbC91c2Utc2Nyb2xsLXJlc3RvcmF0aW9uLmpzP2RlZWMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsa0JBQWtCO0FBQ2xCLDRCQUE0Qjs7QUFFNUIscUJBQXFCLG1CQUFPLENBQUMsSUFBa0I7O0FBRS9DLGFBQWEsbUJBQU8sQ0FBQyxJQUFPOztBQUU1QixtQkFBbUIsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI0ODU1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLnVzZVNjcm9sbFJlc3RvcmF0aW9uID0gdXNlU2Nyb2xsUmVzdG9yYXRpb247XG5cbnZhciBfc2Nyb2xsSGFuZGxlciA9IHJlcXVpcmUoXCIuL3Njcm9sbC1oYW5kbGVyXCIpO1xuXG52YXIgX3JlYWN0ID0gcmVxdWlyZShcInJlYWN0XCIpO1xuXG52YXIgX3JlYWNoUm91dGVyID0gcmVxdWlyZShcIkBnYXRzYnlqcy9yZWFjaC1yb3V0ZXJcIik7XG5cbmZ1bmN0aW9uIHVzZVNjcm9sbFJlc3RvcmF0aW9uKGlkZW50aWZpZXIpIHtcbiAgdmFyIGxvY2F0aW9uID0gKDAsIF9yZWFjaFJvdXRlci51c2VMb2NhdGlvbikoKTtcbiAgdmFyIHN0YXRlID0gKDAsIF9yZWFjdC51c2VDb250ZXh0KShfc2Nyb2xsSGFuZGxlci5TY3JvbGxDb250ZXh0KTtcbiAgdmFyIHJlZiA9ICgwLCBfcmVhY3QudXNlUmVmKShudWxsKTtcbiAgKDAsIF9yZWFjdC51c2VMYXlvdXRFZmZlY3QpKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAocmVmLmN1cnJlbnQpIHtcbiAgICAgIHZhciBwb3NpdGlvbiA9IHN0YXRlLnJlYWQobG9jYXRpb24sIGlkZW50aWZpZXIpO1xuICAgICAgcmVmLmN1cnJlbnQuc2Nyb2xsVG8oMCwgcG9zaXRpb24gfHwgMCk7XG4gICAgfVxuICB9LCBbbG9jYXRpb24ua2V5XSk7XG4gIHJldHVybiB7XG4gICAgcmVmOiByZWYsXG4gICAgb25TY3JvbGw6IGZ1bmN0aW9uIG9uU2Nyb2xsKCkge1xuICAgICAgaWYgKHJlZi5jdXJyZW50KSB7XG4gICAgICAgIHN0YXRlLnNhdmUobG9jYXRpb24sIGlkZW50aWZpZXIsIHJlZi5jdXJyZW50LnNjcm9sbFRvcCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4855\n")},4999:function(__unused_webpack_module,exports,__webpack_require__){eval('// prefer default export if available\nvar preferDefault=function preferDefault(m){return m&&m.default||m;};exports.components={"component---src-pages-404-tsx":function componentSrcPages404Tsx(){return __webpack_require__.e(/* import() | component---src-pages-404-tsx */ 218).then(__webpack_require__.bind(__webpack_require__, 9786));},"component---src-pages-cejst-tsx":function componentSrcPagesCejstTsx(){return Promise.all(/* import() | component---src-pages-cejst-tsx */[__webpack_require__.e(532), __webpack_require__.e(30), __webpack_require__.e(644), __webpack_require__.e(947), __webpack_require__.e(90), __webpack_require__.e(281)]).then(__webpack_require__.bind(__webpack_require__, 9338));},"component---src-pages-contact-tsx":function componentSrcPagesContactTsx(){return Promise.all(/* import() | component---src-pages-contact-tsx */[__webpack_require__.e(30), __webpack_require__.e(947), __webpack_require__.e(650)]).then(__webpack_require__.bind(__webpack_require__, 440));},"component---src-pages-index-tsx":function componentSrcPagesIndexTsx(){return Promise.all(/* import() | component---src-pages-index-tsx */[__webpack_require__.e(30), __webpack_require__.e(947), __webpack_require__.e(691)]).then(__webpack_require__.bind(__webpack_require__, 7824));},"component---src-pages-methodology-tsx":function componentSrcPagesMethodologyTsx(){return Promise.all(/* import() | component---src-pages-methodology-tsx */[__webpack_require__.e(30), __webpack_require__.e(947), __webpack_require__.e(647)]).then(__webpack_require__.bind(__webpack_require__, 2079));},"component---src-pages-timeline-tsx":function componentSrcPagesTimelineTsx(){return Promise.all(/* import() | component---src-pages-timeline-tsx */[__webpack_require__.e(30), __webpack_require__.e(947), __webpack_require__.e(914)]).then(__webpack_require__.bind(__webpack_require__, 7348));}};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uLy5jYWNoZS9fdGhpc19pc192aXJ0dWFsX2ZzX3BhdGhfLyR2aXJ0dWFsL2FzeW5jLXJlcXVpcmVzLmpzPzM2YzEiXSwibmFtZXMiOlsicHJlZmVyRGVmYXVsdCIsIm0iLCJkZWZhdWx0IiwiZXhwb3J0cyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxHQUFNQSxjQUFhLENBQUcsUUFBaEJBLGNBQWdCLENBQUFDLENBQUMsUUFBS0EsRUFBQyxFQUFJQSxDQUFDLENBQUNDLE9BQVIsRUFBb0JELENBQXhCLEVBQXZCLENBRUFFLGtCQUFBLENBQXFCLENBQ25CLGdDQUFpQyx5Q0FBTSxvSUFBTixFQURkLENBRW5CLGtDQUFtQywyQ0FBTSw4UkFBTixFQUZoQixDQUduQixvQ0FBcUMsNkNBQU0sNE1BQU4sRUFIbEIsQ0FJbkIsa0NBQW1DLDJDQUFNLDJNQUFOLEVBSmhCLENBS25CLHdDQUF5QyxpREFBTSxpTkFBTixFQUx0QixDQU1uQixxQ0FBc0MsOENBQU0sOE1BQU4sRUFObkIsQ0FBckIiLCJmaWxlIjoiNDk5OS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIHByZWZlciBkZWZhdWx0IGV4cG9ydCBpZiBhdmFpbGFibGVcbmNvbnN0IHByZWZlckRlZmF1bHQgPSBtID0+IChtICYmIG0uZGVmYXVsdCkgfHwgbVxuXG5leHBvcnRzLmNvbXBvbmVudHMgPSB7XG4gIFwiY29tcG9uZW50LS0tc3JjLXBhZ2VzLTQwNC10c3hcIjogKCkgPT4gaW1wb3J0KFwiLi8uLi8uLi8uLi9zcmMvcGFnZXMvNDA0LnRzeFwiIC8qIHdlYnBhY2tDaHVua05hbWU6IFwiY29tcG9uZW50LS0tc3JjLXBhZ2VzLTQwNC10c3hcIiAqLyksXG4gIFwiY29tcG9uZW50LS0tc3JjLXBhZ2VzLWNlanN0LXRzeFwiOiAoKSA9PiBpbXBvcnQoXCIuLy4uLy4uLy4uL3NyYy9wYWdlcy9jZWpzdC50c3hcIiAvKiB3ZWJwYWNrQ2h1bmtOYW1lOiBcImNvbXBvbmVudC0tLXNyYy1wYWdlcy1jZWpzdC10c3hcIiAqLyksXG4gIFwiY29tcG9uZW50LS0tc3JjLXBhZ2VzLWNvbnRhY3QtdHN4XCI6ICgpID0+IGltcG9ydChcIi4vLi4vLi4vLi4vc3JjL3BhZ2VzL2NvbnRhY3QudHN4XCIgLyogd2VicGFja0NodW5rTmFtZTogXCJjb21wb25lbnQtLS1zcmMtcGFnZXMtY29udGFjdC10c3hcIiAqLyksXG4gIFwiY29tcG9uZW50LS0tc3JjLXBhZ2VzLWluZGV4LXRzeFwiOiAoKSA9PiBpbXBvcnQoXCIuLy4uLy4uLy4uL3NyYy9wYWdlcy9pbmRleC50c3hcIiAvKiB3ZWJwYWNrQ2h1bmtOYW1lOiBcImNvbXBvbmVudC0tLXNyYy1wYWdlcy1pbmRleC10c3hcIiAqLyksXG4gIFwiY29tcG9uZW50LS0tc3JjLXBhZ2VzLW1ldGhvZG9sb2d5LXRzeFwiOiAoKSA9PiBpbXBvcnQoXCIuLy4uLy4uLy4uL3NyYy9wYWdlcy9tZXRob2RvbG9neS50c3hcIiAvKiB3ZWJwYWNrQ2h1bmtOYW1lOiBcImNvbXBvbmVudC0tLXNyYy1wYWdlcy1tZXRob2RvbG9neS10c3hcIiAqLyksXG4gIFwiY29tcG9uZW50LS0tc3JjLXBhZ2VzLXRpbWVsaW5lLXRzeFwiOiAoKSA9PiBpbXBvcnQoXCIuLy4uLy4uLy4uL3NyYy9wYWdlcy90aW1lbGluZS50c3hcIiAvKiB3ZWJwYWNrQ2h1bmtOYW1lOiBcImNvbXBvbmVudC0tLXNyYy1wYWdlcy10aW1lbGluZS10c3hcIiAqLylcbn1cblxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4999\n')},5182:function(module,__unused_webpack_exports,__webpack_require__){eval('module.exports=[{plugin:__webpack_require__(5526),options:{"plugins":[],"path":"/home/runner/work/justice40-tool/justice40-tool/client/src/intl","languages":["en","es"],"defaultLanguage":"en","redirect":true}},{plugin:__webpack_require__(9037),options:{"plugins":[]}}];//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uLy5jYWNoZS9hcGktcnVubmVyLWJyb3dzZXItcGx1Z2lucy5qcz8yZGUyIl0sIm5hbWVzIjpbIm1vZHVsZSIsImV4cG9ydHMiLCJwbHVnaW4iLCJyZXF1aXJlIiwib3B0aW9ucyJdLCJtYXBwaW5ncyI6IkFBQUFBLE1BQU0sQ0FBQ0MsT0FBUCxDQUFpQixDQUFDLENBQ1pDLE1BQU0sQ0FBRUMsbUJBQU8sQ0FBQyxJQUFELENBREgsQ0FFWkMsT0FBTyxDQUFFLENBQUMsVUFBVSxFQUFYLENBQWMsT0FBTyxpRUFBckIsQ0FBdUYsWUFBWSxDQUFDLElBQUQsQ0FBTSxJQUFOLENBQW5HLENBQStHLGtCQUFrQixJQUFqSSxDQUFzSSxXQUFXLElBQWpKLENBRkcsQ0FBRCxDQUdYLENBQ0FGLE1BQU0sQ0FBRUMsbUJBQU8sQ0FBQyxJQUFELENBRGYsQ0FFQUMsT0FBTyxDQUFFLENBQUMsVUFBVSxFQUFYLENBRlQsQ0FIVyxDQUFqQiIsImZpbGUiOiI1MTgyLmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBbe1xuICAgICAgcGx1Z2luOiByZXF1aXJlKCcuLi9ub2RlX21vZHVsZXMvZ2F0c2J5LXBsdWdpbi1pbnRsL2dhdHNieS1icm93c2VyLmpzJyksXG4gICAgICBvcHRpb25zOiB7XCJwbHVnaW5zXCI6W10sXCJwYXRoXCI6XCIvaG9tZS9ydW5uZXIvd29yay9qdXN0aWNlNDAtdG9vbC9qdXN0aWNlNDAtdG9vbC9jbGllbnQvc3JjL2ludGxcIixcImxhbmd1YWdlc1wiOltcImVuXCIsXCJlc1wiXSxcImRlZmF1bHRMYW5ndWFnZVwiOlwiZW5cIixcInJlZGlyZWN0XCI6dHJ1ZX0sXG4gICAgfSx7XG4gICAgICBwbHVnaW46IHJlcXVpcmUoJy4uL2dhdHNieS1icm93c2VyLmpzJyksXG4gICAgICBvcHRpb25zOiB7XCJwbHVnaW5zXCI6W119LFxuICAgIH1dXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5182\n')},7343:function(__unused_webpack_module,exports,__webpack_require__){eval('var plugins=__webpack_require__(5182);var _require$publicLoader=__webpack_require__(8741)/* .publicLoader */ .jN,getResourceURLsForPathname=_require$publicLoader.getResourceURLsForPathname,loadPage=_require$publicLoader.loadPage,loadPageSync=_require$publicLoader.loadPageSync;exports.h=function(api,args,defaultReturn,argTransform){if(args===void 0){args={};}// Hooks for gatsby-cypress\'s API handler\nif(undefined){if(window.___apiHandler){window.___apiHandler(api);}else if(window.___resolvedAPIs){window.___resolvedAPIs.push(api);}else{window.___resolvedAPIs=[api];}}var results=plugins.map(function(plugin){if(!plugin.plugin[api]){return undefined;}args.getResourceURLsForPathname=getResourceURLsForPathname;args.loadPage=loadPage;args.loadPageSync=loadPageSync;var result=plugin.plugin[api](args,plugin.options);if(result&&argTransform){args=argTransform({args:args,result:result,plugin:plugin});}return result;});// Filter out undefined results.\nresults=results.filter(function(result){return typeof result!=="undefined";});if(results.length>0){return results;}else if(defaultReturn){return[defaultReturn];}else{return[];}};exports.I=function(api,args,defaultReturn){return plugins.reduce(function(previous,next){return next.plugin[api]?previous.then(function(){return next.plugin[api](args,next.options);}):previous;},Promise.resolve());};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uLy5jYWNoZS9hcGktcnVubmVyLWJyb3dzZXIuanM/YzZkYiJdLCJuYW1lcyI6WyJwbHVnaW5zIiwicmVxdWlyZSIsImdldFJlc291cmNlVVJMc0ZvclBhdGhuYW1lIiwibG9hZFBhZ2UiLCJsb2FkUGFnZVN5bmMiLCJleHBvcnRzIiwiYXBpIiwiYXJncyIsImRlZmF1bHRSZXR1cm4iLCJhcmdUcmFuc2Zvcm0iLCJwcm9jZXNzIiwid2luZG93IiwiX19fYXBpSGFuZGxlciIsIl9fX3Jlc29sdmVkQVBJcyIsInB1c2giLCJyZXN1bHRzIiwibWFwIiwicGx1Z2luIiwidW5kZWZpbmVkIiwicmVzdWx0Iiwib3B0aW9ucyIsImZpbHRlciIsImxlbmd0aCIsInJlZHVjZSIsInByZXZpb3VzIiwibmV4dCIsInRoZW4iLCJQcm9taXNlIiwicmVzb2x2ZSJdLCJtYXBwaW5ncyI6IkFBQUEsR0FBTUEsUUFBTyxDQUFHQyxtQkFBTyxDQUFDLEtBQXhCLENBQ0EsMEJBSUlBLGdEQUpKLENBQ0VDLDBCQURGLHVCQUNFQSwwQkFERixDQUVFQyxRQUZGLHVCQUVFQSxRQUZGLENBR0VDLFlBSEYsdUJBR0VBLFlBSEYsQ0FNQUMsU0FBQSxDQUFvQixTQUFDQyxHQUFELENBQU1DLElBQU4sQ0FBaUJDLGFBQWpCLENBQWdDQyxZQUFoQyxDQUFpRCxJQUEzQ0YsSUFBMkMsV0FBM0NBLElBQTJDLENBQXBDLEVBQW9DLEVBQ25FO0FBQ0EsR0FBSUcsU0FBSixDQUFpQyxDQUMvQixHQUFJQyxNQUFNLENBQUNDLGFBQVgsQ0FBMEIsQ0FDeEJELE1BQU0sQ0FBQ0MsYUFBUCxDQUFxQk4sR0FBckIsRUFDRCxDQUZELElBRU8sSUFBSUssTUFBTSxDQUFDRSxlQUFYLENBQTRCLENBQ2pDRixNQUFNLENBQUNFLGVBQVAsQ0FBdUJDLElBQXZCLENBQTRCUixHQUE1QixFQUNELENBRk0sSUFFQSxDQUNMSyxNQUFNLENBQUNFLGVBQVAsQ0FBeUIsQ0FBQ1AsR0FBRCxDQUF6QixDQUNELENBQ0YsQ0FFRCxHQUFJUyxRQUFPLENBQUdmLE9BQU8sQ0FBQ2dCLEdBQVIsQ0FBWSxTQUFBQyxNQUFNLENBQUksQ0FDbEMsR0FBSSxDQUFDQSxNQUFNLENBQUNBLE1BQVAsQ0FBY1gsR0FBZCxDQUFMLENBQXlCLENBQ3ZCLE1BQU9ZLFVBQVAsQ0FDRCxDQUVEWCxJQUFJLENBQUNMLDBCQUFMLENBQWtDQSwwQkFBbEMsQ0FDQUssSUFBSSxDQUFDSixRQUFMLENBQWdCQSxRQUFoQixDQUNBSSxJQUFJLENBQUNILFlBQUwsQ0FBb0JBLFlBQXBCLENBRUEsR0FBTWUsT0FBTSxDQUFHRixNQUFNLENBQUNBLE1BQVAsQ0FBY1gsR0FBZCxFQUFtQkMsSUFBbkIsQ0FBeUJVLE1BQU0sQ0FBQ0csT0FBaEMsQ0FBZixDQUNBLEdBQUlELE1BQU0sRUFBSVYsWUFBZCxDQUE0QixDQUMxQkYsSUFBSSxDQUFHRSxZQUFZLENBQUMsQ0FBRUYsSUFBSSxDQUFKQSxJQUFGLENBQVFZLE1BQU0sQ0FBTkEsTUFBUixDQUFnQkYsTUFBTSxDQUFOQSxNQUFoQixDQUFELENBQW5CLENBQ0QsQ0FDRCxNQUFPRSxPQUFQLENBQ0QsQ0FkYSxDQUFkLENBZ0JBO0FBQ0FKLE9BQU8sQ0FBR0EsT0FBTyxDQUFDTSxNQUFSLENBQWUsU0FBQUYsTUFBTSxRQUFJLE9BQU9BLE9BQVAsY0FBSixFQUFyQixDQUFWLENBRUEsR0FBSUosT0FBTyxDQUFDTyxNQUFSLENBQWlCLENBQXJCLENBQXdCLENBQ3RCLE1BQU9QLFFBQVAsQ0FDRCxDQUZELElBRU8sSUFBSVAsYUFBSixDQUFtQixDQUN4QixNQUFPLENBQUNBLGFBQUQsQ0FBUCxDQUNELENBRk0sSUFFQSxDQUNMLE1BQU8sRUFBUCxDQUNELENBQ0YsQ0F0Q0QsQ0F3Q0FILFNBQUEsQ0FBeUIsU0FBQ0MsR0FBRCxDQUFNQyxJQUFOLENBQVlDLGFBQVosUUFDdkJSLFFBQU8sQ0FBQ3VCLE1BQVIsQ0FDRSxTQUFDQyxRQUFELENBQVdDLElBQVgsUUFDRUEsS0FBSSxDQUFDUixNQUFMLENBQVlYLEdBQVosRUFDSWtCLFFBQVEsQ0FBQ0UsSUFBVCxDQUFjLGlCQUFNRCxLQUFJLENBQUNSLE1BQUwsQ0FBWVgsR0FBWixFQUFpQkMsSUFBakIsQ0FBdUJrQixJQUFJLENBQUNMLE9BQTVCLENBQU4sRUFBZCxDQURKLENBRUlJLFFBSE4sRUFERixDQUtFRyxPQUFPLENBQUNDLE9BQVIsRUFMRixDQUR1QixFQUF6QiIsImZpbGUiOiI3MzQzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgcGx1Z2lucyA9IHJlcXVpcmUoYC4vYXBpLXJ1bm5lci1icm93c2VyLXBsdWdpbnNgKVxuY29uc3Qge1xuICBnZXRSZXNvdXJjZVVSTHNGb3JQYXRobmFtZSxcbiAgbG9hZFBhZ2UsXG4gIGxvYWRQYWdlU3luYyxcbn0gPSByZXF1aXJlKGAuL2xvYWRlcmApLnB1YmxpY0xvYWRlclxuXG5leHBvcnRzLmFwaVJ1bm5lciA9IChhcGksIGFyZ3MgPSB7fSwgZGVmYXVsdFJldHVybiwgYXJnVHJhbnNmb3JtKSA9PiB7XG4gIC8vIEhvb2tzIGZvciBnYXRzYnktY3lwcmVzcydzIEFQSSBoYW5kbGVyXG4gIGlmIChwcm9jZXNzLmVudi5DWVBSRVNTX1NVUFBPUlQpIHtcbiAgICBpZiAod2luZG93Ll9fX2FwaUhhbmRsZXIpIHtcbiAgICAgIHdpbmRvdy5fX19hcGlIYW5kbGVyKGFwaSlcbiAgICB9IGVsc2UgaWYgKHdpbmRvdy5fX19yZXNvbHZlZEFQSXMpIHtcbiAgICAgIHdpbmRvdy5fX19yZXNvbHZlZEFQSXMucHVzaChhcGkpXG4gICAgfSBlbHNlIHtcbiAgICAgIHdpbmRvdy5fX19yZXNvbHZlZEFQSXMgPSBbYXBpXVxuICAgIH1cbiAgfVxuXG4gIGxldCByZXN1bHRzID0gcGx1Z2lucy5tYXAocGx1Z2luID0+IHtcbiAgICBpZiAoIXBsdWdpbi5wbHVnaW5bYXBpXSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cblxuICAgIGFyZ3MuZ2V0UmVzb3VyY2VVUkxzRm9yUGF0aG5hbWUgPSBnZXRSZXNvdXJjZVVSTHNGb3JQYXRobmFtZVxuICAgIGFyZ3MubG9hZFBhZ2UgPSBsb2FkUGFnZVxuICAgIGFyZ3MubG9hZFBhZ2VTeW5jID0gbG9hZFBhZ2VTeW5jXG5cbiAgICBjb25zdCByZXN1bHQgPSBwbHVnaW4ucGx1Z2luW2FwaV0oYXJncywgcGx1Z2luLm9wdGlvbnMpXG4gICAgaWYgKHJlc3VsdCAmJiBhcmdUcmFuc2Zvcm0pIHtcbiAgICAgIGFyZ3MgPSBhcmdUcmFuc2Zvcm0oeyBhcmdzLCByZXN1bHQsIHBsdWdpbiB9KVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0XG4gIH0pXG5cbiAgLy8gRmlsdGVyIG91dCB1bmRlZmluZWQgcmVzdWx0cy5cbiAgcmVzdWx0cyA9IHJlc3VsdHMuZmlsdGVyKHJlc3VsdCA9PiB0eXBlb2YgcmVzdWx0ICE9PSBgdW5kZWZpbmVkYClcblxuICBpZiAocmVzdWx0cy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHJlc3VsdHNcbiAgfSBlbHNlIGlmIChkZWZhdWx0UmV0dXJuKSB7XG4gICAgcmV0dXJuIFtkZWZhdWx0UmV0dXJuXVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBbXVxuICB9XG59XG5cbmV4cG9ydHMuYXBpUnVubmVyQXN5bmMgPSAoYXBpLCBhcmdzLCBkZWZhdWx0UmV0dXJuKSA9PlxuICBwbHVnaW5zLnJlZHVjZShcbiAgICAocHJldmlvdXMsIG5leHQpID0+XG4gICAgICBuZXh0LnBsdWdpblthcGldXG4gICAgICAgID8gcHJldmlvdXMudGhlbigoKSA9PiBuZXh0LnBsdWdpblthcGldKGFyZ3MsIG5leHQub3B0aW9ucykpXG4gICAgICAgIDogcHJldmlvdXMsXG4gICAgUHJvbWlzZS5yZXNvbHZlKClcbiAgKVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7343\n')},8110:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n "Z": function() { return /* binding */ _cache_emitter; }\n});\n\n;// CONCATENATED MODULE: ./node_modules/mitt/dist/mitt.es.js\n// \n// An event handler can take an optional event argument\n// and should not return a value\n \n \n\n// An array of all currently registered event handlers for a type\n \n \n// A map of event types and their corresponding event handlers.\n \n \n \n \n\n/** Mitt: Tiny (~200b) functional event emitter / pubsub.\n * @name mitt\n * @returns {Mitt}\n */\nfunction mitt(all ) {\n\tall = all || Object.create(null);\n\n\treturn {\n\t\t/**\n\t\t * Register an event handler for the given type.\n\t\t *\n\t\t * @param {String} type\tType of event to listen for, or `"*"` for all events\n\t\t * @param {Function} handler Function to call in response to given event\n\t\t * @memberOf mitt\n\t\t */\n\t\ton: function on(type , handler ) {\n\t\t\t(all[type] || (all[type] = [])).push(handler);\n\t\t},\n\n\t\t/**\n\t\t * Remove an event handler for the given type.\n\t\t *\n\t\t * @param {String} type\tType of event to unregister `handler` from, or `"*"`\n\t\t * @param {Function} handler Handler function to remove\n\t\t * @memberOf mitt\n\t\t */\n\t\toff: function off(type , handler ) {\n\t\t\tif (all[type]) {\n\t\t\t\tall[type].splice(all[type].indexOf(handler) >>> 0, 1);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Invoke all handlers for the given type.\n\t\t * If present, `"*"` handlers are invoked after type-matched handlers.\n\t\t *\n\t\t * @param {String} type The event type to invoke\n\t\t * @param {Any} [evt] Any value (object is recommended and powerful), passed to each handler\n\t\t * @memberOf mitt\n\t\t */\n\t\temit: function emit(type , evt ) {\n\t\t\t(all[type] || []).slice().map(function (handler) { handler(evt); });\n\t\t\t(all[\'*\'] || []).slice().map(function (handler) { handler(type, evt); });\n\t\t}\n\t};\n}\n\n/* harmony default export */ var mitt_es = (mitt);\n//# sourceMappingURL=mitt.es.js.map\n\n;// CONCATENATED MODULE: ./.cache/emitter.js\nvar emitter=mitt_es();/* harmony default export */ var _cache_emitter = (emitter);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9taXR0L2Rpc3QvbWl0dC5lcy5qcz8xNGI3Iiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vLmNhY2hlL2VtaXR0ZXIuanM/ZTcyYSJdLCJuYW1lcyI6WyJlbWl0dGVyIiwibWl0dCJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBO0FBQ0E7QUFDQTs7OztBQUlBOzs7QUFHQTs7Ozs7O0FBTUE7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLE9BQU87QUFDckIsY0FBYyxTQUFTO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQSxjQUFjLE9BQU87QUFDckIsY0FBYyxTQUFTO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLE9BQU87QUFDcEIsYUFBYSxJQUFJO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBLHFEQUFxRCxjQUFjLEVBQUU7QUFDckUsb0RBQW9ELG9CQUFvQixFQUFFO0FBQzFFO0FBQ0E7QUFDQTs7QUFFQSw0Q0FBZSxJQUFJLEVBQUM7QUFDcEI7OztBQzdEQSxHQUFNQSxRQUFPLENBQUdDLE9BQUksRUFBcEIsQ0FDQSxtREFBZUQsT0FBZiIsImZpbGUiOiI4MTEwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gICAgICBcbi8vIEFuIGV2ZW50IGhhbmRsZXIgY2FuIHRha2UgYW4gb3B0aW9uYWwgZXZlbnQgYXJndW1lbnRcbi8vIGFuZCBzaG91bGQgbm90IHJldHVybiBhIHZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXG4vLyBBbiBhcnJheSBvZiBhbGwgY3VycmVudGx5IHJlZ2lzdGVyZWQgZXZlbnQgaGFuZGxlcnMgZm9yIGEgdHlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuLy8gQSBtYXAgb2YgZXZlbnQgdHlwZXMgYW5kIHRoZWlyIGNvcnJlc3BvbmRpbmcgZXZlbnQgaGFuZGxlcnMuXG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgXG5cbi8qKiBNaXR0OiBUaW55ICh+MjAwYikgZnVuY3Rpb25hbCBldmVudCBlbWl0dGVyIC8gcHVic3ViLlxuICogIEBuYW1lIG1pdHRcbiAqICBAcmV0dXJucyB7TWl0dH1cbiAqL1xuZnVuY3Rpb24gbWl0dChhbGwgICAgICAgICAgICAgICAgICkge1xuXHRhbGwgPSBhbGwgfHwgT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuXHRyZXR1cm4ge1xuXHRcdC8qKlxuXHRcdCAqIFJlZ2lzdGVyIGFuIGV2ZW50IGhhbmRsZXIgZm9yIHRoZSBnaXZlbiB0eXBlLlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtICB7U3RyaW5nfSB0eXBlXHRUeXBlIG9mIGV2ZW50IHRvIGxpc3RlbiBmb3IsIG9yIGBcIipcImAgZm9yIGFsbCBldmVudHNcblx0XHQgKiBAcGFyYW0gIHtGdW5jdGlvbn0gaGFuZGxlciBGdW5jdGlvbiB0byBjYWxsIGluIHJlc3BvbnNlIHRvIGdpdmVuIGV2ZW50XG5cdFx0ICogQG1lbWJlck9mIG1pdHRcblx0XHQgKi9cblx0XHRvbjogZnVuY3Rpb24gb24odHlwZSAgICAgICAgLCBoYW5kbGVyICAgICAgICAgICAgICApIHtcblx0XHRcdChhbGxbdHlwZV0gfHwgKGFsbFt0eXBlXSA9IFtdKSkucHVzaChoYW5kbGVyKTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogUmVtb3ZlIGFuIGV2ZW50IGhhbmRsZXIgZm9yIHRoZSBnaXZlbiB0eXBlLlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtICB7U3RyaW5nfSB0eXBlXHRUeXBlIG9mIGV2ZW50IHRvIHVucmVnaXN0ZXIgYGhhbmRsZXJgIGZyb20sIG9yIGBcIipcImBcblx0XHQgKiBAcGFyYW0gIHtGdW5jdGlvbn0gaGFuZGxlciBIYW5kbGVyIGZ1bmN0aW9uIHRvIHJlbW92ZVxuXHRcdCAqIEBtZW1iZXJPZiBtaXR0XG5cdFx0ICovXG5cdFx0b2ZmOiBmdW5jdGlvbiBvZmYodHlwZSAgICAgICAgLCBoYW5kbGVyICAgICAgICAgICAgICApIHtcblx0XHRcdGlmIChhbGxbdHlwZV0pIHtcblx0XHRcdFx0YWxsW3R5cGVdLnNwbGljZShhbGxbdHlwZV0uaW5kZXhPZihoYW5kbGVyKSA+Pj4gMCwgMSk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIEludm9rZSBhbGwgaGFuZGxlcnMgZm9yIHRoZSBnaXZlbiB0eXBlLlxuXHRcdCAqIElmIHByZXNlbnQsIGBcIipcImAgaGFuZGxlcnMgYXJlIGludm9rZWQgYWZ0ZXIgdHlwZS1tYXRjaGVkIGhhbmRsZXJzLlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IHR5cGUgIFRoZSBldmVudCB0eXBlIHRvIGludm9rZVxuXHRcdCAqIEBwYXJhbSB7QW55fSBbZXZ0XSAgQW55IHZhbHVlIChvYmplY3QgaXMgcmVjb21tZW5kZWQgYW5kIHBvd2VyZnVsKSwgcGFzc2VkIHRvIGVhY2ggaGFuZGxlclxuXHRcdCAqIEBtZW1iZXJPZiBtaXR0XG5cdFx0ICovXG5cdFx0ZW1pdDogZnVuY3Rpb24gZW1pdCh0eXBlICAgICAgICAsIGV2dCAgICAgKSB7XG5cdFx0XHQoYWxsW3R5cGVdIHx8IFtdKS5zbGljZSgpLm1hcChmdW5jdGlvbiAoaGFuZGxlcikgeyBoYW5kbGVyKGV2dCk7IH0pO1xuXHRcdFx0KGFsbFsnKiddIHx8IFtdKS5zbGljZSgpLm1hcChmdW5jdGlvbiAoaGFuZGxlcikgeyBoYW5kbGVyKHR5cGUsIGV2dCk7IH0pO1xuXHRcdH1cblx0fTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbWl0dDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW1pdHQuZXMuanMubWFwXG4iLCJpbXBvcnQgbWl0dCBmcm9tIFwibWl0dFwiXG5cbmNvbnN0IGVtaXR0ZXIgPSBtaXR0KClcbmV4cG9ydCBkZWZhdWx0IGVtaXR0ZXJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8110\n')},2257:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n "UD": function() { return /* binding */ findMatchPath; },\n "Cj": function() { return /* binding */ findPath; },\n "GA": function() { return /* binding */ grabMatchParams; },\n "DS": function() { return /* binding */ setMatchPaths; }\n});\n\n// UNUSED EXPORTS: cleanPath\n\n// EXTERNAL MODULE: ./node_modules/@gatsbyjs/reach-router/lib/utils.js\nvar utils = __webpack_require__(2098);\n// EXTERNAL MODULE: ./.cache/strip-prefix.js\nvar strip_prefix = __webpack_require__(1578);\n;// CONCATENATED MODULE: ./.cache/normalize-page-path.js\n/* harmony default export */ var normalize_page_path = (function(path){if(path===undefined){return path;}if(path==="/"){return"/";}if(path.charAt(path.length-1)==="/"){return path.slice(0,-1);}return path;});\n// EXTERNAL MODULE: ./.cache/redirect-utils.js + 1 modules\nvar redirect_utils = __webpack_require__(5166);\n;// CONCATENATED MODULE: ./.cache/find-path.js\nvar pathCache=new Map();var matchPaths=[];var trimPathname=function trimPathname(rawPathname){var pathname=decodeURIComponent(rawPathname);// Remove the pathPrefix from the pathname.\nvar trimmedPathname=(0,strip_prefix/* default */.Z)(pathname,decodeURIComponent("/justice40-tool/main"))// Remove any hashfragment\n.split("#")[0]// Remove search query\n.split("?")[0];return trimmedPathname;};function absolutify(path){// If it\'s already absolute, return as-is\nif(path.startsWith("/")||path.startsWith("https://")||path.startsWith("http://")){return path;}// Calculate path relative to current location, adding a trailing slash to\n// match behavior of @reach/router\nreturn new URL(path,window.location.href+(window.location.href.endsWith("/")?"":"/")).pathname;}/**\n * Set list of matchPaths\n *\n * @param {Array<{path: string, matchPath: string}>} value collection of matchPaths\n */var setMatchPaths=function setMatchPaths(value){matchPaths=value;};/**\n * Return a matchpath url\n * if `match-paths.json` contains `{ "/foo*": "/page1", ...}`, then\n * `/foo?bar=far` => `/page1`\n *\n * @param {string} rawPathname A raw pathname\n * @return {string|null}\n */var findMatchPath=function findMatchPath(rawPathname){var trimmedPathname=cleanPath(rawPathname);var pickPaths=matchPaths.map(function(_ref){var path=_ref.path,matchPath=_ref.matchPath;return{path:matchPath,originalPath:path};});var path=(0,utils.pick)(pickPaths,trimmedPathname);if(path){return normalize_page_path(path.route.originalPath);}return null;};/**\n * Return a matchpath params from reach/router rules\n * if `match-paths.json` contains `{ ":bar/*foo" }`, and the path is /baz/zaz/zoo\n * then it returns\n * { bar: baz, foo: zaz/zoo }\n *\n * @param {string} rawPathname A raw pathname\n * @return {object}\n */var grabMatchParams=function grabMatchParams(rawPathname){var trimmedPathname=cleanPath(rawPathname);var pickPaths=matchPaths.map(function(_ref2){var path=_ref2.path,matchPath=_ref2.matchPath;return{path:matchPath,originalPath:path};});var path=(0,utils.pick)(pickPaths,trimmedPathname);if(path){return path.params;}return{};};// Given a raw URL path, returns the cleaned version of it (trim off\n// `#` and query params), or if it matches an entry in\n// `match-paths.json`, its matched path is returned\n//\n// E.g. `/foo?bar=far` => `/foo`\n//\n// Or if `match-paths.json` contains `{ "/foo*": "/page1", ...}`, then\n// `/foo?bar=far` => `/page1`\nvar findPath=function findPath(rawPathname){var trimmedPathname=trimPathname(absolutify(rawPathname));if(pathCache.has(trimmedPathname)){return pathCache.get(trimmedPathname);}var redirect=(0,redirect_utils/* maybeGetBrowserRedirect */.J)(rawPathname);if(redirect){return findPath(redirect.toPath);}var foundPath=findMatchPath(trimmedPathname);if(!foundPath){foundPath=cleanPath(rawPathname);}pathCache.set(trimmedPathname,foundPath);return foundPath;};/**\n * Clean a url and converts /index.html => /\n * E.g. `/foo?bar=far` => `/foo`\n *\n * @param {string} rawPathname A raw pathname\n * @return {string}\n */var cleanPath=function cleanPath(rawPathname){var trimmedPathname=trimPathname(absolutify(rawPathname));var foundPath=trimmedPathname;if(foundPath==="/index.html"){foundPath="/";}foundPath=normalize_page_path(foundPath);return foundPath;};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uLy5jYWNoZS9ub3JtYWxpemUtcGFnZS1wYXRoLmpzPzY3YjUiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi8uY2FjaGUvZmluZC1wYXRoLmpzP2RmNDQiXSwibmFtZXMiOlsicGF0aCIsInVuZGVmaW5lZCIsImNoYXJBdCIsImxlbmd0aCIsInNsaWNlIiwicGF0aENhY2hlIiwiTWFwIiwibWF0Y2hQYXRocyIsInRyaW1QYXRobmFtZSIsInJhd1BhdGhuYW1lIiwicGF0aG5hbWUiLCJkZWNvZGVVUklDb21wb25lbnQiLCJ0cmltbWVkUGF0aG5hbWUiLCJzdHJpcFByZWZpeCIsIl9fQkFTRV9QQVRIX18iLCJzcGxpdCIsImFic29sdXRpZnkiLCJzdGFydHNXaXRoIiwiVVJMIiwid2luZG93IiwibG9jYXRpb24iLCJocmVmIiwiZW5kc1dpdGgiLCJzZXRNYXRjaFBhdGhzIiwidmFsdWUiLCJmaW5kTWF0Y2hQYXRoIiwiY2xlYW5QYXRoIiwicGlja1BhdGhzIiwibWFwIiwibWF0Y2hQYXRoIiwib3JpZ2luYWxQYXRoIiwicGljayIsIm5vcm1hbGl6ZVBhZ2VQYXRoIiwicm91dGUiLCJncmFiTWF0Y2hQYXJhbXMiLCJwYXJhbXMiLCJmaW5kUGF0aCIsImhhcyIsImdldCIsInJlZGlyZWN0IiwibWF5YmVHZXRCcm93c2VyUmVkaXJlY3QiLCJ0b1BhdGgiLCJmb3VuZFBhdGgiLCJzZXQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx3REFBZSxTQUFBQSxJQUFJLENBQUksQ0FDckIsR0FBSUEsSUFBSSxHQUFLQyxTQUFiLENBQXdCLENBQ3RCLE1BQU9ELEtBQVAsQ0FDRCxDQUNELEdBQUlBLElBQUksTUFBUixDQUFrQixDQUNoQixVQUNELENBQ0QsR0FBSUEsSUFBSSxDQUFDRSxNQUFMLENBQVlGLElBQUksQ0FBQ0csTUFBTCxDQUFjLENBQTFCLE9BQUosQ0FBMEMsQ0FDeEMsTUFBT0gsS0FBSSxD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cG9ydCBkZWZhdWx0IHBhdGggPT4ge1xuICBpZiAocGF0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHBhdGhcbiAgfVxuICBpZiAocGF0aCA9PT0gYC9gKSB7XG4gICAgcmV0dXJuIGAvYFxuICB9XG4gIGlmIChwYXRoLmNoYXJBdChwYXRoLmxlbmd0aCAtIDEpID09PSBgL2ApIHtcbiAgICByZXR1cm4gcGF0aC5zbGljZSgwLCAtMSlcbiAgfVxuICByZXR1cm4gcGF0aFxufVxuIiwiaW1wb3J0IHsgcGljayB9IGZyb20gXCJAZ2F0c2J5anMvcmVhY2gtcm91dGVyL2xpYi91dGlsc1wiXG5pbXBvcnQgc3RyaXBQcmVmaXggZnJvbSBcIi4vc3RyaXAtcHJlZml4XCJcbmltcG9ydCBub3JtYWxpemVQYWdlUGF0aCBmcm9tIFwiLi9ub3JtYWxpemUtcGFnZS1wYXRoXCJcbmltcG9ydCB7IG1heWJlR2V0QnJvd3NlclJlZGlyZWN0IH0gZnJvbSBcIi4vcmVkaXJlY3QtdXRpbHMuanNcIlxuXG5jb25zdCBwYXRoQ2FjaGUgPSBuZXcgTWFwKClcbmxldCBtYXRjaFBhdGhzID0gW11cblxuY29uc3QgdHJpbVBhdGhuYW1lID0gcmF3UGF0aG5hbWUgPT4ge1xuICBjb25zdCBwYXRobmFtZSA9IGRlY29kZVVSSUNvbXBvbmVudChyYXdQYXRobmFtZSlcbiAgLy8gUmVtb3ZlIHRoZSBwYXRoUHJlZml4IGZyb20gdGhlIHBhdGhuYW1lLlxuICBjb25zdCB0cmltbWVkUGF0aG5hbWUgPSBzdHJpcFByZWZpeChcbiAgICBwYXRobmFtZSxcbiAgICBkZWNvZGVVUklDb21wb25lbnQoX19CQVNFX1BBVEhfXylcbiAgKVxuICAgIC8vIFJlbW92ZSBhbnkgaGFzaGZyYWdtZW50XG4gICAgLnNwbGl0KGAjYClbMF1cbiAgICAvLyBSZW1vdmUgc2VhcmNoIHF1ZXJ5XG4gICAgLnNwbGl0KGA/YClbMF1cblxuICByZXR1cm4gdHJpbW1lZFBhdGhuYW1lXG59XG5cbmZ1bmN0aW9uIGFic29sdXRpZnkocGF0aCkge1xuICAvLyBJZiBpdCdzIGFscmVhZHkgYWJzb2x1dGUsIHJldHVybiBhcy1pc1xuICBpZiAoXG4gICAgcGF0aC5zdGFydHNXaXRoKGAvYCkgfHxcbiAgICBwYXRoLnN0YXJ0c1dpdGgoYGh0dHBzOi8vYCkgfHxcbiAgICBwYXRoLnN0YXJ0c1dpdGgoYGh0dHA6Ly9gKVxuICApIHtcbiAgICByZXR1cm4gcGF0aFxuICB9XG4gIC8vIENhbGN1bGF0ZSBwYXRoIHJlbGF0aXZlIHRvIGN1cnJlbnQgbG9jYXRpb24sIGFkZGluZyBhIHRyYWlsaW5nIHNsYXNoIHRvXG4gIC8vIG1hdGNoIGJlaGF2aW9yIG9mIEByZWFjaC9yb3V0ZXJcbiAgcmV0dXJuIG5ldyBVUkwoXG4gICAgcGF0aCxcbiAgICB3aW5kb3cubG9jYXRpb24uaHJlZiArICh3aW5kb3cubG9jYXRpb24uaHJlZi5lbmRzV2l0aChgL2ApID8gYGAgOiBgL2ApXG4gICkucGF0aG5hbWVcbn1cblxuLyoqXG4gKiBTZXQgbGlzdCBvZiBtYXRjaFBhdGhzXG4gKlxuICogQHBhcmFtIHtBcnJheTx7cGF0aDogc3RyaW5nLCBtYXRjaFBhdGg6IHN0cmluZ30+fSB2YWx1ZSBjb2xsZWN0aW9uIG9mIG1hdGNoUGF0aHNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldE1hdGNoUGF0aHMgPSB2YWx1ZSA9PiB7XG4gIG1hdGNoUGF0aHMgPSB2YWx1ZVxufVxuXG4vKipcbiAqIFJldHVybiBhIG1hdGNocGF0aCB1cmxcbiAqIGlmIGBtYXRjaC1wYXRocy5qc29uYCBjb250YWlucyBgeyBcIi9mb28qXCI6IFwiL3BhZ2UxXCIsIC4uLn1gLCB0aGVuXG4gKiBgL2Zvbz9iYXI9ZmFyYCA9PiBgL3BhZ2UxYFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSByYXdQYXRobmFtZSBBIHJhdyBwYXRobmFtZVxuICogQHJldHVybiB7c3RyaW5nfG51bGx9XG4gKi9cbmV4cG9ydCBjb25zdCBmaW5kTWF0Y2hQYXRoID0gcmF3UGF0aG5hbWUgPT4ge1xuICBjb25zdCB0cmltbWVkUGF0aG5hbWUgPSBjbGVhblBhdGgocmF3UGF0aG5hbWUpXG5cbiAgY29uc3QgcGlja1BhdGhzID0gbWF0Y2hQYXRocy5tYXAoKHsgcGF0aCwgbWF0Y2hQYXRoIH0pID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgcGF0aDogbWF0Y2hQYXRoLFxuICAgICAgb3JpZ2luYWxQYXRoOiBwYXRoLFxuICAgIH1cbiAgfSlcblxuICBjb25zdCBwYXRoID0gcGljayhwaWNrUGF0aHMsIHRyaW1tZWRQYXRobmFtZSlcblxuICBpZiAocGF0aCkge1xuICAgIHJldHVybiBub3JtYWxpemVQYWdlUGF0aChwYXRoLnJvdXRlLm9yaWdpbmFsUGF0aClcbiAgfVxuXG4gIHJldHVybiBudWxsXG59XG5cbi8qKlxuICogUmV0dXJuIGEgbWF0Y2hwYXRoIHBhcmFtcyBmcm9tIHJlYWNoL3JvdXRlciBydWxlc1xuICogaWYgYG1hdGNoLXBhdGhzLmpzb25gIGNvbnRhaW5zIGB7IFwiOmJhci8qZm9vXCIgfWAsIGFuZCB0aGUgcGF0aCBpcyAvYmF6L3phei96b29cbiAqIHRoZW4gaXQgcmV0dXJuc1xuICogIHsgYmFyOiBiYXosIGZvbzogemF6L3pvbyB9XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHJhd1BhdGhuYW1lIEEgcmF3IHBhdGhuYW1lXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBjb25zdCBncmFiTWF0Y2hQYXJhbXMgPSByYXdQYXRobmFtZSA9PiB7XG4gIGNvbnN0IHRyaW1tZWRQYXRobmFtZSA9IGNsZWFuUGF0aChyYXdQYXRobmFtZSlcblxuICBjb25zdCBwaWNrUGF0aHMgPSBtYXRjaFBhdGhzLm1hcCgoeyBwYXRoLCBtYXRjaFBhdGggfSkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBwYXRoOiBtYXRjaFBhdGgsXG4gICAgICBvcmlnaW5hbFBhdGg6IHBhdGgsXG4gICAgfVxuICB9KVxuXG4gIGNvbnN0IHBhdGggPSBwaWNrKHBpY2tQYXRocywgdHJpbW1lZFBhdGhuYW1lKVxuXG4gIGlmIChwYXRoKSB7XG4gICAgcmV0dXJuIHBhdGgucGFyYW1zXG4gIH1cblxuICByZXR1cm4ge31cbn1cblxuLy8gR2l2ZW4gYSByYXcgVVJMIHBhdGgsIHJldHVybnMgdGhlIGNsZWFuZWQgdmVyc2lvbiBvZiBpdCAodHJpbSBvZmZcbi8vIGAjYCBhbmQgcXVlcnkgcGFyYW1zKSwgb3IgaWYgaXQgbWF0Y2hlcyBhbiBlbnRyeSBpblxuLy8gYG1hdGNoLXBhdGhzLmpzb25gLCBpdHMgbWF0Y2hlZCBwYXRoIGlzIHJldHVybmVkXG4vL1xuLy8gRS5nLiBgL2Zvbz9iYXI9ZmFyYCA9PiBgL2Zvb2Bcbi8vXG4vLyBPciBpZiBgbWF0Y2gtcGF0aHMuanNvbmAgY29udGFpbnMgYHsgXCIvZm9vKlwiOiBcIi9wYWdlMVwiLCAuLi59YCwgdGhlblxuLy8gYC9mb28/YmFyPWZhcmAgPT4gYC9wYWdlMWBcbmV4cG9ydCBjb25zdCBmaW5kUGF0aCA9IHJhd1BhdGhuYW1lID0+IHtcbiAgY29uc3QgdHJpbW1lZFBhdGhuYW1lID0gdHJpbVBhdGhuYW1lKGFic29sdXRpZnkocmF3UGF0aG5hbWUpKVxuICBpZiAocGF0aENhY2hlLmhhcyh0cmltbWVkUGF0aG5hbWUpKSB7XG4gICAgcmV0dXJuIHBhdGhDYWNoZS5nZXQodHJpbW1lZFBhdGhuYW1lKVxuICB9XG5cbiAgY29uc3QgcmVkaXJlY3QgPSBtYXliZUdldEJyb3dzZXJSZWRpcmVjdChyYXdQYXRobmFtZSlcbiAgaWYgKHJlZGlyZWN0KSB7XG4gICAgcmV0dXJuIGZpbmRQYXRoKHJlZGlyZWN0LnRvUGF0aClcbiAgfVxuXG4gIGxldCBmb3VuZFBhdGggPSBmaW5kTWF0Y2hQYXRoKHRyaW1tZWRQYXRobmFtZSlcblxuICBpZiAoIWZvdW5kUGF0aCkge1xuICAgIGZvdW5kUGF0aCA9IGNsZWFuUGF0aChyYXdQYXRobmFtZSlcbiAgfVxuXG4gIHBhdGhDYWNoZS5zZXQodHJpbW1lZFBhdGhuYW1lLCBmb3VuZFBhdGgpXG5cbiAgcmV0dXJuIGZvdW5kUGF0aFxufVxuXG4vKipcbiAqIENsZWFuIGEgdXJsIGFuZCBjb252ZXJ0cyAvaW5kZXguaHRtbCA9PiAvXG4gKiBFLmcuIGAvZm9vP2Jhcj1mYXJgID0+IGAvZm9vYFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSByYXdQYXRobmFtZSBBIHJhdyBwYXRobmFtZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgY29uc3QgY2xlYW5QYXRoID0gcmF3UGF0aG5hbWUgPT4ge1xuICBjb25zdCB0cmltbWVkUGF0aG5hbWUgPSB0cmltUGF0aG5hbWUoYWJzb2x1dGlmeShyYXdQYXRobmFtZSkpXG5cbiAgbGV0IGZvdW5kUGF0aCA9IHRyaW1tZWRQYXRobmFtZVxuICBpZiAoZm91bmRQYXRoID09PSBgL2luZGV4Lmh0bWxgKSB7XG4gICAgZm91bmRQYXRoID0gYC9gXG4gIH1cblxuICBmb3VuZFBhdGggPSBub3JtYWxpemVQYWdlUGF0aChmb3VuZFBhdGgpXG5cbiAgcmV0dXJuIGZvdW5kUGF0aFxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2257\n')},5444:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Link": function() { return /* reexport safe */ gatsby_link__WEBPACK_IMPORTED_MODULE_1__.ZP; },\n/* harmony export */ "withAssetPrefix": function() { return /* reexport safe */ gatsby_link__WEBPACK_IMPORTED_MODULE_1__.mc; },\n/* harmony export */ "withPrefix": function() { return /* reexport safe */ gatsby_link__WEBPACK_IMPORTED_MODULE_1__.dq; },\n/* harmony export */ "graphql": function() { return /* binding */ graphql; },\n/* harmony export */ "parsePath": function() { return /* reexport safe */ gatsby_link__WEBPACK_IMPORTED_MODULE_1__.cP; },\n/* harmony export */ "navigate": function() { return /* reexport safe */ gatsby_link__WEBPACK_IMPORTED_MODULE_1__.c4; },\n/* harmony export */ "useScrollRestoration": function() { return /* reexport safe */ gatsby_react_router_scroll__WEBPACK_IMPORTED_MODULE_2__.p2; },\n/* harmony export */ "StaticQueryContext": function() { return /* binding */ StaticQueryContext; },\n/* harmony export */ "StaticQuery": function() { return /* binding */ StaticQuery; },\n/* harmony export */ "PageRenderer": function() { return /* reexport default from dynamic */ _public_page_renderer__WEBPACK_IMPORTED_MODULE_3___default.a; },\n/* harmony export */ "useStaticQuery": function() { return /* binding */ useStaticQuery; },\n/* harmony export */ "prefetchPathname": function() { return /* binding */ prefetchPathname; }\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7294);\n/* harmony import */ var gatsby_link__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(8037);\n/* harmony import */ var gatsby_react_router_scroll__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(9679);\n/* harmony import */ var _public_page_renderer__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(861);\n/* harmony import */ var _public_page_renderer__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_public_page_renderer__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _loader__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(8741);\nvar prefetchPathname=_loader__WEBPACK_IMPORTED_MODULE_4__/* .default.enqueue */ .ZP.enqueue;var StaticQueryContext=/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext({});function StaticQueryDataRenderer(_ref){var staticQueryData=_ref.staticQueryData,data=_ref.data,query=_ref.query,render=_ref.render;var finalData=data?data.data:staticQueryData[query]&&staticQueryData[query].data;return/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment,null,finalData&&render(finalData),!finalData&&/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("div",null,"Loading (StaticQuery)"));}var StaticQuery=function StaticQuery(props){var data=props.data,query=props.query,render=props.render,children=props.children;return/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(StaticQueryContext.Consumer,null,function(staticQueryData){return/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(StaticQueryDataRenderer,{data:data,query:query,render:render||children,staticQueryData:staticQueryData});});};var useStaticQuery=function useStaticQuery(query){var _context$query;if(typeof react__WEBPACK_IMPORTED_MODULE_0__.useContext!=="function"&&"production"==="development"){throw new Error("You\'re likely using a version of React that doesn\'t support Hooks\\n"+"Please update React and ReactDOM to 16.8.0 or later to use the useStaticQuery hook.");}var context=react__WEBPACK_IMPORTED_MODULE_0__.useContext(StaticQueryContext);// query is a stringified number like `3303882` when wrapped with graphql, If a user forgets\n// to wrap the query in a grqphql, then casting it to a Number results in `NaN` allowing us to\n// catch the misuse of the API and give proper direction\nif(isNaN(Number(query))){throw new Error("useStaticQuery was called with a string but expects to be called using `graphql`. Try this:\\n\\nimport { useStaticQuery, graphql } from \'gatsby\';\\n\\nuseStaticQuery(graphql`"+query+"`);\\n");}if((_context$query=context[query])!==null&&_context$query!==void 0&&_context$query.data){return context[query].data;}else{throw new Error("The result of this StaticQuery could not be fetched.\\n\\n"+"This is likely a bug in Gatsby and if refreshing the page does not fix it, "+"please open an issue in https://github.com/gatsbyjs/gatsby/issues");}};function graphql(){throw new Error("It appears like Gatsby is misconfigured. Gatsby related `graphql` calls "+"are supposed to only be evaluated at compile time, and then compiled away. "+"Unfortunately, something went wrong and the query was left in the compiled code.\\n\\n"+"Unless your site has a complex or custom babel/Gatsby configuration this is likely a bug in Gatsby.");}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uLy5jYWNoZS9nYXRzYnktYnJvd3Nlci1lbnRyeS5qcz81OWJjIl0sIm5hbWVzIjpbInByZWZldGNoUGF0aG5hbWUiLCJsb2FkZXIiLCJTdGF0aWNRdWVyeUNvbnRleHQiLCJSZWFjdCIsIlN0YXRpY1F1ZXJ5RGF0YVJlbmRlcmVyIiwic3RhdGljUXVlcnlEYXRhIiwiZGF0YSIsInF1ZXJ5IiwicmVuZGVyIiwiZmluYWxEYXRhIiwiU3RhdGljUXVlcnkiLCJwcm9wcyIsImNoaWxkcmVuIiwidXNlU3RhdGljUXVlcnkiLCJwcm9jZXNzIiwiRXJyb3IiLCJjb250ZXh0IiwiaXNOYU4iLCJOdW1iZXIiLCJncmFwaHFsIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFlQSxHQUFNQSxpQkFBZ0IsQ0FBR0Msc0VBQXpCLENBRUEsR0FBTUMsbUJBQWtCLGNBQUdDLGdEQUFBLENBQW9CLEVBQXBCLENBQTNCLENBRUEsUUFBU0Msd0JBQVQsTUFBMkUsSUFBeENDLGdCQUF3QyxNQUF4Q0EsZUFBd0MsQ0FBdkJDLElBQXVCLE1BQXZCQSxJQUF1QixDQUFqQkMsS0FBaUIsTUFBakJBLEtBQWlCLENBQVZDLE1BQVUsTUFBVkEsTUFBVSxDQUN6RSxHQUFNQyxVQUFTLENBQUdILElBQUksQ0FDbEJBLElBQUksQ0FBQ0EsSUFEYSxDQUVsQkQsZUFBZSxDQUFDRSxLQUFELENBQWYsRUFBMEJGLGVBQWUsQ0FBQ0UsS0FBRCxDQUFmLENBQXVCRCxJQUZyRCxDQUlBLG1CQUNFLGlEQUFDLDJDQUFELE1BQ0dHLFNBQVMsRUFBSUQsTUFBTSxDQUFDQyxTQUFELENBRHRCLENBRUcsQ0FBQ0EsU0FBRCxlQUFjLG9GQUZqQixDQURGLENBTUQsQ0FFRCxHQUFNQyxZQUFXLENBQUcsUUFBZEEsWUFBYyxDQUFBQyxLQUFLLENBQUksQ0FDM0IsR0FBUUwsS0FBUixDQUEwQ0ssS0FBMUMsQ0FBUUwsSUFBUixDQUFjQyxLQUFkLENBQTBDSSxLQUExQyxDQUFjSixLQUFkLENBQXFCQyxNQUFyQixDQUEwQ0csS0FBMUMsQ0FBcUJILE1BQXJCLENBQTZCSSxRQUE3QixDQUEwQ0QsS0FBMUMsQ0FBNkJDLFFBQTdCLENBRUEsbUJBQ0UsaURBQUMsa0JBQUQsQ0FBb0IsUUFBcEIsTUFDRyxTQUFBUCxlQUFlLHFCQUNkLGlEQUFDLHVCQUFELEVBQ0UsSUFBSSxDQUFFQyxJQURSLENBRUUsS0FBSyxDQUFFQyxLQUZULENBR0UsTUFBTSxDQUFFQyxNQUFNLEVBQUlJLFFBSHBCLENBSUUsZUFBZSxDQUFFUCxlQUpuQixFQURjLEVBRGxCLENBREYsQ0FZRCxDQWZELENBaUJBLEdBQU1RLGVBQWMsQ0FBRyxRQUFqQkEsZUFBaUIsQ0FBQU4sS0FBSyxDQUFJLG9CQUM5QixHQUNFLE1BQU9KLDhDQUFQLGVBQ0FXLFlBQUEsZ0JBRkYsQ0FHRSxDQUNBLEtBQU0sSUFBSUMsTUFBSixDQUNKLDJKQURJLENBQU4sQ0FJRCxDQUNELEdBQU1DLFFBQU8sQ0FBR2IsNkNBQUEsQ0FBaUJELGtCQUFqQixDQUFoQixDQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUllLEtBQUssQ0FBQ0MsTUFBTSxDQUFDWCxLQUFELENBQVAsQ0FBVCxDQUEwQixDQUN4QixLQUFNLElBQUlRLE1BQUosK0tBSWdCUixLQUpoQixTQUFOLENBTUQsQ0FFRCxtQkFBSVMsT0FBTyxDQUFDVCxLQUFELENBQVgsbUNBQUksZUFBZ0JELElBQXBCLENBQTBCLENBQ3hCLE1BQU9VLFFBQU8sQ0FBQ1QsS0FBRCxDQUFQLENBQWVELElBQXRCLENBQ0QsQ0FGRCxJQUVPLENBQ0wsS0FBTSxJQUFJUyxNQUFKLENBQ0osNE1BREksQ0FBTixDQUtELENBQ0YsQ0FqQ0QsQ0EwQ0EsUUFBU0ksUUFBVCxFQUFtQixDQUNqQixLQUFNLElBQUlKLE1BQUosQ0FDSixxVkFESSxDQUFOLENBTUQiLCJmaWxlIjoiNTQ0NC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiXG5pbXBvcnQgTGluaywge1xuICB3aXRoUHJlZml4LFxuICB3aXRoQXNzZXRQcmVmaXgsXG4gIG5hdmlnYXRlLFxuICBwdXNoLFxuICByZXBsYWNlLFxuICBuYXZpZ2F0ZVRvLFxuICBwYXJzZVBhdGgsXG59IGZyb20gXCJnYXRzYnktbGlua1wiXG5pbXBvcnQgeyB1c2VTY3JvbGxSZXN0b3JhdGlvbiB9IGZyb20gXCJnYXRzYnktcmVhY3Qtcm91dGVyLXNjcm9sbFwiXG5pbXBvcnQgUGFnZVJlbmRlcmVyIGZyb20gXCIuL3B1YmxpYy1wYWdlLXJlbmRlcmVyXCJcbmltcG9ydCBsb2FkZXIgZnJvbSBcIi4vbG9hZGVyXCJcblxuY29uc3QgcHJlZmV0Y2hQYXRobmFtZSA9IGxvYWRlci5lbnF1ZXVlXG5cbmNvbnN0IFN0YXRpY1F1ZXJ5Q29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQoe30pXG5cbmZ1bmN0aW9uIFN0YXRpY1F1ZXJ5RGF0YVJlbmRlcmVyKHsgc3RhdGljUXVlcnlEYXRhLCBkYXRhLCBxdWVyeSwgcmVuZGVyIH0pIHtcbiAgY29uc3QgZmluYWxEYXRhID0gZGF0YVxuICAgID8gZGF0YS5kYXRhXG4gICAgOiBzdGF0aWNRdWVyeURhdGFbcXVlcnldICYmIHN0YXRpY1F1ZXJ5RGF0YVtxdWVyeV0uZGF0YVxuXG4gIHJldHVybiAoXG4gICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAge2ZpbmFsRGF0YSAmJiByZW5kZXIoZmluYWxEYXRhKX1cbiAgICAgIHshZmluYWxEYXRhICYmIDxkaXY+TG9hZGluZyAoU3RhdGljUXVlcnkpPC9kaXY+fVxuICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gIClcbn1cblxuY29uc3QgU3RhdGljUXVlcnkgPSBwcm9wcyA9PiB7XG4gIGNvbnN0IHsgZGF0YSwgcXVlcnksIHJlbmRlciwgY2hpbGRyZW4gfSA9IHByb3BzXG5cbiAgcmV0dXJuIChcbiAgICA8U3RhdGljUXVlcnlDb250ZXh0LkNvbnN1bWVyPlxuICAgICAge3N0YXRpY1F1ZXJ5RGF0YSA9PiAoXG4gICAgICAgIDxTdGF0aWNRdWVyeURhdGFSZW5kZXJlclxuICAgICAgICAgIGRhdGE9e2RhdGF9XG4gICAgICAgICAgcXVlcnk9e3F1ZXJ5fVxuICAgICAgICAgIHJlbmRlcj17cmVuZGVyIHx8IGNoaWxkcmVufVxuICAgICAgICAgIHN0YXRpY1F1ZXJ5RGF0YT17c3RhdGljUXVlcnlEYXRhfVxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICA8L1N0YXRpY1F1ZXJ5Q29udGV4dC5Db25zdW1lcj5cbiAgKVxufVxuXG5jb25zdCB1c2VTdGF0aWNRdWVyeSA9IHF1ZXJ5ID0+IHtcbiAgaWYgKFxuICAgIHR5cGVvZiBSZWFjdC51c2VDb250ZXh0ICE9PSBgZnVuY3Rpb25gICYmXG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IGBkZXZlbG9wbWVudGBcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFlvdSdyZSBsaWtlbHkgdXNpbmcgYSB2ZXJzaW9uIG9mIFJlYWN0IHRoYXQgZG9lc24ndCBzdXBwb3J0IEhvb2tzXFxuYCArXG4gICAgICAgIGBQbGVhc2UgdXBkYXRlIFJlYWN0IGFuZCBSZWFjdERPTSB0byAxNi44LjAgb3IgbGF0ZXIgdG8gdXNlIHRoZSB1c2VTdGF0aWNRdWVyeSBob29rLmBcbiAgICApXG4gIH1cbiAgY29uc3QgY29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoU3RhdGljUXVlcnlDb250ZXh0KVxuXG4gIC8vIHF1ZXJ5IGlzIGEgc3RyaW5naWZpZWQgbnVtYmVyIGxpa2UgYDMzMDM4ODJgIHdoZW4gd3JhcHBlZCB3aXRoIGdyYXBocWwsIElmIGEgdXNlciBmb3JnZXRzXG4gIC8vIHRvIHdyYXAgdGhlIHF1ZXJ5IGluIGEgZ3JxcGhxbCwgdGhlbiBjYXN0aW5nIGl0IHRvIGEgTnVtYmVyIHJlc3VsdHMgaW4gYE5hTmAgYWxsb3dpbmcgdXMgdG9cbiAgLy8gY2F0Y2ggdGhlIG1pc3VzZSBvZiB0aGUgQVBJIGFuZCBnaXZlIHByb3BlciBkaXJlY3Rpb25cbiAgaWYgKGlzTmFOKE51bWJlcihxdWVyeSkpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGB1c2VTdGF0aWNRdWVyeSB3YXMgY2FsbGVkIHdpdGggYSBzdHJpbmcgYnV0IGV4cGVjdHMgdG8gYmUgY2FsbGVkIHVzaW5nIFxcYGdyYXBocWxcXGAuIFRyeSB0aGlzOlxuXG5pbXBvcnQgeyB1c2VTdGF0aWNRdWVyeSwgZ3JhcGhxbCB9IGZyb20gJ2dhdHNieSc7XG5cbnVzZVN0YXRpY1F1ZXJ5KGdyYXBocWxcXGAke3F1ZXJ5fVxcYCk7XG5gKVxuICB9XG5cbiAgaWYgKGNvbnRleHRbcXVlcnldPy5kYXRhKSB7XG4gICAgcmV0dXJuIGNvbnRleHRbcXVlcnldLmRhdGFcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgVGhlIHJlc3VsdCBvZiB0aGlzIFN0YXRpY1F1ZXJ5IGNvdWxkIG5vdCBiZSBmZXRjaGVkLlxcblxcbmAgK1xuICAgICAgICBgVGhpcyBpcyBsaWtlbHkgYSBidWcgaW4gR2F0c2J5IGFuZCBpZiByZWZyZXNoaW5nIHRoZSBwYWdlIGRvZXMgbm90IGZpeCBpdCwgYCArXG4gICAgICAgIGBwbGVhc2Ugb3BlbiBhbiBpc3N1ZSBpbiBodHRwczovL2dpdGh1Yi5jb20vZ2F0c2J5anMvZ2F0c2J5L2lzc3Vlc2BcbiAgICApXG4gIH1cbn1cblxuU3RhdGljUXVlcnkucHJvcFR5cGVzID0ge1xuICBkYXRhOiBQcm9wVHlwZXMub2JqZWN0LFxuICBxdWVyeTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICByZW5kZXI6IFByb3BUeXBlcy5mdW5jLFxuICBjaGlsZHJlbjogUHJvcFR5cGVzLmZ1bmMsXG59XG5cbmZ1bmN0aW9uIGdyYXBocWwoKSB7XG4gIHRocm93IG5ldyBFcnJvcihcbiAgICBgSXQgYXBwZWFycyBsaWtlIEdhdHNieSBpcyBtaXNjb25maWd1cmVkLiBHYXRzYnkgcmVsYXRlZCBcXGBncmFwaHFsXFxgIGNhbGxzIGAgK1xuICAgICAgYGFyZSBzdXBwb3NlZCB0byBvbmx5IGJlIGV2YWx1YXRlZCBhdCBjb21waWxlIHRpbWUsIGFuZCB0aGVuIGNvbXBpbGVkIGF3YXkuIGAgK1xuICAgICAgYFVuZm9ydHVuYXRlbHksIHNvbWV0aGluZyB3ZW50IHdyb25nIGFuZCB0aGUgcXVlcnkgd2FzIGxlZnQgaW4gdGhlIGNvbXBpbGVkIGNvZGUuXFxuXFxuYCArXG4gICAgICBgVW5sZXNzIHlvdXIgc2l0ZSBoYXMgYSBjb21wbGV4IG9yIGN1c3RvbSBiYWJlbC9HYXRzYnkgY29uZmlndXJhdGlvbiB0aGlzIGlzIGxpa2VseSBhIGJ1ZyBpbiBHYXRzYnkuYFxuICApXG59XG5cbmV4cG9ydCB7XG4gIExpbmssXG4gIHdpdGhBc3NldFByZWZpeCxcbiAgd2l0aFByZWZpeCxcbiAgZ3JhcGhxbCxcbiAgcGFyc2VQYXRoLFxuICBuYXZpZ2F0ZSxcbiAgdXNlU2Nyb2xsUmVzdG9yYXRpb24sXG4gIFN0YXRpY1F1ZXJ5Q29udGV4dCxcbiAgU3RhdGljUXVlcnksXG4gIFBhZ2VSZW5kZXJlcixcbiAgdXNlU3RhdGljUXVlcnksXG4gIHByZWZldGNoUGF0aG5hbWUsXG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5444\n')},8741:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n "uQ": function() { return /* binding */ PageResourceStatus; },\n "kL": function() { return /* binding */ ProdLoader; },\n "ZP": function() { return /* binding */ loader; },\n "hs": function() { return /* binding */ getStaticQueryResults; },\n "jN": function() { return /* binding */ publicLoader; },\n "N1": function() { return /* binding */ setLoader; }\n});\n\n// UNUSED EXPORTS: BaseLoader\n\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js\nvar inheritsLoose = __webpack_require__(1788);\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js + 3 modules\nvar toConsumableArray = __webpack_require__(7329);\n;// CONCATENATED MODULE: ./.cache/prefetch.js\nvar support=function support(feature){if(typeof document==="undefined"){return false;}var fakeLink=document.createElement("link");try{if(fakeLink.relList&&typeof fakeLink.relList.supports==="function"){return fakeLink.relList.supports(feature);}}catch(err){return false;}return false;};var linkPrefetchStrategy=function linkPrefetchStrategy(url,options){return new Promise(function(resolve,reject){if(typeof document==="undefined"){reject();return;}var link=document.createElement("link");link.setAttribute("rel","prefetch");link.setAttribute("href",url);Object.keys(options).forEach(function(key){link.setAttribute(key,options[key]);});link.onload=resolve;link.onerror=reject;var parentElement=document.getElementsByTagName("head")[0]||document.getElementsByName("script")[0].parentNode;parentElement.appendChild(link);});};var xhrPrefetchStrategy=function xhrPrefetchStrategy(url){return new Promise(function(resolve,reject){var req=new XMLHttpRequest();req.open("GET",url,true);req.onload=function(){if(req.status===200){resolve();}else{reject();}};req.send(null);});};var supportedPrefetchStrategy=support("prefetch")?linkPrefetchStrategy:xhrPrefetchStrategy;var preFetched={};var prefetch=function prefetch(url,options){return new Promise(function(resolve){if(preFetched[url]){resolve();return;}supportedPrefetchStrategy(url,options).then(function(){resolve();preFetched[url]=true;}).catch(function(){});// 404s are logged to the console anyway\n});};/* harmony default export */ var _cache_prefetch = (prefetch);\n// EXTERNAL MODULE: ./.cache/emitter.js + 1 modules\nvar emitter = __webpack_require__(8110);\n// EXTERNAL MODULE: ./.cache/find-path.js + 1 modules\nvar find_path = __webpack_require__(2257);\n;// CONCATENATED MODULE: ./.cache/loader.js\n/**\n * Available resource loading statuses\n */var PageResourceStatus={/**\n * At least one of critical resources failed to load\n */Error:"error",/**\n * Resources loaded successfully\n */Success:"success"};var preferDefault=function preferDefault(m){return m&&m.default||m;};var stripSurroundingSlashes=function stripSurroundingSlashes(s){s=s[0]==="/"?s.slice(1):s;s=s.endsWith("/")?s.slice(0,-1):s;return s;};var createPageDataUrl=function createPageDataUrl(path){var fixedPath=path==="/"?"index":stripSurroundingSlashes(path);return "/justice40-tool/main"+"/page-data/"+fixedPath+"/page-data.json";};function doFetch(url,method){if(method===void 0){method="GET";}return new Promise(function(resolve,reject){var req=new XMLHttpRequest();req.open(method,url,true);req.onreadystatechange=function(){if(req.readyState==4){resolve(req);}};req.send(null);});}var doesConnectionSupportPrefetch=function doesConnectionSupportPrefetch(){if("connection"in navigator&&typeof navigator.connection!=="undefined"){if((navigator.connection.effectiveType||"").includes("2g")){return false;}if(navigator.connection.saveData){return false;}}return true;};var toPageResources=function toPageResources(pageData,component){if(component===void 0){component=null;}var page={componentChunkName:pageData.componentChunkName,path:pageData.path,webpackCompilationHash:pageData.webpackCompilationHash,matchPath:pageData.matchPath,staticQueryHashes:pageData.staticQueryHashes};return{component:component,json:pageData.result,page:page};};var BaseLoader=/*#__PURE__*/function(){function BaseLoader(loadComponent,matchPaths){this.inFlightNetworkRequests=new Map();// Map of pagePath -> Page. Where Page is an object with: {\n// status: PageResourceStatus.Success || PageResourceStatus.Error,\n// payload: PageResources, // undefined if PageResourceStatus.Error\n// }\n// PageResources is {\n// component,\n// json: pageData.result,\n// page: {\n// componentChunkName,\n// path,\n// webpackCompilationHash,\n// staticQueryHashes\n// },\n// staticQueryResults\n// }\nthis.pageDb=new Map();this.inFlightDb=new Map();this.staticQueryDb={};this.pageDataDb=new Map();this.prefetchTriggered=new Set();this.prefetchCompleted=new Set();this.loadComponent=loadComponent;(0,find_path/* setMatchPaths */.DS)(matchPaths);}var _proto=BaseLoader.prototype;_proto.memoizedGet=function memoizedGet(url){var _this=this;var inFlightPromise=this.inFlightNetworkRequests.get(url);if(!inFlightPromise){inFlightPromise=doFetch(url,"GET");this.inFlightNetworkRequests.set(url,inFlightPromise);}// Prefer duplication with then + catch over .finally to prevent problems in ie11 + firefox\nreturn inFlightPromise.then(function(response){_this.inFlightNetworkRequests.delete(url);return response;}).catch(function(err){_this.inFlightNetworkRequests.delete(url);throw err;});};_proto.setApiRunner=function setApiRunner(apiRunner){this.apiRunner=apiRunner;this.prefetchDisabled=apiRunner("disableCorePrefetching").some(function(a){return a;});};_proto.fetchPageDataJson=function fetchPageDataJson(loadObj){var _this2=this;var pagePath=loadObj.pagePath,_loadObj$retries=loadObj.retries,retries=_loadObj$retries===void 0?0:_loadObj$retries;var url=createPageDataUrl(pagePath);return this.memoizedGet(url).then(function(req){var status=req.status,responseText=req.responseText;// Handle 200\nif(status===200){try{var jsonPayload=JSON.parse(responseText);if(jsonPayload.path===undefined){throw new Error("not a valid pageData response");}return Object.assign(loadObj,{status:PageResourceStatus.Success,payload:jsonPayload});}catch(err){// continue regardless of error\n}}// Handle 404\nif(status===404||status===200){// If the request was for a 404 page and it doesn\'t exist, we\'re done\nif(pagePath==="/404.html"){return Object.assign(loadObj,{status:PageResourceStatus.Error});}// Need some code here to cache the 404 request. In case\n// multiple loadPageDataJsons result in 404s\nreturn _this2.fetchPageDataJson(Object.assign(loadObj,{pagePath:"/404.html",notFound:true}));}// handle 500 response (Unrecoverable)\nif(status===500){return Object.assign(loadObj,{status:PageResourceStatus.Error});}// Handle everything else, including status === 0, and 503s. Should retry\nif(retries<3){return _this2.fetchPageDataJson(Object.assign(loadObj,{retries:retries+1}));}// Retried 3 times already, result is an error.\nreturn Object.assign(loadObj,{status:PageResourceStatus.Error});});};_proto.loadPageDataJson=function loadPageDataJson(rawPath){var _this3=this;var pagePath=(0,find_path/* findPath */.Cj)(rawPath);if(this.pageDataDb.has(pagePath)){var pageData=this.pageDataDb.get(pagePath);if(true){return Promise.resolve(pageData);}}return this.fetchPageDataJson({pagePath:pagePath}).then(function(pageData){_this3.pageDataDb.set(pagePath,pageData);return pageData;});};_proto.findMatchPath=function findMatchPath(rawPath){return (0,find_path/* findMatchPath */.UD)(rawPath);}// TODO check all uses of this and whether they use undefined for page resources not exist\n;_proto.loadPage=function loadPage(rawPath){var _this4=this;var pagePath=(0,find_path/* findPath */.Cj)(rawPath);if(this.pageDb.has(pagePath)){var page=this.pageDb.get(pagePath);if(true){if(page.error){return{error:page.error,status:page.status};}return Promise.resolve(page.payload);}}if(this.inFlightDb.has(pagePath)){return this.inFlightDb.get(pagePath);}var inFlightPromise=Promise.all([this.loadAppData(),this.loadPageDataJson(pagePath)]).then(function(allData){var result=allData[1];if(result.status===PageResourceStatus.Error){return{status:PageResourceStatus.Error};}var pageData=result.payload;var _pageData=pageData,componentChunkName=_pageData.componentChunkName,_pageData$staticQuery=_pageData.staticQueryHashes,staticQueryHashes=_pageData$staticQuery===void 0?[]:_pageData$staticQuery;var finalResult={};var componentChunkPromise=_this4.loadComponent(componentChunkName).then(function(component){finalResult.createdAt=new Date();var pageResources;if(!component||component instanceof Error){finalResult.status=PageResourceStatus.Error;finalResult.error=component;}else{finalResult.status=PageResourceStatus.Success;if(result.notFound===true){finalResult.notFound=true;}pageData=Object.assign(pageData,{webpackCompilationHash:allData[0]?allData[0].webpackCompilationHash:""});pageResources=toPageResources(pageData,component);}// undefined if final result is an error\nreturn pageResources;});var staticQueryBatchPromise=Promise.all(staticQueryHashes.map(function(staticQueryHash){// Check for cache in case this static query result has already been loaded\nif(_this4.staticQueryDb[staticQueryHash]){var jsonPayload=_this4.staticQueryDb[staticQueryHash];return{staticQueryHash:staticQueryHash,jsonPayload:jsonPayload};}return _this4.memoizedGet("/justice40-tool/main"+"/page-data/sq/d/"+staticQueryHash+".json").then(function(req){var jsonPayload=JSON.parse(req.responseText);return{staticQueryHash:staticQueryHash,jsonPayload:jsonPayload};}).catch(function(){throw new Error("We couldn\'t load \\""+"/justice40-tool/main"+"/page-data/sq/d/"+staticQueryHash+".json\\"");});})).then(function(staticQueryResults){var staticQueryResultsMap={};staticQueryResults.forEach(function(_ref){var staticQueryHash=_ref.staticQueryHash,jsonPayload=_ref.jsonPayload;staticQueryResultsMap[staticQueryHash]=jsonPayload;_this4.staticQueryDb[staticQueryHash]=jsonPayload;});return staticQueryResultsMap;});return Promise.all([componentChunkPromise,staticQueryBatchPromise]).then(function(_ref2){var pageResources=_ref2[0],staticQueryResults=_ref2[1];var payload;if(pageResources){payload=Object.assign({},pageResources,{staticQueryResults:staticQueryResults});finalResult.payload=payload;emitter/* default.emit */.Z.emit("onPostLoadPageResources",{page:payload,pageResources:payload});}_this4.pageDb.set(pagePath,finalResult);if(finalResult.error){return{error:finalResult.error,status:finalResult.status};}return payload;})// when static-query fail to load we throw a better error\n.catch(function(err){return{error:err,status:PageResourceStatus.Error};});});inFlightPromise.then(function(){_this4.inFlightDb.delete(pagePath);}).catch(function(error){_this4.inFlightDb.delete(pagePath);throw error;});this.inFlightDb.set(pagePath,inFlightPromise);return inFlightPromise;}// returns undefined if the page does not exists in cache\n;_proto.loadPageSync=function loadPageSync(rawPath,options){if(options===void 0){options={};}var pagePath=(0,find_path/* findPath */.Cj)(rawPath);if(this.pageDb.has(pagePath)){var _options;var pageData=this.pageDb.get(pagePath);if(pageData.payload){return pageData.payload;}if((_options=options)!==null&&_options!==void 0&&_options.withErrorDetails){return{error:pageData.error,status:pageData.status};}}return undefined;};_proto.shouldPrefetch=function shouldPrefetch(pagePath){// Skip prefetching if we know user is on slow or constrained connection\nif(!doesConnectionSupportPrefetch()){return false;}// Check if the page exists.\nif(this.pageDb.has(pagePath)){return false;}return true;};_proto.prefetch=function prefetch(pagePath){var _this5=this;if(!this.shouldPrefetch(pagePath)){return false;}// Tell plugins with custom prefetching logic that they should start\n// prefetching this path.\nif(!this.prefetchTriggered.has(pagePath)){this.apiRunner("onPrefetchPathname",{pathname:pagePath});this.prefetchTriggered.add(pagePath);}// If a plugin has disabled core prefetching, stop now.\nif(this.prefetchDisabled){return false;}var realPath=(0,find_path/* findPath */.Cj)(pagePath);// Todo make doPrefetch logic cacheable\n// eslint-disable-next-line consistent-return\nthis.doPrefetch(realPath).then(function(){if(!_this5.prefetchCompleted.has(pagePath)){_this5.apiRunner("onPostPrefetchPathname",{pathname:pagePath});_this5.prefetchCompleted.add(pagePath);}});return true;};_proto.doPrefetch=function doPrefetch(pagePath){var _this6=this;var pageDataUrl=createPageDataUrl(pagePath);return _cache_prefetch(pageDataUrl,{crossOrigin:"anonymous",as:"fetch"}).then(function(){return(// This was just prefetched, so will return a response from\n// the cache instead of making another request to the server\n_this6.loadPageDataJson(pagePath));});};_proto.hovering=function hovering(rawPath){this.loadPage(rawPath);};_proto.getResourceURLsForPathname=function getResourceURLsForPathname(rawPath){var pagePath=(0,find_path/* findPath */.Cj)(rawPath);var page=this.pageDataDb.get(pagePath);if(page){var pageResources=toPageResources(page.payload);return[].concat((0,toConsumableArray/* default */.Z)(createComponentUrls(pageResources.page.componentChunkName)),[createPageDataUrl(pagePath)]);}else{return null;}};_proto.isPageNotFound=function isPageNotFound(rawPath){var pagePath=(0,find_path/* findPath */.Cj)(rawPath);var page=this.pageDb.get(pagePath);return!page||page.notFound;};_proto.loadAppData=function loadAppData(retries){var _this7=this;if(retries===void 0){retries=0;}return this.memoizedGet("/justice40-tool/main"+"/page-data/app-data.json").then(function(req){var status=req.status,responseText=req.responseText;var appData;if(status!==200&&retries<3){// Retry 3 times incase of non-200 responses\nreturn _this7.loadAppData(retries+1);}// Handle 200\nif(status===200){try{var jsonPayload=JSON.parse(responseText);if(jsonPayload.webpackCompilationHash===undefined){throw new Error("not a valid app-data response");}appData=jsonPayload;}catch(err){// continue regardless of error\n}}return appData;});};return BaseLoader;}();var createComponentUrls=function createComponentUrls(componentChunkName){return(window.___chunkMapping[componentChunkName]||[]).map(function(chunk){return "/justice40-tool/main"+chunk;});};var ProdLoader=/*#__PURE__*/function(_BaseLoader){(0,inheritsLoose/* default */.Z)(ProdLoader,_BaseLoader);function ProdLoader(asyncRequires,matchPaths){var loadComponent=function loadComponent(chunkName){if(!asyncRequires.components[chunkName]){throw new Error("We couldn\'t find the correct component chunk with the name "+chunkName);}return asyncRequires.components[chunkName]().then(preferDefault)// loader will handle the case when component is error\n.catch(function(err){return err;});};return _BaseLoader.call(this,loadComponent,matchPaths)||this;}var _proto2=ProdLoader.prototype;_proto2.doPrefetch=function doPrefetch(pagePath){return _BaseLoader.prototype.doPrefetch.call(this,pagePath).then(function(result){if(result.status!==PageResourceStatus.Success){return Promise.resolve();}var pageData=result.payload;var chunkName=pageData.componentChunkName;var componentUrls=createComponentUrls(chunkName);return Promise.all(componentUrls.map(_cache_prefetch)).then(function(){return pageData;});});};_proto2.loadPageDataJson=function loadPageDataJson(rawPath){return _BaseLoader.prototype.loadPageDataJson.call(this,rawPath).then(function(data){if(data.notFound){// check if html file exist using HEAD request:\n// if it does we should navigate to it instead of showing 404\nreturn doFetch(rawPath,"HEAD").then(function(req){if(req.status===200){// page (.html file) actually exist (or we asked for 404 )\n// returning page resources status as errored to trigger\n// regular browser navigation to given page\nreturn{status:PageResourceStatus.Error};}// if HEAD request wasn\'t 200, return notFound result\n// and show 404 page\nreturn data;});}return data;});};return ProdLoader;}(BaseLoader);var instance;var setLoader=function setLoader(_loader){instance=_loader;};var publicLoader={enqueue:function enqueue(rawPath){return instance.prefetch(rawPath);},// Real methods\ngetResourceURLsForPathname:function getResourceURLsForPathname(rawPath){return instance.getResourceURLsForPathname(rawPath);},loadPage:function loadPage(rawPath){return instance.loadPage(rawPath);},// TODO add deprecation to v4 so people use withErrorDetails and then we can remove in v5 and change default behaviour\nloadPageSync:function loadPageSync(rawPath,options){if(options===void 0){options={};}return instance.loadPageSync(rawPath,options);},prefetch:function prefetch(rawPath){return instance.prefetch(rawPath);},isPageNotFound:function isPageNotFound(rawPath){return instance.isPageNotFound(rawPath);},hovering:function hovering(rawPath){return instance.hovering(rawPath);},loadAppData:function loadAppData(){return instance.loadAppData();}};/* harmony default export */ var loader = (publicLoader);function getStaticQueryResults(){if(instance){return instance.staticQueryDb;}else{return{};}}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uLy5jYWNoZS9wcmVmZXRjaC5qcz9hOTNiIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vLmNhY2hlL2xvYWRlci5qcz83YTYxIl0sIm5hbWVzIjpbInN1cHBvcnQiLCJmZWF0dXJlIiwiZG9jdW1lbnQiLCJmYWtlTGluayIsImNyZWF0ZUVsZW1lbnQiLCJyZWxMaXN0Iiwic3VwcG9ydHMiLCJlcnIiLCJsaW5rUHJlZmV0Y2hTdHJhdGVneSIsInVybCIsIm9wdGlvbnMiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImxpbmsiLCJzZXRBdHRyaWJ1dGUiLCJPYmplY3QiLCJrZXlzIiwiZm9yRWFjaCIsImtleSIsIm9ubG9hZCIsIm9uZXJyb3IiLCJwYXJlbnRFbGVtZW50IiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJnZXRFbGVtZW50c0J5TmFtZSIsInBhcmVudE5vZGUiLCJhcHBlbmRDaGlsZCIsInhoclByZWZldGNoU3RyYXRlZ3kiLCJyZXEiLCJYTUxIdHRwUmVxdWVzdCIsIm9wZW4iLCJzdGF0dXMiLCJzZW5kIiwic3VwcG9ydGVkUHJlZmV0Y2hTdHJhdGVneSIsInByZUZldGNoZWQiLCJwcmVmZXRjaCIsInRoZW4iLCJjYXRjaCIsIlBhZ2VSZXNvdXJjZVN0YXR1cyIsIkVycm9yIiwiU3VjY2VzcyIsInByZWZlckRlZmF1bHQiLCJtIiwiZGVmYXVsdCIsInN0cmlwU3Vycm91bmRpbmdTbGFzaGVzIiwicyIsInNsaWNlIiwiZW5kc1dpdGgiLCJjcmVhdGVQYWdlRGF0YVVybCIsInBhdGgiLCJmaXhlZFBhdGgiLCJfX1BBVEhfUFJFRklYX18iLCJkb0ZldGNoIiwibWV0aG9kIiwib25yZWFkeXN0YXRlY2hhbmdlIiwicmVhZHlTdGF0ZSIsImRvZXNDb25uZWN0aW9uU3VwcG9ydFByZWZldGNoIiwibmF2aWdhdG9yIiwiY29ubmVjdGlvbiIsImVmZmVjdGl2ZVR5cGUiLCJpbmNsdWRlcyIsInNhdmVEYXRhIiwidG9QYWdlUmVzb3VyY2VzIiwicGFnZURhdGEiLCJjb21wb25lbnQiLCJwYWdlIiwiY29tcG9uZW50Q2h1bmtOYW1lIiwid2VicGFja0NvbXBpbGF0aW9uSGFzaCIsIm1hdGNoUGF0aCIsInN0YXRpY1F1ZXJ5SGFzaGVzIiwianNvbiIsInJlc3VsdCIsIkJhc2VMb2FkZXIiLCJsb2FkQ29tcG9uZW50IiwibWF0Y2hQYXRocyIsImluRmxpZ2h0TmV0d29ya1JlcXVlc3RzIiwiTWFwIiwicGFnZURiIiwiaW5GbGlnaHREYiIsInN0YXRpY1F1ZXJ5RGIiLCJwYWdlRGF0YURiIiwicHJlZmV0Y2hUcmlnZ2VyZWQiLCJTZXQiLCJwcmVmZXRjaENvbXBsZXRlZCIsInNldE1hdGNoUGF0aHMiLCJtZW1vaXplZEdldCIsImluRmxpZ2h0UHJvbWlzZSIsImdldCIsInNldCIsInJlc3BvbnNlIiwiZGVsZXRlIiwic2V0QXBpUnVubmVyIiwiYXBpUnVubmVyIiwicHJlZmV0Y2hEaXNhYmxlZCIsInNvbWUiLCJhIiwiZmV0Y2hQYWdlRGF0YUpzb24iLCJsb2FkT2JqIiwicGFnZVBhdGgiLCJyZXRyaWVzIiwicmVzcG9uc2VUZXh0IiwianNvblBheWxvYWQiLCJKU09OIiwicGFyc2UiLCJ1bmRlZmluZWQiLCJhc3NpZ24iLCJwYXlsb2FkIiwibm90Rm91bmQiLCJsb2FkUGFnZURhdGFKc29uIiwicmF3UGF0aCIsImZpbmRQYXRoIiwiaGFzIiwicHJvY2VzcyIsImZpbmRNYXRjaFBhdGgiLCJsb2FkUGFnZSIsImVycm9yIiwiYWxsIiwibG9hZEFwcERhdGEiLCJhbGxEYXRhIiwiZmluYWxSZXN1bHQiLCJjb21wb25lbnRDaHVua1Byb21pc2UiLCJjcmVhdGVkQXQiLCJEYXRlIiwicGFnZVJlc291cmNlcyIsInN0YXRpY1F1ZXJ5QmF0Y2hQcm9taXNlIiwibWFwIiwic3RhdGljUXVlcnlIYXNoIiwic3RhdGljUXVlcnlSZXN1bHRzIiwic3RhdGljUXVlcnlSZXN1bHRzTWFwIiwiZW1pdHRlciIsImxvYWRQYWdlU3luYyIsIndpdGhFcnJvckRldGFpbHMiLCJzaG91bGRQcmVmZXRjaCIsInBhdGhuYW1lIiwiYWRkIiwicmVhbFBhdGgiLCJkb1ByZWZldGNoIiwicGFnZURhdGFVcmwiLCJwcmVmZXRjaEhlbHBlciIsImNyb3NzT3JpZ2luIiwiYXMiLCJob3ZlcmluZyIsImdldFJlc291cmNlVVJMc0ZvclBhdGhuYW1lIiwiY3JlYXRlQ29tcG9uZW50VXJscyIsImlzUGFnZU5vdEZvdW5kIiwiYXBwRGF0YSIsIndpbmRvdyIsIl9fX2NodW5rTWFwcGluZyIsImNodW5rIiwiUHJvZExvYWRlciIsImFzeW5jUmVxdWlyZXMiLCJjaHVua05hbWUiLCJjb21wb25lbnRzIiwiY29tcG9uZW50VXJscyIsImRhdGEiLCJpbnN0YW5jZSIsInNldExvYWRlciIsIl9sb2FkZXIiLCJwdWJsaWNMb2FkZXIiLCJlbnF1ZXVlIiwiZ2V0U3RhdGljUXVlcnlSZXN1bHRzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxHQUFNQSxRQUFPLENBQUcsUUFBVkEsUUFBVSxDQUFVQyxPQUFWLENBQW1CLENBQ2pDLEdBQUksTUFBT0MsU0FBUCxjQUFKLENBQXFDLENBQ25DLE1BQU8sTUFBUCxDQUNELENBQ0QsR0FBTUMsU0FBUSxDQUFHRCxRQUFRLENBQUNFLGFBQVQsUUFBakIsQ0FDQSxHQUFJLENBQ0YsR0FBSUQsUUFBUSxDQUFDRSxPQUFULEVBQW9CLE1BQU9GLFNBQVEsQ0FBQ0UsT0FBVCxDQUFpQkMsUUFBeEIsYUFBeEIsQ0FBeUUsQ0FDdkUsTUFBT0gsU0FBUSxDQUFDRSxPQUFULENBQWlCQyxRQUFqQixDQUEwQkwsT0FBMUIsQ0FBUCxDQUNELENBQ0YsQ0FBQyxNQUFPTSxHQUFQLENBQVksQ0FDWixNQUFPLE1BQVAsQ0FDRCxDQUNELE1BQU8sTUFBUCxDQUNELENBYkQsQ0FlQSxHQUFNQyxxQkFBb0IsQ0FBRyxRQUF2QkEscUJBQXVCLENBQVVDLEdBQVYsQ0FBZUMsT0FBZixDQUF3QixDQUNuRCxNQUFPLElB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LENBQ3RDLEdBQUlMLFFBQUosQ0FBYyxDQUNaLE1BQU9BLFNBQVEsQ0FBQzVFLGFBQWhCLENBQ0QsQ0FGRCxJQUVPLENBQ0wsTUFBTyxFQUFQLENBQ0QsQ0FDRiIsImZpbGUiOiI4NzQxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3Qgc3VwcG9ydCA9IGZ1bmN0aW9uIChmZWF0dXJlKSB7XG4gIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09IGB1bmRlZmluZWRgKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgY29uc3QgZmFrZUxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGBsaW5rYClcbiAgdHJ5IHtcbiAgICBpZiAoZmFrZUxpbmsucmVsTGlzdCAmJiB0eXBlb2YgZmFrZUxpbmsucmVsTGlzdC5zdXBwb3J0cyA9PT0gYGZ1bmN0aW9uYCkge1xuICAgICAgcmV0dXJuIGZha2VMaW5rLnJlbExpc3Quc3VwcG9ydHMoZmVhdHVyZSlcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG5jb25zdCBsaW5rUHJlZmV0Y2hTdHJhdGVneSA9IGZ1bmN0aW9uICh1cmwsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSBgdW5kZWZpbmVkYCkge1xuICAgICAgcmVqZWN0KClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGBsaW5rYClcbiAgICBsaW5rLnNldEF0dHJpYnV0ZShgcmVsYCwgYHByZWZldGNoYClcbiAgICBsaW5rLnNldEF0dHJpYnV0ZShgaHJlZmAsIHVybClcblxuICAgIE9iamVjdC5rZXlzKG9wdGlvbnMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGxpbmsuc2V0QXR0cmlidXRlKGtleSwgb3B0aW9uc1trZXldKVxuICAgIH0pXG5cbiAgICBsaW5rLm9ubG9hZCA9IHJlc29sdmVcbiAgICBsaW5rLm9uZXJyb3IgPSByZWplY3RcblxuICAgIGNvbnN0IHBhcmVudEVsZW1lbnQgPVxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoYGhlYWRgKVswXSB8fFxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoYHNjcmlwdGApWzBdLnBhcmVudE5vZGVcbiAgICBwYXJlbnRFbGVtZW50LmFwcGVuZENoaWxkKGxpbmspXG4gIH0pXG59XG5cbmNvbnN0IHhoclByZWZldGNoU3RyYXRlZ3kgPSBmdW5jdGlvbiAodXJsKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgcmVxID0gbmV3IFhNTEh0dHBSZXF1ZXN0KClcbiAgICByZXEub3BlbihgR0VUYCwgdXJsLCB0cnVlKVxuXG4gICAgcmVxLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgIGlmIChyZXEuc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgcmVzb2x2ZSgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWplY3QoKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJlcS5zZW5kKG51bGwpXG4gIH0pXG59XG5cbmNvbnN0IHN1cHBvcnRlZFByZWZldGNoU3RyYXRlZ3kgPSBzdXBwb3J0KGBwcmVmZXRjaGApXG4gID8gbGlua1ByZWZldGNoU3RyYXRlZ3lcbiAgOiB4aHJQcmVmZXRjaFN0cmF0ZWd5XG5cbmNvbnN0IHByZUZldGNoZWQgPSB7fVxuXG5jb25zdCBwcmVmZXRjaCA9IGZ1bmN0aW9uICh1cmwsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgIGlmIChwcmVGZXRjaGVkW3VybF0pIHtcbiAgICAgIHJlc29sdmUoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgc3VwcG9ydGVkUHJlZmV0Y2hTdHJhdGVneSh1cmwsIG9wdGlvbnMpXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIHJlc29sdmUoKVxuICAgICAgICBwcmVGZXRjaGVkW3VybF0gPSB0cnVlXG4gICAgICB9KVxuICAgICAgLmNhdGNoKCgpID0+IHt9KSAvLyA0MDRzIGFyZSBsb2dnZWQgdG8gdGhlIGNvbnNvbGUgYW55d2F5XG4gIH0pXG59XG5cbmV4cG9ydCBkZWZhdWx0IHByZWZldGNoXG4iLCJpbXBvcnQgcHJlZmV0Y2hIZWxwZXIgZnJvbSBcIi4vcHJlZmV0Y2hcIlxuaW1wb3J0IGVtaXR0ZXIgZnJvbSBcIi4vZW1pdHRlclwiXG5pbXBvcnQgeyBzZXRNYXRjaFBhdGhzLCBmaW5kUGF0aCwgZmluZE1hdGNoUGF0aCB9IGZyb20gXCIuL2ZpbmQtcGF0aFwiXG5cbi8qKlxuICogQXZhaWxhYmxlIHJlc291cmNlIGxvYWRpbmcgc3RhdHVzZXNcbiAqL1xuZXhwb3J0IGNvbnN0IFBhZ2VSZXNvdXJjZVN0YXR1cyA9IHtcbiAgLyoqXG4gICAqIEF0IGxlYXN0IG9uZSBvZiBjcml0aWNhbCByZXNvdXJjZXMgZmFpbGVkIHRvIGxvYWRcbiAgICovXG4gIEVycm9yOiBgZXJyb3JgLFxuICAvKipcbiAgICogUmVzb3VyY2VzIGxvYWRlZCBzdWNjZXNzZnVsbHlcbiAgICovXG4gIFN1Y2Nlc3M6IGBzdWNjZXNzYCxcbn1cblxuY29uc3QgcHJlZmVyRGVmYXVsdCA9IG0gPT4gKG0gJiYgbS5kZWZhdWx0KSB8fCBtXG5cbmNvbnN0IHN0cmlwU3Vycm91bmRpbmdTbGFzaGVzID0gcyA9PiB7XG4gIHMgPSBzWzBdID09PSBgL2AgPyBzLnNsaWNlKDEpIDogc1xuICBzID0gcy5lbmRzV2l0aChgL2ApID8gcy5zbGljZSgwLCAtMSkgOiBzXG4gIHJldHVybiBzXG59XG5cbmNvbnN0IGNyZWF0ZVBhZ2VEYXRhVXJsID0gcGF0aCA9PiB7XG4gIGNvbnN0IGZpeGVkUGF0aCA9IHBhdGggPT09IGAvYCA/IGBpbmRleGAgOiBzdHJpcFN1cnJvdW5kaW5nU2xhc2hlcyhwYXRoKVxuICByZXR1cm4gYCR7X19QQVRIX1BSRUZJWF9ffS9wYWdlLWRhdGEvJHtmaXhlZFBhdGh9L3BhZ2UtZGF0YS5qc29uYFxufVxuXG5mdW5jdGlvbiBkb0ZldGNoKHVybCwgbWV0aG9kID0gYEdFVGApIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCByZXEgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKVxuICAgIHJlcS5vcGVuKG1ldGhvZCwgdXJsLCB0cnVlKVxuICAgIHJlcS5vbnJlYWR5c3RhdGVjaGFuZ2UgPSAoKSA9PiB7XG4gICAgICBpZiAocmVxLnJlYWR5U3RhdGUgPT0gNCkge1xuICAgICAgICByZXNvbHZlKHJlcSlcbiAgICAgIH1cbiAgICB9XG4gICAgcmVxLnNlbmQobnVsbClcbiAgfSlcbn1cblxuY29uc3QgZG9lc0Nvbm5lY3Rpb25TdXBwb3J0UHJlZmV0Y2ggPSAoKSA9PiB7XG4gIGlmIChcbiAgICBgY29ubmVjdGlvbmAgaW4gbmF2aWdhdG9yICYmXG4gICAgdHlwZW9mIG5hdmlnYXRvci5jb25uZWN0aW9uICE9PSBgdW5kZWZpbmVkYFxuICApIHtcbiAgICBpZiAoKG5hdmlnYXRvci5jb25uZWN0aW9uLmVmZmVjdGl2ZVR5cGUgfHwgYGApLmluY2x1ZGVzKGAyZ2ApKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgaWYgKG5hdmlnYXRvci5jb25uZWN0aW9uLnNhdmVEYXRhKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuY29uc3QgdG9QYWdlUmVzb3VyY2VzID0gKHBhZ2VEYXRhLCBjb21wb25lbnQgPSBudWxsKSA9PiB7XG4gIGNvbnN0IHBhZ2UgPSB7XG4gICAgY29tcG9uZW50Q2h1bmtOYW1lOiBwYWdlRGF0YS5jb21wb25lbnRDaHVua05hbWUsXG4gICAgcGF0aDogcGFnZURhdGEucGF0aCxcbiAgICB3ZWJwYWNrQ29tcGlsYXRpb25IYXNoOiBwYWdlRGF0YS53ZWJwYWNrQ29tcGlsYXRpb25IYXNoLFxuICAgIG1hdGNoUGF0aDogcGFnZURhdGEubWF0Y2hQYXRoLFxuICAgIHN0YXRpY1F1ZXJ5SGFzaGVzOiBwYWdlRGF0YS5zdGF0aWNRdWVyeUhhc2hlcyxcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgY29tcG9uZW50LFxuICAgIGpzb246IHBhZ2VEYXRhLnJlc3VsdCxcbiAgICBwYWdlLFxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBCYXNlTG9hZGVyIHtcbiAgY29uc3RydWN0b3IobG9hZENvbXBvbmVudCwgbWF0Y2hQYXRocykge1xuICAgIC8vIE1hcCBvZiBwYWdlUGF0aCAtPiBQYWdlLiBXaGVyZSBQYWdlIGlzIGFuIG9iamVjdCB3aXRoOiB7XG4gICAgLy8gICBzdGF0dXM6IFBhZ2VSZXNvdXJjZVN0YXR1cy5TdWNjZXNzIHx8IFBhZ2VSZXNvdXJjZVN0YXR1cy5FcnJvcixcbiAgICAvLyAgIHBheWxvYWQ6IFBhZ2VSZXNvdXJjZXMsIC8vIHVuZGVmaW5lZCBpZiBQYWdlUmVzb3VyY2VTdGF0dXMuRXJyb3JcbiAgICAvLyB9XG4gICAgLy8gUGFnZVJlc291cmNlcyBpcyB7XG4gICAgLy8gICBjb21wb25lbnQsXG4gICAgLy8gICBqc29uOiBwYWdlRGF0YS5yZXN1bHQsXG4gICAgLy8gICBwYWdlOiB7XG4gICAgLy8gICAgIGNvbXBvbmVudENodW5rTmFtZSxcbiAgICAvLyAgICAgcGF0aCxcbiAgICAvLyAgICAgd2VicGFja0NvbXBpbGF0aW9uSGFzaCxcbiAgICAvLyAgICAgc3RhdGljUXVlcnlIYXNoZXNcbiAgICAvLyAgIH0sXG4gICAgLy8gICBzdGF0aWNRdWVyeVJlc3VsdHNcbiAgICAvLyB9XG4gICAgdGhpcy5wYWdlRGIgPSBuZXcgTWFwKClcbiAgICB0aGlzLmluRmxpZ2h0RGIgPSBuZXcgTWFwKClcbiAgICB0aGlzLnN0YXRpY1F1ZXJ5RGIgPSB7fVxuICAgIHRoaXMucGFnZURhdGFEYiA9IG5ldyBNYXAoKVxuICAgIHRoaXMucHJlZmV0Y2hUcmlnZ2VyZWQgPSBuZXcgU2V0KClcbiAgICB0aGlzLnByZWZldGNoQ29tcGxldGVkID0gbmV3IFNldCgpXG4gICAgdGhpcy5sb2FkQ29tcG9uZW50ID0gbG9hZENvbXBvbmVudFxuICAgIHNldE1hdGNoUGF0aHMobWF0Y2hQYXRocylcbiAgfVxuXG4gIGluRmxpZ2h0TmV0d29ya1JlcXVlc3RzID0gbmV3IE1hcCgpXG5cbiAgbWVtb2l6ZWRHZXQodXJsKSB7XG4gICAgbGV0IGluRmxpZ2h0UHJvbWlzZSA9IHRoaXMuaW5GbGlnaHROZXR3b3JrUmVxdWVzdHMuZ2V0KHVybClcblxuICAgIGlmICghaW5GbGlnaHRQcm9taXNlKSB7XG4gICAgICBpbkZsaWdodFByb21pc2UgPSBkb0ZldGNoKHVybCwgYEdFVGApXG4gICAgICB0aGlzLmluRmxpZ2h0TmV0d29ya1JlcXVlc3RzLnNldCh1cmwsIGluRmxpZ2h0UHJvbWlzZSlcbiAgICB9XG5cbiAgICAvLyBQcmVmZXIgZHVwbGljYXRpb24gd2l0aCB0aGVuICsgY2F0Y2ggb3ZlciAuZmluYWxseSB0byBwcmV2ZW50IHByb2JsZW1zIGluIGllMTEgKyBmaXJlZm94XG4gICAgcmV0dXJuIGluRmxpZ2h0UHJvbWlzZVxuICAgICAgLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICB0aGlzLmluRmxpZ2h0TmV0d29ya1JlcXVlc3RzLmRlbGV0ZSh1cmwpXG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSlcbiAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICB0aGlzLmluRmxpZ2h0TmV0d29ya1JlcXVlc3RzLmRlbGV0ZSh1cmwpXG4gICAgICAgIHRocm93IGVyclxuICAgICAgfSlcbiAgfVxuXG4gIHNldEFwaVJ1bm5lcihhcGlSdW5uZXIpIHtcbiAgICB0aGlzLmFwaVJ1bm5lciA9IGFwaVJ1bm5lclxuICAgIHRoaXMucHJlZmV0Y2hEaXNhYmxlZCA9IGFwaVJ1bm5lcihgZGlzYWJsZUNvcmVQcmVmZXRjaGluZ2ApLnNvbWUoYSA9PiBhKVxuICB9XG5cbiAgZmV0Y2hQYWdlRGF0YUpzb24obG9hZE9iaikge1xuICAgIGNvbnN0IHsgcGFnZVBhdGgsIHJldHJpZXMgPSAwIH0gPSBsb2FkT2JqXG4gICAgY29uc3QgdXJsID0gY3JlYXRlUGFnZURhdGFVcmwocGFnZVBhdGgpXG4gICAgcmV0dXJuIHRoaXMubWVtb2l6ZWRHZXQodXJsKS50aGVuKHJlcSA9PiB7XG4gICAgICBjb25zdCB7IHN0YXR1cywgcmVzcG9uc2VUZXh0IH0gPSByZXFcblxuICAgICAgLy8gSGFuZGxlIDIwMFxuICAgICAgaWYgKHN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QganNvblBheWxvYWQgPSBKU09OLnBhcnNlKHJlc3BvbnNlVGV4dClcbiAgICAgICAgICBpZiAoanNvblBheWxvYWQucGF0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYG5vdCBhIHZhbGlkIHBhZ2VEYXRhIHJlc3BvbnNlYClcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihsb2FkT2JqLCB7XG4gICAgICAgICAgICBzdGF0dXM6IFBhZ2VSZXNvdXJjZVN0YXR1cy5TdWNjZXNzLFxuICAgICAgICAgICAgcGF5bG9hZDoganNvblBheWxvYWQsXG4gICAgICAgICAgfSlcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgLy8gY29udGludWUgcmVnYXJkbGVzcyBvZiBlcnJvclxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEhhbmRsZSA0MDRcbiAgICAgIGlmIChzdGF0dXMgPT09IDQwNCB8fCBzdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAvLyBJZiB0aGUgcmVxdWVzdCB3YXMgZm9yIGEgNDA0IHBhZ2UgYW5kIGl0IGRvZXNuJ3QgZXhpc3QsIHdlJ3JlIGRvbmVcbiAgICAgICAgaWYgKHBhZ2VQYXRoID09PSBgLzQwNC5odG1sYCkge1xuICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKGxvYWRPYmosIHtcbiAgICAgICAgICAgIHN0YXR1czogUGFnZVJlc291cmNlU3RhdHVzLkVycm9yLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cblxuICAgICAgICAvLyBOZWVkIHNvbWUgY29kZSBoZXJlIHRvIGNhY2hlIHRoZSA0MDQgcmVxdWVzdC4gSW4gY2FzZVxuICAgICAgICAvLyBtdWx0aXBsZSBsb2FkUGFnZURhdGFKc29ucyByZXN1bHQgaW4gNDA0c1xuICAgICAgICByZXR1cm4gdGhpcy5mZXRjaFBhZ2VEYXRhSnNvbihcbiAgICAgICAgICBPYmplY3QuYXNzaWduKGxvYWRPYmosIHsgcGFnZVBhdGg6IGAvNDA0Lmh0bWxgLCBub3RGb3VuZDogdHJ1ZSB9KVxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIC8vIGhhbmRsZSA1MDAgcmVzcG9uc2UgKFVucmVjb3ZlcmFibGUpXG4gICAgICBpZiAoc3RhdHVzID09PSA1MDApIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24obG9hZE9iaiwge1xuICAgICAgICAgIHN0YXR1czogUGFnZVJlc291cmNlU3RhdHVzLkVycm9yLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICAvLyBIYW5kbGUgZXZlcnl0aGluZyBlbHNlLCBpbmNsdWRpbmcgc3RhdHVzID09PSAwLCBhbmQgNTAzcy4gU2hvdWxkIHJldHJ5XG4gICAgICBpZiAocmV0cmllcyA8IDMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmV0Y2hQYWdlRGF0YUpzb24oXG4gICAgICAgICAgT2JqZWN0LmFzc2lnbihsb2FkT2JqLCB7IHJldHJpZXM6IHJldHJpZXMgKyAxIH0pXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgLy8gUmV0cmllZCAzIHRpbWVzIGFscmVhZHksIHJlc3VsdCBpcyBhbiBlcnJvci5cbiAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKGxvYWRPYmosIHtcbiAgICAgICAgc3RhdHVzOiBQYWdlUmVzb3VyY2VTdGF0dXMuRXJyb3IsXG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICBsb2FkUGFnZURhdGFKc29uKHJhd1BhdGgpIHtcbiAgICBjb25zdCBwYWdlUGF0aCA9IGZpbmRQYXRoKHJhd1BhdGgpXG4gICAgaWYgKHRoaXMucGFnZURhdGFEYi5oYXMocGFnZVBhdGgpKSB7XG4gICAgICBjb25zdCBwYWdlRGF0YSA9IHRoaXMucGFnZURhdGFEYi5nZXQocGFnZVBhdGgpXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuQlVJTERfU1RBR0UgIT09IGBkZXZlbG9wYCB8fCAhcGFnZURhdGEuc3RhbGUpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShwYWdlRGF0YSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5mZXRjaFBhZ2VEYXRhSnNvbih7IHBhZ2VQYXRoIH0pLnRoZW4ocGFnZURhdGEgPT4ge1xuICAgICAgdGhpcy5wYWdlRGF0YURiLnNldChwYWdlUGF0aCwgcGFnZURhdGEpXG5cbiAgICAgIHJldHVybiBwYWdlRGF0YVxuICAgIH0pXG4gIH1cblxuICBmaW5kTWF0Y2hQYXRoKHJhd1BhdGgpIHtcbiAgICByZXR1cm4gZmluZE1hdGNoUGF0aChyYXdQYXRoKVxuICB9XG5cbiAgLy8gVE9ETyBjaGVjayBhbGwgdXNlcyBvZiB0aGlzIGFuZCB3aGV0aGVyIHRoZXkgdXNlIHVuZGVmaW5lZCBmb3IgcGFnZSByZXNvdXJjZXMgbm90IGV4aXN0XG4gIGxvYWRQYWdlKHJhd1BhdGgpIHtcbiAgICBjb25zdCBwYWdlUGF0aCA9IGZpbmRQYXRoKHJhd1BhdGgpXG4gICAgaWYgKHRoaXMucGFnZURiLmhhcyhwYWdlUGF0aCkpIHtcbiAgICAgIGNvbnN0IHBhZ2UgPSB0aGlzLnBhZ2VEYi5nZXQocGFnZVBhdGgpXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuQlVJTERfU1RBR0UgIT09IGBkZXZlbG9wYCB8fCAhcGFnZS5wYXlsb2FkLnN0YWxlKSB7XG4gICAgICAgIGlmIChwYWdlLmVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGVycm9yOiBwYWdlLmVycm9yLFxuICAgICAgICAgICAgc3RhdHVzOiBwYWdlLnN0YXR1cyxcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHBhZ2UucGF5bG9hZClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5pbkZsaWdodERiLmhhcyhwYWdlUGF0aCkpIHtcbiAgICAgIHJldHVybiB0aGlzLmluRmxpZ2h0RGIuZ2V0KHBhZ2VQYXRoKVxuICAgIH1cblxuICAgIGNvbnN0IGluRmxpZ2h0UHJvbWlzZSA9IFByb21pc2UuYWxsKFtcbiAgICAgIHRoaXMubG9hZEFwcERhdGEoKSxcbiAgICAgIHRoaXMubG9hZFBhZ2VEYXRhSnNvbihwYWdlUGF0aCksXG4gICAgXSkudGhlbihhbGxEYXRhID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGFsbERhdGFbMV1cbiAgICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSBQYWdlUmVzb3VyY2VTdGF0dXMuRXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdGF0dXM6IFBhZ2VSZXNvdXJjZVN0YXR1cy5FcnJvcixcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsZXQgcGFnZURhdGEgPSByZXN1bHQucGF5bG9hZFxuICAgICAgY29uc3QgeyBjb21wb25lbnRDaHVua05hbWUsIHN0YXRpY1F1ZXJ5SGFzaGVzID0gW10gfSA9IHBhZ2VEYXRhXG5cbiAgICAgIGNvbnN0IGZpbmFsUmVzdWx0ID0ge31cblxuICAgICAgY29uc3QgY29tcG9uZW50Q2h1bmtQcm9taXNlID0gdGhpcy5sb2FkQ29tcG9uZW50KGNvbXBvbmVudENodW5rTmFtZSkudGhlbihcbiAgICAgICAgY29tcG9uZW50ID0+IHtcbiAgICAgICAgICBmaW5hbFJlc3VsdC5jcmVhdGVkQXQgPSBuZXcgRGF0ZSgpXG4gICAgICAgICAgbGV0IHBhZ2VSZXNvdXJjZXNcbiAgICAgICAgICBpZiAoIWNvbXBvbmVudCB8fCBjb21wb25lbnQgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgZmluYWxSZXN1bHQuc3RhdHVzID0gUGFnZVJlc291cmNlU3RhdHVzLkVycm9yXG4gICAgICAgICAgICBmaW5hbFJlc3VsdC5lcnJvciA9IGNvbXBvbmVudFxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmaW5hbFJlc3VsdC5zdGF0dXMgPSBQYWdlUmVzb3VyY2VTdGF0dXMuU3VjY2Vzc1xuICAgICAgICAgICAgaWYgKHJlc3VsdC5ub3RGb3VuZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICBmaW5hbFJlc3VsdC5ub3RGb3VuZCA9IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhZ2VEYXRhID0gT2JqZWN0LmFzc2lnbihwYWdlRGF0YSwge1xuICAgICAgICAgICAgICB3ZWJwYWNrQ29tcGlsYXRpb25IYXNoOiBhbGxEYXRhWzBdXG4gICAgICAgICAgICAgICAgPyBhbGxEYXRhWzBdLndlYnBhY2tDb21waWxhdGlvbkhhc2hcbiAgICAgICAgICAgICAgICA6IGBgLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIHBhZ2VSZXNvdXJjZXMgPSB0b1BhZ2VSZXNvdXJjZXMocGFnZURhdGEsIGNvbXBvbmVudClcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gdW5kZWZpbmVkIGlmIGZpbmFsIHJlc3VsdCBpcyBhbiBlcnJvclxuICAgICAgICAgIHJldHVybiBwYWdlUmVzb3VyY2VzXG4gICAgICAgIH1cbiAgICAgIClcblxuICAgICAgY29uc3Qgc3RhdGljUXVlcnlCYXRjaFByb21pc2UgPSBQcm9taXNlLmFsbChcbiAgICAgICAgc3RhdGljUXVlcnlIYXNoZXMubWFwKHN0YXRpY1F1ZXJ5SGFzaCA9PiB7XG4gICAgICAgICAgLy8gQ2hlY2sgZm9yIGNhY2hlIGluIGNhc2UgdGhpcyBzdGF0aWMgcXVlcnkgcmVzdWx0IGhhcyBhbHJlYWR5IGJlZW4gbG9hZGVkXG4gICAgICAgICAgaWYgKHRoaXMuc3RhdGljUXVlcnlEYltzdGF0aWNRdWVyeUhhc2hdKSB7XG4gICAgICAgICAgICBjb25zdCBqc29uUGF5bG9hZCA9IHRoaXMuc3RhdGljUXVlcnlEYltzdGF0aWNRdWVyeUhhc2hdXG4gICAgICAgICAgICByZXR1cm4geyBzdGF0aWNRdWVyeUhhc2gsIGpzb25QYXlsb2FkIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdGhpcy5tZW1vaXplZEdldChcbiAgICAgICAgICAgIGAke19fUEFUSF9QUkVGSVhfX30vcGFnZS1kYXRhL3NxL2QvJHtzdGF0aWNRdWVyeUhhc2h9Lmpzb25gXG4gICAgICAgICAgKVxuICAgICAgICAgICAgLnRoZW4ocmVxID0+IHtcbiAgICAgICAgICAgICAgY29uc3QganNvblBheWxvYWQgPSBKU09OLnBhcnNlKHJlcS5yZXNwb25zZVRleHQpXG4gICAgICAgICAgICAgIHJldHVybiB7IHN0YXRpY1F1ZXJ5SGFzaCwganNvblBheWxvYWQgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBgV2UgY291bGRuJ3QgbG9hZCBcIiR7X19QQVRIX1BSRUZJWF9ffS9wYWdlLWRhdGEvc3EvZC8ke3N0YXRpY1F1ZXJ5SGFzaH0uanNvblwiYFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgICAgKS50aGVuKHN0YXRpY1F1ZXJ5UmVzdWx0cyA9PiB7XG4gICAgICAgIGNvbnN0IHN0YXRpY1F1ZXJ5UmVzdWx0c01hcCA9IHt9XG5cbiAgICAgICAgc3RhdGljUXVlcnlSZXN1bHRzLmZvckVhY2goKHsgc3RhdGljUXVlcnlIYXNoLCBqc29uUGF5bG9hZCB9KSA9PiB7XG4gICAgICAgICAgc3RhdGljUXVlcnlSZXN1bHRzTWFwW3N0YXRpY1F1ZXJ5SGFzaF0gPSBqc29uUGF5bG9hZFxuICAgICAgICAgIHRoaXMuc3RhdGljUXVlcnlEYltzdGF0aWNRdWVyeUhhc2hdID0ganNvblBheWxvYWRcbiAgICAgICAgfSlcblxuICAgICAgICByZXR1cm4gc3RhdGljUXVlcnlSZXN1bHRzTWFwXG4gICAgICB9KVxuXG4gICAgICByZXR1cm4gKFxuICAgICAgICBQcm9taXNlLmFsbChbY29tcG9uZW50Q2h1bmtQcm9taXNlLCBzdGF0aWNRdWVyeUJhdGNoUHJvbWlzZV0pXG4gICAgICAgICAgLnRoZW4oKFtwYWdlUmVzb3VyY2VzLCBzdGF0aWNRdWVyeVJlc3VsdHNdKSA9PiB7XG4gICAgICAgICAgICBsZXQgcGF5bG9hZFxuICAgICAgICAgICAgaWYgKHBhZ2VSZXNvdXJjZXMpIHtcbiAgICAgICAgICAgICAgcGF5bG9hZCA9IHsgLi4ucGFnZVJlc291cmNlcywgc3RhdGljUXVlcnlSZXN1bHRzIH1cbiAgICAgICAgICAgICAgZmluYWxSZXN1bHQucGF5bG9hZCA9IHBheWxvYWRcbiAgICAgICAgICAgICAgZW1pdHRlci5lbWl0KGBvblBvc3RMb2FkUGFnZVJlc291cmNlc2AsIHtcbiAgICAgICAgICAgICAgICBwYWdlOiBwYXlsb2FkLFxuICAgICAgICAgICAgICAgIHBhZ2VSZXNvdXJjZXM6IHBheWxvYWQsXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMucGFnZURiLnNldChwYWdlUGF0aCwgZmluYWxSZXN1bHQpXG5cbiAgICAgICAgICAgIGlmIChmaW5hbFJlc3VsdC5lcnJvcikge1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGVycm9yOiBmaW5hbFJlc3VsdC5lcnJvcixcbiAgICAgICAgICAgICAgICBzdGF0dXM6IGZpbmFsUmVzdWx0LnN0YXR1cyxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcGF5bG9hZFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLy8gd2hlbiBzdGF0aWMtcXVlcnkgZmFpbCB0byBsb2FkIHdlIHRocm93IGEgYmV0dGVyIGVycm9yXG4gICAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBlcnJvcjogZXJyLFxuICAgICAgICAgICAgICBzdGF0dXM6IFBhZ2VSZXNvdXJjZVN0YXR1cy5FcnJvcixcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgKVxuICAgIH0pXG5cbiAgICBpbkZsaWdodFByb21pc2VcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5pbkZsaWdodERiLmRlbGV0ZShwYWdlUGF0aClcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICB0aGlzLmluRmxpZ2h0RGIuZGVsZXRlKHBhZ2VQYXRoKVxuICAgICAgICB0aHJvdyBlcnJvclxuICAgICAgfSlcblxuICAgIHRoaXMuaW5GbGlnaHREYi5zZXQocGFnZVBhdGgsIGluRmxpZ2h0UHJvbWlzZSlcblxuICAgIHJldHVybiBpbkZsaWdodFByb21pc2VcbiAgfVxuXG4gIC8vIHJldHVybnMgdW5kZWZpbmVkIGlmIHRoZSBwYWdlIGRvZXMgbm90IGV4aXN0cyBpbiBjYWNoZVxuICBsb2FkUGFnZVN5bmMocmF3UGF0aCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgcGFnZVBhdGggPSBmaW5kUGF0aChyYXdQYXRoKVxuICAgIGlmICh0aGlzLnBhZ2VEYi5oYXMocGFnZVBhdGgpKSB7XG4gICAgICBjb25zdCBwYWdlRGF0YSA9IHRoaXMucGFnZURiLmdldChwYWdlUGF0aClcblxuICAgICAgaWYgKHBhZ2VEYXRhLnBheWxvYWQpIHtcbiAgICAgICAgcmV0dXJuIHBhZ2VEYXRhLnBheWxvYWRcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnM/LndpdGhFcnJvckRldGFpbHMpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBlcnJvcjogcGFnZURhdGEuZXJyb3IsXG4gICAgICAgICAgc3RhdHVzOiBwYWdlRGF0YS5zdGF0dXMsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9XG5cbiAgc2hvdWxkUHJlZmV0Y2gocGFnZVBhdGgpIHtcbiAgICAvLyBTa2lwIHByZWZldGNoaW5nIGlmIHdlIGtub3cgdXNlciBpcyBvbiBzbG93IG9yIGNvbnN0cmFpbmVkIGNvbm5lY3Rpb25cbiAgICBpZiAoIWRvZXNDb25uZWN0aW9uU3VwcG9ydFByZWZldGNoKCkpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIHRoZSBwYWdlIGV4aXN0cy5cbiAgICBpZiAodGhpcy5wYWdlRGIuaGFzKHBhZ2VQYXRoKSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIHByZWZldGNoKHBhZ2VQYXRoKSB7XG4gICAgaWYgKCF0aGlzLnNob3VsZFByZWZldGNoKHBhZ2VQYXRoKSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgLy8gVGVsbCBwbHVnaW5zIHdpdGggY3VzdG9tIHByZWZldGNoaW5nIGxvZ2ljIHRoYXQgdGhleSBzaG91bGQgc3RhcnRcbiAgICAvLyBwcmVmZXRjaGluZyB0aGlzIHBhdGguXG4gICAgaWYgKCF0aGlzLnByZWZldGNoVHJpZ2dlcmVkLmhhcyhwYWdlUGF0aCkpIHtcbiAgICAgIHRoaXMuYXBpUnVubmVyKGBvblByZWZldGNoUGF0aG5hbWVgLCB7IHBhdGhuYW1lOiBwYWdlUGF0aCB9KVxuICAgICAgdGhpcy5wcmVmZXRjaFRyaWdnZXJlZC5hZGQocGFnZVBhdGgpXG4gICAgfVxuXG4gICAgLy8gSWYgYSBwbHVnaW4gaGFzIGRpc2FibGVkIGNvcmUgcHJlZmV0Y2hpbmcsIHN0b3Agbm93LlxuICAgIGlmICh0aGlzLnByZWZldGNoRGlzYWJsZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGNvbnN0IHJlYWxQYXRoID0gZmluZFBhdGgocGFnZVBhdGgpXG4gICAgLy8gVG9kbyBtYWtlIGRvUHJlZmV0Y2ggbG9naWMgY2FjaGVhYmxlXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gICAgdGhpcy5kb1ByZWZldGNoKHJlYWxQYXRoKS50aGVuKCgpID0+IHtcbiAgICAgIGlmICghdGhpcy5wcmVmZXRjaENvbXBsZXRlZC5oYXMocGFnZVBhdGgpKSB7XG4gICAgICAgIHRoaXMuYXBpUnVubmVyKGBvblBvc3RQcmVmZXRjaFBhdGhuYW1lYCwgeyBwYXRobmFtZTogcGFnZVBhdGggfSlcbiAgICAgICAgdGhpcy5wcmVmZXRjaENvbXBsZXRlZC5hZGQocGFnZVBhdGgpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBkb1ByZWZldGNoKHBhZ2VQYXRoKSB7XG4gICAgY29uc3QgcGFnZURhdGFVcmwgPSBjcmVhdGVQYWdlRGF0YVVybChwYWdlUGF0aClcbiAgICByZXR1cm4gcHJlZmV0Y2hIZWxwZXIocGFnZURhdGFVcmwsIHtcbiAgICAgIGNyb3NzT3JpZ2luOiBgYW5vbnltb3VzYCxcbiAgICAgIGFzOiBgZmV0Y2hgLFxuICAgIH0pLnRoZW4oKCkgPT5cbiAgICAgIC8vIFRoaXMgd2FzIGp1c3QgcHJlZmV0Y2hlZCwgc28gd2lsbCByZXR1cm4gYSByZXNwb25zZSBmcm9tXG4gICAgICAvLyB0aGUgY2FjaGUgaW5zdGVhZCBvZiBtYWtpbmcgYW5vdGhlciByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXJcbiAgICAgIHRoaXMubG9hZFBhZ2VEYXRhSnNvbihwYWdlUGF0aClcbiAgICApXG4gIH1cblxuICBob3ZlcmluZyhyYXdQYXRoKSB7XG4gICAgdGhpcy5sb2FkUGFnZShyYXdQYXRoKVxuICB9XG5cbiAgZ2V0UmVzb3VyY2VVUkxzRm9yUGF0aG5hbWUocmF3UGF0aCkge1xuICAgIGNvbnN0IHBhZ2VQYXRoID0gZmluZFBhdGgocmF3UGF0aClcbiAgICBjb25zdCBwYWdlID0gdGhpcy5wYWdlRGF0YURiLmdldChwYWdlUGF0aClcbiAgICBpZiAocGFnZSkge1xuICAgICAgY29uc3QgcGFnZVJlc291cmNlcyA9IHRvUGFnZVJlc291cmNlcyhwYWdlLnBheWxvYWQpXG5cbiAgICAgIHJldHVybiBbXG4gICAgICAgIC4uLmNyZWF0ZUNvbXBvbmVudFVybHMocGFnZVJlc291cmNlcy5wYWdlLmNvbXBvbmVudENodW5rTmFtZSksXG4gICAgICAgIGNyZWF0ZVBhZ2VEYXRhVXJsKHBhZ2VQYXRoKSxcbiAgICAgIF1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG4gIH1cblxuICBpc1BhZ2VOb3RGb3VuZChyYXdQYXRoKSB7XG4gICAgY29uc3QgcGFnZVBhdGggPSBmaW5kUGF0aChyYXdQYXRoKVxuICAgIGNvbnN0IHBhZ2UgPSB0aGlzLnBhZ2VEYi5nZXQocGFnZVBhdGgpXG4gICAgcmV0dXJuICFwYWdlIHx8IHBhZ2Uubm90Rm91bmRcbiAgfVxuXG4gIGxvYWRBcHBEYXRhKHJldHJpZXMgPSAwKSB7XG4gICAgcmV0dXJuIHRoaXMubWVtb2l6ZWRHZXQoYCR7X19QQVRIX1BSRUZJWF9ffS9wYWdlLWRhdGEvYXBwLWRhdGEuanNvbmApLnRoZW4oXG4gICAgICByZXEgPT4ge1xuICAgICAgICBjb25zdCB7IHN0YXR1cywgcmVzcG9uc2VUZXh0IH0gPSByZXFcblxuICAgICAgICBsZXQgYXBwRGF0YVxuXG4gICAgICAgIGlmIChzdGF0dXMgIT09IDIwMCAmJiByZXRyaWVzIDwgMykge1xuICAgICAgICAgIC8vIFJldHJ5IDMgdGltZXMgaW5jYXNlIG9mIG5vbi0yMDAgcmVzcG9uc2VzXG4gICAgICAgICAgcmV0dXJuIHRoaXMubG9hZEFwcERhdGEocmV0cmllcyArIDEpXG4gICAgICAgIH1cblxuICAgICAgICAvLyBIYW5kbGUgMjAwXG4gICAgICAgIGlmIChzdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBqc29uUGF5bG9hZCA9IEpTT04ucGFyc2UocmVzcG9uc2VUZXh0KVxuICAgICAgICAgICAgaWYgKGpzb25QYXlsb2FkLndlYnBhY2tDb21waWxhdGlvbkhhc2ggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYG5vdCBhIHZhbGlkIGFwcC1kYXRhIHJlc3BvbnNlYClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYXBwRGF0YSA9IGpzb25QYXlsb2FkXG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAvLyBjb250aW51ZSByZWdhcmRsZXNzIG9mIGVycm9yXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFwcERhdGFcbiAgICAgIH1cbiAgICApXG4gIH1cbn1cblxuY29uc3QgY3JlYXRlQ29tcG9uZW50VXJscyA9IGNvbXBvbmVudENodW5rTmFtZSA9PlxuICAod2luZG93Ll9fX2NodW5rTWFwcGluZ1tjb21wb25lbnRDaHVua05hbWVdIHx8IFtdKS5tYXAoXG4gICAgY2h1bmsgPT4gX19QQVRIX1BSRUZJWF9fICsgY2h1bmtcbiAgKVxuXG5leHBvcnQgY2xhc3MgUHJvZExvYWRlciBleHRlbmRzIEJhc2VMb2FkZXIge1xuICBjb25zdHJ1Y3Rvcihhc3luY1JlcXVpcmVzLCBtYXRjaFBhdGhzKSB7XG4gICAgY29uc3QgbG9hZENvbXBvbmVudCA9IGNodW5rTmFtZSA9PiB7XG4gICAgICBpZiAoIWFzeW5jUmVxdWlyZXMuY29tcG9uZW50c1tjaHVua05hbWVdKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgV2UgY291bGRuJ3QgZmluZCB0aGUgY29ycmVjdCBjb21wb25lbnQgY2h1bmsgd2l0aCB0aGUgbmFtZSAke2NodW5rTmFtZX1gXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgYXN5bmNSZXF1aXJlcy5jb21wb25lbnRzW2NodW5rTmFtZV0oKVxuICAgICAgICAgIC50aGVuKHByZWZlckRlZmF1bHQpXG4gICAgICAgICAgLy8gbG9hZGVyIHdpbGwgaGFuZGxlIHRoZSBjYXNlIHdoZW4gY29tcG9uZW50IGlzIGVycm9yXG4gICAgICAgICAgLmNhdGNoKGVyciA9PiBlcnIpXG4gICAgICApXG4gICAgfVxuXG4gICAgc3VwZXIobG9hZENvbXBvbmVudCwgbWF0Y2hQYXRocylcbiAgfVxuXG4gIGRvUHJlZmV0Y2gocGFnZVBhdGgpIHtcbiAgICByZXR1cm4gc3VwZXIuZG9QcmVmZXRjaChwYWdlUGF0aCkudGhlbihyZXN1bHQgPT4ge1xuICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgIT09IFBhZ2VSZXNvdXJjZVN0YXR1cy5TdWNjZXNzKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgICAgfVxuICAgICAgY29uc3QgcGFnZURhdGEgPSByZXN1bHQucGF5bG9hZFxuICAgICAgY29uc3QgY2h1bmtOYW1lID0gcGFnZURhdGEuY29tcG9uZW50Q2h1bmtOYW1lXG4gICAgICBjb25zdCBjb21wb25lbnRVcmxzID0gY3JlYXRlQ29tcG9uZW50VXJscyhjaHVua05hbWUpXG4gICAgICByZXR1cm4gUHJvbWlzZS5hbGwoY29tcG9uZW50VXJscy5tYXAocHJlZmV0Y2hIZWxwZXIpKS50aGVuKCgpID0+IHBhZ2VEYXRhKVxuICAgIH0pXG4gIH1cblxuICBsb2FkUGFnZURhdGFKc29uKHJhd1BhdGgpIHtcbiAgICByZXR1cm4gc3VwZXIubG9hZFBhZ2VEYXRhSnNvbihyYXdQYXRoKS50aGVuKGRhdGEgPT4ge1xuICAgICAgaWYgKGRhdGEubm90Rm91bmQpIHtcbiAgICAgICAgLy8gY2hlY2sgaWYgaHRtbCBmaWxlIGV4aXN0IHVzaW5nIEhFQUQgcmVxdWVzdDpcbiAgICAgICAgLy8gaWYgaXQgZG9lcyB3ZSBzaG91bGQgbmF2aWdhdGUgdG8gaXQgaW5zdGVhZCBvZiBzaG93aW5nIDQwNFxuICAgICAgICByZXR1cm4gZG9GZXRjaChyYXdQYXRoLCBgSEVBRGApLnRoZW4ocmVxID0+IHtcbiAgICAgICAgICBpZiAocmVxLnN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICAvLyBwYWdlICguaHRtbCBmaWxlKSBhY3R1YWxseSBleGlzdCAob3Igd2UgYXNrZWQgZm9yIDQwNCApXG4gICAgICAgICAgICAvLyByZXR1cm5pbmcgcGFnZSByZXNvdXJjZXMgc3RhdHVzIGFzIGVycm9yZWQgdG8gdHJpZ2dlclxuICAgICAgICAgICAgLy8gcmVndWxhciBicm93c2VyIG5hdmlnYXRpb24gdG8gZ2l2ZW4gcGFnZVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgc3RhdHVzOiBQYWdlUmVzb3VyY2VTdGF0dXMuRXJyb3IsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gaWYgSEVBRCByZXF1ZXN0IHdhc24ndCAyMDAsIHJldHVybiBub3RGb3VuZCByZXN1bHRcbiAgICAgICAgICAvLyBhbmQgc2hvdyA0MDQgcGFnZVxuICAgICAgICAgIHJldHVybiBkYXRhXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YVxuICAgIH0pXG4gIH1cbn1cblxubGV0IGluc3RhbmNlXG5cbmV4cG9ydCBjb25zdCBzZXRMb2FkZXIgPSBfbG9hZGVyID0+IHtcbiAgaW5zdGFuY2UgPSBfbG9hZGVyXG59XG5cbmV4cG9ydCBjb25zdCBwdWJsaWNMb2FkZXIgPSB7XG4gIGVucXVldWU6IHJhd1BhdGggPT4gaW5zdGFuY2UucHJlZmV0Y2gocmF3UGF0aCksXG5cbiAgLy8gUmVhbCBtZXRob2RzXG4gIGdldFJlc291cmNlVVJMc0ZvclBhdGhuYW1lOiByYXdQYXRoID0+XG4gICAgaW5zdGFuY2UuZ2V0UmVzb3VyY2VVUkxzRm9yUGF0aG5hbWUocmF3UGF0aCksXG4gIGxvYWRQYWdlOiByYXdQYXRoID0+IGluc3RhbmNlLmxvYWRQYWdlKHJhd1BhdGgpLFxuICAvLyBUT0RPIGFkZCBkZXByZWNhdGlvbiB0byB2NCBzbyBwZW9wbGUgdXNlIHdpdGhFcnJvckRldGFpbHMgYW5kIHRoZW4gd2UgY2FuIHJlbW92ZSBpbiB2NSBhbmQgY2hhbmdlIGRlZmF1bHQgYmVoYXZpb3VyXG4gIGxvYWRQYWdlU3luYzogKHJhd1BhdGgsIG9wdGlvbnMgPSB7fSkgPT5cbiAgICBpbnN0YW5jZS5sb2FkUGFnZVN5bmMocmF3UGF0aCwgb3B0aW9ucyksXG4gIHByZWZldGNoOiByYXdQYXRoID0+IGluc3RhbmNlLnByZWZldGNoKHJhd1BhdGgpLFxuICBpc1BhZ2VOb3RGb3VuZDogcmF3UGF0aCA9PiBpbnN0YW5jZS5pc1BhZ2VOb3RGb3VuZChyYXdQYXRoKSxcbiAgaG92ZXJpbmc6IHJhd1BhdGggPT4gaW5zdGFuY2UuaG92ZXJpbmcocmF3UGF0aCksXG4gIGxvYWRBcHBEYXRhOiAoKSA9PiBpbnN0YW5jZS5sb2FkQXBwRGF0YSgpLFxufVxuXG5leHBvcnQgZGVmYXVsdCBwdWJsaWNMb2FkZXJcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFN0YXRpY1F1ZXJ5UmVzdWx0cygpIHtcbiAgaWYgKGluc3RhbmNlKSB7XG4gICAgcmV0dXJuIGluc3RhbmNlLnN0YXRpY1F1ZXJ5RGJcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ge31cbiAgfVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8741\n')},804:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('/* harmony import */ var _babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(1788);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7294);\n/* harmony import */ var _api_runner_browser__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7343);\n/* harmony import */ var _find_path__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(2257);\n// Renders page\nvar PageRenderer=/*#__PURE__*/function(_React$Component){(0,_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_3__/* .default */ .Z)(PageRenderer,_React$Component);function PageRenderer(){return _React$Component.apply(this,arguments)||this;}var _proto=PageRenderer.prototype;_proto.render=function render(){var props=Object.assign({},this.props,{params:Object.assign({},(0,_find_path__WEBPACK_IMPORTED_MODULE_2__/* .grabMatchParams */ .GA)(this.props.location.pathname),this.props.pageResources.json.pageContext.__params)});var pageElement=/*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(this.props.pageResources.component,Object.assign({},props,{key:this.props.path||this.props.pageResources.page.path}));var wrappedPage=(0,_api_runner_browser__WEBPACK_IMPORTED_MODULE_1__/* .apiRunner */ .h)("wrapPageElement",{element:pageElement,props:props},pageElement,function(_ref){var result=_ref.result;return{element:result,props:props};}).pop();return wrappedPage;};return PageRenderer;}(react__WEBPACK_IMPORTED_MODULE_0__.Component);/* harmony default export */ __webpack_exports__["Z"] = (PageRenderer);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uLy5jYWNoZS9wYWdlLXJlbmRlcmVyLmpzPzIwZTUiXSwibmFtZXMiOlsiUGFnZVJlbmRlcmVyIiwicmVuZGVyIiwicHJvcHMiLCJwYXJhbXMiLCJncmFiTWF0Y2hQYXJhbXMiLCJsb2NhdGlvbiIsInBhdGhuYW1lIiwicGFnZVJlc291cmNlcyIsImpzb24iLCJwYWdlQ29udGV4dCIsIl9fcGFyYW1zIiwicGFnZUVsZW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiY29tcG9uZW50Iiwia2V5IiwicGF0aCIsInBhZ2UiLCJ3cmFwcGVkUGFnZSIsImFwaVJ1bm5lciIsImVsZW1lbnQiLCJyZXN1bHQiLCJwb3AiLCJSZWFjdCJdLCJtYXBwaW5ncyI6Ijs7OztBQUtBO0dBQ01BLGEseVJBQ0pDLE0sQ0FBQSxpQkFBUyxDQUNQLEdBQU1DLE1BQUssa0JBQ04sS0FBS0EsS0FEQyxFQUVUQyxNQUFNLGtCQUNEQyxxRUFBZSxDQUFDLEtBQUtGLEtBQUwsQ0FBV0csUUFBWCxDQUFvQkMsUUFBckIsQ0FEZCxDQUVELEtBQUtKLEtBQUwsQ0FBV0ssYUFBWCxDQUF5QkMsSUFBekIsQ0FBOEJDLFdBQTlCLENBQTBDQyxRQUZ6QyxDQUZHLEVBQVgsQ0FRQSxHQUFNQyxZQUFXLGNBQUdDLG9EQUFhLENBQUMsS0FBS1YsS0FBTCxDQUFXSyxhQUFYLENBQXlCTSxTQUExQixrQkFDNUJYLEtBRDRCLEVBRS9CWSxHQUFHLENBQUUsS0FBS1osS0FBTCxDQUFXYSxJQUFYLEVBQW1CLEtBQUtiLEtBQUwsQ0FBV0ssYUFBWCxDQUF5QlMsSUFBekIsQ0FBOEJELElBRnZCLEdBQWpDLENBS0EsR0FBTUUsWUFBVyxDQUFHQyx1RUFBUyxtQkFFM0IsQ0FBRUMsT0FBTyxDQUFFUixXQUFYLENBQXdCVCxLQUFLLENBQUxBLEtBQXhCLENBRjJCLENBRzNCUyxXQUgyQixDQUkzQixjQUFnQixJQUFiUyxPQUFhLE1BQWJBLE1BQWEsQ0FDZCxNQUFPLENBQUVELE9BQU8sQ0FBRUMsTUFBWCxDQUFtQmxCLEtBQUssQ0FBTEEsS0FBbkIsQ0FBUCxDQUNELENBTjBCLENBQVQsQ0FPbEJtQixHQVBrQixFQUFwQixDQVNBLE1BQU9KLFlBQVAsQ0FDRCxDLHVCQXpCd0JLLDRDLEVBbUMzQix5REFBZXRCLFlBQWYiLCJmaWxlIjoiODA0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IGNyZWF0ZUVsZW1lbnQgfSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiXG5pbXBvcnQgeyBhcGlSdW5uZXIgfSBmcm9tIFwiLi9hcGktcnVubmVyLWJyb3dzZXJcIlxuaW1wb3J0IHsgZ3JhYk1hdGNoUGFyYW1zIH0gZnJvbSBcIi4vZmluZC1wYXRoXCJcblxuLy8gUmVuZGVycyBwYWdlXG5jbGFzcyBQYWdlUmVuZGVyZXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICByZW5kZXIoKSB7XG4gICAgY29uc3QgcHJvcHMgPSB7XG4gICAgICAuLi50aGlzLnByb3BzLFxuICAgICAgcGFyYW1zOiB7XG4gICAgICAgIC4uLmdyYWJNYXRjaFBhcmFtcyh0aGlzLnByb3BzLmxvY2F0aW9uLnBhdGhuYW1lKSxcbiAgICAgICAgLi4udGhpcy5wcm9wcy5wYWdlUmVzb3VyY2VzLmpzb24ucGFnZUNvbnRleHQuX19wYXJhbXMsXG4gICAgICB9LFxuICAgIH1cblxuICAgIGNvbnN0IHBhZ2VFbGVtZW50ID0gY3JlYXRlRWxlbWVudCh0aGlzLnByb3BzLnBhZ2VSZXNvdXJjZXMuY29tcG9uZW50LCB7XG4gICAgICAuLi5wcm9wcyxcbiAgICAgIGtleTogdGhpcy5wcm9wcy5wYXRoIHx8IHRoaXMucHJvcHMucGFnZVJlc291cmNlcy5wYWdlLnBhdGgsXG4gICAgfSlcblxuICAgIGNvbnN0IHdyYXBwZWRQYWdlID0gYXBpUnVubmVyKFxuICAgICAgYHdyYXBQYWdlRWxlbWVudGAsXG4gICAgICB7IGVsZW1lbnQ6IHBhZ2VFbGVtZW50LCBwcm9wcyB9LFxuICAgICAgcGFnZUVsZW1lbnQsXG4gICAgICAoeyByZXN1bHQgfSkgPT4ge1xuICAgICAgICByZXR1cm4geyBlbGVtZW50OiByZXN1bHQsIHByb3BzIH1cbiAgICAgIH1cbiAgICApLnBvcCgpXG5cbiAgICByZXR1cm4gd3JhcHBlZFBhZ2VcbiAgfVxufVxuXG5QYWdlUmVuZGVyZXIucHJvcFR5cGVzID0ge1xuICBsb2NhdGlvbjogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICBwYWdlUmVzb3VyY2VzOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gIGRhdGE6IFByb3BUeXBlcy5vYmplY3QsXG4gIHBhZ2VDb250ZXh0OiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG59XG5cbmV4cG9ydCBkZWZhdWx0IFBhZ2VSZW5kZXJlclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///804\n')},2871:function(__unused_webpack_module,__unused_webpack___webpack_exports__,__webpack_require__){"use strict";eval('\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js\nvar inheritsLoose = __webpack_require__(1788);\n// EXTERNAL MODULE: ./.cache/api-runner-browser.js\nvar api_runner_browser = __webpack_require__(7343);\n// EXTERNAL MODULE: ./node_modules/react/index.js\nvar react = __webpack_require__(7294);\n// EXTERNAL MODULE: ./node_modules/react-dom/index.js\nvar react_dom = __webpack_require__(3935);\n// EXTERNAL MODULE: ./node_modules/@gatsbyjs/reach-router/es/index.js + 2 modules\nvar es = __webpack_require__(9499);\n// EXTERNAL MODULE: ./node_modules/gatsby-react-router-scroll/index.js\nvar gatsby_react_router_scroll = __webpack_require__(9679);\n// EXTERNAL MODULE: ./.cache/gatsby-browser-entry.js\nvar gatsby_browser_entry = __webpack_require__(5444);\n// EXTERNAL MODULE: ./.cache/loader.js + 1 modules\nvar loader = __webpack_require__(8741);\n// EXTERNAL MODULE: ./.cache/redirect-utils.js + 1 modules\nvar redirect_utils = __webpack_require__(5166);\n// EXTERNAL MODULE: ./.cache/emitter.js + 1 modules\nvar emitter = __webpack_require__(8110);\n;// CONCATENATED MODULE: ./.cache/route-announcer-props.js\n// This is extracted to separate module because it\'s shared\n// between browser and SSR code\nvar RouteAnnouncerProps={id:"gatsby-announcer",style:{position:"absolute",top:0,width:1,height:1,padding:0,overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",border:0},"aria-live":"assertive","aria-atomic":"true"};\n// EXTERNAL MODULE: ./node_modules/@gatsbyjs/reach-router/lib/history.js\nvar lib_history = __webpack_require__(2393);\n// EXTERNAL MODULE: ./node_modules/gatsby-link/index.js\nvar gatsby_link = __webpack_require__(8037);\n;// CONCATENATED MODULE: ./.cache/navigation.js\nfunction maybeRedirect(pathname){var redirect=(0,redirect_utils/* maybeGetBrowserRedirect */.J)(pathname);if(redirect!=null){window.___replace(redirect.toPath);return true;}else{return false;}}var onPreRouteUpdate=function onPreRouteUpdate(location,prevLocation){if(!maybeRedirect(location.pathname)){(0,api_runner_browser/* apiRunner */.h)("onPreRouteUpdate",{location:location,prevLocation:prevLocation});}};var onRouteUpdate=function onRouteUpdate(location,prevLocation){if(!maybeRedirect(location.pathname)){(0,api_runner_browser/* apiRunner */.h)("onRouteUpdate",{location:location,prevLocation:prevLocation});if(false){}}};var navigation_navigate=function navigate(to,options){if(options===void 0){options={};}// Support forward/backward navigation with numbers\n// navigate(-2) (jumps back 2 history steps)\n// navigate(2) (jumps forward 2 history steps)\nif(typeof to==="number"){lib_history/* globalHistory.navigate */.V5.navigate(to);return;}var _parsePath=(0,gatsby_link/* parsePath */.cP)(to),pathname=_parsePath.pathname;var redirect=(0,redirect_utils/* maybeGetBrowserRedirect */.J)(pathname);// If we\'re redirecting, just replace the passed in pathname\n// to the one we want to redirect to.\nif(redirect){to=redirect.toPath;pathname=(0,gatsby_link/* parsePath */.cP)(to).pathname;}// If we had a service worker update, no matter the path, reload window and\n// reset the pathname whitelist\nif(window.___swUpdated){window.location=pathname;return;}// Start a timer to wait for a second before transitioning and showing a\n// loader in case resources aren\'t around yet.\nvar timeoutId=setTimeout(function(){emitter/* default.emit */.Z.emit("onDelayedLoadPageResources",{pathname:pathname});(0,api_runner_browser/* apiRunner */.h)("onRouteUpdateDelayed",{location:window.location});},1000);loader/* default.loadPage */.ZP.loadPage(pathname).then(function(pageResources){// If no page resources, then refresh the page\n// Do this, rather than simply `window.location.reload()`, so that\n// pressing the back/forward buttons work - otherwise when pressing\n// back, the browser will just change the URL and expect JS to handle\n// the change, which won\'t always work since it might not be a Gatsby\n// page.\nif(!pageResources||pageResources.status===loader/* PageResourceStatus.Error */.uQ.Error){window.history.replaceState({},"",location.href);window.location=pathname;clearTimeout(timeoutId);return;}// If the loaded page has a different compilation hash to the\n// window, then a rebuild has occurred on the server. Reload.\nif( true&&pageResources){if(pageResources.page.webpackCompilationHash!==window.___webpackCompilationHash){// Purge plugin-offline cache\nif("serviceWorker"in navigator&&navigator.serviceWorker.controller!==null&&navigator.serviceWorker.controller.state==="activated"){navigator.serviceWorker.controller.postMessage({gatsbyApi:"clearPathResources"});}window.location=pathname;}}(0,es.navigate)(to,options);clearTimeout(timeoutId);});};function shouldUpdateScroll(prevRouterProps,_ref){var _this=this;var location=_ref.location;var pathname=location.pathname,hash=location.hash;var results=(0,api_runner_browser/* apiRunner */.h)("shouldUpdateScroll",{prevRouterProps:prevRouterProps,// `pathname` for backwards compatibility\npathname:pathname,routerProps:{location:location},getSavedScrollPosition:function getSavedScrollPosition(args){return[0,// FIXME this is actually a big code smell, we should fix this\n// eslint-disable-next-line @babel/no-invalid-this\n_this._stateStorage.read(args,args.key)];}});if(results.length>0){// Use the latest registered shouldUpdateScroll result, this allows users to override plugin\'s configuration\n// @see https://github.com/gatsbyjs/gatsby/issues/12038\nreturn results[results.length-1];}if(prevRouterProps){var oldPathname=prevRouterProps.location.pathname;if(oldPathname===pathname){// Scroll to element if it exists, if it doesn\'t, or no hash is provided,\n// scroll to top.\nreturn hash?decodeURI(hash.slice(1)):[0,0];}}return true;}function init(){// The "scroll-behavior" package expects the "action" to be on the location\n// object so let\'s copy it over.\nlib_history/* globalHistory.listen */.V5.listen(function(args){args.location.action=args.action;});window.___push=function(to){return navigation_navigate(to,{replace:false});};window.___replace=function(to){return navigation_navigate(to,{replace:true});};window.___navigate=function(to,options){return navigation_navigate(to,options);};// Check for initial page-load redirect\nmaybeRedirect(window.location.pathname);}var RouteAnnouncer=/*#__PURE__*/function(_React$Component){(0,inheritsLoose/* default */.Z)(RouteAnnouncer,_React$Component);function RouteAnnouncer(props){var _this2;_this2=_React$Component.call(this,props)||this;_this2.announcementRef=/*#__PURE__*/react.createRef();return _this2;}var _proto=RouteAnnouncer.prototype;_proto.componentDidUpdate=function componentDidUpdate(prevProps,nextProps){var _this3=this;requestAnimationFrame(function(){var pageName="new page at "+_this3.props.location.pathname;if(document.title){pageName=document.title;}var pageHeadings=document.querySelectorAll("#gatsby-focus-wrapper h1");if(pageHeadings&&pageHeadings.length){pageName=pageHeadings[0].textContent;}var newAnnouncement="Navigated to "+pageName;if(_this3.announcementRef.current){var oldAnnouncement=_this3.announcementRef.current.innerText;if(oldAnnouncement!==newAnnouncement){_this3.announcementRef.current.innerText=newAnnouncement;}}});};_proto.render=function render(){return/*#__PURE__*/react.createElement("div",Object.assign({},RouteAnnouncerProps,{ref:this.announcementRef}));};return RouteAnnouncer;}(react.Component);var compareLocationProps=function compareLocationProps(prevLocation,nextLocation){var _prevLocation$state,_nextLocation$state;if(prevLocation.href!==nextLocation.href){return true;}if((prevLocation===null||prevLocation===void 0?void 0:(_prevLocation$state=prevLocation.state)===null||_prevLocation$state===void 0?void 0:_prevLocation$state.key)!==(nextLocation===null||nextLocation===void 0?void 0:(_nextLocation$state=nextLocation.state)===null||_nextLocation$state===void 0?void 0:_nextLocation$state.key)){return true;}return false;};// Fire on(Pre)RouteUpdate APIs\nvar RouteUpdates=/*#__PURE__*/function(_React$Component2){(0,inheritsLoose/* default */.Z)(RouteUpdates,_React$Component2);function RouteUpdates(props){var _this4;_this4=_React$Component2.call(this,props)||this;onPreRouteUpdate(props.location,null);return _this4;}var _proto2=RouteUpdates.prototype;_proto2.componentDidMount=function componentDidMount(){onRouteUpdate(this.props.location,null);};_proto2.shouldComponentUpdate=function shouldComponentUpdate(prevProps){if(compareLocationProps(prevProps.location,this.props.location)){onPreRouteUpdate(this.props.location,prevProps.location);return true;}return false;};_proto2.componentDidUpdate=function componentDidUpdate(prevProps){if(compareLocationProps(prevProps.location,this.props.location)){onRouteUpdate(this.props.location,prevProps.location);}};_proto2.render=function render(){return/*#__PURE__*/react.createElement(react.Fragment,null,this.props.children,/*#__PURE__*/react.createElement(RouteAnnouncer,{location:location}));};return RouteUpdates;}(react.Component);\n// EXTERNAL MODULE: ./.cache/page-renderer.js\nvar page_renderer = __webpack_require__(804);\n// EXTERNAL MODULE: ./.cache/_this_is_virtual_fs_path_/$virtual/async-requires.js\nvar async_requires = __webpack_require__(4999);\n;// CONCATENATED MODULE: ./node_modules/shallow-compare/es/index.js\n// Pulled from react-compat\n// https://github.com/developit/preact-compat/blob/7c5de00e7c85e2ffd011bf3af02899b63f699d3a/src/index.js#L349\nfunction shallowDiffers(a, b) {\n for (var i in a) {\n if (!(i in b)) return true;\n }for (var _i in b) {\n if (a[_i] !== b[_i]) return true;\n }return false;\n}\n\n/* harmony default export */ var shallow_compare_es = (function (instance, nextProps, nextState) {\n return shallowDiffers(instance.props, nextProps) || shallowDiffers(instance.state, nextState);\n});\n;// CONCATENATED MODULE: ./.cache/ensure-resources.js\nvar EnsureResources=/*#__PURE__*/function(_React$Component){(0,inheritsLoose/* default */.Z)(EnsureResources,_React$Component);function EnsureResources(props){var _this;_this=_React$Component.call(this)||this;var location=props.location,pageResources=props.pageResources;_this.state={location:Object.assign({},location),pageResources:pageResources||loader/* default.loadPageSync */.ZP.loadPageSync(location.pathname,{withErrorDetails:true})};return _this;}EnsureResources.getDerivedStateFromProps=function getDerivedStateFromProps(_ref,prevState){var location=_ref.location;if(prevState.location.href!==location.href){var pageResources=loader/* default.loadPageSync */.ZP.loadPageSync(location.pathname,{withErrorDetails:true});return{pageResources:pageResources,location:Object.assign({},location)};}return{location:Object.assign({},location)};};var _proto=EnsureResources.prototype;_proto.loadResources=function loadResources(rawPath){var _this2=this;loader/* default.loadPage */.ZP.loadPage(rawPath).then(function(pageResources){if(pageResources&&pageResources.status!==loader/* PageResourceStatus.Error */.uQ.Error){_this2.setState({location:Object.assign({},window.location),pageResources:pageResources});}else{window.history.replaceState({},"",location.href);window.location=rawPath;}});};_proto.shouldComponentUpdate=function shouldComponentUpdate(nextProps,nextState){// Always return false if we\'re missing resources.\nif(!nextState.pageResources){this.loadResources(nextProps.location.pathname);return false;}if(false){}// Check if the component or json have changed.\nif(this.state.pageResources!==nextState.pageResources){return true;}if(this.state.pageResources.component!==nextState.pageResources.component){return true;}if(this.state.pageResources.json!==nextState.pageResources.json){return true;}// Check if location has changed on a page using internal routing\n// via matchPath configuration.\nif(this.state.location.key!==nextState.location.key&&nextState.pageResources.page&&(nextState.pageResources.page.matchPath||nextState.pageResources.page.path)){return true;}return shallow_compare_es(this,nextProps,nextState);};_proto.render=function render(){if(false){ var message, _this$state$pageResou; }return this.props.children(this.state);};return EnsureResources;}(react.Component);/* harmony default export */ var ensure_resources = (EnsureResources);\n// EXTERNAL MODULE: ./.cache/strip-prefix.js\nvar strip_prefix = __webpack_require__(1578);\n;// CONCATENATED MODULE: ./.cache/_this_is_virtual_fs_path_/$virtual/match-paths.json\nvar match_paths_namespaceObject = JSON.parse(\'[{"path":"/en/404.html","matchPath":"/en/404.html"},{"path":"/en/cejst/","matchPath":"/en/cejst/"},{"path":"/en/contact/","matchPath":"/en/contact/"},{"path":"/en/methodology/","matchPath":"/en/methodology/"},{"path":"/en/timeline/","matchPath":"/en/timeline/"},{"path":"/es/404.html","matchPath":"/es/404.html"},{"path":"/es/cejst/","matchPath":"/es/cejst/"},{"path":"/es/contact/","matchPath":"/es/contact/"},{"path":"/es/methodology/","matchPath":"/es/methodology/"},{"path":"/es/timeline/","matchPath":"/es/timeline/"},{"path":"/en/","matchPath":"/en/"},{"path":"/es/","matchPath":"/es/"},{"path":"/en/404/","matchPath":"/en/*"},{"path":"/es/404/","matchPath":"/es/*"}]\');\n;// CONCATENATED MODULE: ./.cache/production-app.js\n// Generated during bootstrap\nvar production_app_loader=new loader/* ProdLoader */.kL(async_requires,match_paths_namespaceObject);(0,loader/* setLoader */.N1)(production_app_loader);production_app_loader.setApiRunner(api_runner_browser/* apiRunner */.h);window.asyncRequires=async_requires;window.___emitter=emitter/* default */.Z;window.___loader=loader/* publicLoader */.jN;init();(0,api_runner_browser/* apiRunnerAsync */.I)("onClientEntry").then(function(){// Let plugins register a service worker. The plugin just needs\n// to return true.\nif((0,api_runner_browser/* apiRunner */.h)("registerServiceWorker").filter(Boolean).length>0){__webpack_require__(154);}// In gatsby v2 if Router is used in page using matchPaths\n// paths need to contain full path.\n// For example:\n// - page have `/app/*` matchPath\n// - inside template user needs to use `/app/xyz` as path\n// Resetting `basepath`/`baseuri` keeps current behaviour\n// to not introduce breaking change.\n// Remove this in v3\nvar RouteHandler=function RouteHandler(props){return/*#__PURE__*/react.createElement(es.BaseContext.Provider,{value:{baseuri:"/",basepath:"/"}},/*#__PURE__*/react.createElement(page_renderer/* default */.Z,props));};var DataContext=/*#__PURE__*/react.createContext({});var GatsbyRoot=/*#__PURE__*/function(_React$Component){(0,inheritsLoose/* default */.Z)(GatsbyRoot,_React$Component);function GatsbyRoot(){return _React$Component.apply(this,arguments)||this;}var _proto=GatsbyRoot.prototype;_proto.render=function render(){var children=this.props.children;return/*#__PURE__*/react.createElement(es.Location,null,function(_ref){var location=_ref.location;return/*#__PURE__*/react.createElement(ensure_resources,{location:location},function(_ref2){var pageResources=_ref2.pageResources,location=_ref2.location;var staticQueryResults=(0,loader/* getStaticQueryResults */.hs)();return/*#__PURE__*/react.createElement(gatsby_browser_entry.StaticQueryContext.Provider,{value:staticQueryResults},/*#__PURE__*/react.createElement(DataContext.Provider,{value:{pageResources:pageResources,location:location}},children));});});};return GatsbyRoot;}(react.Component);var LocationHandler=/*#__PURE__*/function(_React$Component2){(0,inheritsLoose/* default */.Z)(LocationHandler,_React$Component2);function LocationHandler(){return _React$Component2.apply(this,arguments)||this;}var _proto2=LocationHandler.prototype;_proto2.render=function render(){var _this=this;return/*#__PURE__*/react.createElement(DataContext.Consumer,null,function(_ref3){var pageResources=_ref3.pageResources,location=_ref3.location;return/*#__PURE__*/react.createElement(RouteUpdates,{location:location},/*#__PURE__*/react.createElement(gatsby_react_router_scroll/* ScrollContext */.$C,{location:location,shouldUpdateScroll:shouldUpdateScroll},/*#__PURE__*/react.createElement(es.Router,{basepath:"/justice40-tool/main",location:location,id:"gatsby-focus-wrapper"},/*#__PURE__*/react.createElement(RouteHandler,Object.assign({path:pageResources.page.path==="/404.html"?(0,strip_prefix/* default */.Z)(location.pathname,"/justice40-tool/main"):encodeURI(pageResources.page.matchPath||pageResources.page.path)},_this.props,{location:location,pageResources:pageResources},pageResources.json)))));});};return LocationHandler;}(react.Component);var _window=window,pagePath=_window.pagePath,browserLoc=_window.location;// Explicitly call navigate if the canonical path (window.pagePath)\n// is different to the browser path (window.location.pathname). But\n// only if NONE of the following conditions hold:\n//\n// - The url matches a client side route (page.matchPath)\n// - it\'s a 404 page\n// - it\'s the offline plugin shell (/offline-plugin-app-shell-fallback/)\nif(pagePath&&"/justice40-tool/main"+pagePath!==browserLoc.pathname&&!(production_app_loader.findMatchPath((0,strip_prefix/* default */.Z)(browserLoc.pathname,"/justice40-tool/main"))||pagePath==="/404.html"||pagePath.match(/^\\/404\\/?$/)||pagePath.match(/^\\/offline-plugin-app-shell-fallback\\/?$/))){(0,es.navigate)("/justice40-tool/main"+pagePath+browserLoc.search+browserLoc.hash,{replace:true});}loader/* publicLoader.loadPage */.jN.loadPage(browserLoc.pathname).then(function(page){if(!page||page.status===loader/* PageResourceStatus.Error */.uQ.Error){var message="page resources for "+browserLoc.pathname+" not found. Not rendering React";// if the chunk throws an error we want to capture the real error\n// This should help with https://github.com/gatsbyjs/gatsby/issues/19618\nif(page&&page.error){console.error(message);throw page.error;}throw new Error(message);}window.___webpackCompilationHash=page.page.webpackCompilationHash;var SiteRoot=(0,api_runner_browser/* apiRunner */.h)("wrapRootElement",{element:/*#__PURE__*/react.createElement(LocationHandler,null)},/*#__PURE__*/react.createElement(LocationHandler,null),function(_ref4){var result=_ref4.result;return{element:result};}).pop();var App=function App(){var onClientEntryRanRef=react.useRef(false);react.useEffect(function(){if(!onClientEntryRanRef.current){onClientEntryRanRef.current=true;performance.mark("onInitialClientRender");(0,api_runner_browser/* apiRunner */.h)("onInitialClientRender");}},[]);return/*#__PURE__*/react.createElement(GatsbyRoot,null,SiteRoot);};var renderer=(0,api_runner_browser/* apiRunner */.h)("replaceHydrateFunction",undefined,react_dom.createRoot?react_dom.createRoot:react_dom.hydrate)[0];function runRender(){var rootElement=typeof window!=="undefined"?document.getElementById("___gatsby"):null;if(renderer===react_dom.createRoot){renderer(rootElement,{hydrate:true}).render(/*#__PURE__*/react.createElement(App,null));}else{renderer(/*#__PURE__*/react.createElement(App,null),rootElement);}}// https://github.com/madrobby/zepto/blob/b5ed8d607f67724788ec9ff492be297f64d47dfc/src/zepto.js#L439-L450\n// TODO remove IE 10 support\nvar doc=document;if(doc.readyState==="complete"||doc.readyState!=="loading"&&!doc.documentElement.doScroll){setTimeout(function(){runRender();},0);}else{var handler=function handler(){doc.removeEventListener("DOMContentLoaded",handler,false);window.removeEventListener("load",handler,false);runRender();};doc.addEventListener("DOMContentLoaded",handler,false);window.addEventListener("load",handler,false);}});});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uLy5jYWNoZS9yb3V0ZS1hbm5vdW5jZXItcHJvcHMuanM/ZWIwZiIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uLy5jYWNoZS9uYXZpZ2F0aW9uLmpzP2M5ZWUiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvc2hhbGxvdy1jb21wYXJlL2VzL2luZGV4LmpzPzExY2EiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi8uY2FjaGUvZW5zdXJlLXJlc291cmNlcy5qcz9mZjRlIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vLmNhY2hlL3Byb2R1Y3Rpb24tYXBwLmpzPzUzMTUiXSwibmFtZXMiOlsiUm91dGVBbm5vdW5jZXJQcm9wcyIsImlkIiwic3R5bGUiLCJwb3NpdGlvbiIsInRvcCIsIndpZHRoIiwiaGVpZ2h0IiwicGFkZGluZyIsIm92ZXJmbG93IiwiY2xpcCIsIndoaXRlU3BhY2UiLCJib3JkZXIiLCJtYXliZVJlZGlyZWN0IiwicGF0aG5hbWUiLCJyZWRpcmVjdCIsIm1heWJlR2V0QnJvd3NlclJlZGlyZWN0Iiwid2luZG93IiwiX19fcmVwbGFjZSIsInRvUGF0aCIsIm9uUHJlUm91dGVVcGRhdGUiLCJsb2NhdGlvbiIsInByZXZMb2NhdGlvbiIsImFwaVJ1bm5lciIsIm9uUm91dGVVcGRhdGUiLCJwcm9jZXNzIiwibmF2aWdhdGUiLCJ0byIsIm9wdGlvbnMiLCJnbG9iYWxIaXN0b3J5IiwicGFyc2VQYXRoIiwiX19fc3dVcGRhdGVkIiwidGltZW91dElkIiwic2V0VGltZW91dCIsImVtaXR0ZXIiLCJsb2FkZXIiLCJ0aGVuIiwicGFnZVJlc291cmNlcyIsInN0YXR1cyIsIlBhZ2VSZXNvdXJjZVN0YXR1cyIsImhpc3RvcnkiLCJyZXBsYWNlU3RhdGUiLCJocmVmIiwiY2xlYXJUaW1lb3V0IiwicGFnZSIsIndlYnBhY2tDb21waWxhdGlvbkhhc2giLCJfX193ZWJwYWNrQ29tcGlsYXRpb25IYXNoIiwibmF2aWdhdG9yIiwic2VydmljZVdvcmtlciIsImNvbnRyb2xsZXIiLCJzdGF0ZSIsInBvc3RNZXNzYWdlIiwiZ2F0c2J5QXBpIiwicmVhY2hOYXZpZ2F0ZSIsInNob3VsZFVwZGF0ZVNjcm9sbCIsInByZXZSb3V0ZXJQcm9wcyIsImhhc2giLCJyZXN1bHRzIiwicm91dGVyUHJvcHMiLCJnZXRTYXZlZFNjcm9sbFBvc2l0aW9uIiwiYXJncyIsIl9zdGF0ZVN0b3JhZ2UiLCJyZWFkIiwia2V5IiwibGVuZ3RoIiwib2xkUGF0aG5hbWUiLCJkZWNvZGVVUkkiLCJzbGljZSIsImluaXQiLCJhY3Rpb24iLCJfX19wdXNoIiwicmVwbGFjZSIsIl9fX25hdmlnYXRlIiwiUm91dGVBbm5vdW5jZXIiLCJwcm9wcyIsImFubm91bmNlbWVudFJlZiIsIlJlYWN0IiwiY29tcG9uZW50RGlkVXBkYXRlIiwicHJldlByb3BzIiwibmV4dFByb3BzIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwicGFnZU5hbWUiLCJkb2N1bWVudCIsInRpdGxlIiwicGFnZUhlYWRpbmdzIiwicXVlcnlTZWxlY3RvckFsbCIsInRleHRDb250ZW50IiwibmV3QW5ub3VuY2VtZW50IiwiY3VycmVudCIsIm9sZEFubm91bmNlbWVudCIsImlubmVyVGV4dCIsInJlbmRlciIsImNvbXBhcmVMb2NhdGlvblByb3BzIiwibmV4dExvY2F0aW9uIiwiUm91dGVVcGRhdGVzIiwiY29tcG9uZW50RGlkTW91bnQiLCJzaG91bGRDb21wb25lbnRVcGRhdGUiLCJjaGlsZHJlbiIsIkVuc3VyZVJlc291cmNlcyIsIndpdGhFcnJvckRldGFpbHMiLCJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMiLCJwcmV2U3RhdGUiLCJsb2FkUmVzb3VyY2VzIiwicmF3UGF0aCIsInNldFN0YXRlIiwibmV4dFN0YXRlIiwiY29tcG9uZW50IiwianNvbiIsIm1hdGNoUGF0aCIsInBhdGgiLCJzaGFsbG93Q29tcGFyZSIsIlByb2RMb2FkZXIiLCJhc3luY1JlcXVpcmVzIiwibWF0Y2hQYXRocyIsInNldExvYWRlciIsInNldEFwaVJ1bm5lciIsIl9fX2VtaXR0ZXIiLCJfX19sb2FkZXIiLCJwdWJsaWNMb2FkZXIiLCJuYXZpZ2F0aW9uSW5pdCIsImFwaVJ1bm5lckFzeW5jIiwiZmlsdGVyIiwiQm9vbGVhbiIsInJlcXVpcmUiLCJSb3V0ZUhhbmRsZXIiLCJiYXNldXJpIiwiYmFzZXBhdGgiLCJEYXRhQ29udGV4dCIsIkdhdHNieVJvb3QiLCJzdGF0aWNRdWVyeVJlc3VsdHMiLCJnZXRTdGF0aWNRdWVyeVJlc3VsdHMiLCJMb2NhdGlvbkhhbmRsZXIiLCJfX0JBU0VfUEFUSF9fIiwic3RyaXBQcmVmaXgiLCJlbmNvZGVVUkkiLCJwYWdlUGF0aCIsImJyb3dzZXJMb2MiLCJmaW5kTWF0Y2hQYXRoIiwibWF0Y2giLCJzZWFyY2giLCJtZXNzYWdlIiwiZXJyb3IiLCJjb25zb2xlIiwiRXJyb3IiLCJTaXRlUm9vdCIsImVsZW1lbnQiLCJyZXN1bHQiLCJwb3AiLCJBcHAiLCJvbkNsaWVudEVudHJ5UmFuUmVmIiwicGVyZm9ybWFuY2UiLCJtYXJrIiwicmVuZGVyZXIiLCJ1bmRlZmluZWQiLCJSZWFjdERPTSIsInJ1blJlbmRlciIsInJvb3RFbGVtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJoeWRyYXRlIiwiZG9jIiwicmVhZHlTdGF0ZSIsImRvY3VtZW50RWxlbWVudCIsImRvU2Nyb2xsIiwiaGFuZGxlciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJhZGRFdmVudExpc3RlbmVyIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNPLEdBQU1BLG9CQUFtQixDQUFHLENBQ2pDQyxFQUFFLG1CQUQrQixDQUVqQ0MsS0FBSyxDQUFFLENBQ0xDLFFBQVEsV0FESCxDQUVMQyxHQUFHLENBQUUsQ0FGQSxDQUdMQyxLQUFLLENBQUUsQ0FIRixDQUlMQyxNQUFNLENBQUUsQ0FKSCxDQUtMQyxPQUFPLENBQUUsQ0FMSixDQU1M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QUFuQyxDQUE0QyxLQUE1QyxFQUVBUixTQUFTLEdBQ1YsQ0FMRCxDQU9BSSxHQUFHLENBQUNNLGdCQUFKLG9CQUF5Q0YsT0FBekMsQ0FBa0QsS0FBbEQsRUFDQWxKLE1BQU0sQ0FBQ29KLGdCQUFQLFFBQWdDRixPQUFoQyxDQUF5QyxLQUF6QyxFQUNELENBQ0YsQ0FsRkQsRUFtRkQsQ0FyTUQiLCJmaWxlIjoiMjg3MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFRoaXMgaXMgZXh0cmFjdGVkIHRvIHNlcGFyYXRlIG1vZHVsZSBiZWNhdXNlIGl0J3Mgc2hhcmVkXG4vLyBiZXR3ZWVuIGJyb3dzZXIgYW5kIFNTUiBjb2RlXG5leHBvcnQgY29uc3QgUm91dGVBbm5vdW5jZXJQcm9wcyA9IHtcbiAgaWQ6IGBnYXRzYnktYW5ub3VuY2VyYCxcbiAgc3R5bGU6IHtcbiAgICBwb3NpdGlvbjogYGFic29sdXRlYCxcbiAgICB0b3A6IDAsXG4gICAgd2lkdGg6IDEsXG4gICAgaGVpZ2h0OiAxLFxuICAgIHBhZGRpbmc6IDAsXG4gICAgb3ZlcmZsb3c6IGBoaWRkZW5gLFxuICAgIGNsaXA6IGByZWN0KDAsIDAsIDAsIDApYCxcbiAgICB3aGl0ZVNwYWNlOiBgbm93cmFwYCxcbiAgICBib3JkZXI6IDAsXG4gIH0sXG4gIFwiYXJpYS1saXZlXCI6IGBhc3NlcnRpdmVgLFxuICBcImFyaWEtYXRvbWljXCI6IGB0cnVlYCxcbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiXG5pbXBvcnQgbG9hZGVyLCB7IFBhZ2VSZXNvdXJjZVN0YXR1cyB9IGZyb20gXCIuL2xvYWRlclwiXG5pbXBvcnQgeyBtYXliZUdldEJyb3dzZXJSZWRpcmVjdCB9IGZyb20gXCIuL3JlZGlyZWN0LXV0aWxzLmpzXCJcbmltcG9ydCB7IGFwaVJ1bm5lciB9IGZyb20gXCIuL2FwaS1ydW5uZXItYnJvd3NlclwiXG5pbXBvcnQgZW1pdHRlciBmcm9tIFwiLi9lbWl0dGVyXCJcbmltcG9ydCB7IFJvdXRlQW5ub3VuY2VyUHJvcHMgfSBmcm9tIFwiLi9yb3V0ZS1hbm5vdW5jZXItcHJvcHNcIlxuaW1wb3J0IHsgbmF2aWdhdGUgYXMgcmVhY2hOYXZpZ2F0ZSB9IGZyb20gXCJAZ2F0c2J5anMvcmVhY2gtcm91dGVyXCJcbmltcG9ydCB7IGdsb2JhbEhpc3RvcnkgfSBmcm9tIFwiQGdhdHNieWpzL3JlYWNoLXJvdXRlci9saWIvaGlzdG9yeVwiXG5pbXBvcnQgeyBwYXJzZVBhdGggfSBmcm9tIFwiZ2F0c2J5LWxpbmtcIlxuXG5mdW5jdGlvbiBtYXliZVJlZGlyZWN0KHBhdGhuYW1lKSB7XG4gIGNvbnN0IHJlZGlyZWN0ID0gbWF5YmVHZXRCcm93c2VyUmVkaXJlY3QocGF0aG5hbWUpXG5cbiAgaWYgKHJlZGlyZWN0ICE9IG51bGwpIHtcbiAgICB3aW5kb3cuX19fcmVwbGFjZShyZWRpcmVjdC50b1BhdGgpXG4gICAgcmV0dXJuIHRydWVcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5jb25zdCBvblByZVJvdXRlVXBkYXRlID0gKGxvY2F0aW9uLCBwcmV2TG9jYXRpb24pID0+IHtcbiAgaWYgKCFtYXliZVJlZGlyZWN0KGxvY2F0aW9uLnBhdGhuYW1lKSkge1xuICAgIGFwaVJ1bm5lcihgb25QcmVSb3V0ZVVwZGF0ZWAsIHsgbG9jYXRpb24sIHByZXZMb2NhdGlvbiB9KVxuICB9XG59XG5cbmNvbnN0IG9uUm91dGVVcGRhdGUgPSAobG9jYXRpb24sIHByZXZMb2NhdGlvbikgPT4ge1xuICBpZiAoIW1heWJlUmVkaXJlY3QobG9jYXRpb24ucGF0aG5hbWUpKSB7XG4gICAgYXBpUnVubmVyKGBvblJvdXRlVXBkYXRlYCwgeyBsb2NhdGlvbiwgcHJldkxvY2F0aW9uIH0pXG4gICAgaWYgKFxuICAgICAgcHJvY2Vzcy5lbnYuR0FUU0JZX0VYUEVSSU1FTlRBTF9RVUVSWV9PTl9ERU1BTkQgJiZcbiAgICAgIHByb2Nlc3MuZW52LkdBVFNCWV9RVUVSWV9PTl9ERU1BTkRfTE9BRElOR19JTkRJQ0FUT1IgPT09IGB0cnVlYFxuICAgICkge1xuICAgICAgZW1pdHRlci5lbWl0KGBvblJvdXRlVXBkYXRlYCwgeyBsb2NhdGlvbiwgcHJldkxvY2F0aW9uIH0pXG4gICAgfVxuICB9XG59XG5cbmNvbnN0IG5hdmlnYXRlID0gKHRvLCBvcHRpb25zID0ge30pID0+IHtcbiAgLy8gU3VwcG9ydCBmb3J3YXJkL2JhY2t3YXJkIG5hdmlnYXRpb24gd2l0aCBudW1iZXJzXG4gIC8vIG5hdmlnYXRlKC0yKSAoanVtcHMgYmFjayAyIGhpc3Rvcnkgc3RlcHMpXG4gIC8vIG5hdmlnYXRlKDIpICAoanVtcHMgZm9yd2FyZCAyIGhpc3Rvcnkgc3RlcHMpXG4gIGlmICh0eXBlb2YgdG8gPT09IGBudW1iZXJgKSB7XG4gICAgZ2xvYmFsSGlzdG9yeS5uYXZpZ2F0ZSh0bylcbiAgICByZXR1cm5cbiAgfVxuXG4gIGxldCB7IHBhdGhuYW1lIH0gPSBwYXJzZVBhdGgodG8pXG4gIGNvbnN0IHJlZGlyZWN0ID0gbWF5YmVHZXRCcm93c2VyUmVkaXJlY3QocGF0aG5hbWUpXG5cbiAgLy8gSWYgd2UncmUgcmVkaXJlY3RpbmcsIGp1c3QgcmVwbGFjZSB0aGUgcGFzc2VkIGluIHBhdGhuYW1lXG4gIC8vIHRvIHRoZSBvbmUgd2Ugd2FudCB0byByZWRpcmVjdCB0by5cbiAgaWYgKHJlZGlyZWN0KSB7XG4gICAgdG8gPSByZWRpcmVjdC50b1BhdGhcbiAgICBwYXRobmFtZSA9IHBhcnNlUGF0aCh0bykucGF0aG5hbWVcbiAgfVxuXG4gIC8vIElmIHdlIGhhZCBhIHNlcnZpY2Ugd29ya2VyIHVwZGF0ZSwgbm8gbWF0dGVyIHRoZSBwYXRoLCByZWxvYWQgd2luZG93IGFuZFxuICAvLyByZXNldCB0aGUgcGF0aG5hbWUgd2hpdGVsaXN0XG4gIGlmICh3aW5kb3cuX19fc3dVcGRhdGVkKSB7XG4gICAgd2luZG93LmxvY2F0aW9uID0gcGF0aG5hbWVcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIFN0YXJ0IGEgdGltZXIgdG8gd2FpdCBmb3IgYSBzZWNvbmQgYmVmb3JlIHRyYW5zaXRpb25pbmcgYW5kIHNob3dpbmcgYVxuICAvLyBsb2FkZXIgaW4gY2FzZSByZXNvdXJjZXMgYXJlbid0IGFyb3VuZCB5ZXQuXG4gIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIGVtaXR0ZXIuZW1pdChgb25EZWxheWVkTG9hZFBhZ2VSZXNvdXJjZXNgLCB7IHBhdGhuYW1lIH0pXG4gICAgYXBpUnVubmVyKGBvblJvdXRlVXBkYXRlRGVsYXllZGAsIHtcbiAgICAgIGxvY2F0aW9uOiB3aW5kb3cubG9jYXRpb24sXG4gICAgfSlcbiAgfSwgMTAwMClcblxuICBsb2FkZXIubG9hZFBhZ2UocGF0aG5hbWUpLnRoZW4ocGFnZVJlc291cmNlcyA9PiB7XG4gICAgLy8gSWYgbm8gcGFnZSByZXNvdXJjZXMsIHRoZW4gcmVmcmVzaCB0aGUgcGFnZVxuICAgIC8vIERvIHRoaXMsIHJhdGhlciB0aGFuIHNpbXBseSBgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpYCwgc28gdGhhdFxuICAgIC8vIHByZXNzaW5nIHRoZSBiYWNrL2ZvcndhcmQgYnV0dG9ucyB3b3JrIC0gb3RoZXJ3aXNlIHdoZW4gcHJlc3NpbmdcbiAgICAvLyBiYWNrLCB0aGUgYnJvd3NlciB3aWxsIGp1c3QgY2hhbmdlIHRoZSBVUkwgYW5kIGV4cGVjdCBKUyB0byBoYW5kbGVcbiAgICAvLyB0aGUgY2hhbmdlLCB3aGljaCB3b24ndCBhbHdheXMgd29yayBzaW5jZSBpdCBtaWdodCBub3QgYmUgYSBHYXRzYnlcbiAgICAvLyBwYWdlLlxuICAgIGlmICghcGFnZVJlc291cmNlcyB8fCBwYWdlUmVzb3VyY2VzLnN0YXR1cyA9PT0gUGFnZVJlc291cmNlU3RhdHVzLkVycm9yKSB7XG4gICAgICB3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUoe30sIGBgLCBsb2NhdGlvbi5ocmVmKVxuICAgICAgd2luZG93LmxvY2F0aW9uID0gcGF0aG5hbWVcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgbG9hZGVkIHBhZ2UgaGFzIGEgZGlmZmVyZW50IGNvbXBpbGF0aW9uIGhhc2ggdG8gdGhlXG4gICAgLy8gd2luZG93LCB0aGVuIGEgcmVidWlsZCBoYXMgb2NjdXJyZWQgb24gdGhlIHNlcnZlci4gUmVsb2FkLlxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gYHByb2R1Y3Rpb25gICYmIHBhZ2VSZXNvdXJjZXMpIHtcbiAgICAgIGlmIChcbiAgICAgICAgcGFnZVJlc291cmNlcy5wYWdlLndlYnBhY2tDb21waWxhdGlvbkhhc2ggIT09XG4gICAgICAgIHdpbmRvdy5fX193ZWJwYWNrQ29tcGlsYXRpb25IYXNoXG4gICAgICApIHtcbiAgICAgICAgLy8gUHVyZ2UgcGx1Z2luLW9mZmxpbmUgY2FjaGVcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGBzZXJ2aWNlV29ya2VyYCBpbiBuYXZpZ2F0b3IgJiZcbiAgICAgICAgICBuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5jb250cm9sbGVyICE9PSBudWxsICYmXG4gICAgICAgICAgbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIuY29udHJvbGxlci5zdGF0ZSA9PT0gYGFjdGl2YXRlZGBcbiAgICAgICAgKSB7XG4gICAgICAgICAgbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIuY29udHJvbGxlci5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgICBnYXRzYnlBcGk6IGBjbGVhclBhdGhSZXNvdXJjZXNgLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cblxuICAgICAgICB3aW5kb3cubG9jYXRpb24gPSBwYXRobmFtZVxuICAgICAgfVxuICAgIH1cbiAgICByZWFjaE5hdmlnYXRlKHRvLCBvcHRpb25zKVxuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpXG4gIH0pXG59XG5cbmZ1bmN0aW9uIHNob3VsZFVwZGF0ZVNjcm9sbChwcmV2Um91dGVyUHJvcHMsIHsgbG9jYXRpb24gfSkge1xuICBjb25zdCB7IHBhdGhuYW1lLCBoYXNoIH0gPSBsb2NhdGlvblxuICBjb25zdCByZXN1bHRzID0gYXBpUnVubmVyKGBzaG91bGRVcGRhdGVTY3JvbGxgLCB7XG4gICAgcHJldlJvdXRlclByb3BzLFxuICAgIC8vIGBwYXRobmFtZWAgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gICAgcGF0aG5hbWUsXG4gICAgcm91dGVyUHJvcHM6IHsgbG9jYXRpb24gfSxcbiAgICBnZXRTYXZlZFNjcm9sbFBvc2l0aW9uOiBhcmdzID0+IFtcbiAgICAgIDAsXG4gICAgICAvLyBGSVhNRSB0aGlzIGlzIGFjdHVhbGx5IGEgYmlnIGNvZGUgc21lbGwsIHdlIHNob3VsZCBmaXggdGhpc1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBiYWJlbC9uby1pbnZhbGlkLXRoaXNcbiAgICAgIHRoaXMuX3N0YXRlU3RvcmFnZS5yZWFkKGFyZ3MsIGFyZ3Mua2V5KSxcbiAgICBdLFxuICB9KVxuICBpZiAocmVzdWx0cy5sZW5ndGggPiAwKSB7XG4gICAgLy8gVXNlIHRoZSBsYXRlc3QgcmVnaXN0ZXJlZCBzaG91bGRVcGRhdGVTY3JvbGwgcmVzdWx0LCB0aGlzIGFsbG93cyB1c2VycyB0byBvdmVycmlkZSBwbHVnaW4ncyBjb25maWd1cmF0aW9uXG4gICAgLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vZ2F0c2J5anMvZ2F0c2J5L2lzc3Vlcy8xMjAzOFxuICAgIHJldHVybiByZXN1bHRzW3Jlc3VsdHMubGVuZ3RoIC0gMV1cbiAgfVxuXG4gIGlmIChwcmV2Um91dGVyUHJvcHMpIHtcbiAgICBjb25zdCB7XG4gICAgICBsb2NhdGlvbjogeyBwYXRobmFtZTogb2xkUGF0aG5hbWUgfSxcbiAgICB9ID0gcHJldlJvdXRlclByb3BzXG4gICAgaWYgKG9sZFBhdGhuYW1lID09PSBwYXRobmFtZSkge1xuICAgICAgLy8gU2Nyb2xsIHRvIGVsZW1lbnQgaWYgaXQgZXhpc3RzLCBpZiBpdCBkb2Vzbid0LCBvciBubyBoYXNoIGlzIHByb3ZpZGVkLFxuICAgICAgLy8gc2Nyb2xsIHRvIHRvcC5cbiAgICAgIHJldHVybiBoYXNoID8gZGVjb2RlVVJJKGhhc2guc2xpY2UoMSkpIDogWzAsIDBdXG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlXG59XG5cbmZ1bmN0aW9uIGluaXQoKSB7XG4gIC8vIFRoZSBcInNjcm9sbC1iZWhhdmlvclwiIHBhY2thZ2UgZXhwZWN0cyB0aGUgXCJhY3Rpb25cIiB0byBiZSBvbiB0aGUgbG9jYXRpb25cbiAgLy8gb2JqZWN0IHNvIGxldCdzIGNvcHkgaXQgb3Zlci5cbiAgZ2xvYmFsSGlzdG9yeS5saXN0ZW4oYXJncyA9PiB7XG4gICAgYXJncy5sb2NhdGlvbi5hY3Rpb24gPSBhcmdzLmFjdGlvblxuICB9KVxuXG4gIHdpbmRvdy5fX19wdXNoID0gdG8gPT4gbmF2aWdhdGUodG8sIHsgcmVwbGFjZTogZmFsc2UgfSlcbiAgd2luZG93Ll9fX3JlcGxhY2UgPSB0byA9PiBuYXZpZ2F0ZSh0bywgeyByZXBsYWNlOiB0cnVlIH0pXG4gIHdpbmRvdy5fX19uYXZpZ2F0ZSA9ICh0bywgb3B0aW9ucykgPT4gbmF2aWdhdGUodG8sIG9wdGlvbnMpXG5cbiAgLy8gQ2hlY2sgZm9yIGluaXRpYWwgcGFnZS1sb2FkIHJlZGlyZWN0XG4gIG1heWJlUmVkaXJlY3Qod2luZG93LmxvY2F0aW9uLnBhdGhuYW1lKVxufVxuXG5jbGFzcyBSb3V0ZUFubm91bmNlciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpXG4gICAgdGhpcy5hbm5vdW5jZW1lbnRSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKVxuICB9XG5cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgbmV4dFByb3BzKSB7XG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgIGxldCBwYWdlTmFtZSA9IGBuZXcgcGFnZSBhdCAke3RoaXMucHJvcHMubG9jYXRpb24ucGF0aG5hbWV9YFxuICAgICAgaWYgKGRvY3VtZW50LnRpdGxlKSB7XG4gICAgICAgIHBhZ2VOYW1lID0gZG9jdW1lbnQudGl0bGVcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBhZ2VIZWFkaW5ncyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYCNnYXRzYnktZm9jdXMtd3JhcHBlciBoMWApXG4gICAgICBpZiAocGFnZUhlYWRpbmdzICYmIHBhZ2VIZWFkaW5ncy5sZW5ndGgpIHtcbiAgICAgICAgcGFnZU5hbWUgPSBwYWdlSGVhZGluZ3NbMF0udGV4dENvbnRlbnRcbiAgICAgIH1cbiAgICAgIGNvbnN0IG5ld0Fubm91bmNlbWVudCA9IGBOYXZpZ2F0ZWQgdG8gJHtwYWdlTmFtZX1gXG4gICAgICBpZiAodGhpcy5hbm5vdW5jZW1lbnRSZWYuY3VycmVudCkge1xuICAgICAgICBjb25zdCBvbGRBbm5vdW5jZW1lbnQgPSB0aGlzLmFubm91bmNlbWVudFJlZi5jdXJyZW50LmlubmVyVGV4dFxuICAgICAgICBpZiAob2xkQW5ub3VuY2VtZW50ICE9PSBuZXdBbm5vdW5jZW1lbnQpIHtcbiAgICAgICAgICB0aGlzLmFubm91bmNlbWVudFJlZi5jdXJyZW50LmlubmVyVGV4dCA9IG5ld0Fubm91bmNlbWVudFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICByZXR1cm4gPGRpdiB7Li4uUm91dGVBbm5vdW5jZXJQcm9wc30gcmVmPXt0aGlzLmFubm91bmNlbWVudFJlZn0+PC9kaXY+XG4gIH1cbn1cblxuY29uc3QgY29tcGFyZUxvY2F0aW9uUHJvcHMgPSAocHJldkxvY2F0aW9uLCBuZXh0TG9jYXRpb24pID0+IHtcbiAgaWYgKHByZXZMb2NhdGlvbi5ocmVmICE9PSBuZXh0TG9jYXRpb24uaHJlZikge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBpZiAocHJldkxvY2F0aW9uPy5zdGF0ZT8ua2V5ICE9PSBuZXh0TG9jYXRpb24/LnN0YXRlPy5rZXkpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8vIEZpcmUgb24oUHJlKVJvdXRlVXBkYXRlIEFQSXNcbmNsYXNzIFJvdXRlVXBkYXRlcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpXG4gICAgb25QcmVSb3V0ZVVwZGF0ZShwcm9wcy5sb2NhdGlvbiwgbnVsbClcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIG9uUm91dGVVcGRhdGUodGhpcy5wcm9wcy5sb2NhdGlvbiwgbnVsbClcbiAgfVxuXG4gIHNob3VsZENvbXBvbmVudFVwZGF0ZShwcmV2UHJvcHMpIHtcbiAgICBpZiAoY29tcGFyZUxvY2F0aW9uUHJvcHMocHJldlByb3BzLmxvY2F0aW9uLCB0aGlzLnByb3BzLmxvY2F0aW9uKSkge1xuICAgICAgb25QcmVSb3V0ZVVwZGF0ZSh0aGlzLnByb3BzLmxvY2F0aW9uLCBwcmV2UHJvcHMubG9jYXRpb24pXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMpIHtcbiAgICBpZiAoY29tcGFyZUxvY2F0aW9uUHJvcHMocHJldlByb3BzLmxvY2F0aW9uLCB0aGlzLnByb3BzLmxvY2F0aW9uKSkge1xuICAgICAgb25Sb3V0ZVVwZGF0ZSh0aGlzLnByb3BzLmxvY2F0aW9uLCBwcmV2UHJvcHMubG9jYXRpb24pXG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIHJldHVybiAoXG4gICAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgIHt0aGlzLnByb3BzLmNoaWxkcmVufVxuICAgICAgICA8Um91dGVBbm5vdW5jZXIgbG9jYXRpb249e2xvY2F0aW9ufSAvPlxuICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICApXG4gIH1cbn1cblxuUm91dGVVcGRhdGVzLnByb3BUeXBlcyA9IHtcbiAgbG9jYXRpb246IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbn1cblxuZXhwb3J0IHsgaW5pdCwgc2hvdWxkVXBkYXRlU2Nyb2xsLCBSb3V0ZVVwZGF0ZXMsIG1heWJlR2V0QnJvd3NlclJlZGlyZWN0IH1cbiIsIi8vIFB1bGxlZCBmcm9tIHJlYWN0LWNvbXBhdFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2RldmVsb3BpdC9wcmVhY3QtY29tcGF0L2Jsb2IvN2M1ZGUwMGU3Yzg1ZTJmZmQwMTFiZjNhZjAyODk5YjYzZjY5OWQzYS9zcmMvaW5kZXguanMjTDM0OVxuZnVuY3Rpb24gc2hhbGxvd0RpZmZlcnMoYSwgYikge1xuICBmb3IgKHZhciBpIGluIGEpIHtcbiAgICBpZiAoIShpIGluIGIpKSByZXR1cm4gdHJ1ZTtcbiAgfWZvciAodmFyIF9pIGluIGIpIHtcbiAgICBpZiAoYVtfaV0gIT09IGJbX2ldKSByZXR1cm4gdHJ1ZTtcbiAgfXJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgKGZ1bmN0aW9uIChpbnN0YW5jZSwgbmV4dFByb3BzLCBuZXh0U3RhdGUpIHtcbiAgcmV0dXJuIHNoYWxsb3dEaWZmZXJzKGluc3RhbmNlLnByb3BzLCBuZXh0UHJvcHMpIHx8IHNoYWxsb3dEaWZmZXJzKGluc3RhbmNlLnN0YXRlLCBuZXh0U3RhdGUpO1xufSk7IiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgbG9hZGVyLCB7IFBhZ2VSZXNvdXJjZVN0YXR1cyB9IGZyb20gXCIuL2xvYWRlclwiXG5pbXBvcnQgc2hhbGxvd0NvbXBhcmUgZnJvbSBcInNoYWxsb3ctY29tcGFyZVwiXG5cbmNsYXNzIEVuc3VyZVJlc291cmNlcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIoKVxuICAgIGNvbnN0IHsgbG9jYXRpb24sIHBhZ2VSZXNvdXJjZXMgfSA9IHByb3BzXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGxvY2F0aW9uOiB7IC4uLmxvY2F0aW9uIH0sXG4gICAgICBwYWdlUmVzb3VyY2VzOlxuICAgICAgICBwYWdlUmVzb3VyY2VzIHx8XG4gICAgICAgIGxvYWRlci5sb2FkUGFnZVN5bmMobG9jYXRpb24ucGF0aG5hbWUsIHsgd2l0aEVycm9yRGV0YWlsczogdHJ1ZSB9KSxcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKHsgbG9jYXRpb24gfSwgcHJldlN0YXRlKSB7XG4gICAgaWYgKHByZXZTdGF0ZS5sb2NhdGlvbi5ocmVmICE9PSBsb2NhdGlvbi5ocmVmKSB7XG4gICAgICBjb25zdCBwYWdlUmVzb3VyY2VzID0gbG9hZGVyLmxvYWRQYWdlU3luYyhsb2NhdGlvbi5wYXRobmFtZSwge1xuICAgICAgICB3aXRoRXJyb3JEZXRhaWxzOiB0cnVlLFxuICAgICAgfSlcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcGFnZVJlc291cmNlcyxcbiAgICAgICAgbG9jYXRpb246IHsgLi4ubG9jYXRpb24gfSxcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbG9jYXRpb246IHsgLi4ubG9jYXRpb24gfSxcbiAgICB9XG4gIH1cblxuICBsb2FkUmVzb3VyY2VzKHJhd1BhdGgpIHtcbiAgICBsb2FkZXIubG9hZFBhZ2UocmF3UGF0aCkudGhlbihwYWdlUmVzb3VyY2VzID0+IHtcbiAgICAgIGlmIChwYWdlUmVzb3VyY2VzICYmIHBhZ2VSZXNvdXJjZXMuc3RhdHVzICE9PSBQYWdlUmVzb3VyY2VTdGF0dXMuRXJyb3IpIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgbG9jYXRpb246IHsgLi4ud2luZG93LmxvY2F0aW9uIH0sXG4gICAgICAgICAgcGFnZVJlc291cmNlcyxcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZSh7fSwgYGAsIGxvY2F0aW9uLmhyZWYpXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbiA9IHJhd1BhdGhcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcywgbmV4dFN0YXRlKSB7XG4gICAgLy8gQWx3YXlzIHJldHVybiBmYWxzZSBpZiB3ZSdyZSBtaXNzaW5nIHJlc291cmNlcy5cbiAgICBpZiAoIW5leHRTdGF0ZS5wYWdlUmVzb3VyY2VzKSB7XG4gICAgICB0aGlzLmxvYWRSZXNvdXJjZXMobmV4dFByb3BzLmxvY2F0aW9uLnBhdGhuYW1lKVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgcHJvY2Vzcy5lbnYuQlVJTERfU1RBR0UgPT09IGBkZXZlbG9wYCAmJlxuICAgICAgbmV4dFN0YXRlLnBhZ2VSZXNvdXJjZXMuc3RhbGVcbiAgICApIHtcbiAgICAgIHRoaXMubG9hZFJlc291cmNlcyhuZXh0UHJvcHMubG9jYXRpb24ucGF0aG5hbWUpXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgY29tcG9uZW50IG9yIGpzb24gaGF2ZSBjaGFuZ2VkLlxuICAgIGlmICh0aGlzLnN0YXRlLnBhZ2VSZXNvdXJjZXMgIT09IG5leHRTdGF0ZS5wYWdlUmVzb3VyY2VzKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICBpZiAoXG4gICAgICB0aGlzLnN0YXRlLnBhZ2VSZXNvdXJjZXMuY29tcG9uZW50ICE9PSBuZXh0U3RhdGUucGFnZVJlc291cmNlcy5jb21wb25lbnRcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc3RhdGUucGFnZVJlc291cmNlcy5qc29uICE9PSBuZXh0U3RhdGUucGFnZVJlc291cmNlcy5qc29uKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICAvLyBDaGVjayBpZiBsb2NhdGlvbiBoYXMgY2hhbmdlZCBvbiBhIHBhZ2UgdXNpbmcgaW50ZXJuYWwgcm91dGluZ1xuICAgIC8vIHZpYSBtYXRjaFBhdGggY29uZmlndXJhdGlvbi5cbiAgICBpZiAoXG4gICAgICB0aGlzLnN0YXRlLmxvY2F0aW9uLmtleSAhPT0gbmV4dFN0YXRlLmxvY2F0aW9uLmtleSAmJlxuICAgICAgbmV4dFN0YXRlLnBhZ2VSZXNvdXJjZXMucGFnZSAmJlxuICAgICAgKG5leHRTdGF0ZS5wYWdlUmVzb3VyY2VzLnBhZ2UubWF0Y2hQYXRoIHx8XG4gICAgICAgIG5leHRTdGF0ZS5wYWdlUmVzb3VyY2VzLnBhZ2UucGF0aClcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIHJldHVybiBzaGFsbG93Q29tcGFyZSh0aGlzLCBuZXh0UHJvcHMsIG5leHRTdGF0ZSlcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBpZiAoXG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gYHByb2R1Y3Rpb25gICYmXG4gICAgICAoIXRoaXMuc3RhdGUucGFnZVJlc291cmNlcyB8fFxuICAgICAgICB0aGlzLnN0YXRlLnBhZ2VSZXNvdXJjZXMuc3RhdHVzID09PSBQYWdlUmVzb3VyY2VTdGF0dXMuRXJyb3IpXG4gICAgKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gYEVuc3VyZVJlc291cmNlcyB3YXMgbm90IGFibGUgdG8gZmluZCByZXNvdXJjZXMgZm9yIHBhdGg6IFwiJHt0aGlzLnByb3BzLmxvY2F0aW9uLnBhdGhuYW1lfVwiXG5UaGlzIHR5cGljYWxseSBtZWFucyB0aGF0IGFuIGlzc3VlIG9jY3VycmVkIGJ1aWxkaW5nIGNvbXBvbmVudHMgZm9yIHRoYXQgcGF0aC5cblJ1biBcXGBnYXRzYnkgY2xlYW5cXGAgdG8gcmVtb3ZlIGFueSBjYWNoZWQgZWxlbWVudHMuYFxuICAgICAgaWYgKHRoaXMuc3RhdGUucGFnZVJlc291cmNlcz8uZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlKVxuICAgICAgICB0aHJvdyB0aGlzLnN0YXRlLnBhZ2VSZXNvdXJjZXMuZXJyb3JcbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY2hpbGRyZW4odGhpcy5zdGF0ZSlcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBFbnN1cmVSZXNvdXJjZXNcbiIsImltcG9ydCB7IGFwaVJ1bm5lciwgYXBpUnVubmVyQXN5bmMgfSBmcm9tIFwiLi9hcGktcnVubmVyLWJyb3dzZXJcIlxuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiXG5pbXBvcnQgeyBSb3V0ZXIsIG5hdmlnYXRlLCBMb2NhdGlvbiwgQmFzZUNvbnRleHQgfSBmcm9tIFwiQGdhdHNieWpzL3JlYWNoLXJvdXRlclwiXG5pbXBvcnQgeyBTY3JvbGxDb250ZXh0IH0gZnJvbSBcImdhdHNieS1yZWFjdC1yb3V0ZXItc2Nyb2xsXCJcbmltcG9ydCB7IFN0YXRpY1F1ZXJ5Q29udGV4dCB9IGZyb20gXCJnYXRzYnlcIlxuaW1wb3J0IHtcbiAgc2hvdWxkVXBkYXRlU2Nyb2xsLFxuICBpbml0IGFzIG5hdmlnYXRpb25Jbml0LFxuICBSb3V0ZVVwZGF0ZXMsXG59IGZyb20gXCIuL25hdmlnYXRpb25cIlxuaW1wb3J0IGVtaXR0ZXIgZnJvbSBcIi4vZW1pdHRlclwiXG5pbXBvcnQgUGFnZVJlbmRlcmVyIGZyb20gXCIuL3BhZ2UtcmVuZGVyZXJcIlxuaW1wb3J0IGFzeW5jUmVxdWlyZXMgZnJvbSBcIiR2aXJ0dWFsL2FzeW5jLXJlcXVpcmVzXCJcbmltcG9ydCB7XG4gIHNldExvYWRlcixcbiAgUHJvZExvYWRlcixcbiAgcHVibGljTG9hZGVyLFxuICBQYWdlUmVzb3VyY2VTdGF0dXMsXG4gIGdldFN0YXRpY1F1ZXJ5UmVzdWx0cyxcbn0gZnJvbSBcIi4vbG9hZGVyXCJcbmltcG9ydCBFbnN1cmVSZXNvdXJjZXMgZnJvbSBcIi4vZW5zdXJlLXJlc291cmNlc1wiXG5pbXBvcnQgc3RyaXBQcmVmaXggZnJvbSBcIi4vc3RyaXAtcHJlZml4XCJcblxuLy8gR2VuZXJhdGVkIGR1cmluZyBib290c3RyYXBcbmltcG9ydCBtYXRjaFBhdGhzIGZyb20gXCIkdmlydHVhbC9tYXRjaC1wYXRocy5qc29uXCJcblxuY29uc3QgbG9hZGVyID0gbmV3IFByb2RMb2FkZXIoYXN5bmNSZXF1aXJlcywgbWF0Y2hQYXRocylcbnNldExvYWRlcihsb2FkZXIpXG5sb2FkZXIuc2V0QXBpUnVubmVyKGFwaVJ1bm5lcilcblxud2luZG93LmFzeW5jUmVxdWlyZXMgPSBhc3luY1JlcXVpcmVzXG53aW5kb3cuX19fZW1pdHRlciA9IGVtaXR0ZXJcbndpbmRvdy5fX19sb2FkZXIgPSBwdWJsaWNMb2FkZXJcblxubmF2aWdhdGlvbkluaXQoKVxuXG5hcGlSdW5uZXJBc3luYyhgb25DbGllbnRFbnRyeWApLnRoZW4oKCkgPT4ge1xuICAvLyBMZXQgcGx1Z2lucyByZWdpc3RlciBhIHNlcnZpY2Ugd29ya2VyLiBUaGUgcGx1Z2luIGp1c3QgbmVlZHNcbiAgLy8gdG8gcmV0dXJuIHRydWUuXG4gIGlmIChhcGlSdW5uZXIoYHJlZ2lzdGVyU2VydmljZVdvcmtlcmApLmZpbHRlcihCb29sZWFuKS5sZW5ndGggPiAwKSB7XG4gICAgcmVxdWlyZShgLi9yZWdpc3Rlci1zZXJ2aWNlLXdvcmtlcmApXG4gIH1cblxuICAvLyBJbiBnYXRzYnkgdjIgaWYgUm91dGVyIGlzIHVzZWQgaW4gcGFnZSB1c2luZyBtYXRjaFBhdGhzXG4gIC8vIHBhdGhzIG5lZWQgdG8gY29udGFpbiBmdWxsIHBhdGguXG4gIC8vIEZvciBleGFtcGxlOlxuICAvLyAgIC0gcGFnZSBoYXZlIGAvYXBwLypgIG1hdGNoUGF0aFxuICAvLyAgIC0gaW5zaWRlIHRlbXBsYXRlIHVzZXIgbmVlZHMgdG8gdXNlIGAvYXBwL3h5emAgYXMgcGF0aFxuICAvLyBSZXNldHRpbmcgYGJhc2VwYXRoYC9gYmFzZXVyaWAga2VlcHMgY3VycmVudCBiZWhhdmlvdXJcbiAgLy8gdG8gbm90IGludHJvZHVjZSBicmVha2luZyBjaGFuZ2UuXG4gIC8vIFJlbW92ZSB0aGlzIGluIHYzXG4gIGNvbnN0IFJvdXRlSGFuZGxlciA9IHByb3BzID0+IChcbiAgICA8QmFzZUNvbnRleHQuUHJvdmlkZXJcbiAgICAgIHZhbHVlPXt7XG4gICAgICAgIGJhc2V1cmk6IGAvYCxcbiAgICAgICAgYmFzZXBhdGg6IGAvYCxcbiAgICAgIH19XG4gICAgPlxuICAgICAgPFBhZ2VSZW5kZXJlciB7Li4ucHJvcHN9IC8+XG4gICAgPC9CYXNlQ29udGV4dC5Qcm92aWRlcj5cbiAgKVxuXG4gIGNvbnN0IERhdGFDb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dCh7fSlcblxuICBjbGFzcyBHYXRzYnlSb290IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgICByZW5kZXIoKSB7XG4gICAgICBjb25zdCB7IGNoaWxkcmVuIH0gPSB0aGlzLnByb3BzXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8TG9jYXRpb24+XG4gICAgICAgICAgeyh7IGxvY2F0aW9uIH0pID0+IChcbiAgICAgICAgICAgIDxFbnN1cmVSZXNvdXJjZXMgbG9jYXRpb249e2xvY2F0aW9ufT5cbiAgICAgICAgICAgICAgeyh7IHBhZ2VSZXNvdXJjZXMsIGxvY2F0aW9uIH0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGF0aWNRdWVyeVJlc3VsdHMgPSBnZXRTdGF0aWNRdWVyeVJlc3VsdHMoKVxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICA8U3RhdGljUXVlcnlDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtzdGF0aWNRdWVyeVJlc3VsdHN9PlxuICAgICAgICAgICAgICAgICAgICA8RGF0YUNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3sgcGFnZVJlc291cmNlcywgbG9jYXRpb24gfX0+XG4gICAgICAgICAgICAgICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICAgICAgICAgICAgICA8L0RhdGFDb250ZXh0LlByb3ZpZGVyPlxuICAgICAgICAgICAgICAgICAgPC9TdGF0aWNRdWVyeUNvbnRleHQuUHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPC9FbnN1cmVSZXNvdXJjZXM+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9Mb2NhdGlvbj5cbiAgICAgIClcbiAgICB9XG4gIH1cblxuICBjbGFzcyBMb2NhdGlvbkhhbmRsZXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICAgIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxEYXRhQ29udGV4dC5Db25zdW1lcj5cbiAgICAgICAgICB7KHsgcGFnZVJlc291cmNlcywgbG9jYXRpb24gfSkgPT4gKFxuICAgICAgICAgICAgPFJvdXRlVXBkYXRlcyBsb2NhdGlvbj17bG9jYXRpb259PlxuICAgICAgICAgICAgICA8U2Nyb2xsQ29udGV4dFxuICAgICAgICAgICAgICAgIGxvY2F0aW9uPXtsb2NhdGlvbn1cbiAgICAgICAgICAgICAgICBzaG91bGRVcGRhdGVTY3JvbGw9e3Nob3VsZFVwZGF0ZVNjcm9sbH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxSb3V0ZXJcbiAgICAgICAgICAgICAgICAgIGJhc2VwYXRoPXtfX0JBU0VfUEFUSF9ffVxuICAgICAgICAgICAgICAgICAgbG9jYXRpb249e2xvY2F0aW9ufVxuICAgICAgICAgICAgICAgICAgaWQ9XCJnYXRzYnktZm9jdXMtd3JhcHBlclwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPFJvdXRlSGFuZGxlclxuICAgICAgICAgICAgICAgICAgICBwYXRoPXtcbiAgICAgICAgICAgICAgICAgICAgICBwYWdlUmVzb3VyY2VzLnBhZ2UucGF0aCA9PT0gYC80MDQuaHRtbGBcbiAgICAgICAgICAgICAgICAgICAgICAgID8gc3RyaXBQcmVmaXgobG9jYXRpb24ucGF0aG5hbWUsIF9fQkFTRV9QQVRIX18pXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGVuY29kZVVSSShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlUmVzb3VyY2VzLnBhZ2UubWF0Y2hQYXRoIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlUmVzb3VyY2VzLnBhZ2UucGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgey4uLnRoaXMucHJvcHN9XG4gICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uPXtsb2NhdGlvbn1cbiAgICAgICAgICAgICAgICAgICAgcGFnZVJlc291cmNlcz17cGFnZVJlc291cmNlc31cbiAgICAgICAgICAgICAgICAgICAgey4uLnBhZ2VSZXNvdXJjZXMuanNvbn1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9Sb3V0ZXI+XG4gICAgICAgICAgICAgIDwvU2Nyb2xsQ29udGV4dD5cbiAgICAgICAgICAgIDwvUm91dGVVcGRhdGVzPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvRGF0YUNvbnRleHQuQ29uc3VtZXI+XG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgY29uc3QgeyBwYWdlUGF0aCwgbG9jYXRpb246IGJyb3dzZXJMb2MgfSA9IHdpbmRvd1xuXG4gIC8vIEV4cGxpY2l0bHkgY2FsbCBuYXZpZ2F0ZSBpZiB0aGUgY2Fub25pY2FsIHBhdGggKHdpbmRvdy5wYWdlUGF0aClcbiAgLy8gaXMgZGlmZmVyZW50IHRvIHRoZSBicm93c2VyIHBhdGggKHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSkuIEJ1dFxuICAvLyBvbmx5IGlmIE5PTkUgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGhvbGQ6XG4gIC8vXG4gIC8vIC0gVGhlIHVybCBtYXRjaGVzIGEgY2xpZW50IHNpZGUgcm91dGUgKHBhZ2UubWF0Y2hQYXRoKVxuICAvLyAtIGl0J3MgYSA0MDQgcGFnZVxuICAvLyAtIGl0J3MgdGhlIG9mZmxpbmUgcGx1Z2luIHNoZWxsICgvb2ZmbGluZS1wbHVnaW4tYXBwLXNoZWxsLWZhbGxiYWNrLylcbiAgaWYgKFxuICAgIHBhZ2VQYXRoICYmXG4gICAgX19CQVNFX1BBVEhfXyArIHBhZ2VQYXRoICE9PSBicm93c2VyTG9jLnBhdGhuYW1lICYmXG4gICAgIShcbiAgICAgIGxvYWRlci5maW5kTWF0Y2hQYXRoKHN0cmlwUHJlZml4KGJyb3dzZXJMb2MucGF0aG5hbWUsIF9fQkFTRV9QQVRIX18pKSB8fFxuICAgICAgcGFnZVBhdGggPT09IGAvNDA0Lmh0bWxgIHx8XG4gICAgICBwYWdlUGF0aC5tYXRjaCgvXlxcLzQwNFxcLz8kLykgfHxcbiAgICAgIHBhZ2VQYXRoLm1hdGNoKC9eXFwvb2ZmbGluZS1wbHVnaW4tYXBwLXNoZWxsLWZhbGxiYWNrXFwvPyQvKVxuICAgIClcbiAgKSB7XG4gICAgbmF2aWdhdGUoX19CQVNFX1BBVEhfXyArIHBhZ2VQYXRoICsgYnJvd3NlckxvYy5zZWFyY2ggKyBicm93c2VyTG9jLmhhc2gsIHtcbiAgICAgIHJlcGxhY2U6IHRydWUsXG4gICAgfSlcbiAgfVxuXG4gIHB1YmxpY0xvYWRlci5sb2FkUGFnZShicm93c2VyTG9jLnBhdGhuYW1lKS50aGVuKHBhZ2UgPT4ge1xuICAgIGlmICghcGFnZSB8fCBwYWdlLnN0YXR1cyA9PT0gUGFnZVJlc291cmNlU3RhdHVzLkVycm9yKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gYHBhZ2UgcmVzb3VyY2VzIGZvciAke2Jyb3dzZXJMb2MucGF0aG5hbWV9IG5vdCBmb3VuZC4gTm90IHJlbmRlcmluZyBSZWFjdGBcblxuICAgICAgLy8gaWYgdGhlIGNodW5rIHRocm93cyBhbiBlcnJvciB3ZSB3YW50IHRvIGNhcHR1cmUgdGhlIHJlYWwgZXJyb3JcbiAgICAgIC8vIFRoaXMgc2hvdWxkIGhlbHAgd2l0aCBodHRwczovL2dpdGh1Yi5jb20vZ2F0c2J5anMvZ2F0c2J5L2lzc3Vlcy8xOTYxOFxuICAgICAgaWYgKHBhZ2UgJiYgcGFnZS5lcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpXG4gICAgICAgIHRocm93IHBhZ2UuZXJyb3JcbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpXG4gICAgfVxuXG4gICAgd2luZG93Ll9fX3dlYnBhY2tDb21waWxhdGlvbkhhc2ggPSBwYWdlLnBhZ2Uud2VicGFja0NvbXBpbGF0aW9uSGFzaFxuXG4gICAgY29uc3QgU2l0ZVJvb3QgPSBhcGlSdW5uZXIoXG4gICAgICBgd3JhcFJvb3RFbGVtZW50YCxcbiAgICAgIHsgZWxlbWVudDogPExvY2F0aW9uSGFuZGxlciAvPiB9LFxuICAgICAgPExvY2F0aW9uSGFuZGxlciAvPixcbiAgICAgICh7IHJlc3VsdCB9KSA9PiB7XG4gICAgICAgIHJldHVybiB7IGVsZW1lbnQ6IHJlc3VsdCB9XG4gICAgICB9XG4gICAgKS5wb3AoKVxuXG4gICAgY29uc3QgQXBwID0gZnVuY3Rpb24gQXBwKCkge1xuICAgICAgY29uc3Qgb25DbGllbnRFbnRyeVJhblJlZiA9IFJlYWN0LnVzZVJlZihmYWxzZSlcblxuICAgICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKCFvbkNsaWVudEVudHJ5UmFuUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICBvbkNsaWVudEVudHJ5UmFuUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICAgICAgcGVyZm9ybWFuY2UubWFyayhgb25Jbml0aWFsQ2xpZW50UmVuZGVyYClcblxuICAgICAgICAgIGFwaVJ1bm5lcihgb25Jbml0aWFsQ2xpZW50UmVuZGVyYClcbiAgICAgICAgfVxuICAgICAgfSwgW10pXG5cbiAgICAgIHJldHVybiA8R2F0c2J5Um9vdD57U2l0ZVJvb3R9PC9HYXRzYnlSb290PlxuICAgIH1cblxuICAgIGNvbnN0IHJlbmRlcmVyID0gYXBpUnVubmVyKFxuICAgICAgYHJlcGxhY2VIeWRyYXRlRnVuY3Rpb25gLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgUmVhY3RET00uY3JlYXRlUm9vdCA/IFJlYWN0RE9NLmNyZWF0ZVJvb3QgOiBSZWFjdERPTS5oeWRyYXRlXG4gICAgKVswXVxuXG4gICAgZnVuY3Rpb24gcnVuUmVuZGVyKCkge1xuICAgICAgY29uc3Qgcm9vdEVsZW1lbnQgPVxuICAgICAgICB0eXBlb2Ygd2luZG93ICE9PSBgdW5kZWZpbmVkYFxuICAgICAgICAgID8gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYF9fX2dhdHNieWApXG4gICAgICAgICAgOiBudWxsXG5cbiAgICAgIGlmIChyZW5kZXJlciA9PT0gUmVhY3RET00uY3JlYXRlUm9vdCkge1xuICAgICAgICByZW5kZXJlcihyb290RWxlbWVudCwge1xuICAgICAgICAgIGh5ZHJhdGU6IHRydWUsXG4gICAgICAgIH0pLnJlbmRlcig8QXBwIC8+KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVuZGVyZXIoPEFwcCAvPiwgcm9vdEVsZW1lbnQpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21hZHJvYmJ5L3plcHRvL2Jsb2IvYjVlZDhkNjA3ZjY3NzI0Nzg4ZWM5ZmY0OTJiZTI5N2Y2NGQ0N2RmYy9zcmMvemVwdG8uanMjTDQzOS1MNDUwXG4gICAgLy8gVE9ETyByZW1vdmUgSUUgMTAgc3VwcG9ydFxuICAgIGNvbnN0IGRvYyA9IGRvY3VtZW50XG4gICAgaWYgKFxuICAgICAgZG9jLnJlYWR5U3RhdGUgPT09IGBjb21wbGV0ZWAgfHxcbiAgICAgIChkb2MucmVhZHlTdGF0ZSAhPT0gYGxvYWRpbmdgICYmICFkb2MuZG9jdW1lbnRFbGVtZW50LmRvU2Nyb2xsKVxuICAgICkge1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJ1blJlbmRlcigpXG4gICAgICB9LCAwKVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBoYW5kbGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lcihgRE9NQ29udGVudExvYWRlZGAsIGhhbmRsZXIsIGZhbHNlKVxuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihgbG9hZGAsIGhhbmRsZXIsIGZhbHNlKVxuXG4gICAgICAgIHJ1blJlbmRlcigpXG4gICAgICB9XG5cbiAgICAgIGRvYy5hZGRFdmVudExpc3RlbmVyKGBET01Db250ZW50TG9hZGVkYCwgaGFuZGxlciwgZmFsc2UpXG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihgbG9hZGAsIGhhbmRsZXIsIGZhbHNlKVxuICAgIH1cbiAgfSlcbn0pXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2871\n')},6947:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7294);\n/* harmony import */ var _loader__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(8741);\n/* harmony import */ var _page_renderer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(804);\nvar ProdPageRenderer=function ProdPageRenderer(_ref){var location=_ref.location;var pageResources=_loader__WEBPACK_IMPORTED_MODULE_1__/* .default.loadPageSync */ .ZP.loadPageSync(location.pathname);if(!pageResources){return null;}return/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_page_renderer__WEBPACK_IMPORTED_MODULE_2__/* .default */ .Z,Object.assign({location:location,pageResources:pageResources},pageResources.json));};/* harmony default export */ __webpack_exports__["default"] = (ProdPageRenderer);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uLy5jYWNoZS9wdWJsaWMtcGFnZS1yZW5kZXJlci1wcm9kLmpzP2FmMzkiXSwibmFtZXMiOlsiUHJvZFBhZ2VSZW5kZXJlciIsImxvY2F0aW9uIiwicGFnZVJlc291cmNlcyIsImxvYWRlciIsInBhdGhuYW1lIiwiUmVhY3QiLCJJbnRlcm5hbFBhZ2VSZW5kZXJlciIsImpzb24iXSwibWFwcGluZ3MiOiI7Ozs7QUFNQSxHQUFNQSxpQkFBZ0IsQ0FBRyxRQUFuQkEsaUJBQW1CLE1BQWtCLElBQWZDLFNBQWUsTUFBZkEsUUFBZSxDQUN6QyxHQUFNQyxjQUFhLENBQUdDLGdGQUFBLENBQW9CRixRQUFRLENBQUNHLFFBQTdCLENBQXRCLENBQ0EsR0FBSSxDQUFDRixhQUFMLENBQW9CLENBQ2xCLE1BQU8sS0FBUCxDQUNELENBQ0QsbUJBQU9HLGdEQUFBLENBQW9CQyw0REFBcEIsZ0JBQ0xMLFFBQVEsQ0FBUkEsUUFESyxDQUVMQyxhQUFhLENBQWJBLGFBRkssRUFHRkEsYUFBYSxDQUFDSyxJQUhaLEVBQVAsQ0FLRCxDQVZELENBa0JBLCtEQUFlUCxnQkFBZiIsImZpbGUiOiI2OTQ3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCJcblxuaW1wb3J0IGxvYWRlciBmcm9tIFwiLi9sb2FkZXJcIlxuaW1wb3J0IEludGVybmFsUGFnZVJlbmRlcmVyIGZyb20gXCIuL3BhZ2UtcmVuZGVyZXJcIlxuXG5jb25zdCBQcm9kUGFnZVJlbmRlcmVyID0gKHsgbG9jYXRpb24gfSkgPT4ge1xuICBjb25zdCBwYWdlUmVzb3VyY2VzID0gbG9hZGVyLmxvYWRQYWdlU3luYyhsb2NhdGlvbi5wYXRobmFtZSlcbiAgaWYgKCFwYWdlUmVzb3VyY2VzKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChJbnRlcm5hbFBhZ2VSZW5kZXJlciwge1xuICAgIGxvY2F0aW9uLFxuICAgIHBhZ2VSZXNvdXJjZXMsXG4gICAgLi4ucGFnZVJlc291cmNlcy5qc29uLFxuICB9KVxufVxuXG5Qcm9kUGFnZVJlbmRlcmVyLnByb3BUeXBlcyA9IHtcbiAgbG9jYXRpb246IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgcGF0aG5hbWU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgfSkuaXNSZXF1aXJlZCxcbn1cblxuZXhwb3J0IGRlZmF1bHQgUHJvZFBhZ2VSZW5kZXJlclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///6947\n')},861:function(module,__unused_webpack_exports,__webpack_require__){eval("var preferDefault=function preferDefault(m){return m&&m.default||m;};if(false){}else if(true){module.exports=preferDefault(__webpack_require__(6947));}else{}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uLy5jYWNoZS9wdWJsaWMtcGFnZS1yZW5kZXJlci5qcz85NzBkIl0sIm5hbWVzIjpbInByZWZlckRlZmF1bHQiLCJtIiwiZGVmYXVsdCIsInByb2Nlc3MiLCJtb2R1bGUiLCJleHBvcnRzIiwicmVxdWlyZSJdLCJtYXBwaW5ncyI6IkFBQUEsR0FBTUEsY0FBYSxDQUFHLFFBQWhCQSxjQUFnQixDQUFBQyxDQUFDLFFBQUtBLEVBQUMsRUFBSUEsQ0FBQyxDQUFDQyxPQUFSLEVBQW9CRCxDQUF4QixFQUF2QixDQUVBLEdBQUlFLEtBQUosQ0FBMkMsRUFBM0MsSUFFTyxJQUFJQSxJQUFKLENBQW9ELENBQ3pEQyxNQUFNLENBQUNDLE9BQVAsQ0FBaUJMLGFBQWEsQ0FBQ00sbUJBQU8sQ0FBQyxLQUFULENBQTlCLENBQ0QsQ0FGTSxJQUVBIiwiZmlsZSI6Ijg2MS5qcyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IHByZWZlckRlZmF1bHQgPSBtID0+IChtICYmIG0uZGVmYXVsdCkgfHwgbVxuXG5pZiAocHJvY2Vzcy5lbnYuQlVJTERfU1RBR0UgPT09IGBkZXZlbG9wYCkge1xuICBtb2R1bGUuZXhwb3J0cyA9IHByZWZlckRlZmF1bHQocmVxdWlyZShgLi9wdWJsaWMtcGFnZS1yZW5kZXJlci1kZXZgKSlcbn0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuQlVJTERfU1RBR0UgPT09IGBidWlsZC1qYXZhc2NyaXB0YCkge1xuICBtb2R1bGUuZXhwb3J0cyA9IHByZWZlckRlZmF1bHQocmVxdWlyZShgLi9wdWJsaWMtcGFnZS1yZW5kZXJlci1wcm9kYCkpXG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9ICgpID0+IG51bGxcbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///861\n")},3639:function(__unused_webpack_module,exports){eval("exports.O=function(Component){return Component;};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uLy5jYWNoZS9yZWFjdC1saWZlY3ljbGVzLWNvbXBhdC5qcz9mNzg1Il0sIm5hbWVzIjpbImV4cG9ydHMiLCJDb21wb25lbnQiXSwibWFwcGluZ3MiOiJBQUFBQSxTQUFBLENBQW1CLFNBQUFDLFNBQVMsUUFBSUEsVUFBSixFQUE1QiIsImZpbGUiOiIzNjM5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0cy5wb2x5ZmlsbCA9IENvbXBvbmVudCA9PiBDb21wb25lbnRcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3639\n")},5166:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n "J": function() { return /* binding */ maybeGetBrowserRedirect; }\n});\n\n;// CONCATENATED MODULE: ./.cache/redirects.json\nvar redirects_namespaceObject = [];\n;// CONCATENATED MODULE: ./.cache/redirect-utils.js\n// Convert to a map for faster lookup in maybeRedirect()\nvar redirectMap=new Map();var redirectIgnoreCaseMap=new Map();redirects_namespaceObject.forEach(function(redirect){if(redirect.ignoreCase){redirectIgnoreCaseMap.set(redirect.fromPath,redirect);}else{redirectMap.set(redirect.fromPath,redirect);}});function maybeGetBrowserRedirect(pathname){var redirect=redirectMap.get(pathname);if(!redirect){redirect=redirectIgnoreCaseMap.get(pathname.toLowerCase());}return redirect;}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uLy5jYWNoZS9yZWRpcmVjdC11dGlscy5qcz84OWI4Il0sIm5hbWVzIjpbInJlZGlyZWN0TWFwIiwiTWFwIiwicmVkaXJlY3RJZ25vcmVDYXNlTWFwIiwicmVkaXJlY3RzIiwicmVkaXJlY3QiLCJpZ25vcmVDYXNlIiwic2V0IiwiZnJvbVBhdGgiLCJtYXliZUdldEJyb3dzZXJSZWRpcmVjdCIsInBhdGhuYW1lIiwiZ2V0IiwidG9Mb3dlckNhc2UiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUVBO0FBRUEsR0FBTUEsWUFBVyxDQUFHLEdBQUlDLElBQUosRUFBcEIsQ0FDQSxHQUFNQyxzQkFBcUIsQ0FBRyxHQUFJRCxJQUFKLEVBQTlCLENBRUFFLGlDQUFBLENBQWtCLFNBQUFDLFFBQVEsQ0FBSSxDQUM1QixHQUFJQSxRQUFRLENBQUNDLFVBQWIsQ0FBeUIsQ0FDdkJILHFCQUFxQixDQUFDSSxHQUF0QixDQUEwQkYsUUFBUSxDQUFDRyxRQUFuQyxDQUE2Q0gsUUFBN0MsRUFDRCxDQUZELElBRU8sQ0FDTEosV0FBVyxDQUFDTSxHQUFaLENBQWdCRixRQUFRLENBQUNHLFFBQXpCLENBQW1DSCxRQUFuQyxFQUNELENBQ0YsQ0FORCxFQVFPLFFBQVNJLHdCQUFULENBQWlDQyxRQUFqQyxDQUEyQyxDQUNoRCxHQUFJTCxTQUFRLENBQUdKLFdBQVcsQ0FBQ1UsR0FBWixDQUFnQkQsUUFBaEIsQ0FBZixDQUNBLEdBQUksQ0FBQ0wsUUFBTCxDQUFlLENBQ2JBLFFBQVEsQ0FBR0YscUJBQXFCLENBQUNRLEdBQXRCLENBQTBCRCxRQUFRLENBQUNFLFdBQVQsRUFBMUIsQ0FBWCxDQUNELENBQ0QsTUFBT1AsU0FBUCxDQUNEIiwiZmlsZSI6IjUxNjYuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcmVkaXJlY3RzIGZyb20gXCIuL3JlZGlyZWN0cy5qc29uXCJcblxuLy8gQ29udmVydCB0byBhIG1hcCBmb3IgZmFzdGVyIGxvb2t1cCBpbiBtYXliZVJlZGlyZWN0KClcblxuY29uc3QgcmVkaXJlY3RNYXAgPSBuZXcgTWFwKClcbmNvbnN0IHJlZGlyZWN0SWdub3JlQ2FzZU1hcCA9IG5ldyBNYXAoKVxuXG5yZWRpcmVjdHMuZm9yRWFjaChyZWRpcmVjdCA9PiB7XG4gIGlmIChyZWRpcmVjdC5pZ25vcmVDYXNlKSB7XG4gICAgcmVkaXJlY3RJZ25vcmVDYXNlTWFwLnNldChyZWRpcmVjdC5mcm9tUGF0aCwgcmVkaXJlY3QpXG4gIH0gZWxzZSB7XG4gICAgcmVkaXJlY3RNYXAuc2V0KHJlZGlyZWN0LmZyb21QYXRoLCByZWRpcmVjdClcbiAgfVxufSlcblxuZXhwb3J0IGZ1bmN0aW9uIG1heWJlR2V0QnJvd3NlclJlZGlyZWN0KHBhdGhuYW1lKSB7XG4gIGxldCByZWRpcmVjdCA9IHJlZGlyZWN0TWFwLmdldChwYXRobmFtZSlcbiAgaWYgKCFyZWRpcmVjdCkge1xuICAgIHJlZGlyZWN0ID0gcmVkaXJlY3RJZ25vcmVDYXNlTWFwLmdldChwYXRobmFtZS50b0xvd2VyQ2FzZSgpKVxuICB9XG4gIHJldHVybiByZWRpcmVjdFxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5166\n')},154:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _api_runner_browser__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7343);\nif(window.location.protocol!=="https:"&&window.location.hostname!=="localhost"){console.error("Service workers can only be used over HTTPS, or on localhost for development");}else if("serviceWorker"in navigator){navigator.serviceWorker.register("/justice40-tool/main"+"/sw.js").then(function(reg){reg.addEventListener("updatefound",function(){(0,_api_runner_browser__WEBPACK_IMPORTED_MODULE_0__/* .apiRunner */ .h)("onServiceWorkerUpdateFound",{serviceWorker:reg});// The updatefound event implies that reg.installing is set; see\n// https://w3c.github.io/ServiceWorker/#service-worker-registration-updatefound-event\nvar installingWorker=reg.installing;console.log("installingWorker",installingWorker);installingWorker.addEventListener("statechange",function(){switch(installingWorker.state){case"installed":if(navigator.serviceWorker.controller){// At this point, the old content will have been purged and the fresh content will\n// have been added to the cache.\n// We set a flag so Gatsby Link knows to refresh the page on next navigation attempt\nwindow.___swUpdated=true;// We call the onServiceWorkerUpdateReady API so users can show update prompts.\n(0,_api_runner_browser__WEBPACK_IMPORTED_MODULE_0__/* .apiRunner */ .h)("onServiceWorkerUpdateReady",{serviceWorker:reg});// If resources failed for the current page, reload.\nif(window.___failedResources){console.log("resources failed, SW updated - reloading");window.location.reload();}}else{// At this point, everything has been precached.\n// It\'s the perfect time to display a "Content is cached for offline use." message.\nconsole.log("Content is now available offline!");// Post to service worker that install is complete.\n// Delay to allow time for the event listener to be added --\n// otherwise fetch is called too soon and resources aren\'t cached.\n(0,_api_runner_browser__WEBPACK_IMPORTED_MODULE_0__/* .apiRunner */ .h)("onServiceWorkerInstalled",{serviceWorker:reg});}break;case"redundant":console.error("The installing service worker became redundant.");(0,_api_runner_browser__WEBPACK_IMPORTED_MODULE_0__/* .apiRunner */ .h)("onServiceWorkerRedundant",{serviceWorker:reg});break;case"activated":(0,_api_runner_browser__WEBPACK_IMPORTED_MODULE_0__/* .apiRunner */ .h)("onServiceWorkerActive",{serviceWorker:reg});break;}});});}).catch(function(e){console.error("Error during service worker registration:",e);});}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uLy5jYWNoZS9yZWdpc3Rlci1zZXJ2aWNlLXdvcmtlci5qcz8zNTI1Il0sIm5hbWVzIjpbIndpbmRvdyIsImxvY2F0aW9uIiwicHJvdG9jb2wiLCJob3N0bmFtZSIsImNvbnNvbGUiLCJlcnJvciIsIm5hdmlnYXRvciIsInNlcnZpY2VXb3JrZXIiLCJyZWdpc3RlciIsIl9fQkFTRV9QQVRIX18iLCJ0aGVuIiwicmVnIiwiYWRkRXZlbnRMaXN0ZW5lciIsImFwaVJ1bm5lciIsImluc3RhbGxpbmdXb3JrZXIiLCJpbnN0YWxsaW5nIiwibG9nIiwic3RhdGUiLCJjb250cm9sbGVyIiwiX19fc3dVcGRhdGVkIiwiX19fZmFpbGVkUmVzb3VyY2VzIiwicmVsb2FkIiwiY2F0Y2giLCJlIl0sIm1hcHBpbmdzIjoiOztBQUVBLEdBQ0VBLE1BQU0sQ0FBQ0MsUUFBUCxDQUFnQkMsUUFBaEIsYUFDQUYsTUFBTSxDQUFDQyxRQUFQLENBQWdCRSxRQUFoQixjQUZGLENBR0UsQ0FDQUMsT0FBTyxDQUFDQyxLQUFSLGlGQUdELENBUEQsSUFPTyxJQUFJLGlCQUFtQkMsVUFBdkIsQ0FBa0MsQ0FDdkNBLFNBQVMsQ0FBQ0MsYUFBVixDQUNHQyxRQURILENBQ2VDLHNCQURmLFdBRUdDLElBRkgsQ0FFUSxTQUFVQyxHQUFWLENBQWUsQ0FDbkJBLEdBQUcsQ0FBQ0MsZ0JBQUosZUFBb0MsVUFBTSxDQUN4Q0MsdUVBQVMsOEJBQStCLENBQUVOLGFBQWEsQ0FBRUksR0FBakIsQ0FBL0IsQ0FBVCxDQUNBO0FBQ0E7QUFDQSxHQUFNRyxpQkFBZ0IsQ0FBR0gsR0FBRyxDQUFDSSxVQUE3QixDQUNBWCxPQUFPLENBQUNZLEdBQVIsb0JBQWdDRixnQkFBaEMsRUFDQUEsZ0JBQWdCLENBQUNGLGdCQUFqQixlQUFpRCxVQUFNLENBQ3JELE9BQVFFLGdCQUFnQixDQUFDRyxLQUF6QixFQUNFLGdCQUNFLEdBQUlYLFNBQVMsQ0FBQ0MsYUFBVixDQUF3QlcsVUFBNUIsQ0FBd0MsQ0FDdEM7QUFDQTtBQUVBO0FBQ0FsQixNQUFNLENBQUNtQixZQUFQLENBQXNCLElBQXRCLENBQ0E7QUFDQU4sdUVBQVMsOEJBQStCLENBQUVOLGFBQWEsQ0FBRUksR0FBakIsQ0FBL0IsQ0FBVCxDQUVBO0FBQ0EsR0FBSVgsTUFBTSxDQUFDb0Isa0JBQVgsQ0FBK0IsQ0FDN0JoQixPQUFPLENBQUNZLEdBQVIsNkNBQ0FoQixNQUFNLENBQUNDLFFBQVAsQ0FBZ0JvQixNQUFoQixHQUNELENBQ0YsQ0FkRCxJQWNPLENBQ0w7QUFDQTtBQUNBakIsT0FBTyxDQUFDWSxHQUFSLHNDQUVBO0FBQ0E7QUFDQTtBQUNBSCx1RUFBUyw0QkFBNkIsQ0FBRU4sYUFBYSxDQUFFSSxHQUFqQixDQUE3QixDQUFULENBQ0QsQ0FDRCxNQUVGLGdCQUNFUCxPQUFPLENBQUNDLEtBQVIsb0RBQ0FRLHVFQUFTLDRCQUE2QixDQUFFTixhQUFhLENBQUVJLEdBQWpCLENBQTdCLENBQVQsQ0FDQSxNQUVGLGdCQUNFRSx1RUFBUyx5QkFBMEIsQ0FBRU4sYUFBYSxDQUFFSSxHQUFqQixDQUExQixDQUFULENBQ0EsTUFuQ0osQ0FxQ0QsQ0F0Q0QsRUF1Q0QsQ0E3Q0QsRUE4Q0QsQ0FqREgsRUFrREdXLEtBbERILENBa0RTLFNBQVVDLENBQVYsQ0FBYSxDQUNsQm5CLE9BQU8sQ0FBQ0MsS0FBUiw2Q0FBMkRrQixDQUEzRCxFQUNELENBcERILEVBcUREIiwiZmlsZSI6IjE1NC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFwaVJ1bm5lciB9IGZyb20gXCIuL2FwaS1ydW5uZXItYnJvd3NlclwiXG5cbmlmIChcbiAgd2luZG93LmxvY2F0aW9uLnByb3RvY29sICE9PSBgaHR0cHM6YCAmJlxuICB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUgIT09IGBsb2NhbGhvc3RgXG4pIHtcbiAgY29uc29sZS5lcnJvcihcbiAgICBgU2VydmljZSB3b3JrZXJzIGNhbiBvbmx5IGJlIHVzZWQgb3ZlciBIVFRQUywgb3Igb24gbG9jYWxob3N0IGZvciBkZXZlbG9wbWVudGBcbiAgKVxufSBlbHNlIGlmIChgc2VydmljZVdvcmtlcmAgaW4gbmF2aWdhdG9yKSB7XG4gIG5hdmlnYXRvci5zZXJ2aWNlV29ya2VyXG4gICAgLnJlZ2lzdGVyKGAke19fQkFTRV9QQVRIX199L3N3LmpzYClcbiAgICAudGhlbihmdW5jdGlvbiAocmVnKSB7XG4gICAgICByZWcuYWRkRXZlbnRMaXN0ZW5lcihgdXBkYXRlZm91bmRgLCAoKSA9PiB7XG4gICAgICAgIGFwaVJ1bm5lcihgb25TZXJ2aWNlV29ya2VyVXBkYXRlRm91bmRgLCB7IHNlcnZpY2VXb3JrZXI6IHJlZyB9KVxuICAgICAgICAvLyBUaGUgdXBkYXRlZm91bmQgZXZlbnQgaW1wbGllcyB0aGF0IHJlZy5pbnN0YWxsaW5nIGlzIHNldDsgc2VlXG4gICAgICAgIC8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNzZXJ2aWNlLXdvcmtlci1yZWdpc3RyYXRpb24tdXBkYXRlZm91bmQtZXZlbnRcbiAgICAgICAgY29uc3QgaW5zdGFsbGluZ1dvcmtlciA9IHJlZy5pbnN0YWxsaW5nXG4gICAgICAgIGNvbnNvbGUubG9nKGBpbnN0YWxsaW5nV29ya2VyYCwgaW5zdGFsbGluZ1dvcmtlcilcbiAgICAgICAgaW5zdGFsbGluZ1dvcmtlci5hZGRFdmVudExpc3RlbmVyKGBzdGF0ZWNoYW5nZWAsICgpID0+IHtcbiAgICAgICAgICBzd2l0Y2ggKGluc3RhbGxpbmdXb3JrZXIuc3RhdGUpIHtcbiAgICAgICAgICAgIGNhc2UgYGluc3RhbGxlZGA6XG4gICAgICAgICAgICAgIGlmIChuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5jb250cm9sbGVyKSB7XG4gICAgICAgICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCwgdGhlIG9sZCBjb250ZW50IHdpbGwgaGF2ZSBiZWVuIHB1cmdlZCBhbmQgdGhlIGZyZXNoIGNvbnRlbnQgd2lsbFxuICAgICAgICAgICAgICAgIC8vIGhhdmUgYmVlbiBhZGRlZCB0byB0aGUgY2FjaGUuXG5cbiAgICAgICAgICAgICAgICAvLyBXZSBzZXQgYSBmbGFnIHNvIEdhdHNieSBMaW5rIGtub3dzIHRvIHJlZnJlc2ggdGhlIHBhZ2Ugb24gbmV4dCBuYXZpZ2F0aW9uIGF0dGVtcHRcbiAgICAgICAgICAgICAgICB3aW5kb3cuX19fc3dVcGRhdGVkID0gdHJ1ZVxuICAgICAgICAgICAgICAgIC8vIFdlIGNhbGwgdGhlIG9uU2VydmljZVdvcmtlclVwZGF0ZVJlYWR5IEFQSSBzbyB1c2VycyBjYW4gc2hvdyB1cGRhdGUgcHJvbXB0cy5cbiAgICAgICAgICAgICAgICBhcGlSdW5uZXIoYG9uU2VydmljZVdvcmtlclVwZGF0ZVJlYWR5YCwgeyBzZXJ2aWNlV29ya2VyOiByZWcgfSlcblxuICAgICAgICAgICAgICAgIC8vIElmIHJlc291cmNlcyBmYWlsZWQgZm9yIHRoZSBjdXJyZW50IHBhZ2UsIHJlbG9hZC5cbiAgICAgICAgICAgICAgICBpZiAod2luZG93Ll9fX2ZhaWxlZFJlc291cmNlcykge1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYHJlc291cmNlcyBmYWlsZWQsIFNXIHVwZGF0ZWQgLSByZWxvYWRpbmdgKVxuICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQsIGV2ZXJ5dGhpbmcgaGFzIGJlZW4gcHJlY2FjaGVkLlxuICAgICAgICAgICAgICAgIC8vIEl0J3MgdGhlIHBlcmZlY3QgdGltZSB0byBkaXNwbGF5IGEgXCJDb250ZW50IGlzIGNhY2hlZCBmb3Igb2ZmbGluZSB1c2UuXCIgbWVzc2FnZS5cbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgQ29udGVudCBpcyBub3cgYXZhaWxhYmxlIG9mZmxpbmUhYClcblxuICAgICAgICAgICAgICAgIC8vIFBvc3QgdG8gc2VydmljZSB3b3JrZXIgdGhhdCBpbnN0YWxsIGlzIGNvbXBsZXRlLlxuICAgICAgICAgICAgICAgIC8vIERlbGF5IHRvIGFsbG93IHRpbWUgZm9yIHRoZSBldmVudCBsaXN0ZW5lciB0byBiZSBhZGRlZCAtLVxuICAgICAgICAgICAgICAgIC8vIG90aGVyd2lzZSBmZXRjaCBpcyBjYWxsZWQgdG9vIHNvb24gYW5kIHJlc291cmNlcyBhcmVuJ3QgY2FjaGVkLlxuICAgICAgICAgICAgICAgIGFwaVJ1bm5lcihgb25TZXJ2aWNlV29ya2VySW5zdGFsbGVkYCwgeyBzZXJ2aWNlV29ya2VyOiByZWcgfSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVha1xuXG4gICAgICAgICAgICBjYXNlIGByZWR1bmRhbnRgOlxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBUaGUgaW5zdGFsbGluZyBzZXJ2aWNlIHdvcmtlciBiZWNhbWUgcmVkdW5kYW50LmApXG4gICAgICAgICAgICAgIGFwaVJ1bm5lcihgb25TZXJ2aWNlV29ya2VyUmVkdW5kYW50YCwgeyBzZXJ2aWNlV29ya2VyOiByZWcgfSlcbiAgICAgICAgICAgICAgYnJlYWtcblxuICAgICAgICAgICAgY2FzZSBgYWN0aXZhdGVkYDpcbiAgICAgICAgICAgICAgYXBpUnVubmVyKGBvblNlcnZpY2VXb3JrZXJBY3RpdmVgLCB7IHNlcnZpY2VXb3JrZXI6IHJlZyB9KVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfSlcbiAgICAuY2F0Y2goZnVuY3Rpb24gKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYEVycm9yIGR1cmluZyBzZXJ2aWNlIHdvcmtlciByZWdpc3RyYXRpb246YCwgZSlcbiAgICB9KVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///154\n')},1578:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": function() { return /* binding */ stripPrefix; }\n/* harmony export */ });\n/**\n * Remove a prefix from a string. Return the input string if the given prefix\n * isn\'t found.\n */function stripPrefix(str,prefix){if(prefix===void 0){prefix="";}if(!prefix){return str;}if(str===prefix){return"/";}if(str.startsWith(prefix+"/")){return str.slice(prefix.length);}return str;}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uLy5jYWNoZS9zdHJpcC1wcmVmaXguanM/NzEyMiJdLCJuYW1lcyI6WyJzdHJpcFByZWZpeCIsInN0ciIsInByZWZpeCIsInN0YXJ0c1dpdGgiLCJzbGljZSIsImxlbmd0aCJdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7QUFDQTtBQUNBO0FBQ0EsR0FFZSxRQUFTQSxZQUFULENBQXFCQyxHQUFyQixDQUEwQkMsTUFBMUIsQ0FBdUMsSUFBYkEsTUFBYSxXQUFiQSxNQUFhLEtBQ3BELEdBQUksQ0FBQ0EsTUFBTCxDQUFhLENBQ1gsTUFBT0QsSUFBUCxDQUNELENBRUQsR0FBSUEsR0FBRyxHQUFLQyxNQUFaLENBQW9CLENBQ2xCLFVBQ0QsQ0FFRCxHQUFJRCxHQUFHLENBQUNFLFVBQUosQ0FBa0JELE1BQWxCLEtBQUosQ0FBa0MsQ0FDaEMsTUFBT0QsSUFBRyxDQUFDRyxLQUFKLENBQVVGLE1BQU0sQ0FBQ0csTUFBakIsQ0FBUCxDQUNELENBRUQsTUFBT0osSUFBUCxDQUNEIiwiZmlsZSI6IjE1NzguanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFJlbW92ZSBhIHByZWZpeCBmcm9tIGEgc3RyaW5nLiBSZXR1cm4gdGhlIGlucHV0IHN0cmluZyBpZiB0aGUgZ2l2ZW4gcHJlZml4XG4gKiBpc24ndCBmb3VuZC5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdHJpcFByZWZpeChzdHIsIHByZWZpeCA9IGBgKSB7XG4gIGlmICghcHJlZml4KSB7XG4gICAgcmV0dXJuIHN0clxuICB9XG5cbiAgaWYgKHN0ciA9PT0gcHJlZml4KSB7XG4gICAgcmV0dXJuIGAvYFxuICB9XG5cbiAgaWYgKHN0ci5zdGFydHNXaXRoKGAke3ByZWZpeH0vYCkpIHtcbiAgICByZXR1cm4gc3RyLnNsaWNlKHByZWZpeC5sZW5ndGgpXG4gIH1cblxuICByZXR1cm4gc3RyXG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1578\n')},9037:function(I,g,C){"use strict";C.r(g)},5526:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("var _interopRequireDefault=__webpack_require__(5318);exports.__esModule=true;exports.wrapPageElement=void 0;var _wrapPage=_interopRequireDefault(__webpack_require__(6604));var wrapPageElement=_wrapPage.default;exports.wrapPageElement=wrapPageElement;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9nYXRzYnktcGx1Z2luLWludGwvZ2F0c2J5LWJyb3dzZXIuanM/ZjRiYSJdLCJuYW1lcyI6WyJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsImV4cG9ydHMiLCJfd3JhcFBhZ2UiLCJ3cmFwUGFnZUVsZW1lbnQiLCJkZWZhdWx0Il0sIm1hcHBpbmdzIjoiQUFFQSxHQUFJQSx1QkFBc0IsQ0FBR0MsbUJBQU8sQ0FBQyxJQUFELENBQXBDLENBRUFDLGtCQUFBLENBQXFCLElBQXJCLENBQ0FBLHVCQUFBLENBQTBCLElBQUssRUFBL0IsQ0FFQSxHQUFJQyxVQUFTLENBQUdILHNCQUFzQixDQUFDQyxtQkFBTyxDQUFDLElBQUQsQ0FBUixDQUF0QyxDQUVBLEdBQUlHLGdCQUFlLENBQUdELFNBQVMsQ0FBQ0UsT0FBaEMsQ0FDQUgsdUJBQUEsQ0FBMEJFLGVBQTFCIiwiZmlsZSI6IjU1MjYuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLndyYXBQYWdlRWxlbWVudCA9IHZvaWQgMDtcblxudmFyIF93cmFwUGFnZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vd3JhcC1wYWdlXCIpKTtcblxudmFyIHdyYXBQYWdlRWxlbWVudCA9IF93cmFwUGFnZS5kZWZhdWx0O1xuZXhwb3J0cy53cmFwUGFnZUVsZW1lbnQgPSB3cmFwUGFnZUVsZW1lbnQ7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5526\n")},8368:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("var _interopRequireDefault=__webpack_require__(5318);exports.__esModule=true;exports.IntlContextConsumer=exports.IntlContextProvider=void 0;var _react=_interopRequireDefault(__webpack_require__(7294));var IntlContext=_react.default.createContext();var IntlContextProvider=IntlContext.Provider;exports.IntlContextProvider=IntlContextProvider;var IntlContextConsumer=IntlContext.Consumer;exports.IntlContextConsumer=IntlContextConsumer;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9nYXRzYnktcGx1Z2luLWludGwvaW50bC1jb250ZXh0LmpzPzlmY2QiXSwibmFtZXMiOlsiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJleHBvcnRzIiwiX3JlYWN0IiwiSW50bENvbnRleHQiLCJkZWZhdWx0IiwiY3JlYXRlQ29udGV4dCIsIkludGxDb250ZXh0UHJvdmlkZXIiLCJQcm92aWRlciIsIkludGxDb250ZXh0Q29uc3VtZXIiLCJDb25zdW1lciJdLCJtYXBwaW5ncyI6IkFBRUEsR0FBSUEsdUJBQXNCLENBQUdDLG1CQUFPLENBQUMsSUFBRCxDQUFwQyxDQUVBQyxrQkFBQSxDQUFxQixJQUFyQixDQUNBQSwyQkFBQSxDQUE4QkEsMkJBQUEsQ0FBOEIsSUFBSyxFQUFqRSxDQUVBLEdBQUlDLE9BQU0sQ0FBR0gsc0JBQXNCLENBQUNDLG1CQUFPLENBQUMsSUFBRCxDQUFSLENBQW5DLENBRUEsR0FBSUcsWUFBVyxDQUFHRCxNQUFNLENBQUNFLE9BQVAsQ0FBZUMsYUFBZixFQUFsQixDQUVBLEdBQUlDLG9CQUFtQixDQUFHSCxXQUFXLENBQUNJLFFBQXRDLENBQ0FOLDJCQUFBLENBQThCSyxtQkFBOUIsQ0FDQSxHQUFJRSxvQkFBbUIsQ0FBR0wsV0FBVyxDQUFDTSxRQUF0QyxDQUNBUiwyQkFBQSxDQUE4Qk8sbUJBQTlCIiwiZmlsZSI6IjgzNjguanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLkludGxDb250ZXh0Q29uc3VtZXIgPSBleHBvcnRzLkludGxDb250ZXh0UHJvdmlkZXIgPSB2b2lkIDA7XG5cbnZhciBfcmVhY3QgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5cbnZhciBJbnRsQ29udGV4dCA9IF9yZWFjdC5kZWZhdWx0LmNyZWF0ZUNvbnRleHQoKTtcblxudmFyIEludGxDb250ZXh0UHJvdmlkZXIgPSBJbnRsQ29udGV4dC5Qcm92aWRlcjtcbmV4cG9ydHMuSW50bENvbnRleHRQcm92aWRlciA9IEludGxDb250ZXh0UHJvdmlkZXI7XG52YXIgSW50bENvbnRleHRDb25zdW1lciA9IEludGxDb250ZXh0LkNvbnN1bWVyO1xuZXhwb3J0cy5JbnRsQ29udGV4dENvbnN1bWVyID0gSW50bENvbnRleHRDb25zdW1lcjsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8368\n")},7060:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval("// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n \"FormattedDate\": function() { return /* binding */ FormattedDate; },\n \"FormattedDateParts\": function() { return /* binding */ FormattedDateParts; },\n \"FormattedDisplayName\": function() { return /* binding */ FormattedDisplayName; },\n \"FormattedHTMLMessage\": function() { return /* reexport */ html_message; },\n \"FormattedList\": function() { return /* binding */ FormattedList; },\n \"FormattedMessage\": function() { return /* reexport */ message; },\n \"FormattedNumber\": function() { return /* binding */ FormattedNumber; },\n \"FormattedNumberParts\": function() { return /* reexport */ FormattedNumberParts; },\n \"FormattedPlural\": function() { return /* reexport */ plural; },\n \"FormattedRelativeTime\": function() { return /* reexport */ relative; },\n \"FormattedTime\": function() { return /* binding */ FormattedTime; },\n \"FormattedTimeParts\": function() { return /* binding */ FormattedTimeParts; },\n \"IntlContext\": function() { return /* reexport */ Context; },\n \"IntlProvider\": function() { return /* reexport */ provider_IntlProvider; },\n \"RawIntlProvider\": function() { return /* reexport */ Provider; },\n \"createIntl\": function() { return /* reexport */ createIntl; },\n \"createIntlCache\": function() { return /* reexport */ createIntlCache; },\n \"defineMessages\": function() { return /* binding */ defineMessages; },\n \"injectIntl\": function() { return /* reexport */ injectIntl; },\n \"useIntl\": function() { return /* reexport */ useIntl; }\n});\n\n// EXTERNAL MODULE: ./node_modules/react/index.js\nvar react = __webpack_require__(7294);\nvar react_namespaceObject = /*#__PURE__*/__webpack_require__.t(react, 2);\n;// CONCATENATED MODULE: ./node_modules/intl-messageformat-parser/lib/types.js\nvar TYPE;\n\n(function (TYPE) {\n /**\n * Raw text\n */\n TYPE[TYPE[\"literal\"] = 0] = \"literal\";\n /**\n * Variable w/o any format, e.g `var` in `this is a {var}`\n */\n\n TYPE[TYPE[\"argument\"] = 1] = \"argument\";\n /**\n * Variable w/ number format\n */\n\n TYPE[TYPE[\"number\"] = 2] = \"number\";\n /**\n * Variable w/ date format\n */\n\n TYPE[TYPE[\"date\"] = 3] = \"date\";\n /**\n * Variable w/ time format\n */\n\n TYPE[TYPE[\"time\"] = 4] = \"time\";\n /**\n * Variable w/ select format\n */\n\n TYPE[TYPE[\"select\"] = 5] = \"select\";\n /**\n * Variable w/ plural format\n */\n\n TYPE[TYPE[\"plural\"] = 6] = \"plural\";\n /**\n * Only possible within plural argument.\n * This is the `#` symbol that will be substituted with the count.\n */\n\n TYPE[TYPE[\"pound\"] = 7] = \"pound\";\n})(TYPE || (TYPE = {}));\n/**\n * Type Guards\n */\n\n\nfunction isLiteralElement(el) {\n return el.type === TYPE.literal;\n}\nfunction isArgumentElement(el) {\n return el.type === TYPE.argument;\n}\nfunction isNumberElement(el) {\n return el.type === TYPE.number;\n}\nfunction isDateElement(el) {\n return el.type === TYPE.date;\n}\nfunction isTimeElement(el) {\n return el.type === TYPE.time;\n}\nfunction isSelectElement(el) {\n return el.type === TYPE.select;\n}\nfunction isPluralElement(el) {\n return el.type === TYPE.plural;\n}\nfunction isPoundElement(el) {\n return el.type === TYPE.pound;\n}\nfunction isNumberSkeleton(el) {\n return !!(el && typeof el === 'object' && el.type === 0\n /* number */\n );\n}\nfunction isDateTimeSkeleton(el) {\n return !!(el && typeof el === 'object' && el.type === 1\n /* dateTime */\n );\n}\nfunction createLiteralElement(value) {\n return {\n type: TYPE.literal,\n value: value\n };\n}\nfunction createNumberElement(value, style) {\n return {\n type: TYPE.number,\n value: value,\n style: style\n };\n}\n;// CONCATENATED MODULE: ./node_modules/intl-messageformat-parser/lib/parser.js\n// tslint:disable:only-arrow-functions\n// tslint:disable:object-literal-shorthand\n// tslint:disable:trailing-comma\n// tslint:disable:object-literal-sort-keys\n// tslint:disable:one-variable-per-declaration\n// tslint:disable:max-line-length\n// tslint:disable:no-consecutive-blank-lines\n// tslint:disable:align\nvar __extends = undefined && undefined.__extends || function () {\n var _extendStatics = function extendStatics(d, b) {\n _extendStatics = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function (d, b) {\n d.__proto__ = b;\n } || function (d, b) {\n for (var p in b) {\n if (b.hasOwnProperty(p)) d[p] = b[p];\n }\n };\n\n return _extendStatics(d, b);\n };\n\n return function (d, b) {\n _extendStatics(d, b);\n\n function __() {\n this.constructor = d;\n }\n\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\n\nvar __assign = undefined && undefined.__assign || function () {\n __assign = Object.assign || function (t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n\n for (var p in s) {\n if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n }\n\n return t;\n };\n\n return __assign.apply(this, arguments);\n}; // Generated by PEG.js v. 0.10.0 (ts-pegjs plugin v. 0.2.6 )\n//\n// https://pegjs.org/ https://github.com/metadevpro/ts-pegjs\n\n\n\n\nvar SyntaxError =\n/** @class */\nfunction (_super) {\n __extends(SyntaxError, _super);\n\n function SyntaxError(message, expected, found, location) {\n var _this = _super.call(this) || this;\n\n _this.message = message;\n _this.expected = expected;\n _this.found = found;\n _this.location = location;\n _this.name = \"SyntaxError\";\n\n if (typeof Error.captureStackTrace === \"function\") {\n Error.captureStackTrace(_this, SyntaxError);\n }\n\n return _this;\n }\n\n SyntaxError.buildMessage = function (expected, found) {\n function hex(ch) {\n return ch.charCodeAt(0).toString(16).toUpperCase();\n }\n\n function literalEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, \"\\\\\\\"\").replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, function (ch) {\n return \"\\\\x0\" + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function (ch) {\n return \"\\\\x\" + hex(ch);\n });\n }\n\n function classEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\\]/g, \"\\\\]\").replace(/\\^/g, \"\\\\^\").replace(/-/g, \"\\\\-\").replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, function (ch) {\n return \"\\\\x0\" + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function (ch) {\n return \"\\\\x\" + hex(ch);\n });\n }\n\n function describeExpectation(expectation) {\n switch (expectation.type) {\n case \"literal\":\n return \"\\\"\" + literalEscape(expectation.text) + \"\\\"\";\n\n case \"class\":\n var escapedParts = expectation.parts.map(function (part) {\n return Array.isArray(part) ? classEscape(part[0]) + \"-\" + classEscape(part[1]) : classEscape(part);\n });\n return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts + \"]\";\n\n case \"any\":\n return \"any character\";\n\n case \"end\":\n return \"end of input\";\n\n case \"other\":\n return expectation.description;\n }\n }\n\n function describeExpected(expected1) {\n var descriptions = expected1.map(describeExpectation);\n var i;\n var j;\n descriptions.sort();\n\n if (descriptions.length > 0) {\n for (i = 1, j = 1; i < descriptions.length; i++) {\n if (descriptions[i - 1] !== descriptions[i]) {\n descriptions[j] = descriptions[i];\n j++;\n }\n }\n\n descriptions.length = j;\n }\n\n switch (descriptions.length) {\n case 1:\n return descriptions[0];\n\n case 2:\n return descriptions[0] + \" or \" + descriptions[1];\n\n default:\n return descriptions.slice(0, -1).join(\", \") + \", or \" + descriptions[descriptions.length - 1];\n }\n }\n\n function describeFound(found1) {\n return found1 ? \"\\\"\" + literalEscape(found1) + \"\\\"\" : \"end of input\";\n }\n\n return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n };\n\n return SyntaxError;\n}(Error);\n\n\n\nfunction peg$parse(input, options) {\n options = options !== undefined ? options : {};\n var peg$FAILED = {};\n var peg$startRuleFunctions = {\n start: peg$parsestart\n };\n var peg$startRuleFunction = peg$parsestart;\n\n var peg$c0 = function peg$c0(parts) {\n return parts.join('');\n };\n\n var peg$c1 = function peg$c1(messageText) {\n return __assign({\n type: TYPE.literal,\n value: messageText\n }, insertLocation());\n };\n\n var peg$c2 = \"#\";\n var peg$c3 = peg$literalExpectation(\"#\", false);\n\n var peg$c4 = function peg$c4() {\n return __assign({\n type: TYPE.pound\n }, insertLocation());\n };\n\n var peg$c5 = peg$otherExpectation(\"argumentElement\");\n var peg$c6 = \"{\";\n var peg$c7 = peg$literalExpectation(\"{\", false);\n var peg$c8 = \"}\";\n var peg$c9 = peg$literalExpectation(\"}\", false);\n\n var peg$c10 = function peg$c10(value) {\n return __assign({\n type: TYPE.argument,\n value: value\n }, insertLocation());\n };\n\n var peg$c11 = peg$otherExpectation(\"numberSkeletonId\");\n var peg$c12 = /^['\\/{}]/;\n var peg$c13 = peg$classExpectation([\"'\", \"/\", \"{\", \"}\"], false, false);\n var peg$c14 = peg$anyExpectation();\n var peg$c15 = peg$otherExpectation(\"numberSkeletonTokenOption\");\n var peg$c16 = \"/\";\n var peg$c17 = peg$literalExpectation(\"/\", false);\n\n var peg$c18 = function peg$c18(option) {\n return option;\n };\n\n var peg$c19 = peg$otherExpectation(\"numberSkeletonToken\");\n\n var peg$c20 = function peg$c20(stem, options) {\n return {\n stem: stem,\n options: options\n };\n };\n\n var peg$c21 = function peg$c21(tokens) {\n return __assign({\n type: 0\n /* number */\n ,\n tokens: tokens\n }, insertLocation());\n };\n\n var peg$c22 = \"::\";\n var peg$c23 = peg$literalExpectation(\"::\", false);\n\n var peg$c24 = function peg$c24(skeleton) {\n return skeleton;\n };\n\n var peg$c25 = function peg$c25() {\n messageCtx.push('numberArgStyle');\n return true;\n };\n\n var peg$c26 = function peg$c26(style) {\n messageCtx.pop();\n return style.replace(/\\s*$/, '');\n };\n\n var peg$c27 = \",\";\n var peg$c28 = peg$literalExpectation(\",\", false);\n var peg$c29 = \"number\";\n var peg$c30 = peg$literalExpectation(\"number\", false);\n\n var peg$c31 = function peg$c31(value, type, style) {\n return __assign({\n type: type === 'number' ? TYPE.number : type === 'date' ? TYPE.date : TYPE.time,\n style: style && style[2],\n value: value\n }, insertLocation());\n };\n\n var peg$c32 = \"'\";\n var peg$c33 = peg$literalExpectation(\"'\", false);\n var peg$c34 = /^[^']/;\n var peg$c35 = peg$classExpectation([\"'\"], true, false);\n var peg$c36 = /^[^a-zA-Z'{}]/;\n var peg$c37 = peg$classExpectation([[\"a\", \"z\"], [\"A\", \"Z\"], \"'\", \"{\", \"}\"], true, false);\n var peg$c38 = /^[a-zA-Z]/;\n var peg$c39 = peg$classExpectation([[\"a\", \"z\"], [\"A\", \"Z\"]], false, false);\n\n var peg$c40 = function peg$c40(pattern) {\n return __assign({\n type: 1\n /* dateTime */\n ,\n pattern: pattern\n }, insertLocation());\n };\n\n var peg$c41 = function peg$c41() {\n messageCtx.push('dateOrTimeArgStyle');\n return true;\n };\n\n var peg$c42 = \"date\";\n var peg$c43 = peg$literalExpectation(\"date\", false);\n var peg$c44 = \"time\";\n var peg$c45 = peg$literalExpectation(\"time\", false);\n var peg$c46 = \"plural\";\n var peg$c47 = peg$literalExpectation(\"plural\", false);\n var peg$c48 = \"selectordinal\";\n var peg$c49 = peg$literalExpectation(\"selectordinal\", false);\n var peg$c50 = \"offset:\";\n var peg$c51 = peg$literalExpectation(\"offset:\", false);\n\n var peg$c52 = function peg$c52(value, pluralType, offset, options) {\n return __assign({\n type: TYPE.plural,\n pluralType: pluralType === 'plural' ? 'cardinal' : 'ordinal',\n value: value,\n offset: offset ? offset[2] : 0,\n options: options.reduce(function (all, _a) {\n var id = _a.id,\n value = _a.value,\n optionLocation = _a.location;\n\n if (id in all) {\n error(\"Duplicate option \\\"\" + id + \"\\\" in plural element: \\\"\" + text() + \"\\\"\", location());\n }\n\n all[id] = {\n value: value,\n location: optionLocation\n };\n return all;\n }, {})\n }, insertLocation());\n };\n\n var peg$c53 = \"select\";\n var peg$c54 = peg$literalExpectation(\"select\", false);\n\n var peg$c55 = function peg$c55(value, options) {\n return __assign({\n type: TYPE.select,\n value: value,\n options: options.reduce(function (all, _a) {\n var id = _a.id,\n value = _a.value,\n optionLocation = _a.location;\n\n if (id in all) {\n error(\"Duplicate option \\\"\" + id + \"\\\" in select element: \\\"\" + text() + \"\\\"\", location());\n }\n\n all[id] = {\n value: value,\n location: optionLocation\n };\n return all;\n }, {})\n }, insertLocation());\n };\n\n var peg$c56 = \"=\";\n var peg$c57 = peg$literalExpectation(\"=\", false);\n\n var peg$c58 = function peg$c58(id) {\n messageCtx.push('select');\n return true;\n };\n\n var peg$c59 = function peg$c59(id, value) {\n messageCtx.pop();\n return __assign({\n id: id,\n value: value\n }, insertLocation());\n };\n\n var peg$c60 = function peg$c60(id) {\n messageCtx.push('plural');\n return true;\n };\n\n var peg$c61 = function peg$c61(id, value) {\n messageCtx.pop();\n return __assign({\n id: id,\n value: value\n }, insertLocation());\n };\n\n var peg$c62 = peg$otherExpectation(\"whitespace\");\n var peg$c63 = /^[\\t-\\r \\x85\\xA0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]/;\n var peg$c64 = peg$classExpectation([[\"\\t\", \"\\r\"], \" \", \"\\x85\", \"\\xA0\", \"\\u1680\", [\"\\u2000\", \"\\u200A\"], \"\\u2028\", \"\\u2029\", \"\\u202F\", \"\\u205F\", \"\\u3000\"], false, false);\n var peg$c65 = peg$otherExpectation(\"syntax pattern\");\n var peg$c66 = /^[!-\\/:-@[-\\^`{-~\\xA1-\\xA7\\xA9\\xAB\\xAC\\xAE\\xB0\\xB1\\xB6\\xBB\\xBF\\xD7\\xF7\\u2010-\\u2027\\u2030-\\u203E\\u2041-\\u2053\\u2055-\\u205E\\u2190-\\u245F\\u2500-\\u2775\\u2794-\\u2BFF\\u2E00-\\u2E7F\\u3001-\\u3003\\u3008-\\u3020\\u3030\\uFD3E\\uFD3F\\uFE45\\uFE46]/;\n var peg$c67 = peg$classExpectation([[\"!\", \"/\"], [\":\", \"@\"], [\"[\", \"^\"], \"`\", [\"{\", \"~\"], [\"\\xA1\", \"\\xA7\"], \"\\xA9\", \"\\xAB\", \"\\xAC\", \"\\xAE\", \"\\xB0\", \"\\xB1\", \"\\xB6\", \"\\xBB\", \"\\xBF\", \"\\xD7\", \"\\xF7\", [\"\\u2010\", \"\\u2027\"], [\"\\u2030\", \"\\u203E\"], [\"\\u2041\", \"\\u2053\"], [\"\\u2055\", \"\\u205E\"], [\"\\u2190\", \"\\u245F\"], [\"\\u2500\", \"\\u2775\"], [\"\\u2794\", \"\\u2BFF\"], [\"\\u2E00\", \"\\u2E7F\"], [\"\\u3001\", \"\\u3003\"], [\"\\u3008\", \"\\u3020\"], \"\\u3030\", \"\\uFD3E\", \"\\uFD3F\", \"\\uFE45\", \"\\uFE46\"], false, false);\n var peg$c68 = peg$otherExpectation(\"optional whitespace\");\n var peg$c69 = peg$otherExpectation(\"number\");\n var peg$c70 = \"-\";\n var peg$c71 = peg$literalExpectation(\"-\", false);\n\n var peg$c72 = function peg$c72(negative, num) {\n return num ? negative ? -num : num : 0;\n };\n\n var peg$c73 = peg$otherExpectation(\"apostrophe\");\n var peg$c74 = peg$otherExpectation(\"double apostrophes\");\n var peg$c75 = \"''\";\n var peg$c76 = peg$literalExpectation(\"''\", false);\n\n var peg$c77 = function peg$c77() {\n return \"'\";\n };\n\n var peg$c78 = function peg$c78(escapedChar, quotedChars) {\n return escapedChar + quotedChars.replace(\"''\", \"'\");\n };\n\n var peg$c79 = function peg$c79(x) {\n return x !== '{' && !(isInPluralOption() && x === '#') && !(isNestedMessageText() && x === '}');\n };\n\n var peg$c80 = \"\\n\";\n var peg$c81 = peg$literalExpectation(\"\\n\", false);\n\n var peg$c82 = function peg$c82(x) {\n return x === '{' || x === '}' || isInPluralOption() && x === '#';\n };\n\n var peg$c83 = peg$otherExpectation(\"argNameOrNumber\");\n var peg$c84 = peg$otherExpectation(\"argNumber\");\n var peg$c85 = \"0\";\n var peg$c86 = peg$literalExpectation(\"0\", false);\n\n var peg$c87 = function peg$c87() {\n return 0;\n };\n\n var peg$c88 = /^[1-9]/;\n var peg$c89 = peg$classExpectation([[\"1\", \"9\"]], false, false);\n var peg$c90 = /^[0-9]/;\n var peg$c91 = peg$classExpectation([[\"0\", \"9\"]], false, false);\n\n var peg$c92 = function peg$c92(digits) {\n return parseInt(digits.join(''), 10);\n };\n\n var peg$c93 = peg$otherExpectation(\"argName\");\n var peg$currPos = 0;\n var peg$savedPos = 0;\n var peg$posDetailsCache = [{\n line: 1,\n column: 1\n }];\n var peg$maxFailPos = 0;\n var peg$maxFailExpected = [];\n var peg$silentFails = 0;\n var peg$result;\n\n if (options.startRule !== undefined) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(\"Can't start parsing from rule \\\"\" + options.startRule + \"\\\".\");\n }\n\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n\n function text() {\n return input.substring(peg$savedPos, peg$currPos);\n }\n\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n\n function expected(description, location1) {\n location1 = location1 !== undefined ? location1 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildStructuredError([peg$otherExpectation(description)], input.substring(peg$savedPos, peg$currPos), location1);\n }\n\n function error(message, location1) {\n location1 = location1 !== undefined ? location1 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildSimpleError(message, location1);\n }\n\n function peg$literalExpectation(text1, ignoreCase) {\n return {\n type: \"literal\",\n text: text1,\n ignoreCase: ignoreCase\n };\n }\n\n function peg$classExpectation(parts, inverted, ignoreCase) {\n return {\n type: \"class\",\n parts: parts,\n inverted: inverted,\n ignoreCase: ignoreCase\n };\n }\n\n function peg$anyExpectation() {\n return {\n type: \"any\"\n };\n }\n\n function peg$endExpectation() {\n return {\n type: \"end\"\n };\n }\n\n function peg$otherExpectation(description) {\n return {\n type: \"other\",\n description: description\n };\n }\n\n function peg$computePosDetails(pos) {\n var details = peg$posDetailsCache[pos];\n var p;\n\n if (details) {\n return details;\n } else {\n p = pos - 1;\n\n while (!peg$posDetailsCache[p]) {\n p--;\n }\n\n details = peg$posDetailsCache[p];\n details = {\n line: details.line,\n column: details.column\n };\n\n while (p < pos) {\n if (input.charCodeAt(p) === 10) {\n details.line++;\n details.column = 1;\n } else {\n details.column++;\n }\n\n p++;\n }\n\n peg$posDetailsCache[pos] = details;\n return details;\n }\n }\n\n function peg$computeLocation(startPos, endPos) {\n var startPosDetails = peg$computePosDetails(startPos);\n var endPosDetails = peg$computePosDetails(endPos);\n return {\n start: {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column\n },\n end: {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column\n }\n };\n }\n\n function peg$fail(expected1) {\n if (peg$currPos < peg$maxFailPos) {\n return;\n }\n\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n\n peg$maxFailExpected.push(expected1);\n }\n\n function peg$buildSimpleError(message, location1) {\n return new SyntaxError(message, [], \"\", location1);\n }\n\n function peg$buildStructuredError(expected1, found, location1) {\n return new SyntaxError(SyntaxError.buildMessage(expected1, found), expected1, found, location1);\n }\n\n function peg$parsestart() {\n var s0;\n s0 = peg$parsemessage();\n return s0;\n }\n\n function peg$parsemessage() {\n var s0, s1;\n s0 = [];\n s1 = peg$parsemessageElement();\n\n while (s1 !== peg$FAILED) {\n s0.push(s1);\n s1 = peg$parsemessageElement();\n }\n\n return s0;\n }\n\n function peg$parsemessageElement() {\n var s0;\n s0 = peg$parseliteralElement();\n\n if (s0 === peg$FAILED) {\n s0 = peg$parseargumentElement();\n\n if (s0 === peg$FAILED) {\n s0 = peg$parsesimpleFormatElement();\n\n if (s0 === peg$FAILED) {\n s0 = peg$parsepluralElement();\n\n if (s0 === peg$FAILED) {\n s0 = peg$parseselectElement();\n\n if (s0 === peg$FAILED) {\n s0 = peg$parsepoundElement();\n }\n }\n }\n }\n }\n\n return s0;\n }\n\n function peg$parsemessageText() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsedoubleApostrophes();\n\n if (s2 === peg$FAILED) {\n s2 = peg$parsequotedString();\n\n if (s2 === peg$FAILED) {\n s2 = peg$parseunquotedString();\n }\n }\n\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsedoubleApostrophes();\n\n if (s2 === peg$FAILED) {\n s2 = peg$parsequotedString();\n\n if (s2 === peg$FAILED) {\n s2 = peg$parseunquotedString();\n }\n }\n }\n } else {\n s1 = peg$FAILED;\n }\n\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c0(s1);\n }\n\n s0 = s1;\n return s0;\n }\n\n function peg$parseliteralElement() {\n var s0, s1;\n s0 = peg$currPos;\n s1 = peg$parsemessageText();\n\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c1(s1);\n }\n\n s0 = s1;\n return s0;\n }\n\n function peg$parsepoundElement() {\n var s0, s1;\n s0 = peg$currPos;\n\n if (input.charCodeAt(peg$currPos) === 35) {\n s1 = peg$c2;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c3);\n }\n }\n\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c4();\n }\n\n s0 = s1;\n return s0;\n }\n\n function peg$parseargumentElement() {\n var s0, s1, s2, s3, s4, s5;\n peg$silentFails++;\n s0 = peg$currPos;\n\n if (input.charCodeAt(peg$currPos) === 123) {\n s1 = peg$c6;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c7);\n }\n }\n\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n\n if (s2 !== peg$FAILED) {\n s3 = peg$parseargNameOrNumber();\n\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n\n if (s4 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s5 = peg$c8;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c9);\n }\n }\n\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c10(s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n peg$silentFails--;\n\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c5);\n }\n }\n\n return s0;\n }\n\n function peg$parsenumberSkeletonId() {\n var s0, s1, s2, s3, s4;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$currPos;\n s3 = peg$currPos;\n peg$silentFails++;\n s4 = peg$parsewhiteSpace();\n\n if (s4 === peg$FAILED) {\n if (peg$c12.test(input.charAt(peg$currPos))) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c13);\n }\n }\n }\n\n peg$silentFails--;\n\n if (s4 === peg$FAILED) {\n s3 = undefined;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n\n if (s3 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c14);\n }\n }\n\n if (s4 !== peg$FAILED) {\n s3 = [s3, s4];\n s2 = s3;\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$currPos;\n s3 = peg$currPos;\n peg$silentFails++;\n s4 = peg$parsewhiteSpace();\n\n if (s4 === peg$FAILED) {\n if (peg$c12.test(input.charAt(peg$currPos))) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c13);\n }\n }\n }\n\n peg$silentFails--;\n\n if (s4 === peg$FAILED) {\n s3 = undefined;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n\n if (s3 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c14);\n }\n }\n\n if (s4 !== peg$FAILED) {\n s3 = [s3, s4];\n s2 = s3;\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n }\n } else {\n s1 = peg$FAILED;\n }\n\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n } else {\n s0 = s1;\n }\n\n peg$silentFails--;\n\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c11);\n }\n }\n\n return s0;\n }\n\n function peg$parsenumberSkeletonTokenOption() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n\n if (input.charCodeAt(peg$currPos) === 47) {\n s1 = peg$c16;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c17);\n }\n }\n\n if (s1 !== peg$FAILED) {\n s2 = peg$parsenumberSkeletonId();\n\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c18(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n peg$silentFails--;\n\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c15);\n }\n }\n\n return s0;\n }\n\n function peg$parsenumberSkeletonToken() {\n var s0, s1, s2, s3, s4;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parse_();\n\n if (s1 !== peg$FAILED) {\n s2 = peg$parsenumberSkeletonId();\n\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parsenumberSkeletonTokenOption();\n\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parsenumberSkeletonTokenOption();\n }\n\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c20(s2, s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n peg$silentFails--;\n\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c19);\n }\n }\n\n return s0;\n }\n\n function peg$parsenumberSkeleton() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsenumberSkeletonToken();\n\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsenumberSkeletonToken();\n }\n } else {\n s1 = peg$FAILED;\n }\n\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c21(s1);\n }\n\n s0 = s1;\n return s0;\n }\n\n function peg$parsenumberArgStyle() {\n var s0, s1, s2;\n s0 = peg$currPos;\n\n if (input.substr(peg$currPos, 2) === peg$c22) {\n s1 = peg$c22;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c23);\n }\n }\n\n if (s1 !== peg$FAILED) {\n s2 = peg$parsenumberSkeleton();\n\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c24(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n peg$savedPos = peg$currPos;\n s1 = peg$c25();\n\n if (s1) {\n s1 = undefined;\n } else {\n s1 = peg$FAILED;\n }\n\n if (s1 !== peg$FAILED) {\n s2 = peg$parsemessageText();\n\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c26(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n\n return s0;\n }\n\n function peg$parsenumberFormatElement() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12;\n s0 = peg$currPos;\n\n if (input.charCodeAt(peg$currPos) === 123) {\n s1 = peg$c6;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c7);\n }\n }\n\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n\n if (s2 !== peg$FAILED) {\n s3 = peg$parseargNameOrNumber();\n\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n\n if (s4 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s5 = peg$c27;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c28);\n }\n }\n\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n\n if (s6 !== peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c29) {\n s7 = peg$c29;\n peg$currPos += 6;\n } else {\n s7 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c30);\n }\n }\n\n if (s7 !== peg$FAILED) {\n s8 = peg$parse_();\n\n if (s8 !== peg$FAILED) {\n s9 = peg$currPos;\n\n if (input.charCodeAt(peg$currPos) === 44) {\n s10 = peg$c27;\n peg$currPos++;\n } else {\n s10 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c28);\n }\n }\n\n if (s10 !== peg$FAILED) {\n s11 = peg$parse_();\n\n if (s11 !== peg$FAILED) {\n s12 = peg$parsenumberArgStyle();\n\n if (s12 !== peg$FAILED) {\n s10 = [s10, s11, s12];\n s9 = s10;\n } else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n } else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n } else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n\n if (s9 === peg$FAILED) {\n s9 = null;\n }\n\n if (s9 !== peg$FAILED) {\n s10 = peg$parse_();\n\n if (s10 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s11 = peg$c8;\n peg$currPos++;\n } else {\n s11 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c9);\n }\n }\n\n if (s11 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c31(s3, s7, s9);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsedateTimeSkeletonLiteral() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n\n if (input.charCodeAt(peg$currPos) === 39) {\n s1 = peg$c32;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c33);\n }\n }\n\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parsedoubleApostrophes();\n\n if (s3 === peg$FAILED) {\n if (peg$c34.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c35);\n }\n }\n }\n\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsedoubleApostrophes();\n\n if (s3 === peg$FAILED) {\n if (peg$c34.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c35);\n }\n }\n }\n }\n } else {\n s2 = peg$FAILED;\n }\n\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 39) {\n s3 = peg$c32;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c33);\n }\n }\n\n if (s3 !== peg$FAILED) {\n s1 = [s1, s2, s3];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n if (s0 === peg$FAILED) {\n s0 = [];\n s1 = peg$parsedoubleApostrophes();\n\n if (s1 === peg$FAILED) {\n if (peg$c36.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c37);\n }\n }\n }\n\n if (s1 !== peg$FAILED) {\n while (s1 !== peg$FAILED) {\n s0.push(s1);\n s1 = peg$parsedoubleApostrophes();\n\n if (s1 === peg$FAILED) {\n if (peg$c36.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c37);\n }\n }\n }\n }\n } else {\n s0 = peg$FAILED;\n }\n }\n\n return s0;\n }\n\n function peg$parsedateTimeSkeletonPattern() {\n var s0, s1;\n s0 = [];\n\n if (peg$c38.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c39);\n }\n }\n\n if (s1 !== peg$FAILED) {\n while (s1 !== peg$FAILED) {\n s0.push(s1);\n\n if (peg$c38.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c39);\n }\n }\n }\n } else {\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsedateTimeSkeleton() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = [];\n s3 = peg$parsedateTimeSkeletonLiteral();\n\n if (s3 === peg$FAILED) {\n s3 = peg$parsedateTimeSkeletonPattern();\n }\n\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsedateTimeSkeletonLiteral();\n\n if (s3 === peg$FAILED) {\n s3 = peg$parsedateTimeSkeletonPattern();\n }\n }\n } else {\n s2 = peg$FAILED;\n }\n\n if (s2 !== peg$FAILED) {\n s1 = input.substring(s1, peg$currPos);\n } else {\n s1 = s2;\n }\n\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c40(s1);\n }\n\n s0 = s1;\n return s0;\n }\n\n function peg$parsedateOrTimeArgStyle() {\n var s0, s1, s2;\n s0 = peg$currPos;\n\n if (input.substr(peg$currPos, 2) === peg$c22) {\n s1 = peg$c22;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c23);\n }\n }\n\n if (s1 !== peg$FAILED) {\n s2 = peg$parsedateTimeSkeleton();\n\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c24(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n peg$savedPos = peg$currPos;\n s1 = peg$c41();\n\n if (s1) {\n s1 = undefined;\n } else {\n s1 = peg$FAILED;\n }\n\n if (s1 !== peg$FAILED) {\n s2 = peg$parsemessageText();\n\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c26(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n\n return s0;\n }\n\n function peg$parsedateOrTimeFormatElement() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12;\n s0 = peg$currPos;\n\n if (input.charCodeAt(peg$currPos) === 123) {\n s1 = peg$c6;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c7);\n }\n }\n\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n\n if (s2 !== peg$FAILED) {\n s3 = peg$parseargNameOrNumber();\n\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n\n if (s4 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s5 = peg$c27;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c28);\n }\n }\n\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n\n if (s6 !== peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c42) {\n s7 = peg$c42;\n peg$currPos += 4;\n } else {\n s7 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c43);\n }\n }\n\n if (s7 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c44) {\n s7 = peg$c44;\n peg$currPos += 4;\n } else {\n s7 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c45);\n }\n }\n }\n\n if (s7 !== peg$FAILED) {\n s8 = peg$parse_();\n\n if (s8 !== peg$FAILED) {\n s9 = peg$currPos;\n\n if (input.charCodeAt(peg$currPos) === 44) {\n s10 = peg$c27;\n peg$currPos++;\n } else {\n s10 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c28);\n }\n }\n\n if (s10 !== peg$FAILED) {\n s11 = peg$parse_();\n\n if (s11 !== peg$FAILED) {\n s12 = peg$parsedateOrTimeArgStyle();\n\n if (s12 !== peg$FAILED) {\n s10 = [s10, s11, s12];\n s9 = s10;\n } else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n } else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n } else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n\n if (s9 === peg$FAILED) {\n s9 = null;\n }\n\n if (s9 !== peg$FAILED) {\n s10 = peg$parse_();\n\n if (s10 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s11 = peg$c8;\n peg$currPos++;\n } else {\n s11 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c9);\n }\n }\n\n if (s11 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c31(s3, s7, s9);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsesimpleFormatElement() {\n var s0;\n s0 = peg$parsenumberFormatElement();\n\n if (s0 === peg$FAILED) {\n s0 = peg$parsedateOrTimeFormatElement();\n }\n\n return s0;\n }\n\n function peg$parsepluralElement() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14, s15;\n s0 = peg$currPos;\n\n if (input.charCodeAt(peg$currPos) === 123) {\n s1 = peg$c6;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c7);\n }\n }\n\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n\n if (s2 !== peg$FAILED) {\n s3 = peg$parseargNameOrNumber();\n\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n\n if (s4 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s5 = peg$c27;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c28);\n }\n }\n\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n\n if (s6 !== peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c46) {\n s7 = peg$c46;\n peg$currPos += 6;\n } else {\n s7 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c47);\n }\n }\n\n if (s7 === peg$FAILED) {\n if (input.substr(peg$currPos, 13) === peg$c48) {\n s7 = peg$c48;\n peg$currPos += 13;\n } else {\n s7 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c49);\n }\n }\n }\n\n if (s7 !== peg$FAILED) {\n s8 = peg$parse_();\n\n if (s8 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s9 = peg$c27;\n peg$currPos++;\n } else {\n s9 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c28);\n }\n }\n\n if (s9 !== peg$FAILED) {\n s10 = peg$parse_();\n\n if (s10 !== peg$FAILED) {\n s11 = peg$currPos;\n\n if (input.substr(peg$currPos, 7) === peg$c50) {\n s12 = peg$c50;\n peg$currPos += 7;\n } else {\n s12 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c51);\n }\n }\n\n if (s12 !== peg$FAILED) {\n s13 = peg$parse_();\n\n if (s13 !== peg$FAILED) {\n s14 = peg$parsenumber();\n\n if (s14 !== peg$FAILED) {\n s12 = [s12, s13, s14];\n s11 = s12;\n } else {\n peg$currPos = s11;\n s11 = peg$FAILED;\n }\n } else {\n peg$currPos = s11;\n s11 = peg$FAILED;\n }\n } else {\n peg$currPos = s11;\n s11 = peg$FAILED;\n }\n\n if (s11 === peg$FAILED) {\n s11 = null;\n }\n\n if (s11 !== peg$FAILED) {\n s12 = peg$parse_();\n\n if (s12 !== peg$FAILED) {\n s13 = [];\n s14 = peg$parsepluralOption();\n\n if (s14 !== peg$FAILED) {\n while (s14 !== peg$FAILED) {\n s13.push(s14);\n s14 = peg$parsepluralOption();\n }\n } else {\n s13 = peg$FAILED;\n }\n\n if (s13 !== peg$FAILED) {\n s14 = peg$parse_();\n\n if (s14 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s15 = peg$c8;\n peg$currPos++;\n } else {\n s15 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c9);\n }\n }\n\n if (s15 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c52(s3, s7, s11, s13);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseselectElement() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13;\n s0 = peg$currPos;\n\n if (input.charCodeAt(peg$currPos) === 123) {\n s1 = peg$c6;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c7);\n }\n }\n\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n\n if (s2 !== peg$FAILED) {\n s3 = peg$parseargNameOrNumber();\n\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n\n if (s4 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s5 = peg$c27;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c28);\n }\n }\n\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n\n if (s6 !== peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c53) {\n s7 = peg$c53;\n peg$currPos += 6;\n } else {\n s7 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c54);\n }\n }\n\n if (s7 !== peg$FAILED) {\n s8 = peg$parse_();\n\n if (s8 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s9 = peg$c27;\n peg$currPos++;\n } else {\n s9 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c28);\n }\n }\n\n if (s9 !== peg$FAILED) {\n s10 = peg$parse_();\n\n if (s10 !== peg$FAILED) {\n s11 = [];\n s12 = peg$parseselectOption();\n\n if (s12 !== peg$FAILED) {\n while (s12 !== peg$FAILED) {\n s11.push(s12);\n s12 = peg$parseselectOption();\n }\n } else {\n s11 = peg$FAILED;\n }\n\n if (s11 !== peg$FAILED) {\n s12 = peg$parse_();\n\n if (s12 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s13 = peg$c8;\n peg$currPos++;\n } else {\n s13 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c9);\n }\n }\n\n if (s13 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c55(s3, s11);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsepluralRuleSelectValue() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$currPos;\n\n if (input.charCodeAt(peg$currPos) === 61) {\n s2 = peg$c56;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c57);\n }\n }\n\n if (s2 !== peg$FAILED) {\n s3 = peg$parsenumber();\n\n if (s3 !== peg$FAILED) {\n s2 = [s2, s3];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n } else {\n s0 = s1;\n }\n\n if (s0 === peg$FAILED) {\n s0 = peg$parseargName();\n }\n\n return s0;\n }\n\n function peg$parseselectOption() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n s0 = peg$currPos;\n s1 = peg$parse_();\n\n if (s1 !== peg$FAILED) {\n s2 = peg$parseargName();\n\n if (s2 !== peg$FAILED) {\n s3 = peg$parse_();\n\n if (s3 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 123) {\n s4 = peg$c6;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c7);\n }\n }\n\n if (s4 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s5 = peg$c58(s2);\n\n if (s5) {\n s5 = undefined;\n } else {\n s5 = peg$FAILED;\n }\n\n if (s5 !== peg$FAILED) {\n s6 = peg$parsemessage();\n\n if (s6 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s7 = peg$c8;\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c9);\n }\n }\n\n if (s7 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c59(s2, s6);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsepluralOption() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n s0 = peg$currPos;\n s1 = peg$parse_();\n\n if (s1 !== peg$FAILED) {\n s2 = peg$parsepluralRuleSelectValue();\n\n if (s2 !== peg$FAILED) {\n s3 = peg$parse_();\n\n if (s3 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 123) {\n s4 = peg$c6;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c7);\n }\n }\n\n if (s4 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s5 = peg$c60(s2);\n\n if (s5) {\n s5 = undefined;\n } else {\n s5 = peg$FAILED;\n }\n\n if (s5 !== peg$FAILED) {\n s6 = peg$parsemessage();\n\n if (s6 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s7 = peg$c8;\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c9);\n }\n }\n\n if (s7 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c61(s2, s6);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsewhiteSpace() {\n var s0, s1;\n peg$silentFails++;\n\n if (peg$c63.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c64);\n }\n }\n\n peg$silentFails--;\n\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c62);\n }\n }\n\n return s0;\n }\n\n function peg$parsepatternSyntax() {\n var s0, s1;\n peg$silentFails++;\n\n if (peg$c66.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c67);\n }\n }\n\n peg$silentFails--;\n\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c65);\n }\n }\n\n return s0;\n }\n\n function peg$parse_() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsewhiteSpace();\n\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsewhiteSpace();\n }\n\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n } else {\n s0 = s1;\n }\n\n peg$silentFails--;\n\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c68);\n }\n }\n\n return s0;\n }\n\n function peg$parsenumber() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n\n if (input.charCodeAt(peg$currPos) === 45) {\n s1 = peg$c70;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c71);\n }\n }\n\n if (s1 === peg$FAILED) {\n s1 = null;\n }\n\n if (s1 !== peg$FAILED) {\n s2 = peg$parseargNumber();\n\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c72(s1, s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n peg$silentFails--;\n\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c69);\n }\n }\n\n return s0;\n }\n\n function peg$parseapostrophe() {\n var s0, s1;\n peg$silentFails++;\n\n if (input.charCodeAt(peg$currPos) === 39) {\n s0 = peg$c32;\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c33);\n }\n }\n\n peg$silentFails--;\n\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c73);\n }\n }\n\n return s0;\n }\n\n function peg$parsedoubleApostrophes() {\n var s0, s1;\n peg$silentFails++;\n s0 = peg$currPos;\n\n if (input.substr(peg$currPos, 2) === peg$c75) {\n s1 = peg$c75;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c76);\n }\n }\n\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c77();\n }\n\n s0 = s1;\n peg$silentFails--;\n\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c74);\n }\n }\n\n return s0;\n }\n\n function peg$parsequotedString() {\n var s0, s1, s2, s3, s4, s5;\n s0 = peg$currPos;\n\n if (input.charCodeAt(peg$currPos) === 39) {\n s1 = peg$c32;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c33);\n }\n }\n\n if (s1 !== peg$FAILED) {\n s2 = peg$parseescapedChar();\n\n if (s2 !== peg$FAILED) {\n s3 = peg$currPos;\n s4 = [];\n\n if (input.substr(peg$currPos, 2) === peg$c75) {\n s5 = peg$c75;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c76);\n }\n }\n\n if (s5 === peg$FAILED) {\n if (peg$c34.test(input.charAt(peg$currPos))) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c35);\n }\n }\n }\n\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n\n if (input.substr(peg$currPos, 2) === peg$c75) {\n s5 = peg$c75;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c76);\n }\n }\n\n if (s5 === peg$FAILED) {\n if (peg$c34.test(input.charAt(peg$currPos))) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c35);\n }\n }\n }\n }\n\n if (s4 !== peg$FAILED) {\n s3 = input.substring(s3, peg$currPos);\n } else {\n s3 = s4;\n }\n\n if (s3 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 39) {\n s4 = peg$c32;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c33);\n }\n }\n\n if (s4 === peg$FAILED) {\n s4 = null;\n }\n\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c78(s2, s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseunquotedString() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$currPos;\n\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c14);\n }\n }\n\n if (s2 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s3 = peg$c79(s2);\n\n if (s3) {\n s3 = undefined;\n } else {\n s3 = peg$FAILED;\n }\n\n if (s3 !== peg$FAILED) {\n s2 = [s2, s3];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n\n if (s1 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 10) {\n s1 = peg$c80;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c81);\n }\n }\n }\n\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n } else {\n s0 = s1;\n }\n\n return s0;\n }\n\n function peg$parseescapedChar() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$currPos;\n\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c14);\n }\n }\n\n if (s2 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s3 = peg$c82(s2);\n\n if (s3) {\n s3 = undefined;\n } else {\n s3 = peg$FAILED;\n }\n\n if (s3 !== peg$FAILED) {\n s2 = [s2, s3];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n } else {\n s0 = s1;\n }\n\n return s0;\n }\n\n function peg$parseargNameOrNumber() {\n var s0, s1;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parseargNumber();\n\n if (s1 === peg$FAILED) {\n s1 = peg$parseargName();\n }\n\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n } else {\n s0 = s1;\n }\n\n peg$silentFails--;\n\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c83);\n }\n }\n\n return s0;\n }\n\n function peg$parseargNumber() {\n var s0, s1, s2, s3, s4;\n peg$silentFails++;\n s0 = peg$currPos;\n\n if (input.charCodeAt(peg$currPos) === 48) {\n s1 = peg$c85;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c86);\n }\n }\n\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c87();\n }\n\n s0 = s1;\n\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$currPos;\n\n if (peg$c88.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c89);\n }\n }\n\n if (s2 !== peg$FAILED) {\n s3 = [];\n\n if (peg$c90.test(input.charAt(peg$currPos))) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c91);\n }\n }\n\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n\n if (peg$c90.test(input.charAt(peg$currPos))) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c91);\n }\n }\n }\n\n if (s3 !== peg$FAILED) {\n s2 = [s2, s3];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c92(s1);\n }\n\n s0 = s1;\n }\n\n peg$silentFails--;\n\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c84);\n }\n }\n\n return s0;\n }\n\n function peg$parseargName() {\n var s0, s1, s2, s3, s4;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$currPos;\n s3 = peg$currPos;\n peg$silentFails++;\n s4 = peg$parsewhiteSpace();\n\n if (s4 === peg$FAILED) {\n s4 = peg$parsepatternSyntax();\n }\n\n peg$silentFails--;\n\n if (s4 === peg$FAILED) {\n s3 = undefined;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n\n if (s3 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c14);\n }\n }\n\n if (s4 !== peg$FAILED) {\n s3 = [s3, s4];\n s2 = s3;\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$currPos;\n s3 = peg$currPos;\n peg$silentFails++;\n s4 = peg$parsewhiteSpace();\n\n if (s4 === peg$FAILED) {\n s4 = peg$parsepatternSyntax();\n }\n\n peg$silentFails--;\n\n if (s4 === peg$FAILED) {\n s3 = undefined;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n\n if (s3 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c14);\n }\n }\n\n if (s4 !== peg$FAILED) {\n s3 = [s3, s4];\n s2 = s3;\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n }\n } else {\n s1 = peg$FAILED;\n }\n\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n } else {\n s0 = s1;\n }\n\n peg$silentFails--;\n\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c93);\n }\n }\n\n return s0;\n }\n\n var messageCtx = ['root'];\n\n function isNestedMessageText() {\n return messageCtx.length > 1;\n }\n\n function isInPluralOption() {\n return messageCtx[messageCtx.length - 1] === 'plural';\n }\n\n function insertLocation() {\n return options && options.captureLocation ? {\n location: location()\n } : {};\n }\n\n peg$result = peg$startRuleFunction();\n\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail(peg$endExpectation());\n }\n\n throw peg$buildStructuredError(peg$maxFailExpected, peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos));\n }\n}\n\nvar pegParse = peg$parse;\n;// CONCATENATED MODULE: ./node_modules/intl-messageformat-parser/lib/normalize.js\nvar __spreadArrays = undefined && undefined.__spreadArrays || function () {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) {\n s += arguments[i].length;\n }\n\n for (var r = Array(s), k = 0, i = 0; i < il; i++) {\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) {\n r[k] = a[j];\n }\n }\n\n return r;\n};\n\n\n\nvar PLURAL_HASHTAG_REGEX = /(^|[^\\\\])#/g;\n/**\n * Whether to convert `#` in plural rule options\n * to `{var, number}`\n * @param el AST Element\n * @param pluralStack current plural stack\n */\n\nfunction normalizeHashtagInPlural(els) {\n els.forEach(function (el) {\n // If we're encountering a plural el\n if (!isPluralElement(el) && !isSelectElement(el)) {\n return;\n } // Go down the options and search for # in any literal element\n\n\n Object.keys(el.options).forEach(function (id) {\n var _a;\n\n var opt = el.options[id]; // If we got a match, we have to split this\n // and inject a NumberElement in the middle\n\n var matchingLiteralElIndex = -1;\n var literalEl = undefined;\n\n for (var i = 0; i < opt.value.length; i++) {\n var el_1 = opt.value[i];\n\n if (isLiteralElement(el_1) && PLURAL_HASHTAG_REGEX.test(el_1.value)) {\n matchingLiteralElIndex = i;\n literalEl = el_1;\n break;\n }\n }\n\n if (literalEl) {\n var newValue = literalEl.value.replace(PLURAL_HASHTAG_REGEX, \"$1{\" + el.value + \", number}\");\n var newEls = pegParse(newValue);\n\n (_a = opt.value).splice.apply(_a, __spreadArrays([matchingLiteralElIndex, 1], newEls));\n }\n\n normalizeHashtagInPlural(opt.value);\n });\n });\n}\n;// CONCATENATED MODULE: ./node_modules/intl-messageformat-parser/lib/index.js\n\n\n\n\n\nfunction parse(input, opts) {\n var els = pegParse(input, opts);\n\n if (!opts || opts.normalizeHashtagInPlural !== false) {\n normalizeHashtagInPlural(els);\n }\n\n return els;\n}\n;// CONCATENATED MODULE: ./node_modules/intl-format-cache/lib/index.js\n/*\nCopyright (c) 2014, Yahoo! Inc. All rights reserved.\nCopyrights licensed under the New BSD License.\nSee the accompanying LICENSE file for terms.\n*/\nvar lib_spreadArrays = undefined && undefined.__spreadArrays || function () {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) {\n s += arguments[i].length;\n }\n\n for (var r = Array(s), k = 0, i = 0; i < il; i++) {\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) {\n r[k] = a[j];\n }\n }\n\n return r;\n}; // -- Utilities ----------------------------------------------------------------\n\n\nfunction getCacheId(inputs) {\n return JSON.stringify(inputs.map(function (input) {\n return input && typeof input === 'object' ? orderedProps(input) : input;\n }));\n}\n\nfunction orderedProps(obj) {\n return Object.keys(obj).sort().map(function (k) {\n var _a;\n\n return _a = {}, _a[k] = obj[k], _a;\n });\n}\n\nvar memoizeFormatConstructor = function memoizeFormatConstructor(FormatConstructor, cache) {\n if (cache === void 0) {\n cache = {};\n }\n\n return function () {\n var _a;\n\n var args = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n\n var cacheId = getCacheId(args);\n var format = cacheId && cache[cacheId];\n\n if (!format) {\n format = new ((_a = FormatConstructor).bind.apply(_a, lib_spreadArrays([void 0], args)))();\n\n if (cacheId) {\n cache[cacheId] = format;\n }\n }\n\n return format;\n };\n};\n\n/* harmony default export */ var lib = (memoizeFormatConstructor);\n;// CONCATENATED MODULE: ./node_modules/intl-messageformat-parser/lib/skeleton.js\nvar skeleton_assign = undefined && undefined.__assign || function () {\n skeleton_assign = Object.assign || function (t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n\n for (var p in s) {\n if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n }\n\n return t;\n };\n\n return skeleton_assign.apply(this, arguments);\n};\n/**\n * https://unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * Credit: https://github.com/caridy/intl-datetimeformat-pattern/blob/master/index.js\n * with some tweaks\n */\n\n\nvar DATE_TIME_REGEX = /(?:[Eec]{1,6}|G{1,5}|[Qq]{1,5}|(?:[yYur]+|U{1,5})|[ML]{1,5}|d{1,2}|D{1,3}|F{1}|[abB]{1,5}|[hkHK]{1,2}|w{1,2}|W{1}|m{1,2}|s{1,2}|[zZOvVxX]{1,4})(?=([^']*'[^']*')*[^']*$)/g;\n/**\n * Parse Date time skeleton into Intl.DateTimeFormatOptions\n * Ref: https://unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * @public\n * @param skeleton skeleton string\n */\n\nfunction parseDateTimeSkeleton(skeleton) {\n var result = {};\n skeleton.replace(DATE_TIME_REGEX, function (match) {\n var len = match.length;\n\n switch (match[0]) {\n // Era\n case 'G':\n result.era = len === 4 ? 'long' : len === 5 ? 'narrow' : 'short';\n break;\n // Year\n\n case 'y':\n result.year = len === 2 ? '2-digit' : 'numeric';\n break;\n\n case 'Y':\n case 'u':\n case 'U':\n case 'r':\n throw new RangeError('`Y/u/U/r` (year) patterns are not supported, use `y` instead');\n // Quarter\n\n case 'q':\n case 'Q':\n throw new RangeError('`q/Q` (quarter) patterns are not supported');\n // Month\n\n case 'M':\n case 'L':\n result.month = ['numeric', '2-digit', 'short', 'long', 'narrow'][len - 1];\n break;\n // Week\n\n case 'w':\n case 'W':\n throw new RangeError('`w/W` (week) patterns are not supported');\n\n case 'd':\n result.day = ['numeric', '2-digit'][len - 1];\n break;\n\n case 'D':\n case 'F':\n case 'g':\n throw new RangeError('`D/F/g` (day) patterns are not supported, use `d` instead');\n // Weekday\n\n case 'E':\n result.weekday = len === 4 ? 'short' : len === 5 ? 'narrow' : 'short';\n break;\n\n case 'e':\n if (len < 4) {\n throw new RangeError('`e..eee` (weekday) patterns are not supported');\n }\n\n result.weekday = ['short', 'long', 'narrow', 'short'][len - 4];\n break;\n\n case 'c':\n if (len < 4) {\n throw new RangeError('`c..ccc` (weekday) patterns are not supported');\n }\n\n result.weekday = ['short', 'long', 'narrow', 'short'][len - 4];\n break;\n // Period\n\n case 'a':\n // AM, PM\n result.hour12 = true;\n break;\n\n case 'b': // am, pm, noon, midnight\n\n case 'B':\n // flexible day periods\n throw new RangeError('`b/B` (period) patterns are not supported, use `a` instead');\n // Hour\n\n case 'h':\n result.hourCycle = 'h12';\n result.hour = ['numeric', '2-digit'][len - 1];\n break;\n\n case 'H':\n result.hourCycle = 'h23';\n result.hour = ['numeric', '2-digit'][len - 1];\n break;\n\n case 'K':\n result.hourCycle = 'h11';\n result.hour = ['numeric', '2-digit'][len - 1];\n break;\n\n case 'k':\n result.hourCycle = 'h24';\n result.hour = ['numeric', '2-digit'][len - 1];\n break;\n\n case 'j':\n case 'J':\n case 'C':\n throw new RangeError('`j/J/C` (hour) patterns are not supported, use `h/H/K/k` instead');\n // Minute\n\n case 'm':\n result.minute = ['numeric', '2-digit'][len - 1];\n break;\n // Second\n\n case 's':\n result.second = ['numeric', '2-digit'][len - 1];\n break;\n\n case 'S':\n case 'A':\n throw new RangeError('`S/A` (second) pattenrs are not supported, use `s` instead');\n // Zone\n\n case 'z':\n // 1..3, 4: specific non-location format\n result.timeZoneName = len < 4 ? 'short' : 'long';\n break;\n\n case 'Z': // 1..3, 4, 5: The ISO8601 varios formats\n\n case 'O': // 1, 4: miliseconds in day short, long\n\n case 'v': // 1, 4: generic non-location format\n\n case 'V': // 1, 2, 3, 4: time zone ID or city\n\n case 'X': // 1, 2, 3, 4: The ISO8601 varios formats\n\n case 'x':\n // 1, 2, 3, 4: The ISO8601 varios formats\n throw new RangeError('`Z/O/v/V/X/x` (timeZone) pattenrs are not supported, use `z` instead');\n }\n\n return '';\n });\n return result;\n}\n\nfunction icuUnitToEcma(unit) {\n return unit.replace(/^(.*?)-/, '');\n}\n\nvar FRACTION_PRECISION_REGEX = /^\\.(?:(0+)(\\+|#+)?)?$/g;\nvar SIGNIFICANT_PRECISION_REGEX = /^(@+)?(\\+|#+)?$/g;\n\nfunction parseSignificantPrecision(str) {\n var result = {};\n str.replace(SIGNIFICANT_PRECISION_REGEX, function (_, g1, g2) {\n // @@@ case\n if (typeof g2 !== 'string') {\n result.minimumSignificantDigits = g1.length;\n result.maximumSignificantDigits = g1.length;\n } // @@@+ case\n else if (g2 === '+') {\n result.minimumSignificantDigits = g1.length;\n } // .### case\n else if (g1[0] === '#') {\n result.maximumSignificantDigits = g1.length;\n } // .@@## or .@@@ case\n else {\n result.minimumSignificantDigits = g1.length;\n result.maximumSignificantDigits = g1.length + (typeof g2 === 'string' ? g2.length : 0);\n }\n\n return '';\n });\n return result;\n}\n\nfunction parseSign(str) {\n switch (str) {\n case 'sign-auto':\n return {\n signDisplay: 'auto'\n };\n\n case 'sign-accounting':\n return {\n currencySign: 'accounting'\n };\n\n case 'sign-always':\n return {\n signDisplay: 'always'\n };\n\n case 'sign-accounting-always':\n return {\n signDisplay: 'always',\n currencySign: 'accounting'\n };\n\n case 'sign-except-zero':\n return {\n signDisplay: 'exceptZero'\n };\n\n case 'sign-accounting-except-zero':\n return {\n signDisplay: 'exceptZero',\n currencySign: 'accounting'\n };\n\n case 'sign-never':\n return {\n signDisplay: 'never'\n };\n }\n}\n\nfunction parseNotationOptions(opt) {\n var result = {};\n var signOpts = parseSign(opt);\n\n if (signOpts) {\n return signOpts;\n }\n\n return result;\n}\n/**\n * https://github.com/unicode-org/icu/blob/master/docs/userguide/format_parse/numbers/skeletons.md#skeleton-stems-and-options\n */\n\n\nfunction convertNumberSkeletonToNumberFormatOptions(tokens) {\n var result = {};\n\n for (var _i = 0, tokens_1 = tokens; _i < tokens_1.length; _i++) {\n var token = tokens_1[_i];\n\n switch (token.stem) {\n case 'percent':\n result.style = 'percent';\n continue;\n\n case 'currency':\n result.style = 'currency';\n result.currency = token.options[0];\n continue;\n\n case 'group-off':\n result.useGrouping = false;\n continue;\n\n case 'precision-integer':\n result.maximumFractionDigits = 0;\n continue;\n\n case 'measure-unit':\n result.style = 'unit';\n result.unit = icuUnitToEcma(token.options[0]);\n continue;\n\n case 'compact-short':\n result.notation = 'compact';\n result.compactDisplay = 'short';\n continue;\n\n case 'compact-long':\n result.notation = 'compact';\n result.compactDisplay = 'long';\n continue;\n\n case 'scientific':\n result = skeleton_assign(skeleton_assign(skeleton_assign({}, result), {\n notation: 'scientific'\n }), token.options.reduce(function (all, opt) {\n return skeleton_assign(skeleton_assign({}, all), parseNotationOptions(opt));\n }, {}));\n continue;\n\n case 'engineering':\n result = skeleton_assign(skeleton_assign(skeleton_assign({}, result), {\n notation: 'engineering'\n }), token.options.reduce(function (all, opt) {\n return skeleton_assign(skeleton_assign({}, all), parseNotationOptions(opt));\n }, {}));\n continue;\n\n case 'notation-simple':\n result.notation = 'standard';\n continue;\n // https://github.com/unicode-org/icu/blob/master/icu4c/source/i18n/unicode/unumberformatter.h\n\n case 'unit-width-narrow':\n result.currencyDisplay = 'narrowSymbol';\n result.unitDisplay = 'narrow';\n continue;\n\n case 'unit-width-short':\n result.currencyDisplay = 'code';\n result.unitDisplay = 'short';\n continue;\n\n case 'unit-width-full-name':\n result.currencyDisplay = 'name';\n result.unitDisplay = 'long';\n continue;\n\n case 'unit-width-iso-code':\n result.currencyDisplay = 'symbol';\n continue;\n } // Precision\n // https://github.com/unicode-org/icu/blob/master/docs/userguide/format_parse/numbers/skeletons.md#fraction-precision\n\n\n if (FRACTION_PRECISION_REGEX.test(token.stem)) {\n if (token.options.length > 1) {\n throw new RangeError('Fraction-precision stems only accept a single optional option');\n }\n\n token.stem.replace(FRACTION_PRECISION_REGEX, function (match, g1, g2) {\n // precision-integer case\n if (match === '.') {\n result.maximumFractionDigits = 0;\n } // .000+ case\n else if (g2 === '+') {\n result.minimumFractionDigits = g2.length;\n } // .### case\n else if (g1[0] === '#') {\n result.maximumFractionDigits = g1.length;\n } // .00## or .000 case\n else {\n result.minimumFractionDigits = g1.length;\n result.maximumFractionDigits = g1.length + (typeof g2 === 'string' ? g2.length : 0);\n }\n\n return '';\n });\n\n if (token.options.length) {\n result = skeleton_assign(skeleton_assign({}, result), parseSignificantPrecision(token.options[0]));\n }\n\n continue;\n }\n\n if (SIGNIFICANT_PRECISION_REGEX.test(token.stem)) {\n result = skeleton_assign(skeleton_assign({}, result), parseSignificantPrecision(token.stem));\n continue;\n }\n\n var signOpts = parseSign(token.stem);\n\n if (signOpts) {\n result = skeleton_assign(skeleton_assign({}, result), signOpts);\n }\n }\n\n return result;\n}\n;// CONCATENATED MODULE: ./node_modules/gatsby-plugin-intl/node_modules/intl-messageformat/lib/formatters.js\nvar formatters_extends=undefined&&undefined.__extends||function(){var _extendStatics=function extendStatics(d,b){_extendStatics=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(d,b){d.__proto__=b;}||function(d,b){for(var p in b){if(b.hasOwnProperty(p))d[p]=b[p];}};return _extendStatics(d,b);};return function(d,b){_extendStatics(d,b);function __(){this.constructor=d;}d.prototype=b===null?Object.create(b):(__.prototype=b.prototype,new __());};}();var formatters_spreadArrays=undefined&&undefined.__spreadArrays||function(){for(var s=0,i=0,il=arguments.length;i(.*?)<\\/([0-9a-zA-Z-_]*?)>)|(<[0-9a-zA-Z-_]*?\\/>)/;var TEMPLATE_ID=Date.now()+'@@';var VOID_ELEMENTS=['area','base','br','col','embed','hr','img','input','link','meta','param','source','track','wbr'];function formatHTMLElement(el,objectParts,values){var tagName=el.tagName;var outerHTML=el.outerHTML,textContent=el.textContent,childNodes=el.childNodes;// Regular text\nif(!tagName){return restoreRichPlaceholderMessage(textContent||'',objectParts);}tagName=tagName.toLowerCase();var isVoidElement=~VOID_ELEMENTS.indexOf(tagName);var formatFnOrValue=values[tagName];if(formatFnOrValue&&isVoidElement){throw new FormatError(tagName+\" is a self-closing tag and can not be used, please use another tag name.\");}if(!childNodes.length){return[outerHTML];}var chunks=Array.prototype.slice.call(childNodes).reduce(function(all,child){return all.concat(formatHTMLElement(child,objectParts,values));},[]);// Legacy HTML\nif(!formatFnOrValue){return formatters_spreadArrays([\"<\"+tagName+\">\"],chunks,[\"\"]);}// HTML Tag replacement\nif(typeof formatFnOrValue==='function'){return[formatFnOrValue.apply(void 0,chunks)];}return[formatFnOrValue];}function formatHTMLMessage(els,locales,formatters,formats,values,// For debugging\noriginalMessage){var parts=formatToParts(els,locales,formatters,formats,values,undefined,originalMessage);var objectParts={};var formattedMessage=parts.reduce(function(all,part){if(part.type===0/* literal */){return all+=part.value;}var id=generateId();objectParts[id]=part.value;return all+=\"\"+TOKEN_DELIMITER+id+TOKEN_DELIMITER;},'');// Not designed to filter out aggressively\nif(!SIMPLE_XML_REGEX.test(formattedMessage)){return restoreRichPlaceholderMessage(formattedMessage,objectParts);}if(!values){throw new FormatError('Message has placeholders but no values was given');}if(typeof DOMParser==='undefined'){throw new FormatError('Cannot format XML message without DOMParser');}if(!domParser){domParser=new DOMParser();}var content=domParser.parseFromString(\"\"+formattedMessage+\"\",'text/html').getElementById(TEMPLATE_ID);if(!content){throw new FormatError(\"Malformed HTML message \"+formattedMessage);}var tagsToFormat=Object.keys(values).filter(function(varName){return!!content.getElementsByTagName(varName).length;});// No tags to format\nif(!tagsToFormat.length){return restoreRichPlaceholderMessage(formattedMessage,objectParts);}var caseSensitiveTags=tagsToFormat.filter(function(tagName){return tagName!==tagName.toLowerCase();});if(caseSensitiveTags.length){throw new FormatError(\"HTML tag must be lowercased but the following tags are not: \"+caseSensitiveTags.join(', '));}// We're doing this since top node is `` which does not have a formatter\nreturn Array.prototype.slice.call(content.childNodes).reduce(function(all,child){return all.concat(formatHTMLElement(child,objectParts,values));},[]);}\n;// CONCATENATED MODULE: ./node_modules/gatsby-plugin-intl/node_modules/intl-messageformat/lib/core.js\n/*\nCopyright (c) 2014, Yahoo! Inc. All rights reserved.\nCopyrights licensed under the New BSD License.\nSee the accompanying LICENSE file for terms.\n*/var core_assign=undefined&&undefined.__assign||function(){core_assign=Object.assign||function(t){for(var s,i=1,n=arguments.length;i<\"']/g;function utils_escape(str){return(''+str).replace(UNSAFE_CHARS_REGEX,function(match){return ESCAPED_CHARS[match.charCodeAt(0)];});}function filterProps(props,whitelist,defaults){if(defaults===void 0){defaults={};}return whitelist.reduce(function(filtered,name){if(name in props){filtered[name]=props[name];}else if(name in defaults){filtered[name]=defaults[name];}return filtered;},{});}function invariantIntlContext(intl){(0,invariant/* invariant */.k)(intl,'[React Intl] Could not find required `intl` object. '+' needs to exist in the component ancestry.');}function createError(message,exception){var eMsg=exception?\"\\n\"+exception.stack:'';return\"[React Intl] \"+message+eMsg;}function defaultErrorHandler(error){if(false){}}var DEFAULT_INTL_CONFIG={formats:{},messages:{},timeZone:undefined,textComponent:react.Fragment,defaultLocale:'en',defaultFormats:{},onError:defaultErrorHandler};function createIntlCache(){return{dateTime:{},number:{},message:{},relativeTime:{},pluralRules:{},list:{},displayNames:{}};}/**\n * Create intl formatters and populate cache\n * @param cache explicit cache to prevent leaking memory\n */function createFormatters(cache){if(cache===void 0){cache=createIntlCache();}var RelativeTimeFormat=Intl.RelativeTimeFormat;var ListFormat=Intl.ListFormat;var DisplayNames=Intl.DisplayNames;return{getDateTimeFormat:lib(Intl.DateTimeFormat,cache.dateTime),getNumberFormat:lib(Intl.NumberFormat,cache.number),getMessageFormat:lib(intl_messageformat_lib,cache.message),getRelativeTimeFormat:lib(RelativeTimeFormat,cache.relativeTime),getPluralRules:lib(Intl.PluralRules,cache.pluralRules),getListFormat:lib(ListFormat,cache.list),getDisplayNames:lib(DisplayNames,cache.displayNames)};}function getNamedFormat(formats,type,name,onError){var formatType=formats&&formats[type];var format;if(formatType){format=formatType[name];}if(format){return format;}onError(createError(\"No \"+type+\" format named: \"+name));}\n// EXTERNAL MODULE: ./node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js\nvar hoist_non_react_statics_cjs = __webpack_require__(5706);\nvar hoist_non_react_statics_cjs_default = /*#__PURE__*/__webpack_require__.n(hoist_non_react_statics_cjs);\n;// CONCATENATED MODULE: ./node_modules/gatsby-plugin-intl/node_modules/react-intl/lib/components/injectIntl.js\n// Since rollup cannot deal with namespace being a function,\n// this is to interop with TypeScript since `invariant`\n// does not export a default\n// https://github.com/rollup/rollup/issues/1267\nvar hoistNonReactStatics=(hoist_non_react_statics_cjs_default())||hoist_non_react_statics_cjs;function getDisplayName(Component){return Component.displayName||Component.name||'Component';}// TODO: We should provide initial value here\nvar IntlContext=/*#__PURE__*/react.createContext(null);var IntlConsumer=IntlContext.Consumer,IntlProvider=IntlContext.Provider;var Provider=IntlProvider;var Context=IntlContext;function injectIntl(WrappedComponent,options){var _ref=options||{},_ref$intlPropName=_ref.intlPropName,intlPropName=_ref$intlPropName===void 0?'intl':_ref$intlPropName,_ref$forwardRef=_ref.forwardRef,forwardRef=_ref$forwardRef===void 0?false:_ref$forwardRef,_ref$enforceContext=_ref.enforceContext,enforceContext=_ref$enforceContext===void 0?true:_ref$enforceContext;var WithIntl=function WithIntl(props){return/*#__PURE__*/react.createElement(IntlConsumer,null,function(intl){var _Object$assign;if(enforceContext){invariantIntlContext(intl);}return/*#__PURE__*/react.createElement(WrappedComponent,Object.assign({},props,(_Object$assign={},_Object$assign[intlPropName]=intl,_Object$assign),{ref:forwardRef?props.forwardedRef:null}));});};WithIntl.displayName=\"injectIntl(\"+getDisplayName(WrappedComponent)+\")\";WithIntl.WrappedComponent=WrappedComponent;if(forwardRef){return hoistNonReactStatics(/*#__PURE__*/react.forwardRef(function(props,ref){return/*#__PURE__*/react.createElement(WithIntl,Object.assign({},props,{forwardedRef:ref}));}),WrappedComponent);}return hoistNonReactStatics(WithIntl,WrappedComponent);}\n;// CONCATENATED MODULE: ./node_modules/gatsby-plugin-intl/node_modules/react-intl/lib/components/createFormattedComponent.js\nvar __rest=undefined&&undefined.__rest||function(s,e){var t={};for(var p in s){if(Object.prototype.hasOwnProperty.call(s,p)&&e.indexOf(p)<0)t[p]=s[p];}if(s!=null&&typeof Object.getOwnPropertySymbols===\"function\")for(var i=0,p=Object.getOwnPropertySymbols(s);i for the\n// default locale, and a default message is in the source.\nif(!defaultMessage||locale&&locale.toLowerCase()!==defaultLocale.toLowerCase()){onError(createError(\"Missing message: \\\"\"+id+\"\\\" for locale: \\\"\"+locale+\"\\\"\"+(defaultMessage?', using default message as fallback.':'')));}}if(!formattedMessageParts.length&&defaultMessage){try{var _formatter=state.getMessageFormat(defaultMessage,defaultLocale,defaultFormats);formattedMessageParts=_formatter.formatHTMLMessage(values);}catch(e){onError(createError(\"Error formatting the default message for: \\\"\"+id+\"\\\"\",e));}}if(!formattedMessageParts.length){onError(createError(\"Cannot format message: \\\"\"+id+\"\\\", \"+(\"using message \"+(message||defaultMessage?'source':'id')+\" as fallback.\")));if(typeof message==='string'){return message||defaultMessage||String(id);}return defaultMessage||String(id);}if(formattedMessageParts.length===1&&typeof formattedMessageParts[0]==='string'){return formattedMessageParts[0]||defaultMessage||String(id);}return prepareIntlMessageFormatHtmlOutput(formattedMessageParts);}function message_formatHTMLMessage(config,state,messageDescriptor,rawValues){if(messageDescriptor===void 0){messageDescriptor={id:''};}if(rawValues===void 0){rawValues={};}// Process all the values before they are used when formatting the ICU\n// Message string. Since the formatted message might be injected via\n// `innerHTML`, all String-based values need to be HTML-escaped.\nvar escapedValues=Object.keys(rawValues).reduce(function(escaped,name){var value=rawValues[name];escaped[name]=typeof value==='string'?utils_escape(value):value;return escaped;},{});return formatMessage(config,state,messageDescriptor,escapedValues);}\n// EXTERNAL MODULE: ./node_modules/shallow-equal/objects/index.js\nvar objects = __webpack_require__(9108);\nvar objects_default = /*#__PURE__*/__webpack_require__.n(objects);\n;// CONCATENATED MODULE: ./node_modules/gatsby-plugin-intl/node_modules/react-intl/lib/formatters/list.js\nvar LIST_FORMAT_OPTIONS=['localeMatcher','type','style'];var now=Date.now();function generateToken(i){return now+\"_\"+i+\"_\"+now;}function formatList(_ref,getListFormat,values,options){var locale=_ref.locale,onError=_ref.onError;if(options===void 0){options={};}var ListFormat=Intl.ListFormat;if(!ListFormat){onError(createError(\"Intl.ListFormat is not available in this environment.\\nTry polyfilling it using \\\"@formatjs/intl-listformat\\\"\\n\"));}var filteredOptions=filterProps(options,LIST_FORMAT_OPTIONS);try{var richValues={};var serializedValues=values.map(function(v,i){if(typeof v==='object'){var id=generateToken(i);richValues[id]=v;return id;}return String(v);});if(!Object.keys(richValues).length){return getListFormat(locale,filteredOptions).format(serializedValues);}var parts=getListFormat(locale,filteredOptions).formatToParts(serializedValues);return parts.reduce(function(all,el){var val=el.value;if(richValues[val]){all.push(richValues[val]);}else if(typeof all[all.length-1]==='string'){all[all.length-1]+=val;}else{all.push(val);}return all;},[]);}catch(e){onError(createError('Error formatting list.',e));}return values;}\n;// CONCATENATED MODULE: ./node_modules/gatsby-plugin-intl/node_modules/react-intl/lib/formatters/displayName.js\nvar DISPLAY_NAMES_OPTONS=['localeMatcher','style','type','fallback'];function formatDisplayName(_ref,getDisplayNames,value,options){var locale=_ref.locale,onError=_ref.onError;if(options===void 0){options={};}var DisplayNames=Intl.DisplayNames;if(!DisplayNames){onError(createError(\"Intl.DisplayNames is not available in this environment.\\nTry polyfilling it using \\\"@formatjs/intl-displaynames\\\"\\n\"));}var filteredOptions=filterProps(options,DISPLAY_NAMES_OPTONS);try{return getDisplayNames(locale,filteredOptions).of(value);}catch(e){onError(createError('Error formatting display name.',e));}}\n;// CONCATENATED MODULE: ./node_modules/gatsby-plugin-intl/node_modules/react-intl/lib/components/provider.js\n/*\n * Copyright 2015, Yahoo Inc.\n * Copyrights licensed under the New BSD License.\n * See the accompanying LICENSE file for terms.\n */var shallowEquals=(objects_default())||objects;function processIntlConfig(config){return{locale:config.locale,timeZone:config.timeZone,formats:config.formats,textComponent:config.textComponent,messages:config.messages,defaultLocale:config.defaultLocale,defaultFormats:config.defaultFormats,onError:config.onError};}/**\n * Create intl object\n * @param config intl config\n * @param cache cache for formatter instances to prevent memory leak\n */function createIntl(config,cache){var formatters=createFormatters(cache);var resolvedConfig=Object.assign(Object.assign({},DEFAULT_INTL_CONFIG),config);var locale=resolvedConfig.locale,defaultLocale=resolvedConfig.defaultLocale,onError=resolvedConfig.onError;if(!locale){if(onError){onError(createError(\"\\\"locale\\\" was not configured, using \\\"\"+defaultLocale+\"\\\" as fallback. See https://github.com/formatjs/react-intl/blob/master/docs/API.md#intlshape for more details\"));}// Since there's no registered locale data for `locale`, this will\n// fallback to the `defaultLocale` to make sure things can render.\n// The `messages` are overridden to the `defaultProps` empty object\n// to maintain referential equality across re-renders. It's assumed\n// each contains a `defaultMessage` prop.\nresolvedConfig.locale=resolvedConfig.defaultLocale||'en';}else if(!Intl.NumberFormat.supportedLocalesOf(locale).length&&onError){onError(createError(\"Missing locale data for locale: \\\"\"+locale+\"\\\" in Intl.NumberFormat. Using default locale: \\\"\"+defaultLocale+\"\\\" as fallback. See https://github.com/formatjs/react-intl/blob/master/docs/Getting-Started.md#runtime-requirements for more details\"));}else if(!Intl.DateTimeFormat.supportedLocalesOf(locale).length&&onError){onError(createError(\"Missing locale data for locale: \\\"\"+locale+\"\\\" in Intl.DateTimeFormat. Using default locale: \\\"\"+defaultLocale+\"\\\" as fallback. See https://github.com/formatjs/react-intl/blob/master/docs/Getting-Started.md#runtime-requirements for more details\"));}return Object.assign(Object.assign({},resolvedConfig),{formatters:formatters,formatNumber:formatNumber.bind(null,resolvedConfig,formatters.getNumberFormat),formatNumberToParts:formatNumberToParts.bind(null,resolvedConfig,formatters.getNumberFormat),formatRelativeTime:formatRelativeTime.bind(null,resolvedConfig,formatters.getRelativeTimeFormat),formatDate:formatDate.bind(null,resolvedConfig,formatters.getDateTimeFormat),formatDateToParts:formatDateToParts.bind(null,resolvedConfig,formatters.getDateTimeFormat),formatTime:formatTime.bind(null,resolvedConfig,formatters.getDateTimeFormat),formatTimeToParts:formatTimeToParts.bind(null,resolvedConfig,formatters.getDateTimeFormat),formatPlural:formatPlural.bind(null,resolvedConfig,formatters.getPluralRules),formatMessage:formatMessage.bind(null,resolvedConfig,formatters),formatHTMLMessage:message_formatHTMLMessage.bind(null,resolvedConfig,formatters),formatList:formatList.bind(null,resolvedConfig,formatters.getListFormat),formatDisplayName:formatDisplayName.bind(null,resolvedConfig,formatters.getDisplayNames)});}var provider_IntlProvider=/*#__PURE__*/function(_React$PureComponent){(0,inheritsLoose/* default */.Z)(IntlProvider,_React$PureComponent);function IntlProvider(){var _this;_this=_React$PureComponent.apply(this,arguments)||this;_this.cache=createIntlCache();_this.state={cache:_this.cache,intl:createIntl(processIntlConfig(_this.props),_this.cache),prevConfig:processIntlConfig(_this.props)};return _this;}IntlProvider.getDerivedStateFromProps=function getDerivedStateFromProps(props,_ref){var prevConfig=_ref.prevConfig,cache=_ref.cache;var config=processIntlConfig(props);if(!shallowEquals(prevConfig,config)){return{intl:createIntl(config,cache),prevConfig:config};}return null;};var _proto=IntlProvider.prototype;_proto.render=function render(){invariantIntlContext(this.state.intl);return/*#__PURE__*/react.createElement(Provider,{value:this.state.intl},this.props.children);};return IntlProvider;}(react.PureComponent);provider_IntlProvider.displayName='IntlProvider';provider_IntlProvider.defaultProps=DEFAULT_INTL_CONFIG;\n;// CONCATENATED MODULE: ./node_modules/gatsby-plugin-intl/node_modules/react-intl/lib/components/relative.js\n/*\n * Copyright 2015, Yahoo Inc.\n * Copyrights licensed under the New BSD License.\n * See the accompanying LICENSE file for terms.\n */var MINUTE=60;var HOUR=60*60;var DAY=60*60*24;function selectUnit(seconds){var absValue=Math.abs(seconds);if(absValue=currentValueInSeconds?prevInterestingValueInSeconds-unitDuration:prevInterestingValueInSeconds;var delayInSeconds=Math.abs(nextInterestingValueInSeconds-currentValueInSeconds);this._updateTimer=setTimeout(function(){return _this2.setState({currentValueInSeconds:nextInterestingValueInSeconds});},delayInSeconds*1e3);};_proto.componentDidMount=function componentDidMount(){this.scheduleNextUpdate(this.props,this.state);};_proto.componentDidUpdate=function componentDidUpdate(){this.scheduleNextUpdate(this.props,this.state);};_proto.componentWillUnmount=function componentWillUnmount(){clearTimeout(this._updateTimer);this._updateTimer=null;};FormattedRelativeTime.getDerivedStateFromProps=function getDerivedStateFromProps(props,state){if(props.unit!==state.prevUnit||props.value!==state.prevValue){return{prevValue:props.value,prevUnit:props.unit,currentValueInSeconds:canIncrement(props.unit)?valueToSeconds(props.value,props.unit):0};}return null;};_proto.render=function render(){var _this3=this;return/*#__PURE__*/react.createElement(Context.Consumer,null,function(intl){invariantIntlContext(intl);var formatRelativeTime=intl.formatRelativeTime,Text=intl.textComponent;var _this3$props=_this3.props,children=_this3$props.children,value=_this3$props.value,unit=_this3$props.unit,updateIntervalInSeconds=_this3$props.updateIntervalInSeconds;var currentValueInSeconds=_this3.state.currentValueInSeconds;var currentValue=value||0;var currentUnit=unit;if(canIncrement(unit)&&typeof currentValueInSeconds==='number'&&updateIntervalInSeconds){currentUnit=selectUnit(currentValueInSeconds);var unitDuration=getDurationInSeconds(currentUnit);currentValue=Math.round(currentValueInSeconds/unitDuration);}var formattedRelativeTime=formatRelativeTime(currentValue,currentUnit,Object.assign({},_this3.props));if(typeof children==='function'){return children(formattedRelativeTime);}if(Text){return/*#__PURE__*/react.createElement(Text,null,formattedRelativeTime);}return formattedRelativeTime;});};return FormattedRelativeTime;}(react.PureComponent);FormattedRelativeTime.displayName='FormattedRelativeTime';FormattedRelativeTime.defaultProps={value:0,unit:'second'};/* harmony default export */ var relative = (FormattedRelativeTime);\n;// CONCATENATED MODULE: ./node_modules/gatsby-plugin-intl/node_modules/react-intl/lib/components/plural.js\n/*\n * Copyright 2015, Yahoo Inc.\n * Copyrights licensed under the New BSD License.\n * See the accompanying LICENSE file for terms.\n */var FormattedPlural=function FormattedPlural(props){var value=props.value,other=props.other,children=props.children,_props$intl=props.intl,formatPlural=_props$intl.formatPlural,Text=_props$intl.textComponent;var pluralCategory=formatPlural(value,props);var formattedPlural=props[pluralCategory]||other;if(typeof children==='function'){return children(formattedPlural);}if(Text){return/*#__PURE__*/react.createElement(Text,null,formattedPlural);}// Work around @types/react where React.FC cannot return string\nreturn formattedPlural;};FormattedPlural.defaultProps={type:'cardinal'};FormattedPlural.displayName='FormattedPlural';/* harmony default export */ var plural = (injectIntl(FormattedPlural));\n;// CONCATENATED MODULE: ./node_modules/gatsby-plugin-intl/node_modules/react-intl/lib/components/message.js\n/*\n * Copyright 2015, Yahoo Inc.\n * Copyrights licensed under the New BSD License.\n * See the accompanying LICENSE file for terms.\n */var message_rest=undefined&&undefined.__rest||function(s,e){var t={};for(var p in s){if(Object.prototype.hasOwnProperty.call(s,p)&&e.indexOf(p)<0)t[p]=s[p];}if(s!=null&&typeof Object.getOwnPropertySymbols===\"function\")for(var i=0,p=Object.getOwnPropertySymbols(s);i dynamic > splat > root\n//\n// This way we don\'t have to worry about the order of our routes, let the\n// computers do it.\n//\n// A route looks like this\n//\n// { path, default, value }\n//\n// And a returned match looks like:\n//\n// { route, params, uri }\n//\n// I know, I should use TypeScript not comments for these types.\n\n\nvar pick = function pick(routes, uri) {\n var match = void 0;\n var default_ = void 0;\n\n var _uri$split = uri.split("?"),\n uriPathname = _uri$split[0];\n\n var uriSegments = segmentize(uriPathname);\n var isRootUri = uriSegments[0] === "";\n var ranked = rankRoutes(routes);\n\n for (var i = 0, l = ranked.length; i < l; i++) {\n var missed = false;\n var route = ranked[i].route;\n\n if (route.default) {\n default_ = {\n route: route,\n params: {},\n uri: uri\n };\n continue;\n }\n\n var routeSegments = segmentize(route.path);\n var params = {};\n var max = Math.max(uriSegments.length, routeSegments.length);\n var index = 0;\n\n for (; index < max; index++) {\n var routeSegment = routeSegments[index];\n var uriSegment = uriSegments[index];\n\n if (isSplat(routeSegment)) {\n // Hit a splat, just grab the rest, and return a match\n // uri: /files/documents/work\n // route: /files/*\n var param = routeSegment.slice(1) || "*";\n params[param] = uriSegments.slice(index).map(decodeURIComponent).join("/");\n break;\n }\n\n if (uriSegment === undefined) {\n // URI is shorter than the route, no match\n // uri: /users\n // route: /users/:userId\n missed = true;\n break;\n }\n\n var dynamicMatch = paramRe.exec(routeSegment);\n\n if (dynamicMatch && !isRootUri) {\n var matchIsNotReserved = reservedNames.indexOf(dynamicMatch[1]) === -1;\n !matchIsNotReserved ? false ? 0 : browser_default()(false) : void 0;\n var value = decodeURIComponent(uriSegment);\n params[dynamicMatch[1]] = value;\n } else if (routeSegment !== uriSegment) {\n // Current segments don\'t match, not dynamic, not splat, so no match\n // uri: /users/123/settings\n // route: /users/:id/profile\n missed = true;\n break;\n }\n }\n\n if (!missed) {\n match = {\n route: route,\n params: params,\n uri: "/" + uriSegments.slice(0, index).join("/")\n };\n break;\n }\n }\n\n return match || default_ || null;\n}; ////////////////////////////////////////////////////////////////////////////////\n// match(path, uri) - Matches just one path to a uri, also lol\n\n\nvar match = function match(path, uri) {\n return pick([{\n path: path\n }], uri);\n}; ////////////////////////////////////////////////////////////////////////////////\n// resolve(to, basepath)\n//\n// Resolves URIs as though every path is a directory, no files. Relative URIs\n// in the browser can feel awkward because not only can you be "in a directory"\n// you can be "at a file", too. For example\n//\n// browserSpecResolve(\'foo\', \'/bar/\') => /bar/foo\n// browserSpecResolve(\'foo\', \'/bar\') => /foo\n//\n// But on the command line of a file system, it\'s not as complicated, you can\'t\n// `cd` from a file, only directories. This way, links have to know less about\n// their current path. To go deeper you can do this:\n//\n// \n// // instead of\n// \n//\n// Just like `cd`, if you want to go deeper from the command line, you do this:\n//\n// cd deeper\n// # not\n// cd $(pwd)/deeper\n//\n// By treating every path as a directory, linking to relative paths should\n// require less contextual information and (fingers crossed) be more intuitive.\n\n\nvar resolve = function resolve(to, base) {\n // /foo/bar, /baz/qux => /foo/bar\n if (startsWith(to, "/")) {\n return to;\n }\n\n var _to$split = to.split("?"),\n toPathname = _to$split[0],\n toQuery = _to$split[1];\n\n var _base$split = base.split("?"),\n basePathname = _base$split[0];\n\n var toSegments = segmentize(toPathname);\n var baseSegments = segmentize(basePathname); // ?a=b, /users?b=c => /users?a=b\n\n if (toSegments[0] === "") {\n return addQuery(basePathname, toQuery);\n } // profile, /users/789 => /users/789/profile\n\n\n if (!startsWith(toSegments[0], ".")) {\n var pathname = baseSegments.concat(toSegments).join("/");\n return addQuery((basePathname === "/" ? "" : "/") + pathname, toQuery);\n } // ./ /users/123 => /users/123\n // ../ /users/123 => /users\n // ../.. /users/123 => /\n // ../../one /a/b/c/d => /a/b/one\n // .././one /a/b/c/d => /a/b/c/one\n\n\n var allSegments = baseSegments.concat(toSegments);\n var segments = [];\n\n for (var i = 0, l = allSegments.length; i < l; i++) {\n var segment = allSegments[i];\n if (segment === "..") segments.pop();else if (segment !== ".") segments.push(segment);\n }\n\n return addQuery("/" + segments.join("/"), toQuery);\n}; ////////////////////////////////////////////////////////////////////////////////\n// insertParams(path, params)\n\n\nvar insertParams = function insertParams(path, params) {\n var _path$split = path.split("?"),\n pathBase = _path$split[0],\n _path$split$ = _path$split[1],\n query = _path$split$ === undefined ? "" : _path$split$;\n\n var segments = segmentize(pathBase);\n var constructedPath = "/" + segments.map(function (segment) {\n var match = paramRe.exec(segment);\n return match ? params[match[1]] : segment;\n }).join("/");\n var _params$location = params.location;\n _params$location = _params$location === undefined ? {} : _params$location;\n var _params$location$sear = _params$location.search,\n search = _params$location$sear === undefined ? "" : _params$location$sear;\n var searchSplit = search.split("?")[1] || "";\n constructedPath = addQuery(constructedPath, query, searchSplit);\n return constructedPath;\n};\n\nvar validateRedirect = function validateRedirect(from, to) {\n var filter = function filter(segment) {\n return isDynamic(segment);\n };\n\n var fromString = segmentize(from).filter(filter).sort().join("/");\n var toString = segmentize(to).filter(filter).sort().join("/");\n return fromString === toString;\n}; ////////////////////////////////////////////////////////////////////////////////\n// Junk\n\n\nvar paramRe = /^:(.+)/;\nvar SEGMENT_POINTS = 4;\nvar STATIC_POINTS = 3;\nvar DYNAMIC_POINTS = 2;\nvar SPLAT_PENALTY = 1;\nvar ROOT_POINTS = 1;\n\nvar isRootSegment = function isRootSegment(segment) {\n return segment === "";\n};\n\nvar isDynamic = function isDynamic(segment) {\n return paramRe.test(segment);\n};\n\nvar isSplat = function isSplat(segment) {\n return segment && segment[0] === "*";\n};\n\nvar rankRoute = function rankRoute(route, index) {\n var score = route.default ? 0 : segmentize(route.path).reduce(function (score, segment) {\n score += SEGMENT_POINTS;\n if (isRootSegment(segment)) score += ROOT_POINTS;else if (isDynamic(segment)) score += DYNAMIC_POINTS;else if (isSplat(segment)) score -= SEGMENT_POINTS + SPLAT_PENALTY;else score += STATIC_POINTS;\n return score;\n }, 0);\n return {\n route: route,\n score: score,\n index: index\n };\n};\n\nvar rankRoutes = function rankRoutes(routes) {\n return routes.map(rankRoute).sort(function (a, b) {\n return a.score < b.score ? 1 : a.score > b.score ? -1 : a.index - b.index;\n });\n};\n\nvar segmentize = function segmentize(uri) {\n return uri // strip starting/ending slashes\n .replace(/(^\\/+|\\/+$)/g, "").split("/");\n};\n\nvar addQuery = function addQuery(pathname) {\n for (var _len = arguments.length, query = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n query[_key - 1] = arguments[_key];\n }\n\n query = query.filter(function (q) {\n return q && q.length > 0;\n });\n return pathname + (query && query.length > 0 ? "?" + query.join("&") : "");\n};\n\nvar reservedNames = ["uri", "path"];\n/**\n * Shallow compares two objects.\n * @param {Object} obj1 The first object to compare.\n * @param {Object} obj2 The second object to compare.\n */\n\nvar shallowCompare = function shallowCompare(obj1, obj2) {\n var obj1Keys = Object.keys(obj1);\n return obj1Keys.length === Object.keys(obj2).length && obj1Keys.every(function (key) {\n return obj2.hasOwnProperty(key) && obj1[key] === obj2[key];\n });\n}; ////////////////////////////////////////////////////////////////////////////////\n\n\n\n;// CONCATENATED MODULE: ./node_modules/@gatsbyjs/reach-router/es/lib/history.js\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar getLocation = function getLocation(source) {\n var _source$location = source.location,\n search = _source$location.search,\n hash = _source$location.hash,\n href = _source$location.href,\n origin = _source$location.origin,\n protocol = _source$location.protocol,\n host = _source$location.host,\n hostname = _source$location.hostname,\n port = _source$location.port;\n var pathname = source.location.pathname;\n\n if (!pathname && href && canUseDOM) {\n var url = new URL(href);\n pathname = url.pathname;\n }\n\n return {\n pathname: encodeURI(decodeURI(pathname)),\n search: search,\n hash: hash,\n href: href,\n origin: origin,\n protocol: protocol,\n host: host,\n hostname: hostname,\n port: port,\n state: source.history.state,\n key: source.history.state && source.history.state.key || "initial"\n };\n};\n\nvar createHistory = function createHistory(source, options) {\n var listeners = [];\n var location = getLocation(source);\n var transitioning = false;\n\n var resolveTransition = function resolveTransition() {};\n\n return {\n get location() {\n return location;\n },\n\n get transitioning() {\n return transitioning;\n },\n\n _onTransitionComplete: function _onTransitionComplete() {\n transitioning = false;\n resolveTransition();\n },\n listen: function listen(listener) {\n listeners.push(listener);\n\n var popstateListener = function popstateListener() {\n location = getLocation(source);\n listener({\n location: location,\n action: "POP"\n });\n };\n\n source.addEventListener("popstate", popstateListener);\n return function () {\n source.removeEventListener("popstate", popstateListener);\n listeners = listeners.filter(function (fn) {\n return fn !== listener;\n });\n };\n },\n navigate: function navigate(to) {\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n state = _ref.state,\n _ref$replace = _ref.replace,\n replace = _ref$replace === undefined ? false : _ref$replace;\n\n if (typeof to === "number") {\n source.history.go(to);\n } else {\n state = _extends({}, state, {\n key: Date.now() + ""\n }); // try...catch iOS Safari limits to 100 pushState calls\n\n try {\n if (transitioning || replace) {\n source.history.replaceState(state, null, to);\n } else {\n source.history.pushState(state, null, to);\n }\n } catch (e) {\n source.location[replace ? "replace" : "assign"](to);\n }\n }\n\n location = getLocation(source);\n transitioning = true;\n var transition = new Promise(function (res) {\n return resolveTransition = res;\n });\n listeners.forEach(function (listener) {\n return listener({\n location: location,\n action: "PUSH"\n });\n });\n return transition;\n }\n };\n}; ////////////////////////////////////////////////////////////////////////////////\n// Stores history entries in memory for testing or other platforms like Native\n\n\nvar createMemorySource = function createMemorySource() {\n var initialPath = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "/";\n var searchIndex = initialPath.indexOf("?");\n var initialLocation = {\n pathname: searchIndex > -1 ? initialPath.substr(0, searchIndex) : initialPath,\n search: searchIndex > -1 ? initialPath.substr(searchIndex) : ""\n };\n var index = 0;\n var stack = [initialLocation];\n var states = [null];\n return {\n get location() {\n return stack[index];\n },\n\n addEventListener: function addEventListener(name, fn) {},\n removeEventListener: function removeEventListener(name, fn) {},\n history: {\n get entries() {\n return stack;\n },\n\n get index() {\n return index;\n },\n\n get state() {\n return states[index];\n },\n\n pushState: function pushState(state, _, uri) {\n var _uri$split = uri.split("?"),\n pathname = _uri$split[0],\n _uri$split$ = _uri$split[1],\n search = _uri$split$ === undefined ? "" : _uri$split$;\n\n index++;\n stack.push({\n pathname: pathname,\n search: search.length ? "?" + search : search\n });\n states.push(state);\n },\n replaceState: function replaceState(state, _, uri) {\n var _uri$split2 = uri.split("?"),\n pathname = _uri$split2[0],\n _uri$split2$ = _uri$split2[1],\n search = _uri$split2$ === undefined ? "" : _uri$split2$;\n\n stack[index] = {\n pathname: pathname,\n search: search\n };\n states[index] = state;\n },\n go: function go(to) {\n var newIndex = index + to;\n\n if (newIndex < 0 || newIndex > states.length - 1) {\n return;\n }\n\n index = newIndex;\n }\n }\n };\n}; ////////////////////////////////////////////////////////////////////////////////\n// global history - uses window.history as the source if available, otherwise a\n// memory history\n\n\nvar canUseDOM = !!(typeof window !== "undefined" && window.document && window.document.createElement);\n\nvar getSource = function getSource() {\n return canUseDOM ? window : createMemorySource();\n};\n\nvar globalHistory = createHistory(getSource());\nvar history_navigate = globalHistory.navigate; ////////////////////////////////////////////////////////////////////////////////\n\n\n;// CONCATENATED MODULE: ./node_modules/@gatsbyjs/reach-router/es/index.js\nvar es_extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nfunction _objectWithoutProperties(obj, keys) {\n var target = {};\n\n for (var i in obj) {\n if (keys.indexOf(i) >= 0) continue;\n if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n target[i] = obj[i];\n }\n\n return target;\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError("Cannot call a class as a function");\n }\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (!self) {\n throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called");\n }\n\n return call && (typeof call === "object" || typeof call === "function") ? call : self;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== "function" && superClass !== null) {\n throw new TypeError("Super expression must either be null or a function, not " + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n}\n/* eslint-disable jsx-a11y/anchor-has-content */\n\n\n\n\n\n\n ////////////////////////////////////////////////////////////////////////////////\n\nvar createNamedContext = function createNamedContext(name, defaultValue) {\n var Ctx = (0,react.createContext)(defaultValue);\n Ctx.displayName = name;\n return Ctx;\n}; ////////////////////////////////////////////////////////////////////////////////\n// Location Context/Provider\n\n\nvar LocationContext = createNamedContext("Location"); // sets up a listener if there isn\'t one already so apps don\'t need to be\n// wrapped in some top level provider\n\nvar Location = function Location(_ref) {\n var children = _ref.children;\n return react.createElement(LocationContext.Consumer, null, function (context) {\n return context ? children(context) : react.createElement(LocationProvider, null, children);\n });\n};\n\nvar LocationProvider = function (_React$Component) {\n _inherits(LocationProvider, _React$Component);\n\n function LocationProvider() {\n var _temp, _this, _ret;\n\n _classCallCheck(this, LocationProvider);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, _React$Component.call.apply(_React$Component, [this].concat(args))), _this), _this.state = {\n context: _this.getContext(),\n refs: {\n unlisten: null\n }\n }, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n LocationProvider.prototype.getContext = function getContext() {\n var _props$history = this.props.history,\n navigate = _props$history.navigate,\n location = _props$history.location;\n return {\n navigate: navigate,\n location: location\n };\n };\n\n LocationProvider.prototype.componentDidCatch = function componentDidCatch(error, info) {\n if (isRedirect(error)) {\n var _navigate = this.props.history.navigate;\n\n _navigate(error.uri, {\n replace: true\n });\n } else {\n throw error;\n }\n };\n\n LocationProvider.prototype.componentDidUpdate = function componentDidUpdate(prevProps, prevState) {\n if (prevState.context.location !== this.state.context.location) {\n this.props.history._onTransitionComplete();\n }\n };\n\n LocationProvider.prototype.componentDidMount = function componentDidMount() {\n var _this2 = this;\n\n var refs = this.state.refs,\n history = this.props.history;\n\n history._onTransitionComplete();\n\n refs.unlisten = history.listen(function () {\n Promise.resolve().then(function () {\n // TODO: replace rAF with react deferred update API when it\'s ready https://github.com/facebook/react/issues/13306\n requestAnimationFrame(function () {\n if (!_this2.unmounted) {\n _this2.setState(function () {\n return {\n context: _this2.getContext()\n };\n });\n }\n });\n });\n });\n };\n\n LocationProvider.prototype.componentWillUnmount = function componentWillUnmount() {\n var refs = this.state.refs;\n this.unmounted = true;\n refs.unlisten();\n };\n\n LocationProvider.prototype.render = function render() {\n var context = this.state.context,\n children = this.props.children;\n return react.createElement(LocationContext.Provider, {\n value: context\n }, typeof children === "function" ? children(context) : children || null);\n };\n\n return LocationProvider;\n}(react.Component); ////////////////////////////////////////////////////////////////////////////////\n\n\nLocationProvider.defaultProps = {\n history: globalHistory\n};\n false ? 0 : void 0;\n\nvar ServerLocation = function ServerLocation(_ref2) {\n var url = _ref2.url,\n children = _ref2.children;\n var searchIndex = url.indexOf("?");\n var searchExists = searchIndex > -1;\n var pathname = void 0;\n var search = "";\n var hash = "";\n\n if (searchExists) {\n pathname = url.substring(0, searchIndex);\n search = url.substring(searchIndex);\n } else {\n pathname = url;\n }\n\n return react.createElement(LocationContext.Provider, {\n value: {\n location: {\n pathname: pathname,\n search: search,\n hash: hash\n },\n navigate: function navigate() {\n throw new Error("You can\'t call navigate on the server.");\n }\n }\n }, children);\n}; ////////////////////////////////////////////////////////////////////////////////\n// Sets baseuri and basepath for nested routers and links\n\n\nvar BaseContext = createNamedContext("Base", {\n baseuri: "/",\n basepath: "/",\n navigate: globalHistory.navigate\n}); ////////////////////////////////////////////////////////////////////////////////\n// The main event, welcome to the show everybody.\n\nvar Router = function Router(props) {\n return react.createElement(BaseContext.Consumer, null, function (baseContext) {\n return react.createElement(Location, null, function (locationContext) {\n return react.createElement(RouterImpl, es_extends({}, baseContext, locationContext, props));\n });\n });\n};\n\nvar RouterImpl = function (_React$PureComponent) {\n _inherits(RouterImpl, _React$PureComponent);\n\n function RouterImpl() {\n _classCallCheck(this, RouterImpl);\n\n return _possibleConstructorReturn(this, _React$PureComponent.apply(this, arguments));\n }\n\n RouterImpl.prototype.render = function render() {\n var _props = this.props,\n location = _props.location,\n _navigate2 = _props.navigate,\n basepath = _props.basepath,\n primary = _props.primary,\n children = _props.children,\n baseuri = _props.baseuri,\n _props$component = _props.component,\n component = _props$component === undefined ? "div" : _props$component,\n domProps = _objectWithoutProperties(_props, ["location", "navigate", "basepath", "primary", "children", "baseuri", "component"]);\n\n var routes = react.Children.toArray(children).reduce(function (array, child) {\n var routes = createRoute(basepath)(child);\n return array.concat(routes);\n }, []);\n var pathname = location.pathname;\n var match = pick(routes, pathname);\n\n if (match) {\n var params = match.params,\n uri = match.uri,\n route = match.route,\n element = match.route.value; // remove the /* from the end for child routes relative paths\n\n basepath = route.default ? basepath : route.path.replace(/\\*$/, "");\n\n var props = es_extends({}, params, {\n uri: uri,\n location: location,\n navigate: function navigate(to, options) {\n return _navigate2(resolve(to, uri), options);\n }\n });\n\n var clone = react.cloneElement(element, props, element.props.children ? react.createElement(Router, {\n location: location,\n primary: primary\n }, element.props.children) : undefined); // using \'div\' for < 16.3 support\n\n var FocusWrapper = primary ? FocusHandler : component; // don\'t pass any props to \'div\'\n\n var wrapperProps = primary ? es_extends({\n uri: uri,\n location: location,\n component: component\n }, domProps) : domProps;\n return react.createElement(BaseContext.Provider, {\n value: {\n baseuri: uri,\n basepath: basepath,\n navigate: props.navigate\n }\n }, react.createElement(FocusWrapper, wrapperProps, clone));\n } else {\n // Not sure if we want this, would require index routes at every level\n // warning(\n // false,\n // `\\n\\nNothing matched:\\n\\t${\n // location.pathname\n // }\\n\\nPaths checked: \\n\\t${routes\n // .map(route => route.path)\n // .join(\n // "\\n\\t"\n // )}\\n\\nTo get rid of this warning, add a default NotFound component as child of Router:\n // \\n\\tlet NotFound = () =>
Not Found!
\n // \\n\\t\\n\\t \\n\\t {/* ... */}\\n\\t`\n // );\n return null;\n }\n };\n\n return RouterImpl;\n}(react.PureComponent);\n\nRouterImpl.defaultProps = {\n primary: true\n};\nvar FocusContext = createNamedContext("Focus");\n\nvar FocusHandler = function FocusHandler(_ref3) {\n var uri = _ref3.uri,\n location = _ref3.location,\n component = _ref3.component,\n domProps = _objectWithoutProperties(_ref3, ["uri", "location", "component"]);\n\n return react.createElement(FocusContext.Consumer, null, function (requestFocus) {\n return react.createElement(FocusHandlerImpl, es_extends({}, domProps, {\n component: component,\n requestFocus: requestFocus,\n uri: uri,\n location: location\n }));\n });\n}; // don\'t focus on initial render\n\n\nvar initialRender = true;\nvar focusHandlerCount = 0;\n\nvar FocusHandlerImpl = function (_React$Component2) {\n _inherits(FocusHandlerImpl, _React$Component2);\n\n function FocusHandlerImpl() {\n var _temp2, _this4, _ret2;\n\n _classCallCheck(this, FocusHandlerImpl);\n\n for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n return _ret2 = (_temp2 = (_this4 = _possibleConstructorReturn(this, _React$Component2.call.apply(_React$Component2, [this].concat(args))), _this4), _this4.state = {}, _this4.requestFocus = function (node) {\n if (!_this4.state.shouldFocus && node) {\n node.focus();\n }\n }, _temp2), _possibleConstructorReturn(_this4, _ret2);\n }\n\n FocusHandlerImpl.getDerivedStateFromProps = function getDerivedStateFromProps(nextProps, prevState) {\n var initial = prevState.uri == null;\n\n if (initial) {\n return es_extends({\n shouldFocus: true\n }, nextProps);\n } else {\n var myURIChanged = nextProps.uri !== prevState.uri;\n var navigatedUpToMe = prevState.location.pathname !== nextProps.location.pathname && nextProps.location.pathname === nextProps.uri;\n return es_extends({\n shouldFocus: myURIChanged || navigatedUpToMe\n }, nextProps);\n }\n };\n\n FocusHandlerImpl.prototype.componentDidMount = function componentDidMount() {\n focusHandlerCount++;\n this.focus();\n };\n\n FocusHandlerImpl.prototype.componentWillUnmount = function componentWillUnmount() {\n focusHandlerCount--;\n\n if (focusHandlerCount === 0) {\n initialRender = true;\n }\n };\n\n FocusHandlerImpl.prototype.componentDidUpdate = function componentDidUpdate(prevProps, prevState) {\n if (prevProps.location !== this.props.location && this.state.shouldFocus) {\n this.focus();\n }\n };\n\n FocusHandlerImpl.prototype.focus = function focus() {\n if (false) {}\n\n var requestFocus = this.props.requestFocus;\n\n if (requestFocus) {\n requestFocus(this.node);\n } else {\n if (initialRender) {\n initialRender = false;\n } else if (this.node) {\n // React polyfills [autofocus] and it fires earlier than cDM,\n // so we were stealing focus away, this line prevents that.\n if (!this.node.contains(document.activeElement)) {\n this.node.focus();\n }\n }\n }\n };\n\n FocusHandlerImpl.prototype.render = function render() {\n var _this5 = this;\n\n var _props2 = this.props,\n children = _props2.children,\n style = _props2.style,\n requestFocus = _props2.requestFocus,\n _props2$component = _props2.component,\n Comp = _props2$component === undefined ? "div" : _props2$component,\n uri = _props2.uri,\n location = _props2.location,\n domProps = _objectWithoutProperties(_props2, ["children", "style", "requestFocus", "component", "uri", "location"]);\n\n return react.createElement(Comp, es_extends({\n style: es_extends({\n outline: "none"\n }, style),\n tabIndex: "-1",\n ref: function ref(n) {\n return _this5.node = n;\n }\n }, domProps), react.createElement(FocusContext.Provider, {\n value: this.requestFocus\n }, this.props.children));\n };\n\n return FocusHandlerImpl;\n}(react.Component);\n\n(0,react_lifecycles_compat/* polyfill */.O)(FocusHandlerImpl);\n\nvar k = function k() {}; ////////////////////////////////////////////////////////////////////////////////\n\n\nvar forwardRef = react.forwardRef;\n\nif (typeof forwardRef === "undefined") {\n forwardRef = function forwardRef(C) {\n return C;\n };\n}\n\nvar Link = forwardRef(function (_ref4, ref) {\n var innerRef = _ref4.innerRef,\n props = _objectWithoutProperties(_ref4, ["innerRef"]);\n\n return react.createElement(BaseContext.Consumer, null, function (_ref5) {\n var basepath = _ref5.basepath,\n baseuri = _ref5.baseuri;\n return react.createElement(Location, null, function (_ref6) {\n var location = _ref6.location,\n navigate = _ref6.navigate;\n\n var to = props.to,\n state = props.state,\n replace = props.replace,\n _props$getProps = props.getProps,\n getProps = _props$getProps === undefined ? k : _props$getProps,\n anchorProps = _objectWithoutProperties(props, ["to", "state", "replace", "getProps"]);\n\n var href = resolve(to, baseuri);\n var encodedHref = encodeURI(href);\n var isCurrent = location.pathname === encodedHref;\n var isPartiallyCurrent = startsWith(location.pathname, encodedHref);\n return react.createElement("a", es_extends({\n ref: ref || innerRef,\n "aria-current": isCurrent ? "page" : undefined\n }, anchorProps, getProps({\n isCurrent: isCurrent,\n isPartiallyCurrent: isPartiallyCurrent,\n href: href,\n location: location\n }), {\n href: href,\n onClick: function onClick(event) {\n if (anchorProps.onClick) anchorProps.onClick(event);\n\n if (shouldNavigate(event)) {\n event.preventDefault();\n var shouldReplace = replace;\n\n if (typeof replace !== "boolean" && isCurrent) {\n var _location$state = es_extends({}, location.state),\n key = _location$state.key,\n restState = _objectWithoutProperties(_location$state, ["key"]);\n\n shouldReplace = shallowCompare(es_extends({}, state), restState);\n }\n\n navigate(href, {\n state: state,\n replace: shouldReplace\n });\n }\n }\n }));\n });\n });\n});\nLink.displayName = "Link";\n false ? 0 : void 0; ////////////////////////////////////////////////////////////////////////////////\n\nfunction RedirectRequest(uri) {\n this.uri = uri;\n}\n\nvar isRedirect = function isRedirect(o) {\n return o instanceof RedirectRequest;\n};\n\nvar redirectTo = function redirectTo(to) {\n throw new RedirectRequest(to);\n};\n\nvar RedirectImpl = function (_React$Component3) {\n _inherits(RedirectImpl, _React$Component3);\n\n function RedirectImpl() {\n _classCallCheck(this, RedirectImpl);\n\n return _possibleConstructorReturn(this, _React$Component3.apply(this, arguments));\n } // Support React < 16 with this hook\n\n\n RedirectImpl.prototype.componentDidMount = function componentDidMount() {\n var _props3 = this.props,\n navigate = _props3.navigate,\n to = _props3.to,\n from = _props3.from,\n _props3$replace = _props3.replace,\n replace = _props3$replace === undefined ? true : _props3$replace,\n state = _props3.state,\n noThrow = _props3.noThrow,\n baseuri = _props3.baseuri,\n props = _objectWithoutProperties(_props3, ["navigate", "to", "from", "replace", "state", "noThrow", "baseuri"]);\n\n Promise.resolve().then(function () {\n var resolvedTo = resolve(to, baseuri);\n navigate(insertParams(resolvedTo, props), {\n replace: replace,\n state: state\n });\n });\n };\n\n RedirectImpl.prototype.render = function render() {\n var _props4 = this.props,\n navigate = _props4.navigate,\n to = _props4.to,\n from = _props4.from,\n replace = _props4.replace,\n state = _props4.state,\n noThrow = _props4.noThrow,\n baseuri = _props4.baseuri,\n props = _objectWithoutProperties(_props4, ["navigate", "to", "from", "replace", "state", "noThrow", "baseuri"]);\n\n var resolvedTo = resolve(to, baseuri);\n if (!noThrow) redirectTo(insertParams(resolvedTo, props));\n return null;\n };\n\n return RedirectImpl;\n}(react.Component);\n\nvar Redirect = function Redirect(props) {\n return react.createElement(BaseContext.Consumer, null, function (_ref7) {\n var baseuri = _ref7.baseuri;\n return react.createElement(Location, null, function (locationContext) {\n return react.createElement(RedirectImpl, es_extends({}, locationContext, {\n baseuri: baseuri\n }, props));\n });\n });\n};\n\n false ? 0 : void 0; ////////////////////////////////////////////////////////////////////////////////\n\nvar Match = function Match(_ref8) {\n var path = _ref8.path,\n children = _ref8.children;\n return react.createElement(BaseContext.Consumer, null, function (_ref9) {\n var baseuri = _ref9.baseuri;\n return react.createElement(Location, null, function (_ref10) {\n var navigate = _ref10.navigate,\n location = _ref10.location;\n var resolvedPath = resolve(path, baseuri);\n var result = match(resolvedPath, location.pathname);\n return children({\n navigate: navigate,\n location: location,\n match: result ? es_extends({}, result.params, {\n uri: result.uri,\n path: path\n }) : null\n });\n });\n });\n}; ////////////////////////////////////////////////////////////////////////////////\n// Hooks\n\n\nvar useLocation = function useLocation() {\n var context = (0,react.useContext)(LocationContext);\n\n if (!context) {\n throw new Error("useLocation hook was used but a LocationContext.Provider was not found in the parent tree. Make sure this is used in a component that is a child of Router");\n }\n\n return context.location;\n};\n\nvar useNavigate = function useNavigate() {\n var context = (0,react.useContext)(BaseContext);\n\n if (!context) {\n throw new Error("useNavigate hook was used but a BaseContext.Provider was not found in the parent tree. Make sure this is used in a component that is a child of Router");\n }\n\n return context.navigate;\n};\n\nvar useParams = function useParams() {\n var context = (0,react.useContext)(BaseContext);\n\n if (!context) {\n throw new Error("useParams hook was used but a LocationContext.Provider was not found in the parent tree. Make sure this is used in a component that is a child of Router");\n }\n\n var location = useLocation();\n var results = match(context.basepath, location.pathname);\n return results ? results.params : null;\n};\n\nvar useMatch = function useMatch(path) {\n if (!path) {\n throw new Error("useMatch(path: string) requires an argument of a string to match against");\n }\n\n var context = (0,react.useContext)(BaseContext);\n\n if (!context) {\n throw new Error("useMatch hook was used but a LocationContext.Provider was not found in the parent tree. Make sure this is used in a component that is a child of Router");\n }\n\n var location = useLocation();\n var resolvedPath = resolve(path, context.baseuri);\n var result = match(resolvedPath, location.pathname);\n return result ? es_extends({}, result.params, {\n uri: result.uri,\n path: path\n }) : null;\n}; ////////////////////////////////////////////////////////////////////////////////\n// Junk\n\n\nvar stripSlashes = function stripSlashes(str) {\n return str.replace(/(^\\/+|\\/+$)/g, "");\n};\n\nvar createRoute = function createRoute(basepath) {\n return function (element) {\n if (!element) {\n return null;\n }\n\n if (element.type === react.Fragment && element.props.children) {\n return react.Children.map(element.props.children, createRoute(basepath));\n }\n\n !(element.props.path || element.props.default || element.type === Redirect) ? false ? 0 : browser_default()(false) : void 0;\n !!(element.type === Redirect && (!element.props.from || !element.props.to)) ? false ? 0 : browser_default()(false) : void 0;\n !!(element.type === Redirect && !validateRedirect(element.props.from, element.props.to)) ? false ? 0 : browser_default()(false) : void 0;\n\n if (element.props.default) {\n return {\n value: element,\n default: true\n };\n }\n\n var elementPath = element.type === Redirect ? element.props.from : element.props.path;\n var path = elementPath === "/" ? basepath : stripSlashes(basepath) + "/" + stripSlashes(elementPath);\n return {\n value: element,\n default: element.props.default,\n path: element.props.children ? stripSlashes(path) + "/*" : path\n };\n };\n};\n\nvar shouldNavigate = function shouldNavigate(event) {\n return !event.defaultPrevented && event.button === 0 && !(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);\n}; ////////////////////////////////////////////////////////////////////////\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AZ2F0c2J5anMvcmVhY2gtcm91dGVyL2VzL2xpYi91dGlscy5qcz8zNDNiIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL0BnYXRzYnlqcy9yZWFjaC1yb3V0ZXIvZXMvbGliL2hpc3RvcnkuanM/YmEyNCIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AZ2F0c2J5anMvcmVhY2gtcm91dGVyL2VzL2luZGV4LmpzPzc0MWUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFrQztBQUNsQzs7QUFFQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsb0NBQW9DLE9BQU87QUFDM0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsVUFBVSxhQUFhO0FBQ3ZCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsOEJBQThCLE1BQXFDLEdBQUcsQ0FBd0osR0FBRyxpQkFBUztBQUMxTztBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVB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RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx5QkFBeUIsY0FBYztBQUN2QyxhQUFhLGtCQUFrQjtBQUMvQjs7QUFFQSxrRkFBa0YsTUFBcUMsR0FBRyxDQUFnSyxHQUFHLGlCQUFTO0FBQ3RTLGtGQUFrRixNQUFxQyxHQUFHLENBQW1LLEdBQUcsaUJBQVM7QUFDelMscUNBQXFDLGdCQUFnQiwwQ0FBMEMsTUFBcUMsR0FBRyxDQUEwTCxHQUFHLGlCQUFTOztBQUU3VTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFIiwiZmlsZSI6Ijk0OTkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgaW52YXJpYW50IGZyb20gXCJpbnZhcmlhbnRcIjsgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIHN0YXJ0c1dpdGgoc3RyaW5nLCBzZWFyY2gpIC0gQ2hlY2sgaWYgYHN0cmluZ2Agc3RhcnRzIHdpdGggYHNlYXJjaGBcblxudmFyIHN0YXJ0c1dpdGggPSBmdW5jdGlvbiBzdGFydHNXaXRoKHN0cmluZywgc2VhcmNoKSB7XG4gIHJldHVybiBzdHJpbmcuc3Vic3RyKDAsIHNlYXJjaC5sZW5ndGgpID09PSBzZWFyY2g7XG59OyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gcGljayhyb3V0ZXMsIHVyaSlcbi8vXG4vLyBSYW5rcyBhbmQgcGlja3MgdGhlIGJlc3Qgcm91dGUgdG8gbWF0Y2guIEVhY2ggc2VnbWVudCBnZXRzIHRoZSBoaWdoZXN0XG4vLyBhbW91bnQgb2YgcG9pbnRzLCB0aGVuIHRoZSB0eXBlIG9mIHNlZ21lbnQgZ2V0cyBhbiBhZGRpdGlvbmFsIGFtb3VudCBvZlxuLy8gcG9pbnRzIHdoZXJlXG4vL1xuLy8gICAgIHN0YXRpYyA+IGR5bmFtaWMgPiBzcGxhdCA+IHJvb3Rcbi8vXG4vLyBUaGlzIHdheSB3ZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IHRoZSBvcmRlciBvZiBvdXIgcm91dGVzLCBsZXQgdGhlXG4vLyBjb21wdXRlcnMgZG8gaXQuXG4vL1xuLy8gQSByb3V0ZSBsb29rcyBsaWtlIHRoaXNcbi8vXG4vLyAgICAgeyBwYXRoLCBkZWZhdWx0LCB2YWx1ZSB9XG4vL1xuLy8gQW5kIGEgcmV0dXJuZWQgbWF0Y2ggbG9va3MgbGlrZTpcbi8vXG4vLyAgICAgeyByb3V0ZSwgcGFyYW1zLCB1cmkgfVxuLy9cbi8vIEkga25vdywgSSBzaG91bGQgdXNlIFR5cGVTY3JpcHQgbm90IGNvbW1lbnRzIGZvciB0aGVzZSB0eXBlcy5cblxuXG52YXIgcGljayA9IGZ1bmN0aW9uIHBpY2socm91dGVzLCB1cmkpIHtcbiAgdmFyIG1hdGNoID0gdm9pZCAwO1xuICB2YXIgZGVmYXVsdF8gPSB2b2lkIDA7XG5cbiAgdmFyIF91cmkkc3BsaXQgPSB1cmkuc3BsaXQoXCI/XCIpLFxuICAgICAgdXJpUGF0aG5hbWUgPSBfdXJpJHNwbGl0WzBdO1xuXG4gIHZhciB1cmlTZWdtZW50cyA9IHNlZ21lbnRpemUodXJpUGF0aG5hbWUpO1xuICB2YXIgaXNSb290VXJpID0gdXJpU2VnbWVudHNbMF0gPT09IFwiXCI7XG4gIHZhciByYW5rZWQgPSByYW5rUm91dGVzKHJvdXRlcyk7XG5cbiAgZm9yICh2YXIgaSA9IDAsIGwgPSByYW5rZWQubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgdmFyIG1pc3NlZCA9IGZhbHNlO1xuICAgIHZhciByb3V0ZSA9IHJhbmtlZFtpXS5yb3V0ZTtcblxuICAgIGlmIChyb3V0ZS5kZWZhdWx0KSB7XG4gICAgICBkZWZhdWx0XyA9IHtcbiAgICAgICAgcm91dGU6IHJvdXRlLFxuICAgICAgICBwYXJhbXM6IHt9LFxuICAgICAgICB1cmk6IHVyaVxuICAgICAgfTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHZhciByb3V0ZVNlZ21lbnRzID0gc2VnbWVudGl6ZShyb3V0ZS5wYXRoKTtcbiAgICB2YXIgcGFyYW1zID0ge307XG4gICAgdmFyIG1heCA9IE1hdGgubWF4KHVyaVNlZ21lbnRzLmxlbmd0aCwgcm91dGVTZWdtZW50cy5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IDA7XG5cbiAgICBmb3IgKDsgaW5kZXggPCBtYXg7IGluZGV4KyspIHtcbiAgICAgIHZhciByb3V0ZVNlZ21lbnQgPSByb3V0ZVNlZ21lbnRzW2luZGV4XTtcbiAgICAgIHZhciB1cmlTZWdtZW50ID0gdXJpU2VnbWVudHNbaW5kZXhdO1xuXG4gICAgICBpZiAoaXNTcGxhdChyb3V0ZVNlZ21lbnQpKSB7XG4gICAgICAgIC8vIEhpdCBhIHNwbGF0LCBqdXN0IGdyYWIgdGhlIHJlc3QsIGFuZCByZXR1cm4gYSBtYXRjaFxuICAgICAgICAvLyB1cmk6ICAgL2ZpbGVzL2RvY3VtZW50cy93b3JrXG4gICAgICAgIC8vIHJvdXRlOiAvZmlsZXMvKlxuICAgICAgICB2YXIgcGFyYW0gPSByb3V0ZVNlZ21lbnQuc2xpY2UoMSkgfHwgXCIqXCI7XG4gICAgICAgIHBhcmFtc1twYXJhbV0gPSB1cmlTZWdtZW50cy5zbGljZShpbmRleCkubWFwKGRlY29kZVVSSUNvbXBvbmVudCkuam9pbihcIi9cIik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAodXJpU2VnbWVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIFVSSSBpcyBzaG9ydGVyIHRoYW4gdGhlIHJvdXRlLCBubyBtYXRjaFxuICAgICAgICAvLyB1cmk6ICAgL3VzZXJzXG4gICAgICAgIC8vIHJvdXRlOiAvdXNlcnMvOnVzZXJJZFxuICAgICAgICBtaXNzZWQgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgdmFyIGR5bmFtaWNNYXRjaCA9IHBhcmFtUmUuZXhlYyhyb3V0ZVNlZ21lbnQpO1xuXG4gICAgICBpZiAoZHluYW1pY01hdGNoICYmICFpc1Jvb3RVcmkpIHtcbiAgICAgICAgdmFyIG1hdGNoSXNOb3RSZXNlcnZlZCA9IHJlc2VydmVkTmFtZXMuaW5kZXhPZihkeW5hbWljTWF0Y2hbMV0pID09PSAtMTtcbiAgICAgICAgIW1hdGNoSXNOb3RSZXNlcnZlZCA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgXCI8Um91dGVyPiBkeW5hbWljIHNlZ21lbnQgXFxcIlwiICsgZHluYW1pY01hdGNoWzFdICsgXCJcXFwiIGlzIGEgcmVzZXJ2ZWQgbmFtZS4gUGxlYXNlIHVzZSBhIGRpZmZlcmVudCBuYW1lIGluIHBhdGggXFxcIlwiICsgcm91dGUucGF0aCArIFwiXFxcIi5cIikgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuICAgICAgICB2YXIgdmFsdWUgPSBkZWNvZGVVUklDb21wb25lbnQodXJpU2VnbWVudCk7XG4gICAgICAgIHBhcmFtc1tkeW5hbWljTWF0Y2hbMV1dID0gdmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKHJvdXRlU2VnbWVudCAhPT0gdXJpU2VnbWVudCkge1xuICAgICAgICAvLyBDdXJyZW50IHNlZ21lbnRzIGRvbid0IG1hdGNoLCBub3QgZHluYW1pYywgbm90IHNwbGF0LCBzbyBubyBtYXRjaFxuICAgICAgICAvLyB1cmk6ICAgL3VzZXJzLzEyMy9zZXR0aW5nc1xuICAgICAgICAvLyByb3V0ZTogL3VzZXJzLzppZC9wcm9maWxlXG4gICAgICAgIG1pc3NlZCA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghbWlzc2VkKSB7XG4gICAgICBtYXRjaCA9IHtcbiAgICAgICAgcm91dGU6IHJvdXRlLFxuICAgICAgICBwYXJhbXM6IHBhcmFtcyxcbiAgICAgICAgdXJpOiBcIi9cIiArIHVyaVNlZ21lbnRzLnNsaWNlKDAsIGluZGV4KS5qb2luKFwiL1wiKVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtYXRjaCB8fCBkZWZhdWx0XyB8fCBudWxsO1xufTsgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIG1hdGNoKHBhdGgsIHVyaSkgLSBNYXRjaGVzIGp1c3Qgb25lIHBhdGggdG8gYSB1cmksIGFsc28gbG9sXG5cblxudmFyIG1hdGNoID0gZnVuY3Rpb24gbWF0Y2gocGF0aCwgdXJpKSB7XG4gIHJldHVybiBwaWNrKFt7XG4gICAgcGF0aDogcGF0aFxuICB9XSwgdXJpKTtcbn07IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyByZXNvbHZlKHRvLCBiYXNlcGF0aClcbi8vXG4vLyBSZXNvbHZlcyBVUklzIGFzIHRob3VnaCBldmVyeSBwYXRoIGlzIGEgZGlyZWN0b3J5LCBubyBmaWxlcy4gIFJlbGF0aXZlIFVSSXNcbi8vIGluIHRoZSBicm93c2VyIGNhbiBmZWVsIGF3a3dhcmQgYmVjYXVzZSBub3Qgb25seSBjYW4geW91IGJlIFwiaW4gYSBkaXJlY3RvcnlcIlxuLy8geW91IGNhbiBiZSBcImF0IGEgZmlsZVwiLCB0b28uIEZvciBleGFtcGxlXG4vL1xuLy8gICAgIGJyb3dzZXJTcGVjUmVzb2x2ZSgnZm9vJywgJy9iYXIvJykgPT4gL2Jhci9mb29cbi8vICAgICBicm93c2VyU3BlY1Jlc29sdmUoJ2ZvbycsICcvYmFyJykgPT4gL2Zvb1xuLy9cbi8vIEJ1dCBvbiB0aGUgY29tbWFuZCBsaW5lIG9mIGEgZmlsZSBzeXN0ZW0sIGl0J3Mgbm90IGFzIGNvbXBsaWNhdGVkLCB5b3UgY2FuJ3Rcbi8vIGBjZGAgZnJvbSBhIGZpbGUsIG9ubHkgZGlyZWN0b3JpZXMuICBUaGlzIHdheSwgbGlua3MgaGF2ZSB0byBrbm93IGxlc3MgYWJvdXRcbi8vIHRoZWlyIGN1cnJlbnQgcGF0aC4gVG8gZ28gZGVlcGVyIHlvdSBjYW4gZG8gdGhpczpcbi8vXG4vLyAgICAgPExpbmsgdG89XCJkZWVwZXJcIi8+XG4vLyAgICAgLy8gaW5zdGVhZCBvZlxuLy8gICAgIDxMaW5rIHRvPWB7JHtwcm9wcy51cml9L2RlZXBlcn1gLz5cbi8vXG4vLyBKdXN0IGxpa2UgYGNkYCwgaWYgeW91IHdhbnQgdG8gZ28gZGVlcGVyIGZyb20gdGhlIGNvbW1hbmQgbGluZSwgeW91IGRvIHRoaXM6XG4vL1xuLy8gICAgIGNkIGRlZXBlclxuLy8gICAgICMgbm90XG4vLyAgICAgY2QgJChwd2QpL2RlZXBlclxuLy9cbi8vIEJ5IHRyZWF0aW5nIGV2ZXJ5IHBhdGggYXMgYSBkaXJlY3RvcnksIGxpbmtpbmcgdG8gcmVsYXRpdmUgcGF0aHMgc2hvdWxkXG4vLyByZXF1aXJlIGxlc3MgY29udGV4dHVhbCBpbmZvcm1hdGlvbiBhbmQgKGZpbmdlcnMgY3Jvc3NlZCkgYmUgbW9yZSBpbnR1aXRpdmUuXG5cblxudmFyIHJlc29sdmUgPSBmdW5jdGlvbiByZXNvbHZlKHRvLCBiYXNlKSB7XG4gIC8vIC9mb28vYmFyLCAvYmF6L3F1eCA9PiAvZm9vL2JhclxuICBpZiAoc3RhcnRzV2l0aCh0bywgXCIvXCIpKSB7XG4gICAgcmV0dXJuIHRvO1xuICB9XG5cbiAgdmFyIF90byRzcGxpdCA9IHRvLnNwbGl0KFwiP1wiKSxcbiAgICAgIHRvUGF0aG5hbWUgPSBfdG8kc3BsaXRbMF0sXG4gICAgICB0b1F1ZXJ5ID0gX3RvJHNwbGl0WzFdO1xuXG4gIHZhciBfYmFzZSRzcGxpdCA9IGJhc2Uuc3BsaXQoXCI/XCIpLFxuICAgICAgYmFzZVBhdGhuYW1lID0gX2Jhc2Ukc3BsaXRbMF07XG5cbiAgdmFyIHRvU2VnbWVudHMgPSBzZWdtZW50aXplKHRvUGF0aG5hbWUpO1xuICB2YXIgYmFzZVNlZ21lbnRzID0gc2VnbWVudGl6ZShiYXNlUGF0aG5hbWUpOyAvLyA/YT1iLCAvdXNlcnM/Yj1jID0+IC91c2Vycz9hPWJcblxuICBpZiAodG9TZWdtZW50c1swXSA9PT0gXCJcIikge1xuICAgIHJldHVybiBhZGRRdWVyeShiYXNlUGF0aG5hbWUsIHRvUXVlcnkpO1xuICB9IC8vIHByb2ZpbGUsIC91c2Vycy83ODkgPT4gL3VzZXJzLzc4OS9wcm9maWxlXG5cblxuICBpZiAoIXN0YXJ0c1dpdGgodG9TZWdtZW50c1swXSwgXCIuXCIpKSB7XG4gICAgdmFyIHBhdGhuYW1lID0gYmFzZVNlZ21lbnRzLmNvbmNhdCh0b1NlZ21lbnRzKS5qb2luKFwiL1wiKTtcbiAgICByZXR1cm4gYWRkUXVlcnkoKGJhc2VQYXRobmFtZSA9PT0gXCIvXCIgPyBcIlwiIDogXCIvXCIpICsgcGF0aG5hbWUsIHRvUXVlcnkpO1xuICB9IC8vIC4vICAgICAgICAgL3VzZXJzLzEyMyAgPT4gIC91c2Vycy8xMjNcbiAgLy8gLi4vICAgICAgICAvdXNlcnMvMTIzICA9PiAgL3VzZXJzXG4gIC8vIC4uLy4uICAgICAgL3VzZXJzLzEyMyAgPT4gIC9cbiAgLy8gLi4vLi4vb25lICAvYS9iL2MvZCAgICA9PiAgL2EvYi9vbmVcbiAgLy8gLi4vLi9vbmUgICAvYS9iL2MvZCAgICA9PiAgL2EvYi9jL29uZVxuXG5cbiAgdmFyIGFsbFNlZ21lbnRzID0gYmFzZVNlZ21lbnRzLmNvbmNhdCh0b1NlZ21lbnRzKTtcbiAgdmFyIHNlZ21lbnRzID0gW107XG5cbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBhbGxTZWdtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICB2YXIgc2VnbWVudCA9IGFsbFNlZ21lbnRzW2ldO1xuICAgIGlmIChzZWdtZW50ID09PSBcIi4uXCIpIHNlZ21lbnRzLnBvcCgpO2Vsc2UgaWYgKHNlZ21lbnQgIT09IFwiLlwiKSBzZWdtZW50cy5wdXNoKHNlZ21lbnQpO1xuICB9XG5cbiAgcmV0dXJuIGFkZFF1ZXJ5KFwiL1wiICsgc2VnbWVudHMuam9pbihcIi9cIiksIHRvUXVlcnkpO1xufTsgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIGluc2VydFBhcmFtcyhwYXRoLCBwYXJhbXMpXG5cblxudmFyIGluc2VydFBhcmFtcyA9IGZ1bmN0aW9uIGluc2VydFBhcmFtcyhwYXRoLCBwYXJhbXMpIHtcbiAgdmFyIF9wYXRoJHNwbGl0ID0gcGF0aC5zcGxpdChcIj9cIiksXG4gICAgICBwYXRoQmFzZSA9IF9wYXRoJHNwbGl0WzBdLFxuICAgICAgX3BhdGgkc3BsaXQkID0gX3BhdGgkc3BsaXRbMV0sXG4gICAgICBxdWVyeSA9IF9wYXRoJHNwbGl0JCA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IF9wYXRoJHNwbGl0JDtcblxuICB2YXIgc2VnbWVudHMgPSBzZWdtZW50aXplKHBhdGhCYXNlKTtcbiAgdmFyIGNvbnN0cnVjdGVkUGF0aCA9IFwiL1wiICsgc2VnbWVudHMubWFwKGZ1bmN0aW9uIChzZWdtZW50KSB7XG4gICAgdmFyIG1hdGNoID0gcGFyYW1SZS5leGVjKHNlZ21lbnQpO1xuICAgIHJldHVybiBtYXRjaCA/IHBhcmFtc1ttYXRjaFsxXV0gOiBzZWdtZW50O1xuICB9KS5qb2luKFwiL1wiKTtcbiAgdmFyIF9wYXJhbXMkbG9jYXRpb24gPSBwYXJhbXMubG9jYXRpb247XG4gIF9wYXJhbXMkbG9jYXRpb24gPSBfcGFyYW1zJGxvY2F0aW9uID09PSB1bmRlZmluZWQgPyB7fSA6IF9wYXJhbXMkbG9jYXRpb247XG4gIHZhciBfcGFyYW1zJGxvY2F0aW9uJHNlYXIgPSBfcGFyYW1zJGxvY2F0aW9uLnNlYXJjaCxcbiAgICAgIHNlYXJjaCA9IF9wYXJhbXMkbG9jYXRpb24kc2VhciA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IF9wYXJhbXMkbG9jYXRpb24kc2VhcjtcbiAgdmFyIHNlYXJjaFNwbGl0ID0gc2VhcmNoLnNwbGl0KFwiP1wiKVsxXSB8fCBcIlwiO1xuICBjb25zdHJ1Y3RlZFBhdGggPSBhZGRRdWVyeShjb25zdHJ1Y3RlZFBhdGgsIHF1ZXJ5LCBzZWFyY2hTcGxpdCk7XG4gIHJldHVybiBjb25zdHJ1Y3RlZFBhdGg7XG59O1xuXG52YXIgdmFsaWRhdGVSZWRpcmVjdCA9IGZ1bmN0aW9uIHZhbGlkYXRlUmVkaXJlY3QoZnJvbSwgdG8pIHtcbiAgdmFyIGZpbHRlciA9IGZ1bmN0aW9uIGZpbHRlcihzZWdtZW50KSB7XG4gICAgcmV0dXJuIGlzRHluYW1pYyhzZWdtZW50KTtcbiAgfTtcblxuICB2YXIgZnJvbVN0cmluZyA9IHNlZ21lbnRpemUoZnJvbSkuZmlsdGVyKGZpbHRlcikuc29ydCgpLmpvaW4oXCIvXCIpO1xuICB2YXIgdG9TdHJpbmcgPSBzZWdtZW50aXplKHRvKS5maWx0ZXIoZmlsdGVyKS5zb3J0KCkuam9pbihcIi9cIik7XG4gIHJldHVybiBmcm9tU3RyaW5nID09PSB0b1N0cmluZztcbn07IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBKdW5rXG5cblxudmFyIHBhcmFtUmUgPSAvXjooLispLztcbnZhciBTRUdNRU5UX1BPSU5UUyA9IDQ7XG52YXIgU1RBVElDX1BPSU5UUyA9IDM7XG52YXIgRFlOQU1JQ19QT0lOVFMgPSAyO1xudmFyIFNQTEFUX1BFTkFMVFkgPSAxO1xudmFyIFJPT1RfUE9JTlRTID0gMTtcblxudmFyIGlzUm9vdFNlZ21lbnQgPSBmdW5jdGlvbiBpc1Jvb3RTZWdtZW50KHNlZ21lbnQpIHtcbiAgcmV0dXJuIHNlZ21lbnQgPT09IFwiXCI7XG59O1xuXG52YXIgaXNEeW5hbWljID0gZnVuY3Rpb24gaXNEeW5hbWljKHNlZ21lbnQpIHtcbiAgcmV0dXJuIHBhcmFtUmUudGVzdChzZWdtZW50KTtcbn07XG5cbnZhciBpc1NwbGF0ID0gZnVuY3Rpb24gaXNTcGxhdChzZWdtZW50KSB7XG4gIHJldHVybiBzZWdtZW50ICYmIHNlZ21lbnRbMF0gPT09IFwiKlwiO1xufTtcblxudmFyIHJhbmtSb3V0ZSA9IGZ1bmN0aW9uIHJhbmtSb3V0ZShyb3V0ZSwgaW5kZXgpIHtcbiAgdmFyIHNjb3JlID0gcm91dGUuZGVmYXVsdCA/IDAgOiBzZWdtZW50aXplKHJvdXRlLnBhdGgpLnJlZHVjZShmdW5jdGlvbiAoc2NvcmUsIHNlZ21lbnQpIHtcbiAgICBzY29yZSArPSBTRUdNRU5UX1BPSU5UUztcbiAgICBpZiAoaXNSb290U2VnbWVudChzZWdtZW50KSkgc2NvcmUgKz0gUk9PVF9QT0lOVFM7ZWxzZSBpZiAoaXNEeW5hbWljKHNlZ21lbnQpKSBzY29yZSArPSBEWU5BTUlDX1BPSU5UUztlbHNlIGlmIChpc1NwbGF0KHNlZ21lbnQpKSBzY29yZSAtPSBTRUdNRU5UX1BPSU5UUyArIFNQTEFUX1BFTkFMVFk7ZWxzZSBzY29yZSArPSBTVEFUSUNfUE9JTlRTO1xuICAgIHJldHVybiBzY29yZTtcbiAgfSwgMCk7XG4gIHJldHVybiB7XG4gICAgcm91dGU6IHJvdXRlLFxuICAgIHNjb3JlOiBzY29yZSxcbiAgICBpbmRleDogaW5kZXhcbiAgfTtcbn07XG5cbnZhciByYW5rUm91dGVzID0gZnVuY3Rpb24gcmFua1JvdXRlcyhyb3V0ZXMpIHtcbiAgcmV0dXJuIHJvdXRlcy5tYXAocmFua1JvdXRlKS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgcmV0dXJuIGEuc2NvcmUgPCBiLnNjb3JlID8gMSA6IGEuc2NvcmUgPiBiLnNjb3JlID8gLTEgOiBhLmluZGV4IC0gYi5pbmRleDtcbiAgfSk7XG59O1xuXG52YXIgc2VnbWVudGl6ZSA9IGZ1bmN0aW9uIHNlZ21lbnRpemUodXJpKSB7XG4gIHJldHVybiB1cmkgLy8gc3RyaXAgc3RhcnRpbmcvZW5kaW5nIHNsYXNoZXNcbiAgLnJlcGxhY2UoLyheXFwvK3xcXC8rJCkvZywgXCJcIikuc3BsaXQoXCIvXCIpO1xufTtcblxudmFyIGFkZFF1ZXJ5ID0gZnVuY3Rpb24gYWRkUXVlcnkocGF0aG5hbWUpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHF1ZXJ5ID0gQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIHF1ZXJ5W19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuXG4gIHF1ZXJ5ID0gcXVlcnkuZmlsdGVyKGZ1bmN0aW9uIChxKSB7XG4gICAgcmV0dXJuIHEgJiYgcS5sZW5ndGggPiAwO1xuICB9KTtcbiAgcmV0dXJuIHBhdGhuYW1lICsgKHF1ZXJ5ICYmIHF1ZXJ5Lmxlbmd0aCA+IDAgPyBcIj9cIiArIHF1ZXJ5LmpvaW4oXCImXCIpIDogXCJcIik7XG59O1xuXG52YXIgcmVzZXJ2ZWROYW1lcyA9IFtcInVyaVwiLCBcInBhdGhcIl07XG4vKipcbiAqIFNoYWxsb3cgY29tcGFyZXMgdHdvIG9iamVjdHMuXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqMSBUaGUgZmlyc3Qgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqMiBUaGUgc2Vjb25kIG9iamVjdCB0byBjb21wYXJlLlxuICovXG5cbnZhciBzaGFsbG93Q29tcGFyZSA9IGZ1bmN0aW9uIHNoYWxsb3dDb21wYXJlKG9iajEsIG9iajIpIHtcbiAgdmFyIG9iajFLZXlzID0gT2JqZWN0LmtleXMob2JqMSk7XG4gIHJldHVybiBvYmoxS2V5cy5sZW5ndGggPT09IE9iamVjdC5rZXlzKG9iajIpLmxlbmd0aCAmJiBvYmoxS2V5cy5ldmVyeShmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuIG9iajIuaGFzT3duUHJvcGVydHkoa2V5KSAmJiBvYmoxW2tleV0gPT09IG9iajJba2V5XTtcbiAgfSk7XG59OyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5cbmV4cG9ydCB7IHN0YXJ0c1dpdGgsIHBpY2ssIG1hdGNoLCByZXNvbHZlLCBpbnNlcnRQYXJhbXMsIHZhbGlkYXRlUmVkaXJlY3QsIHNoYWxsb3dDb21wYXJlIH07IiwidmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTtcblxuICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn07XG5cbnZhciBnZXRMb2NhdGlvbiA9IGZ1bmN0aW9uIGdldExvY2F0aW9uKHNvdXJjZSkge1xuICB2YXIgX3NvdXJjZSRsb2NhdGlvbiA9IHNvdXJjZS5sb2NhdGlvbixcbiAgICAgIHNlYXJjaCA9IF9zb3VyY2UkbG9jYXRpb24uc2VhcmNoLFxuICAgICAgaGFzaCA9IF9zb3VyY2UkbG9jYXRpb24uaGFzaCxcbiAgICAgIGhyZWYgPSBfc291cmNlJGxvY2F0aW9uLmhyZWYsXG4gICAgICBvcmlnaW4gPSBfc291cmNlJGxvY2F0aW9uLm9yaWdpbixcbiAgICAgIHByb3RvY29sID0gX3NvdXJjZSRsb2NhdGlvbi5wcm90b2NvbCxcbiAgICAgIGhvc3QgPSBfc291cmNlJGxvY2F0aW9uLmhvc3QsXG4gICAgICBob3N0bmFtZSA9IF9zb3VyY2UkbG9jYXRpb24uaG9zdG5hbWUsXG4gICAgICBwb3J0ID0gX3NvdXJjZSRsb2NhdGlvbi5wb3J0O1xuICB2YXIgcGF0aG5hbWUgPSBzb3VyY2UubG9jYXRpb24ucGF0aG5hbWU7XG5cbiAgaWYgKCFwYXRobmFtZSAmJiBocmVmICYmIGNhblVzZURPTSkge1xuICAgIHZhciB1cmwgPSBuZXcgVVJMKGhyZWYpO1xuICAgIHBhdGhuYW1lID0gdXJsLnBhdGhuYW1lO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBwYXRobmFtZTogZW5jb2RlVVJJKGRlY29kZVVSSShwYXRobmFtZSkpLFxuICAgIHNlYXJjaDogc2VhcmNoLFxuICAgIGhhc2g6IGhhc2gsXG4gICAgaHJlZjogaHJlZixcbiAgICBvcmlnaW46IG9yaWdpbixcbiAgICBwcm90b2NvbDogcHJvdG9jb2wsXG4gICAgaG9zdDogaG9zdCxcbiAgICBob3N0bmFtZTogaG9zdG5hbWUsXG4gICAgcG9ydDogcG9ydCxcbiAgICBzdGF0ZTogc291cmNlLmhpc3Rvcnkuc3RhdGUsXG4gICAga2V5OiBzb3VyY2UuaGlzdG9yeS5zdGF0ZSAmJiBzb3VyY2UuaGlzdG9yeS5zdGF0ZS5rZXkgfHwgXCJpbml0aWFsXCJcbiAgfTtcbn07XG5cbnZhciBjcmVhdGVIaXN0b3J5ID0gZnVuY3Rpb24gY3JlYXRlSGlzdG9yeShzb3VyY2UsIG9wdGlvbnMpIHtcbiAgdmFyIGxpc3RlbmVycyA9IFtdO1xuICB2YXIgbG9jYXRpb24gPSBnZXRMb2NhdGlvbihzb3VyY2UpO1xuICB2YXIgdHJhbnNpdGlvbmluZyA9IGZhbHNlO1xuXG4gIHZhciByZXNvbHZlVHJhbnNpdGlvbiA9IGZ1bmN0aW9uIHJlc29sdmVUcmFuc2l0aW9uKCkge307XG5cbiAgcmV0dXJuIHtcbiAgICBnZXQgbG9jYXRpb24oKSB7XG4gICAgICByZXR1cm4gbG9jYXRpb247XG4gICAgfSxcblxuICAgIGdldCB0cmFuc2l0aW9uaW5nKCkge1xuICAgICAgcmV0dXJuIHRyYW5zaXRpb25pbmc7XG4gICAgfSxcblxuICAgIF9vblRyYW5zaXRpb25Db21wbGV0ZTogZnVuY3Rpb24gX29uVHJhbnNpdGlvbkNvbXBsZXRlKCkge1xuICAgICAgdHJhbnNpdGlvbmluZyA9IGZhbHNlO1xuICAgICAgcmVzb2x2ZVRyYW5zaXRpb24oKTtcbiAgICB9LFxuICAgIGxpc3RlbjogZnVuY3Rpb24gbGlzdGVuKGxpc3RlbmVyKSB7XG4gICAgICBsaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG5cbiAgICAgIHZhciBwb3BzdGF0ZUxpc3RlbmVyID0gZnVuY3Rpb24gcG9wc3RhdGVMaXN0ZW5lcigpIHtcbiAgICAgICAgbG9jYXRpb24gPSBnZXRMb2NhdGlvbihzb3VyY2UpO1xuICAgICAgICBsaXN0ZW5lcih7XG4gICAgICAgICAgbG9jYXRpb246IGxvY2F0aW9uLFxuICAgICAgICAgIGFjdGlvbjogXCJQT1BcIlxuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIHNvdXJjZS5hZGRFdmVudExpc3RlbmVyKFwicG9wc3RhdGVcIiwgcG9wc3RhdGVMaXN0ZW5lcik7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICBzb3VyY2UucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvcHN0YXRlXCIsIHBvcHN0YXRlTGlzdGVuZXIpO1xuICAgICAgICBsaXN0ZW5lcnMgPSBsaXN0ZW5lcnMuZmlsdGVyKGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgIHJldHVybiBmbiAhPT0gbGlzdGVuZXI7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICB9LFxuICAgIG5hdmlnYXRlOiBmdW5jdGlvbiBuYXZpZ2F0ZSh0bykge1xuICAgICAgdmFyIF9yZWYgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9LFxuICAgICAgICAgIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgICAgICBfcmVmJHJlcGxhY2UgPSBfcmVmLnJlcGxhY2UsXG4gICAgICAgICAgcmVwbGFjZSA9IF9yZWYkcmVwbGFjZSA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiBfcmVmJHJlcGxhY2U7XG5cbiAgICAgIGlmICh0eXBlb2YgdG8gPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgc291cmNlLmhpc3RvcnkuZ28odG8pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhdGUgPSBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgICBrZXk6IERhdGUubm93KCkgKyBcIlwiXG4gICAgICAgIH0pOyAvLyB0cnkuLi5jYXRjaCBpT1MgU2FmYXJpIGxpbWl0cyB0byAxMDAgcHVzaFN0YXRlIGNhbGxzXG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAodHJhbnNpdGlvbmluZyB8fCByZXBsYWNlKSB7XG4gICAgICAgICAgICBzb3VyY2UuaGlzdG9yeS5yZXBsYWNlU3RhdGUoc3RhdGUsIG51bGwsIHRvKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc291cmNlLmhpc3RvcnkucHVzaFN0YXRlKHN0YXRlLCBudWxsLCB0byk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgc291cmNlLmxvY2F0aW9uW3JlcGxhY2UgPyBcInJlcGxhY2VcIiA6IFwiYXNzaWduXCJdKHRvKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsb2NhdGlvbiA9IGdldExvY2F0aW9uKHNvdXJjZSk7XG4gICAgICB0cmFuc2l0aW9uaW5nID0gdHJ1ZTtcbiAgICAgIHZhciB0cmFuc2l0aW9uID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlcykge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZVRyYW5zaXRpb24gPSByZXM7XG4gICAgICB9KTtcbiAgICAgIGxpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uIChsaXN0ZW5lcikge1xuICAgICAgICByZXR1cm4gbGlzdGVuZXIoe1xuICAgICAgICAgIGxvY2F0aW9uOiBsb2NhdGlvbixcbiAgICAgICAgICBhY3Rpb246IFwiUFVTSFwiXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gdHJhbnNpdGlvbjtcbiAgICB9XG4gIH07XG59OyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gU3RvcmVzIGhpc3RvcnkgZW50cmllcyBpbiBtZW1vcnkgZm9yIHRlc3Rpbmcgb3Igb3RoZXIgcGxhdGZvcm1zIGxpa2UgTmF0aXZlXG5cblxudmFyIGNyZWF0ZU1lbW9yeVNvdXJjZSA9IGZ1bmN0aW9uIGNyZWF0ZU1lbW9yeVNvdXJjZSgpIHtcbiAgdmFyIGluaXRpYWxQYXRoID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBcIi9cIjtcbiAgdmFyIHNlYXJjaEluZGV4ID0gaW5pdGlhbFBhdGguaW5kZXhPZihcIj9cIik7XG4gIHZhciBpbml0aWFsTG9jYXRpb24gPSB7XG4gICAgcGF0aG5hbWU6IHNlYXJjaEluZGV4ID4gLTEgPyBpbml0aWFsUGF0aC5zdWJzdHIoMCwgc2VhcmNoSW5kZXgpIDogaW5pdGlhbFBhdGgsXG4gICAgc2VhcmNoOiBzZWFyY2hJbmRleCA+IC0xID8gaW5pdGlhbFBhdGguc3Vic3RyKHNlYXJjaEluZGV4KSA6IFwiXCJcbiAgfTtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIHN0YWNrID0gW2luaXRpYWxMb2NhdGlvbl07XG4gIHZhciBzdGF0ZXMgPSBbbnVsbF07XG4gIHJldHVybiB7XG4gICAgZ2V0IGxvY2F0aW9uKCkge1xuICAgICAgcmV0dXJuIHN0YWNrW2luZGV4XTtcbiAgICB9LFxuXG4gICAgYWRkRXZlbnRMaXN0ZW5lcjogZnVuY3Rpb24gYWRkRXZlbnRMaXN0ZW5lcihuYW1lLCBmbikge30sXG4gICAgcmVtb3ZlRXZlbnRMaXN0ZW5lcjogZnVuY3Rpb24gcmVtb3ZlRXZlbnRMaXN0ZW5lcihuYW1lLCBmbikge30sXG4gICAgaGlzdG9yeToge1xuICAgICAgZ2V0IGVudHJpZXMoKSB7XG4gICAgICAgIHJldHVybiBzdGFjaztcbiAgICAgIH0sXG5cbiAgICAgIGdldCBpbmRleCgpIHtcbiAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgICAgfSxcblxuICAgICAgZ2V0IHN0YXRlKCkge1xuICAgICAgICByZXR1cm4gc3RhdGVzW2luZGV4XTtcbiAgICAgIH0sXG5cbiAgICAgIHB1c2hTdGF0ZTogZnVuY3Rpb24gcHVzaFN0YXRlKHN0YXRlLCBfLCB1cmkpIHtcbiAgICAgICAgdmFyIF91cmkkc3BsaXQgPSB1cmkuc3BsaXQoXCI/XCIpLFxuICAgICAgICAgICAgcGF0aG5hbWUgPSBfdXJpJHNwbGl0WzBdLFxuICAgICAgICAgICAgX3VyaSRzcGxpdCQgPSBfdXJpJHNwbGl0WzFdLFxuICAgICAgICAgICAgc2VhcmNoID0gX3VyaSRzcGxpdCQgPT09IHVuZGVmaW5lZCA/IFwiXCIgOiBfdXJpJHNwbGl0JDtcblxuICAgICAgICBpbmRleCsrO1xuICAgICAgICBzdGFjay5wdXNoKHtcbiAgICAgICAgICBwYXRobmFtZTogcGF0aG5hbWUsXG4gICAgICAgICAgc2VhcmNoOiBzZWFyY2gubGVuZ3RoID8gXCI/XCIgKyBzZWFyY2ggOiBzZWFyY2hcbiAgICAgICAgfSk7XG4gICAgICAgIHN0YXRlcy5wdXNoKHN0YXRlKTtcbiAgICAgIH0sXG4gICAgICByZXBsYWNlU3RhdGU6IGZ1bmN0aW9uIHJlcGxhY2VTdGF0ZShzdGF0ZSwgXywgdXJpKSB7XG4gICAgICAgIHZhciBfdXJpJHNwbGl0MiA9IHVyaS5zcGxpdChcIj9cIiksXG4gICAgICAgICAgICBwYXRobmFtZSA9IF91cmkkc3BsaXQyWzBdLFxuICAgICAgICAgICAgX3VyaSRzcGxpdDIkID0gX3VyaSRzcGxpdDJbMV0sXG4gICAgICAgICAgICBzZWFyY2ggPSBfdXJpJHNwbGl0MiQgPT09IHVuZGVmaW5lZCA/IFwiXCIgOiBfdXJpJHNwbGl0MiQ7XG5cbiAgICAgICAgc3RhY2tbaW5kZXhdID0ge1xuICAgICAgICAgIHBhdGhuYW1lOiBwYXRobmFtZSxcbiAgICAgICAgICBzZWFyY2g6IHNlYXJjaFxuICAgICAgICB9O1xuICAgICAgICBzdGF0ZXNbaW5kZXhdID0gc3RhdGU7XG4gICAgICB9LFxuICAgICAgZ286IGZ1bmN0aW9uIGdvKHRvKSB7XG4gICAgICAgIHZhciBuZXdJbmRleCA9IGluZGV4ICsgdG87XG5cbiAgICAgICAgaWYgKG5ld0luZGV4IDwgMCB8fCBuZXdJbmRleCA+IHN0YXRlcy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5kZXggPSBuZXdJbmRleDtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59OyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gZ2xvYmFsIGhpc3RvcnkgLSB1c2VzIHdpbmRvdy5oaXN0b3J5IGFzIHRoZSBzb3VyY2UgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgYVxuLy8gbWVtb3J5IGhpc3RvcnlcblxuXG52YXIgY2FuVXNlRE9NID0gISEodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB3aW5kb3cuZG9jdW1lbnQgJiYgd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xuXG52YXIgZ2V0U291cmNlID0gZnVuY3Rpb24gZ2V0U291cmNlKCkge1xuICByZXR1cm4gY2FuVXNlRE9NID8gd2luZG93IDogY3JlYXRlTWVtb3J5U291cmNlKCk7XG59O1xuXG52YXIgZ2xvYmFsSGlzdG9yeSA9IGNyZWF0ZUhpc3RvcnkoZ2V0U291cmNlKCkpO1xudmFyIG5hdmlnYXRlID0gZ2xvYmFsSGlzdG9yeS5uYXZpZ2F0ZTsgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuZXhwb3J0IHsgZ2xvYmFsSGlzdG9yeSwgbmF2aWdhdGUsIGNyZWF0ZUhpc3RvcnksIGNyZWF0ZU1lbW9yeVNvdXJjZSB9OyIsInZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkge1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59O1xuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob2JqLCBrZXlzKSB7XG4gIHZhciB0YXJnZXQgPSB7fTtcblxuICBmb3IgKHZhciBpIGluIG9iaikge1xuICAgIGlmIChrZXlzLmluZGV4T2YoaSkgPj0gMCkgY29udGludWU7XG4gICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBpKSkgY29udGludWU7XG4gICAgdGFyZ2V0W2ldID0gb2JqW2ldO1xuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkge1xuICBpZiAoIXNlbGYpIHtcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIH1cblxuICByZXR1cm4gY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikgPyBjYWxsIDogc2VsZjtcbn1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIiArIHR5cGVvZiBzdXBlckNsYXNzKTtcbiAgfVxuXG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwge1xuICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICB2YWx1ZTogc3ViQ2xhc3MsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfVxuICB9KTtcbiAgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzO1xufVxuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvYW5jaG9yLWhhcy1jb250ZW50ICovXG5cblxuaW1wb3J0IFJlYWN0LCB7IHVzZUNvbnRleHQsIGNyZWF0ZUNvbnRleHQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBpbnZhcmlhbnQgZnJvbSBcImludmFyaWFudFwiO1xuaW1wb3J0IHsgcG9seWZpbGwgfSBmcm9tIFwicmVhY3QtbGlmZWN5Y2xlcy1jb21wYXRcIjtcbmltcG9ydCB7IHN0YXJ0c1dpdGgsIHBpY2ssIHJlc29sdmUsIG1hdGNoLCBpbnNlcnRQYXJhbXMsIHZhbGlkYXRlUmVkaXJlY3QsIHNoYWxsb3dDb21wYXJlIH0gZnJvbSBcIi4vbGliL3V0aWxzXCI7XG5pbXBvcnQgeyBnbG9iYWxIaXN0b3J5LCBuYXZpZ2F0ZSwgY3JlYXRlSGlzdG9yeSwgY3JlYXRlTWVtb3J5U291cmNlIH0gZnJvbSBcIi4vbGliL2hpc3RvcnlcIjsgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxudmFyIGNyZWF0ZU5hbWVkQ29udGV4dCA9IGZ1bmN0aW9uIGNyZWF0ZU5hbWVkQ29udGV4dChuYW1lLCBkZWZhdWx0VmFsdWUpIHtcbiAgdmFyIEN0eCA9IGNyZWF0ZUNvbnRleHQoZGVmYXVsdFZhbHVlKTtcbiAgQ3R4LmRpc3BsYXlOYW1lID0gbmFtZTtcbiAgcmV0dXJuIEN0eDtcbn07IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBMb2NhdGlvbiBDb250ZXh0L1Byb3ZpZGVyXG5cblxudmFyIExvY2F0aW9uQ29udGV4dCA9IGNyZWF0ZU5hbWVkQ29udGV4dChcIkxvY2F0aW9uXCIpOyAvLyBzZXRzIHVwIGEgbGlzdGVuZXIgaWYgdGhlcmUgaXNuJ3Qgb25lIGFscmVhZHkgc28gYXBwcyBkb24ndCBuZWVkIHRvIGJlXG4vLyB3cmFwcGVkIGluIHNvbWUgdG9wIGxldmVsIHByb3ZpZGVyXG5cbnZhciBMb2NhdGlvbiA9IGZ1bmN0aW9uIExvY2F0aW9uKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbjtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTG9jYXRpb25Db250ZXh0LkNvbnN1bWVyLCBudWxsLCBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgIHJldHVybiBjb250ZXh0ID8gY2hpbGRyZW4oY29udGV4dCkgOiBSZWFjdC5jcmVhdGVFbGVtZW50KExvY2F0aW9uUHJvdmlkZXIsIG51bGwsIGNoaWxkcmVuKTtcbiAgfSk7XG59O1xuXG52YXIgTG9jYXRpb25Qcm92aWRlciA9IGZ1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhMb2NhdGlvblByb3ZpZGVyLCBfUmVhY3QkQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBMb2NhdGlvblByb3ZpZGVyKCkge1xuICAgIHZhciBfdGVtcCwgX3RoaXMsIF9yZXQ7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgTG9jYXRpb25Qcm92aWRlcik7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICByZXR1cm4gX3JldCA9IChfdGVtcCA9IChfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9SZWFjdCRDb21wb25lbnQuY2FsbC5hcHBseShfUmVhY3QkQ29tcG9uZW50LCBbdGhpc10uY29uY2F0KGFyZ3MpKSksIF90aGlzKSwgX3RoaXMuc3RhdGUgPSB7XG4gICAgICBjb250ZXh0OiBfdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICByZWZzOiB7XG4gICAgICAgIHVubGlzdGVuOiBudWxsXG4gICAgICB9XG4gICAgfSwgX3RlbXApLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihfdGhpcywgX3JldCk7XG4gIH1cblxuICBMb2NhdGlvblByb3ZpZGVyLnByb3RvdHlwZS5nZXRDb250ZXh0ID0gZnVuY3Rpb24gZ2V0Q29udGV4dCgpIHtcbiAgICB2YXIgX3Byb3BzJGhpc3RvcnkgPSB0aGlzLnByb3BzLmhpc3RvcnksXG4gICAgICAgIG5hdmlnYXRlID0gX3Byb3BzJGhpc3RvcnkubmF2aWdhdGUsXG4gICAgICAgIGxvY2F0aW9uID0gX3Byb3BzJGhpc3RvcnkubG9jYXRpb247XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hdmlnYXRlOiBuYXZpZ2F0ZSxcbiAgICAgIGxvY2F0aW9uOiBsb2NhdGlvblxuICAgIH07XG4gIH07XG5cbiAgTG9jYXRpb25Qcm92aWRlci5wcm90b3R5cGUuY29tcG9uZW50RGlkQ2F0Y2ggPSBmdW5jdGlvbiBjb21wb25lbnREaWRDYXRjaChlcnJvciwgaW5mbykge1xuICAgIGlmIChpc1JlZGlyZWN0KGVycm9yKSkge1xuICAgICAgdmFyIF9uYXZpZ2F0ZSA9IHRoaXMucHJvcHMuaGlzdG9yeS5uYXZpZ2F0ZTtcblxuICAgICAgX25hdmlnYXRlKGVycm9yLnVyaSwge1xuICAgICAgICByZXBsYWNlOiB0cnVlXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9O1xuXG4gIExvY2F0aW9uUHJvdmlkZXIucHJvdG90eXBlLmNvbXBvbmVudERpZFVwZGF0ZSA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSkge1xuICAgIGlmIChwcmV2U3RhdGUuY29udGV4dC5sb2NhdGlvbiAhPT0gdGhpcy5zdGF0ZS5jb250ZXh0LmxvY2F0aW9uKSB7XG4gICAgICB0aGlzLnByb3BzLmhpc3RvcnkuX29uVHJhbnNpdGlvbkNvbXBsZXRlKCk7XG4gICAgfVxuICB9O1xuXG4gIExvY2F0aW9uUHJvdmlkZXIucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICB2YXIgcmVmcyA9IHRoaXMuc3RhdGUucmVmcyxcbiAgICAgICAgaGlzdG9yeSA9IHRoaXMucHJvcHMuaGlzdG9yeTtcblxuICAgIGhpc3RvcnkuX29uVHJhbnNpdGlvbkNvbXBsZXRlKCk7XG5cbiAgICByZWZzLnVubGlzdGVuID0gaGlzdG9yeS5saXN0ZW4oZnVuY3Rpb24gKCkge1xuICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIFRPRE86IHJlcGxhY2UgckFGIHdpdGggcmVhY3QgZGVmZXJyZWQgdXBkYXRlIEFQSSB3aGVuIGl0J3MgcmVhZHkgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMzMwNlxuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmICghX3RoaXMyLnVubW91bnRlZCkge1xuICAgICAgICAgICAgX3RoaXMyLnNldFN0YXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiBfdGhpczIuZ2V0Q29udGV4dCgpXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgTG9jYXRpb25Qcm92aWRlci5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB2YXIgcmVmcyA9IHRoaXMuc3RhdGUucmVmcztcbiAgICB0aGlzLnVubW91bnRlZCA9IHRydWU7XG4gICAgcmVmcy51bmxpc3RlbigpO1xuICB9O1xuXG4gIExvY2F0aW9uUHJvdmlkZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICB2YXIgY29udGV4dCA9IHRoaXMuc3RhdGUuY29udGV4dCxcbiAgICAgICAgY2hpbGRyZW4gPSB0aGlzLnByb3BzLmNoaWxkcmVuO1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KExvY2F0aW9uQ29udGV4dC5Qcm92aWRlciwge1xuICAgICAgdmFsdWU6IGNvbnRleHRcbiAgICB9LCB0eXBlb2YgY2hpbGRyZW4gPT09IFwiZnVuY3Rpb25cIiA/IGNoaWxkcmVuKGNvbnRleHQpIDogY2hpbGRyZW4gfHwgbnVsbCk7XG4gIH07XG5cbiAgcmV0dXJuIExvY2F0aW9uUHJvdmlkZXI7XG59KFJlYWN0LkNvbXBvbmVudCk7IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cblxuTG9jYXRpb25Qcm92aWRlci5kZWZhdWx0UHJvcHMgPSB7XG4gIGhpc3Rvcnk6IGdsb2JhbEhpc3Rvcnlcbn07XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB2b2lkIDAgOiB2b2lkIDA7XG5cbnZhciBTZXJ2ZXJMb2NhdGlvbiA9IGZ1bmN0aW9uIFNlcnZlckxvY2F0aW9uKF9yZWYyKSB7XG4gIHZhciB1cmwgPSBfcmVmMi51cmwsXG4gICAgICBjaGlsZHJlbiA9IF9yZWYyLmNoaWxkcmVuO1xuICB2YXIgc2VhcmNoSW5kZXggPSB1cmwuaW5kZXhPZihcIj9cIik7XG4gIHZhciBzZWFyY2hFeGlzdHMgPSBzZWFyY2hJbmRleCA+IC0xO1xuICB2YXIgcGF0aG5hbWUgPSB2b2lkIDA7XG4gIHZhciBzZWFyY2ggPSBcIlwiO1xuICB2YXIgaGFzaCA9IFwiXCI7XG5cbiAgaWYgKHNlYXJjaEV4aXN0cykge1xuICAgIHBhdGhuYW1lID0gdXJsLnN1YnN0cmluZygwLCBzZWFyY2hJbmRleCk7XG4gICAgc2VhcmNoID0gdXJsLnN1YnN0cmluZyhzZWFyY2hJbmRleCk7XG4gIH0gZWxzZSB7XG4gICAgcGF0aG5hbWUgPSB1cmw7XG4gIH1cblxuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChMb2NhdGlvbkNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZToge1xuICAgICAgbG9jYXRpb246IHtcbiAgICAgICAgcGF0aG5hbWU6IHBhdGhuYW1lLFxuICAgICAgICBzZWFyY2g6IHNlYXJjaCxcbiAgICAgICAgaGFzaDogaGFzaFxuICAgICAgfSxcbiAgICAgIG5hdmlnYXRlOiBmdW5jdGlvbiBuYXZpZ2F0ZSgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiWW91IGNhbid0IGNhbGwgbmF2aWdhdGUgb24gdGhlIHNlcnZlci5cIik7XG4gICAgICB9XG4gICAgfVxuICB9LCBjaGlsZHJlbik7XG59OyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gU2V0cyBiYXNldXJpIGFuZCBiYXNlcGF0aCBmb3IgbmVzdGVkIHJvdXRlcnMgYW5kIGxpbmtzXG5cblxudmFyIEJhc2VDb250ZXh0ID0gY3JlYXRlTmFtZWRDb250ZXh0KFwiQmFzZVwiLCB7XG4gIGJhc2V1cmk6IFwiL1wiLFxuICBiYXNlcGF0aDogXCIvXCIsXG4gIG5hdmlnYXRlOiBnbG9iYWxIaXN0b3J5Lm5hdmlnYXRlXG59KTsgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFRoZSBtYWluIGV2ZW50LCB3ZWxjb21lIHRvIHRoZSBzaG93IGV2ZXJ5Ym9keS5cblxudmFyIFJvdXRlciA9IGZ1bmN0aW9uIFJvdXRlcihwcm9wcykge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChCYXNlQ29udGV4dC5Db25zdW1lciwgbnVsbCwgZnVuY3Rpb24gKGJhc2VDb250ZXh0KSB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTG9jYXRpb24sIG51bGwsIGZ1bmN0aW9uIChsb2NhdGlvbkNvbnRleHQpIHtcbiAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFJvdXRlckltcGwsIF9leHRlbmRzKHt9LCBiYXNlQ29udGV4dCwgbG9jYXRpb25Db250ZXh0LCBwcm9wcykpO1xuICAgIH0pO1xuICB9KTtcbn07XG5cbnZhciBSb3V0ZXJJbXBsID0gZnVuY3Rpb24gKF9SZWFjdCRQdXJlQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhSb3V0ZXJJbXBsLCBfUmVhY3QkUHVyZUNvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gUm91dGVySW1wbCgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUm91dGVySW1wbCk7XG5cbiAgICByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX1JlYWN0JFB1cmVDb21wb25lbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG4gIH1cblxuICBSb3V0ZXJJbXBsLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgdmFyIF9wcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgIGxvY2F0aW9uID0gX3Byb3BzLmxvY2F0aW9uLFxuICAgICAgICBfbmF2aWdhdGUyID0gX3Byb3BzLm5hdmlnYXRlLFxuICAgICAgICBiYXNlcGF0aCA9IF9wcm9wcy5iYXNlcGF0aCxcbiAgICAgICAgcHJpbWFyeSA9IF9wcm9wcy5wcmltYXJ5LFxuICAgICAgICBjaGlsZHJlbiA9IF9wcm9wcy5jaGlsZHJlbixcbiAgICAgICAgYmFzZXVyaSA9IF9wcm9wcy5iYXNldXJpLFxuICAgICAgICBfcHJvcHMkY29tcG9uZW50ID0gX3Byb3BzLmNvbXBvbmVudCxcbiAgICAgICAgY29tcG9uZW50ID0gX3Byb3BzJGNvbXBvbmVudCA9PT0gdW5kZWZpbmVkID8gXCJkaXZcIiA6IF9wcm9wcyRjb21wb25lbnQsXG4gICAgICAgIGRvbVByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9wcm9wcywgW1wibG9jYXRpb25cIiwgXCJuYXZpZ2F0ZVwiLCBcImJhc2VwYXRoXCIsIFwicHJpbWFyeVwiLCBcImNoaWxkcmVuXCIsIFwiYmFzZXVyaVwiLCBcImNvbXBvbmVudFwiXSk7XG5cbiAgICB2YXIgcm91dGVzID0gUmVhY3QuQ2hpbGRyZW4udG9BcnJheShjaGlsZHJlbikucmVkdWNlKGZ1bmN0aW9uIChhcnJheSwgY2hpbGQpIHtcbiAgICAgIHZhciByb3V0ZXMgPSBjcmVhdGVSb3V0ZShiYXNlcGF0aCkoY2hpbGQpO1xuICAgICAgcmV0dXJuIGFycmF5LmNvbmNhdChyb3V0ZXMpO1xuICAgIH0sIFtdKTtcbiAgICB2YXIgcGF0aG5hbWUgPSBsb2NhdGlvbi5wYXRobmFtZTtcbiAgICB2YXIgbWF0Y2ggPSBwaWNrKHJvdXRlcywgcGF0aG5hbWUpO1xuXG4gICAgaWYgKG1hdGNoKSB7XG4gICAgICB2YXIgcGFyYW1zID0gbWF0Y2gucGFyYW1zLFxuICAgICAgICAgIHVyaSA9IG1hdGNoLnVyaSxcbiAgICAgICAgICByb3V0ZSA9IG1hdGNoLnJvdXRlLFxuICAgICAgICAgIGVsZW1lbnQgPSBtYXRjaC5yb3V0ZS52YWx1ZTsgLy8gcmVtb3ZlIHRoZSAvKiBmcm9tIHRoZSBlbmQgZm9yIGNoaWxkIHJvdXRlcyByZWxhdGl2ZSBwYXRoc1xuXG4gICAgICBiYXNlcGF0aCA9IHJvdXRlLmRlZmF1bHQgPyBiYXNlcGF0aCA6IHJvdXRlLnBhdGgucmVwbGFjZSgvXFwqJC8sIFwiXCIpO1xuXG4gICAgICB2YXIgcHJvcHMgPSBfZXh0ZW5kcyh7fSwgcGFyYW1zLCB7XG4gICAgICAgIHVyaTogdXJpLFxuICAgICAgICBsb2NhdGlvbjogbG9jYXRpb24sXG4gICAgICAgIG5hdmlnYXRlOiBmdW5jdGlvbiBuYXZpZ2F0ZSh0bywgb3B0aW9ucykge1xuICAgICAgICAgIHJldHVybiBfbmF2aWdhdGUyKHJlc29sdmUodG8sIHVyaSksIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdmFyIGNsb25lID0gUmVhY3QuY2xvbmVFbGVtZW50KGVsZW1lbnQsIHByb3BzLCBlbGVtZW50LnByb3BzLmNoaWxkcmVuID8gUmVhY3QuY3JlYXRlRWxlbWVudChSb3V0ZXIsIHtcbiAgICAgICAgbG9jYXRpb246IGxvY2F0aW9uLFxuICAgICAgICBwcmltYXJ5OiBwcmltYXJ5XG4gICAgICB9LCBlbGVtZW50LnByb3BzLmNoaWxkcmVuKSA6IHVuZGVmaW5lZCk7IC8vIHVzaW5nICdkaXYnIGZvciA8IDE2LjMgc3VwcG9ydFxuXG4gICAgICB2YXIgRm9jdXNXcmFwcGVyID0gcHJpbWFyeSA/IEZvY3VzSGFuZGxlciA6IGNvbXBvbmVudDsgLy8gZG9uJ3QgcGFzcyBhbnkgcHJvcHMgdG8gJ2RpdidcblxuICAgICAgdmFyIHdyYXBwZXJQcm9wcyA9IHByaW1hcnkgPyBfZXh0ZW5kcyh7XG4gICAgICAgIHVyaTogdXJpLFxuICAgICAgICBsb2NhdGlvbjogbG9jYXRpb24sXG4gICAgICAgIGNvbXBvbmVudDogY29tcG9uZW50XG4gICAgICB9LCBkb21Qcm9wcykgOiBkb21Qcm9wcztcbiAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KEJhc2VDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgYmFzZXVyaTogdXJpLFxuICAgICAgICAgIGJhc2VwYXRoOiBiYXNlcGF0aCxcbiAgICAgICAgICBuYXZpZ2F0ZTogcHJvcHMubmF2aWdhdGVcbiAgICAgICAgfVxuICAgICAgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChGb2N1c1dyYXBwZXIsIHdyYXBwZXJQcm9wcywgY2xvbmUpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTm90IHN1cmUgaWYgd2Ugd2FudCB0aGlzLCB3b3VsZCByZXF1aXJlIGluZGV4IHJvdXRlcyBhdCBldmVyeSBsZXZlbFxuICAgICAgLy8gd2FybmluZyhcbiAgICAgIC8vICAgZmFsc2UsXG4gICAgICAvLyAgIGA8Um91dGVyIGJhc2VwYXRoPVwiJHtiYXNlcGF0aH1cIj5cXG5cXG5Ob3RoaW5nIG1hdGNoZWQ6XFxuXFx0JHtcbiAgICAgIC8vICAgICBsb2NhdGlvbi5wYXRobmFtZVxuICAgICAgLy8gICB9XFxuXFxuUGF0aHMgY2hlY2tlZDogXFxuXFx0JHtyb3V0ZXNcbiAgICAgIC8vICAgICAubWFwKHJvdXRlID0+IHJvdXRlLnBhdGgpXG4gICAgICAvLyAgICAgLmpvaW4oXG4gICAgICAvLyAgICAgICBcIlxcblxcdFwiXG4gICAgICAvLyAgICAgKX1cXG5cXG5UbyBnZXQgcmlkIG9mIHRoaXMgd2FybmluZywgYWRkIGEgZGVmYXVsdCBOb3RGb3VuZCBjb21wb25lbnQgYXMgY2hpbGQgb2YgUm91dGVyOlxuICAgICAgLy8gICBcXG5cXHRsZXQgTm90Rm91bmQgPSAoKSA9PiA8ZGl2Pk5vdCBGb3VuZCE8L2Rpdj5cbiAgICAgIC8vICAgXFxuXFx0PFJvdXRlcj5cXG5cXHQgIDxOb3RGb3VuZCBkZWZhdWx0Lz5cXG5cXHQgIHsvKiAuLi4gKi99XFxuXFx0PC9Sb3V0ZXI+YFxuICAgICAgLy8gKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gUm91dGVySW1wbDtcbn0oUmVhY3QuUHVyZUNvbXBvbmVudCk7XG5cblJvdXRlckltcGwuZGVmYXVsdFByb3BzID0ge1xuICBwcmltYXJ5OiB0cnVlXG59O1xudmFyIEZvY3VzQ29udGV4dCA9IGNyZWF0ZU5hbWVkQ29udGV4dChcIkZvY3VzXCIpO1xuXG52YXIgRm9jdXNIYW5kbGVyID0gZnVuY3Rpb24gRm9jdXNIYW5kbGVyKF9yZWYzKSB7XG4gIHZhciB1cmkgPSBfcmVmMy51cmksXG4gICAgICBsb2NhdGlvbiA9IF9yZWYzLmxvY2F0aW9uLFxuICAgICAgY29tcG9uZW50ID0gX3JlZjMuY29tcG9uZW50LFxuICAgICAgZG9tUHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZjMsIFtcInVyaVwiLCBcImxvY2F0aW9uXCIsIFwiY29tcG9uZW50XCJdKTtcblxuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChGb2N1c0NvbnRleHQuQ29uc3VtZXIsIG51bGwsIGZ1bmN0aW9uIChyZXF1ZXN0Rm9jdXMpIHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChGb2N1c0hhbmRsZXJJbXBsLCBfZXh0ZW5kcyh7fSwgZG9tUHJvcHMsIHtcbiAgICAgIGNvbXBvbmVudDogY29tcG9uZW50LFxuICAgICAgcmVxdWVzdEZvY3VzOiByZXF1ZXN0Rm9jdXMsXG4gICAgICB1cmk6IHVyaSxcbiAgICAgIGxvY2F0aW9uOiBsb2NhdGlvblxuICAgIH0pKTtcbiAgfSk7XG59OyAvLyBkb24ndCBmb2N1cyBvbiBpbml0aWFsIHJlbmRlclxuXG5cbnZhciBpbml0aWFsUmVuZGVyID0gdHJ1ZTtcbnZhciBmb2N1c0hhbmRsZXJDb3VudCA9IDA7XG5cbnZhciBGb2N1c0hhbmRsZXJJbXBsID0gZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQyKSB7XG4gIF9pbmhlcml0cyhGb2N1c0hhbmRsZXJJbXBsLCBfUmVhY3QkQ29tcG9uZW50Mik7XG5cbiAgZnVuY3Rpb24gRm9jdXNIYW5kbGVySW1wbCgpIHtcbiAgICB2YXIgX3RlbXAyLCBfdGhpczQsIF9yZXQyO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEZvY3VzSGFuZGxlckltcGwpO1xuXG4gICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbjIpLCBfa2V5MiA9IDA7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgIGFyZ3NbX2tleTJdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICB9XG5cbiAgICByZXR1cm4gX3JldDIgPSAoX3RlbXAyID0gKF90aGlzNCA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9SZWFjdCRDb21wb25lbnQyLmNhbGwuYXBwbHkoX1JlYWN0JENvbXBvbmVudDIsIFt0aGlzXS5jb25jYXQoYXJncykpKSwgX3RoaXM0KSwgX3RoaXM0LnN0YXRlID0ge30sIF90aGlzNC5yZXF1ZXN0Rm9jdXMgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgaWYgKCFfdGhpczQuc3RhdGUuc2hvdWxkRm9jdXMgJiYgbm9kZSkge1xuICAgICAgICBub2RlLmZvY3VzKCk7XG4gICAgICB9XG4gICAgfSwgX3RlbXAyKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oX3RoaXM0LCBfcmV0Mik7XG4gIH1cblxuICBGb2N1c0hhbmRsZXJJbXBsLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9IGZ1bmN0aW9uIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhuZXh0UHJvcHMsIHByZXZTdGF0ZSkge1xuICAgIHZhciBpbml0aWFsID0gcHJldlN0YXRlLnVyaSA9PSBudWxsO1xuXG4gICAgaWYgKGluaXRpYWwpIHtcbiAgICAgIHJldHVybiBfZXh0ZW5kcyh7XG4gICAgICAgIHNob3VsZEZvY3VzOiB0cnVlXG4gICAgICB9LCBuZXh0UHJvcHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgbXlVUklDaGFuZ2VkID0gbmV4dFByb3BzLnVyaSAhPT0gcHJldlN0YXRlLnVyaTtcbiAgICAgIHZhciBuYXZpZ2F0ZWRVcFRvTWUgPSBwcmV2U3RhdGUubG9jYXRpb24ucGF0aG5hbWUgIT09IG5leHRQcm9wcy5sb2NhdGlvbi5wYXRobmFtZSAmJiBuZXh0UHJvcHMubG9jYXRpb24ucGF0aG5hbWUgPT09IG5leHRQcm9wcy51cmk7XG4gICAgICByZXR1cm4gX2V4dGVuZHMoe1xuICAgICAgICBzaG91bGRGb2N1czogbXlVUklDaGFuZ2VkIHx8IG5hdmlnYXRlZFVwVG9NZVxuICAgICAgfSwgbmV4dFByb3BzKTtcbiAgICB9XG4gIH07XG5cbiAgRm9jdXNIYW5kbGVySW1wbC5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBmb2N1c0hhbmRsZXJDb3VudCsrO1xuICAgIHRoaXMuZm9jdXMoKTtcbiAgfTtcblxuICBGb2N1c0hhbmRsZXJJbXBsLnByb3RvdHlwZS5jb21wb25lbnRXaWxsVW5tb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIGZvY3VzSGFuZGxlckNvdW50LS07XG5cbiAgICBpZiAoZm9jdXNIYW5kbGVyQ291bnQgPT09IDApIHtcbiAgICAgIGluaXRpYWxSZW5kZXIgPSB0cnVlO1xuICAgIH1cbiAgfTtcblxuICBGb2N1c0hhbmRsZXJJbXBsLnByb3RvdHlwZS5jb21wb25lbnREaWRVcGRhdGUgPSBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUpIHtcbiAgICBpZiAocHJldlByb3BzLmxvY2F0aW9uICE9PSB0aGlzLnByb3BzLmxvY2F0aW9uICYmIHRoaXMuc3RhdGUuc2hvdWxkRm9jdXMpIHtcbiAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICB9XG4gIH07XG5cbiAgRm9jdXNIYW5kbGVySW1wbC5wcm90b3R5cGUuZm9jdXMgPSBmdW5jdGlvbiBmb2N1cygpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwidGVzdFwiKSB7XG4gICAgICAvLyBnZXR0aW5nIGNhbm5vdCByZWFkIHByb3BlcnR5IGZvY3VzIG9mIG51bGwgaW4gdGhlIHRlc3RzXG4gICAgICAvLyBhbmQgdGhhdCBiaXQgb2YgZ2xvYmFsIGBpbml0aWFsUmVuZGVyYCBzdGF0ZSBjYXVzZXMgcHJvYmxlbXNcbiAgICAgIC8vIHNob3VsZCBwcm9iYWJseSBmaWd1cmUgaXQgb3V0IVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciByZXF1ZXN0Rm9jdXMgPSB0aGlzLnByb3BzLnJlcXVlc3RGb2N1cztcblxuICAgIGlmIChyZXF1ZXN0Rm9jdXMpIHtcbiAgICAgIHJlcXVlc3RGb2N1cyh0aGlzLm5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaW5pdGlhbFJlbmRlcikge1xuICAgICAgICBpbml0aWFsUmVuZGVyID0gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMubm9kZSkge1xuICAgICAgICAvLyBSZWFjdCBwb2x5ZmlsbHMgW2F1dG9mb2N1c10gYW5kIGl0IGZpcmVzIGVhcmxpZXIgdGhhbiBjRE0sXG4gICAgICAgIC8vIHNvIHdlIHdlcmUgc3RlYWxpbmcgZm9jdXMgYXdheSwgdGhpcyBsaW5lIHByZXZlbnRzIHRoYXQuXG4gICAgICAgIGlmICghdGhpcy5ub2RlLmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpKSB7XG4gICAgICAgICAgdGhpcy5ub2RlLmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgRm9jdXNIYW5kbGVySW1wbC5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHZhciBfdGhpczUgPSB0aGlzO1xuXG4gICAgdmFyIF9wcm9wczIgPSB0aGlzLnByb3BzLFxuICAgICAgICBjaGlsZHJlbiA9IF9wcm9wczIuY2hpbGRyZW4sXG4gICAgICAgIHN0eWxlID0gX3Byb3BzMi5zdHlsZSxcbiAgICAgICAgcmVxdWVzdEZvY3VzID0gX3Byb3BzMi5yZXF1ZXN0Rm9jdXMsXG4gICAgICAgIF9wcm9wczIkY29tcG9uZW50ID0gX3Byb3BzMi5jb21wb25lbnQsXG4gICAgICAgIENvbXAgPSBfcHJvcHMyJGNvbXBvbmVudCA9PT0gdW5kZWZpbmVkID8gXCJkaXZcIiA6IF9wcm9wczIkY29tcG9uZW50LFxuICAgICAgICB1cmkgPSBfcHJvcHMyLnVyaSxcbiAgICAgICAgbG9jYXRpb24gPSBfcHJvcHMyLmxvY2F0aW9uLFxuICAgICAgICBkb21Qcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcHJvcHMyLCBbXCJjaGlsZHJlblwiLCBcInN0eWxlXCIsIFwicmVxdWVzdEZvY3VzXCIsIFwiY29tcG9uZW50XCIsIFwidXJpXCIsIFwibG9jYXRpb25cIl0pO1xuXG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ29tcCwgX2V4dGVuZHMoe1xuICAgICAgc3R5bGU6IF9leHRlbmRzKHtcbiAgICAgICAgb3V0bGluZTogXCJub25lXCJcbiAgICAgIH0sIHN0eWxlKSxcbiAgICAgIHRhYkluZGV4OiBcIi0xXCIsXG4gICAgICByZWY6IGZ1bmN0aW9uIHJlZihuKSB7XG4gICAgICAgIHJldHVybiBfdGhpczUubm9kZSA9IG47XG4gICAgICB9XG4gICAgfSwgZG9tUHJvcHMpLCBSZWFjdC5jcmVhdGVFbGVtZW50KEZvY3VzQ29udGV4dC5Qcm92aWRlciwge1xuICAgICAgdmFsdWU6IHRoaXMucmVxdWVzdEZvY3VzXG4gICAgfSwgdGhpcy5wcm9wcy5jaGlsZHJlbikpO1xuICB9O1xuXG4gIHJldHVybiBGb2N1c0hhbmRsZXJJbXBsO1xufShSZWFjdC5Db21wb25lbnQpO1xuXG5wb2x5ZmlsbChGb2N1c0hhbmRsZXJJbXBsKTtcblxudmFyIGsgPSBmdW5jdGlvbiBrKCkge307IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cblxudmFyIGZvcndhcmRSZWYgPSBSZWFjdC5mb3J3YXJkUmVmO1xuXG5pZiAodHlwZW9mIGZvcndhcmRSZWYgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgZm9yd2FyZFJlZiA9IGZ1bmN0aW9uIGZvcndhcmRSZWYoQykge1xuICAgIHJldHVybiBDO1xuICB9O1xufVxuXG52YXIgTGluayA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWY0LCByZWYpIHtcbiAgdmFyIGlubmVyUmVmID0gX3JlZjQuaW5uZXJSZWYsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmNCwgW1wiaW5uZXJSZWZcIl0pO1xuXG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KEJhc2VDb250ZXh0LkNvbnN1bWVyLCBudWxsLCBmdW5jdGlvbiAoX3JlZjUpIHtcbiAgICB2YXIgYmFzZXBhdGggPSBfcmVmNS5iYXNlcGF0aCxcbiAgICAgICAgYmFzZXVyaSA9IF9yZWY1LmJhc2V1cmk7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTG9jYXRpb24sIG51bGwsIGZ1bmN0aW9uIChfcmVmNikge1xuICAgICAgdmFyIGxvY2F0aW9uID0gX3JlZjYubG9jYXRpb24sXG4gICAgICAgICAgbmF2aWdhdGUgPSBfcmVmNi5uYXZpZ2F0ZTtcblxuICAgICAgdmFyIHRvID0gcHJvcHMudG8sXG4gICAgICAgICAgc3RhdGUgPSBwcm9wcy5zdGF0ZSxcbiAgICAgICAgICByZXBsYWNlID0gcHJvcHMucmVwbGFjZSxcbiAgICAgICAgICBfcHJvcHMkZ2V0UHJvcHMgPSBwcm9wcy5nZXRQcm9wcyxcbiAgICAgICAgICBnZXRQcm9wcyA9IF9wcm9wcyRnZXRQcm9wcyA9PT0gdW5kZWZpbmVkID8gayA6IF9wcm9wcyRnZXRQcm9wcyxcbiAgICAgICAgICBhbmNob3JQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhwcm9wcywgW1widG9cIiwgXCJzdGF0ZVwiLCBcInJlcGxhY2VcIiwgXCJnZXRQcm9wc1wiXSk7XG5cbiAgICAgIHZhciBocmVmID0gcmVzb2x2ZSh0bywgYmFzZXVyaSk7XG4gICAgICB2YXIgZW5jb2RlZEhyZWYgPSBlbmNvZGVVUkkoaHJlZik7XG4gICAgICB2YXIgaXNDdXJyZW50ID0gbG9jYXRpb24ucGF0aG5hbWUgPT09IGVuY29kZWRIcmVmO1xuICAgICAgdmFyIGlzUGFydGlhbGx5Q3VycmVudCA9IHN0YXJ0c1dpdGgobG9jYXRpb24ucGF0aG5hbWUsIGVuY29kZWRIcmVmKTtcbiAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiYVwiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHJlZjogcmVmIHx8IGlubmVyUmVmLFxuICAgICAgICBcImFyaWEtY3VycmVudFwiOiBpc0N1cnJlbnQgPyBcInBhZ2VcIiA6IHVuZGVmaW5lZFxuICAgICAgfSwgYW5jaG9yUHJvcHMsIGdldFByb3BzKHtcbiAgICAgICAgaXNDdXJyZW50OiBpc0N1cnJlbnQsXG4gICAgICAgIGlzUGFydGlhbGx5Q3VycmVudDogaXNQYXJ0aWFsbHlDdXJyZW50LFxuICAgICAgICBocmVmOiBocmVmLFxuICAgICAgICBsb2NhdGlvbjogbG9jYXRpb25cbiAgICAgIH0pLCB7XG4gICAgICAgIGhyZWY6IGhyZWYsXG4gICAgICAgIG9uQ2xpY2s6IGZ1bmN0aW9uIG9uQ2xpY2soZXZlbnQpIHtcbiAgICAgICAgICBpZiAoYW5jaG9yUHJvcHMub25DbGljaykgYW5jaG9yUHJvcHMub25DbGljayhldmVudCk7XG5cbiAgICAgICAgICBpZiAoc2hvdWxkTmF2aWdhdGUoZXZlbnQpKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdmFyIHNob3VsZFJlcGxhY2UgPSByZXBsYWNlO1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHJlcGxhY2UgIT09IFwiYm9vbGVhblwiICYmIGlzQ3VycmVudCkge1xuICAgICAgICAgICAgICB2YXIgX2xvY2F0aW9uJHN0YXRlID0gX2V4dGVuZHMoe30sIGxvY2F0aW9uLnN0YXRlKSxcbiAgICAgICAgICAgICAgICAgIGtleSA9IF9sb2NhdGlvbiRzdGF0ZS5rZXksXG4gICAgICAgICAgICAgICAgICByZXN0U3RhdGUgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX2xvY2F0aW9uJHN0YXRlLCBbXCJrZXlcIl0pO1xuXG4gICAgICAgICAgICAgIHNob3VsZFJlcGxhY2UgPSBzaGFsbG93Q29tcGFyZShfZXh0ZW5kcyh7fSwgc3RhdGUpLCByZXN0U3RhdGUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBuYXZpZ2F0ZShocmVmLCB7XG4gICAgICAgICAgICAgIHN0YXRlOiBzdGF0ZSxcbiAgICAgICAgICAgICAgcmVwbGFjZTogc2hvdWxkUmVwbGFjZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG5MaW5rLmRpc3BsYXlOYW1lID0gXCJMaW5rXCI7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB2b2lkIDAgOiB2b2lkIDA7IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIFJlZGlyZWN0UmVxdWVzdCh1cmkpIHtcbiAgdGhpcy51cmkgPSB1cmk7XG59XG5cbnZhciBpc1JlZGlyZWN0ID0gZnVuY3Rpb24gaXNSZWRpcmVjdChvKSB7XG4gIHJldHVybiBvIGluc3RhbmNlb2YgUmVkaXJlY3RSZXF1ZXN0O1xufTtcblxudmFyIHJlZGlyZWN0VG8gPSBmdW5jdGlvbiByZWRpcmVjdFRvKHRvKSB7XG4gIHRocm93IG5ldyBSZWRpcmVjdFJlcXVlc3QodG8pO1xufTtcblxudmFyIFJlZGlyZWN0SW1wbCA9IGZ1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50Mykge1xuICBfaW5oZXJpdHMoUmVkaXJlY3RJbXBsLCBfUmVhY3QkQ29tcG9uZW50Myk7XG5cbiAgZnVuY3Rpb24gUmVkaXJlY3RJbXBsKCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBSZWRpcmVjdEltcGwpO1xuXG4gICAgcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9SZWFjdCRDb21wb25lbnQzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xuICB9IC8vIFN1cHBvcnQgUmVhY3QgPCAxNiB3aXRoIHRoaXMgaG9va1xuXG5cbiAgUmVkaXJlY3RJbXBsLnByb3RvdHlwZS5jb21wb25lbnREaWRNb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHZhciBfcHJvcHMzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgbmF2aWdhdGUgPSBfcHJvcHMzLm5hdmlnYXRlLFxuICAgICAgICB0byA9IF9wcm9wczMudG8sXG4gICAgICAgIGZyb20gPSBfcHJvcHMzLmZyb20sXG4gICAgICAgIF9wcm9wczMkcmVwbGFjZSA9IF9wcm9wczMucmVwbGFjZSxcbiAgICAgICAgcmVwbGFjZSA9IF9wcm9wczMkcmVwbGFjZSA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IF9wcm9wczMkcmVwbGFjZSxcbiAgICAgICAgc3RhdGUgPSBfcHJvcHMzLnN0YXRlLFxuICAgICAgICBub1Rocm93ID0gX3Byb3BzMy5ub1Rocm93LFxuICAgICAgICBiYXNldXJpID0gX3Byb3BzMy5iYXNldXJpLFxuICAgICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcHJvcHMzLCBbXCJuYXZpZ2F0ZVwiLCBcInRvXCIsIFwiZnJvbVwiLCBcInJlcGxhY2VcIiwgXCJzdGF0ZVwiLCBcIm5vVGhyb3dcIiwgXCJiYXNldXJpXCJdKTtcblxuICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHJlc29sdmVkVG8gPSByZXNvbHZlKHRvLCBiYXNldXJpKTtcbiAgICAgIG5hdmlnYXRlKGluc2VydFBhcmFtcyhyZXNvbHZlZFRvLCBwcm9wcyksIHtcbiAgICAgICAgcmVwbGFjZTogcmVwbGFjZSxcbiAgICAgICAgc3RhdGU6IHN0YXRlXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBSZWRpcmVjdEltcGwucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICB2YXIgX3Byb3BzNCA9IHRoaXMucHJvcHMsXG4gICAgICAgIG5hdmlnYXRlID0gX3Byb3BzNC5uYXZpZ2F0ZSxcbiAgICAgICAgdG8gPSBfcHJvcHM0LnRvLFxuICAgICAgICBmcm9tID0gX3Byb3BzNC5mcm9tLFxuICAgICAgICByZXBsYWNlID0gX3Byb3BzNC5yZXBsYWNlLFxuICAgICAgICBzdGF0ZSA9IF9wcm9wczQuc3RhdGUsXG4gICAgICAgIG5vVGhyb3cgPSBfcHJvcHM0Lm5vVGhyb3csXG4gICAgICAgIGJhc2V1cmkgPSBfcHJvcHM0LmJhc2V1cmksXG4gICAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9wcm9wczQsIFtcIm5hdmlnYXRlXCIsIFwidG9cIiwgXCJmcm9tXCIsIFwicmVwbGFjZVwiLCBcInN0YXRlXCIsIFwibm9UaHJvd1wiLCBcImJhc2V1cmlcIl0pO1xuXG4gICAgdmFyIHJlc29sdmVkVG8gPSByZXNvbHZlKHRvLCBiYXNldXJpKTtcbiAgICBpZiAoIW5vVGhyb3cpIHJlZGlyZWN0VG8oaW5zZXJ0UGFyYW1zKHJlc29sdmVkVG8sIHByb3BzKSk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG5cbiAgcmV0dXJuIFJlZGlyZWN0SW1wbDtcbn0oUmVhY3QuQ29tcG9uZW50KTtcblxudmFyIFJlZGlyZWN0ID0gZnVuY3Rpb24gUmVkaXJlY3QocHJvcHMpIHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQmFzZUNvbnRleHQuQ29uc3VtZXIsIG51bGwsIGZ1bmN0aW9uIChfcmVmNykge1xuICAgIHZhciBiYXNldXJpID0gX3JlZjcuYmFzZXVyaTtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChMb2NhdGlvbiwgbnVsbCwgZnVuY3Rpb24gKGxvY2F0aW9uQ29udGV4dCkge1xuICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVkaXJlY3RJbXBsLCBfZXh0ZW5kcyh7fSwgbG9jYXRpb25Db250ZXh0LCB7XG4gICAgICAgIGJhc2V1cmk6IGJhc2V1cmlcbiAgICAgIH0sIHByb3BzKSk7XG4gICAgfSk7XG4gIH0pO1xufTtcblxucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gdm9pZCAwIDogdm9pZCAwOyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG52YXIgTWF0Y2ggPSBmdW5jdGlvbiBNYXRjaChfcmVmOCkge1xuICB2YXIgcGF0aCA9IF9yZWY4LnBhdGgsXG4gICAgICBjaGlsZHJlbiA9IF9yZWY4LmNoaWxkcmVuO1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChCYXNlQ29udGV4dC5Db25zdW1lciwgbnVsbCwgZnVuY3Rpb24gKF9yZWY5KSB7XG4gICAgdmFyIGJhc2V1cmkgPSBfcmVmOS5iYXNldXJpO1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KExvY2F0aW9uLCBudWxsLCBmdW5jdGlvbiAoX3JlZjEwKSB7XG4gICAgICB2YXIgbmF2aWdhdGUgPSBfcmVmMTAubmF2aWdhdGUsXG4gICAgICAgICAgbG9jYXRpb24gPSBfcmVmMTAubG9jYXRpb247XG4gICAgICB2YXIgcmVzb2x2ZWRQYXRoID0gcmVzb2x2ZShwYXRoLCBiYXNldXJpKTtcbiAgICAgIHZhciByZXN1bHQgPSBtYXRjaChyZXNvbHZlZFBhdGgsIGxvY2F0aW9uLnBhdGhuYW1lKTtcbiAgICAgIHJldHVybiBjaGlsZHJlbih7XG4gICAgICAgIG5hdmlnYXRlOiBuYXZpZ2F0ZSxcbiAgICAgICAgbG9jYXRpb246IGxvY2F0aW9uLFxuICAgICAgICBtYXRjaDogcmVzdWx0ID8gX2V4dGVuZHMoe30sIHJlc3VsdC5wYXJhbXMsIHtcbiAgICAgICAgICB1cmk6IHJlc3VsdC51cmksXG4gICAgICAgICAgcGF0aDogcGF0aFxuICAgICAgICB9KSA6IG51bGxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn07IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBIb29rc1xuXG5cbnZhciB1c2VMb2NhdGlvbiA9IGZ1bmN0aW9uIHVzZUxvY2F0aW9uKCkge1xuICB2YXIgY29udGV4dCA9IHVzZUNvbnRleHQoTG9jYXRpb25Db250ZXh0KTtcblxuICBpZiAoIWNvbnRleHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1c2VMb2NhdGlvbiBob29rIHdhcyB1c2VkIGJ1dCBhIExvY2F0aW9uQ29udGV4dC5Qcm92aWRlciB3YXMgbm90IGZvdW5kIGluIHRoZSBwYXJlbnQgdHJlZS4gTWFrZSBzdXJlIHRoaXMgaXMgdXNlZCBpbiBhIGNvbXBvbmVudCB0aGF0IGlzIGEgY2hpbGQgb2YgUm91dGVyXCIpO1xuICB9XG5cbiAgcmV0dXJuIGNvbnRleHQubG9jYXRpb247XG59O1xuXG52YXIgdXNlTmF2aWdhdGUgPSBmdW5jdGlvbiB1c2VOYXZpZ2F0ZSgpIHtcbiAgdmFyIGNvbnRleHQgPSB1c2VDb250ZXh0KEJhc2VDb250ZXh0KTtcblxuICBpZiAoIWNvbnRleHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1c2VOYXZpZ2F0ZSBob29rIHdhcyB1c2VkIGJ1dCBhIEJhc2VDb250ZXh0LlByb3ZpZGVyIHdhcyBub3QgZm91bmQgaW4gdGhlIHBhcmVudCB0cmVlLiBNYWtlIHN1cmUgdGhpcyBpcyB1c2VkIGluIGEgY29tcG9uZW50IHRoYXQgaXMgYSBjaGlsZCBvZiBSb3V0ZXJcIik7XG4gIH1cblxuICByZXR1cm4gY29udGV4dC5uYXZpZ2F0ZTtcbn07XG5cbnZhciB1c2VQYXJhbXMgPSBmdW5jdGlvbiB1c2VQYXJhbXMoKSB7XG4gIHZhciBjb250ZXh0ID0gdXNlQ29udGV4dChCYXNlQ29udGV4dCk7XG5cbiAgaWYgKCFjb250ZXh0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwidXNlUGFyYW1zIGhvb2sgd2FzIHVzZWQgYnV0IGEgTG9jYXRpb25Db250ZXh0LlByb3ZpZGVyIHdhcyBub3QgZm91bmQgaW4gdGhlIHBhcmVudCB0cmVlLiBNYWtlIHN1cmUgdGhpcyBpcyB1c2VkIGluIGEgY29tcG9uZW50IHRoYXQgaXMgYSBjaGlsZCBvZiBSb3V0ZXJcIik7XG4gIH1cblxuICB2YXIgbG9jYXRpb24gPSB1c2VMb2NhdGlvbigpO1xuICB2YXIgcmVzdWx0cyA9IG1hdGNoKGNvbnRleHQuYmFzZXBhdGgsIGxvY2F0aW9uLnBhdGhuYW1lKTtcbiAgcmV0dXJuIHJlc3VsdHMgPyByZXN1bHRzLnBhcmFtcyA6IG51bGw7XG59O1xuXG52YXIgdXNlTWF0Y2ggPSBmdW5jdGlvbiB1c2VNYXRjaChwYXRoKSB7XG4gIGlmICghcGF0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcInVzZU1hdGNoKHBhdGg6IHN0cmluZykgcmVxdWlyZXMgYW4gYXJndW1lbnQgb2YgYSBzdHJpbmcgdG8gbWF0Y2ggYWdhaW5zdFwiKTtcbiAgfVxuXG4gIHZhciBjb250ZXh0ID0gdXNlQ29udGV4dChCYXNlQ29udGV4dCk7XG5cbiAgaWYgKCFjb250ZXh0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwidXNlTWF0Y2ggaG9vayB3YXMgdXNlZCBidXQgYSBMb2NhdGlvbkNvbnRleHQuUHJvdmlkZXIgd2FzIG5vdCBmb3VuZCBpbiB0aGUgcGFyZW50IHRyZWUuIE1ha2Ugc3VyZSB0aGlzIGlzIHVzZWQgaW4gYSBjb21wb25lbnQgdGhhdCBpcyBhIGNoaWxkIG9mIFJvdXRlclwiKTtcbiAgfVxuXG4gIHZhciBsb2NhdGlvbiA9IHVzZUxvY2F0aW9uKCk7XG4gIHZhciByZXNvbHZlZFBhdGggPSByZXNvbHZlKHBhdGgsIGNvbnRleHQuYmFzZXVyaSk7XG4gIHZhciByZXN1bHQgPSBtYXRjaChyZXNvbHZlZFBhdGgsIGxvY2F0aW9uLnBhdGhuYW1lKTtcbiAgcmV0dXJuIHJlc3VsdCA/IF9leHRlbmRzKHt9LCByZXN1bHQucGFyYW1zLCB7XG4gICAgdXJpOiByZXN1bHQudXJpLFxuICAgIHBhdGg6IHBhdGhcbiAgfSkgOiBudWxsO1xufTsgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIEp1bmtcblxuXG52YXIgc3RyaXBTbGFzaGVzID0gZnVuY3Rpb24gc3RyaXBTbGFzaGVzKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoLyheXFwvK3xcXC8rJCkvZywgXCJcIik7XG59O1xuXG52YXIgY3JlYXRlUm91dGUgPSBmdW5jdGlvbiBjcmVhdGVSb3V0ZShiYXNlcGF0aCkge1xuICByZXR1cm4gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChlbGVtZW50LnR5cGUgPT09IFJlYWN0LkZyYWdtZW50ICYmIGVsZW1lbnQucHJvcHMuY2hpbGRyZW4pIHtcbiAgICAgIHJldHVybiBSZWFjdC5DaGlsZHJlbi5tYXAoZWxlbWVudC5wcm9wcy5jaGlsZHJlbiwgY3JlYXRlUm91dGUoYmFzZXBhdGgpKTtcbiAgICB9XG5cbiAgICAhKGVsZW1lbnQucHJvcHMucGF0aCB8fCBlbGVtZW50LnByb3BzLmRlZmF1bHQgfHwgZWxlbWVudC50eXBlID09PSBSZWRpcmVjdCkgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsIFwiPFJvdXRlcj46IENoaWxkcmVuIG9mIDxSb3V0ZXI+IG11c3QgaGF2ZSBhIGBwYXRoYCBvciBgZGVmYXVsdGAgcHJvcCwgb3IgYmUgYSBgPFJlZGlyZWN0PmAuIE5vbmUgZm91bmQgb24gZWxlbWVudCB0eXBlIGBcIiArIGVsZW1lbnQudHlwZSArIFwiYFwiKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gICAgISEoZWxlbWVudC50eXBlID09PSBSZWRpcmVjdCAmJiAoIWVsZW1lbnQucHJvcHMuZnJvbSB8fCAhZWxlbWVudC5wcm9wcy50bykpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCBcIjxSZWRpcmVjdCBmcm9tPVxcXCJcIiArIGVsZW1lbnQucHJvcHMuZnJvbSArIFwiXFxcIiB0bz1cXFwiXCIgKyBlbGVtZW50LnByb3BzLnRvICsgXCJcXFwiLz4gcmVxdWlyZXMgYm90aCBcXFwiZnJvbVxcXCIgYW5kIFxcXCJ0b1xcXCIgcHJvcHMgd2hlbiBpbnNpZGUgYSA8Um91dGVyPi5cIikgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuICAgICEhKGVsZW1lbnQudHlwZSA9PT0gUmVkaXJlY3QgJiYgIXZhbGlkYXRlUmVkaXJlY3QoZWxlbWVudC5wcm9wcy5mcm9tLCBlbGVtZW50LnByb3BzLnRvKSkgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsIFwiPFJlZGlyZWN0IGZyb209XFxcIlwiICsgZWxlbWVudC5wcm9wcy5mcm9tICsgXCIgdG89XFxcIlwiICsgZWxlbWVudC5wcm9wcy50byArIFwiXFxcIi8+IGhhcyBtaXNtYXRjaGVkIGR5bmFtaWMgc2VnbWVudHMsIGVuc3VyZSBib3RoIHBhdGhzIGhhdmUgdGhlIGV4YWN0IHNhbWUgZHluYW1pYyBzZWdtZW50cy5cIikgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuXG4gICAgaWYgKGVsZW1lbnQucHJvcHMuZGVmYXVsdCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWU6IGVsZW1lbnQsXG4gICAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIGVsZW1lbnRQYXRoID0gZWxlbWVudC50eXBlID09PSBSZWRpcmVjdCA/IGVsZW1lbnQucHJvcHMuZnJvbSA6IGVsZW1lbnQucHJvcHMucGF0aDtcbiAgICB2YXIgcGF0aCA9IGVsZW1lbnRQYXRoID09PSBcIi9cIiA/IGJhc2VwYXRoIDogc3RyaXBTbGFzaGVzKGJhc2VwYXRoKSArIFwiL1wiICsgc3RyaXBTbGFzaGVzKGVsZW1lbnRQYXRoKTtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IGVsZW1lbnQsXG4gICAgICBkZWZhdWx0OiBlbGVtZW50LnByb3BzLmRlZmF1bHQsXG4gICAgICBwYXRoOiBlbGVtZW50LnByb3BzLmNoaWxkcmVuID8gc3RyaXBTbGFzaGVzKHBhdGgpICsgXCIvKlwiIDogcGF0aFxuICAgIH07XG4gIH07XG59O1xuXG52YXIgc2hvdWxkTmF2aWdhdGUgPSBmdW5jdGlvbiBzaG91bGROYXZpZ2F0ZShldmVudCkge1xuICByZXR1cm4gIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgJiYgZXZlbnQuYnV0dG9uID09PSAwICYmICEoZXZlbnQubWV0YUtleSB8fCBldmVudC5hbHRLZXkgfHwgZXZlbnQuY3RybEtleSB8fCBldmVudC5zaGlmdEtleSk7XG59OyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuXG5leHBvcnQgeyAgTGluaywgTG9jYXRpb24sIExvY2F0aW9uUHJvdmlkZXIsIE1hdGNoLCBSZWRpcmVjdCwgUm91dGVyLCBTZXJ2ZXJMb2NhdGlvbiwgY3JlYXRlSGlzdG9yeSwgY3JlYXRlTWVtb3J5U291cmNlLCBpc1JlZGlyZWN0LCBuYXZpZ2F0ZSwgcmVkaXJlY3RUbywgZ2xvYmFsSGlzdG9yeSwgbWF0Y2ggYXMgbWF0Y2hQYXRoLCB1c2VMb2NhdGlvbiwgdXNlTmF2aWdhdGUsIHVzZVBhcmFtcywgdXNlTWF0Y2ggLCBCYXNlQ29udGV4dCB9OyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///9499\n')},1143:function(module){"use strict";eval("/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar invariant = function(condition, format, a, b, c, d, e, f) {\n if (false) {}\n\n if (!condition) {\n var error;\n if (format === undefined) {\n error = new Error(\n 'Minified exception occurred; use the non-minified dev environment ' +\n 'for the full error message and additional helpful warnings.'\n );\n } else {\n var args = [a, b, c, d, e, f];\n var argIndex = 0;\n error = new Error(\n format.replace(/%s/g, function() { return args[argIndex++]; })\n );\n error.name = 'Invariant Violation';\n }\n\n error.framesToPop = 1; // we don't care about invariant's own frame\n throw error;\n }\n};\n\nmodule.exports = invariant;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9pbnZhcmlhbnQvYnJvd3Nlci5qcz80MGI2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLE1BQU0sS0FBcUMsRUFBRSxFQUkxQzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQztBQUNyQztBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQyx5QkFBeUIsRUFBRTtBQUNyRTtBQUNBO0FBQ0E7O0FBRUEsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIxMTQzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogVXNlIGludmFyaWFudCgpIHRvIGFzc2VydCBzdGF0ZSB3aGljaCB5b3VyIHByb2dyYW0gYXNzdW1lcyB0byBiZSB0cnVlLlxuICpcbiAqIFByb3ZpZGUgc3ByaW50Zi1zdHlsZSBmb3JtYXQgKG9ubHkgJXMgaXMgc3VwcG9ydGVkKSBhbmQgYXJndW1lbnRzXG4gKiB0byBwcm92aWRlIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgYnJva2UgYW5kIHdoYXQgeW91IHdlcmVcbiAqIGV4cGVjdGluZy5cbiAqXG4gKiBUaGUgaW52YXJpYW50IG1lc3NhZ2Ugd2lsbCBiZSBzdHJpcHBlZCBpbiBwcm9kdWN0aW9uLCBidXQgdGhlIGludmFyaWFudFxuICogd2lsbCByZW1haW4gdG8gZW5zdXJlIGxvZ2ljIGRvZXMgbm90IGRpZmZlciBpbiBwcm9kdWN0aW9uLlxuICovXG5cbnZhciBpbnZhcmlhbnQgPSBmdW5jdGlvbihjb25kaXRpb24sIGZvcm1hdCwgYSwgYiwgYywgZCwgZSwgZikge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmIChmb3JtYXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhcmlhbnQgcmVxdWlyZXMgYW4gZXJyb3IgbWVzc2FnZSBhcmd1bWVudCcpO1xuICAgIH1cbiAgfVxuXG4gIGlmICghY29uZGl0aW9uKSB7XG4gICAgdmFyIGVycm9yO1xuICAgIGlmIChmb3JtYXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICAgICdNaW5pZmllZCBleGNlcHRpb24gb2NjdXJyZWQ7IHVzZSB0aGUgbm9uLW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCAnICtcbiAgICAgICAgJ2ZvciB0aGUgZnVsbCBlcnJvciBtZXNzYWdlIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuJ1xuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGFyZ3MgPSBbYSwgYiwgYywgZCwgZSwgZl07XG4gICAgICB2YXIgYXJnSW5kZXggPSAwO1xuICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICAgIGZvcm1hdC5yZXBsYWNlKC8lcy9nLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3NbYXJnSW5kZXgrK107IH0pXG4gICAgICApO1xuICAgICAgZXJyb3IubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcbiAgICB9XG5cbiAgICBlcnJvci5mcmFtZXNUb1BvcCA9IDE7IC8vIHdlIGRvbid0IGNhcmUgYWJvdXQgaW52YXJpYW50J3Mgb3duIGZyYW1lXG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gaW52YXJpYW50O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1143\n")}},function(I){"use strict";I.O(0,[532,774],(function(){return g=2871,I(I.s=g);var g}));I.O()}]); \ No newline at end of file diff --git a/main/app-795f430a5c7d6b3bd2ac.js b/main/app-795f430a5c7d6b3bd2ac.js new file mode 100644 index 00000000..b23ac09a --- /dev/null +++ b/main/app-795f430a5c7d6b3bd2ac.js @@ -0,0 +1 @@ +(self.webpackChunkjustice40_tool=self.webpackChunkjustice40_tool||[]).push([[143],{1506:function(module){eval("function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nmodule.exports = _assertThisInitialized;\nmodule.exports.default = module.exports, module.exports.__esModule = true;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qcz8zYzk2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxzQkFBeUIsbUJBQW1CLHlCQUF5QiIsImZpbGUiOiIxNTA2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gIGlmIChzZWxmID09PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIH1cblxuICByZXR1cm4gc2VsZjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfYXNzZXJ0VGhpc0luaXRpYWxpemVkO1xubW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHMsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1506\n")},676:function(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__){"use strict";eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": function() { return /* binding */ _arrayLikeToArray; }\n/* harmony export */ });\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hcnJheUxpa2VUb0FycmF5LmpzPzZiNzUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQWU7QUFDZjs7QUFFQSx3Q0FBd0MsU0FBUztBQUNqRDtBQUNBOztBQUVBO0FBQ0EiLCJmaWxlIjoiNjc2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHtcbiAgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7XG5cbiAgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7XG4gICAgYXJyMltpXSA9IGFycltpXTtcbiAgfVxuXG4gIHJldHVybiBhcnIyO1xufSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///676\n')},1788:function(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__){"use strict";eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": function() { return /* binding */ _inheritsLoose; }\n/* harmony export */ });\n/* harmony import */ var _setPrototypeOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4665);\n\nfunction _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n (0,_setPrototypeOf_js__WEBPACK_IMPORTED_MODULE_0__/* .default */ .Z)(subClass, superClass);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlLmpzPzc0OGUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFpRDtBQUNsQztBQUNmO0FBQ0E7QUFDQSxFQUFFLG9FQUFjO0FBQ2hCIiwiZmlsZSI6IjE3ODguanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgc2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vc2V0UHJvdG90eXBlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pbmhlcml0c0xvb3NlKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcy5wcm90b3R5cGUpO1xuICBzdWJDbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBzdWJDbGFzcztcbiAgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1788\n')},4665:function(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__){"use strict";eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": function() { return /* binding */ _setPrototypeOf; }\n/* harmony export */ });\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zZXRQcm90b3R5cGVPZi5qcz9iMzgwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsImZpbGUiOiI0NjY1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgby5fX3Byb3RvX18gPSBwO1xuICAgIHJldHVybiBvO1xuICB9O1xuXG4gIHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7XG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4665\n')},7329:function(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__){"use strict";eval('\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n "Z": function() { return /* binding */ _toConsumableArray; }\n});\n\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js\nvar arrayLikeToArray = __webpack_require__(676);\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return (0,arrayLikeToArray/* default */.Z)(arr);\n}\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/iterableToArray.js\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);\n}\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js\nvar unsupportedIterableToArray = __webpack_require__(2961);\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js\nfunction _nonIterableSpread() {\n throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");\n}\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js\n\n\n\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || (0,unsupportedIterableToArray/* default */.Z)(arr) || _nonIterableSpread();\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hcnJheVdpdGhvdXRIb2xlcy5qcz82MDA1Iiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2l0ZXJhYmxlVG9BcnJheS5qcz9kYjkwIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL25vbkl0ZXJhYmxlU3ByZWFkLmpzPzM0MjciLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Db25zdW1hYmxlQXJyYXkuanM/MjkwOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBcUQ7QUFDdEM7QUFDZixpQ0FBaUMsbUNBQWdCO0FBQ2pELEM7O0FDSGU7QUFDZjtBQUNBLEM7Ozs7QUNGZTtBQUNmO0FBQ0EsQzs7QUNGdUQ7QUFDSjtBQUNzQjtBQUNsQjtBQUN4QztBQUNmLFNBQVMsa0JBQWlCLFNBQVMsZ0JBQWUsU0FBUyw2Q0FBMEIsU0FBUyxrQkFBaUI7QUFDL0ciLCJmaWxlIjoiNzMyOS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhcnJheUxpa2VUb0FycmF5IGZyb20gXCIuL2FycmF5TGlrZVRvQXJyYXkuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkoYXJyKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHtcbiAgaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgaXRlcltTeW1ib2wuaXRlcmF0b3JdICE9IG51bGwgfHwgaXRlcltcIkBAaXRlcmF0b3JcIl0gIT0gbnVsbCkgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn0iLCJpbXBvcnQgYXJyYXlXaXRob3V0SG9sZXMgZnJvbSBcIi4vYXJyYXlXaXRob3V0SG9sZXMuanNcIjtcbmltcG9ydCBpdGVyYWJsZVRvQXJyYXkgZnJvbSBcIi4vaXRlcmFibGVUb0FycmF5LmpzXCI7XG5pbXBvcnQgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkgZnJvbSBcIi4vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanNcIjtcbmltcG9ydCBub25JdGVyYWJsZVNwcmVhZCBmcm9tIFwiLi9ub25JdGVyYWJsZVNwcmVhZC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikge1xuICByZXR1cm4gYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBpdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IG5vbkl0ZXJhYmxlU3ByZWFkKCk7XG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7329\n')},2961:function(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__){"use strict";eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": function() { return /* binding */ _unsupportedIterableToArray; }\n/* harmony export */ });\n/* harmony import */ var _arrayLikeToArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(676);\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === "string") return (0,_arrayLikeToArray_js__WEBPACK_IMPORTED_MODULE_0__/* .default */ .Z)(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === "Object" && o.constructor) n = o.constructor.name;\n if (n === "Map" || n === "Set") return Array.from(o);\n if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return (0,_arrayLikeToArray_js__WEBPACK_IMPORTED_MODULE_0__/* .default */ .Z)(o, minLen);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qcz8wNmM1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBcUQ7QUFDdEM7QUFDZjtBQUNBLG9DQUFvQyxzRUFBZ0I7QUFDcEQ7QUFDQTtBQUNBO0FBQ0Esc0ZBQXNGLHNFQUFnQjtBQUN0RyIsImZpbGUiOiIyOTYxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFycmF5TGlrZVRvQXJyYXkgZnJvbSBcIi4vYXJyYXlMaWtlVG9BcnJheS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikge1xuICBpZiAoIW8pIHJldHVybjtcbiAgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xuICB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7XG4gIGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7XG4gIGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pO1xuICBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2961\n')},7154:function(module){eval("function _extends() {\n module.exports = _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n module.exports.default = module.exports, module.exports.__esModule = true;\n return _extends.apply(this, arguments);\n}\n\nmodule.exports = _extends;\nmodule.exports.default = module.exports, module.exports.__esModule = true;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2V4dGVuZHMuanM/YTU1OSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0EsbUJBQW1CLHNCQUFzQjtBQUN6Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxFQUFFLHNCQUF5QixtQkFBbUIseUJBQXlCO0FBQ3ZFO0FBQ0E7O0FBRUE7QUFDQSxzQkFBeUIsbUJBQW1CLHlCQUF5QiIsImZpbGUiOiI3MTU0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX2V4dGVuZHMoKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTtcblxuICAgICAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9O1xuXG4gIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbiAgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2V4dGVuZHM7XG5tb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7154\n")},5354:function(module,__unused_webpack_exports,__webpack_require__){eval("var setPrototypeOf = __webpack_require__(9489);\n\nfunction _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n setPrototypeOf(subClass, superClass);\n}\n\nmodule.exports = _inheritsLoose;\nmodule.exports.default = module.exports, module.exports.__esModule = true;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2luaGVyaXRzTG9vc2UuanM/NTViNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxQkFBcUIsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHNCQUF5QixtQkFBbUIseUJBQXlCIiwiZmlsZSI6IjUzNTQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKFwiLi9zZXRQcm90b3R5cGVPZi5qc1wiKTtcblxuZnVuY3Rpb24gX2luaGVyaXRzTG9vc2Uoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzLnByb3RvdHlwZSk7XG4gIHN1YkNsYXNzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IHN1YkNsYXNzO1xuICBzZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2luaGVyaXRzTG9vc2U7XG5tb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5354\n")},5318:function(module){eval('function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n "default": obj\n };\n}\n\nmodule.exports = _interopRequireDefault;\nmodule.exports.default = module.exports, module.exports.__esModule = true;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdC5qcz80ZWE0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxzQkFBeUIsbUJBQW1CLHlCQUF5QiIsImZpbGUiOiI1MzE4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHtcbiAgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHtcbiAgICBcImRlZmF1bHRcIjogb2JqXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdDtcbm1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5318\n')},7316:function(module){eval("function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nmodule.exports = _objectWithoutPropertiesLoose;\nmodule.exports.default = module.exports, module.exports.__esModule = true;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UuanM/ZjBlNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGFBQWEsdUJBQXVCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxzQkFBeUIsbUJBQW1CLHlCQUF5QiIsImZpbGUiOiI3MzE2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkge1xuICBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTtcbiAgdmFyIHRhcmdldCA9IHt9O1xuICB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7XG4gIHZhciBrZXksIGk7XG5cbiAgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHtcbiAgICBrZXkgPSBzb3VyY2VLZXlzW2ldO1xuICAgIGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7XG4gICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2U7XG5tb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7316\n")},9489:function(module){eval("function _setPrototypeOf(o, p) {\n module.exports = _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n module.exports.default = module.exports, module.exports.__esModule = true;\n return _setPrototypeOf(o, p);\n}\n\nmodule.exports = _setPrototypeOf;\nmodule.exports.default = module.exports, module.exports.__esModule = true;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3NldFByb3RvdHlwZU9mLmpzPzRhNGIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxFQUFFLHNCQUF5QixtQkFBbUIseUJBQXlCO0FBQ3ZFO0FBQ0E7O0FBRUE7QUFDQSxzQkFBeUIsbUJBQW1CLHlCQUF5QiIsImZpbGUiOiI5NDg5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgcmV0dXJuIG87XG4gIH07XG5cbiAgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHMsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuICByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9zZXRQcm90b3R5cGVPZjtcbm1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9489\n")},7625:function(I,g,C){var B={"./en":4574,"./en.js":4574,"./es":3745,"./es.js":3745,"./ses":6867,"./ses.js":6867};function n(I){var g=Q(I);return C(g)}function Q(I){if(!C.o(B,I)){var g=new Error("Cannot find module '"+I+"'");throw g.code="MODULE_NOT_FOUND",g}return B[I]}n.keys=function(){return Object.keys(B)},n.resolve=Q,I.exports=n,n.id=7625},7991:function(I){"use strict";I.exports=JSON.parse('{"data":{"en-001":{"year-short":{"0":"this yr","1":"next yr","future":{"one":"in {0} yr","other":"in {0} yr"},"past":{"one":"{0} yr ago","other":"{0} yr ago"},"-1":"last yr"},"year-narrow":{"0":"this yr","1":"next yr","future":{"one":"in {0} yr","other":"in {0} yr"},"past":{"one":"{0} yr ago","other":"{0} yr ago"},"-1":"last yr"},"quarter-short":{"0":"this qtr.","1":"next qtr.","future":{"one":"in {0} qtr","other":"in {0} qtr"},"past":{"one":"{0} qtr ago","other":"{0} qtr ago"},"-1":"last qtr."},"quarter-narrow":{"0":"this qtr.","1":"next qtr.","future":{"one":"in {0} qtr","other":"in {0} qtr"},"past":{"one":"{0} qtr ago","other":"{0} qtr ago"},"-1":"last qtr."},"month-short":{"0":"this mo","1":"next mo","future":{"one":"in {0} mo","other":"in {0} mo"},"past":{"one":"{0} mo ago","other":"{0} mo ago"},"-1":"last mo"},"month-narrow":{"0":"this mo","1":"next mo","future":{"one":"in {0} mo","other":"in {0} mo"},"past":{"one":"{0} mo ago","other":"{0} mo ago"},"-1":"last mo"},"week-short":{"0":"this wk","1":"next wk","future":{"one":"in {0} wk","other":"in {0} wk"},"past":{"one":"{0} wk ago","other":"{0} wk ago"},"-1":"last wk"},"week-narrow":{"0":"this wk","1":"next wk","future":{"one":"in {0} wk","other":"in {0} wk"},"past":{"one":"{0} wk ago","other":"{0} wk ago"},"-1":"last wk"},"hour-short":{"0":"this hour","future":{"one":"in {0} hr","other":"in {0} hr"},"past":{"one":"{0} hr ago","other":"{0} hr ago"}},"hour-narrow":{"0":"this hour","future":{"one":"in {0} hr","other":"in {0} hr"},"past":{"one":"{0} hr ago","other":"{0} hr ago"}},"minute-short":{"0":"this minute","future":{"one":"in {0} min","other":"in {0} min"},"past":{"one":"{0} min ago","other":"{0} min ago"}},"minute-narrow":{"0":"this minute","future":{"one":"in {0} min","other":"in {0} min"},"past":{"one":"{0} min ago","other":"{0} min ago"}},"second-short":{"0":"now","future":{"one":"in {0} sec","other":"in {0} sec"},"past":{"one":"{0} sec ago","other":"{0} sec ago"}},"second-narrow":{"0":"now","future":{"one":"in {0} sec","other":"in {0} sec"},"past":{"one":"{0} sec ago","other":"{0} sec ago"}}},"en-150":{"year-short":{"0":"this yr","1":"next yr","future":{"one":"in {0} yr","other":"in {0} yr"},"past":{"one":"{0} yr ago","other":"{0} yr ago"},"-1":"last yr"},"year-narrow":{"0":"this yr","1":"next yr","future":{"one":"in {0} yr","other":"in {0} yr"},"past":{"one":"{0} yr ago","other":"{0} yr ago"},"-1":"last yr"},"quarter-short":{"0":"this qtr.","1":"next qtr.","future":{"one":"in {0} qtr","other":"in {0} qtr"},"past":{"one":"{0} qtr ago","other":"{0} qtr ago"},"-1":"last qtr."},"quarter-narrow":{"0":"this qtr.","1":"next qtr.","future":{"one":"in {0} qtr","other":"in {0} qtr"},"past":{"one":"{0} qtr ago","other":"{0} qtr ago"},"-1":"last qtr."},"month-short":{"0":"this mo","1":"next mo","future":{"one":"in {0} mo","other":"in {0} mo"},"past":{"one":"{0} mo ago","other":"{0} mo ago"},"-1":"last mo"},"month-narrow":{"0":"this mo","1":"next mo","future":{"one":"in {0} mo","other":"in {0} mo"},"past":{"one":"{0} mo ago","other":"{0} mo ago"},"-1":"last mo"},"week-short":{"0":"this wk","1":"next wk","future":{"one":"in {0} wk","other":"in {0} wk"},"past":{"one":"{0} wk ago","other":"{0} wk ago"},"-1":"last wk"},"week-narrow":{"0":"this wk","1":"next wk","future":{"one":"in {0} wk","other":"in {0} wk"},"past":{"one":"{0} wk ago","other":"{0} wk ago"},"-1":"last wk"},"hour-short":{"0":"this hour","future":{"one":"in {0} hr","other":"in {0} hr"},"past":{"one":"{0} hr ago","other":"{0} hr ago"}},"hour-narrow":{"0":"this hour","future":{"one":"in {0} hr","other":"in {0} hr"},"past":{"one":"{0} hr ago","other":"{0} hr ago"}},"minute-short":{"0":"this minute","future":{"one":"in {0} min","other":"in {0} min"},"past":{"one":"{0} min ago","other":"{0} min ago"}},"minute-narrow":{"0":"this minute","future":{"one":"in {0} min","other":"in {0} min"},"past":{"one":"{0} min ago","other":"{0} min ago"}},"second-short":{"0":"now","future":{"one":"in {0} sec","other":"in {0} sec"},"past":{"one":"{0} sec ago","other":"{0} sec ago"}},"second-narrow":{"0":"now","future":{"one":"in {0} sec","other":"in {0} sec"},"past":{"one":"{0} sec ago","other":"{0} sec ago"}}},"en-AU":{"year-short":{"0":"this yr","1":"next yr","future":{"one":"in {0} yr","other":"in {0} yrs"},"past":{"one":"{0} yr ago","other":"{0} yrs ago"},"-1":"last yr"},"year-narrow":{"0":"this yr","1":"next yr","future":{"one":"in {0} yr","other":"in {0} yrs"},"past":{"one":"{0} yr ago","other":"{0} yrs ago"},"-1":"last yr"},"quarter-short":{"0":"this qtr.","1":"next qtr.","future":{"one":"in {0} qtr","other":"in {0} qtrs"},"past":{"one":"{0} qtr ago","other":"{0} qtrs ago"},"-1":"last qtr."},"quarter-narrow":{"0":"this qtr.","1":"next qtr.","future":{"one":"in {0} qtr","other":"in {0} qtrs"},"past":{"one":"in {0} qtr ago","other":"{0} qtrs ago"},"-1":"last qtr."},"month-short":{"0":"this mo","1":"next mo","future":{"one":"in {0} mo.","other":"in {0} mo."},"past":{"one":"{0} mo. ago","other":"{0} mo. ago"},"-1":"last mo"},"month-narrow":{"0":"this mo","1":"next mo","future":{"one":"in {0} mo.","other":"in {0} mo."},"past":{"one":"{0} mo. ago","other":"{0} mo. ago"},"-1":"last mo"},"week-short":{"0":"this wk","1":"next wk","future":{"one":"in {0} wk","other":"in {0} wks"},"past":{"one":"{0} wk ago","other":"{0} wks ago"},"-1":"last wk"},"week-narrow":{"0":"this wk","1":"next wk","future":{"one":"in {0} wk","other":"in {0} wks"},"past":{"one":"{0} wk ago","other":"{0} wks ago"},"-1":"last wk"},"hour-short":{"0":"this hour","future":{"one":"in {0} hr","other":"in {0} hrs"},"past":{"one":"{0} hr ago","other":"{0} hrs ago"}},"hour-narrow":{"0":"this hour","future":{"one":"in {0} hr","other":"in {0} hrs"},"past":{"one":"{0} hr ago","other":"{0} hrs ago"}},"minute-short":{"0":"this minute","future":{"one":"in {0} min.","other":"in {0} mins"},"past":{"one":"{0} min. ago","other":"{0} mins ago"}},"minute-narrow":{"0":"this minute","future":{"one":"in {0} min.","other":"in {0} mins"},"past":{"one":"{0} min. ago","other":"{0} mins ago"}},"second-short":{"0":"now","future":{"one":"in {0} sec.","other":"in {0} secs"},"past":{"one":"{0} sec. ago","other":"{0} secs ago"}},"second-narrow":{"0":"now","future":{"one":"in {0} sec.","other":"in {0} secs"},"past":{"one":"{0} sec. ago","other":"{0} secs ago"}}},"en-CA":{"year-short":{"0":"this yr","1":"next yr","future":{"one":"in {0} yr.","other":"in {0} yrs."},"past":{"one":"{0} yr. ago","other":"{0} yrs. ago"},"-1":"last yr"},"year-narrow":{"0":"this yr","1":"next yr","future":{"one":"in {0} yr.","other":"in {0} yrs."},"past":{"one":"{0} yr. ago","other":"{0} yrs. ago"},"-1":"last yr"},"quarter-short":{"0":"this qtr.","1":"next qtr.","future":{"one":"in {0} qtr.","other":"in {0} qtrs."},"past":{"one":"{0} qtr. ago","other":"{0} qtrs. ago"},"-1":"last qtr."},"quarter-narrow":{"0":"this qtr.","1":"next qtr.","future":{"one":"in {0} qtr.","other":"in {0} qtrs."},"past":{"one":"{0} qtr. ago","other":"{0} qtrs. ago"},"-1":"last qtr."},"month-short":{"0":"this mo","1":"next mo","future":{"one":"in {0} mo.","other":"in {0} mos."},"past":{"one":"{0} mo. ago","other":"{0} mos. ago"},"-1":"last mo"},"month-narrow":{"0":"this mo","1":"next mo","future":{"one":"in {0} mo.","other":"in {0} mos."},"past":{"one":"{0} mo. ago","other":"{0} mos. ago"},"-1":"last mo"},"week-short":{"0":"this wk","1":"next wk","future":{"one":"in {0} wk.","other":"in {0} wks."},"past":{"one":"{0} wk. ago","other":"{0} wks. ago"},"-1":"last wk"},"week-narrow":{"0":"this wk","1":"next wk","future":{"one":"in {0} wk.","other":"in {0} wks."},"past":{"one":"{0} wk. ago","other":"{0} wks. ago"},"-1":"last wk"},"hour-short":{"0":"this hour","future":{"one":"in {0} hr.","other":"in {0} hrs."},"past":{"one":"{0} hr. ago","other":"{0} hrs. ago"}},"hour-narrow":{"0":"this hour","future":{"one":"in {0} hr.","other":"in {0} hrs."},"past":{"one":"{0} hr. ago","other":"{0} hrs. ago"}},"minute-short":{"0":"this minute","future":{"one":"in {0} min.","other":"in {0} mins."},"past":{"one":"{0} min. ago","other":"{0} mins. ago"}},"minute-narrow":{"0":"this minute","future":{"one":"in {0} min.","other":"in {0} mins."},"past":{"one":"{0} min. ago","other":"{0} mins. ago"}},"second-short":{"0":"now","future":{"one":"in {0} sec.","other":"in {0} secs."},"past":{"one":"{0} sec. ago","other":"{0} secs. ago"}},"second-narrow":{"0":"now","future":{"one":"in {0} sec.","other":"in {0} secs."},"past":{"one":"{0} sec. ago","other":"{0} secs. ago"}}},"en-SG":{"quarter-short":{"0":"this qtr","1":"next qtr","future":{"one":"in {0} qtr","other":"in {0} qtrs"},"past":{"one":"{0} qtr ago","other":"{0} qtrs ago"},"-1":"last qtr"},"quarter-narrow":{"0":"this qtr","1":"next qtr","future":{"one":"in {0} qtr","other":"in {0} qtr"},"past":{"one":"{0} qtr ago","other":"{0} qtr ago"},"-1":"last qtr"},"month-short":{"0":"this mth","1":"next mth","future":{"one":"in {0} mth","other":"in {0} mth"},"past":{"one":"{0} mth ago","other":"{0} mth ago"},"-1":"last mth"}},"en":{"nu":["latn"],"year":{"0":"this year","1":"next year","future":{"one":"in {0} year","other":"in {0} years"},"past":{"one":"{0} year ago","other":"{0} years ago"},"-1":"last year"},"year-short":{"0":"this yr.","1":"next yr.","future":{"one":"in {0} yr.","other":"in {0} yr."},"past":{"one":"{0} yr. ago","other":"{0} yr. ago"},"-1":"last yr."},"year-narrow":{"0":"this yr.","1":"next yr.","future":{"one":"in {0} yr.","other":"in {0} yr."},"past":{"one":"{0} yr. ago","other":"{0} yr. ago"},"-1":"last yr."},"quarter":{"0":"this quarter","1":"next quarter","future":{"one":"in {0} quarter","other":"in {0} quarters"},"past":{"one":"{0} quarter ago","other":"{0} quarters ago"},"-1":"last quarter"},"quarter-short":{"0":"this qtr.","1":"next qtr.","future":{"one":"in {0} qtr.","other":"in {0} qtrs."},"past":{"one":"{0} qtr. ago","other":"{0} qtrs. ago"},"-1":"last qtr."},"quarter-narrow":{"0":"this qtr.","1":"next qtr.","future":{"one":"in {0} qtr.","other":"in {0} qtrs."},"past":{"one":"{0} qtr. ago","other":"{0} qtrs. ago"},"-1":"last qtr."},"month":{"0":"this month","1":"next month","future":{"one":"in {0} month","other":"in {0} months"},"past":{"one":"{0} month ago","other":"{0} months ago"},"-1":"last month"},"month-short":{"0":"this mo.","1":"next mo.","future":{"one":"in {0} mo.","other":"in {0} mo."},"past":{"one":"{0} mo. ago","other":"{0} mo. ago"},"-1":"last mo."},"month-narrow":{"0":"this mo.","1":"next mo.","future":{"one":"in {0} mo.","other":"in {0} mo."},"past":{"one":"{0} mo. ago","other":"{0} mo. ago"},"-1":"last mo."},"week":{"0":"this week","1":"next week","future":{"one":"in {0} week","other":"in {0} weeks"},"past":{"one":"{0} week ago","other":"{0} weeks ago"},"-1":"last week"},"week-short":{"0":"this wk.","1":"next wk.","future":{"one":"in {0} wk.","other":"in {0} wk."},"past":{"one":"{0} wk. ago","other":"{0} wk. ago"},"-1":"last wk."},"week-narrow":{"0":"this wk.","1":"next wk.","future":{"one":"in {0} wk.","other":"in {0} wk."},"past":{"one":"{0} wk. ago","other":"{0} wk. ago"},"-1":"last wk."},"day":{"0":"today","1":"tomorrow","future":{"one":"in {0} day","other":"in {0} days"},"past":{"one":"{0} day ago","other":"{0} days ago"},"-1":"yesterday"},"day-short":{"0":"today","1":"tomorrow","future":{"one":"in {0} day","other":"in {0} days"},"past":{"one":"{0} day ago","other":"{0} days ago"},"-1":"yesterday"},"day-narrow":{"0":"today","1":"tomorrow","future":{"one":"in {0} day","other":"in {0} days"},"past":{"one":"{0} day ago","other":"{0} days ago"},"-1":"yesterday"},"hour":{"0":"this hour","future":{"one":"in {0} hour","other":"in {0} hours"},"past":{"one":"{0} hour ago","other":"{0} hours ago"}},"hour-short":{"0":"this hour","future":{"one":"in {0} hr.","other":"in {0} hr."},"past":{"one":"{0} hr. ago","other":"{0} hr. ago"}},"hour-narrow":{"0":"this hour","future":{"one":"in {0} hr.","other":"in {0} hr."},"past":{"one":"{0} hr. ago","other":"{0} hr. ago"}},"minute":{"0":"this minute","future":{"one":"in {0} minute","other":"in {0} minutes"},"past":{"one":"{0} minute ago","other":"{0} minutes ago"}},"minute-short":{"0":"this minute","future":{"one":"in {0} min.","other":"in {0} min."},"past":{"one":"{0} min. ago","other":"{0} min. ago"}},"minute-narrow":{"0":"this minute","future":{"one":"in {0} min.","other":"in {0} min."},"past":{"one":"{0} min. ago","other":"{0} min. ago"}},"second":{"0":"now","future":{"one":"in {0} second","other":"in {0} seconds"},"past":{"one":"{0} second ago","other":"{0} seconds ago"}},"second-short":{"0":"now","future":{"one":"in {0} sec.","other":"in {0} sec."},"past":{"one":"{0} sec. ago","other":"{0} sec. ago"}},"second-narrow":{"0":"now","future":{"one":"in {0} sec.","other":"in {0} sec."},"past":{"one":"{0} sec. ago","other":"{0} sec. ago"}}}},"availableLocales":["en-001","en-150","en-AE","en-AG","en-AI","en-AS","en-AT","en-AU","en-BB","en-BE","en-BI","en-BM","en-BS","en-BW","en-BZ","en-CA","en-CC","en-CH","en-CK","en-CM","en-CX","en-CY","en-DE","en-DG","en-DK","en-DM","en-ER","en-FI","en-FJ","en-FK","en-FM","en-GB","en-GD","en-GG","en-GH","en-GI","en-GM","en-GU","en-GY","en-HK","en-IE","en-IL","en-IM","en-IN","en-IO","en-JE","en-JM","en-KE","en-KI","en-KN","en-KY","en-LC","en-LR","en-LS","en-MG","en-MH","en-MO","en-MP","en-MS","en-MT","en-MU","en-MW","en-MY","en-NA","en-NF","en-NG","en-NL","en-NR","en-NU","en-NZ","en-PG","en-PH","en-PK","en-PN","en-PR","en-PW","en-RW","en-SB","en-SC","en-SD","en-SE","en-SG","en-SH","en-SI","en-SL","en-SS","en-SX","en-SZ","en-TC","en-TK","en-TO","en-TT","en-TV","en-TZ","en-UG","en-UM","en-US-POSIX","en-US","en-VC","en-VG","en-VI","en-VU","en-WS","en-ZA","en-ZM","en-ZW","en"],"aliases":{},"parentLocales":{"en-150":"en-001","en-AG":"en-001","en-AI":"en-001","en-AU":"en-001","en-BB":"en-001","en-BM":"en-001","en-BS":"en-001","en-BW":"en-001","en-BZ":"en-001","en-CA":"en-001","en-CC":"en-001","en-CK":"en-001","en-CM":"en-001","en-CX":"en-001","en-CY":"en-001","en-DG":"en-001","en-DM":"en-001","en-ER":"en-001","en-FJ":"en-001","en-FK":"en-001","en-FM":"en-001","en-GB":"en-001","en-GD":"en-001","en-GG":"en-001","en-GH":"en-001","en-GI":"en-001","en-GM":"en-001","en-GY":"en-001","en-HK":"en-001","en-IE":"en-001","en-IL":"en-001","en-IM":"en-001","en-IN":"en-001","en-IO":"en-001","en-JE":"en-001","en-JM":"en-001","en-KE":"en-001","en-KI":"en-001","en-KN":"en-001","en-KY":"en-001","en-LC":"en-001","en-LR":"en-001","en-LS":"en-001","en-MG":"en-001","en-MO":"en-001","en-MS":"en-001","en-MT":"en-001","en-MU":"en-001","en-MW":"en-001","en-MY":"en-001","en-NA":"en-001","en-NF":"en-001","en-NG":"en-001","en-NR":"en-001","en-NU":"en-001","en-NZ":"en-001","en-PG":"en-001","en-PH":"en-001","en-PK":"en-001","en-PN":"en-001","en-PW":"en-001","en-RW":"en-001","en-SB":"en-001","en-SC":"en-001","en-SD":"en-001","en-SG":"en-001","en-SH":"en-001","en-SL":"en-001","en-SS":"en-001","en-SX":"en-001","en-SZ":"en-001","en-TC":"en-001","en-TK":"en-001","en-TO":"en-001","en-TT":"en-001","en-TV":"en-001","en-TZ":"en-001","en-UG":"en-001","en-VC":"en-001","en-VG":"en-001","en-VU":"en-001","en-WS":"en-001","en-ZA":"en-001","en-ZM":"en-001","en-ZW":"en-001","en-AT":"en-150","en-BE":"en-150","en-CH":"en-150","en-DE":"en-150","en-DK":"en-150","en-FI":"en-150","en-NL":"en-150","en-SE":"en-150","en-SI":"en-150"}}')},7684:function(I){"use strict";I.exports=JSON.parse('{"data":{"es-419":{"week-short":{"0":"esta sem.","1":"próx. sem.","future":{"one":"dentro de {0} sem.","other":"dentro de {0} sem."},"past":{"one":"hace {0} sem.","other":"hace {0} sem."},"-1":"sem. pas."},"week-narrow":{"0":"esta sem.","1":"próx. sem.","future":{"one":"dentro de {0} sem.","other":"dentro de {0} sem."},"past":{"one":"hace {0} sem.","other":"hace {0} sem."},"-1":"sem. pas."}},"es-AR":{"day-short":{"0":"hoy","1":"mañana","2":"pasado mañana","future":{"one":"dentro de {0} días","other":"dentro de {0} días"},"past":{"one":"hace {0} días","other":"hace {0} días"},"-2":"anteayer","-1":"ayer"},"day-narrow":{"0":"hoy","1":"mañana","2":"pasado mañana","future":{"one":"dentro de {0} días","other":"dentro de {0} días"},"past":{"one":"hace {0} días","other":"hace {0} días"},"-2":"anteayer","-1":"ayer"},"second-short":{"0":"ahora","future":{"one":"dentro de {0} seg.","other":"dentro de {0} seg."},"past":{"one":"hace {0} seg.","other":"hace {0} seg."}},"second-narrow":{"0":"ahora","future":{"one":"dentro de {0} seg.","other":"dentro de {0} seg."},"past":{"one":"hace {0} seg.","other":"hace {0} seg."}}},"es-MX":{"year":{"0":"este año","1":"el año próximo","future":{"one":"dentro de {0} año","other":"dentro de {0} años"},"past":{"one":"hace {0} año","other":"hace {0} años"},"-1":"el año pasado"},"year-short":{"0":"este año","1":"el próximo año","future":{"one":"en {0} a","other":"en {0} a"},"past":{"one":"hace {0} a","other":"hace {0} a"},"-1":"el año pasado"},"year-narrow":{"0":"este año","1":"el próximo año","future":{"one":"en {0} a","other":"en {0} a"},"past":{"one":"-{0} a","other":"-{0} a"},"-1":"el año pasado"},"quarter":{"0":"este trimestre","1":"el próximo trimestre","future":{"one":"en {0} trimestre","other":"dentro de {0} trimetres"},"past":{"one":"hace {0} trimestre","other":"hace {0} trimestres"},"-1":"el trimestre pasado"},"quarter-short":{"0":"este trimestre","1":"el próximo trimestre","future":{"one":"en {0} trim.","other":"en {0} trim"},"past":{"one":"hace {0} trim.","other":"hace {0} trim."},"-1":"el trimestre pasado"},"quarter-narrow":{"0":"este trimestre","1":"el próximo trimestre","future":{"one":"en {0} trim.","other":"en {0} trim."},"past":{"one":"-{0} T","other":"-{0} T"},"-1":"el trimestre pasado"},"month":{"0":"este mes","1":"el mes próximo","future":{"one":"en {0} mes","other":"en {0} meses"},"past":{"one":"hace {0} mes","other":"hace {0} meses"},"-1":"el mes pasado"},"month-short":{"0":"este mes","1":"el próximo mes","future":{"one":"en {0} m","other":"en {0} m"},"past":{"one":"hace {0} m","other":"hace {0} m"},"-1":"el mes pasado"},"month-narrow":{"0":"este mes","1":"el próximo mes","future":{"one":"+{0} m","other":"+{0} m"},"past":{"one":"-{0} m","other":"-{0} m"},"-1":"el mes pasado"},"week":{"0":"esta semana","1":"la semana próxima","future":{"one":"dentro de {0} semana","other":"dentro de {0} semanas"},"past":{"one":"hace {0} semana","other":"hace {0} semanas"},"-1":"la semana pasada"},"week-short":{"0":"esta sem.","1":"próx. sem.","future":{"one":"en {0} sem.","other":"en {0} sem."},"past":{"one":"hace {0} sem.","other":"hace {0} sem."},"-1":"sem. pas."},"day-short":{"0":"hoy","1":"mañana","2":"pasado mañana","future":{"one":"en {0} día","other":"en {0} días"},"past":{"one":"hace {0} día","other":"hace {0} días"},"-2":"anteayer","-1":"ayer"},"day-narrow":{"0":"hoy","1":"mañana","2":"pasado mañana","future":{"one":"+{0} día","other":"en {0} días"},"past":{"one":"hace {0} día","other":"hace {0} días"},"-2":"anteayer","-1":"ayer"},"hour-short":{"0":"esta hora","future":{"one":"en {0} h","other":"en {0} n"},"past":{"one":"hace {0} h","other":"hace {0} h"}},"minute-short":{"0":"este minuto","future":{"one":"en {0} min","other":"en {0} min"},"past":{"one":"hace {0} min","other":"hace {0} min"}},"minute-narrow":{"0":"este minuto","future":{"one":"en {0} min","other":"en {0} min"},"past":{"one":"hace {0} min","other":"hace {0} min"}},"second-short":{"0":"ahora","future":{"one":"en {0} s","other":"en {0} s"},"past":{"one":"hace {0} s","other":"hace {0} s"}},"second-narrow":{"0":"ahora","future":{"one":"+{0} s","other":"+{0} s"},"past":{"one":"hace {0} s","other":"hace {0} s"}}},"es-PY":{"second-short":{"0":"ahora","future":{"one":"dentro de {0} seg.","other":"dentro de {0} seg."},"past":{"one":"hace {0} seg.","other":"hace {0} seg."}},"second-narrow":{"0":"ahora","future":{"one":"dentro de {0} seg.","other":"dentro de {0} seg."},"past":{"one":"hace {0} seg.","other":"hace {0} seg."}}},"es-SV":{"day":{"0":"hoy","1":"mañana","2":"pasado mañana","future":{"one":"dentro de {0} día","other":"dentro de {0} días"},"past":{"one":"hace {0} día","other":"hace {0} días"},"-2":"antier","-1":"ayer"}},"es-US":{"year":{"0":"este año","1":"el año próximo","future":{"one":"dentro de {0} año","other":"dentro de {0} años"},"past":{"one":"hace {0} año","other":"hace {0} años"},"-1":"el año pasado"},"quarter":{"0":"este trimestre","1":"el próximo trimestre","future":{"one":"dentro de {0} trimetre","other":"dentro de {0} trimetres"},"past":{"one":"hace {0} trimestre","other":"hace {0} trimestres"},"-1":"el trimestre pasado"},"month":{"0":"este mes","1":"el mes próximo","future":{"one":"dentro de {0} mes","other":"dentro de {0} meses"},"past":{"one":"hace {0} mes","other":"hace {0} meses"},"-1":"el mes pasado"},"week":{"0":"esta semana","1":"la semana próxima","future":{"one":"dentro de {0} semana","other":"dentro de {0} semanas"},"past":{"one":"hace {0} semana","other":"hace {0} semanas"},"-1":"la semana pasada"}},"es":{"nu":["latn"],"year":{"0":"este año","1":"el próximo año","future":{"one":"dentro de {0} año","other":"dentro de {0} años"},"past":{"one":"hace {0} año","other":"hace {0} años"},"-1":"el año pasado"},"year-short":{"0":"este año","1":"el próximo año","future":{"one":"dentro de {0} a","other":"dentro de {0} a"},"past":{"one":"hace {0} a","other":"hace {0} a"},"-1":"el año pasado"},"year-narrow":{"0":"este año","1":"el próximo año","future":{"one":"dentro de {0} a","other":"dentro de {0} a"},"past":{"one":"hace {0} a","other":"hace {0} a"},"-1":"el año pasado"},"quarter":{"0":"este trimestre","1":"el próximo trimestre","future":{"one":"dentro de {0} trimestre","other":"dentro de {0} trimestres"},"past":{"one":"hace {0} trimestre","other":"hace {0} trimestres"},"-1":"el trimestre pasado"},"quarter-short":{"0":"este trimestre","1":"el próximo trimestre","future":{"one":"dentro de {0} trim.","other":"dentro de {0} trim."},"past":{"one":"hace {0} trim.","other":"hace {0} trim."},"-1":"el trimestre pasado"},"quarter-narrow":{"0":"este trimestre","1":"el próximo trimestre","future":{"one":"dentro de {0} trim.","other":"dentro de {0} trim."},"past":{"one":"hace {0} trim.","other":"hace {0} trim."},"-1":"el trimestre pasado"},"month":{"0":"este mes","1":"el próximo mes","future":{"one":"dentro de {0} mes","other":"dentro de {0} meses"},"past":{"one":"hace {0} mes","other":"hace {0} meses"},"-1":"el mes pasado"},"month-short":{"0":"este mes","1":"el próximo mes","future":{"one":"dentro de {0} m","other":"dentro de {0} m"},"past":{"one":"hace {0} m","other":"hace {0} m"},"-1":"el mes pasado"},"month-narrow":{"0":"este mes","1":"el próximo mes","future":{"one":"dentro de {0} m","other":"dentro de {0} m"},"past":{"one":"hace {0} m","other":"hace {0} m"},"-1":"el mes pasado"},"week":{"0":"esta semana","1":"la próxima semana","future":{"one":"dentro de {0} semana","other":"dentro de {0} semanas"},"past":{"one":"hace {0} semana","other":"hace {0} semanas"},"-1":"la semana pasada"},"week-short":{"0":"esta sem.","1":"próx. sem.","future":{"one":"dentro de {0} sem.","other":"dentro de {0} sem."},"past":{"one":"hace {0} sem.","other":"hace {0} sem."},"-1":"sem. ant."},"week-narrow":{"0":"esta sem.","1":"próx. sem.","future":{"one":"dentro de {0} sem.","other":"dentro de {0} sem."},"past":{"one":"hace {0} sem.","other":"hace {0} sem."},"-1":"sem. ant."},"day":{"0":"hoy","1":"mañana","2":"pasado mañana","future":{"one":"dentro de {0} día","other":"dentro de {0} días"},"past":{"one":"hace {0} día","other":"hace {0} días"},"-2":"anteayer","-1":"ayer"},"day-short":{"0":"hoy","1":"mañana","2":"pasado mañana","future":{"one":"dentro de {0} día","other":"dentro de {0} días"},"past":{"one":"hace {0} día","other":"hace {0} días"},"-2":"anteayer","-1":"ayer"},"day-narrow":{"0":"hoy","1":"mañana","2":"pasado mañana","future":{"one":"dentro de {0} día","other":"dentro de {0} días"},"past":{"one":"hace {0} día","other":"hace {0} días"},"-2":"anteayer","-1":"ayer"},"hour":{"0":"esta hora","future":{"one":"dentro de {0} hora","other":"dentro de {0} horas"},"past":{"one":"hace {0} hora","other":"hace {0} horas"}},"hour-short":{"0":"esta hora","future":{"one":"dentro de {0} h","other":"dentro de {0} h"},"past":{"one":"hace {0} h","other":"hace {0} h"}},"hour-narrow":{"0":"esta hora","future":{"one":"dentro de {0} h","other":"dentro de {0} h"},"past":{"one":"hace {0} h","other":"hace {0} h"}},"minute":{"0":"este minuto","future":{"one":"dentro de {0} minuto","other":"dentro de {0} minutos"},"past":{"one":"hace {0} minuto","other":"hace {0} minutos"}},"minute-short":{"0":"este minuto","future":{"one":"dentro de {0} min","other":"dentro de {0} min"},"past":{"one":"hace {0} min","other":"hace {0} min"}},"minute-narrow":{"0":"este minuto","future":{"one":"dentro de {0} min","other":"dentro de {0} min"},"past":{"one":"hace {0} min","other":"hace {0} min"}},"second":{"0":"ahora","future":{"one":"dentro de {0} segundo","other":"dentro de {0} segundos"},"past":{"one":"hace {0} segundo","other":"hace {0} segundos"}},"second-short":{"0":"ahora","future":{"one":"dentro de {0} s","other":"dentro de {0} s"},"past":{"one":"hace {0} s","other":"hace {0} s"}},"second-narrow":{"0":"ahora","future":{"one":"dentro de {0} s","other":"dentro de {0} s"},"past":{"one":"hace {0} s","other":"hace {0} s"}}}},"availableLocales":["es-419","es-AR","es-BO","es-BR","es-BZ","es-CL","es-CO","es-CR","es-CU","es-DO","es-EA","es-EC","es-GQ","es-GT","es-HN","es-IC","es-MX","es-NI","es-PA","es-PE","es-PH","es-PR","es-PY","es-SV","es-US","es-UY","es-VE","es"],"aliases":{},"parentLocales":{"es-AR":"es-419","es-BO":"es-419","es-BR":"es-419","es-BZ":"es-419","es-CL":"es-419","es-CO":"es-419","es-CR":"es-419","es-CU":"es-419","es-DO":"es-419","es-EC":"es-419","es-GT":"es-419","es-HN":"es-419","es-MX":"es-419","es-NI":"es-419","es-PA":"es-419","es-PE":"es-419","es-PR":"es-419","es-PY":"es-419","es-SV":"es-419","es-US":"es-419","es-UY":"es-419","es-VE":"es-419"}}')},8385:function(I){"use strict";I.exports=JSON.parse('{"data":{"ses":{"nu":["latn"],"year":{"0":"this year","1":"next year","future":{"other":"+{0} y"},"past":{"other":"-{0} y"},"-1":"last year"},"year-short":{"0":"this year","1":"next year","future":{"other":"+{0} y"},"past":{"other":"-{0} y"},"-1":"last year"},"year-narrow":{"0":"this year","1":"next year","future":{"other":"+{0} y"},"past":{"other":"-{0} y"},"-1":"last year"},"quarter":{"0":"this quarter","1":"next quarter","future":{"other":"+{0} Q"},"past":{"other":"-{0} Q"},"-1":"last quarter"},"quarter-short":{"0":"this quarter","1":"next quarter","future":{"other":"+{0} Q"},"past":{"other":"-{0} Q"},"-1":"last quarter"},"quarter-narrow":{"0":"this quarter","1":"next quarter","future":{"other":"+{0} Q"},"past":{"other":"-{0} Q"},"-1":"last quarter"},"month":{"0":"this month","1":"next month","future":{"other":"+{0} m"},"past":{"other":"-{0} m"},"-1":"last month"},"month-short":{"0":"this month","1":"next month","future":{"other":"+{0} m"},"past":{"other":"-{0} m"},"-1":"last month"},"month-narrow":{"0":"this month","1":"next month","future":{"other":"+{0} m"},"past":{"other":"-{0} m"},"-1":"last month"},"week":{"0":"this week","1":"next week","future":{"other":"+{0} w"},"past":{"other":"-{0} w"},"-1":"last week"},"week-short":{"0":"this week","1":"next week","future":{"other":"+{0} w"},"past":{"other":"-{0} w"},"-1":"last week"},"week-narrow":{"0":"this week","1":"next week","future":{"other":"+{0} w"},"past":{"other":"-{0} w"},"-1":"last week"},"day":{"0":"Hõo","1":"Suba","future":{"other":"+{0} d"},"past":{"other":"-{0} d"},"-1":"Bi"},"day-short":{"0":"Hõo","1":"Suba","future":{"other":"+{0} d"},"past":{"other":"-{0} d"},"-1":"Bi"},"day-narrow":{"0":"Hõo","1":"Suba","future":{"other":"+{0} d"},"past":{"other":"-{0} d"},"-1":"Bi"},"hour":{"0":"this hour","future":{"other":"+{0} h"},"past":{"other":"-{0} h"}},"hour-short":{"0":"this hour","future":{"other":"+{0} h"},"past":{"other":"-{0} h"}},"hour-narrow":{"0":"this hour","future":{"other":"+{0} h"},"past":{"other":"-{0} h"}},"minute":{"0":"this minute","future":{"other":"+{0} min"},"past":{"other":"-{0} min"}},"minute-short":{"0":"this minute","future":{"other":"+{0} min"},"past":{"other":"-{0} min"}},"minute-narrow":{"0":"this minute","future":{"other":"+{0} min"},"past":{"other":"-{0} min"}},"second":{"0":"now","future":{"other":"+{0} s"},"past":{"other":"-{0} s"}},"second-short":{"0":"now","future":{"other":"+{0} s"},"past":{"other":"-{0} s"}},"second-narrow":{"0":"now","future":{"other":"+{0} s"},"past":{"other":"-{0} s"}}}},"availableLocales":["ses"],"aliases":{},"parentLocales":{}}')},1666:function(I,g,C){var B={"./en":8079,"./en.js":8079,"./en.json":7991,"./es":4033,"./es.js":4033,"./es.json":7684,"./ses":9584,"./ses.js":9584,"./ses.json":8385};function n(I){var g=Q(I);return C(g)}function Q(I){if(!C.o(B,I)){var g=new Error("Cannot find module '"+I+"'");throw g.code="MODULE_NOT_FOUND",g}return B[I]}n.keys=function(){return Object.keys(B)},n.resolve=Q,I.exports=n,n.id=1666},3012:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar __spreadArrays = this && this.__spreadArrays || function () {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) {\n s += arguments[i].length;\n }\n\n for (var r = Array(s), k = 0, i = 0; i < il; i++) {\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) {\n r[k] = a[j];\n }\n }\n\n return r;\n};\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n\nvar intl_utils_1 = __webpack_require__(2650);\n\nfunction validateInstance(instance, method) {\n if (!(instance instanceof PluralRules)) {\n throw new TypeError(\"Method Intl.PluralRules.prototype.\" + method + \" called on incompatible receiver \" + String(instance));\n }\n}\n/**\n * https://tc39.es/ecma402/#sec-torawprecision\n * @param x\n * @param minPrecision\n * @param maxPrecision\n */\n\n\nfunction toRawPrecision(x, minPrecision, maxPrecision) {\n var m = x.toPrecision(maxPrecision);\n\n if (~m.indexOf('.') && maxPrecision > minPrecision) {\n var cut = maxPrecision - minPrecision;\n\n while (cut > 0 && m[m.length - 1] === '0') {\n m = m.slice(0, m.length - 1);\n cut--;\n }\n\n if (m[m.length - 1] === '.') {\n return m.slice(0, m.length - 1);\n }\n }\n\n return m;\n}\n/**\n * https://tc39.es/ecma402/#sec-torawfixed\n * @param x\n * @param minInteger\n * @param minFraction\n * @param maxFraction\n */\n\n\nfunction toRawFixed(x, minInteger, minFraction, maxFraction) {\n var cut = maxFraction - minFraction;\n var m = x.toFixed(maxFraction);\n\n while (cut > 0 && m[m.length - 1] === '0') {\n m = m.slice(0, m.length - 1);\n cut--;\n }\n\n if (m[m.length - 1] === '.') {\n m = m.slice(0, m.length - 1);\n }\n\n var int = m.split('.')[0].length;\n\n if (int < minInteger) {\n var z = '';\n\n for (; z.length < minInteger - int; z += '0') {\n ;\n }\n\n m = z + m;\n }\n\n return m;\n}\n\nfunction formatNumericToString(internalSlotMap, pl, x) {\n var minimumSignificantDigits = intl_utils_1.getInternalSlot(internalSlotMap, pl, 'minimumSignificantDigits');\n var maximumSignificantDigits = intl_utils_1.getInternalSlot(internalSlotMap, pl, 'maximumSignificantDigits');\n\n if (minimumSignificantDigits !== undefined && maximumSignificantDigits !== undefined) {\n return toRawPrecision(x, minimumSignificantDigits, maximumSignificantDigits);\n }\n\n return toRawFixed(x, intl_utils_1.getInternalSlot(internalSlotMap, pl, 'minimumIntegerDigits'), intl_utils_1.getInternalSlot(internalSlotMap, pl, 'minimumFractionDigits'), intl_utils_1.getInternalSlot(internalSlotMap, pl, 'maximumFractionDigits'));\n}\n\nvar PluralRules =\n/** @class */\nfunction () {\n function PluralRules(locales, options) {\n // test262/test/intl402/RelativeTimeFormat/constructor/constructor/newtarget-undefined.js\n // Cannot use `new.target` bc of IE11 & TS transpiles it to something else\n var newTarget = this && this instanceof PluralRules ? this.constructor : void 0;\n\n if (!newTarget) {\n throw new TypeError(\"Intl.PluralRules must be called with 'new'\");\n }\n\n var requestedLocales = intl_utils_1.getCanonicalLocales(locales);\n var opt = Object.create(null);\n var opts = options === undefined ? Object.create(null) : intl_utils_1.toObject(options);\n intl_utils_1.setInternalSlot(PluralRules.__INTERNAL_SLOT_MAP__, this, 'initializedPluralRules', true);\n var matcher = intl_utils_1.getOption(opts, 'localeMatcher', 'string', ['best fit', 'lookup'], 'best fit');\n opt.localeMatcher = matcher;\n intl_utils_1.setInternalSlot(PluralRules.__INTERNAL_SLOT_MAP__, this, 'type', intl_utils_1.getOption(opts, 'type', 'string', ['cardinal', 'ordinal'], 'cardinal'));\n intl_utils_1.setNumberFormatDigitOptions(PluralRules.__INTERNAL_SLOT_MAP__, this, opts, 0, 3);\n var r = intl_utils_1.createResolveLocale(PluralRules.getDefaultLocale)(PluralRules.availableLocales, requestedLocales, opt, PluralRules.relevantExtensionKeys, PluralRules.localeData);\n intl_utils_1.setInternalSlot(PluralRules.__INTERNAL_SLOT_MAP__, this, 'locale', r.locale);\n }\n\n PluralRules.prototype.resolvedOptions = function () {\n var _this = this;\n\n validateInstance(this, 'resolvedOptions');\n var opts = Object.create(null);\n opts.locale = intl_utils_1.getInternalSlot(PluralRules.__INTERNAL_SLOT_MAP__, this, 'locale');\n opts.type = intl_utils_1.getInternalSlot(PluralRules.__INTERNAL_SLOT_MAP__, this, 'type');\n ['minimumIntegerDigits', 'minimumFractionDigits', 'maximumFractionDigits', 'minimumSignificantDigits', 'maximumSignificantDigits'].forEach(function (field) {\n var val = intl_utils_1.getInternalSlot(PluralRules.__INTERNAL_SLOT_MAP__, _this, field);\n\n if (val !== undefined) {\n opts[field] = val;\n }\n });\n opts.pluralCategories = __spreadArrays(PluralRules.localeData[opts.locale].categories[opts.type]);\n return opts;\n };\n\n PluralRules.prototype.select = function (val) {\n validateInstance(this, 'select');\n var locale = intl_utils_1.getInternalSlot(PluralRules.__INTERNAL_SLOT_MAP__, this, 'locale');\n var type = intl_utils_1.getInternalSlot(PluralRules.__INTERNAL_SLOT_MAP__, this, 'type');\n return PluralRules.localeData[locale].fn(formatNumericToString(PluralRules.__INTERNAL_SLOT_MAP__, this, Math.abs(Number(val))), type == 'ordinal');\n };\n\n PluralRules.prototype.toString = function () {\n return '[object Intl.PluralRules]';\n };\n\n PluralRules.supportedLocalesOf = function (locales, options) {\n return intl_utils_1.supportedLocales(PluralRules.availableLocales, intl_utils_1.getCanonicalLocales(locales), options);\n };\n\n PluralRules.__addLocaleData = function () {\n var data = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n data[_i] = arguments[_i];\n }\n\n var _loop_1 = function _loop_1(datum) {\n var availableLocales = Object.keys(__spreadArrays(datum.availableLocales, Object.keys(datum.aliases), Object.keys(datum.parentLocales)).reduce(function (all, k) {\n all[k] = true;\n return all;\n }, {}));\n availableLocales.forEach(function (locale) {\n try {\n PluralRules.localeData[locale] = intl_utils_1.unpackData(locale, datum);\n } catch (e) {\n if (intl_utils_1.isMissingLocaleDataError(e)) {\n // If we just don't have data for certain locale, that's ok\n return;\n }\n\n throw e;\n }\n });\n };\n\n for (var _a = 0, data_1 = data; _a < data_1.length; _a++) {\n var datum = data_1[_a];\n\n _loop_1(datum);\n }\n\n PluralRules.availableLocales = Object.keys(PluralRules.localeData);\n\n if (!PluralRules.__defaultLocale) {\n PluralRules.__defaultLocale = PluralRules.availableLocales[0];\n }\n };\n\n PluralRules.getDefaultLocale = function () {\n return PluralRules.__defaultLocale;\n };\n\n PluralRules.localeData = {};\n PluralRules.availableLocales = [];\n PluralRules.__defaultLocale = 'en';\n PluralRules.relevantExtensionKeys = [];\n PluralRules.polyfilled = true;\n PluralRules.__INTERNAL_SLOT_MAP__ = new WeakMap();\n return PluralRules;\n}();\n\nexports.PluralRules = PluralRules;\n\ntry {\n // https://github.com/tc39/test262/blob/master/test/intl402/PluralRules/length.js\n Object.defineProperty(PluralRules, 'length', {\n value: 0,\n writable: false,\n enumerable: false,\n configurable: true\n }); // https://github.com/tc39/test262/blob/master/test/intl402/RelativeTimeFormat/constructor/length.js\n\n Object.defineProperty(PluralRules.prototype.constructor, 'length', {\n value: 0,\n writable: false,\n enumerable: false,\n configurable: true\n }); // https://github.com/tc39/test262/blob/master/test/intl402/RelativeTimeFormat/constructor/supportedLocalesOf/length.js\n\n Object.defineProperty(PluralRules.supportedLocalesOf, 'length', {\n value: 1,\n writable: false,\n enumerable: false,\n configurable: true\n });\n} catch (ex) {// Meta fixes for test262\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AZm9ybWF0anMvaW50bC1wbHVyYWxydWxlcy9kaXN0L2NvcmUuanM/NjIxMiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLCtDQUErQyxRQUFRO0FBQ3ZEO0FBQ0E7O0FBRUEsc0NBQXNDLFFBQVE7QUFDOUMsb0RBQW9ELFFBQVE7QUFDNUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsOENBQTZDO0FBQzdDO0FBQ0EsQ0FBQyxFQUFDOztBQUVGLG1CQUFtQixtQkFBTyxDQUFDLElBQXNCOztBQUVqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsVUFBVSw2QkFBNkI7QUFDdkM7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxvQkFBb0IsdUJBQXVCO0FBQzNDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLElBQUk7QUFDWDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQSxtQ0FBbUMsb0JBQW9CO0FBQ3ZEOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCxtQkFBbUI7O0FBRW5CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRyxFQUFFOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHLEVBQUU7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDLGFBQWE7QUFDZCIsImZpbGUiOiIzMDEyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfX3NwcmVhZEFycmF5cyA9IHRoaXMgJiYgdGhpcy5fX3NwcmVhZEFycmF5cyB8fCBmdW5jdGlvbiAoKSB7XG4gIGZvciAodmFyIHMgPSAwLCBpID0gMCwgaWwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgaWw7IGkrKykge1xuICAgIHMgKz0gYXJndW1lbnRzW2ldLmxlbmd0aDtcbiAgfVxuXG4gIGZvciAodmFyIHIgPSBBcnJheShzKSwgayA9IDAsIGkgPSAwOyBpIDwgaWw7IGkrKykge1xuICAgIGZvciAodmFyIGEgPSBhcmd1bWVudHNbaV0sIGogPSAwLCBqbCA9IGEubGVuZ3RoOyBqIDwgamw7IGorKywgaysrKSB7XG4gICAgICByW2tdID0gYVtqXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcjtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBpbnRsX3V0aWxzXzEgPSByZXF1aXJlKFwiQGZvcm1hdGpzL2ludGwtdXRpbHNcIik7XG5cbmZ1bmN0aW9uIHZhbGlkYXRlSW5zdGFuY2UoaW5zdGFuY2UsIG1ldGhvZCkge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIFBsdXJhbFJ1bGVzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJNZXRob2QgSW50bC5QbHVyYWxSdWxlcy5wcm90b3R5cGUuXCIgKyBtZXRob2QgKyBcIiBjYWxsZWQgb24gaW5jb21wYXRpYmxlIHJlY2VpdmVyIFwiICsgU3RyaW5nKGluc3RhbmNlKSk7XG4gIH1cbn1cbi8qKlxuICogaHR0cHM6Ly90YzM5LmVzL2VjbWE0MDIvI3NlYy10b3Jhd3ByZWNpc2lvblxuICogQHBhcmFtIHhcbiAqIEBwYXJhbSBtaW5QcmVjaXNpb25cbiAqIEBwYXJhbSBtYXhQcmVjaXNpb25cbiAqL1xuXG5cbmZ1bmN0aW9uIHRvUmF3UHJlY2lzaW9uKHgsIG1pblByZWNpc2lvbiwgbWF4UHJlY2lzaW9uKSB7XG4gIHZhciBtID0geC50b1ByZWNpc2lvbihtYXhQcmVjaXNpb24pO1xuXG4gIGlmICh+bS5pbmRleE9mKCcuJykgJiYgbWF4UHJlY2lzaW9uID4gbWluUHJlY2lzaW9uKSB7XG4gICAgdmFyIGN1dCA9IG1heFByZWNpc2lvbiAtIG1pblByZWNpc2lvbjtcblxuICAgIHdoaWxlIChjdXQgPiAwICYmIG1bbS5sZW5ndGggLSAxXSA9PT0gJzAnKSB7XG4gICAgICBtID0gbS5zbGljZSgwLCBtLmxlbmd0aCAtIDEpO1xuICAgICAgY3V0LS07XG4gICAgfVxuXG4gICAgaWYgKG1bbS5sZW5ndGggLSAxXSA9PT0gJy4nKSB7XG4gICAgICByZXR1cm4gbS5zbGljZSgwLCBtLmxlbmd0aCAtIDEpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtO1xufVxuLyoqXG4gKiBodHRwczovL3RjMzkuZXMvZWNtYTQwMi8jc2VjLXRvcmF3Zml4ZWRcbiAqIEBwYXJhbSB4XG4gKiBAcGFyYW0gbWluSW50ZWdlclxuICogQHBhcmFtIG1pbkZyYWN0aW9uXG4gKiBAcGFyYW0gbWF4RnJhY3Rpb25cbiAqL1xuXG5cbmZ1bmN0aW9uIHRvUmF3Rml4ZWQoeCwgbWluSW50ZWdlciwgbWluRnJhY3Rpb24sIG1heEZyYWN0aW9uKSB7XG4gIHZhciBjdXQgPSBtYXhGcmFjdGlvbiAtIG1pbkZyYWN0aW9uO1xuICB2YXIgbSA9IHgudG9GaXhlZChtYXhGcmFjdGlvbik7XG5cbiAgd2hpbGUgKGN1dCA+IDAgJiYgbVttLmxlbmd0aCAtIDFdID09PSAnMCcpIHtcbiAgICBtID0gbS5zbGljZSgwLCBtLmxlbmd0aCAtIDEpO1xuICAgIGN1dC0tO1xuICB9XG5cbiAgaWYgKG1bbS5sZW5ndGggLSAxXSA9PT0gJy4nKSB7XG4gICAgbSA9IG0uc2xpY2UoMCwgbS5sZW5ndGggLSAxKTtcbiAgfVxuXG4gIHZhciBpbnQgPSBtLnNwbGl0KCcuJylbMF0ubGVuZ3RoO1xuXG4gIGlmIChpbnQgPCBtaW5JbnRlZ2VyKSB7XG4gICAgdmFyIHogPSAnJztcblxuICAgIGZvciAoOyB6Lmxlbmd0aCA8IG1pbkludGVnZXIgLSBpbnQ7IHogKz0gJzAnKSB7XG4gICAgICA7XG4gICAgfVxuXG4gICAgbSA9IHogKyBtO1xuICB9XG5cbiAgcmV0dXJuIG07XG59XG5cbmZ1bmN0aW9uIGZvcm1hdE51bWVyaWNUb1N0cmluZyhpbnRlcm5hbFNsb3RNYXAsIHBsLCB4KSB7XG4gIHZhciBtaW5pbXVtU2lnbmlmaWNhbnREaWdpdHMgPSBpbnRsX3V0aWxzXzEuZ2V0SW50ZXJuYWxTbG90KGludGVybmFsU2xvdE1hcCwgcGwsICdtaW5pbXVtU2lnbmlmaWNhbnREaWdpdHMnKTtcbiAgdmFyIG1heGltdW1TaWduaWZpY2FudERpZ2l0cyA9IGludGxfdXRpbHNfMS5nZXRJbnRlcm5hbFNsb3QoaW50ZXJuYWxTbG90TWFwLCBwbCwgJ21heGltdW1TaWduaWZpY2FudERpZ2l0cycpO1xuXG4gIGlmIChtaW5pbXVtU2lnbmlmaWNhbnREaWdpdHMgIT09IHVuZGVmaW5lZCAmJiBtYXhpbXVtU2lnbmlmaWNhbnREaWdpdHMgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB0b1Jhd1ByZWNpc2lvbih4LCBtaW5pbXVtU2lnbmlmaWNhbnREaWdpdHMsIG1heGltdW1TaWduaWZpY2FudERpZ2l0cyk7XG4gIH1cblxuICByZXR1cm4gdG9SYXdGaXhlZCh4LCBpbnRsX3V0aWxzXzEuZ2V0SW50ZXJuYWxTbG90KGludGVybmFsU2xvdE1hcCwgcGwsICdtaW5pbXVtSW50ZWdlckRpZ2l0cycpLCBpbnRsX3V0aWxzXzEuZ2V0SW50ZXJuYWxTbG90KGludGVybmFsU2xvdE1hcCwgcGwsICdtaW5pbXVtRnJhY3Rpb25EaWdpdHMnKSwgaW50bF91dGlsc18xLmdldEludGVybmFsU2xvdChpbnRlcm5hbFNsb3RNYXAsIHBsLCAnbWF4aW11bUZyYWN0aW9uRGlnaXRzJykpO1xufVxuXG52YXIgUGx1cmFsUnVsZXMgPVxuLyoqIEBjbGFzcyAqL1xuZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBQbHVyYWxSdWxlcyhsb2NhbGVzLCBvcHRpb25zKSB7XG4gICAgLy8gdGVzdDI2Mi90ZXN0L2ludGw0MDIvUmVsYXRpdmVUaW1lRm9ybWF0L2NvbnN0cnVjdG9yL2NvbnN0cnVjdG9yL25ld3RhcmdldC11bmRlZmluZWQuanNcbiAgICAvLyBDYW5ub3QgdXNlIGBuZXcudGFyZ2V0YCBiYyBvZiBJRTExICYgVFMgdHJhbnNwaWxlcyBpdCB0byBzb21ldGhpbmcgZWxzZVxuICAgIHZhciBuZXdUYXJnZXQgPSB0aGlzICYmIHRoaXMgaW5zdGFuY2VvZiBQbHVyYWxSdWxlcyA/IHRoaXMuY29uc3RydWN0b3IgOiB2b2lkIDA7XG5cbiAgICBpZiAoIW5ld1RhcmdldCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludGwuUGx1cmFsUnVsZXMgbXVzdCBiZSBjYWxsZWQgd2l0aCAnbmV3J1wiKTtcbiAgICB9XG5cbiAgICB2YXIgcmVxdWVzdGVkTG9jYWxlcyA9IGludGxfdXRpbHNfMS5nZXRDYW5vbmljYWxMb2NhbGVzKGxvY2FsZXMpO1xuICAgIHZhciBvcHQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHZhciBvcHRzID0gb3B0aW9ucyA9PT0gdW5kZWZpbmVkID8gT2JqZWN0LmNyZWF0ZShudWxsKSA6IGludGxfdXRpbHNfMS50b09iamVjdChvcHRpb25zKTtcbiAgICBpbnRsX3V0aWxzXzEuc2V0SW50ZXJuYWxTbG90KFBsdXJhbFJ1bGVzLl9fSU5URVJOQUxfU0xPVF9NQVBfXywgdGhpcywgJ2luaXRpYWxpemVkUGx1cmFsUnVsZXMnLCB0cnVlKTtcbiAgICB2YXIgbWF0Y2hlciA9IGludGxfdXRpbHNfMS5nZXRPcHRpb24ob3B0cywgJ2xvY2FsZU1hdGNoZXInLCAnc3RyaW5nJywgWydiZXN0IGZpdCcsICdsb29rdXAnXSwgJ2Jlc3QgZml0Jyk7XG4gICAgb3B0LmxvY2FsZU1hdGNoZXIgPSBtYXRjaGVyO1xuICAgIGludGxfdXRpbHNfMS5zZXRJbnRlcm5hbFNsb3QoUGx1cmFsUnVsZXMuX19JTlRFUk5BTF9TTE9UX01BUF9fLCB0aGlzLCAndHlwZScsIGludGxfdXRpbHNfMS5nZXRPcHRpb24ob3B0cywgJ3R5cGUnLCAnc3RyaW5nJywgWydjYXJkaW5hbCcsICdvcmRpbmFsJ10sICdjYXJkaW5hbCcpKTtcbiAgICBpbnRsX3V0aWxzXzEuc2V0TnVtYmVyRm9ybWF0RGlnaXRPcHRpb25zKFBsdXJhbFJ1bGVzLl9fSU5URVJOQUxfU0xPVF9NQVBfXywgdGhpcywgb3B0cywgMCwgMyk7XG4gICAgdmFyIHIgPSBpbnRsX3V0aWxzXzEuY3JlYXRlUmVzb2x2ZUxvY2FsZShQbHVyYWxSdWxlcy5nZXREZWZhdWx0TG9jYWxlKShQbHVyYWxSdWxlcy5hdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzLCBvcHQsIFBsdXJhbFJ1bGVzLnJlbGV2YW50RXh0ZW5zaW9uS2V5cywgUGx1cmFsUnVsZXMubG9jYWxlRGF0YSk7XG4gICAgaW50bF91dGlsc18xLnNldEludGVybmFsU2xvdChQbHVyYWxSdWxlcy5fX0lOVEVSTkFMX1NMT1RfTUFQX18sIHRoaXMsICdsb2NhbGUnLCByLmxvY2FsZSk7XG4gIH1cblxuICBQbHVyYWxSdWxlcy5wcm90b3R5cGUucmVzb2x2ZWRPcHRpb25zID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB2YWxpZGF0ZUluc3RhbmNlKHRoaXMsICdyZXNvbHZlZE9wdGlvbnMnKTtcbiAgICB2YXIgb3B0cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgb3B0cy5sb2NhbGUgPSBpbnRsX3V0aWxzXzEuZ2V0SW50ZXJuYWxTbG90KFBsdXJhbFJ1bGVzLl9fSU5URVJOQUxfU0xPVF9NQVBfXywgdGhpcywgJ2xvY2FsZScpO1xuICAgIG9wdHMudHlwZSA9IGludGxfdXRpbHNfMS5nZXRJbnRlcm5hbFNsb3QoUGx1cmFsUnVsZXMuX19JTlRFUk5BTF9TTE9UX01BUF9fLCB0aGlzLCAndHlwZScpO1xuICAgIFsnbWluaW11bUludGVnZXJEaWdpdHMnLCAnbWluaW11bUZyYWN0aW9uRGlnaXRzJywgJ21heGltdW1GcmFjdGlvbkRpZ2l0cycsICdtaW5pbXVtU2lnbmlmaWNhbnREaWdpdHMnLCAnbWF4aW11bVNpZ25pZmljYW50RGlnaXRzJ10uZm9yRWFjaChmdW5jdGlvbiAoZmllbGQpIHtcbiAgICAgIHZhciB2YWwgPSBpbnRsX3V0aWxzXzEuZ2V0SW50ZXJuYWxTbG90KFBsdXJhbFJ1bGVzLl9fSU5URVJOQUxfU0xPVF9NQVBfXywgX3RoaXMsIGZpZWxkKTtcblxuICAgICAgaWYgKHZhbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG9wdHNbZmllbGRdID0gdmFsO1xuICAgICAgfVxuICAgIH0pO1xuICAgIG9wdHMucGx1cmFsQ2F0ZWdvcmllcyA9IF9fc3ByZWFkQXJyYXlzKFBsdXJhbFJ1bGVzLmxvY2FsZURhdGFbb3B0cy5sb2NhbGVdLmNhdGVnb3JpZXNbb3B0cy50eXBlXSk7XG4gICAgcmV0dXJuIG9wdHM7XG4gIH07XG5cbiAgUGx1cmFsUnVsZXMucHJvdG90eXBlLnNlbGVjdCA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICB2YWxpZGF0ZUluc3RhbmNlKHRoaXMsICdzZWxlY3QnKTtcbiAgICB2YXIgbG9jYWxlID0gaW50bF91dGlsc18xLmdldEludGVybmFsU2xvdChQbHVyYWxSdWxlcy5fX0lOVEVSTkFMX1NMT1RfTUFQX18sIHRoaXMsICdsb2NhbGUnKTtcbiAgICB2YXIgdHlwZSA9IGludGxfdXRpbHNfMS5nZXRJbnRlcm5hbFNsb3QoUGx1cmFsUnVsZXMuX19JTlRFUk5BTF9TTE9UX01BUF9fLCB0aGlzLCAndHlwZScpO1xuICAgIHJldHVybiBQbHVyYWxSdWxlcy5sb2NhbGVEYXRhW2xvY2FsZV0uZm4oZm9ybWF0TnVtZXJpY1RvU3RyaW5nKFBsdXJhbFJ1bGVzLl9fSU5URVJOQUxfU0xPVF9NQVBfXywgdGhpcywgTWF0aC5hYnMoTnVtYmVyKHZhbCkpKSwgdHlwZSA9PSAnb3JkaW5hbCcpO1xuICB9O1xuXG4gIFBsdXJhbFJ1bGVzLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gJ1tvYmplY3QgSW50bC5QbHVyYWxSdWxlc10nO1xuICB9O1xuXG4gIFBsdXJhbFJ1bGVzLnN1cHBvcnRlZExvY2FsZXNPZiA9IGZ1bmN0aW9uIChsb2NhbGVzLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIGludGxfdXRpbHNfMS5zdXBwb3J0ZWRMb2NhbGVzKFBsdXJhbFJ1bGVzLmF2YWlsYWJsZUxvY2FsZXMsIGludGxfdXRpbHNfMS5nZXRDYW5vbmljYWxMb2NhbGVzKGxvY2FsZXMpLCBvcHRpb25zKTtcbiAgfTtcblxuICBQbHVyYWxSdWxlcy5fX2FkZExvY2FsZURhdGEgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGRhdGEgPSBbXTtcblxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICBkYXRhW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuXG4gICAgdmFyIF9sb29wXzEgPSBmdW5jdGlvbiBfbG9vcF8xKGRhdHVtKSB7XG4gICAgICB2YXIgYXZhaWxhYmxlTG9jYWxlcyA9IE9iamVjdC5rZXlzKF9fc3ByZWFkQXJyYXlzKGRhdHVtLmF2YWlsYWJsZUxvY2FsZXMsIE9iamVjdC5rZXlzKGRhdHVtLmFsaWFzZXMpLCBPYmplY3Qua2V5cyhkYXR1bS5wYXJlbnRMb2NhbGVzKSkucmVkdWNlKGZ1bmN0aW9uIChhbGwsIGspIHtcbiAgICAgICAgYWxsW2tdID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGFsbDtcbiAgICAgIH0sIHt9KSk7XG4gICAgICBhdmFpbGFibGVMb2NhbGVzLmZvckVhY2goZnVuY3Rpb24gKGxvY2FsZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIFBsdXJhbFJ1bGVzLmxvY2FsZURhdGFbbG9jYWxlXSA9IGludGxfdXRpbHNfMS51bnBhY2tEYXRhKGxvY2FsZSwgZGF0dW0pO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgaWYgKGludGxfdXRpbHNfMS5pc01pc3NpbmdMb2NhbGVEYXRhRXJyb3IoZSkpIHtcbiAgICAgICAgICAgIC8vIElmIHdlIGp1c3QgZG9uJ3QgaGF2ZSBkYXRhIGZvciBjZXJ0YWluIGxvY2FsZSwgdGhhdCdzIG9rXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGZvciAodmFyIF9hID0gMCwgZGF0YV8xID0gZGF0YTsgX2EgPCBkYXRhXzEubGVuZ3RoOyBfYSsrKSB7XG4gICAgICB2YXIgZGF0dW0gPSBkYXRhXzFbX2FdO1xuXG4gICAgICBfbG9vcF8xKGRhdHVtKTtcbiAgICB9XG5cbiAgICBQbHVyYWxSdWxlcy5hdmFpbGFibGVMb2NhbGVzID0gT2JqZWN0LmtleXMoUGx1cmFsUnVsZXMubG9jYWxlRGF0YSk7XG5cbiAgICBpZiAoIVBsdXJhbFJ1bGVzLl9fZGVmYXVsdExvY2FsZSkge1xuICAgICAgUGx1cmFsUnVsZXMuX19kZWZhdWx0TG9jYWxlID0gUGx1cmFsUnVsZXMuYXZhaWxhYmxlTG9jYWxlc1swXTtcbiAgICB9XG4gIH07XG5cbiAgUGx1cmFsUnVsZXMuZ2V0RGVmYXVsdExvY2FsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gUGx1cmFsUnVsZXMuX19kZWZhdWx0TG9jYWxlO1xuICB9O1xuXG4gIFBsdXJhbFJ1bGVzLmxvY2FsZURhdGEgPSB7fTtcbiAgUGx1cmFsUnVsZXMuYXZhaWxhYmxlTG9jYWxlcyA9IFtdO1xuICBQbHVyYWxSdWxlcy5fX2RlZmF1bHRMb2NhbGUgPSAnZW4nO1xuICBQbHVyYWxSdWxlcy5yZWxldmFudEV4dGVuc2lvbktleXMgPSBbXTtcbiAgUGx1cmFsUnVsZXMucG9seWZpbGxlZCA9IHRydWU7XG4gIFBsdXJhbFJ1bGVzLl9fSU5URVJOQUxfU0xPVF9NQVBfXyA9IG5ldyBXZWFrTWFwKCk7XG4gIHJldHVybiBQbHVyYWxSdWxlcztcbn0oKTtcblxuZXhwb3J0cy5QbHVyYWxSdWxlcyA9IFBsdXJhbFJ1bGVzO1xuXG50cnkge1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS90ZXN0MjYyL2Jsb2IvbWFzdGVyL3Rlc3QvaW50bDQwMi9QbHVyYWxSdWxlcy9sZW5ndGguanNcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBsdXJhbFJ1bGVzLCAnbGVuZ3RoJywge1xuICAgIHZhbHVlOiAwLFxuICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSk7IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Rlc3QyNjIvYmxvYi9tYXN0ZXIvdGVzdC9pbnRsNDAyL1JlbGF0aXZlVGltZUZvcm1hdC9jb25zdHJ1Y3Rvci9sZW5ndGguanNcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUGx1cmFsUnVsZXMucHJvdG90eXBlLmNvbnN0cnVjdG9yLCAnbGVuZ3RoJywge1xuICAgIHZhbHVlOiAwLFxuICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSk7IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Rlc3QyNjIvYmxvYi9tYXN0ZXIvdGVzdC9pbnRsNDAyL1JlbGF0aXZlVGltZUZvcm1hdC9jb25zdHJ1Y3Rvci9zdXBwb3J0ZWRMb2NhbGVzT2YvbGVuZ3RoLmpzXG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFBsdXJhbFJ1bGVzLnN1cHBvcnRlZExvY2FsZXNPZiwgJ2xlbmd0aCcsIHtcbiAgICB2YWx1ZTogMSxcbiAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pO1xufSBjYXRjaCAoZXgpIHsvLyBNZXRhIGZpeGVzIGZvciB0ZXN0MjYyXG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3012\n")},4574:function(){eval('/* @generated */\n// prettier-ignore\nif (Intl.PluralRules && typeof Intl.PluralRules.__addLocaleData === \'function\') {\n Intl.PluralRules.__addLocaleData({\n "data": {\n "en": {\n "categories": {\n "cardinal": ["one", "other"],\n "ordinal": ["one", "two", "few", "other"]\n },\n "fn": function fn(n, ord) {\n var s = String(n).split(\'.\'),\n v0 = !s[1],\n t0 = Number(s[0]) == n,\n n10 = t0 && s[0].slice(-1),\n n100 = t0 && s[0].slice(-2);\n if (ord) return n10 == 1 && n100 != 11 ? \'one\' : n10 == 2 && n100 != 12 ? \'two\' : n10 == 3 && n100 != 13 ? \'few\' : \'other\';\n return n == 1 && v0 ? \'one\' : \'other\';\n }\n }\n },\n "aliases": {},\n "parentLocales": {\n "en-150": "en-001",\n "en-AG": "en-001",\n "en-AI": "en-001",\n "en-AU": "en-001",\n "en-BB": "en-001",\n "en-BM": "en-001",\n "en-BS": "en-001",\n "en-BW": "en-001",\n "en-BZ": "en-001",\n "en-CA": "en-001",\n "en-CC": "en-001",\n "en-CK": "en-001",\n "en-CM": "en-001",\n "en-CX": "en-001",\n "en-CY": "en-001",\n "en-DG": "en-001",\n "en-DM": "en-001",\n "en-ER": "en-001",\n "en-FJ": "en-001",\n "en-FK": "en-001",\n "en-FM": "en-001",\n "en-GB": "en-001",\n "en-GD": "en-001",\n "en-GG": "en-001",\n "en-GH": "en-001",\n "en-GI": "en-001",\n "en-GM": "en-001",\n "en-GY": "en-001",\n "en-HK": "en-001",\n "en-IE": "en-001",\n "en-IL": "en-001",\n "en-IM": "en-001",\n "en-IN": "en-001",\n "en-IO": "en-001",\n "en-JE": "en-001",\n "en-JM": "en-001",\n "en-KE": "en-001",\n "en-KI": "en-001",\n "en-KN": "en-001",\n "en-KY": "en-001",\n "en-LC": "en-001",\n "en-LR": "en-001",\n "en-LS": "en-001",\n "en-MG": "en-001",\n "en-MO": "en-001",\n "en-MS": "en-001",\n "en-MT": "en-001",\n "en-MU": "en-001",\n "en-MW": "en-001",\n "en-MY": "en-001",\n "en-NA": "en-001",\n "en-NF": "en-001",\n "en-NG": "en-001",\n "en-NR": "en-001",\n "en-NU": "en-001",\n "en-NZ": "en-001",\n "en-PG": "en-001",\n "en-PH": "en-001",\n "en-PK": "en-001",\n "en-PN": "en-001",\n "en-PW": "en-001",\n "en-RW": "en-001",\n "en-SB": "en-001",\n "en-SC": "en-001",\n "en-SD": "en-001",\n "en-SG": "en-001",\n "en-SH": "en-001",\n "en-SL": "en-001",\n "en-SS": "en-001",\n "en-SX": "en-001",\n "en-SZ": "en-001",\n "en-TC": "en-001",\n "en-TK": "en-001",\n "en-TO": "en-001",\n "en-TT": "en-001",\n "en-TV": "en-001",\n "en-TZ": "en-001",\n "en-UG": "en-001",\n "en-VC": "en-001",\n "en-VG": "en-001",\n "en-VU": "en-001",\n "en-WS": "en-001",\n "en-ZA": "en-001",\n "en-ZM": "en-001",\n "en-ZW": "en-001",\n "en-AT": "en-150",\n "en-BE": "en-150",\n "en-CH": "en-150",\n "en-DE": "en-150",\n "en-DK": "en-150",\n "en-FI": "en-150",\n "en-NL": "en-150",\n "en-SE": "en-150",\n "en-SI": "en-150"\n },\n "availableLocales": ["en"]\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AZm9ybWF0anMvaW50bC1wbHVyYWxydWxlcy9kaXN0L2xvY2FsZS1kYXRhL2VuLmpzPzQ3N2MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsR0FBRztBQUNIIiwiZmlsZSI6IjQ1NzQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBAZ2VuZXJhdGVkICovXG4vLyBwcmV0dGllci1pZ25vcmVcbmlmIChJbnRsLlBsdXJhbFJ1bGVzICYmIHR5cGVvZiBJbnRsLlBsdXJhbFJ1bGVzLl9fYWRkTG9jYWxlRGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xuICBJbnRsLlBsdXJhbFJ1bGVzLl9fYWRkTG9jYWxlRGF0YSh7XG4gICAgXCJkYXRhXCI6IHtcbiAgICAgIFwiZW5cIjoge1xuICAgICAgICBcImNhdGVnb3JpZXNcIjoge1xuICAgICAgICAgIFwiY2FyZGluYWxcIjogW1wib25lXCIsIFwib3RoZXJcIl0sXG4gICAgICAgICAgXCJvcmRpbmFsXCI6IFtcIm9uZVwiLCBcInR3b1wiLCBcImZld1wiLCBcIm90aGVyXCJdXG4gICAgICAgIH0sXG4gICAgICAgIFwiZm5cIjogZnVuY3Rpb24gZm4obiwgb3JkKSB7XG4gICAgICAgICAgdmFyIHMgPSBTdHJpbmcobikuc3BsaXQoJy4nKSxcbiAgICAgICAgICAgICAgdjAgPSAhc1sxXSxcbiAgICAgICAgICAgICAgdDAgPSBOdW1iZXIoc1swXSkgPT0gbixcbiAgICAgICAgICAgICAgbjEwID0gdDAgJiYgc1swXS5zbGljZSgtMSksXG4gICAgICAgICAgICAgIG4xMDAgPSB0MCAmJiBzWzBdLnNsaWNlKC0yKTtcbiAgICAgICAgICBpZiAob3JkKSByZXR1cm4gbjEwID09IDEgJiYgbjEwMCAhPSAxMSA/ICdvbmUnIDogbjEwID09IDIgJiYgbjEwMCAhPSAxMiA/ICd0d28nIDogbjEwID09IDMgJiYgbjEwMCAhPSAxMyA/ICdmZXcnIDogJ290aGVyJztcbiAgICAgICAgICByZXR1cm4gbiA9PSAxICYmIHYwID8gJ29uZScgOiAnb3RoZXInO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBcImFsaWFzZXNcIjoge30sXG4gICAgXCJwYXJlbnRMb2NhbGVzXCI6IHtcbiAgICAgIFwiZW4tMTUwXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUFHXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUFJXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUFVXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUJCXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUJNXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUJTXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUJXXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUJaXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUNBXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUNDXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUNLXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUNNXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUNYXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUNZXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLURHXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLURNXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUVSXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUZKXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUZLXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUZNXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUdCXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUdEXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUdHXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUdIXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUdJXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUdNXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUdZXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUhLXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUlFXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUlMXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUlNXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUlOXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUlPXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUpFXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUpNXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUtFXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUtJXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUtOXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUtZXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUxDXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUxSXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUxTXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLU1HXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLU1PXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLU1TXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLU1UXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLU1VXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLU1XXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLU1ZXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLU5BXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLU5GXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLU5HXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLU5SXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLU5VXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLU5aXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVBHXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVBIXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVBLXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVBOXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVBXXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVJXXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVNCXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVNDXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVNEXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVNHXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVNIXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVNMXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVNTXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVNYXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVNaXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVRDXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVRLXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVRPXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVRUXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVRWXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVRaXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVVHXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVZDXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVZHXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVZVXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVdTXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVpBXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVpNXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLVpXXCI6IFwiZW4tMDAxXCIsXG4gICAgICBcImVuLUFUXCI6IFwiZW4tMTUwXCIsXG4gICAgICBcImVuLUJFXCI6IFwiZW4tMTUwXCIsXG4gICAgICBcImVuLUNIXCI6IFwiZW4tMTUwXCIsXG4gICAgICBcImVuLURFXCI6IFwiZW4tMTUwXCIsXG4gICAgICBcImVuLURLXCI6IFwiZW4tMTUwXCIsXG4gICAgICBcImVuLUZJXCI6IFwiZW4tMTUwXCIsXG4gICAgICBcImVuLU5MXCI6IFwiZW4tMTUwXCIsXG4gICAgICBcImVuLVNFXCI6IFwiZW4tMTUwXCIsXG4gICAgICBcImVuLVNJXCI6IFwiZW4tMTUwXCJcbiAgICB9LFxuICAgIFwiYXZhaWxhYmxlTG9jYWxlc1wiOiBbXCJlblwiXVxuICB9KTtcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4574\n')},3745:function(){eval('/* @generated */\n// prettier-ignore\nif (Intl.PluralRules && typeof Intl.PluralRules.__addLocaleData === \'function\') {\n Intl.PluralRules.__addLocaleData({\n "data": {\n "es": {\n "categories": {\n "cardinal": ["one", "other"],\n "ordinal": ["other"]\n },\n "fn": function fn(n, ord) {\n if (ord) return \'other\';\n return n == 1 ? \'one\' : \'other\';\n }\n }\n },\n "aliases": {},\n "parentLocales": {\n "es-AR": "es-419",\n "es-BO": "es-419",\n "es-BR": "es-419",\n "es-BZ": "es-419",\n "es-CL": "es-419",\n "es-CO": "es-419",\n "es-CR": "es-419",\n "es-CU": "es-419",\n "es-DO": "es-419",\n "es-EC": "es-419",\n "es-GT": "es-419",\n "es-HN": "es-419",\n "es-MX": "es-419",\n "es-NI": "es-419",\n "es-PA": "es-419",\n "es-PE": "es-419",\n "es-PR": "es-419",\n "es-PY": "es-419",\n "es-SV": "es-419",\n "es-US": "es-419",\n "es-UY": "es-419",\n "es-VE": "es-419"\n },\n "availableLocales": ["es"]\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AZm9ybWF0anMvaW50bC1wbHVyYWxydWxlcy9kaXN0L2xvY2FsZS1kYXRhL2VzLmpzPzNmZTYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxHQUFHO0FBQ0giLCJmaWxlIjoiMzc0NS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIEBnZW5lcmF0ZWQgKi9cbi8vIHByZXR0aWVyLWlnbm9yZVxuaWYgKEludGwuUGx1cmFsUnVsZXMgJiYgdHlwZW9mIEludGwuUGx1cmFsUnVsZXMuX19hZGRMb2NhbGVEYXRhID09PSAnZnVuY3Rpb24nKSB7XG4gIEludGwuUGx1cmFsUnVsZXMuX19hZGRMb2NhbGVEYXRhKHtcbiAgICBcImRhdGFcIjoge1xuICAgICAgXCJlc1wiOiB7XG4gICAgICAgIFwiY2F0ZWdvcmllc1wiOiB7XG4gICAgICAgICAgXCJjYXJkaW5hbFwiOiBbXCJvbmVcIiwgXCJvdGhlclwiXSxcbiAgICAgICAgICBcIm9yZGluYWxcIjogW1wib3RoZXJcIl1cbiAgICAgICAgfSxcbiAgICAgICAgXCJmblwiOiBmdW5jdGlvbiBmbihuLCBvcmQpIHtcbiAgICAgICAgICBpZiAob3JkKSByZXR1cm4gJ290aGVyJztcbiAgICAgICAgICByZXR1cm4gbiA9PSAxID8gJ29uZScgOiAnb3RoZXInO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBcImFsaWFzZXNcIjoge30sXG4gICAgXCJwYXJlbnRMb2NhbGVzXCI6IHtcbiAgICAgIFwiZXMtQVJcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtQk9cIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtQlJcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtQlpcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtQ0xcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtQ09cIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtQ1JcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtQ1VcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtRE9cIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtRUNcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtR1RcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtSE5cIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtTVhcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtTklcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtUEFcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtUEVcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtUFJcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtUFlcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtU1ZcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtVVNcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtVVlcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtVkVcIjogXCJlcy00MTlcIlxuICAgIH0sXG4gICAgXCJhdmFpbGFibGVMb2NhbGVzXCI6IFtcImVzXCJdXG4gIH0pO1xufSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3745\n')},6867:function(){eval('/* @generated */\n// prettier-ignore\nif (Intl.PluralRules && typeof Intl.PluralRules.__addLocaleData === \'function\') {\n Intl.PluralRules.__addLocaleData({\n "data": {\n "ses": {\n "categories": {\n "cardinal": ["other"],\n "ordinal": ["other"]\n },\n "fn": function fn(n, ord) {\n return \'other\';\n }\n }\n },\n "aliases": {},\n "parentLocales": {},\n "availableLocales": ["ses"]\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AZm9ybWF0anMvaW50bC1wbHVyYWxydWxlcy9kaXN0L2xvY2FsZS1kYXRhL3Nlcy5qcz8yOTM5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxpQkFBaUI7QUFDakIsdUJBQXVCO0FBQ3ZCO0FBQ0EsR0FBRztBQUNIIiwiZmlsZSI6IjY4NjcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBAZ2VuZXJhdGVkICovXG4vLyBwcmV0dGllci1pZ25vcmVcbmlmIChJbnRsLlBsdXJhbFJ1bGVzICYmIHR5cGVvZiBJbnRsLlBsdXJhbFJ1bGVzLl9fYWRkTG9jYWxlRGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xuICBJbnRsLlBsdXJhbFJ1bGVzLl9fYWRkTG9jYWxlRGF0YSh7XG4gICAgXCJkYXRhXCI6IHtcbiAgICAgIFwic2VzXCI6IHtcbiAgICAgICAgXCJjYXRlZ29yaWVzXCI6IHtcbiAgICAgICAgICBcImNhcmRpbmFsXCI6IFtcIm90aGVyXCJdLFxuICAgICAgICAgIFwib3JkaW5hbFwiOiBbXCJvdGhlclwiXVxuICAgICAgICB9LFxuICAgICAgICBcImZuXCI6IGZ1bmN0aW9uIGZuKG4sIG9yZCkge1xuICAgICAgICAgIHJldHVybiAnb3RoZXInO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBcImFsaWFzZXNcIjoge30sXG4gICAgXCJwYXJlbnRMb2NhbGVzXCI6IHt9LFxuICAgIFwiYXZhaWxhYmxlTG9jYWxlc1wiOiBbXCJzZXNcIl1cbiAgfSk7XG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///6867\n')},2157:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n\nvar core_1 = __webpack_require__(3012);\n\nif (typeof Intl.PluralRules === 'undefined' || !Intl.PluralRules.polyfilled && new Intl.PluralRules('en', {\n minimumFractionDigits: 2\n}).select(1) === 'one') {\n Object.defineProperty(Intl, 'PluralRules', {\n value: core_1.PluralRules,\n writable: true,\n enumerable: false,\n configurable: true\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AZm9ybWF0anMvaW50bC1wbHVyYWxydWxlcy9kaXN0L3BvbHlmaWxsLmpzP2FkY2QiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsOENBQTZDO0FBQzdDO0FBQ0EsQ0FBQyxFQUFDOztBQUVGLGFBQWEsbUJBQU8sQ0FBQyxJQUFROztBQUU3QjtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJmaWxlIjoiMjE1Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgY29yZV8xID0gcmVxdWlyZShcIi4vY29yZVwiKTtcblxuaWYgKHR5cGVvZiBJbnRsLlBsdXJhbFJ1bGVzID09PSAndW5kZWZpbmVkJyB8fCAhSW50bC5QbHVyYWxSdWxlcy5wb2x5ZmlsbGVkICYmIG5ldyBJbnRsLlBsdXJhbFJ1bGVzKCdlbicsIHtcbiAgbWluaW11bUZyYWN0aW9uRGlnaXRzOiAyXG59KS5zZWxlY3QoMSkgPT09ICdvbmUnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJbnRsLCAnUGx1cmFsUnVsZXMnLCB7XG4gICAgdmFsdWU6IGNvcmVfMS5QbHVyYWxSdWxlcyxcbiAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSk7XG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2157\n")},3228:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("__webpack_require__(2157);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AZm9ybWF0anMvaW50bC1wbHVyYWxydWxlcy9wb2x5ZmlsbC5qcz8xYTM5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1CQUFPLENBQUMsSUFBaUIiLCJmaWxlIjoiMzIyOC5qcyIsInNvdXJjZXNDb250ZW50IjpbInJlcXVpcmUoJy4vZGlzdC9wb2x5ZmlsbCcpOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3228\n")},9905:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar __assign = this && this.__assign || function () {\n __assign = Object.assign || function (t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n\n for (var p in s) {\n if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n }\n\n return t;\n };\n\n return __assign.apply(this, arguments);\n};\n\nvar __values = this && this.__values || function (o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator,\n m = s && o[s],\n i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function next() {\n if (o && i >= o.length) o = void 0;\n return {\n value: o && o[i++],\n done: !o\n };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\n\nvar __read = this && this.__read || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o),\n r,\n ar = [],\n e;\n\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {\n ar.push(r.value);\n }\n } catch (error) {\n e = {\n error: error\n };\n } finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n } finally {\n if (e) throw e.error;\n }\n }\n\n return ar;\n};\n\nvar __spread = this && this.__spread || function () {\n for (var ar = [], i = 0; i < arguments.length; i++) {\n ar = ar.concat(__read(arguments[i]));\n }\n\n return ar;\n};\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n\nvar intl_utils_1 = __webpack_require__(2650);\n\nfunction unpackData(locale, localeData) {\n var localeHierarchy = intl_utils_1.getLocaleHierarchy(locale, localeData.aliases, localeData.parentLocales);\n var dataToMerge = localeHierarchy.map(function (l) {\n return localeData.data[l];\n }).filter(Boolean);\n\n if (!dataToMerge.length) {\n throw new Error(\"Missing locale data for \\\"\" + locale + \"\\\", lookup hierarchy: \" + localeHierarchy.join(', '));\n }\n\n dataToMerge.reverse();\n return dataToMerge.reduce(function (all, d) {\n return __assign(__assign({}, all), d);\n }, {\n nu: []\n });\n}\n/**\n * https://tc39.es/proposal-intl-relative-time/#sec-singularrelativetimeunit\n * @param unit\n */\n\n\nfunction singularRelativeTimeUnit(unit) {\n intl_utils_1.invariant(typeof unit === 'string', \"unit must be a string, instead got \" + typeof unit, TypeError);\n if (unit === 'seconds') return 'second';\n if (unit === 'minutes') return 'minute';\n if (unit === 'hours') return 'hour';\n if (unit === 'days') return 'day';\n if (unit === 'weeks') return 'week';\n if (unit === 'months') return 'month';\n if (unit === 'quarters') return 'quarter';\n if (unit === 'years') return 'year';\n\n if (unit !== 'second' && unit !== 'minute' && unit !== 'hour' && unit !== 'day' && unit !== 'week' && unit !== 'month' && unit !== 'quarter' && unit !== 'year') {\n throw new RangeError(\"Invalid unit \" + unit);\n }\n\n return unit;\n}\n\nvar NUMBERING_SYSTEM_REGEX = /^[a-z0-9]{3,8}(-[a-z0-9]{3,8})*$/i;\n/**\n * https://tc39.es/proposal-intl-relative-time/#sec-makepartslist\n * @param pattern\n * @param unit\n * @param parts\n */\n\nfunction makePartsList(pattern, unit, parts) {\n var e_1, _a, e_2, _b;\n\n var patternParts = intl_utils_1.partitionPattern(pattern);\n var result = [];\n\n try {\n for (var patternParts_1 = __values(patternParts), patternParts_1_1 = patternParts_1.next(); !patternParts_1_1.done; patternParts_1_1 = patternParts_1.next()) {\n var patternPart = patternParts_1_1.value;\n\n if (intl_utils_1.isLiteralPart(patternPart)) {\n result.push({\n type: 'literal',\n value: patternPart.value\n });\n } else {\n intl_utils_1.invariant(patternPart.type === '0', \"Malformed pattern \" + pattern);\n\n try {\n for (var parts_1 = (e_2 = void 0, __values(parts)), parts_1_1 = parts_1.next(); !parts_1_1.done; parts_1_1 = parts_1.next()) {\n var part = parts_1_1.value;\n result.push({\n type: part.type,\n value: part.value,\n unit: unit\n });\n }\n } catch (e_2_1) {\n e_2 = {\n error: e_2_1\n };\n } finally {\n try {\n if (parts_1_1 && !parts_1_1.done && (_b = parts_1.return)) _b.call(parts_1);\n } finally {\n if (e_2) throw e_2.error;\n }\n }\n }\n }\n } catch (e_1_1) {\n e_1 = {\n error: e_1_1\n };\n } finally {\n try {\n if (patternParts_1_1 && !patternParts_1_1.done && (_a = patternParts_1.return)) _a.call(patternParts_1);\n } finally {\n if (e_1) throw e_1.error;\n }\n }\n\n return result;\n}\n\nfunction objectIs(x, y) {\n if (Object.is) {\n return Object.is(x, y);\n } // SameValue algorithm\n\n\n if (x === y) {\n // Steps 1-5, 7-10\n // Steps 6.b-6.e: +0 != -0\n return x !== 0 || 1 / x === 1 / y;\n } // Step 6.a: NaN == NaN\n\n\n return x !== x && y !== y;\n}\n\nfunction toString(arg) {\n return arg + '';\n}\n/**\n * PartitionRelativeTimePattern\n * @param rtf\n * @param value\n * @param unit\n */\n\n\nfunction partitionRelativeTimePattern(internalSlotMap, rtf, value, unit) {\n intl_utils_1.invariant(typeof value === 'number', \"value must be number, instead got \" + typeof value, TypeError);\n intl_utils_1.invariant(typeof unit === 'string', \"unit must be number, instead got \" + typeof value, TypeError);\n\n if (isNaN(value) || value === Infinity || value === -Infinity) {\n throw new RangeError(\"Invalid value \" + value);\n }\n\n var resolvedUnit = singularRelativeTimeUnit(unit);\n var fields = intl_utils_1.getInternalSlot(internalSlotMap, rtf, 'fields');\n var style = intl_utils_1.getInternalSlot(internalSlotMap, rtf, 'style');\n var entry = resolvedUnit;\n\n if (style === 'short') {\n entry = unit + \"-short\";\n } else if (style === 'narrow') {\n entry = unit + \"-narrow\";\n }\n\n if (!(entry in fields)) {\n entry = unit;\n }\n\n var patterns = fields[entry];\n var numeric = intl_utils_1.getInternalSlot(internalSlotMap, rtf, 'numeric');\n\n if (numeric === 'auto') {\n if (toString(value) in patterns) {\n return [{\n type: 'literal',\n value: patterns[toString(value)]\n }];\n }\n }\n\n var tl = 'future';\n\n if (objectIs(value, -0) || value < 0) {\n tl = 'past';\n }\n\n var po = patterns[tl];\n var pluralRules = intl_utils_1.getInternalSlot(internalSlotMap, rtf, 'pluralRules');\n var numberFormat = intl_utils_1.getInternalSlot(internalSlotMap, rtf, 'numberFormat');\n var fv = typeof numberFormat.formatToParts === 'function' ? numberFormat.formatToParts(Math.abs(value)) : // TODO: If formatToParts is not supported, we assume the whole formatted\n // number is a part\n [{\n type: 'literal',\n value: numberFormat.format(Math.abs(value)),\n unit: unit\n }];\n var pr = pluralRules.select(value);\n var pattern = po[pr];\n return makePartsList(pattern, resolvedUnit, fv);\n}\n\nvar RelativeTimeFormat =\n/** @class */\nfunction () {\n function RelativeTimeFormat(locales, options) {\n // test262/test/intl402/RelativeTimeFormat/constructor/constructor/newtarget-undefined.js\n // Cannot use `new.target` bc of IE11 & TS transpiles it to something else\n var newTarget = this && this instanceof RelativeTimeFormat ? this.constructor : void 0;\n\n if (!newTarget) {\n throw new TypeError(\"Intl.RelativeTimeFormat must be called with 'new'\");\n }\n\n intl_utils_1.setInternalSlot(RelativeTimeFormat.__INTERNAL_SLOT_MAP__, this, 'initializedRelativeTimeFormat', true);\n var requestedLocales = intl_utils_1.getCanonicalLocales(locales);\n var opt = Object.create(null);\n var opts = options === undefined ? Object.create(null) : intl_utils_1.toObject(options);\n var matcher = intl_utils_1.getOption(opts, 'localeMatcher', 'string', ['best fit', 'lookup'], 'best fit');\n opt.localeMatcher = matcher;\n var numberingSystem = intl_utils_1.getOption(opts, 'numberingSystem', 'string', undefined, undefined);\n\n if (numberingSystem !== undefined) {\n if (!NUMBERING_SYSTEM_REGEX.test(numberingSystem)) {\n throw new RangeError(\"Invalid numbering system \" + numberingSystem);\n }\n }\n\n opt.nu = numberingSystem;\n var r = intl_utils_1.createResolveLocale(RelativeTimeFormat.getDefaultLocale)(RelativeTimeFormat.availableLocales, requestedLocales, opt, RelativeTimeFormat.relevantExtensionKeys, RelativeTimeFormat.localeData);\n var locale = r.locale,\n nu = r.nu;\n intl_utils_1.setInternalSlot(RelativeTimeFormat.__INTERNAL_SLOT_MAP__, this, 'locale', locale);\n intl_utils_1.setInternalSlot(RelativeTimeFormat.__INTERNAL_SLOT_MAP__, this, 'style', intl_utils_1.getOption(opts, 'style', 'string', ['long', 'narrow', 'short'], 'long'));\n intl_utils_1.setInternalSlot(RelativeTimeFormat.__INTERNAL_SLOT_MAP__, this, 'numeric', intl_utils_1.getOption(opts, 'numeric', 'string', ['always', 'auto'], 'always'));\n intl_utils_1.setInternalSlot(RelativeTimeFormat.__INTERNAL_SLOT_MAP__, this, 'fields', RelativeTimeFormat.localeData[locale]);\n intl_utils_1.setInternalSlot(RelativeTimeFormat.__INTERNAL_SLOT_MAP__, this, 'numberFormat', new Intl.NumberFormat(locales));\n intl_utils_1.setInternalSlot(RelativeTimeFormat.__INTERNAL_SLOT_MAP__, this, 'pluralRules', new Intl.PluralRules(locales));\n intl_utils_1.setInternalSlot(RelativeTimeFormat.__INTERNAL_SLOT_MAP__, this, 'numberingSystem', nu);\n }\n\n RelativeTimeFormat.prototype.format = function (value, unit) {\n if (typeof this !== 'object') {\n throw new TypeError('format was called on a non-object');\n }\n\n if (!intl_utils_1.getInternalSlot(RelativeTimeFormat.__INTERNAL_SLOT_MAP__, this, 'initializedRelativeTimeFormat')) {\n throw new TypeError('format was called on a invalid context');\n }\n\n return partitionRelativeTimePattern(RelativeTimeFormat.__INTERNAL_SLOT_MAP__, this, Number(value), toString(unit)).map(function (el) {\n return el.value;\n }).join('');\n };\n\n RelativeTimeFormat.prototype.formatToParts = function (value, unit) {\n if (typeof this !== 'object') {\n throw new TypeError('formatToParts was called on a non-object');\n }\n\n if (!intl_utils_1.getInternalSlot(RelativeTimeFormat.__INTERNAL_SLOT_MAP__, this, 'initializedRelativeTimeFormat')) {\n throw new TypeError('formatToParts was called on a invalid context');\n }\n\n return partitionRelativeTimePattern(RelativeTimeFormat.__INTERNAL_SLOT_MAP__, this, Number(value), toString(unit));\n };\n\n RelativeTimeFormat.prototype.resolvedOptions = function () {\n if (typeof this !== 'object') {\n throw new TypeError('resolvedOptions was called on a non-object');\n }\n\n if (!intl_utils_1.getInternalSlot(RelativeTimeFormat.__INTERNAL_SLOT_MAP__, this, 'initializedRelativeTimeFormat')) {\n throw new TypeError('resolvedOptions was called on a invalid context');\n } // test262/test/intl402/RelativeTimeFormat/prototype/resolvedOptions/type.js\n\n\n return {\n locale: intl_utils_1.getInternalSlot(RelativeTimeFormat.__INTERNAL_SLOT_MAP__, this, 'locale'),\n style: intl_utils_1.getInternalSlot(RelativeTimeFormat.__INTERNAL_SLOT_MAP__, this, 'style'),\n numeric: intl_utils_1.getInternalSlot(RelativeTimeFormat.__INTERNAL_SLOT_MAP__, this, 'numeric'),\n numberingSystem: intl_utils_1.getInternalSlot(RelativeTimeFormat.__INTERNAL_SLOT_MAP__, this, 'numberingSystem')\n };\n };\n\n RelativeTimeFormat.supportedLocalesOf = function (locales, options) {\n return intl_utils_1.supportedLocales(RelativeTimeFormat.availableLocales, intl_utils_1.getCanonicalLocales(locales), options);\n };\n\n RelativeTimeFormat.__addLocaleData = function () {\n var e_3, _a;\n\n var data = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n data[_i] = arguments[_i];\n }\n\n var _loop_1 = function _loop_1(datum) {\n var availableLocales = Object.keys(__spread(datum.availableLocales, Object.keys(datum.aliases), Object.keys(datum.parentLocales)).reduce(function (all, k) {\n all[k] = true;\n return all;\n }, {}));\n availableLocales.forEach(function (locale) {\n try {\n RelativeTimeFormat.localeData[locale] = unpackData(locale, datum);\n } catch (e) {// If we can't unpack this data, ignore the locale\n }\n });\n };\n\n try {\n for (var data_1 = __values(data), data_1_1 = data_1.next(); !data_1_1.done; data_1_1 = data_1.next()) {\n var datum = data_1_1.value;\n\n _loop_1(datum);\n }\n } catch (e_3_1) {\n e_3 = {\n error: e_3_1\n };\n } finally {\n try {\n if (data_1_1 && !data_1_1.done && (_a = data_1.return)) _a.call(data_1);\n } finally {\n if (e_3) throw e_3.error;\n }\n }\n\n RelativeTimeFormat.availableLocales = Object.keys(RelativeTimeFormat.localeData);\n\n if (!RelativeTimeFormat.__defaultLocale) {\n RelativeTimeFormat.__defaultLocale = RelativeTimeFormat.availableLocales[0];\n }\n };\n\n RelativeTimeFormat.getDefaultLocale = function () {\n return RelativeTimeFormat.__defaultLocale;\n };\n\n RelativeTimeFormat.localeData = {};\n RelativeTimeFormat.availableLocales = [];\n RelativeTimeFormat.__defaultLocale = 'en';\n RelativeTimeFormat.relevantExtensionKeys = ['nu'];\n RelativeTimeFormat.polyfilled = true;\n RelativeTimeFormat.__INTERNAL_SLOT_MAP__ = new WeakMap();\n return RelativeTimeFormat;\n}();\n\nexports.default = RelativeTimeFormat;\n\ntry {\n // IE11 does not have Symbol\n if (typeof Symbol !== 'undefined') {\n Object.defineProperty(RelativeTimeFormat.prototype, Symbol.toStringTag, {\n value: 'Intl.RelativeTimeFormat',\n writable: false,\n enumerable: false,\n configurable: true\n });\n } // https://github.com/tc39/test262/blob/master/test/intl402/RelativeTimeFormat/constructor/length.js\n\n\n Object.defineProperty(RelativeTimeFormat.prototype.constructor, 'length', {\n value: 0,\n writable: false,\n enumerable: false,\n configurable: true\n }); // https://github.com/tc39/test262/blob/master/test/intl402/RelativeTimeFormat/constructor/supportedLocalesOf/length.js\n\n Object.defineProperty(RelativeTimeFormat.supportedLocalesOf, 'length', {\n value: 1,\n writable: false,\n enumerable: false,\n configurable: true\n });\n} catch (e) {// Meta fix so we're test262-compliant, not important\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AZm9ybWF0anMvaW50bC1yZWxhdGl2ZXRpbWVmb3JtYXQvZGlzdC9jb3JlLmpzPzcyNDIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWI7QUFDQTtBQUNBLDRDQUE0QyxPQUFPO0FBQ25EOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLDBCQUEwQixzQkFBc0I7QUFDaEQ7QUFDQTs7QUFFQTtBQUNBOztBQUVBLDhDQUE2QztBQUM3QztBQUNBLENBQUMsRUFBQzs7QUFFRixtQkFBbUIsbUJBQU8sQ0FBQyxJQUFzQjs7QUFFakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsK0JBQStCO0FBQy9CLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSx3Q0FBd0MsSUFBSSxXQUFXLElBQUk7QUFDM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLCtGQUErRix3QkFBd0I7QUFDdkg7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQOztBQUVBO0FBQ0EseUZBQXlGLGlCQUFpQjtBQUMxRztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQSxvQkFBb0IsdUJBQXVCO0FBQzNDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLElBQUk7QUFDWDtBQUNBO0FBQ0E7QUFDQSxTQUFTLFlBQVk7QUFDckI7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQSxpRUFBaUUsZ0JBQWdCO0FBQ2pGOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQsZUFBZTs7QUFFZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHLEVBQUU7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDLFlBQVk7QUFDYiIsImZpbGUiOiI5OTA1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfX2Fzc2lnbiA9IHRoaXMgJiYgdGhpcy5fX2Fzc2lnbiB8fCBmdW5jdGlvbiAoKSB7XG4gIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodCkge1xuICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcblxuICAgICAgZm9yICh2YXIgcCBpbiBzKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0O1xuICB9O1xuXG4gIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcblxudmFyIF9fdmFsdWVzID0gdGhpcyAmJiB0aGlzLl9fdmFsdWVzIHx8IGZ1bmN0aW9uIChvKSB7XG4gIHZhciBzID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvcixcbiAgICAgIG0gPSBzICYmIG9bc10sXG4gICAgICBpID0gMDtcbiAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XG4gIGlmIChvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHtcbiAgICBuZXh0OiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlOiBvICYmIG9baSsrXSxcbiAgICAgICAgZG9uZTogIW9cbiAgICAgIH07XG4gICAgfVxuICB9O1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG59O1xuXG52YXIgX19yZWFkID0gdGhpcyAmJiB0aGlzLl9fcmVhZCB8fCBmdW5jdGlvbiAobywgbikge1xuICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghbSkgcmV0dXJuIG87XG4gIHZhciBpID0gbS5jYWxsKG8pLFxuICAgICAgcixcbiAgICAgIGFyID0gW10sXG4gICAgICBlO1xuXG4gIHRyeSB7XG4gICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIHtcbiAgICAgIGFyLnB1c2goci52YWx1ZSk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGUgPSB7XG4gICAgICBlcnJvcjogZXJyb3JcbiAgICB9O1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKGUpIHRocm93IGUuZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGFyO1xufTtcblxudmFyIF9fc3ByZWFkID0gdGhpcyAmJiB0aGlzLl9fc3ByZWFkIHx8IGZ1bmN0aW9uICgpIHtcbiAgZm9yICh2YXIgYXIgPSBbXSwgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICBhciA9IGFyLmNvbmNhdChfX3JlYWQoYXJndW1lbnRzW2ldKSk7XG4gIH1cblxuICByZXR1cm4gYXI7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgaW50bF91dGlsc18xID0gcmVxdWlyZShcIkBmb3JtYXRqcy9pbnRsLXV0aWxzXCIpO1xuXG5mdW5jdGlvbiB1bnBhY2tEYXRhKGxvY2FsZSwgbG9jYWxlRGF0YSkge1xuICB2YXIgbG9jYWxlSGllcmFyY2h5ID0gaW50bF91dGlsc18xLmdldExvY2FsZUhpZXJhcmNoeShsb2NhbGUsIGxvY2FsZURhdGEuYWxpYXNlcywgbG9jYWxlRGF0YS5wYXJlbnRMb2NhbGVzKTtcbiAgdmFyIGRhdGFUb01lcmdlID0gbG9jYWxlSGllcmFyY2h5Lm1hcChmdW5jdGlvbiAobCkge1xuICAgIHJldHVybiBsb2NhbGVEYXRhLmRhdGFbbF07XG4gIH0pLmZpbHRlcihCb29sZWFuKTtcblxuICBpZiAoIWRhdGFUb01lcmdlLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgbG9jYWxlIGRhdGEgZm9yIFxcXCJcIiArIGxvY2FsZSArIFwiXFxcIiwgbG9va3VwIGhpZXJhcmNoeTogXCIgKyBsb2NhbGVIaWVyYXJjaHkuam9pbignLCAnKSk7XG4gIH1cblxuICBkYXRhVG9NZXJnZS5yZXZlcnNlKCk7XG4gIHJldHVybiBkYXRhVG9NZXJnZS5yZWR1Y2UoZnVuY3Rpb24gKGFsbCwgZCkge1xuICAgIHJldHVybiBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgYWxsKSwgZCk7XG4gIH0sIHtcbiAgICBudTogW11cbiAgfSk7XG59XG4vKipcbiAqIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1pbnRsLXJlbGF0aXZlLXRpbWUvI3NlYy1zaW5ndWxhcnJlbGF0aXZldGltZXVuaXRcbiAqIEBwYXJhbSB1bml0XG4gKi9cblxuXG5mdW5jdGlvbiBzaW5ndWxhclJlbGF0aXZlVGltZVVuaXQodW5pdCkge1xuICBpbnRsX3V0aWxzXzEuaW52YXJpYW50KHR5cGVvZiB1bml0ID09PSAnc3RyaW5nJywgXCJ1bml0IG11c3QgYmUgYSBzdHJpbmcsIGluc3RlYWQgZ290IFwiICsgdHlwZW9mIHVuaXQsIFR5cGVFcnJvcik7XG4gIGlmICh1bml0ID09PSAnc2Vjb25kcycpIHJldHVybiAnc2Vjb25kJztcbiAgaWYgKHVuaXQgPT09ICdtaW51dGVzJykgcmV0dXJuICdtaW51dGUnO1xuICBpZiAodW5pdCA9PT0gJ2hvdXJzJykgcmV0dXJuICdob3VyJztcbiAgaWYgKHVuaXQgPT09ICdkYXlzJykgcmV0dXJuICdkYXknO1xuICBpZiAodW5pdCA9PT0gJ3dlZWtzJykgcmV0dXJuICd3ZWVrJztcbiAgaWYgKHVuaXQgPT09ICdtb250aHMnKSByZXR1cm4gJ21vbnRoJztcbiAgaWYgKHVuaXQgPT09ICdxdWFydGVycycpIHJldHVybiAncXVhcnRlcic7XG4gIGlmICh1bml0ID09PSAneWVhcnMnKSByZXR1cm4gJ3llYXInO1xuXG4gIGlmICh1bml0ICE9PSAnc2Vjb25kJyAmJiB1bml0ICE9PSAnbWludXRlJyAmJiB1bml0ICE9PSAnaG91cicgJiYgdW5pdCAhPT0gJ2RheScgJiYgdW5pdCAhPT0gJ3dlZWsnICYmIHVuaXQgIT09ICdtb250aCcgJiYgdW5pdCAhPT0gJ3F1YXJ0ZXInICYmIHVuaXQgIT09ICd5ZWFyJykge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiSW52YWxpZCB1bml0IFwiICsgdW5pdCk7XG4gIH1cblxuICByZXR1cm4gdW5pdDtcbn1cblxudmFyIE5VTUJFUklOR19TWVNURU1fUkVHRVggPSAvXlthLXowLTldezMsOH0oLVthLXowLTldezMsOH0pKiQvaTtcbi8qKlxuICogaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLWludGwtcmVsYXRpdmUtdGltZS8jc2VjLW1ha2VwYXJ0c2xpc3RcbiAqIEBwYXJhbSBwYXR0ZXJuXG4gKiBAcGFyYW0gdW5pdFxuICogQHBhcmFtIHBhcnRzXG4gKi9cblxuZnVuY3Rpb24gbWFrZVBhcnRzTGlzdChwYXR0ZXJuLCB1bml0LCBwYXJ0cykge1xuICB2YXIgZV8xLCBfYSwgZV8yLCBfYjtcblxuICB2YXIgcGF0dGVyblBhcnRzID0gaW50bF91dGlsc18xLnBhcnRpdGlvblBhdHRlcm4ocGF0dGVybik7XG4gIHZhciByZXN1bHQgPSBbXTtcblxuICB0cnkge1xuICAgIGZvciAodmFyIHBhdHRlcm5QYXJ0c18xID0gX192YWx1ZXMocGF0dGVyblBhcnRzKSwgcGF0dGVyblBhcnRzXzFfMSA9IHBhdHRlcm5QYXJ0c18xLm5leHQoKTsgIXBhdHRlcm5QYXJ0c18xXzEuZG9uZTsgcGF0dGVyblBhcnRzXzFfMSA9IHBhdHRlcm5QYXJ0c18xLm5leHQoKSkge1xuICAgICAgdmFyIHBhdHRlcm5QYXJ0ID0gcGF0dGVyblBhcnRzXzFfMS52YWx1ZTtcblxuICAgICAgaWYgKGludGxfdXRpbHNfMS5pc0xpdGVyYWxQYXJ0KHBhdHRlcm5QYXJ0KSkge1xuICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgdHlwZTogJ2xpdGVyYWwnLFxuICAgICAgICAgIHZhbHVlOiBwYXR0ZXJuUGFydC52YWx1ZVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGludGxfdXRpbHNfMS5pbnZhcmlhbnQocGF0dGVyblBhcnQudHlwZSA9PT0gJzAnLCBcIk1hbGZvcm1lZCBwYXR0ZXJuIFwiICsgcGF0dGVybik7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBmb3IgKHZhciBwYXJ0c18xID0gKGVfMiA9IHZvaWQgMCwgX192YWx1ZXMocGFydHMpKSwgcGFydHNfMV8xID0gcGFydHNfMS5uZXh0KCk7ICFwYXJ0c18xXzEuZG9uZTsgcGFydHNfMV8xID0gcGFydHNfMS5uZXh0KCkpIHtcbiAgICAgICAgICAgIHZhciBwYXJ0ID0gcGFydHNfMV8xLnZhbHVlO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAgICB0eXBlOiBwYXJ0LnR5cGUsXG4gICAgICAgICAgICAgIHZhbHVlOiBwYXJ0LnZhbHVlLFxuICAgICAgICAgICAgICB1bml0OiB1bml0XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVfMl8xKSB7XG4gICAgICAgICAgZV8yID0ge1xuICAgICAgICAgICAgZXJyb3I6IGVfMl8xXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHBhcnRzXzFfMSAmJiAhcGFydHNfMV8xLmRvbmUgJiYgKF9iID0gcGFydHNfMS5yZXR1cm4pKSBfYi5jYWxsKHBhcnRzXzEpO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBpZiAoZV8yKSB0aHJvdyBlXzIuZXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChlXzFfMSkge1xuICAgIGVfMSA9IHtcbiAgICAgIGVycm9yOiBlXzFfMVxuICAgIH07XG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChwYXR0ZXJuUGFydHNfMV8xICYmICFwYXR0ZXJuUGFydHNfMV8xLmRvbmUgJiYgKF9hID0gcGF0dGVyblBhcnRzXzEucmV0dXJuKSkgX2EuY2FsbChwYXR0ZXJuUGFydHNfMSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBvYmplY3RJcyh4LCB5KSB7XG4gIGlmIChPYmplY3QuaXMpIHtcbiAgICByZXR1cm4gT2JqZWN0LmlzKHgsIHkpO1xuICB9IC8vIFNhbWVWYWx1ZSBhbGdvcml0aG1cblxuXG4gIGlmICh4ID09PSB5KSB7XG4gICAgLy8gU3RlcHMgMS01LCA3LTEwXG4gICAgLy8gU3RlcHMgNi5iLTYuZTogKzAgIT0gLTBcbiAgICByZXR1cm4geCAhPT0gMCB8fCAxIC8geCA9PT0gMSAvIHk7XG4gIH0gLy8gU3RlcCA2LmE6IE5hTiA9PSBOYU5cblxuXG4gIHJldHVybiB4ICE9PSB4ICYmIHkgIT09IHk7XG59XG5cbmZ1bmN0aW9uIHRvU3RyaW5nKGFyZykge1xuICByZXR1cm4gYXJnICsgJyc7XG59XG4vKipcbiAqIFBhcnRpdGlvblJlbGF0aXZlVGltZVBhdHRlcm5cbiAqIEBwYXJhbSBydGZcbiAqIEBwYXJhbSB2YWx1ZVxuICogQHBhcmFtIHVuaXRcbiAqL1xuXG5cbmZ1bmN0aW9uIHBhcnRpdGlvblJlbGF0aXZlVGltZVBhdHRlcm4oaW50ZXJuYWxTbG90TWFwLCBydGYsIHZhbHVlLCB1bml0KSB7XG4gIGludGxfdXRpbHNfMS5pbnZhcmlhbnQodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJywgXCJ2YWx1ZSBtdXN0IGJlIG51bWJlciwgaW5zdGVhZCBnb3QgXCIgKyB0eXBlb2YgdmFsdWUsIFR5cGVFcnJvcik7XG4gIGludGxfdXRpbHNfMS5pbnZhcmlhbnQodHlwZW9mIHVuaXQgPT09ICdzdHJpbmcnLCBcInVuaXQgbXVzdCBiZSBudW1iZXIsIGluc3RlYWQgZ290IFwiICsgdHlwZW9mIHZhbHVlLCBUeXBlRXJyb3IpO1xuXG4gIGlmIChpc05hTih2YWx1ZSkgfHwgdmFsdWUgPT09IEluZmluaXR5IHx8IHZhbHVlID09PSAtSW5maW5pdHkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkludmFsaWQgdmFsdWUgXCIgKyB2YWx1ZSk7XG4gIH1cblxuICB2YXIgcmVzb2x2ZWRVbml0ID0gc2luZ3VsYXJSZWxhdGl2ZVRpbWVVbml0KHVuaXQpO1xuICB2YXIgZmllbGRzID0gaW50bF91dGlsc18xLmdldEludGVybmFsU2xvdChpbnRlcm5hbFNsb3RNYXAsIHJ0ZiwgJ2ZpZWxkcycpO1xuICB2YXIgc3R5bGUgPSBpbnRsX3V0aWxzXzEuZ2V0SW50ZXJuYWxTbG90KGludGVybmFsU2xvdE1hcCwgcnRmLCAnc3R5bGUnKTtcbiAgdmFyIGVudHJ5ID0gcmVzb2x2ZWRVbml0O1xuXG4gIGlmIChzdHlsZSA9PT0gJ3Nob3J0Jykge1xuICAgIGVudHJ5ID0gdW5pdCArIFwiLXNob3J0XCI7XG4gIH0gZWxzZSBpZiAoc3R5bGUgPT09ICduYXJyb3cnKSB7XG4gICAgZW50cnkgPSB1bml0ICsgXCItbmFycm93XCI7XG4gIH1cblxuICBpZiAoIShlbnRyeSBpbiBmaWVsZHMpKSB7XG4gICAgZW50cnkgPSB1bml0O1xuICB9XG5cbiAgdmFyIHBhdHRlcm5zID0gZmllbGRzW2VudHJ5XTtcbiAgdmFyIG51bWVyaWMgPSBpbnRsX3V0aWxzXzEuZ2V0SW50ZXJuYWxTbG90KGludGVybmFsU2xvdE1hcCwgcnRmLCAnbnVtZXJpYycpO1xuXG4gIGlmIChudW1lcmljID09PSAnYXV0bycpIHtcbiAgICBpZiAodG9TdHJpbmcodmFsdWUpIGluIHBhdHRlcm5zKSB7XG4gICAgICByZXR1cm4gW3tcbiAgICAgICAgdHlwZTogJ2xpdGVyYWwnLFxuICAgICAgICB2YWx1ZTogcGF0dGVybnNbdG9TdHJpbmcodmFsdWUpXVxuICAgICAgfV07XG4gICAgfVxuICB9XG5cbiAgdmFyIHRsID0gJ2Z1dHVyZSc7XG5cbiAgaWYgKG9iamVjdElzKHZhbHVlLCAtMCkgfHwgdmFsdWUgPCAwKSB7XG4gICAgdGwgPSAncGFzdCc7XG4gIH1cblxuICB2YXIgcG8gPSBwYXR0ZXJuc1t0bF07XG4gIHZhciBwbHVyYWxSdWxlcyA9IGludGxfdXRpbHNfMS5nZXRJbnRlcm5hbFNsb3QoaW50ZXJuYWxTbG90TWFwLCBydGYsICdwbHVyYWxSdWxlcycpO1xuICB2YXIgbnVtYmVyRm9ybWF0ID0gaW50bF91dGlsc18xLmdldEludGVybmFsU2xvdChpbnRlcm5hbFNsb3RNYXAsIHJ0ZiwgJ251bWJlckZvcm1hdCcpO1xuICB2YXIgZnYgPSB0eXBlb2YgbnVtYmVyRm9ybWF0LmZvcm1hdFRvUGFydHMgPT09ICdmdW5jdGlvbicgPyBudW1iZXJGb3JtYXQuZm9ybWF0VG9QYXJ0cyhNYXRoLmFicyh2YWx1ZSkpIDogLy8gVE9ETzogSWYgZm9ybWF0VG9QYXJ0cyBpcyBub3Qgc3VwcG9ydGVkLCB3ZSBhc3N1bWUgdGhlIHdob2xlIGZvcm1hdHRlZFxuICAvLyBudW1iZXIgaXMgYSBwYXJ0XG4gIFt7XG4gICAgdHlwZTogJ2xpdGVyYWwnLFxuICAgIHZhbHVlOiBudW1iZXJGb3JtYXQuZm9ybWF0KE1hdGguYWJzKHZhbHVlKSksXG4gICAgdW5pdDogdW5pdFxuICB9XTtcbiAgdmFyIHByID0gcGx1cmFsUnVsZXMuc2VsZWN0KHZhbHVlKTtcbiAgdmFyIHBhdHRlcm4gPSBwb1twcl07XG4gIHJldHVybiBtYWtlUGFydHNMaXN0KHBhdHRlcm4sIHJlc29sdmVkVW5pdCwgZnYpO1xufVxuXG52YXIgUmVsYXRpdmVUaW1lRm9ybWF0ID1cbi8qKiBAY2xhc3MgKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gUmVsYXRpdmVUaW1lRm9ybWF0KGxvY2FsZXMsIG9wdGlvbnMpIHtcbiAgICAvLyB0ZXN0MjYyL3Rlc3QvaW50bDQwMi9SZWxhdGl2ZVRpbWVGb3JtYXQvY29uc3RydWN0b3IvY29uc3RydWN0b3IvbmV3dGFyZ2V0LXVuZGVmaW5lZC5qc1xuICAgIC8vIENhbm5vdCB1c2UgYG5ldy50YXJnZXRgIGJjIG9mIElFMTEgJiBUUyB0cmFuc3BpbGVzIGl0IHRvIHNvbWV0aGluZyBlbHNlXG4gICAgdmFyIG5ld1RhcmdldCA9IHRoaXMgJiYgdGhpcyBpbnN0YW5jZW9mIFJlbGF0aXZlVGltZUZvcm1hdCA/IHRoaXMuY29uc3RydWN0b3IgOiB2b2lkIDA7XG5cbiAgICBpZiAoIW5ld1RhcmdldCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludGwuUmVsYXRpdmVUaW1lRm9ybWF0IG11c3QgYmUgY2FsbGVkIHdpdGggJ25ldydcIik7XG4gICAgfVxuXG4gICAgaW50bF91dGlsc18xLnNldEludGVybmFsU2xvdChSZWxhdGl2ZVRpbWVGb3JtYXQuX19JTlRFUk5BTF9TTE9UX01BUF9fLCB0aGlzLCAnaW5pdGlhbGl6ZWRSZWxhdGl2ZVRpbWVGb3JtYXQnLCB0cnVlKTtcbiAgICB2YXIgcmVxdWVzdGVkTG9jYWxlcyA9IGludGxfdXRpbHNfMS5nZXRDYW5vbmljYWxMb2NhbGVzKGxvY2FsZXMpO1xuICAgIHZhciBvcHQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHZhciBvcHRzID0gb3B0aW9ucyA9PT0gdW5kZWZpbmVkID8gT2JqZWN0LmNyZWF0ZShudWxsKSA6IGludGxfdXRpbHNfMS50b09iamVjdChvcHRpb25zKTtcbiAgICB2YXIgbWF0Y2hlciA9IGludGxfdXRpbHNfMS5nZXRPcHRpb24ob3B0cywgJ2xvY2FsZU1hdGNoZXInLCAnc3RyaW5nJywgWydiZXN0IGZpdCcsICdsb29rdXAnXSwgJ2Jlc3QgZml0Jyk7XG4gICAgb3B0LmxvY2FsZU1hdGNoZXIgPSBtYXRjaGVyO1xuICAgIHZhciBudW1iZXJpbmdTeXN0ZW0gPSBpbnRsX3V0aWxzXzEuZ2V0T3B0aW9uKG9wdHMsICdudW1iZXJpbmdTeXN0ZW0nLCAnc3RyaW5nJywgdW5kZWZpbmVkLCB1bmRlZmluZWQpO1xuXG4gICAgaWYgKG51bWJlcmluZ1N5c3RlbSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoIU5VTUJFUklOR19TWVNURU1fUkVHRVgudGVzdChudW1iZXJpbmdTeXN0ZW0pKSB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiSW52YWxpZCBudW1iZXJpbmcgc3lzdGVtIFwiICsgbnVtYmVyaW5nU3lzdGVtKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBvcHQubnUgPSBudW1iZXJpbmdTeXN0ZW07XG4gICAgdmFyIHIgPSBpbnRsX3V0aWxzXzEuY3JlYXRlUmVzb2x2ZUxvY2FsZShSZWxhdGl2ZVRpbWVGb3JtYXQuZ2V0RGVmYXVsdExvY2FsZSkoUmVsYXRpdmVUaW1lRm9ybWF0LmF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMsIG9wdCwgUmVsYXRpdmVUaW1lRm9ybWF0LnJlbGV2YW50RXh0ZW5zaW9uS2V5cywgUmVsYXRpdmVUaW1lRm9ybWF0LmxvY2FsZURhdGEpO1xuICAgIHZhciBsb2NhbGUgPSByLmxvY2FsZSxcbiAgICAgICAgbnUgPSByLm51O1xuICAgIGludGxfdXRpbHNfMS5zZXRJbnRlcm5hbFNsb3QoUmVsYXRpdmVUaW1lRm9ybWF0Ll9fSU5URVJOQUxfU0xPVF9NQVBfXywgdGhpcywgJ2xvY2FsZScsIGxvY2FsZSk7XG4gICAgaW50bF91dGlsc18xLnNldEludGVybmFsU2xvdChSZWxhdGl2ZVRpbWVGb3JtYXQuX19JTlRFUk5BTF9TTE9UX01BUF9fLCB0aGlzLCAnc3R5bGUnLCBpbnRsX3V0aWxzXzEuZ2V0T3B0aW9uKG9wdHMsICdzdHlsZScsICdzdHJpbmcnLCBbJ2xvbmcnLCAnbmFycm93JywgJ3Nob3J0J10sICdsb25nJykpO1xuICAgIGludGxfdXRpbHNfMS5zZXRJbnRlcm5hbFNsb3QoUmVsYXRpdmVUaW1lRm9ybWF0Ll9fSU5URVJOQUxfU0xPVF9NQVBfXywgdGhpcywgJ251bWVyaWMnLCBpbnRsX3V0aWxzXzEuZ2V0T3B0aW9uKG9wdHMsICdudW1lcmljJywgJ3N0cmluZycsIFsnYWx3YXlzJywgJ2F1dG8nXSwgJ2Fsd2F5cycpKTtcbiAgICBpbnRsX3V0aWxzXzEuc2V0SW50ZXJuYWxTbG90KFJlbGF0aXZlVGltZUZvcm1hdC5fX0lOVEVSTkFMX1NMT1RfTUFQX18sIHRoaXMsICdmaWVsZHMnLCBSZWxhdGl2ZVRpbWVGb3JtYXQubG9jYWxlRGF0YVtsb2NhbGVdKTtcbiAgICBpbnRsX3V0aWxzXzEuc2V0SW50ZXJuYWxTbG90KFJlbGF0aXZlVGltZUZvcm1hdC5fX0lOVEVSTkFMX1NMT1RfTUFQX18sIHRoaXMsICdudW1iZXJGb3JtYXQnLCBuZXcgSW50bC5OdW1iZXJGb3JtYXQobG9jYWxlcykpO1xuICAgIGludGxfdXRpbHNfMS5zZXRJbnRlcm5hbFNsb3QoUmVsYXRpdmVUaW1lRm9ybWF0Ll9fSU5URVJOQUxfU0xPVF9NQVBfXywgdGhpcywgJ3BsdXJhbFJ1bGVzJywgbmV3IEludGwuUGx1cmFsUnVsZXMobG9jYWxlcykpO1xuICAgIGludGxfdXRpbHNfMS5zZXRJbnRlcm5hbFNsb3QoUmVsYXRpdmVUaW1lRm9ybWF0Ll9fSU5URVJOQUxfU0xPVF9NQVBfXywgdGhpcywgJ251bWJlcmluZ1N5c3RlbScsIG51KTtcbiAgfVxuXG4gIFJlbGF0aXZlVGltZUZvcm1hdC5wcm90b3R5cGUuZm9ybWF0ID0gZnVuY3Rpb24gKHZhbHVlLCB1bml0KSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZm9ybWF0IHdhcyBjYWxsZWQgb24gYSBub24tb2JqZWN0Jyk7XG4gICAgfVxuXG4gICAgaWYgKCFpbnRsX3V0aWxzXzEuZ2V0SW50ZXJuYWxTbG90KFJlbGF0aXZlVGltZUZvcm1hdC5fX0lOVEVSTkFMX1NMT1RfTUFQX18sIHRoaXMsICdpbml0aWFsaXplZFJlbGF0aXZlVGltZUZvcm1hdCcpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdmb3JtYXQgd2FzIGNhbGxlZCBvbiBhIGludmFsaWQgY29udGV4dCcpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJ0aXRpb25SZWxhdGl2ZVRpbWVQYXR0ZXJuKFJlbGF0aXZlVGltZUZvcm1hdC5fX0lOVEVSTkFMX1NMT1RfTUFQX18sIHRoaXMsIE51bWJlcih2YWx1ZSksIHRvU3RyaW5nKHVuaXQpKS5tYXAoZnVuY3Rpb24gKGVsKSB7XG4gICAgICByZXR1cm4gZWwudmFsdWU7XG4gICAgfSkuam9pbignJyk7XG4gIH07XG5cbiAgUmVsYXRpdmVUaW1lRm9ybWF0LnByb3RvdHlwZS5mb3JtYXRUb1BhcnRzID0gZnVuY3Rpb24gKHZhbHVlLCB1bml0KSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZm9ybWF0VG9QYXJ0cyB3YXMgY2FsbGVkIG9uIGEgbm9uLW9iamVjdCcpO1xuICAgIH1cblxuICAgIGlmICghaW50bF91dGlsc18xLmdldEludGVybmFsU2xvdChSZWxhdGl2ZVRpbWVGb3JtYXQuX19JTlRFUk5BTF9TTE9UX01BUF9fLCB0aGlzLCAnaW5pdGlhbGl6ZWRSZWxhdGl2ZVRpbWVGb3JtYXQnKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZm9ybWF0VG9QYXJ0cyB3YXMgY2FsbGVkIG9uIGEgaW52YWxpZCBjb250ZXh0Jyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnRpdGlvblJlbGF0aXZlVGltZVBhdHRlcm4oUmVsYXRpdmVUaW1lRm9ybWF0Ll9fSU5URVJOQUxfU0xPVF9NQVBfXywgdGhpcywgTnVtYmVyKHZhbHVlKSwgdG9TdHJpbmcodW5pdCkpO1xuICB9O1xuXG4gIFJlbGF0aXZlVGltZUZvcm1hdC5wcm90b3R5cGUucmVzb2x2ZWRPcHRpb25zID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0eXBlb2YgdGhpcyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3Jlc29sdmVkT3B0aW9ucyB3YXMgY2FsbGVkIG9uIGEgbm9uLW9iamVjdCcpO1xuICAgIH1cblxuICAgIGlmICghaW50bF91dGlsc18xLmdldEludGVybmFsU2xvdChSZWxhdGl2ZVRpbWVGb3JtYXQuX19JTlRFUk5BTF9TTE9UX01BUF9fLCB0aGlzLCAnaW5pdGlhbGl6ZWRSZWxhdGl2ZVRpbWVGb3JtYXQnKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigncmVzb2x2ZWRPcHRpb25zIHdhcyBjYWxsZWQgb24gYSBpbnZhbGlkIGNvbnRleHQnKTtcbiAgICB9IC8vIHRlc3QyNjIvdGVzdC9pbnRsNDAyL1JlbGF0aXZlVGltZUZvcm1hdC9wcm90b3R5cGUvcmVzb2x2ZWRPcHRpb25zL3R5cGUuanNcblxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxvY2FsZTogaW50bF91dGlsc18xLmdldEludGVybmFsU2xvdChSZWxhdGl2ZVRpbWVGb3JtYXQuX19JTlRFUk5BTF9TTE9UX01BUF9fLCB0aGlzLCAnbG9jYWxlJyksXG4gICAgICBzdHlsZTogaW50bF91dGlsc18xLmdldEludGVybmFsU2xvdChSZWxhdGl2ZVRpbWVGb3JtYXQuX19JTlRFUk5BTF9TTE9UX01BUF9fLCB0aGlzLCAnc3R5bGUnKSxcbiAgICAgIG51bWVyaWM6IGludGxfdXRpbHNfMS5nZXRJbnRlcm5hbFNsb3QoUmVsYXRpdmVUaW1lRm9ybWF0Ll9fSU5URVJOQUxfU0xPVF9NQVBfXywgdGhpcywgJ251bWVyaWMnKSxcbiAgICAgIG51bWJlcmluZ1N5c3RlbTogaW50bF91dGlsc18xLmdldEludGVybmFsU2xvdChSZWxhdGl2ZVRpbWVGb3JtYXQuX19JTlRFUk5BTF9TTE9UX01BUF9fLCB0aGlzLCAnbnVtYmVyaW5nU3lzdGVtJylcbiAgICB9O1xuICB9O1xuXG4gIFJlbGF0aXZlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YgPSBmdW5jdGlvbiAobG9jYWxlcywgb3B0aW9ucykge1xuICAgIHJldHVybiBpbnRsX3V0aWxzXzEuc3VwcG9ydGVkTG9jYWxlcyhSZWxhdGl2ZVRpbWVGb3JtYXQuYXZhaWxhYmxlTG9jYWxlcywgaW50bF91dGlsc18xLmdldENhbm9uaWNhbExvY2FsZXMobG9jYWxlcyksIG9wdGlvbnMpO1xuICB9O1xuXG4gIFJlbGF0aXZlVGltZUZvcm1hdC5fX2FkZExvY2FsZURhdGEgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGVfMywgX2E7XG5cbiAgICB2YXIgZGF0YSA9IFtdO1xuXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgIGRhdGFbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG5cbiAgICB2YXIgX2xvb3BfMSA9IGZ1bmN0aW9uIF9sb29wXzEoZGF0dW0pIHtcbiAgICAgIHZhciBhdmFpbGFibGVMb2NhbGVzID0gT2JqZWN0LmtleXMoX19zcHJlYWQoZGF0dW0uYXZhaWxhYmxlTG9jYWxlcywgT2JqZWN0LmtleXMoZGF0dW0uYWxpYXNlcyksIE9iamVjdC5rZXlzKGRhdHVtLnBhcmVudExvY2FsZXMpKS5yZWR1Y2UoZnVuY3Rpb24gKGFsbCwgaykge1xuICAgICAgICBhbGxba10gPSB0cnVlO1xuICAgICAgICByZXR1cm4gYWxsO1xuICAgICAgfSwge30pKTtcbiAgICAgIGF2YWlsYWJsZUxvY2FsZXMuZm9yRWFjaChmdW5jdGlvbiAobG9jYWxlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgUmVsYXRpdmVUaW1lRm9ybWF0LmxvY2FsZURhdGFbbG9jYWxlXSA9IHVucGFja0RhdGEobG9jYWxlLCBkYXR1bSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHsvLyBJZiB3ZSBjYW4ndCB1bnBhY2sgdGhpcyBkYXRhLCBpZ25vcmUgdGhlIGxvY2FsZVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgdHJ5IHtcbiAgICAgIGZvciAodmFyIGRhdGFfMSA9IF9fdmFsdWVzKGRhdGEpLCBkYXRhXzFfMSA9IGRhdGFfMS5uZXh0KCk7ICFkYXRhXzFfMS5kb25lOyBkYXRhXzFfMSA9IGRhdGFfMS5uZXh0KCkpIHtcbiAgICAgICAgdmFyIGRhdHVtID0gZGF0YV8xXzEudmFsdWU7XG5cbiAgICAgICAgX2xvb3BfMShkYXR1bSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZV8zXzEpIHtcbiAgICAgIGVfMyA9IHtcbiAgICAgICAgZXJyb3I6IGVfM18xXG4gICAgICB9O1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoZGF0YV8xXzEgJiYgIWRhdGFfMV8xLmRvbmUgJiYgKF9hID0gZGF0YV8xLnJldHVybikpIF9hLmNhbGwoZGF0YV8xKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChlXzMpIHRocm93IGVfMy5lcnJvcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBSZWxhdGl2ZVRpbWVGb3JtYXQuYXZhaWxhYmxlTG9jYWxlcyA9IE9iamVjdC5rZXlzKFJlbGF0aXZlVGltZUZvcm1hdC5sb2NhbGVEYXRhKTtcblxuICAgIGlmICghUmVsYXRpdmVUaW1lRm9ybWF0Ll9fZGVmYXVsdExvY2FsZSkge1xuICAgICAgUmVsYXRpdmVUaW1lRm9ybWF0Ll9fZGVmYXVsdExvY2FsZSA9IFJlbGF0aXZlVGltZUZvcm1hdC5hdmFpbGFibGVMb2NhbGVzWzBdO1xuICAgIH1cbiAgfTtcblxuICBSZWxhdGl2ZVRpbWVGb3JtYXQuZ2V0RGVmYXVsdExvY2FsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gUmVsYXRpdmVUaW1lRm9ybWF0Ll9fZGVmYXVsdExvY2FsZTtcbiAgfTtcblxuICBSZWxhdGl2ZVRpbWVGb3JtYXQubG9jYWxlRGF0YSA9IHt9O1xuICBSZWxhdGl2ZVRpbWVGb3JtYXQuYXZhaWxhYmxlTG9jYWxlcyA9IFtdO1xuICBSZWxhdGl2ZVRpbWVGb3JtYXQuX19kZWZhdWx0TG9jYWxlID0gJ2VuJztcbiAgUmVsYXRpdmVUaW1lRm9ybWF0LnJlbGV2YW50RXh0ZW5zaW9uS2V5cyA9IFsnbnUnXTtcbiAgUmVsYXRpdmVUaW1lRm9ybWF0LnBvbHlmaWxsZWQgPSB0cnVlO1xuICBSZWxhdGl2ZVRpbWVGb3JtYXQuX19JTlRFUk5BTF9TTE9UX01BUF9fID0gbmV3IFdlYWtNYXAoKTtcbiAgcmV0dXJuIFJlbGF0aXZlVGltZUZvcm1hdDtcbn0oKTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gUmVsYXRpdmVUaW1lRm9ybWF0O1xuXG50cnkge1xuICAvLyBJRTExIGRvZXMgbm90IGhhdmUgU3ltYm9sXG4gIGlmICh0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJykge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZWxhdGl2ZVRpbWVGb3JtYXQucHJvdG90eXBlLCBTeW1ib2wudG9TdHJpbmdUYWcsIHtcbiAgICAgIHZhbHVlOiAnSW50bC5SZWxhdGl2ZVRpbWVGb3JtYXQnLFxuICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgfSAvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS90ZXN0MjYyL2Jsb2IvbWFzdGVyL3Rlc3QvaW50bDQwMi9SZWxhdGl2ZVRpbWVGb3JtYXQvY29uc3RydWN0b3IvbGVuZ3RoLmpzXG5cblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUmVsYXRpdmVUaW1lRm9ybWF0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciwgJ2xlbmd0aCcsIHtcbiAgICB2YWx1ZTogMCxcbiAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pOyAvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS90ZXN0MjYyL2Jsb2IvbWFzdGVyL3Rlc3QvaW50bDQwMi9SZWxhdGl2ZVRpbWVGb3JtYXQvY29uc3RydWN0b3Ivc3VwcG9ydGVkTG9jYWxlc09mL2xlbmd0aC5qc1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZWxhdGl2ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mLCAnbGVuZ3RoJywge1xuICAgIHZhbHVlOiAxLFxuICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSk7XG59IGNhdGNoIChlKSB7Ly8gTWV0YSBmaXggc28gd2UncmUgdGVzdDI2Mi1jb21wbGlhbnQsIG5vdCBpbXBvcnRhbnRcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9905\n")},8079:function(){eval('/* @generated */\n// prettier-ignore\nif (Intl.RelativeTimeFormat && typeof Intl.RelativeTimeFormat.__addLocaleData === \'function\') {\n Intl.RelativeTimeFormat.__addLocaleData({\n "data": {\n "en-001": {\n "year-short": {\n "0": "this yr",\n "1": "next yr",\n "future": {\n "one": "in {0} yr",\n "other": "in {0} yr"\n },\n "past": {\n "one": "{0} yr ago",\n "other": "{0} yr ago"\n },\n "-1": "last yr"\n },\n "year-narrow": {\n "0": "this yr",\n "1": "next yr",\n "future": {\n "one": "in {0} yr",\n "other": "in {0} yr"\n },\n "past": {\n "one": "{0} yr ago",\n "other": "{0} yr ago"\n },\n "-1": "last yr"\n },\n "quarter-short": {\n "0": "this qtr.",\n "1": "next qtr.",\n "future": {\n "one": "in {0} qtr",\n "other": "in {0} qtr"\n },\n "past": {\n "one": "{0} qtr ago",\n "other": "{0} qtr ago"\n },\n "-1": "last qtr."\n },\n "quarter-narrow": {\n "0": "this qtr.",\n "1": "next qtr.",\n "future": {\n "one": "in {0} qtr",\n "other": "in {0} qtr"\n },\n "past": {\n "one": "{0} qtr ago",\n "other": "{0} qtr ago"\n },\n "-1": "last qtr."\n },\n "month-short": {\n "0": "this mo",\n "1": "next mo",\n "future": {\n "one": "in {0} mo",\n "other": "in {0} mo"\n },\n "past": {\n "one": "{0} mo ago",\n "other": "{0} mo ago"\n },\n "-1": "last mo"\n },\n "month-narrow": {\n "0": "this mo",\n "1": "next mo",\n "future": {\n "one": "in {0} mo",\n "other": "in {0} mo"\n },\n "past": {\n "one": "{0} mo ago",\n "other": "{0} mo ago"\n },\n "-1": "last mo"\n },\n "week-short": {\n "0": "this wk",\n "1": "next wk",\n "future": {\n "one": "in {0} wk",\n "other": "in {0} wk"\n },\n "past": {\n "one": "{0} wk ago",\n "other": "{0} wk ago"\n },\n "-1": "last wk"\n },\n "week-narrow": {\n "0": "this wk",\n "1": "next wk",\n "future": {\n "one": "in {0} wk",\n "other": "in {0} wk"\n },\n "past": {\n "one": "{0} wk ago",\n "other": "{0} wk ago"\n },\n "-1": "last wk"\n },\n "hour-short": {\n "0": "this hour",\n "future": {\n "one": "in {0} hr",\n "other": "in {0} hr"\n },\n "past": {\n "one": "{0} hr ago",\n "other": "{0} hr ago"\n }\n },\n "hour-narrow": {\n "0": "this hour",\n "future": {\n "one": "in {0} hr",\n "other": "in {0} hr"\n },\n "past": {\n "one": "{0} hr ago",\n "other": "{0} hr ago"\n }\n },\n "minute-short": {\n "0": "this minute",\n "future": {\n "one": "in {0} min",\n "other": "in {0} min"\n },\n "past": {\n "one": "{0} min ago",\n "other": "{0} min ago"\n }\n },\n "minute-narrow": {\n "0": "this minute",\n "future": {\n "one": "in {0} min",\n "other": "in {0} min"\n },\n "past": {\n "one": "{0} min ago",\n "other": "{0} min ago"\n }\n },\n "second-short": {\n "0": "now",\n "future": {\n "one": "in {0} sec",\n "other": "in {0} sec"\n },\n "past": {\n "one": "{0} sec ago",\n "other": "{0} sec ago"\n }\n },\n "second-narrow": {\n "0": "now",\n "future": {\n "one": "in {0} sec",\n "other": "in {0} sec"\n },\n "past": {\n "one": "{0} sec ago",\n "other": "{0} sec ago"\n }\n }\n },\n "en-150": {\n "year-short": {\n "0": "this yr",\n "1": "next yr",\n "future": {\n "one": "in {0} yr",\n "other": "in {0} yr"\n },\n "past": {\n "one": "{0} yr ago",\n "other": "{0} yr ago"\n },\n "-1": "last yr"\n },\n "year-narrow": {\n "0": "this yr",\n "1": "next yr",\n "future": {\n "one": "in {0} yr",\n "other": "in {0} yr"\n },\n "past": {\n "one": "{0} yr ago",\n "other": "{0} yr ago"\n },\n "-1": "last yr"\n },\n "quarter-short": {\n "0": "this qtr.",\n "1": "next qtr.",\n "future": {\n "one": "in {0} qtr",\n "other": "in {0} qtr"\n },\n "past": {\n "one": "{0} qtr ago",\n "other": "{0} qtr ago"\n },\n "-1": "last qtr."\n },\n "quarter-narrow": {\n "0": "this qtr.",\n "1": "next qtr.",\n "future": {\n "one": "in {0} qtr",\n "other": "in {0} qtr"\n },\n "past": {\n "one": "{0} qtr ago",\n "other": "{0} qtr ago"\n },\n "-1": "last qtr."\n },\n "month-short": {\n "0": "this mo",\n "1": "next mo",\n "future": {\n "one": "in {0} mo",\n "other": "in {0} mo"\n },\n "past": {\n "one": "{0} mo ago",\n "other": "{0} mo ago"\n },\n "-1": "last mo"\n },\n "month-narrow": {\n "0": "this mo",\n "1": "next mo",\n "future": {\n "one": "in {0} mo",\n "other": "in {0} mo"\n },\n "past": {\n "one": "{0} mo ago",\n "other": "{0} mo ago"\n },\n "-1": "last mo"\n },\n "week-short": {\n "0": "this wk",\n "1": "next wk",\n "future": {\n "one": "in {0} wk",\n "other": "in {0} wk"\n },\n "past": {\n "one": "{0} wk ago",\n "other": "{0} wk ago"\n },\n "-1": "last wk"\n },\n "week-narrow": {\n "0": "this wk",\n "1": "next wk",\n "future": {\n "one": "in {0} wk",\n "other": "in {0} wk"\n },\n "past": {\n "one": "{0} wk ago",\n "other": "{0} wk ago"\n },\n "-1": "last wk"\n },\n "hour-short": {\n "0": "this hour",\n "future": {\n "one": "in {0} hr",\n "other": "in {0} hr"\n },\n "past": {\n "one": "{0} hr ago",\n "other": "{0} hr ago"\n }\n },\n "hour-narrow": {\n "0": "this hour",\n "future": {\n "one": "in {0} hr",\n "other": "in {0} hr"\n },\n "past": {\n "one": "{0} hr ago",\n "other": "{0} hr ago"\n }\n },\n "minute-short": {\n "0": "this minute",\n "future": {\n "one": "in {0} min",\n "other": "in {0} min"\n },\n "past": {\n "one": "{0} min ago",\n "other": "{0} min ago"\n }\n },\n "minute-narrow": {\n "0": "this minute",\n "future": {\n "one": "in {0} min",\n "other": "in {0} min"\n },\n "past": {\n "one": "{0} min ago",\n "other": "{0} min ago"\n }\n },\n "second-short": {\n "0": "now",\n "future": {\n "one": "in {0} sec",\n "other": "in {0} sec"\n },\n "past": {\n "one": "{0} sec ago",\n "other": "{0} sec ago"\n }\n },\n "second-narrow": {\n "0": "now",\n "future": {\n "one": "in {0} sec",\n "other": "in {0} sec"\n },\n "past": {\n "one": "{0} sec ago",\n "other": "{0} sec ago"\n }\n }\n },\n "en-AU": {\n "year-short": {\n "0": "this yr",\n "1": "next yr",\n "future": {\n "one": "in {0} yr",\n "other": "in {0} yrs"\n },\n "past": {\n "one": "{0} yr ago",\n "other": "{0} yrs ago"\n },\n "-1": "last yr"\n },\n "year-narrow": {\n "0": "this yr",\n "1": "next yr",\n "future": {\n "one": "in {0} yr",\n "other": "in {0} yrs"\n },\n "past": {\n "one": "{0} yr ago",\n "other": "{0} yrs ago"\n },\n "-1": "last yr"\n },\n "quarter-short": {\n "0": "this qtr.",\n "1": "next qtr.",\n "future": {\n "one": "in {0} qtr",\n "other": "in {0} qtrs"\n },\n "past": {\n "one": "{0} qtr ago",\n "other": "{0} qtrs ago"\n },\n "-1": "last qtr."\n },\n "quarter-narrow": {\n "0": "this qtr.",\n "1": "next qtr.",\n "future": {\n "one": "in {0} qtr",\n "other": "in {0} qtrs"\n },\n "past": {\n "one": "in {0} qtr ago",\n "other": "{0} qtrs ago"\n },\n "-1": "last qtr."\n },\n "month-short": {\n "0": "this mo",\n "1": "next mo",\n "future": {\n "one": "in {0} mo.",\n "other": "in {0} mo."\n },\n "past": {\n "one": "{0} mo. ago",\n "other": "{0} mo. ago"\n },\n "-1": "last mo"\n },\n "month-narrow": {\n "0": "this mo",\n "1": "next mo",\n "future": {\n "one": "in {0} mo.",\n "other": "in {0} mo."\n },\n "past": {\n "one": "{0} mo. ago",\n "other": "{0} mo. ago"\n },\n "-1": "last mo"\n },\n "week-short": {\n "0": "this wk",\n "1": "next wk",\n "future": {\n "one": "in {0} wk",\n "other": "in {0} wks"\n },\n "past": {\n "one": "{0} wk ago",\n "other": "{0} wks ago"\n },\n "-1": "last wk"\n },\n "week-narrow": {\n "0": "this wk",\n "1": "next wk",\n "future": {\n "one": "in {0} wk",\n "other": "in {0} wks"\n },\n "past": {\n "one": "{0} wk ago",\n "other": "{0} wks ago"\n },\n "-1": "last wk"\n },\n "hour-short": {\n "0": "this hour",\n "future": {\n "one": "in {0} hr",\n "other": "in {0} hrs"\n },\n "past": {\n "one": "{0} hr ago",\n "other": "{0} hrs ago"\n }\n },\n "hour-narrow": {\n "0": "this hour",\n "future": {\n "one": "in {0} hr",\n "other": "in {0} hrs"\n },\n "past": {\n "one": "{0} hr ago",\n "other": "{0} hrs ago"\n }\n },\n "minute-short": {\n "0": "this minute",\n "future": {\n "one": "in {0} min.",\n "other": "in {0} mins"\n },\n "past": {\n "one": "{0} min. ago",\n "other": "{0} mins ago"\n }\n },\n "minute-narrow": {\n "0": "this minute",\n "future": {\n "one": "in {0} min.",\n "other": "in {0} mins"\n },\n "past": {\n "one": "{0} min. ago",\n "other": "{0} mins ago"\n }\n },\n "second-short": {\n "0": "now",\n "future": {\n "one": "in {0} sec.",\n "other": "in {0} secs"\n },\n "past": {\n "one": "{0} sec. ago",\n "other": "{0} secs ago"\n }\n },\n "second-narrow": {\n "0": "now",\n "future": {\n "one": "in {0} sec.",\n "other": "in {0} secs"\n },\n "past": {\n "one": "{0} sec. ago",\n "other": "{0} secs ago"\n }\n }\n },\n "en-CA": {\n "year-short": {\n "0": "this yr",\n "1": "next yr",\n "future": {\n "one": "in {0} yr.",\n "other": "in {0} yrs."\n },\n "past": {\n "one": "{0} yr. ago",\n "other": "{0} yrs. ago"\n },\n "-1": "last yr"\n },\n "year-narrow": {\n "0": "this yr",\n "1": "next yr",\n "future": {\n "one": "in {0} yr.",\n "other": "in {0} yrs."\n },\n "past": {\n "one": "{0} yr. ago",\n "other": "{0} yrs. ago"\n },\n "-1": "last yr"\n },\n "quarter-short": {\n "0": "this qtr.",\n "1": "next qtr.",\n "future": {\n "one": "in {0} qtr.",\n "other": "in {0} qtrs."\n },\n "past": {\n "one": "{0} qtr. ago",\n "other": "{0} qtrs. ago"\n },\n "-1": "last qtr."\n },\n "quarter-narrow": {\n "0": "this qtr.",\n "1": "next qtr.",\n "future": {\n "one": "in {0} qtr.",\n "other": "in {0} qtrs."\n },\n "past": {\n "one": "{0} qtr. ago",\n "other": "{0} qtrs. ago"\n },\n "-1": "last qtr."\n },\n "month-short": {\n "0": "this mo",\n "1": "next mo",\n "future": {\n "one": "in {0} mo.",\n "other": "in {0} mos."\n },\n "past": {\n "one": "{0} mo. ago",\n "other": "{0} mos. ago"\n },\n "-1": "last mo"\n },\n "month-narrow": {\n "0": "this mo",\n "1": "next mo",\n "future": {\n "one": "in {0} mo.",\n "other": "in {0} mos."\n },\n "past": {\n "one": "{0} mo. ago",\n "other": "{0} mos. ago"\n },\n "-1": "last mo"\n },\n "week-short": {\n "0": "this wk",\n "1": "next wk",\n "future": {\n "one": "in {0} wk.",\n "other": "in {0} wks."\n },\n "past": {\n "one": "{0} wk. ago",\n "other": "{0} wks. ago"\n },\n "-1": "last wk"\n },\n "week-narrow": {\n "0": "this wk",\n "1": "next wk",\n "future": {\n "one": "in {0} wk.",\n "other": "in {0} wks."\n },\n "past": {\n "one": "{0} wk. ago",\n "other": "{0} wks. ago"\n },\n "-1": "last wk"\n },\n "hour-short": {\n "0": "this hour",\n "future": {\n "one": "in {0} hr.",\n "other": "in {0} hrs."\n },\n "past": {\n "one": "{0} hr. ago",\n "other": "{0} hrs. ago"\n }\n },\n "hour-narrow": {\n "0": "this hour",\n "future": {\n "one": "in {0} hr.",\n "other": "in {0} hrs."\n },\n "past": {\n "one": "{0} hr. ago",\n "other": "{0} hrs. ago"\n }\n },\n "minute-short": {\n "0": "this minute",\n "future": {\n "one": "in {0} min.",\n "other": "in {0} mins."\n },\n "past": {\n "one": "{0} min. ago",\n "other": "{0} mins. ago"\n }\n },\n "minute-narrow": {\n "0": "this minute",\n "future": {\n "one": "in {0} min.",\n "other": "in {0} mins."\n },\n "past": {\n "one": "{0} min. ago",\n "other": "{0} mins. ago"\n }\n },\n "second-short": {\n "0": "now",\n "future": {\n "one": "in {0} sec.",\n "other": "in {0} secs."\n },\n "past": {\n "one": "{0} sec. ago",\n "other": "{0} secs. ago"\n }\n },\n "second-narrow": {\n "0": "now",\n "future": {\n "one": "in {0} sec.",\n "other": "in {0} secs."\n },\n "past": {\n "one": "{0} sec. ago",\n "other": "{0} secs. ago"\n }\n }\n },\n "en-SG": {\n "quarter-short": {\n "0": "this qtr",\n "1": "next qtr",\n "future": {\n "one": "in {0} qtr",\n "other": "in {0} qtrs"\n },\n "past": {\n "one": "{0} qtr ago",\n "other": "{0} qtrs ago"\n },\n "-1": "last qtr"\n },\n "quarter-narrow": {\n "0": "this qtr",\n "1": "next qtr",\n "future": {\n "one": "in {0} qtr",\n "other": "in {0} qtr"\n },\n "past": {\n "one": "{0} qtr ago",\n "other": "{0} qtr ago"\n },\n "-1": "last qtr"\n },\n "month-short": {\n "0": "this mth",\n "1": "next mth",\n "future": {\n "one": "in {0} mth",\n "other": "in {0} mth"\n },\n "past": {\n "one": "{0} mth ago",\n "other": "{0} mth ago"\n },\n "-1": "last mth"\n }\n },\n "en": {\n "nu": ["latn"],\n "year": {\n "0": "this year",\n "1": "next year",\n "future": {\n "one": "in {0} year",\n "other": "in {0} years"\n },\n "past": {\n "one": "{0} year ago",\n "other": "{0} years ago"\n },\n "-1": "last year"\n },\n "year-short": {\n "0": "this yr.",\n "1": "next yr.",\n "future": {\n "one": "in {0} yr.",\n "other": "in {0} yr."\n },\n "past": {\n "one": "{0} yr. ago",\n "other": "{0} yr. ago"\n },\n "-1": "last yr."\n },\n "year-narrow": {\n "0": "this yr.",\n "1": "next yr.",\n "future": {\n "one": "in {0} yr.",\n "other": "in {0} yr."\n },\n "past": {\n "one": "{0} yr. ago",\n "other": "{0} yr. ago"\n },\n "-1": "last yr."\n },\n "quarter": {\n "0": "this quarter",\n "1": "next quarter",\n "future": {\n "one": "in {0} quarter",\n "other": "in {0} quarters"\n },\n "past": {\n "one": "{0} quarter ago",\n "other": "{0} quarters ago"\n },\n "-1": "last quarter"\n },\n "quarter-short": {\n "0": "this qtr.",\n "1": "next qtr.",\n "future": {\n "one": "in {0} qtr.",\n "other": "in {0} qtrs."\n },\n "past": {\n "one": "{0} qtr. ago",\n "other": "{0} qtrs. ago"\n },\n "-1": "last qtr."\n },\n "quarter-narrow": {\n "0": "this qtr.",\n "1": "next qtr.",\n "future": {\n "one": "in {0} qtr.",\n "other": "in {0} qtrs."\n },\n "past": {\n "one": "{0} qtr. ago",\n "other": "{0} qtrs. ago"\n },\n "-1": "last qtr."\n },\n "month": {\n "0": "this month",\n "1": "next month",\n "future": {\n "one": "in {0} month",\n "other": "in {0} months"\n },\n "past": {\n "one": "{0} month ago",\n "other": "{0} months ago"\n },\n "-1": "last month"\n },\n "month-short": {\n "0": "this mo.",\n "1": "next mo.",\n "future": {\n "one": "in {0} mo.",\n "other": "in {0} mo."\n },\n "past": {\n "one": "{0} mo. ago",\n "other": "{0} mo. ago"\n },\n "-1": "last mo."\n },\n "month-narrow": {\n "0": "this mo.",\n "1": "next mo.",\n "future": {\n "one": "in {0} mo.",\n "other": "in {0} mo."\n },\n "past": {\n "one": "{0} mo. ago",\n "other": "{0} mo. ago"\n },\n "-1": "last mo."\n },\n "week": {\n "0": "this week",\n "1": "next week",\n "future": {\n "one": "in {0} week",\n "other": "in {0} weeks"\n },\n "past": {\n "one": "{0} week ago",\n "other": "{0} weeks ago"\n },\n "-1": "last week"\n },\n "week-short": {\n "0": "this wk.",\n "1": "next wk.",\n "future": {\n "one": "in {0} wk.",\n "other": "in {0} wk."\n },\n "past": {\n "one": "{0} wk. ago",\n "other": "{0} wk. ago"\n },\n "-1": "last wk."\n },\n "week-narrow": {\n "0": "this wk.",\n "1": "next wk.",\n "future": {\n "one": "in {0} wk.",\n "other": "in {0} wk."\n },\n "past": {\n "one": "{0} wk. ago",\n "other": "{0} wk. ago"\n },\n "-1": "last wk."\n },\n "day": {\n "0": "today",\n "1": "tomorrow",\n "future": {\n "one": "in {0} day",\n "other": "in {0} days"\n },\n "past": {\n "one": "{0} day ago",\n "other": "{0} days ago"\n },\n "-1": "yesterday"\n },\n "day-short": {\n "0": "today",\n "1": "tomorrow",\n "future": {\n "one": "in {0} day",\n "other": "in {0} days"\n },\n "past": {\n "one": "{0} day ago",\n "other": "{0} days ago"\n },\n "-1": "yesterday"\n },\n "day-narrow": {\n "0": "today",\n "1": "tomorrow",\n "future": {\n "one": "in {0} day",\n "other": "in {0} days"\n },\n "past": {\n "one": "{0} day ago",\n "other": "{0} days ago"\n },\n "-1": "yesterday"\n },\n "hour": {\n "0": "this hour",\n "future": {\n "one": "in {0} hour",\n "other": "in {0} hours"\n },\n "past": {\n "one": "{0} hour ago",\n "other": "{0} hours ago"\n }\n },\n "hour-short": {\n "0": "this hour",\n "future": {\n "one": "in {0} hr.",\n "other": "in {0} hr."\n },\n "past": {\n "one": "{0} hr. ago",\n "other": "{0} hr. ago"\n }\n },\n "hour-narrow": {\n "0": "this hour",\n "future": {\n "one": "in {0} hr.",\n "other": "in {0} hr."\n },\n "past": {\n "one": "{0} hr. ago",\n "other": "{0} hr. ago"\n }\n },\n "minute": {\n "0": "this minute",\n "future": {\n "one": "in {0} minute",\n "other": "in {0} minutes"\n },\n "past": {\n "one": "{0} minute ago",\n "other": "{0} minutes ago"\n }\n },\n "minute-short": {\n "0": "this minute",\n "future": {\n "one": "in {0} min.",\n "other": "in {0} min."\n },\n "past": {\n "one": "{0} min. ago",\n "other": "{0} min. ago"\n }\n },\n "minute-narrow": {\n "0": "this minute",\n "future": {\n "one": "in {0} min.",\n "other": "in {0} min."\n },\n "past": {\n "one": "{0} min. ago",\n "other": "{0} min. ago"\n }\n },\n "second": {\n "0": "now",\n "future": {\n "one": "in {0} second",\n "other": "in {0} seconds"\n },\n "past": {\n "one": "{0} second ago",\n "other": "{0} seconds ago"\n }\n },\n "second-short": {\n "0": "now",\n "future": {\n "one": "in {0} sec.",\n "other": "in {0} sec."\n },\n "past": {\n "one": "{0} sec. ago",\n "other": "{0} sec. ago"\n }\n },\n "second-narrow": {\n "0": "now",\n "future": {\n "one": "in {0} sec.",\n "other": "in {0} sec."\n },\n "past": {\n "one": "{0} sec. ago",\n "other": "{0} sec. ago"\n }\n }\n }\n },\n "availableLocales": ["en-001", "en-150", "en-AE", "en-AG", "en-AI", "en-AS", "en-AT", "en-AU", "en-BB", "en-BE", "en-BI", "en-BM", "en-BS", "en-BW", "en-BZ", "en-CA", "en-CC", "en-CH", "en-CK", "en-CM", "en-CX", "en-CY", "en-DE", "en-DG", "en-DK", "en-DM", "en-ER", "en-FI", "en-FJ", "en-FK", "en-FM", "en-GB", "en-GD", "en-GG", "en-GH", "en-GI", "en-GM", "en-GU", "en-GY", "en-HK", "en-IE", "en-IL", "en-IM", "en-IN", "en-IO", "en-JE", "en-JM", "en-KE", "en-KI", "en-KN", "en-KY", "en-LC", "en-LR", "en-LS", "en-MG", "en-MH", "en-MO", "en-MP", "en-MS", "en-MT", "en-MU", "en-MW", "en-MY", "en-NA", "en-NF", "en-NG", "en-NL", "en-NR", "en-NU", "en-NZ", "en-PG", "en-PH", "en-PK", "en-PN", "en-PR", "en-PW", "en-RW", "en-SB", "en-SC", "en-SD", "en-SE", "en-SG", "en-SH", "en-SI", "en-SL", "en-SS", "en-SX", "en-SZ", "en-TC", "en-TK", "en-TO", "en-TT", "en-TV", "en-TZ", "en-UG", "en-UM", "en-US-POSIX", "en-US", "en-VC", "en-VG", "en-VI", "en-VU", "en-WS", "en-ZA", "en-ZM", "en-ZW", "en"],\n "aliases": {},\n "parentLocales": {\n "en-150": "en-001",\n "en-AG": "en-001",\n "en-AI": "en-001",\n "en-AU": "en-001",\n "en-BB": "en-001",\n "en-BM": "en-001",\n "en-BS": "en-001",\n "en-BW": "en-001",\n "en-BZ": "en-001",\n "en-CA": "en-001",\n "en-CC": "en-001",\n "en-CK": "en-001",\n "en-CM": "en-001",\n "en-CX": "en-001",\n "en-CY": "en-001",\n "en-DG": "en-001",\n "en-DM": "en-001",\n "en-ER": "en-001",\n "en-FJ": "en-001",\n "en-FK": "en-001",\n "en-FM": "en-001",\n "en-GB": "en-001",\n "en-GD": "en-001",\n "en-GG": "en-001",\n "en-GH": "en-001",\n "en-GI": "en-001",\n "en-GM": "en-001",\n "en-GY": "en-001",\n "en-HK": "en-001",\n "en-IE": "en-001",\n "en-IL": "en-001",\n "en-IM": "en-001",\n "en-IN": "en-001",\n "en-IO": "en-001",\n "en-JE": "en-001",\n "en-JM": "en-001",\n "en-KE": "en-001",\n "en-KI": "en-001",\n "en-KN": "en-001",\n "en-KY": "en-001",\n "en-LC": "en-001",\n "en-LR": "en-001",\n "en-LS": "en-001",\n "en-MG": "en-001",\n "en-MO": "en-001",\n "en-MS": "en-001",\n "en-MT": "en-001",\n "en-MU": "en-001",\n "en-MW": "en-001",\n "en-MY": "en-001",\n "en-NA": "en-001",\n "en-NF": "en-001",\n "en-NG": "en-001",\n "en-NR": "en-001",\n "en-NU": "en-001",\n "en-NZ": "en-001",\n "en-PG": "en-001",\n "en-PH": "en-001",\n "en-PK": "en-001",\n "en-PN": "en-001",\n "en-PW": "en-001",\n "en-RW": "en-001",\n "en-SB": "en-001",\n "en-SC": "en-001",\n "en-SD": "en-001",\n "en-SG": "en-001",\n "en-SH": "en-001",\n "en-SL": "en-001",\n "en-SS": "en-001",\n "en-SX": "en-001",\n "en-SZ": "en-001",\n "en-TC": "en-001",\n "en-TK": "en-001",\n "en-TO": "en-001",\n "en-TT": "en-001",\n "en-TV": "en-001",\n "en-TZ": "en-001",\n "en-UG": "en-001",\n "en-VC": "en-001",\n "en-VG": "en-001",\n "en-VU": "en-001",\n "en-WS": "en-001",\n "en-ZA": "en-001",\n "en-ZM": "en-001",\n "en-ZW": "en-001",\n "en-AT": "en-150",\n "en-BE": "en-150",\n "en-CH": "en-150",\n "en-DE": "en-150",\n "en-DK": "en-150",\n "en-FI": "en-150",\n "en-NL": "en-150",\n "en-SE": "en-150",\n "en-SI": "en-150"\n }\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AZm9ybWF0anMvaW50bC1yZWxhdGl2ZXRpbWVmb3JtYXQvZGlzdC9sb2NhbGUtZGF0YS9lbi5qcz8zZTMyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsMEJBQTBCLEVBQUU7QUFDNUIsV0FBVztBQUNYO0FBQ0EscUJBQXFCLEVBQUU7QUFDdkIsdUJBQXVCLEVBQUU7QUFDekIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsMEJBQTBCLEVBQUU7QUFDNUIsV0FBVztBQUNYO0FBQ0EscUJBQXFCLEVBQUU7QUFDdkIsdUJBQXVCLEVBQUU7QUFDekIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsMEJBQTBCLEVBQUU7QUFDNUIsV0FBVztBQUNYO0FBQ0EscUJBQXFCLEVBQUU7QUFDdkIsdUJBQXVCLEVBQUU7QUFDekIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsMEJBQTBCLEVBQUU7QUFDNUIsV0FBVztBQUNYO0FBQ0EscUJBQXFCLEVBQUU7QUFDdkIsdUJBQXVCLEVBQUU7QUFDekIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsMEJBQTBCLEVBQUU7QUFDNUIsV0FBVztBQUNYO0FBQ0EscUJBQXFCLEVBQUU7QUFDdkIsdUJBQXVCLEVBQUU7QUFDekIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsMEJBQTBCLEVBQUU7QUFDNUIsV0FBVztBQUNYO0FBQ0EscUJBQXFCLEVBQUU7QUFDdkIsdUJBQXVCLEVBQUU7QUFDekIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsMEJBQTBCLEVBQUU7QUFDNUIsV0FBVztBQUNYO0FBQ0EscUJBQXFCLEVBQUU7QUFDdkIsdUJBQXVCLEVBQUU7QUFDekIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsMEJBQTBCLEVBQUU7QUFDNUIsV0FBVztBQUNYO0FBQ0EscUJBQXFCLEVBQUU7QUFDdkIsdUJBQXVCLEVBQUU7QUFDekIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsRUFBRTtBQUMxQiwwQkFBMEIsRUFBRTtBQUM1QixXQUFXO0FBQ1g7QUFDQSxxQkFBcUIsRUFBRTtBQUN2Qix1QkFBdUIsRUFBRTtBQUN6QjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsRUFBRTtBQUMxQiwwQkFBMEIsRUFBRTtBQUM1QixXQUFXO0FBQ1g7QUFDQSxxQkFBcUIsRUFBRTtBQUN2Qix1QkFBdUIsRUFBRTtBQUN6QjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsRUFBRTtBQUMxQiwwQkFBMEIsRUFBRTtBQUM1QixXQUFXO0FBQ1g7QUFDQSxxQkFBcUIsRUFBRTtBQUN2Qix1QkFBdUIsRUFBRTtBQUN6QjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsRUFBRTtBQUMxQiwwQkFBMEIsRUFBRTtBQUM1QixXQUFXO0FBQ1g7QUFDQSxxQkFBcUIsRUFBRTtBQUN2Qix1QkFBdUIsRUFBRTtBQUN6QjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsRUFBRTtBQUMxQiwwQkFBMEIsRUFBRTtBQUM1QixXQUFXO0FBQ1g7QUFDQSxxQkFBcUIsRUFBRTtBQUN2Qix1QkFBdUIsRUFBRTtBQUN6QjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsRUFBRTtBQUMxQiwwQkFBMEIsRUFBRTtBQUM1QixXQUFXO0FBQ1g7QUFDQSxxQkFBcUIsRUFBRTtBQUN2Qix1QkFBdUIsRUFBRTtBQUN6QjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsRUFBRTtBQUMxQiwwQkFBMEIsRUFBRTtBQUM1QixXQUFXO0FBQ1g7QUFDQSxxQkFBcUIsRUFBRTtBQUN2Qix1QkFBdUIsRUFBRTtBQUN6QixXQUFXO0FBQ1g7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsRUFBRTtBQUMxQiwwQkFBMEIsRUFBRTtBQUM1QixXQUFXO0FBQ1g7QUFDQSxxQkFBcUIsRUFBRTtBQUN2Qix1QkFBdUIsRUFBRTtBQUN6QixXQUFXO0FBQ1g7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsRUFBRTtBQUMxQiwwQkFBMEIsRUFBRTtBQUM1QixXQUFXO0FBQ1g7QUFDQSxxQkFBcUIsRUFBRTtBQUN2Qix1QkFBdUIsRUFBRTtBQUN6QixXQUFXO0FBQ1g7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsRUFBRTtBQUMxQiwwQkFBMEIsRUFBRTtBQUM1QixXQUFXO0FBQ1g7QUFDQSx3QkFBd0IsRUFBRTtBQUMxQix1QkFBdUIsRUFBRTtBQUN6QixXQUFXO0FBQ1g7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsRUFBRTtBQUMxQiwwQkFBMEIsRUFBRTtBQUM1QixXQUFXO0FBQ1g7QUFDQSxxQkFBcUIsRUFBRTtBQUN2Qix1QkFBdUIsRUFBRTtBQUN6QixXQUFXO0FBQ1g7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsRUFBRTtBQUMxQiwwQkFBMEIsRUFBRTtBQUM1QixXQUFXO0FBQ1g7QUFDQSxxQkFBcUIsRUFBRTtBQUN2Qix1QkFBdUIsRUFBRTtBQUN6QixXQUFXO0FBQ1g7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsRUFBRTtBQUMxQiwwQkFBMEIsRUFBRTtBQUM1QixXQUFXO0FBQ1g7QUFDQSxxQkFBcUIsRUFBRTtBQUN2Qix1QkFBdUIsRUFBRTtBQUN6QixXQUFXO0FBQ1g7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsRUFBRTtBQUMxQiwwQkFBMEIsRUFBRTtBQUM1QixXQUFXO0FBQ1g7QUFDQSxxQkFBcUIsRUFBRTtBQUN2Qix1QkFBdUIsRUFBRTtBQUN6QixXQUFXO0FBQ1g7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsMEJBQTBCLEVBQUU7QUFDNUIsV0FBVztBQUNYO0FBQ0EscUJBQXFCLEVBQUU7QUFDdkIsdUJBQXVCLEVBQUU7QUFDekI7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsMEJBQTBCLEVBQUU7QUFDNUIsV0FBVztBQUNYO0FBQ0EscUJBQXFCLEVBQUU7QUFDdkIsdUJBQXVCLEVBQUU7QUFDekI7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsMEJBQTBCLEVBQUU7QUFDNUIsV0FBVztBQUNYO0FBQ0EscUJBQXFCLEVBQUU7QUFDdkIsdUJBQXVCLEVBQUU7QUFDekI7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsMEJBQTBCLEVBQUU7QUFDNUIsV0FBVztBQUNYO0FBQ0EscUJBQXFCLEVBQUU7QUFDdkIsdUJBQXVCLEVBQUU7QUFDekI7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsMEJBQTBCLEVBQUU7QUFDNUIsV0FBVztBQUNYO0FBQ0EscUJBQXFCLEVBQUU7QUFDdkIsdUJBQXVCLEVBQUU7QUFDekI7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsMEJBQTBCLEVBQUU7QUFDNUIsV0FBVztBQUNYO0FBQ0EscUJBQXFCLEVBQUU7QUFDdkIsdUJBQXVCLEVBQUU7QUFDekI7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsMEJBQTBCLEVBQUU7QUFDNUIsV0FBVztBQUNYO0FBQ0EscUJBQXFCLEVBQUU7QUFDdkIsdUJBQXVCLEVBQUU7QUFDekIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsMEJBQTBCLEVBQUU7QUFDNUIsV0FBVztBQUNYO0FBQ0EscUJBQXFCLEVBQUU7QUFDdkIsdUJBQXVCLEVBQUU7QUFDekIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsMEJBQTBCLEVBQUU7QUFDNUIsV0FBVztBQUNYO0FBQ0EscUJBQXFCLEVBQUU7QUFDdkIsdUJBQXVCLEVBQUU7QUFDekIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsMEJBQTBCLEVBQUU7QUFDNUIsV0FBVztBQUNYO0FBQ0EscUJBQXFCLEVBQUU7QUFDdkIsdUJBQXVCLEVBQUU7QUFDekIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsMEJBQTBCLEVBQUU7QUFDNUIsV0FBVztBQUNYO0FBQ0EscUJBQXFCLEVBQUU7QUFDdkIsdUJBQXVCLEVBQUU7QUFDekIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsMEJBQTBCLEVBQUU7QUFDNUIsV0FBVztBQUNYO0FBQ0EscUJBQXFCLEVBQUU7QUFDdkIsdUJBQXVCLEVBQUU7QUFDekIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsMEJBQTBCLEVBQUU7QUFDNUIsV0FBVztBQUNYO0FBQ0EscUJBQXFCLEVBQUU7QUFDdkIsdUJBQXVCLEVBQUU7QUFDekIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsMEJBQTBCLEVBQUU7QUFDNUIsV0FBVztBQUNYO0FBQ0EscUJBQXFCLEVBQUU7QUFDdkIsdUJBQXVCLEVBQUU7QUFDekIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHVCQUF1QixFQUFFO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsRUFBRTtBQUMxQiwwQkFBMEIsRUFBRTtBQUM1QixXQUFXO0FBQ1g7QUFDQSxxQkFBcUIsRUFBRTtBQUN2Qix1QkFBdUIsRUFBRTtBQUN6QjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsRUFBRTtBQUMxQiwwQkFBMEIsRUFBRTtBQUM1QixXQUFXO0FBQ1g7QUFDQSxxQkFBcUIsRUFBRTtBQUN2Qix1QkFBdUIsRUFBRTtBQUN6QjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsRUFBRTtBQUMxQiwwQkFBMEIsRUFBRTtBQUM1QixXQUFXO0FBQ1g7QUFDQSxxQkFBcUIsRUFBRTtBQUN2Qix1QkFBdUIsRUFBRTtBQUN6QjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsRUFBRTtBQUMxQiwwQkFBMEIsRUFBRTtBQUM1QixXQUFXO0FBQ1g7QUFDQSxxQkFBcUIsRUFBRTtBQUN2Qix1QkFBdUIsRUFBRTtBQUN6QjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsRUFBRTtBQUMxQiwwQkFBMEIsRUFBRTtBQUM1QixXQUFXO0FBQ1g7QUFDQSxxQkFBcUIsRUFBRTtBQUN2Qix1QkFBdUIsRUFBRTtBQUN6QjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsRUFBRTtBQUMxQiwwQkFBMEIsRUFBRTtBQUM1QixXQUFXO0FBQ1g7QUFDQSxxQkFBcUIsRUFBRTtBQUN2Qix1QkFBdUIsRUFBRTtBQUN6QjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsRUFBRTtBQUMxQiwwQkFBMEIsRUFBRTtBQUM1QixXQUFXO0FBQ1g7QUFDQSxxQkFBcUIsRUFBRTtBQUN2Qix1QkFBdUIsRUFBRTtBQUN6QjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsRUFBRTtBQUMxQiwwQkFBMEIsRUFBRTtBQUM1QixXQUFXO0FBQ1g7QUFDQSxxQkFBcUIsRUFBRTtBQUN2Qix1QkFBdUIsRUFBRTtBQUN6QjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsRUFBRTtBQUMxQiwwQkFBMEIsRUFBRTtBQUM1QixXQUFXO0FBQ1g7QUFDQSxxQkFBcUIsRUFBRTtBQUN2Qix1QkFBdUIsRUFBRTtBQUN6QjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIIiwiZmlsZSI6IjgwNzkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBAZ2VuZXJhdGVkICovXG4vLyBwcmV0dGllci1pZ25vcmVcbmlmIChJbnRsLlJlbGF0aXZlVGltZUZvcm1hdCAmJiB0eXBlb2YgSW50bC5SZWxhdGl2ZVRpbWVGb3JtYXQuX19hZGRMb2NhbGVEYXRhID09PSAnZnVuY3Rpb24nKSB7XG4gIEludGwuUmVsYXRpdmVUaW1lRm9ybWF0Ll9fYWRkTG9jYWxlRGF0YSh7XG4gICAgXCJkYXRhXCI6IHtcbiAgICAgIFwiZW4tMDAxXCI6IHtcbiAgICAgICAgXCJ5ZWFyLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIHlyXCIsXG4gICAgICAgICAgXCIxXCI6IFwibmV4dCB5clwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IHlyXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaW4gezB9IHlyXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSB5ciBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0geXIgYWdvXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJsYXN0IHlyXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ5ZWFyLW5hcnJvd1wiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyB5clwiLFxuICAgICAgICAgIFwiMVwiOiBcIm5leHQgeXJcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSB5clwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSB5clwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0geXIgYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IHlyIGFnb1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwibGFzdCB5clwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicXVhcnRlci1zaG9ydFwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyBxdHIuXCIsXG4gICAgICAgICAgXCIxXCI6IFwibmV4dCBxdHIuXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0gcXRyXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaW4gezB9IHF0clwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0gcXRyIGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSBxdHIgYWdvXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJsYXN0IHF0ci5cIlxuICAgICAgICB9LFxuICAgICAgICBcInF1YXJ0ZXItbmFycm93XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIHF0ci5cIixcbiAgICAgICAgICBcIjFcIjogXCJuZXh0IHF0ci5cIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSBxdHJcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJpbiB7MH0gcXRyXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSBxdHIgYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IHF0ciBhZ29cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImxhc3QgcXRyLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibW9udGgtc2hvcnRcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgbW9cIixcbiAgICAgICAgICBcIjFcIjogXCJuZXh0IG1vXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0gbW9cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJpbiB7MH0gbW9cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiezB9IG1vIGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSBtbyBhZ29cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImxhc3QgbW9cIlxuICAgICAgICB9LFxuICAgICAgICBcIm1vbnRoLW5hcnJvd1wiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyBtb1wiLFxuICAgICAgICAgIFwiMVwiOiBcIm5leHQgbW9cIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSBtb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSBtb1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0gbW8gYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IG1vIGFnb1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwibGFzdCBtb1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwid2Vlay1zaG9ydFwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyB3a1wiLFxuICAgICAgICAgIFwiMVwiOiBcIm5leHQgd2tcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSB3a1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSB3a1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0gd2sgYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IHdrIGFnb1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwibGFzdCB3a1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwid2Vlay1uYXJyb3dcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgd2tcIixcbiAgICAgICAgICBcIjFcIjogXCJuZXh0IHdrXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0gd2tcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJpbiB7MH0gd2tcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiezB9IHdrIGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSB3ayBhZ29cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImxhc3Qgd2tcIlxuICAgICAgICB9LFxuICAgICAgICBcImhvdXItc2hvcnRcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgaG91clwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IGhyXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaW4gezB9IGhyXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSBociBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0gaHIgYWdvXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiaG91ci1uYXJyb3dcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgaG91clwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IGhyXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaW4gezB9IGhyXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSBociBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0gaHIgYWdvXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwibWludXRlLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIG1pbnV0ZVwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IG1pblwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSBtaW5cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiezB9IG1pbiBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0gbWluIGFnb1wiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcIm1pbnV0ZS1uYXJyb3dcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgbWludXRlXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0gbWluXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaW4gezB9IG1pblwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0gbWluIGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSBtaW4gYWdvXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwic2Vjb25kLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJub3dcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSBzZWNcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJpbiB7MH0gc2VjXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSBzZWMgYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IHNlYyBhZ29cIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJzZWNvbmQtbmFycm93XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJub3dcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSBzZWNcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJpbiB7MH0gc2VjXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSBzZWMgYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IHNlYyBhZ29cIlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwiZW4tMTUwXCI6IHtcbiAgICAgICAgXCJ5ZWFyLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIHlyXCIsXG4gICAgICAgICAgXCIxXCI6IFwibmV4dCB5clwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IHlyXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaW4gezB9IHlyXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSB5ciBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0geXIgYWdvXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJsYXN0IHlyXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ5ZWFyLW5hcnJvd1wiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyB5clwiLFxuICAgICAgICAgIFwiMVwiOiBcIm5leHQgeXJcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSB5clwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSB5clwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0geXIgYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IHlyIGFnb1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwibGFzdCB5clwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicXVhcnRlci1zaG9ydFwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyBxdHIuXCIsXG4gICAgICAgICAgXCIxXCI6IFwibmV4dCBxdHIuXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0gcXRyXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaW4gezB9IHF0clwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0gcXRyIGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSBxdHIgYWdvXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJsYXN0IHF0ci5cIlxuICAgICAgICB9LFxuICAgICAgICBcInF1YXJ0ZXItbmFycm93XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIHF0ci5cIixcbiAgICAgICAgICBcIjFcIjogXCJuZXh0IHF0ci5cIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSBxdHJcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJpbiB7MH0gcXRyXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSBxdHIgYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IHF0ciBhZ29cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImxhc3QgcXRyLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibW9udGgtc2hvcnRcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgbW9cIixcbiAgICAgICAgICBcIjFcIjogXCJuZXh0IG1vXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0gbW9cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJpbiB7MH0gbW9cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiezB9IG1vIGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSBtbyBhZ29cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImxhc3QgbW9cIlxuICAgICAgICB9LFxuICAgICAgICBcIm1vbnRoLW5hcnJvd1wiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyBtb1wiLFxuICAgICAgICAgIFwiMVwiOiBcIm5leHQgbW9cIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSBtb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSBtb1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0gbW8gYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IG1vIGFnb1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwibGFzdCBtb1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwid2Vlay1zaG9ydFwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyB3a1wiLFxuICAgICAgICAgIFwiMVwiOiBcIm5leHQgd2tcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSB3a1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSB3a1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0gd2sgYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IHdrIGFnb1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwibGFzdCB3a1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwid2Vlay1uYXJyb3dcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgd2tcIixcbiAgICAgICAgICBcIjFcIjogXCJuZXh0IHdrXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0gd2tcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJpbiB7MH0gd2tcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiezB9IHdrIGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSB3ayBhZ29cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImxhc3Qgd2tcIlxuICAgICAgICB9LFxuICAgICAgICBcImhvdXItc2hvcnRcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgaG91clwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IGhyXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaW4gezB9IGhyXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSBociBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0gaHIgYWdvXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiaG91ci1uYXJyb3dcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgaG91clwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IGhyXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaW4gezB9IGhyXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSBociBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0gaHIgYWdvXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwibWludXRlLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIG1pbnV0ZVwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IG1pblwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSBtaW5cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiezB9IG1pbiBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0gbWluIGFnb1wiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcIm1pbnV0ZS1uYXJyb3dcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgbWludXRlXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0gbWluXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaW4gezB9IG1pblwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0gbWluIGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSBtaW4gYWdvXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwic2Vjb25kLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJub3dcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSBzZWNcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJpbiB7MH0gc2VjXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSBzZWMgYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IHNlYyBhZ29cIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJzZWNvbmQtbmFycm93XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJub3dcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSBzZWNcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJpbiB7MH0gc2VjXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSBzZWMgYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IHNlYyBhZ29cIlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwiZW4tQVVcIjoge1xuICAgICAgICBcInllYXItc2hvcnRcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgeXJcIixcbiAgICAgICAgICBcIjFcIjogXCJuZXh0IHlyXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0geXJcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJpbiB7MH0geXJzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSB5ciBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0geXJzIGFnb1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwibGFzdCB5clwiXG4gICAgICAgIH0sXG4gICAgICAgIFwieWVhci1uYXJyb3dcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgeXJcIixcbiAgICAgICAgICBcIjFcIjogXCJuZXh0IHlyXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0geXJcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJpbiB7MH0geXJzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSB5ciBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0geXJzIGFnb1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwibGFzdCB5clwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicXVhcnRlci1zaG9ydFwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyBxdHIuXCIsXG4gICAgICAgICAgXCIxXCI6IFwibmV4dCBxdHIuXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0gcXRyXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaW4gezB9IHF0cnNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiezB9IHF0ciBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0gcXRycyBhZ29cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImxhc3QgcXRyLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicXVhcnRlci1uYXJyb3dcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgcXRyLlwiLFxuICAgICAgICAgIFwiMVwiOiBcIm5leHQgcXRyLlwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IHF0clwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSBxdHJzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSBxdHIgYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IHF0cnMgYWdvXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJsYXN0IHF0ci5cIlxuICAgICAgICB9LFxuICAgICAgICBcIm1vbnRoLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIG1vXCIsXG4gICAgICAgICAgXCIxXCI6IFwibmV4dCBtb1wiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IG1vLlwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSBtby5cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiezB9IG1vLiBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0gbW8uIGFnb1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwibGFzdCBtb1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwibW9udGgtbmFycm93XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIG1vXCIsXG4gICAgICAgICAgXCIxXCI6IFwibmV4dCBtb1wiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IG1vLlwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSBtby5cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiezB9IG1vLiBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0gbW8uIGFnb1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwibGFzdCBtb1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwid2Vlay1zaG9ydFwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyB3a1wiLFxuICAgICAgICAgIFwiMVwiOiBcIm5leHQgd2tcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSB3a1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSB3a3NcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiezB9IHdrIGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSB3a3MgYWdvXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJsYXN0IHdrXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ3ZWVrLW5hcnJvd1wiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyB3a1wiLFxuICAgICAgICAgIFwiMVwiOiBcIm5leHQgd2tcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSB3a1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSB3a3NcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiezB9IHdrIGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSB3a3MgYWdvXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJsYXN0IHdrXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJob3VyLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIGhvdXJcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSBoclwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSBocnNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiezB9IGhyIGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSBocnMgYWdvXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiaG91ci1uYXJyb3dcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgaG91clwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IGhyXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaW4gezB9IGhyc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0gaHIgYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IGhycyBhZ29cIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJtaW51dGUtc2hvcnRcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgbWludXRlXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0gbWluLlwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSBtaW5zXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSBtaW4uIGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSBtaW5zIGFnb1wiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcIm1pbnV0ZS1uYXJyb3dcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgbWludXRlXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0gbWluLlwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSBtaW5zXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSBtaW4uIGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSBtaW5zIGFnb1wiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcInNlY29uZC1zaG9ydFwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwibm93XCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0gc2VjLlwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSBzZWNzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSBzZWMuIGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSBzZWNzIGFnb1wiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcInNlY29uZC1uYXJyb3dcIjoge1xuICAgICAgICAgIFwiMFwiOiBcIm5vd1wiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IHNlYy5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJpbiB7MH0gc2Vjc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0gc2VjLiBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0gc2VjcyBhZ29cIlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwiZW4tQ0FcIjoge1xuICAgICAgICBcInllYXItc2hvcnRcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgeXJcIixcbiAgICAgICAgICBcIjFcIjogXCJuZXh0IHlyXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0geXIuXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaW4gezB9IHlycy5cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiezB9IHlyLiBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0geXJzLiBhZ29cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImxhc3QgeXJcIlxuICAgICAgICB9LFxuICAgICAgICBcInllYXItbmFycm93XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIHlyXCIsXG4gICAgICAgICAgXCIxXCI6IFwibmV4dCB5clwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IHlyLlwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSB5cnMuXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSB5ci4gYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IHlycy4gYWdvXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJsYXN0IHlyXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJxdWFydGVyLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIHF0ci5cIixcbiAgICAgICAgICBcIjFcIjogXCJuZXh0IHF0ci5cIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSBxdHIuXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaW4gezB9IHF0cnMuXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSBxdHIuIGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSBxdHJzLiBhZ29cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImxhc3QgcXRyLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicXVhcnRlci1uYXJyb3dcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgcXRyLlwiLFxuICAgICAgICAgIFwiMVwiOiBcIm5leHQgcXRyLlwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IHF0ci5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJpbiB7MH0gcXRycy5cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiezB9IHF0ci4gYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IHF0cnMuIGFnb1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwibGFzdCBxdHIuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtb250aC1zaG9ydFwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyBtb1wiLFxuICAgICAgICAgIFwiMVwiOiBcIm5leHQgbW9cIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSBtby5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJpbiB7MH0gbW9zLlwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0gbW8uIGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSBtb3MuIGFnb1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwibGFzdCBtb1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwibW9udGgtbmFycm93XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIG1vXCIsXG4gICAgICAgICAgXCIxXCI6IFwibmV4dCBtb1wiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IG1vLlwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSBtb3MuXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSBtby4gYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IG1vcy4gYWdvXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJsYXN0IG1vXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ3ZWVrLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIHdrXCIsXG4gICAgICAgICAgXCIxXCI6IFwibmV4dCB3a1wiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IHdrLlwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSB3a3MuXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSB3ay4gYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IHdrcy4gYWdvXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJsYXN0IHdrXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ3ZWVrLW5hcnJvd1wiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyB3a1wiLFxuICAgICAgICAgIFwiMVwiOiBcIm5leHQgd2tcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSB3ay5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJpbiB7MH0gd2tzLlwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0gd2suIGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSB3a3MuIGFnb1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwibGFzdCB3a1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiaG91ci1zaG9ydFwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyBob3VyXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0gaHIuXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaW4gezB9IGhycy5cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiezB9IGhyLiBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0gaHJzLiBhZ29cIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJob3VyLW5hcnJvd1wiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyBob3VyXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0gaHIuXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaW4gezB9IGhycy5cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiezB9IGhyLiBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0gaHJzLiBhZ29cIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJtaW51dGUtc2hvcnRcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgbWludXRlXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0gbWluLlwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSBtaW5zLlwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0gbWluLiBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0gbWlucy4gYWdvXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwibWludXRlLW5hcnJvd1wiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyBtaW51dGVcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSBtaW4uXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaW4gezB9IG1pbnMuXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSBtaW4uIGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSBtaW5zLiBhZ29cIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJzZWNvbmQtc2hvcnRcIjoge1xuICAgICAgICAgIFwiMFwiOiBcIm5vd1wiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IHNlYy5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJpbiB7MH0gc2Vjcy5cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiezB9IHNlYy4gYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IHNlY3MuIGFnb1wiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcInNlY29uZC1uYXJyb3dcIjoge1xuICAgICAgICAgIFwiMFwiOiBcIm5vd1wiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IHNlYy5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJpbiB7MH0gc2Vjcy5cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiezB9IHNlYy4gYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IHNlY3MuIGFnb1wiXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJlbi1TR1wiOiB7XG4gICAgICAgIFwicXVhcnRlci1zaG9ydFwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyBxdHJcIixcbiAgICAgICAgICBcIjFcIjogXCJuZXh0IHF0clwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IHF0clwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSBxdHJzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSBxdHIgYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IHF0cnMgYWdvXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJsYXN0IHF0clwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicXVhcnRlci1uYXJyb3dcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgcXRyXCIsXG4gICAgICAgICAgXCIxXCI6IFwibmV4dCBxdHJcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSBxdHJcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJpbiB7MH0gcXRyXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSBxdHIgYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IHF0ciBhZ29cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImxhc3QgcXRyXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtb250aC1zaG9ydFwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyBtdGhcIixcbiAgICAgICAgICBcIjFcIjogXCJuZXh0IG10aFwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IG10aFwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSBtdGhcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiezB9IG10aCBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0gbXRoIGFnb1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwibGFzdCBtdGhcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJlblwiOiB7XG4gICAgICAgIFwibnVcIjogW1wibGF0blwiXSxcbiAgICAgICAgXCJ5ZWFyXCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIHllYXJcIixcbiAgICAgICAgICBcIjFcIjogXCJuZXh0IHllYXJcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSB5ZWFyXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaW4gezB9IHllYXJzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSB5ZWFyIGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSB5ZWFycyBhZ29cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImxhc3QgeWVhclwiXG4gICAgICAgIH0sXG4gICAgICAgIFwieWVhci1zaG9ydFwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyB5ci5cIixcbiAgICAgICAgICBcIjFcIjogXCJuZXh0IHlyLlwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IHlyLlwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSB5ci5cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiezB9IHlyLiBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0geXIuIGFnb1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwibGFzdCB5ci5cIlxuICAgICAgICB9LFxuICAgICAgICBcInllYXItbmFycm93XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIHlyLlwiLFxuICAgICAgICAgIFwiMVwiOiBcIm5leHQgeXIuXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0geXIuXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaW4gezB9IHlyLlwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0geXIuIGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSB5ci4gYWdvXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJsYXN0IHlyLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicXVhcnRlclwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyBxdWFydGVyXCIsXG4gICAgICAgICAgXCIxXCI6IFwibmV4dCBxdWFydGVyXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0gcXVhcnRlclwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSBxdWFydGVyc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0gcXVhcnRlciBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0gcXVhcnRlcnMgYWdvXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJsYXN0IHF1YXJ0ZXJcIlxuICAgICAgICB9LFxuICAgICAgICBcInF1YXJ0ZXItc2hvcnRcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgcXRyLlwiLFxuICAgICAgICAgIFwiMVwiOiBcIm5leHQgcXRyLlwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IHF0ci5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJpbiB7MH0gcXRycy5cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiezB9IHF0ci4gYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IHF0cnMuIGFnb1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwibGFzdCBxdHIuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJxdWFydGVyLW5hcnJvd1wiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyBxdHIuXCIsXG4gICAgICAgICAgXCIxXCI6IFwibmV4dCBxdHIuXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0gcXRyLlwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSBxdHJzLlwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0gcXRyLiBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0gcXRycy4gYWdvXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJsYXN0IHF0ci5cIlxuICAgICAgICB9LFxuICAgICAgICBcIm1vbnRoXCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIG1vbnRoXCIsXG4gICAgICAgICAgXCIxXCI6IFwibmV4dCBtb250aFwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IG1vbnRoXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaW4gezB9IG1vbnRoc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0gbW9udGggYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IG1vbnRocyBhZ29cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImxhc3QgbW9udGhcIlxuICAgICAgICB9LFxuICAgICAgICBcIm1vbnRoLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIG1vLlwiLFxuICAgICAgICAgIFwiMVwiOiBcIm5leHQgbW8uXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0gbW8uXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaW4gezB9IG1vLlwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0gbW8uIGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSBtby4gYWdvXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJsYXN0IG1vLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibW9udGgtbmFycm93XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIG1vLlwiLFxuICAgICAgICAgIFwiMVwiOiBcIm5leHQgbW8uXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0gbW8uXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaW4gezB9IG1vLlwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0gbW8uIGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSBtby4gYWdvXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJsYXN0IG1vLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwid2Vla1wiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyB3ZWVrXCIsXG4gICAgICAgICAgXCIxXCI6IFwibmV4dCB3ZWVrXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0gd2Vla1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSB3ZWVrc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0gd2VlayBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0gd2Vla3MgYWdvXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJsYXN0IHdlZWtcIlxuICAgICAgICB9LFxuICAgICAgICBcIndlZWstc2hvcnRcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgd2suXCIsXG4gICAgICAgICAgXCIxXCI6IFwibmV4dCB3ay5cIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSB3ay5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJpbiB7MH0gd2suXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSB3ay4gYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IHdrLiBhZ29cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImxhc3Qgd2suXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ3ZWVrLW5hcnJvd1wiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyB3ay5cIixcbiAgICAgICAgICBcIjFcIjogXCJuZXh0IHdrLlwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IHdrLlwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSB3ay5cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiezB9IHdrLiBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0gd2suIGFnb1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwibGFzdCB3ay5cIlxuICAgICAgICB9LFxuICAgICAgICBcImRheVwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidG9kYXlcIixcbiAgICAgICAgICBcIjFcIjogXCJ0b21vcnJvd1wiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IGRheVwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSBkYXlzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSBkYXkgYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IGRheXMgYWdvXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJ5ZXN0ZXJkYXlcIlxuICAgICAgICB9LFxuICAgICAgICBcImRheS1zaG9ydFwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidG9kYXlcIixcbiAgICAgICAgICBcIjFcIjogXCJ0b21vcnJvd1wiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IGRheVwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSBkYXlzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSBkYXkgYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IGRheXMgYWdvXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJ5ZXN0ZXJkYXlcIlxuICAgICAgICB9LFxuICAgICAgICBcImRheS1uYXJyb3dcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRvZGF5XCIsXG4gICAgICAgICAgXCIxXCI6IFwidG9tb3Jyb3dcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSBkYXlcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJpbiB7MH0gZGF5c1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0gZGF5IGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSBkYXlzIGFnb1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwieWVzdGVyZGF5XCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJob3VyXCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIGhvdXJcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSBob3VyXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaW4gezB9IGhvdXJzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSBob3VyIGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSBob3VycyBhZ29cIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJob3VyLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIGhvdXJcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSBoci5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJpbiB7MH0gaHIuXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSBoci4gYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IGhyLiBhZ29cIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJob3VyLW5hcnJvd1wiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyBob3VyXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0gaHIuXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaW4gezB9IGhyLlwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0gaHIuIGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSBoci4gYWdvXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwibWludXRlXCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIG1pbnV0ZVwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IG1pbnV0ZVwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSBtaW51dGVzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSBtaW51dGUgYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IG1pbnV0ZXMgYWdvXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwibWludXRlLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIG1pbnV0ZVwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IG1pbi5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJpbiB7MH0gbWluLlwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0gbWluLiBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0gbWluLiBhZ29cIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJtaW51dGUtbmFycm93XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIG1pbnV0ZVwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IG1pbi5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJpbiB7MH0gbWluLlwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJ7MH0gbWluLiBhZ29cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ7MH0gbWluLiBhZ29cIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJzZWNvbmRcIjoge1xuICAgICAgICAgIFwiMFwiOiBcIm5vd1wiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaW4gezB9IHNlY29uZFwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSBzZWNvbmRzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSBzZWNvbmQgYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IHNlY29uZHMgYWdvXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwic2Vjb25kLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJub3dcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImluIHswfSBzZWMuXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaW4gezB9IHNlYy5cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiezB9IHNlYy4gYWdvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiezB9IHNlYy4gYWdvXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwic2Vjb25kLW5hcnJvd1wiOiB7XG4gICAgICAgICAgXCIwXCI6IFwibm93XCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJpbiB7MH0gc2VjLlwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImluIHswfSBzZWMuXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcInswfSBzZWMuIGFnb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcInswfSBzZWMuIGFnb1wiXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBcImF2YWlsYWJsZUxvY2FsZXNcIjogW1wiZW4tMDAxXCIsIFwiZW4tMTUwXCIsIFwiZW4tQUVcIiwgXCJlbi1BR1wiLCBcImVuLUFJXCIsIFwiZW4tQVNcIiwgXCJlbi1BVFwiLCBcImVuLUFVXCIsIFwiZW4tQkJcIiwgXCJlbi1CRVwiLCBcImVuLUJJXCIsIFwiZW4tQk1cIiwgXCJlbi1CU1wiLCBcImVuLUJXXCIsIFwiZW4tQlpcIiwgXCJlbi1DQVwiLCBcImVuLUNDXCIsIFwiZW4tQ0hcIiwgXCJlbi1DS1wiLCBcImVuLUNNXCIsIFwiZW4tQ1hcIiwgXCJlbi1DWVwiLCBcImVuLURFXCIsIFwiZW4tREdcIiwgXCJlbi1ES1wiLCBcImVuLURNXCIsIFwiZW4tRVJcIiwgXCJlbi1GSVwiLCBcImVuLUZKXCIsIFwiZW4tRktcIiwgXCJlbi1GTVwiLCBcImVuLUdCXCIsIFwiZW4tR0RcIiwgXCJlbi1HR1wiLCBcImVuLUdIXCIsIFwiZW4tR0lcIiwgXCJlbi1HTVwiLCBcImVuLUdVXCIsIFwiZW4tR1lcIiwgXCJlbi1IS1wiLCBcImVuLUlFXCIsIFwiZW4tSUxcIiwgXCJlbi1JTVwiLCBcImVuLUlOXCIsIFwiZW4tSU9cIiwgXCJlbi1KRVwiLCBcImVuLUpNXCIsIFwiZW4tS0VcIiwgXCJlbi1LSVwiLCBcImVuLUtOXCIsIFwiZW4tS1lcIiwgXCJlbi1MQ1wiLCBcImVuLUxSXCIsIFwiZW4tTFNcIiwgXCJlbi1NR1wiLCBcImVuLU1IXCIsIFwiZW4tTU9cIiwgXCJlbi1NUFwiLCBcImVuLU1TXCIsIFwiZW4tTVRcIiwgXCJlbi1NVVwiLCBcImVuLU1XXCIsIFwiZW4tTVlcIiwgXCJlbi1OQVwiLCBcImVuLU5GXCIsIFwiZW4tTkdcIiwgXCJlbi1OTFwiLCBcImVuLU5SXCIsIFwiZW4tTlVcIiwgXCJlbi1OWlwiLCBcImVuLVBHXCIsIFwiZW4tUEhcIiwgXCJlbi1QS1wiLCBcImVuLVBOXCIsIFwiZW4tUFJcIiwgXCJlbi1QV1wiLCBcImVuLVJXXCIsIFwiZW4tU0JcIiwgXCJlbi1TQ1wiLCBcImVuLVNEXCIsIFwiZW4tU0VcIiwgXCJlbi1TR1wiLCBcImVuLVNIXCIsIFwiZW4tU0lcIiwgXCJlbi1TTFwiLCBcImVuLVNTXCIsIFwiZW4tU1hcIiwgXCJlbi1TWlwiLCBcImVuLVRDXCIsIFwiZW4tVEtcIiwgXCJlbi1UT1wiLCBcImVuLVRUXCIsIFwiZW4tVFZcIiwgXCJlbi1UWlwiLCBcImVuLVVHXCIsIFwiZW4tVU1cIiwgXCJlbi1VUy1QT1NJWFwiLCBcImVuLVVTXCIsIFwiZW4tVkNcIiwgXCJlbi1WR1wiLCBcImVuLVZJXCIsIFwiZW4tVlVcIiwgXCJlbi1XU1wiLCBcImVuLVpBXCIsIFwiZW4tWk1cIiwgXCJlbi1aV1wiLCBcImVuXCJdLFxuICAgIFwiYWxpYXNlc1wiOiB7fSxcbiAgICBcInBhcmVudExvY2FsZXNcIjoge1xuICAgICAgXCJlbi0xNTBcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tQUdcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tQUlcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tQVVcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tQkJcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tQk1cIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tQlNcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tQldcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tQlpcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tQ0FcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tQ0NcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tQ0tcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tQ01cIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tQ1hcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tQ1lcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tREdcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tRE1cIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tRVJcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tRkpcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tRktcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tRk1cIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tR0JcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tR0RcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tR0dcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tR0hcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tR0lcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tR01cIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tR1lcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tSEtcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tSUVcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tSUxcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tSU1cIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tSU5cIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tSU9cIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tSkVcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tSk1cIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tS0VcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tS0lcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tS05cIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tS1lcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tTENcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tTFJcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tTFNcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tTUdcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tTU9cIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tTVNcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tTVRcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tTVVcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tTVdcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tTVlcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tTkFcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tTkZcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tTkdcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tTlJcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tTlVcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tTlpcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tUEdcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tUEhcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tUEtcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tUE5cIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tUFdcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tUldcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tU0JcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tU0NcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tU0RcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tU0dcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tU0hcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tU0xcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tU1NcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tU1hcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tU1pcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tVENcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tVEtcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tVE9cIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tVFRcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tVFZcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tVFpcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tVUdcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tVkNcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tVkdcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tVlVcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tV1NcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tWkFcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tWk1cIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tWldcIjogXCJlbi0wMDFcIixcbiAgICAgIFwiZW4tQVRcIjogXCJlbi0xNTBcIixcbiAgICAgIFwiZW4tQkVcIjogXCJlbi0xNTBcIixcbiAgICAgIFwiZW4tQ0hcIjogXCJlbi0xNTBcIixcbiAgICAgIFwiZW4tREVcIjogXCJlbi0xNTBcIixcbiAgICAgIFwiZW4tREtcIjogXCJlbi0xNTBcIixcbiAgICAgIFwiZW4tRklcIjogXCJlbi0xNTBcIixcbiAgICAgIFwiZW4tTkxcIjogXCJlbi0xNTBcIixcbiAgICAgIFwiZW4tU0VcIjogXCJlbi0xNTBcIixcbiAgICAgIFwiZW4tU0lcIjogXCJlbi0xNTBcIlxuICAgIH1cbiAgfSk7XG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8079\n')},4033:function(){eval('/* @generated */\n// prettier-ignore\nif (Intl.RelativeTimeFormat && typeof Intl.RelativeTimeFormat.__addLocaleData === \'function\') {\n Intl.RelativeTimeFormat.__addLocaleData({\n "data": {\n "es-419": {\n "week-short": {\n "0": "esta sem.",\n "1": "próx. sem.",\n "future": {\n "one": "dentro de {0} sem.",\n "other": "dentro de {0} sem."\n },\n "past": {\n "one": "hace {0} sem.",\n "other": "hace {0} sem."\n },\n "-1": "sem. pas."\n },\n "week-narrow": {\n "0": "esta sem.",\n "1": "próx. sem.",\n "future": {\n "one": "dentro de {0} sem.",\n "other": "dentro de {0} sem."\n },\n "past": {\n "one": "hace {0} sem.",\n "other": "hace {0} sem."\n },\n "-1": "sem. pas."\n }\n },\n "es-AR": {\n "day-short": {\n "0": "hoy",\n "1": "mañana",\n "2": "pasado mañana",\n "future": {\n "one": "dentro de {0} días",\n "other": "dentro de {0} días"\n },\n "past": {\n "one": "hace {0} días",\n "other": "hace {0} días"\n },\n "-2": "anteayer",\n "-1": "ayer"\n },\n "day-narrow": {\n "0": "hoy",\n "1": "mañana",\n "2": "pasado mañana",\n "future": {\n "one": "dentro de {0} días",\n "other": "dentro de {0} días"\n },\n "past": {\n "one": "hace {0} días",\n "other": "hace {0} días"\n },\n "-2": "anteayer",\n "-1": "ayer"\n },\n "second-short": {\n "0": "ahora",\n "future": {\n "one": "dentro de {0} seg.",\n "other": "dentro de {0} seg."\n },\n "past": {\n "one": "hace {0} seg.",\n "other": "hace {0} seg."\n }\n },\n "second-narrow": {\n "0": "ahora",\n "future": {\n "one": "dentro de {0} seg.",\n "other": "dentro de {0} seg."\n },\n "past": {\n "one": "hace {0} seg.",\n "other": "hace {0} seg."\n }\n }\n },\n "es-MX": {\n "year": {\n "0": "este año",\n "1": "el año próximo",\n "future": {\n "one": "dentro de {0} año",\n "other": "dentro de {0} años"\n },\n "past": {\n "one": "hace {0} año",\n "other": "hace {0} años"\n },\n "-1": "el año pasado"\n },\n "year-short": {\n "0": "este año",\n "1": "el próximo año",\n "future": {\n "one": "en {0} a",\n "other": "en {0} a"\n },\n "past": {\n "one": "hace {0} a",\n "other": "hace {0} a"\n },\n "-1": "el año pasado"\n },\n "year-narrow": {\n "0": "este año",\n "1": "el próximo año",\n "future": {\n "one": "en {0} a",\n "other": "en {0} a"\n },\n "past": {\n "one": "-{0} a",\n "other": "-{0} a"\n },\n "-1": "el año pasado"\n },\n "quarter": {\n "0": "este trimestre",\n "1": "el próximo trimestre",\n "future": {\n "one": "en {0} trimestre",\n "other": "dentro de {0} trimetres"\n },\n "past": {\n "one": "hace {0} trimestre",\n "other": "hace {0} trimestres"\n },\n "-1": "el trimestre pasado"\n },\n "quarter-short": {\n "0": "este trimestre",\n "1": "el próximo trimestre",\n "future": {\n "one": "en {0} trim.",\n "other": "en {0} trim"\n },\n "past": {\n "one": "hace {0} trim.",\n "other": "hace {0} trim."\n },\n "-1": "el trimestre pasado"\n },\n "quarter-narrow": {\n "0": "este trimestre",\n "1": "el próximo trimestre",\n "future": {\n "one": "en {0} trim.",\n "other": "en {0} trim."\n },\n "past": {\n "one": "-{0} T",\n "other": "-{0} T"\n },\n "-1": "el trimestre pasado"\n },\n "month": {\n "0": "este mes",\n "1": "el mes próximo",\n "future": {\n "one": "en {0} mes",\n "other": "en {0} meses"\n },\n "past": {\n "one": "hace {0} mes",\n "other": "hace {0} meses"\n },\n "-1": "el mes pasado"\n },\n "month-short": {\n "0": "este mes",\n "1": "el próximo mes",\n "future": {\n "one": "en {0} m",\n "other": "en {0} m"\n },\n "past": {\n "one": "hace {0} m",\n "other": "hace {0} m"\n },\n "-1": "el mes pasado"\n },\n "month-narrow": {\n "0": "este mes",\n "1": "el próximo mes",\n "future": {\n "one": "+{0} m",\n "other": "+{0} m"\n },\n "past": {\n "one": "-{0} m",\n "other": "-{0} m"\n },\n "-1": "el mes pasado"\n },\n "week": {\n "0": "esta semana",\n "1": "la semana próxima",\n "future": {\n "one": "dentro de {0} semana",\n "other": "dentro de {0} semanas"\n },\n "past": {\n "one": "hace {0} semana",\n "other": "hace {0} semanas"\n },\n "-1": "la semana pasada"\n },\n "week-short": {\n "0": "esta sem.",\n "1": "próx. sem.",\n "future": {\n "one": "en {0} sem.",\n "other": "en {0} sem."\n },\n "past": {\n "one": "hace {0} sem.",\n "other": "hace {0} sem."\n },\n "-1": "sem. pas."\n },\n "day-short": {\n "0": "hoy",\n "1": "mañana",\n "2": "pasado mañana",\n "future": {\n "one": "en {0} día",\n "other": "en {0} días"\n },\n "past": {\n "one": "hace {0} día",\n "other": "hace {0} días"\n },\n "-2": "anteayer",\n "-1": "ayer"\n },\n "day-narrow": {\n "0": "hoy",\n "1": "mañana",\n "2": "pasado mañana",\n "future": {\n "one": "+{0} día",\n "other": "en {0} días"\n },\n "past": {\n "one": "hace {0} día",\n "other": "hace {0} días"\n },\n "-2": "anteayer",\n "-1": "ayer"\n },\n "hour-short": {\n "0": "esta hora",\n "future": {\n "one": "en {0} h",\n "other": "en {0} n"\n },\n "past": {\n "one": "hace {0} h",\n "other": "hace {0} h"\n }\n },\n "minute-short": {\n "0": "este minuto",\n "future": {\n "one": "en {0} min",\n "other": "en {0} min"\n },\n "past": {\n "one": "hace {0} min",\n "other": "hace {0} min"\n }\n },\n "minute-narrow": {\n "0": "este minuto",\n "future": {\n "one": "en {0} min",\n "other": "en {0} min"\n },\n "past": {\n "one": "hace {0} min",\n "other": "hace {0} min"\n }\n },\n "second-short": {\n "0": "ahora",\n "future": {\n "one": "en {0} s",\n "other": "en {0} s"\n },\n "past": {\n "one": "hace {0} s",\n "other": "hace {0} s"\n }\n },\n "second-narrow": {\n "0": "ahora",\n "future": {\n "one": "+{0} s",\n "other": "+{0} s"\n },\n "past": {\n "one": "hace {0} s",\n "other": "hace {0} s"\n }\n }\n },\n "es-PY": {\n "second-short": {\n "0": "ahora",\n "future": {\n "one": "dentro de {0} seg.",\n "other": "dentro de {0} seg."\n },\n "past": {\n "one": "hace {0} seg.",\n "other": "hace {0} seg."\n }\n },\n "second-narrow": {\n "0": "ahora",\n "future": {\n "one": "dentro de {0} seg.",\n "other": "dentro de {0} seg."\n },\n "past": {\n "one": "hace {0} seg.",\n "other": "hace {0} seg."\n }\n }\n },\n "es-SV": {\n "day": {\n "0": "hoy",\n "1": "mañana",\n "2": "pasado mañana",\n "future": {\n "one": "dentro de {0} día",\n "other": "dentro de {0} días"\n },\n "past": {\n "one": "hace {0} día",\n "other": "hace {0} días"\n },\n "-2": "antier",\n "-1": "ayer"\n }\n },\n "es-US": {\n "year": {\n "0": "este año",\n "1": "el año próximo",\n "future": {\n "one": "dentro de {0} año",\n "other": "dentro de {0} años"\n },\n "past": {\n "one": "hace {0} año",\n "other": "hace {0} años"\n },\n "-1": "el año pasado"\n },\n "quarter": {\n "0": "este trimestre",\n "1": "el próximo trimestre",\n "future": {\n "one": "dentro de {0} trimetre",\n "other": "dentro de {0} trimetres"\n },\n "past": {\n "one": "hace {0} trimestre",\n "other": "hace {0} trimestres"\n },\n "-1": "el trimestre pasado"\n },\n "month": {\n "0": "este mes",\n "1": "el mes próximo",\n "future": {\n "one": "dentro de {0} mes",\n "other": "dentro de {0} meses"\n },\n "past": {\n "one": "hace {0} mes",\n "other": "hace {0} meses"\n },\n "-1": "el mes pasado"\n },\n "week": {\n "0": "esta semana",\n "1": "la semana próxima",\n "future": {\n "one": "dentro de {0} semana",\n "other": "dentro de {0} semanas"\n },\n "past": {\n "one": "hace {0} semana",\n "other": "hace {0} semanas"\n },\n "-1": "la semana pasada"\n }\n },\n "es": {\n "nu": ["latn"],\n "year": {\n "0": "este año",\n "1": "el próximo año",\n "future": {\n "one": "dentro de {0} año",\n "other": "dentro de {0} años"\n },\n "past": {\n "one": "hace {0} año",\n "other": "hace {0} años"\n },\n "-1": "el año pasado"\n },\n "year-short": {\n "0": "este año",\n "1": "el próximo año",\n "future": {\n "one": "dentro de {0} a",\n "other": "dentro de {0} a"\n },\n "past": {\n "one": "hace {0} a",\n "other": "hace {0} a"\n },\n "-1": "el año pasado"\n },\n "year-narrow": {\n "0": "este año",\n "1": "el próximo año",\n "future": {\n "one": "dentro de {0} a",\n "other": "dentro de {0} a"\n },\n "past": {\n "one": "hace {0} a",\n "other": "hace {0} a"\n },\n "-1": "el año pasado"\n },\n "quarter": {\n "0": "este trimestre",\n "1": "el próximo trimestre",\n "future": {\n "one": "dentro de {0} trimestre",\n "other": "dentro de {0} trimestres"\n },\n "past": {\n "one": "hace {0} trimestre",\n "other": "hace {0} trimestres"\n },\n "-1": "el trimestre pasado"\n },\n "quarter-short": {\n "0": "este trimestre",\n "1": "el próximo trimestre",\n "future": {\n "one": "dentro de {0} trim.",\n "other": "dentro de {0} trim."\n },\n "past": {\n "one": "hace {0} trim.",\n "other": "hace {0} trim."\n },\n "-1": "el trimestre pasado"\n },\n "quarter-narrow": {\n "0": "este trimestre",\n "1": "el próximo trimestre",\n "future": {\n "one": "dentro de {0} trim.",\n "other": "dentro de {0} trim."\n },\n "past": {\n "one": "hace {0} trim.",\n "other": "hace {0} trim."\n },\n "-1": "el trimestre pasado"\n },\n "month": {\n "0": "este mes",\n "1": "el próximo mes",\n "future": {\n "one": "dentro de {0} mes",\n "other": "dentro de {0} meses"\n },\n "past": {\n "one": "hace {0} mes",\n "other": "hace {0} meses"\n },\n "-1": "el mes pasado"\n },\n "month-short": {\n "0": "este mes",\n "1": "el próximo mes",\n "future": {\n "one": "dentro de {0} m",\n "other": "dentro de {0} m"\n },\n "past": {\n "one": "hace {0} m",\n "other": "hace {0} m"\n },\n "-1": "el mes pasado"\n },\n "month-narrow": {\n "0": "este mes",\n "1": "el próximo mes",\n "future": {\n "one": "dentro de {0} m",\n "other": "dentro de {0} m"\n },\n "past": {\n "one": "hace {0} m",\n "other": "hace {0} m"\n },\n "-1": "el mes pasado"\n },\n "week": {\n "0": "esta semana",\n "1": "la próxima semana",\n "future": {\n "one": "dentro de {0} semana",\n "other": "dentro de {0} semanas"\n },\n "past": {\n "one": "hace {0} semana",\n "other": "hace {0} semanas"\n },\n "-1": "la semana pasada"\n },\n "week-short": {\n "0": "esta sem.",\n "1": "próx. sem.",\n "future": {\n "one": "dentro de {0} sem.",\n "other": "dentro de {0} sem."\n },\n "past": {\n "one": "hace {0} sem.",\n "other": "hace {0} sem."\n },\n "-1": "sem. ant."\n },\n "week-narrow": {\n "0": "esta sem.",\n "1": "próx. sem.",\n "future": {\n "one": "dentro de {0} sem.",\n "other": "dentro de {0} sem."\n },\n "past": {\n "one": "hace {0} sem.",\n "other": "hace {0} sem."\n },\n "-1": "sem. ant."\n },\n "day": {\n "0": "hoy",\n "1": "mañana",\n "2": "pasado mañana",\n "future": {\n "one": "dentro de {0} día",\n "other": "dentro de {0} días"\n },\n "past": {\n "one": "hace {0} día",\n "other": "hace {0} días"\n },\n "-2": "anteayer",\n "-1": "ayer"\n },\n "day-short": {\n "0": "hoy",\n "1": "mañana",\n "2": "pasado mañana",\n "future": {\n "one": "dentro de {0} día",\n "other": "dentro de {0} días"\n },\n "past": {\n "one": "hace {0} día",\n "other": "hace {0} días"\n },\n "-2": "anteayer",\n "-1": "ayer"\n },\n "day-narrow": {\n "0": "hoy",\n "1": "mañana",\n "2": "pasado mañana",\n "future": {\n "one": "dentro de {0} día",\n "other": "dentro de {0} días"\n },\n "past": {\n "one": "hace {0} día",\n "other": "hace {0} días"\n },\n "-2": "anteayer",\n "-1": "ayer"\n },\n "hour": {\n "0": "esta hora",\n "future": {\n "one": "dentro de {0} hora",\n "other": "dentro de {0} horas"\n },\n "past": {\n "one": "hace {0} hora",\n "other": "hace {0} horas"\n }\n },\n "hour-short": {\n "0": "esta hora",\n "future": {\n "one": "dentro de {0} h",\n "other": "dentro de {0} h"\n },\n "past": {\n "one": "hace {0} h",\n "other": "hace {0} h"\n }\n },\n "hour-narrow": {\n "0": "esta hora",\n "future": {\n "one": "dentro de {0} h",\n "other": "dentro de {0} h"\n },\n "past": {\n "one": "hace {0} h",\n "other": "hace {0} h"\n }\n },\n "minute": {\n "0": "este minuto",\n "future": {\n "one": "dentro de {0} minuto",\n "other": "dentro de {0} minutos"\n },\n "past": {\n "one": "hace {0} minuto",\n "other": "hace {0} minutos"\n }\n },\n "minute-short": {\n "0": "este minuto",\n "future": {\n "one": "dentro de {0} min",\n "other": "dentro de {0} min"\n },\n "past": {\n "one": "hace {0} min",\n "other": "hace {0} min"\n }\n },\n "minute-narrow": {\n "0": "este minuto",\n "future": {\n "one": "dentro de {0} min",\n "other": "dentro de {0} min"\n },\n "past": {\n "one": "hace {0} min",\n "other": "hace {0} min"\n }\n },\n "second": {\n "0": "ahora",\n "future": {\n "one": "dentro de {0} segundo",\n "other": "dentro de {0} segundos"\n },\n "past": {\n "one": "hace {0} segundo",\n "other": "hace {0} segundos"\n }\n },\n "second-short": {\n "0": "ahora",\n "future": {\n "one": "dentro de {0} s",\n "other": "dentro de {0} s"\n },\n "past": {\n "one": "hace {0} s",\n "other": "hace {0} s"\n }\n },\n "second-narrow": {\n "0": "ahora",\n "future": {\n "one": "dentro de {0} s",\n "other": "dentro de {0} s"\n },\n "past": {\n "one": "hace {0} s",\n "other": "hace {0} s"\n }\n }\n }\n },\n "availableLocales": ["es-419", "es-AR", "es-BO", "es-BR", "es-BZ", "es-CL", "es-CO", "es-CR", "es-CU", "es-DO", "es-EA", "es-EC", "es-GQ", "es-GT", "es-HN", "es-IC", "es-MX", "es-NI", "es-PA", "es-PE", "es-PH", "es-PR", "es-PY", "es-SV", "es-US", "es-UY", "es-VE", "es"],\n "aliases": {},\n "parentLocales": {\n "es-AR": "es-419",\n "es-BO": "es-419",\n "es-BR": "es-419",\n "es-BZ": "es-419",\n "es-CL": "es-419",\n "es-CO": "es-419",\n "es-CR": "es-419",\n "es-CU": "es-419",\n "es-DO": "es-419",\n "es-EC": "es-419",\n "es-GT": "es-419",\n "es-HN": "es-419",\n "es-MX": "es-419",\n "es-NI": "es-419",\n "es-PA": "es-419",\n "es-PE": "es-419",\n "es-PR": "es-419",\n "es-PY": "es-419",\n "es-SV": "es-419",\n "es-US": "es-419",\n "es-UY": "es-419",\n "es-VE": "es-419"\n }\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AZm9ybWF0anMvaW50bC1yZWxhdGl2ZXRpbWVmb3JtYXQvZGlzdC9sb2NhbGUtZGF0YS9lcy5qcz9mY2VlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLEVBQUU7QUFDakMsaUNBQWlDLEVBQUU7QUFDbkMsV0FBVztBQUNYO0FBQ0EsMEJBQTBCLEVBQUU7QUFDNUIsNEJBQTRCLEVBQUU7QUFDOUIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLEVBQUU7QUFDakMsaUNBQWlDLEVBQUU7QUFDbkMsV0FBVztBQUNYO0FBQ0EsMEJBQTBCLEVBQUU7QUFDNUIsNEJBQTRCLEVBQUU7QUFDOUIsV0FBVztBQUNYO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLEVBQUU7QUFDakMsaUNBQWlDLEVBQUU7QUFDbkMsV0FBVztBQUNYO0FBQ0EsMEJBQTBCLEVBQUU7QUFDNUIsNEJBQTRCLEVBQUU7QUFDOUIsV0FBVztBQUNYO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixFQUFFO0FBQ2pDLGlDQUFpQyxFQUFFO0FBQ25DLFdBQVc7QUFDWDtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLDRCQUE0QixFQUFFO0FBQzlCLFdBQVc7QUFDWDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixFQUFFO0FBQ2pDLGlDQUFpQyxFQUFFO0FBQ25DLFdBQVc7QUFDWDtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLDRCQUE0QixFQUFFO0FBQzlCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixFQUFFO0FBQ2pDLGlDQUFpQyxFQUFFO0FBQ25DLFdBQVc7QUFDWDtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLDRCQUE0QixFQUFFO0FBQzlCO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixFQUFFO0FBQ2pDLGlDQUFpQyxFQUFFO0FBQ25DLFdBQVc7QUFDWDtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLDRCQUE0QixFQUFFO0FBQzlCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLDRCQUE0QixFQUFFO0FBQzlCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHNCQUFzQixFQUFFO0FBQ3hCLHdCQUF3QixFQUFFO0FBQzFCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLGlDQUFpQyxFQUFFO0FBQ25DLFdBQVc7QUFDWDtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLDRCQUE0QixFQUFFO0FBQzlCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLDRCQUE0QixFQUFFO0FBQzlCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLDBCQUEwQixFQUFFO0FBQzVCLFdBQVc7QUFDWDtBQUNBLHNCQUFzQixFQUFFO0FBQ3hCLHdCQUF3QixFQUFFO0FBQzFCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNB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O0FBQ2pDLGlDQUFpQyxFQUFFO0FBQ25DLFdBQVc7QUFDWDtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLDRCQUE0QixFQUFFO0FBQzlCLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixFQUFFO0FBQ2pDLGlDQUFpQyxFQUFFO0FBQ25DLFdBQVc7QUFDWDtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLDRCQUE0QixFQUFFO0FBQzlCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixFQUFFO0FBQ2pDLGlDQUFpQyxFQUFFO0FBQ25DLFdBQVc7QUFDWDtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLDRCQUE0QixFQUFFO0FBQzlCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixFQUFFO0FBQ2pDLGlDQUFpQyxFQUFFO0FBQ25DLFdBQVc7QUFDWDtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLDRCQUE0QixFQUFFO0FBQzlCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixFQUFFO0FBQ2pDLGlDQUFpQyxFQUFFO0FBQ25DLFdBQVc7QUFDWDtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLDRCQUE0QixFQUFFO0FBQzlCLFdBQVc7QUFDWDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixFQUFFO0FBQ2pDLGlDQUFpQyxFQUFFO0FBQ25DLFdBQVc7QUFDWDtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLDRCQUE0QixFQUFFO0FBQzlCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixFQUFFO0FBQ2pDLGlDQUFpQyxFQUFFO0FBQ25DLFdBQVc7QUFDWDtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLDRCQUE0QixFQUFFO0FBQzlCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixFQUFFO0FBQ2pDLGlDQUFpQyxFQUFFO0FBQ25DLFdBQVc7QUFDWDtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLDRCQUE0QixFQUFFO0FBQzlCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixFQUFFO0FBQ2pDLGlDQUFpQyxFQUFFO0FBQ25DLFdBQVc7QUFDWDtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLDRCQUE0QixFQUFFO0FBQzlCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixFQUFFO0FBQ2pDLGlDQUFpQyxFQUFFO0FBQ25DLFdBQVc7QUFDWDtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLDRCQUE0QixFQUFFO0FBQzlCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixFQUFFO0FBQ2pDLGlDQUFpQyxFQUFFO0FBQ25DLFdBQVc7QUFDWDtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLDRCQUE0QixFQUFFO0FBQzlCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixFQUFFO0FBQ2pDLGlDQUFpQyxFQUFFO0FBQ25DLFdBQVc7QUFDWDtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLDRCQUE0QixFQUFFO0FBQzlCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixFQUFFO0FBQ2pDLGlDQUFpQyxFQUFFO0FBQ25DLFdBQVc7QUFDWDtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLDRCQUE0QixFQUFFO0FBQzlCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixFQUFFO0FBQ2pDLGlDQUFpQyxFQUFFO0FBQ25DLFdBQVc7QUFDWDtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLDRCQUE0QixFQUFFO0FBQzlCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixFQUFFO0FBQ2pDLGlDQUFpQyxFQUFFO0FBQ25DLFdBQVc7QUFDWDtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLDRCQUE0QixFQUFFO0FBQzlCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixFQUFFO0FBQ2pDLGlDQUFpQyxFQUFFO0FBQ25DLFdBQVc7QUFDWDtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLDRCQUE0QixFQUFFO0FBQzlCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixFQUFFO0FBQ2pDLGlDQUFpQyxFQUFFO0FBQ25DLFdBQVc7QUFDWDtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLDRCQUE0QixFQUFFO0FBQzlCLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLEVBQUU7QUFDakMsaUNBQWlDLEVBQUU7QUFDbkMsV0FBVztBQUNYO0FBQ0EsMEJBQTBCLEVBQUU7QUFDNUIsNEJBQTRCLEVBQUU7QUFDOUIsV0FBVztBQUNYO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixFQUFFO0FBQ2pDLGlDQUFpQyxFQUFFO0FBQ25DLFdBQVc7QUFDWDtBQUNBLDBCQUEwQixFQUFFO0FBQzVCLDRCQUE0QixFQUFFO0FBQzlCLFdBQVc7QUFDWDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsRUFBRTtBQUNqQyxpQ0FBaUMsRUFBRTtBQUNuQyxXQUFXO0FBQ1g7QUFDQSwwQkFBMEIsRUFBRTtBQUM1Qiw0QkFBNEIsRUFBRTtBQUM5QixXQUFXO0FBQ1g7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsRUFBRTtBQUNqQyxpQ0FBaUMsRUFBRTtBQUNuQyxXQUFXO0FBQ1g7QUFDQSwwQkFBMEIsRUFBRTtBQUM1Qiw0QkFBNEIsRUFBRTtBQUM5QjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsRUFBRTtBQUNqQyxpQ0FBaUMsRUFBRTtBQUNuQyxXQUFXO0FBQ1g7QUFDQSwwQkFBMEIsRUFBRTtBQUM1Qiw0QkFBNEIsRUFBRTtBQUM5QjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsRUFBRTtBQUNqQyxpQ0FBaUMsRUFBRTtBQUNuQyxXQUFXO0FBQ1g7QUFDQSwwQkFBMEIsRUFBRTtBQUM1Qiw0QkFBNEIsRUFBRTtBQUM5QjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsRUFBRTtBQUNqQyxpQ0FBaUMsRUFBRTtBQUNuQyxXQUFXO0FBQ1g7QUFDQSwwQkFBMEIsRUFBRTtBQUM1Qiw0QkFBNEIsRUFBRTtBQUM5QjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsRUFBRTtBQUNqQyxpQ0FBaUMsRUFBRTtBQUNuQyxXQUFXO0FBQ1g7QUFDQSwwQkFBMEIsRUFBRTtBQUM1Qiw0QkFBNEIsRUFBRTtBQUM5QjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsRUFBRTtBQUNqQyxpQ0FBaUMsRUFBRTtBQUNuQyxXQUFXO0FBQ1g7QUFDQSwwQkFBMEIsRUFBRTtBQUM1Qiw0QkFBNEIsRUFBRTtBQUM5QjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsRUFBRTtBQUNqQyxpQ0FBaUMsRUFBRTtBQUNuQyxXQUFXO0FBQ1g7QUFDQSwwQkFBMEIsRUFBRTtBQUM1Qiw0QkFBNEIsRUFBRTtBQUM5QjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsRUFBRTtBQUNqQyxpQ0FBaUMsRUFBRTtBQUNuQyxXQUFXO0FBQ1g7QUFDQSwwQkFBMEIsRUFBRTtBQUM1Qiw0QkFBNEIsRUFBRTtBQUM5QjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsRUFBRTtBQUNqQyxpQ0FBaUMsRUFBRTtBQUNuQyxXQUFXO0FBQ1g7QUFDQSwwQkFBMEIsRUFBRTtBQUM1Qiw0QkFBNEIsRUFBRTtBQUM5QjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIIiwiZmlsZSI6IjQwMzMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBAZ2VuZXJhdGVkICovXG4vLyBwcmV0dGllci1pZ25vcmVcbmlmIChJbnRsLlJlbGF0aXZlVGltZUZvcm1hdCAmJiB0eXBlb2YgSW50bC5SZWxhdGl2ZVRpbWVGb3JtYXQuX19hZGRMb2NhbGVEYXRhID09PSAnZnVuY3Rpb24nKSB7XG4gIEludGwuUmVsYXRpdmVUaW1lRm9ybWF0Ll9fYWRkTG9jYWxlRGF0YSh7XG4gICAgXCJkYXRhXCI6IHtcbiAgICAgIFwiZXMtNDE5XCI6IHtcbiAgICAgICAgXCJ3ZWVrLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJlc3RhIHNlbS5cIixcbiAgICAgICAgICBcIjFcIjogXCJwcsOzeC4gc2VtLlwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiZGVudHJvIGRlIHswfSBzZW0uXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiZGVudHJvIGRlIHswfSBzZW0uXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImhhY2UgezB9IHNlbS5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJoYWNlIHswfSBzZW0uXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJzZW0uIHBhcy5cIlxuICAgICAgICB9LFxuICAgICAgICBcIndlZWstbmFycm93XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJlc3RhIHNlbS5cIixcbiAgICAgICAgICBcIjFcIjogXCJwcsOzeC4gc2VtLlwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiZGVudHJvIGRlIHswfSBzZW0uXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiZGVudHJvIGRlIHswfSBzZW0uXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImhhY2UgezB9IHNlbS5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJoYWNlIHswfSBzZW0uXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJzZW0uIHBhcy5cIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJlcy1BUlwiOiB7XG4gICAgICAgIFwiZGF5LXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJob3lcIixcbiAgICAgICAgICBcIjFcIjogXCJtYcOxYW5hXCIsXG4gICAgICAgICAgXCIyXCI6IFwicGFzYWRvIG1hw7FhbmFcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImRlbnRybyBkZSB7MH0gZMOtYXNcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJkZW50cm8gZGUgezB9IGTDrWFzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImhhY2UgezB9IGTDrWFzXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaGFjZSB7MH0gZMOtYXNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMlwiOiBcImFudGVheWVyXCIsXG4gICAgICAgICAgXCItMVwiOiBcImF5ZXJcIlxuICAgICAgICB9LFxuICAgICAgICBcImRheS1uYXJyb3dcIjoge1xuICAgICAgICAgIFwiMFwiOiBcImhveVwiLFxuICAgICAgICAgIFwiMVwiOiBcIm1hw7FhbmFcIixcbiAgICAgICAgICBcIjJcIjogXCJwYXNhZG8gbWHDsWFuYVwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiZGVudHJvIGRlIHswfSBkw61hc1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImRlbnRybyBkZSB7MH0gZMOtYXNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaGFjZSB7MH0gZMOtYXNcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJoYWNlIHswfSBkw61hc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0yXCI6IFwiYW50ZWF5ZXJcIixcbiAgICAgICAgICBcIi0xXCI6IFwiYXllclwiXG4gICAgICAgIH0sXG4gICAgICAgIFwic2Vjb25kLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJhaG9yYVwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiZGVudHJvIGRlIHswfSBzZWcuXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiZGVudHJvIGRlIHswfSBzZWcuXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImhhY2UgezB9IHNlZy5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJoYWNlIHswfSBzZWcuXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwic2Vjb25kLW5hcnJvd1wiOiB7XG4gICAgICAgICAgXCIwXCI6IFwiYWhvcmFcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImRlbnRybyBkZSB7MH0gc2VnLlwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImRlbnRybyBkZSB7MH0gc2VnLlwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJoYWNlIHswfSBzZWcuXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaGFjZSB7MH0gc2VnLlwiXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJlcy1NWFwiOiB7XG4gICAgICAgIFwieWVhclwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwiZXN0ZSBhw7FvXCIsXG4gICAgICAgICAgXCIxXCI6IFwiZWwgYcOxbyBwcsOzeGltb1wiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiZGVudHJvIGRlIHswfSBhw7FvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiZGVudHJvIGRlIHswfSBhw7Fvc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJoYWNlIHswfSBhw7FvXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaGFjZSB7MH0gYcOxb3NcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImVsIGHDsW8gcGFzYWRvXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ5ZWFyLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJlc3RlIGHDsW9cIixcbiAgICAgICAgICBcIjFcIjogXCJlbCBwcsOzeGltbyBhw7FvXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJlbiB7MH0gYVwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImVuIHswfSBhXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImhhY2UgezB9IGFcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJoYWNlIHswfSBhXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJlbCBhw7FvIHBhc2Fkb1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwieWVhci1uYXJyb3dcIjoge1xuICAgICAgICAgIFwiMFwiOiBcImVzdGUgYcOxb1wiLFxuICAgICAgICAgIFwiMVwiOiBcImVsIHByw7N4aW1vIGHDsW9cIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImVuIHswfSBhXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiZW4gezB9IGFcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiLXswfSBhXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiLXswfSBhXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJlbCBhw7FvIHBhc2Fkb1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwicXVhcnRlclwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwiZXN0ZSB0cmltZXN0cmVcIixcbiAgICAgICAgICBcIjFcIjogXCJlbCBwcsOzeGltbyB0cmltZXN0cmVcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImVuIHswfSB0cmltZXN0cmVcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJkZW50cm8gZGUgezB9IHRyaW1ldHJlc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJoYWNlIHswfSB0cmltZXN0cmVcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJoYWNlIHswfSB0cmltZXN0cmVzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJlbCB0cmltZXN0cmUgcGFzYWRvXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJxdWFydGVyLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJlc3RlIHRyaW1lc3RyZVwiLFxuICAgICAgICAgIFwiMVwiOiBcImVsIHByw7N4aW1vIHRyaW1lc3RyZVwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiZW4gezB9IHRyaW0uXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiZW4gezB9IHRyaW1cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaGFjZSB7MH0gdHJpbS5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJoYWNlIHswfSB0cmltLlwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwiZWwgdHJpbWVzdHJlIHBhc2Fkb1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwicXVhcnRlci1uYXJyb3dcIjoge1xuICAgICAgICAgIFwiMFwiOiBcImVzdGUgdHJpbWVzdHJlXCIsXG4gICAgICAgICAgXCIxXCI6IFwiZWwgcHLDs3hpbW8gdHJpbWVzdHJlXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJlbiB7MH0gdHJpbS5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJlbiB7MH0gdHJpbS5cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiLXswfSBUXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiLXswfSBUXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJlbCB0cmltZXN0cmUgcGFzYWRvXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtb250aFwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwiZXN0ZSBtZXNcIixcbiAgICAgICAgICBcIjFcIjogXCJlbCBtZXMgcHLDs3hpbW9cIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImVuIHswfSBtZXNcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJlbiB7MH0gbWVzZXNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaGFjZSB7MH0gbWVzXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaGFjZSB7MH0gbWVzZXNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImVsIG1lcyBwYXNhZG9cIlxuICAgICAgICB9LFxuICAgICAgICBcIm1vbnRoLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJlc3RlIG1lc1wiLFxuICAgICAgICAgIFwiMVwiOiBcImVsIHByw7N4aW1vIG1lc1wiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiZW4gezB9IG1cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJlbiB7MH0gbVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJoYWNlIHswfSBtXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaGFjZSB7MH0gbVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwiZWwgbWVzIHBhc2Fkb1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwibW9udGgtbmFycm93XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJlc3RlIG1lc1wiLFxuICAgICAgICAgIFwiMVwiOiBcImVsIHByw7N4aW1vIG1lc1wiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiK3swfSBtXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiK3swfSBtXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcIi17MH0gbVwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcIi17MH0gbVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwiZWwgbWVzIHBhc2Fkb1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwid2Vla1wiOiB7XG4gICAgICAgICAgXCIwXCI6IFwiZXN0YSBzZW1hbmFcIixcbiAgICAgICAgICBcIjFcIjogXCJsYSBzZW1hbmEgcHLDs3hpbWFcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImRlbnRybyBkZSB7MH0gc2VtYW5hXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiZGVudHJvIGRlIHswfSBzZW1hbmFzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImhhY2UgezB9IHNlbWFuYVwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImhhY2UgezB9IHNlbWFuYXNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImxhIHNlbWFuYSBwYXNhZGFcIlxuICAgICAgICB9LFxuICAgICAgICBcIndlZWstc2hvcnRcIjoge1xuICAgICAgICAgIFwiMFwiOiBcImVzdGEgc2VtLlwiLFxuICAgICAgICAgIFwiMVwiOiBcInByw7N4LiBzZW0uXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJlbiB7MH0gc2VtLlwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImVuIHswfSBzZW0uXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImhhY2UgezB9IHNlbS5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJoYWNlIHswfSBzZW0uXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJzZW0uIHBhcy5cIlxuICAgICAgICB9LFxuICAgICAgICBcImRheS1zaG9ydFwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwiaG95XCIsXG4gICAgICAgICAgXCIxXCI6IFwibWHDsWFuYVwiLFxuICAgICAgICAgIFwiMlwiOiBcInBhc2FkbyBtYcOxYW5hXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJlbiB7MH0gZMOtYVwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImVuIHswfSBkw61hc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJoYWNlIHswfSBkw61hXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaGFjZSB7MH0gZMOtYXNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMlwiOiBcImFudGVheWVyXCIsXG4gICAgICAgICAgXCItMVwiOiBcImF5ZXJcIlxuICAgICAgICB9LFxuICAgICAgICBcImRheS1uYXJyb3dcIjoge1xuICAgICAgICAgIFwiMFwiOiBcImhveVwiLFxuICAgICAgICAgIFwiMVwiOiBcIm1hw7FhbmFcIixcbiAgICAgICAgICBcIjJcIjogXCJwYXNhZG8gbWHDsWFuYVwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiK3swfSBkw61hXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiZW4gezB9IGTDrWFzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImhhY2UgezB9IGTDrWFcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJoYWNlIHswfSBkw61hc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0yXCI6IFwiYW50ZWF5ZXJcIixcbiAgICAgICAgICBcIi0xXCI6IFwiYXllclwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiaG91ci1zaG9ydFwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwiZXN0YSBob3JhXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJlbiB7MH0gaFwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImVuIHswfSBuXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImhhY2UgezB9IGhcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJoYWNlIHswfSBoXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwibWludXRlLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJlc3RlIG1pbnV0b1wiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiZW4gezB9IG1pblwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImVuIHswfSBtaW5cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaGFjZSB7MH0gbWluXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaGFjZSB7MH0gbWluXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwibWludXRlLW5hcnJvd1wiOiB7XG4gICAgICAgICAgXCIwXCI6IFwiZXN0ZSBtaW51dG9cIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImVuIHswfSBtaW5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJlbiB7MH0gbWluXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImhhY2UgezB9IG1pblwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImhhY2UgezB9IG1pblwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcInNlY29uZC1zaG9ydFwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwiYWhvcmFcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImVuIHswfSBzXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiZW4gezB9IHNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaGFjZSB7MH0gc1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImhhY2UgezB9IHNcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJzZWNvbmQtbmFycm93XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJhaG9yYVwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiK3swfSBzXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiK3swfSBzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImhhY2UgezB9IHNcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJoYWNlIHswfSBzXCJcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcImVzLVBZXCI6IHtcbiAgICAgICAgXCJzZWNvbmQtc2hvcnRcIjoge1xuICAgICAgICAgIFwiMFwiOiBcImFob3JhXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJkZW50cm8gZGUgezB9IHNlZy5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJkZW50cm8gZGUgezB9IHNlZy5cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaGFjZSB7MH0gc2VnLlwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImhhY2UgezB9IHNlZy5cIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJzZWNvbmQtbmFycm93XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJhaG9yYVwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiZGVudHJvIGRlIHswfSBzZWcuXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiZGVudHJvIGRlIHswfSBzZWcuXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImhhY2UgezB9IHNlZy5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJoYWNlIHswfSBzZWcuXCJcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcImVzLVNWXCI6IHtcbiAgICAgICAgXCJkYXlcIjoge1xuICAgICAgICAgIFwiMFwiOiBcImhveVwiLFxuICAgICAgICAgIFwiMVwiOiBcIm1hw7FhbmFcIixcbiAgICAgICAgICBcIjJcIjogXCJwYXNhZG8gbWHDsWFuYVwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiZGVudHJvIGRlIHswfSBkw61hXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiZGVudHJvIGRlIHswfSBkw61hc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJoYWNlIHswfSBkw61hXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaGFjZSB7MH0gZMOtYXNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMlwiOiBcImFudGllclwiLFxuICAgICAgICAgIFwiLTFcIjogXCJheWVyXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwiZXMtVVNcIjoge1xuICAgICAgICBcInllYXJcIjoge1xuICAgICAgICAgIFwiMFwiOiBcImVzdGUgYcOxb1wiLFxuICAgICAgICAgIFwiMVwiOiBcImVsIGHDsW8gcHLDs3hpbW9cIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImRlbnRybyBkZSB7MH0gYcOxb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImRlbnRybyBkZSB7MH0gYcOxb3NcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaGFjZSB7MH0gYcOxb1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImhhY2UgezB9IGHDsW9zXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJlbCBhw7FvIHBhc2Fkb1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwicXVhcnRlclwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwiZXN0ZSB0cmltZXN0cmVcIixcbiAgICAgICAgICBcIjFcIjogXCJlbCBwcsOzeGltbyB0cmltZXN0cmVcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImRlbnRybyBkZSB7MH0gdHJpbWV0cmVcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJkZW50cm8gZGUgezB9IHRyaW1ldHJlc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJoYWNlIHswfSB0cmltZXN0cmVcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJoYWNlIHswfSB0cmltZXN0cmVzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJlbCB0cmltZXN0cmUgcGFzYWRvXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtb250aFwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwiZXN0ZSBtZXNcIixcbiAgICAgICAgICBcIjFcIjogXCJlbCBtZXMgcHLDs3hpbW9cIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImRlbnRybyBkZSB7MH0gbWVzXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiZGVudHJvIGRlIHswfSBtZXNlc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJoYWNlIHswfSBtZXNcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJoYWNlIHswfSBtZXNlc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwiZWwgbWVzIHBhc2Fkb1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwid2Vla1wiOiB7XG4gICAgICAgICAgXCIwXCI6IFwiZXN0YSBzZW1hbmFcIixcbiAgICAgICAgICBcIjFcIjogXCJsYSBzZW1hbmEgcHLDs3hpbWFcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImRlbnRybyBkZSB7MH0gc2VtYW5hXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiZGVudHJvIGRlIHswfSBzZW1hbmFzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImhhY2UgezB9IHNlbWFuYVwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImhhY2UgezB9IHNlbWFuYXNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImxhIHNlbWFuYSBwYXNhZGFcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJlc1wiOiB7XG4gICAgICAgIFwibnVcIjogW1wibGF0blwiXSxcbiAgICAgICAgXCJ5ZWFyXCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJlc3RlIGHDsW9cIixcbiAgICAgICAgICBcIjFcIjogXCJlbCBwcsOzeGltbyBhw7FvXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJkZW50cm8gZGUgezB9IGHDsW9cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJkZW50cm8gZGUgezB9IGHDsW9zXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImhhY2UgezB9IGHDsW9cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJoYWNlIHswfSBhw7Fvc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwiZWwgYcOxbyBwYXNhZG9cIlxuICAgICAgICB9LFxuICAgICAgICBcInllYXItc2hvcnRcIjoge1xuICAgICAgICAgIFwiMFwiOiBcImVzdGUgYcOxb1wiLFxuICAgICAgICAgIFwiMVwiOiBcImVsIHByw7N4aW1vIGHDsW9cIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImRlbnRybyBkZSB7MH0gYVwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImRlbnRybyBkZSB7MH0gYVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJoYWNlIHswfSBhXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaGFjZSB7MH0gYVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwiZWwgYcOxbyBwYXNhZG9cIlxuICAgICAgICB9LFxuICAgICAgICBcInllYXItbmFycm93XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJlc3RlIGHDsW9cIixcbiAgICAgICAgICBcIjFcIjogXCJlbCBwcsOzeGltbyBhw7FvXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJkZW50cm8gZGUgezB9IGFcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJkZW50cm8gZGUgezB9IGFcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaGFjZSB7MH0gYVwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImhhY2UgezB9IGFcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImVsIGHDsW8gcGFzYWRvXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJxdWFydGVyXCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJlc3RlIHRyaW1lc3RyZVwiLFxuICAgICAgICAgIFwiMVwiOiBcImVsIHByw7N4aW1vIHRyaW1lc3RyZVwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiZGVudHJvIGRlIHswfSB0cmltZXN0cmVcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJkZW50cm8gZGUgezB9IHRyaW1lc3RyZXNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaGFjZSB7MH0gdHJpbWVzdHJlXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaGFjZSB7MH0gdHJpbWVzdHJlc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwiZWwgdHJpbWVzdHJlIHBhc2Fkb1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwicXVhcnRlci1zaG9ydFwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwiZXN0ZSB0cmltZXN0cmVcIixcbiAgICAgICAgICBcIjFcIjogXCJlbCBwcsOzeGltbyB0cmltZXN0cmVcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImRlbnRybyBkZSB7MH0gdHJpbS5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJkZW50cm8gZGUgezB9IHRyaW0uXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImhhY2UgezB9IHRyaW0uXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaGFjZSB7MH0gdHJpbS5cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImVsIHRyaW1lc3RyZSBwYXNhZG9cIlxuICAgICAgICB9LFxuICAgICAgICBcInF1YXJ0ZXItbmFycm93XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJlc3RlIHRyaW1lc3RyZVwiLFxuICAgICAgICAgIFwiMVwiOiBcImVsIHByw7N4aW1vIHRyaW1lc3RyZVwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiZGVudHJvIGRlIHswfSB0cmltLlwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImRlbnRybyBkZSB7MH0gdHJpbS5cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaGFjZSB7MH0gdHJpbS5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJoYWNlIHswfSB0cmltLlwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwiZWwgdHJpbWVzdHJlIHBhc2Fkb1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwibW9udGhcIjoge1xuICAgICAgICAgIFwiMFwiOiBcImVzdGUgbWVzXCIsXG4gICAgICAgICAgXCIxXCI6IFwiZWwgcHLDs3hpbW8gbWVzXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJkZW50cm8gZGUgezB9IG1lc1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImRlbnRybyBkZSB7MH0gbWVzZXNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaGFjZSB7MH0gbWVzXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaGFjZSB7MH0gbWVzZXNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImVsIG1lcyBwYXNhZG9cIlxuICAgICAgICB9LFxuICAgICAgICBcIm1vbnRoLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJlc3RlIG1lc1wiLFxuICAgICAgICAgIFwiMVwiOiBcImVsIHByw7N4aW1vIG1lc1wiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiZGVudHJvIGRlIHswfSBtXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiZGVudHJvIGRlIHswfSBtXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImhhY2UgezB9IG1cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJoYWNlIHswfSBtXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJlbCBtZXMgcGFzYWRvXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtb250aC1uYXJyb3dcIjoge1xuICAgICAgICAgIFwiMFwiOiBcImVzdGUgbWVzXCIsXG4gICAgICAgICAgXCIxXCI6IFwiZWwgcHLDs3hpbW8gbWVzXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJkZW50cm8gZGUgezB9IG1cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJkZW50cm8gZGUgezB9IG1cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaGFjZSB7MH0gbVwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImhhY2UgezB9IG1cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImVsIG1lcyBwYXNhZG9cIlxuICAgICAgICB9LFxuICAgICAgICBcIndlZWtcIjoge1xuICAgICAgICAgIFwiMFwiOiBcImVzdGEgc2VtYW5hXCIsXG4gICAgICAgICAgXCIxXCI6IFwibGEgcHLDs3hpbWEgc2VtYW5hXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJkZW50cm8gZGUgezB9IHNlbWFuYVwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImRlbnRybyBkZSB7MH0gc2VtYW5hc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJoYWNlIHswfSBzZW1hbmFcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJoYWNlIHswfSBzZW1hbmFzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJsYSBzZW1hbmEgcGFzYWRhXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ3ZWVrLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJlc3RhIHNlbS5cIixcbiAgICAgICAgICBcIjFcIjogXCJwcsOzeC4gc2VtLlwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiZGVudHJvIGRlIHswfSBzZW0uXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiZGVudHJvIGRlIHswfSBzZW0uXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImhhY2UgezB9IHNlbS5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJoYWNlIHswfSBzZW0uXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJzZW0uIGFudC5cIlxuICAgICAgICB9LFxuICAgICAgICBcIndlZWstbmFycm93XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJlc3RhIHNlbS5cIixcbiAgICAgICAgICBcIjFcIjogXCJwcsOzeC4gc2VtLlwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiZGVudHJvIGRlIHswfSBzZW0uXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiZGVudHJvIGRlIHswfSBzZW0uXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImhhY2UgezB9IHNlbS5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJoYWNlIHswfSBzZW0uXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJzZW0uIGFudC5cIlxuICAgICAgICB9LFxuICAgICAgICBcImRheVwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwiaG95XCIsXG4gICAgICAgICAgXCIxXCI6IFwibWHDsWFuYVwiLFxuICAgICAgICAgIFwiMlwiOiBcInBhc2FkbyBtYcOxYW5hXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJkZW50cm8gZGUgezB9IGTDrWFcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJkZW50cm8gZGUgezB9IGTDrWFzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImhhY2UgezB9IGTDrWFcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJoYWNlIHswfSBkw61hc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0yXCI6IFwiYW50ZWF5ZXJcIixcbiAgICAgICAgICBcIi0xXCI6IFwiYXllclwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGF5LXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJob3lcIixcbiAgICAgICAgICBcIjFcIjogXCJtYcOxYW5hXCIsXG4gICAgICAgICAgXCIyXCI6IFwicGFzYWRvIG1hw7FhbmFcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImRlbnRybyBkZSB7MH0gZMOtYVwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImRlbnRybyBkZSB7MH0gZMOtYXNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaGFjZSB7MH0gZMOtYVwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImhhY2UgezB9IGTDrWFzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTJcIjogXCJhbnRlYXllclwiLFxuICAgICAgICAgIFwiLTFcIjogXCJheWVyXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJkYXktbmFycm93XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJob3lcIixcbiAgICAgICAgICBcIjFcIjogXCJtYcOxYW5hXCIsXG4gICAgICAgICAgXCIyXCI6IFwicGFzYWRvIG1hw7FhbmFcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImRlbnRybyBkZSB7MH0gZMOtYVwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImRlbnRybyBkZSB7MH0gZMOtYXNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaGFjZSB7MH0gZMOtYVwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImhhY2UgezB9IGTDrWFzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTJcIjogXCJhbnRlYXllclwiLFxuICAgICAgICAgIFwiLTFcIjogXCJheWVyXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJob3VyXCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJlc3RhIGhvcmFcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImRlbnRybyBkZSB7MH0gaG9yYVwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImRlbnRybyBkZSB7MH0gaG9yYXNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaGFjZSB7MH0gaG9yYVwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImhhY2UgezB9IGhvcmFzXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiaG91ci1zaG9ydFwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwiZXN0YSBob3JhXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJkZW50cm8gZGUgezB9IGhcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJkZW50cm8gZGUgezB9IGhcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaGFjZSB7MH0gaFwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImhhY2UgezB9IGhcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJob3VyLW5hcnJvd1wiOiB7XG4gICAgICAgICAgXCIwXCI6IFwiZXN0YSBob3JhXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJkZW50cm8gZGUgezB9IGhcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJkZW50cm8gZGUgezB9IGhcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaGFjZSB7MH0gaFwiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImhhY2UgezB9IGhcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJtaW51dGVcIjoge1xuICAgICAgICAgIFwiMFwiOiBcImVzdGUgbWludXRvXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJkZW50cm8gZGUgezB9IG1pbnV0b1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImRlbnRybyBkZSB7MH0gbWludXRvc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJoYWNlIHswfSBtaW51dG9cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJoYWNlIHswfSBtaW51dG9zXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwibWludXRlLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJlc3RlIG1pbnV0b1wiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiZGVudHJvIGRlIHswfSBtaW5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJkZW50cm8gZGUgezB9IG1pblwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJoYWNlIHswfSBtaW5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJoYWNlIHswfSBtaW5cIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJtaW51dGUtbmFycm93XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJlc3RlIG1pbnV0b1wiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiZGVudHJvIGRlIHswfSBtaW5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJkZW50cm8gZGUgezB9IG1pblwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJoYWNlIHswfSBtaW5cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJoYWNlIHswfSBtaW5cIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJzZWNvbmRcIjoge1xuICAgICAgICAgIFwiMFwiOiBcImFob3JhXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJkZW50cm8gZGUgezB9IHNlZ3VuZG9cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJkZW50cm8gZGUgezB9IHNlZ3VuZG9zXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImhhY2UgezB9IHNlZ3VuZG9cIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJoYWNlIHswfSBzZWd1bmRvc1wiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcInNlY29uZC1zaG9ydFwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwiYWhvcmFcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm9uZVwiOiBcImRlbnRybyBkZSB7MH0gc1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImRlbnRybyBkZSB7MH0gc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJoYWNlIHswfSBzXCIsXG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiaGFjZSB7MH0gc1wiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcInNlY29uZC1uYXJyb3dcIjoge1xuICAgICAgICAgIFwiMFwiOiBcImFob3JhXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvbmVcIjogXCJkZW50cm8gZGUgezB9IHNcIixcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJkZW50cm8gZGUgezB9IHNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib25lXCI6IFwiaGFjZSB7MH0gc1wiLFxuICAgICAgICAgICAgXCJvdGhlclwiOiBcImhhY2UgezB9IHNcIlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgXCJhdmFpbGFibGVMb2NhbGVzXCI6IFtcImVzLTQxOVwiLCBcImVzLUFSXCIsIFwiZXMtQk9cIiwgXCJlcy1CUlwiLCBcImVzLUJaXCIsIFwiZXMtQ0xcIiwgXCJlcy1DT1wiLCBcImVzLUNSXCIsIFwiZXMtQ1VcIiwgXCJlcy1ET1wiLCBcImVzLUVBXCIsIFwiZXMtRUNcIiwgXCJlcy1HUVwiLCBcImVzLUdUXCIsIFwiZXMtSE5cIiwgXCJlcy1JQ1wiLCBcImVzLU1YXCIsIFwiZXMtTklcIiwgXCJlcy1QQVwiLCBcImVzLVBFXCIsIFwiZXMtUEhcIiwgXCJlcy1QUlwiLCBcImVzLVBZXCIsIFwiZXMtU1ZcIiwgXCJlcy1VU1wiLCBcImVzLVVZXCIsIFwiZXMtVkVcIiwgXCJlc1wiXSxcbiAgICBcImFsaWFzZXNcIjoge30sXG4gICAgXCJwYXJlbnRMb2NhbGVzXCI6IHtcbiAgICAgIFwiZXMtQVJcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtQk9cIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtQlJcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtQlpcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtQ0xcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtQ09cIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtQ1JcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtQ1VcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtRE9cIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtRUNcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtR1RcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtSE5cIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtTVhcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtTklcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtUEFcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtUEVcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtUFJcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtUFlcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtU1ZcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtVVNcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtVVlcIjogXCJlcy00MTlcIixcbiAgICAgIFwiZXMtVkVcIjogXCJlcy00MTlcIlxuICAgIH1cbiAgfSk7XG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4033\n')},9584:function(){eval('/* @generated */\n// prettier-ignore\nif (Intl.RelativeTimeFormat && typeof Intl.RelativeTimeFormat.__addLocaleData === \'function\') {\n Intl.RelativeTimeFormat.__addLocaleData({\n "data": {\n "ses": {\n "nu": ["latn"],\n "year": {\n "0": "this year",\n "1": "next year",\n "future": {\n "other": "+{0} y"\n },\n "past": {\n "other": "-{0} y"\n },\n "-1": "last year"\n },\n "year-short": {\n "0": "this year",\n "1": "next year",\n "future": {\n "other": "+{0} y"\n },\n "past": {\n "other": "-{0} y"\n },\n "-1": "last year"\n },\n "year-narrow": {\n "0": "this year",\n "1": "next year",\n "future": {\n "other": "+{0} y"\n },\n "past": {\n "other": "-{0} y"\n },\n "-1": "last year"\n },\n "quarter": {\n "0": "this quarter",\n "1": "next quarter",\n "future": {\n "other": "+{0} Q"\n },\n "past": {\n "other": "-{0} Q"\n },\n "-1": "last quarter"\n },\n "quarter-short": {\n "0": "this quarter",\n "1": "next quarter",\n "future": {\n "other": "+{0} Q"\n },\n "past": {\n "other": "-{0} Q"\n },\n "-1": "last quarter"\n },\n "quarter-narrow": {\n "0": "this quarter",\n "1": "next quarter",\n "future": {\n "other": "+{0} Q"\n },\n "past": {\n "other": "-{0} Q"\n },\n "-1": "last quarter"\n },\n "month": {\n "0": "this month",\n "1": "next month",\n "future": {\n "other": "+{0} m"\n },\n "past": {\n "other": "-{0} m"\n },\n "-1": "last month"\n },\n "month-short": {\n "0": "this month",\n "1": "next month",\n "future": {\n "other": "+{0} m"\n },\n "past": {\n "other": "-{0} m"\n },\n "-1": "last month"\n },\n "month-narrow": {\n "0": "this month",\n "1": "next month",\n "future": {\n "other": "+{0} m"\n },\n "past": {\n "other": "-{0} m"\n },\n "-1": "last month"\n },\n "week": {\n "0": "this week",\n "1": "next week",\n "future": {\n "other": "+{0} w"\n },\n "past": {\n "other": "-{0} w"\n },\n "-1": "last week"\n },\n "week-short": {\n "0": "this week",\n "1": "next week",\n "future": {\n "other": "+{0} w"\n },\n "past": {\n "other": "-{0} w"\n },\n "-1": "last week"\n },\n "week-narrow": {\n "0": "this week",\n "1": "next week",\n "future": {\n "other": "+{0} w"\n },\n "past": {\n "other": "-{0} w"\n },\n "-1": "last week"\n },\n "day": {\n "0": "Hõo",\n "1": "Suba",\n "future": {\n "other": "+{0} d"\n },\n "past": {\n "other": "-{0} d"\n },\n "-1": "Bi"\n },\n "day-short": {\n "0": "Hõo",\n "1": "Suba",\n "future": {\n "other": "+{0} d"\n },\n "past": {\n "other": "-{0} d"\n },\n "-1": "Bi"\n },\n "day-narrow": {\n "0": "Hõo",\n "1": "Suba",\n "future": {\n "other": "+{0} d"\n },\n "past": {\n "other": "-{0} d"\n },\n "-1": "Bi"\n },\n "hour": {\n "0": "this hour",\n "future": {\n "other": "+{0} h"\n },\n "past": {\n "other": "-{0} h"\n }\n },\n "hour-short": {\n "0": "this hour",\n "future": {\n "other": "+{0} h"\n },\n "past": {\n "other": "-{0} h"\n }\n },\n "hour-narrow": {\n "0": "this hour",\n "future": {\n "other": "+{0} h"\n },\n "past": {\n "other": "-{0} h"\n }\n },\n "minute": {\n "0": "this minute",\n "future": {\n "other": "+{0} min"\n },\n "past": {\n "other": "-{0} min"\n }\n },\n "minute-short": {\n "0": "this minute",\n "future": {\n "other": "+{0} min"\n },\n "past": {\n "other": "-{0} min"\n }\n },\n "minute-narrow": {\n "0": "this minute",\n "future": {\n "other": "+{0} min"\n },\n "past": {\n "other": "-{0} min"\n }\n },\n "second": {\n "0": "now",\n "future": {\n "other": "+{0} s"\n },\n "past": {\n "other": "-{0} s"\n }\n },\n "second-short": {\n "0": "now",\n "future": {\n "other": "+{0} s"\n },\n "past": {\n "other": "-{0} s"\n }\n },\n "second-narrow": {\n "0": "now",\n "future": {\n "other": "+{0} s"\n },\n "past": {\n "other": "-{0} s"\n }\n }\n }\n },\n "availableLocales": ["ses"],\n "aliases": {},\n "parentLocales": {}\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AZm9ybWF0anMvaW50bC1yZWxhdGl2ZXRpbWVmb3JtYXQvZGlzdC9sb2NhbGUtZGF0YS9zZXMuanM/Mjg4ZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLFdBQVc7QUFDWDtBQUNBLHdCQUF3QixFQUFFO0FBQzFCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLFdBQVc7QUFDWDtBQUNBLHdCQUF3QixFQUFFO0FBQzFCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLFdBQVc7QUFDWDtBQUNBLHdCQUF3QixFQUFFO0FBQzFCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLFdBQVc7QUFDWDtBQUNBLHdCQUF3QixFQUFFO0FBQzFCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLFdBQVc7QUFDWDtBQUNBLHdCQUF3QixFQUFFO0FBQzFCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLFdBQVc7QUFDWDtBQUNBLHdCQUF3QixFQUFFO0FBQzFCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLFdBQVc7QUFDWDtBQUNBLHdCQUF3QixFQUFFO0FBQzFCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLFdBQVc7QUFDWDtBQUNBLHdCQUF3QixFQUFFO0FBQzFCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixFQUFFO0FBQzFCLFdBQVc7QUFDWDtBQUNBLHdCQUF3QixFQUFFO0FBQzFCO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBLEdBQUc7QUFDSCIsImZpbGUiOiI5NTg0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogQGdlbmVyYXRlZCAqL1xuLy8gcHJldHRpZXItaWdub3JlXG5pZiAoSW50bC5SZWxhdGl2ZVRpbWVGb3JtYXQgJiYgdHlwZW9mIEludGwuUmVsYXRpdmVUaW1lRm9ybWF0Ll9fYWRkTG9jYWxlRGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xuICBJbnRsLlJlbGF0aXZlVGltZUZvcm1hdC5fX2FkZExvY2FsZURhdGEoe1xuICAgIFwiZGF0YVwiOiB7XG4gICAgICBcInNlc1wiOiB7XG4gICAgICAgIFwibnVcIjogW1wibGF0blwiXSxcbiAgICAgICAgXCJ5ZWFyXCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIHllYXJcIixcbiAgICAgICAgICBcIjFcIjogXCJuZXh0IHllYXJcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiK3swfSB5XCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiLXswfSB5XCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJsYXN0IHllYXJcIlxuICAgICAgICB9LFxuICAgICAgICBcInllYXItc2hvcnRcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgeWVhclwiLFxuICAgICAgICAgIFwiMVwiOiBcIm5leHQgeWVhclwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCIrezB9IHlcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCItezB9IHlcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImxhc3QgeWVhclwiXG4gICAgICAgIH0sXG4gICAgICAgIFwieWVhci1uYXJyb3dcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgeWVhclwiLFxuICAgICAgICAgIFwiMVwiOiBcIm5leHQgeWVhclwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCIrezB9IHlcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCItezB9IHlcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImxhc3QgeWVhclwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicXVhcnRlclwiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyBxdWFydGVyXCIsXG4gICAgICAgICAgXCIxXCI6IFwibmV4dCBxdWFydGVyXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvdGhlclwiOiBcIit7MH0gUVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvdGhlclwiOiBcIi17MH0gUVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwibGFzdCBxdWFydGVyXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJxdWFydGVyLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIHF1YXJ0ZXJcIixcbiAgICAgICAgICBcIjFcIjogXCJuZXh0IHF1YXJ0ZXJcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiK3swfSBRXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiLXswfSBRXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJsYXN0IHF1YXJ0ZXJcIlxuICAgICAgICB9LFxuICAgICAgICBcInF1YXJ0ZXItbmFycm93XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIHF1YXJ0ZXJcIixcbiAgICAgICAgICBcIjFcIjogXCJuZXh0IHF1YXJ0ZXJcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiK3swfSBRXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiLXswfSBRXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJsYXN0IHF1YXJ0ZXJcIlxuICAgICAgICB9LFxuICAgICAgICBcIm1vbnRoXCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIG1vbnRoXCIsXG4gICAgICAgICAgXCIxXCI6IFwibmV4dCBtb250aFwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCIrezB9IG1cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCItezB9IG1cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImxhc3QgbW9udGhcIlxuICAgICAgICB9LFxuICAgICAgICBcIm1vbnRoLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIG1vbnRoXCIsXG4gICAgICAgICAgXCIxXCI6IFwibmV4dCBtb250aFwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCIrezB9IG1cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCItezB9IG1cIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImxhc3QgbW9udGhcIlxuICAgICAgICB9LFxuICAgICAgICBcIm1vbnRoLW5hcnJvd1wiOiB7XG4gICAgICAgICAgXCIwXCI6IFwidGhpcyBtb250aFwiLFxuICAgICAgICAgIFwiMVwiOiBcIm5leHQgbW9udGhcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiK3swfSBtXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiLXswfSBtXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJsYXN0IG1vbnRoXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ3ZWVrXCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIHdlZWtcIixcbiAgICAgICAgICBcIjFcIjogXCJuZXh0IHdlZWtcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiK3swfSB3XCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiLXswfSB3XCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLTFcIjogXCJsYXN0IHdlZWtcIlxuICAgICAgICB9LFxuICAgICAgICBcIndlZWstc2hvcnRcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgd2Vla1wiLFxuICAgICAgICAgIFwiMVwiOiBcIm5leHQgd2Vla1wiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCIrezB9IHdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCItezB9IHdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImxhc3Qgd2Vla1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwid2Vlay1uYXJyb3dcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgd2Vla1wiLFxuICAgICAgICAgIFwiMVwiOiBcIm5leHQgd2Vla1wiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCIrezB9IHdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCItezB9IHdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcImxhc3Qgd2Vla1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGF5XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJIw7VvXCIsXG4gICAgICAgICAgXCIxXCI6IFwiU3ViYVwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCIrezB9IGRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCItezB9IGRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCItMVwiOiBcIkJpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJkYXktc2hvcnRcIjoge1xuICAgICAgICAgIFwiMFwiOiBcIkjDtW9cIixcbiAgICAgICAgICBcIjFcIjogXCJTdWJhXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvdGhlclwiOiBcIit7MH0gZFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvdGhlclwiOiBcIi17MH0gZFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwiQmlcIlxuICAgICAgICB9LFxuICAgICAgICBcImRheS1uYXJyb3dcIjoge1xuICAgICAgICAgIFwiMFwiOiBcIkjDtW9cIixcbiAgICAgICAgICBcIjFcIjogXCJTdWJhXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvdGhlclwiOiBcIit7MH0gZFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvdGhlclwiOiBcIi17MH0gZFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi0xXCI6IFwiQmlcIlxuICAgICAgICB9LFxuICAgICAgICBcImhvdXJcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgaG91clwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCIrezB9IGhcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCItezB9IGhcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJob3VyLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIGhvdXJcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiK3swfSBoXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiLXswfSBoXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiaG91ci1uYXJyb3dcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgaG91clwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCIrezB9IGhcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJwYXN0XCI6IHtcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCItezB9IGhcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJtaW51dGVcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgbWludXRlXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvdGhlclwiOiBcIit7MH0gbWluXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiLXswfSBtaW5cIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJtaW51dGUtc2hvcnRcIjoge1xuICAgICAgICAgIFwiMFwiOiBcInRoaXMgbWludXRlXCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvdGhlclwiOiBcIit7MH0gbWluXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiLXswfSBtaW5cIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJtaW51dGUtbmFycm93XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJ0aGlzIG1pbnV0ZVwiLFxuICAgICAgICAgIFwiZnV0dXJlXCI6IHtcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCIrezB9IG1pblwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvdGhlclwiOiBcIi17MH0gbWluXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwic2Vjb25kXCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJub3dcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiK3swfSBzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiLXswfSBzXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwic2Vjb25kLXNob3J0XCI6IHtcbiAgICAgICAgICBcIjBcIjogXCJub3dcIixcbiAgICAgICAgICBcImZ1dHVyZVwiOiB7XG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiK3swfSBzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFzdFwiOiB7XG4gICAgICAgICAgICBcIm90aGVyXCI6IFwiLXswfSBzXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwic2Vjb25kLW5hcnJvd1wiOiB7XG4gICAgICAgICAgXCIwXCI6IFwibm93XCIsXG4gICAgICAgICAgXCJmdXR1cmVcIjoge1xuICAgICAgICAgICAgXCJvdGhlclwiOiBcIit7MH0gc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhc3RcIjoge1xuICAgICAgICAgICAgXCJvdGhlclwiOiBcIi17MH0gc1wiXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBcImF2YWlsYWJsZUxvY2FsZXNcIjogW1wic2VzXCJdLFxuICAgIFwiYWxpYXNlc1wiOiB7fSxcbiAgICBcInBhcmVudExvY2FsZXNcIjoge31cbiAgfSk7XG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9584\n')},8709:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n\nvar core_1 = __webpack_require__(9905);\n\nif (!('RelativeTimeFormat' in Intl)) {\n Object.defineProperty(Intl, 'RelativeTimeFormat', {\n value: core_1.default,\n writable: true,\n enumerable: false,\n configurable: true\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AZm9ybWF0anMvaW50bC1yZWxhdGl2ZXRpbWVmb3JtYXQvZGlzdC9wb2x5ZmlsbC5qcz83ODNjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhOztBQUViLDhDQUE2QztBQUM3QztBQUNBLENBQUMsRUFBQzs7QUFFRixhQUFhLG1CQUFPLENBQUMsSUFBUTs7QUFFN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIIiwiZmlsZSI6Ijg3MDkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIGNvcmVfMSA9IHJlcXVpcmUoXCIuL2NvcmVcIik7XG5cbmlmICghKCdSZWxhdGl2ZVRpbWVGb3JtYXQnIGluIEludGwpKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJbnRsLCAnUmVsYXRpdmVUaW1lRm9ybWF0Jywge1xuICAgIHZhbHVlOiBjb3JlXzEuZGVmYXVsdCxcbiAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSk7XG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8709\n")},5316:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("__webpack_require__(8709);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AZm9ybWF0anMvaW50bC1yZWxhdGl2ZXRpbWVmb3JtYXQvcG9seWZpbGwuanM/OWM0ZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtQkFBTyxDQUFDLElBQWlCIiwiZmlsZSI6IjUzMTYuanMiLCJzb3VyY2VzQ29udGVudCI6WyJyZXF1aXJlKCcuL2Rpc3QvcG9seWZpbGwnKTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5316\n")},2650:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n "InternalSlotToken": function() { return /* reexport */ InternalSlotToken; },\n "SANCTIONED_UNITS": function() { return /* reexport */ SANCTIONED_UNITS; },\n "createResolveLocale": function() { return /* reexport */ createResolveLocale; },\n "defaultNumberOption": function() { return /* reexport */ defaultNumberOption; },\n "getAliasesByLang": function() { return /* reexport */ getAliasesByLang; },\n "getCanonicalLocales": function() { return /* reexport */ getCanonicalLocales; },\n "getInternalSlot": function() { return /* reexport */ getInternalSlot; },\n "getLocaleHierarchy": function() { return /* reexport */ getLocaleHierarchy; },\n "getMultiInternalSlots": function() { return /* reexport */ getMultiInternalSlots; },\n "getNumberOption": function() { return /* reexport */ getNumberOption; },\n "getOption": function() { return /* reexport */ getOption; },\n "getParentLocalesByLang": function() { return /* reexport */ getParentLocalesByLang; },\n "invariant": function() { return /* reexport */ invariant/* invariant */.k; },\n "isLiteralPart": function() { return /* reexport */ isLiteralPart; },\n "isMissingLocaleDataError": function() { return /* reexport */ isMissingLocaleDataError; },\n "isWellFormedCurrencyCode": function() { return /* reexport */ isWellFormedCurrencyCode; },\n "objectIs": function() { return /* reexport */ objectIs; },\n "partitionPattern": function() { return /* reexport */ partitionPattern; },\n "removeUnitNamespace": function() { return /* reexport */ removeUnitNamespace; },\n "selectUnit": function() { return /* reexport */ selectUnit; },\n "setInternalSlot": function() { return /* reexport */ setInternalSlot; },\n "setMultiInternalSlots": function() { return /* reexport */ setMultiInternalSlots; },\n "setNumberFormatDigitOptions": function() { return /* reexport */ setNumberFormatDigitOptions; },\n "supportedLocales": function() { return /* reexport */ supportedLocales; },\n "toObject": function() { return /* reexport */ toObject; },\n "toString": function() { return /* reexport */ polyfill_utils_toString; },\n "unpackData": function() { return /* reexport */ unpackData; }\n});\n\n;// CONCATENATED MODULE: ./node_modules/@formatjs/intl-utils/lib/diff.js\nvar __assign = undefined && undefined.__assign || function () {\n __assign = Object.assign || function (t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n\n for (var p in s) {\n if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n }\n\n return t;\n };\n\n return __assign.apply(this, arguments);\n};\n\nvar MS_PER_SECOND = 1e3;\nvar SECS_PER_MIN = 60;\nvar SECS_PER_HOUR = SECS_PER_MIN * 60;\nvar SECS_PER_DAY = SECS_PER_HOUR * 24;\nvar SECS_PER_WEEK = SECS_PER_DAY * 7;\nfunction selectUnit(from, to, thresholds) {\n if (to === void 0) {\n to = Date.now();\n }\n\n if (thresholds === void 0) {\n thresholds = {};\n }\n\n var resolvedThresholds = __assign(__assign({}, DEFAULT_THRESHOLDS), thresholds || {});\n\n var secs = (+from - +to) / MS_PER_SECOND;\n\n if (Math.abs(secs) < resolvedThresholds.second) {\n return {\n value: Math.round(secs),\n unit: \'second\'\n };\n }\n\n var mins = secs / SECS_PER_MIN;\n\n if (Math.abs(mins) < resolvedThresholds.minute) {\n return {\n value: Math.round(mins),\n unit: \'minute\'\n };\n }\n\n var hours = secs / SECS_PER_HOUR;\n\n if (Math.abs(hours) < resolvedThresholds.hour) {\n return {\n value: Math.round(hours),\n unit: \'hour\'\n };\n }\n\n var days = secs / SECS_PER_DAY;\n\n if (Math.abs(days) < resolvedThresholds.day) {\n return {\n value: Math.round(days),\n unit: \'day\'\n };\n }\n\n var fromDate = new Date(from);\n var toDate = new Date(to);\n var years = fromDate.getFullYear() - toDate.getFullYear();\n\n if (Math.round(Math.abs(years)) > 0) {\n return {\n value: Math.round(years),\n unit: \'year\'\n };\n }\n\n var months = years * 12 + fromDate.getMonth() - toDate.getMonth();\n\n if (Math.round(Math.abs(months)) > 0) {\n return {\n value: Math.round(months),\n unit: \'month\'\n };\n }\n\n var weeks = secs / SECS_PER_WEEK;\n return {\n value: Math.round(weeks),\n unit: \'week\'\n };\n}\nvar DEFAULT_THRESHOLDS = {\n second: 45,\n minute: 45,\n hour: 22,\n day: 5\n};\n;// CONCATENATED MODULE: ./node_modules/@formatjs/intl-utils/lib/aliases.js\n/* @generated */\n// prettier-ignore \n/* harmony default export */ var aliases = ({\n "aa-SAAHO": "ssy",\n "aam": "aas",\n "aar": "aa",\n "abk": "ab",\n "adp": "dz",\n "afr": "af",\n "aju": "jrb",\n "aka": "ak",\n "alb": "sq",\n "als": "sq",\n "amh": "am",\n "ara": "ar",\n "arb": "ar",\n "arg": "an",\n "arm": "hy",\n "art-lojban": "jbo",\n "asd": "snz",\n "asm": "as",\n "aue": "ktz",\n "ava": "av",\n "ave": "ae",\n "aym": "ay",\n "ayr": "ay",\n "ayx": "nun",\n "az-AZ": "az-Latn-AZ",\n "aze": "az",\n "azj": "az",\n "bak": "ba",\n "bam": "bm",\n "baq": "eu",\n "bcc": "bal",\n "bcl": "bik",\n "bel": "be",\n "ben": "bn",\n "bgm": "bcg",\n "bh": "bho",\n "bih": "bho",\n "bis": "bi",\n "bjd": "drl",\n "bod": "bo",\n "bos": "bs",\n "bre": "br",\n "bs-BA": "bs-Latn-BA",\n "bul": "bg",\n "bur": "my",\n "bxk": "luy",\n "bxr": "bua",\n "cat": "ca",\n "ccq": "rki",\n "cel-gaulish": "xtg-x-cel-gaulish",\n "ces": "cs",\n "cha": "ch",\n "che": "ce",\n "chi": "zh",\n "chu": "cu",\n "chv": "cv",\n "cjr": "mom",\n "cka": "cmr",\n "cld": "syr",\n "cmk": "xch",\n "cmn": "zh",\n "cnr": "sr-ME",\n "cor": "kw",\n "cos": "co",\n "coy": "pij",\n "cqu": "quh",\n "cre": "cr",\n "cwd": "cr",\n "cym": "cy",\n "cze": "cs",\n "dan": "da",\n "deu": "de",\n "dgo": "doi",\n "dhd": "mwr",\n "dik": "din",\n "diq": "zza",\n "dit": "dif",\n "div": "dv",\n "drh": "mn",\n "drw": "fa-af",\n "dut": "nl",\n "dzo": "dz",\n "ekk": "et",\n "ell": "el",\n "emk": "man",\n "eng": "en",\n "epo": "eo",\n "esk": "ik",\n "est": "et",\n "eus": "eu",\n "ewe": "ee",\n "fao": "fo",\n "fas": "fa",\n "fat": "ak",\n "fij": "fj",\n "fin": "fi",\n "fra": "fr",\n "fre": "fr",\n "fry": "fy",\n "fuc": "ff",\n "ful": "ff",\n "gav": "dev",\n "gaz": "om",\n "gbo": "grb",\n "geo": "ka",\n "ger": "de",\n "gfx": "vaj",\n "ggn": "gvr",\n "gla": "gd",\n "gle": "ga",\n "glg": "gl",\n "glv": "gv",\n "gno": "gon",\n "gre": "el",\n "grn": "gn",\n "gti": "nyc",\n "gug": "gn",\n "guj": "gu",\n "guv": "duz",\n "gya": "gba",\n "ha-Latn-GH": "ha-GH",\n "ha-Latn-NE": "ha-NE",\n "ha-Latn-NG": "ha-NG",\n "hat": "ht",\n "hau": "ha",\n "hbs": "sr-Latn",\n "hdn": "hai",\n "hea": "hmn",\n "heb": "he",\n "her": "hz",\n "him": "srx",\n "hin": "hi",\n "hmo": "ho",\n "hrr": "jal",\n "hrv": "hr",\n "hun": "hu",\n "hye": "hy",\n "i-ami": "ami",\n "i-bnn": "bnn",\n "i-hak": "hak",\n "i-klingon": "tlh",\n "i-lux": "lb",\n "i-navajo": "nv",\n "i-pwn": "pwn",\n "i-tao": "tao",\n "i-tay": "tay",\n "i-tsu": "tsu",\n "i-default": "en-x-i-default",\n "i-enochian": "und-x-i-enochian",\n "i-mingo": "see-x-i-mingo",\n "ibi": "opa",\n "ibo": "ig",\n "ice": "is",\n "ido": "io",\n "iii": "ii",\n "ike": "iu",\n "iku": "iu",\n "ile": "ie",\n "ilw": "gal",\n "in": "id",\n "ina": "ia",\n "ind": "id",\n "ipk": "ik",\n "isl": "is",\n "ita": "it",\n "iw": "he",\n "jav": "jv",\n "jeg": "oyb",\n "ji": "yi",\n "jpn": "ja",\n "jw": "jv",\n "kal": "kl",\n "kan": "kn",\n "kas": "ks",\n "kat": "ka",\n "kau": "kr",\n "kaz": "kk",\n "kgc": "tdf",\n "kgh": "kml",\n "khk": "mn",\n "khm": "km",\n "kik": "ki",\n "kin": "rw",\n "kir": "ky",\n "kk-Cyrl-KZ": "kk-KZ",\n "kmr": "ku",\n "knc": "kr",\n "kng": "kg",\n "knn": "kok",\n "koj": "kwv",\n "kom": "kv",\n "kon": "kg",\n "kor": "ko",\n "kpv": "kv",\n "krm": "bmf",\n "ks-Arab-IN": "ks-IN",\n "ktr": "dtp",\n "kua": "kj",\n "kur": "ku",\n "kvs": "gdj",\n "kwq": "yam",\n "kxe": "tvd",\n "ky-Cyrl-KG": "ky-KG",\n "kzj": "dtp",\n "kzt": "dtp",\n "lao": "lo",\n "lat": "la",\n "lav": "lv",\n "lbk": "bnc",\n "lii": "raq",\n "lim": "li",\n "lin": "ln",\n "lit": "lt",\n "llo": "ngt",\n "lmm": "rmx",\n "ltz": "lb",\n "lub": "lu",\n "lug": "lg",\n "lvs": "lv",\n "mac": "mk",\n "mah": "mh",\n "mal": "ml",\n "mao": "mi",\n "mar": "mr",\n "may": "ms",\n "meg": "cir",\n "mhr": "chm",\n "mkd": "mk",\n "mlg": "mg",\n "mlt": "mt",\n "mn-Cyrl-MN": "mn-MN",\n "mnk": "man",\n "mo": "ro",\n "mol": "ro",\n "mon": "mn",\n "mri": "mi",\n "ms-Latn-BN": "ms-BN",\n "ms-Latn-MY": "ms-MY",\n "ms-Latn-SG": "ms-SG",\n "msa": "ms",\n "mst": "mry",\n "mup": "raj",\n "mwj": "vaj",\n "mya": "my",\n "myd": "aog",\n "myt": "mry",\n "nad": "xny",\n "nau": "na",\n "nav": "nv",\n "nbl": "nr",\n "ncp": "kdz",\n "nde": "nd",\n "ndo": "ng",\n "nep": "ne",\n "nld": "nl",\n "nno": "nn",\n "nns": "nbr",\n "nnx": "ngv",\n "no": "nb",\n "no-bok": "nb",\n "no-BOKMAL": "nb",\n "no-nyn": "nn",\n "no-NYNORSK": "nn",\n "nob": "nb",\n "nor": "nb",\n "npi": "ne",\n "nts": "pij",\n "nya": "ny",\n "oci": "oc",\n "ojg": "oj",\n "oji": "oj",\n "ori": "or",\n "orm": "om",\n "ory": "or",\n "oss": "os",\n "oun": "vaj",\n "pa-IN": "pa-Guru-IN",\n "pa-PK": "pa-Arab-PK",\n "pan": "pa",\n "pbu": "ps",\n "pcr": "adx",\n "per": "fa",\n "pes": "fa",\n "pli": "pi",\n "plt": "mg",\n "pmc": "huw",\n "pmu": "phr",\n "pnb": "lah",\n "pol": "pl",\n "por": "pt",\n "ppa": "bfy",\n "ppr": "lcq",\n "prs": "fa-AF",\n "pry": "prt",\n "pus": "ps",\n "puz": "pub",\n "que": "qu",\n "quz": "qu",\n "rmy": "rom",\n "roh": "rm",\n "ron": "ro",\n "rum": "ro",\n "run": "rn",\n "rus": "ru",\n "sag": "sg",\n "san": "sa",\n "sca": "hle",\n "scc": "sr",\n "scr": "hr",\n "sgn-BE-FR": "sfb",\n "sgn-BE-NL": "vgt",\n "sgn-CH-DE": "sgg",\n "sh": "sr-Latn",\n "shi-MA": "shi-Tfng-MA",\n "sin": "si",\n "skk": "oyb",\n "slk": "sk",\n "slo": "sk",\n "slv": "sl",\n "sme": "se",\n "smo": "sm",\n "sna": "sn",\n "snd": "sd",\n "som": "so",\n "sot": "st",\n "spa": "es",\n "spy": "kln",\n "sqi": "sq",\n "sr-BA": "sr-Cyrl-BA",\n "sr-ME": "sr-Latn-ME",\n "sr-RS": "sr-Cyrl-RS",\n "sr-XK": "sr-Cyrl-XK",\n "src": "sc",\n "srd": "sc",\n "srp": "sr",\n "ssw": "ss",\n "sun": "su",\n "swa": "sw",\n "swc": "sw-CD",\n "swe": "sv",\n "swh": "sw",\n "tah": "ty",\n "tam": "ta",\n "tat": "tt",\n "tdu": "dtp",\n "tel": "te",\n "tgk": "tg",\n "tgl": "fil",\n "tha": "th",\n "thc": "tpo",\n "thx": "oyb",\n "tib": "bo",\n "tie": "ras",\n "tir": "ti",\n "tkk": "twm",\n "tl": "fil",\n "tlw": "weo",\n "tmp": "tyj",\n "tne": "kak",\n "tnf": "fa-af",\n "ton": "to",\n "tsf": "taj",\n "tsn": "tn",\n "tso": "ts",\n "ttq": "tmh",\n "tuk": "tk",\n "tur": "tr",\n "tw": "ak",\n "twi": "ak",\n "tzm-Latn-MA": "tzm-MA",\n "ug-Arab-CN": "ug-CN",\n "uig": "ug",\n "ukr": "uk",\n "umu": "del",\n "uok": "ema",\n "urd": "ur",\n "uz-AF": "uz-Arab-AF",\n "uz-UZ": "uz-Latn-UZ",\n "uzb": "uz",\n "uzn": "uz",\n "vai-LR": "vai-Vaii-LR",\n "ven": "ve",\n "vie": "vi",\n "vol": "vo",\n "wel": "cy",\n "wln": "wa",\n "wol": "wo",\n "xba": "cax",\n "xho": "xh",\n "xia": "acn",\n "xkh": "waw",\n "xpe": "kpe",\n "xsj": "suj",\n "xsl": "den",\n "ybd": "rki",\n "ydd": "yi",\n "yid": "yi",\n "yma": "lrr",\n "ymt": "mtm",\n "yor": "yo",\n "yos": "zom",\n "yue-CN": "yue-Hans-CN",\n "yue-HK": "yue-Hant-HK",\n "yuu": "yug",\n "zai": "zap",\n "zh-CN": "zh-Hans-CN",\n "zh-guoyu": "zh",\n "zh-hakka": "hak",\n "zh-HK": "zh-Hant-HK",\n "zh-min-nan": "nan",\n "zh-MO": "zh-Hant-MO",\n "zh-SG": "zh-Hans-SG",\n "zh-TW": "zh-Hant-TW",\n "zh-xiang": "hsn",\n "zh-min": "nan-x-zh-min",\n "zha": "za",\n "zho": "zh",\n "zsm": "ms",\n "zul": "zu",\n "zyb": "za"\n});\n;// CONCATENATED MODULE: ./node_modules/@formatjs/intl-utils/lib/parentLocales.js\n/* @generated */\n// prettier-ignore \n/* harmony default export */ var parentLocales = ({\n "en-150": "en-001",\n "en-AG": "en-001",\n "en-AI": "en-001",\n "en-AU": "en-001",\n "en-BB": "en-001",\n "en-BM": "en-001",\n "en-BS": "en-001",\n "en-BW": "en-001",\n "en-BZ": "en-001",\n "en-CA": "en-001",\n "en-CC": "en-001",\n "en-CK": "en-001",\n "en-CM": "en-001",\n "en-CX": "en-001",\n "en-CY": "en-001",\n "en-DG": "en-001",\n "en-DM": "en-001",\n "en-ER": "en-001",\n "en-FJ": "en-001",\n "en-FK": "en-001",\n "en-FM": "en-001",\n "en-GB": "en-001",\n "en-GD": "en-001",\n "en-GG": "en-001",\n "en-GH": "en-001",\n "en-GI": "en-001",\n "en-GM": "en-001",\n "en-GY": "en-001",\n "en-HK": "en-001",\n "en-IE": "en-001",\n "en-IL": "en-001",\n "en-IM": "en-001",\n "en-IN": "en-001",\n "en-IO": "en-001",\n "en-JE": "en-001",\n "en-JM": "en-001",\n "en-KE": "en-001",\n "en-KI": "en-001",\n "en-KN": "en-001",\n "en-KY": "en-001",\n "en-LC": "en-001",\n "en-LR": "en-001",\n "en-LS": "en-001",\n "en-MG": "en-001",\n "en-MO": "en-001",\n "en-MS": "en-001",\n "en-MT": "en-001",\n "en-MU": "en-001",\n "en-MW": "en-001",\n "en-MY": "en-001",\n "en-NA": "en-001",\n "en-NF": "en-001",\n "en-NG": "en-001",\n "en-NR": "en-001",\n "en-NU": "en-001",\n "en-NZ": "en-001",\n "en-PG": "en-001",\n "en-PH": "en-001",\n "en-PK": "en-001",\n "en-PN": "en-001",\n "en-PW": "en-001",\n "en-RW": "en-001",\n "en-SB": "en-001",\n "en-SC": "en-001",\n "en-SD": "en-001",\n "en-SG": "en-001",\n "en-SH": "en-001",\n "en-SL": "en-001",\n "en-SS": "en-001",\n "en-SX": "en-001",\n "en-SZ": "en-001",\n "en-TC": "en-001",\n "en-TK": "en-001",\n "en-TO": "en-001",\n "en-TT": "en-001",\n "en-TV": "en-001",\n "en-TZ": "en-001",\n "en-UG": "en-001",\n "en-VC": "en-001",\n "en-VG": "en-001",\n "en-VU": "en-001",\n "en-WS": "en-001",\n "en-ZA": "en-001",\n "en-ZM": "en-001",\n "en-ZW": "en-001",\n "en-AT": "en-150",\n "en-BE": "en-150",\n "en-CH": "en-150",\n "en-DE": "en-150",\n "en-DK": "en-150",\n "en-FI": "en-150",\n "en-NL": "en-150",\n "en-SE": "en-150",\n "en-SI": "en-150",\n "es-AR": "es-419",\n "es-BO": "es-419",\n "es-BR": "es-419",\n "es-BZ": "es-419",\n "es-CL": "es-419",\n "es-CO": "es-419",\n "es-CR": "es-419",\n "es-CU": "es-419",\n "es-DO": "es-419",\n "es-EC": "es-419",\n "es-GT": "es-419",\n "es-HN": "es-419",\n "es-MX": "es-419",\n "es-NI": "es-419",\n "es-PA": "es-419",\n "es-PE": "es-419",\n "es-PR": "es-419",\n "es-PY": "es-419",\n "es-SV": "es-419",\n "es-US": "es-419",\n "es-UY": "es-419",\n "es-VE": "es-419",\n "pt-AO": "pt-PT",\n "pt-CH": "pt-PT",\n "pt-CV": "pt-PT",\n "pt-FR": "pt-PT",\n "pt-GQ": "pt-PT",\n "pt-GW": "pt-PT",\n "pt-LU": "pt-PT",\n "pt-MO": "pt-PT",\n "pt-MZ": "pt-PT",\n "pt-ST": "pt-PT",\n "pt-TL": "pt-PT",\n "zh-Hant-MO": "zh-Hant-HK"\n});\n// EXTERNAL MODULE: ./node_modules/@formatjs/intl-utils/lib/invariant.js\nvar invariant = __webpack_require__(5981);\n;// CONCATENATED MODULE: ./node_modules/@formatjs/intl-utils/lib/polyfill-utils.js\n\n\n\n/**\n * https://tc39.es/ecma262/#sec-toobject\n * @param arg\n */\n\nfunction toObject(arg) {\n if (arg == null) {\n throw new TypeError(\'undefined/null cannot be converted to object\');\n }\n\n return Object(arg);\n}\n/**\n * https://tc39.es/ecma262/#sec-tostring\n */\n\nfunction polyfill_utils_toString(o) {\n // Only symbol is irregular...\n if (typeof o === \'symbol\') {\n throw TypeError(\'Cannot convert a Symbol value to a string\');\n }\n\n return String(o);\n}\n/**\n * https://tc39.es/ecma402/#sec-getoption\n * @param opts\n * @param prop\n * @param type\n * @param values\n * @param fallback\n */\n\nfunction getOption(opts, prop, type, values, fallback) {\n // const descriptor = Object.getOwnPropertyDescriptor(opts, prop);\n var value = opts[prop];\n\n if (value !== undefined) {\n if (type !== \'boolean\' && type !== \'string\') {\n throw new TypeError(\'invalid type\');\n }\n\n if (type === \'boolean\') {\n value = Boolean(value);\n }\n\n if (type === \'string\') {\n value = polyfill_utils_toString(value);\n }\n\n if (values !== undefined && !values.filter(function (val) {\n return val == value;\n }).length) {\n throw new RangeError(value + " is not within " + values.join(\', \'));\n }\n\n return value;\n }\n\n return fallback;\n}\n/**\n * https://tc39.es/ecma402/#sec-defaultnumberoption\n * @param val\n * @param min\n * @param max\n * @param fallback\n */\n\nfunction defaultNumberOption(val, min, max, fallback) {\n if (val !== undefined) {\n val = Number(val);\n\n if (isNaN(val) || val < min || val > max) {\n throw new RangeError(val + " is outside of range [" + min + ", " + max + "]");\n }\n\n return Math.floor(val);\n }\n\n return fallback;\n}\n/**\n * https://tc39.es/ecma402/#sec-getnumberoption\n * @param options\n * @param property\n * @param min\n * @param max\n * @param fallback\n */\n\nfunction getNumberOption(options, property, minimum, maximum, fallback) {\n var val = options[property];\n return defaultNumberOption(val, minimum, maximum, fallback);\n}\nfunction getAliasesByLang(lang) {\n return Object.keys(aliases).reduce(function (all, locale) {\n if (locale.split(\'-\')[0] === lang) {\n all[locale] = aliases[locale];\n }\n\n return all;\n }, {});\n}\nfunction getParentLocalesByLang(lang) {\n return Object.keys(parentLocales).reduce(function (all, locale) {\n if (locale.split(\'-\')[0] === lang) {\n all[locale] = parentLocales[locale];\n }\n\n return all;\n }, {});\n}\nfunction setInternalSlot(map, pl, field, value) {\n if (!map.get(pl)) {\n map.set(pl, Object.create(null));\n }\n\n var slots = map.get(pl);\n slots[field] = value;\n}\nfunction setMultiInternalSlots(map, pl, props) {\n for (var _i = 0, _a = Object.keys(props); _i < _a.length; _i++) {\n var k = _a[_i];\n setInternalSlot(map, pl, k, props[k]);\n }\n}\nfunction getInternalSlot(map, pl, field) {\n return getMultiInternalSlots(map, pl, field)[field];\n}\nfunction getMultiInternalSlots(map, pl) {\n var fields = [];\n\n for (var _i = 2; _i < arguments.length; _i++) {\n fields[_i - 2] = arguments[_i];\n }\n\n var slots = map.get(pl);\n\n if (!slots) {\n throw new TypeError(pl + " InternalSlot has not been initialized");\n }\n\n return fields.reduce(function (all, f) {\n all[f] = slots[f];\n return all;\n }, Object.create(null));\n}\nfunction isLiteralPart(patternPart) {\n return patternPart.type === \'literal\';\n}\nfunction partitionPattern(pattern) {\n var result = [];\n var beginIndex = pattern.indexOf(\'{\');\n var endIndex = 0;\n var nextIndex = 0;\n var length = pattern.length;\n\n while (beginIndex < pattern.length && beginIndex > -1) {\n endIndex = pattern.indexOf(\'}\', beginIndex);\n (0,invariant/* invariant */.k)(endIndex > beginIndex, "Invalid pattern " + pattern);\n\n if (beginIndex > nextIndex) {\n result.push({\n type: \'literal\',\n value: pattern.substring(nextIndex, beginIndex)\n });\n }\n\n result.push({\n type: pattern.substring(beginIndex + 1, endIndex),\n value: undefined\n });\n nextIndex = endIndex + 1;\n beginIndex = pattern.indexOf(\'{\', nextIndex);\n }\n\n if (nextIndex < length) {\n result.push({\n type: \'literal\',\n value: pattern.substring(nextIndex, length)\n });\n }\n\n return result;\n}\n/**\n * https://tc39.es/ecma402/#sec-setnfdigitoptions\n * https://tc39.es/proposal-unified-intl-numberformat/section11/numberformat_diff_out.html#sec-setnfdigitoptions\n * @param intlObj\n * @param opts\n * @param mnfdDefault\n * @param mxfdDefault\n */\n\nfunction setNumberFormatDigitOptions(internalSlotMap, intlObj, opts, mnfdDefault, mxfdDefault) {\n var mnid = getNumberOption(opts, \'minimumIntegerDigits\', 1, 21, 1);\n var mnfd = opts.minimumFractionDigits;\n var mxfd = opts.maximumFractionDigits;\n var mnsd = opts.minimumSignificantDigits;\n var mxsd = opts.maximumSignificantDigits;\n setInternalSlot(internalSlotMap, intlObj, \'minimumIntegerDigits\', mnid);\n\n if (mnsd !== undefined || mxsd !== undefined) {\n setInternalSlot(internalSlotMap, intlObj, \'roundingType\', \'significantDigits\');\n mnsd = defaultNumberOption(mnsd, 1, 21, 1);\n mxsd = defaultNumberOption(mxsd, mnsd, 21, 21);\n setInternalSlot(internalSlotMap, intlObj, \'minimumSignificantDigits\', mnsd);\n setInternalSlot(internalSlotMap, intlObj, \'maximumSignificantDigits\', mxsd);\n } else if (mnfd !== undefined || mxfd !== undefined) {\n setInternalSlot(internalSlotMap, intlObj, \'roundingType\', \'fractionDigits\');\n mnfd = defaultNumberOption(mnfd, 0, 20, mnfdDefault);\n var mxfdActualDefault = Math.max(mnfd, mxfdDefault);\n mxfd = defaultNumberOption(mxfd, mnfd, 20, mxfdActualDefault);\n setInternalSlot(internalSlotMap, intlObj, \'minimumFractionDigits\', mnfd);\n setInternalSlot(internalSlotMap, intlObj, \'maximumFractionDigits\', mxfd);\n } else if (getInternalSlot(internalSlotMap, intlObj, \'notation\') === \'compact\') {\n setInternalSlot(internalSlotMap, intlObj, \'roundingType\', \'compactRounding\');\n } else {\n setInternalSlot(internalSlotMap, intlObj, \'roundingType\', \'fractionDigits\');\n setInternalSlot(internalSlotMap, intlObj, \'minimumFractionDigits\', mnfdDefault);\n setInternalSlot(internalSlotMap, intlObj, \'maximumFractionDigits\', mxfdDefault);\n }\n}\nfunction objectIs(x, y) {\n if (Object.is) {\n return Object.is(x, y);\n } // SameValue algorithm\n\n\n if (x === y) {\n // Steps 1-5, 7-10\n // Steps 6.b-6.e: +0 != -0\n return x !== 0 || 1 / x === 1 / y;\n } // Step 6.a: NaN == NaN\n\n\n return x !== x && y !== y;\n}\nvar NOT_A_Z_REGEX = /[^A-Z]/;\n/**\n * This follows https://tc39.es/ecma402/#sec-case-sensitivity-and-case-mapping\n * @param str string to convert\n */\n\nfunction toUpperCase(str) {\n return str.replace(/([a-z])/g, function (_, c) {\n return c.toUpperCase();\n });\n}\n/**\n * https://tc39.es/proposal-unified-intl-numberformat/section6/locales-currencies-tz_proposed_out.html#sec-iswellformedcurrencycode\n * @param currency\n */\n\n\nfunction isWellFormedCurrencyCode(currency) {\n currency = toUpperCase(currency);\n\n if (currency.length !== 3) {\n return false;\n }\n\n if (NOT_A_Z_REGEX.test(currency)) {\n return false;\n }\n\n return true;\n}\n;// CONCATENATED MODULE: ./node_modules/@formatjs/intl-utils/lib/get-canonical-locales.js\n/**\n * IE11-safe version of getCanonicalLocales since it\'s ES2016\n * @param locales locales\n */\nfunction getCanonicalLocales(locales) {\n // IE11\n var getCanonicalLocales = Intl.getCanonicalLocales;\n\n if (typeof getCanonicalLocales === \'function\') {\n return getCanonicalLocales(locales);\n } // NOTE: we must NOT call `supportedLocalesOf` of a formatjs polyfill, or their implementation\n // will even eventually call this method recursively. Here we use `Intl.DateTimeFormat` since it\n // is not polyfilled by `@formatjs`.\n // TODO: Fix TypeScript type def for this bc undefined is just fine\n\n\n return Intl.DateTimeFormat.supportedLocalesOf(locales);\n}\n;// CONCATENATED MODULE: ./node_modules/@formatjs/intl-utils/lib/resolve-locale.js\nvar __extends = undefined && undefined.__extends || function () {\n var _extendStatics = function extendStatics(d, b) {\n _extendStatics = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function (d, b) {\n d.__proto__ = b;\n } || function (d, b) {\n for (var p in b) {\n if (b.hasOwnProperty(p)) d[p] = b[p];\n }\n };\n\n return _extendStatics(d, b);\n };\n\n return function (d, b) {\n _extendStatics(d, b);\n\n function __() {\n this.constructor = d;\n }\n\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\n\nvar resolve_locale_assign = undefined && undefined.__assign || function () {\n resolve_locale_assign = Object.assign || function (t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n\n for (var p in s) {\n if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n }\n\n return t;\n };\n\n return resolve_locale_assign.apply(this, arguments);\n};\n\n\n\n\nfunction createResolveLocale(getDefaultLocale) {\n var lookupMatcher = createLookupMatcher(getDefaultLocale);\n var bestFitMatcher = createBestFitMatcher(getDefaultLocale);\n /**\n * https://tc39.es/ecma402/#sec-resolvelocale\n */\n\n return function resolveLocale(availableLocales, requestedLocales, options, relevantExtensionKeys, localeData) {\n var matcher = options.localeMatcher;\n var r;\n\n if (matcher === \'lookup\') {\n r = lookupMatcher(availableLocales, requestedLocales);\n } else {\n r = bestFitMatcher(availableLocales, requestedLocales);\n }\n\n var foundLocale = r.locale;\n var result = {\n locale: \'\',\n dataLocale: foundLocale\n };\n var supportedExtension = \'-u\';\n\n for (var _i = 0, relevantExtensionKeys_1 = relevantExtensionKeys; _i < relevantExtensionKeys_1.length; _i++) {\n var key = relevantExtensionKeys_1[_i];\n var foundLocaleData = localeData[foundLocale];\n (0,invariant/* invariant */.k)(typeof foundLocaleData === \'object\' && foundLocaleData !== null, "locale data " + key + " must be an object");\n var keyLocaleData = foundLocaleData[key];\n (0,invariant/* invariant */.k)(Array.isArray(keyLocaleData), "keyLocaleData for " + key + " must be an array");\n var value = keyLocaleData[0];\n (0,invariant/* invariant */.k)(typeof value === \'string\' || value === null, \'value must be string or null\');\n var supportedExtensionAddition = \'\';\n\n if (r.extension) {\n var requestedValue = unicodeExtensionValue(r.extension, key);\n\n if (requestedValue !== undefined) {\n if (requestedValue !== \'\') {\n if (~keyLocaleData.indexOf(requestedValue)) {\n value = requestedValue;\n supportedExtensionAddition = "-" + key + "-" + value;\n }\n } else if (~requestedValue.indexOf(\'true\')) {\n value = \'true\';\n supportedExtensionAddition = "-" + key;\n }\n }\n }\n\n if (key in options) {\n var optionsValue = options[key];\n (0,invariant/* invariant */.k)(typeof optionsValue === \'string\' || typeof optionsValue === \'undefined\' || optionsValue === null, \'optionsValue must be String, Undefined or Null\');\n\n if (~keyLocaleData.indexOf(optionsValue)) {\n if (optionsValue !== value) {\n value = optionsValue;\n supportedExtensionAddition = \'\';\n }\n }\n }\n\n result[key] = value;\n supportedExtension += supportedExtensionAddition;\n }\n\n if (supportedExtension.length > 2) {\n var privateIndex = foundLocale.indexOf(\'-x-\');\n\n if (privateIndex === -1) {\n foundLocale = foundLocale + supportedExtension;\n } else {\n var preExtension = foundLocale.slice(0, privateIndex);\n var postExtension = foundLocale.slice(privateIndex, foundLocale.length);\n foundLocale = preExtension + supportedExtension + postExtension;\n }\n\n foundLocale = getCanonicalLocales(foundLocale)[0];\n }\n\n result.locale = foundLocale;\n return result;\n };\n}\n/**\n * https://tc39.es/ecma402/#sec-unicodeextensionvalue\n * @param extension\n * @param key\n */\n\nfunction unicodeExtensionValue(extension, key) {\n (0,invariant/* invariant */.k)(key.length === 2, \'key must have 2 elements\');\n var size = extension.length;\n var searchValue = "-" + key + "-";\n var pos = extension.indexOf(searchValue);\n\n if (pos !== -1) {\n var start = pos + 4;\n var end = start;\n var k = start;\n var done = false;\n\n while (!done) {\n var e = extension.indexOf(\'-\', k);\n var len = void 0;\n\n if (e === -1) {\n len = size - k;\n } else {\n len = e - k;\n }\n\n if (len === 2) {\n done = true;\n } else if (e === -1) {\n end = size;\n done = true;\n } else {\n end = e;\n k = e + 1;\n }\n }\n\n return extension.slice(start, end);\n }\n\n searchValue = "-" + key;\n pos = extension.indexOf(searchValue);\n\n if (pos !== -1 && pos + 3 === size) {\n return \'\';\n }\n\n return undefined;\n}\n\nvar UNICODE_EXTENSION_SEQUENCE_REGEX = /-u(?:-[0-9a-z]{2,8})+/gi;\n/**\n * https://tc39.es/ecma402/#sec-bestavailablelocale\n * @param availableLocales\n * @param locale\n */\n\nfunction bestAvailableLocale(availableLocales, locale) {\n var candidate = locale;\n\n while (true) {\n if (~availableLocales.indexOf(candidate)) {\n return candidate;\n }\n\n var pos = candidate.lastIndexOf(\'-\');\n\n if (!~pos) {\n return undefined;\n }\n\n if (pos >= 2 && candidate[pos - 2] === \'-\') {\n pos -= 2;\n }\n\n candidate = candidate.slice(0, pos);\n }\n}\n\nfunction createLookupMatcher(getDefaultLocale) {\n /**\n * https://tc39.es/ecma402/#sec-lookupmatcher\n */\n return function lookupMatcher(availableLocales, requestedLocales) {\n var result = {\n locale: \'\'\n };\n\n for (var _i = 0, requestedLocales_1 = requestedLocales; _i < requestedLocales_1.length; _i++) {\n var locale = requestedLocales_1[_i];\n var noExtensionLocale = locale.replace(UNICODE_EXTENSION_SEQUENCE_REGEX, \'\');\n var availableLocale = bestAvailableLocale(availableLocales, noExtensionLocale);\n\n if (availableLocale) {\n result.locale = availableLocale;\n\n if (locale !== noExtensionLocale) {\n result.extension = locale.slice(noExtensionLocale.length + 1, locale.length);\n }\n\n return result;\n }\n }\n\n result.locale = getDefaultLocale();\n return result;\n };\n}\n\nfunction createBestFitMatcher(getDefaultLocale) {\n return function bestFitMatcher(availableLocales, requestedLocales) {\n var result = {\n locale: \'\'\n };\n\n for (var _i = 0, requestedLocales_2 = requestedLocales; _i < requestedLocales_2.length; _i++) {\n var locale = requestedLocales_2[_i];\n var noExtensionLocale = locale.replace(UNICODE_EXTENSION_SEQUENCE_REGEX, \'\');\n var availableLocale = bestAvailableLocale(availableLocales, noExtensionLocale);\n\n if (availableLocale) {\n result.locale = availableLocale;\n\n if (locale !== noExtensionLocale) {\n result.extension = locale.slice(noExtensionLocale.length + 1, locale.length);\n }\n\n return result;\n }\n }\n\n result.locale = getDefaultLocale();\n return result;\n };\n}\n\nfunction getLocaleHierarchy(locale, aliases, parentLocales) {\n var results = [locale];\n\n if (aliases[locale]) {\n locale = aliases[locale];\n results.push(locale);\n }\n\n var parentLocale = parentLocales[locale];\n\n if (parentLocale) {\n results.push(parentLocale);\n }\n\n var localeParts = locale.split(\'-\');\n\n for (var i = localeParts.length; i > 1; i--) {\n results.push(localeParts.slice(0, i - 1).join(\'-\'));\n }\n\n return results;\n}\n\nfunction lookupSupportedLocales(availableLocales, requestedLocales) {\n var subset = [];\n\n for (var _i = 0, requestedLocales_3 = requestedLocales; _i < requestedLocales_3.length; _i++) {\n var locale = requestedLocales_3[_i];\n var noExtensionLocale = locale.replace(UNICODE_EXTENSION_SEQUENCE_REGEX, \'\');\n var availableLocale = bestAvailableLocale(availableLocales, noExtensionLocale);\n\n if (availableLocale) {\n subset.push(availableLocale);\n }\n }\n\n return subset;\n}\n\nfunction supportedLocales(availableLocales, requestedLocales, options) {\n var matcher = \'best fit\';\n\n if (options !== undefined) {\n options = toObject(options);\n matcher = getOption(options, \'localeMatcher\', \'string\', [\'lookup\', \'best fit\'], \'best fit\');\n }\n\n if (matcher === \'best fit\') {\n return lookupSupportedLocales(availableLocales, requestedLocales);\n }\n\n return lookupSupportedLocales(availableLocales, requestedLocales);\n}\n\nvar MissingLocaleDataError =\n/** @class */\nfunction (_super) {\n __extends(MissingLocaleDataError, _super);\n\n function MissingLocaleDataError() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = \'MISSING_LOCALE_DATA\';\n return _this;\n }\n\n return MissingLocaleDataError;\n}(Error);\n\nfunction isMissingLocaleDataError(e) {\n return e.type === \'MISSING_LOCALE_DATA\';\n}\nfunction unpackData(locale, localeData,\n/** By default shallow merge the dictionaries. */\nreducer) {\n if (reducer === void 0) {\n reducer = function reducer(all, d) {\n return resolve_locale_assign(resolve_locale_assign({}, all), d);\n };\n }\n\n var localeHierarchy = getLocaleHierarchy(locale, localeData.aliases, localeData.parentLocales);\n var dataToMerge = localeHierarchy.map(function (l) {\n return localeData.data[l];\n }).filter(Boolean);\n\n if (!dataToMerge.length) {\n throw new MissingLocaleDataError("Missing locale data for \\"" + locale + "\\", lookup hierarchy: " + localeHierarchy.join(\', \'));\n }\n\n dataToMerge.reverse();\n return dataToMerge.reduce(reducer, {});\n}\n;// CONCATENATED MODULE: ./node_modules/@formatjs/intl-utils/lib/units.js\n// https://tc39.es/proposal-unified-intl-numberformat/section6/locales-currencies-tz_diff_out.html#sec-issanctionedsimpleunitidentifier\nvar SANCTIONED_UNITS = [\'angle-degree\', \'area-acre\', \'area-hectare\', \'concentr-percent\', \'digital-bit\', \'digital-byte\', \'digital-gigabit\', \'digital-gigabyte\', \'digital-kilobit\', \'digital-kilobyte\', \'digital-megabit\', \'digital-megabyte\', \'digital-petabyte\', \'digital-terabit\', \'digital-terabyte\', \'duration-day\', \'duration-hour\', \'duration-millisecond\', \'duration-minute\', \'duration-month\', \'duration-second\', \'duration-week\', \'duration-year\', \'length-centimeter\', \'length-foot\', \'length-inch\', \'length-kilometer\', \'length-meter\', \'length-mile-scandinavian\', \'length-mile\', \'length-millimeter\', \'length-yard\', \'mass-gram\', \'mass-kilogram\', \'mass-ounce\', \'mass-pound\', \'mass-stone\', \'temperature-celsius\', \'temperature-fahrenheit\', \'volume-fluid-ounce\', \'volume-gallon\', \'volume-liter\', \'volume-milliliter\']; // In CLDR, the unit name always follows the form `namespace-unit` pattern.\n// For example: `digital-bit` instead of `bit`. This function removes the namespace prefix.\n\nfunction removeUnitNamespace(unit) {\n return unit.replace(/^(.*?)-/, \'\');\n}\n;// CONCATENATED MODULE: ./node_modules/@formatjs/intl-utils/lib/number-types.js\nvar InternalSlotToken;\n\n(function (InternalSlotToken) {\n // To prevent collision with {0} in CLDR\n InternalSlotToken["compactName"] = "compactName";\n InternalSlotToken["compactSymbol"] = "compactSymbol";\n InternalSlotToken["currencyCode"] = "currencyCode";\n InternalSlotToken["currencyName"] = "currencyName";\n InternalSlotToken["currencyNarrowSymbol"] = "currencyNarrowSymbol";\n InternalSlotToken["currencySymbol"] = "currencySymbol";\n InternalSlotToken["minusSign"] = "minusSign";\n InternalSlotToken["number"] = "number";\n InternalSlotToken["percentSign"] = "percentSign";\n InternalSlotToken["plusSign"] = "plusSign";\n InternalSlotToken["scientificExponent"] = "scientificExponent";\n InternalSlotToken["scientificSeparator"] = "scientificSeparator";\n InternalSlotToken["unitName"] = "unitName";\n InternalSlotToken["unitNarrowSymbol"] = "unitNarrowSymbol";\n InternalSlotToken["unitSymbol"] = "unitSymbol";\n})(InternalSlotToken || (InternalSlotToken = {}));\n;// CONCATENATED MODULE: ./node_modules/@formatjs/intl-utils/lib/index.js\n\n\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AZm9ybWF0anMvaW50bC11dGlscy9saWIvZGlmZi5qcz83Y2M4Iiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL0Bmb3JtYXRqcy9pbnRsLXV0aWxzL2xpYi9hbGlhc2VzLmpzPzU5OTYiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvQGZvcm1hdGpzL2ludGwtdXRpbHMvbGliL3BhcmVudExvY2FsZXMuanM/ZTYzMCIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AZm9ybWF0anMvaW50bC11dGlscy9saWIvcG9seWZpbGwtdXRpbHMuanM/YzlkMiIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AZm9ybWF0anMvaW50bC11dGlscy9saWIvZ2V0LWNhbm9uaWNhbC1sb2NhbGVzLmpzP2VmMWMiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvQGZvcm1hdGpzL2ludGwtdXRpbHMvbGliL3Jlc29sdmUtbG9jYWxlLmpzPzQyNmQiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvQGZvcm1hdGpzL2ludGwtdXRpbHMvbGliL3VuaXRzLmpzPzEyYTYiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvQGZvcm1hdGpzL2ludGwtdXRpbHMvbGliL251bWJlci10eXBlcy5qcz85M2U0Iiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL0Bmb3JtYXRqcy9pbnRsLXV0aWxzL2xpYi9pbmRleC5qcz80MGYyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsZUFBZSxTQUFJLElBQUksU0FBSTtBQUMzQjtBQUNBLDRDQUE0QyxPQUFPO0FBQ25EOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLCtDQUErQyx1Q0FBdUM7O0FBRXRGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRTs7QUNuR0E7QUFDQTtBQUNBLDRDQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxFOztBQ3ZhRDtBQUNBO0FBQ0Esa0RBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxFOzs7O0FDbkkrQjtBQUNZO0FBQ0o7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFTyxTQUFTLHVCQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxjQUFjLHVCQUFRO0FBQ3RCOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0E7QUFDTztBQUNQLHFCQUFxQixPQUFPO0FBQzVCO0FBQ0Esb0JBQW9CLE9BQU87QUFDM0I7O0FBRUE7QUFDQSxHQUFHLElBQUk7QUFDUDtBQUNPO0FBQ1AscUJBQXFCLGFBQWE7QUFDbEM7QUFDQSxvQkFBb0IsYUFBYTtBQUNqQzs7QUFFQTtBQUNBLEdBQUcsSUFBSTtBQUNQO0FBQ087QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ087QUFDUCwyQ0FBMkMsZ0JBQWdCO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ087QUFDUDs7QUFFQSxrQkFBa0IsdUJBQXVCO0FBQ3pDO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNPO0FBQ1A7QUFDQTtBQUNPO0FBQ1A7QUFDQSxxQ0FBcUM7QUFDckM7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaUNBQWlDO0FBQ2pDLElBQUksOEJBQVM7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsbUNBQW1DO0FBQ25DOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEM7O0FDL1FBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOzs7QUFHQTtBQUNBLEM7O0FDakJBLGdCQUFnQixTQUFJLElBQUksU0FBSTtBQUM1QjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCxJQUFJLHFCQUFRLEdBQUcsU0FBSSxJQUFJLFNBQUk7QUFDM0IsRUFBRSxxQkFBUTtBQUNWLDRDQUE0QyxPQUFPO0FBQ25EOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsU0FBUyxxQkFBUTtBQUNqQjs7QUFFOEQ7QUFDdEI7QUFDZTtBQUNoRDtBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEscUVBQXFFLHFDQUFxQztBQUMxRztBQUNBO0FBQ0EsTUFBTSw4QkFBUztBQUNmO0FBQ0EsTUFBTSw4QkFBUztBQUNmO0FBQ0EsTUFBTSw4QkFBUztBQUNmOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVEsOEJBQVM7O0FBRWpCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsb0JBQW9CLG1CQUFtQjtBQUN2Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFLDhCQUFTO0FBQ1g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLHVEQUF1RCxJQUFJO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDJEQUEyRCxnQ0FBZ0M7QUFDM0Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDJEQUEyRCxnQ0FBZ0M7QUFDM0Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxrQ0FBa0MsT0FBTztBQUN6QztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSx5REFBeUQsZ0NBQWdDO0FBQ3pGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVPO0FBQ1A7O0FBRUE7QUFDQSxjQUFjLFFBQVE7QUFDdEIsY0FBYyxTQUFTO0FBQ3ZCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFTTtBQUNQO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxxQkFBUSxDQUFDLHFCQUFRLEdBQUc7QUFDakM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHVDQUF1QztBQUN2QyxDOztBQ3ZXQTtBQUNPLHN5QkFBc3lCO0FBQzd5Qjs7QUFFTztBQUNQO0FBQ0EsQzs7QUNOTzs7QUFFUDtBQUNBLGdDQUFnQyxFQUFFO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsOENBQThDLEc7O0FDbkJYO0FBQytSO0FBQ2hNO0FBQzNHO0FBQ087QUFDK0IiLCJmaWxlIjoiMjY1MC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBfX2Fzc2lnbiA9IHRoaXMgJiYgdGhpcy5fX2Fzc2lnbiB8fCBmdW5jdGlvbiAoKSB7XG4gIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodCkge1xuICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcblxuICAgICAgZm9yICh2YXIgcCBpbiBzKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0O1xuICB9O1xuXG4gIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcblxudmFyIE1TX1BFUl9TRUNPTkQgPSAxZTM7XG52YXIgU0VDU19QRVJfTUlOID0gNjA7XG52YXIgU0VDU19QRVJfSE9VUiA9IFNFQ1NfUEVSX01JTiAqIDYwO1xudmFyIFNFQ1NfUEVSX0RBWSA9IFNFQ1NfUEVSX0hPVVIgKiAyNDtcbnZhciBTRUNTX1BFUl9XRUVLID0gU0VDU19QRVJfREFZICogNztcbmV4cG9ydCBmdW5jdGlvbiBzZWxlY3RVbml0KGZyb20sIHRvLCB0aHJlc2hvbGRzKSB7XG4gIGlmICh0byA9PT0gdm9pZCAwKSB7XG4gICAgdG8gPSBEYXRlLm5vdygpO1xuICB9XG5cbiAgaWYgKHRocmVzaG9sZHMgPT09IHZvaWQgMCkge1xuICAgIHRocmVzaG9sZHMgPSB7fTtcbiAgfVxuXG4gIHZhciByZXNvbHZlZFRocmVzaG9sZHMgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgREVGQVVMVF9USFJFU0hPTERTKSwgdGhyZXNob2xkcyB8fCB7fSk7XG5cbiAgdmFyIHNlY3MgPSAoK2Zyb20gLSArdG8pIC8gTVNfUEVSX1NFQ09ORDtcblxuICBpZiAoTWF0aC5hYnMoc2VjcykgPCByZXNvbHZlZFRocmVzaG9sZHMuc2Vjb25kKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbHVlOiBNYXRoLnJvdW5kKHNlY3MpLFxuICAgICAgdW5pdDogJ3NlY29uZCdcbiAgICB9O1xuICB9XG5cbiAgdmFyIG1pbnMgPSBzZWNzIC8gU0VDU19QRVJfTUlOO1xuXG4gIGlmIChNYXRoLmFicyhtaW5zKSA8IHJlc29sdmVkVGhyZXNob2xkcy5taW51dGUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IE1hdGgucm91bmQobWlucyksXG4gICAgICB1bml0OiAnbWludXRlJ1xuICAgIH07XG4gIH1cblxuICB2YXIgaG91cnMgPSBzZWNzIC8gU0VDU19QRVJfSE9VUjtcblxuICBpZiAoTWF0aC5hYnMoaG91cnMpIDwgcmVzb2x2ZWRUaHJlc2hvbGRzLmhvdXIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IE1hdGgucm91bmQoaG91cnMpLFxuICAgICAgdW5pdDogJ2hvdXInXG4gICAgfTtcbiAgfVxuXG4gIHZhciBkYXlzID0gc2VjcyAvIFNFQ1NfUEVSX0RBWTtcblxuICBpZiAoTWF0aC5hYnMoZGF5cykgPCByZXNvbHZlZFRocmVzaG9sZHMuZGF5KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbHVlOiBNYXRoLnJvdW5kKGRheXMpLFxuICAgICAgdW5pdDogJ2RheSdcbiAgICB9O1xuICB9XG5cbiAgdmFyIGZyb21EYXRlID0gbmV3IERhdGUoZnJvbSk7XG4gIHZhciB0b0RhdGUgPSBuZXcgRGF0ZSh0byk7XG4gIHZhciB5ZWFycyA9IGZyb21EYXRlLmdldEZ1bGxZZWFyKCkgLSB0b0RhdGUuZ2V0RnVsbFllYXIoKTtcblxuICBpZiAoTWF0aC5yb3VuZChNYXRoLmFicyh5ZWFycykpID4gMCkge1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogTWF0aC5yb3VuZCh5ZWFycyksXG4gICAgICB1bml0OiAneWVhcidcbiAgICB9O1xuICB9XG5cbiAgdmFyIG1vbnRocyA9IHllYXJzICogMTIgKyBmcm9tRGF0ZS5nZXRNb250aCgpIC0gdG9EYXRlLmdldE1vbnRoKCk7XG5cbiAgaWYgKE1hdGgucm91bmQoTWF0aC5hYnMobW9udGhzKSkgPiAwKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbHVlOiBNYXRoLnJvdW5kKG1vbnRocyksXG4gICAgICB1bml0OiAnbW9udGgnXG4gICAgfTtcbiAgfVxuXG4gIHZhciB3ZWVrcyA9IHNlY3MgLyBTRUNTX1BFUl9XRUVLO1xuICByZXR1cm4ge1xuICAgIHZhbHVlOiBNYXRoLnJvdW5kKHdlZWtzKSxcbiAgICB1bml0OiAnd2VlaydcbiAgfTtcbn1cbmV4cG9ydCB2YXIgREVGQVVMVF9USFJFU0hPTERTID0ge1xuICBzZWNvbmQ6IDQ1LFxuICBtaW51dGU6IDQ1LFxuICBob3VyOiAyMixcbiAgZGF5OiA1XG59OyIsIi8qIEBnZW5lcmF0ZWQgKi9cbi8vIHByZXR0aWVyLWlnbm9yZSAgXG5leHBvcnQgZGVmYXVsdCB7XG4gIFwiYWEtU0FBSE9cIjogXCJzc3lcIixcbiAgXCJhYW1cIjogXCJhYXNcIixcbiAgXCJhYXJcIjogXCJhYVwiLFxuICBcImFia1wiOiBcImFiXCIsXG4gIFwiYWRwXCI6IFwiZHpcIixcbiAgXCJhZnJcIjogXCJhZlwiLFxuICBcImFqdVwiOiBcImpyYlwiLFxuICBcImFrYVwiOiBcImFrXCIsXG4gIFwiYWxiXCI6IFwic3FcIixcbiAgXCJhbHNcIjogXCJzcVwiLFxuICBcImFtaFwiOiBcImFtXCIsXG4gIFwiYXJhXCI6IFwiYXJcIixcbiAgXCJhcmJcIjogXCJhclwiLFxuICBcImFyZ1wiOiBcImFuXCIsXG4gIFwiYXJtXCI6IFwiaHlcIixcbiAgXCJhcnQtbG9qYmFuXCI6IFwiamJvXCIsXG4gIFwiYXNkXCI6IFwic256XCIsXG4gIFwiYXNtXCI6IFwiYXNcIixcbiAgXCJhdWVcIjogXCJrdHpcIixcbiAgXCJhdmFcIjogXCJhdlwiLFxuICBcImF2ZVwiOiBcImFlXCIsXG4gIFwiYXltXCI6IFwiYXlcIixcbiAgXCJheXJcIjogXCJheVwiLFxuICBcImF5eFwiOiBcIm51blwiLFxuICBcImF6LUFaXCI6IFwiYXotTGF0bi1BWlwiLFxuICBcImF6ZVwiOiBcImF6XCIsXG4gIFwiYXpqXCI6IFwiYXpcIixcbiAgXCJiYWtcIjogXCJiYVwiLFxuICBcImJhbVwiOiBcImJtXCIsXG4gIFwiYmFxXCI6IFwiZXVcIixcbiAgXCJiY2NcIjogXCJiYWxcIixcbiAgXCJiY2xcIjogXCJiaWtcIixcbiAgXCJiZWxcIjogXCJiZVwiLFxuICBcImJlblwiOiBcImJuXCIsXG4gIFwiYmdtXCI6IFwiYmNnXCIsXG4gIFwiYmhcIjogXCJiaG9cIixcbiAgXCJiaWhcIjogXCJiaG9cIixcbiAgXCJiaXNcIjogXCJiaVwiLFxuICBcImJqZFwiOiBcImRybFwiLFxuICBcImJvZFwiOiBcImJvXCIsXG4gIFwiYm9zXCI6IFwiYnNcIixcbiAgXCJicmVcIjogXCJiclwiLFxuICBcImJzLUJBXCI6IFwiYnMtTGF0bi1CQVwiLFxuICBcImJ1bFwiOiBcImJnXCIsXG4gIFwiYnVyXCI6IFwibXlcIixcbiAgXCJieGtcIjogXCJsdXlcIixcbiAgXCJieHJcIjogXCJidWFcIixcbiAgXCJjYXRcIjogXCJjYVwiLFxuICBcImNjcVwiOiBcInJraVwiLFxuICBcImNlbC1nYXVsaXNoXCI6IFwieHRnLXgtY2VsLWdhdWxpc2hcIixcbiAgXCJjZXNcIjogXCJjc1wiLFxuICBcImNoYVwiOiBcImNoXCIsXG4gIFwiY2hlXCI6IFwiY2VcIixcbiAgXCJjaGlcIjogXCJ6aFwiLFxuICBcImNodVwiOiBcImN1XCIsXG4gIFwiY2h2XCI6IFwiY3ZcIixcbiAgXCJjanJcIjogXCJtb21cIixcbiAgXCJja2FcIjogXCJjbXJcIixcbiAgXCJjbGRcIjogXCJzeXJcIixcbiAgXCJjbWtcIjogXCJ4Y2hcIixcbiAgXCJjbW5cIjogXCJ6aFwiLFxuICBcImNuclwiOiBcInNyLU1FXCIsXG4gIFwiY29yXCI6IFwia3dcIixcbiAgXCJjb3NcIjogXCJjb1wiLFxuICBcImNveVwiOiBcInBpalwiLFxuICBcImNxdVwiOiBcInF1aFwiLFxuICBcImNyZVwiOiBcImNyXCIsXG4gIFwiY3dkXCI6IFwiY3JcIixcbiAgXCJjeW1cIjogXCJjeVwiLFxuICBcImN6ZVwiOiBcImNzXCIsXG4gIFwiZGFuXCI6IFwiZGFcIixcbiAgXCJkZXVcIjogXCJkZVwiLFxuICBcImRnb1wiOiBcImRvaVwiLFxuICBcImRoZFwiOiBcIm13clwiLFxuICBcImRpa1wiOiBcImRpblwiLFxuICBcImRpcVwiOiBcInp6YVwiLFxuICBcImRpdFwiOiBcImRpZlwiLFxuICBcImRpdlwiOiBcImR2XCIsXG4gIFwiZHJoXCI6IFwibW5cIixcbiAgXCJkcndcIjogXCJmYS1hZlwiLFxuICBcImR1dFwiOiBcIm5sXCIsXG4gIFwiZHpvXCI6IFwiZHpcIixcbiAgXCJla2tcIjogXCJldFwiLFxuICBcImVsbFwiOiBcImVsXCIsXG4gIFwiZW1rXCI6IFwibWFuXCIsXG4gIFwiZW5nXCI6IFwiZW5cIixcbiAgXCJlcG9cIjogXCJlb1wiLFxuICBcImVza1wiOiBcImlrXCIsXG4gIFwiZXN0XCI6IFwiZXRcIixcbiAgXCJldXNcIjogXCJldVwiLFxuICBcImV3ZVwiOiBcImVlXCIsXG4gIFwiZmFvXCI6IFwiZm9cIixcbiAgXCJmYXNcIjogXCJmYVwiLFxuICBcImZhdFwiOiBcImFrXCIsXG4gIFwiZmlqXCI6IFwiZmpcIixcbiAgXCJmaW5cIjogXCJmaVwiLFxuICBcImZyYVwiOiBcImZyXCIsXG4gIFwiZnJlXCI6IFwiZnJcIixcbiAgXCJmcnlcIjogXCJmeVwiLFxuICBcImZ1Y1wiOiBcImZmXCIsXG4gIFwiZnVsXCI6IFwiZmZcIixcbiAgXCJnYXZcIjogXCJkZXZcIixcbiAgXCJnYXpcIjogXCJvbVwiLFxuICBcImdib1wiOiBcImdyYlwiLFxuICBcImdlb1wiOiBcImthXCIsXG4gIFwiZ2VyXCI6IFwiZGVcIixcbiAgXCJnZnhcIjogXCJ2YWpcIixcbiAgXCJnZ25cIjogXCJndnJcIixcbiAgXCJnbGFcIjogXCJnZFwiLFxuICBcImdsZVwiOiBcImdhXCIsXG4gIFwiZ2xnXCI6IFwiZ2xcIixcbiAgXCJnbHZcIjogXCJndlwiLFxuICBcImdub1wiOiBcImdvblwiLFxuICBcImdyZVwiOiBcImVsXCIsXG4gIFwiZ3JuXCI6IFwiZ25cIixcbiAgXCJndGlcIjogXCJueWNcIixcbiAgXCJndWdcIjogXCJnblwiLFxuICBcImd1alwiOiBcImd1XCIsXG4gIFwiZ3V2XCI6IFwiZHV6XCIsXG4gIFwiZ3lhXCI6IFwiZ2JhXCIsXG4gIFwiaGEtTGF0bi1HSFwiOiBcImhhLUdIXCIsXG4gIFwiaGEtTGF0bi1ORVwiOiBcImhhLU5FXCIsXG4gIFwiaGEtTGF0bi1OR1wiOiBcImhhLU5HXCIsXG4gIFwiaGF0XCI6IFwiaHRcIixcbiAgXCJoYXVcIjogXCJoYVwiLFxuICBcImhic1wiOiBcInNyLUxhdG5cIixcbiAgXCJoZG5cIjogXCJoYWlcIixcbiAgXCJoZWFcIjogXCJobW5cIixcbiAgXCJoZWJcIjogXCJoZVwiLFxuICBcImhlclwiOiBcImh6XCIsXG4gIFwiaGltXCI6IFwic3J4XCIsXG4gIFwiaGluXCI6IFwiaGlcIixcbiAgXCJobW9cIjogXCJob1wiLFxuICBcImhyclwiOiBcImphbFwiLFxuICBcImhydlwiOiBcImhyXCIsXG4gIFwiaHVuXCI6IFwiaHVcIixcbiAgXCJoeWVcIjogXCJoeVwiLFxuICBcImktYW1pXCI6IFwiYW1pXCIsXG4gIFwiaS1ibm5cIjogXCJibm5cIixcbiAgXCJpLWhha1wiOiBcImhha1wiLFxuICBcImkta2xpbmdvblwiOiBcInRsaFwiLFxuICBcImktbHV4XCI6IFwibGJcIixcbiAgXCJpLW5hdmFqb1wiOiBcIm52XCIsXG4gIFwiaS1wd25cIjogXCJwd25cIixcbiAgXCJpLXRhb1wiOiBcInRhb1wiLFxuICBcImktdGF5XCI6IFwidGF5XCIsXG4gIFwiaS10c3VcIjogXCJ0c3VcIixcbiAgXCJpLWRlZmF1bHRcIjogXCJlbi14LWktZGVmYXVsdFwiLFxuICBcImktZW5vY2hpYW5cIjogXCJ1bmQteC1pLWVub2NoaWFuXCIsXG4gIFwiaS1taW5nb1wiOiBcInNlZS14LWktbWluZ29cIixcbiAgXCJpYmlcIjogXCJvcGFcIixcbiAgXCJpYm9cIjogXCJpZ1wiLFxuICBcImljZVwiOiBcImlzXCIsXG4gIFwiaWRvXCI6IFwiaW9cIixcbiAgXCJpaWlcIjogXCJpaVwiLFxuICBcImlrZVwiOiBcIml1XCIsXG4gIFwiaWt1XCI6IFwiaXVcIixcbiAgXCJpbGVcIjogXCJpZVwiLFxuICBcImlsd1wiOiBcImdhbFwiLFxuICBcImluXCI6IFwiaWRcIixcbiAgXCJpbmFcIjogXCJpYVwiLFxuICBcImluZFwiOiBcImlkXCIsXG4gIFwiaXBrXCI6IFwiaWtcIixcbiAgXCJpc2xcIjogXCJpc1wiLFxuICBcIml0YVwiOiBcIml0XCIsXG4gIFwiaXdcIjogXCJoZVwiLFxuICBcImphdlwiOiBcImp2XCIsXG4gIFwiamVnXCI6IFwib3liXCIsXG4gIFwiamlcIjogXCJ5aVwiLFxuICBcImpwblwiOiBcImphXCIsXG4gIFwiandcIjogXCJqdlwiLFxuICBcImthbFwiOiBcImtsXCIsXG4gIFwia2FuXCI6IFwia25cIixcbiAgXCJrYXNcIjogXCJrc1wiLFxuICBcImthdFwiOiBcImthXCIsXG4gIFwia2F1XCI6IFwia3JcIixcbiAgXCJrYXpcIjogXCJra1wiLFxuICBcImtnY1wiOiBcInRkZlwiLFxuICBcImtnaFwiOiBcImttbFwiLFxuICBcImtoa1wiOiBcIm1uXCIsXG4gIFwia2htXCI6IFwia21cIixcbiAgXCJraWtcIjogXCJraVwiLFxuICBcImtpblwiOiBcInJ3XCIsXG4gIFwia2lyXCI6IFwia3lcIixcbiAgXCJray1DeXJsLUtaXCI6IFwia2stS1pcIixcbiAgXCJrbXJcIjogXCJrdVwiLFxuICBcImtuY1wiOiBcImtyXCIsXG4gIFwia25nXCI6IFwia2dcIixcbiAgXCJrbm5cIjogXCJrb2tcIixcbiAgXCJrb2pcIjogXCJrd3ZcIixcbiAgXCJrb21cIjogXCJrdlwiLFxuICBcImtvblwiOiBcImtnXCIsXG4gIFwia29yXCI6IFwia29cIixcbiAgXCJrcHZcIjogXCJrdlwiLFxuICBcImtybVwiOiBcImJtZlwiLFxuICBcImtzLUFyYWItSU5cIjogXCJrcy1JTlwiLFxuICBcImt0clwiOiBcImR0cFwiLFxuICBcImt1YVwiOiBcImtqXCIsXG4gIFwia3VyXCI6IFwia3VcIixcbiAgXCJrdnNcIjogXCJnZGpcIixcbiAgXCJrd3FcIjogXCJ5YW1cIixcbiAgXCJreGVcIjogXCJ0dmRcIixcbiAgXCJreS1DeXJsLUtHXCI6IFwia3ktS0dcIixcbiAgXCJrempcIjogXCJkdHBcIixcbiAgXCJrenRcIjogXCJkdHBcIixcbiAgXCJsYW9cIjogXCJsb1wiLFxuICBcImxhdFwiOiBcImxhXCIsXG4gIFwibGF2XCI6IFwibHZcIixcbiAgXCJsYmtcIjogXCJibmNcIixcbiAgXCJsaWlcIjogXCJyYXFcIixcbiAgXCJsaW1cIjogXCJsaVwiLFxuICBcImxpblwiOiBcImxuXCIsXG4gIFwibGl0XCI6IFwibHRcIixcbiAgXCJsbG9cIjogXCJuZ3RcIixcbiAgXCJsbW1cIjogXCJybXhcIixcbiAgXCJsdHpcIjogXCJsYlwiLFxuICBcImx1YlwiOiBcImx1XCIsXG4gIFwibHVnXCI6IFwibGdcIixcbiAgXCJsdnNcIjogXCJsdlwiLFxuICBcIm1hY1wiOiBcIm1rXCIsXG4gIFwibWFoXCI6IFwibWhcIixcbiAgXCJtYWxcIjogXCJtbFwiLFxuICBcIm1hb1wiOiBcIm1pXCIsXG4gIFwibWFyXCI6IFwibXJcIixcbiAgXCJtYXlcIjogXCJtc1wiLFxuICBcIm1lZ1wiOiBcImNpclwiLFxuICBcIm1oclwiOiBcImNobVwiLFxuICBcIm1rZFwiOiBcIm1rXCIsXG4gIFwibWxnXCI6IFwibWdcIixcbiAgXCJtbHRcIjogXCJtdFwiLFxuICBcIm1uLUN5cmwtTU5cIjogXCJtbi1NTlwiLFxuICBcIm1ua1wiOiBcIm1hblwiLFxuICBcIm1vXCI6IFwicm9cIixcbiAgXCJtb2xcIjogXCJyb1wiLFxuICBcIm1vblwiOiBcIm1uXCIsXG4gIFwibXJpXCI6IFwibWlcIixcbiAgXCJtcy1MYXRuLUJOXCI6IFwibXMtQk5cIixcbiAgXCJtcy1MYXRuLU1ZXCI6IFwibXMtTVlcIixcbiAgXCJtcy1MYXRuLVNHXCI6IFwibXMtU0dcIixcbiAgXCJtc2FcIjogXCJtc1wiLFxuICBcIm1zdFwiOiBcIm1yeVwiLFxuICBcIm11cFwiOiBcInJhalwiLFxuICBcIm13alwiOiBcInZhalwiLFxuICBcIm15YVwiOiBcIm15XCIsXG4gIFwibXlkXCI6IFwiYW9nXCIsXG4gIFwibXl0XCI6IFwibXJ5XCIsXG4gIFwibmFkXCI6IFwieG55XCIsXG4gIFwibmF1XCI6IFwibmFcIixcbiAgXCJuYXZcIjogXCJudlwiLFxuICBcIm5ibFwiOiBcIm5yXCIsXG4gIFwibmNwXCI6IFwia2R6XCIsXG4gIFwibmRlXCI6IFwibmRcIixcbiAgXCJuZG9cIjogXCJuZ1wiLFxuICBcIm5lcFwiOiBcIm5lXCIsXG4gIFwibmxkXCI6IFwibmxcIixcbiAgXCJubm9cIjogXCJublwiLFxuICBcIm5uc1wiOiBcIm5iclwiLFxuICBcIm5ueFwiOiBcIm5ndlwiLFxuICBcIm5vXCI6IFwibmJcIixcbiAgXCJuby1ib2tcIjogXCJuYlwiLFxuICBcIm5vLUJPS01BTFwiOiBcIm5iXCIsXG4gIFwibm8tbnluXCI6IFwibm5cIixcbiAgXCJuby1OWU5PUlNLXCI6IFwibm5cIixcbiAgXCJub2JcIjogXCJuYlwiLFxuICBcIm5vclwiOiBcIm5iXCIsXG4gIFwibnBpXCI6IFwibmVcIixcbiAgXCJudHNcIjogXCJwaWpcIixcbiAgXCJueWFcIjogXCJueVwiLFxuICBcIm9jaVwiOiBcIm9jXCIsXG4gIFwib2pnXCI6IFwib2pcIixcbiAgXCJvamlcIjogXCJvalwiLFxuICBcIm9yaVwiOiBcIm9yXCIsXG4gIFwib3JtXCI6IFwib21cIixcbiAgXCJvcnlcIjogXCJvclwiLFxuICBcIm9zc1wiOiBcIm9zXCIsXG4gIFwib3VuXCI6IFwidmFqXCIsXG4gIFwicGEtSU5cIjogXCJwYS1HdXJ1LUlOXCIsXG4gIFwicGEtUEtcIjogXCJwYS1BcmFiLVBLXCIsXG4gIFwicGFuXCI6IFwicGFcIixcbiAgXCJwYnVcIjogXCJwc1wiLFxuICBcInBjclwiOiBcImFkeFwiLFxuICBcInBlclwiOiBcImZhXCIsXG4gIFwicGVzXCI6IFwiZmFcIixcbiAgXCJwbGlcIjogXCJwaVwiLFxuICBcInBsdFwiOiBcIm1nXCIsXG4gIFwicG1jXCI6IFwiaHV3XCIsXG4gIFwicG11XCI6IFwicGhyXCIsXG4gIFwicG5iXCI6IFwibGFoXCIsXG4gIFwicG9sXCI6IFwicGxcIixcbiAgXCJwb3JcIjogXCJwdFwiLFxuICBcInBwYVwiOiBcImJmeVwiLFxuICBcInBwclwiOiBcImxjcVwiLFxuICBcInByc1wiOiBcImZhLUFGXCIsXG4gIFwicHJ5XCI6IFwicHJ0XCIsXG4gIFwicHVzXCI6IFwicHNcIixcbiAgXCJwdXpcIjogXCJwdWJcIixcbiAgXCJxdWVcIjogXCJxdVwiLFxuICBcInF1elwiOiBcInF1XCIsXG4gIFwicm15XCI6IFwicm9tXCIsXG4gIFwicm9oXCI6IFwicm1cIixcbiAgXCJyb25cIjogXCJyb1wiLFxuICBcInJ1bVwiOiBcInJvXCIsXG4gIFwicnVuXCI6IFwicm5cIixcbiAgXCJydXNcIjogXCJydVwiLFxuICBcInNhZ1wiOiBcInNnXCIsXG4gIFwic2FuXCI6IFwic2FcIixcbiAgXCJzY2FcIjogXCJobGVcIixcbiAgXCJzY2NcIjogXCJzclwiLFxuICBcInNjclwiOiBcImhyXCIsXG4gIFwic2duLUJFLUZSXCI6IFwic2ZiXCIsXG4gIFwic2duLUJFLU5MXCI6IFwidmd0XCIsXG4gIFwic2duLUNILURFXCI6IFwic2dnXCIsXG4gIFwic2hcIjogXCJzci1MYXRuXCIsXG4gIFwic2hpLU1BXCI6IFwic2hpLVRmbmctTUFcIixcbiAgXCJzaW5cIjogXCJzaVwiLFxuICBcInNra1wiOiBcIm95YlwiLFxuICBcInNsa1wiOiBcInNrXCIsXG4gIFwic2xvXCI6IFwic2tcIixcbiAgXCJzbHZcIjogXCJzbFwiLFxuICBcInNtZVwiOiBcInNlXCIsXG4gIFwic21vXCI6IFwic21cIixcbiAgXCJzbmFcIjogXCJzblwiLFxuICBcInNuZFwiOiBcInNkXCIsXG4gIFwic29tXCI6IFwic29cIixcbiAgXCJzb3RcIjogXCJzdFwiLFxuICBcInNwYVwiOiBcImVzXCIsXG4gIFwic3B5XCI6IFwia2xuXCIsXG4gIFwic3FpXCI6IFwic3FcIixcbiAgXCJzci1CQVwiOiBcInNyLUN5cmwtQkFcIixcbiAgXCJzci1NRVwiOiBcInNyLUxhdG4tTUVcIixcbiAgXCJzci1SU1wiOiBcInNyLUN5cmwtUlNcIixcbiAgXCJzci1YS1wiOiBcInNyLUN5cmwtWEtcIixcbiAgXCJzcmNcIjogXCJzY1wiLFxuICBcInNyZFwiOiBcInNjXCIsXG4gIFwic3JwXCI6IFwic3JcIixcbiAgXCJzc3dcIjogXCJzc1wiLFxuICBcInN1blwiOiBcInN1XCIsXG4gIFwic3dhXCI6IFwic3dcIixcbiAgXCJzd2NcIjogXCJzdy1DRFwiLFxuICBcInN3ZVwiOiBcInN2XCIsXG4gIFwic3doXCI6IFwic3dcIixcbiAgXCJ0YWhcIjogXCJ0eVwiLFxuICBcInRhbVwiOiBcInRhXCIsXG4gIFwidGF0XCI6IFwidHRcIixcbiAgXCJ0ZHVcIjogXCJkdHBcIixcbiAgXCJ0ZWxcIjogXCJ0ZVwiLFxuICBcInRna1wiOiBcInRnXCIsXG4gIFwidGdsXCI6IFwiZmlsXCIsXG4gIFwidGhhXCI6IFwidGhcIixcbiAgXCJ0aGNcIjogXCJ0cG9cIixcbiAgXCJ0aHhcIjogXCJveWJcIixcbiAgXCJ0aWJcIjogXCJib1wiLFxuICBcInRpZVwiOiBcInJhc1wiLFxuICBcInRpclwiOiBcInRpXCIsXG4gIFwidGtrXCI6IFwidHdtXCIsXG4gIFwidGxcIjogXCJmaWxcIixcbiAgXCJ0bHdcIjogXCJ3ZW9cIixcbiAgXCJ0bXBcIjogXCJ0eWpcIixcbiAgXCJ0bmVcIjogXCJrYWtcIixcbiAgXCJ0bmZcIjogXCJmYS1hZlwiLFxuICBcInRvblwiOiBcInRvXCIsXG4gIFwidHNmXCI6IFwidGFqXCIsXG4gIFwidHNuXCI6IFwidG5cIixcbiAgXCJ0c29cIjogXCJ0c1wiLFxuICBcInR0cVwiOiBcInRtaFwiLFxuICBcInR1a1wiOiBcInRrXCIsXG4gIFwidHVyXCI6IFwidHJcIixcbiAgXCJ0d1wiOiBcImFrXCIsXG4gIFwidHdpXCI6IFwiYWtcIixcbiAgXCJ0em0tTGF0bi1NQVwiOiBcInR6bS1NQVwiLFxuICBcInVnLUFyYWItQ05cIjogXCJ1Zy1DTlwiLFxuICBcInVpZ1wiOiBcInVnXCIsXG4gIFwidWtyXCI6IFwidWtcIixcbiAgXCJ1bXVcIjogXCJkZWxcIixcbiAgXCJ1b2tcIjogXCJlbWFcIixcbiAgXCJ1cmRcIjogXCJ1clwiLFxuICBcInV6LUFGXCI6IFwidXotQXJhYi1BRlwiLFxuICBcInV6LVVaXCI6IFwidXotTGF0bi1VWlwiLFxuICBcInV6YlwiOiBcInV6XCIsXG4gIFwidXpuXCI6IFwidXpcIixcbiAgXCJ2YWktTFJcIjogXCJ2YWktVmFpaS1MUlwiLFxuICBcInZlblwiOiBcInZlXCIsXG4gIFwidmllXCI6IFwidmlcIixcbiAgXCJ2b2xcIjogXCJ2b1wiLFxuICBcIndlbFwiOiBcImN5XCIsXG4gIFwid2xuXCI6IFwid2FcIixcbiAgXCJ3b2xcIjogXCJ3b1wiLFxuICBcInhiYVwiOiBcImNheFwiLFxuICBcInhob1wiOiBcInhoXCIsXG4gIFwieGlhXCI6IFwiYWNuXCIsXG4gIFwieGtoXCI6IFwid2F3XCIsXG4gIFwieHBlXCI6IFwia3BlXCIsXG4gIFwieHNqXCI6IFwic3VqXCIsXG4gIFwieHNsXCI6IFwiZGVuXCIsXG4gIFwieWJkXCI6IFwicmtpXCIsXG4gIFwieWRkXCI6IFwieWlcIixcbiAgXCJ5aWRcIjogXCJ5aVwiLFxuICBcInltYVwiOiBcImxyclwiLFxuICBcInltdFwiOiBcIm10bVwiLFxuICBcInlvclwiOiBcInlvXCIsXG4gIFwieW9zXCI6IFwiem9tXCIsXG4gIFwieXVlLUNOXCI6IFwieXVlLUhhbnMtQ05cIixcbiAgXCJ5dWUtSEtcIjogXCJ5dWUtSGFudC1IS1wiLFxuICBcInl1dVwiOiBcInl1Z1wiLFxuICBcInphaVwiOiBcInphcFwiLFxuICBcInpoLUNOXCI6IFwiemgtSGFucy1DTlwiLFxuICBcInpoLWd1b3l1XCI6IFwiemhcIixcbiAgXCJ6aC1oYWtrYVwiOiBcImhha1wiLFxuICBcInpoLUhLXCI6IFwiemgtSGFudC1IS1wiLFxuICBcInpoLW1pbi1uYW5cIjogXCJuYW5cIixcbiAgXCJ6aC1NT1wiOiBcInpoLUhhbnQtTU9cIixcbiAgXCJ6aC1TR1wiOiBcInpoLUhhbnMtU0dcIixcbiAgXCJ6aC1UV1wiOiBcInpoLUhhbnQtVFdcIixcbiAgXCJ6aC14aWFuZ1wiOiBcImhzblwiLFxuICBcInpoLW1pblwiOiBcIm5hbi14LXpoLW1pblwiLFxuICBcInpoYVwiOiBcInphXCIsXG4gIFwiemhvXCI6IFwiemhcIixcbiAgXCJ6c21cIjogXCJtc1wiLFxuICBcInp1bFwiOiBcInp1XCIsXG4gIFwienliXCI6IFwiemFcIlxufTsiLCIvKiBAZ2VuZXJhdGVkICovXG4vLyBwcmV0dGllci1pZ25vcmUgIFxuZXhwb3J0IGRlZmF1bHQge1xuICBcImVuLTE1MFwiOiBcImVuLTAwMVwiLFxuICBcImVuLUFHXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tQUlcIjogXCJlbi0wMDFcIixcbiAgXCJlbi1BVVwiOiBcImVuLTAwMVwiLFxuICBcImVuLUJCXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tQk1cIjogXCJlbi0wMDFcIixcbiAgXCJlbi1CU1wiOiBcImVuLTAwMVwiLFxuICBcImVuLUJXXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tQlpcIjogXCJlbi0wMDFcIixcbiAgXCJlbi1DQVwiOiBcImVuLTAwMVwiLFxuICBcImVuLUNDXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tQ0tcIjogXCJlbi0wMDFcIixcbiAgXCJlbi1DTVwiOiBcImVuLTAwMVwiLFxuICBcImVuLUNYXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tQ1lcIjogXCJlbi0wMDFcIixcbiAgXCJlbi1ER1wiOiBcImVuLTAwMVwiLFxuICBcImVuLURNXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tRVJcIjogXCJlbi0wMDFcIixcbiAgXCJlbi1GSlwiOiBcImVuLTAwMVwiLFxuICBcImVuLUZLXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tRk1cIjogXCJlbi0wMDFcIixcbiAgXCJlbi1HQlwiOiBcImVuLTAwMVwiLFxuICBcImVuLUdEXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tR0dcIjogXCJlbi0wMDFcIixcbiAgXCJlbi1HSFwiOiBcImVuLTAwMVwiLFxuICBcImVuLUdJXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tR01cIjogXCJlbi0wMDFcIixcbiAgXCJlbi1HWVwiOiBcImVuLTAwMVwiLFxuICBcImVuLUhLXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tSUVcIjogXCJlbi0wMDFcIixcbiAgXCJlbi1JTFwiOiBcImVuLTAwMVwiLFxuICBcImVuLUlNXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tSU5cIjogXCJlbi0wMDFcIixcbiAgXCJlbi1JT1wiOiBcImVuLTAwMVwiLFxuICBcImVuLUpFXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tSk1cIjogXCJlbi0wMDFcIixcbiAgXCJlbi1LRVwiOiBcImVuLTAwMVwiLFxuICBcImVuLUtJXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tS05cIjogXCJlbi0wMDFcIixcbiAgXCJlbi1LWVwiOiBcImVuLTAwMVwiLFxuICBcImVuLUxDXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tTFJcIjogXCJlbi0wMDFcIixcbiAgXCJlbi1MU1wiOiBcImVuLTAwMVwiLFxuICBcImVuLU1HXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tTU9cIjogXCJlbi0wMDFcIixcbiAgXCJlbi1NU1wiOiBcImVuLTAwMVwiLFxuICBcImVuLU1UXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tTVVcIjogXCJlbi0wMDFcIixcbiAgXCJlbi1NV1wiOiBcImVuLTAwMVwiLFxuICBcImVuLU1ZXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tTkFcIjogXCJlbi0wMDFcIixcbiAgXCJlbi1ORlwiOiBcImVuLTAwMVwiLFxuICBcImVuLU5HXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tTlJcIjogXCJlbi0wMDFcIixcbiAgXCJlbi1OVVwiOiBcImVuLTAwMVwiLFxuICBcImVuLU5aXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tUEdcIjogXCJlbi0wMDFcIixcbiAgXCJlbi1QSFwiOiBcImVuLTAwMVwiLFxuICBcImVuLVBLXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tUE5cIjogXCJlbi0wMDFcIixcbiAgXCJlbi1QV1wiOiBcImVuLTAwMVwiLFxuICBcImVuLVJXXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tU0JcIjogXCJlbi0wMDFcIixcbiAgXCJlbi1TQ1wiOiBcImVuLTAwMVwiLFxuICBcImVuLVNEXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tU0dcIjogXCJlbi0wMDFcIixcbiAgXCJlbi1TSFwiOiBcImVuLTAwMVwiLFxuICBcImVuLVNMXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tU1NcIjogXCJlbi0wMDFcIixcbiAgXCJlbi1TWFwiOiBcImVuLTAwMVwiLFxuICBcImVuLVNaXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tVENcIjogXCJlbi0wMDFcIixcbiAgXCJlbi1US1wiOiBcImVuLTAwMVwiLFxuICBcImVuLVRPXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tVFRcIjogXCJlbi0wMDFcIixcbiAgXCJlbi1UVlwiOiBcImVuLTAwMVwiLFxuICBcImVuLVRaXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tVUdcIjogXCJlbi0wMDFcIixcbiAgXCJlbi1WQ1wiOiBcImVuLTAwMVwiLFxuICBcImVuLVZHXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tVlVcIjogXCJlbi0wMDFcIixcbiAgXCJlbi1XU1wiOiBcImVuLTAwMVwiLFxuICBcImVuLVpBXCI6IFwiZW4tMDAxXCIsXG4gIFwiZW4tWk1cIjogXCJlbi0wMDFcIixcbiAgXCJlbi1aV1wiOiBcImVuLTAwMVwiLFxuICBcImVuLUFUXCI6IFwiZW4tMTUwXCIsXG4gIFwiZW4tQkVcIjogXCJlbi0xNTBcIixcbiAgXCJlbi1DSFwiOiBcImVuLTE1MFwiLFxuICBcImVuLURFXCI6IFwiZW4tMTUwXCIsXG4gIFwiZW4tREtcIjogXCJlbi0xNTBcIixcbiAgXCJlbi1GSVwiOiBcImVuLTE1MFwiLFxuICBcImVuLU5MXCI6IFwiZW4tMTUwXCIsXG4gIFwiZW4tU0VcIjogXCJlbi0xNTBcIixcbiAgXCJlbi1TSVwiOiBcImVuLTE1MFwiLFxuICBcImVzLUFSXCI6IFwiZXMtNDE5XCIsXG4gIFwiZXMtQk9cIjogXCJlcy00MTlcIixcbiAgXCJlcy1CUlwiOiBcImVzLTQxOVwiLFxuICBcImVzLUJaXCI6IFwiZXMtNDE5XCIsXG4gIFwiZXMtQ0xcIjogXCJlcy00MTlcIixcbiAgXCJlcy1DT1wiOiBcImVzLTQxOVwiLFxuICBcImVzLUNSXCI6IFwiZXMtNDE5XCIsXG4gIFwiZXMtQ1VcIjogXCJlcy00MTlcIixcbiAgXCJlcy1ET1wiOiBcImVzLTQxOVwiLFxuICBcImVzLUVDXCI6IFwiZXMtNDE5XCIsXG4gIFwiZXMtR1RcIjogXCJlcy00MTlcIixcbiAgXCJlcy1ITlwiOiBcImVzLTQxOVwiLFxuICBcImVzLU1YXCI6IFwiZXMtNDE5XCIsXG4gIFwiZXMtTklcIjogXCJlcy00MTlcIixcbiAgXCJlcy1QQVwiOiBcImVzLTQxOVwiLFxuICBcImVzLVBFXCI6IFwiZXMtNDE5XCIsXG4gIFwiZXMtUFJcIjogXCJlcy00MTlcIixcbiAgXCJlcy1QWVwiOiBcImVzLTQxOVwiLFxuICBcImVzLVNWXCI6IFwiZXMtNDE5XCIsXG4gIFwiZXMtVVNcIjogXCJlcy00MTlcIixcbiAgXCJlcy1VWVwiOiBcImVzLTQxOVwiLFxuICBcImVzLVZFXCI6IFwiZXMtNDE5XCIsXG4gIFwicHQtQU9cIjogXCJwdC1QVFwiLFxuICBcInB0LUNIXCI6IFwicHQtUFRcIixcbiAgXCJwdC1DVlwiOiBcInB0LVBUXCIsXG4gIFwicHQtRlJcIjogXCJwdC1QVFwiLFxuICBcInB0LUdRXCI6IFwicHQtUFRcIixcbiAgXCJwdC1HV1wiOiBcInB0LVBUXCIsXG4gIFwicHQtTFVcIjogXCJwdC1QVFwiLFxuICBcInB0LU1PXCI6IFwicHQtUFRcIixcbiAgXCJwdC1NWlwiOiBcInB0LVBUXCIsXG4gIFwicHQtU1RcIjogXCJwdC1QVFwiLFxuICBcInB0LVRMXCI6IFwicHQtUFRcIixcbiAgXCJ6aC1IYW50LU1PXCI6IFwiemgtSGFudC1IS1wiXG59OyIsImltcG9ydCBhbGlhc2VzIGZyb20gJy4vYWxpYXNlcyc7XG5pbXBvcnQgcGFyZW50TG9jYWxlcyBmcm9tICcuL3BhcmVudExvY2FsZXMnO1xuaW1wb3J0IHsgaW52YXJpYW50IH0gZnJvbSAnLi9pbnZhcmlhbnQnO1xuLyoqXG4gKiBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvb2JqZWN0XG4gKiBAcGFyYW0gYXJnXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHRvT2JqZWN0KGFyZykge1xuICBpZiAoYXJnID09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd1bmRlZmluZWQvbnVsbCBjYW5ub3QgYmUgY29udmVydGVkIHRvIG9iamVjdCcpO1xuICB9XG5cbiAgcmV0dXJuIE9iamVjdChhcmcpO1xufVxuLyoqXG4gKiBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvc3RyaW5nXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHRvU3RyaW5nKG8pIHtcbiAgLy8gT25seSBzeW1ib2wgaXMgaXJyZWd1bGFyLi4uXG4gIGlmICh0eXBlb2YgbyA9PT0gJ3N5bWJvbCcpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IGEgU3ltYm9sIHZhbHVlIHRvIGEgc3RyaW5nJyk7XG4gIH1cblxuICByZXR1cm4gU3RyaW5nKG8pO1xufVxuLyoqXG4gKiBodHRwczovL3RjMzkuZXMvZWNtYTQwMi8jc2VjLWdldG9wdGlvblxuICogQHBhcmFtIG9wdHNcbiAqIEBwYXJhbSBwcm9wXG4gKiBAcGFyYW0gdHlwZVxuICogQHBhcmFtIHZhbHVlc1xuICogQHBhcmFtIGZhbGxiYWNrXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE9wdGlvbihvcHRzLCBwcm9wLCB0eXBlLCB2YWx1ZXMsIGZhbGxiYWNrKSB7XG4gIC8vIGNvbnN0IGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9wdHMsIHByb3ApO1xuICB2YXIgdmFsdWUgPSBvcHRzW3Byb3BdO1xuXG4gIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHR5cGUgIT09ICdib29sZWFuJyAmJiB0eXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCB0eXBlJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgPT09ICdib29sZWFuJykge1xuICAgICAgdmFsdWUgPSBCb29sZWFuKHZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHZhbHVlID0gdG9TdHJpbmcodmFsdWUpO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZXMgIT09IHVuZGVmaW5lZCAmJiAhdmFsdWVzLmZpbHRlcihmdW5jdGlvbiAodmFsKSB7XG4gICAgICByZXR1cm4gdmFsID09IHZhbHVlO1xuICAgIH0pLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IodmFsdWUgKyBcIiBpcyBub3Qgd2l0aGluIFwiICsgdmFsdWVzLmpvaW4oJywgJykpO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxsYmFjaztcbn1cbi8qKlxuICogaHR0cHM6Ly90YzM5LmVzL2VjbWE0MDIvI3NlYy1kZWZhdWx0bnVtYmVyb3B0aW9uXG4gKiBAcGFyYW0gdmFsXG4gKiBAcGFyYW0gbWluXG4gKiBAcGFyYW0gbWF4XG4gKiBAcGFyYW0gZmFsbGJhY2tcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZGVmYXVsdE51bWJlck9wdGlvbih2YWwsIG1pbiwgbWF4LCBmYWxsYmFjaykge1xuICBpZiAodmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YWwgPSBOdW1iZXIodmFsKTtcblxuICAgIGlmIChpc05hTih2YWwpIHx8IHZhbCA8IG1pbiB8fCB2YWwgPiBtYXgpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKHZhbCArIFwiIGlzIG91dHNpZGUgb2YgcmFuZ2UgW1wiICsgbWluICsgXCIsIFwiICsgbWF4ICsgXCJdXCIpO1xuICAgIH1cblxuICAgIHJldHVybiBNYXRoLmZsb29yKHZhbCk7XG4gIH1cblxuICByZXR1cm4gZmFsbGJhY2s7XG59XG4vKipcbiAqIGh0dHBzOi8vdGMzOS5lcy9lY21hNDAyLyNzZWMtZ2V0bnVtYmVyb3B0aW9uXG4gKiBAcGFyYW0gb3B0aW9uc1xuICogQHBhcmFtIHByb3BlcnR5XG4gKiBAcGFyYW0gbWluXG4gKiBAcGFyYW0gbWF4XG4gKiBAcGFyYW0gZmFsbGJhY2tcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TnVtYmVyT3B0aW9uKG9wdGlvbnMsIHByb3BlcnR5LCBtaW5pbXVtLCBtYXhpbXVtLCBmYWxsYmFjaykge1xuICB2YXIgdmFsID0gb3B0aW9uc1twcm9wZXJ0eV07XG4gIHJldHVybiBkZWZhdWx0TnVtYmVyT3B0aW9uKHZhbCwgbWluaW11bSwgbWF4aW11bSwgZmFsbGJhY2spO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldEFsaWFzZXNCeUxhbmcobGFuZykge1xuICByZXR1cm4gT2JqZWN0LmtleXMoYWxpYXNlcykucmVkdWNlKGZ1bmN0aW9uIChhbGwsIGxvY2FsZSkge1xuICAgIGlmIChsb2NhbGUuc3BsaXQoJy0nKVswXSA9PT0gbGFuZykge1xuICAgICAgYWxsW2xvY2FsZV0gPSBhbGlhc2VzW2xvY2FsZV07XG4gICAgfVxuXG4gICAgcmV0dXJuIGFsbDtcbiAgfSwge30pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcmVudExvY2FsZXNCeUxhbmcobGFuZykge1xuICByZXR1cm4gT2JqZWN0LmtleXMocGFyZW50TG9jYWxlcykucmVkdWNlKGZ1bmN0aW9uIChhbGwsIGxvY2FsZSkge1xuICAgIGlmIChsb2NhbGUuc3BsaXQoJy0nKVswXSA9PT0gbGFuZykge1xuICAgICAgYWxsW2xvY2FsZV0gPSBwYXJlbnRMb2NhbGVzW2xvY2FsZV07XG4gICAgfVxuXG4gICAgcmV0dXJuIGFsbDtcbiAgfSwge30pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHNldEludGVybmFsU2xvdChtYXAsIHBsLCBmaWVsZCwgdmFsdWUpIHtcbiAgaWYgKCFtYXAuZ2V0KHBsKSkge1xuICAgIG1hcC5zZXQocGwsIE9iamVjdC5jcmVhdGUobnVsbCkpO1xuICB9XG5cbiAgdmFyIHNsb3RzID0gbWFwLmdldChwbCk7XG4gIHNsb3RzW2ZpZWxkXSA9IHZhbHVlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHNldE11bHRpSW50ZXJuYWxTbG90cyhtYXAsIHBsLCBwcm9wcykge1xuICBmb3IgKHZhciBfaSA9IDAsIF9hID0gT2JqZWN0LmtleXMocHJvcHMpOyBfaSA8IF9hLmxlbmd0aDsgX2krKykge1xuICAgIHZhciBrID0gX2FbX2ldO1xuICAgIHNldEludGVybmFsU2xvdChtYXAsIHBsLCBrLCBwcm9wc1trXSk7XG4gIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnRlcm5hbFNsb3QobWFwLCBwbCwgZmllbGQpIHtcbiAgcmV0dXJuIGdldE11bHRpSW50ZXJuYWxTbG90cyhtYXAsIHBsLCBmaWVsZClbZmllbGRdO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldE11bHRpSW50ZXJuYWxTbG90cyhtYXAsIHBsKSB7XG4gIHZhciBmaWVsZHMgPSBbXTtcblxuICBmb3IgKHZhciBfaSA9IDI7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgIGZpZWxkc1tfaSAtIDJdID0gYXJndW1lbnRzW19pXTtcbiAgfVxuXG4gIHZhciBzbG90cyA9IG1hcC5nZXQocGwpO1xuXG4gIGlmICghc2xvdHMpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHBsICsgXCIgSW50ZXJuYWxTbG90IGhhcyBub3QgYmVlbiBpbml0aWFsaXplZFwiKTtcbiAgfVxuXG4gIHJldHVybiBmaWVsZHMucmVkdWNlKGZ1bmN0aW9uIChhbGwsIGYpIHtcbiAgICBhbGxbZl0gPSBzbG90c1tmXTtcbiAgICByZXR1cm4gYWxsO1xuICB9LCBPYmplY3QuY3JlYXRlKG51bGwpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0xpdGVyYWxQYXJ0KHBhdHRlcm5QYXJ0KSB7XG4gIHJldHVybiBwYXR0ZXJuUGFydC50eXBlID09PSAnbGl0ZXJhbCc7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFydGl0aW9uUGF0dGVybihwYXR0ZXJuKSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGJlZ2luSW5kZXggPSBwYXR0ZXJuLmluZGV4T2YoJ3snKTtcbiAgdmFyIGVuZEluZGV4ID0gMDtcbiAgdmFyIG5leHRJbmRleCA9IDA7XG4gIHZhciBsZW5ndGggPSBwYXR0ZXJuLmxlbmd0aDtcblxuICB3aGlsZSAoYmVnaW5JbmRleCA8IHBhdHRlcm4ubGVuZ3RoICYmIGJlZ2luSW5kZXggPiAtMSkge1xuICAgIGVuZEluZGV4ID0gcGF0dGVybi5pbmRleE9mKCd9JywgYmVnaW5JbmRleCk7XG4gICAgaW52YXJpYW50KGVuZEluZGV4ID4gYmVnaW5JbmRleCwgXCJJbnZhbGlkIHBhdHRlcm4gXCIgKyBwYXR0ZXJuKTtcblxuICAgIGlmIChiZWdpbkluZGV4ID4gbmV4dEluZGV4KSB7XG4gICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgIHR5cGU6ICdsaXRlcmFsJyxcbiAgICAgICAgdmFsdWU6IHBhdHRlcm4uc3Vic3RyaW5nKG5leHRJbmRleCwgYmVnaW5JbmRleClcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgIHR5cGU6IHBhdHRlcm4uc3Vic3RyaW5nKGJlZ2luSW5kZXggKyAxLCBlbmRJbmRleCksXG4gICAgICB2YWx1ZTogdW5kZWZpbmVkXG4gICAgfSk7XG4gICAgbmV4dEluZGV4ID0gZW5kSW5kZXggKyAxO1xuICAgIGJlZ2luSW5kZXggPSBwYXR0ZXJuLmluZGV4T2YoJ3snLCBuZXh0SW5kZXgpO1xuICB9XG5cbiAgaWYgKG5leHRJbmRleCA8IGxlbmd0aCkge1xuICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgIHR5cGU6ICdsaXRlcmFsJyxcbiAgICAgIHZhbHVlOiBwYXR0ZXJuLnN1YnN0cmluZyhuZXh0SW5kZXgsIGxlbmd0aClcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG4vKipcbiAqIGh0dHBzOi8vdGMzOS5lcy9lY21hNDAyLyNzZWMtc2V0bmZkaWdpdG9wdGlvbnNcbiAqIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC11bmlmaWVkLWludGwtbnVtYmVyZm9ybWF0L3NlY3Rpb24xMS9udW1iZXJmb3JtYXRfZGlmZl9vdXQuaHRtbCNzZWMtc2V0bmZkaWdpdG9wdGlvbnNcbiAqIEBwYXJhbSBpbnRsT2JqXG4gKiBAcGFyYW0gb3B0c1xuICogQHBhcmFtIG1uZmREZWZhdWx0XG4gKiBAcGFyYW0gbXhmZERlZmF1bHRcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc2V0TnVtYmVyRm9ybWF0RGlnaXRPcHRpb25zKGludGVybmFsU2xvdE1hcCwgaW50bE9iaiwgb3B0cywgbW5mZERlZmF1bHQsIG14ZmREZWZhdWx0KSB7XG4gIHZhciBtbmlkID0gZ2V0TnVtYmVyT3B0aW9uKG9wdHMsICdtaW5pbXVtSW50ZWdlckRpZ2l0cycsIDEsIDIxLCAxKTtcbiAgdmFyIG1uZmQgPSBvcHRzLm1pbmltdW1GcmFjdGlvbkRpZ2l0cztcbiAgdmFyIG14ZmQgPSBvcHRzLm1heGltdW1GcmFjdGlvbkRpZ2l0cztcbiAgdmFyIG1uc2QgPSBvcHRzLm1pbmltdW1TaWduaWZpY2FudERpZ2l0cztcbiAgdmFyIG14c2QgPSBvcHRzLm1heGltdW1TaWduaWZpY2FudERpZ2l0cztcbiAgc2V0SW50ZXJuYWxTbG90KGludGVybmFsU2xvdE1hcCwgaW50bE9iaiwgJ21pbmltdW1JbnRlZ2VyRGlnaXRzJywgbW5pZCk7XG5cbiAgaWYgKG1uc2QgIT09IHVuZGVmaW5lZCB8fCBteHNkICE9PSB1bmRlZmluZWQpIHtcbiAgICBzZXRJbnRlcm5hbFNsb3QoaW50ZXJuYWxTbG90TWFwLCBpbnRsT2JqLCAncm91bmRpbmdUeXBlJywgJ3NpZ25pZmljYW50RGlnaXRzJyk7XG4gICAgbW5zZCA9IGRlZmF1bHROdW1iZXJPcHRpb24obW5zZCwgMSwgMjEsIDEpO1xuICAgIG14c2QgPSBkZWZhdWx0TnVtYmVyT3B0aW9uKG14c2QsIG1uc2QsIDIxLCAyMSk7XG4gICAgc2V0SW50ZXJuYWxTbG90KGludGVybmFsU2xvdE1hcCwgaW50bE9iaiwgJ21pbmltdW1TaWduaWZpY2FudERpZ2l0cycsIG1uc2QpO1xuICAgIHNldEludGVybmFsU2xvdChpbnRlcm5hbFNsb3RNYXAsIGludGxPYmosICdtYXhpbXVtU2lnbmlmaWNhbnREaWdpdHMnLCBteHNkKTtcbiAgfSBlbHNlIGlmIChtbmZkICE9PSB1bmRlZmluZWQgfHwgbXhmZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgc2V0SW50ZXJuYWxTbG90KGludGVybmFsU2xvdE1hcCwgaW50bE9iaiwgJ3JvdW5kaW5nVHlwZScsICdmcmFjdGlvbkRpZ2l0cycpO1xuICAgIG1uZmQgPSBkZWZhdWx0TnVtYmVyT3B0aW9uKG1uZmQsIDAsIDIwLCBtbmZkRGVmYXVsdCk7XG4gICAgdmFyIG14ZmRBY3R1YWxEZWZhdWx0ID0gTWF0aC5tYXgobW5mZCwgbXhmZERlZmF1bHQpO1xuICAgIG14ZmQgPSBkZWZhdWx0TnVtYmVyT3B0aW9uKG14ZmQsIG1uZmQsIDIwLCBteGZkQWN0dWFsRGVmYXVsdCk7XG4gICAgc2V0SW50ZXJuYWxTbG90KGludGVybmFsU2xvdE1hcCwgaW50bE9iaiwgJ21pbmltdW1GcmFjdGlvbkRpZ2l0cycsIG1uZmQpO1xuICAgIHNldEludGVybmFsU2xvdChpbnRlcm5hbFNsb3RNYXAsIGludGxPYmosICdtYXhpbXVtRnJhY3Rpb25EaWdpdHMnLCBteGZkKTtcbiAgfSBlbHNlIGlmIChnZXRJbnRlcm5hbFNsb3QoaW50ZXJuYWxTbG90TWFwLCBpbnRsT2JqLCAnbm90YXRpb24nKSA9PT0gJ2NvbXBhY3QnKSB7XG4gICAgc2V0SW50ZXJuYWxTbG90KGludGVybmFsU2xvdE1hcCwgaW50bE9iaiwgJ3JvdW5kaW5nVHlwZScsICdjb21wYWN0Um91bmRpbmcnKTtcbiAgfSBlbHNlIHtcbiAgICBzZXRJbnRlcm5hbFNsb3QoaW50ZXJuYWxTbG90TWFwLCBpbnRsT2JqLCAncm91bmRpbmdUeXBlJywgJ2ZyYWN0aW9uRGlnaXRzJyk7XG4gICAgc2V0SW50ZXJuYWxTbG90KGludGVybmFsU2xvdE1hcCwgaW50bE9iaiwgJ21pbmltdW1GcmFjdGlvbkRpZ2l0cycsIG1uZmREZWZhdWx0KTtcbiAgICBzZXRJbnRlcm5hbFNsb3QoaW50ZXJuYWxTbG90TWFwLCBpbnRsT2JqLCAnbWF4aW11bUZyYWN0aW9uRGlnaXRzJywgbXhmZERlZmF1bHQpO1xuICB9XG59XG5leHBvcnQgZnVuY3Rpb24gb2JqZWN0SXMoeCwgeSkge1xuICBpZiAoT2JqZWN0LmlzKSB7XG4gICAgcmV0dXJuIE9iamVjdC5pcyh4LCB5KTtcbiAgfSAvLyBTYW1lVmFsdWUgYWxnb3JpdGhtXG5cblxuICBpZiAoeCA9PT0geSkge1xuICAgIC8vIFN0ZXBzIDEtNSwgNy0xMFxuICAgIC8vIFN0ZXBzIDYuYi02LmU6ICswICE9IC0wXG4gICAgcmV0dXJuIHggIT09IDAgfHwgMSAvIHggPT09IDEgLyB5O1xuICB9IC8vIFN0ZXAgNi5hOiBOYU4gPT0gTmFOXG5cblxuICByZXR1cm4geCAhPT0geCAmJiB5ICE9PSB5O1xufVxudmFyIE5PVF9BX1pfUkVHRVggPSAvW15BLVpdLztcbi8qKlxuICogVGhpcyBmb2xsb3dzIGh0dHBzOi8vdGMzOS5lcy9lY21hNDAyLyNzZWMtY2FzZS1zZW5zaXRpdml0eS1hbmQtY2FzZS1tYXBwaW5nXG4gKiBAcGFyYW0gc3RyIHN0cmluZyB0byBjb252ZXJ0XG4gKi9cblxuZnVuY3Rpb24gdG9VcHBlckNhc2Uoc3RyKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZSgvKFthLXpdKS9nLCBmdW5jdGlvbiAoXywgYykge1xuICAgIHJldHVybiBjLnRvVXBwZXJDYXNlKCk7XG4gIH0pO1xufVxuLyoqXG4gKiBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtdW5pZmllZC1pbnRsLW51bWJlcmZvcm1hdC9zZWN0aW9uNi9sb2NhbGVzLWN1cnJlbmNpZXMtdHpfcHJvcG9zZWRfb3V0Lmh0bWwjc2VjLWlzd2VsbGZvcm1lZGN1cnJlbmN5Y29kZVxuICogQHBhcmFtIGN1cnJlbmN5XG4gKi9cblxuXG5leHBvcnQgZnVuY3Rpb24gaXNXZWxsRm9ybWVkQ3VycmVuY3lDb2RlKGN1cnJlbmN5KSB7XG4gIGN1cnJlbmN5ID0gdG9VcHBlckNhc2UoY3VycmVuY3kpO1xuXG4gIGlmIChjdXJyZW5jeS5sZW5ndGggIT09IDMpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoTk9UX0FfWl9SRUdFWC50ZXN0KGN1cnJlbmN5KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufSIsIi8qKlxuICogSUUxMS1zYWZlIHZlcnNpb24gb2YgZ2V0Q2Fub25pY2FsTG9jYWxlcyBzaW5jZSBpdCdzIEVTMjAxNlxuICogQHBhcmFtIGxvY2FsZXMgbG9jYWxlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2Fub25pY2FsTG9jYWxlcyhsb2NhbGVzKSB7XG4gIC8vIElFMTFcbiAgdmFyIGdldENhbm9uaWNhbExvY2FsZXMgPSBJbnRsLmdldENhbm9uaWNhbExvY2FsZXM7XG5cbiAgaWYgKHR5cGVvZiBnZXRDYW5vbmljYWxMb2NhbGVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGdldENhbm9uaWNhbExvY2FsZXMobG9jYWxlcyk7XG4gIH0gLy8gTk9URTogd2UgbXVzdCBOT1QgY2FsbCBgc3VwcG9ydGVkTG9jYWxlc09mYCBvZiBhIGZvcm1hdGpzIHBvbHlmaWxsLCBvciB0aGVpciBpbXBsZW1lbnRhdGlvblxuICAvLyB3aWxsIGV2ZW4gZXZlbnR1YWxseSBjYWxsIHRoaXMgbWV0aG9kIHJlY3Vyc2l2ZWx5LiBIZXJlIHdlIHVzZSBgSW50bC5EYXRlVGltZUZvcm1hdGAgc2luY2UgaXRcbiAgLy8gaXMgbm90IHBvbHlmaWxsZWQgYnkgYEBmb3JtYXRqc2AuXG4gIC8vIFRPRE86IEZpeCBUeXBlU2NyaXB0IHR5cGUgZGVmIGZvciB0aGlzIGJjIHVuZGVmaW5lZCBpcyBqdXN0IGZpbmVcblxuXG4gIHJldHVybiBJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZihsb2NhbGVzKTtcbn0iLCJ2YXIgX19leHRlbmRzID0gdGhpcyAmJiB0aGlzLl9fZXh0ZW5kcyB8fCBmdW5jdGlvbiAoKSB7XG4gIHZhciBfZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIGV4dGVuZFN0YXRpY3MoZCwgYikge1xuICAgIF9leHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IHtcbiAgICAgIF9fcHJvdG9fXzogW11cbiAgICB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgIGQuX19wcm90b19fID0gYjtcbiAgICB9IHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICBmb3IgKHZhciBwIGluIGIpIHtcbiAgICAgICAgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdO1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gX2V4dGVuZFN0YXRpY3MoZCwgYik7XG4gIH07XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgX2V4dGVuZFN0YXRpY3MoZCwgYik7XG5cbiAgICBmdW5jdGlvbiBfXygpIHtcbiAgICAgIHRoaXMuY29uc3RydWN0b3IgPSBkO1xuICAgIH1cblxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgfTtcbn0oKTtcblxudmFyIF9fYXNzaWduID0gdGhpcyAmJiB0aGlzLl9fYXNzaWduIHx8IGZ1bmN0aW9uICgpIHtcbiAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0KSB7XG4gICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICBzID0gYXJndW1lbnRzW2ldO1xuXG4gICAgICBmb3IgKHZhciBwIGluIHMpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdFtwXSA9IHNbcF07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHQ7XG4gIH07XG5cbiAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xuXG5pbXBvcnQgeyBnZXRDYW5vbmljYWxMb2NhbGVzIH0gZnJvbSAnLi9nZXQtY2Fub25pY2FsLWxvY2FsZXMnO1xuaW1wb3J0IHsgaW52YXJpYW50IH0gZnJvbSAnLi9pbnZhcmlhbnQnO1xuaW1wb3J0IHsgdG9PYmplY3QsIGdldE9wdGlvbiB9IGZyb20gJy4vcG9seWZpbGwtdXRpbHMnO1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlc29sdmVMb2NhbGUoZ2V0RGVmYXVsdExvY2FsZSkge1xuICB2YXIgbG9va3VwTWF0Y2hlciA9IGNyZWF0ZUxvb2t1cE1hdGNoZXIoZ2V0RGVmYXVsdExvY2FsZSk7XG4gIHZhciBiZXN0Rml0TWF0Y2hlciA9IGNyZWF0ZUJlc3RGaXRNYXRjaGVyKGdldERlZmF1bHRMb2NhbGUpO1xuICAvKipcbiAgICogaHR0cHM6Ly90YzM5LmVzL2VjbWE0MDIvI3NlYy1yZXNvbHZlbG9jYWxlXG4gICAqL1xuXG4gIHJldHVybiBmdW5jdGlvbiByZXNvbHZlTG9jYWxlKGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMsIG9wdGlvbnMsIHJlbGV2YW50RXh0ZW5zaW9uS2V5cywgbG9jYWxlRGF0YSkge1xuICAgIHZhciBtYXRjaGVyID0gb3B0aW9ucy5sb2NhbGVNYXRjaGVyO1xuICAgIHZhciByO1xuXG4gICAgaWYgKG1hdGNoZXIgPT09ICdsb29rdXAnKSB7XG4gICAgICByID0gbG9va3VwTWF0Y2hlcihhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgciA9IGJlc3RGaXRNYXRjaGVyKGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMpO1xuICAgIH1cblxuICAgIHZhciBmb3VuZExvY2FsZSA9IHIubG9jYWxlO1xuICAgIHZhciByZXN1bHQgPSB7XG4gICAgICBsb2NhbGU6ICcnLFxuICAgICAgZGF0YUxvY2FsZTogZm91bmRMb2NhbGVcbiAgICB9O1xuICAgIHZhciBzdXBwb3J0ZWRFeHRlbnNpb24gPSAnLXUnO1xuXG4gICAgZm9yICh2YXIgX2kgPSAwLCByZWxldmFudEV4dGVuc2lvbktleXNfMSA9IHJlbGV2YW50RXh0ZW5zaW9uS2V5czsgX2kgPCByZWxldmFudEV4dGVuc2lvbktleXNfMS5sZW5ndGg7IF9pKyspIHtcbiAgICAgIHZhciBrZXkgPSByZWxldmFudEV4dGVuc2lvbktleXNfMVtfaV07XG4gICAgICB2YXIgZm91bmRMb2NhbGVEYXRhID0gbG9jYWxlRGF0YVtmb3VuZExvY2FsZV07XG4gICAgICBpbnZhcmlhbnQodHlwZW9mIGZvdW5kTG9jYWxlRGF0YSA9PT0gJ29iamVjdCcgJiYgZm91bmRMb2NhbGVEYXRhICE9PSBudWxsLCBcImxvY2FsZSBkYXRhIFwiICsga2V5ICsgXCIgbXVzdCBiZSBhbiBvYmplY3RcIik7XG4gICAgICB2YXIga2V5TG9jYWxlRGF0YSA9IGZvdW5kTG9jYWxlRGF0YVtrZXldO1xuICAgICAgaW52YXJpYW50KEFycmF5LmlzQXJyYXkoa2V5TG9jYWxlRGF0YSksIFwia2V5TG9jYWxlRGF0YSBmb3IgXCIgKyBrZXkgKyBcIiBtdXN0IGJlIGFuIGFycmF5XCIpO1xuICAgICAgdmFyIHZhbHVlID0ga2V5TG9jYWxlRGF0YVswXTtcbiAgICAgIGludmFyaWFudCh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8IHZhbHVlID09PSBudWxsLCAndmFsdWUgbXVzdCBiZSBzdHJpbmcgb3IgbnVsbCcpO1xuICAgICAgdmFyIHN1cHBvcnRlZEV4dGVuc2lvbkFkZGl0aW9uID0gJyc7XG5cbiAgICAgIGlmIChyLmV4dGVuc2lvbikge1xuICAgICAgICB2YXIgcmVxdWVzdGVkVmFsdWUgPSB1bmljb2RlRXh0ZW5zaW9uVmFsdWUoci5leHRlbnNpb24sIGtleSk7XG5cbiAgICAgICAgaWYgKHJlcXVlc3RlZFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZiAocmVxdWVzdGVkVmFsdWUgIT09ICcnKSB7XG4gICAgICAgICAgICBpZiAofmtleUxvY2FsZURhdGEuaW5kZXhPZihyZXF1ZXN0ZWRWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgdmFsdWUgPSByZXF1ZXN0ZWRWYWx1ZTtcbiAgICAgICAgICAgICAgc3VwcG9ydGVkRXh0ZW5zaW9uQWRkaXRpb24gPSBcIi1cIiArIGtleSArIFwiLVwiICsgdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmICh+cmVxdWVzdGVkVmFsdWUuaW5kZXhPZigndHJ1ZScpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9ICd0cnVlJztcbiAgICAgICAgICAgIHN1cHBvcnRlZEV4dGVuc2lvbkFkZGl0aW9uID0gXCItXCIgKyBrZXk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChrZXkgaW4gb3B0aW9ucykge1xuICAgICAgICB2YXIgb3B0aW9uc1ZhbHVlID0gb3B0aW9uc1trZXldO1xuICAgICAgICBpbnZhcmlhbnQodHlwZW9mIG9wdGlvbnNWYWx1ZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIG9wdGlvbnNWYWx1ZSA9PT0gJ3VuZGVmaW5lZCcgfHwgb3B0aW9uc1ZhbHVlID09PSBudWxsLCAnb3B0aW9uc1ZhbHVlIG11c3QgYmUgU3RyaW5nLCBVbmRlZmluZWQgb3IgTnVsbCcpO1xuXG4gICAgICAgIGlmICh+a2V5TG9jYWxlRGF0YS5pbmRleE9mKG9wdGlvbnNWYWx1ZSkpIHtcbiAgICAgICAgICBpZiAob3B0aW9uc1ZhbHVlICE9PSB2YWx1ZSkge1xuICAgICAgICAgICAgdmFsdWUgPSBvcHRpb25zVmFsdWU7XG4gICAgICAgICAgICBzdXBwb3J0ZWRFeHRlbnNpb25BZGRpdGlvbiA9ICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXN1bHRba2V5XSA9IHZhbHVlO1xuICAgICAgc3VwcG9ydGVkRXh0ZW5zaW9uICs9IHN1cHBvcnRlZEV4dGVuc2lvbkFkZGl0aW9uO1xuICAgIH1cblxuICAgIGlmIChzdXBwb3J0ZWRFeHRlbnNpb24ubGVuZ3RoID4gMikge1xuICAgICAgdmFyIHByaXZhdGVJbmRleCA9IGZvdW5kTG9jYWxlLmluZGV4T2YoJy14LScpO1xuXG4gICAgICBpZiAocHJpdmF0ZUluZGV4ID09PSAtMSkge1xuICAgICAgICBmb3VuZExvY2FsZSA9IGZvdW5kTG9jYWxlICsgc3VwcG9ydGVkRXh0ZW5zaW9uO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHByZUV4dGVuc2lvbiA9IGZvdW5kTG9jYWxlLnNsaWNlKDAsIHByaXZhdGVJbmRleCk7XG4gICAgICAgIHZhciBwb3N0RXh0ZW5zaW9uID0gZm91bmRMb2NhbGUuc2xpY2UocHJpdmF0ZUluZGV4LCBmb3VuZExvY2FsZS5sZW5ndGgpO1xuICAgICAgICBmb3VuZExvY2FsZSA9IHByZUV4dGVuc2lvbiArIHN1cHBvcnRlZEV4dGVuc2lvbiArIHBvc3RFeHRlbnNpb247XG4gICAgICB9XG5cbiAgICAgIGZvdW5kTG9jYWxlID0gZ2V0Q2Fub25pY2FsTG9jYWxlcyhmb3VuZExvY2FsZSlbMF07XG4gICAgfVxuXG4gICAgcmVzdWx0LmxvY2FsZSA9IGZvdW5kTG9jYWxlO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59XG4vKipcbiAqIGh0dHBzOi8vdGMzOS5lcy9lY21hNDAyLyNzZWMtdW5pY29kZWV4dGVuc2lvbnZhbHVlXG4gKiBAcGFyYW0gZXh0ZW5zaW9uXG4gKiBAcGFyYW0ga2V5XG4gKi9cblxuZnVuY3Rpb24gdW5pY29kZUV4dGVuc2lvblZhbHVlKGV4dGVuc2lvbiwga2V5KSB7XG4gIGludmFyaWFudChrZXkubGVuZ3RoID09PSAyLCAna2V5IG11c3QgaGF2ZSAyIGVsZW1lbnRzJyk7XG4gIHZhciBzaXplID0gZXh0ZW5zaW9uLmxlbmd0aDtcbiAgdmFyIHNlYXJjaFZhbHVlID0gXCItXCIgKyBrZXkgKyBcIi1cIjtcbiAgdmFyIHBvcyA9IGV4dGVuc2lvbi5pbmRleE9mKHNlYXJjaFZhbHVlKTtcblxuICBpZiAocG9zICE9PSAtMSkge1xuICAgIHZhciBzdGFydCA9IHBvcyArIDQ7XG4gICAgdmFyIGVuZCA9IHN0YXJ0O1xuICAgIHZhciBrID0gc3RhcnQ7XG4gICAgdmFyIGRvbmUgPSBmYWxzZTtcblxuICAgIHdoaWxlICghZG9uZSkge1xuICAgICAgdmFyIGUgPSBleHRlbnNpb24uaW5kZXhPZignLScsIGspO1xuICAgICAgdmFyIGxlbiA9IHZvaWQgMDtcblxuICAgICAgaWYgKGUgPT09IC0xKSB7XG4gICAgICAgIGxlbiA9IHNpemUgLSBrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGVuID0gZSAtIGs7XG4gICAgICB9XG5cbiAgICAgIGlmIChsZW4gPT09IDIpIHtcbiAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKGUgPT09IC0xKSB7XG4gICAgICAgIGVuZCA9IHNpemU7XG4gICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZW5kID0gZTtcbiAgICAgICAgayA9IGUgKyAxO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBleHRlbnNpb24uc2xpY2Uoc3RhcnQsIGVuZCk7XG4gIH1cblxuICBzZWFyY2hWYWx1ZSA9IFwiLVwiICsga2V5O1xuICBwb3MgPSBleHRlbnNpb24uaW5kZXhPZihzZWFyY2hWYWx1ZSk7XG5cbiAgaWYgKHBvcyAhPT0gLTEgJiYgcG9zICsgMyA9PT0gc2l6ZSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbnZhciBVTklDT0RFX0VYVEVOU0lPTl9TRVFVRU5DRV9SRUdFWCA9IC8tdSg/Oi1bMC05YS16XXsyLDh9KSsvZ2k7XG4vKipcbiAqIGh0dHBzOi8vdGMzOS5lcy9lY21hNDAyLyNzZWMtYmVzdGF2YWlsYWJsZWxvY2FsZVxuICogQHBhcmFtIGF2YWlsYWJsZUxvY2FsZXNcbiAqIEBwYXJhbSBsb2NhbGVcbiAqL1xuXG5mdW5jdGlvbiBiZXN0QXZhaWxhYmxlTG9jYWxlKGF2YWlsYWJsZUxvY2FsZXMsIGxvY2FsZSkge1xuICB2YXIgY2FuZGlkYXRlID0gbG9jYWxlO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgaWYgKH5hdmFpbGFibGVMb2NhbGVzLmluZGV4T2YoY2FuZGlkYXRlKSkge1xuICAgICAgcmV0dXJuIGNhbmRpZGF0ZTtcbiAgICB9XG5cbiAgICB2YXIgcG9zID0gY2FuZGlkYXRlLmxhc3RJbmRleE9mKCctJyk7XG5cbiAgICBpZiAoIX5wb3MpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKHBvcyA+PSAyICYmIGNhbmRpZGF0ZVtwb3MgLSAyXSA9PT0gJy0nKSB7XG4gICAgICBwb3MgLT0gMjtcbiAgICB9XG5cbiAgICBjYW5kaWRhdGUgPSBjYW5kaWRhdGUuc2xpY2UoMCwgcG9zKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVMb29rdXBNYXRjaGVyKGdldERlZmF1bHRMb2NhbGUpIHtcbiAgLyoqXG4gICAqIGh0dHBzOi8vdGMzOS5lcy9lY21hNDAyLyNzZWMtbG9va3VwbWF0Y2hlclxuICAgKi9cbiAgcmV0dXJuIGZ1bmN0aW9uIGxvb2t1cE1hdGNoZXIoYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcykge1xuICAgIHZhciByZXN1bHQgPSB7XG4gICAgICBsb2NhbGU6ICcnXG4gICAgfTtcblxuICAgIGZvciAodmFyIF9pID0gMCwgcmVxdWVzdGVkTG9jYWxlc18xID0gcmVxdWVzdGVkTG9jYWxlczsgX2kgPCByZXF1ZXN0ZWRMb2NhbGVzXzEubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgbG9jYWxlID0gcmVxdWVzdGVkTG9jYWxlc18xW19pXTtcbiAgICAgIHZhciBub0V4dGVuc2lvbkxvY2FsZSA9IGxvY2FsZS5yZXBsYWNlKFVOSUNPREVfRVhURU5TSU9OX1NFUVVFTkNFX1JFR0VYLCAnJyk7XG4gICAgICB2YXIgYXZhaWxhYmxlTG9jYWxlID0gYmVzdEF2YWlsYWJsZUxvY2FsZShhdmFpbGFibGVMb2NhbGVzLCBub0V4dGVuc2lvbkxvY2FsZSk7XG5cbiAgICAgIGlmIChhdmFpbGFibGVMb2NhbGUpIHtcbiAgICAgICAgcmVzdWx0LmxvY2FsZSA9IGF2YWlsYWJsZUxvY2FsZTtcblxuICAgICAgICBpZiAobG9jYWxlICE9PSBub0V4dGVuc2lvbkxvY2FsZSkge1xuICAgICAgICAgIHJlc3VsdC5leHRlbnNpb24gPSBsb2NhbGUuc2xpY2Uobm9FeHRlbnNpb25Mb2NhbGUubGVuZ3RoICsgMSwgbG9jYWxlLmxlbmd0aCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJlc3VsdC5sb2NhbGUgPSBnZXREZWZhdWx0TG9jYWxlKCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQmVzdEZpdE1hdGNoZXIoZ2V0RGVmYXVsdExvY2FsZSkge1xuICByZXR1cm4gZnVuY3Rpb24gYmVzdEZpdE1hdGNoZXIoYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcykge1xuICAgIHZhciByZXN1bHQgPSB7XG4gICAgICBsb2NhbGU6ICcnXG4gICAgfTtcblxuICAgIGZvciAodmFyIF9pID0gMCwgcmVxdWVzdGVkTG9jYWxlc18yID0gcmVxdWVzdGVkTG9jYWxlczsgX2kgPCByZXF1ZXN0ZWRMb2NhbGVzXzIubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgbG9jYWxlID0gcmVxdWVzdGVkTG9jYWxlc18yW19pXTtcbiAgICAgIHZhciBub0V4dGVuc2lvbkxvY2FsZSA9IGxvY2FsZS5yZXBsYWNlKFVOSUNPREVfRVhURU5TSU9OX1NFUVVFTkNFX1JFR0VYLCAnJyk7XG4gICAgICB2YXIgYXZhaWxhYmxlTG9jYWxlID0gYmVzdEF2YWlsYWJsZUxvY2FsZShhdmFpbGFibGVMb2NhbGVzLCBub0V4dGVuc2lvbkxvY2FsZSk7XG5cbiAgICAgIGlmIChhdmFpbGFibGVMb2NhbGUpIHtcbiAgICAgICAgcmVzdWx0LmxvY2FsZSA9IGF2YWlsYWJsZUxvY2FsZTtcblxuICAgICAgICBpZiAobG9jYWxlICE9PSBub0V4dGVuc2lvbkxvY2FsZSkge1xuICAgICAgICAgIHJlc3VsdC5leHRlbnNpb24gPSBsb2NhbGUuc2xpY2Uobm9FeHRlbnNpb25Mb2NhbGUubGVuZ3RoICsgMSwgbG9jYWxlLmxlbmd0aCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJlc3VsdC5sb2NhbGUgPSBnZXREZWZhdWx0TG9jYWxlKCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExvY2FsZUhpZXJhcmNoeShsb2NhbGUsIGFsaWFzZXMsIHBhcmVudExvY2FsZXMpIHtcbiAgdmFyIHJlc3VsdHMgPSBbbG9jYWxlXTtcblxuICBpZiAoYWxpYXNlc1tsb2NhbGVdKSB7XG4gICAgbG9jYWxlID0gYWxpYXNlc1tsb2NhbGVdO1xuICAgIHJlc3VsdHMucHVzaChsb2NhbGUpO1xuICB9XG5cbiAgdmFyIHBhcmVudExvY2FsZSA9IHBhcmVudExvY2FsZXNbbG9jYWxlXTtcblxuICBpZiAocGFyZW50TG9jYWxlKSB7XG4gICAgcmVzdWx0cy5wdXNoKHBhcmVudExvY2FsZSk7XG4gIH1cblxuICB2YXIgbG9jYWxlUGFydHMgPSBsb2NhbGUuc3BsaXQoJy0nKTtcblxuICBmb3IgKHZhciBpID0gbG9jYWxlUGFydHMubGVuZ3RoOyBpID4gMTsgaS0tKSB7XG4gICAgcmVzdWx0cy5wdXNoKGxvY2FsZVBhcnRzLnNsaWNlKDAsIGkgLSAxKS5qb2luKCctJykpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdHM7XG59XG5cbmZ1bmN0aW9uIGxvb2t1cFN1cHBvcnRlZExvY2FsZXMoYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcykge1xuICB2YXIgc3Vic2V0ID0gW107XG5cbiAgZm9yICh2YXIgX2kgPSAwLCByZXF1ZXN0ZWRMb2NhbGVzXzMgPSByZXF1ZXN0ZWRMb2NhbGVzOyBfaSA8IHJlcXVlc3RlZExvY2FsZXNfMy5sZW5ndGg7IF9pKyspIHtcbiAgICB2YXIgbG9jYWxlID0gcmVxdWVzdGVkTG9jYWxlc18zW19pXTtcbiAgICB2YXIgbm9FeHRlbnNpb25Mb2NhbGUgPSBsb2NhbGUucmVwbGFjZShVTklDT0RFX0VYVEVOU0lPTl9TRVFVRU5DRV9SRUdFWCwgJycpO1xuICAgIHZhciBhdmFpbGFibGVMb2NhbGUgPSBiZXN0QXZhaWxhYmxlTG9jYWxlKGF2YWlsYWJsZUxvY2FsZXMsIG5vRXh0ZW5zaW9uTG9jYWxlKTtcblxuICAgIGlmIChhdmFpbGFibGVMb2NhbGUpIHtcbiAgICAgIHN1YnNldC5wdXNoKGF2YWlsYWJsZUxvY2FsZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN1YnNldDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvcnRlZExvY2FsZXMoYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcywgb3B0aW9ucykge1xuICB2YXIgbWF0Y2hlciA9ICdiZXN0IGZpdCc7XG5cbiAgaWYgKG9wdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgIG9wdGlvbnMgPSB0b09iamVjdChvcHRpb25zKTtcbiAgICBtYXRjaGVyID0gZ2V0T3B0aW9uKG9wdGlvbnMsICdsb2NhbGVNYXRjaGVyJywgJ3N0cmluZycsIFsnbG9va3VwJywgJ2Jlc3QgZml0J10sICdiZXN0IGZpdCcpO1xuICB9XG5cbiAgaWYgKG1hdGNoZXIgPT09ICdiZXN0IGZpdCcpIHtcbiAgICByZXR1cm4gbG9va3VwU3VwcG9ydGVkTG9jYWxlcyhhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzKTtcbiAgfVxuXG4gIHJldHVybiBsb29rdXBTdXBwb3J0ZWRMb2NhbGVzKGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMpO1xufVxuXG52YXIgTWlzc2luZ0xvY2FsZURhdGFFcnJvciA9XG4vKiogQGNsYXNzICovXG5mdW5jdGlvbiAoX3N1cGVyKSB7XG4gIF9fZXh0ZW5kcyhNaXNzaW5nTG9jYWxlRGF0YUVycm9yLCBfc3VwZXIpO1xuXG4gIGZ1bmN0aW9uIE1pc3NpbmdMb2NhbGVEYXRhRXJyb3IoKSB7XG4gICAgdmFyIF90aGlzID0gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG5cbiAgICBfdGhpcy50eXBlID0gJ01JU1NJTkdfTE9DQUxFX0RBVEEnO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHJldHVybiBNaXNzaW5nTG9jYWxlRGF0YUVycm9yO1xufShFcnJvcik7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc01pc3NpbmdMb2NhbGVEYXRhRXJyb3IoZSkge1xuICByZXR1cm4gZS50eXBlID09PSAnTUlTU0lOR19MT0NBTEVfREFUQSc7XG59XG5leHBvcnQgZnVuY3Rpb24gdW5wYWNrRGF0YShsb2NhbGUsIGxvY2FsZURhdGEsXG4vKiogQnkgZGVmYXVsdCBzaGFsbG93IG1lcmdlIHRoZSBkaWN0aW9uYXJpZXMuICovXG5yZWR1Y2VyKSB7XG4gIGlmIChyZWR1Y2VyID09PSB2b2lkIDApIHtcbiAgICByZWR1Y2VyID0gZnVuY3Rpb24gcmVkdWNlcihhbGwsIGQpIHtcbiAgICAgIHJldHVybiBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgYWxsKSwgZCk7XG4gICAgfTtcbiAgfVxuXG4gIHZhciBsb2NhbGVIaWVyYXJjaHkgPSBnZXRMb2NhbGVIaWVyYXJjaHkobG9jYWxlLCBsb2NhbGVEYXRhLmFsaWFzZXMsIGxvY2FsZURhdGEucGFyZW50TG9jYWxlcyk7XG4gIHZhciBkYXRhVG9NZXJnZSA9IGxvY2FsZUhpZXJhcmNoeS5tYXAoZnVuY3Rpb24gKGwpIHtcbiAgICByZXR1cm4gbG9jYWxlRGF0YS5kYXRhW2xdO1xuICB9KS5maWx0ZXIoQm9vbGVhbik7XG5cbiAgaWYgKCFkYXRhVG9NZXJnZS5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgTWlzc2luZ0xvY2FsZURhdGFFcnJvcihcIk1pc3NpbmcgbG9jYWxlIGRhdGEgZm9yIFxcXCJcIiArIGxvY2FsZSArIFwiXFxcIiwgbG9va3VwIGhpZXJhcmNoeTogXCIgKyBsb2NhbGVIaWVyYXJjaHkuam9pbignLCAnKSk7XG4gIH1cblxuICBkYXRhVG9NZXJnZS5yZXZlcnNlKCk7XG4gIHJldHVybiBkYXRhVG9NZXJnZS5yZWR1Y2UocmVkdWNlciwge30pO1xufSIsIi8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC11bmlmaWVkLWludGwtbnVtYmVyZm9ybWF0L3NlY3Rpb242L2xvY2FsZXMtY3VycmVuY2llcy10el9kaWZmX291dC5odG1sI3NlYy1pc3NhbmN0aW9uZWRzaW1wbGV1bml0aWRlbnRpZmllclxuZXhwb3J0IHZhciBTQU5DVElPTkVEX1VOSVRTID0gWydhbmdsZS1kZWdyZWUnLCAnYXJlYS1hY3JlJywgJ2FyZWEtaGVjdGFyZScsICdjb25jZW50ci1wZXJjZW50JywgJ2RpZ2l0YWwtYml0JywgJ2RpZ2l0YWwtYnl0ZScsICdkaWdpdGFsLWdpZ2FiaXQnLCAnZGlnaXRhbC1naWdhYnl0ZScsICdkaWdpdGFsLWtpbG9iaXQnLCAnZGlnaXRhbC1raWxvYnl0ZScsICdkaWdpdGFsLW1lZ2FiaXQnLCAnZGlnaXRhbC1tZWdhYnl0ZScsICdkaWdpdGFsLXBldGFieXRlJywgJ2RpZ2l0YWwtdGVyYWJpdCcsICdkaWdpdGFsLXRlcmFieXRlJywgJ2R1cmF0aW9uLWRheScsICdkdXJhdGlvbi1ob3VyJywgJ2R1cmF0aW9uLW1pbGxpc2Vjb25kJywgJ2R1cmF0aW9uLW1pbnV0ZScsICdkdXJhdGlvbi1tb250aCcsICdkdXJhdGlvbi1zZWNvbmQnLCAnZHVyYXRpb24td2VlaycsICdkdXJhdGlvbi15ZWFyJywgJ2xlbmd0aC1jZW50aW1ldGVyJywgJ2xlbmd0aC1mb290JywgJ2xlbmd0aC1pbmNoJywgJ2xlbmd0aC1raWxvbWV0ZXInLCAnbGVuZ3RoLW1ldGVyJywgJ2xlbmd0aC1taWxlLXNjYW5kaW5hdmlhbicsICdsZW5ndGgtbWlsZScsICdsZW5ndGgtbWlsbGltZXRlcicsICdsZW5ndGgteWFyZCcsICdtYXNzLWdyYW0nLCAnbWFzcy1raWxvZ3JhbScsICdtYXNzLW91bmNlJywgJ21hc3MtcG91bmQnLCAnbWFzcy1zdG9uZScsICd0ZW1wZXJhdHVyZS1jZWxzaXVzJywgJ3RlbXBlcmF0dXJlLWZhaHJlbmhlaXQnLCAndm9sdW1lLWZsdWlkLW91bmNlJywgJ3ZvbHVtZS1nYWxsb24nLCAndm9sdW1lLWxpdGVyJywgJ3ZvbHVtZS1taWxsaWxpdGVyJ107IC8vIEluIENMRFIsIHRoZSB1bml0IG5hbWUgYWx3YXlzIGZvbGxvd3MgdGhlIGZvcm0gYG5hbWVzcGFjZS11bml0YCBwYXR0ZXJuLlxuLy8gRm9yIGV4YW1wbGU6IGBkaWdpdGFsLWJpdGAgaW5zdGVhZCBvZiBgYml0YC4gVGhpcyBmdW5jdGlvbiByZW1vdmVzIHRoZSBuYW1lc3BhY2UgcHJlZml4LlxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlVW5pdE5hbWVzcGFjZSh1bml0KSB7XG4gIHJldHVybiB1bml0LnJlcGxhY2UoL14oLio/KS0vLCAnJyk7XG59IiwiZXhwb3J0IHZhciBJbnRlcm5hbFNsb3RUb2tlbjtcblxuKGZ1bmN0aW9uIChJbnRlcm5hbFNsb3RUb2tlbikge1xuICAvLyBUbyBwcmV2ZW50IGNvbGxpc2lvbiB3aXRoIHswfSBpbiBDTERSXG4gIEludGVybmFsU2xvdFRva2VuW1wiY29tcGFjdE5hbWVcIl0gPSBcImNvbXBhY3ROYW1lXCI7XG4gIEludGVybmFsU2xvdFRva2VuW1wiY29tcGFjdFN5bWJvbFwiXSA9IFwiY29tcGFjdFN5bWJvbFwiO1xuICBJbnRlcm5hbFNsb3RUb2tlbltcImN1cnJlbmN5Q29kZVwiXSA9IFwiY3VycmVuY3lDb2RlXCI7XG4gIEludGVybmFsU2xvdFRva2VuW1wiY3VycmVuY3lOYW1lXCJdID0gXCJjdXJyZW5jeU5hbWVcIjtcbiAgSW50ZXJuYWxTbG90VG9rZW5bXCJjdXJyZW5jeU5hcnJvd1N5bWJvbFwiXSA9IFwiY3VycmVuY3lOYXJyb3dTeW1ib2xcIjtcbiAgSW50ZXJuYWxTbG90VG9rZW5bXCJjdXJyZW5jeVN5bWJvbFwiXSA9IFwiY3VycmVuY3lTeW1ib2xcIjtcbiAgSW50ZXJuYWxTbG90VG9rZW5bXCJtaW51c1NpZ25cIl0gPSBcIm1pbnVzU2lnblwiO1xuICBJbnRlcm5hbFNsb3RUb2tlbltcIm51bWJlclwiXSA9IFwibnVtYmVyXCI7XG4gIEludGVybmFsU2xvdFRva2VuW1wicGVyY2VudFNpZ25cIl0gPSBcInBlcmNlbnRTaWduXCI7XG4gIEludGVybmFsU2xvdFRva2VuW1wicGx1c1NpZ25cIl0gPSBcInBsdXNTaWduXCI7XG4gIEludGVybmFsU2xvdFRva2VuW1wic2NpZW50aWZpY0V4cG9uZW50XCJdID0gXCJzY2llbnRpZmljRXhwb25lbnRcIjtcbiAgSW50ZXJuYWxTbG90VG9rZW5bXCJzY2llbnRpZmljU2VwYXJhdG9yXCJdID0gXCJzY2llbnRpZmljU2VwYXJhdG9yXCI7XG4gIEludGVybmFsU2xvdFRva2VuW1widW5pdE5hbWVcIl0gPSBcInVuaXROYW1lXCI7XG4gIEludGVybmFsU2xvdFRva2VuW1widW5pdE5hcnJvd1N5bWJvbFwiXSA9IFwidW5pdE5hcnJvd1N5bWJvbFwiO1xuICBJbnRlcm5hbFNsb3RUb2tlbltcInVuaXRTeW1ib2xcIl0gPSBcInVuaXRTeW1ib2xcIjtcbn0pKEludGVybmFsU2xvdFRva2VuIHx8IChJbnRlcm5hbFNsb3RUb2tlbiA9IHt9KSk7IiwiZXhwb3J0IHsgc2VsZWN0VW5pdCB9IGZyb20gJy4vZGlmZic7XG5leHBvcnQgeyBkZWZhdWx0TnVtYmVyT3B0aW9uLCBnZXRBbGlhc2VzQnlMYW5nLCBnZXRJbnRlcm5hbFNsb3QsIGdldE11bHRpSW50ZXJuYWxTbG90cywgZ2V0TnVtYmVyT3B0aW9uLCBnZXRPcHRpb24sIGdldFBhcmVudExvY2FsZXNCeUxhbmcsIGlzTGl0ZXJhbFBhcnQsIHBhcnRpdGlvblBhdHRlcm4sIHNldEludGVybmFsU2xvdCwgc2V0TXVsdGlJbnRlcm5hbFNsb3RzLCBzZXROdW1iZXJGb3JtYXREaWdpdE9wdGlvbnMsIHRvT2JqZWN0LCBvYmplY3RJcywgaXNXZWxsRm9ybWVkQ3VycmVuY3lDb2RlLCB0b1N0cmluZyB9IGZyb20gJy4vcG9seWZpbGwtdXRpbHMnO1xuZXhwb3J0IHsgY3JlYXRlUmVzb2x2ZUxvY2FsZSwgZ2V0TG9jYWxlSGllcmFyY2h5LCBzdXBwb3J0ZWRMb2NhbGVzLCB1bnBhY2tEYXRhLCBpc01pc3NpbmdMb2NhbGVEYXRhRXJyb3IgfSBmcm9tICcuL3Jlc29sdmUtbG9jYWxlJztcbmV4cG9ydCAqIGZyb20gJy4vdW5pdHMnO1xuZXhwb3J0ICogZnJvbSAnLi9udW1iZXItdHlwZXMnO1xuZXhwb3J0IHsgZ2V0Q2Fub25pY2FsTG9jYWxlcyB9IGZyb20gJy4vZ2V0LWNhbm9uaWNhbC1sb2NhbGVzJztcbmV4cG9ydCB7IGludmFyaWFudCB9IGZyb20gJy4vaW52YXJpYW50JzsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2650\n')},5981:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "k": function() { return /* binding */ invariant; }\n/* harmony export */ });\nfunction invariant(condition, message, Err) {\n if (Err === void 0) {\n Err = Error;\n }\n\n if (!condition) {\n throw new Err(message);\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AZm9ybWF0anMvaW50bC11dGlscy9saWIvaW52YXJpYW50LmpzPzQ5NWIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiNTk4MS5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBpbnZhcmlhbnQoY29uZGl0aW9uLCBtZXNzYWdlLCBFcnIpIHtcbiAgaWYgKEVyciA9PT0gdm9pZCAwKSB7XG4gICAgRXJyID0gRXJyb3I7XG4gIH1cblxuICBpZiAoIWNvbmRpdGlvbikge1xuICAgIHRocm93IG5ldyBFcnIobWVzc2FnZSk7XG4gIH1cbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5981\n')},2393:function(__unused_webpack_module,exports){"use strict";eval('var __webpack_unused_export__;\n\n\n__webpack_unused_export__ = true;\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar getLocation = function getLocation(source) {\n var _source$location = source.location,\n search = _source$location.search,\n hash = _source$location.hash,\n href = _source$location.href,\n origin = _source$location.origin,\n protocol = _source$location.protocol,\n host = _source$location.host,\n hostname = _source$location.hostname,\n port = _source$location.port;\n var pathname = source.location.pathname;\n\n if (!pathname && href && canUseDOM) {\n var url = new URL(href);\n pathname = url.pathname;\n }\n\n return {\n pathname: encodeURI(decodeURI(pathname)),\n search: search,\n hash: hash,\n href: href,\n origin: origin,\n protocol: protocol,\n host: host,\n hostname: hostname,\n port: port,\n state: source.history.state,\n key: source.history.state && source.history.state.key || "initial"\n };\n};\n\nvar createHistory = function createHistory(source, options) {\n var listeners = [];\n var location = getLocation(source);\n var transitioning = false;\n\n var resolveTransition = function resolveTransition() {};\n\n return {\n get location() {\n return location;\n },\n\n get transitioning() {\n return transitioning;\n },\n\n _onTransitionComplete: function _onTransitionComplete() {\n transitioning = false;\n resolveTransition();\n },\n listen: function listen(listener) {\n listeners.push(listener);\n\n var popstateListener = function popstateListener() {\n location = getLocation(source);\n listener({\n location: location,\n action: "POP"\n });\n };\n\n source.addEventListener("popstate", popstateListener);\n return function () {\n source.removeEventListener("popstate", popstateListener);\n listeners = listeners.filter(function (fn) {\n return fn !== listener;\n });\n };\n },\n navigate: function navigate(to) {\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n state = _ref.state,\n _ref$replace = _ref.replace,\n replace = _ref$replace === undefined ? false : _ref$replace;\n\n if (typeof to === "number") {\n source.history.go(to);\n } else {\n state = _extends({}, state, {\n key: Date.now() + ""\n }); // try...catch iOS Safari limits to 100 pushState calls\n\n try {\n if (transitioning || replace) {\n source.history.replaceState(state, null, to);\n } else {\n source.history.pushState(state, null, to);\n }\n } catch (e) {\n source.location[replace ? "replace" : "assign"](to);\n }\n }\n\n location = getLocation(source);\n transitioning = true;\n var transition = new Promise(function (res) {\n return resolveTransition = res;\n });\n listeners.forEach(function (listener) {\n return listener({\n location: location,\n action: "PUSH"\n });\n });\n return transition;\n }\n };\n}; ////////////////////////////////////////////////////////////////////////////////\n// Stores history entries in memory for testing or other platforms like Native\n\n\nvar createMemorySource = function createMemorySource() {\n var initialPath = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "/";\n var searchIndex = initialPath.indexOf("?");\n var initialLocation = {\n pathname: searchIndex > -1 ? initialPath.substr(0, searchIndex) : initialPath,\n search: searchIndex > -1 ? initialPath.substr(searchIndex) : ""\n };\n var index = 0;\n var stack = [initialLocation];\n var states = [null];\n return {\n get location() {\n return stack[index];\n },\n\n addEventListener: function addEventListener(name, fn) {},\n removeEventListener: function removeEventListener(name, fn) {},\n history: {\n get entries() {\n return stack;\n },\n\n get index() {\n return index;\n },\n\n get state() {\n return states[index];\n },\n\n pushState: function pushState(state, _, uri) {\n var _uri$split = uri.split("?"),\n pathname = _uri$split[0],\n _uri$split$ = _uri$split[1],\n search = _uri$split$ === undefined ? "" : _uri$split$;\n\n index++;\n stack.push({\n pathname: pathname,\n search: search.length ? "?" + search : search\n });\n states.push(state);\n },\n replaceState: function replaceState(state, _, uri) {\n var _uri$split2 = uri.split("?"),\n pathname = _uri$split2[0],\n _uri$split2$ = _uri$split2[1],\n search = _uri$split2$ === undefined ? "" : _uri$split2$;\n\n stack[index] = {\n pathname: pathname,\n search: search\n };\n states[index] = state;\n },\n go: function go(to) {\n var newIndex = index + to;\n\n if (newIndex < 0 || newIndex > states.length - 1) {\n return;\n }\n\n index = newIndex;\n }\n }\n };\n}; ////////////////////////////////////////////////////////////////////////////////\n// global history - uses window.history as the source if available, otherwise a\n// memory history\n\n\nvar canUseDOM = !!(typeof window !== "undefined" && window.document && window.document.createElement);\n\nvar getSource = function getSource() {\n return canUseDOM ? window : createMemorySource();\n};\n\nvar globalHistory = createHistory(getSource());\nvar navigate = globalHistory.navigate; ////////////////////////////////////////////////////////////////////////////////\n\nexports.V5 = globalHistory;\n__webpack_unused_export__ = navigate;\n__webpack_unused_export__ = createHistory;\n__webpack_unused_export__ = createMemorySource;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AZ2F0c2J5anMvcmVhY2gtcm91dGVyL2xpYi9oaXN0b3J5LmpzPzZiMDgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFhOztBQUViLHlCQUFrQjs7QUFFbEI7QUFDQSxpQkFBaUIsc0JBQXNCO0FBQ3ZDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBLHVGQUF1RjtBQUN2RjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUCwyQkFBMkI7QUFDM0I7QUFDQSxTQUFTLEVBQUU7O0FBRVg7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTCw0REFBNEQ7QUFDNUQsa0VBQWtFO0FBQ2xFO0FBQ0E7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0Esc0NBQXNDOztBQUV0QyxVQUFxQjtBQUNyQix5QkFBZ0I7QUFDaEIseUJBQXFCO0FBQ3JCLHlCQUEwQiIsImZpbGUiOiIyMzkzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkge1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59O1xuXG52YXIgZ2V0TG9jYXRpb24gPSBmdW5jdGlvbiBnZXRMb2NhdGlvbihzb3VyY2UpIHtcbiAgdmFyIF9zb3VyY2UkbG9jYXRpb24gPSBzb3VyY2UubG9jYXRpb24sXG4gICAgICBzZWFyY2ggPSBfc291cmNlJGxvY2F0aW9uLnNlYXJjaCxcbiAgICAgIGhhc2ggPSBfc291cmNlJGxvY2F0aW9uLmhhc2gsXG4gICAgICBocmVmID0gX3NvdXJjZSRsb2NhdGlvbi5ocmVmLFxuICAgICAgb3JpZ2luID0gX3NvdXJjZSRsb2NhdGlvbi5vcmlnaW4sXG4gICAgICBwcm90b2NvbCA9IF9zb3VyY2UkbG9jYXRpb24ucHJvdG9jb2wsXG4gICAgICBob3N0ID0gX3NvdXJjZSRsb2NhdGlvbi5ob3N0LFxuICAgICAgaG9zdG5hbWUgPSBfc291cmNlJGxvY2F0aW9uLmhvc3RuYW1lLFxuICAgICAgcG9ydCA9IF9zb3VyY2UkbG9jYXRpb24ucG9ydDtcbiAgdmFyIHBhdGhuYW1lID0gc291cmNlLmxvY2F0aW9uLnBhdGhuYW1lO1xuXG4gIGlmICghcGF0aG5hbWUgJiYgaHJlZiAmJiBjYW5Vc2VET00pIHtcbiAgICB2YXIgdXJsID0gbmV3IFVSTChocmVmKTtcbiAgICBwYXRobmFtZSA9IHVybC5wYXRobmFtZTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcGF0aG5hbWU6IGVuY29kZVVSSShkZWNvZGVVUkkocGF0aG5hbWUpKSxcbiAgICBzZWFyY2g6IHNlYXJjaCxcbiAgICBoYXNoOiBoYXNoLFxuICAgIGhyZWY6IGhyZWYsXG4gICAgb3JpZ2luOiBvcmlnaW4sXG4gICAgcHJvdG9jb2w6IHByb3RvY29sLFxuICAgIGhvc3Q6IGhvc3QsXG4gICAgaG9zdG5hbWU6IGhvc3RuYW1lLFxuICAgIHBvcnQ6IHBvcnQsXG4gICAgc3RhdGU6IHNvdXJjZS5oaXN0b3J5LnN0YXRlLFxuICAgIGtleTogc291cmNlLmhpc3Rvcnkuc3RhdGUgJiYgc291cmNlLmhpc3Rvcnkuc3RhdGUua2V5IHx8IFwiaW5pdGlhbFwiXG4gIH07XG59O1xuXG52YXIgY3JlYXRlSGlzdG9yeSA9IGZ1bmN0aW9uIGNyZWF0ZUhpc3Rvcnkoc291cmNlLCBvcHRpb25zKSB7XG4gIHZhciBsaXN0ZW5lcnMgPSBbXTtcbiAgdmFyIGxvY2F0aW9uID0gZ2V0TG9jYXRpb24oc291cmNlKTtcbiAgdmFyIHRyYW5zaXRpb25pbmcgPSBmYWxzZTtcblxuICB2YXIgcmVzb2x2ZVRyYW5zaXRpb24gPSBmdW5jdGlvbiByZXNvbHZlVHJhbnNpdGlvbigpIHt9O1xuXG4gIHJldHVybiB7XG4gICAgZ2V0IGxvY2F0aW9uKCkge1xuICAgICAgcmV0dXJuIGxvY2F0aW9uO1xuICAgIH0sXG5cbiAgICBnZXQgdHJhbnNpdGlvbmluZygpIHtcbiAgICAgIHJldHVybiB0cmFuc2l0aW9uaW5nO1xuICAgIH0sXG5cbiAgICBfb25UcmFuc2l0aW9uQ29tcGxldGU6IGZ1bmN0aW9uIF9vblRyYW5zaXRpb25Db21wbGV0ZSgpIHtcbiAgICAgIHRyYW5zaXRpb25pbmcgPSBmYWxzZTtcbiAgICAgIHJlc29sdmVUcmFuc2l0aW9uKCk7XG4gICAgfSxcbiAgICBsaXN0ZW46IGZ1bmN0aW9uIGxpc3RlbihsaXN0ZW5lcikge1xuICAgICAgbGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuXG4gICAgICB2YXIgcG9wc3RhdGVMaXN0ZW5lciA9IGZ1bmN0aW9uIHBvcHN0YXRlTGlzdGVuZXIoKSB7XG4gICAgICAgIGxvY2F0aW9uID0gZ2V0TG9jYXRpb24oc291cmNlKTtcbiAgICAgICAgbGlzdGVuZXIoe1xuICAgICAgICAgIGxvY2F0aW9uOiBsb2NhdGlvbixcbiAgICAgICAgICBhY3Rpb246IFwiUE9QXCJcbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgICBzb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcihcInBvcHN0YXRlXCIsIHBvcHN0YXRlTGlzdGVuZXIpO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc291cmNlLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb3BzdGF0ZVwiLCBwb3BzdGF0ZUxpc3RlbmVyKTtcbiAgICAgICAgbGlzdGVuZXJzID0gbGlzdGVuZXJzLmZpbHRlcihmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICByZXR1cm4gZm4gIT09IGxpc3RlbmVyO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgfSxcbiAgICBuYXZpZ2F0ZTogZnVuY3Rpb24gbmF2aWdhdGUodG8pIHtcbiAgICAgIHZhciBfcmVmID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSxcbiAgICAgICAgICBzdGF0ZSA9IF9yZWYuc3RhdGUsXG4gICAgICAgICAgX3JlZiRyZXBsYWNlID0gX3JlZi5yZXBsYWNlLFxuICAgICAgICAgIHJlcGxhY2UgPSBfcmVmJHJlcGxhY2UgPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogX3JlZiRyZXBsYWNlO1xuXG4gICAgICBpZiAodHlwZW9mIHRvID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgIHNvdXJjZS5oaXN0b3J5LmdvKHRvKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXRlID0gX2V4dGVuZHMoe30sIHN0YXRlLCB7XG4gICAgICAgICAga2V5OiBEYXRlLm5vdygpICsgXCJcIlxuICAgICAgICB9KTsgLy8gdHJ5Li4uY2F0Y2ggaU9TIFNhZmFyaSBsaW1pdHMgdG8gMTAwIHB1c2hTdGF0ZSBjYWxsc1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKHRyYW5zaXRpb25pbmcgfHwgcmVwbGFjZSkge1xuICAgICAgICAgICAgc291cmNlLmhpc3RvcnkucmVwbGFjZVN0YXRlKHN0YXRlLCBudWxsLCB0byk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNvdXJjZS5oaXN0b3J5LnB1c2hTdGF0ZShzdGF0ZSwgbnVsbCwgdG8pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHNvdXJjZS5sb2NhdGlvbltyZXBsYWNlID8gXCJyZXBsYWNlXCIgOiBcImFzc2lnblwiXSh0byk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbG9jYXRpb24gPSBnZXRMb2NhdGlvbihzb3VyY2UpO1xuICAgICAgdHJhbnNpdGlvbmluZyA9IHRydWU7XG4gICAgICB2YXIgdHJhbnNpdGlvbiA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgcmV0dXJuIHJlc29sdmVUcmFuc2l0aW9uID0gcmVzO1xuICAgICAgfSk7XG4gICAgICBsaXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbiAobGlzdGVuZXIpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RlbmVyKHtcbiAgICAgICAgICBsb2NhdGlvbjogbG9jYXRpb24sXG4gICAgICAgICAgYWN0aW9uOiBcIlBVU0hcIlxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHRyYW5zaXRpb247XG4gICAgfVxuICB9O1xufTsgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFN0b3JlcyBoaXN0b3J5IGVudHJpZXMgaW4gbWVtb3J5IGZvciB0ZXN0aW5nIG9yIG90aGVyIHBsYXRmb3JtcyBsaWtlIE5hdGl2ZVxuXG5cbnZhciBjcmVhdGVNZW1vcnlTb3VyY2UgPSBmdW5jdGlvbiBjcmVhdGVNZW1vcnlTb3VyY2UoKSB7XG4gIHZhciBpbml0aWFsUGF0aCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogXCIvXCI7XG4gIHZhciBzZWFyY2hJbmRleCA9IGluaXRpYWxQYXRoLmluZGV4T2YoXCI/XCIpO1xuICB2YXIgaW5pdGlhbExvY2F0aW9uID0ge1xuICAgIHBhdGhuYW1lOiBzZWFyY2hJbmRleCA+IC0xID8gaW5pdGlhbFBhdGguc3Vic3RyKDAsIHNlYXJjaEluZGV4KSA6IGluaXRpYWxQYXRoLFxuICAgIHNlYXJjaDogc2VhcmNoSW5kZXggPiAtMSA/IGluaXRpYWxQYXRoLnN1YnN0cihzZWFyY2hJbmRleCkgOiBcIlwiXG4gIH07XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBzdGFjayA9IFtpbml0aWFsTG9jYXRpb25dO1xuICB2YXIgc3RhdGVzID0gW251bGxdO1xuICByZXR1cm4ge1xuICAgIGdldCBsb2NhdGlvbigpIHtcbiAgICAgIHJldHVybiBzdGFja1tpbmRleF07XG4gICAgfSxcblxuICAgIGFkZEV2ZW50TGlzdGVuZXI6IGZ1bmN0aW9uIGFkZEV2ZW50TGlzdGVuZXIobmFtZSwgZm4pIHt9LFxuICAgIHJlbW92ZUV2ZW50TGlzdGVuZXI6IGZ1bmN0aW9uIHJlbW92ZUV2ZW50TGlzdGVuZXIobmFtZSwgZm4pIHt9LFxuICAgIGhpc3Rvcnk6IHtcbiAgICAgIGdldCBlbnRyaWVzKCkge1xuICAgICAgICByZXR1cm4gc3RhY2s7XG4gICAgICB9LFxuXG4gICAgICBnZXQgaW5kZXgoKSB7XG4gICAgICAgIHJldHVybiBpbmRleDtcbiAgICAgIH0sXG5cbiAgICAgIGdldCBzdGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHN0YXRlc1tpbmRleF07XG4gICAgICB9LFxuXG4gICAgICBwdXNoU3RhdGU6IGZ1bmN0aW9uIHB1c2hTdGF0ZShzdGF0ZSwgXywgdXJpKSB7XG4gICAgICAgIHZhciBfdXJpJHNwbGl0ID0gdXJpLnNwbGl0KFwiP1wiKSxcbiAgICAgICAgICAgIHBhdGhuYW1lID0gX3VyaSRzcGxpdFswXSxcbiAgICAgICAgICAgIF91cmkkc3BsaXQkID0gX3VyaSRzcGxpdFsxXSxcbiAgICAgICAgICAgIHNlYXJjaCA9IF91cmkkc3BsaXQkID09PSB1bmRlZmluZWQgPyBcIlwiIDogX3VyaSRzcGxpdCQ7XG5cbiAgICAgICAgaW5kZXgrKztcbiAgICAgICAgc3RhY2sucHVzaCh7XG4gICAgICAgICAgcGF0aG5hbWU6IHBhdGhuYW1lLFxuICAgICAgICAgIHNlYXJjaDogc2VhcmNoLmxlbmd0aCA/IFwiP1wiICsgc2VhcmNoIDogc2VhcmNoXG4gICAgICAgIH0pO1xuICAgICAgICBzdGF0ZXMucHVzaChzdGF0ZSk7XG4gICAgICB9LFxuICAgICAgcmVwbGFjZVN0YXRlOiBmdW5jdGlvbiByZXBsYWNlU3RhdGUoc3RhdGUsIF8sIHVyaSkge1xuICAgICAgICB2YXIgX3VyaSRzcGxpdDIgPSB1cmkuc3BsaXQoXCI/XCIpLFxuICAgICAgICAgICAgcGF0aG5hbWUgPSBfdXJpJHNwbGl0MlswXSxcbiAgICAgICAgICAgIF91cmkkc3BsaXQyJCA9IF91cmkkc3BsaXQyWzFdLFxuICAgICAgICAgICAgc2VhcmNoID0gX3VyaSRzcGxpdDIkID09PSB1bmRlZmluZWQgPyBcIlwiIDogX3VyaSRzcGxpdDIkO1xuXG4gICAgICAgIHN0YWNrW2luZGV4XSA9IHtcbiAgICAgICAgICBwYXRobmFtZTogcGF0aG5hbWUsXG4gICAgICAgICAgc2VhcmNoOiBzZWFyY2hcbiAgICAgICAgfTtcbiAgICAgICAgc3RhdGVzW2luZGV4XSA9IHN0YXRlO1xuICAgICAgfSxcbiAgICAgIGdvOiBmdW5jdGlvbiBnbyh0bykge1xuICAgICAgICB2YXIgbmV3SW5kZXggPSBpbmRleCArIHRvO1xuXG4gICAgICAgIGlmIChuZXdJbmRleCA8IDAgfHwgbmV3SW5kZXggPiBzdGF0ZXMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGluZGV4ID0gbmV3SW5kZXg7XG4gICAgICB9XG4gICAgfVxuICB9O1xufTsgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIGdsb2JhbCBoaXN0b3J5IC0gdXNlcyB3aW5kb3cuaGlzdG9yeSBhcyB0aGUgc291cmNlIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGFcbi8vIG1lbW9yeSBoaXN0b3J5XG5cblxudmFyIGNhblVzZURPTSA9ICEhKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgd2luZG93LmRvY3VtZW50ICYmIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcblxudmFyIGdldFNvdXJjZSA9IGZ1bmN0aW9uIGdldFNvdXJjZSgpIHtcbiAgcmV0dXJuIGNhblVzZURPTSA/IHdpbmRvdyA6IGNyZWF0ZU1lbW9yeVNvdXJjZSgpO1xufTtcblxudmFyIGdsb2JhbEhpc3RvcnkgPSBjcmVhdGVIaXN0b3J5KGdldFNvdXJjZSgpKTtcbnZhciBuYXZpZ2F0ZSA9IGdsb2JhbEhpc3RvcnkubmF2aWdhdGU7IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmV4cG9ydHMuZ2xvYmFsSGlzdG9yeSA9IGdsb2JhbEhpc3Rvcnk7XG5leHBvcnRzLm5hdmlnYXRlID0gbmF2aWdhdGU7XG5leHBvcnRzLmNyZWF0ZUhpc3RvcnkgPSBjcmVhdGVIaXN0b3J5O1xuZXhwb3J0cy5jcmVhdGVNZW1vcnlTb3VyY2UgPSBjcmVhdGVNZW1vcnlTb3VyY2U7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2393\n')},2098:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval('\n\nexports.__esModule = true;\nexports.shallowCompare = exports.validateRedirect = exports.insertParams = exports.resolve = exports.match = exports.pick = exports.startsWith = undefined;\n\nvar _invariant = __webpack_require__(1143);\n\nvar _invariant2 = _interopRequireDefault(_invariant);\n\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n} ////////////////////////////////////////////////////////////////////////////////\n// startsWith(string, search) - Check if `string` starts with `search`\n\n\nvar startsWith = function startsWith(string, search) {\n return string.substr(0, search.length) === search;\n}; ////////////////////////////////////////////////////////////////////////////////\n// pick(routes, uri)\n//\n// Ranks and picks the best route to match. Each segment gets the highest\n// amount of points, then the type of segment gets an additional amount of\n// points where\n//\n// static > dynamic > splat > root\n//\n// This way we don\'t have to worry about the order of our routes, let the\n// computers do it.\n//\n// A route looks like this\n//\n// { path, default, value }\n//\n// And a returned match looks like:\n//\n// { route, params, uri }\n//\n// I know, I should use TypeScript not comments for these types.\n\n\nvar pick = function pick(routes, uri) {\n var match = void 0;\n var default_ = void 0;\n\n var _uri$split = uri.split("?"),\n uriPathname = _uri$split[0];\n\n var uriSegments = segmentize(uriPathname);\n var isRootUri = uriSegments[0] === "";\n var ranked = rankRoutes(routes);\n\n for (var i = 0, l = ranked.length; i < l; i++) {\n var missed = false;\n var route = ranked[i].route;\n\n if (route.default) {\n default_ = {\n route: route,\n params: {},\n uri: uri\n };\n continue;\n }\n\n var routeSegments = segmentize(route.path);\n var params = {};\n var max = Math.max(uriSegments.length, routeSegments.length);\n var index = 0;\n\n for (; index < max; index++) {\n var routeSegment = routeSegments[index];\n var uriSegment = uriSegments[index];\n\n if (isSplat(routeSegment)) {\n // Hit a splat, just grab the rest, and return a match\n // uri: /files/documents/work\n // route: /files/*\n var param = routeSegment.slice(1) || "*";\n params[param] = uriSegments.slice(index).map(decodeURIComponent).join("/");\n break;\n }\n\n if (uriSegment === undefined) {\n // URI is shorter than the route, no match\n // uri: /users\n // route: /users/:userId\n missed = true;\n break;\n }\n\n var dynamicMatch = paramRe.exec(routeSegment);\n\n if (dynamicMatch && !isRootUri) {\n var matchIsNotReserved = reservedNames.indexOf(dynamicMatch[1]) === -1;\n !matchIsNotReserved ? false ? 0 : (0, _invariant2.default)(false) : void 0;\n var value = decodeURIComponent(uriSegment);\n params[dynamicMatch[1]] = value;\n } else if (routeSegment !== uriSegment) {\n // Current segments don\'t match, not dynamic, not splat, so no match\n // uri: /users/123/settings\n // route: /users/:id/profile\n missed = true;\n break;\n }\n }\n\n if (!missed) {\n match = {\n route: route,\n params: params,\n uri: "/" + uriSegments.slice(0, index).join("/")\n };\n break;\n }\n }\n\n return match || default_ || null;\n}; ////////////////////////////////////////////////////////////////////////////////\n// match(path, uri) - Matches just one path to a uri, also lol\n\n\nvar match = function match(path, uri) {\n return pick([{\n path: path\n }], uri);\n}; ////////////////////////////////////////////////////////////////////////////////\n// resolve(to, basepath)\n//\n// Resolves URIs as though every path is a directory, no files. Relative URIs\n// in the browser can feel awkward because not only can you be "in a directory"\n// you can be "at a file", too. For example\n//\n// browserSpecResolve(\'foo\', \'/bar/\') => /bar/foo\n// browserSpecResolve(\'foo\', \'/bar\') => /foo\n//\n// But on the command line of a file system, it\'s not as complicated, you can\'t\n// `cd` from a file, only directories. This way, links have to know less about\n// their current path. To go deeper you can do this:\n//\n// \n// // instead of\n// \n//\n// Just like `cd`, if you want to go deeper from the command line, you do this:\n//\n// cd deeper\n// # not\n// cd $(pwd)/deeper\n//\n// By treating every path as a directory, linking to relative paths should\n// require less contextual information and (fingers crossed) be more intuitive.\n\n\nvar resolve = function resolve(to, base) {\n // /foo/bar, /baz/qux => /foo/bar\n if (startsWith(to, "/")) {\n return to;\n }\n\n var _to$split = to.split("?"),\n toPathname = _to$split[0],\n toQuery = _to$split[1];\n\n var _base$split = base.split("?"),\n basePathname = _base$split[0];\n\n var toSegments = segmentize(toPathname);\n var baseSegments = segmentize(basePathname); // ?a=b, /users?b=c => /users?a=b\n\n if (toSegments[0] === "") {\n return addQuery(basePathname, toQuery);\n } // profile, /users/789 => /users/789/profile\n\n\n if (!startsWith(toSegments[0], ".")) {\n var pathname = baseSegments.concat(toSegments).join("/");\n return addQuery((basePathname === "/" ? "" : "/") + pathname, toQuery);\n } // ./ /users/123 => /users/123\n // ../ /users/123 => /users\n // ../.. /users/123 => /\n // ../../one /a/b/c/d => /a/b/one\n // .././one /a/b/c/d => /a/b/c/one\n\n\n var allSegments = baseSegments.concat(toSegments);\n var segments = [];\n\n for (var i = 0, l = allSegments.length; i < l; i++) {\n var segment = allSegments[i];\n if (segment === "..") segments.pop();else if (segment !== ".") segments.push(segment);\n }\n\n return addQuery("/" + segments.join("/"), toQuery);\n}; ////////////////////////////////////////////////////////////////////////////////\n// insertParams(path, params)\n\n\nvar insertParams = function insertParams(path, params) {\n var _path$split = path.split("?"),\n pathBase = _path$split[0],\n _path$split$ = _path$split[1],\n query = _path$split$ === undefined ? "" : _path$split$;\n\n var segments = segmentize(pathBase);\n var constructedPath = "/" + segments.map(function (segment) {\n var match = paramRe.exec(segment);\n return match ? params[match[1]] : segment;\n }).join("/");\n var _params$location = params.location;\n _params$location = _params$location === undefined ? {} : _params$location;\n var _params$location$sear = _params$location.search,\n search = _params$location$sear === undefined ? "" : _params$location$sear;\n var searchSplit = search.split("?")[1] || "";\n constructedPath = addQuery(constructedPath, query, searchSplit);\n return constructedPath;\n};\n\nvar validateRedirect = function validateRedirect(from, to) {\n var filter = function filter(segment) {\n return isDynamic(segment);\n };\n\n var fromString = segmentize(from).filter(filter).sort().join("/");\n var toString = segmentize(to).filter(filter).sort().join("/");\n return fromString === toString;\n}; ////////////////////////////////////////////////////////////////////////////////\n// Junk\n\n\nvar paramRe = /^:(.+)/;\nvar SEGMENT_POINTS = 4;\nvar STATIC_POINTS = 3;\nvar DYNAMIC_POINTS = 2;\nvar SPLAT_PENALTY = 1;\nvar ROOT_POINTS = 1;\n\nvar isRootSegment = function isRootSegment(segment) {\n return segment === "";\n};\n\nvar isDynamic = function isDynamic(segment) {\n return paramRe.test(segment);\n};\n\nvar isSplat = function isSplat(segment) {\n return segment && segment[0] === "*";\n};\n\nvar rankRoute = function rankRoute(route, index) {\n var score = route.default ? 0 : segmentize(route.path).reduce(function (score, segment) {\n score += SEGMENT_POINTS;\n if (isRootSegment(segment)) score += ROOT_POINTS;else if (isDynamic(segment)) score += DYNAMIC_POINTS;else if (isSplat(segment)) score -= SEGMENT_POINTS + SPLAT_PENALTY;else score += STATIC_POINTS;\n return score;\n }, 0);\n return {\n route: route,\n score: score,\n index: index\n };\n};\n\nvar rankRoutes = function rankRoutes(routes) {\n return routes.map(rankRoute).sort(function (a, b) {\n return a.score < b.score ? 1 : a.score > b.score ? -1 : a.index - b.index;\n });\n};\n\nvar segmentize = function segmentize(uri) {\n return uri // strip starting/ending slashes\n .replace(/(^\\/+|\\/+$)/g, "").split("/");\n};\n\nvar addQuery = function addQuery(pathname) {\n for (var _len = arguments.length, query = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n query[_key - 1] = arguments[_key];\n }\n\n query = query.filter(function (q) {\n return q && q.length > 0;\n });\n return pathname + (query && query.length > 0 ? "?" + query.join("&") : "");\n};\n\nvar reservedNames = ["uri", "path"];\n/**\n * Shallow compares two objects.\n * @param {Object} obj1 The first object to compare.\n * @param {Object} obj2 The second object to compare.\n */\n\nvar shallowCompare = function shallowCompare(obj1, obj2) {\n var obj1Keys = Object.keys(obj1);\n return obj1Keys.length === Object.keys(obj2).length && obj1Keys.every(function (key) {\n return obj2.hasOwnProperty(key) && obj1[key] === obj2[key];\n });\n}; ////////////////////////////////////////////////////////////////////////////////\n\n\nexports.startsWith = startsWith;\nexports.pick = pick;\nexports.match = match;\nexports.resolve = resolve;\nexports.insertParams = insertParams;\nexports.validateRedirect = validateRedirect;\nexports.shallowCompare = shallowCompare;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AZ2F0c2J5anMvcmVhY2gtcm91dGVyL2xpYi91dGlscy5qcz9hNDIyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhOztBQUViLGtCQUFrQjtBQUNsQixzQkFBc0IsR0FBRyx3QkFBd0IsR0FBRyxvQkFBb0IsR0FBRyxlQUFlLEdBQUcsYUFBYSxHQUFHLFlBQVksR0FBRyxrQkFBa0I7O0FBRTlJLGlCQUFpQixtQkFBTyxDQUFDLElBQVc7O0FBRXBDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEOzs7QUFHQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsb0NBQW9DLE9BQU87QUFDM0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsVUFBVSxhQUFhO0FBQ3ZCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsOEJBQThCLE1BQXFDLEdBQUcsQ0FBdUs7QUFDN087QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFO0FBQ0Y7OztBQUdBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLEVBQUUsVUFBVSxRQUFRO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLDhDQUE4Qzs7QUFFOUM7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQSx5Q0FBeUMsT0FBTztBQUNoRDtBQUNBLHlDQUF5QztBQUN6Qzs7QUFFQTtBQUNBLEVBQUU7QUFDRjs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLHdEQUF3RDtBQUN4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EscURBQXFELHFEQUFxRCxtRUFBbUU7QUFDN0s7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHFGQUFxRixhQUFhO0FBQ2xHO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsRUFBRTs7O0FBR0Ysa0JBQWtCO0FBQ2xCLFlBQVk7QUFDWixhQUFhO0FBQ2IsZUFBZTtBQUNmLG9CQUFvQjtBQUNwQix3QkFBd0I7QUFDeEIsc0JBQXNCIiwiZmlsZSI6IjIwOTguanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuc2hhbGxvd0NvbXBhcmUgPSBleHBvcnRzLnZhbGlkYXRlUmVkaXJlY3QgPSBleHBvcnRzLmluc2VydFBhcmFtcyA9IGV4cG9ydHMucmVzb2x2ZSA9IGV4cG9ydHMubWF0Y2ggPSBleHBvcnRzLnBpY2sgPSBleHBvcnRzLnN0YXJ0c1dpdGggPSB1bmRlZmluZWQ7XG5cbnZhciBfaW52YXJpYW50ID0gcmVxdWlyZShcImludmFyaWFudFwiKTtcblxudmFyIF9pbnZhcmlhbnQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaW52YXJpYW50KTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHtcbiAgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHtcbiAgICBkZWZhdWx0OiBvYmpcbiAgfTtcbn0gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIHN0YXJ0c1dpdGgoc3RyaW5nLCBzZWFyY2gpIC0gQ2hlY2sgaWYgYHN0cmluZ2Agc3RhcnRzIHdpdGggYHNlYXJjaGBcblxuXG52YXIgc3RhcnRzV2l0aCA9IGZ1bmN0aW9uIHN0YXJ0c1dpdGgoc3RyaW5nLCBzZWFyY2gpIHtcbiAgcmV0dXJuIHN0cmluZy5zdWJzdHIoMCwgc2VhcmNoLmxlbmd0aCkgPT09IHNlYXJjaDtcbn07IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBwaWNrKHJvdXRlcywgdXJpKVxuLy9cbi8vIFJhbmtzIGFuZCBwaWNrcyB0aGUgYmVzdCByb3V0ZSB0byBtYXRjaC4gRWFjaCBzZWdtZW50IGdldHMgdGhlIGhpZ2hlc3Rcbi8vIGFtb3VudCBvZiBwb2ludHMsIHRoZW4gdGhlIHR5cGUgb2Ygc2VnbWVudCBnZXRzIGFuIGFkZGl0aW9uYWwgYW1vdW50IG9mXG4vLyBwb2ludHMgd2hlcmVcbi8vXG4vLyAgICAgc3RhdGljID4gZHluYW1pYyA+IHNwbGF0ID4gcm9vdFxuLy9cbi8vIFRoaXMgd2F5IHdlIGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgdGhlIG9yZGVyIG9mIG91ciByb3V0ZXMsIGxldCB0aGVcbi8vIGNvbXB1dGVycyBkbyBpdC5cbi8vXG4vLyBBIHJvdXRlIGxvb2tzIGxpa2UgdGhpc1xuLy9cbi8vICAgICB7IHBhdGgsIGRlZmF1bHQsIHZhbHVlIH1cbi8vXG4vLyBBbmQgYSByZXR1cm5lZCBtYXRjaCBsb29rcyBsaWtlOlxuLy9cbi8vICAgICB7IHJvdXRlLCBwYXJhbXMsIHVyaSB9XG4vL1xuLy8gSSBrbm93LCBJIHNob3VsZCB1c2UgVHlwZVNjcmlwdCBub3QgY29tbWVudHMgZm9yIHRoZXNlIHR5cGVzLlxuXG5cbnZhciBwaWNrID0gZnVuY3Rpb24gcGljayhyb3V0ZXMsIHVyaSkge1xuICB2YXIgbWF0Y2ggPSB2b2lkIDA7XG4gIHZhciBkZWZhdWx0XyA9IHZvaWQgMDtcblxuICB2YXIgX3VyaSRzcGxpdCA9IHVyaS5zcGxpdChcIj9cIiksXG4gICAgICB1cmlQYXRobmFtZSA9IF91cmkkc3BsaXRbMF07XG5cbiAgdmFyIHVyaVNlZ21lbnRzID0gc2VnbWVudGl6ZSh1cmlQYXRobmFtZSk7XG4gIHZhciBpc1Jvb3RVcmkgPSB1cmlTZWdtZW50c1swXSA9PT0gXCJcIjtcbiAgdmFyIHJhbmtlZCA9IHJhbmtSb3V0ZXMocm91dGVzKTtcblxuICBmb3IgKHZhciBpID0gMCwgbCA9IHJhbmtlZC5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICB2YXIgbWlzc2VkID0gZmFsc2U7XG4gICAgdmFyIHJvdXRlID0gcmFua2VkW2ldLnJvdXRlO1xuXG4gICAgaWYgKHJvdXRlLmRlZmF1bHQpIHtcbiAgICAgIGRlZmF1bHRfID0ge1xuICAgICAgICByb3V0ZTogcm91dGUsXG4gICAgICAgIHBhcmFtczoge30sXG4gICAgICAgIHVyaTogdXJpXG4gICAgICB9O1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgdmFyIHJvdXRlU2VnbWVudHMgPSBzZWdtZW50aXplKHJvdXRlLnBhdGgpO1xuICAgIHZhciBwYXJhbXMgPSB7fTtcbiAgICB2YXIgbWF4ID0gTWF0aC5tYXgodXJpU2VnbWVudHMubGVuZ3RoLCByb3V0ZVNlZ21lbnRzLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gMDtcblxuICAgIGZvciAoOyBpbmRleCA8IG1heDsgaW5kZXgrKykge1xuICAgICAgdmFyIHJvdXRlU2VnbWVudCA9IHJvdXRlU2VnbWVudHNbaW5kZXhdO1xuICAgICAgdmFyIHVyaVNlZ21lbnQgPSB1cmlTZWdtZW50c1tpbmRleF07XG5cbiAgICAgIGlmIChpc1NwbGF0KHJvdXRlU2VnbWVudCkpIHtcbiAgICAgICAgLy8gSGl0IGEgc3BsYXQsIGp1c3QgZ3JhYiB0aGUgcmVzdCwgYW5kIHJldHVybiBhIG1hdGNoXG4gICAgICAgIC8vIHVyaTogICAvZmlsZXMvZG9jdW1lbnRzL3dvcmtcbiAgICAgICAgLy8gcm91dGU6IC9maWxlcy8qXG4gICAgICAgIHZhciBwYXJhbSA9IHJvdXRlU2VnbWVudC5zbGljZSgxKSB8fCBcIipcIjtcbiAgICAgICAgcGFyYW1zW3BhcmFtXSA9IHVyaVNlZ21lbnRzLnNsaWNlKGluZGV4KS5tYXAoZGVjb2RlVVJJQ29tcG9uZW50KS5qb2luKFwiL1wiKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmICh1cmlTZWdtZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gVVJJIGlzIHNob3J0ZXIgdGhhbiB0aGUgcm91dGUsIG5vIG1hdGNoXG4gICAgICAgIC8vIHVyaTogICAvdXNlcnNcbiAgICAgICAgLy8gcm91dGU6IC91c2Vycy86dXNlcklkXG4gICAgICAgIG1pc3NlZCA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICB2YXIgZHluYW1pY01hdGNoID0gcGFyYW1SZS5leGVjKHJvdXRlU2VnbWVudCk7XG5cbiAgICAgIGlmIChkeW5hbWljTWF0Y2ggJiYgIWlzUm9vdFVyaSkge1xuICAgICAgICB2YXIgbWF0Y2hJc05vdFJlc2VydmVkID0gcmVzZXJ2ZWROYW1lcy5pbmRleE9mKGR5bmFtaWNNYXRjaFsxXSkgPT09IC0xO1xuICAgICAgICAhbWF0Y2hJc05vdFJlc2VydmVkID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gKDAsIF9pbnZhcmlhbnQyLmRlZmF1bHQpKGZhbHNlLCBcIjxSb3V0ZXI+IGR5bmFtaWMgc2VnbWVudCBcXFwiXCIgKyBkeW5hbWljTWF0Y2hbMV0gKyBcIlxcXCIgaXMgYSByZXNlcnZlZCBuYW1lLiBQbGVhc2UgdXNlIGEgZGlmZmVyZW50IG5hbWUgaW4gcGF0aCBcXFwiXCIgKyByb3V0ZS5wYXRoICsgXCJcXFwiLlwiKSA6ICgwLCBfaW52YXJpYW50Mi5kZWZhdWx0KShmYWxzZSkgOiB2b2lkIDA7XG4gICAgICAgIHZhciB2YWx1ZSA9IGRlY29kZVVSSUNvbXBvbmVudCh1cmlTZWdtZW50KTtcbiAgICAgICAgcGFyYW1zW2R5bmFtaWNNYXRjaFsxXV0gPSB2YWx1ZTtcbiAgICAgIH0gZWxzZSBpZiAocm91dGVTZWdtZW50ICE9PSB1cmlTZWdtZW50KSB7XG4gICAgICAgIC8vIEN1cnJlbnQgc2VnbWVudHMgZG9uJ3QgbWF0Y2gsIG5vdCBkeW5hbWljLCBub3Qgc3BsYXQsIHNvIG5vIG1hdGNoXG4gICAgICAgIC8vIHVyaTogICAvdXNlcnMvMTIzL3NldHRpbmdzXG4gICAgICAgIC8vIHJvdXRlOiAvdXNlcnMvOmlkL3Byb2ZpbGVcbiAgICAgICAgbWlzc2VkID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFtaXNzZWQpIHtcbiAgICAgIG1hdGNoID0ge1xuICAgICAgICByb3V0ZTogcm91dGUsXG4gICAgICAgIHBhcmFtczogcGFyYW1zLFxuICAgICAgICB1cmk6IFwiL1wiICsgdXJpU2VnbWVudHMuc2xpY2UoMCwgaW5kZXgpLmpvaW4oXCIvXCIpXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1hdGNoIHx8IGRlZmF1bHRfIHx8IG51bGw7XG59OyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gbWF0Y2gocGF0aCwgdXJpKSAtIE1hdGNoZXMganVzdCBvbmUgcGF0aCB0byBhIHVyaSwgYWxzbyBsb2xcblxuXG52YXIgbWF0Y2ggPSBmdW5jdGlvbiBtYXRjaChwYXRoLCB1cmkpIHtcbiAgcmV0dXJuIHBpY2soW3tcbiAgICBwYXRoOiBwYXRoXG4gIH1dLCB1cmkpO1xufTsgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIHJlc29sdmUodG8sIGJhc2VwYXRoKVxuLy9cbi8vIFJlc29sdmVzIFVSSXMgYXMgdGhvdWdoIGV2ZXJ5IHBhdGggaXMgYSBkaXJlY3RvcnksIG5vIGZpbGVzLiAgUmVsYXRpdmUgVVJJc1xuLy8gaW4gdGhlIGJyb3dzZXIgY2FuIGZlZWwgYXdrd2FyZCBiZWNhdXNlIG5vdCBvbmx5IGNhbiB5b3UgYmUgXCJpbiBhIGRpcmVjdG9yeVwiXG4vLyB5b3UgY2FuIGJlIFwiYXQgYSBmaWxlXCIsIHRvby4gRm9yIGV4YW1wbGVcbi8vXG4vLyAgICAgYnJvd3NlclNwZWNSZXNvbHZlKCdmb28nLCAnL2Jhci8nKSA9PiAvYmFyL2Zvb1xuLy8gICAgIGJyb3dzZXJTcGVjUmVzb2x2ZSgnZm9vJywgJy9iYXInKSA9PiAvZm9vXG4vL1xuLy8gQnV0IG9uIHRoZSBjb21tYW5kIGxpbmUgb2YgYSBmaWxlIHN5c3RlbSwgaXQncyBub3QgYXMgY29tcGxpY2F0ZWQsIHlvdSBjYW4ndFxuLy8gYGNkYCBmcm9tIGEgZmlsZSwgb25seSBkaXJlY3Rvcmllcy4gIFRoaXMgd2F5LCBsaW5rcyBoYXZlIHRvIGtub3cgbGVzcyBhYm91dFxuLy8gdGhlaXIgY3VycmVudCBwYXRoLiBUbyBnbyBkZWVwZXIgeW91IGNhbiBkbyB0aGlzOlxuLy9cbi8vICAgICA8TGluayB0bz1cImRlZXBlclwiLz5cbi8vICAgICAvLyBpbnN0ZWFkIG9mXG4vLyAgICAgPExpbmsgdG89YHske3Byb3BzLnVyaX0vZGVlcGVyfWAvPlxuLy9cbi8vIEp1c3QgbGlrZSBgY2RgLCBpZiB5b3Ugd2FudCB0byBnbyBkZWVwZXIgZnJvbSB0aGUgY29tbWFuZCBsaW5lLCB5b3UgZG8gdGhpczpcbi8vXG4vLyAgICAgY2QgZGVlcGVyXG4vLyAgICAgIyBub3Rcbi8vICAgICBjZCAkKHB3ZCkvZGVlcGVyXG4vL1xuLy8gQnkgdHJlYXRpbmcgZXZlcnkgcGF0aCBhcyBhIGRpcmVjdG9yeSwgbGlua2luZyB0byByZWxhdGl2ZSBwYXRocyBzaG91bGRcbi8vIHJlcXVpcmUgbGVzcyBjb250ZXh0dWFsIGluZm9ybWF0aW9uIGFuZCAoZmluZ2VycyBjcm9zc2VkKSBiZSBtb3JlIGludHVpdGl2ZS5cblxuXG52YXIgcmVzb2x2ZSA9IGZ1bmN0aW9uIHJlc29sdmUodG8sIGJhc2UpIHtcbiAgLy8gL2Zvby9iYXIsIC9iYXovcXV4ID0+IC9mb28vYmFyXG4gIGlmIChzdGFydHNXaXRoKHRvLCBcIi9cIikpIHtcbiAgICByZXR1cm4gdG87XG4gIH1cblxuICB2YXIgX3RvJHNwbGl0ID0gdG8uc3BsaXQoXCI/XCIpLFxuICAgICAgdG9QYXRobmFtZSA9IF90byRzcGxpdFswXSxcbiAgICAgIHRvUXVlcnkgPSBfdG8kc3BsaXRbMV07XG5cbiAgdmFyIF9iYXNlJHNwbGl0ID0gYmFzZS5zcGxpdChcIj9cIiksXG4gICAgICBiYXNlUGF0aG5hbWUgPSBfYmFzZSRzcGxpdFswXTtcblxuICB2YXIgdG9TZWdtZW50cyA9IHNlZ21lbnRpemUodG9QYXRobmFtZSk7XG4gIHZhciBiYXNlU2VnbWVudHMgPSBzZWdtZW50aXplKGJhc2VQYXRobmFtZSk7IC8vID9hPWIsIC91c2Vycz9iPWMgPT4gL3VzZXJzP2E9YlxuXG4gIGlmICh0b1NlZ21lbnRzWzBdID09PSBcIlwiKSB7XG4gICAgcmV0dXJuIGFkZFF1ZXJ5KGJhc2VQYXRobmFtZSwgdG9RdWVyeSk7XG4gIH0gLy8gcHJvZmlsZSwgL3VzZXJzLzc4OSA9PiAvdXNlcnMvNzg5L3Byb2ZpbGVcblxuXG4gIGlmICghc3RhcnRzV2l0aCh0b1NlZ21lbnRzWzBdLCBcIi5cIikpIHtcbiAgICB2YXIgcGF0aG5hbWUgPSBiYXNlU2VnbWVudHMuY29uY2F0KHRvU2VnbWVudHMpLmpvaW4oXCIvXCIpO1xuICAgIHJldHVybiBhZGRRdWVyeSgoYmFzZVBhdGhuYW1lID09PSBcIi9cIiA/IFwiXCIgOiBcIi9cIikgKyBwYXRobmFtZSwgdG9RdWVyeSk7XG4gIH0gLy8gLi8gICAgICAgICAvdXNlcnMvMTIzICA9PiAgL3VzZXJzLzEyM1xuICAvLyAuLi8gICAgICAgIC91c2Vycy8xMjMgID0+ICAvdXNlcnNcbiAgLy8gLi4vLi4gICAgICAvdXNlcnMvMTIzICA9PiAgL1xuICAvLyAuLi8uLi9vbmUgIC9hL2IvYy9kICAgID0+ICAvYS9iL29uZVxuICAvLyAuLi8uL29uZSAgIC9hL2IvYy9kICAgID0+ICAvYS9iL2Mvb25lXG5cblxuICB2YXIgYWxsU2VnbWVudHMgPSBiYXNlU2VnbWVudHMuY29uY2F0KHRvU2VnbWVudHMpO1xuICB2YXIgc2VnbWVudHMgPSBbXTtcblxuICBmb3IgKHZhciBpID0gMCwgbCA9IGFsbFNlZ21lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIHZhciBzZWdtZW50ID0gYWxsU2VnbWVudHNbaV07XG4gICAgaWYgKHNlZ21lbnQgPT09IFwiLi5cIikgc2VnbWVudHMucG9wKCk7ZWxzZSBpZiAoc2VnbWVudCAhPT0gXCIuXCIpIHNlZ21lbnRzLnB1c2goc2VnbWVudCk7XG4gIH1cblxuICByZXR1cm4gYWRkUXVlcnkoXCIvXCIgKyBzZWdtZW50cy5qb2luKFwiL1wiKSwgdG9RdWVyeSk7XG59OyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gaW5zZXJ0UGFyYW1zKHBhdGgsIHBhcmFtcylcblxuXG52YXIgaW5zZXJ0UGFyYW1zID0gZnVuY3Rpb24gaW5zZXJ0UGFyYW1zKHBhdGgsIHBhcmFtcykge1xuICB2YXIgX3BhdGgkc3BsaXQgPSBwYXRoLnNwbGl0KFwiP1wiKSxcbiAgICAgIHBhdGhCYXNlID0gX3BhdGgkc3BsaXRbMF0sXG4gICAgICBfcGF0aCRzcGxpdCQgPSBfcGF0aCRzcGxpdFsxXSxcbiAgICAgIHF1ZXJ5ID0gX3BhdGgkc3BsaXQkID09PSB1bmRlZmluZWQgPyBcIlwiIDogX3BhdGgkc3BsaXQkO1xuXG4gIHZhciBzZWdtZW50cyA9IHNlZ21lbnRpemUocGF0aEJhc2UpO1xuICB2YXIgY29uc3RydWN0ZWRQYXRoID0gXCIvXCIgKyBzZWdtZW50cy5tYXAoZnVuY3Rpb24gKHNlZ21lbnQpIHtcbiAgICB2YXIgbWF0Y2ggPSBwYXJhbVJlLmV4ZWMoc2VnbWVudCk7XG4gICAgcmV0dXJuIG1hdGNoID8gcGFyYW1zW21hdGNoWzFdXSA6IHNlZ21lbnQ7XG4gIH0pLmpvaW4oXCIvXCIpO1xuICB2YXIgX3BhcmFtcyRsb2NhdGlvbiA9IHBhcmFtcy5sb2NhdGlvbjtcbiAgX3BhcmFtcyRsb2NhdGlvbiA9IF9wYXJhbXMkbG9jYXRpb24gPT09IHVuZGVmaW5lZCA/IHt9IDogX3BhcmFtcyRsb2NhdGlvbjtcbiAgdmFyIF9wYXJhbXMkbG9jYXRpb24kc2VhciA9IF9wYXJhbXMkbG9jYXRpb24uc2VhcmNoLFxuICAgICAgc2VhcmNoID0gX3BhcmFtcyRsb2NhdGlvbiRzZWFyID09PSB1bmRlZmluZWQgPyBcIlwiIDogX3BhcmFtcyRsb2NhdGlvbiRzZWFyO1xuICB2YXIgc2VhcmNoU3BsaXQgPSBzZWFyY2guc3BsaXQoXCI/XCIpWzFdIHx8IFwiXCI7XG4gIGNvbnN0cnVjdGVkUGF0aCA9IGFkZFF1ZXJ5KGNvbnN0cnVjdGVkUGF0aCwgcXVlcnksIHNlYXJjaFNwbGl0KTtcbiAgcmV0dXJuIGNvbnN0cnVjdGVkUGF0aDtcbn07XG5cbnZhciB2YWxpZGF0ZVJlZGlyZWN0ID0gZnVuY3Rpb24gdmFsaWRhdGVSZWRpcmVjdChmcm9tLCB0bykge1xuICB2YXIgZmlsdGVyID0gZnVuY3Rpb24gZmlsdGVyKHNlZ21lbnQpIHtcbiAgICByZXR1cm4gaXNEeW5hbWljKHNlZ21lbnQpO1xuICB9O1xuXG4gIHZhciBmcm9tU3RyaW5nID0gc2VnbWVudGl6ZShmcm9tKS5maWx0ZXIoZmlsdGVyKS5zb3J0KCkuam9pbihcIi9cIik7XG4gIHZhciB0b1N0cmluZyA9IHNlZ21lbnRpemUodG8pLmZpbHRlcihmaWx0ZXIpLnNvcnQoKS5qb2luKFwiL1wiKTtcbiAgcmV0dXJuIGZyb21TdHJpbmcgPT09IHRvU3RyaW5nO1xufTsgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIEp1bmtcblxuXG52YXIgcGFyYW1SZSA9IC9eOiguKykvO1xudmFyIFNFR01FTlRfUE9JTlRTID0gNDtcbnZhciBTVEFUSUNfUE9JTlRTID0gMztcbnZhciBEWU5BTUlDX1BPSU5UUyA9IDI7XG52YXIgU1BMQVRfUEVOQUxUWSA9IDE7XG52YXIgUk9PVF9QT0lOVFMgPSAxO1xuXG52YXIgaXNSb290U2VnbWVudCA9IGZ1bmN0aW9uIGlzUm9vdFNlZ21lbnQoc2VnbWVudCkge1xuICByZXR1cm4gc2VnbWVudCA9PT0gXCJcIjtcbn07XG5cbnZhciBpc0R5bmFtaWMgPSBmdW5jdGlvbiBpc0R5bmFtaWMoc2VnbWVudCkge1xuICByZXR1cm4gcGFyYW1SZS50ZXN0KHNlZ21lbnQpO1xufTtcblxudmFyIGlzU3BsYXQgPSBmdW5jdGlvbiBpc1NwbGF0KHNlZ21lbnQpIHtcbiAgcmV0dXJuIHNlZ21lbnQgJiYgc2VnbWVudFswXSA9PT0gXCIqXCI7XG59O1xuXG52YXIgcmFua1JvdXRlID0gZnVuY3Rpb24gcmFua1JvdXRlKHJvdXRlLCBpbmRleCkge1xuICB2YXIgc2NvcmUgPSByb3V0ZS5kZWZhdWx0ID8gMCA6IHNlZ21lbnRpemUocm91dGUucGF0aCkucmVkdWNlKGZ1bmN0aW9uIChzY29yZSwgc2VnbWVudCkge1xuICAgIHNjb3JlICs9IFNFR01FTlRfUE9JTlRTO1xuICAgIGlmIChpc1Jvb3RTZWdtZW50KHNlZ21lbnQpKSBzY29yZSArPSBST09UX1BPSU5UUztlbHNlIGlmIChpc0R5bmFtaWMoc2VnbWVudCkpIHNjb3JlICs9IERZTkFNSUNfUE9JTlRTO2Vsc2UgaWYgKGlzU3BsYXQoc2VnbWVudCkpIHNjb3JlIC09IFNFR01FTlRfUE9JTlRTICsgU1BMQVRfUEVOQUxUWTtlbHNlIHNjb3JlICs9IFNUQVRJQ19QT0lOVFM7XG4gICAgcmV0dXJuIHNjb3JlO1xuICB9LCAwKTtcbiAgcmV0dXJuIHtcbiAgICByb3V0ZTogcm91dGUsXG4gICAgc2NvcmU6IHNjb3JlLFxuICAgIGluZGV4OiBpbmRleFxuICB9O1xufTtcblxudmFyIHJhbmtSb3V0ZXMgPSBmdW5jdGlvbiByYW5rUm91dGVzKHJvdXRlcykge1xuICByZXR1cm4gcm91dGVzLm1hcChyYW5rUm91dGUpLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICByZXR1cm4gYS5zY29yZSA8IGIuc2NvcmUgPyAxIDogYS5zY29yZSA+IGIuc2NvcmUgPyAtMSA6IGEuaW5kZXggLSBiLmluZGV4O1xuICB9KTtcbn07XG5cbnZhciBzZWdtZW50aXplID0gZnVuY3Rpb24gc2VnbWVudGl6ZSh1cmkpIHtcbiAgcmV0dXJuIHVyaSAvLyBzdHJpcCBzdGFydGluZy9lbmRpbmcgc2xhc2hlc1xuICAucmVwbGFjZSgvKF5cXC8rfFxcLyskKS9nLCBcIlwiKS5zcGxpdChcIi9cIik7XG59O1xuXG52YXIgYWRkUXVlcnkgPSBmdW5jdGlvbiBhZGRRdWVyeShwYXRobmFtZSkge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgcXVlcnkgPSBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgcXVlcnlbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgcXVlcnkgPSBxdWVyeS5maWx0ZXIoZnVuY3Rpb24gKHEpIHtcbiAgICByZXR1cm4gcSAmJiBxLmxlbmd0aCA+IDA7XG4gIH0pO1xuICByZXR1cm4gcGF0aG5hbWUgKyAocXVlcnkgJiYgcXVlcnkubGVuZ3RoID4gMCA/IFwiP1wiICsgcXVlcnkuam9pbihcIiZcIikgOiBcIlwiKTtcbn07XG5cbnZhciByZXNlcnZlZE5hbWVzID0gW1widXJpXCIsIFwicGF0aFwiXTtcbi8qKlxuICogU2hhbGxvdyBjb21wYXJlcyB0d28gb2JqZWN0cy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmoxIFRoZSBmaXJzdCBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmoyIFRoZSBzZWNvbmQgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKi9cblxudmFyIHNoYWxsb3dDb21wYXJlID0gZnVuY3Rpb24gc2hhbGxvd0NvbXBhcmUob2JqMSwgb2JqMikge1xuICB2YXIgb2JqMUtleXMgPSBPYmplY3Qua2V5cyhvYmoxKTtcbiAgcmV0dXJuIG9iajFLZXlzLmxlbmd0aCA9PT0gT2JqZWN0LmtleXMob2JqMikubGVuZ3RoICYmIG9iajFLZXlzLmV2ZXJ5KGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gb2JqMi5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIG9iajFba2V5XSA9PT0gb2JqMltrZXldO1xuICB9KTtcbn07IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cblxuZXhwb3J0cy5zdGFydHNXaXRoID0gc3RhcnRzV2l0aDtcbmV4cG9ydHMucGljayA9IHBpY2s7XG5leHBvcnRzLm1hdGNoID0gbWF0Y2g7XG5leHBvcnRzLnJlc29sdmUgPSByZXNvbHZlO1xuZXhwb3J0cy5pbnNlcnRQYXJhbXMgPSBpbnNlcnRQYXJhbXM7XG5leHBvcnRzLnZhbGlkYXRlUmVkaXJlY3QgPSB2YWxpZGF0ZVJlZGlyZWN0O1xuZXhwb3J0cy5zaGFsbG93Q29tcGFyZSA9IHNoYWxsb3dDb21wYXJlOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2098\n')},9771:function(__unused_webpack_module,exports){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", ({\n value: true\n}));\nexports.default = void 0;\n\nfunction startsWith(string, target, position) {\n var length = string.length;\n position = position == null ? 0 : position;\n\n if (position < 0) {\n position = 0;\n } else if (position > length) {\n position = length;\n }\n\n target = "".concat(target);\n return string.slice(position, position + target.length) == target;\n}\n\nfunction getBrowserLang() {\n if (typeof window === "undefined") {\n return null;\n }\n\n var lang = window.navigator.languages && window.navigator.languages[0] || window.navigator.language || window.navigator.browserLanguage || window.navigator.userLanguage || window.navigator.systemLanguage || null;\n return lang;\n}\n\nfunction normalizeCode(code) {\n return code.toLowerCase().replace(/-/, "_");\n}\n\nfunction getPreferredLanguage(options) {\n if (!options) {\n return getBrowserLang();\n }\n\n var languages = options.languages,\n fallback = options.fallback;\n\n if (!options.languages) {\n return fallback;\n } // some browsers report language as en-US instead of en_US\n\n\n var browserLanguage = normalizeCode(getBrowserLang());\n\n if (!browserLanguage) {\n return fallback;\n }\n\n var match = languages.filter(function (lang) {\n return normalizeCode(lang) === browserLanguage;\n });\n\n if (match.length > 0) {\n return match[0] || fallback;\n } // en == en_US\n\n\n var matchCodeOnly = languages.filter(function (lang) {\n return startsWith(browserLanguage, lang);\n });\n return matchCodeOnly[0] || fallback;\n}\n\nvar _default = getPreferredLanguage;\nexports.default = _default;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9icm93c2VyLWxhbmcvZGlzdC9pbmRleC5qcz9iNmY0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhOztBQUViLDhDQUE2QztBQUM3QztBQUNBLENBQUMsRUFBQztBQUNGLGVBQWU7O0FBRWY7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBLGVBQWUiLCJmaWxlIjoiOTc3MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuXG5mdW5jdGlvbiBzdGFydHNXaXRoKHN0cmluZywgdGFyZ2V0LCBwb3NpdGlvbikge1xuICB2YXIgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aDtcbiAgcG9zaXRpb24gPSBwb3NpdGlvbiA9PSBudWxsID8gMCA6IHBvc2l0aW9uO1xuXG4gIGlmIChwb3NpdGlvbiA8IDApIHtcbiAgICBwb3NpdGlvbiA9IDA7XG4gIH0gZWxzZSBpZiAocG9zaXRpb24gPiBsZW5ndGgpIHtcbiAgICBwb3NpdGlvbiA9IGxlbmd0aDtcbiAgfVxuXG4gIHRhcmdldCA9IFwiXCIuY29uY2F0KHRhcmdldCk7XG4gIHJldHVybiBzdHJpbmcuc2xpY2UocG9zaXRpb24sIHBvc2l0aW9uICsgdGFyZ2V0Lmxlbmd0aCkgPT0gdGFyZ2V0O1xufVxuXG5mdW5jdGlvbiBnZXRCcm93c2VyTGFuZygpIHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBsYW5nID0gd2luZG93Lm5hdmlnYXRvci5sYW5ndWFnZXMgJiYgd2luZG93Lm5hdmlnYXRvci5sYW5ndWFnZXNbMF0gfHwgd2luZG93Lm5hdmlnYXRvci5sYW5ndWFnZSB8fCB3aW5kb3cubmF2aWdhdG9yLmJyb3dzZXJMYW5ndWFnZSB8fCB3aW5kb3cubmF2aWdhdG9yLnVzZXJMYW5ndWFnZSB8fCB3aW5kb3cubmF2aWdhdG9yLnN5c3RlbUxhbmd1YWdlIHx8IG51bGw7XG4gIHJldHVybiBsYW5nO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVDb2RlKGNvZGUpIHtcbiAgcmV0dXJuIGNvZGUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC8tLywgXCJfXCIpO1xufVxuXG5mdW5jdGlvbiBnZXRQcmVmZXJyZWRMYW5ndWFnZShvcHRpb25zKSB7XG4gIGlmICghb3B0aW9ucykge1xuICAgIHJldHVybiBnZXRCcm93c2VyTGFuZygpO1xuICB9XG5cbiAgdmFyIGxhbmd1YWdlcyA9IG9wdGlvbnMubGFuZ3VhZ2VzLFxuICAgICAgZmFsbGJhY2sgPSBvcHRpb25zLmZhbGxiYWNrO1xuXG4gIGlmICghb3B0aW9ucy5sYW5ndWFnZXMpIHtcbiAgICByZXR1cm4gZmFsbGJhY2s7XG4gIH0gLy8gc29tZSBicm93c2VycyByZXBvcnQgbGFuZ3VhZ2UgYXMgZW4tVVMgaW5zdGVhZCBvZiBlbl9VU1xuXG5cbiAgdmFyIGJyb3dzZXJMYW5ndWFnZSA9IG5vcm1hbGl6ZUNvZGUoZ2V0QnJvd3NlckxhbmcoKSk7XG5cbiAgaWYgKCFicm93c2VyTGFuZ3VhZ2UpIHtcbiAgICByZXR1cm4gZmFsbGJhY2s7XG4gIH1cblxuICB2YXIgbWF0Y2ggPSBsYW5ndWFnZXMuZmlsdGVyKGZ1bmN0aW9uIChsYW5nKSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZUNvZGUobGFuZykgPT09IGJyb3dzZXJMYW5ndWFnZTtcbiAgfSk7XG5cbiAgaWYgKG1hdGNoLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gbWF0Y2hbMF0gfHwgZmFsbGJhY2s7XG4gIH0gLy8gZW4gPT0gZW5fVVNcblxuXG4gIHZhciBtYXRjaENvZGVPbmx5ID0gbGFuZ3VhZ2VzLmZpbHRlcihmdW5jdGlvbiAobGFuZykge1xuICAgIHJldHVybiBzdGFydHNXaXRoKGJyb3dzZXJMYW5ndWFnZSwgbGFuZyk7XG4gIH0pO1xuICByZXR1cm4gbWF0Y2hDb2RlT25seVswXSB8fCBmYWxsYmFjaztcbn1cblxudmFyIF9kZWZhdWx0ID0gZ2V0UHJlZmVycmVkTGFuZ3VhZ2U7XG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9771\n')},6494:function(module){"use strict";eval("\n\nmodule.exports = Object.assign;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9nYXRzYnkvZGlzdC9pbnRlcm5hbC1wbHVnaW5zL2J1bmRsZS1vcHRpbWlzYXRpb25zL3BvbHlmaWxscy9vYmplY3QtYXNzaWduLmpzP2ViZmIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIiLCJmaWxlIjoiNjQ5NC5qcyIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5hc3NpZ247Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///6494\n")},5706:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar reactIs = __webpack_require__(8812);\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\n\n\nvar REACT_STATICS = {\n childContextTypes: true,\n contextType: true,\n contextTypes: true,\n defaultProps: true,\n displayName: true,\n getDefaultProps: true,\n getDerivedStateFromError: true,\n getDerivedStateFromProps: true,\n mixins: true,\n propTypes: true,\n type: true\n};\nvar KNOWN_STATICS = {\n name: true,\n length: true,\n prototype: true,\n caller: true,\n callee: true,\n arguments: true,\n arity: true\n};\nvar FORWARD_REF_STATICS = {\n '$$typeof': true,\n render: true,\n defaultProps: true,\n displayName: true,\n propTypes: true\n};\nvar MEMO_STATICS = {\n '$$typeof': true,\n compare: true,\n defaultProps: true,\n displayName: true,\n propTypes: true,\n type: true\n};\nvar TYPE_STATICS = {};\nTYPE_STATICS[reactIs.ForwardRef] = FORWARD_REF_STATICS;\nTYPE_STATICS[reactIs.Memo] = MEMO_STATICS;\n\nfunction getStatics(component) {\n // React v16.11 and below\n if (reactIs.isMemo(component)) {\n return MEMO_STATICS;\n } // React v16.12 and above\n\n\n return TYPE_STATICS[component['$$typeof']] || REACT_STATICS;\n}\n\nvar defineProperty = Object.defineProperty;\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = Object.prototype;\n\nfunction hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n if (typeof sourceComponent !== 'string') {\n // don't hoist over string (html) components\n if (objectPrototype) {\n var inheritedComponent = getPrototypeOf(sourceComponent);\n\n if (inheritedComponent && inheritedComponent !== objectPrototype) {\n hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n }\n }\n\n var keys = getOwnPropertyNames(sourceComponent);\n\n if (getOwnPropertySymbols) {\n keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n }\n\n var targetStatics = getStatics(targetComponent);\n var sourceStatics = getStatics(sourceComponent);\n\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n\n if (!KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) {\n var descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n\n try {\n // Avoid failures from read-only properties\n defineProperty(targetComponent, key, descriptor);\n } catch (e) {}\n }\n }\n }\n\n return targetComponent;\n}\n\nmodule.exports = hoistNonReactStatics;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9ob2lzdC1ub24tcmVhY3Qtc3RhdGljcy9kaXN0L2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzLmNqcy5qcz83MzFjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhOztBQUViLGNBQWMsbUJBQU8sQ0FBQyxJQUFVO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsbUJBQW1CLGlCQUFpQjtBQUNwQzs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiI1NzA2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgcmVhY3RJcyA9IHJlcXVpcmUoJ3JlYWN0LWlzJyk7XG4vKipcbiAqIENvcHlyaWdodCAyMDE1LCBZYWhvbyEgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5cblxudmFyIFJFQUNUX1NUQVRJQ1MgPSB7XG4gIGNoaWxkQ29udGV4dFR5cGVzOiB0cnVlLFxuICBjb250ZXh0VHlwZTogdHJ1ZSxcbiAgY29udGV4dFR5cGVzOiB0cnVlLFxuICBkZWZhdWx0UHJvcHM6IHRydWUsXG4gIGRpc3BsYXlOYW1lOiB0cnVlLFxuICBnZXREZWZhdWx0UHJvcHM6IHRydWUsXG4gIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvcjogdHJ1ZSxcbiAgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzOiB0cnVlLFxuICBtaXhpbnM6IHRydWUsXG4gIHByb3BUeXBlczogdHJ1ZSxcbiAgdHlwZTogdHJ1ZVxufTtcbnZhciBLTk9XTl9TVEFUSUNTID0ge1xuICBuYW1lOiB0cnVlLFxuICBsZW5ndGg6IHRydWUsXG4gIHByb3RvdHlwZTogdHJ1ZSxcbiAgY2FsbGVyOiB0cnVlLFxuICBjYWxsZWU6IHRydWUsXG4gIGFyZ3VtZW50czogdHJ1ZSxcbiAgYXJpdHk6IHRydWVcbn07XG52YXIgRk9SV0FSRF9SRUZfU1RBVElDUyA9IHtcbiAgJyQkdHlwZW9mJzogdHJ1ZSxcbiAgcmVuZGVyOiB0cnVlLFxuICBkZWZhdWx0UHJvcHM6IHRydWUsXG4gIGRpc3BsYXlOYW1lOiB0cnVlLFxuICBwcm9wVHlwZXM6IHRydWVcbn07XG52YXIgTUVNT19TVEFUSUNTID0ge1xuICAnJCR0eXBlb2YnOiB0cnVlLFxuICBjb21wYXJlOiB0cnVlLFxuICBkZWZhdWx0UHJvcHM6IHRydWUsXG4gIGRpc3BsYXlOYW1lOiB0cnVlLFxuICBwcm9wVHlwZXM6IHRydWUsXG4gIHR5cGU6IHRydWVcbn07XG52YXIgVFlQRV9TVEFUSUNTID0ge307XG5UWVBFX1NUQVRJQ1NbcmVhY3RJcy5Gb3J3YXJkUmVmXSA9IEZPUldBUkRfUkVGX1NUQVRJQ1M7XG5UWVBFX1NUQVRJQ1NbcmVhY3RJcy5NZW1vXSA9IE1FTU9fU1RBVElDUztcblxuZnVuY3Rpb24gZ2V0U3RhdGljcyhjb21wb25lbnQpIHtcbiAgLy8gUmVhY3QgdjE2LjExIGFuZCBiZWxvd1xuICBpZiAocmVhY3RJcy5pc01lbW8oY29tcG9uZW50KSkge1xuICAgIHJldHVybiBNRU1PX1NUQVRJQ1M7XG4gIH0gLy8gUmVhY3QgdjE2LjEyIGFuZCBhYm92ZVxuXG5cbiAgcmV0dXJuIFRZUEVfU1RBVElDU1tjb21wb25lbnRbJyQkdHlwZW9mJ11dIHx8IFJFQUNUX1NUQVRJQ1M7XG59XG5cbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIGdldFByb3RvdHlwZU9mID0gT2JqZWN0LmdldFByb3RvdHlwZU9mO1xudmFyIG9iamVjdFByb3RvdHlwZSA9IE9iamVjdC5wcm90b3R5cGU7XG5cbmZ1bmN0aW9uIGhvaXN0Tm9uUmVhY3RTdGF0aWNzKHRhcmdldENvbXBvbmVudCwgc291cmNlQ29tcG9uZW50LCBibGFja2xpc3QpIHtcbiAgaWYgKHR5cGVvZiBzb3VyY2VDb21wb25lbnQgIT09ICdzdHJpbmcnKSB7XG4gICAgLy8gZG9uJ3QgaG9pc3Qgb3ZlciBzdHJpbmcgKGh0bWwpIGNvbXBvbmVudHNcbiAgICBpZiAob2JqZWN0UHJvdG90eXBlKSB7XG4gICAgICB2YXIgaW5oZXJpdGVkQ29tcG9uZW50ID0gZ2V0UHJvdG90eXBlT2Yoc291cmNlQ29tcG9uZW50KTtcblxuICAgICAgaWYgKGluaGVyaXRlZENvbXBvbmVudCAmJiBpbmhlcml0ZWRDb21wb25lbnQgIT09IG9iamVjdFByb3RvdHlwZSkge1xuICAgICAgICBob2lzdE5vblJlYWN0U3RhdGljcyh0YXJnZXRDb21wb25lbnQsIGluaGVyaXRlZENvbXBvbmVudCwgYmxhY2tsaXN0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIga2V5cyA9IGdldE93blByb3BlcnR5TmFtZXMoc291cmNlQ29tcG9uZW50KTtcblxuICAgIGlmIChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICAgIGtleXMgPSBrZXlzLmNvbmNhdChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlQ29tcG9uZW50KSk7XG4gICAgfVxuXG4gICAgdmFyIHRhcmdldFN0YXRpY3MgPSBnZXRTdGF0aWNzKHRhcmdldENvbXBvbmVudCk7XG4gICAgdmFyIHNvdXJjZVN0YXRpY3MgPSBnZXRTdGF0aWNzKHNvdXJjZUNvbXBvbmVudCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuXG4gICAgICBpZiAoIUtOT1dOX1NUQVRJQ1Nba2V5XSAmJiAhKGJsYWNrbGlzdCAmJiBibGFja2xpc3Rba2V5XSkgJiYgIShzb3VyY2VTdGF0aWNzICYmIHNvdXJjZVN0YXRpY3Nba2V5XSkgJiYgISh0YXJnZXRTdGF0aWNzICYmIHRhcmdldFN0YXRpY3Nba2V5XSkpIHtcbiAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlQ29tcG9uZW50LCBrZXkpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gQXZvaWQgZmFpbHVyZXMgZnJvbSByZWFkLW9ubHkgcHJvcGVydGllc1xuICAgICAgICAgIGRlZmluZVByb3BlcnR5KHRhcmdldENvbXBvbmVudCwga2V5LCBkZXNjcmlwdG9yKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0Q29tcG9uZW50O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhvaXN0Tm9uUmVhY3RTdGF0aWNzOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///5706\n")},165:function(__unused_webpack_module,exports){"use strict";eval('/** @license React v16.13.1\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\nvar b = "function" === typeof Symbol && Symbol.for,\n c = b ? Symbol.for("react.element") : 60103,\n d = b ? Symbol.for("react.portal") : 60106,\n e = b ? Symbol.for("react.fragment") : 60107,\n f = b ? Symbol.for("react.strict_mode") : 60108,\n g = b ? Symbol.for("react.profiler") : 60114,\n h = b ? Symbol.for("react.provider") : 60109,\n k = b ? Symbol.for("react.context") : 60110,\n l = b ? Symbol.for("react.async_mode") : 60111,\n m = b ? Symbol.for("react.concurrent_mode") : 60111,\n n = b ? Symbol.for("react.forward_ref") : 60112,\n p = b ? Symbol.for("react.suspense") : 60113,\n q = b ? Symbol.for("react.suspense_list") : 60120,\n r = b ? Symbol.for("react.memo") : 60115,\n t = b ? Symbol.for("react.lazy") : 60116,\n v = b ? Symbol.for("react.block") : 60121,\n w = b ? Symbol.for("react.fundamental") : 60117,\n x = b ? Symbol.for("react.responder") : 60118,\n y = b ? Symbol.for("react.scope") : 60119;\n\nfunction z(a) {\n if ("object" === typeof a && null !== a) {\n var u = a.$$typeof;\n\n switch (u) {\n case c:\n switch (a = a.type, a) {\n case l:\n case m:\n case e:\n case g:\n case f:\n case p:\n return a;\n\n default:\n switch (a = a && a.$$typeof, a) {\n case k:\n case n:\n case t:\n case r:\n case h:\n return a;\n\n default:\n return u;\n }\n\n }\n\n case d:\n return u;\n }\n }\n}\n\nfunction A(a) {\n return z(a) === m;\n}\n\nexports.AsyncMode = l;\nexports.ConcurrentMode = m;\nexports.ContextConsumer = k;\nexports.ContextProvider = h;\nexports.Element = c;\nexports.ForwardRef = n;\nexports.Fragment = e;\nexports.Lazy = t;\nexports.Memo = r;\nexports.Portal = d;\nexports.Profiler = g;\nexports.StrictMode = f;\nexports.Suspense = p;\n\nexports.isAsyncMode = function (a) {\n return A(a) || z(a) === l;\n};\n\nexports.isConcurrentMode = A;\n\nexports.isContextConsumer = function (a) {\n return z(a) === k;\n};\n\nexports.isContextProvider = function (a) {\n return z(a) === h;\n};\n\nexports.isElement = function (a) {\n return "object" === typeof a && null !== a && a.$$typeof === c;\n};\n\nexports.isForwardRef = function (a) {\n return z(a) === n;\n};\n\nexports.isFragment = function (a) {\n return z(a) === e;\n};\n\nexports.isLazy = function (a) {\n return z(a) === t;\n};\n\nexports.isMemo = function (a) {\n return z(a) === r;\n};\n\nexports.isPortal = function (a) {\n return z(a) === d;\n};\n\nexports.isProfiler = function (a) {\n return z(a) === g;\n};\n\nexports.isStrictMode = function (a) {\n return z(a) === f;\n};\n\nexports.isSuspense = function (a) {\n return z(a) === p;\n};\n\nexports.isValidElementType = function (a) {\n return "string" === typeof a || "function" === typeof a || a === e || a === m || a === g || a === f || a === p || a === q || "object" === typeof a && null !== a && (a.$$typeof === t || a.$$typeof === r || a.$$typeof === h || a.$$typeof === k || a.$$typeof === n || a.$$typeof === w || a.$$typeof === x || a.$$typeof === y || a.$$typeof === v);\n};\n\nexports.typeOf = z;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9yZWFjdC1pcy9janMvcmVhY3QtaXMucHJvZHVjdGlvbi5taW4uanM/YWQxMiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ2E7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGlCQUFpQjtBQUNqQixzQkFBc0I7QUFDdEIsdUJBQXVCO0FBQ3ZCLHVCQUF1QjtBQUN2QixlQUFlO0FBQ2Ysa0JBQWtCO0FBQ2xCLGdCQUFnQjtBQUNoQixZQUFZO0FBQ1osWUFBWTtBQUNaLGNBQWM7QUFDZCxnQkFBZ0I7QUFDaEIsa0JBQWtCO0FBQ2xCLGdCQUFnQjs7QUFFaEIsbUJBQW1CO0FBQ25CO0FBQ0E7O0FBRUEsd0JBQXdCOztBQUV4Qix5QkFBeUI7QUFDekI7QUFDQTs7QUFFQSx5QkFBeUI7QUFDekI7QUFDQTs7QUFFQSxpQkFBaUI7QUFDakI7QUFDQTs7QUFFQSxvQkFBb0I7QUFDcEI7QUFDQTs7QUFFQSxrQkFBa0I7QUFDbEI7QUFDQTs7QUFFQSxjQUFjO0FBQ2Q7QUFDQTs7QUFFQSxjQUFjO0FBQ2Q7QUFDQTs7QUFFQSxnQkFBZ0I7QUFDaEI7QUFDQTs7QUFFQSxrQkFBa0I7QUFDbEI7QUFDQTs7QUFFQSxvQkFBb0I7QUFDcEI7QUFDQTs7QUFFQSxrQkFBa0I7QUFDbEI7QUFDQTs7QUFFQSwwQkFBMEI7QUFDMUI7QUFDQTs7QUFFQSxjQUFjIiwiZmlsZSI6IjE2NS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBAbGljZW5zZSBSZWFjdCB2MTYuMTMuMVxuICogcmVhY3QtaXMucHJvZHVjdGlvbi5taW4uanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgYiA9IFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIFN5bWJvbCAmJiBTeW1ib2wuZm9yLFxuICAgIGMgPSBiID8gU3ltYm9sLmZvcihcInJlYWN0LmVsZW1lbnRcIikgOiA2MDEwMyxcbiAgICBkID0gYiA/IFN5bWJvbC5mb3IoXCJyZWFjdC5wb3J0YWxcIikgOiA2MDEwNixcbiAgICBlID0gYiA/IFN5bWJvbC5mb3IoXCJyZWFjdC5mcmFnbWVudFwiKSA6IDYwMTA3LFxuICAgIGYgPSBiID8gU3ltYm9sLmZvcihcInJlYWN0LnN0cmljdF9tb2RlXCIpIDogNjAxMDgsXG4gICAgZyA9IGIgPyBTeW1ib2wuZm9yKFwicmVhY3QucHJvZmlsZXJcIikgOiA2MDExNCxcbiAgICBoID0gYiA/IFN5bWJvbC5mb3IoXCJyZWFjdC5wcm92aWRlclwiKSA6IDYwMTA5LFxuICAgIGsgPSBiID8gU3ltYm9sLmZvcihcInJlYWN0LmNvbnRleHRcIikgOiA2MDExMCxcbiAgICBsID0gYiA/IFN5bWJvbC5mb3IoXCJyZWFjdC5hc3luY19tb2RlXCIpIDogNjAxMTEsXG4gICAgbSA9IGIgPyBTeW1ib2wuZm9yKFwicmVhY3QuY29uY3VycmVudF9tb2RlXCIpIDogNjAxMTEsXG4gICAgbiA9IGIgPyBTeW1ib2wuZm9yKFwicmVhY3QuZm9yd2FyZF9yZWZcIikgOiA2MDExMixcbiAgICBwID0gYiA/IFN5bWJvbC5mb3IoXCJyZWFjdC5zdXNwZW5zZVwiKSA6IDYwMTEzLFxuICAgIHEgPSBiID8gU3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlX2xpc3RcIikgOiA2MDEyMCxcbiAgICByID0gYiA/IFN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vXCIpIDogNjAxMTUsXG4gICAgdCA9IGIgPyBTeW1ib2wuZm9yKFwicmVhY3QubGF6eVwiKSA6IDYwMTE2LFxuICAgIHYgPSBiID8gU3ltYm9sLmZvcihcInJlYWN0LmJsb2NrXCIpIDogNjAxMjEsXG4gICAgdyA9IGIgPyBTeW1ib2wuZm9yKFwicmVhY3QuZnVuZGFtZW50YWxcIikgOiA2MDExNyxcbiAgICB4ID0gYiA/IFN5bWJvbC5mb3IoXCJyZWFjdC5yZXNwb25kZXJcIikgOiA2MDExOCxcbiAgICB5ID0gYiA/IFN5bWJvbC5mb3IoXCJyZWFjdC5zY29wZVwiKSA6IDYwMTE5O1xuXG5mdW5jdGlvbiB6KGEpIHtcbiAgaWYgKFwib2JqZWN0XCIgPT09IHR5cGVvZiBhICYmIG51bGwgIT09IGEpIHtcbiAgICB2YXIgdSA9IGEuJCR0eXBlb2Y7XG5cbiAgICBzd2l0Y2ggKHUpIHtcbiAgICAgIGNhc2UgYzpcbiAgICAgICAgc3dpdGNoIChhID0gYS50eXBlLCBhKSB7XG4gICAgICAgICAgY2FzZSBsOlxuICAgICAgICAgIGNhc2UgbTpcbiAgICAgICAgICBjYXNlIGU6XG4gICAgICAgICAgY2FzZSBnOlxuICAgICAgICAgIGNhc2UgZjpcbiAgICAgICAgICBjYXNlIHA6XG4gICAgICAgICAgICByZXR1cm4gYTtcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBzd2l0Y2ggKGEgPSBhICYmIGEuJCR0eXBlb2YsIGEpIHtcbiAgICAgICAgICAgICAgY2FzZSBrOlxuICAgICAgICAgICAgICBjYXNlIG46XG4gICAgICAgICAgICAgIGNhc2UgdDpcbiAgICAgICAgICAgICAgY2FzZSByOlxuICAgICAgICAgICAgICBjYXNlIGg6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGE7XG5cbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICAgIGNhc2UgZDpcbiAgICAgICAgcmV0dXJuIHU7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIEEoYSkge1xuICByZXR1cm4geihhKSA9PT0gbTtcbn1cblxuZXhwb3J0cy5Bc3luY01vZGUgPSBsO1xuZXhwb3J0cy5Db25jdXJyZW50TW9kZSA9IG07XG5leHBvcnRzLkNvbnRleHRDb25zdW1lciA9IGs7XG5leHBvcnRzLkNvbnRleHRQcm92aWRlciA9IGg7XG5leHBvcnRzLkVsZW1lbnQgPSBjO1xuZXhwb3J0cy5Gb3J3YXJkUmVmID0gbjtcbmV4cG9ydHMuRnJhZ21lbnQgPSBlO1xuZXhwb3J0cy5MYXp5ID0gdDtcbmV4cG9ydHMuTWVtbyA9IHI7XG5leHBvcnRzLlBvcnRhbCA9IGQ7XG5leHBvcnRzLlByb2ZpbGVyID0gZztcbmV4cG9ydHMuU3RyaWN0TW9kZSA9IGY7XG5leHBvcnRzLlN1c3BlbnNlID0gcDtcblxuZXhwb3J0cy5pc0FzeW5jTW9kZSA9IGZ1bmN0aW9uIChhKSB7XG4gIHJldHVybiBBKGEpIHx8IHooYSkgPT09IGw7XG59O1xuXG5leHBvcnRzLmlzQ29uY3VycmVudE1vZGUgPSBBO1xuXG5leHBvcnRzLmlzQ29udGV4dENvbnN1bWVyID0gZnVuY3Rpb24gKGEpIHtcbiAgcmV0dXJuIHooYSkgPT09IGs7XG59O1xuXG5leHBvcnRzLmlzQ29udGV4dFByb3ZpZGVyID0gZnVuY3Rpb24gKGEpIHtcbiAgcmV0dXJuIHooYSkgPT09IGg7XG59O1xuXG5leHBvcnRzLmlzRWxlbWVudCA9IGZ1bmN0aW9uIChhKSB7XG4gIHJldHVybiBcIm9iamVjdFwiID09PSB0eXBlb2YgYSAmJiBudWxsICE9PSBhICYmIGEuJCR0eXBlb2YgPT09IGM7XG59O1xuXG5leHBvcnRzLmlzRm9yd2FyZFJlZiA9IGZ1bmN0aW9uIChhKSB7XG4gIHJldHVybiB6KGEpID09PSBuO1xufTtcblxuZXhwb3J0cy5pc0ZyYWdtZW50ID0gZnVuY3Rpb24gKGEpIHtcbiAgcmV0dXJuIHooYSkgPT09IGU7XG59O1xuXG5leHBvcnRzLmlzTGF6eSA9IGZ1bmN0aW9uIChhKSB7XG4gIHJldHVybiB6KGEpID09PSB0O1xufTtcblxuZXhwb3J0cy5pc01lbW8gPSBmdW5jdGlvbiAoYSkge1xuICByZXR1cm4geihhKSA9PT0gcjtcbn07XG5cbmV4cG9ydHMuaXNQb3J0YWwgPSBmdW5jdGlvbiAoYSkge1xuICByZXR1cm4geihhKSA9PT0gZDtcbn07XG5cbmV4cG9ydHMuaXNQcm9maWxlciA9IGZ1bmN0aW9uIChhKSB7XG4gIHJldHVybiB6KGEpID09PSBnO1xufTtcblxuZXhwb3J0cy5pc1N0cmljdE1vZGUgPSBmdW5jdGlvbiAoYSkge1xuICByZXR1cm4geihhKSA9PT0gZjtcbn07XG5cbmV4cG9ydHMuaXNTdXNwZW5zZSA9IGZ1bmN0aW9uIChhKSB7XG4gIHJldHVybiB6KGEpID09PSBwO1xufTtcblxuZXhwb3J0cy5pc1ZhbGlkRWxlbWVudFR5cGUgPSBmdW5jdGlvbiAoYSkge1xuICByZXR1cm4gXCJzdHJpbmdcIiA9PT0gdHlwZW9mIGEgfHwgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgYSB8fCBhID09PSBlIHx8IGEgPT09IG0gfHwgYSA9PT0gZyB8fCBhID09PSBmIHx8IGEgPT09IHAgfHwgYSA9PT0gcSB8fCBcIm9iamVjdFwiID09PSB0eXBlb2YgYSAmJiBudWxsICE9PSBhICYmIChhLiQkdHlwZW9mID09PSB0IHx8IGEuJCR0eXBlb2YgPT09IHIgfHwgYS4kJHR5cGVvZiA9PT0gaCB8fCBhLiQkdHlwZW9mID09PSBrIHx8IGEuJCR0eXBlb2YgPT09IG4gfHwgYS4kJHR5cGVvZiA9PT0gdyB8fCBhLiQkdHlwZW9mID09PSB4IHx8IGEuJCR0eXBlb2YgPT09IHkgfHwgYS4kJHR5cGVvZiA9PT0gdik7XG59O1xuXG5leHBvcnRzLnR5cGVPZiA9IHo7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///165\n')},8812:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nif (true) {\n module.exports = __webpack_require__(165);\n} else {}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9yZWFjdC1pcy9pbmRleC5qcz8zOTgxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhOztBQUViLElBQUksSUFBcUM7QUFDekMsRUFBRSx5Q0FBNEQ7QUFDOUQsQ0FBQyxNQUFNIiwiZmlsZSI6Ijg4MTIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanMnKTtcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8812\n")},9108:function(module){"use strict";eval("\n\nfunction shallowEqualObjects(objA, objB) {\n if (objA === objB) {\n return true;\n }\n\n if (!objA || !objB) {\n return false;\n }\n\n var aKeys = Object.keys(objA);\n var bKeys = Object.keys(objB);\n var len = aKeys.length;\n\n if (bKeys.length !== len) {\n return false;\n }\n\n for (var i = 0; i < len; i++) {\n var key = aKeys[i];\n\n if (objA[key] !== objB[key] || !Object.prototype.hasOwnProperty.call(objB, key)) {\n return false;\n }\n }\n\n return true;\n}\n\nmodule.exports = shallowEqualObjects;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9zaGFsbG93LWVxdWFsL29iamVjdHMvaW5kZXguanM/MzYxMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxpQkFBaUIsU0FBUztBQUMxQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6IjkxMDguanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIHNoYWxsb3dFcXVhbE9iamVjdHMob2JqQSwgb2JqQikge1xuICBpZiAob2JqQSA9PT0gb2JqQikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKCFvYmpBIHx8ICFvYmpCKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIGFLZXlzID0gT2JqZWN0LmtleXMob2JqQSk7XG4gIHZhciBiS2V5cyA9IE9iamVjdC5rZXlzKG9iakIpO1xuICB2YXIgbGVuID0gYUtleXMubGVuZ3RoO1xuXG4gIGlmIChiS2V5cy5sZW5ndGggIT09IGxlbikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICB2YXIga2V5ID0gYUtleXNbaV07XG5cbiAgICBpZiAob2JqQVtrZXldICE9PSBvYmpCW2tleV0gfHwgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmpCLCBrZXkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2hhbGxvd0VxdWFsT2JqZWN0czsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9108\n")},8037:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval('var __webpack_unused_export__;\n\n\nvar _interopRequireDefault = __webpack_require__(5318);\n\n__webpack_unused_export__ = true;\nexports.dq = withPrefix;\nexports.mc = withAssetPrefix;\nexports.c4 = exports.ZP = void 0;\n\nvar _objectWithoutPropertiesLoose2 = _interopRequireDefault(__webpack_require__(7316));\n\nvar _assertThisInitialized2 = _interopRequireDefault(__webpack_require__(1506));\n\nvar _inheritsLoose2 = _interopRequireDefault(__webpack_require__(5354));\n\nvar _extends2 = _interopRequireDefault(__webpack_require__(7154));\n\nvar _propTypes = _interopRequireDefault(__webpack_require__(5697));\n\nvar _react = _interopRequireDefault(__webpack_require__(7294));\n\nvar _reachRouter = __webpack_require__(9499);\n\nvar _utils = __webpack_require__(2098);\n\nvar _parsePath = __webpack_require__(1752);\n\nexports.cP = _parsePath.parsePath;\nvar _excluded = ["to", "getProps", "onClick", "onMouseEnter", "activeClassName", "activeStyle", "innerRef", "partiallyActive", "state", "replace", "_location"];\n\nvar isAbsolutePath = function isAbsolutePath(path) {\n return path === null || path === void 0 ? void 0 : path.startsWith("/");\n};\n\nfunction withPrefix(path, prefix) {\n var _ref, _prefix;\n\n if (prefix === void 0) {\n prefix = getGlobalBasePrefix();\n }\n\n if (!isLocalLink(path)) {\n return path;\n }\n\n if (path.startsWith("./") || path.startsWith("../")) {\n return path;\n }\n\n var base = (_ref = (_prefix = prefix) !== null && _prefix !== void 0 ? _prefix : getGlobalPathPrefix()) !== null && _ref !== void 0 ? _ref : "/";\n return "" + (base !== null && base !== void 0 && base.endsWith("/") ? base.slice(0, -1) : base) + (path.startsWith("/") ? path : "/" + path);\n} // These global values are wrapped in typeof clauses to ensure the values exist.\n// This is especially problematic in unit testing of this component.\n\n\nvar getGlobalPathPrefix = function getGlobalPathPrefix() {\n return false ? 0 : "/justice40-tool/main";\n};\n\nvar getGlobalBasePrefix = function getGlobalBasePrefix() {\n return false ? 0 : "/justice40-tool/main";\n};\n\nvar isLocalLink = function isLocalLink(path) {\n return path && !path.startsWith("http://") && !path.startsWith("https://") && !path.startsWith("//");\n};\n\nfunction withAssetPrefix(path) {\n return withPrefix(path, getGlobalPathPrefix());\n}\n\nfunction absolutify(path, current) {\n // If it\'s already absolute, return as-is\n if (isAbsolutePath(path)) {\n return path;\n }\n\n return (0, _utils.resolve)(path, current);\n}\n\nvar rewriteLinkPath = function rewriteLinkPath(path, relativeTo) {\n if (typeof path === "number") {\n return path;\n }\n\n if (!isLocalLink(path)) {\n return path;\n }\n\n return isAbsolutePath(path) ? withPrefix(path) : absolutify(path, relativeTo);\n};\n\nvar NavLinkPropTypes = {\n activeClassName: _propTypes.default.string,\n activeStyle: _propTypes.default.object,\n partiallyActive: _propTypes.default.bool\n}; // Set up IntersectionObserver\n\nvar createIntersectionObserver = function createIntersectionObserver(el, cb) {\n var io = new window.IntersectionObserver(function (entries) {\n entries.forEach(function (entry) {\n if (el === entry.target) {\n // Check if element is within viewport, remove listener, destroy observer, and run link callback.\n // MSEdge doesn\'t currently support isIntersecting, so also test for an intersectionRatio > 0\n if (entry.isIntersecting || entry.intersectionRatio > 0) {\n io.unobserve(el);\n io.disconnect();\n cb();\n }\n }\n });\n }); // Add element to the observer\n\n io.observe(el);\n return {\n instance: io,\n el: el\n };\n};\n\nfunction GatsbyLinkLocationWrapper(props) {\n return /*#__PURE__*/_react.default.createElement(_reachRouter.Location, null, function (_ref2) {\n var location = _ref2.location;\n return /*#__PURE__*/_react.default.createElement(GatsbyLink, (0, _extends2.default)({}, props, {\n _location: location\n }));\n });\n}\n\nvar GatsbyLink = /*#__PURE__*/function (_React$Component) {\n (0, _inheritsLoose2.default)(GatsbyLink, _React$Component);\n\n function GatsbyLink(props) {\n var _this;\n\n _this = _React$Component.call(this, props) || this; // Default to no support for IntersectionObserver\n\n _this.defaultGetProps = function (_ref3) {\n var isPartiallyCurrent = _ref3.isPartiallyCurrent,\n isCurrent = _ref3.isCurrent;\n\n if (_this.props.partiallyActive ? isPartiallyCurrent : isCurrent) {\n return {\n className: [_this.props.className, _this.props.activeClassName].filter(Boolean).join(" "),\n style: (0, _extends2.default)({}, _this.props.style, _this.props.activeStyle)\n };\n }\n\n return null;\n };\n\n var IOSupported = false;\n\n if (typeof window !== "undefined" && window.IntersectionObserver) {\n IOSupported = true;\n }\n\n _this.state = {\n IOSupported: IOSupported\n };\n _this.handleRef = _this.handleRef.bind((0, _assertThisInitialized2.default)(_this));\n return _this;\n }\n\n var _proto = GatsbyLink.prototype;\n\n _proto._prefetch = function _prefetch() {\n var currentPath = window.location.pathname; // reach router should have the correct state\n\n if (this.props._location && this.props._location.pathname) {\n currentPath = this.props._location.pathname;\n }\n\n var rewrittenPath = rewriteLinkPath(this.props.to, currentPath);\n var newPathName = (0, _parsePath.parsePath)(rewrittenPath).pathname; // Prefech is used to speed up next navigations. When you use it on the current navigation,\n // there could be a race-condition where Chrome uses the stale data instead of waiting for the network to complete\n\n if (currentPath !== newPathName) {\n ___loader.enqueue(newPathName);\n }\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps, prevState) {\n // Preserve non IO functionality if no support\n if (this.props.to !== prevProps.to && !this.state.IOSupported) {\n this._prefetch();\n }\n };\n\n _proto.componentDidMount = function componentDidMount() {\n // Preserve non IO functionality if no support\n if (!this.state.IOSupported) {\n this._prefetch();\n }\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n if (!this.io) {\n return;\n }\n\n var _this$io = this.io,\n instance = _this$io.instance,\n el = _this$io.el;\n instance.unobserve(el);\n instance.disconnect();\n };\n\n _proto.handleRef = function handleRef(ref) {\n var _this2 = this;\n\n if (this.props.innerRef && this.props.innerRef.hasOwnProperty("current")) {\n this.props.innerRef.current = ref;\n } else if (this.props.innerRef) {\n this.props.innerRef(ref);\n }\n\n if (this.state.IOSupported && ref) {\n // If IO supported and element reference found, setup Observer functionality\n this.io = createIntersectionObserver(ref, function () {\n _this2._prefetch();\n });\n }\n };\n\n _proto.render = function render() {\n var _this3 = this;\n\n var _this$props = this.props,\n to = _this$props.to,\n _this$props$getProps = _this$props.getProps,\n getProps = _this$props$getProps === void 0 ? this.defaultGetProps : _this$props$getProps,\n _onClick = _this$props.onClick,\n _onMouseEnter = _this$props.onMouseEnter,\n $activeClassName = _this$props.activeClassName,\n $activeStyle = _this$props.activeStyle,\n $innerRef = _this$props.innerRef,\n partiallyActive = _this$props.partiallyActive,\n state = _this$props.state,\n replace = _this$props.replace,\n _location = _this$props._location,\n rest = (0, _objectWithoutPropertiesLoose2.default)(_this$props, _excluded);\n\n if (false) {}\n\n var prefixedTo = rewriteLinkPath(to, _location.pathname);\n\n if (!isLocalLink(prefixedTo)) {\n return /*#__PURE__*/_react.default.createElement("a", (0, _extends2.default)({\n href: prefixedTo\n }, rest));\n }\n\n return /*#__PURE__*/_react.default.createElement(_reachRouter.Link, (0, _extends2.default)({\n to: prefixedTo,\n state: state,\n getProps: getProps,\n innerRef: this.handleRef,\n onMouseEnter: function onMouseEnter(e) {\n if (_onMouseEnter) {\n _onMouseEnter(e);\n }\n\n ___loader.hovering((0, _parsePath.parsePath)(prefixedTo).pathname);\n },\n onClick: function onClick(e) {\n if (_onClick) {\n _onClick(e);\n }\n\n if (e.button === 0 && // ignore right clicks\n !_this3.props.target && // let browser handle "target=_blank"\n !e.defaultPrevented && // onClick prevented default\n !e.metaKey && // ignore clicks with modifier keys...\n !e.altKey && !e.ctrlKey && !e.shiftKey) {\n e.preventDefault();\n var shouldReplace = replace;\n\n var isCurrent = encodeURI(prefixedTo) === _location.pathname;\n\n if (typeof replace !== "boolean" && isCurrent) {\n shouldReplace = true;\n } // Make sure the necessary scripts and data are\n // loaded before continuing.\n\n\n window.___navigate(prefixedTo, {\n state: state,\n replace: shouldReplace\n });\n }\n\n return true;\n }\n }, rest));\n };\n\n return GatsbyLink;\n}(_react.default.Component);\n\nGatsbyLink.propTypes = (0, _extends2.default)({}, NavLinkPropTypes, {\n onClick: _propTypes.default.func,\n to: _propTypes.default.string.isRequired,\n replace: _propTypes.default.bool,\n state: _propTypes.default.object\n});\n\nvar _default = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {\n return /*#__PURE__*/_react.default.createElement(GatsbyLinkLocationWrapper, (0, _extends2.default)({\n innerRef: ref\n }, props));\n});\n\nexports.ZP = _default;\n\nvar navigate = function navigate(to, options) {\n window.___navigate(rewriteLinkPath(to, window.location.pathname), options);\n};\n\nexports.c4 = navigate;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9nYXRzYnktbGluay9pbmRleC5qcz9mOTkwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBYTs7QUFFYiw2QkFBNkIsbUJBQU8sQ0FBQyxJQUE4Qzs7QUFFbkYseUJBQWtCO0FBQ2xCLFVBQWtCO0FBQ2xCLFVBQXVCO0FBQ3ZCLFVBQWdCLEdBQUcsVUFBZTs7QUFFbEMsNERBQTRELG1CQUFPLENBQUMsSUFBcUQ7O0FBRXpILHFEQUFxRCxtQkFBTyxDQUFDLElBQThDOztBQUUzRyw2Q0FBNkMsbUJBQU8sQ0FBQyxJQUFzQzs7QUFFM0YsdUNBQXVDLG1CQUFPLENBQUMsSUFBZ0M7O0FBRS9FLHdDQUF3QyxtQkFBTyxDQUFDLElBQVk7O0FBRTVELG9DQUFvQyxtQkFBTyxDQUFDLElBQU87O0FBRW5ELG1CQUFtQixtQkFBTyxDQUFDLElBQXdCOztBQUVuRCxhQUFhLG1CQUFPLENBQUMsSUFBa0M7O0FBRXZELGlCQUFpQixtQkFBTyxDQUFDLElBQWM7O0FBRXZDLFVBQWlCO0FBQ2pCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7OztBQUdBO0FBQ0EsU0FBUyxNQUFxQyxHQUFHLENBQW9FLEdBQUcsc0JBQWU7QUFDdkk7O0FBRUE7QUFDQSxTQUFTLE1BQXFDLEdBQUcsQ0FBZ0UsR0FBRyxzQkFBYTtBQUNqSTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUcsRUFBRTs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsMEZBQTBGO0FBQzFGO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsdURBQXVEOztBQUV2RDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsMENBQTBDO0FBQzFDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsK0NBQStDOztBQUUvQztBQUNBO0FBQ0E7O0FBRUE7QUFDQSx3RUFBd0U7QUFDeEU7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsUUFBUSxLQUF5RCxFQUFFLEVBRTlEOztBQUVMOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLFdBQVc7QUFDWDs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQSxDQUFDOztBQUVELGdEQUFnRDtBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7O0FBRUQsVUFBZTs7QUFFZjtBQUNBO0FBQ0E7O0FBRUEsVUFBZ0IiLCJmaWxlIjoiODAzNy5qcyIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMud2l0aFByZWZpeCA9IHdpdGhQcmVmaXg7XG5leHBvcnRzLndpdGhBc3NldFByZWZpeCA9IHdpdGhBc3NldFByZWZpeDtcbmV4cG9ydHMubmF2aWdhdGUgPSBleHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5cbnZhciBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIikpO1xuXG52YXIgX2Fzc2VydFRoaXNJbml0aWFsaXplZDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2Fzc2VydFRoaXNJbml0aWFsaXplZFwiKSk7XG5cbnZhciBfaW5oZXJpdHNMb29zZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2luaGVyaXRzTG9vc2VcIikpO1xuXG52YXIgX2V4dGVuZHMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9leHRlbmRzXCIpKTtcblxudmFyIF9wcm9wVHlwZXMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJwcm9wLXR5cGVzXCIpKTtcblxudmFyIF9yZWFjdCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcInJlYWN0XCIpKTtcblxudmFyIF9yZWFjaFJvdXRlciA9IHJlcXVpcmUoXCJAZ2F0c2J5anMvcmVhY2gtcm91dGVyXCIpO1xuXG52YXIgX3V0aWxzID0gcmVxdWlyZShcIkBnYXRzYnlqcy9yZWFjaC1yb3V0ZXIvbGliL3V0aWxzXCIpO1xuXG52YXIgX3BhcnNlUGF0aCA9IHJlcXVpcmUoXCIuL3BhcnNlLXBhdGhcIik7XG5cbmV4cG9ydHMucGFyc2VQYXRoID0gX3BhcnNlUGF0aC5wYXJzZVBhdGg7XG52YXIgX2V4Y2x1ZGVkID0gW1widG9cIiwgXCJnZXRQcm9wc1wiLCBcIm9uQ2xpY2tcIiwgXCJvbk1vdXNlRW50ZXJcIiwgXCJhY3RpdmVDbGFzc05hbWVcIiwgXCJhY3RpdmVTdHlsZVwiLCBcImlubmVyUmVmXCIsIFwicGFydGlhbGx5QWN0aXZlXCIsIFwic3RhdGVcIiwgXCJyZXBsYWNlXCIsIFwiX2xvY2F0aW9uXCJdO1xuXG52YXIgaXNBYnNvbHV0ZVBhdGggPSBmdW5jdGlvbiBpc0Fic29sdXRlUGF0aChwYXRoKSB7XG4gIHJldHVybiBwYXRoID09PSBudWxsIHx8IHBhdGggPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBhdGguc3RhcnRzV2l0aChcIi9cIik7XG59O1xuXG5mdW5jdGlvbiB3aXRoUHJlZml4KHBhdGgsIHByZWZpeCkge1xuICB2YXIgX3JlZiwgX3ByZWZpeDtcblxuICBpZiAocHJlZml4ID09PSB2b2lkIDApIHtcbiAgICBwcmVmaXggPSBnZXRHbG9iYWxCYXNlUHJlZml4KCk7XG4gIH1cblxuICBpZiAoIWlzTG9jYWxMaW5rKHBhdGgpKSB7XG4gICAgcmV0dXJuIHBhdGg7XG4gIH1cblxuICBpZiAocGF0aC5zdGFydHNXaXRoKFwiLi9cIikgfHwgcGF0aC5zdGFydHNXaXRoKFwiLi4vXCIpKSB7XG4gICAgcmV0dXJuIHBhdGg7XG4gIH1cblxuICB2YXIgYmFzZSA9IChfcmVmID0gKF9wcmVmaXggPSBwcmVmaXgpICE9PSBudWxsICYmIF9wcmVmaXggIT09IHZvaWQgMCA/IF9wcmVmaXggOiBnZXRHbG9iYWxQYXRoUHJlZml4KCkpICE9PSBudWxsICYmIF9yZWYgIT09IHZvaWQgMCA/IF9yZWYgOiBcIi9cIjtcbiAgcmV0dXJuIFwiXCIgKyAoYmFzZSAhPT0gbnVsbCAmJiBiYXNlICE9PSB2b2lkIDAgJiYgYmFzZS5lbmRzV2l0aChcIi9cIikgPyBiYXNlLnNsaWNlKDAsIC0xKSA6IGJhc2UpICsgKHBhdGguc3RhcnRzV2l0aChcIi9cIikgPyBwYXRoIDogXCIvXCIgKyBwYXRoKTtcbn0gLy8gVGhlc2UgZ2xvYmFsIHZhbHVlcyBhcmUgd3JhcHBlZCBpbiB0eXBlb2YgY2xhdXNlcyB0byBlbnN1cmUgdGhlIHZhbHVlcyBleGlzdC5cbi8vIFRoaXMgaXMgZXNwZWNpYWxseSBwcm9ibGVtYXRpYyBpbiB1bml0IHRlc3Rpbmcgb2YgdGhpcyBjb21wb25lbnQuXG5cblxudmFyIGdldEdsb2JhbFBhdGhQcmVmaXggPSBmdW5jdGlvbiBnZXRHbG9iYWxQYXRoUHJlZml4KCkge1xuICByZXR1cm4gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gdHlwZW9mIF9fUEFUSF9QUkVGSVhfXyAhPT0gXCJ1bmRlZmluZWRcIiA/IF9fUEFUSF9QUkVGSVhfXyA6IHVuZGVmaW5lZCA6IF9fUEFUSF9QUkVGSVhfXztcbn07XG5cbnZhciBnZXRHbG9iYWxCYXNlUHJlZml4ID0gZnVuY3Rpb24gZ2V0R2xvYmFsQmFzZVByZWZpeCgpIHtcbiAgcmV0dXJuIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHR5cGVvZiBfX0JBU0VfUEFUSF9fICE9PSBcInVuZGVmaW5lZFwiID8gX19CQVNFX1BBVEhfXyA6IHVuZGVmaW5lZCA6IF9fQkFTRV9QQVRIX187XG59O1xuXG52YXIgaXNMb2NhbExpbmsgPSBmdW5jdGlvbiBpc0xvY2FsTGluayhwYXRoKSB7XG4gIHJldHVybiBwYXRoICYmICFwYXRoLnN0YXJ0c1dpdGgoXCJodHRwOi8vXCIpICYmICFwYXRoLnN0YXJ0c1dpdGgoXCJodHRwczovL1wiKSAmJiAhcGF0aC5zdGFydHNXaXRoKFwiLy9cIik7XG59O1xuXG5mdW5jdGlvbiB3aXRoQXNzZXRQcmVmaXgocGF0aCkge1xuICByZXR1cm4gd2l0aFByZWZpeChwYXRoLCBnZXRHbG9iYWxQYXRoUHJlZml4KCkpO1xufVxuXG5mdW5jdGlvbiBhYnNvbHV0aWZ5KHBhdGgsIGN1cnJlbnQpIHtcbiAgLy8gSWYgaXQncyBhbHJlYWR5IGFic29sdXRlLCByZXR1cm4gYXMtaXNcbiAgaWYgKGlzQWJzb2x1dGVQYXRoKHBhdGgpKSB7XG4gICAgcmV0dXJuIHBhdGg7XG4gIH1cblxuICByZXR1cm4gKDAsIF91dGlscy5yZXNvbHZlKShwYXRoLCBjdXJyZW50KTtcbn1cblxudmFyIHJld3JpdGVMaW5rUGF0aCA9IGZ1bmN0aW9uIHJld3JpdGVMaW5rUGF0aChwYXRoLCByZWxhdGl2ZVRvKSB7XG4gIGlmICh0eXBlb2YgcGF0aCA9PT0gXCJudW1iZXJcIikge1xuICAgIHJldHVybiBwYXRoO1xuICB9XG5cbiAgaWYgKCFpc0xvY2FsTGluayhwYXRoKSkge1xuICAgIHJldHVybiBwYXRoO1xuICB9XG5cbiAgcmV0dXJuIGlzQWJzb2x1dGVQYXRoKHBhdGgpID8gd2l0aFByZWZpeChwYXRoKSA6IGFic29sdXRpZnkocGF0aCwgcmVsYXRpdmVUbyk7XG59O1xuXG52YXIgTmF2TGlua1Byb3BUeXBlcyA9IHtcbiAgYWN0aXZlQ2xhc3NOYW1lOiBfcHJvcFR5cGVzLmRlZmF1bHQuc3RyaW5nLFxuICBhY3RpdmVTdHlsZTogX3Byb3BUeXBlcy5kZWZhdWx0Lm9iamVjdCxcbiAgcGFydGlhbGx5QWN0aXZlOiBfcHJvcFR5cGVzLmRlZmF1bHQuYm9vbFxufTsgLy8gU2V0IHVwIEludGVyc2VjdGlvbk9ic2VydmVyXG5cbnZhciBjcmVhdGVJbnRlcnNlY3Rpb25PYnNlcnZlciA9IGZ1bmN0aW9uIGNyZWF0ZUludGVyc2VjdGlvbk9ic2VydmVyKGVsLCBjYikge1xuICB2YXIgaW8gPSBuZXcgd2luZG93LkludGVyc2VjdGlvbk9ic2VydmVyKGZ1bmN0aW9uIChlbnRyaWVzKSB7XG4gICAgZW50cmllcy5mb3JFYWNoKGZ1bmN0aW9uIChlbnRyeSkge1xuICAgICAgaWYgKGVsID09PSBlbnRyeS50YXJnZXQpIHtcbiAgICAgICAgLy8gQ2hlY2sgaWYgZWxlbWVudCBpcyB3aXRoaW4gdmlld3BvcnQsIHJlbW92ZSBsaXN0ZW5lciwgZGVzdHJveSBvYnNlcnZlciwgYW5kIHJ1biBsaW5rIGNhbGxiYWNrLlxuICAgICAgICAvLyBNU0VkZ2UgZG9lc24ndCBjdXJyZW50bHkgc3VwcG9ydCBpc0ludGVyc2VjdGluZywgc28gYWxzbyB0ZXN0IGZvciAgYW4gaW50ZXJzZWN0aW9uUmF0aW8gPiAwXG4gICAgICAgIGlmIChlbnRyeS5pc0ludGVyc2VjdGluZyB8fCBlbnRyeS5pbnRlcnNlY3Rpb25SYXRpbyA+IDApIHtcbiAgICAgICAgICBpby51bm9ic2VydmUoZWwpO1xuICAgICAgICAgIGlvLmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgICBjYigpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH0pOyAvLyBBZGQgZWxlbWVudCB0byB0aGUgb2JzZXJ2ZXJcblxuICBpby5vYnNlcnZlKGVsKTtcbiAgcmV0dXJuIHtcbiAgICBpbnN0YW5jZTogaW8sXG4gICAgZWw6IGVsXG4gIH07XG59O1xuXG5mdW5jdGlvbiBHYXRzYnlMaW5rTG9jYXRpb25XcmFwcGVyKHByb3BzKSB7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX3JlYWN0LmRlZmF1bHQuY3JlYXRlRWxlbWVudChfcmVhY2hSb3V0ZXIuTG9jYXRpb24sIG51bGwsIGZ1bmN0aW9uIChfcmVmMikge1xuICAgIHZhciBsb2NhdGlvbiA9IF9yZWYyLmxvY2F0aW9uO1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovX3JlYWN0LmRlZmF1bHQuY3JlYXRlRWxlbWVudChHYXRzYnlMaW5rLCAoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHt9LCBwcm9wcywge1xuICAgICAgX2xvY2F0aW9uOiBsb2NhdGlvblxuICAgIH0pKTtcbiAgfSk7XG59XG5cbnZhciBHYXRzYnlMaW5rID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gICgwLCBfaW5oZXJpdHNMb29zZTIuZGVmYXVsdCkoR2F0c2J5TGluaywgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gR2F0c2J5TGluayhwcm9wcykge1xuICAgIHZhciBfdGhpcztcblxuICAgIF90aGlzID0gX1JlYWN0JENvbXBvbmVudC5jYWxsKHRoaXMsIHByb3BzKSB8fCB0aGlzOyAvLyBEZWZhdWx0IHRvIG5vIHN1cHBvcnQgZm9yIEludGVyc2VjdGlvbk9ic2VydmVyXG5cbiAgICBfdGhpcy5kZWZhdWx0R2V0UHJvcHMgPSBmdW5jdGlvbiAoX3JlZjMpIHtcbiAgICAgIHZhciBpc1BhcnRpYWxseUN1cnJlbnQgPSBfcmVmMy5pc1BhcnRpYWxseUN1cnJlbnQsXG4gICAgICAgICAgaXNDdXJyZW50ID0gX3JlZjMuaXNDdXJyZW50O1xuXG4gICAgICBpZiAoX3RoaXMucHJvcHMucGFydGlhbGx5QWN0aXZlID8gaXNQYXJ0aWFsbHlDdXJyZW50IDogaXNDdXJyZW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY2xhc3NOYW1lOiBbX3RoaXMucHJvcHMuY2xhc3NOYW1lLCBfdGhpcy5wcm9wcy5hY3RpdmVDbGFzc05hbWVdLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKSxcbiAgICAgICAgICBzdHlsZTogKDAsIF9leHRlbmRzMi5kZWZhdWx0KSh7fSwgX3RoaXMucHJvcHMuc3R5bGUsIF90aGlzLnByb3BzLmFjdGl2ZVN0eWxlKVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuXG4gICAgdmFyIElPU3VwcG9ydGVkID0gZmFsc2U7XG5cbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB3aW5kb3cuSW50ZXJzZWN0aW9uT2JzZXJ2ZXIpIHtcbiAgICAgIElPU3VwcG9ydGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIElPU3VwcG9ydGVkOiBJT1N1cHBvcnRlZFxuICAgIH07XG4gICAgX3RoaXMuaGFuZGxlUmVmID0gX3RoaXMuaGFuZGxlUmVmLmJpbmQoKDAsIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQyLmRlZmF1bHQpKF90aGlzKSk7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IEdhdHNieUxpbmsucHJvdG90eXBlO1xuXG4gIF9wcm90by5fcHJlZmV0Y2ggPSBmdW5jdGlvbiBfcHJlZmV0Y2goKSB7XG4gICAgdmFyIGN1cnJlbnRQYXRoID0gd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lOyAvLyByZWFjaCByb3V0ZXIgc2hvdWxkIGhhdmUgdGhlIGNvcnJlY3Qgc3RhdGVcblxuICAgIGlmICh0aGlzLnByb3BzLl9sb2NhdGlvbiAmJiB0aGlzLnByb3BzLl9sb2NhdGlvbi5wYXRobmFtZSkge1xuICAgICAgY3VycmVudFBhdGggPSB0aGlzLnByb3BzLl9sb2NhdGlvbi5wYXRobmFtZTtcbiAgICB9XG5cbiAgICB2YXIgcmV3cml0dGVuUGF0aCA9IHJld3JpdGVMaW5rUGF0aCh0aGlzLnByb3BzLnRvLCBjdXJyZW50UGF0aCk7XG4gICAgdmFyIG5ld1BhdGhOYW1lID0gKDAsIF9wYXJzZVBhdGgucGFyc2VQYXRoKShyZXdyaXR0ZW5QYXRoKS5wYXRobmFtZTsgLy8gUHJlZmVjaCBpcyB1c2VkIHRvIHNwZWVkIHVwIG5leHQgbmF2aWdhdGlvbnMuIFdoZW4geW91IHVzZSBpdCBvbiB0aGUgY3VycmVudCBuYXZpZ2F0aW9uLFxuICAgIC8vIHRoZXJlIGNvdWxkIGJlIGEgcmFjZS1jb25kaXRpb24gd2hlcmUgQ2hyb21lIHVzZXMgdGhlIHN0YWxlIGRhdGEgaW5zdGVhZCBvZiB3YWl0aW5nIGZvciB0aGUgbmV0d29yayB0byBjb21wbGV0ZVxuXG4gICAgaWYgKGN1cnJlbnRQYXRoICE9PSBuZXdQYXRoTmFtZSkge1xuICAgICAgX19fbG9hZGVyLmVucXVldWUobmV3UGF0aE5hbWUpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uY29tcG9uZW50RGlkVXBkYXRlID0gZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKSB7XG4gICAgLy8gUHJlc2VydmUgbm9uIElPIGZ1bmN0aW9uYWxpdHkgaWYgbm8gc3VwcG9ydFxuICAgIGlmICh0aGlzLnByb3BzLnRvICE9PSBwcmV2UHJvcHMudG8gJiYgIXRoaXMuc3RhdGUuSU9TdXBwb3J0ZWQpIHtcbiAgICAgIHRoaXMuX3ByZWZldGNoKCk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5jb21wb25lbnREaWRNb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIC8vIFByZXNlcnZlIG5vbiBJTyBmdW5jdGlvbmFsaXR5IGlmIG5vIHN1cHBvcnRcbiAgICBpZiAoIXRoaXMuc3RhdGUuSU9TdXBwb3J0ZWQpIHtcbiAgICAgIHRoaXMuX3ByZWZldGNoKCk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5jb21wb25lbnRXaWxsVW5tb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIGlmICghdGhpcy5pbykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBfdGhpcyRpbyA9IHRoaXMuaW8sXG4gICAgICAgIGluc3RhbmNlID0gX3RoaXMkaW8uaW5zdGFuY2UsXG4gICAgICAgIGVsID0gX3RoaXMkaW8uZWw7XG4gICAgaW5zdGFuY2UudW5vYnNlcnZlKGVsKTtcbiAgICBpbnN0YW5jZS5kaXNjb25uZWN0KCk7XG4gIH07XG5cbiAgX3Byb3RvLmhhbmRsZVJlZiA9IGZ1bmN0aW9uIGhhbmRsZVJlZihyZWYpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIGlmICh0aGlzLnByb3BzLmlubmVyUmVmICYmIHRoaXMucHJvcHMuaW5uZXJSZWYuaGFzT3duUHJvcGVydHkoXCJjdXJyZW50XCIpKSB7XG4gICAgICB0aGlzLnByb3BzLmlubmVyUmVmLmN1cnJlbnQgPSByZWY7XG4gICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLmlubmVyUmVmKSB7XG4gICAgICB0aGlzLnByb3BzLmlubmVyUmVmKHJlZik7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc3RhdGUuSU9TdXBwb3J0ZWQgJiYgcmVmKSB7XG4gICAgICAvLyBJZiBJTyBzdXBwb3J0ZWQgYW5kIGVsZW1lbnQgcmVmZXJlbmNlIGZvdW5kLCBzZXR1cCBPYnNlcnZlciBmdW5jdGlvbmFsaXR5XG4gICAgICB0aGlzLmlvID0gY3JlYXRlSW50ZXJzZWN0aW9uT2JzZXJ2ZXIocmVmLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzMi5fcHJlZmV0Y2goKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgdG8gPSBfdGhpcyRwcm9wcy50byxcbiAgICAgICAgX3RoaXMkcHJvcHMkZ2V0UHJvcHMgPSBfdGhpcyRwcm9wcy5nZXRQcm9wcyxcbiAgICAgICAgZ2V0UHJvcHMgPSBfdGhpcyRwcm9wcyRnZXRQcm9wcyA9PT0gdm9pZCAwID8gdGhpcy5kZWZhdWx0R2V0UHJvcHMgOiBfdGhpcyRwcm9wcyRnZXRQcm9wcyxcbiAgICAgICAgX29uQ2xpY2sgPSBfdGhpcyRwcm9wcy5vbkNsaWNrLFxuICAgICAgICBfb25Nb3VzZUVudGVyID0gX3RoaXMkcHJvcHMub25Nb3VzZUVudGVyLFxuICAgICAgICAkYWN0aXZlQ2xhc3NOYW1lID0gX3RoaXMkcHJvcHMuYWN0aXZlQ2xhc3NOYW1lLFxuICAgICAgICAkYWN0aXZlU3R5bGUgPSBfdGhpcyRwcm9wcy5hY3RpdmVTdHlsZSxcbiAgICAgICAgJGlubmVyUmVmID0gX3RoaXMkcHJvcHMuaW5uZXJSZWYsXG4gICAgICAgIHBhcnRpYWxseUFjdGl2ZSA9IF90aGlzJHByb3BzLnBhcnRpYWxseUFjdGl2ZSxcbiAgICAgICAgc3RhdGUgPSBfdGhpcyRwcm9wcy5zdGF0ZSxcbiAgICAgICAgcmVwbGFjZSA9IF90aGlzJHByb3BzLnJlcGxhY2UsXG4gICAgICAgIF9sb2NhdGlvbiA9IF90aGlzJHByb3BzLl9sb2NhdGlvbixcbiAgICAgICAgcmVzdCA9ICgwLCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZTIuZGVmYXVsdCkoX3RoaXMkcHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmICFpc0xvY2FsTGluayh0bykpIHtcbiAgICAgIGNvbnNvbGUud2FybihcIkV4dGVybmFsIGxpbmsgXCIgKyB0byArIFwiIHdhcyBkZXRlY3RlZCBpbiBhIExpbmsgY29tcG9uZW50LiBVc2UgdGhlIExpbmsgY29tcG9uZW50IG9ubHkgZm9yIGludGVybmFsIGxpbmtzLiBTZWU6IGh0dHBzOi8vZ2F0c2J5LmRldi9pbnRlcm5hbC1saW5rc1wiKTtcbiAgICB9XG5cbiAgICB2YXIgcHJlZml4ZWRUbyA9IHJld3JpdGVMaW5rUGF0aCh0bywgX2xvY2F0aW9uLnBhdGhuYW1lKTtcblxuICAgIGlmICghaXNMb2NhbExpbmsocHJlZml4ZWRUbykpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovX3JlYWN0LmRlZmF1bHQuY3JlYXRlRWxlbWVudChcImFcIiwgKDAsIF9leHRlbmRzMi5kZWZhdWx0KSh7XG4gICAgICAgIGhyZWY6IHByZWZpeGVkVG9cbiAgICAgIH0sIHJlc3QpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gLyojX19QVVJFX18qL19yZWFjdC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoX3JlYWNoUm91dGVyLkxpbmssICgwLCBfZXh0ZW5kczIuZGVmYXVsdCkoe1xuICAgICAgdG86IHByZWZpeGVkVG8sXG4gICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICBnZXRQcm9wczogZ2V0UHJvcHMsXG4gICAgICBpbm5lclJlZjogdGhpcy5oYW5kbGVSZWYsXG4gICAgICBvbk1vdXNlRW50ZXI6IGZ1bmN0aW9uIG9uTW91c2VFbnRlcihlKSB7XG4gICAgICAgIGlmIChfb25Nb3VzZUVudGVyKSB7XG4gICAgICAgICAgX29uTW91c2VFbnRlcihlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIF9fX2xvYWRlci5ob3ZlcmluZygoMCwgX3BhcnNlUGF0aC5wYXJzZVBhdGgpKHByZWZpeGVkVG8pLnBhdGhuYW1lKTtcbiAgICAgIH0sXG4gICAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKGUpIHtcbiAgICAgICAgaWYgKF9vbkNsaWNrKSB7XG4gICAgICAgICAgX29uQ2xpY2soZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZS5idXR0b24gPT09IDAgJiYgLy8gaWdub3JlIHJpZ2h0IGNsaWNrc1xuICAgICAgICAhX3RoaXMzLnByb3BzLnRhcmdldCAmJiAvLyBsZXQgYnJvd3NlciBoYW5kbGUgXCJ0YXJnZXQ9X2JsYW5rXCJcbiAgICAgICAgIWUuZGVmYXVsdFByZXZlbnRlZCAmJiAvLyBvbkNsaWNrIHByZXZlbnRlZCBkZWZhdWx0XG4gICAgICAgICFlLm1ldGFLZXkgJiYgLy8gaWdub3JlIGNsaWNrcyB3aXRoIG1vZGlmaWVyIGtleXMuLi5cbiAgICAgICAgIWUuYWx0S2V5ICYmICFlLmN0cmxLZXkgJiYgIWUuc2hpZnRLZXkpIHtcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgdmFyIHNob3VsZFJlcGxhY2UgPSByZXBsYWNlO1xuXG4gICAgICAgICAgdmFyIGlzQ3VycmVudCA9IGVuY29kZVVSSShwcmVmaXhlZFRvKSA9PT0gX2xvY2F0aW9uLnBhdGhuYW1lO1xuXG4gICAgICAgICAgaWYgKHR5cGVvZiByZXBsYWNlICE9PSBcImJvb2xlYW5cIiAmJiBpc0N1cnJlbnQpIHtcbiAgICAgICAgICAgIHNob3VsZFJlcGxhY2UgPSB0cnVlO1xuICAgICAgICAgIH0gLy8gTWFrZSBzdXJlIHRoZSBuZWNlc3Nhcnkgc2NyaXB0cyBhbmQgZGF0YSBhcmVcbiAgICAgICAgICAvLyBsb2FkZWQgYmVmb3JlIGNvbnRpbnVpbmcuXG5cblxuICAgICAgICAgIHdpbmRvdy5fX19uYXZpZ2F0ZShwcmVmaXhlZFRvLCB7XG4gICAgICAgICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICAgICAgICByZXBsYWNlOiBzaG91bGRSZXBsYWNlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9LCByZXN0KSk7XG4gIH07XG5cbiAgcmV0dXJuIEdhdHNieUxpbms7XG59KF9yZWFjdC5kZWZhdWx0LkNvbXBvbmVudCk7XG5cbkdhdHNieUxpbmsucHJvcFR5cGVzID0gKDAsIF9leHRlbmRzMi5kZWZhdWx0KSh7fSwgTmF2TGlua1Byb3BUeXBlcywge1xuICBvbkNsaWNrOiBfcHJvcFR5cGVzLmRlZmF1bHQuZnVuYyxcbiAgdG86IF9wcm9wVHlwZXMuZGVmYXVsdC5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgcmVwbGFjZTogX3Byb3BUeXBlcy5kZWZhdWx0LmJvb2wsXG4gIHN0YXRlOiBfcHJvcFR5cGVzLmRlZmF1bHQub2JqZWN0XG59KTtcblxudmFyIF9kZWZhdWx0ID0gLyojX19QVVJFX18qL19yZWFjdC5kZWZhdWx0LmZvcndhcmRSZWYoZnVuY3Rpb24gKHByb3BzLCByZWYpIHtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fcmVhY3QuZGVmYXVsdC5jcmVhdGVFbGVtZW50KEdhdHNieUxpbmtMb2NhdGlvbldyYXBwZXIsICgwLCBfZXh0ZW5kczIuZGVmYXVsdCkoe1xuICAgIGlubmVyUmVmOiByZWZcbiAgfSwgcHJvcHMpKTtcbn0pO1xuXG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDtcblxudmFyIG5hdmlnYXRlID0gZnVuY3Rpb24gbmF2aWdhdGUodG8sIG9wdGlvbnMpIHtcbiAgd2luZG93Ll9fX25hdmlnYXRlKHJld3JpdGVMaW5rUGF0aCh0bywgd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lKSwgb3B0aW9ucyk7XG59O1xuXG5leHBvcnRzLm5hdmlnYXRlID0gbmF2aWdhdGU7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8037\n')},1752:function(__unused_webpack_module,exports){"use strict";eval('\n\nexports.__esModule = true;\nexports.parsePath = parsePath;\n\nfunction parsePath(path) {\n var pathname = path || "/";\n var search = "";\n var hash = "";\n var hashIndex = pathname.indexOf("#");\n\n if (hashIndex !== -1) {\n hash = pathname.substr(hashIndex);\n pathname = pathname.substr(0, hashIndex);\n }\n\n var searchIndex = pathname.indexOf("?");\n\n if (searchIndex !== -1) {\n search = pathname.substr(searchIndex);\n pathname = pathname.substr(0, searchIndex);\n }\n\n return {\n pathname: pathname,\n search: search === "?" ? "" : search,\n hash: hash === "#" ? "" : hash\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9nYXRzYnktbGluay9wYXJzZS1wYXRoLmpzPzcyZWUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsa0JBQWtCO0FBQ2xCLGlCQUFpQjs7QUFFakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMTc1Mi5qcyIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5wYXJzZVBhdGggPSBwYXJzZVBhdGg7XG5cbmZ1bmN0aW9uIHBhcnNlUGF0aChwYXRoKSB7XG4gIHZhciBwYXRobmFtZSA9IHBhdGggfHwgXCIvXCI7XG4gIHZhciBzZWFyY2ggPSBcIlwiO1xuICB2YXIgaGFzaCA9IFwiXCI7XG4gIHZhciBoYXNoSW5kZXggPSBwYXRobmFtZS5pbmRleE9mKFwiI1wiKTtcblxuICBpZiAoaGFzaEluZGV4ICE9PSAtMSkge1xuICAgIGhhc2ggPSBwYXRobmFtZS5zdWJzdHIoaGFzaEluZGV4KTtcbiAgICBwYXRobmFtZSA9IHBhdGhuYW1lLnN1YnN0cigwLCBoYXNoSW5kZXgpO1xuICB9XG5cbiAgdmFyIHNlYXJjaEluZGV4ID0gcGF0aG5hbWUuaW5kZXhPZihcIj9cIik7XG5cbiAgaWYgKHNlYXJjaEluZGV4ICE9PSAtMSkge1xuICAgIHNlYXJjaCA9IHBhdGhuYW1lLnN1YnN0cihzZWFyY2hJbmRleCk7XG4gICAgcGF0aG5hbWUgPSBwYXRobmFtZS5zdWJzdHIoMCwgc2VhcmNoSW5kZXgpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBwYXRobmFtZTogcGF0aG5hbWUsXG4gICAgc2VhcmNoOiBzZWFyY2ggPT09IFwiP1wiID8gXCJcIiA6IHNlYXJjaCxcbiAgICBoYXNoOiBoYXNoID09PSBcIiNcIiA/IFwiXCIgOiBoYXNoXG4gIH07XG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1752\n')},9679:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("var __webpack_unused_export__;\n\n\n__webpack_unused_export__ = true;\nexports.p2 = exports.$C = void 0;\n\nvar _scrollHandler = __webpack_require__(1432);\n\nexports.$C = _scrollHandler.ScrollHandler;\n\nvar _useScrollRestoration = __webpack_require__(4855);\n\nexports.p2 = _useScrollRestoration.useScrollRestoration;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9nYXRzYnktcmVhY3Qtcm91dGVyLXNjcm9sbC9pbmRleC5qcz9lZTEyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBYTs7QUFFYix5QkFBa0I7QUFDbEIsVUFBNEIsR0FBRyxVQUFxQjs7QUFFcEQscUJBQXFCLG1CQUFPLENBQUMsSUFBa0I7O0FBRS9DLFVBQXFCOztBQUVyQiw0QkFBNEIsbUJBQU8sQ0FBQyxJQUEwQjs7QUFFOUQsVUFBNEIiLCJmaWxlIjoiOTY3OS5qcyIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy51c2VTY3JvbGxSZXN0b3JhdGlvbiA9IGV4cG9ydHMuU2Nyb2xsQ29udGV4dCA9IHZvaWQgMDtcblxudmFyIF9zY3JvbGxIYW5kbGVyID0gcmVxdWlyZShcIi4vc2Nyb2xsLWhhbmRsZXJcIik7XG5cbmV4cG9ydHMuU2Nyb2xsQ29udGV4dCA9IF9zY3JvbGxIYW5kbGVyLlNjcm9sbEhhbmRsZXI7XG5cbnZhciBfdXNlU2Nyb2xsUmVzdG9yYXRpb24gPSByZXF1aXJlKFwiLi91c2Utc2Nyb2xsLXJlc3RvcmF0aW9uXCIpO1xuXG5leHBvcnRzLnVzZVNjcm9sbFJlc3RvcmF0aW9uID0gX3VzZVNjcm9sbFJlc3RvcmF0aW9uLnVzZVNjcm9sbFJlc3RvcmF0aW9uOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///9679\n")},1432:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval('\n\nvar _interopRequireDefault = __webpack_require__(5318);\n\nexports.__esModule = true;\nexports.ScrollHandler = exports.ScrollContext = void 0;\n\nvar _assertThisInitialized2 = _interopRequireDefault(__webpack_require__(1506));\n\nvar _inheritsLoose2 = _interopRequireDefault(__webpack_require__(5354));\n\nvar React = _interopRequireWildcard(__webpack_require__(7294));\n\nvar _propTypes = _interopRequireDefault(__webpack_require__(5697));\n\nvar _sessionStorage = __webpack_require__(1142);\n\nfunction _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }\n\nfunction _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nvar ScrollContext = /*#__PURE__*/React.createContext(new _sessionStorage.SessionStorage());\nexports.ScrollContext = ScrollContext;\nScrollContext.displayName = "GatsbyScrollContext";\n\nvar ScrollHandler = /*#__PURE__*/function (_React$Component) {\n (0, _inheritsLoose2.default)(ScrollHandler, _React$Component);\n\n function ScrollHandler() {\n var _this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n _this._stateStorage = new _sessionStorage.SessionStorage();\n _this._isTicking = false;\n _this._latestKnownScrollY = 0;\n\n _this.scrollListener = function () {\n _this._latestKnownScrollY = window.scrollY;\n\n if (!_this._isTicking) {\n _this._isTicking = true;\n requestAnimationFrame(_this._saveScroll.bind((0, _assertThisInitialized2.default)(_this)));\n }\n };\n\n _this.windowScroll = function (position, prevProps) {\n if (_this.shouldUpdateScroll(prevProps, _this.props)) {\n window.scrollTo(0, position);\n }\n };\n\n _this.scrollToHash = function (hash, prevProps) {\n var node = document.getElementById(hash.substring(1));\n\n if (node && _this.shouldUpdateScroll(prevProps, _this.props)) {\n node.scrollIntoView();\n }\n };\n\n _this.shouldUpdateScroll = function (prevRouterProps, routerProps) {\n var shouldUpdateScroll = _this.props.shouldUpdateScroll;\n\n if (!shouldUpdateScroll) {\n return true;\n } // Hack to allow accessing this._stateStorage.\n\n\n return shouldUpdateScroll.call((0, _assertThisInitialized2.default)(_this), prevRouterProps, routerProps);\n };\n\n return _this;\n }\n\n var _proto = ScrollHandler.prototype;\n\n _proto._saveScroll = function _saveScroll() {\n var key = this.props.location.key || null;\n\n if (key) {\n this._stateStorage.save(this.props.location, key, this._latestKnownScrollY);\n }\n\n this._isTicking = false;\n };\n\n _proto.componentDidMount = function componentDidMount() {\n window.addEventListener("scroll", this.scrollListener);\n var scrollPosition;\n var _this$props$location = this.props.location,\n key = _this$props$location.key,\n hash = _this$props$location.hash;\n\n if (key) {\n scrollPosition = this._stateStorage.read(this.props.location, key);\n }\n\n if (scrollPosition) {\n this.windowScroll(scrollPosition, undefined);\n } else if (hash) {\n this.scrollToHash(decodeURI(hash), undefined);\n }\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n window.removeEventListener("scroll", this.scrollListener);\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n var _this$props$location2 = this.props.location,\n hash = _this$props$location2.hash,\n key = _this$props$location2.key;\n var scrollPosition;\n\n if (key) {\n scrollPosition = this._stateStorage.read(this.props.location, key);\n }\n /** There are two pieces of state: the browser url and\n * history state which keeps track of scroll position\n * Native behaviour prescribes that we ought to restore scroll position\n * when a user navigates back in their browser (this is the `POP` action)\n * Currently, reach router has a bug that prevents this at https://github.com/reach/router/issues/228\n * So we _always_ stick to the url as a source of truth — if the url\n * contains a hash, we scroll to it\n */\n\n\n if (hash) {\n this.scrollToHash(decodeURI(hash), prevProps);\n } else {\n this.windowScroll(scrollPosition, prevProps);\n }\n };\n\n _proto.render = function render() {\n return /*#__PURE__*/React.createElement(ScrollContext.Provider, {\n value: this._stateStorage\n }, this.props.children);\n };\n\n return ScrollHandler;\n}(React.Component);\n\nexports.ScrollHandler = ScrollHandler;\nScrollHandler.propTypes = {\n shouldUpdateScroll: _propTypes.default.func,\n children: _propTypes.default.element.isRequired,\n location: _propTypes.default.object.isRequired\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9nYXRzYnktcmVhY3Qtcm91dGVyLXNjcm9sbC9zY3JvbGwtaGFuZGxlci5qcz8xMjdjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhOztBQUViLDZCQUE2QixtQkFBTyxDQUFDLElBQThDOztBQUVuRixrQkFBa0I7QUFDbEIscUJBQXFCLEdBQUcscUJBQXFCOztBQUU3QyxxREFBcUQsbUJBQU8sQ0FBQyxJQUE4Qzs7QUFFM0csNkNBQTZDLG1CQUFPLENBQUMsSUFBc0M7O0FBRTNGLG9DQUFvQyxtQkFBTyxDQUFDLElBQU87O0FBRW5ELHdDQUF3QyxtQkFBTyxDQUFDLElBQVk7O0FBRTVELHNCQUFzQixtQkFBTyxDQUFDLElBQW1COztBQUVqRCxnREFBZ0QsZ0RBQWdELHVDQUF1QyxzQ0FBc0Msb0ZBQW9GLDJEQUEyRCxFQUFFLGVBQWU7O0FBRTdVLG9EQUFvRCw2Q0FBNkMsWUFBWSxFQUFFLDRFQUE0RSxTQUFTLGdCQUFnQixFQUFFLG1EQUFtRCwrQkFBK0IsdUJBQXVCLEVBQUUsaUJBQWlCLHNGQUFzRix1QkFBdUIsMkVBQTJFLHFGQUFxRixzQ0FBc0MsMENBQTBDLEVBQUUsT0FBTyx3QkFBd0IsRUFBRSxFQUFFLEVBQUUsc0JBQXNCLGFBQWEsd0JBQXdCLEVBQUUsZUFBZTs7QUFFbHlCO0FBQ0EscUJBQXFCO0FBQ3JCOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSx1RUFBdUUsYUFBYTtBQUNwRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTzs7O0FBR1A7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQSxDQUFDOztBQUVELHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjE0MzIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLlNjcm9sbEhhbmRsZXIgPSBleHBvcnRzLlNjcm9sbENvbnRleHQgPSB2b2lkIDA7XG5cbnZhciBfYXNzZXJ0VGhpc0luaXRpYWxpemVkMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXNzZXJ0VGhpc0luaXRpYWxpemVkXCIpKTtcblxudmFyIF9pbmhlcml0c0xvb3NlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHNMb29zZVwiKSk7XG5cbnZhciBSZWFjdCA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5cbnZhciBfcHJvcFR5cGVzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwicHJvcC10eXBlc1wiKSk7XG5cbnZhciBfc2Vzc2lvblN0b3JhZ2UgPSByZXF1aXJlKFwiLi9zZXNzaW9uLXN0b3JhZ2VcIik7XG5cbmZ1bmN0aW9uIF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShub2RlSW50ZXJvcCkgeyBpZiAodHlwZW9mIFdlYWtNYXAgIT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIG51bGw7IHZhciBjYWNoZUJhYmVsSW50ZXJvcCA9IG5ldyBXZWFrTWFwKCk7IHZhciBjYWNoZU5vZGVJbnRlcm9wID0gbmV3IFdlYWtNYXAoKTsgcmV0dXJuIChfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUgPSBmdW5jdGlvbiBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUobm9kZUludGVyb3ApIHsgcmV0dXJuIG5vZGVJbnRlcm9wID8gY2FjaGVOb2RlSW50ZXJvcCA6IGNhY2hlQmFiZWxJbnRlcm9wOyB9KShub2RlSW50ZXJvcCk7IH1cblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQob2JqLCBub2RlSW50ZXJvcCkgeyBpZiAoIW5vZGVJbnRlcm9wICYmIG9iaiAmJiBvYmouX19lc01vZHVsZSkgeyByZXR1cm4gb2JqOyB9IGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIG9iaiAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2Ygb2JqICE9PSBcImZ1bmN0aW9uXCIpIHsgcmV0dXJuIHsgZGVmYXVsdDogb2JqIH07IH0gdmFyIGNhY2hlID0gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKG5vZGVJbnRlcm9wKTsgaWYgKGNhY2hlICYmIGNhY2hlLmhhcyhvYmopKSB7IHJldHVybiBjYWNoZS5nZXQob2JqKTsgfSB2YXIgbmV3T2JqID0ge307IHZhciBoYXNQcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjsgZm9yICh2YXIga2V5IGluIG9iaikgeyBpZiAoa2V5ICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSB7IHZhciBkZXNjID0gaGFzUHJvcGVydHlEZXNjcmlwdG9yID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIGtleSkgOiBudWxsOyBpZiAoZGVzYyAmJiAoZGVzYy5nZXQgfHwgZGVzYy5zZXQpKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuZXdPYmosIGtleSwgZGVzYyk7IH0gZWxzZSB7IG5ld09ialtrZXldID0gb2JqW2tleV07IH0gfSB9IG5ld09iai5kZWZhdWx0ID0gb2JqOyBpZiAoY2FjaGUpIHsgY2FjaGUuc2V0KG9iaiwgbmV3T2JqKTsgfSByZXR1cm4gbmV3T2JqOyB9XG5cbnZhciBTY3JvbGxDb250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUNvbnRleHQobmV3IF9zZXNzaW9uU3RvcmFnZS5TZXNzaW9uU3RvcmFnZSgpKTtcbmV4cG9ydHMuU2Nyb2xsQ29udGV4dCA9IFNjcm9sbENvbnRleHQ7XG5TY3JvbGxDb250ZXh0LmRpc3BsYXlOYW1lID0gXCJHYXRzYnlTY3JvbGxDb250ZXh0XCI7XG5cbnZhciBTY3JvbGxIYW5kbGVyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gICgwLCBfaW5oZXJpdHNMb29zZTIuZGVmYXVsdCkoU2Nyb2xsSGFuZGxlciwgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gU2Nyb2xsSGFuZGxlcigpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfUmVhY3QkQ29tcG9uZW50LmNhbGwuYXBwbHkoX1JlYWN0JENvbXBvbmVudCwgW3RoaXNdLmNvbmNhdChhcmdzKSkgfHwgdGhpcztcbiAgICBfdGhpcy5fc3RhdGVTdG9yYWdlID0gbmV3IF9zZXNzaW9uU3RvcmFnZS5TZXNzaW9uU3RvcmFnZSgpO1xuICAgIF90aGlzLl9pc1RpY2tpbmcgPSBmYWxzZTtcbiAgICBfdGhpcy5fbGF0ZXN0S25vd25TY3JvbGxZID0gMDtcblxuICAgIF90aGlzLnNjcm9sbExpc3RlbmVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuX2xhdGVzdEtub3duU2Nyb2xsWSA9IHdpbmRvdy5zY3JvbGxZO1xuXG4gICAgICBpZiAoIV90aGlzLl9pc1RpY2tpbmcpIHtcbiAgICAgICAgX3RoaXMuX2lzVGlja2luZyA9IHRydWU7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShfdGhpcy5fc2F2ZVNjcm9sbC5iaW5kKCgwLCBfYXNzZXJ0VGhpc0luaXRpYWxpemVkMi5kZWZhdWx0KShfdGhpcykpKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3RoaXMud2luZG93U2Nyb2xsID0gZnVuY3Rpb24gKHBvc2l0aW9uLCBwcmV2UHJvcHMpIHtcbiAgICAgIGlmIChfdGhpcy5zaG91bGRVcGRhdGVTY3JvbGwocHJldlByb3BzLCBfdGhpcy5wcm9wcykpIHtcbiAgICAgICAgd2luZG93LnNjcm9sbFRvKDAsIHBvc2l0aW9uKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3RoaXMuc2Nyb2xsVG9IYXNoID0gZnVuY3Rpb24gKGhhc2gsIHByZXZQcm9wcykge1xuICAgICAgdmFyIG5vZGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChoYXNoLnN1YnN0cmluZygxKSk7XG5cbiAgICAgIGlmIChub2RlICYmIF90aGlzLnNob3VsZFVwZGF0ZVNjcm9sbChwcmV2UHJvcHMsIF90aGlzLnByb3BzKSkge1xuICAgICAgICBub2RlLnNjcm9sbEludG9WaWV3KCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF90aGlzLnNob3VsZFVwZGF0ZVNjcm9sbCA9IGZ1bmN0aW9uIChwcmV2Um91dGVyUHJvcHMsIHJvdXRlclByb3BzKSB7XG4gICAgICB2YXIgc2hvdWxkVXBkYXRlU2Nyb2xsID0gX3RoaXMucHJvcHMuc2hvdWxkVXBkYXRlU2Nyb2xsO1xuXG4gICAgICBpZiAoIXNob3VsZFVwZGF0ZVNjcm9sbCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gLy8gSGFjayB0byBhbGxvdyBhY2Nlc3NpbmcgdGhpcy5fc3RhdGVTdG9yYWdlLlxuXG5cbiAgICAgIHJldHVybiBzaG91bGRVcGRhdGVTY3JvbGwuY2FsbCgoMCwgX2Fzc2VydFRoaXNJbml0aWFsaXplZDIuZGVmYXVsdCkoX3RoaXMpLCBwcmV2Um91dGVyUHJvcHMsIHJvdXRlclByb3BzKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFNjcm9sbEhhbmRsZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5fc2F2ZVNjcm9sbCA9IGZ1bmN0aW9uIF9zYXZlU2Nyb2xsKCkge1xuICAgIHZhciBrZXkgPSB0aGlzLnByb3BzLmxvY2F0aW9uLmtleSB8fCBudWxsO1xuXG4gICAgaWYgKGtleSkge1xuICAgICAgdGhpcy5fc3RhdGVTdG9yYWdlLnNhdmUodGhpcy5wcm9wcy5sb2NhdGlvbiwga2V5LCB0aGlzLl9sYXRlc3RLbm93blNjcm9sbFkpO1xuICAgIH1cblxuICAgIHRoaXMuX2lzVGlja2luZyA9IGZhbHNlO1xuICB9O1xuXG4gIF9wcm90by5jb21wb25lbnREaWRNb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIHRoaXMuc2Nyb2xsTGlzdGVuZXIpO1xuICAgIHZhciBzY3JvbGxQb3NpdGlvbjtcbiAgICB2YXIgX3RoaXMkcHJvcHMkbG9jYXRpb24gPSB0aGlzLnByb3BzLmxvY2F0aW9uLFxuICAgICAgICBrZXkgPSBfdGhpcyRwcm9wcyRsb2NhdGlvbi5rZXksXG4gICAgICAgIGhhc2ggPSBfdGhpcyRwcm9wcyRsb2NhdGlvbi5oYXNoO1xuXG4gICAgaWYgKGtleSkge1xuICAgICAgc2Nyb2xsUG9zaXRpb24gPSB0aGlzLl9zdGF0ZVN0b3JhZ2UucmVhZCh0aGlzLnByb3BzLmxvY2F0aW9uLCBrZXkpO1xuICAgIH1cblxuICAgIGlmIChzY3JvbGxQb3NpdGlvbikge1xuICAgICAgdGhpcy53aW5kb3dTY3JvbGwoc2Nyb2xsUG9zaXRpb24sIHVuZGVmaW5lZCk7XG4gICAgfSBlbHNlIGlmIChoYXNoKSB7XG4gICAgICB0aGlzLnNjcm9sbFRvSGFzaChkZWNvZGVVUkkoaGFzaCksIHVuZGVmaW5lZCk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5jb21wb25lbnRXaWxsVW5tb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIHRoaXMuc2Nyb2xsTGlzdGVuZXIpO1xuICB9O1xuXG4gIF9wcm90by5jb21wb25lbnREaWRVcGRhdGUgPSBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzKSB7XG4gICAgdmFyIF90aGlzJHByb3BzJGxvY2F0aW9uMiA9IHRoaXMucHJvcHMubG9jYXRpb24sXG4gICAgICAgIGhhc2ggPSBfdGhpcyRwcm9wcyRsb2NhdGlvbjIuaGFzaCxcbiAgICAgICAga2V5ID0gX3RoaXMkcHJvcHMkbG9jYXRpb24yLmtleTtcbiAgICB2YXIgc2Nyb2xsUG9zaXRpb247XG5cbiAgICBpZiAoa2V5KSB7XG4gICAgICBzY3JvbGxQb3NpdGlvbiA9IHRoaXMuX3N0YXRlU3RvcmFnZS5yZWFkKHRoaXMucHJvcHMubG9jYXRpb24sIGtleSk7XG4gICAgfVxuICAgIC8qKiAgVGhlcmUgYXJlIHR3byBwaWVjZXMgb2Ygc3RhdGU6IHRoZSBicm93c2VyIHVybCBhbmRcbiAgICAgKiBoaXN0b3J5IHN0YXRlIHdoaWNoIGtlZXBzIHRyYWNrIG9mIHNjcm9sbCBwb3NpdGlvblxuICAgICAqIE5hdGl2ZSBiZWhhdmlvdXIgcHJlc2NyaWJlcyB0aGF0IHdlIG91Z2h0IHRvIHJlc3RvcmUgc2Nyb2xsIHBvc2l0aW9uXG4gICAgICogd2hlbiBhIHVzZXIgbmF2aWdhdGVzIGJhY2sgaW4gdGhlaXIgYnJvd3NlciAodGhpcyBpcyB0aGUgYFBPUGAgYWN0aW9uKVxuICAgICAqIEN1cnJlbnRseSwgcmVhY2ggcm91dGVyIGhhcyBhIGJ1ZyB0aGF0IHByZXZlbnRzIHRoaXMgYXQgaHR0cHM6Ly9naXRodWIuY29tL3JlYWNoL3JvdXRlci9pc3N1ZXMvMjI4XG4gICAgICogU28gd2UgX2Fsd2F5c18gc3RpY2sgdG8gdGhlIHVybCBhcyBhIHNvdXJjZSBvZiB0cnV0aCDigJQgaWYgdGhlIHVybFxuICAgICAqIGNvbnRhaW5zIGEgaGFzaCwgd2Ugc2Nyb2xsIHRvIGl0XG4gICAgICovXG5cblxuICAgIGlmIChoYXNoKSB7XG4gICAgICB0aGlzLnNjcm9sbFRvSGFzaChkZWNvZGVVUkkoaGFzaCksIHByZXZQcm9wcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMud2luZG93U2Nyb2xsKHNjcm9sbFBvc2l0aW9uLCBwcmV2UHJvcHMpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChTY3JvbGxDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICB2YWx1ZTogdGhpcy5fc3RhdGVTdG9yYWdlXG4gICAgfSwgdGhpcy5wcm9wcy5jaGlsZHJlbik7XG4gIH07XG5cbiAgcmV0dXJuIFNjcm9sbEhhbmRsZXI7XG59KFJlYWN0LkNvbXBvbmVudCk7XG5cbmV4cG9ydHMuU2Nyb2xsSGFuZGxlciA9IFNjcm9sbEhhbmRsZXI7XG5TY3JvbGxIYW5kbGVyLnByb3BUeXBlcyA9IHtcbiAgc2hvdWxkVXBkYXRlU2Nyb2xsOiBfcHJvcFR5cGVzLmRlZmF1bHQuZnVuYyxcbiAgY2hpbGRyZW46IF9wcm9wVHlwZXMuZGVmYXVsdC5lbGVtZW50LmlzUmVxdWlyZWQsXG4gIGxvY2F0aW9uOiBfcHJvcFR5cGVzLmRlZmF1bHQub2JqZWN0LmlzUmVxdWlyZWRcbn07Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1432\n')},1142:function(__unused_webpack_module,exports){"use strict";eval('\n\nexports.__esModule = true;\nexports.SessionStorage = void 0;\nvar STATE_KEY_PREFIX = "@@scroll|";\nvar GATSBY_ROUTER_SCROLL_STATE = "___GATSBY_REACT_ROUTER_SCROLL";\n\nvar SessionStorage = /*#__PURE__*/function () {\n function SessionStorage() {}\n\n var _proto = SessionStorage.prototype;\n\n _proto.read = function read(location, key) {\n var stateKey = this.getStateKey(location, key);\n\n try {\n var value = window.sessionStorage.getItem(stateKey);\n return value ? JSON.parse(value) : 0;\n } catch (e) {\n if (false) {}\n\n if (window && window[GATSBY_ROUTER_SCROLL_STATE] && window[GATSBY_ROUTER_SCROLL_STATE][stateKey]) {\n return window[GATSBY_ROUTER_SCROLL_STATE][stateKey];\n }\n\n return 0;\n }\n };\n\n _proto.save = function save(location, key, value) {\n var stateKey = this.getStateKey(location, key);\n var storedValue = JSON.stringify(value);\n\n try {\n window.sessionStorage.setItem(stateKey, storedValue);\n } catch (e) {\n if (window && window[GATSBY_ROUTER_SCROLL_STATE]) {\n window[GATSBY_ROUTER_SCROLL_STATE][stateKey] = JSON.parse(storedValue);\n } else {\n window[GATSBY_ROUTER_SCROLL_STATE] = {};\n window[GATSBY_ROUTER_SCROLL_STATE][stateKey] = JSON.parse(storedValue);\n }\n\n if (false) {}\n }\n };\n\n _proto.getStateKey = function getStateKey(location, key) {\n var stateKeyBase = "" + STATE_KEY_PREFIX + location.pathname;\n return key === null || typeof key === "undefined" ? stateKeyBase : stateKeyBase + "|" + key;\n };\n\n return SessionStorage;\n}();\n\nexports.SessionStorage = SessionStorage;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9nYXRzYnktcmVhY3Qtcm91dGVyLXNjcm9sbC9zZXNzaW9uLXN0b3JhZ2UuanM/ZmUxNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0I7QUFDbEIsc0JBQXNCO0FBQ3RCO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxVQUFVLEtBQXFDLEVBQUUsRUFFMUM7O0FBRVA7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQSxVQUFVLEtBQXFDLEVBQUUsRUFFMUM7QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRCxzQkFBc0IiLCJmaWxlIjoiMTE0Mi5qcyIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5TZXNzaW9uU3RvcmFnZSA9IHZvaWQgMDtcbnZhciBTVEFURV9LRVlfUFJFRklYID0gXCJAQHNjcm9sbHxcIjtcbnZhciBHQVRTQllfUk9VVEVSX1NDUk9MTF9TVEFURSA9IFwiX19fR0FUU0JZX1JFQUNUX1JPVVRFUl9TQ1JPTExcIjtcblxudmFyIFNlc3Npb25TdG9yYWdlID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gU2Vzc2lvblN0b3JhZ2UoKSB7fVxuXG4gIHZhciBfcHJvdG8gPSBTZXNzaW9uU3RvcmFnZS5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLnJlYWQgPSBmdW5jdGlvbiByZWFkKGxvY2F0aW9uLCBrZXkpIHtcbiAgICB2YXIgc3RhdGVLZXkgPSB0aGlzLmdldFN0YXRlS2V5KGxvY2F0aW9uLCBrZXkpO1xuXG4gICAgdHJ5IHtcbiAgICAgIHZhciB2YWx1ZSA9IHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKHN0YXRlS2V5KTtcbiAgICAgIHJldHVybiB2YWx1ZSA/IEpTT04ucGFyc2UodmFsdWUpIDogMDtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcIltnYXRzYnktcmVhY3Qtcm91dGVyLXNjcm9sbF0gVW5hYmxlIHRvIGFjY2VzcyBzZXNzaW9uU3RvcmFnZTsgc2Vzc2lvblN0b3JhZ2UgaXMgbm90IGF2YWlsYWJsZS5cIik7XG4gICAgICB9XG5cbiAgICAgIGlmICh3aW5kb3cgJiYgd2luZG93W0dBVFNCWV9ST1VURVJfU0NST0xMX1NUQVRFXSAmJiB3aW5kb3dbR0FUU0JZX1JPVVRFUl9TQ1JPTExfU1RBVEVdW3N0YXRlS2V5XSkge1xuICAgICAgICByZXR1cm4gd2luZG93W0dBVFNCWV9ST1VURVJfU0NST0xMX1NUQVRFXVtzdGF0ZUtleV07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uc2F2ZSA9IGZ1bmN0aW9uIHNhdmUobG9jYXRpb24sIGtleSwgdmFsdWUpIHtcbiAgICB2YXIgc3RhdGVLZXkgPSB0aGlzLmdldFN0YXRlS2V5KGxvY2F0aW9uLCBrZXkpO1xuICAgIHZhciBzdG9yZWRWYWx1ZSA9IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcblxuICAgIHRyeSB7XG4gICAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShzdGF0ZUtleSwgc3RvcmVkVmFsdWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmICh3aW5kb3cgJiYgd2luZG93W0dBVFNCWV9ST1VURVJfU0NST0xMX1NUQVRFXSkge1xuICAgICAgICB3aW5kb3dbR0FUU0JZX1JPVVRFUl9TQ1JPTExfU1RBVEVdW3N0YXRlS2V5XSA9IEpTT04ucGFyc2Uoc3RvcmVkVmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2luZG93W0dBVFNCWV9ST1VURVJfU0NST0xMX1NUQVRFXSA9IHt9O1xuICAgICAgICB3aW5kb3dbR0FUU0JZX1JPVVRFUl9TQ1JPTExfU1RBVEVdW3N0YXRlS2V5XSA9IEpTT04ucGFyc2Uoc3RvcmVkVmFsdWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcIltnYXRzYnktcmVhY3Qtcm91dGVyLXNjcm9sbF0gVW5hYmxlIHRvIHNhdmUgc3RhdGUgaW4gc2Vzc2lvblN0b3JhZ2U7IHNlc3Npb25TdG9yYWdlIGlzIG5vdCBhdmFpbGFibGUuXCIpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uZ2V0U3RhdGVLZXkgPSBmdW5jdGlvbiBnZXRTdGF0ZUtleShsb2NhdGlvbiwga2V5KSB7XG4gICAgdmFyIHN0YXRlS2V5QmFzZSA9IFwiXCIgKyBTVEFURV9LRVlfUFJFRklYICsgbG9jYXRpb24ucGF0aG5hbWU7XG4gICAgcmV0dXJuIGtleSA9PT0gbnVsbCB8fCB0eXBlb2Yga2V5ID09PSBcInVuZGVmaW5lZFwiID8gc3RhdGVLZXlCYXNlIDogc3RhdGVLZXlCYXNlICsgXCJ8XCIgKyBrZXk7XG4gIH07XG5cbiAgcmV0dXJuIFNlc3Npb25TdG9yYWdlO1xufSgpO1xuXG5leHBvcnRzLlNlc3Npb25TdG9yYWdlID0gU2Vzc2lvblN0b3JhZ2U7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1142\n')},4855:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nexports.__esModule = true;\nexports.useScrollRestoration = useScrollRestoration;\n\nvar _scrollHandler = __webpack_require__(1432);\n\nvar _react = __webpack_require__(7294);\n\nvar _reachRouter = __webpack_require__(9499);\n\nfunction useScrollRestoration(identifier) {\n var location = (0, _reachRouter.useLocation)();\n var state = (0, _react.useContext)(_scrollHandler.ScrollContext);\n var ref = (0, _react.useRef)(null);\n (0, _react.useLayoutEffect)(function () {\n if (ref.current) {\n var position = state.read(location, identifier);\n ref.current.scrollTo(0, position || 0);\n }\n }, [location.key]);\n return {\n ref: ref,\n onScroll: function onScroll() {\n if (ref.current) {\n state.save(location, identifier, ref.current.scrollTop);\n }\n }\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9nYXRzYnktcmVhY3Qtcm91dGVyLXNjcm9sbC91c2Utc2Nyb2xsLXJlc3RvcmF0aW9uLmpzP2RlZWMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsa0JBQWtCO0FBQ2xCLDRCQUE0Qjs7QUFFNUIscUJBQXFCLG1CQUFPLENBQUMsSUFBa0I7O0FBRS9DLGFBQWEsbUJBQU8sQ0FBQyxJQUFPOztBQUU1QixtQkFBbUIsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI0ODU1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLnVzZVNjcm9sbFJlc3RvcmF0aW9uID0gdXNlU2Nyb2xsUmVzdG9yYXRpb247XG5cbnZhciBfc2Nyb2xsSGFuZGxlciA9IHJlcXVpcmUoXCIuL3Njcm9sbC1oYW5kbGVyXCIpO1xuXG52YXIgX3JlYWN0ID0gcmVxdWlyZShcInJlYWN0XCIpO1xuXG52YXIgX3JlYWNoUm91dGVyID0gcmVxdWlyZShcIkBnYXRzYnlqcy9yZWFjaC1yb3V0ZXJcIik7XG5cbmZ1bmN0aW9uIHVzZVNjcm9sbFJlc3RvcmF0aW9uKGlkZW50aWZpZXIpIHtcbiAgdmFyIGxvY2F0aW9uID0gKDAsIF9yZWFjaFJvdXRlci51c2VMb2NhdGlvbikoKTtcbiAgdmFyIHN0YXRlID0gKDAsIF9yZWFjdC51c2VDb250ZXh0KShfc2Nyb2xsSGFuZGxlci5TY3JvbGxDb250ZXh0KTtcbiAgdmFyIHJlZiA9ICgwLCBfcmVhY3QudXNlUmVmKShudWxsKTtcbiAgKDAsIF9yZWFjdC51c2VMYXlvdXRFZmZlY3QpKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAocmVmLmN1cnJlbnQpIHtcbiAgICAgIHZhciBwb3NpdGlvbiA9IHN0YXRlLnJlYWQobG9jYXRpb24sIGlkZW50aWZpZXIpO1xuICAgICAgcmVmLmN1cnJlbnQuc2Nyb2xsVG8oMCwgcG9zaXRpb24gfHwgMCk7XG4gICAgfVxuICB9LCBbbG9jYXRpb24ua2V5XSk7XG4gIHJldHVybiB7XG4gICAgcmVmOiByZWYsXG4gICAgb25TY3JvbGw6IGZ1bmN0aW9uIG9uU2Nyb2xsKCkge1xuICAgICAgaWYgKHJlZi5jdXJyZW50KSB7XG4gICAgICAgIHN0YXRlLnNhdmUobG9jYXRpb24sIGlkZW50aWZpZXIsIHJlZi5jdXJyZW50LnNjcm9sbFRvcCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4855\n")},4999:function(__unused_webpack_module,exports,__webpack_require__){eval('// prefer default export if available\nvar preferDefault=function preferDefault(m){return m&&m.default||m;};exports.components={"component---src-pages-404-tsx":function componentSrcPages404Tsx(){return __webpack_require__.e(/* import() | component---src-pages-404-tsx */ 218).then(__webpack_require__.bind(__webpack_require__, 9786));},"component---src-pages-cejst-tsx":function componentSrcPagesCejstTsx(){return Promise.all(/* import() | component---src-pages-cejst-tsx */[__webpack_require__.e(532), __webpack_require__.e(30), __webpack_require__.e(644), __webpack_require__.e(947), __webpack_require__.e(90), __webpack_require__.e(281)]).then(__webpack_require__.bind(__webpack_require__, 386));},"component---src-pages-contact-tsx":function componentSrcPagesContactTsx(){return Promise.all(/* import() | component---src-pages-contact-tsx */[__webpack_require__.e(30), __webpack_require__.e(947), __webpack_require__.e(650)]).then(__webpack_require__.bind(__webpack_require__, 440));},"component---src-pages-index-tsx":function componentSrcPagesIndexTsx(){return Promise.all(/* import() | component---src-pages-index-tsx */[__webpack_require__.e(30), __webpack_require__.e(947), __webpack_require__.e(691)]).then(__webpack_require__.bind(__webpack_require__, 7824));},"component---src-pages-methodology-tsx":function componentSrcPagesMethodologyTsx(){return Promise.all(/* import() | component---src-pages-methodology-tsx */[__webpack_require__.e(30), __webpack_require__.e(947), __webpack_require__.e(647)]).then(__webpack_require__.bind(__webpack_require__, 2079));},"component---src-pages-timeline-tsx":function componentSrcPagesTimelineTsx(){return Promise.all(/* import() | component---src-pages-timeline-tsx */[__webpack_require__.e(30), __webpack_require__.e(947), __webpack_require__.e(914)]).then(__webpack_require__.bind(__webpack_require__, 7348));}};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uLy5jYWNoZS9fdGhpc19pc192aXJ0dWFsX2ZzX3BhdGhfLyR2aXJ0dWFsL2FzeW5jLXJlcXVpcmVzLmpzPzM2YzEiXSwibmFtZXMiOlsicHJlZmVyRGVmYXVsdCIsIm0iLCJkZWZhdWx0IiwiZXhwb3J0cyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxHQUFNQSxjQUFhLENBQUcsUUFBaEJBLGNBQWdCLENBQUFDLENBQUMsUUFBS0EsRUFBQyxFQUFJQSxDQUFDLENBQUNDLE9BQVIsRUFBb0JELENBQXhCLEVBQXZCLENBRUFFLGtCQUFBLENBQXFCLENBQ25CLGdDQUFpQyx5Q0FBTSxvSUFBTixFQURkLENBRW5CLGtDQUFtQywyQ0FBTSw2UkFBTixFQUZoQixDQUduQixvQ0FBcUMsNkNBQU0sNE1BQU4sRUFIbEIsQ0FJbkIsa0NBQW1DLDJDQUFNLDJNQUFOLEVBSmhCLENBS25CLHdDQUF5QyxpREFBTSxpTkFBTixFQUx0QixDQU1uQixxQ0FBc0MsOENBQU0sOE1BQU4sRUFObkIsQ0FBckIiLCJmaWxlIjoiNDk5OS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIHByZWZlciBkZWZhdWx0IGV4cG9ydCBpZiBhdmFpbGFibGVcbmNvbnN0IHByZWZlckRlZmF1bHQgPSBtID0+IChtICYmIG0uZGVmYXVsdCkgfHwgbVxuXG5leHBvcnRzLmNvbXBvbmVudHMgPSB7XG4gIFwiY29tcG9uZW50LS0tc3JjLXBhZ2VzLTQwNC10c3hcIjogKCkgPT4gaW1wb3J0KFwiLi8uLi8uLi8uLi9zcmMvcGFnZXMvNDA0LnRzeFwiIC8qIHdlYnBhY2tDaHVua05hbWU6IFwiY29tcG9uZW50LS0tc3JjLXBhZ2VzLTQwNC10c3hcIiAqLyksXG4gIFwiY29tcG9uZW50LS0tc3JjLXBhZ2VzLWNlanN0LXRzeFwiOiAoKSA9PiBpbXBvcnQoXCIuLy4uLy4uLy4uL3NyYy9wYWdlcy9jZWpzdC50c3hcIiAvKiB3ZWJwYWNrQ2h1bmtOYW1lOiBcImNvbXBvbmVudC0tLXNyYy1wYWdlcy1jZWpzdC10c3hcIiAqLyksXG4gIFwiY29tcG9uZW50LS0tc3JjLXBhZ2VzLWNvbnRhY3QtdHN4XCI6ICgpID0+IGltcG9ydChcIi4vLi4vLi4vLi4vc3JjL3BhZ2VzL2NvbnRhY3QudHN4XCIgLyogd2VicGFja0NodW5rTmFtZTogXCJjb21wb25lbnQtLS1zcmMtcGFnZXMtY29udGFjdC10c3hcIiAqLyksXG4gIFwiY29tcG9uZW50LS0tc3JjLXBhZ2VzLWluZGV4LXRzeFwiOiAoKSA9PiBpbXBvcnQoXCIuLy4uLy4uLy4uL3NyYy9wYWdlcy9pbmRleC50c3hcIiAvKiB3ZWJwYWNrQ2h1bmtOYW1lOiBcImNvbXBvbmVudC0tLXNyYy1wYWdlcy1pbmRleC10c3hcIiAqLyksXG4gIFwiY29tcG9uZW50LS0tc3JjLXBhZ2VzLW1ldGhvZG9sb2d5LXRzeFwiOiAoKSA9PiBpbXBvcnQoXCIuLy4uLy4uLy4uL3NyYy9wYWdlcy9tZXRob2RvbG9neS50c3hcIiAvKiB3ZWJwYWNrQ2h1bmtOYW1lOiBcImNvbXBvbmVudC0tLXNyYy1wYWdlcy1tZXRob2RvbG9neS10c3hcIiAqLyksXG4gIFwiY29tcG9uZW50LS0tc3JjLXBhZ2VzLXRpbWVsaW5lLXRzeFwiOiAoKSA9PiBpbXBvcnQoXCIuLy4uLy4uLy4uL3NyYy9wYWdlcy90aW1lbGluZS50c3hcIiAvKiB3ZWJwYWNrQ2h1bmtOYW1lOiBcImNvbXBvbmVudC0tLXNyYy1wYWdlcy10aW1lbGluZS10c3hcIiAqLylcbn1cblxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4999\n')},5182:function(module,__unused_webpack_exports,__webpack_require__){eval('module.exports=[{plugin:__webpack_require__(5526),options:{"plugins":[],"path":"/home/runner/work/justice40-tool/justice40-tool/client/src/intl","languages":["en","es"],"defaultLanguage":"en","redirect":true}},{plugin:__webpack_require__(9037),options:{"plugins":[]}}];//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uLy5jYWNoZS9hcGktcnVubmVyLWJyb3dzZXItcGx1Z2lucy5qcz8yZGUyIl0sIm5hbWVzIjpbIm1vZHVsZSIsImV4cG9ydHMiLCJwbHVnaW4iLCJyZXF1aXJlIiwib3B0aW9ucyJdLCJtYXBwaW5ncyI6IkFBQUFBLE1BQU0sQ0FBQ0MsT0FBUCxDQUFpQixDQUFDLENBQ1pDLE1BQU0sQ0FBRUMsbUJBQU8sQ0FBQyxJQUFELENBREgsQ0FFWkMsT0FBTyxDQUFFLENBQUMsVUFBVSxFQUFYLENBQWMsT0FBTyxpRUFBckIsQ0FBdUYsWUFBWSxDQUFDLElBQUQsQ0FBTSxJQUFOLENBQW5HLENBQStHLGtCQUFrQixJQUFqSSxDQUFzSSxXQUFXLElBQWpKLENBRkcsQ0FBRCxDQUdYLENBQ0FGLE1BQU0sQ0FBRUMsbUJBQU8sQ0FBQyxJQUFELENBRGYsQ0FFQUMsT0FBTyxDQUFFLENBQUMsVUFBVSxFQUFYLENBRlQsQ0FIVyxDQUFqQiIsImZpbGUiOiI1MTgyLmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBbe1xuICAgICAgcGx1Z2luOiByZXF1aXJlKCcuLi9ub2RlX21vZHVsZXMvZ2F0c2J5LXBsdWdpbi1pbnRsL2dhdHNieS1icm93c2VyLmpzJyksXG4gICAgICBvcHRpb25zOiB7XCJwbHVnaW5zXCI6W10sXCJwYXRoXCI6XCIvaG9tZS9ydW5uZXIvd29yay9qdXN0aWNlNDAtdG9vbC9qdXN0aWNlNDAtdG9vbC9jbGllbnQvc3JjL2ludGxcIixcImxhbmd1YWdlc1wiOltcImVuXCIsXCJlc1wiXSxcImRlZmF1bHRMYW5ndWFnZVwiOlwiZW5cIixcInJlZGlyZWN0XCI6dHJ1ZX0sXG4gICAgfSx7XG4gICAgICBwbHVnaW46IHJlcXVpcmUoJy4uL2dhdHNieS1icm93c2VyLmpzJyksXG4gICAgICBvcHRpb25zOiB7XCJwbHVnaW5zXCI6W119LFxuICAgIH1dXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5182\n')},7343:function(__unused_webpack_module,exports,__webpack_require__){eval('var plugins=__webpack_require__(5182);var _require$publicLoader=__webpack_require__(8741)/* .publicLoader */ .jN,getResourceURLsForPathname=_require$publicLoader.getResourceURLsForPathname,loadPage=_require$publicLoader.loadPage,loadPageSync=_require$publicLoader.loadPageSync;exports.h=function(api,args,defaultReturn,argTransform){if(args===void 0){args={};}// Hooks for gatsby-cypress\'s API handler\nif(undefined){if(window.___apiHandler){window.___apiHandler(api);}else if(window.___resolvedAPIs){window.___resolvedAPIs.push(api);}else{window.___resolvedAPIs=[api];}}var results=plugins.map(function(plugin){if(!plugin.plugin[api]){return undefined;}args.getResourceURLsForPathname=getResourceURLsForPathname;args.loadPage=loadPage;args.loadPageSync=loadPageSync;var result=plugin.plugin[api](args,plugin.options);if(result&&argTransform){args=argTransform({args:args,result:result,plugin:plugin});}return result;});// Filter out undefined results.\nresults=results.filter(function(result){return typeof result!=="undefined";});if(results.length>0){return results;}else if(defaultReturn){return[defaultReturn];}else{return[];}};exports.I=function(api,args,defaultReturn){return plugins.reduce(function(previous,next){return next.plugin[api]?previous.then(function(){return next.plugin[api](args,next.options);}):previous;},Promise.resolve());};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uLy5jYWNoZS9hcGktcnVubmVyLWJyb3dzZXIuanM/YzZkYiJdLCJuYW1lcyI6WyJwbHVnaW5zIiwicmVxdWlyZSIsImdldFJlc291cmNlVVJMc0ZvclBhdGhuYW1lIiwibG9hZFBhZ2UiLCJsb2FkUGFnZVN5bmMiLCJleHBvcnRzIiwiYXBpIiwiYXJncyIsImRlZmF1bHRSZXR1cm4iLCJhcmdUcmFuc2Zvcm0iLCJwcm9jZXNzIiwid2luZG93IiwiX19fYXBpSGFuZGxlciIsIl9fX3Jlc29sdmVkQVBJcyIsInB1c2giLCJyZXN1bHRzIiwibWFwIiwicGx1Z2luIiwidW5kZWZpbmVkIiwicmVzdWx0Iiwib3B0aW9ucyIsImZpbHRlciIsImxlbmd0aCIsInJlZHVjZSIsInByZXZpb3VzIiwibmV4dCIsInRoZW4iLCJQcm9taXNlIiwicmVzb2x2ZSJdLCJtYXBwaW5ncyI6IkFBQUEsR0FBTUEsUUFBTyxDQUFHQyxtQkFBTyxDQUFDLEtBQXhCLENBQ0EsMEJBSUlBLGdEQUpKLENBQ0VDLDBCQURGLHVCQUNFQSwwQkFERixDQUVFQyxRQUZGLHVCQUVFQSxRQUZGLENBR0VDLFlBSEYsdUJBR0VBLFlBSEYsQ0FNQUMsU0FBQSxDQUFvQixTQUFDQyxHQUFELENBQU1DLElBQU4sQ0FBaUJDLGFBQWpCLENBQWdDQyxZQUFoQyxDQUFpRCxJQUEzQ0YsSUFBMkMsV0FBM0NBLElBQTJDLENBQXBDLEVBQW9DLEVBQ25FO0FBQ0EsR0FBSUcsU0FBSixDQUFpQyxDQUMvQixHQUFJQyxNQUFNLENBQUNDLGFBQVgsQ0FBMEIsQ0FDeEJELE1BQU0sQ0FBQ0MsYUFBUCxDQUFxQk4sR0FBckIsRUFDRCxDQUZELElBRU8sSUFBSUssTUFBTSxDQUFDRSxlQUFYLENBQTRCLENBQ2pDRixNQUFNLENBQUNFLGVBQVAsQ0FBdUJDLElBQXZCLENBQTRCUixHQUE1QixFQUNELENBRk0sSUFFQSxDQUNMSyxNQUFNLENBQUNFLGVBQVAsQ0FBeUIsQ0FBQ1AsR0FBRCxDQUF6QixDQUNELENBQ0YsQ0FFRCxHQUFJUyxRQUFPLENBQUdmLE9BQU8sQ0FBQ2dCLEdBQVIsQ0FBWSxTQUFBQyxNQUFNLENBQUksQ0FDbEMsR0FBSSxDQUFDQSxNQUFNLENBQUNBLE1BQVAsQ0FBY1gsR0FBZCxDQUFMLENBQXlCLENBQ3ZCLE1BQU9ZLFVBQVAsQ0FDRCxDQUVEWCxJQUFJLENBQUNMLDBCQUFMLENBQWtDQSwwQkFBbEMsQ0FDQUssSUFBSSxDQUFDSixRQUFMLENBQWdCQSxRQUFoQixDQUNBSSxJQUFJLENBQUNILFlBQUwsQ0FBb0JBLFlBQXBCLENBRUEsR0FBTWUsT0FBTSxDQUFHRixNQUFNLENBQUNBLE1BQVAsQ0FBY1gsR0FBZCxFQUFtQkMsSUFBbkIsQ0FBeUJVLE1BQU0sQ0FBQ0csT0FBaEMsQ0FBZixDQUNBLEdBQUlELE1BQU0sRUFBSVYsWUFBZCxDQUE0QixDQUMxQkYsSUFBSSxDQUFHRSxZQUFZLENBQUMsQ0FBRUYsSUFBSSxDQUFKQSxJQUFGLENBQVFZLE1BQU0sQ0FBTkEsTUFBUixDQUFnQkYsTUFBTSxDQUFOQSxNQUFoQixDQUFELENBQW5CLENBQ0QsQ0FDRCxNQUFPRSxPQUFQLENBQ0QsQ0FkYSxDQUFkLENBZ0JBO0FBQ0FKLE9BQU8sQ0FBR0EsT0FBTyxDQUFDTSxNQUFSLENBQWUsU0FBQUYsTUFBTSxRQUFJLE9BQU9BLE9BQVAsY0FBSixFQUFyQixDQUFWLENBRUEsR0FBSUosT0FBTyxDQUFDTyxNQUFSLENBQWlCLENBQXJCLENBQXdCLENBQ3RCLE1BQU9QLFFBQVAsQ0FDRCxDQUZELElBRU8sSUFBSVAsYUFBSixDQUFtQixDQUN4QixNQUFPLENBQUNBLGFBQUQsQ0FBUCxDQUNELENBRk0sSUFFQSxDQUNMLE1BQU8sRUFBUCxDQUNELENBQ0YsQ0F0Q0QsQ0F3Q0FILFNBQUEsQ0FBeUIsU0FBQ0MsR0FBRCxDQUFNQyxJQUFOLENBQVlDLGFBQVosUUFDdkJSLFFBQU8sQ0FBQ3VCLE1BQVIsQ0FDRSxTQUFDQyxRQUFELENBQVdDLElBQVgsUUFDRUEsS0FBSSxDQUFDUixNQUFMLENBQVlYLEdBQVosRUFDSWtCLFFBQVEsQ0FBQ0UsSUFBVCxDQUFjLGlCQUFNRCxLQUFJLENBQUNSLE1BQUwsQ0FBWVgsR0FBWixFQUFpQkMsSUFBakIsQ0FBdUJrQixJQUFJLENBQUNMLE9BQTVCLENBQU4sRUFBZCxDQURKLENBRUlJLFFBSE4sRUFERixDQUtFRyxPQUFPLENBQUNDLE9BQVIsRUFMRixDQUR1QixFQUF6QiIsImZpbGUiOiI3MzQzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgcGx1Z2lucyA9IHJlcXVpcmUoYC4vYXBpLXJ1bm5lci1icm93c2VyLXBsdWdpbnNgKVxuY29uc3Qge1xuICBnZXRSZXNvdXJjZVVSTHNGb3JQYXRobmFtZSxcbiAgbG9hZFBhZ2UsXG4gIGxvYWRQYWdlU3luYyxcbn0gPSByZXF1aXJlKGAuL2xvYWRlcmApLnB1YmxpY0xvYWRlclxuXG5leHBvcnRzLmFwaVJ1bm5lciA9IChhcGksIGFyZ3MgPSB7fSwgZGVmYXVsdFJldHVybiwgYXJnVHJhbnNmb3JtKSA9PiB7XG4gIC8vIEhvb2tzIGZvciBnYXRzYnktY3lwcmVzcydzIEFQSSBoYW5kbGVyXG4gIGlmIChwcm9jZXNzLmVudi5DWVBSRVNTX1NVUFBPUlQpIHtcbiAgICBpZiAod2luZG93Ll9fX2FwaUhhbmRsZXIpIHtcbiAgICAgIHdpbmRvdy5fX19hcGlIYW5kbGVyKGFwaSlcbiAgICB9IGVsc2UgaWYgKHdpbmRvdy5fX19yZXNvbHZlZEFQSXMpIHtcbiAgICAgIHdpbmRvdy5fX19yZXNvbHZlZEFQSXMucHVzaChhcGkpXG4gICAgfSBlbHNlIHtcbiAgICAgIHdpbmRvdy5fX19yZXNvbHZlZEFQSXMgPSBbYXBpXVxuICAgIH1cbiAgfVxuXG4gIGxldCByZXN1bHRzID0gcGx1Z2lucy5tYXAocGx1Z2luID0+IHtcbiAgICBpZiAoIXBsdWdpbi5wbHVnaW5bYXBpXSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cblxuICAgIGFyZ3MuZ2V0UmVzb3VyY2VVUkxzRm9yUGF0aG5hbWUgPSBnZXRSZXNvdXJjZVVSTHNGb3JQYXRobmFtZVxuICAgIGFyZ3MubG9hZFBhZ2UgPSBsb2FkUGFnZVxuICAgIGFyZ3MubG9hZFBhZ2VTeW5jID0gbG9hZFBhZ2VTeW5jXG5cbiAgICBjb25zdCByZXN1bHQgPSBwbHVnaW4ucGx1Z2luW2FwaV0oYXJncywgcGx1Z2luLm9wdGlvbnMpXG4gICAgaWYgKHJlc3VsdCAmJiBhcmdUcmFuc2Zvcm0pIHtcbiAgICAgIGFyZ3MgPSBhcmdUcmFuc2Zvcm0oeyBhcmdzLCByZXN1bHQsIHBsdWdpbiB9KVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0XG4gIH0pXG5cbiAgLy8gRmlsdGVyIG91dCB1bmRlZmluZWQgcmVzdWx0cy5cbiAgcmVzdWx0cyA9IHJlc3VsdHMuZmlsdGVyKHJlc3VsdCA9PiB0eXBlb2YgcmVzdWx0ICE9PSBgdW5kZWZpbmVkYClcblxuICBpZiAocmVzdWx0cy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHJlc3VsdHNcbiAgfSBlbHNlIGlmIChkZWZhdWx0UmV0dXJuKSB7XG4gICAgcmV0dXJuIFtkZWZhdWx0UmV0dXJuXVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBbXVxuICB9XG59XG5cbmV4cG9ydHMuYXBpUnVubmVyQXN5bmMgPSAoYXBpLCBhcmdzLCBkZWZhdWx0UmV0dXJuKSA9PlxuICBwbHVnaW5zLnJlZHVjZShcbiAgICAocHJldmlvdXMsIG5leHQpID0+XG4gICAgICBuZXh0LnBsdWdpblthcGldXG4gICAgICAgID8gcHJldmlvdXMudGhlbigoKSA9PiBuZXh0LnBsdWdpblthcGldKGFyZ3MsIG5leHQub3B0aW9ucykpXG4gICAgICAgIDogcHJldmlvdXMsXG4gICAgUHJvbWlzZS5yZXNvbHZlKClcbiAgKVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7343\n')},8110:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n "Z": function() { return /* binding */ _cache_emitter; }\n});\n\n;// CONCATENATED MODULE: ./node_modules/mitt/dist/mitt.es.js\n// \n// An event handler can take an optional event argument\n// and should not return a value\n \n \n\n// An array of all currently registered event handlers for a type\n \n \n// A map of event types and their corresponding event handlers.\n \n \n \n \n\n/** Mitt: Tiny (~200b) functional event emitter / pubsub.\n * @name mitt\n * @returns {Mitt}\n */\nfunction mitt(all ) {\n\tall = all || Object.create(null);\n\n\treturn {\n\t\t/**\n\t\t * Register an event handler for the given type.\n\t\t *\n\t\t * @param {String} type\tType of event to listen for, or `"*"` for all events\n\t\t * @param {Function} handler Function to call in response to given event\n\t\t * @memberOf mitt\n\t\t */\n\t\ton: function on(type , handler ) {\n\t\t\t(all[type] || (all[type] = [])).push(handler);\n\t\t},\n\n\t\t/**\n\t\t * Remove an event handler for the given type.\n\t\t *\n\t\t * @param {String} type\tType of event to unregister `handler` from, or `"*"`\n\t\t * @param {Function} handler Handler function to remove\n\t\t * @memberOf mitt\n\t\t */\n\t\toff: function off(type , handler ) {\n\t\t\tif (all[type]) {\n\t\t\t\tall[type].splice(all[type].indexOf(handler) >>> 0, 1);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Invoke all handlers for the given type.\n\t\t * If present, `"*"` handlers are invoked after type-matched handlers.\n\t\t *\n\t\t * @param {String} type The event type to invoke\n\t\t * @param {Any} [evt] Any value (object is recommended and powerful), passed to each handler\n\t\t * @memberOf mitt\n\t\t */\n\t\temit: function emit(type , evt ) {\n\t\t\t(all[type] || []).slice().map(function (handler) { handler(evt); });\n\t\t\t(all[\'*\'] || []).slice().map(function (handler) { handler(type, evt); });\n\t\t}\n\t};\n}\n\n/* harmony default export */ var mitt_es = (mitt);\n//# sourceMappingURL=mitt.es.js.map\n\n;// CONCATENATED MODULE: ./.cache/emitter.js\nvar emitter=mitt_es();/* harmony default export */ var _cache_emitter = (emitter);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9taXR0L2Rpc3QvbWl0dC5lcy5qcz8xNGI3Iiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vLmNhY2hlL2VtaXR0ZXIuanM/ZTcyYSJdLCJuYW1lcyI6WyJlbWl0dGVyIiwibWl0dCJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBO0FBQ0E7QUFDQTs7OztBQUlBOzs7QUFHQTs7Ozs7O0FBTUE7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLE9BQU87QUFDckIsY0FBYyxTQUFTO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQSxjQUFjLE9BQU87QUFDckIsY0FBYyxTQUFTO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLE9BQU87QUFDcEIsYUFBYSxJQUFJO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBLHFEQUFxRCxjQUFjLEVBQUU7QUFDckUsb0RBQW9ELG9CQUFvQixFQUFFO0FBQzFFO0FBQ0E7QUFDQTs7QUFFQSw0Q0FBZSxJQUFJLEVBQUM7QUFDcEI7OztBQzdEQSxHQUFNQSxRQUFPLENBQUdDLE9BQUksRUFBcEIsQ0FDQSxtREFBZUQsT0FBZiIsImZpbGUiOiI4MTEwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gICAgICBcbi8vIEFuIGV2ZW50IGhhbmRsZXIgY2FuIHRha2UgYW4gb3B0aW9uYWwgZXZlbnQgYXJndW1lbnRcbi8vIGFuZCBzaG91bGQgbm90IHJldHVybiBhIHZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXG4vLyBBbiBhcnJheSBvZiBhbGwgY3VycmVudGx5IHJlZ2lzdGVyZWQgZXZlbnQgaGFuZGxlcnMgZm9yIGEgdHlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuLy8gQSBtYXAgb2YgZXZlbnQgdHlwZXMgYW5kIHRoZWlyIGNvcnJlc3BvbmRpbmcgZXZlbnQgaGFuZGxlcnMuXG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgXG5cbi8qKiBNaXR0OiBUaW55ICh+MjAwYikgZnVuY3Rpb25hbCBldmVudCBlbWl0dGVyIC8gcHVic3ViLlxuICogIEBuYW1lIG1pdHRcbiAqICBAcmV0dXJucyB7TWl0dH1cbiAqL1xuZnVuY3Rpb24gbWl0dChhbGwgICAgICAgICAgICAgICAgICkge1xuXHRhbGwgPSBhbGwgfHwgT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuXHRyZXR1cm4ge1xuXHRcdC8qKlxuXHRcdCAqIFJlZ2lzdGVyIGFuIGV2ZW50IGhhbmRsZXIgZm9yIHRoZSBnaXZlbiB0eXBlLlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtICB7U3RyaW5nfSB0eXBlXHRUeXBlIG9mIGV2ZW50IHRvIGxpc3RlbiBmb3IsIG9yIGBcIipcImAgZm9yIGFsbCBldmVudHNcblx0XHQgKiBAcGFyYW0gIHtGdW5jdGlvbn0gaGFuZGxlciBGdW5jdGlvbiB0byBjYWxsIGluIHJlc3BvbnNlIHRvIGdpdmVuIGV2ZW50XG5cdFx0ICogQG1lbWJlck9mIG1pdHRcblx0XHQgKi9cblx0XHRvbjogZnVuY3Rpb24gb24odHlwZSAgICAgICAgLCBoYW5kbGVyICAgICAgICAgICAgICApIHtcblx0XHRcdChhbGxbdHlwZV0gfHwgKGFsbFt0eXBlXSA9IFtdKSkucHVzaChoYW5kbGVyKTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogUmVtb3ZlIGFuIGV2ZW50IGhhbmRsZXIgZm9yIHRoZSBnaXZlbiB0eXBlLlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtICB7U3RyaW5nfSB0eXBlXHRUeXBlIG9mIGV2ZW50IHRvIHVucmVnaXN0ZXIgYGhhbmRsZXJgIGZyb20sIG9yIGBcIipcImBcblx0XHQgKiBAcGFyYW0gIHtGdW5jdGlvbn0gaGFuZGxlciBIYW5kbGVyIGZ1bmN0aW9uIHRvIHJlbW92ZVxuXHRcdCAqIEBtZW1iZXJPZiBtaXR0XG5cdFx0ICovXG5cdFx0b2ZmOiBmdW5jdGlvbiBvZmYodHlwZSAgICAgICAgLCBoYW5kbGVyICAgICAgICAgICAgICApIHtcblx0XHRcdGlmIChhbGxbdHlwZV0pIHtcblx0XHRcdFx0YWxsW3R5cGVdLnNwbGljZShhbGxbdHlwZV0uaW5kZXhPZihoYW5kbGVyKSA+Pj4gMCwgMSk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIEludm9rZSBhbGwgaGFuZGxlcnMgZm9yIHRoZSBnaXZlbiB0eXBlLlxuXHRcdCAqIElmIHByZXNlbnQsIGBcIipcImAgaGFuZGxlcnMgYXJlIGludm9rZWQgYWZ0ZXIgdHlwZS1tYXRjaGVkIGhhbmRsZXJzLlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHtTdHJpbmd9IHR5cGUgIFRoZSBldmVudCB0eXBlIHRvIGludm9rZVxuXHRcdCAqIEBwYXJhbSB7QW55fSBbZXZ0XSAgQW55IHZhbHVlIChvYmplY3QgaXMgcmVjb21tZW5kZWQgYW5kIHBvd2VyZnVsKSwgcGFzc2VkIHRvIGVhY2ggaGFuZGxlclxuXHRcdCAqIEBtZW1iZXJPZiBtaXR0XG5cdFx0ICovXG5cdFx0ZW1pdDogZnVuY3Rpb24gZW1pdCh0eXBlICAgICAgICAsIGV2dCAgICAgKSB7XG5cdFx0XHQoYWxsW3R5cGVdIHx8IFtdKS5zbGljZSgpLm1hcChmdW5jdGlvbiAoaGFuZGxlcikgeyBoYW5kbGVyKGV2dCk7IH0pO1xuXHRcdFx0KGFsbFsnKiddIHx8IFtdKS5zbGljZSgpLm1hcChmdW5jdGlvbiAoaGFuZGxlcikgeyBoYW5kbGVyKHR5cGUsIGV2dCk7IH0pO1xuXHRcdH1cblx0fTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbWl0dDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW1pdHQuZXMuanMubWFwXG4iLCJpbXBvcnQgbWl0dCBmcm9tIFwibWl0dFwiXG5cbmNvbnN0IGVtaXR0ZXIgPSBtaXR0KClcbmV4cG9ydCBkZWZhdWx0IGVtaXR0ZXJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8110\n')},2257:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n "UD": function() { return /* binding */ findMatchPath; },\n "Cj": function() { return /* binding */ findPath; },\n "GA": function() { return /* binding */ grabMatchParams; },\n "DS": function() { return /* binding */ setMatchPaths; }\n});\n\n// UNUSED EXPORTS: cleanPath\n\n// EXTERNAL MODULE: ./node_modules/@gatsbyjs/reach-router/lib/utils.js\nvar utils = __webpack_require__(2098);\n// EXTERNAL MODULE: ./.cache/strip-prefix.js\nvar strip_prefix = __webpack_require__(1578);\n;// CONCATENATED MODULE: ./.cache/normalize-page-path.js\n/* harmony default export */ var normalize_page_path = (function(path){if(path===undefined){return path;}if(path==="/"){return"/";}if(path.charAt(path.length-1)==="/"){return path.slice(0,-1);}return path;});\n// EXTERNAL MODULE: ./.cache/redirect-utils.js + 1 modules\nvar redirect_utils = __webpack_require__(5166);\n;// CONCATENATED MODULE: ./.cache/find-path.js\nvar pathCache=new Map();var matchPaths=[];var trimPathname=function trimPathname(rawPathname){var pathname=decodeURIComponent(rawPathname);// Remove the pathPrefix from the pathname.\nvar trimmedPathname=(0,strip_prefix/* default */.Z)(pathname,decodeURIComponent("/justice40-tool/main"))// Remove any hashfragment\n.split("#")[0]// Remove search query\n.split("?")[0];return trimmedPathname;};function absolutify(path){// If it\'s already absolute, return as-is\nif(path.startsWith("/")||path.startsWith("https://")||path.startsWith("http://")){return path;}// Calculate path relative to current location, adding a trailing slash to\n// match behavior of @reach/router\nreturn new URL(path,window.location.href+(window.location.href.endsWith("/")?"":"/")).pathname;}/**\n * Set list of matchPaths\n *\n * @param {Array<{path: string, matchPath: string}>} value collection of matchPaths\n */var setMatchPaths=function setMatchPaths(value){matchPaths=value;};/**\n * Return a matchpath url\n * if `match-paths.json` contains `{ "/foo*": "/page1", ...}`, then\n * `/foo?bar=far` => `/page1`\n *\n * @param {string} rawPathname A raw pathname\n * @return {string|null}\n */var findMatchPath=function findMatchPath(rawPathname){var trimmedPathname=cleanPath(rawPathname);var pickPaths=matchPaths.map(function(_ref){var path=_ref.path,matchPath=_ref.matchPath;return{path:matchPath,originalPath:path};});var path=(0,utils.pick)(pickPaths,trimmedPathname);if(path){return normalize_page_path(path.route.originalPath);}return null;};/**\n * Return a matchpath params from reach/router rules\n * if `match-paths.json` contains `{ ":bar/*foo" }`, and the path is /baz/zaz/zoo\n * then it returns\n * { bar: baz, foo: zaz/zoo }\n *\n * @param {string} rawPathname A raw pathname\n * @return {object}\n */var grabMatchParams=function grabMatchParams(rawPathname){var trimmedPathname=cleanPath(rawPathname);var pickPaths=matchPaths.map(function(_ref2){var path=_ref2.path,matchPath=_ref2.matchPath;return{path:matchPath,originalPath:path};});var path=(0,utils.pick)(pickPaths,trimmedPathname);if(path){return path.params;}return{};};// Given a raw URL path, returns the cleaned version of it (trim off\n// `#` and query params), or if it matches an entry in\n// `match-paths.json`, its matched path is returned\n//\n// E.g. `/foo?bar=far` => `/foo`\n//\n// Or if `match-paths.json` contains `{ "/foo*": "/page1", ...}`, then\n// `/foo?bar=far` => `/page1`\nvar findPath=function findPath(rawPathname){var trimmedPathname=trimPathname(absolutify(rawPathname));if(pathCache.has(trimmedPathname)){return pathCache.get(trimmedPathname);}var redirect=(0,redirect_utils/* maybeGetBrowserRedirect */.J)(rawPathname);if(redirect){return findPath(redirect.toPath);}var foundPath=findMatchPath(trimmedPathname);if(!foundPath){foundPath=cleanPath(rawPathname);}pathCache.set(trimmedPathname,foundPath);return foundPath;};/**\n * Clean a url and converts /index.html => /\n * E.g. `/foo?bar=far` => `/foo`\n *\n * @param {string} rawPathname A raw pathname\n * @return {string}\n */var cleanPath=function cleanPath(rawPathname){var trimmedPathname=trimPathname(absolutify(rawPathname));var foundPath=trimmedPathname;if(foundPath==="/index.html"){foundPath="/";}foundPath=normalize_page_path(foundPath);return foundPath;};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uLy5jYWNoZS9ub3JtYWxpemUtcGFnZS1wYXRoLmpzPzY3YjUiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi8uY2FjaGUvZmluZC1wYXRoLmpzP2RmNDQiXSwibmFtZXMiOlsicGF0aCIsInVuZGVmaW5lZCIsImNoYXJBdCIsImxlbmd0aCIsInNsaWNlIiwicGF0aENhY2hlIiwiTWFwIiwibWF0Y2hQYXRocyIsInRyaW1QYXRobmFtZSIsInJhd1BhdGhuYW1lIiwicGF0aG5hbWUiLCJkZWNvZGVVUklDb21wb25lbnQiLCJ0cmltbWVkUGF0aG5hbWUiLCJzdHJpcFByZWZpeCIsIl9fQkFTRV9QQVRIX18iLCJzcGxpdCIsImFic29sdXRpZnkiLCJzdGFydHNXaXRoIiwiVVJMIiwid2luZG93IiwibG9jYXRpb24iLCJocmVmIiwiZW5kc1dpdGgiLCJzZXRNYXRjaFBhdGhzIiwidmFsdWUiLCJmaW5kTWF0Y2hQYXRoIiwiY2xlYW5QYXRoIiwicGlja1BhdGhzIiwibWFwIiwibWF0Y2hQYXRoIiwib3JpZ2luYWxQYXRoIiwicGljayIsIm5vcm1hbGl6ZVBhZ2VQYXRoIiwicm91dGUiLCJncmFiTWF0Y2hQYXJhbXMiLCJwYXJhbXMiLCJmaW5kUGF0aCIsImhhcyIsImdldCIsInJlZGlyZWN0IiwibWF5YmVHZXRCcm93c2VyUmVkaXJlY3QiLCJ0b1BhdGgiLCJmb3VuZFBhdGgiLCJzZXQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx3REFBZSxTQUFBQSxJQUFJLENBQUksQ0FDckIsR0FBSUEsSUFBSSxHQUFLQyxTQUFiLENBQXdCLENBQ3RCLE1BQU9ELEtBQVAsQ0FDRCxDQUNELEdBQUlBLElBQUksTUFBUixDQUFrQixDQUNoQixVQUNELENBQ0QsR0FBSUEsSUFBSSxDQUFDRSxNQUFMLENBQVlGLElBQUksQ0FBQ0csTUFBTCxDQUFjLENBQTFCLE9BQUosQ0FBMEMsQ0FDeEMsTUFBT0gsS0FBSSxD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cG9ydCBkZWZhdWx0IHBhdGggPT4ge1xuICBpZiAocGF0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHBhdGhcbiAgfVxuICBpZiAocGF0aCA9PT0gYC9gKSB7XG4gICAgcmV0dXJuIGAvYFxuICB9XG4gIGlmIChwYXRoLmNoYXJBdChwYXRoLmxlbmd0aCAtIDEpID09PSBgL2ApIHtcbiAgICByZXR1cm4gcGF0aC5zbGljZSgwLCAtMSlcbiAgfVxuICByZXR1cm4gcGF0aFxufVxuIiwiaW1wb3J0IHsgcGljayB9IGZyb20gXCJAZ2F0c2J5anMvcmVhY2gtcm91dGVyL2xpYi91dGlsc1wiXG5pbXBvcnQgc3RyaXBQcmVmaXggZnJvbSBcIi4vc3RyaXAtcHJlZml4XCJcbmltcG9ydCBub3JtYWxpemVQYWdlUGF0aCBmcm9tIFwiLi9ub3JtYWxpemUtcGFnZS1wYXRoXCJcbmltcG9ydCB7IG1heWJlR2V0QnJvd3NlclJlZGlyZWN0IH0gZnJvbSBcIi4vcmVkaXJlY3QtdXRpbHMuanNcIlxuXG5jb25zdCBwYXRoQ2FjaGUgPSBuZXcgTWFwKClcbmxldCBtYXRjaFBhdGhzID0gW11cblxuY29uc3QgdHJpbVBhdGhuYW1lID0gcmF3UGF0aG5hbWUgPT4ge1xuICBjb25zdCBwYXRobmFtZSA9IGRlY29kZVVSSUNvbXBvbmVudChyYXdQYXRobmFtZSlcbiAgLy8gUmVtb3ZlIHRoZSBwYXRoUHJlZml4IGZyb20gdGhlIHBhdGhuYW1lLlxuICBjb25zdCB0cmltbWVkUGF0aG5hbWUgPSBzdHJpcFByZWZpeChcbiAgICBwYXRobmFtZSxcbiAgICBkZWNvZGVVUklDb21wb25lbnQoX19CQVNFX1BBVEhfXylcbiAgKVxuICAgIC8vIFJlbW92ZSBhbnkgaGFzaGZyYWdtZW50XG4gICAgLnNwbGl0KGAjYClbMF1cbiAgICAvLyBSZW1vdmUgc2VhcmNoIHF1ZXJ5XG4gICAgLnNwbGl0KGA/YClbMF1cblxuICByZXR1cm4gdHJpbW1lZFBhdGhuYW1lXG59XG5cbmZ1bmN0aW9uIGFic29sdXRpZnkocGF0aCkge1xuICAvLyBJZiBpdCdzIGFscmVhZHkgYWJzb2x1dGUsIHJldHVybiBhcy1pc1xuICBpZiAoXG4gICAgcGF0aC5zdGFydHNXaXRoKGAvYCkgfHxcbiAgICBwYXRoLnN0YXJ0c1dpdGgoYGh0dHBzOi8vYCkgfHxcbiAgICBwYXRoLnN0YXJ0c1dpdGgoYGh0dHA6Ly9gKVxuICApIHtcbiAgICByZXR1cm4gcGF0aFxuICB9XG4gIC8vIENhbGN1bGF0ZSBwYXRoIHJlbGF0aXZlIHRvIGN1cnJlbnQgbG9jYXRpb24sIGFkZGluZyBhIHRyYWlsaW5nIHNsYXNoIHRvXG4gIC8vIG1hdGNoIGJlaGF2aW9yIG9mIEByZWFjaC9yb3V0ZXJcbiAgcmV0dXJuIG5ldyBVUkwoXG4gICAgcGF0aCxcbiAgICB3aW5kb3cubG9jYXRpb24uaHJlZiArICh3aW5kb3cubG9jYXRpb24uaHJlZi5lbmRzV2l0aChgL2ApID8gYGAgOiBgL2ApXG4gICkucGF0aG5hbWVcbn1cblxuLyoqXG4gKiBTZXQgbGlzdCBvZiBtYXRjaFBhdGhzXG4gKlxuICogQHBhcmFtIHtBcnJheTx7cGF0aDogc3RyaW5nLCBtYXRjaFBhdGg6IHN0cmluZ30+fSB2YWx1ZSBjb2xsZWN0aW9uIG9mIG1hdGNoUGF0aHNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldE1hdGNoUGF0aHMgPSB2YWx1ZSA9PiB7XG4gIG1hdGNoUGF0aHMgPSB2YWx1ZVxufVxuXG4vKipcbiAqIFJldHVybiBhIG1hdGNocGF0aCB1cmxcbiAqIGlmIGBtYXRjaC1wYXRocy5qc29uYCBjb250YWlucyBgeyBcIi9mb28qXCI6IFwiL3BhZ2UxXCIsIC4uLn1gLCB0aGVuXG4gKiBgL2Zvbz9iYXI9ZmFyYCA9PiBgL3BhZ2UxYFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSByYXdQYXRobmFtZSBBIHJhdyBwYXRobmFtZVxuICogQHJldHVybiB7c3RyaW5nfG51bGx9XG4gKi9cbmV4cG9ydCBjb25zdCBmaW5kTWF0Y2hQYXRoID0gcmF3UGF0aG5hbWUgPT4ge1xuICBjb25zdCB0cmltbWVkUGF0aG5hbWUgPSBjbGVhblBhdGgocmF3UGF0aG5hbWUpXG5cbiAgY29uc3QgcGlja1BhdGhzID0gbWF0Y2hQYXRocy5tYXAoKHsgcGF0aCwgbWF0Y2hQYXRoIH0pID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgcGF0aDogbWF0Y2hQYXRoLFxuICAgICAgb3JpZ2luYWxQYXRoOiBwYXRoLFxuICAgIH1cbiAgfSlcblxuICBjb25zdCBwYXRoID0gcGljayhwaWNrUGF0aHMsIHRyaW1tZWRQYXRobmFtZSlcblxuICBpZiAocGF0aCkge1xuICAgIHJldHVybiBub3JtYWxpemVQYWdlUGF0aChwYXRoLnJvdXRlLm9yaWdpbmFsUGF0aClcbiAgfVxuXG4gIHJldHVybiBudWxsXG59XG5cbi8qKlxuICogUmV0dXJuIGEgbWF0Y2hwYXRoIHBhcmFtcyBmcm9tIHJlYWNoL3JvdXRlciBydWxlc1xuICogaWYgYG1hdGNoLXBhdGhzLmpzb25gIGNvbnRhaW5zIGB7IFwiOmJhci8qZm9vXCIgfWAsIGFuZCB0aGUgcGF0aCBpcyAvYmF6L3phei96b29cbiAqIHRoZW4gaXQgcmV0dXJuc1xuICogIHsgYmFyOiBiYXosIGZvbzogemF6L3pvbyB9XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHJhd1BhdGhuYW1lIEEgcmF3IHBhdGhuYW1lXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBjb25zdCBncmFiTWF0Y2hQYXJhbXMgPSByYXdQYXRobmFtZSA9PiB7XG4gIGNvbnN0IHRyaW1tZWRQYXRobmFtZSA9IGNsZWFuUGF0aChyYXdQYXRobmFtZSlcblxuICBjb25zdCBwaWNrUGF0aHMgPSBtYXRjaFBhdGhzLm1hcCgoeyBwYXRoLCBtYXRjaFBhdGggfSkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBwYXRoOiBtYXRjaFBhdGgsXG4gICAgICBvcmlnaW5hbFBhdGg6IHBhdGgsXG4gICAgfVxuICB9KVxuXG4gIGNvbnN0IHBhdGggPSBwaWNrKHBpY2tQYXRocywgdHJpbW1lZFBhdGhuYW1lKVxuXG4gIGlmIChwYXRoKSB7XG4gICAgcmV0dXJuIHBhdGgucGFyYW1zXG4gIH1cblxuICByZXR1cm4ge31cbn1cblxuLy8gR2l2ZW4gYSByYXcgVVJMIHBhdGgsIHJldHVybnMgdGhlIGNsZWFuZWQgdmVyc2lvbiBvZiBpdCAodHJpbSBvZmZcbi8vIGAjYCBhbmQgcXVlcnkgcGFyYW1zKSwgb3IgaWYgaXQgbWF0Y2hlcyBhbiBlbnRyeSBpblxuLy8gYG1hdGNoLXBhdGhzLmpzb25gLCBpdHMgbWF0Y2hlZCBwYXRoIGlzIHJldHVybmVkXG4vL1xuLy8gRS5nLiBgL2Zvbz9iYXI9ZmFyYCA9PiBgL2Zvb2Bcbi8vXG4vLyBPciBpZiBgbWF0Y2gtcGF0aHMuanNvbmAgY29udGFpbnMgYHsgXCIvZm9vKlwiOiBcIi9wYWdlMVwiLCAuLi59YCwgdGhlblxuLy8gYC9mb28/YmFyPWZhcmAgPT4gYC9wYWdlMWBcbmV4cG9ydCBjb25zdCBmaW5kUGF0aCA9IHJhd1BhdGhuYW1lID0+IHtcbiAgY29uc3QgdHJpbW1lZFBhdGhuYW1lID0gdHJpbVBhdGhuYW1lKGFic29sdXRpZnkocmF3UGF0aG5hbWUpKVxuICBpZiAocGF0aENhY2hlLmhhcyh0cmltbWVkUGF0aG5hbWUpKSB7XG4gICAgcmV0dXJuIHBhdGhDYWNoZS5nZXQodHJpbW1lZFBhdGhuYW1lKVxuICB9XG5cbiAgY29uc3QgcmVkaXJlY3QgPSBtYXliZUdldEJyb3dzZXJSZWRpcmVjdChyYXdQYXRobmFtZSlcbiAgaWYgKHJlZGlyZWN0KSB7XG4gICAgcmV0dXJuIGZpbmRQYXRoKHJlZGlyZWN0LnRvUGF0aClcbiAgfVxuXG4gIGxldCBmb3VuZFBhdGggPSBmaW5kTWF0Y2hQYXRoKHRyaW1tZWRQYXRobmFtZSlcblxuICBpZiAoIWZvdW5kUGF0aCkge1xuICAgIGZvdW5kUGF0aCA9IGNsZWFuUGF0aChyYXdQYXRobmFtZSlcbiAgfVxuXG4gIHBhdGhDYWNoZS5zZXQodHJpbW1lZFBhdGhuYW1lLCBmb3VuZFBhdGgpXG5cbiAgcmV0dXJuIGZvdW5kUGF0aFxufVxuXG4vKipcbiAqIENsZWFuIGEgdXJsIGFuZCBjb252ZXJ0cyAvaW5kZXguaHRtbCA9PiAvXG4gKiBFLmcuIGAvZm9vP2Jhcj1mYXJgID0+IGAvZm9vYFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSByYXdQYXRobmFtZSBBIHJhdyBwYXRobmFtZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgY29uc3QgY2xlYW5QYXRoID0gcmF3UGF0aG5hbWUgPT4ge1xuICBjb25zdCB0cmltbWVkUGF0aG5hbWUgPSB0cmltUGF0aG5hbWUoYWJzb2x1dGlmeShyYXdQYXRobmFtZSkpXG5cbiAgbGV0IGZvdW5kUGF0aCA9IHRyaW1tZWRQYXRobmFtZVxuICBpZiAoZm91bmRQYXRoID09PSBgL2luZGV4Lmh0bWxgKSB7XG4gICAgZm91bmRQYXRoID0gYC9gXG4gIH1cblxuICBmb3VuZFBhdGggPSBub3JtYWxpemVQYWdlUGF0aChmb3VuZFBhdGgpXG5cbiAgcmV0dXJuIGZvdW5kUGF0aFxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2257\n')},5444:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Link": function() { return /* reexport safe */ gatsby_link__WEBPACK_IMPORTED_MODULE_1__.ZP; },\n/* harmony export */ "withAssetPrefix": function() { return /* reexport safe */ gatsby_link__WEBPACK_IMPORTED_MODULE_1__.mc; },\n/* harmony export */ "withPrefix": function() { return /* reexport safe */ gatsby_link__WEBPACK_IMPORTED_MODULE_1__.dq; },\n/* harmony export */ "graphql": function() { return /* binding */ graphql; },\n/* harmony export */ "parsePath": function() { return /* reexport safe */ gatsby_link__WEBPACK_IMPORTED_MODULE_1__.cP; },\n/* harmony export */ "navigate": function() { return /* reexport safe */ gatsby_link__WEBPACK_IMPORTED_MODULE_1__.c4; },\n/* harmony export */ "useScrollRestoration": function() { return /* reexport safe */ gatsby_react_router_scroll__WEBPACK_IMPORTED_MODULE_2__.p2; },\n/* harmony export */ "StaticQueryContext": function() { return /* binding */ StaticQueryContext; },\n/* harmony export */ "StaticQuery": function() { return /* binding */ StaticQuery; },\n/* harmony export */ "PageRenderer": function() { return /* reexport default from dynamic */ _public_page_renderer__WEBPACK_IMPORTED_MODULE_3___default.a; },\n/* harmony export */ "useStaticQuery": function() { return /* binding */ useStaticQuery; },\n/* harmony export */ "prefetchPathname": function() { return /* binding */ prefetchPathname; }\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7294);\n/* harmony import */ var gatsby_link__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(8037);\n/* harmony import */ var gatsby_react_router_scroll__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(9679);\n/* harmony import */ var _public_page_renderer__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(861);\n/* harmony import */ var _public_page_renderer__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_public_page_renderer__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _loader__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(8741);\nvar prefetchPathname=_loader__WEBPACK_IMPORTED_MODULE_4__/* .default.enqueue */ .ZP.enqueue;var StaticQueryContext=/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext({});function StaticQueryDataRenderer(_ref){var staticQueryData=_ref.staticQueryData,data=_ref.data,query=_ref.query,render=_ref.render;var finalData=data?data.data:staticQueryData[query]&&staticQueryData[query].data;return/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment,null,finalData&&render(finalData),!finalData&&/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("div",null,"Loading (StaticQuery)"));}var StaticQuery=function StaticQuery(props){var data=props.data,query=props.query,render=props.render,children=props.children;return/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(StaticQueryContext.Consumer,null,function(staticQueryData){return/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(StaticQueryDataRenderer,{data:data,query:query,render:render||children,staticQueryData:staticQueryData});});};var useStaticQuery=function useStaticQuery(query){var _context$query;if(typeof react__WEBPACK_IMPORTED_MODULE_0__.useContext!=="function"&&"production"==="development"){throw new Error("You\'re likely using a version of React that doesn\'t support Hooks\\n"+"Please update React and ReactDOM to 16.8.0 or later to use the useStaticQuery hook.");}var context=react__WEBPACK_IMPORTED_MODULE_0__.useContext(StaticQueryContext);// query is a stringified number like `3303882` when wrapped with graphql, If a user forgets\n// to wrap the query in a grqphql, then casting it to a Number results in `NaN` allowing us to\n// catch the misuse of the API and give proper direction\nif(isNaN(Number(query))){throw new Error("useStaticQuery was called with a string but expects to be called using `graphql`. Try this:\\n\\nimport { useStaticQuery, graphql } from \'gatsby\';\\n\\nuseStaticQuery(graphql`"+query+"`);\\n");}if((_context$query=context[query])!==null&&_context$query!==void 0&&_context$query.data){return context[query].data;}else{throw new Error("The result of this StaticQuery could not be fetched.\\n\\n"+"This is likely a bug in Gatsby and if refreshing the page does not fix it, "+"please open an issue in https://github.com/gatsbyjs/gatsby/issues");}};function graphql(){throw new Error("It appears like Gatsby is misconfigured. Gatsby related `graphql` calls "+"are supposed to only be evaluated at compile time, and then compiled away. "+"Unfortunately, something went wrong and the query was left in the compiled code.\\n\\n"+"Unless your site has a complex or custom babel/Gatsby configuration this is likely a bug in Gatsby.");}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uLy5jYWNoZS9nYXRzYnktYnJvd3Nlci1lbnRyeS5qcz81OWJjIl0sIm5hbWVzIjpbInByZWZldGNoUGF0aG5hbWUiLCJsb2FkZXIiLCJTdGF0aWNRdWVyeUNvbnRleHQiLCJSZWFjdCIsIlN0YXRpY1F1ZXJ5RGF0YVJlbmRlcmVyIiwic3RhdGljUXVlcnlEYXRhIiwiZGF0YSIsInF1ZXJ5IiwicmVuZGVyIiwiZmluYWxEYXRhIiwiU3RhdGljUXVlcnkiLCJwcm9wcyIsImNoaWxkcmVuIiwidXNlU3RhdGljUXVlcnkiLCJwcm9jZXNzIiwiRXJyb3IiLCJjb250ZXh0IiwiaXNOYU4iLCJOdW1iZXIiLCJncmFwaHFsIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFlQSxHQUFNQSxpQkFBZ0IsQ0FBR0Msc0VBQXpCLENBRUEsR0FBTUMsbUJBQWtCLGNBQUdDLGdEQUFBLENBQW9CLEVBQXBCLENBQTNCLENBRUEsUUFBU0Msd0JBQVQsTUFBMkUsSUFBeENDLGdCQUF3QyxNQUF4Q0EsZUFBd0MsQ0FBdkJDLElBQXVCLE1BQXZCQSxJQUF1QixDQUFqQkMsS0FBaUIsTUFBakJBLEtBQWlCLENBQVZDLE1BQVUsTUFBVkEsTUFBVSxDQUN6RSxHQUFNQyxVQUFTLENBQUdILElBQUksQ0FDbEJBLElBQUksQ0FBQ0EsSUFEYSxDQUVsQkQsZUFBZSxDQUFDRSxLQUFELENBQWYsRUFBMEJGLGVBQWUsQ0FBQ0UsS0FBRCxDQUFmLENBQXVCRCxJQUZyRCxDQUlBLG1CQUNFLGlEQUFDLDJDQUFELE1BQ0dHLFNBQVMsRUFBSUQsTUFBTSxDQUFDQyxTQUFELENBRHRCLENBRUcsQ0FBQ0EsU0FBRCxlQUFjLG9GQUZqQixDQURGLENBTUQsQ0FFRCxHQUFNQyxZQUFXLENBQUcsUUFBZEEsWUFBYyxDQUFBQyxLQUFLLENBQUksQ0FDM0IsR0FBUUwsS0FBUixDQUEwQ0ssS0FBMUMsQ0FBUUwsSUFBUixDQUFjQyxLQUFkLENBQTBDSSxLQUExQyxDQUFjSixLQUFkLENBQXFCQyxNQUFyQixDQUEwQ0csS0FBMUMsQ0FBcUJILE1BQXJCLENBQTZCSSxRQUE3QixDQUEwQ0QsS0FBMUMsQ0FBNkJDLFFBQTdCLENBRUEsbUJBQ0UsaURBQUMsa0JBQUQsQ0FBb0IsUUFBcEIsTUFDRyxTQUFBUCxlQUFlLHFCQUNkLGlEQUFDLHVCQUFELEVBQ0UsSUFBSSxDQUFFQyxJQURSLENBRUUsS0FBSyxDQUFFQyxLQUZULENBR0UsTUFBTSxDQUFFQyxNQUFNLEVBQUlJLFFBSHBCLENBSUUsZUFBZSxDQUFFUCxlQUpuQixFQURjLEVBRGxCLENBREYsQ0FZRCxDQWZELENBaUJBLEdBQU1RLGVBQWMsQ0FBRyxRQUFqQkEsZUFBaUIsQ0FBQU4sS0FBSyxDQUFJLG9CQUM5QixHQUNFLE1BQU9KLDhDQUFQLGVBQ0FXLFlBQUEsZ0JBRkYsQ0FHRSxDQUNBLEtBQU0sSUFBSUMsTUFBSixDQUNKLDJKQURJLENBQU4sQ0FJRCxDQUNELEdBQU1DLFFBQU8sQ0FBR2IsNkNBQUEsQ0FBaUJELGtCQUFqQixDQUFoQixDQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUllLEtBQUssQ0FBQ0MsTUFBTSxDQUFDWCxLQUFELENBQVAsQ0FBVCxDQUEwQixDQUN4QixLQUFNLElBQUlRLE1BQUosK0tBSWdCUixLQUpoQixTQUFOLENBTUQsQ0FFRCxtQkFBSVMsT0FBTyxDQUFDVCxLQUFELENBQVgsbUNBQUksZUFBZ0JELElBQXBCLENBQTBCLENBQ3hCLE1BQU9VLFFBQU8sQ0FBQ1QsS0FBRCxDQUFQLENBQWVELElBQXRCLENBQ0QsQ0FGRCxJQUVPLENBQ0wsS0FBTSxJQUFJUyxNQUFKLENBQ0osNE1BREksQ0FBTixDQUtELENBQ0YsQ0FqQ0QsQ0EwQ0EsUUFBU0ksUUFBVCxFQUFtQixDQUNqQixLQUFNLElBQUlKLE1BQUosQ0FDSixxVkFESSxDQUFOLENBTUQiLCJmaWxlIjoiNTQ0NC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiXG5pbXBvcnQgTGluaywge1xuICB3aXRoUHJlZml4LFxuICB3aXRoQXNzZXRQcmVmaXgsXG4gIG5hdmlnYXRlLFxuICBwdXNoLFxuICByZXBsYWNlLFxuICBuYXZpZ2F0ZVRvLFxuICBwYXJzZVBhdGgsXG59IGZyb20gXCJnYXRzYnktbGlua1wiXG5pbXBvcnQgeyB1c2VTY3JvbGxSZXN0b3JhdGlvbiB9IGZyb20gXCJnYXRzYnktcmVhY3Qtcm91dGVyLXNjcm9sbFwiXG5pbXBvcnQgUGFnZVJlbmRlcmVyIGZyb20gXCIuL3B1YmxpYy1wYWdlLXJlbmRlcmVyXCJcbmltcG9ydCBsb2FkZXIgZnJvbSBcIi4vbG9hZGVyXCJcblxuY29uc3QgcHJlZmV0Y2hQYXRobmFtZSA9IGxvYWRlci5lbnF1ZXVlXG5cbmNvbnN0IFN0YXRpY1F1ZXJ5Q29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQoe30pXG5cbmZ1bmN0aW9uIFN0YXRpY1F1ZXJ5RGF0YVJlbmRlcmVyKHsgc3RhdGljUXVlcnlEYXRhLCBkYXRhLCBxdWVyeSwgcmVuZGVyIH0pIHtcbiAgY29uc3QgZmluYWxEYXRhID0gZGF0YVxuICAgID8gZGF0YS5kYXRhXG4gICAgOiBzdGF0aWNRdWVyeURhdGFbcXVlcnldICYmIHN0YXRpY1F1ZXJ5RGF0YVtxdWVyeV0uZGF0YVxuXG4gIHJldHVybiAoXG4gICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAge2ZpbmFsRGF0YSAmJiByZW5kZXIoZmluYWxEYXRhKX1cbiAgICAgIHshZmluYWxEYXRhICYmIDxkaXY+TG9hZGluZyAoU3RhdGljUXVlcnkpPC9kaXY+fVxuICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gIClcbn1cblxuY29uc3QgU3RhdGljUXVlcnkgPSBwcm9wcyA9PiB7XG4gIGNvbnN0IHsgZGF0YSwgcXVlcnksIHJlbmRlciwgY2hpbGRyZW4gfSA9IHByb3BzXG5cbiAgcmV0dXJuIChcbiAgICA8U3RhdGljUXVlcnlDb250ZXh0LkNvbnN1bWVyPlxuICAgICAge3N0YXRpY1F1ZXJ5RGF0YSA9PiAoXG4gICAgICAgIDxTdGF0aWNRdWVyeURhdGFSZW5kZXJlclxuICAgICAgICAgIGRhdGE9e2RhdGF9XG4gICAgICAgICAgcXVlcnk9e3F1ZXJ5fVxuICAgICAgICAgIHJlbmRlcj17cmVuZGVyIHx8IGNoaWxkcmVufVxuICAgICAgICAgIHN0YXRpY1F1ZXJ5RGF0YT17c3RhdGljUXVlcnlEYXRhfVxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICA8L1N0YXRpY1F1ZXJ5Q29udGV4dC5Db25zdW1lcj5cbiAgKVxufVxuXG5jb25zdCB1c2VTdGF0aWNRdWVyeSA9IHF1ZXJ5ID0+IHtcbiAgaWYgKFxuICAgIHR5cGVvZiBSZWFjdC51c2VDb250ZXh0ICE9PSBgZnVuY3Rpb25gICYmXG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IGBkZXZlbG9wbWVudGBcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFlvdSdyZSBsaWtlbHkgdXNpbmcgYSB2ZXJzaW9uIG9mIFJlYWN0IHRoYXQgZG9lc24ndCBzdXBwb3J0IEhvb2tzXFxuYCArXG4gICAgICAgIGBQbGVhc2UgdXBkYXRlIFJlYWN0IGFuZCBSZWFjdERPTSB0byAxNi44LjAgb3IgbGF0ZXIgdG8gdXNlIHRoZSB1c2VTdGF0aWNRdWVyeSBob29rLmBcbiAgICApXG4gIH1cbiAgY29uc3QgY29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoU3RhdGljUXVlcnlDb250ZXh0KVxuXG4gIC8vIHF1ZXJ5IGlzIGEgc3RyaW5naWZpZWQgbnVtYmVyIGxpa2UgYDMzMDM4ODJgIHdoZW4gd3JhcHBlZCB3aXRoIGdyYXBocWwsIElmIGEgdXNlciBmb3JnZXRzXG4gIC8vIHRvIHdyYXAgdGhlIHF1ZXJ5IGluIGEgZ3JxcGhxbCwgdGhlbiBjYXN0aW5nIGl0IHRvIGEgTnVtYmVyIHJlc3VsdHMgaW4gYE5hTmAgYWxsb3dpbmcgdXMgdG9cbiAgLy8gY2F0Y2ggdGhlIG1pc3VzZSBvZiB0aGUgQVBJIGFuZCBnaXZlIHByb3BlciBkaXJlY3Rpb25cbiAgaWYgKGlzTmFOKE51bWJlcihxdWVyeSkpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGB1c2VTdGF0aWNRdWVyeSB3YXMgY2FsbGVkIHdpdGggYSBzdHJpbmcgYnV0IGV4cGVjdHMgdG8gYmUgY2FsbGVkIHVzaW5nIFxcYGdyYXBocWxcXGAuIFRyeSB0aGlzOlxuXG5pbXBvcnQgeyB1c2VTdGF0aWNRdWVyeSwgZ3JhcGhxbCB9IGZyb20gJ2dhdHNieSc7XG5cbnVzZVN0YXRpY1F1ZXJ5KGdyYXBocWxcXGAke3F1ZXJ5fVxcYCk7XG5gKVxuICB9XG5cbiAgaWYgKGNvbnRleHRbcXVlcnldPy5kYXRhKSB7XG4gICAgcmV0dXJuIGNvbnRleHRbcXVlcnldLmRhdGFcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgVGhlIHJlc3VsdCBvZiB0aGlzIFN0YXRpY1F1ZXJ5IGNvdWxkIG5vdCBiZSBmZXRjaGVkLlxcblxcbmAgK1xuICAgICAgICBgVGhpcyBpcyBsaWtlbHkgYSBidWcgaW4gR2F0c2J5IGFuZCBpZiByZWZyZXNoaW5nIHRoZSBwYWdlIGRvZXMgbm90IGZpeCBpdCwgYCArXG4gICAgICAgIGBwbGVhc2Ugb3BlbiBhbiBpc3N1ZSBpbiBodHRwczovL2dpdGh1Yi5jb20vZ2F0c2J5anMvZ2F0c2J5L2lzc3Vlc2BcbiAgICApXG4gIH1cbn1cblxuU3RhdGljUXVlcnkucHJvcFR5cGVzID0ge1xuICBkYXRhOiBQcm9wVHlwZXMub2JqZWN0LFxuICBxdWVyeTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICByZW5kZXI6IFByb3BUeXBlcy5mdW5jLFxuICBjaGlsZHJlbjogUHJvcFR5cGVzLmZ1bmMsXG59XG5cbmZ1bmN0aW9uIGdyYXBocWwoKSB7XG4gIHRocm93IG5ldyBFcnJvcihcbiAgICBgSXQgYXBwZWFycyBsaWtlIEdhdHNieSBpcyBtaXNjb25maWd1cmVkLiBHYXRzYnkgcmVsYXRlZCBcXGBncmFwaHFsXFxgIGNhbGxzIGAgK1xuICAgICAgYGFyZSBzdXBwb3NlZCB0byBvbmx5IGJlIGV2YWx1YXRlZCBhdCBjb21waWxlIHRpbWUsIGFuZCB0aGVuIGNvbXBpbGVkIGF3YXkuIGAgK1xuICAgICAgYFVuZm9ydHVuYXRlbHksIHNvbWV0aGluZyB3ZW50IHdyb25nIGFuZCB0aGUgcXVlcnkgd2FzIGxlZnQgaW4gdGhlIGNvbXBpbGVkIGNvZGUuXFxuXFxuYCArXG4gICAgICBgVW5sZXNzIHlvdXIgc2l0ZSBoYXMgYSBjb21wbGV4IG9yIGN1c3RvbSBiYWJlbC9HYXRzYnkgY29uZmlndXJhdGlvbiB0aGlzIGlzIGxpa2VseSBhIGJ1ZyBpbiBHYXRzYnkuYFxuICApXG59XG5cbmV4cG9ydCB7XG4gIExpbmssXG4gIHdpdGhBc3NldFByZWZpeCxcbiAgd2l0aFByZWZpeCxcbiAgZ3JhcGhxbCxcbiAgcGFyc2VQYXRoLFxuICBuYXZpZ2F0ZSxcbiAgdXNlU2Nyb2xsUmVzdG9yYXRpb24sXG4gIFN0YXRpY1F1ZXJ5Q29udGV4dCxcbiAgU3RhdGljUXVlcnksXG4gIFBhZ2VSZW5kZXJlcixcbiAgdXNlU3RhdGljUXVlcnksXG4gIHByZWZldGNoUGF0aG5hbWUsXG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5444\n')},8741:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n "uQ": function() { return /* binding */ PageResourceStatus; },\n "kL": function() { return /* binding */ ProdLoader; },\n "ZP": function() { return /* binding */ loader; },\n "hs": function() { return /* binding */ getStaticQueryResults; },\n "jN": function() { return /* binding */ publicLoader; },\n "N1": function() { return /* binding */ setLoader; }\n});\n\n// UNUSED EXPORTS: BaseLoader\n\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js\nvar inheritsLoose = __webpack_require__(1788);\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js + 3 modules\nvar toConsumableArray = __webpack_require__(7329);\n;// CONCATENATED MODULE: ./.cache/prefetch.js\nvar support=function support(feature){if(typeof document==="undefined"){return false;}var fakeLink=document.createElement("link");try{if(fakeLink.relList&&typeof fakeLink.relList.supports==="function"){return fakeLink.relList.supports(feature);}}catch(err){return false;}return false;};var linkPrefetchStrategy=function linkPrefetchStrategy(url,options){return new Promise(function(resolve,reject){if(typeof document==="undefined"){reject();return;}var link=document.createElement("link");link.setAttribute("rel","prefetch");link.setAttribute("href",url);Object.keys(options).forEach(function(key){link.setAttribute(key,options[key]);});link.onload=resolve;link.onerror=reject;var parentElement=document.getElementsByTagName("head")[0]||document.getElementsByName("script")[0].parentNode;parentElement.appendChild(link);});};var xhrPrefetchStrategy=function xhrPrefetchStrategy(url){return new Promise(function(resolve,reject){var req=new XMLHttpRequest();req.open("GET",url,true);req.onload=function(){if(req.status===200){resolve();}else{reject();}};req.send(null);});};var supportedPrefetchStrategy=support("prefetch")?linkPrefetchStrategy:xhrPrefetchStrategy;var preFetched={};var prefetch=function prefetch(url,options){return new Promise(function(resolve){if(preFetched[url]){resolve();return;}supportedPrefetchStrategy(url,options).then(function(){resolve();preFetched[url]=true;}).catch(function(){});// 404s are logged to the console anyway\n});};/* harmony default export */ var _cache_prefetch = (prefetch);\n// EXTERNAL MODULE: ./.cache/emitter.js + 1 modules\nvar emitter = __webpack_require__(8110);\n// EXTERNAL MODULE: ./.cache/find-path.js + 1 modules\nvar find_path = __webpack_require__(2257);\n;// CONCATENATED MODULE: ./.cache/loader.js\n/**\n * Available resource loading statuses\n */var PageResourceStatus={/**\n * At least one of critical resources failed to load\n */Error:"error",/**\n * Resources loaded successfully\n */Success:"success"};var preferDefault=function preferDefault(m){return m&&m.default||m;};var stripSurroundingSlashes=function stripSurroundingSlashes(s){s=s[0]==="/"?s.slice(1):s;s=s.endsWith("/")?s.slice(0,-1):s;return s;};var createPageDataUrl=function createPageDataUrl(path){var fixedPath=path==="/"?"index":stripSurroundingSlashes(path);return "/justice40-tool/main"+"/page-data/"+fixedPath+"/page-data.json";};function doFetch(url,method){if(method===void 0){method="GET";}return new Promise(function(resolve,reject){var req=new XMLHttpRequest();req.open(method,url,true);req.onreadystatechange=function(){if(req.readyState==4){resolve(req);}};req.send(null);});}var doesConnectionSupportPrefetch=function doesConnectionSupportPrefetch(){if("connection"in navigator&&typeof navigator.connection!=="undefined"){if((navigator.connection.effectiveType||"").includes("2g")){return false;}if(navigator.connection.saveData){return false;}}return true;};var toPageResources=function toPageResources(pageData,component){if(component===void 0){component=null;}var page={componentChunkName:pageData.componentChunkName,path:pageData.path,webpackCompilationHash:pageData.webpackCompilationHash,matchPath:pageData.matchPath,staticQueryHashes:pageData.staticQueryHashes};return{component:component,json:pageData.result,page:page};};var BaseLoader=/*#__PURE__*/function(){function BaseLoader(loadComponent,matchPaths){this.inFlightNetworkRequests=new Map();// Map of pagePath -> Page. Where Page is an object with: {\n// status: PageResourceStatus.Success || PageResourceStatus.Error,\n// payload: PageResources, // undefined if PageResourceStatus.Error\n// }\n// PageResources is {\n// component,\n// json: pageData.result,\n// page: {\n// componentChunkName,\n// path,\n// webpackCompilationHash,\n// staticQueryHashes\n// },\n// staticQueryResults\n// }\nthis.pageDb=new Map();this.inFlightDb=new Map();this.staticQueryDb={};this.pageDataDb=new Map();this.prefetchTriggered=new Set();this.prefetchCompleted=new Set();this.loadComponent=loadComponent;(0,find_path/* setMatchPaths */.DS)(matchPaths);}var _proto=BaseLoader.prototype;_proto.memoizedGet=function memoizedGet(url){var _this=this;var inFlightPromise=this.inFlightNetworkRequests.get(url);if(!inFlightPromise){inFlightPromise=doFetch(url,"GET");this.inFlightNetworkRequests.set(url,inFlightPromise);}// Prefer duplication with then + catch over .finally to prevent problems in ie11 + firefox\nreturn inFlightPromise.then(function(response){_this.inFlightNetworkRequests.delete(url);return response;}).catch(function(err){_this.inFlightNetworkRequests.delete(url);throw err;});};_proto.setApiRunner=function setApiRunner(apiRunner){this.apiRunner=apiRunner;this.prefetchDisabled=apiRunner("disableCorePrefetching").some(function(a){return a;});};_proto.fetchPageDataJson=function fetchPageDataJson(loadObj){var _this2=this;var pagePath=loadObj.pagePath,_loadObj$retries=loadObj.retries,retries=_loadObj$retries===void 0?0:_loadObj$retries;var url=createPageDataUrl(pagePath);return this.memoizedGet(url).then(function(req){var status=req.status,responseText=req.responseText;// Handle 200\nif(status===200){try{var jsonPayload=JSON.parse(responseText);if(jsonPayload.path===undefined){throw new Error("not a valid pageData response");}return Object.assign(loadObj,{status:PageResourceStatus.Success,payload:jsonPayload});}catch(err){// continue regardless of error\n}}// Handle 404\nif(status===404||status===200){// If the request was for a 404 page and it doesn\'t exist, we\'re done\nif(pagePath==="/404.html"){return Object.assign(loadObj,{status:PageResourceStatus.Error});}// Need some code here to cache the 404 request. In case\n// multiple loadPageDataJsons result in 404s\nreturn _this2.fetchPageDataJson(Object.assign(loadObj,{pagePath:"/404.html",notFound:true}));}// handle 500 response (Unrecoverable)\nif(status===500){return Object.assign(loadObj,{status:PageResourceStatus.Error});}// Handle everything else, including status === 0, and 503s. Should retry\nif(retries<3){return _this2.fetchPageDataJson(Object.assign(loadObj,{retries:retries+1}));}// Retried 3 times already, result is an error.\nreturn Object.assign(loadObj,{status:PageResourceStatus.Error});});};_proto.loadPageDataJson=function loadPageDataJson(rawPath){var _this3=this;var pagePath=(0,find_path/* findPath */.Cj)(rawPath);if(this.pageDataDb.has(pagePath)){var pageData=this.pageDataDb.get(pagePath);if(true){return Promise.resolve(pageData);}}return this.fetchPageDataJson({pagePath:pagePath}).then(function(pageData){_this3.pageDataDb.set(pagePath,pageData);return pageData;});};_proto.findMatchPath=function findMatchPath(rawPath){return (0,find_path/* findMatchPath */.UD)(rawPath);}// TODO check all uses of this and whether they use undefined for page resources not exist\n;_proto.loadPage=function loadPage(rawPath){var _this4=this;var pagePath=(0,find_path/* findPath */.Cj)(rawPath);if(this.pageDb.has(pagePath)){var page=this.pageDb.get(pagePath);if(true){if(page.error){return{error:page.error,status:page.status};}return Promise.resolve(page.payload);}}if(this.inFlightDb.has(pagePath)){return this.inFlightDb.get(pagePath);}var inFlightPromise=Promise.all([this.loadAppData(),this.loadPageDataJson(pagePath)]).then(function(allData){var result=allData[1];if(result.status===PageResourceStatus.Error){return{status:PageResourceStatus.Error};}var pageData=result.payload;var _pageData=pageData,componentChunkName=_pageData.componentChunkName,_pageData$staticQuery=_pageData.staticQueryHashes,staticQueryHashes=_pageData$staticQuery===void 0?[]:_pageData$staticQuery;var finalResult={};var componentChunkPromise=_this4.loadComponent(componentChunkName).then(function(component){finalResult.createdAt=new Date();var pageResources;if(!component||component instanceof Error){finalResult.status=PageResourceStatus.Error;finalResult.error=component;}else{finalResult.status=PageResourceStatus.Success;if(result.notFound===true){finalResult.notFound=true;}pageData=Object.assign(pageData,{webpackCompilationHash:allData[0]?allData[0].webpackCompilationHash:""});pageResources=toPageResources(pageData,component);}// undefined if final result is an error\nreturn pageResources;});var staticQueryBatchPromise=Promise.all(staticQueryHashes.map(function(staticQueryHash){// Check for cache in case this static query result has already been loaded\nif(_this4.staticQueryDb[staticQueryHash]){var jsonPayload=_this4.staticQueryDb[staticQueryHash];return{staticQueryHash:staticQueryHash,jsonPayload:jsonPayload};}return _this4.memoizedGet("/justice40-tool/main"+"/page-data/sq/d/"+staticQueryHash+".json").then(function(req){var jsonPayload=JSON.parse(req.responseText);return{staticQueryHash:staticQueryHash,jsonPayload:jsonPayload};}).catch(function(){throw new Error("We couldn\'t load \\""+"/justice40-tool/main"+"/page-data/sq/d/"+staticQueryHash+".json\\"");});})).then(function(staticQueryResults){var staticQueryResultsMap={};staticQueryResults.forEach(function(_ref){var staticQueryHash=_ref.staticQueryHash,jsonPayload=_ref.jsonPayload;staticQueryResultsMap[staticQueryHash]=jsonPayload;_this4.staticQueryDb[staticQueryHash]=jsonPayload;});return staticQueryResultsMap;});return Promise.all([componentChunkPromise,staticQueryBatchPromise]).then(function(_ref2){var pageResources=_ref2[0],staticQueryResults=_ref2[1];var payload;if(pageResources){payload=Object.assign({},pageResources,{staticQueryResults:staticQueryResults});finalResult.payload=payload;emitter/* default.emit */.Z.emit("onPostLoadPageResources",{page:payload,pageResources:payload});}_this4.pageDb.set(pagePath,finalResult);if(finalResult.error){return{error:finalResult.error,status:finalResult.status};}return payload;})// when static-query fail to load we throw a better error\n.catch(function(err){return{error:err,status:PageResourceStatus.Error};});});inFlightPromise.then(function(){_this4.inFlightDb.delete(pagePath);}).catch(function(error){_this4.inFlightDb.delete(pagePath);throw error;});this.inFlightDb.set(pagePath,inFlightPromise);return inFlightPromise;}// returns undefined if the page does not exists in cache\n;_proto.loadPageSync=function loadPageSync(rawPath,options){if(options===void 0){options={};}var pagePath=(0,find_path/* findPath */.Cj)(rawPath);if(this.pageDb.has(pagePath)){var _options;var pageData=this.pageDb.get(pagePath);if(pageData.payload){return pageData.payload;}if((_options=options)!==null&&_options!==void 0&&_options.withErrorDetails){return{error:pageData.error,status:pageData.status};}}return undefined;};_proto.shouldPrefetch=function shouldPrefetch(pagePath){// Skip prefetching if we know user is on slow or constrained connection\nif(!doesConnectionSupportPrefetch()){return false;}// Check if the page exists.\nif(this.pageDb.has(pagePath)){return false;}return true;};_proto.prefetch=function prefetch(pagePath){var _this5=this;if(!this.shouldPrefetch(pagePath)){return false;}// Tell plugins with custom prefetching logic that they should start\n// prefetching this path.\nif(!this.prefetchTriggered.has(pagePath)){this.apiRunner("onPrefetchPathname",{pathname:pagePath});this.prefetchTriggered.add(pagePath);}// If a plugin has disabled core prefetching, stop now.\nif(this.prefetchDisabled){return false;}var realPath=(0,find_path/* findPath */.Cj)(pagePath);// Todo make doPrefetch logic cacheable\n// eslint-disable-next-line consistent-return\nthis.doPrefetch(realPath).then(function(){if(!_this5.prefetchCompleted.has(pagePath)){_this5.apiRunner("onPostPrefetchPathname",{pathname:pagePath});_this5.prefetchCompleted.add(pagePath);}});return true;};_proto.doPrefetch=function doPrefetch(pagePath){var _this6=this;var pageDataUrl=createPageDataUrl(pagePath);return _cache_prefetch(pageDataUrl,{crossOrigin:"anonymous",as:"fetch"}).then(function(){return(// This was just prefetched, so will return a response from\n// the cache instead of making another request to the server\n_this6.loadPageDataJson(pagePath));});};_proto.hovering=function hovering(rawPath){this.loadPage(rawPath);};_proto.getResourceURLsForPathname=function getResourceURLsForPathname(rawPath){var pagePath=(0,find_path/* findPath */.Cj)(rawPath);var page=this.pageDataDb.get(pagePath);if(page){var pageResources=toPageResources(page.payload);return[].concat((0,toConsumableArray/* default */.Z)(createComponentUrls(pageResources.page.componentChunkName)),[createPageDataUrl(pagePath)]);}else{return null;}};_proto.isPageNotFound=function isPageNotFound(rawPath){var pagePath=(0,find_path/* findPath */.Cj)(rawPath);var page=this.pageDb.get(pagePath);return!page||page.notFound;};_proto.loadAppData=function loadAppData(retries){var _this7=this;if(retries===void 0){retries=0;}return this.memoizedGet("/justice40-tool/main"+"/page-data/app-data.json").then(function(req){var status=req.status,responseText=req.responseText;var appData;if(status!==200&&retries<3){// Retry 3 times incase of non-200 responses\nreturn _this7.loadAppData(retries+1);}// Handle 200\nif(status===200){try{var jsonPayload=JSON.parse(responseText);if(jsonPayload.webpackCompilationHash===undefined){throw new Error("not a valid app-data response");}appData=jsonPayload;}catch(err){// continue regardless of error\n}}return appData;});};return BaseLoader;}();var createComponentUrls=function createComponentUrls(componentChunkName){return(window.___chunkMapping[componentChunkName]||[]).map(function(chunk){return "/justice40-tool/main"+chunk;});};var ProdLoader=/*#__PURE__*/function(_BaseLoader){(0,inheritsLoose/* default */.Z)(ProdLoader,_BaseLoader);function ProdLoader(asyncRequires,matchPaths){var loadComponent=function loadComponent(chunkName){if(!asyncRequires.components[chunkName]){throw new Error("We couldn\'t find the correct component chunk with the name "+chunkName);}return asyncRequires.components[chunkName]().then(preferDefault)// loader will handle the case when component is error\n.catch(function(err){return err;});};return _BaseLoader.call(this,loadComponent,matchPaths)||this;}var _proto2=ProdLoader.prototype;_proto2.doPrefetch=function doPrefetch(pagePath){return _BaseLoader.prototype.doPrefetch.call(this,pagePath).then(function(result){if(result.status!==PageResourceStatus.Success){return Promise.resolve();}var pageData=result.payload;var chunkName=pageData.componentChunkName;var componentUrls=createComponentUrls(chunkName);return Promise.all(componentUrls.map(_cache_prefetch)).then(function(){return pageData;});});};_proto2.loadPageDataJson=function loadPageDataJson(rawPath){return _BaseLoader.prototype.loadPageDataJson.call(this,rawPath).then(function(data){if(data.notFound){// check if html file exist using HEAD request:\n// if it does we should navigate to it instead of showing 404\nreturn doFetch(rawPath,"HEAD").then(function(req){if(req.status===200){// page (.html file) actually exist (or we asked for 404 )\n// returning page resources status as errored to trigger\n// regular browser navigation to given page\nreturn{status:PageResourceStatus.Error};}// if HEAD request wasn\'t 200, return notFound result\n// and show 404 page\nreturn data;});}return data;});};return ProdLoader;}(BaseLoader);var instance;var setLoader=function setLoader(_loader){instance=_loader;};var publicLoader={enqueue:function enqueue(rawPath){return instance.prefetch(rawPath);},// Real methods\ngetResourceURLsForPathname:function getResourceURLsForPathname(rawPath){return instance.getResourceURLsForPathname(rawPath);},loadPage:function loadPage(rawPath){return instance.loadPage(rawPath);},// TODO add deprecation to v4 so people use withErrorDetails and then we can remove in v5 and change default behaviour\nloadPageSync:function loadPageSync(rawPath,options){if(options===void 0){options={};}return instance.loadPageSync(rawPath,options);},prefetch:function prefetch(rawPath){return instance.prefetch(rawPath);},isPageNotFound:function isPageNotFound(rawPath){return instance.isPageNotFound(rawPath);},hovering:function hovering(rawPath){return instance.hovering(rawPath);},loadAppData:function loadAppData(){return instance.loadAppData();}};/* harmony default export */ var loader = (publicLoader);function getStaticQueryResults(){if(instance){return instance.staticQueryDb;}else{return{};}}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uLy5jYWNoZS9wcmVmZXRjaC5qcz9hOTNiIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vLmNhY2hlL2xvYWRlci5qcz83YTYxIl0sIm5hbWVzIjpbInN1cHBvcnQiLCJmZWF0dXJlIiwiZG9jdW1lbnQiLCJmYWtlTGluayIsImNyZWF0ZUVsZW1lbnQiLCJyZWxMaXN0Iiwic3VwcG9ydHMiLCJlcnIiLCJsaW5rUHJlZmV0Y2hTdHJhdGVneSIsInVybCIsIm9wdGlvbnMiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImxpbmsiLCJzZXRBdHRyaWJ1dGUiLCJPYmplY3QiLCJrZXlzIiwiZm9yRWFjaCIsImtleSIsIm9ubG9hZCIsIm9uZXJyb3IiLCJwYXJlbnRFbGVtZW50IiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJnZXRFbGVtZW50c0J5TmFtZSIsInBhcmVudE5vZGUiLCJhcHBlbmRDaGlsZCIsInhoclByZWZldGNoU3RyYXRlZ3kiLCJyZXEiLCJYTUxIdHRwUmVxdWVzdCIsIm9wZW4iLCJzdGF0dXMiLCJzZW5kIiwic3VwcG9ydGVkUHJlZmV0Y2hTdHJhdGVneSIsInByZUZldGNoZWQiLCJwcmVmZXRjaCIsInRoZW4iLCJjYXRjaCIsIlBhZ2VSZXNvdXJjZVN0YXR1cyIsIkVycm9yIiwiU3VjY2VzcyIsInByZWZlckRlZmF1bHQiLCJtIiwiZGVmYXVsdCIsInN0cmlwU3Vycm91bmRpbmdTbGFzaGVzIiwicyIsInNsaWNlIiwiZW5kc1dpdGgiLCJjcmVhdGVQYWdlRGF0YVVybCIsInBhdGgiLCJmaXhlZFBhdGgiLCJfX1BBVEhfUFJFRklYX18iLCJkb0ZldGNoIiwibWV0aG9kIiwib25yZWFkeXN0YXRlY2hhbmdlIiwicmVhZHlTdGF0ZSIsImRvZXNDb25uZWN0aW9uU3VwcG9ydFByZWZldGNoIiwibmF2aWdhdG9yIiwiY29ubmVjdGlvbiIsImVmZmVjdGl2ZVR5cGUiLCJpbmNsdWRlcyIsInNhdmVEYXRhIiwidG9QYWdlUmVzb3VyY2VzIiwicGFnZURhdGEiLCJjb21wb25lbnQiLCJwYWdlIiwiY29tcG9uZW50Q2h1bmtOYW1lIiwid2VicGFja0NvbXBpbGF0aW9uSGFzaCIsIm1hdGNoUGF0aCIsInN0YXRpY1F1ZXJ5SGFzaGVzIiwianNvbiIsInJlc3VsdCIsIkJhc2VMb2FkZXIiLCJsb2FkQ29tcG9uZW50IiwibWF0Y2hQYXRocyIsImluRmxpZ2h0TmV0d29ya1JlcXVlc3RzIiwiTWFwIiwicGFnZURiIiwiaW5GbGlnaHREYiIsInN0YXRpY1F1ZXJ5RGIiLCJwYWdlRGF0YURiIiwicHJlZmV0Y2hUcmlnZ2VyZWQiLCJTZXQiLCJwcmVmZXRjaENvbXBsZXRlZCIsInNldE1hdGNoUGF0aHMiLCJtZW1vaXplZEdldCIsImluRmxpZ2h0UHJvbWlzZSIsImdldCIsInNldCIsInJlc3BvbnNlIiwiZGVsZXRlIiwic2V0QXBpUnVubmVyIiwiYXBpUnVubmVyIiwicHJlZmV0Y2hEaXNhYmxlZCIsInNvbWUiLCJhIiwiZmV0Y2hQYWdlRGF0YUpzb24iLCJsb2FkT2JqIiwicGFnZVBhdGgiLCJyZXRyaWVzIiwicmVzcG9uc2VUZXh0IiwianNvblBheWxvYWQiLCJKU09OIiwicGFyc2UiLCJ1bmRlZmluZWQiLCJhc3NpZ24iLCJwYXlsb2FkIiwibm90Rm91bmQiLCJsb2FkUGFnZURhdGFKc29uIiwicmF3UGF0aCIsImZpbmRQYXRoIiwiaGFzIiwicHJvY2VzcyIsImZpbmRNYXRjaFBhdGgiLCJsb2FkUGFnZSIsImVycm9yIiwiYWxsIiwibG9hZEFwcERhdGEiLCJhbGxEYXRhIiwiZmluYWxSZXN1bHQiLCJjb21wb25lbnRDaHVua1Byb21pc2UiLCJjcmVhdGVkQXQiLCJEYXRlIiwicGFnZVJlc291cmNlcyIsInN0YXRpY1F1ZXJ5QmF0Y2hQcm9taXNlIiwibWFwIiwic3RhdGljUXVlcnlIYXNoIiwic3RhdGljUXVlcnlSZXN1bHRzIiwic3RhdGljUXVlcnlSZXN1bHRzTWFwIiwiZW1pdHRlciIsImxvYWRQYWdlU3luYyIsIndpdGhFcnJvckRldGFpbHMiLCJzaG91bGRQcmVmZXRjaCIsInBhdGhuYW1lIiwiYWRkIiwicmVhbFBhdGgiLCJkb1ByZWZldGNoIiwicGFnZURhdGFVcmwiLCJwcmVmZXRjaEhlbHBlciIsImNyb3NzT3JpZ2luIiwiYXMiLCJob3ZlcmluZyIsImdldFJlc291cmNlVVJMc0ZvclBhdGhuYW1lIiwiY3JlYXRlQ29tcG9uZW50VXJscyIsImlzUGFnZU5vdEZvdW5kIiwiYXBwRGF0YSIsIndpbmRvdyIsIl9fX2NodW5rTWFwcGluZyIsImNodW5rIiwiUHJvZExvYWRlciIsImFzeW5jUmVxdWlyZXMiLCJjaHVua05hbWUiLCJjb21wb25lbnRzIiwiY29tcG9uZW50VXJscyIsImRhdGEiLCJpbnN0YW5jZSIsInNldExvYWRlciIsIl9sb2FkZXIiLCJwdWJsaWNMb2FkZXIiLCJlbnF1ZXVlIiwiZ2V0U3RhdGljUXVlcnlSZXN1bHRzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxHQUFNQSxRQUFPLENBQUcsUUFBVkEsUUFBVSxDQUFVQyxPQUFWLENBQW1CLENBQ2pDLEdBQUksTUFBT0MsU0FBUCxjQUFKLENBQXFDLENBQ25DLE1BQU8sTUFBUCxDQUNELENBQ0QsR0FBTUMsU0FBUSxDQUFHRCxRQUFRLENBQUNFLGFBQVQsUUFBakIsQ0FDQSxHQUFJLENBQ0YsR0FBSUQsUUFBUSxDQUFDRSxPQUFULEVBQW9CLE1BQU9GLFNBQVEsQ0FBQ0UsT0FBVCxDQUFpQkMsUUFBeEIsYUFBeEIsQ0FBeUUsQ0FDdkUsTUFBT0gsU0FBUSxDQUFDRSxPQUFULENBQWlCQyxRQUFqQixDQUEwQkwsT0FBMUIsQ0FBUCxDQUNELENBQ0YsQ0FBQyxNQUFPTSxHQUFQLENBQVksQ0FDWixNQUFPLE1BQVAsQ0FDRCxDQUNELE1BQU8sTUFBUCxDQUNELENBYkQsQ0FlQSxHQUFNQyxxQkFBb0IsQ0FBRyxRQUF2QkEscUJBQXVCLENBQVVDLEdBQVYsQ0FBZUMsT0FBZixDQUF3QixDQUNuRCxNQUFPLElB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LENBQ3RDLEdBQUlMLFFBQUosQ0FBYyxDQUNaLE1BQU9BLFNBQVEsQ0FBQzVFLGFBQWhCLENBQ0QsQ0FGRCxJQUVPLENBQ0wsTUFBTyxFQUFQLENBQ0QsQ0FDRiIsImZpbGUiOiI4NzQxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3Qgc3VwcG9ydCA9IGZ1bmN0aW9uIChmZWF0dXJlKSB7XG4gIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09IGB1bmRlZmluZWRgKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgY29uc3QgZmFrZUxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGBsaW5rYClcbiAgdHJ5IHtcbiAgICBpZiAoZmFrZUxpbmsucmVsTGlzdCAmJiB0eXBlb2YgZmFrZUxpbmsucmVsTGlzdC5zdXBwb3J0cyA9PT0gYGZ1bmN0aW9uYCkge1xuICAgICAgcmV0dXJuIGZha2VMaW5rLnJlbExpc3Quc3VwcG9ydHMoZmVhdHVyZSlcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG5jb25zdCBsaW5rUHJlZmV0Y2hTdHJhdGVneSA9IGZ1bmN0aW9uICh1cmwsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSBgdW5kZWZpbmVkYCkge1xuICAgICAgcmVqZWN0KClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGBsaW5rYClcbiAgICBsaW5rLnNldEF0dHJpYnV0ZShgcmVsYCwgYHByZWZldGNoYClcbiAgICBsaW5rLnNldEF0dHJpYnV0ZShgaHJlZmAsIHVybClcblxuICAgIE9iamVjdC5rZXlzKG9wdGlvbnMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGxpbmsuc2V0QXR0cmlidXRlKGtleSwgb3B0aW9uc1trZXldKVxuICAgIH0pXG5cbiAgICBsaW5rLm9ubG9hZCA9IHJlc29sdmVcbiAgICBsaW5rLm9uZXJyb3IgPSByZWplY3RcblxuICAgIGNvbnN0IHBhcmVudEVsZW1lbnQgPVxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoYGhlYWRgKVswXSB8fFxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoYHNjcmlwdGApWzBdLnBhcmVudE5vZGVcbiAgICBwYXJlbnRFbGVtZW50LmFwcGVuZENoaWxkKGxpbmspXG4gIH0pXG59XG5cbmNvbnN0IHhoclByZWZldGNoU3RyYXRlZ3kgPSBmdW5jdGlvbiAodXJsKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgcmVxID0gbmV3IFhNTEh0dHBSZXF1ZXN0KClcbiAgICByZXEub3BlbihgR0VUYCwgdXJsLCB0cnVlKVxuXG4gICAgcmVxLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgIGlmIChyZXEuc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgcmVzb2x2ZSgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWplY3QoKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJlcS5zZW5kKG51bGwpXG4gIH0pXG59XG5cbmNvbnN0IHN1cHBvcnRlZFByZWZldGNoU3RyYXRlZ3kgPSBzdXBwb3J0KGBwcmVmZXRjaGApXG4gID8gbGlua1ByZWZldGNoU3RyYXRlZ3lcbiAgOiB4aHJQcmVmZXRjaFN0cmF0ZWd5XG5cbmNvbnN0IHByZUZldGNoZWQgPSB7fVxuXG5jb25zdCBwcmVmZXRjaCA9IGZ1bmN0aW9uICh1cmwsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgIGlmIChwcmVGZXRjaGVkW3VybF0pIHtcbiAgICAgIHJlc29sdmUoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgc3VwcG9ydGVkUHJlZmV0Y2hTdHJhdGVneSh1cmwsIG9wdGlvbnMpXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIHJlc29sdmUoKVxuICAgICAgICBwcmVGZXRjaGVkW3VybF0gPSB0cnVlXG4gICAgICB9KVxuICAgICAgLmNhdGNoKCgpID0+IHt9KSAvLyA0MDRzIGFyZSBsb2dnZWQgdG8gdGhlIGNvbnNvbGUgYW55d2F5XG4gIH0pXG59XG5cbmV4cG9ydCBkZWZhdWx0IHByZWZldGNoXG4iLCJpbXBvcnQgcHJlZmV0Y2hIZWxwZXIgZnJvbSBcIi4vcHJlZmV0Y2hcIlxuaW1wb3J0IGVtaXR0ZXIgZnJvbSBcIi4vZW1pdHRlclwiXG5pbXBvcnQgeyBzZXRNYXRjaFBhdGhzLCBmaW5kUGF0aCwgZmluZE1hdGNoUGF0aCB9IGZyb20gXCIuL2ZpbmQtcGF0aFwiXG5cbi8qKlxuICogQXZhaWxhYmxlIHJlc291cmNlIGxvYWRpbmcgc3RhdHVzZXNcbiAqL1xuZXhwb3J0IGNvbnN0IFBhZ2VSZXNvdXJjZVN0YXR1cyA9IHtcbiAgLyoqXG4gICAqIEF0IGxlYXN0IG9uZSBvZiBjcml0aWNhbCByZXNvdXJjZXMgZmFpbGVkIHRvIGxvYWRcbiAgICovXG4gIEVycm9yOiBgZXJyb3JgLFxuICAvKipcbiAgICogUmVzb3VyY2VzIGxvYWRlZCBzdWNjZXNzZnVsbHlcbiAgICovXG4gIFN1Y2Nlc3M6IGBzdWNjZXNzYCxcbn1cblxuY29uc3QgcHJlZmVyRGVmYXVsdCA9IG0gPT4gKG0gJiYgbS5kZWZhdWx0KSB8fCBtXG5cbmNvbnN0IHN0cmlwU3Vycm91bmRpbmdTbGFzaGVzID0gcyA9PiB7XG4gIHMgPSBzWzBdID09PSBgL2AgPyBzLnNsaWNlKDEpIDogc1xuICBzID0gcy5lbmRzV2l0aChgL2ApID8gcy5zbGljZSgwLCAtMSkgOiBzXG4gIHJldHVybiBzXG59XG5cbmNvbnN0IGNyZWF0ZVBhZ2VEYXRhVXJsID0gcGF0aCA9PiB7XG4gIGNvbnN0IGZpeGVkUGF0aCA9IHBhdGggPT09IGAvYCA/IGBpbmRleGAgOiBzdHJpcFN1cnJvdW5kaW5nU2xhc2hlcyhwYXRoKVxuICByZXR1cm4gYCR7X19QQVRIX1BSRUZJWF9ffS9wYWdlLWRhdGEvJHtmaXhlZFBhdGh9L3BhZ2UtZGF0YS5qc29uYFxufVxuXG5mdW5jdGlvbiBkb0ZldGNoKHVybCwgbWV0aG9kID0gYEdFVGApIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCByZXEgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKVxuICAgIHJlcS5vcGVuKG1ldGhvZCwgdXJsLCB0cnVlKVxuICAgIHJlcS5vbnJlYWR5c3RhdGVjaGFuZ2UgPSAoKSA9PiB7XG4gICAgICBpZiAocmVxLnJlYWR5U3RhdGUgPT0gNCkge1xuICAgICAgICByZXNvbHZlKHJlcSlcbiAgICAgIH1cbiAgICB9XG4gICAgcmVxLnNlbmQobnVsbClcbiAgfSlcbn1cblxuY29uc3QgZG9lc0Nvbm5lY3Rpb25TdXBwb3J0UHJlZmV0Y2ggPSAoKSA9PiB7XG4gIGlmIChcbiAgICBgY29ubmVjdGlvbmAgaW4gbmF2aWdhdG9yICYmXG4gICAgdHlwZW9mIG5hdmlnYXRvci5jb25uZWN0aW9uICE9PSBgdW5kZWZpbmVkYFxuICApIHtcbiAgICBpZiAoKG5hdmlnYXRvci5jb25uZWN0aW9uLmVmZmVjdGl2ZVR5cGUgfHwgYGApLmluY2x1ZGVzKGAyZ2ApKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgaWYgKG5hdmlnYXRvci5jb25uZWN0aW9uLnNhdmVEYXRhKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuY29uc3QgdG9QYWdlUmVzb3VyY2VzID0gKHBhZ2VEYXRhLCBjb21wb25lbnQgPSBudWxsKSA9PiB7XG4gIGNvbnN0IHBhZ2UgPSB7XG4gICAgY29tcG9uZW50Q2h1bmtOYW1lOiBwYWdlRGF0YS5jb21wb25lbnRDaHVua05hbWUsXG4gICAgcGF0aDogcGFnZURhdGEucGF0aCxcbiAgICB3ZWJwYWNrQ29tcGlsYXRpb25IYXNoOiBwYWdlRGF0YS53ZWJwYWNrQ29tcGlsYXRpb25IYXNoLFxuICAgIG1hdGNoUGF0aDogcGFnZURhdGEubWF0Y2hQYXRoLFxuICAgIHN0YXRpY1F1ZXJ5SGFzaGVzOiBwYWdlRGF0YS5zdGF0aWNRdWVyeUhhc2hlcyxcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgY29tcG9uZW50LFxuICAgIGpzb246IHBhZ2VEYXRhLnJlc3VsdCxcbiAgICBwYWdlLFxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBCYXNlTG9hZGVyIHtcbiAgY29uc3RydWN0b3IobG9hZENvbXBvbmVudCwgbWF0Y2hQYXRocykge1xuICAgIC8vIE1hcCBvZiBwYWdlUGF0aCAtPiBQYWdlLiBXaGVyZSBQYWdlIGlzIGFuIG9iamVjdCB3aXRoOiB7XG4gICAgLy8gICBzdGF0dXM6IFBhZ2VSZXNvdXJjZVN0YXR1cy5TdWNjZXNzIHx8IFBhZ2VSZXNvdXJjZVN0YXR1cy5FcnJvcixcbiAgICAvLyAgIHBheWxvYWQ6IFBhZ2VSZXNvdXJjZXMsIC8vIHVuZGVmaW5lZCBpZiBQYWdlUmVzb3VyY2VTdGF0dXMuRXJyb3JcbiAgICAvLyB9XG4gICAgLy8gUGFnZVJlc291cmNlcyBpcyB7XG4gICAgLy8gICBjb21wb25lbnQsXG4gICAgLy8gICBqc29uOiBwYWdlRGF0YS5yZXN1bHQsXG4gICAgLy8gICBwYWdlOiB7XG4gICAgLy8gICAgIGNvbXBvbmVudENodW5rTmFtZSxcbiAgICAvLyAgICAgcGF0aCxcbiAgICAvLyAgICAgd2VicGFja0NvbXBpbGF0aW9uSGFzaCxcbiAgICAvLyAgICAgc3RhdGljUXVlcnlIYXNoZXNcbiAgICAvLyAgIH0sXG4gICAgLy8gICBzdGF0aWNRdWVyeVJlc3VsdHNcbiAgICAvLyB9XG4gICAgdGhpcy5wYWdlRGIgPSBuZXcgTWFwKClcbiAgICB0aGlzLmluRmxpZ2h0RGIgPSBuZXcgTWFwKClcbiAgICB0aGlzLnN0YXRpY1F1ZXJ5RGIgPSB7fVxuICAgIHRoaXMucGFnZURhdGFEYiA9IG5ldyBNYXAoKVxuICAgIHRoaXMucHJlZmV0Y2hUcmlnZ2VyZWQgPSBuZXcgU2V0KClcbiAgICB0aGlzLnByZWZldGNoQ29tcGxldGVkID0gbmV3IFNldCgpXG4gICAgdGhpcy5sb2FkQ29tcG9uZW50ID0gbG9hZENvbXBvbmVudFxuICAgIHNldE1hdGNoUGF0aHMobWF0Y2hQYXRocylcbiAgfVxuXG4gIGluRmxpZ2h0TmV0d29ya1JlcXVlc3RzID0gbmV3IE1hcCgpXG5cbiAgbWVtb2l6ZWRHZXQodXJsKSB7XG4gICAgbGV0IGluRmxpZ2h0UHJvbWlzZSA9IHRoaXMuaW5GbGlnaHROZXR3b3JrUmVxdWVzdHMuZ2V0KHVybClcblxuICAgIGlmICghaW5GbGlnaHRQcm9taXNlKSB7XG4gICAgICBpbkZsaWdodFByb21pc2UgPSBkb0ZldGNoKHVybCwgYEdFVGApXG4gICAgICB0aGlzLmluRmxpZ2h0TmV0d29ya1JlcXVlc3RzLnNldCh1cmwsIGluRmxpZ2h0UHJvbWlzZSlcbiAgICB9XG5cbiAgICAvLyBQcmVmZXIgZHVwbGljYXRpb24gd2l0aCB0aGVuICsgY2F0Y2ggb3ZlciAuZmluYWxseSB0byBwcmV2ZW50IHByb2JsZW1zIGluIGllMTEgKyBmaXJlZm94XG4gICAgcmV0dXJuIGluRmxpZ2h0UHJvbWlzZVxuICAgICAgLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICB0aGlzLmluRmxpZ2h0TmV0d29ya1JlcXVlc3RzLmRlbGV0ZSh1cmwpXG4gICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgfSlcbiAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICB0aGlzLmluRmxpZ2h0TmV0d29ya1JlcXVlc3RzLmRlbGV0ZSh1cmwpXG4gICAgICAgIHRocm93IGVyclxuICAgICAgfSlcbiAgfVxuXG4gIHNldEFwaVJ1bm5lcihhcGlSdW5uZXIpIHtcbiAgICB0aGlzLmFwaVJ1bm5lciA9IGFwaVJ1bm5lclxuICAgIHRoaXMucHJlZmV0Y2hEaXNhYmxlZCA9IGFwaVJ1bm5lcihgZGlzYWJsZUNvcmVQcmVmZXRjaGluZ2ApLnNvbWUoYSA9PiBhKVxuICB9XG5cbiAgZmV0Y2hQYWdlRGF0YUpzb24obG9hZE9iaikge1xuICAgIGNvbnN0IHsgcGFnZVBhdGgsIHJldHJpZXMgPSAwIH0gPSBsb2FkT2JqXG4gICAgY29uc3QgdXJsID0gY3JlYXRlUGFnZURhdGFVcmwocGFnZVBhdGgpXG4gICAgcmV0dXJuIHRoaXMubWVtb2l6ZWRHZXQodXJsKS50aGVuKHJlcSA9PiB7XG4gICAgICBjb25zdCB7IHN0YXR1cywgcmVzcG9uc2VUZXh0IH0gPSByZXFcblxuICAgICAgLy8gSGFuZGxlIDIwMFxuICAgICAgaWYgKHN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QganNvblBheWxvYWQgPSBKU09OLnBhcnNlKHJlc3BvbnNlVGV4dClcbiAgICAgICAgICBpZiAoanNvblBheWxvYWQucGF0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYG5vdCBhIHZhbGlkIHBhZ2VEYXRhIHJlc3BvbnNlYClcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihsb2FkT2JqLCB7XG4gICAgICAgICAgICBzdGF0dXM6IFBhZ2VSZXNvdXJjZVN0YXR1cy5TdWNjZXNzLFxuICAgICAgICAgICAgcGF5bG9hZDoganNvblBheWxvYWQsXG4gICAgICAgICAgfSlcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgLy8gY29udGludWUgcmVnYXJkbGVzcyBvZiBlcnJvclxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEhhbmRsZSA0MDRcbiAgICAgIGlmIChzdGF0dXMgPT09IDQwNCB8fCBzdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAvLyBJZiB0aGUgcmVxdWVzdCB3YXMgZm9yIGEgNDA0IHBhZ2UgYW5kIGl0IGRvZXNuJ3QgZXhpc3QsIHdlJ3JlIGRvbmVcbiAgICAgICAgaWYgKHBhZ2VQYXRoID09PSBgLzQwNC5odG1sYCkge1xuICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKGxvYWRPYmosIHtcbiAgICAgICAgICAgIHN0YXR1czogUGFnZVJlc291cmNlU3RhdHVzLkVycm9yLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cblxuICAgICAgICAvLyBOZWVkIHNvbWUgY29kZSBoZXJlIHRvIGNhY2hlIHRoZSA0MDQgcmVxdWVzdC4gSW4gY2FzZVxuICAgICAgICAvLyBtdWx0aXBsZSBsb2FkUGFnZURhdGFKc29ucyByZXN1bHQgaW4gNDA0c1xuICAgICAgICByZXR1cm4gdGhpcy5mZXRjaFBhZ2VEYXRhSnNvbihcbiAgICAgICAgICBPYmplY3QuYXNzaWduKGxvYWRPYmosIHsgcGFnZVBhdGg6IGAvNDA0Lmh0bWxgLCBub3RGb3VuZDogdHJ1ZSB9KVxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIC8vIGhhbmRsZSA1MDAgcmVzcG9uc2UgKFVucmVjb3ZlcmFibGUpXG4gICAgICBpZiAoc3RhdHVzID09PSA1MDApIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24obG9hZE9iaiwge1xuICAgICAgICAgIHN0YXR1czogUGFnZVJlc291cmNlU3RhdHVzLkVycm9yLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICAvLyBIYW5kbGUgZXZlcnl0aGluZyBlbHNlLCBpbmNsdWRpbmcgc3RhdHVzID09PSAwLCBhbmQgNTAzcy4gU2hvdWxkIHJldHJ5XG4gICAgICBpZiAocmV0cmllcyA8IDMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmV0Y2hQYWdlRGF0YUpzb24oXG4gICAgICAgICAgT2JqZWN0LmFzc2lnbihsb2FkT2JqLCB7IHJldHJpZXM6IHJldHJpZXMgKyAxIH0pXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgLy8gUmV0cmllZCAzIHRpbWVzIGFscmVhZHksIHJlc3VsdCBpcyBhbiBlcnJvci5cbiAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKGxvYWRPYmosIHtcbiAgICAgICAgc3RhdHVzOiBQYWdlUmVzb3VyY2VTdGF0dXMuRXJyb3IsXG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICBsb2FkUGFnZURhdGFKc29uKHJhd1BhdGgpIHtcbiAgICBjb25zdCBwYWdlUGF0aCA9IGZpbmRQYXRoKHJhd1BhdGgpXG4gICAgaWYgKHRoaXMucGFnZURhdGFEYi5oYXMocGFnZVBhdGgpKSB7XG4gICAgICBjb25zdCBwYWdlRGF0YSA9IHRoaXMucGFnZURhdGFEYi5nZXQocGFnZVBhdGgpXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuQlVJTERfU1RBR0UgIT09IGBkZXZlbG9wYCB8fCAhcGFnZURhdGEuc3RhbGUpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShwYWdlRGF0YSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5mZXRjaFBhZ2VEYXRhSnNvbih7IHBhZ2VQYXRoIH0pLnRoZW4ocGFnZURhdGEgPT4ge1xuICAgICAgdGhpcy5wYWdlRGF0YURiLnNldChwYWdlUGF0aCwgcGFnZURhdGEpXG5cbiAgICAgIHJldHVybiBwYWdlRGF0YVxuICAgIH0pXG4gIH1cblxuICBmaW5kTWF0Y2hQYXRoKHJhd1BhdGgpIHtcbiAgICByZXR1cm4gZmluZE1hdGNoUGF0aChyYXdQYXRoKVxuICB9XG5cbiAgLy8gVE9ETyBjaGVjayBhbGwgdXNlcyBvZiB0aGlzIGFuZCB3aGV0aGVyIHRoZXkgdXNlIHVuZGVmaW5lZCBmb3IgcGFnZSByZXNvdXJjZXMgbm90IGV4aXN0XG4gIGxvYWRQYWdlKHJhd1BhdGgpIHtcbiAgICBjb25zdCBwYWdlUGF0aCA9IGZpbmRQYXRoKHJhd1BhdGgpXG4gICAgaWYgKHRoaXMucGFnZURiLmhhcyhwYWdlUGF0aCkpIHtcbiAgICAgIGNvbnN0IHBhZ2UgPSB0aGlzLnBhZ2VEYi5nZXQocGFnZVBhdGgpXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuQlVJTERfU1RBR0UgIT09IGBkZXZlbG9wYCB8fCAhcGFnZS5wYXlsb2FkLnN0YWxlKSB7XG4gICAgICAgIGlmIChwYWdlLmVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGVycm9yOiBwYWdlLmVycm9yLFxuICAgICAgICAgICAgc3RhdHVzOiBwYWdlLnN0YXR1cyxcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHBhZ2UucGF5bG9hZClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5pbkZsaWdodERiLmhhcyhwYWdlUGF0aCkpIHtcbiAgICAgIHJldHVybiB0aGlzLmluRmxpZ2h0RGIuZ2V0KHBhZ2VQYXRoKVxuICAgIH1cblxuICAgIGNvbnN0IGluRmxpZ2h0UHJvbWlzZSA9IFByb21pc2UuYWxsKFtcbiAgICAgIHRoaXMubG9hZEFwcERhdGEoKSxcbiAgICAgIHRoaXMubG9hZFBhZ2VEYXRhSnNvbihwYWdlUGF0aCksXG4gICAgXSkudGhlbihhbGxEYXRhID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGFsbERhdGFbMV1cbiAgICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSBQYWdlUmVzb3VyY2VTdGF0dXMuRXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdGF0dXM6IFBhZ2VSZXNvdXJjZVN0YXR1cy5FcnJvcixcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsZXQgcGFnZURhdGEgPSByZXN1bHQucGF5bG9hZFxuICAgICAgY29uc3QgeyBjb21wb25lbnRDaHVua05hbWUsIHN0YXRpY1F1ZXJ5SGFzaGVzID0gW10gfSA9IHBhZ2VEYXRhXG5cbiAgICAgIGNvbnN0IGZpbmFsUmVzdWx0ID0ge31cblxuICAgICAgY29uc3QgY29tcG9uZW50Q2h1bmtQcm9taXNlID0gdGhpcy5sb2FkQ29tcG9uZW50KGNvbXBvbmVudENodW5rTmFtZSkudGhlbihcbiAgICAgICAgY29tcG9uZW50ID0+IHtcbiAgICAgICAgICBmaW5hbFJlc3VsdC5jcmVhdGVkQXQgPSBuZXcgRGF0ZSgpXG4gICAgICAgICAgbGV0IHBhZ2VSZXNvdXJjZXNcbiAgICAgICAgICBpZiAoIWNvbXBvbmVudCB8fCBjb21wb25lbnQgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgZmluYWxSZXN1bHQuc3RhdHVzID0gUGFnZVJlc291cmNlU3RhdHVzLkVycm9yXG4gICAgICAgICAgICBmaW5hbFJlc3VsdC5lcnJvciA9IGNvbXBvbmVudFxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmaW5hbFJlc3VsdC5zdGF0dXMgPSBQYWdlUmVzb3VyY2VTdGF0dXMuU3VjY2Vzc1xuICAgICAgICAgICAgaWYgKHJlc3VsdC5ub3RGb3VuZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICBmaW5hbFJlc3VsdC5ub3RGb3VuZCA9IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhZ2VEYXRhID0gT2JqZWN0LmFzc2lnbihwYWdlRGF0YSwge1xuICAgICAgICAgICAgICB3ZWJwYWNrQ29tcGlsYXRpb25IYXNoOiBhbGxEYXRhWzBdXG4gICAgICAgICAgICAgICAgPyBhbGxEYXRhWzBdLndlYnBhY2tDb21waWxhdGlvbkhhc2hcbiAgICAgICAgICAgICAgICA6IGBgLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIHBhZ2VSZXNvdXJjZXMgPSB0b1BhZ2VSZXNvdXJjZXMocGFnZURhdGEsIGNvbXBvbmVudClcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gdW5kZWZpbmVkIGlmIGZpbmFsIHJlc3VsdCBpcyBhbiBlcnJvclxuICAgICAgICAgIHJldHVybiBwYWdlUmVzb3VyY2VzXG4gICAgICAgIH1cbiAgICAgIClcblxuICAgICAgY29uc3Qgc3RhdGljUXVlcnlCYXRjaFByb21pc2UgPSBQcm9taXNlLmFsbChcbiAgICAgICAgc3RhdGljUXVlcnlIYXNoZXMubWFwKHN0YXRpY1F1ZXJ5SGFzaCA9PiB7XG4gICAgICAgICAgLy8gQ2hlY2sgZm9yIGNhY2hlIGluIGNhc2UgdGhpcyBzdGF0aWMgcXVlcnkgcmVzdWx0IGhhcyBhbHJlYWR5IGJlZW4gbG9hZGVkXG4gICAgICAgICAgaWYgKHRoaXMuc3RhdGljUXVlcnlEYltzdGF0aWNRdWVyeUhhc2hdKSB7XG4gICAgICAgICAgICBjb25zdCBqc29uUGF5bG9hZCA9IHRoaXMuc3RhdGljUXVlcnlEYltzdGF0aWNRdWVyeUhhc2hdXG4gICAgICAgICAgICByZXR1cm4geyBzdGF0aWNRdWVyeUhhc2gsIGpzb25QYXlsb2FkIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdGhpcy5tZW1vaXplZEdldChcbiAgICAgICAgICAgIGAke19fUEFUSF9QUkVGSVhfX30vcGFnZS1kYXRhL3NxL2QvJHtzdGF0aWNRdWVyeUhhc2h9Lmpzb25gXG4gICAgICAgICAgKVxuICAgICAgICAgICAgLnRoZW4ocmVxID0+IHtcbiAgICAgICAgICAgICAgY29uc3QganNvblBheWxvYWQgPSBKU09OLnBhcnNlKHJlcS5yZXNwb25zZVRleHQpXG4gICAgICAgICAgICAgIHJldHVybiB7IHN0YXRpY1F1ZXJ5SGFzaCwganNvblBheWxvYWQgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBgV2UgY291bGRuJ3QgbG9hZCBcIiR7X19QQVRIX1BSRUZJWF9ffS9wYWdlLWRhdGEvc3EvZC8ke3N0YXRpY1F1ZXJ5SGFzaH0uanNvblwiYFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgICAgKS50aGVuKHN0YXRpY1F1ZXJ5UmVzdWx0cyA9PiB7XG4gICAgICAgIGNvbnN0IHN0YXRpY1F1ZXJ5UmVzdWx0c01hcCA9IHt9XG5cbiAgICAgICAgc3RhdGljUXVlcnlSZXN1bHRzLmZvckVhY2goKHsgc3RhdGljUXVlcnlIYXNoLCBqc29uUGF5bG9hZCB9KSA9PiB7XG4gICAgICAgICAgc3RhdGljUXVlcnlSZXN1bHRzTWFwW3N0YXRpY1F1ZXJ5SGFzaF0gPSBqc29uUGF5bG9hZFxuICAgICAgICAgIHRoaXMuc3RhdGljUXVlcnlEYltzdGF0aWNRdWVyeUhhc2hdID0ganNvblBheWxvYWRcbiAgICAgICAgfSlcblxuICAgICAgICByZXR1cm4gc3RhdGljUXVlcnlSZXN1bHRzTWFwXG4gICAgICB9KVxuXG4gICAgICByZXR1cm4gKFxuICAgICAgICBQcm9taXNlLmFsbChbY29tcG9uZW50Q2h1bmtQcm9taXNlLCBzdGF0aWNRdWVyeUJhdGNoUHJvbWlzZV0pXG4gICAgICAgICAgLnRoZW4oKFtwYWdlUmVzb3VyY2VzLCBzdGF0aWNRdWVyeVJlc3VsdHNdKSA9PiB7XG4gICAgICAgICAgICBsZXQgcGF5bG9hZFxuICAgICAgICAgICAgaWYgKHBhZ2VSZXNvdXJjZXMpIHtcbiAgICAgICAgICAgICAgcGF5bG9hZCA9IHsgLi4ucGFnZVJlc291cmNlcywgc3RhdGljUXVlcnlSZXN1bHRzIH1cbiAgICAgICAgICAgICAgZmluYWxSZXN1bHQucGF5bG9hZCA9IHBheWxvYWRcbiAgICAgICAgICAgICAgZW1pdHRlci5lbWl0KGBvblBvc3RMb2FkUGFnZVJlc291cmNlc2AsIHtcbiAgICAgICAgICAgICAgICBwYWdlOiBwYXlsb2FkLFxuICAgICAgICAgICAgICAgIHBhZ2VSZXNvdXJjZXM6IHBheWxvYWQsXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMucGFnZURiLnNldChwYWdlUGF0aCwgZmluYWxSZXN1bHQpXG5cbiAgICAgICAgICAgIGlmIChmaW5hbFJlc3VsdC5lcnJvcikge1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGVycm9yOiBmaW5hbFJlc3VsdC5lcnJvcixcbiAgICAgICAgICAgICAgICBzdGF0dXM6IGZpbmFsUmVzdWx0LnN0YXR1cyxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcGF5bG9hZFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLy8gd2hlbiBzdGF0aWMtcXVlcnkgZmFpbCB0byBsb2FkIHdlIHRocm93IGEgYmV0dGVyIGVycm9yXG4gICAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBlcnJvcjogZXJyLFxuICAgICAgICAgICAgICBzdGF0dXM6IFBhZ2VSZXNvdXJjZVN0YXR1cy5FcnJvcixcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgKVxuICAgIH0pXG5cbiAgICBpbkZsaWdodFByb21pc2VcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5pbkZsaWdodERiLmRlbGV0ZShwYWdlUGF0aClcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICB0aGlzLmluRmxpZ2h0RGIuZGVsZXRlKHBhZ2VQYXRoKVxuICAgICAgICB0aHJvdyBlcnJvclxuICAgICAgfSlcblxuICAgIHRoaXMuaW5GbGlnaHREYi5zZXQocGFnZVBhdGgsIGluRmxpZ2h0UHJvbWlzZSlcblxuICAgIHJldHVybiBpbkZsaWdodFByb21pc2VcbiAgfVxuXG4gIC8vIHJldHVybnMgdW5kZWZpbmVkIGlmIHRoZSBwYWdlIGRvZXMgbm90IGV4aXN0cyBpbiBjYWNoZVxuICBsb2FkUGFnZVN5bmMocmF3UGF0aCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgcGFnZVBhdGggPSBmaW5kUGF0aChyYXdQYXRoKVxuICAgIGlmICh0aGlzLnBhZ2VEYi5oYXMocGFnZVBhdGgpKSB7XG4gICAgICBjb25zdCBwYWdlRGF0YSA9IHRoaXMucGFnZURiLmdldChwYWdlUGF0aClcblxuICAgICAgaWYgKHBhZ2VEYXRhLnBheWxvYWQpIHtcbiAgICAgICAgcmV0dXJuIHBhZ2VEYXRhLnBheWxvYWRcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnM/LndpdGhFcnJvckRldGFpbHMpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBlcnJvcjogcGFnZURhdGEuZXJyb3IsXG4gICAgICAgICAgc3RhdHVzOiBwYWdlRGF0YS5zdGF0dXMsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9XG5cbiAgc2hvdWxkUHJlZmV0Y2gocGFnZVBhdGgpIHtcbiAgICAvLyBTa2lwIHByZWZldGNoaW5nIGlmIHdlIGtub3cgdXNlciBpcyBvbiBzbG93IG9yIGNvbnN0cmFpbmVkIGNvbm5lY3Rpb25cbiAgICBpZiAoIWRvZXNDb25uZWN0aW9uU3VwcG9ydFByZWZldGNoKCkpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIHRoZSBwYWdlIGV4aXN0cy5cbiAgICBpZiAodGhpcy5wYWdlRGIuaGFzKHBhZ2VQYXRoKSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIHByZWZldGNoKHBhZ2VQYXRoKSB7XG4gICAgaWYgKCF0aGlzLnNob3VsZFByZWZldGNoKHBhZ2VQYXRoKSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgLy8gVGVsbCBwbHVnaW5zIHdpdGggY3VzdG9tIHByZWZldGNoaW5nIGxvZ2ljIHRoYXQgdGhleSBzaG91bGQgc3RhcnRcbiAgICAvLyBwcmVmZXRjaGluZyB0aGlzIHBhdGguXG4gICAgaWYgKCF0aGlzLnByZWZldGNoVHJpZ2dlcmVkLmhhcyhwYWdlUGF0aCkpIHtcbiAgICAgIHRoaXMuYXBpUnVubmVyKGBvblByZWZldGNoUGF0aG5hbWVgLCB7IHBhdGhuYW1lOiBwYWdlUGF0aCB9KVxuICAgICAgdGhpcy5wcmVmZXRjaFRyaWdnZXJlZC5hZGQocGFnZVBhdGgpXG4gICAgfVxuXG4gICAgLy8gSWYgYSBwbHVnaW4gaGFzIGRpc2FibGVkIGNvcmUgcHJlZmV0Y2hpbmcsIHN0b3Agbm93LlxuICAgIGlmICh0aGlzLnByZWZldGNoRGlzYWJsZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGNvbnN0IHJlYWxQYXRoID0gZmluZFBhdGgocGFnZVBhdGgpXG4gICAgLy8gVG9kbyBtYWtlIGRvUHJlZmV0Y2ggbG9naWMgY2FjaGVhYmxlXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gICAgdGhpcy5kb1ByZWZldGNoKHJlYWxQYXRoKS50aGVuKCgpID0+IHtcbiAgICAgIGlmICghdGhpcy5wcmVmZXRjaENvbXBsZXRlZC5oYXMocGFnZVBhdGgpKSB7XG4gICAgICAgIHRoaXMuYXBpUnVubmVyKGBvblBvc3RQcmVmZXRjaFBhdGhuYW1lYCwgeyBwYXRobmFtZTogcGFnZVBhdGggfSlcbiAgICAgICAgdGhpcy5wcmVmZXRjaENvbXBsZXRlZC5hZGQocGFnZVBhdGgpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBkb1ByZWZldGNoKHBhZ2VQYXRoKSB7XG4gICAgY29uc3QgcGFnZURhdGFVcmwgPSBjcmVhdGVQYWdlRGF0YVVybChwYWdlUGF0aClcbiAgICByZXR1cm4gcHJlZmV0Y2hIZWxwZXIocGFnZURhdGFVcmwsIHtcbiAgICAgIGNyb3NzT3JpZ2luOiBgYW5vbnltb3VzYCxcbiAgICAgIGFzOiBgZmV0Y2hgLFxuICAgIH0pLnRoZW4oKCkgPT5cbiAgICAgIC8vIFRoaXMgd2FzIGp1c3QgcHJlZmV0Y2hlZCwgc28gd2lsbCByZXR1cm4gYSByZXNwb25zZSBmcm9tXG4gICAgICAvLyB0aGUgY2FjaGUgaW5zdGVhZCBvZiBtYWtpbmcgYW5vdGhlciByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXJcbiAgICAgIHRoaXMubG9hZFBhZ2VEYXRhSnNvbihwYWdlUGF0aClcbiAgICApXG4gIH1cblxuICBob3ZlcmluZyhyYXdQYXRoKSB7XG4gICAgdGhpcy5sb2FkUGFnZShyYXdQYXRoKVxuICB9XG5cbiAgZ2V0UmVzb3VyY2VVUkxzRm9yUGF0aG5hbWUocmF3UGF0aCkge1xuICAgIGNvbnN0IHBhZ2VQYXRoID0gZmluZFBhdGgocmF3UGF0aClcbiAgICBjb25zdCBwYWdlID0gdGhpcy5wYWdlRGF0YURiLmdldChwYWdlUGF0aClcbiAgICBpZiAocGFnZSkge1xuICAgICAgY29uc3QgcGFnZVJlc291cmNlcyA9IHRvUGFnZVJlc291cmNlcyhwYWdlLnBheWxvYWQpXG5cbiAgICAgIHJldHVybiBbXG4gICAgICAgIC4uLmNyZWF0ZUNvbXBvbmVudFVybHMocGFnZVJlc291cmNlcy5wYWdlLmNvbXBvbmVudENodW5rTmFtZSksXG4gICAgICAgIGNyZWF0ZVBhZ2VEYXRhVXJsKHBhZ2VQYXRoKSxcbiAgICAgIF1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG4gIH1cblxuICBpc1BhZ2VOb3RGb3VuZChyYXdQYXRoKSB7XG4gICAgY29uc3QgcGFnZVBhdGggPSBmaW5kUGF0aChyYXdQYXRoKVxuICAgIGNvbnN0IHBhZ2UgPSB0aGlzLnBhZ2VEYi5nZXQocGFnZVBhdGgpXG4gICAgcmV0dXJuICFwYWdlIHx8IHBhZ2Uubm90Rm91bmRcbiAgfVxuXG4gIGxvYWRBcHBEYXRhKHJldHJpZXMgPSAwKSB7XG4gICAgcmV0dXJuIHRoaXMubWVtb2l6ZWRHZXQoYCR7X19QQVRIX1BSRUZJWF9ffS9wYWdlLWRhdGEvYXBwLWRhdGEuanNvbmApLnRoZW4oXG4gICAgICByZXEgPT4ge1xuICAgICAgICBjb25zdCB7IHN0YXR1cywgcmVzcG9uc2VUZXh0IH0gPSByZXFcblxuICAgICAgICBsZXQgYXBwRGF0YVxuXG4gICAgICAgIGlmIChzdGF0dXMgIT09IDIwMCAmJiByZXRyaWVzIDwgMykge1xuICAgICAgICAgIC8vIFJldHJ5IDMgdGltZXMgaW5jYXNlIG9mIG5vbi0yMDAgcmVzcG9uc2VzXG4gICAgICAgICAgcmV0dXJuIHRoaXMubG9hZEFwcERhdGEocmV0cmllcyArIDEpXG4gICAgICAgIH1cblxuICAgICAgICAvLyBIYW5kbGUgMjAwXG4gICAgICAgIGlmIChzdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBqc29uUGF5bG9hZCA9IEpTT04ucGFyc2UocmVzcG9uc2VUZXh0KVxuICAgICAgICAgICAgaWYgKGpzb25QYXlsb2FkLndlYnBhY2tDb21waWxhdGlvbkhhc2ggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYG5vdCBhIHZhbGlkIGFwcC1kYXRhIHJlc3BvbnNlYClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYXBwRGF0YSA9IGpzb25QYXlsb2FkXG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAvLyBjb250aW51ZSByZWdhcmRsZXNzIG9mIGVycm9yXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFwcERhdGFcbiAgICAgIH1cbiAgICApXG4gIH1cbn1cblxuY29uc3QgY3JlYXRlQ29tcG9uZW50VXJscyA9IGNvbXBvbmVudENodW5rTmFtZSA9PlxuICAod2luZG93Ll9fX2NodW5rTWFwcGluZ1tjb21wb25lbnRDaHVua05hbWVdIHx8IFtdKS5tYXAoXG4gICAgY2h1bmsgPT4gX19QQVRIX1BSRUZJWF9fICsgY2h1bmtcbiAgKVxuXG5leHBvcnQgY2xhc3MgUHJvZExvYWRlciBleHRlbmRzIEJhc2VMb2FkZXIge1xuICBjb25zdHJ1Y3Rvcihhc3luY1JlcXVpcmVzLCBtYXRjaFBhdGhzKSB7XG4gICAgY29uc3QgbG9hZENvbXBvbmVudCA9IGNodW5rTmFtZSA9PiB7XG4gICAgICBpZiAoIWFzeW5jUmVxdWlyZXMuY29tcG9uZW50c1tjaHVua05hbWVdKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgV2UgY291bGRuJ3QgZmluZCB0aGUgY29ycmVjdCBjb21wb25lbnQgY2h1bmsgd2l0aCB0aGUgbmFtZSAke2NodW5rTmFtZX1gXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgYXN5bmNSZXF1aXJlcy5jb21wb25lbnRzW2NodW5rTmFtZV0oKVxuICAgICAgICAgIC50aGVuKHByZWZlckRlZmF1bHQpXG4gICAgICAgICAgLy8gbG9hZGVyIHdpbGwgaGFuZGxlIHRoZSBjYXNlIHdoZW4gY29tcG9uZW50IGlzIGVycm9yXG4gICAgICAgICAgLmNhdGNoKGVyciA9PiBlcnIpXG4gICAgICApXG4gICAgfVxuXG4gICAgc3VwZXIobG9hZENvbXBvbmVudCwgbWF0Y2hQYXRocylcbiAgfVxuXG4gIGRvUHJlZmV0Y2gocGFnZVBhdGgpIHtcbiAgICByZXR1cm4gc3VwZXIuZG9QcmVmZXRjaChwYWdlUGF0aCkudGhlbihyZXN1bHQgPT4ge1xuICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgIT09IFBhZ2VSZXNvdXJjZVN0YXR1cy5TdWNjZXNzKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgICAgfVxuICAgICAgY29uc3QgcGFnZURhdGEgPSByZXN1bHQucGF5bG9hZFxuICAgICAgY29uc3QgY2h1bmtOYW1lID0gcGFnZURhdGEuY29tcG9uZW50Q2h1bmtOYW1lXG4gICAgICBjb25zdCBjb21wb25lbnRVcmxzID0gY3JlYXRlQ29tcG9uZW50VXJscyhjaHVua05hbWUpXG4gICAgICByZXR1cm4gUHJvbWlzZS5hbGwoY29tcG9uZW50VXJscy5tYXAocHJlZmV0Y2hIZWxwZXIpKS50aGVuKCgpID0+IHBhZ2VEYXRhKVxuICAgIH0pXG4gIH1cblxuICBsb2FkUGFnZURhdGFKc29uKHJhd1BhdGgpIHtcbiAgICByZXR1cm4gc3VwZXIubG9hZFBhZ2VEYXRhSnNvbihyYXdQYXRoKS50aGVuKGRhdGEgPT4ge1xuICAgICAgaWYgKGRhdGEubm90Rm91bmQpIHtcbiAgICAgICAgLy8gY2hlY2sgaWYgaHRtbCBmaWxlIGV4aXN0IHVzaW5nIEhFQUQgcmVxdWVzdDpcbiAgICAgICAgLy8gaWYgaXQgZG9lcyB3ZSBzaG91bGQgbmF2aWdhdGUgdG8gaXQgaW5zdGVhZCBvZiBzaG93aW5nIDQwNFxuICAgICAgICByZXR1cm4gZG9GZXRjaChyYXdQYXRoLCBgSEVBRGApLnRoZW4ocmVxID0+IHtcbiAgICAgICAgICBpZiAocmVxLnN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICAvLyBwYWdlICguaHRtbCBmaWxlKSBhY3R1YWxseSBleGlzdCAob3Igd2UgYXNrZWQgZm9yIDQwNCApXG4gICAgICAgICAgICAvLyByZXR1cm5pbmcgcGFnZSByZXNvdXJjZXMgc3RhdHVzIGFzIGVycm9yZWQgdG8gdHJpZ2dlclxuICAgICAgICAgICAgLy8gcmVndWxhciBicm93c2VyIG5hdmlnYXRpb24gdG8gZ2l2ZW4gcGFnZVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgc3RhdHVzOiBQYWdlUmVzb3VyY2VTdGF0dXMuRXJyb3IsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gaWYgSEVBRCByZXF1ZXN0IHdhc24ndCAyMDAsIHJldHVybiBub3RGb3VuZCByZXN1bHRcbiAgICAgICAgICAvLyBhbmQgc2hvdyA0MDQgcGFnZVxuICAgICAgICAgIHJldHVybiBkYXRhXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YVxuICAgIH0pXG4gIH1cbn1cblxubGV0IGluc3RhbmNlXG5cbmV4cG9ydCBjb25zdCBzZXRMb2FkZXIgPSBfbG9hZGVyID0+IHtcbiAgaW5zdGFuY2UgPSBfbG9hZGVyXG59XG5cbmV4cG9ydCBjb25zdCBwdWJsaWNMb2FkZXIgPSB7XG4gIGVucXVldWU6IHJhd1BhdGggPT4gaW5zdGFuY2UucHJlZmV0Y2gocmF3UGF0aCksXG5cbiAgLy8gUmVhbCBtZXRob2RzXG4gIGdldFJlc291cmNlVVJMc0ZvclBhdGhuYW1lOiByYXdQYXRoID0+XG4gICAgaW5zdGFuY2UuZ2V0UmVzb3VyY2VVUkxzRm9yUGF0aG5hbWUocmF3UGF0aCksXG4gIGxvYWRQYWdlOiByYXdQYXRoID0+IGluc3RhbmNlLmxvYWRQYWdlKHJhd1BhdGgpLFxuICAvLyBUT0RPIGFkZCBkZXByZWNhdGlvbiB0byB2NCBzbyBwZW9wbGUgdXNlIHdpdGhFcnJvckRldGFpbHMgYW5kIHRoZW4gd2UgY2FuIHJlbW92ZSBpbiB2NSBhbmQgY2hhbmdlIGRlZmF1bHQgYmVoYXZpb3VyXG4gIGxvYWRQYWdlU3luYzogKHJhd1BhdGgsIG9wdGlvbnMgPSB7fSkgPT5cbiAgICBpbnN0YW5jZS5sb2FkUGFnZVN5bmMocmF3UGF0aCwgb3B0aW9ucyksXG4gIHByZWZldGNoOiByYXdQYXRoID0+IGluc3RhbmNlLnByZWZldGNoKHJhd1BhdGgpLFxuICBpc1BhZ2VOb3RGb3VuZDogcmF3UGF0aCA9PiBpbnN0YW5jZS5pc1BhZ2VOb3RGb3VuZChyYXdQYXRoKSxcbiAgaG92ZXJpbmc6IHJhd1BhdGggPT4gaW5zdGFuY2UuaG92ZXJpbmcocmF3UGF0aCksXG4gIGxvYWRBcHBEYXRhOiAoKSA9PiBpbnN0YW5jZS5sb2FkQXBwRGF0YSgpLFxufVxuXG5leHBvcnQgZGVmYXVsdCBwdWJsaWNMb2FkZXJcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFN0YXRpY1F1ZXJ5UmVzdWx0cygpIHtcbiAgaWYgKGluc3RhbmNlKSB7XG4gICAgcmV0dXJuIGluc3RhbmNlLnN0YXRpY1F1ZXJ5RGJcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ge31cbiAgfVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8741\n')},804:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('/* harmony import */ var _babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(1788);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7294);\n/* harmony import */ var _api_runner_browser__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7343);\n/* harmony import */ var _find_path__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(2257);\n// Renders page\nvar PageRenderer=/*#__PURE__*/function(_React$Component){(0,_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_3__/* .default */ .Z)(PageRenderer,_React$Component);function PageRenderer(){return _React$Component.apply(this,arguments)||this;}var _proto=PageRenderer.prototype;_proto.render=function render(){var props=Object.assign({},this.props,{params:Object.assign({},(0,_find_path__WEBPACK_IMPORTED_MODULE_2__/* .grabMatchParams */ .GA)(this.props.location.pathname),this.props.pageResources.json.pageContext.__params)});var pageElement=/*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(this.props.pageResources.component,Object.assign({},props,{key:this.props.path||this.props.pageResources.page.path}));var wrappedPage=(0,_api_runner_browser__WEBPACK_IMPORTED_MODULE_1__/* .apiRunner */ .h)("wrapPageElement",{element:pageElement,props:props},pageElement,function(_ref){var result=_ref.result;return{element:result,props:props};}).pop();return wrappedPage;};return PageRenderer;}(react__WEBPACK_IMPORTED_MODULE_0__.Component);/* harmony default export */ __webpack_exports__["Z"] = (PageRenderer);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uLy5jYWNoZS9wYWdlLXJlbmRlcmVyLmpzPzIwZTUiXSwibmFtZXMiOlsiUGFnZVJlbmRlcmVyIiwicmVuZGVyIiwicHJvcHMiLCJwYXJhbXMiLCJncmFiTWF0Y2hQYXJhbXMiLCJsb2NhdGlvbiIsInBhdGhuYW1lIiwicGFnZVJlc291cmNlcyIsImpzb24iLCJwYWdlQ29udGV4dCIsIl9fcGFyYW1zIiwicGFnZUVsZW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiY29tcG9uZW50Iiwia2V5IiwicGF0aCIsInBhZ2UiLCJ3cmFwcGVkUGFnZSIsImFwaVJ1bm5lciIsImVsZW1lbnQiLCJyZXN1bHQiLCJwb3AiLCJSZWFjdCJdLCJtYXBwaW5ncyI6Ijs7OztBQUtBO0dBQ01BLGEseVJBQ0pDLE0sQ0FBQSxpQkFBUyxDQUNQLEdBQU1DLE1BQUssa0JBQ04sS0FBS0EsS0FEQyxFQUVUQyxNQUFNLGtCQUNEQyxxRUFBZSxDQUFDLEtBQUtGLEtBQUwsQ0FBV0csUUFBWCxDQUFvQkMsUUFBckIsQ0FEZCxDQUVELEtBQUtKLEtBQUwsQ0FBV0ssYUFBWCxDQUF5QkMsSUFBekIsQ0FBOEJDLFdBQTlCLENBQTBDQyxRQUZ6QyxDQUZHLEVBQVgsQ0FRQSxHQUFNQyxZQUFXLGNBQUdDLG9EQUFhLENBQUMsS0FBS1YsS0FBTCxDQUFXSyxhQUFYLENBQXlCTSxTQUExQixrQkFDNUJYLEtBRDRCLEVBRS9CWSxHQUFHLENBQUUsS0FBS1osS0FBTCxDQUFXYSxJQUFYLEVBQW1CLEtBQUtiLEtBQUwsQ0FBV0ssYUFBWCxDQUF5QlMsSUFBekIsQ0FBOEJELElBRnZCLEdBQWpDLENBS0EsR0FBTUUsWUFBVyxDQUFHQyx1RUFBUyxtQkFFM0IsQ0FBRUMsT0FBTyxDQUFFUixXQUFYLENBQXdCVCxLQUFLLENBQUxBLEtBQXhCLENBRjJCLENBRzNCUyxXQUgyQixDQUkzQixjQUFnQixJQUFiUyxPQUFhLE1BQWJBLE1BQWEsQ0FDZCxNQUFPLENBQUVELE9BQU8sQ0FBRUMsTUFBWCxDQUFtQmxCLEtBQUssQ0FBTEEsS0FBbkIsQ0FBUCxDQUNELENBTjBCLENBQVQsQ0FPbEJtQixHQVBrQixFQUFwQixDQVNBLE1BQU9KLFlBQVAsQ0FDRCxDLHVCQXpCd0JLLDRDLEVBbUMzQix5REFBZXRCLFlBQWYiLCJmaWxlIjoiODA0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IGNyZWF0ZUVsZW1lbnQgfSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiXG5pbXBvcnQgeyBhcGlSdW5uZXIgfSBmcm9tIFwiLi9hcGktcnVubmVyLWJyb3dzZXJcIlxuaW1wb3J0IHsgZ3JhYk1hdGNoUGFyYW1zIH0gZnJvbSBcIi4vZmluZC1wYXRoXCJcblxuLy8gUmVuZGVycyBwYWdlXG5jbGFzcyBQYWdlUmVuZGVyZXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICByZW5kZXIoKSB7XG4gICAgY29uc3QgcHJvcHMgPSB7XG4gICAgICAuLi50aGlzLnByb3BzLFxuICAgICAgcGFyYW1zOiB7XG4gICAgICAgIC4uLmdyYWJNYXRjaFBhcmFtcyh0aGlzLnByb3BzLmxvY2F0aW9uLnBhdGhuYW1lKSxcbiAgICAgICAgLi4udGhpcy5wcm9wcy5wYWdlUmVzb3VyY2VzLmpzb24ucGFnZUNvbnRleHQuX19wYXJhbXMsXG4gICAgICB9LFxuICAgIH1cblxuICAgIGNvbnN0IHBhZ2VFbGVtZW50ID0gY3JlYXRlRWxlbWVudCh0aGlzLnByb3BzLnBhZ2VSZXNvdXJjZXMuY29tcG9uZW50LCB7XG4gICAgICAuLi5wcm9wcyxcbiAgICAgIGtleTogdGhpcy5wcm9wcy5wYXRoIHx8IHRoaXMucHJvcHMucGFnZVJlc291cmNlcy5wYWdlLnBhdGgsXG4gICAgfSlcblxuICAgIGNvbnN0IHdyYXBwZWRQYWdlID0gYXBpUnVubmVyKFxuICAgICAgYHdyYXBQYWdlRWxlbWVudGAsXG4gICAgICB7IGVsZW1lbnQ6IHBhZ2VFbGVtZW50LCBwcm9wcyB9LFxuICAgICAgcGFnZUVsZW1lbnQsXG4gICAgICAoeyByZXN1bHQgfSkgPT4ge1xuICAgICAgICByZXR1cm4geyBlbGVtZW50OiByZXN1bHQsIHByb3BzIH1cbiAgICAgIH1cbiAgICApLnBvcCgpXG5cbiAgICByZXR1cm4gd3JhcHBlZFBhZ2VcbiAgfVxufVxuXG5QYWdlUmVuZGVyZXIucHJvcFR5cGVzID0ge1xuICBsb2NhdGlvbjogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICBwYWdlUmVzb3VyY2VzOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gIGRhdGE6IFByb3BUeXBlcy5vYmplY3QsXG4gIHBhZ2VDb250ZXh0OiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG59XG5cbmV4cG9ydCBkZWZhdWx0IFBhZ2VSZW5kZXJlclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///804\n')},2871:function(__unused_webpack_module,__unused_webpack___webpack_exports__,__webpack_require__){"use strict";eval('\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js\nvar inheritsLoose = __webpack_require__(1788);\n// EXTERNAL MODULE: ./.cache/api-runner-browser.js\nvar api_runner_browser = __webpack_require__(7343);\n// EXTERNAL MODULE: ./node_modules/react/index.js\nvar react = __webpack_require__(7294);\n// EXTERNAL MODULE: ./node_modules/react-dom/index.js\nvar react_dom = __webpack_require__(3935);\n// EXTERNAL MODULE: ./node_modules/@gatsbyjs/reach-router/es/index.js + 2 modules\nvar es = __webpack_require__(9499);\n// EXTERNAL MODULE: ./node_modules/gatsby-react-router-scroll/index.js\nvar gatsby_react_router_scroll = __webpack_require__(9679);\n// EXTERNAL MODULE: ./.cache/gatsby-browser-entry.js\nvar gatsby_browser_entry = __webpack_require__(5444);\n// EXTERNAL MODULE: ./.cache/loader.js + 1 modules\nvar loader = __webpack_require__(8741);\n// EXTERNAL MODULE: ./.cache/redirect-utils.js + 1 modules\nvar redirect_utils = __webpack_require__(5166);\n// EXTERNAL MODULE: ./.cache/emitter.js + 1 modules\nvar emitter = __webpack_require__(8110);\n;// CONCATENATED MODULE: ./.cache/route-announcer-props.js\n// This is extracted to separate module because it\'s shared\n// between browser and SSR code\nvar RouteAnnouncerProps={id:"gatsby-announcer",style:{position:"absolute",top:0,width:1,height:1,padding:0,overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",border:0},"aria-live":"assertive","aria-atomic":"true"};\n// EXTERNAL MODULE: ./node_modules/@gatsbyjs/reach-router/lib/history.js\nvar lib_history = __webpack_require__(2393);\n// EXTERNAL MODULE: ./node_modules/gatsby-link/index.js\nvar gatsby_link = __webpack_require__(8037);\n;// CONCATENATED MODULE: ./.cache/navigation.js\nfunction maybeRedirect(pathname){var redirect=(0,redirect_utils/* maybeGetBrowserRedirect */.J)(pathname);if(redirect!=null){window.___replace(redirect.toPath);return true;}else{return false;}}var onPreRouteUpdate=function onPreRouteUpdate(location,prevLocation){if(!maybeRedirect(location.pathname)){(0,api_runner_browser/* apiRunner */.h)("onPreRouteUpdate",{location:location,prevLocation:prevLocation});}};var onRouteUpdate=function onRouteUpdate(location,prevLocation){if(!maybeRedirect(location.pathname)){(0,api_runner_browser/* apiRunner */.h)("onRouteUpdate",{location:location,prevLocation:prevLocation});if(false){}}};var navigation_navigate=function navigate(to,options){if(options===void 0){options={};}// Support forward/backward navigation with numbers\n// navigate(-2) (jumps back 2 history steps)\n// navigate(2) (jumps forward 2 history steps)\nif(typeof to==="number"){lib_history/* globalHistory.navigate */.V5.navigate(to);return;}var _parsePath=(0,gatsby_link/* parsePath */.cP)(to),pathname=_parsePath.pathname;var redirect=(0,redirect_utils/* maybeGetBrowserRedirect */.J)(pathname);// If we\'re redirecting, just replace the passed in pathname\n// to the one we want to redirect to.\nif(redirect){to=redirect.toPath;pathname=(0,gatsby_link/* parsePath */.cP)(to).pathname;}// If we had a service worker update, no matter the path, reload window and\n// reset the pathname whitelist\nif(window.___swUpdated){window.location=pathname;return;}// Start a timer to wait for a second before transitioning and showing a\n// loader in case resources aren\'t around yet.\nvar timeoutId=setTimeout(function(){emitter/* default.emit */.Z.emit("onDelayedLoadPageResources",{pathname:pathname});(0,api_runner_browser/* apiRunner */.h)("onRouteUpdateDelayed",{location:window.location});},1000);loader/* default.loadPage */.ZP.loadPage(pathname).then(function(pageResources){// If no page resources, then refresh the page\n// Do this, rather than simply `window.location.reload()`, so that\n// pressing the back/forward buttons work - otherwise when pressing\n// back, the browser will just change the URL and expect JS to handle\n// the change, which won\'t always work since it might not be a Gatsby\n// page.\nif(!pageResources||pageResources.status===loader/* PageResourceStatus.Error */.uQ.Error){window.history.replaceState({},"",location.href);window.location=pathname;clearTimeout(timeoutId);return;}// If the loaded page has a different compilation hash to the\n// window, then a rebuild has occurred on the server. Reload.\nif( true&&pageResources){if(pageResources.page.webpackCompilationHash!==window.___webpackCompilationHash){// Purge plugin-offline cache\nif("serviceWorker"in navigator&&navigator.serviceWorker.controller!==null&&navigator.serviceWorker.controller.state==="activated"){navigator.serviceWorker.controller.postMessage({gatsbyApi:"clearPathResources"});}window.location=pathname;}}(0,es.navigate)(to,options);clearTimeout(timeoutId);});};function shouldUpdateScroll(prevRouterProps,_ref){var _this=this;var location=_ref.location;var pathname=location.pathname,hash=location.hash;var results=(0,api_runner_browser/* apiRunner */.h)("shouldUpdateScroll",{prevRouterProps:prevRouterProps,// `pathname` for backwards compatibility\npathname:pathname,routerProps:{location:location},getSavedScrollPosition:function getSavedScrollPosition(args){return[0,// FIXME this is actually a big code smell, we should fix this\n// eslint-disable-next-line @babel/no-invalid-this\n_this._stateStorage.read(args,args.key)];}});if(results.length>0){// Use the latest registered shouldUpdateScroll result, this allows users to override plugin\'s configuration\n// @see https://github.com/gatsbyjs/gatsby/issues/12038\nreturn results[results.length-1];}if(prevRouterProps){var oldPathname=prevRouterProps.location.pathname;if(oldPathname===pathname){// Scroll to element if it exists, if it doesn\'t, or no hash is provided,\n// scroll to top.\nreturn hash?decodeURI(hash.slice(1)):[0,0];}}return true;}function init(){// The "scroll-behavior" package expects the "action" to be on the location\n// object so let\'s copy it over.\nlib_history/* globalHistory.listen */.V5.listen(function(args){args.location.action=args.action;});window.___push=function(to){return navigation_navigate(to,{replace:false});};window.___replace=function(to){return navigation_navigate(to,{replace:true});};window.___navigate=function(to,options){return navigation_navigate(to,options);};// Check for initial page-load redirect\nmaybeRedirect(window.location.pathname);}var RouteAnnouncer=/*#__PURE__*/function(_React$Component){(0,inheritsLoose/* default */.Z)(RouteAnnouncer,_React$Component);function RouteAnnouncer(props){var _this2;_this2=_React$Component.call(this,props)||this;_this2.announcementRef=/*#__PURE__*/react.createRef();return _this2;}var _proto=RouteAnnouncer.prototype;_proto.componentDidUpdate=function componentDidUpdate(prevProps,nextProps){var _this3=this;requestAnimationFrame(function(){var pageName="new page at "+_this3.props.location.pathname;if(document.title){pageName=document.title;}var pageHeadings=document.querySelectorAll("#gatsby-focus-wrapper h1");if(pageHeadings&&pageHeadings.length){pageName=pageHeadings[0].textContent;}var newAnnouncement="Navigated to "+pageName;if(_this3.announcementRef.current){var oldAnnouncement=_this3.announcementRef.current.innerText;if(oldAnnouncement!==newAnnouncement){_this3.announcementRef.current.innerText=newAnnouncement;}}});};_proto.render=function render(){return/*#__PURE__*/react.createElement("div",Object.assign({},RouteAnnouncerProps,{ref:this.announcementRef}));};return RouteAnnouncer;}(react.Component);var compareLocationProps=function compareLocationProps(prevLocation,nextLocation){var _prevLocation$state,_nextLocation$state;if(prevLocation.href!==nextLocation.href){return true;}if((prevLocation===null||prevLocation===void 0?void 0:(_prevLocation$state=prevLocation.state)===null||_prevLocation$state===void 0?void 0:_prevLocation$state.key)!==(nextLocation===null||nextLocation===void 0?void 0:(_nextLocation$state=nextLocation.state)===null||_nextLocation$state===void 0?void 0:_nextLocation$state.key)){return true;}return false;};// Fire on(Pre)RouteUpdate APIs\nvar RouteUpdates=/*#__PURE__*/function(_React$Component2){(0,inheritsLoose/* default */.Z)(RouteUpdates,_React$Component2);function RouteUpdates(props){var _this4;_this4=_React$Component2.call(this,props)||this;onPreRouteUpdate(props.location,null);return _this4;}var _proto2=RouteUpdates.prototype;_proto2.componentDidMount=function componentDidMount(){onRouteUpdate(this.props.location,null);};_proto2.shouldComponentUpdate=function shouldComponentUpdate(prevProps){if(compareLocationProps(prevProps.location,this.props.location)){onPreRouteUpdate(this.props.location,prevProps.location);return true;}return false;};_proto2.componentDidUpdate=function componentDidUpdate(prevProps){if(compareLocationProps(prevProps.location,this.props.location)){onRouteUpdate(this.props.location,prevProps.location);}};_proto2.render=function render(){return/*#__PURE__*/react.createElement(react.Fragment,null,this.props.children,/*#__PURE__*/react.createElement(RouteAnnouncer,{location:location}));};return RouteUpdates;}(react.Component);\n// EXTERNAL MODULE: ./.cache/page-renderer.js\nvar page_renderer = __webpack_require__(804);\n// EXTERNAL MODULE: ./.cache/_this_is_virtual_fs_path_/$virtual/async-requires.js\nvar async_requires = __webpack_require__(4999);\n;// CONCATENATED MODULE: ./node_modules/shallow-compare/es/index.js\n// Pulled from react-compat\n// https://github.com/developit/preact-compat/blob/7c5de00e7c85e2ffd011bf3af02899b63f699d3a/src/index.js#L349\nfunction shallowDiffers(a, b) {\n for (var i in a) {\n if (!(i in b)) return true;\n }for (var _i in b) {\n if (a[_i] !== b[_i]) return true;\n }return false;\n}\n\n/* harmony default export */ var shallow_compare_es = (function (instance, nextProps, nextState) {\n return shallowDiffers(instance.props, nextProps) || shallowDiffers(instance.state, nextState);\n});\n;// CONCATENATED MODULE: ./.cache/ensure-resources.js\nvar EnsureResources=/*#__PURE__*/function(_React$Component){(0,inheritsLoose/* default */.Z)(EnsureResources,_React$Component);function EnsureResources(props){var _this;_this=_React$Component.call(this)||this;var location=props.location,pageResources=props.pageResources;_this.state={location:Object.assign({},location),pageResources:pageResources||loader/* default.loadPageSync */.ZP.loadPageSync(location.pathname,{withErrorDetails:true})};return _this;}EnsureResources.getDerivedStateFromProps=function getDerivedStateFromProps(_ref,prevState){var location=_ref.location;if(prevState.location.href!==location.href){var pageResources=loader/* default.loadPageSync */.ZP.loadPageSync(location.pathname,{withErrorDetails:true});return{pageResources:pageResources,location:Object.assign({},location)};}return{location:Object.assign({},location)};};var _proto=EnsureResources.prototype;_proto.loadResources=function loadResources(rawPath){var _this2=this;loader/* default.loadPage */.ZP.loadPage(rawPath).then(function(pageResources){if(pageResources&&pageResources.status!==loader/* PageResourceStatus.Error */.uQ.Error){_this2.setState({location:Object.assign({},window.location),pageResources:pageResources});}else{window.history.replaceState({},"",location.href);window.location=rawPath;}});};_proto.shouldComponentUpdate=function shouldComponentUpdate(nextProps,nextState){// Always return false if we\'re missing resources.\nif(!nextState.pageResources){this.loadResources(nextProps.location.pathname);return false;}if(false){}// Check if the component or json have changed.\nif(this.state.pageResources!==nextState.pageResources){return true;}if(this.state.pageResources.component!==nextState.pageResources.component){return true;}if(this.state.pageResources.json!==nextState.pageResources.json){return true;}// Check if location has changed on a page using internal routing\n// via matchPath configuration.\nif(this.state.location.key!==nextState.location.key&&nextState.pageResources.page&&(nextState.pageResources.page.matchPath||nextState.pageResources.page.path)){return true;}return shallow_compare_es(this,nextProps,nextState);};_proto.render=function render(){if(false){ var message, _this$state$pageResou; }return this.props.children(this.state);};return EnsureResources;}(react.Component);/* harmony default export */ var ensure_resources = (EnsureResources);\n// EXTERNAL MODULE: ./.cache/strip-prefix.js\nvar strip_prefix = __webpack_require__(1578);\n;// CONCATENATED MODULE: ./.cache/_this_is_virtual_fs_path_/$virtual/match-paths.json\nvar match_paths_namespaceObject = JSON.parse(\'[{"path":"/en/404.html","matchPath":"/en/404.html"},{"path":"/en/cejst/","matchPath":"/en/cejst/"},{"path":"/en/contact/","matchPath":"/en/contact/"},{"path":"/en/methodology/","matchPath":"/en/methodology/"},{"path":"/en/timeline/","matchPath":"/en/timeline/"},{"path":"/es/404.html","matchPath":"/es/404.html"},{"path":"/es/cejst/","matchPath":"/es/cejst/"},{"path":"/es/contact/","matchPath":"/es/contact/"},{"path":"/es/methodology/","matchPath":"/es/methodology/"},{"path":"/es/timeline/","matchPath":"/es/timeline/"},{"path":"/en/","matchPath":"/en/"},{"path":"/es/","matchPath":"/es/"},{"path":"/en/404/","matchPath":"/en/*"},{"path":"/es/404/","matchPath":"/es/*"}]\');\n;// CONCATENATED MODULE: ./.cache/production-app.js\n// Generated during bootstrap\nvar production_app_loader=new loader/* ProdLoader */.kL(async_requires,match_paths_namespaceObject);(0,loader/* setLoader */.N1)(production_app_loader);production_app_loader.setApiRunner(api_runner_browser/* apiRunner */.h);window.asyncRequires=async_requires;window.___emitter=emitter/* default */.Z;window.___loader=loader/* publicLoader */.jN;init();(0,api_runner_browser/* apiRunnerAsync */.I)("onClientEntry").then(function(){// Let plugins register a service worker. The plugin just needs\n// to return true.\nif((0,api_runner_browser/* apiRunner */.h)("registerServiceWorker").filter(Boolean).length>0){__webpack_require__(154);}// In gatsby v2 if Router is used in page using matchPaths\n// paths need to contain full path.\n// For example:\n// - page have `/app/*` matchPath\n// - inside template user needs to use `/app/xyz` as path\n// Resetting `basepath`/`baseuri` keeps current behaviour\n// to not introduce breaking change.\n// Remove this in v3\nvar RouteHandler=function RouteHandler(props){return/*#__PURE__*/react.createElement(es.BaseContext.Provider,{value:{baseuri:"/",basepath:"/"}},/*#__PURE__*/react.createElement(page_renderer/* default */.Z,props));};var DataContext=/*#__PURE__*/react.createContext({});var GatsbyRoot=/*#__PURE__*/function(_React$Component){(0,inheritsLoose/* default */.Z)(GatsbyRoot,_React$Component);function GatsbyRoot(){return _React$Component.apply(this,arguments)||this;}var _proto=GatsbyRoot.prototype;_proto.render=function render(){var children=this.props.children;return/*#__PURE__*/react.createElement(es.Location,null,function(_ref){var location=_ref.location;return/*#__PURE__*/react.createElement(ensure_resources,{location:location},function(_ref2){var pageResources=_ref2.pageResources,location=_ref2.location;var staticQueryResults=(0,loader/* getStaticQueryResults */.hs)();return/*#__PURE__*/react.createElement(gatsby_browser_entry.StaticQueryContext.Provider,{value:staticQueryResults},/*#__PURE__*/react.createElement(DataContext.Provider,{value:{pageResources:pageResources,location:location}},children));});});};return GatsbyRoot;}(react.Component);var LocationHandler=/*#__PURE__*/function(_React$Component2){(0,inheritsLoose/* default */.Z)(LocationHandler,_React$Component2);function LocationHandler(){return _React$Component2.apply(this,arguments)||this;}var _proto2=LocationHandler.prototype;_proto2.render=function render(){var _this=this;return/*#__PURE__*/react.createElement(DataContext.Consumer,null,function(_ref3){var pageResources=_ref3.pageResources,location=_ref3.location;return/*#__PURE__*/react.createElement(RouteUpdates,{location:location},/*#__PURE__*/react.createElement(gatsby_react_router_scroll/* ScrollContext */.$C,{location:location,shouldUpdateScroll:shouldUpdateScroll},/*#__PURE__*/react.createElement(es.Router,{basepath:"/justice40-tool/main",location:location,id:"gatsby-focus-wrapper"},/*#__PURE__*/react.createElement(RouteHandler,Object.assign({path:pageResources.page.path==="/404.html"?(0,strip_prefix/* default */.Z)(location.pathname,"/justice40-tool/main"):encodeURI(pageResources.page.matchPath||pageResources.page.path)},_this.props,{location:location,pageResources:pageResources},pageResources.json)))));});};return LocationHandler;}(react.Component);var _window=window,pagePath=_window.pagePath,browserLoc=_window.location;// Explicitly call navigate if the canonical path (window.pagePath)\n// is different to the browser path (window.location.pathname). But\n// only if NONE of the following conditions hold:\n//\n// - The url matches a client side route (page.matchPath)\n// - it\'s a 404 page\n// - it\'s the offline plugin shell (/offline-plugin-app-shell-fallback/)\nif(pagePath&&"/justice40-tool/main"+pagePath!==browserLoc.pathname&&!(production_app_loader.findMatchPath((0,strip_prefix/* default */.Z)(browserLoc.pathname,"/justice40-tool/main"))||pagePath==="/404.html"||pagePath.match(/^\\/404\\/?$/)||pagePath.match(/^\\/offline-plugin-app-shell-fallback\\/?$/))){(0,es.navigate)("/justice40-tool/main"+pagePath+browserLoc.search+browserLoc.hash,{replace:true});}loader/* publicLoader.loadPage */.jN.loadPage(browserLoc.pathname).then(function(page){if(!page||page.status===loader/* PageResourceStatus.Error */.uQ.Error){var message="page resources for "+browserLoc.pathname+" not found. Not rendering React";// if the chunk throws an error we want to capture the real error\n// This should help with https://github.com/gatsbyjs/gatsby/issues/19618\nif(page&&page.error){console.error(message);throw page.error;}throw new Error(message);}window.___webpackCompilationHash=page.page.webpackCompilationHash;var SiteRoot=(0,api_runner_browser/* apiRunner */.h)("wrapRootElement",{element:/*#__PURE__*/react.createElement(LocationHandler,null)},/*#__PURE__*/react.createElement(LocationHandler,null),function(_ref4){var result=_ref4.result;return{element:result};}).pop();var App=function App(){var onClientEntryRanRef=react.useRef(false);react.useEffect(function(){if(!onClientEntryRanRef.current){onClientEntryRanRef.current=true;performance.mark("onInitialClientRender");(0,api_runner_browser/* apiRunner */.h)("onInitialClientRender");}},[]);return/*#__PURE__*/react.createElement(GatsbyRoot,null,SiteRoot);};var renderer=(0,api_runner_browser/* apiRunner */.h)("replaceHydrateFunction",undefined,react_dom.createRoot?react_dom.createRoot:react_dom.hydrate)[0];function runRender(){var rootElement=typeof window!=="undefined"?document.getElementById("___gatsby"):null;if(renderer===react_dom.createRoot){renderer(rootElement,{hydrate:true}).render(/*#__PURE__*/react.createElement(App,null));}else{renderer(/*#__PURE__*/react.createElement(App,null),rootElement);}}// https://github.com/madrobby/zepto/blob/b5ed8d607f67724788ec9ff492be297f64d47dfc/src/zepto.js#L439-L450\n// TODO remove IE 10 support\nvar doc=document;if(doc.readyState==="complete"||doc.readyState!=="loading"&&!doc.documentElement.doScroll){setTimeout(function(){runRender();},0);}else{var handler=function handler(){doc.removeEventListener("DOMContentLoaded",handler,false);window.removeEventListener("load",handler,false);runRender();};doc.addEventListener("DOMContentLoaded",handler,false);window.addEventListener("load",handler,false);}});});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uLy5jYWNoZS9yb3V0ZS1hbm5vdW5jZXItcHJvcHMuanM/ZWIwZiIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uLy5jYWNoZS9uYXZpZ2F0aW9uLmpzP2M5ZWUiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvc2hhbGxvdy1jb21wYXJlL2VzL2luZGV4LmpzPzExY2EiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi8uY2FjaGUvZW5zdXJlLXJlc291cmNlcy5qcz9mZjRlIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vLmNhY2hlL3Byb2R1Y3Rpb24tYXBwLmpzPzUzMTUiXSwibmFtZXMiOlsiUm91dGVBbm5vdW5jZXJQcm9wcyIsImlkIiwic3R5bGUiLCJwb3NpdGlvbiIsInRvcCIsIndpZHRoIiwiaGVpZ2h0IiwicGFkZGluZyIsIm92ZXJmbG93IiwiY2xpcCIsIndoaXRlU3BhY2UiLCJib3JkZXIiLCJtYXliZVJlZGlyZWN0IiwicGF0aG5hbWUiLCJyZWRpcmVjdCIsIm1heWJlR2V0QnJvd3NlclJlZGlyZWN0Iiwid2luZG93IiwiX19fcmVwbGFjZSIsInRvUGF0aCIsIm9uUHJlUm91dGVVcGRhdGUiLCJsb2NhdGlvbiIsInByZXZMb2NhdGlvbiIsImFwaVJ1bm5lciIsIm9uUm91dGVVcGRhdGUiLCJwcm9jZXNzIiwibmF2aWdhdGUiLCJ0byIsIm9wdGlvbnMiLCJnbG9iYWxIaXN0b3J5IiwicGFyc2VQYXRoIiwiX19fc3dVcGRhdGVkIiwidGltZW91dElkIiwic2V0VGltZW91dCIsImVtaXR0ZXIiLCJsb2FkZXIiLCJ0aGVuIiwicGFnZVJlc291cmNlcyIsInN0YXR1cyIsIlBhZ2VSZXNvdXJjZVN0YXR1cyIsImhpc3RvcnkiLCJyZXBsYWNlU3RhdGUiLCJocmVmIiwiY2xlYXJUaW1lb3V0IiwicGFnZSIsIndlYnBhY2tDb21waWxhdGlvbkhhc2giLCJfX193ZWJwYWNrQ29tcGlsYXRpb25IYXNoIiwibmF2aWdhdG9yIiwic2VydmljZVdvcmtlciIsImNvbnRyb2xsZXIiLCJzdGF0ZSIsInBvc3RNZXNzYWdlIiwiZ2F0c2J5QXBpIiwicmVhY2hOYXZpZ2F0ZSIsInNob3VsZFVwZGF0ZVNjcm9sbCIsInByZXZSb3V0ZXJQcm9wcyIsImhhc2giLCJyZXN1bHRzIiwicm91dGVyUHJvcHMiLCJnZXRTYXZlZFNjcm9sbFBvc2l0aW9uIiwiYXJncyIsIl9zdGF0ZVN0b3JhZ2UiLCJyZWFkIiwia2V5IiwibGVuZ3RoIiwib2xkUGF0aG5hbWUiLCJkZWNvZGVVUkkiLCJzbGljZSIsImluaXQiLCJhY3Rpb24iLCJfX19wdXNoIiwicmVwbGFjZSIsIl9fX25hdmlnYXRlIiwiUm91dGVBbm5vdW5jZXIiLCJwcm9wcyIsImFubm91bmNlbWVudFJlZiIsIlJlYWN0IiwiY29tcG9uZW50RGlkVXBkYXRlIiwicHJldlByb3BzIiwibmV4dFByb3BzIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwicGFnZU5hbWUiLCJkb2N1bWVudCIsInRpdGxlIiwicGFnZUhlYWRpbmdzIiwicXVlcnlTZWxlY3RvckFsbCIsInRleHRDb250ZW50IiwibmV3QW5ub3VuY2VtZW50IiwiY3VycmVudCIsIm9sZEFubm91bmNlbWVudCIsImlubmVyVGV4dCIsInJlbmRlciIsImNvbXBhcmVMb2NhdGlvblByb3BzIiwibmV4dExvY2F0aW9uIiwiUm91dGVVcGRhdGVzIiwiY29tcG9uZW50RGlkTW91bnQiLCJzaG91bGRDb21wb25lbnRVcGRhdGUiLCJjaGlsZHJlbiIsIkVuc3VyZVJlc291cmNlcyIsIndpdGhFcnJvckRldGFpbHMiLCJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMiLCJwcmV2U3RhdGUiLCJsb2FkUmVzb3VyY2VzIiwicmF3UGF0aCIsInNldFN0YXRlIiwibmV4dFN0YXRlIiwiY29tcG9uZW50IiwianNvbiIsIm1hdGNoUGF0aCIsInBhdGgiLCJzaGFsbG93Q29tcGFyZSIsIlByb2RMb2FkZXIiLCJhc3luY1JlcXVpcmVzIiwibWF0Y2hQYXRocyIsInNldExvYWRlciIsInNldEFwaVJ1bm5lciIsIl9fX2VtaXR0ZXIiLCJfX19sb2FkZXIiLCJwdWJsaWNMb2FkZXIiLCJuYXZpZ2F0aW9uSW5pdCIsImFwaVJ1bm5lckFzeW5jIiwiZmlsdGVyIiwiQm9vbGVhbiIsInJlcXVpcmUiLCJSb3V0ZUhhbmRsZXIiLCJiYXNldXJpIiwiYmFzZXBhdGgiLCJEYXRhQ29udGV4dCIsIkdhdHNieVJvb3QiLCJzdGF0aWNRdWVyeVJlc3VsdHMiLCJnZXRTdGF0aWNRdWVyeVJlc3VsdHMiLCJMb2NhdGlvbkhhbmRsZXIiLCJfX0JBU0VfUEFUSF9fIiwic3RyaXBQcmVmaXgiLCJlbmNvZGVVUkkiLCJwYWdlUGF0aCIsImJyb3dzZXJMb2MiLCJmaW5kTWF0Y2hQYXRoIiwibWF0Y2giLCJzZWFyY2giLCJtZXNzYWdlIiwiZXJyb3IiLCJjb25zb2xlIiwiRXJyb3IiLCJTaXRlUm9vdCIsImVsZW1lbnQiLCJyZXN1bHQiLCJwb3AiLCJBcHAiLCJvbkNsaWVudEVudHJ5UmFuUmVmIiwicGVyZm9ybWFuY2UiLCJtYXJrIiwicmVuZGVyZXIiLCJ1bmRlZmluZWQiLCJSZWFjdERPTSIsInJ1blJlbmRlciIsInJvb3RFbGVtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJoeWRyYXRlIiwiZG9jIiwicmVhZHlTdGF0ZSIsImRvY3VtZW50RWxlbWVudCIsImRvU2Nyb2xsIiwiaGFuZGxlciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJhZGRFdmVudExpc3RlbmVyIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNPLEdBQU1BLG9CQUFtQixDQUFHLENBQ2pDQyxFQUFFLG1CQUQrQixDQUVqQ0MsS0FBSyxDQUFFLENBQ0xDLFFBQVEsV0FESCxDQUVMQyxHQUFHLENBQUUsQ0FGQSxDQUdMQyxLQUFLLENBQUUsQ0FIRixDQUlMQyxNQUFNLENBQUUsQ0FKSCxDQUtMQyxPQUFPLENBQUUsQ0FMSixDQU1M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QUFuQyxDQUE0QyxLQUE1QyxFQUVBUixTQUFTLEdBQ1YsQ0FMRCxDQU9BSSxHQUFHLENBQUNNLGdCQUFKLG9CQUF5Q0YsT0FBekMsQ0FBa0QsS0FBbEQsRUFDQWxKLE1BQU0sQ0FBQ29KLGdCQUFQLFFBQWdDRixPQUFoQyxDQUF5QyxLQUF6QyxFQUNELENBQ0YsQ0FsRkQsRUFtRkQsQ0FyTUQiLCJmaWxlIjoiMjg3MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFRoaXMgaXMgZXh0cmFjdGVkIHRvIHNlcGFyYXRlIG1vZHVsZSBiZWNhdXNlIGl0J3Mgc2hhcmVkXG4vLyBiZXR3ZWVuIGJyb3dzZXIgYW5kIFNTUiBjb2RlXG5leHBvcnQgY29uc3QgUm91dGVBbm5vdW5jZXJQcm9wcyA9IHtcbiAgaWQ6IGBnYXRzYnktYW5ub3VuY2VyYCxcbiAgc3R5bGU6IHtcbiAgICBwb3NpdGlvbjogYGFic29sdXRlYCxcbiAgICB0b3A6IDAsXG4gICAgd2lkdGg6IDEsXG4gICAgaGVpZ2h0OiAxLFxuICAgIHBhZGRpbmc6IDAsXG4gICAgb3ZlcmZsb3c6IGBoaWRkZW5gLFxuICAgIGNsaXA6IGByZWN0KDAsIDAsIDAsIDApYCxcbiAgICB3aGl0ZVNwYWNlOiBgbm93cmFwYCxcbiAgICBib3JkZXI6IDAsXG4gIH0sXG4gIFwiYXJpYS1saXZlXCI6IGBhc3NlcnRpdmVgLFxuICBcImFyaWEtYXRvbWljXCI6IGB0cnVlYCxcbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiXG5pbXBvcnQgbG9hZGVyLCB7IFBhZ2VSZXNvdXJjZVN0YXR1cyB9IGZyb20gXCIuL2xvYWRlclwiXG5pbXBvcnQgeyBtYXliZUdldEJyb3dzZXJSZWRpcmVjdCB9IGZyb20gXCIuL3JlZGlyZWN0LXV0aWxzLmpzXCJcbmltcG9ydCB7IGFwaVJ1bm5lciB9IGZyb20gXCIuL2FwaS1ydW5uZXItYnJvd3NlclwiXG5pbXBvcnQgZW1pdHRlciBmcm9tIFwiLi9lbWl0dGVyXCJcbmltcG9ydCB7IFJvdXRlQW5ub3VuY2VyUHJvcHMgfSBmcm9tIFwiLi9yb3V0ZS1hbm5vdW5jZXItcHJvcHNcIlxuaW1wb3J0IHsgbmF2aWdhdGUgYXMgcmVhY2hOYXZpZ2F0ZSB9IGZyb20gXCJAZ2F0c2J5anMvcmVhY2gtcm91dGVyXCJcbmltcG9ydCB7IGdsb2JhbEhpc3RvcnkgfSBmcm9tIFwiQGdhdHNieWpzL3JlYWNoLXJvdXRlci9saWIvaGlzdG9yeVwiXG5pbXBvcnQgeyBwYXJzZVBhdGggfSBmcm9tIFwiZ2F0c2J5LWxpbmtcIlxuXG5mdW5jdGlvbiBtYXliZVJlZGlyZWN0KHBhdGhuYW1lKSB7XG4gIGNvbnN0IHJlZGlyZWN0ID0gbWF5YmVHZXRCcm93c2VyUmVkaXJlY3QocGF0aG5hbWUpXG5cbiAgaWYgKHJlZGlyZWN0ICE9IG51bGwpIHtcbiAgICB3aW5kb3cuX19fcmVwbGFjZShyZWRpcmVjdC50b1BhdGgpXG4gICAgcmV0dXJuIHRydWVcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5jb25zdCBvblByZVJvdXRlVXBkYXRlID0gKGxvY2F0aW9uLCBwcmV2TG9jYXRpb24pID0+IHtcbiAgaWYgKCFtYXliZVJlZGlyZWN0KGxvY2F0aW9uLnBhdGhuYW1lKSkge1xuICAgIGFwaVJ1bm5lcihgb25QcmVSb3V0ZVVwZGF0ZWAsIHsgbG9jYXRpb24sIHByZXZMb2NhdGlvbiB9KVxuICB9XG59XG5cbmNvbnN0IG9uUm91dGVVcGRhdGUgPSAobG9jYXRpb24sIHByZXZMb2NhdGlvbikgPT4ge1xuICBpZiAoIW1heWJlUmVkaXJlY3QobG9jYXRpb24ucGF0aG5hbWUpKSB7XG4gICAgYXBpUnVubmVyKGBvblJvdXRlVXBkYXRlYCwgeyBsb2NhdGlvbiwgcHJldkxvY2F0aW9uIH0pXG4gICAgaWYgKFxuICAgICAgcHJvY2Vzcy5lbnYuR0FUU0JZX0VYUEVSSU1FTlRBTF9RVUVSWV9PTl9ERU1BTkQgJiZcbiAgICAgIHByb2Nlc3MuZW52LkdBVFNCWV9RVUVSWV9PTl9ERU1BTkRfTE9BRElOR19JTkRJQ0FUT1IgPT09IGB0cnVlYFxuICAgICkge1xuICAgICAgZW1pdHRlci5lbWl0KGBvblJvdXRlVXBkYXRlYCwgeyBsb2NhdGlvbiwgcHJldkxvY2F0aW9uIH0pXG4gICAgfVxuICB9XG59XG5cbmNvbnN0IG5hdmlnYXRlID0gKHRvLCBvcHRpb25zID0ge30pID0+IHtcbiAgLy8gU3VwcG9ydCBmb3J3YXJkL2JhY2t3YXJkIG5hdmlnYXRpb24gd2l0aCBudW1iZXJzXG4gIC8vIG5hdmlnYXRlKC0yKSAoanVtcHMgYmFjayAyIGhpc3Rvcnkgc3RlcHMpXG4gIC8vIG5hdmlnYXRlKDIpICAoanVtcHMgZm9yd2FyZCAyIGhpc3Rvcnkgc3RlcHMpXG4gIGlmICh0eXBlb2YgdG8gPT09IGBudW1iZXJgKSB7XG4gICAgZ2xvYmFsSGlzdG9yeS5uYXZpZ2F0ZSh0bylcbiAgICByZXR1cm5cbiAgfVxuXG4gIGxldCB7IHBhdGhuYW1lIH0gPSBwYXJzZVBhdGgodG8pXG4gIGNvbnN0IHJlZGlyZWN0ID0gbWF5YmVHZXRCcm93c2VyUmVkaXJlY3QocGF0aG5hbWUpXG5cbiAgLy8gSWYgd2UncmUgcmVkaXJlY3RpbmcsIGp1c3QgcmVwbGFjZSB0aGUgcGFzc2VkIGluIHBhdGhuYW1lXG4gIC8vIHRvIHRoZSBvbmUgd2Ugd2FudCB0byByZWRpcmVjdCB0by5cbiAgaWYgKHJlZGlyZWN0KSB7XG4gICAgdG8gPSByZWRpcmVjdC50b1BhdGhcbiAgICBwYXRobmFtZSA9IHBhcnNlUGF0aCh0bykucGF0aG5hbWVcbiAgfVxuXG4gIC8vIElmIHdlIGhhZCBhIHNlcnZpY2Ugd29ya2VyIHVwZGF0ZSwgbm8gbWF0dGVyIHRoZSBwYXRoLCByZWxvYWQgd2luZG93IGFuZFxuICAvLyByZXNldCB0aGUgcGF0aG5hbWUgd2hpdGVsaXN0XG4gIGlmICh3aW5kb3cuX19fc3dVcGRhdGVkKSB7XG4gICAgd2luZG93LmxvY2F0aW9uID0gcGF0aG5hbWVcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIFN0YXJ0IGEgdGltZXIgdG8gd2FpdCBmb3IgYSBzZWNvbmQgYmVmb3JlIHRyYW5zaXRpb25pbmcgYW5kIHNob3dpbmcgYVxuICAvLyBsb2FkZXIgaW4gY2FzZSByZXNvdXJjZXMgYXJlbid0IGFyb3VuZCB5ZXQuXG4gIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIGVtaXR0ZXIuZW1pdChgb25EZWxheWVkTG9hZFBhZ2VSZXNvdXJjZXNgLCB7IHBhdGhuYW1lIH0pXG4gICAgYXBpUnVubmVyKGBvblJvdXRlVXBkYXRlRGVsYXllZGAsIHtcbiAgICAgIGxvY2F0aW9uOiB3aW5kb3cubG9jYXRpb24sXG4gICAgfSlcbiAgfSwgMTAwMClcblxuICBsb2FkZXIubG9hZFBhZ2UocGF0aG5hbWUpLnRoZW4ocGFnZVJlc291cmNlcyA9PiB7XG4gICAgLy8gSWYgbm8gcGFnZSByZXNvdXJjZXMsIHRoZW4gcmVmcmVzaCB0aGUgcGFnZVxuICAgIC8vIERvIHRoaXMsIHJhdGhlciB0aGFuIHNpbXBseSBgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpYCwgc28gdGhhdFxuICAgIC8vIHByZXNzaW5nIHRoZSBiYWNrL2ZvcndhcmQgYnV0dG9ucyB3b3JrIC0gb3RoZXJ3aXNlIHdoZW4gcHJlc3NpbmdcbiAgICAvLyBiYWNrLCB0aGUgYnJvd3NlciB3aWxsIGp1c3QgY2hhbmdlIHRoZSBVUkwgYW5kIGV4cGVjdCBKUyB0byBoYW5kbGVcbiAgICAvLyB0aGUgY2hhbmdlLCB3aGljaCB3b24ndCBhbHdheXMgd29yayBzaW5jZSBpdCBtaWdodCBub3QgYmUgYSBHYXRzYnlcbiAgICAvLyBwYWdlLlxuICAgIGlmICghcGFnZVJlc291cmNlcyB8fCBwYWdlUmVzb3VyY2VzLnN0YXR1cyA9PT0gUGFnZVJlc291cmNlU3RhdHVzLkVycm9yKSB7XG4gICAgICB3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUoe30sIGBgLCBsb2NhdGlvbi5ocmVmKVxuICAgICAgd2luZG93LmxvY2F0aW9uID0gcGF0aG5hbWVcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgbG9hZGVkIHBhZ2UgaGFzIGEgZGlmZmVyZW50IGNvbXBpbGF0aW9uIGhhc2ggdG8gdGhlXG4gICAgLy8gd2luZG93LCB0aGVuIGEgcmVidWlsZCBoYXMgb2NjdXJyZWQgb24gdGhlIHNlcnZlci4gUmVsb2FkLlxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gYHByb2R1Y3Rpb25gICYmIHBhZ2VSZXNvdXJjZXMpIHtcbiAgICAgIGlmIChcbiAgICAgICAgcGFnZVJlc291cmNlcy5wYWdlLndlYnBhY2tDb21waWxhdGlvbkhhc2ggIT09XG4gICAgICAgIHdpbmRvdy5fX193ZWJwYWNrQ29tcGlsYXRpb25IYXNoXG4gICAgICApIHtcbiAgICAgICAgLy8gUHVyZ2UgcGx1Z2luLW9mZmxpbmUgY2FjaGVcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGBzZXJ2aWNlV29ya2VyYCBpbiBuYXZpZ2F0b3IgJiZcbiAgICAgICAgICBuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5jb250cm9sbGVyICE9PSBudWxsICYmXG4gICAgICAgICAgbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIuY29udHJvbGxlci5zdGF0ZSA9PT0gYGFjdGl2YXRlZGBcbiAgICAgICAgKSB7XG4gICAgICAgICAgbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIuY29udHJvbGxlci5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgICBnYXRzYnlBcGk6IGBjbGVhclBhdGhSZXNvdXJjZXNgLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cblxuICAgICAgICB3aW5kb3cubG9jYXRpb24gPSBwYXRobmFtZVxuICAgICAgfVxuICAgIH1cbiAgICByZWFjaE5hdmlnYXRlKHRvLCBvcHRpb25zKVxuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpXG4gIH0pXG59XG5cbmZ1bmN0aW9uIHNob3VsZFVwZGF0ZVNjcm9sbChwcmV2Um91dGVyUHJvcHMsIHsgbG9jYXRpb24gfSkge1xuICBjb25zdCB7IHBhdGhuYW1lLCBoYXNoIH0gPSBsb2NhdGlvblxuICBjb25zdCByZXN1bHRzID0gYXBpUnVubmVyKGBzaG91bGRVcGRhdGVTY3JvbGxgLCB7XG4gICAgcHJldlJvdXRlclByb3BzLFxuICAgIC8vIGBwYXRobmFtZWAgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gICAgcGF0aG5hbWUsXG4gICAgcm91dGVyUHJvcHM6IHsgbG9jYXRpb24gfSxcbiAgICBnZXRTYXZlZFNjcm9sbFBvc2l0aW9uOiBhcmdzID0+IFtcbiAgICAgIDAsXG4gICAgICAvLyBGSVhNRSB0aGlzIGlzIGFjdHVhbGx5IGEgYmlnIGNvZGUgc21lbGwsIHdlIHNob3VsZCBmaXggdGhpc1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBiYWJlbC9uby1pbnZhbGlkLXRoaXNcbiAgICAgIHRoaXMuX3N0YXRlU3RvcmFnZS5yZWFkKGFyZ3MsIGFyZ3Mua2V5KSxcbiAgICBdLFxuICB9KVxuICBpZiAocmVzdWx0cy5sZW5ndGggPiAwKSB7XG4gICAgLy8gVXNlIHRoZSBsYXRlc3QgcmVnaXN0ZXJlZCBzaG91bGRVcGRhdGVTY3JvbGwgcmVzdWx0LCB0aGlzIGFsbG93cyB1c2VycyB0byBvdmVycmlkZSBwbHVnaW4ncyBjb25maWd1cmF0aW9uXG4gICAgLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vZ2F0c2J5anMvZ2F0c2J5L2lzc3Vlcy8xMjAzOFxuICAgIHJldHVybiByZXN1bHRzW3Jlc3VsdHMubGVuZ3RoIC0gMV1cbiAgfVxuXG4gIGlmIChwcmV2Um91dGVyUHJvcHMpIHtcbiAgICBjb25zdCB7XG4gICAgICBsb2NhdGlvbjogeyBwYXRobmFtZTogb2xkUGF0aG5hbWUgfSxcbiAgICB9ID0gcHJldlJvdXRlclByb3BzXG4gICAgaWYgKG9sZFBhdGhuYW1lID09PSBwYXRobmFtZSkge1xuICAgICAgLy8gU2Nyb2xsIHRvIGVsZW1lbnQgaWYgaXQgZXhpc3RzLCBpZiBpdCBkb2Vzbid0LCBvciBubyBoYXNoIGlzIHByb3ZpZGVkLFxuICAgICAgLy8gc2Nyb2xsIHRvIHRvcC5cbiAgICAgIHJldHVybiBoYXNoID8gZGVjb2RlVVJJKGhhc2guc2xpY2UoMSkpIDogWzAsIDBdXG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlXG59XG5cbmZ1bmN0aW9uIGluaXQoKSB7XG4gIC8vIFRoZSBcInNjcm9sbC1iZWhhdmlvclwiIHBhY2thZ2UgZXhwZWN0cyB0aGUgXCJhY3Rpb25cIiB0byBiZSBvbiB0aGUgbG9jYXRpb25cbiAgLy8gb2JqZWN0IHNvIGxldCdzIGNvcHkgaXQgb3Zlci5cbiAgZ2xvYmFsSGlzdG9yeS5saXN0ZW4oYXJncyA9PiB7XG4gICAgYXJncy5sb2NhdGlvbi5hY3Rpb24gPSBhcmdzLmFjdGlvblxuICB9KVxuXG4gIHdpbmRvdy5fX19wdXNoID0gdG8gPT4gbmF2aWdhdGUodG8sIHsgcmVwbGFjZTogZmFsc2UgfSlcbiAgd2luZG93Ll9fX3JlcGxhY2UgPSB0byA9PiBuYXZpZ2F0ZSh0bywgeyByZXBsYWNlOiB0cnVlIH0pXG4gIHdpbmRvdy5fX19uYXZpZ2F0ZSA9ICh0bywgb3B0aW9ucykgPT4gbmF2aWdhdGUodG8sIG9wdGlvbnMpXG5cbiAgLy8gQ2hlY2sgZm9yIGluaXRpYWwgcGFnZS1sb2FkIHJlZGlyZWN0XG4gIG1heWJlUmVkaXJlY3Qod2luZG93LmxvY2F0aW9uLnBhdGhuYW1lKVxufVxuXG5jbGFzcyBSb3V0ZUFubm91bmNlciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpXG4gICAgdGhpcy5hbm5vdW5jZW1lbnRSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKVxuICB9XG5cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgbmV4dFByb3BzKSB7XG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgIGxldCBwYWdlTmFtZSA9IGBuZXcgcGFnZSBhdCAke3RoaXMucHJvcHMubG9jYXRpb24ucGF0aG5hbWV9YFxuICAgICAgaWYgKGRvY3VtZW50LnRpdGxlKSB7XG4gICAgICAgIHBhZ2VOYW1lID0gZG9jdW1lbnQudGl0bGVcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBhZ2VIZWFkaW5ncyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYCNnYXRzYnktZm9jdXMtd3JhcHBlciBoMWApXG4gICAgICBpZiAocGFnZUhlYWRpbmdzICYmIHBhZ2VIZWFkaW5ncy5sZW5ndGgpIHtcbiAgICAgICAgcGFnZU5hbWUgPSBwYWdlSGVhZGluZ3NbMF0udGV4dENvbnRlbnRcbiAgICAgIH1cbiAgICAgIGNvbnN0IG5ld0Fubm91bmNlbWVudCA9IGBOYXZpZ2F0ZWQgdG8gJHtwYWdlTmFtZX1gXG4gICAgICBpZiAodGhpcy5hbm5vdW5jZW1lbnRSZWYuY3VycmVudCkge1xuICAgICAgICBjb25zdCBvbGRBbm5vdW5jZW1lbnQgPSB0aGlzLmFubm91bmNlbWVudFJlZi5jdXJyZW50LmlubmVyVGV4dFxuICAgICAgICBpZiAob2xkQW5ub3VuY2VtZW50ICE9PSBuZXdBbm5vdW5jZW1lbnQpIHtcbiAgICAgICAgICB0aGlzLmFubm91bmNlbWVudFJlZi5jdXJyZW50LmlubmVyVGV4dCA9IG5ld0Fubm91bmNlbWVudFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICByZXR1cm4gPGRpdiB7Li4uUm91dGVBbm5vdW5jZXJQcm9wc30gcmVmPXt0aGlzLmFubm91bmNlbWVudFJlZn0+PC9kaXY+XG4gIH1cbn1cblxuY29uc3QgY29tcGFyZUxvY2F0aW9uUHJvcHMgPSAocHJldkxvY2F0aW9uLCBuZXh0TG9jYXRpb24pID0+IHtcbiAgaWYgKHByZXZMb2NhdGlvbi5ocmVmICE9PSBuZXh0TG9jYXRpb24uaHJlZikge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBpZiAocHJldkxvY2F0aW9uPy5zdGF0ZT8ua2V5ICE9PSBuZXh0TG9jYXRpb24/LnN0YXRlPy5rZXkpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8vIEZpcmUgb24oUHJlKVJvdXRlVXBkYXRlIEFQSXNcbmNsYXNzIFJvdXRlVXBkYXRlcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpXG4gICAgb25QcmVSb3V0ZVVwZGF0ZShwcm9wcy5sb2NhdGlvbiwgbnVsbClcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIG9uUm91dGVVcGRhdGUodGhpcy5wcm9wcy5sb2NhdGlvbiwgbnVsbClcbiAgfVxuXG4gIHNob3VsZENvbXBvbmVudFVwZGF0ZShwcmV2UHJvcHMpIHtcbiAgICBpZiAoY29tcGFyZUxvY2F0aW9uUHJvcHMocHJldlByb3BzLmxvY2F0aW9uLCB0aGlzLnByb3BzLmxvY2F0aW9uKSkge1xuICAgICAgb25QcmVSb3V0ZVVwZGF0ZSh0aGlzLnByb3BzLmxvY2F0aW9uLCBwcmV2UHJvcHMubG9jYXRpb24pXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMpIHtcbiAgICBpZiAoY29tcGFyZUxvY2F0aW9uUHJvcHMocHJldlByb3BzLmxvY2F0aW9uLCB0aGlzLnByb3BzLmxvY2F0aW9uKSkge1xuICAgICAgb25Sb3V0ZVVwZGF0ZSh0aGlzLnByb3BzLmxvY2F0aW9uLCBwcmV2UHJvcHMubG9jYXRpb24pXG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIHJldHVybiAoXG4gICAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgIHt0aGlzLnByb3BzLmNoaWxkcmVufVxuICAgICAgICA8Um91dGVBbm5vdW5jZXIgbG9jYXRpb249e2xvY2F0aW9ufSAvPlxuICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICApXG4gIH1cbn1cblxuUm91dGVVcGRhdGVzLnByb3BUeXBlcyA9IHtcbiAgbG9jYXRpb246IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbn1cblxuZXhwb3J0IHsgaW5pdCwgc2hvdWxkVXBkYXRlU2Nyb2xsLCBSb3V0ZVVwZGF0ZXMsIG1heWJlR2V0QnJvd3NlclJlZGlyZWN0IH1cbiIsIi8vIFB1bGxlZCBmcm9tIHJlYWN0LWNvbXBhdFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2RldmVsb3BpdC9wcmVhY3QtY29tcGF0L2Jsb2IvN2M1ZGUwMGU3Yzg1ZTJmZmQwMTFiZjNhZjAyODk5YjYzZjY5OWQzYS9zcmMvaW5kZXguanMjTDM0OVxuZnVuY3Rpb24gc2hhbGxvd0RpZmZlcnMoYSwgYikge1xuICBmb3IgKHZhciBpIGluIGEpIHtcbiAgICBpZiAoIShpIGluIGIpKSByZXR1cm4gdHJ1ZTtcbiAgfWZvciAodmFyIF9pIGluIGIpIHtcbiAgICBpZiAoYVtfaV0gIT09IGJbX2ldKSByZXR1cm4gdHJ1ZTtcbiAgfXJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgKGZ1bmN0aW9uIChpbnN0YW5jZSwgbmV4dFByb3BzLCBuZXh0U3RhdGUpIHtcbiAgcmV0dXJuIHNoYWxsb3dEaWZmZXJzKGluc3RhbmNlLnByb3BzLCBuZXh0UHJvcHMpIHx8IHNoYWxsb3dEaWZmZXJzKGluc3RhbmNlLnN0YXRlLCBuZXh0U3RhdGUpO1xufSk7IiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgbG9hZGVyLCB7IFBhZ2VSZXNvdXJjZVN0YXR1cyB9IGZyb20gXCIuL2xvYWRlclwiXG5pbXBvcnQgc2hhbGxvd0NvbXBhcmUgZnJvbSBcInNoYWxsb3ctY29tcGFyZVwiXG5cbmNsYXNzIEVuc3VyZVJlc291cmNlcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIoKVxuICAgIGNvbnN0IHsgbG9jYXRpb24sIHBhZ2VSZXNvdXJjZXMgfSA9IHByb3BzXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGxvY2F0aW9uOiB7IC4uLmxvY2F0aW9uIH0sXG4gICAgICBwYWdlUmVzb3VyY2VzOlxuICAgICAgICBwYWdlUmVzb3VyY2VzIHx8XG4gICAgICAgIGxvYWRlci5sb2FkUGFnZVN5bmMobG9jYXRpb24ucGF0aG5hbWUsIHsgd2l0aEVycm9yRGV0YWlsczogdHJ1ZSB9KSxcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKHsgbG9jYXRpb24gfSwgcHJldlN0YXRlKSB7XG4gICAgaWYgKHByZXZTdGF0ZS5sb2NhdGlvbi5ocmVmICE9PSBsb2NhdGlvbi5ocmVmKSB7XG4gICAgICBjb25zdCBwYWdlUmVzb3VyY2VzID0gbG9hZGVyLmxvYWRQYWdlU3luYyhsb2NhdGlvbi5wYXRobmFtZSwge1xuICAgICAgICB3aXRoRXJyb3JEZXRhaWxzOiB0cnVlLFxuICAgICAgfSlcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcGFnZVJlc291cmNlcyxcbiAgICAgICAgbG9jYXRpb246IHsgLi4ubG9jYXRpb24gfSxcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbG9jYXRpb246IHsgLi4ubG9jYXRpb24gfSxcbiAgICB9XG4gIH1cblxuICBsb2FkUmVzb3VyY2VzKHJhd1BhdGgpIHtcbiAgICBsb2FkZXIubG9hZFBhZ2UocmF3UGF0aCkudGhlbihwYWdlUmVzb3VyY2VzID0+IHtcbiAgICAgIGlmIChwYWdlUmVzb3VyY2VzICYmIHBhZ2VSZXNvdXJjZXMuc3RhdHVzICE9PSBQYWdlUmVzb3VyY2VTdGF0dXMuRXJyb3IpIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgbG9jYXRpb246IHsgLi4ud2luZG93LmxvY2F0aW9uIH0sXG4gICAgICAgICAgcGFnZVJlc291cmNlcyxcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZSh7fSwgYGAsIGxvY2F0aW9uLmhyZWYpXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbiA9IHJhd1BhdGhcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcywgbmV4dFN0YXRlKSB7XG4gICAgLy8gQWx3YXlzIHJldHVybiBmYWxzZSBpZiB3ZSdyZSBtaXNzaW5nIHJlc291cmNlcy5cbiAgICBpZiAoIW5leHRTdGF0ZS5wYWdlUmVzb3VyY2VzKSB7XG4gICAgICB0aGlzLmxvYWRSZXNvdXJjZXMobmV4dFByb3BzLmxvY2F0aW9uLnBhdGhuYW1lKVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgcHJvY2Vzcy5lbnYuQlVJTERfU1RBR0UgPT09IGBkZXZlbG9wYCAmJlxuICAgICAgbmV4dFN0YXRlLnBhZ2VSZXNvdXJjZXMuc3RhbGVcbiAgICApIHtcbiAgICAgIHRoaXMubG9hZFJlc291cmNlcyhuZXh0UHJvcHMubG9jYXRpb24ucGF0aG5hbWUpXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgY29tcG9uZW50IG9yIGpzb24gaGF2ZSBjaGFuZ2VkLlxuICAgIGlmICh0aGlzLnN0YXRlLnBhZ2VSZXNvdXJjZXMgIT09IG5leHRTdGF0ZS5wYWdlUmVzb3VyY2VzKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICBpZiAoXG4gICAgICB0aGlzLnN0YXRlLnBhZ2VSZXNvdXJjZXMuY29tcG9uZW50ICE9PSBuZXh0U3RhdGUucGFnZVJlc291cmNlcy5jb21wb25lbnRcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc3RhdGUucGFnZVJlc291cmNlcy5qc29uICE9PSBuZXh0U3RhdGUucGFnZVJlc291cmNlcy5qc29uKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICAvLyBDaGVjayBpZiBsb2NhdGlvbiBoYXMgY2hhbmdlZCBvbiBhIHBhZ2UgdXNpbmcgaW50ZXJuYWwgcm91dGluZ1xuICAgIC8vIHZpYSBtYXRjaFBhdGggY29uZmlndXJhdGlvbi5cbiAgICBpZiAoXG4gICAgICB0aGlzLnN0YXRlLmxvY2F0aW9uLmtleSAhPT0gbmV4dFN0YXRlLmxvY2F0aW9uLmtleSAmJlxuICAgICAgbmV4dFN0YXRlLnBhZ2VSZXNvdXJjZXMucGFnZSAmJlxuICAgICAgKG5leHRTdGF0ZS5wYWdlUmVzb3VyY2VzLnBhZ2UubWF0Y2hQYXRoIHx8XG4gICAgICAgIG5leHRTdGF0ZS5wYWdlUmVzb3VyY2VzLnBhZ2UucGF0aClcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIHJldHVybiBzaGFsbG93Q29tcGFyZSh0aGlzLCBuZXh0UHJvcHMsIG5leHRTdGF0ZSlcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBpZiAoXG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gYHByb2R1Y3Rpb25gICYmXG4gICAgICAoIXRoaXMuc3RhdGUucGFnZVJlc291cmNlcyB8fFxuICAgICAgICB0aGlzLnN0YXRlLnBhZ2VSZXNvdXJjZXMuc3RhdHVzID09PSBQYWdlUmVzb3VyY2VTdGF0dXMuRXJyb3IpXG4gICAgKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gYEVuc3VyZVJlc291cmNlcyB3YXMgbm90IGFibGUgdG8gZmluZCByZXNvdXJjZXMgZm9yIHBhdGg6IFwiJHt0aGlzLnByb3BzLmxvY2F0aW9uLnBhdGhuYW1lfVwiXG5UaGlzIHR5cGljYWxseSBtZWFucyB0aGF0IGFuIGlzc3VlIG9jY3VycmVkIGJ1aWxkaW5nIGNvbXBvbmVudHMgZm9yIHRoYXQgcGF0aC5cblJ1biBcXGBnYXRzYnkgY2xlYW5cXGAgdG8gcmVtb3ZlIGFueSBjYWNoZWQgZWxlbWVudHMuYFxuICAgICAgaWYgKHRoaXMuc3RhdGUucGFnZVJlc291cmNlcz8uZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlKVxuICAgICAgICB0aHJvdyB0aGlzLnN0YXRlLnBhZ2VSZXNvdXJjZXMuZXJyb3JcbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY2hpbGRyZW4odGhpcy5zdGF0ZSlcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBFbnN1cmVSZXNvdXJjZXNcbiIsImltcG9ydCB7IGFwaVJ1bm5lciwgYXBpUnVubmVyQXN5bmMgfSBmcm9tIFwiLi9hcGktcnVubmVyLWJyb3dzZXJcIlxuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiXG5pbXBvcnQgeyBSb3V0ZXIsIG5hdmlnYXRlLCBMb2NhdGlvbiwgQmFzZUNvbnRleHQgfSBmcm9tIFwiQGdhdHNieWpzL3JlYWNoLXJvdXRlclwiXG5pbXBvcnQgeyBTY3JvbGxDb250ZXh0IH0gZnJvbSBcImdhdHNieS1yZWFjdC1yb3V0ZXItc2Nyb2xsXCJcbmltcG9ydCB7IFN0YXRpY1F1ZXJ5Q29udGV4dCB9IGZyb20gXCJnYXRzYnlcIlxuaW1wb3J0IHtcbiAgc2hvdWxkVXBkYXRlU2Nyb2xsLFxuICBpbml0IGFzIG5hdmlnYXRpb25Jbml0LFxuICBSb3V0ZVVwZGF0ZXMsXG59IGZyb20gXCIuL25hdmlnYXRpb25cIlxuaW1wb3J0IGVtaXR0ZXIgZnJvbSBcIi4vZW1pdHRlclwiXG5pbXBvcnQgUGFnZVJlbmRlcmVyIGZyb20gXCIuL3BhZ2UtcmVuZGVyZXJcIlxuaW1wb3J0IGFzeW5jUmVxdWlyZXMgZnJvbSBcIiR2aXJ0dWFsL2FzeW5jLXJlcXVpcmVzXCJcbmltcG9ydCB7XG4gIHNldExvYWRlcixcbiAgUHJvZExvYWRlcixcbiAgcHVibGljTG9hZGVyLFxuICBQYWdlUmVzb3VyY2VTdGF0dXMsXG4gIGdldFN0YXRpY1F1ZXJ5UmVzdWx0cyxcbn0gZnJvbSBcIi4vbG9hZGVyXCJcbmltcG9ydCBFbnN1cmVSZXNvdXJjZXMgZnJvbSBcIi4vZW5zdXJlLXJlc291cmNlc1wiXG5pbXBvcnQgc3RyaXBQcmVmaXggZnJvbSBcIi4vc3RyaXAtcHJlZml4XCJcblxuLy8gR2VuZXJhdGVkIGR1cmluZyBib290c3RyYXBcbmltcG9ydCBtYXRjaFBhdGhzIGZyb20gXCIkdmlydHVhbC9tYXRjaC1wYXRocy5qc29uXCJcblxuY29uc3QgbG9hZGVyID0gbmV3IFByb2RMb2FkZXIoYXN5bmNSZXF1aXJlcywgbWF0Y2hQYXRocylcbnNldExvYWRlcihsb2FkZXIpXG5sb2FkZXIuc2V0QXBpUnVubmVyKGFwaVJ1bm5lcilcblxud2luZG93LmFzeW5jUmVxdWlyZXMgPSBhc3luY1JlcXVpcmVzXG53aW5kb3cuX19fZW1pdHRlciA9IGVtaXR0ZXJcbndpbmRvdy5fX19sb2FkZXIgPSBwdWJsaWNMb2FkZXJcblxubmF2aWdhdGlvbkluaXQoKVxuXG5hcGlSdW5uZXJBc3luYyhgb25DbGllbnRFbnRyeWApLnRoZW4oKCkgPT4ge1xuICAvLyBMZXQgcGx1Z2lucyByZWdpc3RlciBhIHNlcnZpY2Ugd29ya2VyLiBUaGUgcGx1Z2luIGp1c3QgbmVlZHNcbiAgLy8gdG8gcmV0dXJuIHRydWUuXG4gIGlmIChhcGlSdW5uZXIoYHJlZ2lzdGVyU2VydmljZVdvcmtlcmApLmZpbHRlcihCb29sZWFuKS5sZW5ndGggPiAwKSB7XG4gICAgcmVxdWlyZShgLi9yZWdpc3Rlci1zZXJ2aWNlLXdvcmtlcmApXG4gIH1cblxuICAvLyBJbiBnYXRzYnkgdjIgaWYgUm91dGVyIGlzIHVzZWQgaW4gcGFnZSB1c2luZyBtYXRjaFBhdGhzXG4gIC8vIHBhdGhzIG5lZWQgdG8gY29udGFpbiBmdWxsIHBhdGguXG4gIC8vIEZvciBleGFtcGxlOlxuICAvLyAgIC0gcGFnZSBoYXZlIGAvYXBwLypgIG1hdGNoUGF0aFxuICAvLyAgIC0gaW5zaWRlIHRlbXBsYXRlIHVzZXIgbmVlZHMgdG8gdXNlIGAvYXBwL3h5emAgYXMgcGF0aFxuICAvLyBSZXNldHRpbmcgYGJhc2VwYXRoYC9gYmFzZXVyaWAga2VlcHMgY3VycmVudCBiZWhhdmlvdXJcbiAgLy8gdG8gbm90IGludHJvZHVjZSBicmVha2luZyBjaGFuZ2UuXG4gIC8vIFJlbW92ZSB0aGlzIGluIHYzXG4gIGNvbnN0IFJvdXRlSGFuZGxlciA9IHByb3BzID0+IChcbiAgICA8QmFzZUNvbnRleHQuUHJvdmlkZXJcbiAgICAgIHZhbHVlPXt7XG4gICAgICAgIGJhc2V1cmk6IGAvYCxcbiAgICAgICAgYmFzZXBhdGg6IGAvYCxcbiAgICAgIH19XG4gICAgPlxuICAgICAgPFBhZ2VSZW5kZXJlciB7Li4ucHJvcHN9IC8+XG4gICAgPC9CYXNlQ29udGV4dC5Qcm92aWRlcj5cbiAgKVxuXG4gIGNvbnN0IERhdGFDb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dCh7fSlcblxuICBjbGFzcyBHYXRzYnlSb290IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgICByZW5kZXIoKSB7XG4gICAgICBjb25zdCB7IGNoaWxkcmVuIH0gPSB0aGlzLnByb3BzXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8TG9jYXRpb24+XG4gICAgICAgICAgeyh7IGxvY2F0aW9uIH0pID0+IChcbiAgICAgICAgICAgIDxFbnN1cmVSZXNvdXJjZXMgbG9jYXRpb249e2xvY2F0aW9ufT5cbiAgICAgICAgICAgICAgeyh7IHBhZ2VSZXNvdXJjZXMsIGxvY2F0aW9uIH0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGF0aWNRdWVyeVJlc3VsdHMgPSBnZXRTdGF0aWNRdWVyeVJlc3VsdHMoKVxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICA8U3RhdGljUXVlcnlDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtzdGF0aWNRdWVyeVJlc3VsdHN9PlxuICAgICAgICAgICAgICAgICAgICA8RGF0YUNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3sgcGFnZVJlc291cmNlcywgbG9jYXRpb24gfX0+XG4gICAgICAgICAgICAgICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICAgICAgICAgICAgICA8L0RhdGFDb250ZXh0LlByb3ZpZGVyPlxuICAgICAgICAgICAgICAgICAgPC9TdGF0aWNRdWVyeUNvbnRleHQuUHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPC9FbnN1cmVSZXNvdXJjZXM+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9Mb2NhdGlvbj5cbiAgICAgIClcbiAgICB9XG4gIH1cblxuICBjbGFzcyBMb2NhdGlvbkhhbmRsZXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICAgIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxEYXRhQ29udGV4dC5Db25zdW1lcj5cbiAgICAgICAgICB7KHsgcGFnZVJlc291cmNlcywgbG9jYXRpb24gfSkgPT4gKFxuICAgICAgICAgICAgPFJvdXRlVXBkYXRlcyBsb2NhdGlvbj17bG9jYXRpb259PlxuICAgICAgICAgICAgICA8U2Nyb2xsQ29udGV4dFxuICAgICAgICAgICAgICAgIGxvY2F0aW9uPXtsb2NhdGlvbn1cbiAgICAgICAgICAgICAgICBzaG91bGRVcGRhdGVTY3JvbGw9e3Nob3VsZFVwZGF0ZVNjcm9sbH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxSb3V0ZXJcbiAgICAgICAgICAgICAgICAgIGJhc2VwYXRoPXtfX0JBU0VfUEFUSF9ffVxuICAgICAgICAgICAgICAgICAgbG9jYXRpb249e2xvY2F0aW9ufVxuICAgICAgICAgICAgICAgICAgaWQ9XCJnYXRzYnktZm9jdXMtd3JhcHBlclwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPFJvdXRlSGFuZGxlclxuICAgICAgICAgICAgICAgICAgICBwYXRoPXtcbiAgICAgICAgICAgICAgICAgICAgICBwYWdlUmVzb3VyY2VzLnBhZ2UucGF0aCA9PT0gYC80MDQuaHRtbGBcbiAgICAgICAgICAgICAgICAgICAgICAgID8gc3RyaXBQcmVmaXgobG9jYXRpb24ucGF0aG5hbWUsIF9fQkFTRV9QQVRIX18pXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGVuY29kZVVSSShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlUmVzb3VyY2VzLnBhZ2UubWF0Y2hQYXRoIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlUmVzb3VyY2VzLnBhZ2UucGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgey4uLnRoaXMucHJvcHN9XG4gICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uPXtsb2NhdGlvbn1cbiAgICAgICAgICAgICAgICAgICAgcGFnZVJlc291cmNlcz17cGFnZVJlc291cmNlc31cbiAgICAgICAgICAgICAgICAgICAgey4uLnBhZ2VSZXNvdXJjZXMuanNvbn1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9Sb3V0ZXI+XG4gICAgICAgICAgICAgIDwvU2Nyb2xsQ29udGV4dD5cbiAgICAgICAgICAgIDwvUm91dGVVcGRhdGVzPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvRGF0YUNvbnRleHQuQ29uc3VtZXI+XG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgY29uc3QgeyBwYWdlUGF0aCwgbG9jYXRpb246IGJyb3dzZXJMb2MgfSA9IHdpbmRvd1xuXG4gIC8vIEV4cGxpY2l0bHkgY2FsbCBuYXZpZ2F0ZSBpZiB0aGUgY2Fub25pY2FsIHBhdGggKHdpbmRvdy5wYWdlUGF0aClcbiAgLy8gaXMgZGlmZmVyZW50IHRvIHRoZSBicm93c2VyIHBhdGggKHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSkuIEJ1dFxuICAvLyBvbmx5IGlmIE5PTkUgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGhvbGQ6XG4gIC8vXG4gIC8vIC0gVGhlIHVybCBtYXRjaGVzIGEgY2xpZW50IHNpZGUgcm91dGUgKHBhZ2UubWF0Y2hQYXRoKVxuICAvLyAtIGl0J3MgYSA0MDQgcGFnZVxuICAvLyAtIGl0J3MgdGhlIG9mZmxpbmUgcGx1Z2luIHNoZWxsICgvb2ZmbGluZS1wbHVnaW4tYXBwLXNoZWxsLWZhbGxiYWNrLylcbiAgaWYgKFxuICAgIHBhZ2VQYXRoICYmXG4gICAgX19CQVNFX1BBVEhfXyArIHBhZ2VQYXRoICE9PSBicm93c2VyTG9jLnBhdGhuYW1lICYmXG4gICAgIShcbiAgICAgIGxvYWRlci5maW5kTWF0Y2hQYXRoKHN0cmlwUHJlZml4KGJyb3dzZXJMb2MucGF0aG5hbWUsIF9fQkFTRV9QQVRIX18pKSB8fFxuICAgICAgcGFnZVBhdGggPT09IGAvNDA0Lmh0bWxgIHx8XG4gICAgICBwYWdlUGF0aC5tYXRjaCgvXlxcLzQwNFxcLz8kLykgfHxcbiAgICAgIHBhZ2VQYXRoLm1hdGNoKC9eXFwvb2ZmbGluZS1wbHVnaW4tYXBwLXNoZWxsLWZhbGxiYWNrXFwvPyQvKVxuICAgIClcbiAgKSB7XG4gICAgbmF2aWdhdGUoX19CQVNFX1BBVEhfXyArIHBhZ2VQYXRoICsgYnJvd3NlckxvYy5zZWFyY2ggKyBicm93c2VyTG9jLmhhc2gsIHtcbiAgICAgIHJlcGxhY2U6IHRydWUsXG4gICAgfSlcbiAgfVxuXG4gIHB1YmxpY0xvYWRlci5sb2FkUGFnZShicm93c2VyTG9jLnBhdGhuYW1lKS50aGVuKHBhZ2UgPT4ge1xuICAgIGlmICghcGFnZSB8fCBwYWdlLnN0YXR1cyA9PT0gUGFnZVJlc291cmNlU3RhdHVzLkVycm9yKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gYHBhZ2UgcmVzb3VyY2VzIGZvciAke2Jyb3dzZXJMb2MucGF0aG5hbWV9IG5vdCBmb3VuZC4gTm90IHJlbmRlcmluZyBSZWFjdGBcblxuICAgICAgLy8gaWYgdGhlIGNodW5rIHRocm93cyBhbiBlcnJvciB3ZSB3YW50IHRvIGNhcHR1cmUgdGhlIHJlYWwgZXJyb3JcbiAgICAgIC8vIFRoaXMgc2hvdWxkIGhlbHAgd2l0aCBodHRwczovL2dpdGh1Yi5jb20vZ2F0c2J5anMvZ2F0c2J5L2lzc3Vlcy8xOTYxOFxuICAgICAgaWYgKHBhZ2UgJiYgcGFnZS5lcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpXG4gICAgICAgIHRocm93IHBhZ2UuZXJyb3JcbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpXG4gICAgfVxuXG4gICAgd2luZG93Ll9fX3dlYnBhY2tDb21waWxhdGlvbkhhc2ggPSBwYWdlLnBhZ2Uud2VicGFja0NvbXBpbGF0aW9uSGFzaFxuXG4gICAgY29uc3QgU2l0ZVJvb3QgPSBhcGlSdW5uZXIoXG4gICAgICBgd3JhcFJvb3RFbGVtZW50YCxcbiAgICAgIHsgZWxlbWVudDogPExvY2F0aW9uSGFuZGxlciAvPiB9LFxuICAgICAgPExvY2F0aW9uSGFuZGxlciAvPixcbiAgICAgICh7IHJlc3VsdCB9KSA9PiB7XG4gICAgICAgIHJldHVybiB7IGVsZW1lbnQ6IHJlc3VsdCB9XG4gICAgICB9XG4gICAgKS5wb3AoKVxuXG4gICAgY29uc3QgQXBwID0gZnVuY3Rpb24gQXBwKCkge1xuICAgICAgY29uc3Qgb25DbGllbnRFbnRyeVJhblJlZiA9IFJlYWN0LnVzZVJlZihmYWxzZSlcblxuICAgICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKCFvbkNsaWVudEVudHJ5UmFuUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICBvbkNsaWVudEVudHJ5UmFuUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICAgICAgcGVyZm9ybWFuY2UubWFyayhgb25Jbml0aWFsQ2xpZW50UmVuZGVyYClcblxuICAgICAgICAgIGFwaVJ1bm5lcihgb25Jbml0aWFsQ2xpZW50UmVuZGVyYClcbiAgICAgICAgfVxuICAgICAgfSwgW10pXG5cbiAgICAgIHJldHVybiA8R2F0c2J5Um9vdD57U2l0ZVJvb3R9PC9HYXRzYnlSb290PlxuICAgIH1cblxuICAgIGNvbnN0IHJlbmRlcmVyID0gYXBpUnVubmVyKFxuICAgICAgYHJlcGxhY2VIeWRyYXRlRnVuY3Rpb25gLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgUmVhY3RET00uY3JlYXRlUm9vdCA/IFJlYWN0RE9NLmNyZWF0ZVJvb3QgOiBSZWFjdERPTS5oeWRyYXRlXG4gICAgKVswXVxuXG4gICAgZnVuY3Rpb24gcnVuUmVuZGVyKCkge1xuICAgICAgY29uc3Qgcm9vdEVsZW1lbnQgPVxuICAgICAgICB0eXBlb2Ygd2luZG93ICE9PSBgdW5kZWZpbmVkYFxuICAgICAgICAgID8gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYF9fX2dhdHNieWApXG4gICAgICAgICAgOiBudWxsXG5cbiAgICAgIGlmIChyZW5kZXJlciA9PT0gUmVhY3RET00uY3JlYXRlUm9vdCkge1xuICAgICAgICByZW5kZXJlcihyb290RWxlbWVudCwge1xuICAgICAgICAgIGh5ZHJhdGU6IHRydWUsXG4gICAgICAgIH0pLnJlbmRlcig8QXBwIC8+KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVuZGVyZXIoPEFwcCAvPiwgcm9vdEVsZW1lbnQpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21hZHJvYmJ5L3plcHRvL2Jsb2IvYjVlZDhkNjA3ZjY3NzI0Nzg4ZWM5ZmY0OTJiZTI5N2Y2NGQ0N2RmYy9zcmMvemVwdG8uanMjTDQzOS1MNDUwXG4gICAgLy8gVE9ETyByZW1vdmUgSUUgMTAgc3VwcG9ydFxuICAgIGNvbnN0IGRvYyA9IGRvY3VtZW50XG4gICAgaWYgKFxuICAgICAgZG9jLnJlYWR5U3RhdGUgPT09IGBjb21wbGV0ZWAgfHxcbiAgICAgIChkb2MucmVhZHlTdGF0ZSAhPT0gYGxvYWRpbmdgICYmICFkb2MuZG9jdW1lbnRFbGVtZW50LmRvU2Nyb2xsKVxuICAgICkge1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJ1blJlbmRlcigpXG4gICAgICB9LCAwKVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBoYW5kbGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lcihgRE9NQ29udGVudExvYWRlZGAsIGhhbmRsZXIsIGZhbHNlKVxuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihgbG9hZGAsIGhhbmRsZXIsIGZhbHNlKVxuXG4gICAgICAgIHJ1blJlbmRlcigpXG4gICAgICB9XG5cbiAgICAgIGRvYy5hZGRFdmVudExpc3RlbmVyKGBET01Db250ZW50TG9hZGVkYCwgaGFuZGxlciwgZmFsc2UpXG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihgbG9hZGAsIGhhbmRsZXIsIGZhbHNlKVxuICAgIH1cbiAgfSlcbn0pXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2871\n')},6947:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7294);\n/* harmony import */ var _loader__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(8741);\n/* harmony import */ var _page_renderer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(804);\nvar ProdPageRenderer=function ProdPageRenderer(_ref){var location=_ref.location;var pageResources=_loader__WEBPACK_IMPORTED_MODULE_1__/* .default.loadPageSync */ .ZP.loadPageSync(location.pathname);if(!pageResources){return null;}return/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_page_renderer__WEBPACK_IMPORTED_MODULE_2__/* .default */ .Z,Object.assign({location:location,pageResources:pageResources},pageResources.json));};/* harmony default export */ __webpack_exports__["default"] = (ProdPageRenderer);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uLy5jYWNoZS9wdWJsaWMtcGFnZS1yZW5kZXJlci1wcm9kLmpzP2FmMzkiXSwibmFtZXMiOlsiUHJvZFBhZ2VSZW5kZXJlciIsImxvY2F0aW9uIiwicGFnZVJlc291cmNlcyIsImxvYWRlciIsInBhdGhuYW1lIiwiUmVhY3QiLCJJbnRlcm5hbFBhZ2VSZW5kZXJlciIsImpzb24iXSwibWFwcGluZ3MiOiI7Ozs7QUFNQSxHQUFNQSxpQkFBZ0IsQ0FBRyxRQUFuQkEsaUJBQW1CLE1BQWtCLElBQWZDLFNBQWUsTUFBZkEsUUFBZSxDQUN6QyxHQUFNQyxjQUFhLENBQUdDLGdGQUFBLENBQW9CRixRQUFRLENBQUNHLFFBQTdCLENBQXRCLENBQ0EsR0FBSSxDQUFDRixhQUFMLENBQW9CLENBQ2xCLE1BQU8sS0FBUCxDQUNELENBQ0QsbUJBQU9HLGdEQUFBLENBQW9CQyw0REFBcEIsZ0JBQ0xMLFFBQVEsQ0FBUkEsUUFESyxDQUVMQyxhQUFhLENBQWJBLGFBRkssRUFHRkEsYUFBYSxDQUFDSyxJQUhaLEVBQVAsQ0FLRCxDQVZELENBa0JBLCtEQUFlUCxnQkFBZiIsImZpbGUiOiI2OTQ3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCJcblxuaW1wb3J0IGxvYWRlciBmcm9tIFwiLi9sb2FkZXJcIlxuaW1wb3J0IEludGVybmFsUGFnZVJlbmRlcmVyIGZyb20gXCIuL3BhZ2UtcmVuZGVyZXJcIlxuXG5jb25zdCBQcm9kUGFnZVJlbmRlcmVyID0gKHsgbG9jYXRpb24gfSkgPT4ge1xuICBjb25zdCBwYWdlUmVzb3VyY2VzID0gbG9hZGVyLmxvYWRQYWdlU3luYyhsb2NhdGlvbi5wYXRobmFtZSlcbiAgaWYgKCFwYWdlUmVzb3VyY2VzKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChJbnRlcm5hbFBhZ2VSZW5kZXJlciwge1xuICAgIGxvY2F0aW9uLFxuICAgIHBhZ2VSZXNvdXJjZXMsXG4gICAgLi4ucGFnZVJlc291cmNlcy5qc29uLFxuICB9KVxufVxuXG5Qcm9kUGFnZVJlbmRlcmVyLnByb3BUeXBlcyA9IHtcbiAgbG9jYXRpb246IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgcGF0aG5hbWU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgfSkuaXNSZXF1aXJlZCxcbn1cblxuZXhwb3J0IGRlZmF1bHQgUHJvZFBhZ2VSZW5kZXJlclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///6947\n')},861:function(module,__unused_webpack_exports,__webpack_require__){eval("var preferDefault=function preferDefault(m){return m&&m.default||m;};if(false){}else if(true){module.exports=preferDefault(__webpack_require__(6947));}else{}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uLy5jYWNoZS9wdWJsaWMtcGFnZS1yZW5kZXJlci5qcz85NzBkIl0sIm5hbWVzIjpbInByZWZlckRlZmF1bHQiLCJtIiwiZGVmYXVsdCIsInByb2Nlc3MiLCJtb2R1bGUiLCJleHBvcnRzIiwicmVxdWlyZSJdLCJtYXBwaW5ncyI6IkFBQUEsR0FBTUEsY0FBYSxDQUFHLFFBQWhCQSxjQUFnQixDQUFBQyxDQUFDLFFBQUtBLEVBQUMsRUFBSUEsQ0FBQyxDQUFDQyxPQUFSLEVBQW9CRCxDQUF4QixFQUF2QixDQUVBLEdBQUlFLEtBQUosQ0FBMkMsRUFBM0MsSUFFTyxJQUFJQSxJQUFKLENBQW9ELENBQ3pEQyxNQUFNLENBQUNDLE9BQVAsQ0FBaUJMLGFBQWEsQ0FBQ00sbUJBQU8sQ0FBQyxLQUFULENBQTlCLENBQ0QsQ0FGTSxJQUVBIiwiZmlsZSI6Ijg2MS5qcyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IHByZWZlckRlZmF1bHQgPSBtID0+IChtICYmIG0uZGVmYXVsdCkgfHwgbVxuXG5pZiAocHJvY2Vzcy5lbnYuQlVJTERfU1RBR0UgPT09IGBkZXZlbG9wYCkge1xuICBtb2R1bGUuZXhwb3J0cyA9IHByZWZlckRlZmF1bHQocmVxdWlyZShgLi9wdWJsaWMtcGFnZS1yZW5kZXJlci1kZXZgKSlcbn0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuQlVJTERfU1RBR0UgPT09IGBidWlsZC1qYXZhc2NyaXB0YCkge1xuICBtb2R1bGUuZXhwb3J0cyA9IHByZWZlckRlZmF1bHQocmVxdWlyZShgLi9wdWJsaWMtcGFnZS1yZW5kZXJlci1wcm9kYCkpXG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9ICgpID0+IG51bGxcbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///861\n")},3639:function(__unused_webpack_module,exports){eval("exports.O=function(Component){return Component;};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uLy5jYWNoZS9yZWFjdC1saWZlY3ljbGVzLWNvbXBhdC5qcz9mNzg1Il0sIm5hbWVzIjpbImV4cG9ydHMiLCJDb21wb25lbnQiXSwibWFwcGluZ3MiOiJBQUFBQSxTQUFBLENBQW1CLFNBQUFDLFNBQVMsUUFBSUEsVUFBSixFQUE1QiIsImZpbGUiOiIzNjM5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0cy5wb2x5ZmlsbCA9IENvbXBvbmVudCA9PiBDb21wb25lbnRcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3639\n")},5166:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n "J": function() { return /* binding */ maybeGetBrowserRedirect; }\n});\n\n;// CONCATENATED MODULE: ./.cache/redirects.json\nvar redirects_namespaceObject = [];\n;// CONCATENATED MODULE: ./.cache/redirect-utils.js\n// Convert to a map for faster lookup in maybeRedirect()\nvar redirectMap=new Map();var redirectIgnoreCaseMap=new Map();redirects_namespaceObject.forEach(function(redirect){if(redirect.ignoreCase){redirectIgnoreCaseMap.set(redirect.fromPath,redirect);}else{redirectMap.set(redirect.fromPath,redirect);}});function maybeGetBrowserRedirect(pathname){var redirect=redirectMap.get(pathname);if(!redirect){redirect=redirectIgnoreCaseMap.get(pathname.toLowerCase());}return redirect;}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uLy5jYWNoZS9yZWRpcmVjdC11dGlscy5qcz84OWI4Il0sIm5hbWVzIjpbInJlZGlyZWN0TWFwIiwiTWFwIiwicmVkaXJlY3RJZ25vcmVDYXNlTWFwIiwicmVkaXJlY3RzIiwicmVkaXJlY3QiLCJpZ25vcmVDYXNlIiwic2V0IiwiZnJvbVBhdGgiLCJtYXliZUdldEJyb3dzZXJSZWRpcmVjdCIsInBhdGhuYW1lIiwiZ2V0IiwidG9Mb3dlckNhc2UiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUVBO0FBRUEsR0FBTUEsWUFBVyxDQUFHLEdBQUlDLElBQUosRUFBcEIsQ0FDQSxHQUFNQyxzQkFBcUIsQ0FBRyxHQUFJRCxJQUFKLEVBQTlCLENBRUFFLGlDQUFBLENBQWtCLFNBQUFDLFFBQVEsQ0FBSSxDQUM1QixHQUFJQSxRQUFRLENBQUNDLFVBQWIsQ0FBeUIsQ0FDdkJILHFCQUFxQixDQUFDSSxHQUF0QixDQUEwQkYsUUFBUSxDQUFDRyxRQUFuQyxDQUE2Q0gsUUFBN0MsRUFDRCxDQUZELElBRU8sQ0FDTEosV0FBVyxDQUFDTSxHQUFaLENBQWdCRixRQUFRLENBQUNHLFFBQXpCLENBQW1DSCxRQUFuQyxFQUNELENBQ0YsQ0FORCxFQVFPLFFBQVNJLHdCQUFULENBQWlDQyxRQUFqQyxDQUEyQyxDQUNoRCxHQUFJTCxTQUFRLENBQUdKLFdBQVcsQ0FBQ1UsR0FBWixDQUFnQkQsUUFBaEIsQ0FBZixDQUNBLEdBQUksQ0FBQ0wsUUFBTCxDQUFlLENBQ2JBLFFBQVEsQ0FBR0YscUJBQXFCLENBQUNRLEdBQXRCLENBQTBCRCxRQUFRLENBQUNFLFdBQVQsRUFBMUIsQ0FBWCxDQUNELENBQ0QsTUFBT1AsU0FBUCxDQUNEIiwiZmlsZSI6IjUxNjYuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcmVkaXJlY3RzIGZyb20gXCIuL3JlZGlyZWN0cy5qc29uXCJcblxuLy8gQ29udmVydCB0byBhIG1hcCBmb3IgZmFzdGVyIGxvb2t1cCBpbiBtYXliZVJlZGlyZWN0KClcblxuY29uc3QgcmVkaXJlY3RNYXAgPSBuZXcgTWFwKClcbmNvbnN0IHJlZGlyZWN0SWdub3JlQ2FzZU1hcCA9IG5ldyBNYXAoKVxuXG5yZWRpcmVjdHMuZm9yRWFjaChyZWRpcmVjdCA9PiB7XG4gIGlmIChyZWRpcmVjdC5pZ25vcmVDYXNlKSB7XG4gICAgcmVkaXJlY3RJZ25vcmVDYXNlTWFwLnNldChyZWRpcmVjdC5mcm9tUGF0aCwgcmVkaXJlY3QpXG4gIH0gZWxzZSB7XG4gICAgcmVkaXJlY3RNYXAuc2V0KHJlZGlyZWN0LmZyb21QYXRoLCByZWRpcmVjdClcbiAgfVxufSlcblxuZXhwb3J0IGZ1bmN0aW9uIG1heWJlR2V0QnJvd3NlclJlZGlyZWN0KHBhdGhuYW1lKSB7XG4gIGxldCByZWRpcmVjdCA9IHJlZGlyZWN0TWFwLmdldChwYXRobmFtZSlcbiAgaWYgKCFyZWRpcmVjdCkge1xuICAgIHJlZGlyZWN0ID0gcmVkaXJlY3RJZ25vcmVDYXNlTWFwLmdldChwYXRobmFtZS50b0xvd2VyQ2FzZSgpKVxuICB9XG4gIHJldHVybiByZWRpcmVjdFxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5166\n')},154:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _api_runner_browser__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7343);\nif(window.location.protocol!=="https:"&&window.location.hostname!=="localhost"){console.error("Service workers can only be used over HTTPS, or on localhost for development");}else if("serviceWorker"in navigator){navigator.serviceWorker.register("/justice40-tool/main"+"/sw.js").then(function(reg){reg.addEventListener("updatefound",function(){(0,_api_runner_browser__WEBPACK_IMPORTED_MODULE_0__/* .apiRunner */ .h)("onServiceWorkerUpdateFound",{serviceWorker:reg});// The updatefound event implies that reg.installing is set; see\n// https://w3c.github.io/ServiceWorker/#service-worker-registration-updatefound-event\nvar installingWorker=reg.installing;console.log("installingWorker",installingWorker);installingWorker.addEventListener("statechange",function(){switch(installingWorker.state){case"installed":if(navigator.serviceWorker.controller){// At this point, the old content will have been purged and the fresh content will\n// have been added to the cache.\n// We set a flag so Gatsby Link knows to refresh the page on next navigation attempt\nwindow.___swUpdated=true;// We call the onServiceWorkerUpdateReady API so users can show update prompts.\n(0,_api_runner_browser__WEBPACK_IMPORTED_MODULE_0__/* .apiRunner */ .h)("onServiceWorkerUpdateReady",{serviceWorker:reg});// If resources failed for the current page, reload.\nif(window.___failedResources){console.log("resources failed, SW updated - reloading");window.location.reload();}}else{// At this point, everything has been precached.\n// It\'s the perfect time to display a "Content is cached for offline use." message.\nconsole.log("Content is now available offline!");// Post to service worker that install is complete.\n// Delay to allow time for the event listener to be added --\n// otherwise fetch is called too soon and resources aren\'t cached.\n(0,_api_runner_browser__WEBPACK_IMPORTED_MODULE_0__/* .apiRunner */ .h)("onServiceWorkerInstalled",{serviceWorker:reg});}break;case"redundant":console.error("The installing service worker became redundant.");(0,_api_runner_browser__WEBPACK_IMPORTED_MODULE_0__/* .apiRunner */ .h)("onServiceWorkerRedundant",{serviceWorker:reg});break;case"activated":(0,_api_runner_browser__WEBPACK_IMPORTED_MODULE_0__/* .apiRunner */ .h)("onServiceWorkerActive",{serviceWorker:reg});break;}});});}).catch(function(e){console.error("Error during service worker registration:",e);});}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uLy5jYWNoZS9yZWdpc3Rlci1zZXJ2aWNlLXdvcmtlci5qcz8zNTI1Il0sIm5hbWVzIjpbIndpbmRvdyIsImxvY2F0aW9uIiwicHJvdG9jb2wiLCJob3N0bmFtZSIsImNvbnNvbGUiLCJlcnJvciIsIm5hdmlnYXRvciIsInNlcnZpY2VXb3JrZXIiLCJyZWdpc3RlciIsIl9fQkFTRV9QQVRIX18iLCJ0aGVuIiwicmVnIiwiYWRkRXZlbnRMaXN0ZW5lciIsImFwaVJ1bm5lciIsImluc3RhbGxpbmdXb3JrZXIiLCJpbnN0YWxsaW5nIiwibG9nIiwic3RhdGUiLCJjb250cm9sbGVyIiwiX19fc3dVcGRhdGVkIiwiX19fZmFpbGVkUmVzb3VyY2VzIiwicmVsb2FkIiwiY2F0Y2giLCJlIl0sIm1hcHBpbmdzIjoiOztBQUVBLEdBQ0VBLE1BQU0sQ0FBQ0MsUUFBUCxDQUFnQkMsUUFBaEIsYUFDQUYsTUFBTSxDQUFDQyxRQUFQLENBQWdCRSxRQUFoQixjQUZGLENBR0UsQ0FDQUMsT0FBTyxDQUFDQyxLQUFSLGlGQUdELENBUEQsSUFPTyxJQUFJLGlCQUFtQkMsVUFBdkIsQ0FBa0MsQ0FDdkNBLFNBQVMsQ0FBQ0MsYUFBVixDQUNHQyxRQURILENBQ2VDLHNCQURmLFdBRUdDLElBRkgsQ0FFUSxTQUFVQyxHQUFWLENBQWUsQ0FDbkJBLEdBQUcsQ0FBQ0MsZ0JBQUosZUFBb0MsVUFBTSxDQUN4Q0MsdUVBQVMsOEJBQStCLENBQUVOLGFBQWEsQ0FBRUksR0FBakIsQ0FBL0IsQ0FBVCxDQUNBO0FBQ0E7QUFDQSxHQUFNRyxpQkFBZ0IsQ0FBR0gsR0FBRyxDQUFDSSxVQUE3QixDQUNBWCxPQUFPLENBQUNZLEdBQVIsb0JBQWdDRixnQkFBaEMsRUFDQUEsZ0JBQWdCLENBQUNGLGdCQUFqQixlQUFpRCxVQUFNLENBQ3JELE9BQVFFLGdCQUFnQixDQUFDRyxLQUF6QixFQUNFLGdCQUNFLEdBQUlYLFNBQVMsQ0FBQ0MsYUFBVixDQUF3QlcsVUFBNUIsQ0FBd0MsQ0FDdEM7QUFDQTtBQUVBO0FBQ0FsQixNQUFNLENBQUNtQixZQUFQLENBQXNCLElBQXRCLENBQ0E7QUFDQU4sdUVBQVMsOEJBQStCLENBQUVOLGFBQWEsQ0FBRUksR0FBakIsQ0FBL0IsQ0FBVCxDQUVBO0FBQ0EsR0FBSVgsTUFBTSxDQUFDb0Isa0JBQVgsQ0FBK0IsQ0FDN0JoQixPQUFPLENBQUNZLEdBQVIsNkNBQ0FoQixNQUFNLENBQUNDLFFBQVAsQ0FBZ0JvQixNQUFoQixHQUNELENBQ0YsQ0FkRCxJQWNPLENBQ0w7QUFDQTtBQUNBakIsT0FBTyxDQUFDWSxHQUFSLHNDQUVBO0FBQ0E7QUFDQTtBQUNBSCx1RUFBUyw0QkFBNkIsQ0FBRU4sYUFBYSxDQUFFSSxHQUFqQixDQUE3QixDQUFULENBQ0QsQ0FDRCxNQUVGLGdCQUNFUCxPQUFPLENBQUNDLEtBQVIsb0RBQ0FRLHVFQUFTLDRCQUE2QixDQUFFTixhQUFhLENBQUVJLEdBQWpCLENBQTdCLENBQVQsQ0FDQSxNQUVGLGdCQUNFRSx1RUFBUyx5QkFBMEIsQ0FBRU4sYUFBYSxDQUFFSSxHQUFqQixDQUExQixDQUFULENBQ0EsTUFuQ0osQ0FxQ0QsQ0F0Q0QsRUF1Q0QsQ0E3Q0QsRUE4Q0QsQ0FqREgsRUFrREdXLEtBbERILENBa0RTLFNBQVVDLENBQVYsQ0FBYSxDQUNsQm5CLE9BQU8sQ0FBQ0MsS0FBUiw2Q0FBMkRrQixDQUEzRCxFQUNELENBcERILEVBcUREIiwiZmlsZSI6IjE1NC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFwaVJ1bm5lciB9IGZyb20gXCIuL2FwaS1ydW5uZXItYnJvd3NlclwiXG5cbmlmIChcbiAgd2luZG93LmxvY2F0aW9uLnByb3RvY29sICE9PSBgaHR0cHM6YCAmJlxuICB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUgIT09IGBsb2NhbGhvc3RgXG4pIHtcbiAgY29uc29sZS5lcnJvcihcbiAgICBgU2VydmljZSB3b3JrZXJzIGNhbiBvbmx5IGJlIHVzZWQgb3ZlciBIVFRQUywgb3Igb24gbG9jYWxob3N0IGZvciBkZXZlbG9wbWVudGBcbiAgKVxufSBlbHNlIGlmIChgc2VydmljZVdvcmtlcmAgaW4gbmF2aWdhdG9yKSB7XG4gIG5hdmlnYXRvci5zZXJ2aWNlV29ya2VyXG4gICAgLnJlZ2lzdGVyKGAke19fQkFTRV9QQVRIX199L3N3LmpzYClcbiAgICAudGhlbihmdW5jdGlvbiAocmVnKSB7XG4gICAgICByZWcuYWRkRXZlbnRMaXN0ZW5lcihgdXBkYXRlZm91bmRgLCAoKSA9PiB7XG4gICAgICAgIGFwaVJ1bm5lcihgb25TZXJ2aWNlV29ya2VyVXBkYXRlRm91bmRgLCB7IHNlcnZpY2VXb3JrZXI6IHJlZyB9KVxuICAgICAgICAvLyBUaGUgdXBkYXRlZm91bmQgZXZlbnQgaW1wbGllcyB0aGF0IHJlZy5pbnN0YWxsaW5nIGlzIHNldDsgc2VlXG4gICAgICAgIC8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNzZXJ2aWNlLXdvcmtlci1yZWdpc3RyYXRpb24tdXBkYXRlZm91bmQtZXZlbnRcbiAgICAgICAgY29uc3QgaW5zdGFsbGluZ1dvcmtlciA9IHJlZy5pbnN0YWxsaW5nXG4gICAgICAgIGNvbnNvbGUubG9nKGBpbnN0YWxsaW5nV29ya2VyYCwgaW5zdGFsbGluZ1dvcmtlcilcbiAgICAgICAgaW5zdGFsbGluZ1dvcmtlci5hZGRFdmVudExpc3RlbmVyKGBzdGF0ZWNoYW5nZWAsICgpID0+IHtcbiAgICAgICAgICBzd2l0Y2ggKGluc3RhbGxpbmdXb3JrZXIuc3RhdGUpIHtcbiAgICAgICAgICAgIGNhc2UgYGluc3RhbGxlZGA6XG4gICAgICAgICAgICAgIGlmIChuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5jb250cm9sbGVyKSB7XG4gICAgICAgICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCwgdGhlIG9sZCBjb250ZW50IHdpbGwgaGF2ZSBiZWVuIHB1cmdlZCBhbmQgdGhlIGZyZXNoIGNvbnRlbnQgd2lsbFxuICAgICAgICAgICAgICAgIC8vIGhhdmUgYmVlbiBhZGRlZCB0byB0aGUgY2FjaGUuXG5cbiAgICAgICAgICAgICAgICAvLyBXZSBzZXQgYSBmbGFnIHNvIEdhdHNieSBMaW5rIGtub3dzIHRvIHJlZnJlc2ggdGhlIHBhZ2Ugb24gbmV4dCBuYXZpZ2F0aW9uIGF0dGVtcHRcbiAgICAgICAgICAgICAgICB3aW5kb3cuX19fc3dVcGRhdGVkID0gdHJ1ZVxuICAgICAgICAgICAgICAgIC8vIFdlIGNhbGwgdGhlIG9uU2VydmljZVdvcmtlclVwZGF0ZVJlYWR5IEFQSSBzbyB1c2VycyBjYW4gc2hvdyB1cGRhdGUgcHJvbXB0cy5cbiAgICAgICAgICAgICAgICBhcGlSdW5uZXIoYG9uU2VydmljZVdvcmtlclVwZGF0ZVJlYWR5YCwgeyBzZXJ2aWNlV29ya2VyOiByZWcgfSlcblxuICAgICAgICAgICAgICAgIC8vIElmIHJlc291cmNlcyBmYWlsZWQgZm9yIHRoZSBjdXJyZW50IHBhZ2UsIHJlbG9hZC5cbiAgICAgICAgICAgICAgICBpZiAod2luZG93Ll9fX2ZhaWxlZFJlc291cmNlcykge1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYHJlc291cmNlcyBmYWlsZWQsIFNXIHVwZGF0ZWQgLSByZWxvYWRpbmdgKVxuICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQsIGV2ZXJ5dGhpbmcgaGFzIGJlZW4gcHJlY2FjaGVkLlxuICAgICAgICAgICAgICAgIC8vIEl0J3MgdGhlIHBlcmZlY3QgdGltZSB0byBkaXNwbGF5IGEgXCJDb250ZW50IGlzIGNhY2hlZCBmb3Igb2ZmbGluZSB1c2UuXCIgbWVzc2FnZS5cbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgQ29udGVudCBpcyBub3cgYXZhaWxhYmxlIG9mZmxpbmUhYClcblxuICAgICAgICAgICAgICAgIC8vIFBvc3QgdG8gc2VydmljZSB3b3JrZXIgdGhhdCBpbnN0YWxsIGlzIGNvbXBsZXRlLlxuICAgICAgICAgICAgICAgIC8vIERlbGF5IHRvIGFsbG93IHRpbWUgZm9yIHRoZSBldmVudCBsaXN0ZW5lciB0byBiZSBhZGRlZCAtLVxuICAgICAgICAgICAgICAgIC8vIG90aGVyd2lzZSBmZXRjaCBpcyBjYWxsZWQgdG9vIHNvb24gYW5kIHJlc291cmNlcyBhcmVuJ3QgY2FjaGVkLlxuICAgICAgICAgICAgICAgIGFwaVJ1bm5lcihgb25TZXJ2aWNlV29ya2VySW5zdGFsbGVkYCwgeyBzZXJ2aWNlV29ya2VyOiByZWcgfSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVha1xuXG4gICAgICAgICAgICBjYXNlIGByZWR1bmRhbnRgOlxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBUaGUgaW5zdGFsbGluZyBzZXJ2aWNlIHdvcmtlciBiZWNhbWUgcmVkdW5kYW50LmApXG4gICAgICAgICAgICAgIGFwaVJ1bm5lcihgb25TZXJ2aWNlV29ya2VyUmVkdW5kYW50YCwgeyBzZXJ2aWNlV29ya2VyOiByZWcgfSlcbiAgICAgICAgICAgICAgYnJlYWtcblxuICAgICAgICAgICAgY2FzZSBgYWN0aXZhdGVkYDpcbiAgICAgICAgICAgICAgYXBpUnVubmVyKGBvblNlcnZpY2VXb3JrZXJBY3RpdmVgLCB7IHNlcnZpY2VXb3JrZXI6IHJlZyB9KVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfSlcbiAgICAuY2F0Y2goZnVuY3Rpb24gKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYEVycm9yIGR1cmluZyBzZXJ2aWNlIHdvcmtlciByZWdpc3RyYXRpb246YCwgZSlcbiAgICB9KVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///154\n')},1578:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "Z": function() { return /* binding */ stripPrefix; }\n/* harmony export */ });\n/**\n * Remove a prefix from a string. Return the input string if the given prefix\n * isn\'t found.\n */function stripPrefix(str,prefix){if(prefix===void 0){prefix="";}if(!prefix){return str;}if(str===prefix){return"/";}if(str.startsWith(prefix+"/")){return str.slice(prefix.length);}return str;}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uLy5jYWNoZS9zdHJpcC1wcmVmaXguanM/NzEyMiJdLCJuYW1lcyI6WyJzdHJpcFByZWZpeCIsInN0ciIsInByZWZpeCIsInN0YXJ0c1dpdGgiLCJzbGljZSIsImxlbmd0aCJdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7QUFDQTtBQUNBO0FBQ0EsR0FFZSxRQUFTQSxZQUFULENBQXFCQyxHQUFyQixDQUEwQkMsTUFBMUIsQ0FBdUMsSUFBYkEsTUFBYSxXQUFiQSxNQUFhLEtBQ3BELEdBQUksQ0FBQ0EsTUFBTCxDQUFhLENBQ1gsTUFBT0QsSUFBUCxDQUNELENBRUQsR0FBSUEsR0FBRyxHQUFLQyxNQUFaLENBQW9CLENBQ2xCLFVBQ0QsQ0FFRCxHQUFJRCxHQUFHLENBQUNFLFVBQUosQ0FBa0JELE1BQWxCLEtBQUosQ0FBa0MsQ0FDaEMsTUFBT0QsSUFBRyxDQUFDRyxLQUFKLENBQVVGLE1BQU0sQ0FBQ0csTUFBakIsQ0FBUCxDQUNELENBRUQsTUFBT0osSUFBUCxDQUNEIiwiZmlsZSI6IjE1NzguanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFJlbW92ZSBhIHByZWZpeCBmcm9tIGEgc3RyaW5nLiBSZXR1cm4gdGhlIGlucHV0IHN0cmluZyBpZiB0aGUgZ2l2ZW4gcHJlZml4XG4gKiBpc24ndCBmb3VuZC5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdHJpcFByZWZpeChzdHIsIHByZWZpeCA9IGBgKSB7XG4gIGlmICghcHJlZml4KSB7XG4gICAgcmV0dXJuIHN0clxuICB9XG5cbiAgaWYgKHN0ciA9PT0gcHJlZml4KSB7XG4gICAgcmV0dXJuIGAvYFxuICB9XG5cbiAgaWYgKHN0ci5zdGFydHNXaXRoKGAke3ByZWZpeH0vYCkpIHtcbiAgICByZXR1cm4gc3RyLnNsaWNlKHByZWZpeC5sZW5ndGgpXG4gIH1cblxuICByZXR1cm4gc3RyXG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1578\n')},9037:function(I,g,C){"use strict";C.r(g)},5526:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("var _interopRequireDefault=__webpack_require__(5318);exports.__esModule=true;exports.wrapPageElement=void 0;var _wrapPage=_interopRequireDefault(__webpack_require__(6604));var wrapPageElement=_wrapPage.default;exports.wrapPageElement=wrapPageElement;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9nYXRzYnktcGx1Z2luLWludGwvZ2F0c2J5LWJyb3dzZXIuanM/ZjRiYSJdLCJuYW1lcyI6WyJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsImV4cG9ydHMiLCJfd3JhcFBhZ2UiLCJ3cmFwUGFnZUVsZW1lbnQiLCJkZWZhdWx0Il0sIm1hcHBpbmdzIjoiQUFFQSxHQUFJQSx1QkFBc0IsQ0FBR0MsbUJBQU8sQ0FBQyxJQUFELENBQXBDLENBRUFDLGtCQUFBLENBQXFCLElBQXJCLENBQ0FBLHVCQUFBLENBQTBCLElBQUssRUFBL0IsQ0FFQSxHQUFJQyxVQUFTLENBQUdILHNCQUFzQixDQUFDQyxtQkFBTyxDQUFDLElBQUQsQ0FBUixDQUF0QyxDQUVBLEdBQUlHLGdCQUFlLENBQUdELFNBQVMsQ0FBQ0UsT0FBaEMsQ0FDQUgsdUJBQUEsQ0FBMEJFLGVBQTFCIiwiZmlsZSI6IjU1MjYuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLndyYXBQYWdlRWxlbWVudCA9IHZvaWQgMDtcblxudmFyIF93cmFwUGFnZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vd3JhcC1wYWdlXCIpKTtcblxudmFyIHdyYXBQYWdlRWxlbWVudCA9IF93cmFwUGFnZS5kZWZhdWx0O1xuZXhwb3J0cy53cmFwUGFnZUVsZW1lbnQgPSB3cmFwUGFnZUVsZW1lbnQ7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5526\n")},8368:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("var _interopRequireDefault=__webpack_require__(5318);exports.__esModule=true;exports.IntlContextConsumer=exports.IntlContextProvider=void 0;var _react=_interopRequireDefault(__webpack_require__(7294));var IntlContext=_react.default.createContext();var IntlContextProvider=IntlContext.Provider;exports.IntlContextProvider=IntlContextProvider;var IntlContextConsumer=IntlContext.Consumer;exports.IntlContextConsumer=IntlContextConsumer;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9nYXRzYnktcGx1Z2luLWludGwvaW50bC1jb250ZXh0LmpzPzlmY2QiXSwibmFtZXMiOlsiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJleHBvcnRzIiwiX3JlYWN0IiwiSW50bENvbnRleHQiLCJkZWZhdWx0IiwiY3JlYXRlQ29udGV4dCIsIkludGxDb250ZXh0UHJvdmlkZXIiLCJQcm92aWRlciIsIkludGxDb250ZXh0Q29uc3VtZXIiLCJDb25zdW1lciJdLCJtYXBwaW5ncyI6IkFBRUEsR0FBSUEsdUJBQXNCLENBQUdDLG1CQUFPLENBQUMsSUFBRCxDQUFwQyxDQUVBQyxrQkFBQSxDQUFxQixJQUFyQixDQUNBQSwyQkFBQSxDQUE4QkEsMkJBQUEsQ0FBOEIsSUFBSyxFQUFqRSxDQUVBLEdBQUlDLE9BQU0sQ0FBR0gsc0JBQXNCLENBQUNDLG1CQUFPLENBQUMsSUFBRCxDQUFSLENBQW5DLENBRUEsR0FBSUcsWUFBVyxDQUFHRCxNQUFNLENBQUNFLE9BQVAsQ0FBZUMsYUFBZixFQUFsQixDQUVBLEdBQUlDLG9CQUFtQixDQUFHSCxXQUFXLENBQUNJLFFBQXRDLENBQ0FOLDJCQUFBLENBQThCSyxtQkFBOUIsQ0FDQSxHQUFJRSxvQkFBbUIsQ0FBR0wsV0FBVyxDQUFDTSxRQUF0QyxDQUNBUiwyQkFBQSxDQUE4Qk8sbUJBQTlCIiwiZmlsZSI6IjgzNjguanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLkludGxDb250ZXh0Q29uc3VtZXIgPSBleHBvcnRzLkludGxDb250ZXh0UHJvdmlkZXIgPSB2b2lkIDA7XG5cbnZhciBfcmVhY3QgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5cbnZhciBJbnRsQ29udGV4dCA9IF9yZWFjdC5kZWZhdWx0LmNyZWF0ZUNvbnRleHQoKTtcblxudmFyIEludGxDb250ZXh0UHJvdmlkZXIgPSBJbnRsQ29udGV4dC5Qcm92aWRlcjtcbmV4cG9ydHMuSW50bENvbnRleHRQcm92aWRlciA9IEludGxDb250ZXh0UHJvdmlkZXI7XG52YXIgSW50bENvbnRleHRDb25zdW1lciA9IEludGxDb250ZXh0LkNvbnN1bWVyO1xuZXhwb3J0cy5JbnRsQ29udGV4dENvbnN1bWVyID0gSW50bENvbnRleHRDb25zdW1lcjsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8368\n")},7060:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval("// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n \"FormattedDate\": function() { return /* binding */ FormattedDate; },\n \"FormattedDateParts\": function() { return /* binding */ FormattedDateParts; },\n \"FormattedDisplayName\": function() { return /* binding */ FormattedDisplayName; },\n \"FormattedHTMLMessage\": function() { return /* reexport */ html_message; },\n \"FormattedList\": function() { return /* binding */ FormattedList; },\n \"FormattedMessage\": function() { return /* reexport */ message; },\n \"FormattedNumber\": function() { return /* binding */ FormattedNumber; },\n \"FormattedNumberParts\": function() { return /* reexport */ FormattedNumberParts; },\n \"FormattedPlural\": function() { return /* reexport */ plural; },\n \"FormattedRelativeTime\": function() { return /* reexport */ relative; },\n \"FormattedTime\": function() { return /* binding */ FormattedTime; },\n \"FormattedTimeParts\": function() { return /* binding */ FormattedTimeParts; },\n \"IntlContext\": function() { return /* reexport */ Context; },\n \"IntlProvider\": function() { return /* reexport */ provider_IntlProvider; },\n \"RawIntlProvider\": function() { return /* reexport */ Provider; },\n \"createIntl\": function() { return /* reexport */ createIntl; },\n \"createIntlCache\": function() { return /* reexport */ createIntlCache; },\n \"defineMessages\": function() { return /* binding */ defineMessages; },\n \"injectIntl\": function() { return /* reexport */ injectIntl; },\n \"useIntl\": function() { return /* reexport */ useIntl; }\n});\n\n// EXTERNAL MODULE: ./node_modules/react/index.js\nvar react = __webpack_require__(7294);\nvar react_namespaceObject = /*#__PURE__*/__webpack_require__.t(react, 2);\n;// CONCATENATED MODULE: ./node_modules/intl-messageformat-parser/lib/types.js\nvar TYPE;\n\n(function (TYPE) {\n /**\n * Raw text\n */\n TYPE[TYPE[\"literal\"] = 0] = \"literal\";\n /**\n * Variable w/o any format, e.g `var` in `this is a {var}`\n */\n\n TYPE[TYPE[\"argument\"] = 1] = \"argument\";\n /**\n * Variable w/ number format\n */\n\n TYPE[TYPE[\"number\"] = 2] = \"number\";\n /**\n * Variable w/ date format\n */\n\n TYPE[TYPE[\"date\"] = 3] = \"date\";\n /**\n * Variable w/ time format\n */\n\n TYPE[TYPE[\"time\"] = 4] = \"time\";\n /**\n * Variable w/ select format\n */\n\n TYPE[TYPE[\"select\"] = 5] = \"select\";\n /**\n * Variable w/ plural format\n */\n\n TYPE[TYPE[\"plural\"] = 6] = \"plural\";\n /**\n * Only possible within plural argument.\n * This is the `#` symbol that will be substituted with the count.\n */\n\n TYPE[TYPE[\"pound\"] = 7] = \"pound\";\n})(TYPE || (TYPE = {}));\n/**\n * Type Guards\n */\n\n\nfunction isLiteralElement(el) {\n return el.type === TYPE.literal;\n}\nfunction isArgumentElement(el) {\n return el.type === TYPE.argument;\n}\nfunction isNumberElement(el) {\n return el.type === TYPE.number;\n}\nfunction isDateElement(el) {\n return el.type === TYPE.date;\n}\nfunction isTimeElement(el) {\n return el.type === TYPE.time;\n}\nfunction isSelectElement(el) {\n return el.type === TYPE.select;\n}\nfunction isPluralElement(el) {\n return el.type === TYPE.plural;\n}\nfunction isPoundElement(el) {\n return el.type === TYPE.pound;\n}\nfunction isNumberSkeleton(el) {\n return !!(el && typeof el === 'object' && el.type === 0\n /* number */\n );\n}\nfunction isDateTimeSkeleton(el) {\n return !!(el && typeof el === 'object' && el.type === 1\n /* dateTime */\n );\n}\nfunction createLiteralElement(value) {\n return {\n type: TYPE.literal,\n value: value\n };\n}\nfunction createNumberElement(value, style) {\n return {\n type: TYPE.number,\n value: value,\n style: style\n };\n}\n;// CONCATENATED MODULE: ./node_modules/intl-messageformat-parser/lib/parser.js\n// tslint:disable:only-arrow-functions\n// tslint:disable:object-literal-shorthand\n// tslint:disable:trailing-comma\n// tslint:disable:object-literal-sort-keys\n// tslint:disable:one-variable-per-declaration\n// tslint:disable:max-line-length\n// tslint:disable:no-consecutive-blank-lines\n// tslint:disable:align\nvar __extends = undefined && undefined.__extends || function () {\n var _extendStatics = function extendStatics(d, b) {\n _extendStatics = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function (d, b) {\n d.__proto__ = b;\n } || function (d, b) {\n for (var p in b) {\n if (b.hasOwnProperty(p)) d[p] = b[p];\n }\n };\n\n return _extendStatics(d, b);\n };\n\n return function (d, b) {\n _extendStatics(d, b);\n\n function __() {\n this.constructor = d;\n }\n\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\n\nvar __assign = undefined && undefined.__assign || function () {\n __assign = Object.assign || function (t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n\n for (var p in s) {\n if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n }\n\n return t;\n };\n\n return __assign.apply(this, arguments);\n}; // Generated by PEG.js v. 0.10.0 (ts-pegjs plugin v. 0.2.6 )\n//\n// https://pegjs.org/ https://github.com/metadevpro/ts-pegjs\n\n\n\n\nvar SyntaxError =\n/** @class */\nfunction (_super) {\n __extends(SyntaxError, _super);\n\n function SyntaxError(message, expected, found, location) {\n var _this = _super.call(this) || this;\n\n _this.message = message;\n _this.expected = expected;\n _this.found = found;\n _this.location = location;\n _this.name = \"SyntaxError\";\n\n if (typeof Error.captureStackTrace === \"function\") {\n Error.captureStackTrace(_this, SyntaxError);\n }\n\n return _this;\n }\n\n SyntaxError.buildMessage = function (expected, found) {\n function hex(ch) {\n return ch.charCodeAt(0).toString(16).toUpperCase();\n }\n\n function literalEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, \"\\\\\\\"\").replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, function (ch) {\n return \"\\\\x0\" + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function (ch) {\n return \"\\\\x\" + hex(ch);\n });\n }\n\n function classEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\\]/g, \"\\\\]\").replace(/\\^/g, \"\\\\^\").replace(/-/g, \"\\\\-\").replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, function (ch) {\n return \"\\\\x0\" + hex(ch);\n }).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function (ch) {\n return \"\\\\x\" + hex(ch);\n });\n }\n\n function describeExpectation(expectation) {\n switch (expectation.type) {\n case \"literal\":\n return \"\\\"\" + literalEscape(expectation.text) + \"\\\"\";\n\n case \"class\":\n var escapedParts = expectation.parts.map(function (part) {\n return Array.isArray(part) ? classEscape(part[0]) + \"-\" + classEscape(part[1]) : classEscape(part);\n });\n return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts + \"]\";\n\n case \"any\":\n return \"any character\";\n\n case \"end\":\n return \"end of input\";\n\n case \"other\":\n return expectation.description;\n }\n }\n\n function describeExpected(expected1) {\n var descriptions = expected1.map(describeExpectation);\n var i;\n var j;\n descriptions.sort();\n\n if (descriptions.length > 0) {\n for (i = 1, j = 1; i < descriptions.length; i++) {\n if (descriptions[i - 1] !== descriptions[i]) {\n descriptions[j] = descriptions[i];\n j++;\n }\n }\n\n descriptions.length = j;\n }\n\n switch (descriptions.length) {\n case 1:\n return descriptions[0];\n\n case 2:\n return descriptions[0] + \" or \" + descriptions[1];\n\n default:\n return descriptions.slice(0, -1).join(\", \") + \", or \" + descriptions[descriptions.length - 1];\n }\n }\n\n function describeFound(found1) {\n return found1 ? \"\\\"\" + literalEscape(found1) + \"\\\"\" : \"end of input\";\n }\n\n return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n };\n\n return SyntaxError;\n}(Error);\n\n\n\nfunction peg$parse(input, options) {\n options = options !== undefined ? options : {};\n var peg$FAILED = {};\n var peg$startRuleFunctions = {\n start: peg$parsestart\n };\n var peg$startRuleFunction = peg$parsestart;\n\n var peg$c0 = function peg$c0(parts) {\n return parts.join('');\n };\n\n var peg$c1 = function peg$c1(messageText) {\n return __assign({\n type: TYPE.literal,\n value: messageText\n }, insertLocation());\n };\n\n var peg$c2 = \"#\";\n var peg$c3 = peg$literalExpectation(\"#\", false);\n\n var peg$c4 = function peg$c4() {\n return __assign({\n type: TYPE.pound\n }, insertLocation());\n };\n\n var peg$c5 = peg$otherExpectation(\"argumentElement\");\n var peg$c6 = \"{\";\n var peg$c7 = peg$literalExpectation(\"{\", false);\n var peg$c8 = \"}\";\n var peg$c9 = peg$literalExpectation(\"}\", false);\n\n var peg$c10 = function peg$c10(value) {\n return __assign({\n type: TYPE.argument,\n value: value\n }, insertLocation());\n };\n\n var peg$c11 = peg$otherExpectation(\"numberSkeletonId\");\n var peg$c12 = /^['\\/{}]/;\n var peg$c13 = peg$classExpectation([\"'\", \"/\", \"{\", \"}\"], false, false);\n var peg$c14 = peg$anyExpectation();\n var peg$c15 = peg$otherExpectation(\"numberSkeletonTokenOption\");\n var peg$c16 = \"/\";\n var peg$c17 = peg$literalExpectation(\"/\", false);\n\n var peg$c18 = function peg$c18(option) {\n return option;\n };\n\n var peg$c19 = peg$otherExpectation(\"numberSkeletonToken\");\n\n var peg$c20 = function peg$c20(stem, options) {\n return {\n stem: stem,\n options: options\n };\n };\n\n var peg$c21 = function peg$c21(tokens) {\n return __assign({\n type: 0\n /* number */\n ,\n tokens: tokens\n }, insertLocation());\n };\n\n var peg$c22 = \"::\";\n var peg$c23 = peg$literalExpectation(\"::\", false);\n\n var peg$c24 = function peg$c24(skeleton) {\n return skeleton;\n };\n\n var peg$c25 = function peg$c25() {\n messageCtx.push('numberArgStyle');\n return true;\n };\n\n var peg$c26 = function peg$c26(style) {\n messageCtx.pop();\n return style.replace(/\\s*$/, '');\n };\n\n var peg$c27 = \",\";\n var peg$c28 = peg$literalExpectation(\",\", false);\n var peg$c29 = \"number\";\n var peg$c30 = peg$literalExpectation(\"number\", false);\n\n var peg$c31 = function peg$c31(value, type, style) {\n return __assign({\n type: type === 'number' ? TYPE.number : type === 'date' ? TYPE.date : TYPE.time,\n style: style && style[2],\n value: value\n }, insertLocation());\n };\n\n var peg$c32 = \"'\";\n var peg$c33 = peg$literalExpectation(\"'\", false);\n var peg$c34 = /^[^']/;\n var peg$c35 = peg$classExpectation([\"'\"], true, false);\n var peg$c36 = /^[^a-zA-Z'{}]/;\n var peg$c37 = peg$classExpectation([[\"a\", \"z\"], [\"A\", \"Z\"], \"'\", \"{\", \"}\"], true, false);\n var peg$c38 = /^[a-zA-Z]/;\n var peg$c39 = peg$classExpectation([[\"a\", \"z\"], [\"A\", \"Z\"]], false, false);\n\n var peg$c40 = function peg$c40(pattern) {\n return __assign({\n type: 1\n /* dateTime */\n ,\n pattern: pattern\n }, insertLocation());\n };\n\n var peg$c41 = function peg$c41() {\n messageCtx.push('dateOrTimeArgStyle');\n return true;\n };\n\n var peg$c42 = \"date\";\n var peg$c43 = peg$literalExpectation(\"date\", false);\n var peg$c44 = \"time\";\n var peg$c45 = peg$literalExpectation(\"time\", false);\n var peg$c46 = \"plural\";\n var peg$c47 = peg$literalExpectation(\"plural\", false);\n var peg$c48 = \"selectordinal\";\n var peg$c49 = peg$literalExpectation(\"selectordinal\", false);\n var peg$c50 = \"offset:\";\n var peg$c51 = peg$literalExpectation(\"offset:\", false);\n\n var peg$c52 = function peg$c52(value, pluralType, offset, options) {\n return __assign({\n type: TYPE.plural,\n pluralType: pluralType === 'plural' ? 'cardinal' : 'ordinal',\n value: value,\n offset: offset ? offset[2] : 0,\n options: options.reduce(function (all, _a) {\n var id = _a.id,\n value = _a.value,\n optionLocation = _a.location;\n\n if (id in all) {\n error(\"Duplicate option \\\"\" + id + \"\\\" in plural element: \\\"\" + text() + \"\\\"\", location());\n }\n\n all[id] = {\n value: value,\n location: optionLocation\n };\n return all;\n }, {})\n }, insertLocation());\n };\n\n var peg$c53 = \"select\";\n var peg$c54 = peg$literalExpectation(\"select\", false);\n\n var peg$c55 = function peg$c55(value, options) {\n return __assign({\n type: TYPE.select,\n value: value,\n options: options.reduce(function (all, _a) {\n var id = _a.id,\n value = _a.value,\n optionLocation = _a.location;\n\n if (id in all) {\n error(\"Duplicate option \\\"\" + id + \"\\\" in select element: \\\"\" + text() + \"\\\"\", location());\n }\n\n all[id] = {\n value: value,\n location: optionLocation\n };\n return all;\n }, {})\n }, insertLocation());\n };\n\n var peg$c56 = \"=\";\n var peg$c57 = peg$literalExpectation(\"=\", false);\n\n var peg$c58 = function peg$c58(id) {\n messageCtx.push('select');\n return true;\n };\n\n var peg$c59 = function peg$c59(id, value) {\n messageCtx.pop();\n return __assign({\n id: id,\n value: value\n }, insertLocation());\n };\n\n var peg$c60 = function peg$c60(id) {\n messageCtx.push('plural');\n return true;\n };\n\n var peg$c61 = function peg$c61(id, value) {\n messageCtx.pop();\n return __assign({\n id: id,\n value: value\n }, insertLocation());\n };\n\n var peg$c62 = peg$otherExpectation(\"whitespace\");\n var peg$c63 = /^[\\t-\\r \\x85\\xA0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]/;\n var peg$c64 = peg$classExpectation([[\"\\t\", \"\\r\"], \" \", \"\\x85\", \"\\xA0\", \"\\u1680\", [\"\\u2000\", \"\\u200A\"], \"\\u2028\", \"\\u2029\", \"\\u202F\", \"\\u205F\", \"\\u3000\"], false, false);\n var peg$c65 = peg$otherExpectation(\"syntax pattern\");\n var peg$c66 = /^[!-\\/:-@[-\\^`{-~\\xA1-\\xA7\\xA9\\xAB\\xAC\\xAE\\xB0\\xB1\\xB6\\xBB\\xBF\\xD7\\xF7\\u2010-\\u2027\\u2030-\\u203E\\u2041-\\u2053\\u2055-\\u205E\\u2190-\\u245F\\u2500-\\u2775\\u2794-\\u2BFF\\u2E00-\\u2E7F\\u3001-\\u3003\\u3008-\\u3020\\u3030\\uFD3E\\uFD3F\\uFE45\\uFE46]/;\n var peg$c67 = peg$classExpectation([[\"!\", \"/\"], [\":\", \"@\"], [\"[\", \"^\"], \"`\", [\"{\", \"~\"], [\"\\xA1\", \"\\xA7\"], \"\\xA9\", \"\\xAB\", \"\\xAC\", \"\\xAE\", \"\\xB0\", \"\\xB1\", \"\\xB6\", \"\\xBB\", \"\\xBF\", \"\\xD7\", \"\\xF7\", [\"\\u2010\", \"\\u2027\"], [\"\\u2030\", \"\\u203E\"], [\"\\u2041\", \"\\u2053\"], [\"\\u2055\", \"\\u205E\"], [\"\\u2190\", \"\\u245F\"], [\"\\u2500\", \"\\u2775\"], [\"\\u2794\", \"\\u2BFF\"], [\"\\u2E00\", \"\\u2E7F\"], [\"\\u3001\", \"\\u3003\"], [\"\\u3008\", \"\\u3020\"], \"\\u3030\", \"\\uFD3E\", \"\\uFD3F\", \"\\uFE45\", \"\\uFE46\"], false, false);\n var peg$c68 = peg$otherExpectation(\"optional whitespace\");\n var peg$c69 = peg$otherExpectation(\"number\");\n var peg$c70 = \"-\";\n var peg$c71 = peg$literalExpectation(\"-\", false);\n\n var peg$c72 = function peg$c72(negative, num) {\n return num ? negative ? -num : num : 0;\n };\n\n var peg$c73 = peg$otherExpectation(\"apostrophe\");\n var peg$c74 = peg$otherExpectation(\"double apostrophes\");\n var peg$c75 = \"''\";\n var peg$c76 = peg$literalExpectation(\"''\", false);\n\n var peg$c77 = function peg$c77() {\n return \"'\";\n };\n\n var peg$c78 = function peg$c78(escapedChar, quotedChars) {\n return escapedChar + quotedChars.replace(\"''\", \"'\");\n };\n\n var peg$c79 = function peg$c79(x) {\n return x !== '{' && !(isInPluralOption() && x === '#') && !(isNestedMessageText() && x === '}');\n };\n\n var peg$c80 = \"\\n\";\n var peg$c81 = peg$literalExpectation(\"\\n\", false);\n\n var peg$c82 = function peg$c82(x) {\n return x === '{' || x === '}' || isInPluralOption() && x === '#';\n };\n\n var peg$c83 = peg$otherExpectation(\"argNameOrNumber\");\n var peg$c84 = peg$otherExpectation(\"argNumber\");\n var peg$c85 = \"0\";\n var peg$c86 = peg$literalExpectation(\"0\", false);\n\n var peg$c87 = function peg$c87() {\n return 0;\n };\n\n var peg$c88 = /^[1-9]/;\n var peg$c89 = peg$classExpectation([[\"1\", \"9\"]], false, false);\n var peg$c90 = /^[0-9]/;\n var peg$c91 = peg$classExpectation([[\"0\", \"9\"]], false, false);\n\n var peg$c92 = function peg$c92(digits) {\n return parseInt(digits.join(''), 10);\n };\n\n var peg$c93 = peg$otherExpectation(\"argName\");\n var peg$currPos = 0;\n var peg$savedPos = 0;\n var peg$posDetailsCache = [{\n line: 1,\n column: 1\n }];\n var peg$maxFailPos = 0;\n var peg$maxFailExpected = [];\n var peg$silentFails = 0;\n var peg$result;\n\n if (options.startRule !== undefined) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(\"Can't start parsing from rule \\\"\" + options.startRule + \"\\\".\");\n }\n\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n\n function text() {\n return input.substring(peg$savedPos, peg$currPos);\n }\n\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n\n function expected(description, location1) {\n location1 = location1 !== undefined ? location1 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildStructuredError([peg$otherExpectation(description)], input.substring(peg$savedPos, peg$currPos), location1);\n }\n\n function error(message, location1) {\n location1 = location1 !== undefined ? location1 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildSimpleError(message, location1);\n }\n\n function peg$literalExpectation(text1, ignoreCase) {\n return {\n type: \"literal\",\n text: text1,\n ignoreCase: ignoreCase\n };\n }\n\n function peg$classExpectation(parts, inverted, ignoreCase) {\n return {\n type: \"class\",\n parts: parts,\n inverted: inverted,\n ignoreCase: ignoreCase\n };\n }\n\n function peg$anyExpectation() {\n return {\n type: \"any\"\n };\n }\n\n function peg$endExpectation() {\n return {\n type: \"end\"\n };\n }\n\n function peg$otherExpectation(description) {\n return {\n type: \"other\",\n description: description\n };\n }\n\n function peg$computePosDetails(pos) {\n var details = peg$posDetailsCache[pos];\n var p;\n\n if (details) {\n return details;\n } else {\n p = pos - 1;\n\n while (!peg$posDetailsCache[p]) {\n p--;\n }\n\n details = peg$posDetailsCache[p];\n details = {\n line: details.line,\n column: details.column\n };\n\n while (p < pos) {\n if (input.charCodeAt(p) === 10) {\n details.line++;\n details.column = 1;\n } else {\n details.column++;\n }\n\n p++;\n }\n\n peg$posDetailsCache[pos] = details;\n return details;\n }\n }\n\n function peg$computeLocation(startPos, endPos) {\n var startPosDetails = peg$computePosDetails(startPos);\n var endPosDetails = peg$computePosDetails(endPos);\n return {\n start: {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column\n },\n end: {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column\n }\n };\n }\n\n function peg$fail(expected1) {\n if (peg$currPos < peg$maxFailPos) {\n return;\n }\n\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n\n peg$maxFailExpected.push(expected1);\n }\n\n function peg$buildSimpleError(message, location1) {\n return new SyntaxError(message, [], \"\", location1);\n }\n\n function peg$buildStructuredError(expected1, found, location1) {\n return new SyntaxError(SyntaxError.buildMessage(expected1, found), expected1, found, location1);\n }\n\n function peg$parsestart() {\n var s0;\n s0 = peg$parsemessage();\n return s0;\n }\n\n function peg$parsemessage() {\n var s0, s1;\n s0 = [];\n s1 = peg$parsemessageElement();\n\n while (s1 !== peg$FAILED) {\n s0.push(s1);\n s1 = peg$parsemessageElement();\n }\n\n return s0;\n }\n\n function peg$parsemessageElement() {\n var s0;\n s0 = peg$parseliteralElement();\n\n if (s0 === peg$FAILED) {\n s0 = peg$parseargumentElement();\n\n if (s0 === peg$FAILED) {\n s0 = peg$parsesimpleFormatElement();\n\n if (s0 === peg$FAILED) {\n s0 = peg$parsepluralElement();\n\n if (s0 === peg$FAILED) {\n s0 = peg$parseselectElement();\n\n if (s0 === peg$FAILED) {\n s0 = peg$parsepoundElement();\n }\n }\n }\n }\n }\n\n return s0;\n }\n\n function peg$parsemessageText() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsedoubleApostrophes();\n\n if (s2 === peg$FAILED) {\n s2 = peg$parsequotedString();\n\n if (s2 === peg$FAILED) {\n s2 = peg$parseunquotedString();\n }\n }\n\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsedoubleApostrophes();\n\n if (s2 === peg$FAILED) {\n s2 = peg$parsequotedString();\n\n if (s2 === peg$FAILED) {\n s2 = peg$parseunquotedString();\n }\n }\n }\n } else {\n s1 = peg$FAILED;\n }\n\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c0(s1);\n }\n\n s0 = s1;\n return s0;\n }\n\n function peg$parseliteralElement() {\n var s0, s1;\n s0 = peg$currPos;\n s1 = peg$parsemessageText();\n\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c1(s1);\n }\n\n s0 = s1;\n return s0;\n }\n\n function peg$parsepoundElement() {\n var s0, s1;\n s0 = peg$currPos;\n\n if (input.charCodeAt(peg$currPos) === 35) {\n s1 = peg$c2;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c3);\n }\n }\n\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c4();\n }\n\n s0 = s1;\n return s0;\n }\n\n function peg$parseargumentElement() {\n var s0, s1, s2, s3, s4, s5;\n peg$silentFails++;\n s0 = peg$currPos;\n\n if (input.charCodeAt(peg$currPos) === 123) {\n s1 = peg$c6;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c7);\n }\n }\n\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n\n if (s2 !== peg$FAILED) {\n s3 = peg$parseargNameOrNumber();\n\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n\n if (s4 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s5 = peg$c8;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c9);\n }\n }\n\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c10(s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n peg$silentFails--;\n\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c5);\n }\n }\n\n return s0;\n }\n\n function peg$parsenumberSkeletonId() {\n var s0, s1, s2, s3, s4;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$currPos;\n s3 = peg$currPos;\n peg$silentFails++;\n s4 = peg$parsewhiteSpace();\n\n if (s4 === peg$FAILED) {\n if (peg$c12.test(input.charAt(peg$currPos))) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c13);\n }\n }\n }\n\n peg$silentFails--;\n\n if (s4 === peg$FAILED) {\n s3 = undefined;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n\n if (s3 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c14);\n }\n }\n\n if (s4 !== peg$FAILED) {\n s3 = [s3, s4];\n s2 = s3;\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$currPos;\n s3 = peg$currPos;\n peg$silentFails++;\n s4 = peg$parsewhiteSpace();\n\n if (s4 === peg$FAILED) {\n if (peg$c12.test(input.charAt(peg$currPos))) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c13);\n }\n }\n }\n\n peg$silentFails--;\n\n if (s4 === peg$FAILED) {\n s3 = undefined;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n\n if (s3 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c14);\n }\n }\n\n if (s4 !== peg$FAILED) {\n s3 = [s3, s4];\n s2 = s3;\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n }\n } else {\n s1 = peg$FAILED;\n }\n\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n } else {\n s0 = s1;\n }\n\n peg$silentFails--;\n\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c11);\n }\n }\n\n return s0;\n }\n\n function peg$parsenumberSkeletonTokenOption() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n\n if (input.charCodeAt(peg$currPos) === 47) {\n s1 = peg$c16;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c17);\n }\n }\n\n if (s1 !== peg$FAILED) {\n s2 = peg$parsenumberSkeletonId();\n\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c18(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n peg$silentFails--;\n\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c15);\n }\n }\n\n return s0;\n }\n\n function peg$parsenumberSkeletonToken() {\n var s0, s1, s2, s3, s4;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parse_();\n\n if (s1 !== peg$FAILED) {\n s2 = peg$parsenumberSkeletonId();\n\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parsenumberSkeletonTokenOption();\n\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parsenumberSkeletonTokenOption();\n }\n\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c20(s2, s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n peg$silentFails--;\n\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c19);\n }\n }\n\n return s0;\n }\n\n function peg$parsenumberSkeleton() {\n var s0, s1, s2;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsenumberSkeletonToken();\n\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsenumberSkeletonToken();\n }\n } else {\n s1 = peg$FAILED;\n }\n\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c21(s1);\n }\n\n s0 = s1;\n return s0;\n }\n\n function peg$parsenumberArgStyle() {\n var s0, s1, s2;\n s0 = peg$currPos;\n\n if (input.substr(peg$currPos, 2) === peg$c22) {\n s1 = peg$c22;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c23);\n }\n }\n\n if (s1 !== peg$FAILED) {\n s2 = peg$parsenumberSkeleton();\n\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c24(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n peg$savedPos = peg$currPos;\n s1 = peg$c25();\n\n if (s1) {\n s1 = undefined;\n } else {\n s1 = peg$FAILED;\n }\n\n if (s1 !== peg$FAILED) {\n s2 = peg$parsemessageText();\n\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c26(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n\n return s0;\n }\n\n function peg$parsenumberFormatElement() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12;\n s0 = peg$currPos;\n\n if (input.charCodeAt(peg$currPos) === 123) {\n s1 = peg$c6;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c7);\n }\n }\n\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n\n if (s2 !== peg$FAILED) {\n s3 = peg$parseargNameOrNumber();\n\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n\n if (s4 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s5 = peg$c27;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c28);\n }\n }\n\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n\n if (s6 !== peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c29) {\n s7 = peg$c29;\n peg$currPos += 6;\n } else {\n s7 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c30);\n }\n }\n\n if (s7 !== peg$FAILED) {\n s8 = peg$parse_();\n\n if (s8 !== peg$FAILED) {\n s9 = peg$currPos;\n\n if (input.charCodeAt(peg$currPos) === 44) {\n s10 = peg$c27;\n peg$currPos++;\n } else {\n s10 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c28);\n }\n }\n\n if (s10 !== peg$FAILED) {\n s11 = peg$parse_();\n\n if (s11 !== peg$FAILED) {\n s12 = peg$parsenumberArgStyle();\n\n if (s12 !== peg$FAILED) {\n s10 = [s10, s11, s12];\n s9 = s10;\n } else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n } else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n } else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n\n if (s9 === peg$FAILED) {\n s9 = null;\n }\n\n if (s9 !== peg$FAILED) {\n s10 = peg$parse_();\n\n if (s10 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s11 = peg$c8;\n peg$currPos++;\n } else {\n s11 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c9);\n }\n }\n\n if (s11 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c31(s3, s7, s9);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsedateTimeSkeletonLiteral() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n\n if (input.charCodeAt(peg$currPos) === 39) {\n s1 = peg$c32;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c33);\n }\n }\n\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parsedoubleApostrophes();\n\n if (s3 === peg$FAILED) {\n if (peg$c34.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c35);\n }\n }\n }\n\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsedoubleApostrophes();\n\n if (s3 === peg$FAILED) {\n if (peg$c34.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c35);\n }\n }\n }\n }\n } else {\n s2 = peg$FAILED;\n }\n\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 39) {\n s3 = peg$c32;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c33);\n }\n }\n\n if (s3 !== peg$FAILED) {\n s1 = [s1, s2, s3];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n if (s0 === peg$FAILED) {\n s0 = [];\n s1 = peg$parsedoubleApostrophes();\n\n if (s1 === peg$FAILED) {\n if (peg$c36.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c37);\n }\n }\n }\n\n if (s1 !== peg$FAILED) {\n while (s1 !== peg$FAILED) {\n s0.push(s1);\n s1 = peg$parsedoubleApostrophes();\n\n if (s1 === peg$FAILED) {\n if (peg$c36.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c37);\n }\n }\n }\n }\n } else {\n s0 = peg$FAILED;\n }\n }\n\n return s0;\n }\n\n function peg$parsedateTimeSkeletonPattern() {\n var s0, s1;\n s0 = [];\n\n if (peg$c38.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c39);\n }\n }\n\n if (s1 !== peg$FAILED) {\n while (s1 !== peg$FAILED) {\n s0.push(s1);\n\n if (peg$c38.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c39);\n }\n }\n }\n } else {\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsedateTimeSkeleton() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = [];\n s3 = peg$parsedateTimeSkeletonLiteral();\n\n if (s3 === peg$FAILED) {\n s3 = peg$parsedateTimeSkeletonPattern();\n }\n\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsedateTimeSkeletonLiteral();\n\n if (s3 === peg$FAILED) {\n s3 = peg$parsedateTimeSkeletonPattern();\n }\n }\n } else {\n s2 = peg$FAILED;\n }\n\n if (s2 !== peg$FAILED) {\n s1 = input.substring(s1, peg$currPos);\n } else {\n s1 = s2;\n }\n\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c40(s1);\n }\n\n s0 = s1;\n return s0;\n }\n\n function peg$parsedateOrTimeArgStyle() {\n var s0, s1, s2;\n s0 = peg$currPos;\n\n if (input.substr(peg$currPos, 2) === peg$c22) {\n s1 = peg$c22;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c23);\n }\n }\n\n if (s1 !== peg$FAILED) {\n s2 = peg$parsedateTimeSkeleton();\n\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c24(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n peg$savedPos = peg$currPos;\n s1 = peg$c41();\n\n if (s1) {\n s1 = undefined;\n } else {\n s1 = peg$FAILED;\n }\n\n if (s1 !== peg$FAILED) {\n s2 = peg$parsemessageText();\n\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c26(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n\n return s0;\n }\n\n function peg$parsedateOrTimeFormatElement() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12;\n s0 = peg$currPos;\n\n if (input.charCodeAt(peg$currPos) === 123) {\n s1 = peg$c6;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c7);\n }\n }\n\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n\n if (s2 !== peg$FAILED) {\n s3 = peg$parseargNameOrNumber();\n\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n\n if (s4 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s5 = peg$c27;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c28);\n }\n }\n\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n\n if (s6 !== peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c42) {\n s7 = peg$c42;\n peg$currPos += 4;\n } else {\n s7 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c43);\n }\n }\n\n if (s7 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c44) {\n s7 = peg$c44;\n peg$currPos += 4;\n } else {\n s7 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c45);\n }\n }\n }\n\n if (s7 !== peg$FAILED) {\n s8 = peg$parse_();\n\n if (s8 !== peg$FAILED) {\n s9 = peg$currPos;\n\n if (input.charCodeAt(peg$currPos) === 44) {\n s10 = peg$c27;\n peg$currPos++;\n } else {\n s10 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c28);\n }\n }\n\n if (s10 !== peg$FAILED) {\n s11 = peg$parse_();\n\n if (s11 !== peg$FAILED) {\n s12 = peg$parsedateOrTimeArgStyle();\n\n if (s12 !== peg$FAILED) {\n s10 = [s10, s11, s12];\n s9 = s10;\n } else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n } else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n } else {\n peg$currPos = s9;\n s9 = peg$FAILED;\n }\n\n if (s9 === peg$FAILED) {\n s9 = null;\n }\n\n if (s9 !== peg$FAILED) {\n s10 = peg$parse_();\n\n if (s10 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s11 = peg$c8;\n peg$currPos++;\n } else {\n s11 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c9);\n }\n }\n\n if (s11 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c31(s3, s7, s9);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsesimpleFormatElement() {\n var s0;\n s0 = peg$parsenumberFormatElement();\n\n if (s0 === peg$FAILED) {\n s0 = peg$parsedateOrTimeFormatElement();\n }\n\n return s0;\n }\n\n function peg$parsepluralElement() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14, s15;\n s0 = peg$currPos;\n\n if (input.charCodeAt(peg$currPos) === 123) {\n s1 = peg$c6;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c7);\n }\n }\n\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n\n if (s2 !== peg$FAILED) {\n s3 = peg$parseargNameOrNumber();\n\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n\n if (s4 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s5 = peg$c27;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c28);\n }\n }\n\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n\n if (s6 !== peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c46) {\n s7 = peg$c46;\n peg$currPos += 6;\n } else {\n s7 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c47);\n }\n }\n\n if (s7 === peg$FAILED) {\n if (input.substr(peg$currPos, 13) === peg$c48) {\n s7 = peg$c48;\n peg$currPos += 13;\n } else {\n s7 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c49);\n }\n }\n }\n\n if (s7 !== peg$FAILED) {\n s8 = peg$parse_();\n\n if (s8 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s9 = peg$c27;\n peg$currPos++;\n } else {\n s9 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c28);\n }\n }\n\n if (s9 !== peg$FAILED) {\n s10 = peg$parse_();\n\n if (s10 !== peg$FAILED) {\n s11 = peg$currPos;\n\n if (input.substr(peg$currPos, 7) === peg$c50) {\n s12 = peg$c50;\n peg$currPos += 7;\n } else {\n s12 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c51);\n }\n }\n\n if (s12 !== peg$FAILED) {\n s13 = peg$parse_();\n\n if (s13 !== peg$FAILED) {\n s14 = peg$parsenumber();\n\n if (s14 !== peg$FAILED) {\n s12 = [s12, s13, s14];\n s11 = s12;\n } else {\n peg$currPos = s11;\n s11 = peg$FAILED;\n }\n } else {\n peg$currPos = s11;\n s11 = peg$FAILED;\n }\n } else {\n peg$currPos = s11;\n s11 = peg$FAILED;\n }\n\n if (s11 === peg$FAILED) {\n s11 = null;\n }\n\n if (s11 !== peg$FAILED) {\n s12 = peg$parse_();\n\n if (s12 !== peg$FAILED) {\n s13 = [];\n s14 = peg$parsepluralOption();\n\n if (s14 !== peg$FAILED) {\n while (s14 !== peg$FAILED) {\n s13.push(s14);\n s14 = peg$parsepluralOption();\n }\n } else {\n s13 = peg$FAILED;\n }\n\n if (s13 !== peg$FAILED) {\n s14 = peg$parse_();\n\n if (s14 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s15 = peg$c8;\n peg$currPos++;\n } else {\n s15 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c9);\n }\n }\n\n if (s15 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c52(s3, s7, s11, s13);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseselectElement() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13;\n s0 = peg$currPos;\n\n if (input.charCodeAt(peg$currPos) === 123) {\n s1 = peg$c6;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c7);\n }\n }\n\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n\n if (s2 !== peg$FAILED) {\n s3 = peg$parseargNameOrNumber();\n\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n\n if (s4 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s5 = peg$c27;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c28);\n }\n }\n\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n\n if (s6 !== peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c53) {\n s7 = peg$c53;\n peg$currPos += 6;\n } else {\n s7 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c54);\n }\n }\n\n if (s7 !== peg$FAILED) {\n s8 = peg$parse_();\n\n if (s8 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s9 = peg$c27;\n peg$currPos++;\n } else {\n s9 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c28);\n }\n }\n\n if (s9 !== peg$FAILED) {\n s10 = peg$parse_();\n\n if (s10 !== peg$FAILED) {\n s11 = [];\n s12 = peg$parseselectOption();\n\n if (s12 !== peg$FAILED) {\n while (s12 !== peg$FAILED) {\n s11.push(s12);\n s12 = peg$parseselectOption();\n }\n } else {\n s11 = peg$FAILED;\n }\n\n if (s11 !== peg$FAILED) {\n s12 = peg$parse_();\n\n if (s12 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s13 = peg$c8;\n peg$currPos++;\n } else {\n s13 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c9);\n }\n }\n\n if (s13 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c55(s3, s11);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsepluralRuleSelectValue() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$currPos;\n\n if (input.charCodeAt(peg$currPos) === 61) {\n s2 = peg$c56;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c57);\n }\n }\n\n if (s2 !== peg$FAILED) {\n s3 = peg$parsenumber();\n\n if (s3 !== peg$FAILED) {\n s2 = [s2, s3];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n } else {\n s0 = s1;\n }\n\n if (s0 === peg$FAILED) {\n s0 = peg$parseargName();\n }\n\n return s0;\n }\n\n function peg$parseselectOption() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n s0 = peg$currPos;\n s1 = peg$parse_();\n\n if (s1 !== peg$FAILED) {\n s2 = peg$parseargName();\n\n if (s2 !== peg$FAILED) {\n s3 = peg$parse_();\n\n if (s3 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 123) {\n s4 = peg$c6;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c7);\n }\n }\n\n if (s4 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s5 = peg$c58(s2);\n\n if (s5) {\n s5 = undefined;\n } else {\n s5 = peg$FAILED;\n }\n\n if (s5 !== peg$FAILED) {\n s6 = peg$parsemessage();\n\n if (s6 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s7 = peg$c8;\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c9);\n }\n }\n\n if (s7 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c59(s2, s6);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsepluralOption() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n s0 = peg$currPos;\n s1 = peg$parse_();\n\n if (s1 !== peg$FAILED) {\n s2 = peg$parsepluralRuleSelectValue();\n\n if (s2 !== peg$FAILED) {\n s3 = peg$parse_();\n\n if (s3 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 123) {\n s4 = peg$c6;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c7);\n }\n }\n\n if (s4 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s5 = peg$c60(s2);\n\n if (s5) {\n s5 = undefined;\n } else {\n s5 = peg$FAILED;\n }\n\n if (s5 !== peg$FAILED) {\n s6 = peg$parsemessage();\n\n if (s6 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s7 = peg$c8;\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c9);\n }\n }\n\n if (s7 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c61(s2, s6);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parsewhiteSpace() {\n var s0, s1;\n peg$silentFails++;\n\n if (peg$c63.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c64);\n }\n }\n\n peg$silentFails--;\n\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c62);\n }\n }\n\n return s0;\n }\n\n function peg$parsepatternSyntax() {\n var s0, s1;\n peg$silentFails++;\n\n if (peg$c66.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c67);\n }\n }\n\n peg$silentFails--;\n\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c65);\n }\n }\n\n return s0;\n }\n\n function peg$parse_() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsewhiteSpace();\n\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsewhiteSpace();\n }\n\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n } else {\n s0 = s1;\n }\n\n peg$silentFails--;\n\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c68);\n }\n }\n\n return s0;\n }\n\n function peg$parsenumber() {\n var s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n\n if (input.charCodeAt(peg$currPos) === 45) {\n s1 = peg$c70;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c71);\n }\n }\n\n if (s1 === peg$FAILED) {\n s1 = null;\n }\n\n if (s1 !== peg$FAILED) {\n s2 = peg$parseargNumber();\n\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c72(s1, s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n peg$silentFails--;\n\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c69);\n }\n }\n\n return s0;\n }\n\n function peg$parseapostrophe() {\n var s0, s1;\n peg$silentFails++;\n\n if (input.charCodeAt(peg$currPos) === 39) {\n s0 = peg$c32;\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c33);\n }\n }\n\n peg$silentFails--;\n\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c73);\n }\n }\n\n return s0;\n }\n\n function peg$parsedoubleApostrophes() {\n var s0, s1;\n peg$silentFails++;\n s0 = peg$currPos;\n\n if (input.substr(peg$currPos, 2) === peg$c75) {\n s1 = peg$c75;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c76);\n }\n }\n\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c77();\n }\n\n s0 = s1;\n peg$silentFails--;\n\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c74);\n }\n }\n\n return s0;\n }\n\n function peg$parsequotedString() {\n var s0, s1, s2, s3, s4, s5;\n s0 = peg$currPos;\n\n if (input.charCodeAt(peg$currPos) === 39) {\n s1 = peg$c32;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c33);\n }\n }\n\n if (s1 !== peg$FAILED) {\n s2 = peg$parseescapedChar();\n\n if (s2 !== peg$FAILED) {\n s3 = peg$currPos;\n s4 = [];\n\n if (input.substr(peg$currPos, 2) === peg$c75) {\n s5 = peg$c75;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c76);\n }\n }\n\n if (s5 === peg$FAILED) {\n if (peg$c34.test(input.charAt(peg$currPos))) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c35);\n }\n }\n }\n\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n\n if (input.substr(peg$currPos, 2) === peg$c75) {\n s5 = peg$c75;\n peg$currPos += 2;\n } else {\n s5 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c76);\n }\n }\n\n if (s5 === peg$FAILED) {\n if (peg$c34.test(input.charAt(peg$currPos))) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c35);\n }\n }\n }\n }\n\n if (s4 !== peg$FAILED) {\n s3 = input.substring(s3, peg$currPos);\n } else {\n s3 = s4;\n }\n\n if (s3 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 39) {\n s4 = peg$c32;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c33);\n }\n }\n\n if (s4 === peg$FAILED) {\n s4 = null;\n }\n\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c78(s2, s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n\n return s0;\n }\n\n function peg$parseunquotedString() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$currPos;\n\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c14);\n }\n }\n\n if (s2 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s3 = peg$c79(s2);\n\n if (s3) {\n s3 = undefined;\n } else {\n s3 = peg$FAILED;\n }\n\n if (s3 !== peg$FAILED) {\n s2 = [s2, s3];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n\n if (s1 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 10) {\n s1 = peg$c80;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c81);\n }\n }\n }\n\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n } else {\n s0 = s1;\n }\n\n return s0;\n }\n\n function peg$parseescapedChar() {\n var s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$currPos;\n\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c14);\n }\n }\n\n if (s2 !== peg$FAILED) {\n peg$savedPos = peg$currPos;\n s3 = peg$c82(s2);\n\n if (s3) {\n s3 = undefined;\n } else {\n s3 = peg$FAILED;\n }\n\n if (s3 !== peg$FAILED) {\n s2 = [s2, s3];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n } else {\n s0 = s1;\n }\n\n return s0;\n }\n\n function peg$parseargNameOrNumber() {\n var s0, s1;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = peg$parseargNumber();\n\n if (s1 === peg$FAILED) {\n s1 = peg$parseargName();\n }\n\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n } else {\n s0 = s1;\n }\n\n peg$silentFails--;\n\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c83);\n }\n }\n\n return s0;\n }\n\n function peg$parseargNumber() {\n var s0, s1, s2, s3, s4;\n peg$silentFails++;\n s0 = peg$currPos;\n\n if (input.charCodeAt(peg$currPos) === 48) {\n s1 = peg$c85;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c86);\n }\n }\n\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c87();\n }\n\n s0 = s1;\n\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$currPos;\n\n if (peg$c88.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c89);\n }\n }\n\n if (s2 !== peg$FAILED) {\n s3 = [];\n\n if (peg$c90.test(input.charAt(peg$currPos))) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c91);\n }\n }\n\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n\n if (peg$c90.test(input.charAt(peg$currPos))) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c91);\n }\n }\n }\n\n if (s3 !== peg$FAILED) {\n s2 = [s2, s3];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c92(s1);\n }\n\n s0 = s1;\n }\n\n peg$silentFails--;\n\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c84);\n }\n }\n\n return s0;\n }\n\n function peg$parseargName() {\n var s0, s1, s2, s3, s4;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$currPos;\n s3 = peg$currPos;\n peg$silentFails++;\n s4 = peg$parsewhiteSpace();\n\n if (s4 === peg$FAILED) {\n s4 = peg$parsepatternSyntax();\n }\n\n peg$silentFails--;\n\n if (s4 === peg$FAILED) {\n s3 = undefined;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n\n if (s3 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c14);\n }\n }\n\n if (s4 !== peg$FAILED) {\n s3 = [s3, s4];\n s2 = s3;\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$currPos;\n s3 = peg$currPos;\n peg$silentFails++;\n s4 = peg$parsewhiteSpace();\n\n if (s4 === peg$FAILED) {\n s4 = peg$parsepatternSyntax();\n }\n\n peg$silentFails--;\n\n if (s4 === peg$FAILED) {\n s3 = undefined;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n\n if (s3 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s4 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c14);\n }\n }\n\n if (s4 !== peg$FAILED) {\n s3 = [s3, s4];\n s2 = s3;\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n }\n } else {\n s1 = peg$FAILED;\n }\n\n if (s1 !== peg$FAILED) {\n s0 = input.substring(s0, peg$currPos);\n } else {\n s0 = s1;\n }\n\n peg$silentFails--;\n\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n\n if (peg$silentFails === 0) {\n peg$fail(peg$c93);\n }\n }\n\n return s0;\n }\n\n var messageCtx = ['root'];\n\n function isNestedMessageText() {\n return messageCtx.length > 1;\n }\n\n function isInPluralOption() {\n return messageCtx[messageCtx.length - 1] === 'plural';\n }\n\n function insertLocation() {\n return options && options.captureLocation ? {\n location: location()\n } : {};\n }\n\n peg$result = peg$startRuleFunction();\n\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail(peg$endExpectation());\n }\n\n throw peg$buildStructuredError(peg$maxFailExpected, peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos));\n }\n}\n\nvar pegParse = peg$parse;\n;// CONCATENATED MODULE: ./node_modules/intl-messageformat-parser/lib/normalize.js\nvar __spreadArrays = undefined && undefined.__spreadArrays || function () {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) {\n s += arguments[i].length;\n }\n\n for (var r = Array(s), k = 0, i = 0; i < il; i++) {\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) {\n r[k] = a[j];\n }\n }\n\n return r;\n};\n\n\n\nvar PLURAL_HASHTAG_REGEX = /(^|[^\\\\])#/g;\n/**\n * Whether to convert `#` in plural rule options\n * to `{var, number}`\n * @param el AST Element\n * @param pluralStack current plural stack\n */\n\nfunction normalizeHashtagInPlural(els) {\n els.forEach(function (el) {\n // If we're encountering a plural el\n if (!isPluralElement(el) && !isSelectElement(el)) {\n return;\n } // Go down the options and search for # in any literal element\n\n\n Object.keys(el.options).forEach(function (id) {\n var _a;\n\n var opt = el.options[id]; // If we got a match, we have to split this\n // and inject a NumberElement in the middle\n\n var matchingLiteralElIndex = -1;\n var literalEl = undefined;\n\n for (var i = 0; i < opt.value.length; i++) {\n var el_1 = opt.value[i];\n\n if (isLiteralElement(el_1) && PLURAL_HASHTAG_REGEX.test(el_1.value)) {\n matchingLiteralElIndex = i;\n literalEl = el_1;\n break;\n }\n }\n\n if (literalEl) {\n var newValue = literalEl.value.replace(PLURAL_HASHTAG_REGEX, \"$1{\" + el.value + \", number}\");\n var newEls = pegParse(newValue);\n\n (_a = opt.value).splice.apply(_a, __spreadArrays([matchingLiteralElIndex, 1], newEls));\n }\n\n normalizeHashtagInPlural(opt.value);\n });\n });\n}\n;// CONCATENATED MODULE: ./node_modules/intl-messageformat-parser/lib/index.js\n\n\n\n\n\nfunction parse(input, opts) {\n var els = pegParse(input, opts);\n\n if (!opts || opts.normalizeHashtagInPlural !== false) {\n normalizeHashtagInPlural(els);\n }\n\n return els;\n}\n;// CONCATENATED MODULE: ./node_modules/intl-format-cache/lib/index.js\n/*\nCopyright (c) 2014, Yahoo! Inc. All rights reserved.\nCopyrights licensed under the New BSD License.\nSee the accompanying LICENSE file for terms.\n*/\nvar lib_spreadArrays = undefined && undefined.__spreadArrays || function () {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) {\n s += arguments[i].length;\n }\n\n for (var r = Array(s), k = 0, i = 0; i < il; i++) {\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) {\n r[k] = a[j];\n }\n }\n\n return r;\n}; // -- Utilities ----------------------------------------------------------------\n\n\nfunction getCacheId(inputs) {\n return JSON.stringify(inputs.map(function (input) {\n return input && typeof input === 'object' ? orderedProps(input) : input;\n }));\n}\n\nfunction orderedProps(obj) {\n return Object.keys(obj).sort().map(function (k) {\n var _a;\n\n return _a = {}, _a[k] = obj[k], _a;\n });\n}\n\nvar memoizeFormatConstructor = function memoizeFormatConstructor(FormatConstructor, cache) {\n if (cache === void 0) {\n cache = {};\n }\n\n return function () {\n var _a;\n\n var args = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n\n var cacheId = getCacheId(args);\n var format = cacheId && cache[cacheId];\n\n if (!format) {\n format = new ((_a = FormatConstructor).bind.apply(_a, lib_spreadArrays([void 0], args)))();\n\n if (cacheId) {\n cache[cacheId] = format;\n }\n }\n\n return format;\n };\n};\n\n/* harmony default export */ var lib = (memoizeFormatConstructor);\n;// CONCATENATED MODULE: ./node_modules/intl-messageformat-parser/lib/skeleton.js\nvar skeleton_assign = undefined && undefined.__assign || function () {\n skeleton_assign = Object.assign || function (t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n\n for (var p in s) {\n if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n }\n\n return t;\n };\n\n return skeleton_assign.apply(this, arguments);\n};\n/**\n * https://unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * Credit: https://github.com/caridy/intl-datetimeformat-pattern/blob/master/index.js\n * with some tweaks\n */\n\n\nvar DATE_TIME_REGEX = /(?:[Eec]{1,6}|G{1,5}|[Qq]{1,5}|(?:[yYur]+|U{1,5})|[ML]{1,5}|d{1,2}|D{1,3}|F{1}|[abB]{1,5}|[hkHK]{1,2}|w{1,2}|W{1}|m{1,2}|s{1,2}|[zZOvVxX]{1,4})(?=([^']*'[^']*')*[^']*$)/g;\n/**\n * Parse Date time skeleton into Intl.DateTimeFormatOptions\n * Ref: https://unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * @public\n * @param skeleton skeleton string\n */\n\nfunction parseDateTimeSkeleton(skeleton) {\n var result = {};\n skeleton.replace(DATE_TIME_REGEX, function (match) {\n var len = match.length;\n\n switch (match[0]) {\n // Era\n case 'G':\n result.era = len === 4 ? 'long' : len === 5 ? 'narrow' : 'short';\n break;\n // Year\n\n case 'y':\n result.year = len === 2 ? '2-digit' : 'numeric';\n break;\n\n case 'Y':\n case 'u':\n case 'U':\n case 'r':\n throw new RangeError('`Y/u/U/r` (year) patterns are not supported, use `y` instead');\n // Quarter\n\n case 'q':\n case 'Q':\n throw new RangeError('`q/Q` (quarter) patterns are not supported');\n // Month\n\n case 'M':\n case 'L':\n result.month = ['numeric', '2-digit', 'short', 'long', 'narrow'][len - 1];\n break;\n // Week\n\n case 'w':\n case 'W':\n throw new RangeError('`w/W` (week) patterns are not supported');\n\n case 'd':\n result.day = ['numeric', '2-digit'][len - 1];\n break;\n\n case 'D':\n case 'F':\n case 'g':\n throw new RangeError('`D/F/g` (day) patterns are not supported, use `d` instead');\n // Weekday\n\n case 'E':\n result.weekday = len === 4 ? 'short' : len === 5 ? 'narrow' : 'short';\n break;\n\n case 'e':\n if (len < 4) {\n throw new RangeError('`e..eee` (weekday) patterns are not supported');\n }\n\n result.weekday = ['short', 'long', 'narrow', 'short'][len - 4];\n break;\n\n case 'c':\n if (len < 4) {\n throw new RangeError('`c..ccc` (weekday) patterns are not supported');\n }\n\n result.weekday = ['short', 'long', 'narrow', 'short'][len - 4];\n break;\n // Period\n\n case 'a':\n // AM, PM\n result.hour12 = true;\n break;\n\n case 'b': // am, pm, noon, midnight\n\n case 'B':\n // flexible day periods\n throw new RangeError('`b/B` (period) patterns are not supported, use `a` instead');\n // Hour\n\n case 'h':\n result.hourCycle = 'h12';\n result.hour = ['numeric', '2-digit'][len - 1];\n break;\n\n case 'H':\n result.hourCycle = 'h23';\n result.hour = ['numeric', '2-digit'][len - 1];\n break;\n\n case 'K':\n result.hourCycle = 'h11';\n result.hour = ['numeric', '2-digit'][len - 1];\n break;\n\n case 'k':\n result.hourCycle = 'h24';\n result.hour = ['numeric', '2-digit'][len - 1];\n break;\n\n case 'j':\n case 'J':\n case 'C':\n throw new RangeError('`j/J/C` (hour) patterns are not supported, use `h/H/K/k` instead');\n // Minute\n\n case 'm':\n result.minute = ['numeric', '2-digit'][len - 1];\n break;\n // Second\n\n case 's':\n result.second = ['numeric', '2-digit'][len - 1];\n break;\n\n case 'S':\n case 'A':\n throw new RangeError('`S/A` (second) pattenrs are not supported, use `s` instead');\n // Zone\n\n case 'z':\n // 1..3, 4: specific non-location format\n result.timeZoneName = len < 4 ? 'short' : 'long';\n break;\n\n case 'Z': // 1..3, 4, 5: The ISO8601 varios formats\n\n case 'O': // 1, 4: miliseconds in day short, long\n\n case 'v': // 1, 4: generic non-location format\n\n case 'V': // 1, 2, 3, 4: time zone ID or city\n\n case 'X': // 1, 2, 3, 4: The ISO8601 varios formats\n\n case 'x':\n // 1, 2, 3, 4: The ISO8601 varios formats\n throw new RangeError('`Z/O/v/V/X/x` (timeZone) pattenrs are not supported, use `z` instead');\n }\n\n return '';\n });\n return result;\n}\n\nfunction icuUnitToEcma(unit) {\n return unit.replace(/^(.*?)-/, '');\n}\n\nvar FRACTION_PRECISION_REGEX = /^\\.(?:(0+)(\\+|#+)?)?$/g;\nvar SIGNIFICANT_PRECISION_REGEX = /^(@+)?(\\+|#+)?$/g;\n\nfunction parseSignificantPrecision(str) {\n var result = {};\n str.replace(SIGNIFICANT_PRECISION_REGEX, function (_, g1, g2) {\n // @@@ case\n if (typeof g2 !== 'string') {\n result.minimumSignificantDigits = g1.length;\n result.maximumSignificantDigits = g1.length;\n } // @@@+ case\n else if (g2 === '+') {\n result.minimumSignificantDigits = g1.length;\n } // .### case\n else if (g1[0] === '#') {\n result.maximumSignificantDigits = g1.length;\n } // .@@## or .@@@ case\n else {\n result.minimumSignificantDigits = g1.length;\n result.maximumSignificantDigits = g1.length + (typeof g2 === 'string' ? g2.length : 0);\n }\n\n return '';\n });\n return result;\n}\n\nfunction parseSign(str) {\n switch (str) {\n case 'sign-auto':\n return {\n signDisplay: 'auto'\n };\n\n case 'sign-accounting':\n return {\n currencySign: 'accounting'\n };\n\n case 'sign-always':\n return {\n signDisplay: 'always'\n };\n\n case 'sign-accounting-always':\n return {\n signDisplay: 'always',\n currencySign: 'accounting'\n };\n\n case 'sign-except-zero':\n return {\n signDisplay: 'exceptZero'\n };\n\n case 'sign-accounting-except-zero':\n return {\n signDisplay: 'exceptZero',\n currencySign: 'accounting'\n };\n\n case 'sign-never':\n return {\n signDisplay: 'never'\n };\n }\n}\n\nfunction parseNotationOptions(opt) {\n var result = {};\n var signOpts = parseSign(opt);\n\n if (signOpts) {\n return signOpts;\n }\n\n return result;\n}\n/**\n * https://github.com/unicode-org/icu/blob/master/docs/userguide/format_parse/numbers/skeletons.md#skeleton-stems-and-options\n */\n\n\nfunction convertNumberSkeletonToNumberFormatOptions(tokens) {\n var result = {};\n\n for (var _i = 0, tokens_1 = tokens; _i < tokens_1.length; _i++) {\n var token = tokens_1[_i];\n\n switch (token.stem) {\n case 'percent':\n result.style = 'percent';\n continue;\n\n case 'currency':\n result.style = 'currency';\n result.currency = token.options[0];\n continue;\n\n case 'group-off':\n result.useGrouping = false;\n continue;\n\n case 'precision-integer':\n result.maximumFractionDigits = 0;\n continue;\n\n case 'measure-unit':\n result.style = 'unit';\n result.unit = icuUnitToEcma(token.options[0]);\n continue;\n\n case 'compact-short':\n result.notation = 'compact';\n result.compactDisplay = 'short';\n continue;\n\n case 'compact-long':\n result.notation = 'compact';\n result.compactDisplay = 'long';\n continue;\n\n case 'scientific':\n result = skeleton_assign(skeleton_assign(skeleton_assign({}, result), {\n notation: 'scientific'\n }), token.options.reduce(function (all, opt) {\n return skeleton_assign(skeleton_assign({}, all), parseNotationOptions(opt));\n }, {}));\n continue;\n\n case 'engineering':\n result = skeleton_assign(skeleton_assign(skeleton_assign({}, result), {\n notation: 'engineering'\n }), token.options.reduce(function (all, opt) {\n return skeleton_assign(skeleton_assign({}, all), parseNotationOptions(opt));\n }, {}));\n continue;\n\n case 'notation-simple':\n result.notation = 'standard';\n continue;\n // https://github.com/unicode-org/icu/blob/master/icu4c/source/i18n/unicode/unumberformatter.h\n\n case 'unit-width-narrow':\n result.currencyDisplay = 'narrowSymbol';\n result.unitDisplay = 'narrow';\n continue;\n\n case 'unit-width-short':\n result.currencyDisplay = 'code';\n result.unitDisplay = 'short';\n continue;\n\n case 'unit-width-full-name':\n result.currencyDisplay = 'name';\n result.unitDisplay = 'long';\n continue;\n\n case 'unit-width-iso-code':\n result.currencyDisplay = 'symbol';\n continue;\n } // Precision\n // https://github.com/unicode-org/icu/blob/master/docs/userguide/format_parse/numbers/skeletons.md#fraction-precision\n\n\n if (FRACTION_PRECISION_REGEX.test(token.stem)) {\n if (token.options.length > 1) {\n throw new RangeError('Fraction-precision stems only accept a single optional option');\n }\n\n token.stem.replace(FRACTION_PRECISION_REGEX, function (match, g1, g2) {\n // precision-integer case\n if (match === '.') {\n result.maximumFractionDigits = 0;\n } // .000+ case\n else if (g2 === '+') {\n result.minimumFractionDigits = g2.length;\n } // .### case\n else if (g1[0] === '#') {\n result.maximumFractionDigits = g1.length;\n } // .00## or .000 case\n else {\n result.minimumFractionDigits = g1.length;\n result.maximumFractionDigits = g1.length + (typeof g2 === 'string' ? g2.length : 0);\n }\n\n return '';\n });\n\n if (token.options.length) {\n result = skeleton_assign(skeleton_assign({}, result), parseSignificantPrecision(token.options[0]));\n }\n\n continue;\n }\n\n if (SIGNIFICANT_PRECISION_REGEX.test(token.stem)) {\n result = skeleton_assign(skeleton_assign({}, result), parseSignificantPrecision(token.stem));\n continue;\n }\n\n var signOpts = parseSign(token.stem);\n\n if (signOpts) {\n result = skeleton_assign(skeleton_assign({}, result), signOpts);\n }\n }\n\n return result;\n}\n;// CONCATENATED MODULE: ./node_modules/gatsby-plugin-intl/node_modules/intl-messageformat/lib/formatters.js\nvar formatters_extends=undefined&&undefined.__extends||function(){var _extendStatics=function extendStatics(d,b){_extendStatics=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(d,b){d.__proto__=b;}||function(d,b){for(var p in b){if(b.hasOwnProperty(p))d[p]=b[p];}};return _extendStatics(d,b);};return function(d,b){_extendStatics(d,b);function __(){this.constructor=d;}d.prototype=b===null?Object.create(b):(__.prototype=b.prototype,new __());};}();var formatters_spreadArrays=undefined&&undefined.__spreadArrays||function(){for(var s=0,i=0,il=arguments.length;i(.*?)<\\/([0-9a-zA-Z-_]*?)>)|(<[0-9a-zA-Z-_]*?\\/>)/;var TEMPLATE_ID=Date.now()+'@@';var VOID_ELEMENTS=['area','base','br','col','embed','hr','img','input','link','meta','param','source','track','wbr'];function formatHTMLElement(el,objectParts,values){var tagName=el.tagName;var outerHTML=el.outerHTML,textContent=el.textContent,childNodes=el.childNodes;// Regular text\nif(!tagName){return restoreRichPlaceholderMessage(textContent||'',objectParts);}tagName=tagName.toLowerCase();var isVoidElement=~VOID_ELEMENTS.indexOf(tagName);var formatFnOrValue=values[tagName];if(formatFnOrValue&&isVoidElement){throw new FormatError(tagName+\" is a self-closing tag and can not be used, please use another tag name.\");}if(!childNodes.length){return[outerHTML];}var chunks=Array.prototype.slice.call(childNodes).reduce(function(all,child){return all.concat(formatHTMLElement(child,objectParts,values));},[]);// Legacy HTML\nif(!formatFnOrValue){return formatters_spreadArrays([\"<\"+tagName+\">\"],chunks,[\"\"]);}// HTML Tag replacement\nif(typeof formatFnOrValue==='function'){return[formatFnOrValue.apply(void 0,chunks)];}return[formatFnOrValue];}function formatHTMLMessage(els,locales,formatters,formats,values,// For debugging\noriginalMessage){var parts=formatToParts(els,locales,formatters,formats,values,undefined,originalMessage);var objectParts={};var formattedMessage=parts.reduce(function(all,part){if(part.type===0/* literal */){return all+=part.value;}var id=generateId();objectParts[id]=part.value;return all+=\"\"+TOKEN_DELIMITER+id+TOKEN_DELIMITER;},'');// Not designed to filter out aggressively\nif(!SIMPLE_XML_REGEX.test(formattedMessage)){return restoreRichPlaceholderMessage(formattedMessage,objectParts);}if(!values){throw new FormatError('Message has placeholders but no values was given');}if(typeof DOMParser==='undefined'){throw new FormatError('Cannot format XML message without DOMParser');}if(!domParser){domParser=new DOMParser();}var content=domParser.parseFromString(\"\"+formattedMessage+\"\",'text/html').getElementById(TEMPLATE_ID);if(!content){throw new FormatError(\"Malformed HTML message \"+formattedMessage);}var tagsToFormat=Object.keys(values).filter(function(varName){return!!content.getElementsByTagName(varName).length;});// No tags to format\nif(!tagsToFormat.length){return restoreRichPlaceholderMessage(formattedMessage,objectParts);}var caseSensitiveTags=tagsToFormat.filter(function(tagName){return tagName!==tagName.toLowerCase();});if(caseSensitiveTags.length){throw new FormatError(\"HTML tag must be lowercased but the following tags are not: \"+caseSensitiveTags.join(', '));}// We're doing this since top node is `` which does not have a formatter\nreturn Array.prototype.slice.call(content.childNodes).reduce(function(all,child){return all.concat(formatHTMLElement(child,objectParts,values));},[]);}\n;// CONCATENATED MODULE: ./node_modules/gatsby-plugin-intl/node_modules/intl-messageformat/lib/core.js\n/*\nCopyright (c) 2014, Yahoo! Inc. All rights reserved.\nCopyrights licensed under the New BSD License.\nSee the accompanying LICENSE file for terms.\n*/var core_assign=undefined&&undefined.__assign||function(){core_assign=Object.assign||function(t){for(var s,i=1,n=arguments.length;i<\"']/g;function utils_escape(str){return(''+str).replace(UNSAFE_CHARS_REGEX,function(match){return ESCAPED_CHARS[match.charCodeAt(0)];});}function filterProps(props,whitelist,defaults){if(defaults===void 0){defaults={};}return whitelist.reduce(function(filtered,name){if(name in props){filtered[name]=props[name];}else if(name in defaults){filtered[name]=defaults[name];}return filtered;},{});}function invariantIntlContext(intl){(0,invariant/* invariant */.k)(intl,'[React Intl] Could not find required `intl` object. '+' needs to exist in the component ancestry.');}function createError(message,exception){var eMsg=exception?\"\\n\"+exception.stack:'';return\"[React Intl] \"+message+eMsg;}function defaultErrorHandler(error){if(false){}}var DEFAULT_INTL_CONFIG={formats:{},messages:{},timeZone:undefined,textComponent:react.Fragment,defaultLocale:'en',defaultFormats:{},onError:defaultErrorHandler};function createIntlCache(){return{dateTime:{},number:{},message:{},relativeTime:{},pluralRules:{},list:{},displayNames:{}};}/**\n * Create intl formatters and populate cache\n * @param cache explicit cache to prevent leaking memory\n */function createFormatters(cache){if(cache===void 0){cache=createIntlCache();}var RelativeTimeFormat=Intl.RelativeTimeFormat;var ListFormat=Intl.ListFormat;var DisplayNames=Intl.DisplayNames;return{getDateTimeFormat:lib(Intl.DateTimeFormat,cache.dateTime),getNumberFormat:lib(Intl.NumberFormat,cache.number),getMessageFormat:lib(intl_messageformat_lib,cache.message),getRelativeTimeFormat:lib(RelativeTimeFormat,cache.relativeTime),getPluralRules:lib(Intl.PluralRules,cache.pluralRules),getListFormat:lib(ListFormat,cache.list),getDisplayNames:lib(DisplayNames,cache.displayNames)};}function getNamedFormat(formats,type,name,onError){var formatType=formats&&formats[type];var format;if(formatType){format=formatType[name];}if(format){return format;}onError(createError(\"No \"+type+\" format named: \"+name));}\n// EXTERNAL MODULE: ./node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js\nvar hoist_non_react_statics_cjs = __webpack_require__(5706);\nvar hoist_non_react_statics_cjs_default = /*#__PURE__*/__webpack_require__.n(hoist_non_react_statics_cjs);\n;// CONCATENATED MODULE: ./node_modules/gatsby-plugin-intl/node_modules/react-intl/lib/components/injectIntl.js\n// Since rollup cannot deal with namespace being a function,\n// this is to interop with TypeScript since `invariant`\n// does not export a default\n// https://github.com/rollup/rollup/issues/1267\nvar hoistNonReactStatics=(hoist_non_react_statics_cjs_default())||hoist_non_react_statics_cjs;function getDisplayName(Component){return Component.displayName||Component.name||'Component';}// TODO: We should provide initial value here\nvar IntlContext=/*#__PURE__*/react.createContext(null);var IntlConsumer=IntlContext.Consumer,IntlProvider=IntlContext.Provider;var Provider=IntlProvider;var Context=IntlContext;function injectIntl(WrappedComponent,options){var _ref=options||{},_ref$intlPropName=_ref.intlPropName,intlPropName=_ref$intlPropName===void 0?'intl':_ref$intlPropName,_ref$forwardRef=_ref.forwardRef,forwardRef=_ref$forwardRef===void 0?false:_ref$forwardRef,_ref$enforceContext=_ref.enforceContext,enforceContext=_ref$enforceContext===void 0?true:_ref$enforceContext;var WithIntl=function WithIntl(props){return/*#__PURE__*/react.createElement(IntlConsumer,null,function(intl){var _Object$assign;if(enforceContext){invariantIntlContext(intl);}return/*#__PURE__*/react.createElement(WrappedComponent,Object.assign({},props,(_Object$assign={},_Object$assign[intlPropName]=intl,_Object$assign),{ref:forwardRef?props.forwardedRef:null}));});};WithIntl.displayName=\"injectIntl(\"+getDisplayName(WrappedComponent)+\")\";WithIntl.WrappedComponent=WrappedComponent;if(forwardRef){return hoistNonReactStatics(/*#__PURE__*/react.forwardRef(function(props,ref){return/*#__PURE__*/react.createElement(WithIntl,Object.assign({},props,{forwardedRef:ref}));}),WrappedComponent);}return hoistNonReactStatics(WithIntl,WrappedComponent);}\n;// CONCATENATED MODULE: ./node_modules/gatsby-plugin-intl/node_modules/react-intl/lib/components/createFormattedComponent.js\nvar __rest=undefined&&undefined.__rest||function(s,e){var t={};for(var p in s){if(Object.prototype.hasOwnProperty.call(s,p)&&e.indexOf(p)<0)t[p]=s[p];}if(s!=null&&typeof Object.getOwnPropertySymbols===\"function\")for(var i=0,p=Object.getOwnPropertySymbols(s);i for the\n// default locale, and a default message is in the source.\nif(!defaultMessage||locale&&locale.toLowerCase()!==defaultLocale.toLowerCase()){onError(createError(\"Missing message: \\\"\"+id+\"\\\" for locale: \\\"\"+locale+\"\\\"\"+(defaultMessage?', using default message as fallback.':'')));}}if(!formattedMessageParts.length&&defaultMessage){try{var _formatter=state.getMessageFormat(defaultMessage,defaultLocale,defaultFormats);formattedMessageParts=_formatter.formatHTMLMessage(values);}catch(e){onError(createError(\"Error formatting the default message for: \\\"\"+id+\"\\\"\",e));}}if(!formattedMessageParts.length){onError(createError(\"Cannot format message: \\\"\"+id+\"\\\", \"+(\"using message \"+(message||defaultMessage?'source':'id')+\" as fallback.\")));if(typeof message==='string'){return message||defaultMessage||String(id);}return defaultMessage||String(id);}if(formattedMessageParts.length===1&&typeof formattedMessageParts[0]==='string'){return formattedMessageParts[0]||defaultMessage||String(id);}return prepareIntlMessageFormatHtmlOutput(formattedMessageParts);}function message_formatHTMLMessage(config,state,messageDescriptor,rawValues){if(messageDescriptor===void 0){messageDescriptor={id:''};}if(rawValues===void 0){rawValues={};}// Process all the values before they are used when formatting the ICU\n// Message string. Since the formatted message might be injected via\n// `innerHTML`, all String-based values need to be HTML-escaped.\nvar escapedValues=Object.keys(rawValues).reduce(function(escaped,name){var value=rawValues[name];escaped[name]=typeof value==='string'?utils_escape(value):value;return escaped;},{});return formatMessage(config,state,messageDescriptor,escapedValues);}\n// EXTERNAL MODULE: ./node_modules/shallow-equal/objects/index.js\nvar objects = __webpack_require__(9108);\nvar objects_default = /*#__PURE__*/__webpack_require__.n(objects);\n;// CONCATENATED MODULE: ./node_modules/gatsby-plugin-intl/node_modules/react-intl/lib/formatters/list.js\nvar LIST_FORMAT_OPTIONS=['localeMatcher','type','style'];var now=Date.now();function generateToken(i){return now+\"_\"+i+\"_\"+now;}function formatList(_ref,getListFormat,values,options){var locale=_ref.locale,onError=_ref.onError;if(options===void 0){options={};}var ListFormat=Intl.ListFormat;if(!ListFormat){onError(createError(\"Intl.ListFormat is not available in this environment.\\nTry polyfilling it using \\\"@formatjs/intl-listformat\\\"\\n\"));}var filteredOptions=filterProps(options,LIST_FORMAT_OPTIONS);try{var richValues={};var serializedValues=values.map(function(v,i){if(typeof v==='object'){var id=generateToken(i);richValues[id]=v;return id;}return String(v);});if(!Object.keys(richValues).length){return getListFormat(locale,filteredOptions).format(serializedValues);}var parts=getListFormat(locale,filteredOptions).formatToParts(serializedValues);return parts.reduce(function(all,el){var val=el.value;if(richValues[val]){all.push(richValues[val]);}else if(typeof all[all.length-1]==='string'){all[all.length-1]+=val;}else{all.push(val);}return all;},[]);}catch(e){onError(createError('Error formatting list.',e));}return values;}\n;// CONCATENATED MODULE: ./node_modules/gatsby-plugin-intl/node_modules/react-intl/lib/formatters/displayName.js\nvar DISPLAY_NAMES_OPTONS=['localeMatcher','style','type','fallback'];function formatDisplayName(_ref,getDisplayNames,value,options){var locale=_ref.locale,onError=_ref.onError;if(options===void 0){options={};}var DisplayNames=Intl.DisplayNames;if(!DisplayNames){onError(createError(\"Intl.DisplayNames is not available in this environment.\\nTry polyfilling it using \\\"@formatjs/intl-displaynames\\\"\\n\"));}var filteredOptions=filterProps(options,DISPLAY_NAMES_OPTONS);try{return getDisplayNames(locale,filteredOptions).of(value);}catch(e){onError(createError('Error formatting display name.',e));}}\n;// CONCATENATED MODULE: ./node_modules/gatsby-plugin-intl/node_modules/react-intl/lib/components/provider.js\n/*\n * Copyright 2015, Yahoo Inc.\n * Copyrights licensed under the New BSD License.\n * See the accompanying LICENSE file for terms.\n */var shallowEquals=(objects_default())||objects;function processIntlConfig(config){return{locale:config.locale,timeZone:config.timeZone,formats:config.formats,textComponent:config.textComponent,messages:config.messages,defaultLocale:config.defaultLocale,defaultFormats:config.defaultFormats,onError:config.onError};}/**\n * Create intl object\n * @param config intl config\n * @param cache cache for formatter instances to prevent memory leak\n */function createIntl(config,cache){var formatters=createFormatters(cache);var resolvedConfig=Object.assign(Object.assign({},DEFAULT_INTL_CONFIG),config);var locale=resolvedConfig.locale,defaultLocale=resolvedConfig.defaultLocale,onError=resolvedConfig.onError;if(!locale){if(onError){onError(createError(\"\\\"locale\\\" was not configured, using \\\"\"+defaultLocale+\"\\\" as fallback. See https://github.com/formatjs/react-intl/blob/master/docs/API.md#intlshape for more details\"));}// Since there's no registered locale data for `locale`, this will\n// fallback to the `defaultLocale` to make sure things can render.\n// The `messages` are overridden to the `defaultProps` empty object\n// to maintain referential equality across re-renders. It's assumed\n// each contains a `defaultMessage` prop.\nresolvedConfig.locale=resolvedConfig.defaultLocale||'en';}else if(!Intl.NumberFormat.supportedLocalesOf(locale).length&&onError){onError(createError(\"Missing locale data for locale: \\\"\"+locale+\"\\\" in Intl.NumberFormat. Using default locale: \\\"\"+defaultLocale+\"\\\" as fallback. See https://github.com/formatjs/react-intl/blob/master/docs/Getting-Started.md#runtime-requirements for more details\"));}else if(!Intl.DateTimeFormat.supportedLocalesOf(locale).length&&onError){onError(createError(\"Missing locale data for locale: \\\"\"+locale+\"\\\" in Intl.DateTimeFormat. Using default locale: \\\"\"+defaultLocale+\"\\\" as fallback. See https://github.com/formatjs/react-intl/blob/master/docs/Getting-Started.md#runtime-requirements for more details\"));}return Object.assign(Object.assign({},resolvedConfig),{formatters:formatters,formatNumber:formatNumber.bind(null,resolvedConfig,formatters.getNumberFormat),formatNumberToParts:formatNumberToParts.bind(null,resolvedConfig,formatters.getNumberFormat),formatRelativeTime:formatRelativeTime.bind(null,resolvedConfig,formatters.getRelativeTimeFormat),formatDate:formatDate.bind(null,resolvedConfig,formatters.getDateTimeFormat),formatDateToParts:formatDateToParts.bind(null,resolvedConfig,formatters.getDateTimeFormat),formatTime:formatTime.bind(null,resolvedConfig,formatters.getDateTimeFormat),formatTimeToParts:formatTimeToParts.bind(null,resolvedConfig,formatters.getDateTimeFormat),formatPlural:formatPlural.bind(null,resolvedConfig,formatters.getPluralRules),formatMessage:formatMessage.bind(null,resolvedConfig,formatters),formatHTMLMessage:message_formatHTMLMessage.bind(null,resolvedConfig,formatters),formatList:formatList.bind(null,resolvedConfig,formatters.getListFormat),formatDisplayName:formatDisplayName.bind(null,resolvedConfig,formatters.getDisplayNames)});}var provider_IntlProvider=/*#__PURE__*/function(_React$PureComponent){(0,inheritsLoose/* default */.Z)(IntlProvider,_React$PureComponent);function IntlProvider(){var _this;_this=_React$PureComponent.apply(this,arguments)||this;_this.cache=createIntlCache();_this.state={cache:_this.cache,intl:createIntl(processIntlConfig(_this.props),_this.cache),prevConfig:processIntlConfig(_this.props)};return _this;}IntlProvider.getDerivedStateFromProps=function getDerivedStateFromProps(props,_ref){var prevConfig=_ref.prevConfig,cache=_ref.cache;var config=processIntlConfig(props);if(!shallowEquals(prevConfig,config)){return{intl:createIntl(config,cache),prevConfig:config};}return null;};var _proto=IntlProvider.prototype;_proto.render=function render(){invariantIntlContext(this.state.intl);return/*#__PURE__*/react.createElement(Provider,{value:this.state.intl},this.props.children);};return IntlProvider;}(react.PureComponent);provider_IntlProvider.displayName='IntlProvider';provider_IntlProvider.defaultProps=DEFAULT_INTL_CONFIG;\n;// CONCATENATED MODULE: ./node_modules/gatsby-plugin-intl/node_modules/react-intl/lib/components/relative.js\n/*\n * Copyright 2015, Yahoo Inc.\n * Copyrights licensed under the New BSD License.\n * See the accompanying LICENSE file for terms.\n */var MINUTE=60;var HOUR=60*60;var DAY=60*60*24;function selectUnit(seconds){var absValue=Math.abs(seconds);if(absValue=currentValueInSeconds?prevInterestingValueInSeconds-unitDuration:prevInterestingValueInSeconds;var delayInSeconds=Math.abs(nextInterestingValueInSeconds-currentValueInSeconds);this._updateTimer=setTimeout(function(){return _this2.setState({currentValueInSeconds:nextInterestingValueInSeconds});},delayInSeconds*1e3);};_proto.componentDidMount=function componentDidMount(){this.scheduleNextUpdate(this.props,this.state);};_proto.componentDidUpdate=function componentDidUpdate(){this.scheduleNextUpdate(this.props,this.state);};_proto.componentWillUnmount=function componentWillUnmount(){clearTimeout(this._updateTimer);this._updateTimer=null;};FormattedRelativeTime.getDerivedStateFromProps=function getDerivedStateFromProps(props,state){if(props.unit!==state.prevUnit||props.value!==state.prevValue){return{prevValue:props.value,prevUnit:props.unit,currentValueInSeconds:canIncrement(props.unit)?valueToSeconds(props.value,props.unit):0};}return null;};_proto.render=function render(){var _this3=this;return/*#__PURE__*/react.createElement(Context.Consumer,null,function(intl){invariantIntlContext(intl);var formatRelativeTime=intl.formatRelativeTime,Text=intl.textComponent;var _this3$props=_this3.props,children=_this3$props.children,value=_this3$props.value,unit=_this3$props.unit,updateIntervalInSeconds=_this3$props.updateIntervalInSeconds;var currentValueInSeconds=_this3.state.currentValueInSeconds;var currentValue=value||0;var currentUnit=unit;if(canIncrement(unit)&&typeof currentValueInSeconds==='number'&&updateIntervalInSeconds){currentUnit=selectUnit(currentValueInSeconds);var unitDuration=getDurationInSeconds(currentUnit);currentValue=Math.round(currentValueInSeconds/unitDuration);}var formattedRelativeTime=formatRelativeTime(currentValue,currentUnit,Object.assign({},_this3.props));if(typeof children==='function'){return children(formattedRelativeTime);}if(Text){return/*#__PURE__*/react.createElement(Text,null,formattedRelativeTime);}return formattedRelativeTime;});};return FormattedRelativeTime;}(react.PureComponent);FormattedRelativeTime.displayName='FormattedRelativeTime';FormattedRelativeTime.defaultProps={value:0,unit:'second'};/* harmony default export */ var relative = (FormattedRelativeTime);\n;// CONCATENATED MODULE: ./node_modules/gatsby-plugin-intl/node_modules/react-intl/lib/components/plural.js\n/*\n * Copyright 2015, Yahoo Inc.\n * Copyrights licensed under the New BSD License.\n * See the accompanying LICENSE file for terms.\n */var FormattedPlural=function FormattedPlural(props){var value=props.value,other=props.other,children=props.children,_props$intl=props.intl,formatPlural=_props$intl.formatPlural,Text=_props$intl.textComponent;var pluralCategory=formatPlural(value,props);var formattedPlural=props[pluralCategory]||other;if(typeof children==='function'){return children(formattedPlural);}if(Text){return/*#__PURE__*/react.createElement(Text,null,formattedPlural);}// Work around @types/react where React.FC cannot return string\nreturn formattedPlural;};FormattedPlural.defaultProps={type:'cardinal'};FormattedPlural.displayName='FormattedPlural';/* harmony default export */ var plural = (injectIntl(FormattedPlural));\n;// CONCATENATED MODULE: ./node_modules/gatsby-plugin-intl/node_modules/react-intl/lib/components/message.js\n/*\n * Copyright 2015, Yahoo Inc.\n * Copyrights licensed under the New BSD License.\n * See the accompanying LICENSE file for terms.\n */var message_rest=undefined&&undefined.__rest||function(s,e){var t={};for(var p in s){if(Object.prototype.hasOwnProperty.call(s,p)&&e.indexOf(p)<0)t[p]=s[p];}if(s!=null&&typeof Object.getOwnPropertySymbols===\"function\")for(var i=0,p=Object.getOwnPropertySymbols(s);i dynamic > splat > root\n//\n// This way we don\'t have to worry about the order of our routes, let the\n// computers do it.\n//\n// A route looks like this\n//\n// { path, default, value }\n//\n// And a returned match looks like:\n//\n// { route, params, uri }\n//\n// I know, I should use TypeScript not comments for these types.\n\n\nvar pick = function pick(routes, uri) {\n var match = void 0;\n var default_ = void 0;\n\n var _uri$split = uri.split("?"),\n uriPathname = _uri$split[0];\n\n var uriSegments = segmentize(uriPathname);\n var isRootUri = uriSegments[0] === "";\n var ranked = rankRoutes(routes);\n\n for (var i = 0, l = ranked.length; i < l; i++) {\n var missed = false;\n var route = ranked[i].route;\n\n if (route.default) {\n default_ = {\n route: route,\n params: {},\n uri: uri\n };\n continue;\n }\n\n var routeSegments = segmentize(route.path);\n var params = {};\n var max = Math.max(uriSegments.length, routeSegments.length);\n var index = 0;\n\n for (; index < max; index++) {\n var routeSegment = routeSegments[index];\n var uriSegment = uriSegments[index];\n\n if (isSplat(routeSegment)) {\n // Hit a splat, just grab the rest, and return a match\n // uri: /files/documents/work\n // route: /files/*\n var param = routeSegment.slice(1) || "*";\n params[param] = uriSegments.slice(index).map(decodeURIComponent).join("/");\n break;\n }\n\n if (uriSegment === undefined) {\n // URI is shorter than the route, no match\n // uri: /users\n // route: /users/:userId\n missed = true;\n break;\n }\n\n var dynamicMatch = paramRe.exec(routeSegment);\n\n if (dynamicMatch && !isRootUri) {\n var matchIsNotReserved = reservedNames.indexOf(dynamicMatch[1]) === -1;\n !matchIsNotReserved ? false ? 0 : browser_default()(false) : void 0;\n var value = decodeURIComponent(uriSegment);\n params[dynamicMatch[1]] = value;\n } else if (routeSegment !== uriSegment) {\n // Current segments don\'t match, not dynamic, not splat, so no match\n // uri: /users/123/settings\n // route: /users/:id/profile\n missed = true;\n break;\n }\n }\n\n if (!missed) {\n match = {\n route: route,\n params: params,\n uri: "/" + uriSegments.slice(0, index).join("/")\n };\n break;\n }\n }\n\n return match || default_ || null;\n}; ////////////////////////////////////////////////////////////////////////////////\n// match(path, uri) - Matches just one path to a uri, also lol\n\n\nvar match = function match(path, uri) {\n return pick([{\n path: path\n }], uri);\n}; ////////////////////////////////////////////////////////////////////////////////\n// resolve(to, basepath)\n//\n// Resolves URIs as though every path is a directory, no files. Relative URIs\n// in the browser can feel awkward because not only can you be "in a directory"\n// you can be "at a file", too. For example\n//\n// browserSpecResolve(\'foo\', \'/bar/\') => /bar/foo\n// browserSpecResolve(\'foo\', \'/bar\') => /foo\n//\n// But on the command line of a file system, it\'s not as complicated, you can\'t\n// `cd` from a file, only directories. This way, links have to know less about\n// their current path. To go deeper you can do this:\n//\n// \n// // instead of\n// \n//\n// Just like `cd`, if you want to go deeper from the command line, you do this:\n//\n// cd deeper\n// # not\n// cd $(pwd)/deeper\n//\n// By treating every path as a directory, linking to relative paths should\n// require less contextual information and (fingers crossed) be more intuitive.\n\n\nvar resolve = function resolve(to, base) {\n // /foo/bar, /baz/qux => /foo/bar\n if (startsWith(to, "/")) {\n return to;\n }\n\n var _to$split = to.split("?"),\n toPathname = _to$split[0],\n toQuery = _to$split[1];\n\n var _base$split = base.split("?"),\n basePathname = _base$split[0];\n\n var toSegments = segmentize(toPathname);\n var baseSegments = segmentize(basePathname); // ?a=b, /users?b=c => /users?a=b\n\n if (toSegments[0] === "") {\n return addQuery(basePathname, toQuery);\n } // profile, /users/789 => /users/789/profile\n\n\n if (!startsWith(toSegments[0], ".")) {\n var pathname = baseSegments.concat(toSegments).join("/");\n return addQuery((basePathname === "/" ? "" : "/") + pathname, toQuery);\n } // ./ /users/123 => /users/123\n // ../ /users/123 => /users\n // ../.. /users/123 => /\n // ../../one /a/b/c/d => /a/b/one\n // .././one /a/b/c/d => /a/b/c/one\n\n\n var allSegments = baseSegments.concat(toSegments);\n var segments = [];\n\n for (var i = 0, l = allSegments.length; i < l; i++) {\n var segment = allSegments[i];\n if (segment === "..") segments.pop();else if (segment !== ".") segments.push(segment);\n }\n\n return addQuery("/" + segments.join("/"), toQuery);\n}; ////////////////////////////////////////////////////////////////////////////////\n// insertParams(path, params)\n\n\nvar insertParams = function insertParams(path, params) {\n var _path$split = path.split("?"),\n pathBase = _path$split[0],\n _path$split$ = _path$split[1],\n query = _path$split$ === undefined ? "" : _path$split$;\n\n var segments = segmentize(pathBase);\n var constructedPath = "/" + segments.map(function (segment) {\n var match = paramRe.exec(segment);\n return match ? params[match[1]] : segment;\n }).join("/");\n var _params$location = params.location;\n _params$location = _params$location === undefined ? {} : _params$location;\n var _params$location$sear = _params$location.search,\n search = _params$location$sear === undefined ? "" : _params$location$sear;\n var searchSplit = search.split("?")[1] || "";\n constructedPath = addQuery(constructedPath, query, searchSplit);\n return constructedPath;\n};\n\nvar validateRedirect = function validateRedirect(from, to) {\n var filter = function filter(segment) {\n return isDynamic(segment);\n };\n\n var fromString = segmentize(from).filter(filter).sort().join("/");\n var toString = segmentize(to).filter(filter).sort().join("/");\n return fromString === toString;\n}; ////////////////////////////////////////////////////////////////////////////////\n// Junk\n\n\nvar paramRe = /^:(.+)/;\nvar SEGMENT_POINTS = 4;\nvar STATIC_POINTS = 3;\nvar DYNAMIC_POINTS = 2;\nvar SPLAT_PENALTY = 1;\nvar ROOT_POINTS = 1;\n\nvar isRootSegment = function isRootSegment(segment) {\n return segment === "";\n};\n\nvar isDynamic = function isDynamic(segment) {\n return paramRe.test(segment);\n};\n\nvar isSplat = function isSplat(segment) {\n return segment && segment[0] === "*";\n};\n\nvar rankRoute = function rankRoute(route, index) {\n var score = route.default ? 0 : segmentize(route.path).reduce(function (score, segment) {\n score += SEGMENT_POINTS;\n if (isRootSegment(segment)) score += ROOT_POINTS;else if (isDynamic(segment)) score += DYNAMIC_POINTS;else if (isSplat(segment)) score -= SEGMENT_POINTS + SPLAT_PENALTY;else score += STATIC_POINTS;\n return score;\n }, 0);\n return {\n route: route,\n score: score,\n index: index\n };\n};\n\nvar rankRoutes = function rankRoutes(routes) {\n return routes.map(rankRoute).sort(function (a, b) {\n return a.score < b.score ? 1 : a.score > b.score ? -1 : a.index - b.index;\n });\n};\n\nvar segmentize = function segmentize(uri) {\n return uri // strip starting/ending slashes\n .replace(/(^\\/+|\\/+$)/g, "").split("/");\n};\n\nvar addQuery = function addQuery(pathname) {\n for (var _len = arguments.length, query = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n query[_key - 1] = arguments[_key];\n }\n\n query = query.filter(function (q) {\n return q && q.length > 0;\n });\n return pathname + (query && query.length > 0 ? "?" + query.join("&") : "");\n};\n\nvar reservedNames = ["uri", "path"];\n/**\n * Shallow compares two objects.\n * @param {Object} obj1 The first object to compare.\n * @param {Object} obj2 The second object to compare.\n */\n\nvar shallowCompare = function shallowCompare(obj1, obj2) {\n var obj1Keys = Object.keys(obj1);\n return obj1Keys.length === Object.keys(obj2).length && obj1Keys.every(function (key) {\n return obj2.hasOwnProperty(key) && obj1[key] === obj2[key];\n });\n}; ////////////////////////////////////////////////////////////////////////////////\n\n\n\n;// CONCATENATED MODULE: ./node_modules/@gatsbyjs/reach-router/es/lib/history.js\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar getLocation = function getLocation(source) {\n var _source$location = source.location,\n search = _source$location.search,\n hash = _source$location.hash,\n href = _source$location.href,\n origin = _source$location.origin,\n protocol = _source$location.protocol,\n host = _source$location.host,\n hostname = _source$location.hostname,\n port = _source$location.port;\n var pathname = source.location.pathname;\n\n if (!pathname && href && canUseDOM) {\n var url = new URL(href);\n pathname = url.pathname;\n }\n\n return {\n pathname: encodeURI(decodeURI(pathname)),\n search: search,\n hash: hash,\n href: href,\n origin: origin,\n protocol: protocol,\n host: host,\n hostname: hostname,\n port: port,\n state: source.history.state,\n key: source.history.state && source.history.state.key || "initial"\n };\n};\n\nvar createHistory = function createHistory(source, options) {\n var listeners = [];\n var location = getLocation(source);\n var transitioning = false;\n\n var resolveTransition = function resolveTransition() {};\n\n return {\n get location() {\n return location;\n },\n\n get transitioning() {\n return transitioning;\n },\n\n _onTransitionComplete: function _onTransitionComplete() {\n transitioning = false;\n resolveTransition();\n },\n listen: function listen(listener) {\n listeners.push(listener);\n\n var popstateListener = function popstateListener() {\n location = getLocation(source);\n listener({\n location: location,\n action: "POP"\n });\n };\n\n source.addEventListener("popstate", popstateListener);\n return function () {\n source.removeEventListener("popstate", popstateListener);\n listeners = listeners.filter(function (fn) {\n return fn !== listener;\n });\n };\n },\n navigate: function navigate(to) {\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n state = _ref.state,\n _ref$replace = _ref.replace,\n replace = _ref$replace === undefined ? false : _ref$replace;\n\n if (typeof to === "number") {\n source.history.go(to);\n } else {\n state = _extends({}, state, {\n key: Date.now() + ""\n }); // try...catch iOS Safari limits to 100 pushState calls\n\n try {\n if (transitioning || replace) {\n source.history.replaceState(state, null, to);\n } else {\n source.history.pushState(state, null, to);\n }\n } catch (e) {\n source.location[replace ? "replace" : "assign"](to);\n }\n }\n\n location = getLocation(source);\n transitioning = true;\n var transition = new Promise(function (res) {\n return resolveTransition = res;\n });\n listeners.forEach(function (listener) {\n return listener({\n location: location,\n action: "PUSH"\n });\n });\n return transition;\n }\n };\n}; ////////////////////////////////////////////////////////////////////////////////\n// Stores history entries in memory for testing or other platforms like Native\n\n\nvar createMemorySource = function createMemorySource() {\n var initialPath = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "/";\n var searchIndex = initialPath.indexOf("?");\n var initialLocation = {\n pathname: searchIndex > -1 ? initialPath.substr(0, searchIndex) : initialPath,\n search: searchIndex > -1 ? initialPath.substr(searchIndex) : ""\n };\n var index = 0;\n var stack = [initialLocation];\n var states = [null];\n return {\n get location() {\n return stack[index];\n },\n\n addEventListener: function addEventListener(name, fn) {},\n removeEventListener: function removeEventListener(name, fn) {},\n history: {\n get entries() {\n return stack;\n },\n\n get index() {\n return index;\n },\n\n get state() {\n return states[index];\n },\n\n pushState: function pushState(state, _, uri) {\n var _uri$split = uri.split("?"),\n pathname = _uri$split[0],\n _uri$split$ = _uri$split[1],\n search = _uri$split$ === undefined ? "" : _uri$split$;\n\n index++;\n stack.push({\n pathname: pathname,\n search: search.length ? "?" + search : search\n });\n states.push(state);\n },\n replaceState: function replaceState(state, _, uri) {\n var _uri$split2 = uri.split("?"),\n pathname = _uri$split2[0],\n _uri$split2$ = _uri$split2[1],\n search = _uri$split2$ === undefined ? "" : _uri$split2$;\n\n stack[index] = {\n pathname: pathname,\n search: search\n };\n states[index] = state;\n },\n go: function go(to) {\n var newIndex = index + to;\n\n if (newIndex < 0 || newIndex > states.length - 1) {\n return;\n }\n\n index = newIndex;\n }\n }\n };\n}; ////////////////////////////////////////////////////////////////////////////////\n// global history - uses window.history as the source if available, otherwise a\n// memory history\n\n\nvar canUseDOM = !!(typeof window !== "undefined" && window.document && window.document.createElement);\n\nvar getSource = function getSource() {\n return canUseDOM ? window : createMemorySource();\n};\n\nvar globalHistory = createHistory(getSource());\nvar history_navigate = globalHistory.navigate; ////////////////////////////////////////////////////////////////////////////////\n\n\n;// CONCATENATED MODULE: ./node_modules/@gatsbyjs/reach-router/es/index.js\nvar es_extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nfunction _objectWithoutProperties(obj, keys) {\n var target = {};\n\n for (var i in obj) {\n if (keys.indexOf(i) >= 0) continue;\n if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n target[i] = obj[i];\n }\n\n return target;\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError("Cannot call a class as a function");\n }\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (!self) {\n throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called");\n }\n\n return call && (typeof call === "object" || typeof call === "function") ? call : self;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== "function" && superClass !== null) {\n throw new TypeError("Super expression must either be null or a function, not " + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n}\n/* eslint-disable jsx-a11y/anchor-has-content */\n\n\n\n\n\n\n ////////////////////////////////////////////////////////////////////////////////\n\nvar createNamedContext = function createNamedContext(name, defaultValue) {\n var Ctx = (0,react.createContext)(defaultValue);\n Ctx.displayName = name;\n return Ctx;\n}; ////////////////////////////////////////////////////////////////////////////////\n// Location Context/Provider\n\n\nvar LocationContext = createNamedContext("Location"); // sets up a listener if there isn\'t one already so apps don\'t need to be\n// wrapped in some top level provider\n\nvar Location = function Location(_ref) {\n var children = _ref.children;\n return react.createElement(LocationContext.Consumer, null, function (context) {\n return context ? children(context) : react.createElement(LocationProvider, null, children);\n });\n};\n\nvar LocationProvider = function (_React$Component) {\n _inherits(LocationProvider, _React$Component);\n\n function LocationProvider() {\n var _temp, _this, _ret;\n\n _classCallCheck(this, LocationProvider);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, _React$Component.call.apply(_React$Component, [this].concat(args))), _this), _this.state = {\n context: _this.getContext(),\n refs: {\n unlisten: null\n }\n }, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n LocationProvider.prototype.getContext = function getContext() {\n var _props$history = this.props.history,\n navigate = _props$history.navigate,\n location = _props$history.location;\n return {\n navigate: navigate,\n location: location\n };\n };\n\n LocationProvider.prototype.componentDidCatch = function componentDidCatch(error, info) {\n if (isRedirect(error)) {\n var _navigate = this.props.history.navigate;\n\n _navigate(error.uri, {\n replace: true\n });\n } else {\n throw error;\n }\n };\n\n LocationProvider.prototype.componentDidUpdate = function componentDidUpdate(prevProps, prevState) {\n if (prevState.context.location !== this.state.context.location) {\n this.props.history._onTransitionComplete();\n }\n };\n\n LocationProvider.prototype.componentDidMount = function componentDidMount() {\n var _this2 = this;\n\n var refs = this.state.refs,\n history = this.props.history;\n\n history._onTransitionComplete();\n\n refs.unlisten = history.listen(function () {\n Promise.resolve().then(function () {\n // TODO: replace rAF with react deferred update API when it\'s ready https://github.com/facebook/react/issues/13306\n requestAnimationFrame(function () {\n if (!_this2.unmounted) {\n _this2.setState(function () {\n return {\n context: _this2.getContext()\n };\n });\n }\n });\n });\n });\n };\n\n LocationProvider.prototype.componentWillUnmount = function componentWillUnmount() {\n var refs = this.state.refs;\n this.unmounted = true;\n refs.unlisten();\n };\n\n LocationProvider.prototype.render = function render() {\n var context = this.state.context,\n children = this.props.children;\n return react.createElement(LocationContext.Provider, {\n value: context\n }, typeof children === "function" ? children(context) : children || null);\n };\n\n return LocationProvider;\n}(react.Component); ////////////////////////////////////////////////////////////////////////////////\n\n\nLocationProvider.defaultProps = {\n history: globalHistory\n};\n false ? 0 : void 0;\n\nvar ServerLocation = function ServerLocation(_ref2) {\n var url = _ref2.url,\n children = _ref2.children;\n var searchIndex = url.indexOf("?");\n var searchExists = searchIndex > -1;\n var pathname = void 0;\n var search = "";\n var hash = "";\n\n if (searchExists) {\n pathname = url.substring(0, searchIndex);\n search = url.substring(searchIndex);\n } else {\n pathname = url;\n }\n\n return react.createElement(LocationContext.Provider, {\n value: {\n location: {\n pathname: pathname,\n search: search,\n hash: hash\n },\n navigate: function navigate() {\n throw new Error("You can\'t call navigate on the server.");\n }\n }\n }, children);\n}; ////////////////////////////////////////////////////////////////////////////////\n// Sets baseuri and basepath for nested routers and links\n\n\nvar BaseContext = createNamedContext("Base", {\n baseuri: "/",\n basepath: "/",\n navigate: globalHistory.navigate\n}); ////////////////////////////////////////////////////////////////////////////////\n// The main event, welcome to the show everybody.\n\nvar Router = function Router(props) {\n return react.createElement(BaseContext.Consumer, null, function (baseContext) {\n return react.createElement(Location, null, function (locationContext) {\n return react.createElement(RouterImpl, es_extends({}, baseContext, locationContext, props));\n });\n });\n};\n\nvar RouterImpl = function (_React$PureComponent) {\n _inherits(RouterImpl, _React$PureComponent);\n\n function RouterImpl() {\n _classCallCheck(this, RouterImpl);\n\n return _possibleConstructorReturn(this, _React$PureComponent.apply(this, arguments));\n }\n\n RouterImpl.prototype.render = function render() {\n var _props = this.props,\n location = _props.location,\n _navigate2 = _props.navigate,\n basepath = _props.basepath,\n primary = _props.primary,\n children = _props.children,\n baseuri = _props.baseuri,\n _props$component = _props.component,\n component = _props$component === undefined ? "div" : _props$component,\n domProps = _objectWithoutProperties(_props, ["location", "navigate", "basepath", "primary", "children", "baseuri", "component"]);\n\n var routes = react.Children.toArray(children).reduce(function (array, child) {\n var routes = createRoute(basepath)(child);\n return array.concat(routes);\n }, []);\n var pathname = location.pathname;\n var match = pick(routes, pathname);\n\n if (match) {\n var params = match.params,\n uri = match.uri,\n route = match.route,\n element = match.route.value; // remove the /* from the end for child routes relative paths\n\n basepath = route.default ? basepath : route.path.replace(/\\*$/, "");\n\n var props = es_extends({}, params, {\n uri: uri,\n location: location,\n navigate: function navigate(to, options) {\n return _navigate2(resolve(to, uri), options);\n }\n });\n\n var clone = react.cloneElement(element, props, element.props.children ? react.createElement(Router, {\n location: location,\n primary: primary\n }, element.props.children) : undefined); // using \'div\' for < 16.3 support\n\n var FocusWrapper = primary ? FocusHandler : component; // don\'t pass any props to \'div\'\n\n var wrapperProps = primary ? es_extends({\n uri: uri,\n location: location,\n component: component\n }, domProps) : domProps;\n return react.createElement(BaseContext.Provider, {\n value: {\n baseuri: uri,\n basepath: basepath,\n navigate: props.navigate\n }\n }, react.createElement(FocusWrapper, wrapperProps, clone));\n } else {\n // Not sure if we want this, would require index routes at every level\n // warning(\n // false,\n // `\\n\\nNothing matched:\\n\\t${\n // location.pathname\n // }\\n\\nPaths checked: \\n\\t${routes\n // .map(route => route.path)\n // .join(\n // "\\n\\t"\n // )}\\n\\nTo get rid of this warning, add a default NotFound component as child of Router:\n // \\n\\tlet NotFound = () =>
Not Found!
\n // \\n\\t\\n\\t \\n\\t {/* ... */}\\n\\t`\n // );\n return null;\n }\n };\n\n return RouterImpl;\n}(react.PureComponent);\n\nRouterImpl.defaultProps = {\n primary: true\n};\nvar FocusContext = createNamedContext("Focus");\n\nvar FocusHandler = function FocusHandler(_ref3) {\n var uri = _ref3.uri,\n location = _ref3.location,\n component = _ref3.component,\n domProps = _objectWithoutProperties(_ref3, ["uri", "location", "component"]);\n\n return react.createElement(FocusContext.Consumer, null, function (requestFocus) {\n return react.createElement(FocusHandlerImpl, es_extends({}, domProps, {\n component: component,\n requestFocus: requestFocus,\n uri: uri,\n location: location\n }));\n });\n}; // don\'t focus on initial render\n\n\nvar initialRender = true;\nvar focusHandlerCount = 0;\n\nvar FocusHandlerImpl = function (_React$Component2) {\n _inherits(FocusHandlerImpl, _React$Component2);\n\n function FocusHandlerImpl() {\n var _temp2, _this4, _ret2;\n\n _classCallCheck(this, FocusHandlerImpl);\n\n for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n return _ret2 = (_temp2 = (_this4 = _possibleConstructorReturn(this, _React$Component2.call.apply(_React$Component2, [this].concat(args))), _this4), _this4.state = {}, _this4.requestFocus = function (node) {\n if (!_this4.state.shouldFocus && node) {\n node.focus();\n }\n }, _temp2), _possibleConstructorReturn(_this4, _ret2);\n }\n\n FocusHandlerImpl.getDerivedStateFromProps = function getDerivedStateFromProps(nextProps, prevState) {\n var initial = prevState.uri == null;\n\n if (initial) {\n return es_extends({\n shouldFocus: true\n }, nextProps);\n } else {\n var myURIChanged = nextProps.uri !== prevState.uri;\n var navigatedUpToMe = prevState.location.pathname !== nextProps.location.pathname && nextProps.location.pathname === nextProps.uri;\n return es_extends({\n shouldFocus: myURIChanged || navigatedUpToMe\n }, nextProps);\n }\n };\n\n FocusHandlerImpl.prototype.componentDidMount = function componentDidMount() {\n focusHandlerCount++;\n this.focus();\n };\n\n FocusHandlerImpl.prototype.componentWillUnmount = function componentWillUnmount() {\n focusHandlerCount--;\n\n if (focusHandlerCount === 0) {\n initialRender = true;\n }\n };\n\n FocusHandlerImpl.prototype.componentDidUpdate = function componentDidUpdate(prevProps, prevState) {\n if (prevProps.location !== this.props.location && this.state.shouldFocus) {\n this.focus();\n }\n };\n\n FocusHandlerImpl.prototype.focus = function focus() {\n if (false) {}\n\n var requestFocus = this.props.requestFocus;\n\n if (requestFocus) {\n requestFocus(this.node);\n } else {\n if (initialRender) {\n initialRender = false;\n } else if (this.node) {\n // React polyfills [autofocus] and it fires earlier than cDM,\n // so we were stealing focus away, this line prevents that.\n if (!this.node.contains(document.activeElement)) {\n this.node.focus();\n }\n }\n }\n };\n\n FocusHandlerImpl.prototype.render = function render() {\n var _this5 = this;\n\n var _props2 = this.props,\n children = _props2.children,\n style = _props2.style,\n requestFocus = _props2.requestFocus,\n _props2$component = _props2.component,\n Comp = _props2$component === undefined ? "div" : _props2$component,\n uri = _props2.uri,\n location = _props2.location,\n domProps = _objectWithoutProperties(_props2, ["children", "style", "requestFocus", "component", "uri", "location"]);\n\n return react.createElement(Comp, es_extends({\n style: es_extends({\n outline: "none"\n }, style),\n tabIndex: "-1",\n ref: function ref(n) {\n return _this5.node = n;\n }\n }, domProps), react.createElement(FocusContext.Provider, {\n value: this.requestFocus\n }, this.props.children));\n };\n\n return FocusHandlerImpl;\n}(react.Component);\n\n(0,react_lifecycles_compat/* polyfill */.O)(FocusHandlerImpl);\n\nvar k = function k() {}; ////////////////////////////////////////////////////////////////////////////////\n\n\nvar forwardRef = react.forwardRef;\n\nif (typeof forwardRef === "undefined") {\n forwardRef = function forwardRef(C) {\n return C;\n };\n}\n\nvar Link = forwardRef(function (_ref4, ref) {\n var innerRef = _ref4.innerRef,\n props = _objectWithoutProperties(_ref4, ["innerRef"]);\n\n return react.createElement(BaseContext.Consumer, null, function (_ref5) {\n var basepath = _ref5.basepath,\n baseuri = _ref5.baseuri;\n return react.createElement(Location, null, function (_ref6) {\n var location = _ref6.location,\n navigate = _ref6.navigate;\n\n var to = props.to,\n state = props.state,\n replace = props.replace,\n _props$getProps = props.getProps,\n getProps = _props$getProps === undefined ? k : _props$getProps,\n anchorProps = _objectWithoutProperties(props, ["to", "state", "replace", "getProps"]);\n\n var href = resolve(to, baseuri);\n var encodedHref = encodeURI(href);\n var isCurrent = location.pathname === encodedHref;\n var isPartiallyCurrent = startsWith(location.pathname, encodedHref);\n return react.createElement("a", es_extends({\n ref: ref || innerRef,\n "aria-current": isCurrent ? "page" : undefined\n }, anchorProps, getProps({\n isCurrent: isCurrent,\n isPartiallyCurrent: isPartiallyCurrent,\n href: href,\n location: location\n }), {\n href: href,\n onClick: function onClick(event) {\n if (anchorProps.onClick) anchorProps.onClick(event);\n\n if (shouldNavigate(event)) {\n event.preventDefault();\n var shouldReplace = replace;\n\n if (typeof replace !== "boolean" && isCurrent) {\n var _location$state = es_extends({}, location.state),\n key = _location$state.key,\n restState = _objectWithoutProperties(_location$state, ["key"]);\n\n shouldReplace = shallowCompare(es_extends({}, state), restState);\n }\n\n navigate(href, {\n state: state,\n replace: shouldReplace\n });\n }\n }\n }));\n });\n });\n});\nLink.displayName = "Link";\n false ? 0 : void 0; ////////////////////////////////////////////////////////////////////////////////\n\nfunction RedirectRequest(uri) {\n this.uri = uri;\n}\n\nvar isRedirect = function isRedirect(o) {\n return o instanceof RedirectRequest;\n};\n\nvar redirectTo = function redirectTo(to) {\n throw new RedirectRequest(to);\n};\n\nvar RedirectImpl = function (_React$Component3) {\n _inherits(RedirectImpl, _React$Component3);\n\n function RedirectImpl() {\n _classCallCheck(this, RedirectImpl);\n\n return _possibleConstructorReturn(this, _React$Component3.apply(this, arguments));\n } // Support React < 16 with this hook\n\n\n RedirectImpl.prototype.componentDidMount = function componentDidMount() {\n var _props3 = this.props,\n navigate = _props3.navigate,\n to = _props3.to,\n from = _props3.from,\n _props3$replace = _props3.replace,\n replace = _props3$replace === undefined ? true : _props3$replace,\n state = _props3.state,\n noThrow = _props3.noThrow,\n baseuri = _props3.baseuri,\n props = _objectWithoutProperties(_props3, ["navigate", "to", "from", "replace", "state", "noThrow", "baseuri"]);\n\n Promise.resolve().then(function () {\n var resolvedTo = resolve(to, baseuri);\n navigate(insertParams(resolvedTo, props), {\n replace: replace,\n state: state\n });\n });\n };\n\n RedirectImpl.prototype.render = function render() {\n var _props4 = this.props,\n navigate = _props4.navigate,\n to = _props4.to,\n from = _props4.from,\n replace = _props4.replace,\n state = _props4.state,\n noThrow = _props4.noThrow,\n baseuri = _props4.baseuri,\n props = _objectWithoutProperties(_props4, ["navigate", "to", "from", "replace", "state", "noThrow", "baseuri"]);\n\n var resolvedTo = resolve(to, baseuri);\n if (!noThrow) redirectTo(insertParams(resolvedTo, props));\n return null;\n };\n\n return RedirectImpl;\n}(react.Component);\n\nvar Redirect = function Redirect(props) {\n return react.createElement(BaseContext.Consumer, null, function (_ref7) {\n var baseuri = _ref7.baseuri;\n return react.createElement(Location, null, function (locationContext) {\n return react.createElement(RedirectImpl, es_extends({}, locationContext, {\n baseuri: baseuri\n }, props));\n });\n });\n};\n\n false ? 0 : void 0; ////////////////////////////////////////////////////////////////////////////////\n\nvar Match = function Match(_ref8) {\n var path = _ref8.path,\n children = _ref8.children;\n return react.createElement(BaseContext.Consumer, null, function (_ref9) {\n var baseuri = _ref9.baseuri;\n return react.createElement(Location, null, function (_ref10) {\n var navigate = _ref10.navigate,\n location = _ref10.location;\n var resolvedPath = resolve(path, baseuri);\n var result = match(resolvedPath, location.pathname);\n return children({\n navigate: navigate,\n location: location,\n match: result ? es_extends({}, result.params, {\n uri: result.uri,\n path: path\n }) : null\n });\n });\n });\n}; ////////////////////////////////////////////////////////////////////////////////\n// Hooks\n\n\nvar useLocation = function useLocation() {\n var context = (0,react.useContext)(LocationContext);\n\n if (!context) {\n throw new Error("useLocation hook was used but a LocationContext.Provider was not found in the parent tree. Make sure this is used in a component that is a child of Router");\n }\n\n return context.location;\n};\n\nvar useNavigate = function useNavigate() {\n var context = (0,react.useContext)(BaseContext);\n\n if (!context) {\n throw new Error("useNavigate hook was used but a BaseContext.Provider was not found in the parent tree. Make sure this is used in a component that is a child of Router");\n }\n\n return context.navigate;\n};\n\nvar useParams = function useParams() {\n var context = (0,react.useContext)(BaseContext);\n\n if (!context) {\n throw new Error("useParams hook was used but a LocationContext.Provider was not found in the parent tree. Make sure this is used in a component that is a child of Router");\n }\n\n var location = useLocation();\n var results = match(context.basepath, location.pathname);\n return results ? results.params : null;\n};\n\nvar useMatch = function useMatch(path) {\n if (!path) {\n throw new Error("useMatch(path: string) requires an argument of a string to match against");\n }\n\n var context = (0,react.useContext)(BaseContext);\n\n if (!context) {\n throw new Error("useMatch hook was used but a LocationContext.Provider was not found in the parent tree. Make sure this is used in a component that is a child of Router");\n }\n\n var location = useLocation();\n var resolvedPath = resolve(path, context.baseuri);\n var result = match(resolvedPath, location.pathname);\n return result ? es_extends({}, result.params, {\n uri: result.uri,\n path: path\n }) : null;\n}; ////////////////////////////////////////////////////////////////////////////////\n// Junk\n\n\nvar stripSlashes = function stripSlashes(str) {\n return str.replace(/(^\\/+|\\/+$)/g, "");\n};\n\nvar createRoute = function createRoute(basepath) {\n return function (element) {\n if (!element) {\n return null;\n }\n\n if (element.type === react.Fragment && element.props.children) {\n return react.Children.map(element.props.children, createRoute(basepath));\n }\n\n !(element.props.path || element.props.default || element.type === Redirect) ? false ? 0 : browser_default()(false) : void 0;\n !!(element.type === Redirect && (!element.props.from || !element.props.to)) ? false ? 0 : browser_default()(false) : void 0;\n !!(element.type === Redirect && !validateRedirect(element.props.from, element.props.to)) ? false ? 0 : browser_default()(false) : void 0;\n\n if (element.props.default) {\n return {\n value: element,\n default: true\n };\n }\n\n var elementPath = element.type === Redirect ? element.props.from : element.props.path;\n var path = elementPath === "/" ? basepath : stripSlashes(basepath) + "/" + stripSlashes(elementPath);\n return {\n value: element,\n default: element.props.default,\n path: element.props.children ? stripSlashes(path) + "/*" : path\n };\n };\n};\n\nvar shouldNavigate = function shouldNavigate(event) {\n return !event.defaultPrevented && event.button === 0 && !(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);\n}; ////////////////////////////////////////////////////////////////////////\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AZ2F0c2J5anMvcmVhY2gtcm91dGVyL2VzL2xpYi91dGlscy5qcz8zNDNiIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL0BnYXRzYnlqcy9yZWFjaC1yb3V0ZXIvZXMvbGliL2hpc3RvcnkuanM/YmEyNCIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AZ2F0c2J5anMvcmVhY2gtcm91dGVyL2VzL2luZGV4LmpzPzc0MWUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFrQztBQUNsQzs7QUFFQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsb0NBQW9DLE9BQU87QUFDM0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsVUFBVSxhQUFhO0FBQ3ZCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsOEJBQThCLE1BQXFDLEdBQUcsQ0FBd0osR0FBRyxpQkFBUztBQUMxTztBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVB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RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx5QkFBeUIsY0FBYztBQUN2QyxhQUFhLGtCQUFrQjtBQUMvQjs7QUFFQSxrRkFBa0YsTUFBcUMsR0FBRyxDQUFnSyxHQUFHLGlCQUFTO0FBQ3RTLGtGQUFrRixNQUFxQyxHQUFHLENBQW1LLEdBQUcsaUJBQVM7QUFDelMscUNBQXFDLGdCQUFnQiwwQ0FBMEMsTUFBcUMsR0FBRyxDQUEwTCxHQUFHLGlCQUFTOztBQUU3VTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFIiwiZmlsZSI6Ijk0OTkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgaW52YXJpYW50IGZyb20gXCJpbnZhcmlhbnRcIjsgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIHN0YXJ0c1dpdGgoc3RyaW5nLCBzZWFyY2gpIC0gQ2hlY2sgaWYgYHN0cmluZ2Agc3RhcnRzIHdpdGggYHNlYXJjaGBcblxudmFyIHN0YXJ0c1dpdGggPSBmdW5jdGlvbiBzdGFydHNXaXRoKHN0cmluZywgc2VhcmNoKSB7XG4gIHJldHVybiBzdHJpbmcuc3Vic3RyKDAsIHNlYXJjaC5sZW5ndGgpID09PSBzZWFyY2g7XG59OyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gcGljayhyb3V0ZXMsIHVyaSlcbi8vXG4vLyBSYW5rcyBhbmQgcGlja3MgdGhlIGJlc3Qgcm91dGUgdG8gbWF0Y2guIEVhY2ggc2VnbWVudCBnZXRzIHRoZSBoaWdoZXN0XG4vLyBhbW91bnQgb2YgcG9pbnRzLCB0aGVuIHRoZSB0eXBlIG9mIHNlZ21lbnQgZ2V0cyBhbiBhZGRpdGlvbmFsIGFtb3VudCBvZlxuLy8gcG9pbnRzIHdoZXJlXG4vL1xuLy8gICAgIHN0YXRpYyA+IGR5bmFtaWMgPiBzcGxhdCA+IHJvb3Rcbi8vXG4vLyBUaGlzIHdheSB3ZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IHRoZSBvcmRlciBvZiBvdXIgcm91dGVzLCBsZXQgdGhlXG4vLyBjb21wdXRlcnMgZG8gaXQuXG4vL1xuLy8gQSByb3V0ZSBsb29rcyBsaWtlIHRoaXNcbi8vXG4vLyAgICAgeyBwYXRoLCBkZWZhdWx0LCB2YWx1ZSB9XG4vL1xuLy8gQW5kIGEgcmV0dXJuZWQgbWF0Y2ggbG9va3MgbGlrZTpcbi8vXG4vLyAgICAgeyByb3V0ZSwgcGFyYW1zLCB1cmkgfVxuLy9cbi8vIEkga25vdywgSSBzaG91bGQgdXNlIFR5cGVTY3JpcHQgbm90IGNvbW1lbnRzIGZvciB0aGVzZSB0eXBlcy5cblxuXG52YXIgcGljayA9IGZ1bmN0aW9uIHBpY2socm91dGVzLCB1cmkpIHtcbiAgdmFyIG1hdGNoID0gdm9pZCAwO1xuICB2YXIgZGVmYXVsdF8gPSB2b2lkIDA7XG5cbiAgdmFyIF91cmkkc3BsaXQgPSB1cmkuc3BsaXQoXCI/XCIpLFxuICAgICAgdXJpUGF0aG5hbWUgPSBfdXJpJHNwbGl0WzBdO1xuXG4gIHZhciB1cmlTZWdtZW50cyA9IHNlZ21lbnRpemUodXJpUGF0aG5hbWUpO1xuICB2YXIgaXNSb290VXJpID0gdXJpU2VnbWVudHNbMF0gPT09IFwiXCI7XG4gIHZhciByYW5rZWQgPSByYW5rUm91dGVzKHJvdXRlcyk7XG5cbiAgZm9yICh2YXIgaSA9IDAsIGwgPSByYW5rZWQubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgdmFyIG1pc3NlZCA9IGZhbHNlO1xuICAgIHZhciByb3V0ZSA9IHJhbmtlZFtpXS5yb3V0ZTtcblxuICAgIGlmIChyb3V0ZS5kZWZhdWx0KSB7XG4gICAgICBkZWZhdWx0XyA9IHtcbiAgICAgICAgcm91dGU6IHJvdXRlLFxuICAgICAgICBwYXJhbXM6IHt9LFxuICAgICAgICB1cmk6IHVyaVxuICAgICAgfTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHZhciByb3V0ZVNlZ21lbnRzID0gc2VnbWVudGl6ZShyb3V0ZS5wYXRoKTtcbiAgICB2YXIgcGFyYW1zID0ge307XG4gICAgdmFyIG1heCA9IE1hdGgubWF4KHVyaVNlZ21lbnRzLmxlbmd0aCwgcm91dGVTZWdtZW50cy5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IDA7XG5cbiAgICBmb3IgKDsgaW5kZXggPCBtYXg7IGluZGV4KyspIHtcbiAgICAgIHZhciByb3V0ZVNlZ21lbnQgPSByb3V0ZVNlZ21lbnRzW2luZGV4XTtcbiAgICAgIHZhciB1cmlTZWdtZW50ID0gdXJpU2VnbWVudHNbaW5kZXhdO1xuXG4gICAgICBpZiAoaXNTcGxhdChyb3V0ZVNlZ21lbnQpKSB7XG4gICAgICAgIC8vIEhpdCBhIHNwbGF0LCBqdXN0IGdyYWIgdGhlIHJlc3QsIGFuZCByZXR1cm4gYSBtYXRjaFxuICAgICAgICAvLyB1cmk6ICAgL2ZpbGVzL2RvY3VtZW50cy93b3JrXG4gICAgICAgIC8vIHJvdXRlOiAvZmlsZXMvKlxuICAgICAgICB2YXIgcGFyYW0gPSByb3V0ZVNlZ21lbnQuc2xpY2UoMSkgfHwgXCIqXCI7XG4gICAgICAgIHBhcmFtc1twYXJhbV0gPSB1cmlTZWdtZW50cy5zbGljZShpbmRleCkubWFwKGRlY29kZVVSSUNvbXBvbmVudCkuam9pbihcIi9cIik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAodXJpU2VnbWVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIFVSSSBpcyBzaG9ydGVyIHRoYW4gdGhlIHJvdXRlLCBubyBtYXRjaFxuICAgICAgICAvLyB1cmk6ICAgL3VzZXJzXG4gICAgICAgIC8vIHJvdXRlOiAvdXNlcnMvOnVzZXJJZFxuICAgICAgICBtaXNzZWQgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgdmFyIGR5bmFtaWNNYXRjaCA9IHBhcmFtUmUuZXhlYyhyb3V0ZVNlZ21lbnQpO1xuXG4gICAgICBpZiAoZHluYW1pY01hdGNoICYmICFpc1Jvb3RVcmkpIHtcbiAgICAgICAgdmFyIG1hdGNoSXNOb3RSZXNlcnZlZCA9IHJlc2VydmVkTmFtZXMuaW5kZXhPZihkeW5hbWljTWF0Y2hbMV0pID09PSAtMTtcbiAgICAgICAgIW1hdGNoSXNOb3RSZXNlcnZlZCA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgXCI8Um91dGVyPiBkeW5hbWljIHNlZ21lbnQgXFxcIlwiICsgZHluYW1pY01hdGNoWzFdICsgXCJcXFwiIGlzIGEgcmVzZXJ2ZWQgbmFtZS4gUGxlYXNlIHVzZSBhIGRpZmZlcmVudCBuYW1lIGluIHBhdGggXFxcIlwiICsgcm91dGUucGF0aCArIFwiXFxcIi5cIikgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuICAgICAgICB2YXIgdmFsdWUgPSBkZWNvZGVVUklDb21wb25lbnQodXJpU2VnbWVudCk7XG4gICAgICAgIHBhcmFtc1tkeW5hbWljTWF0Y2hbMV1dID0gdmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKHJvdXRlU2VnbWVudCAhPT0gdXJpU2VnbWVudCkge1xuICAgICAgICAvLyBDdXJyZW50IHNlZ21lbnRzIGRvbid0IG1hdGNoLCBub3QgZHluYW1pYywgbm90IHNwbGF0LCBzbyBubyBtYXRjaFxuICAgICAgICAvLyB1cmk6ICAgL3VzZXJzLzEyMy9zZXR0aW5nc1xuICAgICAgICAvLyByb3V0ZTogL3VzZXJzLzppZC9wcm9maWxlXG4gICAgICAgIG1pc3NlZCA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghbWlzc2VkKSB7XG4gICAgICBtYXRjaCA9IHtcbiAgICAgICAgcm91dGU6IHJvdXRlLFxuICAgICAgICBwYXJhbXM6IHBhcmFtcyxcbiAgICAgICAgdXJpOiBcIi9cIiArIHVyaVNlZ21lbnRzLnNsaWNlKDAsIGluZGV4KS5qb2luKFwiL1wiKVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtYXRjaCB8fCBkZWZhdWx0XyB8fCBudWxsO1xufTsgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIG1hdGNoKHBhdGgsIHVyaSkgLSBNYXRjaGVzIGp1c3Qgb25lIHBhdGggdG8gYSB1cmksIGFsc28gbG9sXG5cblxudmFyIG1hdGNoID0gZnVuY3Rpb24gbWF0Y2gocGF0aCwgdXJpKSB7XG4gIHJldHVybiBwaWNrKFt7XG4gICAgcGF0aDogcGF0aFxuICB9XSwgdXJpKTtcbn07IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyByZXNvbHZlKHRvLCBiYXNlcGF0aClcbi8vXG4vLyBSZXNvbHZlcyBVUklzIGFzIHRob3VnaCBldmVyeSBwYXRoIGlzIGEgZGlyZWN0b3J5LCBubyBmaWxlcy4gIFJlbGF0aXZlIFVSSXNcbi8vIGluIHRoZSBicm93c2VyIGNhbiBmZWVsIGF3a3dhcmQgYmVjYXVzZSBub3Qgb25seSBjYW4geW91IGJlIFwiaW4gYSBkaXJlY3RvcnlcIlxuLy8geW91IGNhbiBiZSBcImF0IGEgZmlsZVwiLCB0b28uIEZvciBleGFtcGxlXG4vL1xuLy8gICAgIGJyb3dzZXJTcGVjUmVzb2x2ZSgnZm9vJywgJy9iYXIvJykgPT4gL2Jhci9mb29cbi8vICAgICBicm93c2VyU3BlY1Jlc29sdmUoJ2ZvbycsICcvYmFyJykgPT4gL2Zvb1xuLy9cbi8vIEJ1dCBvbiB0aGUgY29tbWFuZCBsaW5lIG9mIGEgZmlsZSBzeXN0ZW0sIGl0J3Mgbm90IGFzIGNvbXBsaWNhdGVkLCB5b3UgY2FuJ3Rcbi8vIGBjZGAgZnJvbSBhIGZpbGUsIG9ubHkgZGlyZWN0b3JpZXMuICBUaGlzIHdheSwgbGlua3MgaGF2ZSB0byBrbm93IGxlc3MgYWJvdXRcbi8vIHRoZWlyIGN1cnJlbnQgcGF0aC4gVG8gZ28gZGVlcGVyIHlvdSBjYW4gZG8gdGhpczpcbi8vXG4vLyAgICAgPExpbmsgdG89XCJkZWVwZXJcIi8+XG4vLyAgICAgLy8gaW5zdGVhZCBvZlxuLy8gICAgIDxMaW5rIHRvPWB7JHtwcm9wcy51cml9L2RlZXBlcn1gLz5cbi8vXG4vLyBKdXN0IGxpa2UgYGNkYCwgaWYgeW91IHdhbnQgdG8gZ28gZGVlcGVyIGZyb20gdGhlIGNvbW1hbmQgbGluZSwgeW91IGRvIHRoaXM6XG4vL1xuLy8gICAgIGNkIGRlZXBlclxuLy8gICAgICMgbm90XG4vLyAgICAgY2QgJChwd2QpL2RlZXBlclxuLy9cbi8vIEJ5IHRyZWF0aW5nIGV2ZXJ5IHBhdGggYXMgYSBkaXJlY3RvcnksIGxpbmtpbmcgdG8gcmVsYXRpdmUgcGF0aHMgc2hvdWxkXG4vLyByZXF1aXJlIGxlc3MgY29udGV4dHVhbCBpbmZvcm1hdGlvbiBhbmQgKGZpbmdlcnMgY3Jvc3NlZCkgYmUgbW9yZSBpbnR1aXRpdmUuXG5cblxudmFyIHJlc29sdmUgPSBmdW5jdGlvbiByZXNvbHZlKHRvLCBiYXNlKSB7XG4gIC8vIC9mb28vYmFyLCAvYmF6L3F1eCA9PiAvZm9vL2JhclxuICBpZiAoc3RhcnRzV2l0aCh0bywgXCIvXCIpKSB7XG4gICAgcmV0dXJuIHRvO1xuICB9XG5cbiAgdmFyIF90byRzcGxpdCA9IHRvLnNwbGl0KFwiP1wiKSxcbiAgICAgIHRvUGF0aG5hbWUgPSBfdG8kc3BsaXRbMF0sXG4gICAgICB0b1F1ZXJ5ID0gX3RvJHNwbGl0WzFdO1xuXG4gIHZhciBfYmFzZSRzcGxpdCA9IGJhc2Uuc3BsaXQoXCI/XCIpLFxuICAgICAgYmFzZVBhdGhuYW1lID0gX2Jhc2Ukc3BsaXRbMF07XG5cbiAgdmFyIHRvU2VnbWVudHMgPSBzZWdtZW50aXplKHRvUGF0aG5hbWUpO1xuICB2YXIgYmFzZVNlZ21lbnRzID0gc2VnbWVudGl6ZShiYXNlUGF0aG5hbWUpOyAvLyA/YT1iLCAvdXNlcnM/Yj1jID0+IC91c2Vycz9hPWJcblxuICBpZiAodG9TZWdtZW50c1swXSA9PT0gXCJcIikge1xuICAgIHJldHVybiBhZGRRdWVyeShiYXNlUGF0aG5hbWUsIHRvUXVlcnkpO1xuICB9IC8vIHByb2ZpbGUsIC91c2Vycy83ODkgPT4gL3VzZXJzLzc4OS9wcm9maWxlXG5cblxuICBpZiAoIXN0YXJ0c1dpdGgodG9TZWdtZW50c1swXSwgXCIuXCIpKSB7XG4gICAgdmFyIHBhdGhuYW1lID0gYmFzZVNlZ21lbnRzLmNvbmNhdCh0b1NlZ21lbnRzKS5qb2luKFwiL1wiKTtcbiAgICByZXR1cm4gYWRkUXVlcnkoKGJhc2VQYXRobmFtZSA9PT0gXCIvXCIgPyBcIlwiIDogXCIvXCIpICsgcGF0aG5hbWUsIHRvUXVlcnkpO1xuICB9IC8vIC4vICAgICAgICAgL3VzZXJzLzEyMyAgPT4gIC91c2Vycy8xMjNcbiAgLy8gLi4vICAgICAgICAvdXNlcnMvMTIzICA9PiAgL3VzZXJzXG4gIC8vIC4uLy4uICAgICAgL3VzZXJzLzEyMyAgPT4gIC9cbiAgLy8gLi4vLi4vb25lICAvYS9iL2MvZCAgICA9PiAgL2EvYi9vbmVcbiAgLy8gLi4vLi9vbmUgICAvYS9iL2MvZCAgICA9PiAgL2EvYi9jL29uZVxuXG5cbiAgdmFyIGFsbFNlZ21lbnRzID0gYmFzZVNlZ21lbnRzLmNvbmNhdCh0b1NlZ21lbnRzKTtcbiAgdmFyIHNlZ21lbnRzID0gW107XG5cbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBhbGxTZWdtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICB2YXIgc2VnbWVudCA9IGFsbFNlZ21lbnRzW2ldO1xuICAgIGlmIChzZWdtZW50ID09PSBcIi4uXCIpIHNlZ21lbnRzLnBvcCgpO2Vsc2UgaWYgKHNlZ21lbnQgIT09IFwiLlwiKSBzZWdtZW50cy5wdXNoKHNlZ21lbnQpO1xuICB9XG5cbiAgcmV0dXJuIGFkZFF1ZXJ5KFwiL1wiICsgc2VnbWVudHMuam9pbihcIi9cIiksIHRvUXVlcnkpO1xufTsgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIGluc2VydFBhcmFtcyhwYXRoLCBwYXJhbXMpXG5cblxudmFyIGluc2VydFBhcmFtcyA9IGZ1bmN0aW9uIGluc2VydFBhcmFtcyhwYXRoLCBwYXJhbXMpIHtcbiAgdmFyIF9wYXRoJHNwbGl0ID0gcGF0aC5zcGxpdChcIj9cIiksXG4gICAgICBwYXRoQmFzZSA9IF9wYXRoJHNwbGl0WzBdLFxuICAgICAgX3BhdGgkc3BsaXQkID0gX3BhdGgkc3BsaXRbMV0sXG4gICAgICBxdWVyeSA9IF9wYXRoJHNwbGl0JCA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IF9wYXRoJHNwbGl0JDtcblxuICB2YXIgc2VnbWVudHMgPSBzZWdtZW50aXplKHBhdGhCYXNlKTtcbiAgdmFyIGNvbnN0cnVjdGVkUGF0aCA9IFwiL1wiICsgc2VnbWVudHMubWFwKGZ1bmN0aW9uIChzZWdtZW50KSB7XG4gICAgdmFyIG1hdGNoID0gcGFyYW1SZS5leGVjKHNlZ21lbnQpO1xuICAgIHJldHVybiBtYXRjaCA/IHBhcmFtc1ttYXRjaFsxXV0gOiBzZWdtZW50O1xuICB9KS5qb2luKFwiL1wiKTtcbiAgdmFyIF9wYXJhbXMkbG9jYXRpb24gPSBwYXJhbXMubG9jYXRpb247XG4gIF9wYXJhbXMkbG9jYXRpb24gPSBfcGFyYW1zJGxvY2F0aW9uID09PSB1bmRlZmluZWQgPyB7fSA6IF9wYXJhbXMkbG9jYXRpb247XG4gIHZhciBfcGFyYW1zJGxvY2F0aW9uJHNlYXIgPSBfcGFyYW1zJGxvY2F0aW9uLnNlYXJjaCxcbiAgICAgIHNlYXJjaCA9IF9wYXJhbXMkbG9jYXRpb24kc2VhciA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IF9wYXJhbXMkbG9jYXRpb24kc2VhcjtcbiAgdmFyIHNlYXJjaFNwbGl0ID0gc2VhcmNoLnNwbGl0KFwiP1wiKVsxXSB8fCBcIlwiO1xuICBjb25zdHJ1Y3RlZFBhdGggPSBhZGRRdWVyeShjb25zdHJ1Y3RlZFBhdGgsIHF1ZXJ5LCBzZWFyY2hTcGxpdCk7XG4gIHJldHVybiBjb25zdHJ1Y3RlZFBhdGg7XG59O1xuXG52YXIgdmFsaWRhdGVSZWRpcmVjdCA9IGZ1bmN0aW9uIHZhbGlkYXRlUmVkaXJlY3QoZnJvbSwgdG8pIHtcbiAgdmFyIGZpbHRlciA9IGZ1bmN0aW9uIGZpbHRlcihzZWdtZW50KSB7XG4gICAgcmV0dXJuIGlzRHluYW1pYyhzZWdtZW50KTtcbiAgfTtcblxuICB2YXIgZnJvbVN0cmluZyA9IHNlZ21lbnRpemUoZnJvbSkuZmlsdGVyKGZpbHRlcikuc29ydCgpLmpvaW4oXCIvXCIpO1xuICB2YXIgdG9TdHJpbmcgPSBzZWdtZW50aXplKHRvKS5maWx0ZXIoZmlsdGVyKS5zb3J0KCkuam9pbihcIi9cIik7XG4gIHJldHVybiBmcm9tU3RyaW5nID09PSB0b1N0cmluZztcbn07IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBKdW5rXG5cblxudmFyIHBhcmFtUmUgPSAvXjooLispLztcbnZhciBTRUdNRU5UX1BPSU5UUyA9IDQ7XG52YXIgU1RBVElDX1BPSU5UUyA9IDM7XG52YXIgRFlOQU1JQ19QT0lOVFMgPSAyO1xudmFyIFNQTEFUX1BFTkFMVFkgPSAxO1xudmFyIFJPT1RfUE9JTlRTID0gMTtcblxudmFyIGlzUm9vdFNlZ21lbnQgPSBmdW5jdGlvbiBpc1Jvb3RTZWdtZW50KHNlZ21lbnQpIHtcbiAgcmV0dXJuIHNlZ21lbnQgPT09IFwiXCI7XG59O1xuXG52YXIgaXNEeW5hbWljID0gZnVuY3Rpb24gaXNEeW5hbWljKHNlZ21lbnQpIHtcbiAgcmV0dXJuIHBhcmFtUmUudGVzdChzZWdtZW50KTtcbn07XG5cbnZhciBpc1NwbGF0ID0gZnVuY3Rpb24gaXNTcGxhdChzZWdtZW50KSB7XG4gIHJldHVybiBzZWdtZW50ICYmIHNlZ21lbnRbMF0gPT09IFwiKlwiO1xufTtcblxudmFyIHJhbmtSb3V0ZSA9IGZ1bmN0aW9uIHJhbmtSb3V0ZShyb3V0ZSwgaW5kZXgpIHtcbiAgdmFyIHNjb3JlID0gcm91dGUuZGVmYXVsdCA/IDAgOiBzZWdtZW50aXplKHJvdXRlLnBhdGgpLnJlZHVjZShmdW5jdGlvbiAoc2NvcmUsIHNlZ21lbnQpIHtcbiAgICBzY29yZSArPSBTRUdNRU5UX1BPSU5UUztcbiAgICBpZiAoaXNSb290U2VnbWVudChzZWdtZW50KSkgc2NvcmUgKz0gUk9PVF9QT0lOVFM7ZWxzZSBpZiAoaXNEeW5hbWljKHNlZ21lbnQpKSBzY29yZSArPSBEWU5BTUlDX1BPSU5UUztlbHNlIGlmIChpc1NwbGF0KHNlZ21lbnQpKSBzY29yZSAtPSBTRUdNRU5UX1BPSU5UUyArIFNQTEFUX1BFTkFMVFk7ZWxzZSBzY29yZSArPSBTVEFUSUNfUE9JTlRTO1xuICAgIHJldHVybiBzY29yZTtcbiAgfSwgMCk7XG4gIHJldHVybiB7XG4gICAgcm91dGU6IHJvdXRlLFxuICAgIHNjb3JlOiBzY29yZSxcbiAgICBpbmRleDogaW5kZXhcbiAgfTtcbn07XG5cbnZhciByYW5rUm91dGVzID0gZnVuY3Rpb24gcmFua1JvdXRlcyhyb3V0ZXMpIHtcbiAgcmV0dXJuIHJvdXRlcy5tYXAocmFua1JvdXRlKS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgcmV0dXJuIGEuc2NvcmUgPCBiLnNjb3JlID8gMSA6IGEuc2NvcmUgPiBiLnNjb3JlID8gLTEgOiBhLmluZGV4IC0gYi5pbmRleDtcbiAgfSk7XG59O1xuXG52YXIgc2VnbWVudGl6ZSA9IGZ1bmN0aW9uIHNlZ21lbnRpemUodXJpKSB7XG4gIHJldHVybiB1cmkgLy8gc3RyaXAgc3RhcnRpbmcvZW5kaW5nIHNsYXNoZXNcbiAgLnJlcGxhY2UoLyheXFwvK3xcXC8rJCkvZywgXCJcIikuc3BsaXQoXCIvXCIpO1xufTtcblxudmFyIGFkZFF1ZXJ5ID0gZnVuY3Rpb24gYWRkUXVlcnkocGF0aG5hbWUpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHF1ZXJ5ID0gQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIHF1ZXJ5W19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuXG4gIHF1ZXJ5ID0gcXVlcnkuZmlsdGVyKGZ1bmN0aW9uIChxKSB7XG4gICAgcmV0dXJuIHEgJiYgcS5sZW5ndGggPiAwO1xuICB9KTtcbiAgcmV0dXJuIHBhdGhuYW1lICsgKHF1ZXJ5ICYmIHF1ZXJ5Lmxlbmd0aCA+IDAgPyBcIj9cIiArIHF1ZXJ5LmpvaW4oXCImXCIpIDogXCJcIik7XG59O1xuXG52YXIgcmVzZXJ2ZWROYW1lcyA9IFtcInVyaVwiLCBcInBhdGhcIl07XG4vKipcbiAqIFNoYWxsb3cgY29tcGFyZXMgdHdvIG9iamVjdHMuXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqMSBUaGUgZmlyc3Qgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqMiBUaGUgc2Vjb25kIG9iamVjdCB0byBjb21wYXJlLlxuICovXG5cbnZhciBzaGFsbG93Q29tcGFyZSA9IGZ1bmN0aW9uIHNoYWxsb3dDb21wYXJlKG9iajEsIG9iajIpIHtcbiAgdmFyIG9iajFLZXlzID0gT2JqZWN0LmtleXMob2JqMSk7XG4gIHJldHVybiBvYmoxS2V5cy5sZW5ndGggPT09IE9iamVjdC5rZXlzKG9iajIpLmxlbmd0aCAmJiBvYmoxS2V5cy5ldmVyeShmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuIG9iajIuaGFzT3duUHJvcGVydHkoa2V5KSAmJiBvYmoxW2tleV0gPT09IG9iajJba2V5XTtcbiAgfSk7XG59OyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5cbmV4cG9ydCB7IHN0YXJ0c1dpdGgsIHBpY2ssIG1hdGNoLCByZXNvbHZlLCBpbnNlcnRQYXJhbXMsIHZhbGlkYXRlUmVkaXJlY3QsIHNoYWxsb3dDb21wYXJlIH07IiwidmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTtcblxuICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn07XG5cbnZhciBnZXRMb2NhdGlvbiA9IGZ1bmN0aW9uIGdldExvY2F0aW9uKHNvdXJjZSkge1xuICB2YXIgX3NvdXJjZSRsb2NhdGlvbiA9IHNvdXJjZS5sb2NhdGlvbixcbiAgICAgIHNlYXJjaCA9IF9zb3VyY2UkbG9jYXRpb24uc2VhcmNoLFxuICAgICAgaGFzaCA9IF9zb3VyY2UkbG9jYXRpb24uaGFzaCxcbiAgICAgIGhyZWYgPSBfc291cmNlJGxvY2F0aW9uLmhyZWYsXG4gICAgICBvcmlnaW4gPSBfc291cmNlJGxvY2F0aW9uLm9yaWdpbixcbiAgICAgIHByb3RvY29sID0gX3NvdXJjZSRsb2NhdGlvbi5wcm90b2NvbCxcbiAgICAgIGhvc3QgPSBfc291cmNlJGxvY2F0aW9uLmhvc3QsXG4gICAgICBob3N0bmFtZSA9IF9zb3VyY2UkbG9jYXRpb24uaG9zdG5hbWUsXG4gICAgICBwb3J0ID0gX3NvdXJjZSRsb2NhdGlvbi5wb3J0O1xuICB2YXIgcGF0aG5hbWUgPSBzb3VyY2UubG9jYXRpb24ucGF0aG5hbWU7XG5cbiAgaWYgKCFwYXRobmFtZSAmJiBocmVmICYmIGNhblVzZURPTSkge1xuICAgIHZhciB1cmwgPSBuZXcgVVJMKGhyZWYpO1xuICAgIHBhdGhuYW1lID0gdXJsLnBhdGhuYW1lO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBwYXRobmFtZTogZW5jb2RlVVJJKGRlY29kZVVSSShwYXRobmFtZSkpLFxuICAgIHNlYXJjaDogc2VhcmNoLFxuICAgIGhhc2g6IGhhc2gsXG4gICAgaHJlZjogaHJlZixcbiAgICBvcmlnaW46IG9yaWdpbixcbiAgICBwcm90b2NvbDogcHJvdG9jb2wsXG4gICAgaG9zdDogaG9zdCxcbiAgICBob3N0bmFtZTogaG9zdG5hbWUsXG4gICAgcG9ydDogcG9ydCxcbiAgICBzdGF0ZTogc291cmNlLmhpc3Rvcnkuc3RhdGUsXG4gICAga2V5OiBzb3VyY2UuaGlzdG9yeS5zdGF0ZSAmJiBzb3VyY2UuaGlzdG9yeS5zdGF0ZS5rZXkgfHwgXCJpbml0aWFsXCJcbiAgfTtcbn07XG5cbnZhciBjcmVhdGVIaXN0b3J5ID0gZnVuY3Rpb24gY3JlYXRlSGlzdG9yeShzb3VyY2UsIG9wdGlvbnMpIHtcbiAgdmFyIGxpc3RlbmVycyA9IFtdO1xuICB2YXIgbG9jYXRpb24gPSBnZXRMb2NhdGlvbihzb3VyY2UpO1xuICB2YXIgdHJhbnNpdGlvbmluZyA9IGZhbHNlO1xuXG4gIHZhciByZXNvbHZlVHJhbnNpdGlvbiA9IGZ1bmN0aW9uIHJlc29sdmVUcmFuc2l0aW9uKCkge307XG5cbiAgcmV0dXJuIHtcbiAgICBnZXQgbG9jYXRpb24oKSB7XG4gICAgICByZXR1cm4gbG9jYXRpb247XG4gICAgfSxcblxuICAgIGdldCB0cmFuc2l0aW9uaW5nKCkge1xuICAgICAgcmV0dXJuIHRyYW5zaXRpb25pbmc7XG4gICAgfSxcblxuICAgIF9vblRyYW5zaXRpb25Db21wbGV0ZTogZnVuY3Rpb24gX29uVHJhbnNpdGlvbkNvbXBsZXRlKCkge1xuICAgICAgdHJhbnNpdGlvbmluZyA9IGZhbHNlO1xuICAgICAgcmVzb2x2ZVRyYW5zaXRpb24oKTtcbiAgICB9LFxuICAgIGxpc3RlbjogZnVuY3Rpb24gbGlzdGVuKGxpc3RlbmVyKSB7XG4gICAgICBsaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG5cbiAgICAgIHZhciBwb3BzdGF0ZUxpc3RlbmVyID0gZnVuY3Rpb24gcG9wc3RhdGVMaXN0ZW5lcigpIHtcbiAgICAgICAgbG9jYXRpb24gPSBnZXRMb2NhdGlvbihzb3VyY2UpO1xuICAgICAgICBsaXN0ZW5lcih7XG4gICAgICAgICAgbG9jYXRpb246IGxvY2F0aW9uLFxuICAgICAgICAgIGFjdGlvbjogXCJQT1BcIlxuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIHNvdXJjZS5hZGRFdmVudExpc3RlbmVyKFwicG9wc3RhdGVcIiwgcG9wc3RhdGVMaXN0ZW5lcik7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICBzb3VyY2UucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvcHN0YXRlXCIsIHBvcHN0YXRlTGlzdGVuZXIpO1xuICAgICAgICBsaXN0ZW5lcnMgPSBsaXN0ZW5lcnMuZmlsdGVyKGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgIHJldHVybiBmbiAhPT0gbGlzdGVuZXI7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICB9LFxuICAgIG5hdmlnYXRlOiBmdW5jdGlvbiBuYXZpZ2F0ZSh0bykge1xuICAgICAgdmFyIF9yZWYgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9LFxuICAgICAgICAgIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgICAgICBfcmVmJHJlcGxhY2UgPSBfcmVmLnJlcGxhY2UsXG4gICAgICAgICAgcmVwbGFjZSA9IF9yZWYkcmVwbGFjZSA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiBfcmVmJHJlcGxhY2U7XG5cbiAgICAgIGlmICh0eXBlb2YgdG8gPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgc291cmNlLmhpc3RvcnkuZ28odG8pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhdGUgPSBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgICBrZXk6IERhdGUubm93KCkgKyBcIlwiXG4gICAgICAgIH0pOyAvLyB0cnkuLi5jYXRjaCBpT1MgU2FmYXJpIGxpbWl0cyB0byAxMDAgcHVzaFN0YXRlIGNhbGxzXG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAodHJhbnNpdGlvbmluZyB8fCByZXBsYWNlKSB7XG4gICAgICAgICAgICBzb3VyY2UuaGlzdG9yeS5yZXBsYWNlU3RhdGUoc3RhdGUsIG51bGwsIHRvKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc291cmNlLmhpc3RvcnkucHVzaFN0YXRlKHN0YXRlLCBudWxsLCB0byk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgc291cmNlLmxvY2F0aW9uW3JlcGxhY2UgPyBcInJlcGxhY2VcIiA6IFwiYXNzaWduXCJdKHRvKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsb2NhdGlvbiA9IGdldExvY2F0aW9uKHNvdXJjZSk7XG4gICAgICB0cmFuc2l0aW9uaW5nID0gdHJ1ZTtcbiAgICAgIHZhciB0cmFuc2l0aW9uID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlcykge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZVRyYW5zaXRpb24gPSByZXM7XG4gICAgICB9KTtcbiAgICAgIGxpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uIChsaXN0ZW5lcikge1xuICAgICAgICByZXR1cm4gbGlzdGVuZXIoe1xuICAgICAgICAgIGxvY2F0aW9uOiBsb2NhdGlvbixcbiAgICAgICAgICBhY3Rpb246IFwiUFVTSFwiXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gdHJhbnNpdGlvbjtcbiAgICB9XG4gIH07XG59OyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gU3RvcmVzIGhpc3RvcnkgZW50cmllcyBpbiBtZW1vcnkgZm9yIHRlc3Rpbmcgb3Igb3RoZXIgcGxhdGZvcm1zIGxpa2UgTmF0aXZlXG5cblxudmFyIGNyZWF0ZU1lbW9yeVNvdXJjZSA9IGZ1bmN0aW9uIGNyZWF0ZU1lbW9yeVNvdXJjZSgpIHtcbiAgdmFyIGluaXRpYWxQYXRoID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBcIi9cIjtcbiAgdmFyIHNlYXJjaEluZGV4ID0gaW5pdGlhbFBhdGguaW5kZXhPZihcIj9cIik7XG4gIHZhciBpbml0aWFsTG9jYXRpb24gPSB7XG4gICAgcGF0aG5hbWU6IHNlYXJjaEluZGV4ID4gLTEgPyBpbml0aWFsUGF0aC5zdWJzdHIoMCwgc2VhcmNoSW5kZXgpIDogaW5pdGlhbFBhdGgsXG4gICAgc2VhcmNoOiBzZWFyY2hJbmRleCA+IC0xID8gaW5pdGlhbFBhdGguc3Vic3RyKHNlYXJjaEluZGV4KSA6IFwiXCJcbiAgfTtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIHN0YWNrID0gW2luaXRpYWxMb2NhdGlvbl07XG4gIHZhciBzdGF0ZXMgPSBbbnVsbF07XG4gIHJldHVybiB7XG4gICAgZ2V0IGxvY2F0aW9uKCkge1xuICAgICAgcmV0dXJuIHN0YWNrW2luZGV4XTtcbiAgICB9LFxuXG4gICAgYWRkRXZlbnRMaXN0ZW5lcjogZnVuY3Rpb24gYWRkRXZlbnRMaXN0ZW5lcihuYW1lLCBmbikge30sXG4gICAgcmVtb3ZlRXZlbnRMaXN0ZW5lcjogZnVuY3Rpb24gcmVtb3ZlRXZlbnRMaXN0ZW5lcihuYW1lLCBmbikge30sXG4gICAgaGlzdG9yeToge1xuICAgICAgZ2V0IGVudHJpZXMoKSB7XG4gICAgICAgIHJldHVybiBzdGFjaztcbiAgICAgIH0sXG5cbiAgICAgIGdldCBpbmRleCgpIHtcbiAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgICAgfSxcblxuICAgICAgZ2V0IHN0YXRlKCkge1xuICAgICAgICByZXR1cm4gc3RhdGVzW2luZGV4XTtcbiAgICAgIH0sXG5cbiAgICAgIHB1c2hTdGF0ZTogZnVuY3Rpb24gcHVzaFN0YXRlKHN0YXRlLCBfLCB1cmkpIHtcbiAgICAgICAgdmFyIF91cmkkc3BsaXQgPSB1cmkuc3BsaXQoXCI/XCIpLFxuICAgICAgICAgICAgcGF0aG5hbWUgPSBfdXJpJHNwbGl0WzBdLFxuICAgICAgICAgICAgX3VyaSRzcGxpdCQgPSBfdXJpJHNwbGl0WzFdLFxuICAgICAgICAgICAgc2VhcmNoID0gX3VyaSRzcGxpdCQgPT09IHVuZGVmaW5lZCA/IFwiXCIgOiBfdXJpJHNwbGl0JDtcblxuICAgICAgICBpbmRleCsrO1xuICAgICAgICBzdGFjay5wdXNoKHtcbiAgICAgICAgICBwYXRobmFtZTogcGF0aG5hbWUsXG4gICAgICAgICAgc2VhcmNoOiBzZWFyY2gubGVuZ3RoID8gXCI/XCIgKyBzZWFyY2ggOiBzZWFyY2hcbiAgICAgICAgfSk7XG4gICAgICAgIHN0YXRlcy5wdXNoKHN0YXRlKTtcbiAgICAgIH0sXG4gICAgICByZXBsYWNlU3RhdGU6IGZ1bmN0aW9uIHJlcGxhY2VTdGF0ZShzdGF0ZSwgXywgdXJpKSB7XG4gICAgICAgIHZhciBfdXJpJHNwbGl0MiA9IHVyaS5zcGxpdChcIj9cIiksXG4gICAgICAgICAgICBwYXRobmFtZSA9IF91cmkkc3BsaXQyWzBdLFxuICAgICAgICAgICAgX3VyaSRzcGxpdDIkID0gX3VyaSRzcGxpdDJbMV0sXG4gICAgICAgICAgICBzZWFyY2ggPSBfdXJpJHNwbGl0MiQgPT09IHVuZGVmaW5lZCA/IFwiXCIgOiBfdXJpJHNwbGl0MiQ7XG5cbiAgICAgICAgc3RhY2tbaW5kZXhdID0ge1xuICAgICAgICAgIHBhdGhuYW1lOiBwYXRobmFtZSxcbiAgICAgICAgICBzZWFyY2g6IHNlYXJjaFxuICAgICAgICB9O1xuICAgICAgICBzdGF0ZXNbaW5kZXhdID0gc3RhdGU7XG4gICAgICB9LFxuICAgICAgZ286IGZ1bmN0aW9uIGdvKHRvKSB7XG4gICAgICAgIHZhciBuZXdJbmRleCA9IGluZGV4ICsgdG87XG5cbiAgICAgICAgaWYgKG5ld0luZGV4IDwgMCB8fCBuZXdJbmRleCA+IHN0YXRlcy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5kZXggPSBuZXdJbmRleDtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59OyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gZ2xvYmFsIGhpc3RvcnkgLSB1c2VzIHdpbmRvdy5oaXN0b3J5IGFzIHRoZSBzb3VyY2UgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgYVxuLy8gbWVtb3J5IGhpc3RvcnlcblxuXG52YXIgY2FuVXNlRE9NID0gISEodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB3aW5kb3cuZG9jdW1lbnQgJiYgd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xuXG52YXIgZ2V0U291cmNlID0gZnVuY3Rpb24gZ2V0U291cmNlKCkge1xuICByZXR1cm4gY2FuVXNlRE9NID8gd2luZG93IDogY3JlYXRlTWVtb3J5U291cmNlKCk7XG59O1xuXG52YXIgZ2xvYmFsSGlzdG9yeSA9IGNyZWF0ZUhpc3RvcnkoZ2V0U291cmNlKCkpO1xudmFyIG5hdmlnYXRlID0gZ2xvYmFsSGlzdG9yeS5uYXZpZ2F0ZTsgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuZXhwb3J0IHsgZ2xvYmFsSGlzdG9yeSwgbmF2aWdhdGUsIGNyZWF0ZUhpc3RvcnksIGNyZWF0ZU1lbW9yeVNvdXJjZSB9OyIsInZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkge1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59O1xuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob2JqLCBrZXlzKSB7XG4gIHZhciB0YXJnZXQgPSB7fTtcblxuICBmb3IgKHZhciBpIGluIG9iaikge1xuICAgIGlmIChrZXlzLmluZGV4T2YoaSkgPj0gMCkgY29udGludWU7XG4gICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBpKSkgY29udGludWU7XG4gICAgdGFyZ2V0W2ldID0gb2JqW2ldO1xuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkge1xuICBpZiAoIXNlbGYpIHtcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIH1cblxuICByZXR1cm4gY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikgPyBjYWxsIDogc2VsZjtcbn1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIiArIHR5cGVvZiBzdXBlckNsYXNzKTtcbiAgfVxuXG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwge1xuICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICB2YWx1ZTogc3ViQ2xhc3MsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfVxuICB9KTtcbiAgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzO1xufVxuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvYW5jaG9yLWhhcy1jb250ZW50ICovXG5cblxuaW1wb3J0IFJlYWN0LCB7IHVzZUNvbnRleHQsIGNyZWF0ZUNvbnRleHQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBpbnZhcmlhbnQgZnJvbSBcImludmFyaWFudFwiO1xuaW1wb3J0IHsgcG9seWZpbGwgfSBmcm9tIFwicmVhY3QtbGlmZWN5Y2xlcy1jb21wYXRcIjtcbmltcG9ydCB7IHN0YXJ0c1dpdGgsIHBpY2ssIHJlc29sdmUsIG1hdGNoLCBpbnNlcnRQYXJhbXMsIHZhbGlkYXRlUmVkaXJlY3QsIHNoYWxsb3dDb21wYXJlIH0gZnJvbSBcIi4vbGliL3V0aWxzXCI7XG5pbXBvcnQgeyBnbG9iYWxIaXN0b3J5LCBuYXZpZ2F0ZSwgY3JlYXRlSGlzdG9yeSwgY3JlYXRlTWVtb3J5U291cmNlIH0gZnJvbSBcIi4vbGliL2hpc3RvcnlcIjsgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxudmFyIGNyZWF0ZU5hbWVkQ29udGV4dCA9IGZ1bmN0aW9uIGNyZWF0ZU5hbWVkQ29udGV4dChuYW1lLCBkZWZhdWx0VmFsdWUpIHtcbiAgdmFyIEN0eCA9IGNyZWF0ZUNvbnRleHQoZGVmYXVsdFZhbHVlKTtcbiAgQ3R4LmRpc3BsYXlOYW1lID0gbmFtZTtcbiAgcmV0dXJuIEN0eDtcbn07IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBMb2NhdGlvbiBDb250ZXh0L1Byb3ZpZGVyXG5cblxudmFyIExvY2F0aW9uQ29udGV4dCA9IGNyZWF0ZU5hbWVkQ29udGV4dChcIkxvY2F0aW9uXCIpOyAvLyBzZXRzIHVwIGEgbGlzdGVuZXIgaWYgdGhlcmUgaXNuJ3Qgb25lIGFscmVhZHkgc28gYXBwcyBkb24ndCBuZWVkIHRvIGJlXG4vLyB3cmFwcGVkIGluIHNvbWUgdG9wIGxldmVsIHByb3ZpZGVyXG5cbnZhciBMb2NhdGlvbiA9IGZ1bmN0aW9uIExvY2F0aW9uKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbjtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTG9jYXRpb25Db250ZXh0LkNvbnN1bWVyLCBudWxsLCBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgIHJldHVybiBjb250ZXh0ID8gY2hpbGRyZW4oY29udGV4dCkgOiBSZWFjdC5jcmVhdGVFbGVtZW50KExvY2F0aW9uUHJvdmlkZXIsIG51bGwsIGNoaWxkcmVuKTtcbiAgfSk7XG59O1xuXG52YXIgTG9jYXRpb25Qcm92aWRlciA9IGZ1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhMb2NhdGlvblByb3ZpZGVyLCBfUmVhY3QkQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBMb2NhdGlvblByb3ZpZGVyKCkge1xuICAgIHZhciBfdGVtcCwgX3RoaXMsIF9yZXQ7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgTG9jYXRpb25Qcm92aWRlcik7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICByZXR1cm4gX3JldCA9IChfdGVtcCA9IChfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9SZWFjdCRDb21wb25lbnQuY2FsbC5hcHBseShfUmVhY3QkQ29tcG9uZW50LCBbdGhpc10uY29uY2F0KGFyZ3MpKSksIF90aGlzKSwgX3RoaXMuc3RhdGUgPSB7XG4gICAgICBjb250ZXh0OiBfdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICByZWZzOiB7XG4gICAgICAgIHVubGlzdGVuOiBudWxsXG4gICAgICB9XG4gICAgfSwgX3RlbXApLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihfdGhpcywgX3JldCk7XG4gIH1cblxuICBMb2NhdGlvblByb3ZpZGVyLnByb3RvdHlwZS5nZXRDb250ZXh0ID0gZnVuY3Rpb24gZ2V0Q29udGV4dCgpIHtcbiAgICB2YXIgX3Byb3BzJGhpc3RvcnkgPSB0aGlzLnByb3BzLmhpc3RvcnksXG4gICAgICAgIG5hdmlnYXRlID0gX3Byb3BzJGhpc3RvcnkubmF2aWdhdGUsXG4gICAgICAgIGxvY2F0aW9uID0gX3Byb3BzJGhpc3RvcnkubG9jYXRpb247XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hdmlnYXRlOiBuYXZpZ2F0ZSxcbiAgICAgIGxvY2F0aW9uOiBsb2NhdGlvblxuICAgIH07XG4gIH07XG5cbiAgTG9jYXRpb25Qcm92aWRlci5wcm90b3R5cGUuY29tcG9uZW50RGlkQ2F0Y2ggPSBmdW5jdGlvbiBjb21wb25lbnREaWRDYXRjaChlcnJvciwgaW5mbykge1xuICAgIGlmIChpc1JlZGlyZWN0KGVycm9yKSkge1xuICAgICAgdmFyIF9uYXZpZ2F0ZSA9IHRoaXMucHJvcHMuaGlzdG9yeS5uYXZpZ2F0ZTtcblxuICAgICAgX25hdmlnYXRlKGVycm9yLnVyaSwge1xuICAgICAgICByZXBsYWNlOiB0cnVlXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9O1xuXG4gIExvY2F0aW9uUHJvdmlkZXIucHJvdG90eXBlLmNvbXBvbmVudERpZFVwZGF0ZSA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSkge1xuICAgIGlmIChwcmV2U3RhdGUuY29udGV4dC5sb2NhdGlvbiAhPT0gdGhpcy5zdGF0ZS5jb250ZXh0LmxvY2F0aW9uKSB7XG4gICAgICB0aGlzLnByb3BzLmhpc3RvcnkuX29uVHJhbnNpdGlvbkNvbXBsZXRlKCk7XG4gICAgfVxuICB9O1xuXG4gIExvY2F0aW9uUHJvdmlkZXIucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICB2YXIgcmVmcyA9IHRoaXMuc3RhdGUucmVmcyxcbiAgICAgICAgaGlzdG9yeSA9IHRoaXMucHJvcHMuaGlzdG9yeTtcblxuICAgIGhpc3RvcnkuX29uVHJhbnNpdGlvbkNvbXBsZXRlKCk7XG5cbiAgICByZWZzLnVubGlzdGVuID0gaGlzdG9yeS5saXN0ZW4oZnVuY3Rpb24gKCkge1xuICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIFRPRE86IHJlcGxhY2UgckFGIHdpdGggcmVhY3QgZGVmZXJyZWQgdXBkYXRlIEFQSSB3aGVuIGl0J3MgcmVhZHkgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMzMwNlxuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmICghX3RoaXMyLnVubW91bnRlZCkge1xuICAgICAgICAgICAgX3RoaXMyLnNldFN0YXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiBfdGhpczIuZ2V0Q29udGV4dCgpXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgTG9jYXRpb25Qcm92aWRlci5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB2YXIgcmVmcyA9IHRoaXMuc3RhdGUucmVmcztcbiAgICB0aGlzLnVubW91bnRlZCA9IHRydWU7XG4gICAgcmVmcy51bmxpc3RlbigpO1xuICB9O1xuXG4gIExvY2F0aW9uUHJvdmlkZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICB2YXIgY29udGV4dCA9IHRoaXMuc3RhdGUuY29udGV4dCxcbiAgICAgICAgY2hpbGRyZW4gPSB0aGlzLnByb3BzLmNoaWxkcmVuO1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KExvY2F0aW9uQ29udGV4dC5Qcm92aWRlciwge1xuICAgICAgdmFsdWU6IGNvbnRleHRcbiAgICB9LCB0eXBlb2YgY2hpbGRyZW4gPT09IFwiZnVuY3Rpb25cIiA/IGNoaWxkcmVuKGNvbnRleHQpIDogY2hpbGRyZW4gfHwgbnVsbCk7XG4gIH07XG5cbiAgcmV0dXJuIExvY2F0aW9uUHJvdmlkZXI7XG59KFJlYWN0LkNvbXBvbmVudCk7IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cblxuTG9jYXRpb25Qcm92aWRlci5kZWZhdWx0UHJvcHMgPSB7XG4gIGhpc3Rvcnk6IGdsb2JhbEhpc3Rvcnlcbn07XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB2b2lkIDAgOiB2b2lkIDA7XG5cbnZhciBTZXJ2ZXJMb2NhdGlvbiA9IGZ1bmN0aW9uIFNlcnZlckxvY2F0aW9uKF9yZWYyKSB7XG4gIHZhciB1cmwgPSBfcmVmMi51cmwsXG4gICAgICBjaGlsZHJlbiA9IF9yZWYyLmNoaWxkcmVuO1xuICB2YXIgc2VhcmNoSW5kZXggPSB1cmwuaW5kZXhPZihcIj9cIik7XG4gIHZhciBzZWFyY2hFeGlzdHMgPSBzZWFyY2hJbmRleCA+IC0xO1xuICB2YXIgcGF0aG5hbWUgPSB2b2lkIDA7XG4gIHZhciBzZWFyY2ggPSBcIlwiO1xuICB2YXIgaGFzaCA9IFwiXCI7XG5cbiAgaWYgKHNlYXJjaEV4aXN0cykge1xuICAgIHBhdGhuYW1lID0gdXJsLnN1YnN0cmluZygwLCBzZWFyY2hJbmRleCk7XG4gICAgc2VhcmNoID0gdXJsLnN1YnN0cmluZyhzZWFyY2hJbmRleCk7XG4gIH0gZWxzZSB7XG4gICAgcGF0aG5hbWUgPSB1cmw7XG4gIH1cblxuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChMb2NhdGlvbkNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZToge1xuICAgICAgbG9jYXRpb246IHtcbiAgICAgICAgcGF0aG5hbWU6IHBhdGhuYW1lLFxuICAgICAgICBzZWFyY2g6IHNlYXJjaCxcbiAgICAgICAgaGFzaDogaGFzaFxuICAgICAgfSxcbiAgICAgIG5hdmlnYXRlOiBmdW5jdGlvbiBuYXZpZ2F0ZSgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiWW91IGNhbid0IGNhbGwgbmF2aWdhdGUgb24gdGhlIHNlcnZlci5cIik7XG4gICAgICB9XG4gICAgfVxuICB9LCBjaGlsZHJlbik7XG59OyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gU2V0cyBiYXNldXJpIGFuZCBiYXNlcGF0aCBmb3IgbmVzdGVkIHJvdXRlcnMgYW5kIGxpbmtzXG5cblxudmFyIEJhc2VDb250ZXh0ID0gY3JlYXRlTmFtZWRDb250ZXh0KFwiQmFzZVwiLCB7XG4gIGJhc2V1cmk6IFwiL1wiLFxuICBiYXNlcGF0aDogXCIvXCIsXG4gIG5hdmlnYXRlOiBnbG9iYWxIaXN0b3J5Lm5hdmlnYXRlXG59KTsgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFRoZSBtYWluIGV2ZW50LCB3ZWxjb21lIHRvIHRoZSBzaG93IGV2ZXJ5Ym9keS5cblxudmFyIFJvdXRlciA9IGZ1bmN0aW9uIFJvdXRlcihwcm9wcykge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChCYXNlQ29udGV4dC5Db25zdW1lciwgbnVsbCwgZnVuY3Rpb24gKGJhc2VDb250ZXh0KSB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTG9jYXRpb24sIG51bGwsIGZ1bmN0aW9uIChsb2NhdGlvbkNvbnRleHQpIHtcbiAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFJvdXRlckltcGwsIF9leHRlbmRzKHt9LCBiYXNlQ29udGV4dCwgbG9jYXRpb25Db250ZXh0LCBwcm9wcykpO1xuICAgIH0pO1xuICB9KTtcbn07XG5cbnZhciBSb3V0ZXJJbXBsID0gZnVuY3Rpb24gKF9SZWFjdCRQdXJlQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhSb3V0ZXJJbXBsLCBfUmVhY3QkUHVyZUNvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gUm91dGVySW1wbCgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUm91dGVySW1wbCk7XG5cbiAgICByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX1JlYWN0JFB1cmVDb21wb25lbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG4gIH1cblxuICBSb3V0ZXJJbXBsLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgdmFyIF9wcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgIGxvY2F0aW9uID0gX3Byb3BzLmxvY2F0aW9uLFxuICAgICAgICBfbmF2aWdhdGUyID0gX3Byb3BzLm5hdmlnYXRlLFxuICAgICAgICBiYXNlcGF0aCA9IF9wcm9wcy5iYXNlcGF0aCxcbiAgICAgICAgcHJpbWFyeSA9IF9wcm9wcy5wcmltYXJ5LFxuICAgICAgICBjaGlsZHJlbiA9IF9wcm9wcy5jaGlsZHJlbixcbiAgICAgICAgYmFzZXVyaSA9IF9wcm9wcy5iYXNldXJpLFxuICAgICAgICBfcHJvcHMkY29tcG9uZW50ID0gX3Byb3BzLmNvbXBvbmVudCxcbiAgICAgICAgY29tcG9uZW50ID0gX3Byb3BzJGNvbXBvbmVudCA9PT0gdW5kZWZpbmVkID8gXCJkaXZcIiA6IF9wcm9wcyRjb21wb25lbnQsXG4gICAgICAgIGRvbVByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9wcm9wcywgW1wibG9jYXRpb25cIiwgXCJuYXZpZ2F0ZVwiLCBcImJhc2VwYXRoXCIsIFwicHJpbWFyeVwiLCBcImNoaWxkcmVuXCIsIFwiYmFzZXVyaVwiLCBcImNvbXBvbmVudFwiXSk7XG5cbiAgICB2YXIgcm91dGVzID0gUmVhY3QuQ2hpbGRyZW4udG9BcnJheShjaGlsZHJlbikucmVkdWNlKGZ1bmN0aW9uIChhcnJheSwgY2hpbGQpIHtcbiAgICAgIHZhciByb3V0ZXMgPSBjcmVhdGVSb3V0ZShiYXNlcGF0aCkoY2hpbGQpO1xuICAgICAgcmV0dXJuIGFycmF5LmNvbmNhdChyb3V0ZXMpO1xuICAgIH0sIFtdKTtcbiAgICB2YXIgcGF0aG5hbWUgPSBsb2NhdGlvbi5wYXRobmFtZTtcbiAgICB2YXIgbWF0Y2ggPSBwaWNrKHJvdXRlcywgcGF0aG5hbWUpO1xuXG4gICAgaWYgKG1hdGNoKSB7XG4gICAgICB2YXIgcGFyYW1zID0gbWF0Y2gucGFyYW1zLFxuICAgICAgICAgIHVyaSA9IG1hdGNoLnVyaSxcbiAgICAgICAgICByb3V0ZSA9IG1hdGNoLnJvdXRlLFxuICAgICAgICAgIGVsZW1lbnQgPSBtYXRjaC5yb3V0ZS52YWx1ZTsgLy8gcmVtb3ZlIHRoZSAvKiBmcm9tIHRoZSBlbmQgZm9yIGNoaWxkIHJvdXRlcyByZWxhdGl2ZSBwYXRoc1xuXG4gICAgICBiYXNlcGF0aCA9IHJvdXRlLmRlZmF1bHQgPyBiYXNlcGF0aCA6IHJvdXRlLnBhdGgucmVwbGFjZSgvXFwqJC8sIFwiXCIpO1xuXG4gICAgICB2YXIgcHJvcHMgPSBfZXh0ZW5kcyh7fSwgcGFyYW1zLCB7XG4gICAgICAgIHVyaTogdXJpLFxuICAgICAgICBsb2NhdGlvbjogbG9jYXRpb24sXG4gICAgICAgIG5hdmlnYXRlOiBmdW5jdGlvbiBuYXZpZ2F0ZSh0bywgb3B0aW9ucykge1xuICAgICAgICAgIHJldHVybiBfbmF2aWdhdGUyKHJlc29sdmUodG8sIHVyaSksIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdmFyIGNsb25lID0gUmVhY3QuY2xvbmVFbGVtZW50KGVsZW1lbnQsIHByb3BzLCBlbGVtZW50LnByb3BzLmNoaWxkcmVuID8gUmVhY3QuY3JlYXRlRWxlbWVudChSb3V0ZXIsIHtcbiAgICAgICAgbG9jYXRpb246IGxvY2F0aW9uLFxuICAgICAgICBwcmltYXJ5OiBwcmltYXJ5XG4gICAgICB9LCBlbGVtZW50LnByb3BzLmNoaWxkcmVuKSA6IHVuZGVmaW5lZCk7IC8vIHVzaW5nICdkaXYnIGZvciA8IDE2LjMgc3VwcG9ydFxuXG4gICAgICB2YXIgRm9jdXNXcmFwcGVyID0gcHJpbWFyeSA/IEZvY3VzSGFuZGxlciA6IGNvbXBvbmVudDsgLy8gZG9uJ3QgcGFzcyBhbnkgcHJvcHMgdG8gJ2RpdidcblxuICAgICAgdmFyIHdyYXBwZXJQcm9wcyA9IHByaW1hcnkgPyBfZXh0ZW5kcyh7XG4gICAgICAgIHVyaTogdXJpLFxuICAgICAgICBsb2NhdGlvbjogbG9jYXRpb24sXG4gICAgICAgIGNvbXBvbmVudDogY29tcG9uZW50XG4gICAgICB9LCBkb21Qcm9wcykgOiBkb21Qcm9wcztcbiAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KEJhc2VDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgYmFzZXVyaTogdXJpLFxuICAgICAgICAgIGJhc2VwYXRoOiBiYXNlcGF0aCxcbiAgICAgICAgICBuYXZpZ2F0ZTogcHJvcHMubmF2aWdhdGVcbiAgICAgICAgfVxuICAgICAgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChGb2N1c1dyYXBwZXIsIHdyYXBwZXJQcm9wcywgY2xvbmUpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTm90IHN1cmUgaWYgd2Ugd2FudCB0aGlzLCB3b3VsZCByZXF1aXJlIGluZGV4IHJvdXRlcyBhdCBldmVyeSBsZXZlbFxuICAgICAgLy8gd2FybmluZyhcbiAgICAgIC8vICAgZmFsc2UsXG4gICAgICAvLyAgIGA8Um91dGVyIGJhc2VwYXRoPVwiJHtiYXNlcGF0aH1cIj5cXG5cXG5Ob3RoaW5nIG1hdGNoZWQ6XFxuXFx0JHtcbiAgICAgIC8vICAgICBsb2NhdGlvbi5wYXRobmFtZVxuICAgICAgLy8gICB9XFxuXFxuUGF0aHMgY2hlY2tlZDogXFxuXFx0JHtyb3V0ZXNcbiAgICAgIC8vICAgICAubWFwKHJvdXRlID0+IHJvdXRlLnBhdGgpXG4gICAgICAvLyAgICAgLmpvaW4oXG4gICAgICAvLyAgICAgICBcIlxcblxcdFwiXG4gICAgICAvLyAgICAgKX1cXG5cXG5UbyBnZXQgcmlkIG9mIHRoaXMgd2FybmluZywgYWRkIGEgZGVmYXVsdCBOb3RGb3VuZCBjb21wb25lbnQgYXMgY2hpbGQgb2YgUm91dGVyOlxuICAgICAgLy8gICBcXG5cXHRsZXQgTm90Rm91bmQgPSAoKSA9PiA8ZGl2Pk5vdCBGb3VuZCE8L2Rpdj5cbiAgICAgIC8vICAgXFxuXFx0PFJvdXRlcj5cXG5cXHQgIDxOb3RGb3VuZCBkZWZhdWx0Lz5cXG5cXHQgIHsvKiAuLi4gKi99XFxuXFx0PC9Sb3V0ZXI+YFxuICAgICAgLy8gKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gUm91dGVySW1wbDtcbn0oUmVhY3QuUHVyZUNvbXBvbmVudCk7XG5cblJvdXRlckltcGwuZGVmYXVsdFByb3BzID0ge1xuICBwcmltYXJ5OiB0cnVlXG59O1xudmFyIEZvY3VzQ29udGV4dCA9IGNyZWF0ZU5hbWVkQ29udGV4dChcIkZvY3VzXCIpO1xuXG52YXIgRm9jdXNIYW5kbGVyID0gZnVuY3Rpb24gRm9jdXNIYW5kbGVyKF9yZWYzKSB7XG4gIHZhciB1cmkgPSBfcmVmMy51cmksXG4gICAgICBsb2NhdGlvbiA9IF9yZWYzLmxvY2F0aW9uLFxuICAgICAgY29tcG9uZW50ID0gX3JlZjMuY29tcG9uZW50LFxuICAgICAgZG9tUHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZjMsIFtcInVyaVwiLCBcImxvY2F0aW9uXCIsIFwiY29tcG9uZW50XCJdKTtcblxuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChGb2N1c0NvbnRleHQuQ29uc3VtZXIsIG51bGwsIGZ1bmN0aW9uIChyZXF1ZXN0Rm9jdXMpIHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChGb2N1c0hhbmRsZXJJbXBsLCBfZXh0ZW5kcyh7fSwgZG9tUHJvcHMsIHtcbiAgICAgIGNvbXBvbmVudDogY29tcG9uZW50LFxuICAgICAgcmVxdWVzdEZvY3VzOiByZXF1ZXN0Rm9jdXMsXG4gICAgICB1cmk6IHVyaSxcbiAgICAgIGxvY2F0aW9uOiBsb2NhdGlvblxuICAgIH0pKTtcbiAgfSk7XG59OyAvLyBkb24ndCBmb2N1cyBvbiBpbml0aWFsIHJlbmRlclxuXG5cbnZhciBpbml0aWFsUmVuZGVyID0gdHJ1ZTtcbnZhciBmb2N1c0hhbmRsZXJDb3VudCA9IDA7XG5cbnZhciBGb2N1c0hhbmRsZXJJbXBsID0gZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQyKSB7XG4gIF9pbmhlcml0cyhGb2N1c0hhbmRsZXJJbXBsLCBfUmVhY3QkQ29tcG9uZW50Mik7XG5cbiAgZnVuY3Rpb24gRm9jdXNIYW5kbGVySW1wbCgpIHtcbiAgICB2YXIgX3RlbXAyLCBfdGhpczQsIF9yZXQyO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEZvY3VzSGFuZGxlckltcGwpO1xuXG4gICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbjIpLCBfa2V5MiA9IDA7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgIGFyZ3NbX2tleTJdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICB9XG5cbiAgICByZXR1cm4gX3JldDIgPSAoX3RlbXAyID0gKF90aGlzNCA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9SZWFjdCRDb21wb25lbnQyLmNhbGwuYXBwbHkoX1JlYWN0JENvbXBvbmVudDIsIFt0aGlzXS5jb25jYXQoYXJncykpKSwgX3RoaXM0KSwgX3RoaXM0LnN0YXRlID0ge30sIF90aGlzNC5yZXF1ZXN0Rm9jdXMgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgaWYgKCFfdGhpczQuc3RhdGUuc2hvdWxkRm9jdXMgJiYgbm9kZSkge1xuICAgICAgICBub2RlLmZvY3VzKCk7XG4gICAgICB9XG4gICAgfSwgX3RlbXAyKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oX3RoaXM0LCBfcmV0Mik7XG4gIH1cblxuICBGb2N1c0hhbmRsZXJJbXBsLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9IGZ1bmN0aW9uIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhuZXh0UHJvcHMsIHByZXZTdGF0ZSkge1xuICAgIHZhciBpbml0aWFsID0gcHJldlN0YXRlLnVyaSA9PSBudWxsO1xuXG4gICAgaWYgKGluaXRpYWwpIHtcbiAgICAgIHJldHVybiBfZXh0ZW5kcyh7XG4gICAgICAgIHNob3VsZEZvY3VzOiB0cnVlXG4gICAgICB9LCBuZXh0UHJvcHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgbXlVUklDaGFuZ2VkID0gbmV4dFByb3BzLnVyaSAhPT0gcHJldlN0YXRlLnVyaTtcbiAgICAgIHZhciBuYXZpZ2F0ZWRVcFRvTWUgPSBwcmV2U3RhdGUubG9jYXRpb24ucGF0aG5hbWUgIT09IG5leHRQcm9wcy5sb2NhdGlvbi5wYXRobmFtZSAmJiBuZXh0UHJvcHMubG9jYXRpb24ucGF0aG5hbWUgPT09IG5leHRQcm9wcy51cmk7XG4gICAgICByZXR1cm4gX2V4dGVuZHMoe1xuICAgICAgICBzaG91bGRGb2N1czogbXlVUklDaGFuZ2VkIHx8IG5hdmlnYXRlZFVwVG9NZVxuICAgICAgfSwgbmV4dFByb3BzKTtcbiAgICB9XG4gIH07XG5cbiAgRm9jdXNIYW5kbGVySW1wbC5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBmb2N1c0hhbmRsZXJDb3VudCsrO1xuICAgIHRoaXMuZm9jdXMoKTtcbiAgfTtcblxuICBGb2N1c0hhbmRsZXJJbXBsLnByb3RvdHlwZS5jb21wb25lbnRXaWxsVW5tb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIGZvY3VzSGFuZGxlckNvdW50LS07XG5cbiAgICBpZiAoZm9jdXNIYW5kbGVyQ291bnQgPT09IDApIHtcbiAgICAgIGluaXRpYWxSZW5kZXIgPSB0cnVlO1xuICAgIH1cbiAgfTtcblxuICBGb2N1c0hhbmRsZXJJbXBsLnByb3RvdHlwZS5jb21wb25lbnREaWRVcGRhdGUgPSBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUpIHtcbiAgICBpZiAocHJldlByb3BzLmxvY2F0aW9uICE9PSB0aGlzLnByb3BzLmxvY2F0aW9uICYmIHRoaXMuc3RhdGUuc2hvdWxkRm9jdXMpIHtcbiAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICB9XG4gIH07XG5cbiAgRm9jdXNIYW5kbGVySW1wbC5wcm90b3R5cGUuZm9jdXMgPSBmdW5jdGlvbiBmb2N1cygpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwidGVzdFwiKSB7XG4gICAgICAvLyBnZXR0aW5nIGNhbm5vdCByZWFkIHByb3BlcnR5IGZvY3VzIG9mIG51bGwgaW4gdGhlIHRlc3RzXG4gICAgICAvLyBhbmQgdGhhdCBiaXQgb2YgZ2xvYmFsIGBpbml0aWFsUmVuZGVyYCBzdGF0ZSBjYXVzZXMgcHJvYmxlbXNcbiAgICAgIC8vIHNob3VsZCBwcm9iYWJseSBmaWd1cmUgaXQgb3V0IVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciByZXF1ZXN0Rm9jdXMgPSB0aGlzLnByb3BzLnJlcXVlc3RGb2N1cztcblxuICAgIGlmIChyZXF1ZXN0Rm9jdXMpIHtcbiAgICAgIHJlcXVlc3RGb2N1cyh0aGlzLm5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaW5pdGlhbFJlbmRlcikge1xuICAgICAgICBpbml0aWFsUmVuZGVyID0gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMubm9kZSkge1xuICAgICAgICAvLyBSZWFjdCBwb2x5ZmlsbHMgW2F1dG9mb2N1c10gYW5kIGl0IGZpcmVzIGVhcmxpZXIgdGhhbiBjRE0sXG4gICAgICAgIC8vIHNvIHdlIHdlcmUgc3RlYWxpbmcgZm9jdXMgYXdheSwgdGhpcyBsaW5lIHByZXZlbnRzIHRoYXQuXG4gICAgICAgIGlmICghdGhpcy5ub2RlLmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpKSB7XG4gICAgICAgICAgdGhpcy5ub2RlLmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgRm9jdXNIYW5kbGVySW1wbC5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHZhciBfdGhpczUgPSB0aGlzO1xuXG4gICAgdmFyIF9wcm9wczIgPSB0aGlzLnByb3BzLFxuICAgICAgICBjaGlsZHJlbiA9IF9wcm9wczIuY2hpbGRyZW4sXG4gICAgICAgIHN0eWxlID0gX3Byb3BzMi5zdHlsZSxcbiAgICAgICAgcmVxdWVzdEZvY3VzID0gX3Byb3BzMi5yZXF1ZXN0Rm9jdXMsXG4gICAgICAgIF9wcm9wczIkY29tcG9uZW50ID0gX3Byb3BzMi5jb21wb25lbnQsXG4gICAgICAgIENvbXAgPSBfcHJvcHMyJGNvbXBvbmVudCA9PT0gdW5kZWZpbmVkID8gXCJkaXZcIiA6IF9wcm9wczIkY29tcG9uZW50LFxuICAgICAgICB1cmkgPSBfcHJvcHMyLnVyaSxcbiAgICAgICAgbG9jYXRpb24gPSBfcHJvcHMyLmxvY2F0aW9uLFxuICAgICAgICBkb21Qcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcHJvcHMyLCBbXCJjaGlsZHJlblwiLCBcInN0eWxlXCIsIFwicmVxdWVzdEZvY3VzXCIsIFwiY29tcG9uZW50XCIsIFwidXJpXCIsIFwibG9jYXRpb25cIl0pO1xuXG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ29tcCwgX2V4dGVuZHMoe1xuICAgICAgc3R5bGU6IF9leHRlbmRzKHtcbiAgICAgICAgb3V0bGluZTogXCJub25lXCJcbiAgICAgIH0sIHN0eWxlKSxcbiAgICAgIHRhYkluZGV4OiBcIi0xXCIsXG4gICAgICByZWY6IGZ1bmN0aW9uIHJlZihuKSB7XG4gICAgICAgIHJldHVybiBfdGhpczUubm9kZSA9IG47XG4gICAgICB9XG4gICAgfSwgZG9tUHJvcHMpLCBSZWFjdC5jcmVhdGVFbGVtZW50KEZvY3VzQ29udGV4dC5Qcm92aWRlciwge1xuICAgICAgdmFsdWU6IHRoaXMucmVxdWVzdEZvY3VzXG4gICAgfSwgdGhpcy5wcm9wcy5jaGlsZHJlbikpO1xuICB9O1xuXG4gIHJldHVybiBGb2N1c0hhbmRsZXJJbXBsO1xufShSZWFjdC5Db21wb25lbnQpO1xuXG5wb2x5ZmlsbChGb2N1c0hhbmRsZXJJbXBsKTtcblxudmFyIGsgPSBmdW5jdGlvbiBrKCkge307IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cblxudmFyIGZvcndhcmRSZWYgPSBSZWFjdC5mb3J3YXJkUmVmO1xuXG5pZiAodHlwZW9mIGZvcndhcmRSZWYgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgZm9yd2FyZFJlZiA9IGZ1bmN0aW9uIGZvcndhcmRSZWYoQykge1xuICAgIHJldHVybiBDO1xuICB9O1xufVxuXG52YXIgTGluayA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWY0LCByZWYpIHtcbiAgdmFyIGlubmVyUmVmID0gX3JlZjQuaW5uZXJSZWYsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmNCwgW1wiaW5uZXJSZWZcIl0pO1xuXG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KEJhc2VDb250ZXh0LkNvbnN1bWVyLCBudWxsLCBmdW5jdGlvbiAoX3JlZjUpIHtcbiAgICB2YXIgYmFzZXBhdGggPSBfcmVmNS5iYXNlcGF0aCxcbiAgICAgICAgYmFzZXVyaSA9IF9yZWY1LmJhc2V1cmk7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTG9jYXRpb24sIG51bGwsIGZ1bmN0aW9uIChfcmVmNikge1xuICAgICAgdmFyIGxvY2F0aW9uID0gX3JlZjYubG9jYXRpb24sXG4gICAgICAgICAgbmF2aWdhdGUgPSBfcmVmNi5uYXZpZ2F0ZTtcblxuICAgICAgdmFyIHRvID0gcHJvcHMudG8sXG4gICAgICAgICAgc3RhdGUgPSBwcm9wcy5zdGF0ZSxcbiAgICAgICAgICByZXBsYWNlID0gcHJvcHMucmVwbGFjZSxcbiAgICAgICAgICBfcHJvcHMkZ2V0UHJvcHMgPSBwcm9wcy5nZXRQcm9wcyxcbiAgICAgICAgICBnZXRQcm9wcyA9IF9wcm9wcyRnZXRQcm9wcyA9PT0gdW5kZWZpbmVkID8gayA6IF9wcm9wcyRnZXRQcm9wcyxcbiAgICAgICAgICBhbmNob3JQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhwcm9wcywgW1widG9cIiwgXCJzdGF0ZVwiLCBcInJlcGxhY2VcIiwgXCJnZXRQcm9wc1wiXSk7XG5cbiAgICAgIHZhciBocmVmID0gcmVzb2x2ZSh0bywgYmFzZXVyaSk7XG4gICAgICB2YXIgZW5jb2RlZEhyZWYgPSBlbmNvZGVVUkkoaHJlZik7XG4gICAgICB2YXIgaXNDdXJyZW50ID0gbG9jYXRpb24ucGF0aG5hbWUgPT09IGVuY29kZWRIcmVmO1xuICAgICAgdmFyIGlzUGFydGlhbGx5Q3VycmVudCA9IHN0YXJ0c1dpdGgobG9jYXRpb24ucGF0aG5hbWUsIGVuY29kZWRIcmVmKTtcbiAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiYVwiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHJlZjogcmVmIHx8IGlubmVyUmVmLFxuICAgICAgICBcImFyaWEtY3VycmVudFwiOiBpc0N1cnJlbnQgPyBcInBhZ2VcIiA6IHVuZGVmaW5lZFxuICAgICAgfSwgYW5jaG9yUHJvcHMsIGdldFByb3BzKHtcbiAgICAgICAgaXNDdXJyZW50OiBpc0N1cnJlbnQsXG4gICAgICAgIGlzUGFydGlhbGx5Q3VycmVudDogaXNQYXJ0aWFsbHlDdXJyZW50LFxuICAgICAgICBocmVmOiBocmVmLFxuICAgICAgICBsb2NhdGlvbjogbG9jYXRpb25cbiAgICAgIH0pLCB7XG4gICAgICAgIGhyZWY6IGhyZWYsXG4gICAgICAgIG9uQ2xpY2s6IGZ1bmN0aW9uIG9uQ2xpY2soZXZlbnQpIHtcbiAgICAgICAgICBpZiAoYW5jaG9yUHJvcHMub25DbGljaykgYW5jaG9yUHJvcHMub25DbGljayhldmVudCk7XG5cbiAgICAgICAgICBpZiAoc2hvdWxkTmF2aWdhdGUoZXZlbnQpKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdmFyIHNob3VsZFJlcGxhY2UgPSByZXBsYWNlO1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHJlcGxhY2UgIT09IFwiYm9vbGVhblwiICYmIGlzQ3VycmVudCkge1xuICAgICAgICAgICAgICB2YXIgX2xvY2F0aW9uJHN0YXRlID0gX2V4dGVuZHMoe30sIGxvY2F0aW9uLnN0YXRlKSxcbiAgICAgICAgICAgICAgICAgIGtleSA9IF9sb2NhdGlvbiRzdGF0ZS5rZXksXG4gICAgICAgICAgICAgICAgICByZXN0U3RhdGUgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX2xvY2F0aW9uJHN0YXRlLCBbXCJrZXlcIl0pO1xuXG4gICAgICAgICAgICAgIHNob3VsZFJlcGxhY2UgPSBzaGFsbG93Q29tcGFyZShfZXh0ZW5kcyh7fSwgc3RhdGUpLCByZXN0U3RhdGUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBuYXZpZ2F0ZShocmVmLCB7XG4gICAgICAgICAgICAgIHN0YXRlOiBzdGF0ZSxcbiAgICAgICAgICAgICAgcmVwbGFjZTogc2hvdWxkUmVwbGFjZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG5MaW5rLmRpc3BsYXlOYW1lID0gXCJMaW5rXCI7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB2b2lkIDAgOiB2b2lkIDA7IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIFJlZGlyZWN0UmVxdWVzdCh1cmkpIHtcbiAgdGhpcy51cmkgPSB1cmk7XG59XG5cbnZhciBpc1JlZGlyZWN0ID0gZnVuY3Rpb24gaXNSZWRpcmVjdChvKSB7XG4gIHJldHVybiBvIGluc3RhbmNlb2YgUmVkaXJlY3RSZXF1ZXN0O1xufTtcblxudmFyIHJlZGlyZWN0VG8gPSBmdW5jdGlvbiByZWRpcmVjdFRvKHRvKSB7XG4gIHRocm93IG5ldyBSZWRpcmVjdFJlcXVlc3QodG8pO1xufTtcblxudmFyIFJlZGlyZWN0SW1wbCA9IGZ1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50Mykge1xuICBfaW5oZXJpdHMoUmVkaXJlY3RJbXBsLCBfUmVhY3QkQ29tcG9uZW50Myk7XG5cbiAgZnVuY3Rpb24gUmVkaXJlY3RJbXBsKCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBSZWRpcmVjdEltcGwpO1xuXG4gICAgcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9SZWFjdCRDb21wb25lbnQzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xuICB9IC8vIFN1cHBvcnQgUmVhY3QgPCAxNiB3aXRoIHRoaXMgaG9va1xuXG5cbiAgUmVkaXJlY3RJbXBsLnByb3RvdHlwZS5jb21wb25lbnREaWRNb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHZhciBfcHJvcHMzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgbmF2aWdhdGUgPSBfcHJvcHMzLm5hdmlnYXRlLFxuICAgICAgICB0byA9IF9wcm9wczMudG8sXG4gICAgICAgIGZyb20gPSBfcHJvcHMzLmZyb20sXG4gICAgICAgIF9wcm9wczMkcmVwbGFjZSA9IF9wcm9wczMucmVwbGFjZSxcbiAgICAgICAgcmVwbGFjZSA9IF9wcm9wczMkcmVwbGFjZSA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IF9wcm9wczMkcmVwbGFjZSxcbiAgICAgICAgc3RhdGUgPSBfcHJvcHMzLnN0YXRlLFxuICAgICAgICBub1Rocm93ID0gX3Byb3BzMy5ub1Rocm93LFxuICAgICAgICBiYXNldXJpID0gX3Byb3BzMy5iYXNldXJpLFxuICAgICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcHJvcHMzLCBbXCJuYXZpZ2F0ZVwiLCBcInRvXCIsIFwiZnJvbVwiLCBcInJlcGxhY2VcIiwgXCJzdGF0ZVwiLCBcIm5vVGhyb3dcIiwgXCJiYXNldXJpXCJdKTtcblxuICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHJlc29sdmVkVG8gPSByZXNvbHZlKHRvLCBiYXNldXJpKTtcbiAgICAgIG5hdmlnYXRlKGluc2VydFBhcmFtcyhyZXNvbHZlZFRvLCBwcm9wcyksIHtcbiAgICAgICAgcmVwbGFjZTogcmVwbGFjZSxcbiAgICAgICAgc3RhdGU6IHN0YXRlXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBSZWRpcmVjdEltcGwucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICB2YXIgX3Byb3BzNCA9IHRoaXMucHJvcHMsXG4gICAgICAgIG5hdmlnYXRlID0gX3Byb3BzNC5uYXZpZ2F0ZSxcbiAgICAgICAgdG8gPSBfcHJvcHM0LnRvLFxuICAgICAgICBmcm9tID0gX3Byb3BzNC5mcm9tLFxuICAgICAgICByZXBsYWNlID0gX3Byb3BzNC5yZXBsYWNlLFxuICAgICAgICBzdGF0ZSA9IF9wcm9wczQuc3RhdGUsXG4gICAgICAgIG5vVGhyb3cgPSBfcHJvcHM0Lm5vVGhyb3csXG4gICAgICAgIGJhc2V1cmkgPSBfcHJvcHM0LmJhc2V1cmksXG4gICAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9wcm9wczQsIFtcIm5hdmlnYXRlXCIsIFwidG9cIiwgXCJmcm9tXCIsIFwicmVwbGFjZVwiLCBcInN0YXRlXCIsIFwibm9UaHJvd1wiLCBcImJhc2V1cmlcIl0pO1xuXG4gICAgdmFyIHJlc29sdmVkVG8gPSByZXNvbHZlKHRvLCBiYXNldXJpKTtcbiAgICBpZiAoIW5vVGhyb3cpIHJlZGlyZWN0VG8oaW5zZXJ0UGFyYW1zKHJlc29sdmVkVG8sIHByb3BzKSk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG5cbiAgcmV0dXJuIFJlZGlyZWN0SW1wbDtcbn0oUmVhY3QuQ29tcG9uZW50KTtcblxudmFyIFJlZGlyZWN0ID0gZnVuY3Rpb24gUmVkaXJlY3QocHJvcHMpIHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQmFzZUNvbnRleHQuQ29uc3VtZXIsIG51bGwsIGZ1bmN0aW9uIChfcmVmNykge1xuICAgIHZhciBiYXNldXJpID0gX3JlZjcuYmFzZXVyaTtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChMb2NhdGlvbiwgbnVsbCwgZnVuY3Rpb24gKGxvY2F0aW9uQ29udGV4dCkge1xuICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVkaXJlY3RJbXBsLCBfZXh0ZW5kcyh7fSwgbG9jYXRpb25Db250ZXh0LCB7XG4gICAgICAgIGJhc2V1cmk6IGJhc2V1cmlcbiAgICAgIH0sIHByb3BzKSk7XG4gICAgfSk7XG4gIH0pO1xufTtcblxucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gdm9pZCAwIDogdm9pZCAwOyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG52YXIgTWF0Y2ggPSBmdW5jdGlvbiBNYXRjaChfcmVmOCkge1xuICB2YXIgcGF0aCA9IF9yZWY4LnBhdGgsXG4gICAgICBjaGlsZHJlbiA9IF9yZWY4LmNoaWxkcmVuO1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChCYXNlQ29udGV4dC5Db25zdW1lciwgbnVsbCwgZnVuY3Rpb24gKF9yZWY5KSB7XG4gICAgdmFyIGJhc2V1cmkgPSBfcmVmOS5iYXNldXJpO1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KExvY2F0aW9uLCBudWxsLCBmdW5jdGlvbiAoX3JlZjEwKSB7XG4gICAgICB2YXIgbmF2aWdhdGUgPSBfcmVmMTAubmF2aWdhdGUsXG4gICAgICAgICAgbG9jYXRpb24gPSBfcmVmMTAubG9jYXRpb247XG4gICAgICB2YXIgcmVzb2x2ZWRQYXRoID0gcmVzb2x2ZShwYXRoLCBiYXNldXJpKTtcbiAgICAgIHZhciByZXN1bHQgPSBtYXRjaChyZXNvbHZlZFBhdGgsIGxvY2F0aW9uLnBhdGhuYW1lKTtcbiAgICAgIHJldHVybiBjaGlsZHJlbih7XG4gICAgICAgIG5hdmlnYXRlOiBuYXZpZ2F0ZSxcbiAgICAgICAgbG9jYXRpb246IGxvY2F0aW9uLFxuICAgICAgICBtYXRjaDogcmVzdWx0ID8gX2V4dGVuZHMoe30sIHJlc3VsdC5wYXJhbXMsIHtcbiAgICAgICAgICB1cmk6IHJlc3VsdC51cmksXG4gICAgICAgICAgcGF0aDogcGF0aFxuICAgICAgICB9KSA6IG51bGxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn07IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBIb29rc1xuXG5cbnZhciB1c2VMb2NhdGlvbiA9IGZ1bmN0aW9uIHVzZUxvY2F0aW9uKCkge1xuICB2YXIgY29udGV4dCA9IHVzZUNvbnRleHQoTG9jYXRpb25Db250ZXh0KTtcblxuICBpZiAoIWNvbnRleHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1c2VMb2NhdGlvbiBob29rIHdhcyB1c2VkIGJ1dCBhIExvY2F0aW9uQ29udGV4dC5Qcm92aWRlciB3YXMgbm90IGZvdW5kIGluIHRoZSBwYXJlbnQgdHJlZS4gTWFrZSBzdXJlIHRoaXMgaXMgdXNlZCBpbiBhIGNvbXBvbmVudCB0aGF0IGlzIGEgY2hpbGQgb2YgUm91dGVyXCIpO1xuICB9XG5cbiAgcmV0dXJuIGNvbnRleHQubG9jYXRpb247XG59O1xuXG52YXIgdXNlTmF2aWdhdGUgPSBmdW5jdGlvbiB1c2VOYXZpZ2F0ZSgpIHtcbiAgdmFyIGNvbnRleHQgPSB1c2VDb250ZXh0KEJhc2VDb250ZXh0KTtcblxuICBpZiAoIWNvbnRleHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1c2VOYXZpZ2F0ZSBob29rIHdhcyB1c2VkIGJ1dCBhIEJhc2VDb250ZXh0LlByb3ZpZGVyIHdhcyBub3QgZm91bmQgaW4gdGhlIHBhcmVudCB0cmVlLiBNYWtlIHN1cmUgdGhpcyBpcyB1c2VkIGluIGEgY29tcG9uZW50IHRoYXQgaXMgYSBjaGlsZCBvZiBSb3V0ZXJcIik7XG4gIH1cblxuICByZXR1cm4gY29udGV4dC5uYXZpZ2F0ZTtcbn07XG5cbnZhciB1c2VQYXJhbXMgPSBmdW5jdGlvbiB1c2VQYXJhbXMoKSB7XG4gIHZhciBjb250ZXh0ID0gdXNlQ29udGV4dChCYXNlQ29udGV4dCk7XG5cbiAgaWYgKCFjb250ZXh0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwidXNlUGFyYW1zIGhvb2sgd2FzIHVzZWQgYnV0IGEgTG9jYXRpb25Db250ZXh0LlByb3ZpZGVyIHdhcyBub3QgZm91bmQgaW4gdGhlIHBhcmVudCB0cmVlLiBNYWtlIHN1cmUgdGhpcyBpcyB1c2VkIGluIGEgY29tcG9uZW50IHRoYXQgaXMgYSBjaGlsZCBvZiBSb3V0ZXJcIik7XG4gIH1cblxuICB2YXIgbG9jYXRpb24gPSB1c2VMb2NhdGlvbigpO1xuICB2YXIgcmVzdWx0cyA9IG1hdGNoKGNvbnRleHQuYmFzZXBhdGgsIGxvY2F0aW9uLnBhdGhuYW1lKTtcbiAgcmV0dXJuIHJlc3VsdHMgPyByZXN1bHRzLnBhcmFtcyA6IG51bGw7XG59O1xuXG52YXIgdXNlTWF0Y2ggPSBmdW5jdGlvbiB1c2VNYXRjaChwYXRoKSB7XG4gIGlmICghcGF0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcInVzZU1hdGNoKHBhdGg6IHN0cmluZykgcmVxdWlyZXMgYW4gYXJndW1lbnQgb2YgYSBzdHJpbmcgdG8gbWF0Y2ggYWdhaW5zdFwiKTtcbiAgfVxuXG4gIHZhciBjb250ZXh0ID0gdXNlQ29udGV4dChCYXNlQ29udGV4dCk7XG5cbiAgaWYgKCFjb250ZXh0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwidXNlTWF0Y2ggaG9vayB3YXMgdXNlZCBidXQgYSBMb2NhdGlvbkNvbnRleHQuUHJvdmlkZXIgd2FzIG5vdCBmb3VuZCBpbiB0aGUgcGFyZW50IHRyZWUuIE1ha2Ugc3VyZSB0aGlzIGlzIHVzZWQgaW4gYSBjb21wb25lbnQgdGhhdCBpcyBhIGNoaWxkIG9mIFJvdXRlclwiKTtcbiAgfVxuXG4gIHZhciBsb2NhdGlvbiA9IHVzZUxvY2F0aW9uKCk7XG4gIHZhciByZXNvbHZlZFBhdGggPSByZXNvbHZlKHBhdGgsIGNvbnRleHQuYmFzZXVyaSk7XG4gIHZhciByZXN1bHQgPSBtYXRjaChyZXNvbHZlZFBhdGgsIGxvY2F0aW9uLnBhdGhuYW1lKTtcbiAgcmV0dXJuIHJlc3VsdCA/IF9leHRlbmRzKHt9LCByZXN1bHQucGFyYW1zLCB7XG4gICAgdXJpOiByZXN1bHQudXJpLFxuICAgIHBhdGg6IHBhdGhcbiAgfSkgOiBudWxsO1xufTsgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIEp1bmtcblxuXG52YXIgc3RyaXBTbGFzaGVzID0gZnVuY3Rpb24gc3RyaXBTbGFzaGVzKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoLyheXFwvK3xcXC8rJCkvZywgXCJcIik7XG59O1xuXG52YXIgY3JlYXRlUm91dGUgPSBmdW5jdGlvbiBjcmVhdGVSb3V0ZShiYXNlcGF0aCkge1xuICByZXR1cm4gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChlbGVtZW50LnR5cGUgPT09IFJlYWN0LkZyYWdtZW50ICYmIGVsZW1lbnQucHJvcHMuY2hpbGRyZW4pIHtcbiAgICAgIHJldHVybiBSZWFjdC5DaGlsZHJlbi5tYXAoZWxlbWVudC5wcm9wcy5jaGlsZHJlbiwgY3JlYXRlUm91dGUoYmFzZXBhdGgpKTtcbiAgICB9XG5cbiAgICAhKGVsZW1lbnQucHJvcHMucGF0aCB8fCBlbGVtZW50LnByb3BzLmRlZmF1bHQgfHwgZWxlbWVudC50eXBlID09PSBSZWRpcmVjdCkgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsIFwiPFJvdXRlcj46IENoaWxkcmVuIG9mIDxSb3V0ZXI+IG11c3QgaGF2ZSBhIGBwYXRoYCBvciBgZGVmYXVsdGAgcHJvcCwgb3IgYmUgYSBgPFJlZGlyZWN0PmAuIE5vbmUgZm91bmQgb24gZWxlbWVudCB0eXBlIGBcIiArIGVsZW1lbnQudHlwZSArIFwiYFwiKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gICAgISEoZWxlbWVudC50eXBlID09PSBSZWRpcmVjdCAmJiAoIWVsZW1lbnQucHJvcHMuZnJvbSB8fCAhZWxlbWVudC5wcm9wcy50bykpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCBcIjxSZWRpcmVjdCBmcm9tPVxcXCJcIiArIGVsZW1lbnQucHJvcHMuZnJvbSArIFwiXFxcIiB0bz1cXFwiXCIgKyBlbGVtZW50LnByb3BzLnRvICsgXCJcXFwiLz4gcmVxdWlyZXMgYm90aCBcXFwiZnJvbVxcXCIgYW5kIFxcXCJ0b1xcXCIgcHJvcHMgd2hlbiBpbnNpZGUgYSA8Um91dGVyPi5cIikgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuICAgICEhKGVsZW1lbnQudHlwZSA9PT0gUmVkaXJlY3QgJiYgIXZhbGlkYXRlUmVkaXJlY3QoZWxlbWVudC5wcm9wcy5mcm9tLCBlbGVtZW50LnByb3BzLnRvKSkgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsIFwiPFJlZGlyZWN0IGZyb209XFxcIlwiICsgZWxlbWVudC5wcm9wcy5mcm9tICsgXCIgdG89XFxcIlwiICsgZWxlbWVudC5wcm9wcy50byArIFwiXFxcIi8+IGhhcyBtaXNtYXRjaGVkIGR5bmFtaWMgc2VnbWVudHMsIGVuc3VyZSBib3RoIHBhdGhzIGhhdmUgdGhlIGV4YWN0IHNhbWUgZHluYW1pYyBzZWdtZW50cy5cIikgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuXG4gICAgaWYgKGVsZW1lbnQucHJvcHMuZGVmYXVsdCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWU6IGVsZW1lbnQsXG4gICAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIGVsZW1lbnRQYXRoID0gZWxlbWVudC50eXBlID09PSBSZWRpcmVjdCA/IGVsZW1lbnQucHJvcHMuZnJvbSA6IGVsZW1lbnQucHJvcHMucGF0aDtcbiAgICB2YXIgcGF0aCA9IGVsZW1lbnRQYXRoID09PSBcIi9cIiA/IGJhc2VwYXRoIDogc3RyaXBTbGFzaGVzKGJhc2VwYXRoKSArIFwiL1wiICsgc3RyaXBTbGFzaGVzKGVsZW1lbnRQYXRoKTtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IGVsZW1lbnQsXG4gICAgICBkZWZhdWx0OiBlbGVtZW50LnByb3BzLmRlZmF1bHQsXG4gICAgICBwYXRoOiBlbGVtZW50LnByb3BzLmNoaWxkcmVuID8gc3RyaXBTbGFzaGVzKHBhdGgpICsgXCIvKlwiIDogcGF0aFxuICAgIH07XG4gIH07XG59O1xuXG52YXIgc2hvdWxkTmF2aWdhdGUgPSBmdW5jdGlvbiBzaG91bGROYXZpZ2F0ZShldmVudCkge1xuICByZXR1cm4gIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgJiYgZXZlbnQuYnV0dG9uID09PSAwICYmICEoZXZlbnQubWV0YUtleSB8fCBldmVudC5hbHRLZXkgfHwgZXZlbnQuY3RybEtleSB8fCBldmVudC5zaGlmdEtleSk7XG59OyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuXG5leHBvcnQgeyAgTGluaywgTG9jYXRpb24sIExvY2F0aW9uUHJvdmlkZXIsIE1hdGNoLCBSZWRpcmVjdCwgUm91dGVyLCBTZXJ2ZXJMb2NhdGlvbiwgY3JlYXRlSGlzdG9yeSwgY3JlYXRlTWVtb3J5U291cmNlLCBpc1JlZGlyZWN0LCBuYXZpZ2F0ZSwgcmVkaXJlY3RUbywgZ2xvYmFsSGlzdG9yeSwgbWF0Y2ggYXMgbWF0Y2hQYXRoLCB1c2VMb2NhdGlvbiwgdXNlTmF2aWdhdGUsIHVzZVBhcmFtcywgdXNlTWF0Y2ggLCBCYXNlQ29udGV4dCB9OyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///9499\n')},1143:function(module){"use strict";eval("/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar invariant = function(condition, format, a, b, c, d, e, f) {\n if (false) {}\n\n if (!condition) {\n var error;\n if (format === undefined) {\n error = new Error(\n 'Minified exception occurred; use the non-minified dev environment ' +\n 'for the full error message and additional helpful warnings.'\n );\n } else {\n var args = [a, b, c, d, e, f];\n var argIndex = 0;\n error = new Error(\n format.replace(/%s/g, function() { return args[argIndex++]; })\n );\n error.name = 'Invariant Violation';\n }\n\n error.framesToPop = 1; // we don't care about invariant's own frame\n throw error;\n }\n};\n\nmodule.exports = invariant;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9pbnZhcmlhbnQvYnJvd3Nlci5qcz80MGI2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLE1BQU0sS0FBcUMsRUFBRSxFQUkxQzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQztBQUNyQztBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQyx5QkFBeUIsRUFBRTtBQUNyRTtBQUNBO0FBQ0E7O0FBRUEsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIxMTQzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogVXNlIGludmFyaWFudCgpIHRvIGFzc2VydCBzdGF0ZSB3aGljaCB5b3VyIHByb2dyYW0gYXNzdW1lcyB0byBiZSB0cnVlLlxuICpcbiAqIFByb3ZpZGUgc3ByaW50Zi1zdHlsZSBmb3JtYXQgKG9ubHkgJXMgaXMgc3VwcG9ydGVkKSBhbmQgYXJndW1lbnRzXG4gKiB0byBwcm92aWRlIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgYnJva2UgYW5kIHdoYXQgeW91IHdlcmVcbiAqIGV4cGVjdGluZy5cbiAqXG4gKiBUaGUgaW52YXJpYW50IG1lc3NhZ2Ugd2lsbCBiZSBzdHJpcHBlZCBpbiBwcm9kdWN0aW9uLCBidXQgdGhlIGludmFyaWFudFxuICogd2lsbCByZW1haW4gdG8gZW5zdXJlIGxvZ2ljIGRvZXMgbm90IGRpZmZlciBpbiBwcm9kdWN0aW9uLlxuICovXG5cbnZhciBpbnZhcmlhbnQgPSBmdW5jdGlvbihjb25kaXRpb24sIGZvcm1hdCwgYSwgYiwgYywgZCwgZSwgZikge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmIChmb3JtYXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhcmlhbnQgcmVxdWlyZXMgYW4gZXJyb3IgbWVzc2FnZSBhcmd1bWVudCcpO1xuICAgIH1cbiAgfVxuXG4gIGlmICghY29uZGl0aW9uKSB7XG4gICAgdmFyIGVycm9yO1xuICAgIGlmIChmb3JtYXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICAgICdNaW5pZmllZCBleGNlcHRpb24gb2NjdXJyZWQ7IHVzZSB0aGUgbm9uLW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCAnICtcbiAgICAgICAgJ2ZvciB0aGUgZnVsbCBlcnJvciBtZXNzYWdlIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuJ1xuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGFyZ3MgPSBbYSwgYiwgYywgZCwgZSwgZl07XG4gICAgICB2YXIgYXJnSW5kZXggPSAwO1xuICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICAgIGZvcm1hdC5yZXBsYWNlKC8lcy9nLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3NbYXJnSW5kZXgrK107IH0pXG4gICAgICApO1xuICAgICAgZXJyb3IubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcbiAgICB9XG5cbiAgICBlcnJvci5mcmFtZXNUb1BvcCA9IDE7IC8vIHdlIGRvbid0IGNhcmUgYWJvdXQgaW52YXJpYW50J3Mgb3duIGZyYW1lXG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gaW52YXJpYW50O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1143\n")}},function(I){"use strict";I.O(0,[532,774],(function(){return g=2871,I(I.s=g);var g}));I.O()}]); \ No newline at end of file diff --git a/main/cejst/index.html b/main/cejst/index.html index 863c4ca1..5907820a 100644 --- a/main/cejst/index.html +++ b/main/cejst/index.html @@ -1 +1 @@ -
\ No newline at end of file +
\ No newline at end of file diff --git a/main/chunk-map.json b/main/chunk-map.json index 74d424bf..ba04c8fb 100644 --- a/main/chunk-map.json +++ b/main/chunk-map.json @@ -1 +1 @@ -{"polyfill":["/polyfill-8caaca0a42de0d6c5634.js"],"app":["/app-385a1458e63b69783f96.js"],"component---src-pages-404-tsx":["/component---src-pages-404-tsx-c3f620370544ae9a30d7.js"],"component---src-pages-cejst-tsx":["/component---src-pages-cejst-tsx-7759b5df9211fee71e5a.js"],"component---src-pages-contact-tsx":["/component---src-pages-contact-tsx-fe9965b24f0b7fc7ea56.js"],"component---src-pages-index-tsx":["/component---src-pages-index-tsx-0c8ca3be98fe355d7492.js"],"component---src-pages-methodology-tsx":["/component---src-pages-methodology-tsx-221d358a1d4d241bfbb0.js"],"component---src-pages-timeline-tsx":["/component---src-pages-timeline-tsx-c4b25d3fa997a646ffb9.js"]} \ No newline at end of file +{"polyfill":["/polyfill-8caaca0a42de0d6c5634.js"],"app":["/app-795f430a5c7d6b3bd2ac.js"],"component---src-pages-404-tsx":["/component---src-pages-404-tsx-c3f620370544ae9a30d7.js"],"component---src-pages-cejst-tsx":["/component---src-pages-cejst-tsx-9a5d0d7c1c3d9bda33e2.js"],"component---src-pages-contact-tsx":["/component---src-pages-contact-tsx-fe9965b24f0b7fc7ea56.js"],"component---src-pages-index-tsx":["/component---src-pages-index-tsx-0c8ca3be98fe355d7492.js"],"component---src-pages-methodology-tsx":["/component---src-pages-methodology-tsx-221d358a1d4d241bfbb0.js"],"component---src-pages-timeline-tsx":["/component---src-pages-timeline-tsx-c4b25d3fa997a646ffb9.js"]} \ No newline at end of file diff --git a/main/component---src-pages-cejst-tsx-7759b5df9211fee71e5a.js b/main/component---src-pages-cejst-tsx-7759b5df9211fee71e5a.js deleted file mode 100644 index c80bd6f6..00000000 --- a/main/component---src-pages-cejst-tsx-7759b5df9211fee71e5a.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunkjustice40_tool=self.webpackChunkjustice40_tool||[]).push([[281],{3873:function(module){eval("/**\n * chroma.js - JavaScript library for color conversions\n *\n * Copyright (c) 2011-2019, Gregor Aisch\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n *\n * 3. The name Gregor Aisch may not be used to endorse or promote products\n * derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL GREGOR AISCH OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY\n * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\n * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * -------------------------------------------------------\n *\n * chroma.js includes colors from colorbrewer2.org, which are released under\n * the following license:\n *\n * Copyright (c) 2002 Cynthia Brewer, Mark Harrower,\n * and The Pennsylvania State University.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\n * either express or implied. See the License for the specific\n * language governing permissions and limitations under the License.\n *\n * ------------------------------------------------------\n *\n * Named colors are taken from X11 Color Names.\n * http://www.w3.org/TR/css3-color/#svg-color\n *\n * @preserve\n */\n(function (global, factory) {\n true ? module.exports = factory() : 0;\n})(this, function () {\n 'use strict';\n\n var limit = function limit(x, min, max) {\n if (min === void 0) min = 0;\n if (max === void 0) max = 1;\n return x < min ? min : x > max ? max : x;\n };\n\n var clip_rgb = function clip_rgb(rgb) {\n rgb._clipped = false;\n rgb._unclipped = rgb.slice(0);\n\n for (var i = 0; i <= 3; i++) {\n if (i < 3) {\n if (rgb[i] < 0 || rgb[i] > 255) {\n rgb._clipped = true;\n }\n\n rgb[i] = limit(rgb[i], 0, 255);\n } else if (i === 3) {\n rgb[i] = limit(rgb[i], 0, 1);\n }\n }\n\n return rgb;\n }; // ported from jQuery's $.type\n\n\n var classToType = {};\n\n for (var i = 0, list = ['Boolean', 'Number', 'String', 'Function', 'Array', 'Date', 'RegExp', 'Undefined', 'Null']; i < list.length; i += 1) {\n var name = list[i];\n classToType[\"[object \" + name + \"]\"] = name.toLowerCase();\n }\n\n var type = function type(obj) {\n return classToType[Object.prototype.toString.call(obj)] || \"object\";\n };\n\n var unpack = function unpack(args, keyOrder) {\n if (keyOrder === void 0) keyOrder = null; // if called with more than 3 arguments, we return the arguments\n\n if (args.length >= 3) {\n return Array.prototype.slice.call(args);\n } // with less than 3 args we check if first arg is object\n // and use the keyOrder string to extract and sort properties\n\n\n if (type(args[0]) == 'object' && keyOrder) {\n return keyOrder.split('').filter(function (k) {\n return args[0][k] !== undefined;\n }).map(function (k) {\n return args[0][k];\n });\n } // otherwise we just return the first argument\n // (which we suppose is an array of args)\n\n\n return args[0];\n };\n\n var last = function last(args) {\n if (args.length < 2) {\n return null;\n }\n\n var l = args.length - 1;\n\n if (type(args[l]) == 'string') {\n return args[l].toLowerCase();\n }\n\n return null;\n };\n\n var PI = Math.PI;\n var utils = {\n clip_rgb: clip_rgb,\n limit: limit,\n type: type,\n unpack: unpack,\n last: last,\n PI: PI,\n TWOPI: PI * 2,\n PITHIRD: PI / 3,\n DEG2RAD: PI / 180,\n RAD2DEG: 180 / PI\n };\n var input = {\n format: {},\n autodetect: []\n };\n var last$1 = utils.last;\n var clip_rgb$1 = utils.clip_rgb;\n var type$1 = utils.type;\n\n var Color = function Color() {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n var me = this;\n\n if (type$1(args[0]) === 'object' && args[0].constructor && args[0].constructor === this.constructor) {\n // the argument is already a Color instance\n return args[0];\n } // last argument could be the mode\n\n\n var mode = last$1(args);\n var autodetect = false;\n\n if (!mode) {\n autodetect = true;\n\n if (!input.sorted) {\n input.autodetect = input.autodetect.sort(function (a, b) {\n return b.p - a.p;\n });\n input.sorted = true;\n } // auto-detect format\n\n\n for (var i = 0, list = input.autodetect; i < list.length; i += 1) {\n var chk = list[i];\n mode = chk.test.apply(chk, args);\n\n if (mode) {\n break;\n }\n }\n }\n\n if (input.format[mode]) {\n var rgb = input.format[mode].apply(null, autodetect ? args : args.slice(0, -1));\n me._rgb = clip_rgb$1(rgb);\n } else {\n throw new Error('unknown format: ' + args);\n } // add alpha channel\n\n\n if (me._rgb.length === 3) {\n me._rgb.push(1);\n }\n };\n\n Color.prototype.toString = function toString() {\n if (type$1(this.hex) == 'function') {\n return this.hex();\n }\n\n return \"[\" + this._rgb.join(',') + \"]\";\n };\n\n var Color_1 = Color;\n\n var chroma = function chroma() {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n return new (Function.prototype.bind.apply(chroma.Color, [null].concat(args)))();\n };\n\n chroma.Color = Color_1;\n chroma.version = '2.1.2';\n var chroma_1 = chroma;\n var unpack$1 = utils.unpack;\n var max = Math.max;\n\n var rgb2cmyk = function rgb2cmyk() {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n var ref = unpack$1(args, 'rgb');\n var r = ref[0];\n var g = ref[1];\n var b = ref[2];\n r = r / 255;\n g = g / 255;\n b = b / 255;\n var k = 1 - max(r, max(g, b));\n var f = k < 1 ? 1 / (1 - k) : 0;\n var c = (1 - r - k) * f;\n var m = (1 - g - k) * f;\n var y = (1 - b - k) * f;\n return [c, m, y, k];\n };\n\n var rgb2cmyk_1 = rgb2cmyk;\n var unpack$2 = utils.unpack;\n\n var cmyk2rgb = function cmyk2rgb() {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n args = unpack$2(args, 'cmyk');\n var c = args[0];\n var m = args[1];\n var y = args[2];\n var k = args[3];\n var alpha = args.length > 4 ? args[4] : 1;\n\n if (k === 1) {\n return [0, 0, 0, alpha];\n }\n\n return [c >= 1 ? 0 : 255 * (1 - c) * (1 - k), // r\n m >= 1 ? 0 : 255 * (1 - m) * (1 - k), // g\n y >= 1 ? 0 : 255 * (1 - y) * (1 - k), // b\n alpha];\n };\n\n var cmyk2rgb_1 = cmyk2rgb;\n var unpack$3 = utils.unpack;\n var type$2 = utils.type;\n\n Color_1.prototype.cmyk = function () {\n return rgb2cmyk_1(this._rgb);\n };\n\n chroma_1.cmyk = function () {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n return new (Function.prototype.bind.apply(Color_1, [null].concat(args, ['cmyk'])))();\n };\n\n input.format.cmyk = cmyk2rgb_1;\n input.autodetect.push({\n p: 2,\n test: function test() {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n args = unpack$3(args, 'cmyk');\n\n if (type$2(args) === 'array' && args.length === 4) {\n return 'cmyk';\n }\n }\n });\n var unpack$4 = utils.unpack;\n var last$2 = utils.last;\n\n var rnd = function rnd(a) {\n return Math.round(a * 100) / 100;\n };\n /*\n * supported arguments:\n * - hsl2css(h,s,l)\n * - hsl2css(h,s,l,a)\n * - hsl2css([h,s,l], mode)\n * - hsl2css([h,s,l,a], mode)\n * - hsl2css({h,s,l,a}, mode)\n */\n\n\n var hsl2css = function hsl2css() {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n var hsla = unpack$4(args, 'hsla');\n var mode = last$2(args) || 'lsa';\n hsla[0] = rnd(hsla[0] || 0);\n hsla[1] = rnd(hsla[1] * 100) + '%';\n hsla[2] = rnd(hsla[2] * 100) + '%';\n\n if (mode === 'hsla' || hsla.length > 3 && hsla[3] < 1) {\n hsla[3] = hsla.length > 3 ? hsla[3] : 1;\n mode = 'hsla';\n } else {\n hsla.length = 3;\n }\n\n return mode + \"(\" + hsla.join(',') + \")\";\n };\n\n var hsl2css_1 = hsl2css;\n var unpack$5 = utils.unpack;\n /*\n * supported arguments:\n * - rgb2hsl(r,g,b)\n * - rgb2hsl(r,g,b,a)\n * - rgb2hsl([r,g,b])\n * - rgb2hsl([r,g,b,a])\n * - rgb2hsl({r,g,b,a})\n */\n\n var rgb2hsl = function rgb2hsl() {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n args = unpack$5(args, 'rgba');\n var r = args[0];\n var g = args[1];\n var b = args[2];\n r /= 255;\n g /= 255;\n b /= 255;\n var min = Math.min(r, g, b);\n var max = Math.max(r, g, b);\n var l = (max + min) / 2;\n var s, h;\n\n if (max === min) {\n s = 0;\n h = Number.NaN;\n } else {\n s = l < 0.5 ? (max - min) / (max + min) : (max - min) / (2 - max - min);\n }\n\n if (r == max) {\n h = (g - b) / (max - min);\n } else if (g == max) {\n h = 2 + (b - r) / (max - min);\n } else if (b == max) {\n h = 4 + (r - g) / (max - min);\n }\n\n h *= 60;\n\n if (h < 0) {\n h += 360;\n }\n\n if (args.length > 3 && args[3] !== undefined) {\n return [h, s, l, args[3]];\n }\n\n return [h, s, l];\n };\n\n var rgb2hsl_1 = rgb2hsl;\n var unpack$6 = utils.unpack;\n var last$3 = utils.last;\n var round = Math.round;\n /*\n * supported arguments:\n * - rgb2css(r,g,b)\n * - rgb2css(r,g,b,a)\n * - rgb2css([r,g,b], mode)\n * - rgb2css([r,g,b,a], mode)\n * - rgb2css({r,g,b,a}, mode)\n */\n\n var rgb2css = function rgb2css() {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n var rgba = unpack$6(args, 'rgba');\n var mode = last$3(args) || 'rgb';\n\n if (mode.substr(0, 3) == 'hsl') {\n return hsl2css_1(rgb2hsl_1(rgba), mode);\n }\n\n rgba[0] = round(rgba[0]);\n rgba[1] = round(rgba[1]);\n rgba[2] = round(rgba[2]);\n\n if (mode === 'rgba' || rgba.length > 3 && rgba[3] < 1) {\n rgba[3] = rgba.length > 3 ? rgba[3] : 1;\n mode = 'rgba';\n }\n\n return mode + \"(\" + rgba.slice(0, mode === 'rgb' ? 3 : 4).join(',') + \")\";\n };\n\n var rgb2css_1 = rgb2css;\n var unpack$7 = utils.unpack;\n var round$1 = Math.round;\n\n var hsl2rgb = function hsl2rgb() {\n var assign;\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n args = unpack$7(args, 'hsl');\n var h = args[0];\n var s = args[1];\n var l = args[2];\n var r, g, b;\n\n if (s === 0) {\n r = g = b = l * 255;\n } else {\n var t3 = [0, 0, 0];\n var c = [0, 0, 0];\n var t2 = l < 0.5 ? l * (1 + s) : l + s - l * s;\n var t1 = 2 * l - t2;\n var h_ = h / 360;\n t3[0] = h_ + 1 / 3;\n t3[1] = h_;\n t3[2] = h_ - 1 / 3;\n\n for (var i = 0; i < 3; i++) {\n if (t3[i] < 0) {\n t3[i] += 1;\n }\n\n if (t3[i] > 1) {\n t3[i] -= 1;\n }\n\n if (6 * t3[i] < 1) {\n c[i] = t1 + (t2 - t1) * 6 * t3[i];\n } else if (2 * t3[i] < 1) {\n c[i] = t2;\n } else if (3 * t3[i] < 2) {\n c[i] = t1 + (t2 - t1) * (2 / 3 - t3[i]) * 6;\n } else {\n c[i] = t1;\n }\n }\n\n assign = [round$1(c[0] * 255), round$1(c[1] * 255), round$1(c[2] * 255)], r = assign[0], g = assign[1], b = assign[2];\n }\n\n if (args.length > 3) {\n // keep alpha channel\n return [r, g, b, args[3]];\n }\n\n return [r, g, b, 1];\n };\n\n var hsl2rgb_1 = hsl2rgb;\n var RE_RGB = /^rgb\\(\\s*(-?\\d+),\\s*(-?\\d+)\\s*,\\s*(-?\\d+)\\s*\\)$/;\n var RE_RGBA = /^rgba\\(\\s*(-?\\d+),\\s*(-?\\d+)\\s*,\\s*(-?\\d+)\\s*,\\s*([01]|[01]?\\.\\d+)\\)$/;\n var RE_RGB_PCT = /^rgb\\(\\s*(-?\\d+(?:\\.\\d+)?)%,\\s*(-?\\d+(?:\\.\\d+)?)%\\s*,\\s*(-?\\d+(?:\\.\\d+)?)%\\s*\\)$/;\n var RE_RGBA_PCT = /^rgba\\(\\s*(-?\\d+(?:\\.\\d+)?)%,\\s*(-?\\d+(?:\\.\\d+)?)%\\s*,\\s*(-?\\d+(?:\\.\\d+)?)%\\s*,\\s*([01]|[01]?\\.\\d+)\\)$/;\n var RE_HSL = /^hsl\\(\\s*(-?\\d+(?:\\.\\d+)?),\\s*(-?\\d+(?:\\.\\d+)?)%\\s*,\\s*(-?\\d+(?:\\.\\d+)?)%\\s*\\)$/;\n var RE_HSLA = /^hsla\\(\\s*(-?\\d+(?:\\.\\d+)?),\\s*(-?\\d+(?:\\.\\d+)?)%\\s*,\\s*(-?\\d+(?:\\.\\d+)?)%\\s*,\\s*([01]|[01]?\\.\\d+)\\)$/;\n var round$2 = Math.round;\n\n var css2rgb = function css2rgb(css) {\n css = css.toLowerCase().trim();\n var m;\n\n if (input.format.named) {\n try {\n return input.format.named(css);\n } catch (e) {// eslint-disable-next-line\n }\n } // rgb(250,20,0)\n\n\n if (m = css.match(RE_RGB)) {\n var rgb = m.slice(1, 4);\n\n for (var i = 0; i < 3; i++) {\n rgb[i] = +rgb[i];\n }\n\n rgb[3] = 1; // default alpha\n\n return rgb;\n } // rgba(250,20,0,0.4)\n\n\n if (m = css.match(RE_RGBA)) {\n var rgb$1 = m.slice(1, 5);\n\n for (var i$1 = 0; i$1 < 4; i$1++) {\n rgb$1[i$1] = +rgb$1[i$1];\n }\n\n return rgb$1;\n } // rgb(100%,0%,0%)\n\n\n if (m = css.match(RE_RGB_PCT)) {\n var rgb$2 = m.slice(1, 4);\n\n for (var i$2 = 0; i$2 < 3; i$2++) {\n rgb$2[i$2] = round$2(rgb$2[i$2] * 2.55);\n }\n\n rgb$2[3] = 1; // default alpha\n\n return rgb$2;\n } // rgba(100%,0%,0%,0.4)\n\n\n if (m = css.match(RE_RGBA_PCT)) {\n var rgb$3 = m.slice(1, 5);\n\n for (var i$3 = 0; i$3 < 3; i$3++) {\n rgb$3[i$3] = round$2(rgb$3[i$3] * 2.55);\n }\n\n rgb$3[3] = +rgb$3[3];\n return rgb$3;\n } // hsl(0,100%,50%)\n\n\n if (m = css.match(RE_HSL)) {\n var hsl = m.slice(1, 4);\n hsl[1] *= 0.01;\n hsl[2] *= 0.01;\n var rgb$4 = hsl2rgb_1(hsl);\n rgb$4[3] = 1;\n return rgb$4;\n } // hsla(0,100%,50%,0.5)\n\n\n if (m = css.match(RE_HSLA)) {\n var hsl$1 = m.slice(1, 4);\n hsl$1[1] *= 0.01;\n hsl$1[2] *= 0.01;\n var rgb$5 = hsl2rgb_1(hsl$1);\n rgb$5[3] = +m[4]; // default alpha = 1\n\n return rgb$5;\n }\n };\n\n css2rgb.test = function (s) {\n return RE_RGB.test(s) || RE_RGBA.test(s) || RE_RGB_PCT.test(s) || RE_RGBA_PCT.test(s) || RE_HSL.test(s) || RE_HSLA.test(s);\n };\n\n var css2rgb_1 = css2rgb;\n var type$3 = utils.type;\n\n Color_1.prototype.css = function (mode) {\n return rgb2css_1(this._rgb, mode);\n };\n\n chroma_1.css = function () {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n return new (Function.prototype.bind.apply(Color_1, [null].concat(args, ['css'])))();\n };\n\n input.format.css = css2rgb_1;\n input.autodetect.push({\n p: 5,\n test: function test(h) {\n var rest = [],\n len = arguments.length - 1;\n\n while (len-- > 0) {\n rest[len] = arguments[len + 1];\n }\n\n if (!rest.length && type$3(h) === 'string' && css2rgb_1.test(h)) {\n return 'css';\n }\n }\n });\n var unpack$8 = utils.unpack;\n\n input.format.gl = function () {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n var rgb = unpack$8(args, 'rgba');\n rgb[0] *= 255;\n rgb[1] *= 255;\n rgb[2] *= 255;\n return rgb;\n };\n\n chroma_1.gl = function () {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n return new (Function.prototype.bind.apply(Color_1, [null].concat(args, ['gl'])))();\n };\n\n Color_1.prototype.gl = function () {\n var rgb = this._rgb;\n return [rgb[0] / 255, rgb[1] / 255, rgb[2] / 255, rgb[3]];\n };\n\n var unpack$9 = utils.unpack;\n\n var rgb2hcg = function rgb2hcg() {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n var ref = unpack$9(args, 'rgb');\n var r = ref[0];\n var g = ref[1];\n var b = ref[2];\n var min = Math.min(r, g, b);\n var max = Math.max(r, g, b);\n var delta = max - min;\n var c = delta * 100 / 255;\n\n var _g = min / (255 - delta) * 100;\n\n var h;\n\n if (delta === 0) {\n h = Number.NaN;\n } else {\n if (r === max) {\n h = (g - b) / delta;\n }\n\n if (g === max) {\n h = 2 + (b - r) / delta;\n }\n\n if (b === max) {\n h = 4 + (r - g) / delta;\n }\n\n h *= 60;\n\n if (h < 0) {\n h += 360;\n }\n }\n\n return [h, c, _g];\n };\n\n var rgb2hcg_1 = rgb2hcg;\n var unpack$a = utils.unpack;\n var floor = Math.floor;\n /*\n * this is basically just HSV with some minor tweaks\n *\n * hue.. [0..360]\n * chroma .. [0..1]\n * grayness .. [0..1]\n */\n\n var hcg2rgb = function hcg2rgb() {\n var assign, assign$1, assign$2, assign$3, assign$4, assign$5;\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n args = unpack$a(args, 'hcg');\n var h = args[0];\n var c = args[1];\n var _g = args[2];\n var r, g, b;\n _g = _g * 255;\n\n var _c = c * 255;\n\n if (c === 0) {\n r = g = b = _g;\n } else {\n if (h === 360) {\n h = 0;\n }\n\n if (h > 360) {\n h -= 360;\n }\n\n if (h < 0) {\n h += 360;\n }\n\n h /= 60;\n var i = floor(h);\n var f = h - i;\n var p = _g * (1 - c);\n var q = p + _c * (1 - f);\n var t = p + _c * f;\n var v = p + _c;\n\n switch (i) {\n case 0:\n assign = [v, t, p], r = assign[0], g = assign[1], b = assign[2];\n break;\n\n case 1:\n assign$1 = [q, v, p], r = assign$1[0], g = assign$1[1], b = assign$1[2];\n break;\n\n case 2:\n assign$2 = [p, v, t], r = assign$2[0], g = assign$2[1], b = assign$2[2];\n break;\n\n case 3:\n assign$3 = [p, q, v], r = assign$3[0], g = assign$3[1], b = assign$3[2];\n break;\n\n case 4:\n assign$4 = [t, p, v], r = assign$4[0], g = assign$4[1], b = assign$4[2];\n break;\n\n case 5:\n assign$5 = [v, p, q], r = assign$5[0], g = assign$5[1], b = assign$5[2];\n break;\n }\n }\n\n return [r, g, b, args.length > 3 ? args[3] : 1];\n };\n\n var hcg2rgb_1 = hcg2rgb;\n var unpack$b = utils.unpack;\n var type$4 = utils.type;\n\n Color_1.prototype.hcg = function () {\n return rgb2hcg_1(this._rgb);\n };\n\n chroma_1.hcg = function () {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n return new (Function.prototype.bind.apply(Color_1, [null].concat(args, ['hcg'])))();\n };\n\n input.format.hcg = hcg2rgb_1;\n input.autodetect.push({\n p: 1,\n test: function test() {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n args = unpack$b(args, 'hcg');\n\n if (type$4(args) === 'array' && args.length === 3) {\n return 'hcg';\n }\n }\n });\n var unpack$c = utils.unpack;\n var last$4 = utils.last;\n var round$3 = Math.round;\n\n var rgb2hex = function rgb2hex() {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n var ref = unpack$c(args, 'rgba');\n var r = ref[0];\n var g = ref[1];\n var b = ref[2];\n var a = ref[3];\n var mode = last$4(args) || 'auto';\n\n if (a === undefined) {\n a = 1;\n }\n\n if (mode === 'auto') {\n mode = a < 1 ? 'rgba' : 'rgb';\n }\n\n r = round$3(r);\n g = round$3(g);\n b = round$3(b);\n var u = r << 16 | g << 8 | b;\n var str = \"000000\" + u.toString(16); //#.toUpperCase();\n\n str = str.substr(str.length - 6);\n var hxa = '0' + round$3(a * 255).toString(16);\n hxa = hxa.substr(hxa.length - 2);\n\n switch (mode.toLowerCase()) {\n case 'rgba':\n return \"#\" + str + hxa;\n\n case 'argb':\n return \"#\" + hxa + str;\n\n default:\n return \"#\" + str;\n }\n };\n\n var rgb2hex_1 = rgb2hex;\n var RE_HEX = /^#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/;\n var RE_HEXA = /^#?([A-Fa-f0-9]{8}|[A-Fa-f0-9]{4})$/;\n\n var hex2rgb = function hex2rgb(hex) {\n if (hex.match(RE_HEX)) {\n // remove optional leading #\n if (hex.length === 4 || hex.length === 7) {\n hex = hex.substr(1);\n } // expand short-notation to full six-digit\n\n\n if (hex.length === 3) {\n hex = hex.split('');\n hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];\n }\n\n var u = parseInt(hex, 16);\n var r = u >> 16;\n var g = u >> 8 & 0xFF;\n var b = u & 0xFF;\n return [r, g, b, 1];\n } // match rgba hex format, eg #FF000077\n\n\n if (hex.match(RE_HEXA)) {\n if (hex.length === 5 || hex.length === 9) {\n // remove optional leading #\n hex = hex.substr(1);\n } // expand short-notation to full eight-digit\n\n\n if (hex.length === 4) {\n hex = hex.split('');\n hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2] + hex[3] + hex[3];\n }\n\n var u$1 = parseInt(hex, 16);\n var r$1 = u$1 >> 24 & 0xFF;\n var g$1 = u$1 >> 16 & 0xFF;\n var b$1 = u$1 >> 8 & 0xFF;\n var a = Math.round((u$1 & 0xFF) / 0xFF * 100) / 100;\n return [r$1, g$1, b$1, a];\n } // we used to check for css colors here\n // if _input.css? and rgb = _input.css hex\n // return rgb\n\n\n throw new Error(\"unknown hex color: \" + hex);\n };\n\n var hex2rgb_1 = hex2rgb;\n var type$5 = utils.type;\n\n Color_1.prototype.hex = function (mode) {\n return rgb2hex_1(this._rgb, mode);\n };\n\n chroma_1.hex = function () {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n return new (Function.prototype.bind.apply(Color_1, [null].concat(args, ['hex'])))();\n };\n\n input.format.hex = hex2rgb_1;\n input.autodetect.push({\n p: 4,\n test: function test(h) {\n var rest = [],\n len = arguments.length - 1;\n\n while (len-- > 0) {\n rest[len] = arguments[len + 1];\n }\n\n if (!rest.length && type$5(h) === 'string' && [3, 4, 5, 6, 7, 8, 9].indexOf(h.length) >= 0) {\n return 'hex';\n }\n }\n });\n var unpack$d = utils.unpack;\n var TWOPI = utils.TWOPI;\n var min = Math.min;\n var sqrt = Math.sqrt;\n var acos = Math.acos;\n\n var rgb2hsi = function rgb2hsi() {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n /*\n borrowed from here:\n http://hummer.stanford.edu/museinfo/doc/examples/humdrum/keyscape2/rgb2hsi.cpp\n */\n\n\n var ref = unpack$d(args, 'rgb');\n var r = ref[0];\n var g = ref[1];\n var b = ref[2];\n r /= 255;\n g /= 255;\n b /= 255;\n var h;\n var min_ = min(r, g, b);\n var i = (r + g + b) / 3;\n var s = i > 0 ? 1 - min_ / i : 0;\n\n if (s === 0) {\n h = NaN;\n } else {\n h = (r - g + (r - b)) / 2;\n h /= sqrt((r - g) * (r - g) + (r - b) * (g - b));\n h = acos(h);\n\n if (b > g) {\n h = TWOPI - h;\n }\n\n h /= TWOPI;\n }\n\n return [h * 360, s, i];\n };\n\n var rgb2hsi_1 = rgb2hsi;\n var unpack$e = utils.unpack;\n var limit$1 = utils.limit;\n var TWOPI$1 = utils.TWOPI;\n var PITHIRD = utils.PITHIRD;\n var cos = Math.cos;\n /*\n * hue [0..360]\n * saturation [0..1]\n * intensity [0..1]\n */\n\n var hsi2rgb = function hsi2rgb() {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n /*\n borrowed from here:\n http://hummer.stanford.edu/museinfo/doc/examples/humdrum/keyscape2/hsi2rgb.cpp\n */\n\n\n args = unpack$e(args, 'hsi');\n var h = args[0];\n var s = args[1];\n var i = args[2];\n var r, g, b;\n\n if (isNaN(h)) {\n h = 0;\n }\n\n if (isNaN(s)) {\n s = 0;\n } // normalize hue\n\n\n if (h > 360) {\n h -= 360;\n }\n\n if (h < 0) {\n h += 360;\n }\n\n h /= 360;\n\n if (h < 1 / 3) {\n b = (1 - s) / 3;\n r = (1 + s * cos(TWOPI$1 * h) / cos(PITHIRD - TWOPI$1 * h)) / 3;\n g = 1 - (b + r);\n } else if (h < 2 / 3) {\n h -= 1 / 3;\n r = (1 - s) / 3;\n g = (1 + s * cos(TWOPI$1 * h) / cos(PITHIRD - TWOPI$1 * h)) / 3;\n b = 1 - (r + g);\n } else {\n h -= 2 / 3;\n g = (1 - s) / 3;\n b = (1 + s * cos(TWOPI$1 * h) / cos(PITHIRD - TWOPI$1 * h)) / 3;\n r = 1 - (g + b);\n }\n\n r = limit$1(i * r * 3);\n g = limit$1(i * g * 3);\n b = limit$1(i * b * 3);\n return [r * 255, g * 255, b * 255, args.length > 3 ? args[3] : 1];\n };\n\n var hsi2rgb_1 = hsi2rgb;\n var unpack$f = utils.unpack;\n var type$6 = utils.type;\n\n Color_1.prototype.hsi = function () {\n return rgb2hsi_1(this._rgb);\n };\n\n chroma_1.hsi = function () {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n return new (Function.prototype.bind.apply(Color_1, [null].concat(args, ['hsi'])))();\n };\n\n input.format.hsi = hsi2rgb_1;\n input.autodetect.push({\n p: 2,\n test: function test() {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n args = unpack$f(args, 'hsi');\n\n if (type$6(args) === 'array' && args.length === 3) {\n return 'hsi';\n }\n }\n });\n var unpack$g = utils.unpack;\n var type$7 = utils.type;\n\n Color_1.prototype.hsl = function () {\n return rgb2hsl_1(this._rgb);\n };\n\n chroma_1.hsl = function () {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n return new (Function.prototype.bind.apply(Color_1, [null].concat(args, ['hsl'])))();\n };\n\n input.format.hsl = hsl2rgb_1;\n input.autodetect.push({\n p: 2,\n test: function test() {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n args = unpack$g(args, 'hsl');\n\n if (type$7(args) === 'array' && args.length === 3) {\n return 'hsl';\n }\n }\n });\n var unpack$h = utils.unpack;\n var min$1 = Math.min;\n var max$1 = Math.max;\n /*\n * supported arguments:\n * - rgb2hsv(r,g,b)\n * - rgb2hsv([r,g,b])\n * - rgb2hsv({r,g,b})\n */\n\n var rgb2hsl$1 = function rgb2hsl$1() {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n args = unpack$h(args, 'rgb');\n var r = args[0];\n var g = args[1];\n var b = args[2];\n var min_ = min$1(r, g, b);\n var max_ = max$1(r, g, b);\n var delta = max_ - min_;\n var h, s, v;\n v = max_ / 255.0;\n\n if (max_ === 0) {\n h = Number.NaN;\n s = 0;\n } else {\n s = delta / max_;\n\n if (r === max_) {\n h = (g - b) / delta;\n }\n\n if (g === max_) {\n h = 2 + (b - r) / delta;\n }\n\n if (b === max_) {\n h = 4 + (r - g) / delta;\n }\n\n h *= 60;\n\n if (h < 0) {\n h += 360;\n }\n }\n\n return [h, s, v];\n };\n\n var rgb2hsv = rgb2hsl$1;\n var unpack$i = utils.unpack;\n var floor$1 = Math.floor;\n\n var hsv2rgb = function hsv2rgb() {\n var assign, assign$1, assign$2, assign$3, assign$4, assign$5;\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n args = unpack$i(args, 'hsv');\n var h = args[0];\n var s = args[1];\n var v = args[2];\n var r, g, b;\n v *= 255;\n\n if (s === 0) {\n r = g = b = v;\n } else {\n if (h === 360) {\n h = 0;\n }\n\n if (h > 360) {\n h -= 360;\n }\n\n if (h < 0) {\n h += 360;\n }\n\n h /= 60;\n var i = floor$1(h);\n var f = h - i;\n var p = v * (1 - s);\n var q = v * (1 - s * f);\n var t = v * (1 - s * (1 - f));\n\n switch (i) {\n case 0:\n assign = [v, t, p], r = assign[0], g = assign[1], b = assign[2];\n break;\n\n case 1:\n assign$1 = [q, v, p], r = assign$1[0], g = assign$1[1], b = assign$1[2];\n break;\n\n case 2:\n assign$2 = [p, v, t], r = assign$2[0], g = assign$2[1], b = assign$2[2];\n break;\n\n case 3:\n assign$3 = [p, q, v], r = assign$3[0], g = assign$3[1], b = assign$3[2];\n break;\n\n case 4:\n assign$4 = [t, p, v], r = assign$4[0], g = assign$4[1], b = assign$4[2];\n break;\n\n case 5:\n assign$5 = [v, p, q], r = assign$5[0], g = assign$5[1], b = assign$5[2];\n break;\n }\n }\n\n return [r, g, b, args.length > 3 ? args[3] : 1];\n };\n\n var hsv2rgb_1 = hsv2rgb;\n var unpack$j = utils.unpack;\n var type$8 = utils.type;\n\n Color_1.prototype.hsv = function () {\n return rgb2hsv(this._rgb);\n };\n\n chroma_1.hsv = function () {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n return new (Function.prototype.bind.apply(Color_1, [null].concat(args, ['hsv'])))();\n };\n\n input.format.hsv = hsv2rgb_1;\n input.autodetect.push({\n p: 2,\n test: function test() {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n args = unpack$j(args, 'hsv');\n\n if (type$8(args) === 'array' && args.length === 3) {\n return 'hsv';\n }\n }\n });\n var labConstants = {\n // Corresponds roughly to RGB brighter/darker\n Kn: 18,\n // D65 standard referent\n Xn: 0.950470,\n Yn: 1,\n Zn: 1.088830,\n t0: 0.137931034,\n // 4 / 29\n t1: 0.206896552,\n // 6 / 29\n t2: 0.12841855,\n // 3 * t1 * t1\n t3: 0.008856452 // t1 * t1 * t1\n\n };\n var unpack$k = utils.unpack;\n var pow = Math.pow;\n\n var rgb2lab = function rgb2lab() {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n var ref = unpack$k(args, 'rgb');\n var r = ref[0];\n var g = ref[1];\n var b = ref[2];\n var ref$1 = rgb2xyz(r, g, b);\n var x = ref$1[0];\n var y = ref$1[1];\n var z = ref$1[2];\n var l = 116 * y - 16;\n return [l < 0 ? 0 : l, 500 * (x - y), 200 * (y - z)];\n };\n\n var rgb_xyz = function rgb_xyz(r) {\n if ((r /= 255) <= 0.04045) {\n return r / 12.92;\n }\n\n return pow((r + 0.055) / 1.055, 2.4);\n };\n\n var xyz_lab = function xyz_lab(t) {\n if (t > labConstants.t3) {\n return pow(t, 1 / 3);\n }\n\n return t / labConstants.t2 + labConstants.t0;\n };\n\n var rgb2xyz = function rgb2xyz(r, g, b) {\n r = rgb_xyz(r);\n g = rgb_xyz(g);\n b = rgb_xyz(b);\n var x = xyz_lab((0.4124564 * r + 0.3575761 * g + 0.1804375 * b) / labConstants.Xn);\n var y = xyz_lab((0.2126729 * r + 0.7151522 * g + 0.0721750 * b) / labConstants.Yn);\n var z = xyz_lab((0.0193339 * r + 0.1191920 * g + 0.9503041 * b) / labConstants.Zn);\n return [x, y, z];\n };\n\n var rgb2lab_1 = rgb2lab;\n var unpack$l = utils.unpack;\n var pow$1 = Math.pow;\n /*\n * L* [0..100]\n * a [-100..100]\n * b [-100..100]\n */\n\n var lab2rgb = function lab2rgb() {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n args = unpack$l(args, 'lab');\n var l = args[0];\n var a = args[1];\n var b = args[2];\n var x, y, z, r, g, b_;\n y = (l + 16) / 116;\n x = isNaN(a) ? y : y + a / 500;\n z = isNaN(b) ? y : y - b / 200;\n y = labConstants.Yn * lab_xyz(y);\n x = labConstants.Xn * lab_xyz(x);\n z = labConstants.Zn * lab_xyz(z);\n r = xyz_rgb(3.2404542 * x - 1.5371385 * y - 0.4985314 * z); // D65 -> sRGB\n\n g = xyz_rgb(-0.9692660 * x + 1.8760108 * y + 0.0415560 * z);\n b_ = xyz_rgb(0.0556434 * x - 0.2040259 * y + 1.0572252 * z);\n return [r, g, b_, args.length > 3 ? args[3] : 1];\n };\n\n var xyz_rgb = function xyz_rgb(r) {\n return 255 * (r <= 0.00304 ? 12.92 * r : 1.055 * pow$1(r, 1 / 2.4) - 0.055);\n };\n\n var lab_xyz = function lab_xyz(t) {\n return t > labConstants.t1 ? t * t * t : labConstants.t2 * (t - labConstants.t0);\n };\n\n var lab2rgb_1 = lab2rgb;\n var unpack$m = utils.unpack;\n var type$9 = utils.type;\n\n Color_1.prototype.lab = function () {\n return rgb2lab_1(this._rgb);\n };\n\n chroma_1.lab = function () {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n return new (Function.prototype.bind.apply(Color_1, [null].concat(args, ['lab'])))();\n };\n\n input.format.lab = lab2rgb_1;\n input.autodetect.push({\n p: 2,\n test: function test() {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n args = unpack$m(args, 'lab');\n\n if (type$9(args) === 'array' && args.length === 3) {\n return 'lab';\n }\n }\n });\n var unpack$n = utils.unpack;\n var RAD2DEG = utils.RAD2DEG;\n var sqrt$1 = Math.sqrt;\n var atan2 = Math.atan2;\n var round$4 = Math.round;\n\n var lab2lch = function lab2lch() {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n var ref = unpack$n(args, 'lab');\n var l = ref[0];\n var a = ref[1];\n var b = ref[2];\n var c = sqrt$1(a * a + b * b);\n var h = (atan2(b, a) * RAD2DEG + 360) % 360;\n\n if (round$4(c * 10000) === 0) {\n h = Number.NaN;\n }\n\n return [l, c, h];\n };\n\n var lab2lch_1 = lab2lch;\n var unpack$o = utils.unpack;\n\n var rgb2lch = function rgb2lch() {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n var ref = unpack$o(args, 'rgb');\n var r = ref[0];\n var g = ref[1];\n var b = ref[2];\n var ref$1 = rgb2lab_1(r, g, b);\n var l = ref$1[0];\n var a = ref$1[1];\n var b_ = ref$1[2];\n return lab2lch_1(l, a, b_);\n };\n\n var rgb2lch_1 = rgb2lch;\n var unpack$p = utils.unpack;\n var DEG2RAD = utils.DEG2RAD;\n var sin = Math.sin;\n var cos$1 = Math.cos;\n\n var lch2lab = function lch2lab() {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n /*\n Convert from a qualitative parameter h and a quantitative parameter l to a 24-bit pixel.\n These formulas were invented by David Dalrymple to obtain maximum contrast without going\n out of gamut if the parameters are in the range 0-1.\n A saturation multiplier was added by Gregor Aisch\n */\n\n\n var ref = unpack$p(args, 'lch');\n var l = ref[0];\n var c = ref[1];\n var h = ref[2];\n\n if (isNaN(h)) {\n h = 0;\n }\n\n h = h * DEG2RAD;\n return [l, cos$1(h) * c, sin(h) * c];\n };\n\n var lch2lab_1 = lch2lab;\n var unpack$q = utils.unpack;\n\n var lch2rgb = function lch2rgb() {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n args = unpack$q(args, 'lch');\n var l = args[0];\n var c = args[1];\n var h = args[2];\n var ref = lch2lab_1(l, c, h);\n var L = ref[0];\n var a = ref[1];\n var b_ = ref[2];\n var ref$1 = lab2rgb_1(L, a, b_);\n var r = ref$1[0];\n var g = ref$1[1];\n var b = ref$1[2];\n return [r, g, b, args.length > 3 ? args[3] : 1];\n };\n\n var lch2rgb_1 = lch2rgb;\n var unpack$r = utils.unpack;\n\n var hcl2rgb = function hcl2rgb() {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n var hcl = unpack$r(args, 'hcl').reverse();\n return lch2rgb_1.apply(void 0, hcl);\n };\n\n var hcl2rgb_1 = hcl2rgb;\n var unpack$s = utils.unpack;\n var type$a = utils.type;\n\n Color_1.prototype.lch = function () {\n return rgb2lch_1(this._rgb);\n };\n\n Color_1.prototype.hcl = function () {\n return rgb2lch_1(this._rgb).reverse();\n };\n\n chroma_1.lch = function () {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n return new (Function.prototype.bind.apply(Color_1, [null].concat(args, ['lch'])))();\n };\n\n chroma_1.hcl = function () {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n return new (Function.prototype.bind.apply(Color_1, [null].concat(args, ['hcl'])))();\n };\n\n input.format.lch = lch2rgb_1;\n input.format.hcl = hcl2rgb_1;\n ['lch', 'hcl'].forEach(function (m) {\n return input.autodetect.push({\n p: 2,\n test: function test() {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n args = unpack$s(args, m);\n\n if (type$a(args) === 'array' && args.length === 3) {\n return m;\n }\n }\n });\n });\n /**\n \tX11 color names\n \thttp://www.w3.org/TR/css3-color/#svg-color\n */\n\n var w3cx11 = {\n aliceblue: '#f0f8ff',\n antiquewhite: '#faebd7',\n aqua: '#00ffff',\n aquamarine: '#7fffd4',\n azure: '#f0ffff',\n beige: '#f5f5dc',\n bisque: '#ffe4c4',\n black: '#000000',\n blanchedalmond: '#ffebcd',\n blue: '#0000ff',\n blueviolet: '#8a2be2',\n brown: '#a52a2a',\n burlywood: '#deb887',\n cadetblue: '#5f9ea0',\n chartreuse: '#7fff00',\n chocolate: '#d2691e',\n coral: '#ff7f50',\n cornflower: '#6495ed',\n cornflowerblue: '#6495ed',\n cornsilk: '#fff8dc',\n crimson: '#dc143c',\n cyan: '#00ffff',\n darkblue: '#00008b',\n darkcyan: '#008b8b',\n darkgoldenrod: '#b8860b',\n darkgray: '#a9a9a9',\n darkgreen: '#006400',\n darkgrey: '#a9a9a9',\n darkkhaki: '#bdb76b',\n darkmagenta: '#8b008b',\n darkolivegreen: '#556b2f',\n darkorange: '#ff8c00',\n darkorchid: '#9932cc',\n darkred: '#8b0000',\n darksalmon: '#e9967a',\n darkseagreen: '#8fbc8f',\n darkslateblue: '#483d8b',\n darkslategray: '#2f4f4f',\n darkslategrey: '#2f4f4f',\n darkturquoise: '#00ced1',\n darkviolet: '#9400d3',\n deeppink: '#ff1493',\n deepskyblue: '#00bfff',\n dimgray: '#696969',\n dimgrey: '#696969',\n dodgerblue: '#1e90ff',\n firebrick: '#b22222',\n floralwhite: '#fffaf0',\n forestgreen: '#228b22',\n fuchsia: '#ff00ff',\n gainsboro: '#dcdcdc',\n ghostwhite: '#f8f8ff',\n gold: '#ffd700',\n goldenrod: '#daa520',\n gray: '#808080',\n green: '#008000',\n greenyellow: '#adff2f',\n grey: '#808080',\n honeydew: '#f0fff0',\n hotpink: '#ff69b4',\n indianred: '#cd5c5c',\n indigo: '#4b0082',\n ivory: '#fffff0',\n khaki: '#f0e68c',\n laserlemon: '#ffff54',\n lavender: '#e6e6fa',\n lavenderblush: '#fff0f5',\n lawngreen: '#7cfc00',\n lemonchiffon: '#fffacd',\n lightblue: '#add8e6',\n lightcoral: '#f08080',\n lightcyan: '#e0ffff',\n lightgoldenrod: '#fafad2',\n lightgoldenrodyellow: '#fafad2',\n lightgray: '#d3d3d3',\n lightgreen: '#90ee90',\n lightgrey: '#d3d3d3',\n lightpink: '#ffb6c1',\n lightsalmon: '#ffa07a',\n lightseagreen: '#20b2aa',\n lightskyblue: '#87cefa',\n lightslategray: '#778899',\n lightslategrey: '#778899',\n lightsteelblue: '#b0c4de',\n lightyellow: '#ffffe0',\n lime: '#00ff00',\n limegreen: '#32cd32',\n linen: '#faf0e6',\n magenta: '#ff00ff',\n maroon: '#800000',\n maroon2: '#7f0000',\n maroon3: '#b03060',\n mediumaquamarine: '#66cdaa',\n mediumblue: '#0000cd',\n mediumorchid: '#ba55d3',\n mediumpurple: '#9370db',\n mediumseagreen: '#3cb371',\n mediumslateblue: '#7b68ee',\n mediumspringgreen: '#00fa9a',\n mediumturquoise: '#48d1cc',\n mediumvioletred: '#c71585',\n midnightblue: '#191970',\n mintcream: '#f5fffa',\n mistyrose: '#ffe4e1',\n moccasin: '#ffe4b5',\n navajowhite: '#ffdead',\n navy: '#000080',\n oldlace: '#fdf5e6',\n olive: '#808000',\n olivedrab: '#6b8e23',\n orange: '#ffa500',\n orangered: '#ff4500',\n orchid: '#da70d6',\n palegoldenrod: '#eee8aa',\n palegreen: '#98fb98',\n paleturquoise: '#afeeee',\n palevioletred: '#db7093',\n papayawhip: '#ffefd5',\n peachpuff: '#ffdab9',\n peru: '#cd853f',\n pink: '#ffc0cb',\n plum: '#dda0dd',\n powderblue: '#b0e0e6',\n purple: '#800080',\n purple2: '#7f007f',\n purple3: '#a020f0',\n rebeccapurple: '#663399',\n red: '#ff0000',\n rosybrown: '#bc8f8f',\n royalblue: '#4169e1',\n saddlebrown: '#8b4513',\n salmon: '#fa8072',\n sandybrown: '#f4a460',\n seagreen: '#2e8b57',\n seashell: '#fff5ee',\n sienna: '#a0522d',\n silver: '#c0c0c0',\n skyblue: '#87ceeb',\n slateblue: '#6a5acd',\n slategray: '#708090',\n slategrey: '#708090',\n snow: '#fffafa',\n springgreen: '#00ff7f',\n steelblue: '#4682b4',\n tan: '#d2b48c',\n teal: '#008080',\n thistle: '#d8bfd8',\n tomato: '#ff6347',\n turquoise: '#40e0d0',\n violet: '#ee82ee',\n wheat: '#f5deb3',\n white: '#ffffff',\n whitesmoke: '#f5f5f5',\n yellow: '#ffff00',\n yellowgreen: '#9acd32'\n };\n var w3cx11_1 = w3cx11;\n var type$b = utils.type;\n\n Color_1.prototype.name = function () {\n var hex = rgb2hex_1(this._rgb, 'rgb');\n\n for (var i = 0, list = Object.keys(w3cx11_1); i < list.length; i += 1) {\n var n = list[i];\n\n if (w3cx11_1[n] === hex) {\n return n.toLowerCase();\n }\n }\n\n return hex;\n };\n\n input.format.named = function (name) {\n name = name.toLowerCase();\n\n if (w3cx11_1[name]) {\n return hex2rgb_1(w3cx11_1[name]);\n }\n\n throw new Error('unknown color name: ' + name);\n };\n\n input.autodetect.push({\n p: 5,\n test: function test(h) {\n var rest = [],\n len = arguments.length - 1;\n\n while (len-- > 0) {\n rest[len] = arguments[len + 1];\n }\n\n if (!rest.length && type$b(h) === 'string' && w3cx11_1[h.toLowerCase()]) {\n return 'named';\n }\n }\n });\n var unpack$t = utils.unpack;\n\n var rgb2num = function rgb2num() {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n var ref = unpack$t(args, 'rgb');\n var r = ref[0];\n var g = ref[1];\n var b = ref[2];\n return (r << 16) + (g << 8) + b;\n };\n\n var rgb2num_1 = rgb2num;\n var type$c = utils.type;\n\n var num2rgb = function num2rgb(num) {\n if (type$c(num) == \"number\" && num >= 0 && num <= 0xFFFFFF) {\n var r = num >> 16;\n var g = num >> 8 & 0xFF;\n var b = num & 0xFF;\n return [r, g, b, 1];\n }\n\n throw new Error(\"unknown num color: \" + num);\n };\n\n var num2rgb_1 = num2rgb;\n var type$d = utils.type;\n\n Color_1.prototype.num = function () {\n return rgb2num_1(this._rgb);\n };\n\n chroma_1.num = function () {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n return new (Function.prototype.bind.apply(Color_1, [null].concat(args, ['num'])))();\n };\n\n input.format.num = num2rgb_1;\n input.autodetect.push({\n p: 5,\n test: function test() {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n if (args.length === 1 && type$d(args[0]) === 'number' && args[0] >= 0 && args[0] <= 0xFFFFFF) {\n return 'num';\n }\n }\n });\n var unpack$u = utils.unpack;\n var type$e = utils.type;\n var round$5 = Math.round;\n\n Color_1.prototype.rgb = function (rnd) {\n if (rnd === void 0) rnd = true;\n\n if (rnd === false) {\n return this._rgb.slice(0, 3);\n }\n\n return this._rgb.slice(0, 3).map(round$5);\n };\n\n Color_1.prototype.rgba = function (rnd) {\n if (rnd === void 0) rnd = true;\n return this._rgb.slice(0, 4).map(function (v, i) {\n return i < 3 ? rnd === false ? v : round$5(v) : v;\n });\n };\n\n chroma_1.rgb = function () {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n return new (Function.prototype.bind.apply(Color_1, [null].concat(args, ['rgb'])))();\n };\n\n input.format.rgb = function () {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n var rgba = unpack$u(args, 'rgba');\n\n if (rgba[3] === undefined) {\n rgba[3] = 1;\n }\n\n return rgba;\n };\n\n input.autodetect.push({\n p: 3,\n test: function test() {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n args = unpack$u(args, 'rgba');\n\n if (type$e(args) === 'array' && (args.length === 3 || args.length === 4 && type$e(args[3]) == 'number' && args[3] >= 0 && args[3] <= 1)) {\n return 'rgb';\n }\n }\n });\n /*\n * Based on implementation by Neil Bartlett\n * https://github.com/neilbartlett/color-temperature\n */\n\n var log = Math.log;\n\n var temperature2rgb = function temperature2rgb(kelvin) {\n var temp = kelvin / 100;\n var r, g, b;\n\n if (temp < 66) {\n r = 255;\n g = -155.25485562709179 - 0.44596950469579133 * (g = temp - 2) + 104.49216199393888 * log(g);\n b = temp < 20 ? 0 : -254.76935184120902 + 0.8274096064007395 * (b = temp - 10) + 115.67994401066147 * log(b);\n } else {\n r = 351.97690566805693 + 0.114206453784165 * (r = temp - 55) - 40.25366309332127 * log(r);\n g = 325.4494125711974 + 0.07943456536662342 * (g = temp - 50) - 28.0852963507957 * log(g);\n b = 255;\n }\n\n return [r, g, b, 1];\n };\n\n var temperature2rgb_1 = temperature2rgb;\n /*\n * Based on implementation by Neil Bartlett\n * https://github.com/neilbartlett/color-temperature\n **/\n\n var unpack$v = utils.unpack;\n var round$6 = Math.round;\n\n var rgb2temperature = function rgb2temperature() {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n var rgb = unpack$v(args, 'rgb');\n var r = rgb[0],\n b = rgb[2];\n var minTemp = 1000;\n var maxTemp = 40000;\n var eps = 0.4;\n var temp;\n\n while (maxTemp - minTemp > eps) {\n temp = (maxTemp + minTemp) * 0.5;\n var rgb$1 = temperature2rgb_1(temp);\n\n if (rgb$1[2] / rgb$1[0] >= b / r) {\n maxTemp = temp;\n } else {\n minTemp = temp;\n }\n }\n\n return round$6(temp);\n };\n\n var rgb2temperature_1 = rgb2temperature;\n\n Color_1.prototype.temp = Color_1.prototype.kelvin = Color_1.prototype.temperature = function () {\n return rgb2temperature_1(this._rgb);\n };\n\n chroma_1.temp = chroma_1.kelvin = chroma_1.temperature = function () {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n return new (Function.prototype.bind.apply(Color_1, [null].concat(args, ['temp'])))();\n };\n\n input.format.temp = input.format.kelvin = input.format.temperature = temperature2rgb_1;\n var type$f = utils.type;\n\n Color_1.prototype.alpha = function (a, mutate) {\n if (mutate === void 0) mutate = false;\n\n if (a !== undefined && type$f(a) === 'number') {\n if (mutate) {\n this._rgb[3] = a;\n return this;\n }\n\n return new Color_1([this._rgb[0], this._rgb[1], this._rgb[2], a], 'rgb');\n }\n\n return this._rgb[3];\n };\n\n Color_1.prototype.clipped = function () {\n return this._rgb._clipped || false;\n };\n\n Color_1.prototype.darken = function (amount) {\n if (amount === void 0) amount = 1;\n var me = this;\n var lab = me.lab();\n lab[0] -= labConstants.Kn * amount;\n return new Color_1(lab, 'lab').alpha(me.alpha(), true);\n };\n\n Color_1.prototype.brighten = function (amount) {\n if (amount === void 0) amount = 1;\n return this.darken(-amount);\n };\n\n Color_1.prototype.darker = Color_1.prototype.darken;\n Color_1.prototype.brighter = Color_1.prototype.brighten;\n\n Color_1.prototype.get = function (mc) {\n var ref = mc.split('.');\n var mode = ref[0];\n var channel = ref[1];\n var src = this[mode]();\n\n if (channel) {\n var i = mode.indexOf(channel);\n\n if (i > -1) {\n return src[i];\n }\n\n throw new Error(\"unknown channel \" + channel + \" in mode \" + mode);\n } else {\n return src;\n }\n };\n\n var type$g = utils.type;\n var pow$2 = Math.pow;\n var EPS = 1e-7;\n var MAX_ITER = 20;\n\n Color_1.prototype.luminance = function (lum) {\n if (lum !== undefined && type$g(lum) === 'number') {\n if (lum === 0) {\n // return pure black\n return new Color_1([0, 0, 0, this._rgb[3]], 'rgb');\n }\n\n if (lum === 1) {\n // return pure white\n return new Color_1([255, 255, 255, this._rgb[3]], 'rgb');\n } // compute new color using...\n\n\n var cur_lum = this.luminance();\n var mode = 'rgb';\n var max_iter = MAX_ITER;\n\n var test = function test(low, high) {\n var mid = low.interpolate(high, 0.5, mode);\n var lm = mid.luminance();\n\n if (Math.abs(lum - lm) < EPS || !max_iter--) {\n // close enough\n return mid;\n }\n\n return lm > lum ? test(low, mid) : test(mid, high);\n };\n\n var rgb = (cur_lum > lum ? test(new Color_1([0, 0, 0]), this) : test(this, new Color_1([255, 255, 255]))).rgb();\n return new Color_1(rgb.concat([this._rgb[3]]));\n }\n\n return rgb2luminance.apply(void 0, this._rgb.slice(0, 3));\n };\n\n var rgb2luminance = function rgb2luminance(r, g, b) {\n // relative luminance\n // see http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef\n r = luminance_x(r);\n g = luminance_x(g);\n b = luminance_x(b);\n return 0.2126 * r + 0.7152 * g + 0.0722 * b;\n };\n\n var luminance_x = function luminance_x(x) {\n x /= 255;\n return x <= 0.03928 ? x / 12.92 : pow$2((x + 0.055) / 1.055, 2.4);\n };\n\n var interpolator = {};\n var type$h = utils.type;\n\n var mix = function mix(col1, col2, f) {\n if (f === void 0) f = 0.5;\n var rest = [],\n len = arguments.length - 3;\n\n while (len-- > 0) {\n rest[len] = arguments[len + 3];\n }\n\n var mode = rest[0] || 'lrgb';\n\n if (!interpolator[mode] && !rest.length) {\n // fall back to the first supported mode\n mode = Object.keys(interpolator)[0];\n }\n\n if (!interpolator[mode]) {\n throw new Error(\"interpolation mode \" + mode + \" is not defined\");\n }\n\n if (type$h(col1) !== 'object') {\n col1 = new Color_1(col1);\n }\n\n if (type$h(col2) !== 'object') {\n col2 = new Color_1(col2);\n }\n\n return interpolator[mode](col1, col2, f).alpha(col1.alpha() + f * (col2.alpha() - col1.alpha()));\n };\n\n Color_1.prototype.mix = Color_1.prototype.interpolate = function (col2, f) {\n if (f === void 0) f = 0.5;\n var rest = [],\n len = arguments.length - 2;\n\n while (len-- > 0) {\n rest[len] = arguments[len + 2];\n }\n\n return mix.apply(void 0, [this, col2, f].concat(rest));\n };\n\n Color_1.prototype.premultiply = function (mutate) {\n if (mutate === void 0) mutate = false;\n var rgb = this._rgb;\n var a = rgb[3];\n\n if (mutate) {\n this._rgb = [rgb[0] * a, rgb[1] * a, rgb[2] * a, a];\n return this;\n } else {\n return new Color_1([rgb[0] * a, rgb[1] * a, rgb[2] * a, a], 'rgb');\n }\n };\n\n Color_1.prototype.saturate = function (amount) {\n if (amount === void 0) amount = 1;\n var me = this;\n var lch = me.lch();\n lch[1] += labConstants.Kn * amount;\n\n if (lch[1] < 0) {\n lch[1] = 0;\n }\n\n return new Color_1(lch, 'lch').alpha(me.alpha(), true);\n };\n\n Color_1.prototype.desaturate = function (amount) {\n if (amount === void 0) amount = 1;\n return this.saturate(-amount);\n };\n\n var type$i = utils.type;\n\n Color_1.prototype.set = function (mc, value, mutate) {\n if (mutate === void 0) mutate = false;\n var ref = mc.split('.');\n var mode = ref[0];\n var channel = ref[1];\n var src = this[mode]();\n\n if (channel) {\n var i = mode.indexOf(channel);\n\n if (i > -1) {\n if (type$i(value) == 'string') {\n switch (value.charAt(0)) {\n case '+':\n src[i] += +value;\n break;\n\n case '-':\n src[i] += +value;\n break;\n\n case '*':\n src[i] *= +value.substr(1);\n break;\n\n case '/':\n src[i] /= +value.substr(1);\n break;\n\n default:\n src[i] = +value;\n }\n } else if (type$i(value) === 'number') {\n src[i] = value;\n } else {\n throw new Error(\"unsupported value for Color.set\");\n }\n\n var out = new Color_1(src, mode);\n\n if (mutate) {\n this._rgb = out._rgb;\n return this;\n }\n\n return out;\n }\n\n throw new Error(\"unknown channel \" + channel + \" in mode \" + mode);\n } else {\n return src;\n }\n };\n\n var rgb$1 = function rgb$1(col1, col2, f) {\n var xyz0 = col1._rgb;\n var xyz1 = col2._rgb;\n return new Color_1(xyz0[0] + f * (xyz1[0] - xyz0[0]), xyz0[1] + f * (xyz1[1] - xyz0[1]), xyz0[2] + f * (xyz1[2] - xyz0[2]), 'rgb');\n }; // register interpolator\n\n\n interpolator.rgb = rgb$1;\n var sqrt$2 = Math.sqrt;\n var pow$3 = Math.pow;\n\n var lrgb = function lrgb(col1, col2, f) {\n var ref = col1._rgb;\n var x1 = ref[0];\n var y1 = ref[1];\n var z1 = ref[2];\n var ref$1 = col2._rgb;\n var x2 = ref$1[0];\n var y2 = ref$1[1];\n var z2 = ref$1[2];\n return new Color_1(sqrt$2(pow$3(x1, 2) * (1 - f) + pow$3(x2, 2) * f), sqrt$2(pow$3(y1, 2) * (1 - f) + pow$3(y2, 2) * f), sqrt$2(pow$3(z1, 2) * (1 - f) + pow$3(z2, 2) * f), 'rgb');\n }; // register interpolator\n\n\n interpolator.lrgb = lrgb;\n\n var lab$1 = function lab$1(col1, col2, f) {\n var xyz0 = col1.lab();\n var xyz1 = col2.lab();\n return new Color_1(xyz0[0] + f * (xyz1[0] - xyz0[0]), xyz0[1] + f * (xyz1[1] - xyz0[1]), xyz0[2] + f * (xyz1[2] - xyz0[2]), 'lab');\n }; // register interpolator\n\n\n interpolator.lab = lab$1;\n\n var _hsx = function _hsx(col1, col2, f, m) {\n var assign, assign$1;\n var xyz0, xyz1;\n\n if (m === 'hsl') {\n xyz0 = col1.hsl();\n xyz1 = col2.hsl();\n } else if (m === 'hsv') {\n xyz0 = col1.hsv();\n xyz1 = col2.hsv();\n } else if (m === 'hcg') {\n xyz0 = col1.hcg();\n xyz1 = col2.hcg();\n } else if (m === 'hsi') {\n xyz0 = col1.hsi();\n xyz1 = col2.hsi();\n } else if (m === 'lch' || m === 'hcl') {\n m = 'hcl';\n xyz0 = col1.hcl();\n xyz1 = col2.hcl();\n }\n\n var hue0, hue1, sat0, sat1, lbv0, lbv1;\n\n if (m.substr(0, 1) === 'h') {\n assign = xyz0, hue0 = assign[0], sat0 = assign[1], lbv0 = assign[2];\n assign$1 = xyz1, hue1 = assign$1[0], sat1 = assign$1[1], lbv1 = assign$1[2];\n }\n\n var sat, hue, lbv, dh;\n\n if (!isNaN(hue0) && !isNaN(hue1)) {\n // both colors have hue\n if (hue1 > hue0 && hue1 - hue0 > 180) {\n dh = hue1 - (hue0 + 360);\n } else if (hue1 < hue0 && hue0 - hue1 > 180) {\n dh = hue1 + 360 - hue0;\n } else {\n dh = hue1 - hue0;\n }\n\n hue = hue0 + f * dh;\n } else if (!isNaN(hue0)) {\n hue = hue0;\n\n if ((lbv1 == 1 || lbv1 == 0) && m != 'hsv') {\n sat = sat0;\n }\n } else if (!isNaN(hue1)) {\n hue = hue1;\n\n if ((lbv0 == 1 || lbv0 == 0) && m != 'hsv') {\n sat = sat1;\n }\n } else {\n hue = Number.NaN;\n }\n\n if (sat === undefined) {\n sat = sat0 + f * (sat1 - sat0);\n }\n\n lbv = lbv0 + f * (lbv1 - lbv0);\n return new Color_1([hue, sat, lbv], m);\n };\n\n var lch$1 = function lch$1(col1, col2, f) {\n return _hsx(col1, col2, f, 'lch');\n }; // register interpolator\n\n\n interpolator.lch = lch$1;\n interpolator.hcl = lch$1;\n\n var num$1 = function num$1(col1, col2, f) {\n var c1 = col1.num();\n var c2 = col2.num();\n return new Color_1(c1 + f * (c2 - c1), 'num');\n }; // register interpolator\n\n\n interpolator.num = num$1;\n\n var hcg$1 = function hcg$1(col1, col2, f) {\n return _hsx(col1, col2, f, 'hcg');\n }; // register interpolator\n\n\n interpolator.hcg = hcg$1;\n\n var hsi$1 = function hsi$1(col1, col2, f) {\n return _hsx(col1, col2, f, 'hsi');\n }; // register interpolator\n\n\n interpolator.hsi = hsi$1;\n\n var hsl$1 = function hsl$1(col1, col2, f) {\n return _hsx(col1, col2, f, 'hsl');\n }; // register interpolator\n\n\n interpolator.hsl = hsl$1;\n\n var hsv$1 = function hsv$1(col1, col2, f) {\n return _hsx(col1, col2, f, 'hsv');\n }; // register interpolator\n\n\n interpolator.hsv = hsv$1;\n var clip_rgb$2 = utils.clip_rgb;\n var pow$4 = Math.pow;\n var sqrt$3 = Math.sqrt;\n var PI$1 = Math.PI;\n var cos$2 = Math.cos;\n var sin$1 = Math.sin;\n var atan2$1 = Math.atan2;\n\n var average = function average(colors, mode, weights) {\n if (mode === void 0) mode = 'lrgb';\n if (weights === void 0) weights = null;\n var l = colors.length;\n\n if (!weights) {\n weights = Array.from(new Array(l)).map(function () {\n return 1;\n });\n } // normalize weights\n\n\n var k = l / weights.reduce(function (a, b) {\n return a + b;\n });\n weights.forEach(function (w, i) {\n weights[i] *= k;\n }); // convert colors to Color objects\n\n colors = colors.map(function (c) {\n return new Color_1(c);\n });\n\n if (mode === 'lrgb') {\n return _average_lrgb(colors, weights);\n }\n\n var first = colors.shift();\n var xyz = first.get(mode);\n var cnt = [];\n var dx = 0;\n var dy = 0; // initial color\n\n for (var i = 0; i < xyz.length; i++) {\n xyz[i] = (xyz[i] || 0) * weights[0];\n cnt.push(isNaN(xyz[i]) ? 0 : weights[0]);\n\n if (mode.charAt(i) === 'h' && !isNaN(xyz[i])) {\n var A = xyz[i] / 180 * PI$1;\n dx += cos$2(A) * weights[0];\n dy += sin$1(A) * weights[0];\n }\n }\n\n var alpha = first.alpha() * weights[0];\n colors.forEach(function (c, ci) {\n var xyz2 = c.get(mode);\n alpha += c.alpha() * weights[ci + 1];\n\n for (var i = 0; i < xyz.length; i++) {\n if (!isNaN(xyz2[i])) {\n cnt[i] += weights[ci + 1];\n\n if (mode.charAt(i) === 'h') {\n var A = xyz2[i] / 180 * PI$1;\n dx += cos$2(A) * weights[ci + 1];\n dy += sin$1(A) * weights[ci + 1];\n } else {\n xyz[i] += xyz2[i] * weights[ci + 1];\n }\n }\n }\n });\n\n for (var i$1 = 0; i$1 < xyz.length; i$1++) {\n if (mode.charAt(i$1) === 'h') {\n var A$1 = atan2$1(dy / cnt[i$1], dx / cnt[i$1]) / PI$1 * 180;\n\n while (A$1 < 0) {\n A$1 += 360;\n }\n\n while (A$1 >= 360) {\n A$1 -= 360;\n }\n\n xyz[i$1] = A$1;\n } else {\n xyz[i$1] = xyz[i$1] / cnt[i$1];\n }\n }\n\n alpha /= l;\n return new Color_1(xyz, mode).alpha(alpha > 0.99999 ? 1 : alpha, true);\n };\n\n var _average_lrgb = function _average_lrgb(colors, weights) {\n var l = colors.length;\n var xyz = [0, 0, 0, 0];\n\n for (var i = 0; i < colors.length; i++) {\n var col = colors[i];\n var f = weights[i] / l;\n var rgb = col._rgb;\n xyz[0] += pow$4(rgb[0], 2) * f;\n xyz[1] += pow$4(rgb[1], 2) * f;\n xyz[2] += pow$4(rgb[2], 2) * f;\n xyz[3] += rgb[3] * f;\n }\n\n xyz[0] = sqrt$3(xyz[0]);\n xyz[1] = sqrt$3(xyz[1]);\n xyz[2] = sqrt$3(xyz[2]);\n\n if (xyz[3] > 0.9999999) {\n xyz[3] = 1;\n }\n\n return new Color_1(clip_rgb$2(xyz));\n }; // minimal multi-purpose interface\n // @requires utils color analyze\n\n\n var type$j = utils.type;\n var pow$5 = Math.pow;\n\n var scale = function scale(colors) {\n // constructor\n var _mode = 'rgb';\n\n var _nacol = chroma_1('#ccc');\n\n var _spread = 0; // const _fixed = false;\n\n var _domain = [0, 1];\n var _pos = [];\n var _padding = [0, 0];\n var _classes = false;\n var _colors = [];\n var _out = false;\n var _min = 0;\n var _max = 1;\n var _correctLightness = false;\n var _colorCache = {};\n var _useCache = true;\n var _gamma = 1; // private methods\n\n var setColors = function setColors(colors) {\n colors = colors || ['#fff', '#000'];\n\n if (colors && type$j(colors) === 'string' && chroma_1.brewer && chroma_1.brewer[colors.toLowerCase()]) {\n colors = chroma_1.brewer[colors.toLowerCase()];\n }\n\n if (type$j(colors) === 'array') {\n // handle single color\n if (colors.length === 1) {\n colors = [colors[0], colors[0]];\n } // make a copy of the colors\n\n\n colors = colors.slice(0); // convert to chroma classes\n\n for (var c = 0; c < colors.length; c++) {\n colors[c] = chroma_1(colors[c]);\n } // auto-fill color position\n\n\n _pos.length = 0;\n\n for (var c$1 = 0; c$1 < colors.length; c$1++) {\n _pos.push(c$1 / (colors.length - 1));\n }\n }\n\n resetCache();\n return _colors = colors;\n };\n\n var getClass = function getClass(value) {\n if (_classes != null) {\n var n = _classes.length - 1;\n var i = 0;\n\n while (i < n && value >= _classes[i]) {\n i++;\n }\n\n return i - 1;\n }\n\n return 0;\n };\n\n var tMapLightness = function tMapLightness(t) {\n return t;\n };\n\n var tMapDomain = function tMapDomain(t) {\n return t;\n }; // const classifyValue = function(value) {\n // let val = value;\n // if (_classes.length > 2) {\n // const n = _classes.length-1;\n // const i = getClass(value);\n // const minc = _classes[0] + ((_classes[1]-_classes[0]) * (0 + (_spread * 0.5))); // center of 1st class\n // const maxc = _classes[n-1] + ((_classes[n]-_classes[n-1]) * (1 - (_spread * 0.5))); // center of last class\n // val = _min + ((((_classes[i] + ((_classes[i+1] - _classes[i]) * 0.5)) - minc) / (maxc-minc)) * (_max - _min));\n // }\n // return val;\n // };\n\n\n var getColor = function getColor(val, bypassMap) {\n var col, t;\n\n if (bypassMap == null) {\n bypassMap = false;\n }\n\n if (isNaN(val) || val === null) {\n return _nacol;\n }\n\n if (!bypassMap) {\n if (_classes && _classes.length > 2) {\n // find the class\n var c = getClass(val);\n t = c / (_classes.length - 2);\n } else if (_max !== _min) {\n // just interpolate between min/max\n t = (val - _min) / (_max - _min);\n } else {\n t = 1;\n }\n } else {\n t = val;\n } // domain map\n\n\n t = tMapDomain(t);\n\n if (!bypassMap) {\n t = tMapLightness(t); // lightness correction\n }\n\n if (_gamma !== 1) {\n t = pow$5(t, _gamma);\n }\n\n t = _padding[0] + t * (1 - _padding[0] - _padding[1]);\n t = Math.min(1, Math.max(0, t));\n var k = Math.floor(t * 10000);\n\n if (_useCache && _colorCache[k]) {\n col = _colorCache[k];\n } else {\n if (type$j(_colors) === 'array') {\n //for i in [0.._pos.length-1]\n for (var i = 0; i < _pos.length; i++) {\n var p = _pos[i];\n\n if (t <= p) {\n col = _colors[i];\n break;\n }\n\n if (t >= p && i === _pos.length - 1) {\n col = _colors[i];\n break;\n }\n\n if (t > p && t < _pos[i + 1]) {\n t = (t - p) / (_pos[i + 1] - p);\n col = chroma_1.interpolate(_colors[i], _colors[i + 1], t, _mode);\n break;\n }\n }\n } else if (type$j(_colors) === 'function') {\n col = _colors(t);\n }\n\n if (_useCache) {\n _colorCache[k] = col;\n }\n }\n\n return col;\n };\n\n var resetCache = function resetCache() {\n return _colorCache = {};\n };\n\n setColors(colors); // public interface\n\n var f = function f(v) {\n var c = chroma_1(getColor(v));\n\n if (_out && c[_out]) {\n return c[_out]();\n } else {\n return c;\n }\n };\n\n f.classes = function (classes) {\n if (classes != null) {\n if (type$j(classes) === 'array') {\n _classes = classes;\n _domain = [classes[0], classes[classes.length - 1]];\n } else {\n var d = chroma_1.analyze(_domain);\n\n if (classes === 0) {\n _classes = [d.min, d.max];\n } else {\n _classes = chroma_1.limits(d, 'e', classes);\n }\n }\n\n return f;\n }\n\n return _classes;\n };\n\n f.domain = function (domain) {\n if (!arguments.length) {\n return _domain;\n }\n\n _min = domain[0];\n _max = domain[domain.length - 1];\n _pos = [];\n var k = _colors.length;\n\n if (domain.length === k && _min !== _max) {\n // update positions\n for (var i = 0, list = Array.from(domain); i < list.length; i += 1) {\n var d = list[i];\n\n _pos.push((d - _min) / (_max - _min));\n }\n } else {\n for (var c = 0; c < k; c++) {\n _pos.push(c / (k - 1));\n }\n\n if (domain.length > 2) {\n // set domain map\n var tOut = domain.map(function (d, i) {\n return i / (domain.length - 1);\n });\n var tBreaks = domain.map(function (d) {\n return (d - _min) / (_max - _min);\n });\n\n if (!tBreaks.every(function (val, i) {\n return tOut[i] === val;\n })) {\n tMapDomain = function tMapDomain(t) {\n if (t <= 0 || t >= 1) {\n return t;\n }\n\n var i = 0;\n\n while (t >= tBreaks[i + 1]) {\n i++;\n }\n\n var f = (t - tBreaks[i]) / (tBreaks[i + 1] - tBreaks[i]);\n var out = tOut[i] + f * (tOut[i + 1] - tOut[i]);\n return out;\n };\n }\n }\n }\n\n _domain = [_min, _max];\n return f;\n };\n\n f.mode = function (_m) {\n if (!arguments.length) {\n return _mode;\n }\n\n _mode = _m;\n resetCache();\n return f;\n };\n\n f.range = function (colors, _pos) {\n setColors(colors, _pos);\n return f;\n };\n\n f.out = function (_o) {\n _out = _o;\n return f;\n };\n\n f.spread = function (val) {\n if (!arguments.length) {\n return _spread;\n }\n\n _spread = val;\n return f;\n };\n\n f.correctLightness = function (v) {\n if (v == null) {\n v = true;\n }\n\n _correctLightness = v;\n resetCache();\n\n if (_correctLightness) {\n tMapLightness = function tMapLightness(t) {\n var L0 = getColor(0, true).lab()[0];\n var L1 = getColor(1, true).lab()[0];\n var pol = L0 > L1;\n var L_actual = getColor(t, true).lab()[0];\n var L_ideal = L0 + (L1 - L0) * t;\n var L_diff = L_actual - L_ideal;\n var t0 = 0;\n var t1 = 1;\n var max_iter = 20;\n\n while (Math.abs(L_diff) > 1e-2 && max_iter-- > 0) {\n (function () {\n if (pol) {\n L_diff *= -1;\n }\n\n if (L_diff < 0) {\n t0 = t;\n t += (t1 - t) * 0.5;\n } else {\n t1 = t;\n t += (t0 - t) * 0.5;\n }\n\n L_actual = getColor(t, true).lab()[0];\n return L_diff = L_actual - L_ideal;\n })();\n }\n\n return t;\n };\n } else {\n tMapLightness = function tMapLightness(t) {\n return t;\n };\n }\n\n return f;\n };\n\n f.padding = function (p) {\n if (p != null) {\n if (type$j(p) === 'number') {\n p = [p, p];\n }\n\n _padding = p;\n return f;\n } else {\n return _padding;\n }\n };\n\n f.colors = function (numColors, out) {\n // If no arguments are given, return the original colors that were provided\n if (arguments.length < 2) {\n out = 'hex';\n }\n\n var result = [];\n\n if (arguments.length === 0) {\n result = _colors.slice(0);\n } else if (numColors === 1) {\n result = [f(0.5)];\n } else if (numColors > 1) {\n var dm = _domain[0];\n var dd = _domain[1] - dm;\n result = __range__(0, numColors, false).map(function (i) {\n return f(dm + i / (numColors - 1) * dd);\n });\n } else {\n // returns all colors based on the defined classes\n colors = [];\n var samples = [];\n\n if (_classes && _classes.length > 2) {\n for (var i = 1, end = _classes.length, asc = 1 <= end; asc ? i < end : i > end; asc ? i++ : i--) {\n samples.push((_classes[i - 1] + _classes[i]) * 0.5);\n }\n } else {\n samples = _domain;\n }\n\n result = samples.map(function (v) {\n return f(v);\n });\n }\n\n if (chroma_1[out]) {\n result = result.map(function (c) {\n return c[out]();\n });\n }\n\n return result;\n };\n\n f.cache = function (c) {\n if (c != null) {\n _useCache = c;\n return f;\n } else {\n return _useCache;\n }\n };\n\n f.gamma = function (g) {\n if (g != null) {\n _gamma = g;\n return f;\n } else {\n return _gamma;\n }\n };\n\n f.nodata = function (d) {\n if (d != null) {\n _nacol = chroma_1(d);\n return f;\n } else {\n return _nacol;\n }\n };\n\n return f;\n };\n\n function __range__(left, right, inclusive) {\n var range = [];\n var ascending = left < right;\n var end = !inclusive ? right : ascending ? right + 1 : right - 1;\n\n for (var i = left; ascending ? i < end : i > end; ascending ? i++ : i--) {\n range.push(i);\n }\n\n return range;\n } //\n // interpolates between a set of colors uzing a bezier spline\n //\n // @requires utils lab\n\n\n var bezier = function bezier(colors) {\n var assign, assign$1, assign$2;\n var I, lab0, lab1, lab2;\n colors = colors.map(function (c) {\n return new Color_1(c);\n });\n\n if (colors.length === 2) {\n // linear interpolation\n assign = colors.map(function (c) {\n return c.lab();\n }), lab0 = assign[0], lab1 = assign[1];\n\n I = function I(t) {\n var lab = [0, 1, 2].map(function (i) {\n return lab0[i] + t * (lab1[i] - lab0[i]);\n });\n return new Color_1(lab, 'lab');\n };\n } else if (colors.length === 3) {\n // quadratic bezier interpolation\n assign$1 = colors.map(function (c) {\n return c.lab();\n }), lab0 = assign$1[0], lab1 = assign$1[1], lab2 = assign$1[2];\n\n I = function I(t) {\n var lab = [0, 1, 2].map(function (i) {\n return (1 - t) * (1 - t) * lab0[i] + 2 * (1 - t) * t * lab1[i] + t * t * lab2[i];\n });\n return new Color_1(lab, 'lab');\n };\n } else if (colors.length === 4) {\n // cubic bezier interpolation\n var lab3;\n assign$2 = colors.map(function (c) {\n return c.lab();\n }), lab0 = assign$2[0], lab1 = assign$2[1], lab2 = assign$2[2], lab3 = assign$2[3];\n\n I = function I(t) {\n var lab = [0, 1, 2].map(function (i) {\n return (1 - t) * (1 - t) * (1 - t) * lab0[i] + 3 * (1 - t) * (1 - t) * t * lab1[i] + 3 * (1 - t) * t * t * lab2[i] + t * t * t * lab3[i];\n });\n return new Color_1(lab, 'lab');\n };\n } else if (colors.length === 5) {\n var I0 = bezier(colors.slice(0, 3));\n var I1 = bezier(colors.slice(2, 5));\n\n I = function I(t) {\n if (t < 0.5) {\n return I0(t * 2);\n } else {\n return I1((t - 0.5) * 2);\n }\n };\n }\n\n return I;\n };\n\n var bezier_1 = function bezier_1(colors) {\n var f = bezier(colors);\n\n f.scale = function () {\n return scale(f);\n };\n\n return f;\n };\n /*\n * interpolates between a set of colors uzing a bezier spline\n * blend mode formulas taken from http://www.venture-ware.com/kevin/coding/lets-learn-math-photoshop-blend-modes/\n */\n\n\n var blend = function blend(bottom, top, mode) {\n if (!blend[mode]) {\n throw new Error('unknown blend mode ' + mode);\n }\n\n return blend[mode](bottom, top);\n };\n\n var blend_f = function blend_f(f) {\n return function (bottom, top) {\n var c0 = chroma_1(top).rgb();\n var c1 = chroma_1(bottom).rgb();\n return chroma_1.rgb(f(c0, c1));\n };\n };\n\n var each = function each(f) {\n return function (c0, c1) {\n var out = [];\n out[0] = f(c0[0], c1[0]);\n out[1] = f(c0[1], c1[1]);\n out[2] = f(c0[2], c1[2]);\n return out;\n };\n };\n\n var normal = function normal(a) {\n return a;\n };\n\n var multiply = function multiply(a, b) {\n return a * b / 255;\n };\n\n var darken$1 = function darken$1(a, b) {\n return a > b ? b : a;\n };\n\n var lighten = function lighten(a, b) {\n return a > b ? a : b;\n };\n\n var screen = function screen(a, b) {\n return 255 * (1 - (1 - a / 255) * (1 - b / 255));\n };\n\n var overlay = function overlay(a, b) {\n return b < 128 ? 2 * a * b / 255 : 255 * (1 - 2 * (1 - a / 255) * (1 - b / 255));\n };\n\n var burn = function burn(a, b) {\n return 255 * (1 - (1 - b / 255) / (a / 255));\n };\n\n var dodge = function dodge(a, b) {\n if (a === 255) {\n return 255;\n }\n\n a = 255 * (b / 255) / (1 - a / 255);\n return a > 255 ? 255 : a;\n }; // # add = (a,b) ->\n // # if (a + b > 255) then 255 else a + b\n\n\n blend.normal = blend_f(each(normal));\n blend.multiply = blend_f(each(multiply));\n blend.screen = blend_f(each(screen));\n blend.overlay = blend_f(each(overlay));\n blend.darken = blend_f(each(darken$1));\n blend.lighten = blend_f(each(lighten));\n blend.dodge = blend_f(each(dodge));\n blend.burn = blend_f(each(burn)); // blend.add = blend_f(each(add));\n\n var blend_1 = blend; // cubehelix interpolation\n // based on D.A. Green \"A colour scheme for the display of astronomical intensity images\"\n // http://astron-soc.in/bulletin/11June/289392011.pdf\n\n var type$k = utils.type;\n var clip_rgb$3 = utils.clip_rgb;\n var TWOPI$2 = utils.TWOPI;\n var pow$6 = Math.pow;\n var sin$2 = Math.sin;\n var cos$3 = Math.cos;\n\n var cubehelix = function cubehelix(start, rotations, hue, gamma, lightness) {\n if (start === void 0) start = 300;\n if (rotations === void 0) rotations = -1.5;\n if (hue === void 0) hue = 1;\n if (gamma === void 0) gamma = 1;\n if (lightness === void 0) lightness = [0, 1];\n var dh = 0,\n dl;\n\n if (type$k(lightness) === 'array') {\n dl = lightness[1] - lightness[0];\n } else {\n dl = 0;\n lightness = [lightness, lightness];\n }\n\n var f = function f(fract) {\n var a = TWOPI$2 * ((start + 120) / 360 + rotations * fract);\n var l = pow$6(lightness[0] + dl * fract, gamma);\n var h = dh !== 0 ? hue[0] + fract * dh : hue;\n var amp = h * l * (1 - l) / 2;\n var cos_a = cos$3(a);\n var sin_a = sin$2(a);\n var r = l + amp * (-0.14861 * cos_a + 1.78277 * sin_a);\n var g = l + amp * (-0.29227 * cos_a - 0.90649 * sin_a);\n var b = l + amp * (+1.97294 * cos_a);\n return chroma_1(clip_rgb$3([r * 255, g * 255, b * 255, 1]));\n };\n\n f.start = function (s) {\n if (s == null) {\n return start;\n }\n\n start = s;\n return f;\n };\n\n f.rotations = function (r) {\n if (r == null) {\n return rotations;\n }\n\n rotations = r;\n return f;\n };\n\n f.gamma = function (g) {\n if (g == null) {\n return gamma;\n }\n\n gamma = g;\n return f;\n };\n\n f.hue = function (h) {\n if (h == null) {\n return hue;\n }\n\n hue = h;\n\n if (type$k(hue) === 'array') {\n dh = hue[1] - hue[0];\n\n if (dh === 0) {\n hue = hue[1];\n }\n } else {\n dh = 0;\n }\n\n return f;\n };\n\n f.lightness = function (h) {\n if (h == null) {\n return lightness;\n }\n\n if (type$k(h) === 'array') {\n lightness = h;\n dl = h[1] - h[0];\n } else {\n lightness = [h, h];\n dl = 0;\n }\n\n return f;\n };\n\n f.scale = function () {\n return chroma_1.scale(f);\n };\n\n f.hue(hue);\n return f;\n };\n\n var digits = '0123456789abcdef';\n var floor$2 = Math.floor;\n var random = Math.random;\n\n var random_1 = function random_1() {\n var code = '#';\n\n for (var i = 0; i < 6; i++) {\n code += digits.charAt(floor$2(random() * 16));\n }\n\n return new Color_1(code, 'hex');\n };\n\n var log$1 = Math.log;\n var pow$7 = Math.pow;\n var floor$3 = Math.floor;\n var abs = Math.abs;\n\n var analyze = function analyze(data, key) {\n if (key === void 0) key = null;\n var r = {\n min: Number.MAX_VALUE,\n max: Number.MAX_VALUE * -1,\n sum: 0,\n values: [],\n count: 0\n };\n\n if (type(data) === 'object') {\n data = Object.values(data);\n }\n\n data.forEach(function (val) {\n if (key && type(val) === 'object') {\n val = val[key];\n }\n\n if (val !== undefined && val !== null && !isNaN(val)) {\n r.values.push(val);\n r.sum += val;\n\n if (val < r.min) {\n r.min = val;\n }\n\n if (val > r.max) {\n r.max = val;\n }\n\n r.count += 1;\n }\n });\n r.domain = [r.min, r.max];\n\n r.limits = function (mode, num) {\n return limits(r, mode, num);\n };\n\n return r;\n };\n\n var limits = function limits(data, mode, num) {\n if (mode === void 0) mode = 'equal';\n if (num === void 0) num = 7;\n\n if (type(data) == 'array') {\n data = analyze(data);\n }\n\n var min = data.min;\n var max = data.max;\n var values = data.values.sort(function (a, b) {\n return a - b;\n });\n\n if (num === 1) {\n return [min, max];\n }\n\n var limits = [];\n\n if (mode.substr(0, 1) === 'c') {\n // continuous\n limits.push(min);\n limits.push(max);\n }\n\n if (mode.substr(0, 1) === 'e') {\n // equal interval\n limits.push(min);\n\n for (var i = 1; i < num; i++) {\n limits.push(min + i / num * (max - min));\n }\n\n limits.push(max);\n } else if (mode.substr(0, 1) === 'l') {\n // log scale\n if (min <= 0) {\n throw new Error('Logarithmic scales are only possible for values > 0');\n }\n\n var min_log = Math.LOG10E * log$1(min);\n var max_log = Math.LOG10E * log$1(max);\n limits.push(min);\n\n for (var i$1 = 1; i$1 < num; i$1++) {\n limits.push(pow$7(10, min_log + i$1 / num * (max_log - min_log)));\n }\n\n limits.push(max);\n } else if (mode.substr(0, 1) === 'q') {\n // quantile scale\n limits.push(min);\n\n for (var i$2 = 1; i$2 < num; i$2++) {\n var p = (values.length - 1) * i$2 / num;\n var pb = floor$3(p);\n\n if (pb === p) {\n limits.push(values[pb]);\n } else {\n // p > pb\n var pr = p - pb;\n limits.push(values[pb] * (1 - pr) + values[pb + 1] * pr);\n }\n }\n\n limits.push(max);\n } else if (mode.substr(0, 1) === 'k') {\n // k-means clustering\n\n /*\n implementation based on\n http://code.google.com/p/figue/source/browse/trunk/figue.js#336\n simplified for 1-d input values\n */\n var cluster;\n var n = values.length;\n var assignments = new Array(n);\n var clusterSizes = new Array(num);\n var repeat = true;\n var nb_iters = 0;\n var centroids = null; // get seed values\n\n centroids = [];\n centroids.push(min);\n\n for (var i$3 = 1; i$3 < num; i$3++) {\n centroids.push(min + i$3 / num * (max - min));\n }\n\n centroids.push(max);\n\n while (repeat) {\n // assignment step\n for (var j = 0; j < num; j++) {\n clusterSizes[j] = 0;\n }\n\n for (var i$4 = 0; i$4 < n; i$4++) {\n var value = values[i$4];\n var mindist = Number.MAX_VALUE;\n var best = void 0;\n\n for (var j$1 = 0; j$1 < num; j$1++) {\n var dist = abs(centroids[j$1] - value);\n\n if (dist < mindist) {\n mindist = dist;\n best = j$1;\n }\n\n clusterSizes[best]++;\n assignments[i$4] = best;\n }\n } // update centroids step\n\n\n var newCentroids = new Array(num);\n\n for (var j$2 = 0; j$2 < num; j$2++) {\n newCentroids[j$2] = null;\n }\n\n for (var i$5 = 0; i$5 < n; i$5++) {\n cluster = assignments[i$5];\n\n if (newCentroids[cluster] === null) {\n newCentroids[cluster] = values[i$5];\n } else {\n newCentroids[cluster] += values[i$5];\n }\n }\n\n for (var j$3 = 0; j$3 < num; j$3++) {\n newCentroids[j$3] *= 1 / clusterSizes[j$3];\n } // check convergence\n\n\n repeat = false;\n\n for (var j$4 = 0; j$4 < num; j$4++) {\n if (newCentroids[j$4] !== centroids[j$4]) {\n repeat = true;\n break;\n }\n }\n\n centroids = newCentroids;\n nb_iters++;\n\n if (nb_iters > 200) {\n repeat = false;\n }\n } // finished k-means clustering\n // the next part is borrowed from gabrielflor.it\n\n\n var kClusters = {};\n\n for (var j$5 = 0; j$5 < num; j$5++) {\n kClusters[j$5] = [];\n }\n\n for (var i$6 = 0; i$6 < n; i$6++) {\n cluster = assignments[i$6];\n kClusters[cluster].push(values[i$6]);\n }\n\n var tmpKMeansBreaks = [];\n\n for (var j$6 = 0; j$6 < num; j$6++) {\n tmpKMeansBreaks.push(kClusters[j$6][0]);\n tmpKMeansBreaks.push(kClusters[j$6][kClusters[j$6].length - 1]);\n }\n\n tmpKMeansBreaks = tmpKMeansBreaks.sort(function (a, b) {\n return a - b;\n });\n limits.push(tmpKMeansBreaks[0]);\n\n for (var i$7 = 1; i$7 < tmpKMeansBreaks.length; i$7 += 2) {\n var v = tmpKMeansBreaks[i$7];\n\n if (!isNaN(v) && limits.indexOf(v) === -1) {\n limits.push(v);\n }\n }\n }\n\n return limits;\n };\n\n var analyze_1 = {\n analyze: analyze,\n limits: limits\n };\n\n var contrast = function contrast(a, b) {\n // WCAG contrast ratio\n // see http://www.w3.org/TR/2008/REC-WCAG20-20081211/#contrast-ratiodef\n a = new Color_1(a);\n b = new Color_1(b);\n var l1 = a.luminance();\n var l2 = b.luminance();\n return l1 > l2 ? (l1 + 0.05) / (l2 + 0.05) : (l2 + 0.05) / (l1 + 0.05);\n };\n\n var sqrt$4 = Math.sqrt;\n var atan2$2 = Math.atan2;\n var abs$1 = Math.abs;\n var cos$4 = Math.cos;\n var PI$2 = Math.PI;\n\n var deltaE = function deltaE(a, b, L, C) {\n if (L === void 0) L = 1;\n if (C === void 0) C = 1; // Delta E (CMC)\n // see http://www.brucelindbloom.com/index.html?Eqn_DeltaE_CMC.html\n\n a = new Color_1(a);\n b = new Color_1(b);\n var ref = Array.from(a.lab());\n var L1 = ref[0];\n var a1 = ref[1];\n var b1 = ref[2];\n var ref$1 = Array.from(b.lab());\n var L2 = ref$1[0];\n var a2 = ref$1[1];\n var b2 = ref$1[2];\n var c1 = sqrt$4(a1 * a1 + b1 * b1);\n var c2 = sqrt$4(a2 * a2 + b2 * b2);\n var sl = L1 < 16.0 ? 0.511 : 0.040975 * L1 / (1.0 + 0.01765 * L1);\n var sc = 0.0638 * c1 / (1.0 + 0.0131 * c1) + 0.638;\n var h1 = c1 < 0.000001 ? 0.0 : atan2$2(b1, a1) * 180.0 / PI$2;\n\n while (h1 < 0) {\n h1 += 360;\n }\n\n while (h1 >= 360) {\n h1 -= 360;\n }\n\n var t = h1 >= 164.0 && h1 <= 345.0 ? 0.56 + abs$1(0.2 * cos$4(PI$2 * (h1 + 168.0) / 180.0)) : 0.36 + abs$1(0.4 * cos$4(PI$2 * (h1 + 35.0) / 180.0));\n var c4 = c1 * c1 * c1 * c1;\n var f = sqrt$4(c4 / (c4 + 1900.0));\n var sh = sc * (f * t + 1.0 - f);\n var delL = L1 - L2;\n var delC = c1 - c2;\n var delA = a1 - a2;\n var delB = b1 - b2;\n var dH2 = delA * delA + delB * delB - delC * delC;\n var v1 = delL / (L * sl);\n var v2 = delC / (C * sc);\n var v3 = sh;\n return sqrt$4(v1 * v1 + v2 * v2 + dH2 / (v3 * v3));\n }; // simple Euclidean distance\n\n\n var distance = function distance(a, b, mode) {\n if (mode === void 0) mode = 'lab'; // Delta E (CIE 1976)\n // see http://www.brucelindbloom.com/index.html?Equations.html\n\n a = new Color_1(a);\n b = new Color_1(b);\n var l1 = a.get(mode);\n var l2 = b.get(mode);\n var sum_sq = 0;\n\n for (var i in l1) {\n var d = (l1[i] || 0) - (l2[i] || 0);\n sum_sq += d * d;\n }\n\n return Math.sqrt(sum_sq);\n };\n\n var valid = function valid() {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n try {\n new (Function.prototype.bind.apply(Color_1, [null].concat(args)))();\n return true;\n } catch (e) {\n return false;\n }\n }; // some pre-defined color scales:\n\n\n var scales = {\n cool: function cool() {\n return scale([chroma_1.hsl(180, 1, .9), chroma_1.hsl(250, .7, .4)]);\n },\n hot: function hot() {\n return scale(['#000', '#f00', '#ff0', '#fff'], [0, .25, .75, 1]).mode('rgb');\n }\n };\n /**\n ColorBrewer colors for chroma.js\n Copyright (c) 2002 Cynthia Brewer, Mark Harrower, and The\n Pennsylvania State University.\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n http://www.apache.org/licenses/LICENSE-2.0\n Unless required by applicable law or agreed to in writing, software distributed\n under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n CONDITIONS OF ANY KIND, either express or implied. See the License for the\n specific language governing permissions and limitations under the License.\n */\n\n var colorbrewer = {\n // sequential\n OrRd: ['#fff7ec', '#fee8c8', '#fdd49e', '#fdbb84', '#fc8d59', '#ef6548', '#d7301f', '#b30000', '#7f0000'],\n PuBu: ['#fff7fb', '#ece7f2', '#d0d1e6', '#a6bddb', '#74a9cf', '#3690c0', '#0570b0', '#045a8d', '#023858'],\n BuPu: ['#f7fcfd', '#e0ecf4', '#bfd3e6', '#9ebcda', '#8c96c6', '#8c6bb1', '#88419d', '#810f7c', '#4d004b'],\n Oranges: ['#fff5eb', '#fee6ce', '#fdd0a2', '#fdae6b', '#fd8d3c', '#f16913', '#d94801', '#a63603', '#7f2704'],\n BuGn: ['#f7fcfd', '#e5f5f9', '#ccece6', '#99d8c9', '#66c2a4', '#41ae76', '#238b45', '#006d2c', '#00441b'],\n YlOrBr: ['#ffffe5', '#fff7bc', '#fee391', '#fec44f', '#fe9929', '#ec7014', '#cc4c02', '#993404', '#662506'],\n YlGn: ['#ffffe5', '#f7fcb9', '#d9f0a3', '#addd8e', '#78c679', '#41ab5d', '#238443', '#006837', '#004529'],\n Reds: ['#fff5f0', '#fee0d2', '#fcbba1', '#fc9272', '#fb6a4a', '#ef3b2c', '#cb181d', '#a50f15', '#67000d'],\n RdPu: ['#fff7f3', '#fde0dd', '#fcc5c0', '#fa9fb5', '#f768a1', '#dd3497', '#ae017e', '#7a0177', '#49006a'],\n Greens: ['#f7fcf5', '#e5f5e0', '#c7e9c0', '#a1d99b', '#74c476', '#41ab5d', '#238b45', '#006d2c', '#00441b'],\n YlGnBu: ['#ffffd9', '#edf8b1', '#c7e9b4', '#7fcdbb', '#41b6c4', '#1d91c0', '#225ea8', '#253494', '#081d58'],\n Purples: ['#fcfbfd', '#efedf5', '#dadaeb', '#bcbddc', '#9e9ac8', '#807dba', '#6a51a3', '#54278f', '#3f007d'],\n GnBu: ['#f7fcf0', '#e0f3db', '#ccebc5', '#a8ddb5', '#7bccc4', '#4eb3d3', '#2b8cbe', '#0868ac', '#084081'],\n Greys: ['#ffffff', '#f0f0f0', '#d9d9d9', '#bdbdbd', '#969696', '#737373', '#525252', '#252525', '#000000'],\n YlOrRd: ['#ffffcc', '#ffeda0', '#fed976', '#feb24c', '#fd8d3c', '#fc4e2a', '#e31a1c', '#bd0026', '#800026'],\n PuRd: ['#f7f4f9', '#e7e1ef', '#d4b9da', '#c994c7', '#df65b0', '#e7298a', '#ce1256', '#980043', '#67001f'],\n Blues: ['#f7fbff', '#deebf7', '#c6dbef', '#9ecae1', '#6baed6', '#4292c6', '#2171b5', '#08519c', '#08306b'],\n PuBuGn: ['#fff7fb', '#ece2f0', '#d0d1e6', '#a6bddb', '#67a9cf', '#3690c0', '#02818a', '#016c59', '#014636'],\n Viridis: ['#440154', '#482777', '#3f4a8a', '#31678e', '#26838f', '#1f9d8a', '#6cce5a', '#b6de2b', '#fee825'],\n // diverging\n Spectral: ['#9e0142', '#d53e4f', '#f46d43', '#fdae61', '#fee08b', '#ffffbf', '#e6f598', '#abdda4', '#66c2a5', '#3288bd', '#5e4fa2'],\n RdYlGn: ['#a50026', '#d73027', '#f46d43', '#fdae61', '#fee08b', '#ffffbf', '#d9ef8b', '#a6d96a', '#66bd63', '#1a9850', '#006837'],\n RdBu: ['#67001f', '#b2182b', '#d6604d', '#f4a582', '#fddbc7', '#f7f7f7', '#d1e5f0', '#92c5de', '#4393c3', '#2166ac', '#053061'],\n PiYG: ['#8e0152', '#c51b7d', '#de77ae', '#f1b6da', '#fde0ef', '#f7f7f7', '#e6f5d0', '#b8e186', '#7fbc41', '#4d9221', '#276419'],\n PRGn: ['#40004b', '#762a83', '#9970ab', '#c2a5cf', '#e7d4e8', '#f7f7f7', '#d9f0d3', '#a6dba0', '#5aae61', '#1b7837', '#00441b'],\n RdYlBu: ['#a50026', '#d73027', '#f46d43', '#fdae61', '#fee090', '#ffffbf', '#e0f3f8', '#abd9e9', '#74add1', '#4575b4', '#313695'],\n BrBG: ['#543005', '#8c510a', '#bf812d', '#dfc27d', '#f6e8c3', '#f5f5f5', '#c7eae5', '#80cdc1', '#35978f', '#01665e', '#003c30'],\n RdGy: ['#67001f', '#b2182b', '#d6604d', '#f4a582', '#fddbc7', '#ffffff', '#e0e0e0', '#bababa', '#878787', '#4d4d4d', '#1a1a1a'],\n PuOr: ['#7f3b08', '#b35806', '#e08214', '#fdb863', '#fee0b6', '#f7f7f7', '#d8daeb', '#b2abd2', '#8073ac', '#542788', '#2d004b'],\n // qualitative\n Set2: ['#66c2a5', '#fc8d62', '#8da0cb', '#e78ac3', '#a6d854', '#ffd92f', '#e5c494', '#b3b3b3'],\n Accent: ['#7fc97f', '#beaed4', '#fdc086', '#ffff99', '#386cb0', '#f0027f', '#bf5b17', '#666666'],\n Set1: ['#e41a1c', '#377eb8', '#4daf4a', '#984ea3', '#ff7f00', '#ffff33', '#a65628', '#f781bf', '#999999'],\n Set3: ['#8dd3c7', '#ffffb3', '#bebada', '#fb8072', '#80b1d3', '#fdb462', '#b3de69', '#fccde5', '#d9d9d9', '#bc80bd', '#ccebc5', '#ffed6f'],\n Dark2: ['#1b9e77', '#d95f02', '#7570b3', '#e7298a', '#66a61e', '#e6ab02', '#a6761d', '#666666'],\n Paired: ['#a6cee3', '#1f78b4', '#b2df8a', '#33a02c', '#fb9a99', '#e31a1c', '#fdbf6f', '#ff7f00', '#cab2d6', '#6a3d9a', '#ffff99', '#b15928'],\n Pastel2: ['#b3e2cd', '#fdcdac', '#cbd5e8', '#f4cae4', '#e6f5c9', '#fff2ae', '#f1e2cc', '#cccccc'],\n Pastel1: ['#fbb4ae', '#b3cde3', '#ccebc5', '#decbe4', '#fed9a6', '#ffffcc', '#e5d8bd', '#fddaec', '#f2f2f2']\n }; // add lowercase aliases for case-insensitive matches\n\n for (var i$1 = 0, list$1 = Object.keys(colorbrewer); i$1 < list$1.length; i$1 += 1) {\n var key = list$1[i$1];\n colorbrewer[key.toLowerCase()] = colorbrewer[key];\n }\n\n var colorbrewer_1 = colorbrewer; // feel free to comment out anything to rollup\n // a smaller chroma.js built\n // io --\x3e convert colors\n // operators --\x3e modify existing Colors\n // interpolators\n // generators -- > create new colors\n\n chroma_1.average = average;\n chroma_1.bezier = bezier_1;\n chroma_1.blend = blend_1;\n chroma_1.cubehelix = cubehelix;\n chroma_1.mix = chroma_1.interpolate = mix;\n chroma_1.random = random_1;\n chroma_1.scale = scale; // other utility methods\n\n chroma_1.analyze = analyze_1.analyze;\n chroma_1.contrast = contrast;\n chroma_1.deltaE = deltaE;\n chroma_1.distance = distance;\n chroma_1.limits = analyze_1.limits;\n chroma_1.valid = valid; // scale\n\n chroma_1.scales = scales; // colors\n\n chroma_1.colors = w3cx11_1;\n chroma_1.brewer = colorbrewer_1;\n var chroma_js = chroma_1;\n return chroma_js;\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvY2hyb21hLmpzP2JmNDQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUVBQW1FO0FBQ25FLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsS0FBNEQsZ0NBQWdDLENBQXdGO0FBQ3RMLENBQUM7QUFDRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsUUFBUTtBQUMzQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJOzs7QUFHSjs7QUFFQSxxSEFBcUgsaUJBQWlCO0FBQ3RJO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw2Q0FBNkM7O0FBRTdDO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7OztBQUdBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLE9BQU87OztBQUdQLDhDQUE4QyxpQkFBaUI7QUFDL0Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7OztBQUdMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4Qjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEscUJBQXFCLE9BQU87QUFDNUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTyxZQUFZO0FBQ25CO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQTs7QUFFQSxxQkFBcUIsT0FBTztBQUM1QjtBQUNBOztBQUVBLGlCQUFpQjs7QUFFakI7QUFDQSxLQUFLOzs7QUFHTDtBQUNBOztBQUVBLHVCQUF1QixTQUFTO0FBQ2hDO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOzs7QUFHTDtBQUNBOztBQUVBLHVCQUF1QixTQUFTO0FBQ2hDO0FBQ0E7O0FBRUEsbUJBQW1COztBQUVuQjtBQUNBLEtBQUs7OztBQUdMO0FBQ0E7O0FBRUEsdUJBQXVCLFNBQVM7QUFDaEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCOztBQUV2QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0M7O0FBRXhDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGdDQUFnQyxFQUFFLGFBQWEsRUFBRTtBQUNqRCxpQ0FBaUMsRUFBRSxhQUFhLEVBQUU7O0FBRWxEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOzs7QUFHUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOzs7QUFHUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixNQUFNO0FBQ3RCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtEQUErRDs7QUFFL0Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGlEQUFpRCxpQkFBaUI7QUFDbEU7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7O0FBR1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7O0FBR0o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOzs7QUFHSjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FB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OztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQzs7QUFFbkMsc0JBQXNCO0FBQ3RCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxtQkFBbUIsT0FBTztBQUMxQjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxxQkFBcUIsU0FBUztBQUM5QjtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIsV0FBVztBQUNsQztBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUEsdUJBQXVCLFdBQVc7QUFDbEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQjs7QUFFM0I7QUFDQTs7QUFFQSx1QkFBdUIsV0FBVztBQUNsQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSx1QkFBdUIsU0FBUztBQUNoQztBQUNBOztBQUVBLHlCQUF5QixTQUFTO0FBQ2xDO0FBQ0E7QUFDQTs7QUFFQSwyQkFBMkIsV0FBVztBQUN0Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOzs7QUFHVDs7QUFFQSx5QkFBeUIsV0FBVztBQUNwQztBQUNBOztBQUVBLHlCQUF5QixTQUFTO0FBQ2xDOztBQUVBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBOztBQUVBLHlCQUF5QixXQUFXO0FBQ3BDO0FBQ0EsU0FBUzs7O0FBR1Q7O0FBRUEseUJBQXlCLFdBQVc7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7O0FBR0E7O0FBRUEsdUJBQXVCLFdBQVc7QUFDbEM7QUFDQTs7QUFFQSx1QkFBdUIsU0FBUztBQUNoQztBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsdUJBQXVCLFdBQVc7QUFDbEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUEsdUJBQXVCLDhCQUE4QjtBQUNyRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDRCQUE0QjtBQUM1Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0Esc0NBQXNDO0FBQ3RDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKLHNEQUFzRCxxQkFBcUI7QUFDM0U7QUFDQTtBQUNBOztBQUVBLGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5Qjs7QUFFekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5Qjs7QUFFekIsMkJBQTJCOztBQUUzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMzg3My5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogY2hyb21hLmpzIC0gSmF2YVNjcmlwdCBsaWJyYXJ5IGZvciBjb2xvciBjb252ZXJzaW9uc1xuICpcbiAqIENvcHlyaWdodCAoYykgMjAxMS0yMDE5LCBHcmVnb3IgQWlzY2hcbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcbiAqXG4gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAqIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICpcbiAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSxcbiAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb25cbiAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuICpcbiAqIDMuIFRoZSBuYW1lIEdyZWdvciBBaXNjaCBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzXG4gKiBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cbiAqXG4gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIlxuICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRVxuICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG4gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBHUkVHT1IgQUlTQ0ggT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCxcbiAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLFxuICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSxcbiAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUllcbiAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HXG4gKiBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsXG4gKiBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICpcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqXG4gKiBjaHJvbWEuanMgaW5jbHVkZXMgY29sb3JzIGZyb20gY29sb3JicmV3ZXIyLm9yZywgd2hpY2ggYXJlIHJlbGVhc2VkIHVuZGVyXG4gKiB0aGUgZm9sbG93aW5nIGxpY2Vuc2U6XG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDAyIEN5bnRoaWEgQnJld2VyLCBNYXJrIEhhcnJvd2VyLFxuICogYW5kIFRoZSBQZW5uc3lsdmFuaWEgU3RhdGUgVW5pdmVyc2l0eS5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsXG4gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhblxuICogXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCxcbiAqIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljXG4gKiBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICpcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICpcbiAqIE5hbWVkIGNvbG9ycyBhcmUgdGFrZW4gZnJvbSBYMTEgQ29sb3IgTmFtZXMuXG4gKiBodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLWNvbG9yLyNzdmctY29sb3JcbiAqXG4gKiBAcHJlc2VydmVcbiAqL1xuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCkgOiB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoZmFjdG9yeSkgOiBnbG9iYWwuY2hyb21hID0gZmFjdG9yeSgpO1xufSkodGhpcywgZnVuY3Rpb24gKCkge1xuICAndXNlIHN0cmljdCc7XG5cbiAgdmFyIGxpbWl0ID0gZnVuY3Rpb24gbGltaXQoeCwgbWluLCBtYXgpIHtcbiAgICBpZiAobWluID09PSB2b2lkIDApIG1pbiA9IDA7XG4gICAgaWYgKG1heCA9PT0gdm9pZCAwKSBtYXggPSAxO1xuICAgIHJldHVybiB4IDwgbWluID8gbWluIDogeCA+IG1heCA/IG1heCA6IHg7XG4gIH07XG5cbiAgdmFyIGNsaXBfcmdiID0gZnVuY3Rpb24gY2xpcF9yZ2IocmdiKSB7XG4gICAgcmdiLl9jbGlwcGVkID0gZmFsc2U7XG4gICAgcmdiLl91bmNsaXBwZWQgPSByZ2Iuc2xpY2UoMCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8PSAzOyBpKyspIHtcbiAgICAgIGlmIChpIDwgMykge1xuICAgICAgICBpZiAocmdiW2ldIDwgMCB8fCByZ2JbaV0gPiAyNTUpIHtcbiAgICAgICAgICByZ2IuX2NsaXBwZWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmdiW2ldID0gbGltaXQocmdiW2ldLCAwLCAyNTUpO1xuICAgICAgfSBlbHNlIGlmIChpID09PSAzKSB7XG4gICAgICAgIHJnYltpXSA9IGxpbWl0KHJnYltpXSwgMCwgMSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJnYjtcbiAgfTsgLy8gcG9ydGVkIGZyb20galF1ZXJ5J3MgJC50eXBlXG5cblxuICB2YXIgY2xhc3NUb1R5cGUgPSB7fTtcblxuICBmb3IgKHZhciBpID0gMCwgbGlzdCA9IFsnQm9vbGVhbicsICdOdW1iZXInLCAnU3RyaW5nJywgJ0Z1bmN0aW9uJywgJ0FycmF5JywgJ0RhdGUnLCAnUmVnRXhwJywgJ1VuZGVmaW5lZCcsICdOdWxsJ107IGkgPCBsaXN0Lmxlbmd0aDsgaSArPSAxKSB7XG4gICAgdmFyIG5hbWUgPSBsaXN0W2ldO1xuICAgIGNsYXNzVG9UeXBlW1wiW29iamVjdCBcIiArIG5hbWUgKyBcIl1cIl0gPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gIH1cblxuICB2YXIgdHlwZSA9IGZ1bmN0aW9uIHR5cGUob2JqKSB7XG4gICAgcmV0dXJuIGNsYXNzVG9UeXBlW09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopXSB8fCBcIm9iamVjdFwiO1xuICB9O1xuXG4gIHZhciB1bnBhY2sgPSBmdW5jdGlvbiB1bnBhY2soYXJncywga2V5T3JkZXIpIHtcbiAgICBpZiAoa2V5T3JkZXIgPT09IHZvaWQgMCkga2V5T3JkZXIgPSBudWxsOyAvLyBpZiBjYWxsZWQgd2l0aCBtb3JlIHRoYW4gMyBhcmd1bWVudHMsIHdlIHJldHVybiB0aGUgYXJndW1lbnRzXG5cbiAgICBpZiAoYXJncy5sZW5ndGggPj0gMykge1xuICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3MpO1xuICAgIH0gLy8gd2l0aCBsZXNzIHRoYW4gMyBhcmdzIHdlIGNoZWNrIGlmIGZpcnN0IGFyZyBpcyBvYmplY3RcbiAgICAvLyBhbmQgdXNlIHRoZSBrZXlPcmRlciBzdHJpbmcgdG8gZXh0cmFjdCBhbmQgc29ydCBwcm9wZXJ0aWVzXG5cblxuICAgIGlmICh0eXBlKGFyZ3NbMF0pID09ICdvYmplY3QnICYmIGtleU9yZGVyKSB7XG4gICAgICByZXR1cm4ga2V5T3JkZXIuc3BsaXQoJycpLmZpbHRlcihmdW5jdGlvbiAoaykge1xuICAgICAgICByZXR1cm4gYXJnc1swXVtrXSAhPT0gdW5kZWZpbmVkO1xuICAgICAgfSkubWFwKGZ1bmN0aW9uIChrKSB7XG4gICAgICAgIHJldHVybiBhcmdzWzBdW2tdO1xuICAgICAgfSk7XG4gICAgfSAvLyBvdGhlcndpc2Ugd2UganVzdCByZXR1cm4gdGhlIGZpcnN0IGFyZ3VtZW50XG4gICAgLy8gKHdoaWNoIHdlIHN1cHBvc2UgaXMgYW4gYXJyYXkgb2YgYXJncylcblxuXG4gICAgcmV0dXJuIGFyZ3NbMF07XG4gIH07XG5cbiAgdmFyIGxhc3QgPSBmdW5jdGlvbiBsYXN0KGFyZ3MpIHtcbiAgICBpZiAoYXJncy5sZW5ndGggPCAyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgbCA9IGFyZ3MubGVuZ3RoIC0gMTtcblxuICAgIGlmICh0eXBlKGFyZ3NbbF0pID09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gYXJnc1tsXS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9O1xuXG4gIHZhciBQSSA9IE1hdGguUEk7XG4gIHZhciB1dGlscyA9IHtcbiAgICBjbGlwX3JnYjogY2xpcF9yZ2IsXG4gICAgbGltaXQ6IGxpbWl0LFxuICAgIHR5cGU6IHR5cGUsXG4gICAgdW5wYWNrOiB1bnBhY2ssXG4gICAgbGFzdDogbGFzdCxcbiAgICBQSTogUEksXG4gICAgVFdPUEk6IFBJICogMixcbiAgICBQSVRISVJEOiBQSSAvIDMsXG4gICAgREVHMlJBRDogUEkgLyAxODAsXG4gICAgUkFEMkRFRzogMTgwIC8gUElcbiAgfTtcbiAgdmFyIGlucHV0ID0ge1xuICAgIGZvcm1hdDoge30sXG4gICAgYXV0b2RldGVjdDogW11cbiAgfTtcbiAgdmFyIGxhc3QkMSA9IHV0aWxzLmxhc3Q7XG4gIHZhciBjbGlwX3JnYiQxID0gdXRpbHMuY2xpcF9yZ2I7XG4gIHZhciB0eXBlJDEgPSB1dGlscy50eXBlO1xuXG4gIHZhciBDb2xvciA9IGZ1bmN0aW9uIENvbG9yKCkge1xuICAgIHZhciBhcmdzID0gW10sXG4gICAgICAgIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cbiAgICB3aGlsZSAobGVuLS0pIHtcbiAgICAgIGFyZ3NbbGVuXSA9IGFyZ3VtZW50c1tsZW5dO1xuICAgIH1cblxuICAgIHZhciBtZSA9IHRoaXM7XG5cbiAgICBpZiAodHlwZSQxKGFyZ3NbMF0pID09PSAnb2JqZWN0JyAmJiBhcmdzWzBdLmNvbnN0cnVjdG9yICYmIGFyZ3NbMF0uY29uc3RydWN0b3IgPT09IHRoaXMuY29uc3RydWN0b3IpIHtcbiAgICAgIC8vIHRoZSBhcmd1bWVudCBpcyBhbHJlYWR5IGEgQ29sb3IgaW5zdGFuY2VcbiAgICAgIHJldHVybiBhcmdzWzBdO1xuICAgIH0gLy8gbGFzdCBhcmd1bWVudCBjb3VsZCBiZSB0aGUgbW9kZVxuXG5cbiAgICB2YXIgbW9kZSA9IGxhc3QkMShhcmdzKTtcbiAgICB2YXIgYXV0b2RldGVjdCA9IGZhbHNlO1xuXG4gICAgaWYgKCFtb2RlKSB7XG4gICAgICBhdXRvZGV0ZWN0ID0gdHJ1ZTtcblxuICAgICAgaWYgKCFpbnB1dC5zb3J0ZWQpIHtcbiAgICAgICAgaW5wdXQuYXV0b2RldGVjdCA9IGlucHV0LmF1dG9kZXRlY3Quc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgIHJldHVybiBiLnAgLSBhLnA7XG4gICAgICAgIH0pO1xuICAgICAgICBpbnB1dC5zb3J0ZWQgPSB0cnVlO1xuICAgICAgfSAvLyBhdXRvLWRldGVjdCBmb3JtYXRcblxuXG4gICAgICBmb3IgKHZhciBpID0gMCwgbGlzdCA9IGlucHV0LmF1dG9kZXRlY3Q7IGkgPCBsaXN0Lmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIHZhciBjaGsgPSBsaXN0W2ldO1xuICAgICAgICBtb2RlID0gY2hrLnRlc3QuYXBwbHkoY2hrLCBhcmdzKTtcblxuICAgICAgICBpZiAobW9kZSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlucHV0LmZvcm1hdFttb2RlXSkge1xuICAgICAgdmFyIHJnYiA9IGlucHV0LmZvcm1hdFttb2RlXS5hcHBseShudWxsLCBhdXRvZGV0ZWN0ID8gYXJncyA6IGFyZ3Muc2xpY2UoMCwgLTEpKTtcbiAgICAgIG1lLl9yZ2IgPSBjbGlwX3JnYiQxKHJnYik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndW5rbm93biBmb3JtYXQ6ICcgKyBhcmdzKTtcbiAgICB9IC8vIGFkZCBhbHBoYSBjaGFubmVsXG5cblxuICAgIGlmIChtZS5fcmdiLmxlbmd0aCA9PT0gMykge1xuICAgICAgbWUuX3JnYi5wdXNoKDEpO1xuICAgIH1cbiAgfTtcblxuICBDb2xvci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICBpZiAodHlwZSQxKHRoaXMuaGV4KSA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gdGhpcy5oZXgoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gXCJbXCIgKyB0aGlzLl9yZ2Iuam9pbignLCcpICsgXCJdXCI7XG4gIH07XG5cbiAgdmFyIENvbG9yXzEgPSBDb2xvcjtcblxuICB2YXIgY2hyb21hID0gZnVuY3Rpb24gY2hyb21hKCkge1xuICAgIHZhciBhcmdzID0gW10sXG4gICAgICAgIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cbiAgICB3aGlsZSAobGVuLS0pIHtcbiAgICAgIGFyZ3NbbGVuXSA9IGFyZ3VtZW50c1tsZW5dO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KGNocm9tYS5Db2xvciwgW251bGxdLmNvbmNhdChhcmdzKSkpKCk7XG4gIH07XG5cbiAgY2hyb21hLkNvbG9yID0gQ29sb3JfMTtcbiAgY2hyb21hLnZlcnNpb24gPSAnMi4xLjInO1xuICB2YXIgY2hyb21hXzEgPSBjaHJvbWE7XG4gIHZhciB1bnBhY2skMSA9IHV0aWxzLnVucGFjaztcbiAgdmFyIG1heCA9IE1hdGgubWF4O1xuXG4gIHZhciByZ2IyY215ayA9IGZ1bmN0aW9uIHJnYjJjbXlrKCkge1xuICAgIHZhciBhcmdzID0gW10sXG4gICAgICAgIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cbiAgICB3aGlsZSAobGVuLS0pIHtcbiAgICAgIGFyZ3NbbGVuXSA9IGFyZ3VtZW50c1tsZW5dO1xuICAgIH1cblxuICAgIHZhciByZWYgPSB1bnBhY2skMShhcmdzLCAncmdiJyk7XG4gICAgdmFyIHIgPSByZWZbMF07XG4gICAgdmFyIGcgPSByZWZbMV07XG4gICAgdmFyIGIgPSByZWZbMl07XG4gICAgciA9IHIgLyAyNTU7XG4gICAgZyA9IGcgLyAyNTU7XG4gICAgYiA9IGIgLyAyNTU7XG4gICAgdmFyIGsgPSAxIC0gbWF4KHIsIG1heChnLCBiKSk7XG4gICAgdmFyIGYgPSBrIDwgMSA/IDEgLyAoMSAtIGspIDogMDtcbiAgICB2YXIgYyA9ICgxIC0gciAtIGspICogZjtcbiAgICB2YXIgbSA9ICgxIC0gZyAtIGspICogZjtcbiAgICB2YXIgeSA9ICgxIC0gYiAtIGspICogZjtcbiAgICByZXR1cm4gW2MsIG0sIHksIGtdO1xuICB9O1xuXG4gIHZhciByZ2IyY215a18xID0gcmdiMmNteWs7XG4gIHZhciB1bnBhY2skMiA9IHV0aWxzLnVucGFjaztcblxuICB2YXIgY215azJyZ2IgPSBmdW5jdGlvbiBjbXlrMnJnYigpIHtcbiAgICB2YXIgYXJncyA9IFtdLFxuICAgICAgICBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGxlbi0tKSB7XG4gICAgICBhcmdzW2xlbl0gPSBhcmd1bWVudHNbbGVuXTtcbiAgICB9XG5cbiAgICBhcmdzID0gdW5wYWNrJDIoYXJncywgJ2NteWsnKTtcbiAgICB2YXIgYyA9IGFyZ3NbMF07XG4gICAgdmFyIG0gPSBhcmdzWzFdO1xuICAgIHZhciB5ID0gYXJnc1syXTtcbiAgICB2YXIgayA9IGFyZ3NbM107XG4gICAgdmFyIGFscGhhID0gYXJncy5sZW5ndGggPiA0ID8gYXJnc1s0XSA6IDE7XG5cbiAgICBpZiAoayA9PT0gMSkge1xuICAgICAgcmV0dXJuIFswLCAwLCAwLCBhbHBoYV07XG4gICAgfVxuXG4gICAgcmV0dXJuIFtjID49IDEgPyAwIDogMjU1ICogKDEgLSBjKSAqICgxIC0gayksIC8vIHJcbiAgICBtID49IDEgPyAwIDogMjU1ICogKDEgLSBtKSAqICgxIC0gayksIC8vIGdcbiAgICB5ID49IDEgPyAwIDogMjU1ICogKDEgLSB5KSAqICgxIC0gayksIC8vIGJcbiAgICBhbHBoYV07XG4gIH07XG5cbiAgdmFyIGNteWsycmdiXzEgPSBjbXlrMnJnYjtcbiAgdmFyIHVucGFjayQzID0gdXRpbHMudW5wYWNrO1xuICB2YXIgdHlwZSQyID0gdXRpbHMudHlwZTtcblxuICBDb2xvcl8xLnByb3RvdHlwZS5jbXlrID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiByZ2IyY215a18xKHRoaXMuX3JnYik7XG4gIH07XG5cbiAgY2hyb21hXzEuY215ayA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYXJncyA9IFtdLFxuICAgICAgICBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGxlbi0tKSB7XG4gICAgICBhcmdzW2xlbl0gPSBhcmd1bWVudHNbbGVuXTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IChGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5hcHBseShDb2xvcl8xLCBbbnVsbF0uY29uY2F0KGFyZ3MsIFsnY215ayddKSkpKCk7XG4gIH07XG5cbiAgaW5wdXQuZm9ybWF0LmNteWsgPSBjbXlrMnJnYl8xO1xuICBpbnB1dC5hdXRvZGV0ZWN0LnB1c2goe1xuICAgIHA6IDIsXG4gICAgdGVzdDogZnVuY3Rpb24gdGVzdCgpIHtcbiAgICAgIHZhciBhcmdzID0gW10sXG4gICAgICAgICAgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcblxuICAgICAgd2hpbGUgKGxlbi0tKSB7XG4gICAgICAgIGFyZ3NbbGVuXSA9IGFyZ3VtZW50c1tsZW5dO1xuICAgICAgfVxuXG4gICAgICBhcmdzID0gdW5wYWNrJDMoYXJncywgJ2NteWsnKTtcblxuICAgICAgaWYgKHR5cGUkMihhcmdzKSA9PT0gJ2FycmF5JyAmJiBhcmdzLmxlbmd0aCA9PT0gNCkge1xuICAgICAgICByZXR1cm4gJ2NteWsnO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHZhciB1bnBhY2skNCA9IHV0aWxzLnVucGFjaztcbiAgdmFyIGxhc3QkMiA9IHV0aWxzLmxhc3Q7XG5cbiAgdmFyIHJuZCA9IGZ1bmN0aW9uIHJuZChhKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQoYSAqIDEwMCkgLyAxMDA7XG4gIH07XG4gIC8qXG4gICAqIHN1cHBvcnRlZCBhcmd1bWVudHM6XG4gICAqIC0gaHNsMmNzcyhoLHMsbClcbiAgICogLSBoc2wyY3NzKGgscyxsLGEpXG4gICAqIC0gaHNsMmNzcyhbaCxzLGxdLCBtb2RlKVxuICAgKiAtIGhzbDJjc3MoW2gscyxsLGFdLCBtb2RlKVxuICAgKiAtIGhzbDJjc3Moe2gscyxsLGF9LCBtb2RlKVxuICAgKi9cblxuXG4gIHZhciBoc2wyY3NzID0gZnVuY3Rpb24gaHNsMmNzcygpIHtcbiAgICB2YXIgYXJncyA9IFtdLFxuICAgICAgICBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGxlbi0tKSB7XG4gICAgICBhcmdzW2xlbl0gPSBhcmd1bWVudHNbbGVuXTtcbiAgICB9XG5cbiAgICB2YXIgaHNsYSA9IHVucGFjayQ0KGFyZ3MsICdoc2xhJyk7XG4gICAgdmFyIG1vZGUgPSBsYXN0JDIoYXJncykgfHwgJ2xzYSc7XG4gICAgaHNsYVswXSA9IHJuZChoc2xhWzBdIHx8IDApO1xuICAgIGhzbGFbMV0gPSBybmQoaHNsYVsxXSAqIDEwMCkgKyAnJSc7XG4gICAgaHNsYVsyXSA9IHJuZChoc2xhWzJdICogMTAwKSArICclJztcblxuICAgIGlmIChtb2RlID09PSAnaHNsYScgfHwgaHNsYS5sZW5ndGggPiAzICYmIGhzbGFbM10gPCAxKSB7XG4gICAgICBoc2xhWzNdID0gaHNsYS5sZW5ndGggPiAzID8gaHNsYVszXSA6IDE7XG4gICAgICBtb2RlID0gJ2hzbGEnO1xuICAgIH0gZWxzZSB7XG4gICAgICBoc2xhLmxlbmd0aCA9IDM7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1vZGUgKyBcIihcIiArIGhzbGEuam9pbignLCcpICsgXCIpXCI7XG4gIH07XG5cbiAgdmFyIGhzbDJjc3NfMSA9IGhzbDJjc3M7XG4gIHZhciB1bnBhY2skNSA9IHV0aWxzLnVucGFjaztcbiAgLypcbiAgICogc3VwcG9ydGVkIGFyZ3VtZW50czpcbiAgICogLSByZ2IyaHNsKHIsZyxiKVxuICAgKiAtIHJnYjJoc2wocixnLGIsYSlcbiAgICogLSByZ2IyaHNsKFtyLGcsYl0pXG4gICAqIC0gcmdiMmhzbChbcixnLGIsYV0pXG4gICAqIC0gcmdiMmhzbCh7cixnLGIsYX0pXG4gICAqL1xuXG4gIHZhciByZ2IyaHNsID0gZnVuY3Rpb24gcmdiMmhzbCgpIHtcbiAgICB2YXIgYXJncyA9IFtdLFxuICAgICAgICBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGxlbi0tKSB7XG4gICAgICBhcmdzW2xlbl0gPSBhcmd1bWVudHNbbGVuXTtcbiAgICB9XG5cbiAgICBhcmdzID0gdW5wYWNrJDUoYXJncywgJ3JnYmEnKTtcbiAgICB2YXIgciA9IGFyZ3NbMF07XG4gICAgdmFyIGcgPSBhcmdzWzFdO1xuICAgIHZhciBiID0gYXJnc1syXTtcbiAgICByIC89IDI1NTtcbiAgICBnIC89IDI1NTtcbiAgICBiIC89IDI1NTtcbiAgICB2YXIgbWluID0gTWF0aC5taW4ociwgZywgYik7XG4gICAgdmFyIG1heCA9IE1hdGgubWF4KHIsIGcsIGIpO1xuICAgIHZhciBsID0gKG1heCArIG1pbikgLyAyO1xuICAgIHZhciBzLCBoO1xuXG4gICAgaWYgKG1heCA9PT0gbWluKSB7XG4gICAgICBzID0gMDtcbiAgICAgIGggPSBOdW1iZXIuTmFOO1xuICAgIH0gZWxzZSB7XG4gICAgICBzID0gbCA8IDAuNSA/IChtYXggLSBtaW4pIC8gKG1heCArIG1pbikgOiAobWF4IC0gbWluKSAvICgyIC0gbWF4IC0gbWluKTtcbiAgICB9XG5cbiAgICBpZiAociA9PSBtYXgpIHtcbiAgICAgIGggPSAoZyAtIGIpIC8gKG1heCAtIG1pbik7XG4gICAgfSBlbHNlIGlmIChnID09IG1heCkge1xuICAgICAgaCA9IDIgKyAoYiAtIHIpIC8gKG1heCAtIG1pbik7XG4gICAgfSBlbHNlIGlmIChiID09IG1heCkge1xuICAgICAgaCA9IDQgKyAociAtIGcpIC8gKG1heCAtIG1pbik7XG4gICAgfVxuXG4gICAgaCAqPSA2MDtcblxuICAgIGlmIChoIDwgMCkge1xuICAgICAgaCArPSAzNjA7XG4gICAgfVxuXG4gICAgaWYgKGFyZ3MubGVuZ3RoID4gMyAmJiBhcmdzWzNdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBbaCwgcywgbCwgYXJnc1szXV07XG4gICAgfVxuXG4gICAgcmV0dXJuIFtoLCBzLCBsXTtcbiAgfTtcblxuICB2YXIgcmdiMmhzbF8xID0gcmdiMmhzbDtcbiAgdmFyIHVucGFjayQ2ID0gdXRpbHMudW5wYWNrO1xuICB2YXIgbGFzdCQzID0gdXRpbHMubGFzdDtcbiAgdmFyIHJvdW5kID0gTWF0aC5yb3VuZDtcbiAgLypcbiAgICogc3VwcG9ydGVkIGFyZ3VtZW50czpcbiAgICogLSByZ2IyY3NzKHIsZyxiKVxuICAgKiAtIHJnYjJjc3MocixnLGIsYSlcbiAgICogLSByZ2IyY3NzKFtyLGcsYl0sIG1vZGUpXG4gICAqIC0gcmdiMmNzcyhbcixnLGIsYV0sIG1vZGUpXG4gICAqIC0gcmdiMmNzcyh7cixnLGIsYX0sIG1vZGUpXG4gICAqL1xuXG4gIHZhciByZ2IyY3NzID0gZnVuY3Rpb24gcmdiMmNzcygpIHtcbiAgICB2YXIgYXJncyA9IFtdLFxuICAgICAgICBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGxlbi0tKSB7XG4gICAgICBhcmdzW2xlbl0gPSBhcmd1bWVudHNbbGVuXTtcbiAgICB9XG5cbiAgICB2YXIgcmdiYSA9IHVucGFjayQ2KGFyZ3MsICdyZ2JhJyk7XG4gICAgdmFyIG1vZGUgPSBsYXN0JDMoYXJncykgfHwgJ3JnYic7XG5cbiAgICBpZiAobW9kZS5zdWJzdHIoMCwgMykgPT0gJ2hzbCcpIHtcbiAgICAgIHJldHVybiBoc2wyY3NzXzEocmdiMmhzbF8xKHJnYmEpLCBtb2RlKTtcbiAgICB9XG5cbiAgICByZ2JhWzBdID0gcm91bmQocmdiYVswXSk7XG4gICAgcmdiYVsxXSA9IHJvdW5kKHJnYmFbMV0pO1xuICAgIHJnYmFbMl0gPSByb3VuZChyZ2JhWzJdKTtcblxuICAgIGlmIChtb2RlID09PSAncmdiYScgfHwgcmdiYS5sZW5ndGggPiAzICYmIHJnYmFbM10gPCAxKSB7XG4gICAgICByZ2JhWzNdID0gcmdiYS5sZW5ndGggPiAzID8gcmdiYVszXSA6IDE7XG4gICAgICBtb2RlID0gJ3JnYmEnO1xuICAgIH1cblxuICAgIHJldHVybiBtb2RlICsgXCIoXCIgKyByZ2JhLnNsaWNlKDAsIG1vZGUgPT09ICdyZ2InID8gMyA6IDQpLmpvaW4oJywnKSArIFwiKVwiO1xuICB9O1xuXG4gIHZhciByZ2IyY3NzXzEgPSByZ2IyY3NzO1xuICB2YXIgdW5wYWNrJDcgPSB1dGlscy51bnBhY2s7XG4gIHZhciByb3VuZCQxID0gTWF0aC5yb3VuZDtcblxuICB2YXIgaHNsMnJnYiA9IGZ1bmN0aW9uIGhzbDJyZ2IoKSB7XG4gICAgdmFyIGFzc2lnbjtcbiAgICB2YXIgYXJncyA9IFtdLFxuICAgICAgICBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGxlbi0tKSB7XG4gICAgICBhcmdzW2xlbl0gPSBhcmd1bWVudHNbbGVuXTtcbiAgICB9XG5cbiAgICBhcmdzID0gdW5wYWNrJDcoYXJncywgJ2hzbCcpO1xuICAgIHZhciBoID0gYXJnc1swXTtcbiAgICB2YXIgcyA9IGFyZ3NbMV07XG4gICAgdmFyIGwgPSBhcmdzWzJdO1xuICAgIHZhciByLCBnLCBiO1xuXG4gICAgaWYgKHMgPT09IDApIHtcbiAgICAgIHIgPSBnID0gYiA9IGwgKiAyNTU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciB0MyA9IFswLCAwLCAwXTtcbiAgICAgIHZhciBjID0gWzAsIDAsIDBdO1xuICAgICAgdmFyIHQyID0gbCA8IDAuNSA/IGwgKiAoMSArIHMpIDogbCArIHMgLSBsICogcztcbiAgICAgIHZhciB0MSA9IDIgKiBsIC0gdDI7XG4gICAgICB2YXIgaF8gPSBoIC8gMzYwO1xuICAgICAgdDNbMF0gPSBoXyArIDEgLyAzO1xuICAgICAgdDNbMV0gPSBoXztcbiAgICAgIHQzWzJdID0gaF8gLSAxIC8gMztcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAzOyBpKyspIHtcbiAgICAgICAgaWYgKHQzW2ldIDwgMCkge1xuICAgICAgICAgIHQzW2ldICs9IDE7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodDNbaV0gPiAxKSB7XG4gICAgICAgICAgdDNbaV0gLT0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICg2ICogdDNbaV0gPCAxKSB7XG4gICAgICAgICAgY1tpXSA9IHQxICsgKHQyIC0gdDEpICogNiAqIHQzW2ldO1xuICAgICAgICB9IGVsc2UgaWYgKDIgKiB0M1tpXSA8IDEpIHtcbiAgICAgICAgICBjW2ldID0gdDI7XG4gICAgICAgIH0gZWxzZSBpZiAoMyAqIHQzW2ldIDwgMikge1xuICAgICAgICAgIGNbaV0gPSB0MSArICh0MiAtIHQxKSAqICgyIC8gMyAtIHQzW2ldKSAqIDY7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY1tpXSA9IHQxO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGFzc2lnbiA9IFtyb3VuZCQxKGNbMF0gKiAyNTUpLCByb3VuZCQxKGNbMV0gKiAyNTUpLCByb3VuZCQxKGNbMl0gKiAyNTUpXSwgciA9IGFzc2lnblswXSwgZyA9IGFzc2lnblsxXSwgYiA9IGFzc2lnblsyXTtcbiAgICB9XG5cbiAgICBpZiAoYXJncy5sZW5ndGggPiAzKSB7XG4gICAgICAvLyBrZWVwIGFscGhhIGNoYW5uZWxcbiAgICAgIHJldHVybiBbciwgZywgYiwgYXJnc1szXV07XG4gICAgfVxuXG4gICAgcmV0dXJuIFtyLCBnLCBiLCAxXTtcbiAgfTtcblxuICB2YXIgaHNsMnJnYl8xID0gaHNsMnJnYjtcbiAgdmFyIFJFX1JHQiA9IC9ecmdiXFwoXFxzKigtP1xcZCspLFxccyooLT9cXGQrKVxccyosXFxzKigtP1xcZCspXFxzKlxcKSQvO1xuICB2YXIgUkVfUkdCQSA9IC9ecmdiYVxcKFxccyooLT9cXGQrKSxcXHMqKC0/XFxkKylcXHMqLFxccyooLT9cXGQrKVxccyosXFxzKihbMDFdfFswMV0/XFwuXFxkKylcXCkkLztcbiAgdmFyIFJFX1JHQl9QQ1QgPSAvXnJnYlxcKFxccyooLT9cXGQrKD86XFwuXFxkKyk/KSUsXFxzKigtP1xcZCsoPzpcXC5cXGQrKT8pJVxccyosXFxzKigtP1xcZCsoPzpcXC5cXGQrKT8pJVxccypcXCkkLztcbiAgdmFyIFJFX1JHQkFfUENUID0gL15yZ2JhXFwoXFxzKigtP1xcZCsoPzpcXC5cXGQrKT8pJSxcXHMqKC0/XFxkKyg/OlxcLlxcZCspPyklXFxzKixcXHMqKC0/XFxkKyg/OlxcLlxcZCspPyklXFxzKixcXHMqKFswMV18WzAxXT9cXC5cXGQrKVxcKSQvO1xuICB2YXIgUkVfSFNMID0gL15oc2xcXChcXHMqKC0/XFxkKyg/OlxcLlxcZCspPyksXFxzKigtP1xcZCsoPzpcXC5cXGQrKT8pJVxccyosXFxzKigtP1xcZCsoPzpcXC5cXGQrKT8pJVxccypcXCkkLztcbiAgdmFyIFJFX0hTTEEgPSAvXmhzbGFcXChcXHMqKC0/XFxkKyg/OlxcLlxcZCspPyksXFxzKigtP1xcZCsoPzpcXC5cXGQrKT8pJVxccyosXFxzKigtP1xcZCsoPzpcXC5cXGQrKT8pJVxccyosXFxzKihbMDFdfFswMV0/XFwuXFxkKylcXCkkLztcbiAgdmFyIHJvdW5kJDIgPSBNYXRoLnJvdW5kO1xuXG4gIHZhciBjc3MycmdiID0gZnVuY3Rpb24gY3NzMnJnYihjc3MpIHtcbiAgICBjc3MgPSBjc3MudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gICAgdmFyIG07XG5cbiAgICBpZiAoaW5wdXQuZm9ybWF0Lm5hbWVkKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gaW5wdXQuZm9ybWF0Lm5hbWVkKGNzcyk7XG4gICAgICB9IGNhdGNoIChlKSB7Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICB9XG4gICAgfSAvLyByZ2IoMjUwLDIwLDApXG5cblxuICAgIGlmIChtID0gY3NzLm1hdGNoKFJFX1JHQikpIHtcbiAgICAgIHZhciByZ2IgPSBtLnNsaWNlKDEsIDQpO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDM7IGkrKykge1xuICAgICAgICByZ2JbaV0gPSArcmdiW2ldO1xuICAgICAgfVxuXG4gICAgICByZ2JbM10gPSAxOyAvLyBkZWZhdWx0IGFscGhhXG5cbiAgICAgIHJldHVybiByZ2I7XG4gICAgfSAvLyByZ2JhKDI1MCwyMCwwLDAuNClcblxuXG4gICAgaWYgKG0gPSBjc3MubWF0Y2goUkVfUkdCQSkpIHtcbiAgICAgIHZhciByZ2IkMSA9IG0uc2xpY2UoMSwgNSk7XG5cbiAgICAgIGZvciAodmFyIGkkMSA9IDA7IGkkMSA8IDQ7IGkkMSsrKSB7XG4gICAgICAgIHJnYiQxW2kkMV0gPSArcmdiJDFbaSQxXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJnYiQxO1xuICAgIH0gLy8gcmdiKDEwMCUsMCUsMCUpXG5cblxuICAgIGlmIChtID0gY3NzLm1hdGNoKFJFX1JHQl9QQ1QpKSB7XG4gICAgICB2YXIgcmdiJDIgPSBtLnNsaWNlKDEsIDQpO1xuXG4gICAgICBmb3IgKHZhciBpJDIgPSAwOyBpJDIgPCAzOyBpJDIrKykge1xuICAgICAgICByZ2IkMltpJDJdID0gcm91bmQkMihyZ2IkMltpJDJdICogMi41NSk7XG4gICAgICB9XG5cbiAgICAgIHJnYiQyWzNdID0gMTsgLy8gZGVmYXVsdCBhbHBoYVxuXG4gICAgICByZXR1cm4gcmdiJDI7XG4gICAgfSAvLyByZ2JhKDEwMCUsMCUsMCUsMC40KVxuXG5cbiAgICBpZiAobSA9IGNzcy5tYXRjaChSRV9SR0JBX1BDVCkpIHtcbiAgICAgIHZhciByZ2IkMyA9IG0uc2xpY2UoMSwgNSk7XG5cbiAgICAgIGZvciAodmFyIGkkMyA9IDA7IGkkMyA8IDM7IGkkMysrKSB7XG4gICAgICAgIHJnYiQzW2kkM10gPSByb3VuZCQyKHJnYiQzW2kkM10gKiAyLjU1KTtcbiAgICAgIH1cblxuICAgICAgcmdiJDNbM10gPSArcmdiJDNbM107XG4gICAgICByZXR1cm4gcmdiJDM7XG4gICAgfSAvLyBoc2woMCwxMDAlLDUwJSlcblxuXG4gICAgaWYgKG0gPSBjc3MubWF0Y2goUkVfSFNMKSkge1xuICAgICAgdmFyIGhzbCA9IG0uc2xpY2UoMSwgNCk7XG4gICAgICBoc2xbMV0gKj0gMC4wMTtcbiAgICAgIGhzbFsyXSAqPSAwLjAxO1xuICAgICAgdmFyIHJnYiQ0ID0gaHNsMnJnYl8xKGhzbCk7XG4gICAgICByZ2IkNFszXSA9IDE7XG4gICAgICByZXR1cm4gcmdiJDQ7XG4gICAgfSAvLyBoc2xhKDAsMTAwJSw1MCUsMC41KVxuXG5cbiAgICBpZiAobSA9IGNzcy5tYXRjaChSRV9IU0xBKSkge1xuICAgICAgdmFyIGhzbCQxID0gbS5zbGljZSgxLCA0KTtcbiAgICAgIGhzbCQxWzFdICo9IDAuMDE7XG4gICAgICBoc2wkMVsyXSAqPSAwLjAxO1xuICAgICAgdmFyIHJnYiQ1ID0gaHNsMnJnYl8xKGhzbCQxKTtcbiAgICAgIHJnYiQ1WzNdID0gK21bNF07IC8vIGRlZmF1bHQgYWxwaGEgPSAxXG5cbiAgICAgIHJldHVybiByZ2IkNTtcbiAgICB9XG4gIH07XG5cbiAgY3NzMnJnYi50ZXN0ID0gZnVuY3Rpb24gKHMpIHtcbiAgICByZXR1cm4gUkVfUkdCLnRlc3QocykgfHwgUkVfUkdCQS50ZXN0KHMpIHx8IFJFX1JHQl9QQ1QudGVzdChzKSB8fCBSRV9SR0JBX1BDVC50ZXN0KHMpIHx8IFJFX0hTTC50ZXN0KHMpIHx8IFJFX0hTTEEudGVzdChzKTtcbiAgfTtcblxuICB2YXIgY3NzMnJnYl8xID0gY3NzMnJnYjtcbiAgdmFyIHR5cGUkMyA9IHV0aWxzLnR5cGU7XG5cbiAgQ29sb3JfMS5wcm90b3R5cGUuY3NzID0gZnVuY3Rpb24gKG1vZGUpIHtcbiAgICByZXR1cm4gcmdiMmNzc18xKHRoaXMuX3JnYiwgbW9kZSk7XG4gIH07XG5cbiAgY2hyb21hXzEuY3NzID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBhcmdzID0gW10sXG4gICAgICAgIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cbiAgICB3aGlsZSAobGVuLS0pIHtcbiAgICAgIGFyZ3NbbGVuXSA9IGFyZ3VtZW50c1tsZW5dO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KENvbG9yXzEsIFtudWxsXS5jb25jYXQoYXJncywgWydjc3MnXSkpKSgpO1xuICB9O1xuXG4gIGlucHV0LmZvcm1hdC5jc3MgPSBjc3MycmdiXzE7XG4gIGlucHV0LmF1dG9kZXRlY3QucHVzaCh7XG4gICAgcDogNSxcbiAgICB0ZXN0OiBmdW5jdGlvbiB0ZXN0KGgpIHtcbiAgICAgIHZhciByZXN0ID0gW10sXG4gICAgICAgICAgbGVuID0gYXJndW1lbnRzLmxlbmd0aCAtIDE7XG5cbiAgICAgIHdoaWxlIChsZW4tLSA+IDApIHtcbiAgICAgICAgcmVzdFtsZW5dID0gYXJndW1lbnRzW2xlbiArIDFdO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXJlc3QubGVuZ3RoICYmIHR5cGUkMyhoKSA9PT0gJ3N0cmluZycgJiYgY3NzMnJnYl8xLnRlc3QoaCkpIHtcbiAgICAgICAgcmV0dXJuICdjc3MnO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHZhciB1bnBhY2skOCA9IHV0aWxzLnVucGFjaztcblxuICBpbnB1dC5mb3JtYXQuZ2wgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGFyZ3MgPSBbXSxcbiAgICAgICAgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcblxuICAgIHdoaWxlIChsZW4tLSkge1xuICAgICAgYXJnc1tsZW5dID0gYXJndW1lbnRzW2xlbl07XG4gICAgfVxuXG4gICAgdmFyIHJnYiA9IHVucGFjayQ4KGFyZ3MsICdyZ2JhJyk7XG4gICAgcmdiWzBdICo9IDI1NTtcbiAgICByZ2JbMV0gKj0gMjU1O1xuICAgIHJnYlsyXSAqPSAyNTU7XG4gICAgcmV0dXJuIHJnYjtcbiAgfTtcblxuICBjaHJvbWFfMS5nbCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYXJncyA9IFtdLFxuICAgICAgICBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGxlbi0tKSB7XG4gICAgICBhcmdzW2xlbl0gPSBhcmd1bWVudHNbbGVuXTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IChGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5hcHBseShDb2xvcl8xLCBbbnVsbF0uY29uY2F0KGFyZ3MsIFsnZ2wnXSkpKSgpO1xuICB9O1xuXG4gIENvbG9yXzEucHJvdG90eXBlLmdsID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciByZ2IgPSB0aGlzLl9yZ2I7XG4gICAgcmV0dXJuIFtyZ2JbMF0gLyAyNTUsIHJnYlsxXSAvIDI1NSwgcmdiWzJdIC8gMjU1LCByZ2JbM11dO1xuICB9O1xuXG4gIHZhciB1bnBhY2skOSA9IHV0aWxzLnVucGFjaztcblxuICB2YXIgcmdiMmhjZyA9IGZ1bmN0aW9uIHJnYjJoY2coKSB7XG4gICAgdmFyIGFyZ3MgPSBbXSxcbiAgICAgICAgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcblxuICAgIHdoaWxlIChsZW4tLSkge1xuICAgICAgYXJnc1tsZW5dID0gYXJndW1lbnRzW2xlbl07XG4gICAgfVxuXG4gICAgdmFyIHJlZiA9IHVucGFjayQ5KGFyZ3MsICdyZ2InKTtcbiAgICB2YXIgciA9IHJlZlswXTtcbiAgICB2YXIgZyA9IHJlZlsxXTtcbiAgICB2YXIgYiA9IHJlZlsyXTtcbiAgICB2YXIgbWluID0gTWF0aC5taW4ociwgZywgYik7XG4gICAgdmFyIG1heCA9IE1hdGgubWF4KHIsIGcsIGIpO1xuICAgIHZhciBkZWx0YSA9IG1heCAtIG1pbjtcbiAgICB2YXIgYyA9IGRlbHRhICogMTAwIC8gMjU1O1xuXG4gICAgdmFyIF9nID0gbWluIC8gKDI1NSAtIGRlbHRhKSAqIDEwMDtcblxuICAgIHZhciBoO1xuXG4gICAgaWYgKGRlbHRhID09PSAwKSB7XG4gICAgICBoID0gTnVtYmVyLk5hTjtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHIgPT09IG1heCkge1xuICAgICAgICBoID0gKGcgLSBiKSAvIGRlbHRhO1xuICAgICAgfVxuXG4gICAgICBpZiAoZyA9PT0gbWF4KSB7XG4gICAgICAgIGggPSAyICsgKGIgLSByKSAvIGRlbHRhO1xuICAgICAgfVxuXG4gICAgICBpZiAoYiA9PT0gbWF4KSB7XG4gICAgICAgIGggPSA0ICsgKHIgLSBnKSAvIGRlbHRhO1xuICAgICAgfVxuXG4gICAgICBoICo9IDYwO1xuXG4gICAgICBpZiAoaCA8IDApIHtcbiAgICAgICAgaCArPSAzNjA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFtoLCBjLCBfZ107XG4gIH07XG5cbiAgdmFyIHJnYjJoY2dfMSA9IHJnYjJoY2c7XG4gIHZhciB1bnBhY2skYSA9IHV0aWxzLnVucGFjaztcbiAgdmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbiAgLypcbiAgICogdGhpcyBpcyBiYXNpY2FsbHkganVzdCBIU1Ygd2l0aCBzb21lIG1pbm9yIHR3ZWFrc1xuICAgKlxuICAgKiBodWUuLiBbMC4uMzYwXVxuICAgKiBjaHJvbWEgLi4gWzAuLjFdXG4gICAqIGdyYXluZXNzIC4uIFswLi4xXVxuICAgKi9cblxuICB2YXIgaGNnMnJnYiA9IGZ1bmN0aW9uIGhjZzJyZ2IoKSB7XG4gICAgdmFyIGFzc2lnbiwgYXNzaWduJDEsIGFzc2lnbiQyLCBhc3NpZ24kMywgYXNzaWduJDQsIGFzc2lnbiQ1O1xuICAgIHZhciBhcmdzID0gW10sXG4gICAgICAgIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cbiAgICB3aGlsZSAobGVuLS0pIHtcbiAgICAgIGFyZ3NbbGVuXSA9IGFyZ3VtZW50c1tsZW5dO1xuICAgIH1cblxuICAgIGFyZ3MgPSB1bnBhY2skYShhcmdzLCAnaGNnJyk7XG4gICAgdmFyIGggPSBhcmdzWzBdO1xuICAgIHZhciBjID0gYXJnc1sxXTtcbiAgICB2YXIgX2cgPSBhcmdzWzJdO1xuICAgIHZhciByLCBnLCBiO1xuICAgIF9nID0gX2cgKiAyNTU7XG5cbiAgICB2YXIgX2MgPSBjICogMjU1O1xuXG4gICAgaWYgKGMgPT09IDApIHtcbiAgICAgIHIgPSBnID0gYiA9IF9nO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaCA9PT0gMzYwKSB7XG4gICAgICAgIGggPSAwO1xuICAgICAgfVxuXG4gICAgICBpZiAoaCA+IDM2MCkge1xuICAgICAgICBoIC09IDM2MDtcbiAgICAgIH1cblxuICAgICAgaWYgKGggPCAwKSB7XG4gICAgICAgIGggKz0gMzYwO1xuICAgICAgfVxuXG4gICAgICBoIC89IDYwO1xuICAgICAgdmFyIGkgPSBmbG9vcihoKTtcbiAgICAgIHZhciBmID0gaCAtIGk7XG4gICAgICB2YXIgcCA9IF9nICogKDEgLSBjKTtcbiAgICAgIHZhciBxID0gcCArIF9jICogKDEgLSBmKTtcbiAgICAgIHZhciB0ID0gcCArIF9jICogZjtcbiAgICAgIHZhciB2ID0gcCArIF9jO1xuXG4gICAgICBzd2l0Y2ggKGkpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgIGFzc2lnbiA9IFt2LCB0LCBwXSwgciA9IGFzc2lnblswXSwgZyA9IGFzc2lnblsxXSwgYiA9IGFzc2lnblsyXTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgYXNzaWduJDEgPSBbcSwgdiwgcF0sIHIgPSBhc3NpZ24kMVswXSwgZyA9IGFzc2lnbiQxWzFdLCBiID0gYXNzaWduJDFbMl07XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIGFzc2lnbiQyID0gW3AsIHYsIHRdLCByID0gYXNzaWduJDJbMF0sIGcgPSBhc3NpZ24kMlsxXSwgYiA9IGFzc2lnbiQyWzJdO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBhc3NpZ24kMyA9IFtwLCBxLCB2XSwgciA9IGFzc2lnbiQzWzBdLCBnID0gYXNzaWduJDNbMV0sIGIgPSBhc3NpZ24kM1syXTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgYXNzaWduJDQgPSBbdCwgcCwgdl0sIHIgPSBhc3NpZ24kNFswXSwgZyA9IGFzc2lnbiQ0WzFdLCBiID0gYXNzaWduJDRbMl07XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIGFzc2lnbiQ1ID0gW3YsIHAsIHFdLCByID0gYXNzaWduJDVbMF0sIGcgPSBhc3NpZ24kNVsxXSwgYiA9IGFzc2lnbiQ1WzJdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBbciwgZywgYiwgYXJncy5sZW5ndGggPiAzID8gYXJnc1szXSA6IDFdO1xuICB9O1xuXG4gIHZhciBoY2cycmdiXzEgPSBoY2cycmdiO1xuICB2YXIgdW5wYWNrJGIgPSB1dGlscy51bnBhY2s7XG4gIHZhciB0eXBlJDQgPSB1dGlscy50eXBlO1xuXG4gIENvbG9yXzEucHJvdG90eXBlLmhjZyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gcmdiMmhjZ18xKHRoaXMuX3JnYik7XG4gIH07XG5cbiAgY2hyb21hXzEuaGNnID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBhcmdzID0gW10sXG4gICAgICAgIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cbiAgICB3aGlsZSAobGVuLS0pIHtcbiAgICAgIGFyZ3NbbGVuXSA9IGFyZ3VtZW50c1tsZW5dO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KENvbG9yXzEsIFtudWxsXS5jb25jYXQoYXJncywgWydoY2cnXSkpKSgpO1xuICB9O1xuXG4gIGlucHV0LmZvcm1hdC5oY2cgPSBoY2cycmdiXzE7XG4gIGlucHV0LmF1dG9kZXRlY3QucHVzaCh7XG4gICAgcDogMSxcbiAgICB0ZXN0OiBmdW5jdGlvbiB0ZXN0KCkge1xuICAgICAgdmFyIGFyZ3MgPSBbXSxcbiAgICAgICAgICBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgICB3aGlsZSAobGVuLS0pIHtcbiAgICAgICAgYXJnc1tsZW5dID0gYXJndW1lbnRzW2xlbl07XG4gICAgICB9XG5cbiAgICAgIGFyZ3MgPSB1bnBhY2skYihhcmdzLCAnaGNnJyk7XG5cbiAgICAgIGlmICh0eXBlJDQoYXJncykgPT09ICdhcnJheScgJiYgYXJncy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgcmV0dXJuICdoY2cnO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHZhciB1bnBhY2skYyA9IHV0aWxzLnVucGFjaztcbiAgdmFyIGxhc3QkNCA9IHV0aWxzLmxhc3Q7XG4gIHZhciByb3VuZCQzID0gTWF0aC5yb3VuZDtcblxuICB2YXIgcmdiMmhleCA9IGZ1bmN0aW9uIHJnYjJoZXgoKSB7XG4gICAgdmFyIGFyZ3MgPSBbXSxcbiAgICAgICAgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcblxuICAgIHdoaWxlIChsZW4tLSkge1xuICAgICAgYXJnc1tsZW5dID0gYXJndW1lbnRzW2xlbl07XG4gICAgfVxuXG4gICAgdmFyIHJlZiA9IHVucGFjayRjKGFyZ3MsICdyZ2JhJyk7XG4gICAgdmFyIHIgPSByZWZbMF07XG4gICAgdmFyIGcgPSByZWZbMV07XG4gICAgdmFyIGIgPSByZWZbMl07XG4gICAgdmFyIGEgPSByZWZbM107XG4gICAgdmFyIG1vZGUgPSBsYXN0JDQoYXJncykgfHwgJ2F1dG8nO1xuXG4gICAgaWYgKGEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgYSA9IDE7XG4gICAgfVxuXG4gICAgaWYgKG1vZGUgPT09ICdhdXRvJykge1xuICAgICAgbW9kZSA9IGEgPCAxID8gJ3JnYmEnIDogJ3JnYic7XG4gICAgfVxuXG4gICAgciA9IHJvdW5kJDMocik7XG4gICAgZyA9IHJvdW5kJDMoZyk7XG4gICAgYiA9IHJvdW5kJDMoYik7XG4gICAgdmFyIHUgPSByIDw8IDE2IHwgZyA8PCA4IHwgYjtcbiAgICB2YXIgc3RyID0gXCIwMDAwMDBcIiArIHUudG9TdHJpbmcoMTYpOyAvLyMudG9VcHBlckNhc2UoKTtcblxuICAgIHN0ciA9IHN0ci5zdWJzdHIoc3RyLmxlbmd0aCAtIDYpO1xuICAgIHZhciBoeGEgPSAnMCcgKyByb3VuZCQzKGEgKiAyNTUpLnRvU3RyaW5nKDE2KTtcbiAgICBoeGEgPSBoeGEuc3Vic3RyKGh4YS5sZW5ndGggLSAyKTtcblxuICAgIHN3aXRjaCAobW9kZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICBjYXNlICdyZ2JhJzpcbiAgICAgICAgcmV0dXJuIFwiI1wiICsgc3RyICsgaHhhO1xuXG4gICAgICBjYXNlICdhcmdiJzpcbiAgICAgICAgcmV0dXJuIFwiI1wiICsgaHhhICsgc3RyO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gXCIjXCIgKyBzdHI7XG4gICAgfVxuICB9O1xuXG4gIHZhciByZ2IyaGV4XzEgPSByZ2IyaGV4O1xuICB2YXIgUkVfSEVYID0gL14jPyhbQS1GYS1mMC05XXs2fXxbQS1GYS1mMC05XXszfSkkLztcbiAgdmFyIFJFX0hFWEEgPSAvXiM/KFtBLUZhLWYwLTldezh9fFtBLUZhLWYwLTldezR9KSQvO1xuXG4gIHZhciBoZXgycmdiID0gZnVuY3Rpb24gaGV4MnJnYihoZXgpIHtcbiAgICBpZiAoaGV4Lm1hdGNoKFJFX0hFWCkpIHtcbiAgICAgIC8vIHJlbW92ZSBvcHRpb25hbCBsZWFkaW5nICNcbiAgICAgIGlmIChoZXgubGVuZ3RoID09PSA0IHx8IGhleC5sZW5ndGggPT09IDcpIHtcbiAgICAgICAgaGV4ID0gaGV4LnN1YnN0cigxKTtcbiAgICAgIH0gLy8gZXhwYW5kIHNob3J0LW5vdGF0aW9uIHRvIGZ1bGwgc2l4LWRpZ2l0XG5cblxuICAgICAgaWYgKGhleC5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgaGV4ID0gaGV4LnNwbGl0KCcnKTtcbiAgICAgICAgaGV4ID0gaGV4WzBdICsgaGV4WzBdICsgaGV4WzFdICsgaGV4WzFdICsgaGV4WzJdICsgaGV4WzJdO1xuICAgICAgfVxuXG4gICAgICB2YXIgdSA9IHBhcnNlSW50KGhleCwgMTYpO1xuICAgICAgdmFyIHIgPSB1ID4+IDE2O1xuICAgICAgdmFyIGcgPSB1ID4+IDggJiAweEZGO1xuICAgICAgdmFyIGIgPSB1ICYgMHhGRjtcbiAgICAgIHJldHVybiBbciwgZywgYiwgMV07XG4gICAgfSAvLyBtYXRjaCByZ2JhIGhleCBmb3JtYXQsIGVnICNGRjAwMDA3N1xuXG5cbiAgICBpZiAoaGV4Lm1hdGNoKFJFX0hFWEEpKSB7XG4gICAgICBpZiAoaGV4Lmxlbmd0aCA9PT0gNSB8fCBoZXgubGVuZ3RoID09PSA5KSB7XG4gICAgICAgIC8vIHJlbW92ZSBvcHRpb25hbCBsZWFkaW5nICNcbiAgICAgICAgaGV4ID0gaGV4LnN1YnN0cigxKTtcbiAgICAgIH0gLy8gZXhwYW5kIHNob3J0LW5vdGF0aW9uIHRvIGZ1bGwgZWlnaHQtZGlnaXRcblxuXG4gICAgICBpZiAoaGV4Lmxlbmd0aCA9PT0gNCkge1xuICAgICAgICBoZXggPSBoZXguc3BsaXQoJycpO1xuICAgICAgICBoZXggPSBoZXhbMF0gKyBoZXhbMF0gKyBoZXhbMV0gKyBoZXhbMV0gKyBoZXhbMl0gKyBoZXhbMl0gKyBoZXhbM10gKyBoZXhbM107XG4gICAgICB9XG5cbiAgICAgIHZhciB1JDEgPSBwYXJzZUludChoZXgsIDE2KTtcbiAgICAgIHZhciByJDEgPSB1JDEgPj4gMjQgJiAweEZGO1xuICAgICAgdmFyIGckMSA9IHUkMSA+PiAxNiAmIDB4RkY7XG4gICAgICB2YXIgYiQxID0gdSQxID4+IDggJiAweEZGO1xuICAgICAgdmFyIGEgPSBNYXRoLnJvdW5kKCh1JDEgJiAweEZGKSAvIDB4RkYgKiAxMDApIC8gMTAwO1xuICAgICAgcmV0dXJuIFtyJDEsIGckMSwgYiQxLCBhXTtcbiAgICB9IC8vIHdlIHVzZWQgdG8gY2hlY2sgZm9yIGNzcyBjb2xvcnMgaGVyZVxuICAgIC8vIGlmIF9pbnB1dC5jc3M/IGFuZCByZ2IgPSBfaW5wdXQuY3NzIGhleFxuICAgIC8vICAgICByZXR1cm4gcmdiXG5cblxuICAgIHRocm93IG5ldyBFcnJvcihcInVua25vd24gaGV4IGNvbG9yOiBcIiArIGhleCk7XG4gIH07XG5cbiAgdmFyIGhleDJyZ2JfMSA9IGhleDJyZ2I7XG4gIHZhciB0eXBlJDUgPSB1dGlscy50eXBlO1xuXG4gIENvbG9yXzEucHJvdG90eXBlLmhleCA9IGZ1bmN0aW9uIChtb2RlKSB7XG4gICAgcmV0dXJuIHJnYjJoZXhfMSh0aGlzLl9yZ2IsIG1vZGUpO1xuICB9O1xuXG4gIGNocm9tYV8xLmhleCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYXJncyA9IFtdLFxuICAgICAgICBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGxlbi0tKSB7XG4gICAgICBhcmdzW2xlbl0gPSBhcmd1bWVudHNbbGVuXTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IChGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5hcHBseShDb2xvcl8xLCBbbnVsbF0uY29uY2F0KGFyZ3MsIFsnaGV4J10pKSkoKTtcbiAgfTtcblxuICBpbnB1dC5mb3JtYXQuaGV4ID0gaGV4MnJnYl8xO1xuICBpbnB1dC5hdXRvZGV0ZWN0LnB1c2goe1xuICAgIHA6IDQsXG4gICAgdGVzdDogZnVuY3Rpb24gdGVzdChoKSB7XG4gICAgICB2YXIgcmVzdCA9IFtdLFxuICAgICAgICAgIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGggLSAxO1xuXG4gICAgICB3aGlsZSAobGVuLS0gPiAwKSB7XG4gICAgICAgIHJlc3RbbGVuXSA9IGFyZ3VtZW50c1tsZW4gKyAxXTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFyZXN0Lmxlbmd0aCAmJiB0eXBlJDUoaCkgPT09ICdzdHJpbmcnICYmIFszLCA0LCA1LCA2LCA3LCA4LCA5XS5pbmRleE9mKGgubGVuZ3RoKSA+PSAwKSB7XG4gICAgICAgIHJldHVybiAnaGV4JztcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICB2YXIgdW5wYWNrJGQgPSB1dGlscy51bnBhY2s7XG4gIHZhciBUV09QSSA9IHV0aWxzLlRXT1BJO1xuICB2YXIgbWluID0gTWF0aC5taW47XG4gIHZhciBzcXJ0ID0gTWF0aC5zcXJ0O1xuICB2YXIgYWNvcyA9IE1hdGguYWNvcztcblxuICB2YXIgcmdiMmhzaSA9IGZ1bmN0aW9uIHJnYjJoc2koKSB7XG4gICAgdmFyIGFyZ3MgPSBbXSxcbiAgICAgICAgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcblxuICAgIHdoaWxlIChsZW4tLSkge1xuICAgICAgYXJnc1tsZW5dID0gYXJndW1lbnRzW2xlbl07XG4gICAgfVxuICAgIC8qXG4gICAgYm9ycm93ZWQgZnJvbSBoZXJlOlxuICAgIGh0dHA6Ly9odW1tZXIuc3RhbmZvcmQuZWR1L211c2VpbmZvL2RvYy9leGFtcGxlcy9odW1kcnVtL2tleXNjYXBlMi9yZ2IyaHNpLmNwcFxuICAgICovXG5cblxuICAgIHZhciByZWYgPSB1bnBhY2skZChhcmdzLCAncmdiJyk7XG4gICAgdmFyIHIgPSByZWZbMF07XG4gICAgdmFyIGcgPSByZWZbMV07XG4gICAgdmFyIGIgPSByZWZbMl07XG4gICAgciAvPSAyNTU7XG4gICAgZyAvPSAyNTU7XG4gICAgYiAvPSAyNTU7XG4gICAgdmFyIGg7XG4gICAgdmFyIG1pbl8gPSBtaW4ociwgZywgYik7XG4gICAgdmFyIGkgPSAociArIGcgKyBiKSAvIDM7XG4gICAgdmFyIHMgPSBpID4gMCA/IDEgLSBtaW5fIC8gaSA6IDA7XG5cbiAgICBpZiAocyA9PT0gMCkge1xuICAgICAgaCA9IE5hTjtcbiAgICB9IGVsc2Uge1xuICAgICAgaCA9IChyIC0gZyArIChyIC0gYikpIC8gMjtcbiAgICAgIGggLz0gc3FydCgociAtIGcpICogKHIgLSBnKSArIChyIC0gYikgKiAoZyAtIGIpKTtcbiAgICAgIGggPSBhY29zKGgpO1xuXG4gICAgICBpZiAoYiA+IGcpIHtcbiAgICAgICAgaCA9IFRXT1BJIC0gaDtcbiAgICAgIH1cblxuICAgICAgaCAvPSBUV09QSTtcbiAgICB9XG5cbiAgICByZXR1cm4gW2ggKiAzNjAsIHMsIGldO1xuICB9O1xuXG4gIHZhciByZ2IyaHNpXzEgPSByZ2IyaHNpO1xuICB2YXIgdW5wYWNrJGUgPSB1dGlscy51bnBhY2s7XG4gIHZhciBsaW1pdCQxID0gdXRpbHMubGltaXQ7XG4gIHZhciBUV09QSSQxID0gdXRpbHMuVFdPUEk7XG4gIHZhciBQSVRISVJEID0gdXRpbHMuUElUSElSRDtcbiAgdmFyIGNvcyA9IE1hdGguY29zO1xuICAvKlxuICAgKiBodWUgWzAuLjM2MF1cbiAgICogc2F0dXJhdGlvbiBbMC4uMV1cbiAgICogaW50ZW5zaXR5IFswLi4xXVxuICAgKi9cblxuICB2YXIgaHNpMnJnYiA9IGZ1bmN0aW9uIGhzaTJyZ2IoKSB7XG4gICAgdmFyIGFyZ3MgPSBbXSxcbiAgICAgICAgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcblxuICAgIHdoaWxlIChsZW4tLSkge1xuICAgICAgYXJnc1tsZW5dID0gYXJndW1lbnRzW2xlbl07XG4gICAgfVxuICAgIC8qXG4gICAgYm9ycm93ZWQgZnJvbSBoZXJlOlxuICAgIGh0dHA6Ly9odW1tZXIuc3RhbmZvcmQuZWR1L211c2VpbmZvL2RvYy9leGFtcGxlcy9odW1kcnVtL2tleXNjYXBlMi9oc2kycmdiLmNwcFxuICAgICovXG5cblxuICAgIGFyZ3MgPSB1bnBhY2skZShhcmdzLCAnaHNpJyk7XG4gICAgdmFyIGggPSBhcmdzWzBdO1xuICAgIHZhciBzID0gYXJnc1sxXTtcbiAgICB2YXIgaSA9IGFyZ3NbMl07XG4gICAgdmFyIHIsIGcsIGI7XG5cbiAgICBpZiAoaXNOYU4oaCkpIHtcbiAgICAgIGggPSAwO1xuICAgIH1cblxuICAgIGlmIChpc05hTihzKSkge1xuICAgICAgcyA9IDA7XG4gICAgfSAvLyBub3JtYWxpemUgaHVlXG5cblxuICAgIGlmIChoID4gMzYwKSB7XG4gICAgICBoIC09IDM2MDtcbiAgICB9XG5cbiAgICBpZiAoaCA8IDApIHtcbiAgICAgIGggKz0gMzYwO1xuICAgIH1cblxuICAgIGggLz0gMzYwO1xuXG4gICAgaWYgKGggPCAxIC8gMykge1xuICAgICAgYiA9ICgxIC0gcykgLyAzO1xuICAgICAgciA9ICgxICsgcyAqIGNvcyhUV09QSSQxICogaCkgLyBjb3MoUElUSElSRCAtIFRXT1BJJDEgKiBoKSkgLyAzO1xuICAgICAgZyA9IDEgLSAoYiArIHIpO1xuICAgIH0gZWxzZSBpZiAoaCA8IDIgLyAzKSB7XG4gICAgICBoIC09IDEgLyAzO1xuICAgICAgciA9ICgxIC0gcykgLyAzO1xuICAgICAgZyA9ICgxICsgcyAqIGNvcyhUV09QSSQxICogaCkgLyBjb3MoUElUSElSRCAtIFRXT1BJJDEgKiBoKSkgLyAzO1xuICAgICAgYiA9IDEgLSAociArIGcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBoIC09IDIgLyAzO1xuICAgICAgZyA9ICgxIC0gcykgLyAzO1xuICAgICAgYiA9ICgxICsgcyAqIGNvcyhUV09QSSQxICogaCkgLyBjb3MoUElUSElSRCAtIFRXT1BJJDEgKiBoKSkgLyAzO1xuICAgICAgciA9IDEgLSAoZyArIGIpO1xuICAgIH1cblxuICAgIHIgPSBsaW1pdCQxKGkgKiByICogMyk7XG4gICAgZyA9IGxpbWl0JDEoaSAqIGcgKiAzKTtcbiAgICBiID0gbGltaXQkMShpICogYiAqIDMpO1xuICAgIHJldHVybiBbciAqIDI1NSwgZyAqIDI1NSwgYiAqIDI1NSwgYXJncy5sZW5ndGggPiAzID8gYXJnc1szXSA6IDFdO1xuICB9O1xuXG4gIHZhciBoc2kycmdiXzEgPSBoc2kycmdiO1xuICB2YXIgdW5wYWNrJGYgPSB1dGlscy51bnBhY2s7XG4gIHZhciB0eXBlJDYgPSB1dGlscy50eXBlO1xuXG4gIENvbG9yXzEucHJvdG90eXBlLmhzaSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gcmdiMmhzaV8xKHRoaXMuX3JnYik7XG4gIH07XG5cbiAgY2hyb21hXzEuaHNpID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBhcmdzID0gW10sXG4gICAgICAgIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cbiAgICB3aGlsZSAobGVuLS0pIHtcbiAgICAgIGFyZ3NbbGVuXSA9IGFyZ3VtZW50c1tsZW5dO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KENvbG9yXzEsIFtudWxsXS5jb25jYXQoYXJncywgWydoc2knXSkpKSgpO1xuICB9O1xuXG4gIGlucHV0LmZvcm1hdC5oc2kgPSBoc2kycmdiXzE7XG4gIGlucHV0LmF1dG9kZXRlY3QucHVzaCh7XG4gICAgcDogMixcbiAgICB0ZXN0OiBmdW5jdGlvbiB0ZXN0KCkge1xuICAgICAgdmFyIGFyZ3MgPSBbXSxcbiAgICAgICAgICBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgICB3aGlsZSAobGVuLS0pIHtcbiAgICAgICAgYXJnc1tsZW5dID0gYXJndW1lbnRzW2xlbl07XG4gICAgICB9XG5cbiAgICAgIGFyZ3MgPSB1bnBhY2skZihhcmdzLCAnaHNpJyk7XG5cbiAgICAgIGlmICh0eXBlJDYoYXJncykgPT09ICdhcnJheScgJiYgYXJncy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgcmV0dXJuICdoc2knO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHZhciB1bnBhY2skZyA9IHV0aWxzLnVucGFjaztcbiAgdmFyIHR5cGUkNyA9IHV0aWxzLnR5cGU7XG5cbiAgQ29sb3JfMS5wcm90b3R5cGUuaHNsID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiByZ2IyaHNsXzEodGhpcy5fcmdiKTtcbiAgfTtcblxuICBjaHJvbWFfMS5oc2wgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGFyZ3MgPSBbXSxcbiAgICAgICAgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcblxuICAgIHdoaWxlIChsZW4tLSkge1xuICAgICAgYXJnc1tsZW5dID0gYXJndW1lbnRzW2xlbl07XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuYXBwbHkoQ29sb3JfMSwgW251bGxdLmNvbmNhdChhcmdzLCBbJ2hzbCddKSkpKCk7XG4gIH07XG5cbiAgaW5wdXQuZm9ybWF0LmhzbCA9IGhzbDJyZ2JfMTtcbiAgaW5wdXQuYXV0b2RldGVjdC5wdXNoKHtcbiAgICBwOiAyLFxuICAgIHRlc3Q6IGZ1bmN0aW9uIHRlc3QoKSB7XG4gICAgICB2YXIgYXJncyA9IFtdLFxuICAgICAgICAgIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cbiAgICAgIHdoaWxlIChsZW4tLSkge1xuICAgICAgICBhcmdzW2xlbl0gPSBhcmd1bWVudHNbbGVuXTtcbiAgICAgIH1cblxuICAgICAgYXJncyA9IHVucGFjayRnKGFyZ3MsICdoc2wnKTtcblxuICAgICAgaWYgKHR5cGUkNyhhcmdzKSA9PT0gJ2FycmF5JyAmJiBhcmdzLmxlbmd0aCA9PT0gMykge1xuICAgICAgICByZXR1cm4gJ2hzbCc7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgdmFyIHVucGFjayRoID0gdXRpbHMudW5wYWNrO1xuICB2YXIgbWluJDEgPSBNYXRoLm1pbjtcbiAgdmFyIG1heCQxID0gTWF0aC5tYXg7XG4gIC8qXG4gICAqIHN1cHBvcnRlZCBhcmd1bWVudHM6XG4gICAqIC0gcmdiMmhzdihyLGcsYilcbiAgICogLSByZ2IyaHN2KFtyLGcsYl0pXG4gICAqIC0gcmdiMmhzdih7cixnLGJ9KVxuICAgKi9cblxuICB2YXIgcmdiMmhzbCQxID0gZnVuY3Rpb24gcmdiMmhzbCQxKCkge1xuICAgIHZhciBhcmdzID0gW10sXG4gICAgICAgIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cbiAgICB3aGlsZSAobGVuLS0pIHtcbiAgICAgIGFyZ3NbbGVuXSA9IGFyZ3VtZW50c1tsZW5dO1xuICAgIH1cblxuICAgIGFyZ3MgPSB1bnBhY2skaChhcmdzLCAncmdiJyk7XG4gICAgdmFyIHIgPSBhcmdzWzBdO1xuICAgIHZhciBnID0gYXJnc1sxXTtcbiAgICB2YXIgYiA9IGFyZ3NbMl07XG4gICAgdmFyIG1pbl8gPSBtaW4kMShyLCBnLCBiKTtcbiAgICB2YXIgbWF4XyA9IG1heCQxKHIsIGcsIGIpO1xuICAgIHZhciBkZWx0YSA9IG1heF8gLSBtaW5fO1xuICAgIHZhciBoLCBzLCB2O1xuICAgIHYgPSBtYXhfIC8gMjU1LjA7XG5cbiAgICBpZiAobWF4XyA9PT0gMCkge1xuICAgICAgaCA9IE51bWJlci5OYU47XG4gICAgICBzID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgcyA9IGRlbHRhIC8gbWF4XztcblxuICAgICAgaWYgKHIgPT09IG1heF8pIHtcbiAgICAgICAgaCA9IChnIC0gYikgLyBkZWx0YTtcbiAgICAgIH1cblxuICAgICAgaWYgKGcgPT09IG1heF8pIHtcbiAgICAgICAgaCA9IDIgKyAoYiAtIHIpIC8gZGVsdGE7XG4gICAgICB9XG5cbiAgICAgIGlmIChiID09PSBtYXhfKSB7XG4gICAgICAgIGggPSA0ICsgKHIgLSBnKSAvIGRlbHRhO1xuICAgICAgfVxuXG4gICAgICBoICo9IDYwO1xuXG4gICAgICBpZiAoaCA8IDApIHtcbiAgICAgICAgaCArPSAzNjA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFtoLCBzLCB2XTtcbiAgfTtcblxuICB2YXIgcmdiMmhzdiA9IHJnYjJoc2wkMTtcbiAgdmFyIHVucGFjayRpID0gdXRpbHMudW5wYWNrO1xuICB2YXIgZmxvb3IkMSA9IE1hdGguZmxvb3I7XG5cbiAgdmFyIGhzdjJyZ2IgPSBmdW5jdGlvbiBoc3YycmdiKCkge1xuICAgIHZhciBhc3NpZ24sIGFzc2lnbiQxLCBhc3NpZ24kMiwgYXNzaWduJDMsIGFzc2lnbiQ0LCBhc3NpZ24kNTtcbiAgICB2YXIgYXJncyA9IFtdLFxuICAgICAgICBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGxlbi0tKSB7XG4gICAgICBhcmdzW2xlbl0gPSBhcmd1bWVudHNbbGVuXTtcbiAgICB9XG5cbiAgICBhcmdzID0gdW5wYWNrJGkoYXJncywgJ2hzdicpO1xuICAgIHZhciBoID0gYXJnc1swXTtcbiAgICB2YXIgcyA9IGFyZ3NbMV07XG4gICAgdmFyIHYgPSBhcmdzWzJdO1xuICAgIHZhciByLCBnLCBiO1xuICAgIHYgKj0gMjU1O1xuXG4gICAgaWYgKHMgPT09IDApIHtcbiAgICAgIHIgPSBnID0gYiA9IHY7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChoID09PSAzNjApIHtcbiAgICAgICAgaCA9IDA7XG4gICAgICB9XG5cbiAgICAgIGlmIChoID4gMzYwKSB7XG4gICAgICAgIGggLT0gMzYwO1xuICAgICAgfVxuXG4gICAgICBpZiAoaCA8IDApIHtcbiAgICAgICAgaCArPSAzNjA7XG4gICAgICB9XG5cbiAgICAgIGggLz0gNjA7XG4gICAgICB2YXIgaSA9IGZsb29yJDEoaCk7XG4gICAgICB2YXIgZiA9IGggLSBpO1xuICAgICAgdmFyIHAgPSB2ICogKDEgLSBzKTtcbiAgICAgIHZhciBxID0gdiAqICgxIC0gcyAqIGYpO1xuICAgICAgdmFyIHQgPSB2ICogKDEgLSBzICogKDEgLSBmKSk7XG5cbiAgICAgIHN3aXRjaCAoaSkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgYXNzaWduID0gW3YsIHQsIHBdLCByID0gYXNzaWduWzBdLCBnID0gYXNzaWduWzFdLCBiID0gYXNzaWduWzJdO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBhc3NpZ24kMSA9IFtxLCB2LCBwXSwgciA9IGFzc2lnbiQxWzBdLCBnID0gYXNzaWduJDFbMV0sIGIgPSBhc3NpZ24kMVsyXTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgYXNzaWduJDIgPSBbcCwgdiwgdF0sIHIgPSBhc3NpZ24kMlswXSwgZyA9IGFzc2lnbiQyWzFdLCBiID0gYXNzaWduJDJbMl07XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIGFzc2lnbiQzID0gW3AsIHEsIHZdLCByID0gYXNzaWduJDNbMF0sIGcgPSBhc3NpZ24kM1sxXSwgYiA9IGFzc2lnbiQzWzJdO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBhc3NpZ24kNCA9IFt0LCBwLCB2XSwgciA9IGFzc2lnbiQ0WzBdLCBnID0gYXNzaWduJDRbMV0sIGIgPSBhc3NpZ24kNFsyXTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgYXNzaWduJDUgPSBbdiwgcCwgcV0sIHIgPSBhc3NpZ24kNVswXSwgZyA9IGFzc2lnbiQ1WzFdLCBiID0gYXNzaWduJDVbMl07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFtyLCBnLCBiLCBhcmdzLmxlbmd0aCA+IDMgPyBhcmdzWzNdIDogMV07XG4gIH07XG5cbiAgdmFyIGhzdjJyZ2JfMSA9IGhzdjJyZ2I7XG4gIHZhciB1bnBhY2skaiA9IHV0aWxzLnVucGFjaztcbiAgdmFyIHR5cGUkOCA9IHV0aWxzLnR5cGU7XG5cbiAgQ29sb3JfMS5wcm90b3R5cGUuaHN2ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiByZ2IyaHN2KHRoaXMuX3JnYik7XG4gIH07XG5cbiAgY2hyb21hXzEuaHN2ID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBhcmdzID0gW10sXG4gICAgICAgIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cbiAgICB3aGlsZSAobGVuLS0pIHtcbiAgICAgIGFyZ3NbbGVuXSA9IGFyZ3VtZW50c1tsZW5dO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KENvbG9yXzEsIFtudWxsXS5jb25jYXQoYXJncywgWydoc3YnXSkpKSgpO1xuICB9O1xuXG4gIGlucHV0LmZvcm1hdC5oc3YgPSBoc3YycmdiXzE7XG4gIGlucHV0LmF1dG9kZXRlY3QucHVzaCh7XG4gICAgcDogMixcbiAgICB0ZXN0OiBmdW5jdGlvbiB0ZXN0KCkge1xuICAgICAgdmFyIGFyZ3MgPSBbXSxcbiAgICAgICAgICBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgICB3aGlsZSAobGVuLS0pIHtcbiAgICAgICAgYXJnc1tsZW5dID0gYXJndW1lbnRzW2xlbl07XG4gICAgICB9XG5cbiAgICAgIGFyZ3MgPSB1bnBhY2skaihhcmdzLCAnaHN2Jyk7XG5cbiAgICAgIGlmICh0eXBlJDgoYXJncykgPT09ICdhcnJheScgJiYgYXJncy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgcmV0dXJuICdoc3YnO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHZhciBsYWJDb25zdGFudHMgPSB7XG4gICAgLy8gQ29ycmVzcG9uZHMgcm91Z2hseSB0byBSR0IgYnJpZ2h0ZXIvZGFya2VyXG4gICAgS246IDE4LFxuICAgIC8vIEQ2NSBzdGFuZGFyZCByZWZlcmVudFxuICAgIFhuOiAwLjk1MDQ3MCxcbiAgICBZbjogMSxcbiAgICBabjogMS4wODg4MzAsXG4gICAgdDA6IDAuMTM3OTMxMDM0LFxuICAgIC8vIDQgLyAyOVxuICAgIHQxOiAwLjIwNjg5NjU1MixcbiAgICAvLyA2IC8gMjlcbiAgICB0MjogMC4xMjg0MTg1NSxcbiAgICAvLyAzICogdDEgKiB0MVxuICAgIHQzOiAwLjAwODg1NjQ1MiAvLyB0MSAqIHQxICogdDFcblxuICB9O1xuICB2YXIgdW5wYWNrJGsgPSB1dGlscy51bnBhY2s7XG4gIHZhciBwb3cgPSBNYXRoLnBvdztcblxuICB2YXIgcmdiMmxhYiA9IGZ1bmN0aW9uIHJnYjJsYWIoKSB7XG4gICAgdmFyIGFyZ3MgPSBbXSxcbiAgICAgICAgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcblxuICAgIHdoaWxlIChsZW4tLSkge1xuICAgICAgYXJnc1tsZW5dID0gYXJndW1lbnRzW2xlbl07XG4gICAgfVxuXG4gICAgdmFyIHJlZiA9IHVucGFjayRrKGFyZ3MsICdyZ2InKTtcbiAgICB2YXIgciA9IHJlZlswXTtcbiAgICB2YXIgZyA9IHJlZlsxXTtcbiAgICB2YXIgYiA9IHJlZlsyXTtcbiAgICB2YXIgcmVmJDEgPSByZ2IyeHl6KHIsIGcsIGIpO1xuICAgIHZhciB4ID0gcmVmJDFbMF07XG4gICAgdmFyIHkgPSByZWYkMVsxXTtcbiAgICB2YXIgeiA9IHJlZiQxWzJdO1xuICAgIHZhciBsID0gMTE2ICogeSAtIDE2O1xuICAgIHJldHVybiBbbCA8IDAgPyAwIDogbCwgNTAwICogKHggLSB5KSwgMjAwICogKHkgLSB6KV07XG4gIH07XG5cbiAgdmFyIHJnYl94eXogPSBmdW5jdGlvbiByZ2JfeHl6KHIpIHtcbiAgICBpZiAoKHIgLz0gMjU1KSA8PSAwLjA0MDQ1KSB7XG4gICAgICByZXR1cm4gciAvIDEyLjkyO1xuICAgIH1cblxuICAgIHJldHVybiBwb3coKHIgKyAwLjA1NSkgLyAxLjA1NSwgMi40KTtcbiAgfTtcblxuICB2YXIgeHl6X2xhYiA9IGZ1bmN0aW9uIHh5el9sYWIodCkge1xuICAgIGlmICh0ID4gbGFiQ29uc3RhbnRzLnQzKSB7XG4gICAgICByZXR1cm4gcG93KHQsIDEgLyAzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdCAvIGxhYkNvbnN0YW50cy50MiArIGxhYkNvbnN0YW50cy50MDtcbiAgfTtcblxuICB2YXIgcmdiMnh5eiA9IGZ1bmN0aW9uIHJnYjJ4eXoociwgZywgYikge1xuICAgIHIgPSByZ2JfeHl6KHIpO1xuICAgIGcgPSByZ2JfeHl6KGcpO1xuICAgIGIgPSByZ2JfeHl6KGIpO1xuICAgIHZhciB4ID0geHl6X2xhYigoMC40MTI0NTY0ICogciArIDAuMzU3NTc2MSAqIGcgKyAwLjE4MDQzNzUgKiBiKSAvIGxhYkNvbnN0YW50cy5Ybik7XG4gICAgdmFyIHkgPSB4eXpfbGFiKCgwLjIxMjY3MjkgKiByICsgMC43MTUxNTIyICogZyArIDAuMDcyMTc1MCAqIGIpIC8gbGFiQ29uc3RhbnRzLlluKTtcbiAgICB2YXIgeiA9IHh5el9sYWIoKDAuMDE5MzMzOSAqIHIgKyAwLjExOTE5MjAgKiBnICsgMC45NTAzMDQxICogYikgLyBsYWJDb25zdGFudHMuWm4pO1xuICAgIHJldHVybiBbeCwgeSwgel07XG4gIH07XG5cbiAgdmFyIHJnYjJsYWJfMSA9IHJnYjJsYWI7XG4gIHZhciB1bnBhY2skbCA9IHV0aWxzLnVucGFjaztcbiAgdmFyIHBvdyQxID0gTWF0aC5wb3c7XG4gIC8qXG4gICAqIEwqIFswLi4xMDBdXG4gICAqIGEgWy0xMDAuLjEwMF1cbiAgICogYiBbLTEwMC4uMTAwXVxuICAgKi9cblxuICB2YXIgbGFiMnJnYiA9IGZ1bmN0aW9uIGxhYjJyZ2IoKSB7XG4gICAgdmFyIGFyZ3MgPSBbXSxcbiAgICAgICAgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcblxuICAgIHdoaWxlIChsZW4tLSkge1xuICAgICAgYXJnc1tsZW5dID0gYXJndW1lbnRzW2xlbl07XG4gICAgfVxuXG4gICAgYXJncyA9IHVucGFjayRsKGFyZ3MsICdsYWInKTtcbiAgICB2YXIgbCA9IGFyZ3NbMF07XG4gICAgdmFyIGEgPSBhcmdzWzFdO1xuICAgIHZhciBiID0gYXJnc1syXTtcbiAgICB2YXIgeCwgeSwgeiwgciwgZywgYl87XG4gICAgeSA9IChsICsgMTYpIC8gMTE2O1xuICAgIHggPSBpc05hTihhKSA/IHkgOiB5ICsgYSAvIDUwMDtcbiAgICB6ID0gaXNOYU4oYikgPyB5IDogeSAtIGIgLyAyMDA7XG4gICAgeSA9IGxhYkNvbnN0YW50cy5ZbiAqIGxhYl94eXooeSk7XG4gICAgeCA9IGxhYkNvbnN0YW50cy5YbiAqIGxhYl94eXooeCk7XG4gICAgeiA9IGxhYkNvbnN0YW50cy5abiAqIGxhYl94eXooeik7XG4gICAgciA9IHh5el9yZ2IoMy4yNDA0NTQyICogeCAtIDEuNTM3MTM4NSAqIHkgLSAwLjQ5ODUzMTQgKiB6KTsgLy8gRDY1IC0+IHNSR0JcblxuICAgIGcgPSB4eXpfcmdiKC0wLjk2OTI2NjAgKiB4ICsgMS44NzYwMTA4ICogeSArIDAuMDQxNTU2MCAqIHopO1xuICAgIGJfID0geHl6X3JnYigwLjA1NTY0MzQgKiB4IC0gMC4yMDQwMjU5ICogeSArIDEuMDU3MjI1MiAqIHopO1xuICAgIHJldHVybiBbciwgZywgYl8sIGFyZ3MubGVuZ3RoID4gMyA/IGFyZ3NbM10gOiAxXTtcbiAgfTtcblxuICB2YXIgeHl6X3JnYiA9IGZ1bmN0aW9uIHh5el9yZ2Iocikge1xuICAgIHJldHVybiAyNTUgKiAociA8PSAwLjAwMzA0ID8gMTIuOTIgKiByIDogMS4wNTUgKiBwb3ckMShyLCAxIC8gMi40KSAtIDAuMDU1KTtcbiAgfTtcblxuICB2YXIgbGFiX3h5eiA9IGZ1bmN0aW9uIGxhYl94eXoodCkge1xuICAgIHJldHVybiB0ID4gbGFiQ29uc3RhbnRzLnQxID8gdCAqIHQgKiB0IDogbGFiQ29uc3RhbnRzLnQyICogKHQgLSBsYWJDb25zdGFudHMudDApO1xuICB9O1xuXG4gIHZhciBsYWIycmdiXzEgPSBsYWIycmdiO1xuICB2YXIgdW5wYWNrJG0gPSB1dGlscy51bnBhY2s7XG4gIHZhciB0eXBlJDkgPSB1dGlscy50eXBlO1xuXG4gIENvbG9yXzEucHJvdG90eXBlLmxhYiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gcmdiMmxhYl8xKHRoaXMuX3JnYik7XG4gIH07XG5cbiAgY2hyb21hXzEubGFiID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBhcmdzID0gW10sXG4gICAgICAgIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cbiAgICB3aGlsZSAobGVuLS0pIHtcbiAgICAgIGFyZ3NbbGVuXSA9IGFyZ3VtZW50c1tsZW5dO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KENvbG9yXzEsIFtudWxsXS5jb25jYXQoYXJncywgWydsYWInXSkpKSgpO1xuICB9O1xuXG4gIGlucHV0LmZvcm1hdC5sYWIgPSBsYWIycmdiXzE7XG4gIGlucHV0LmF1dG9kZXRlY3QucHVzaCh7XG4gICAgcDogMixcbiAgICB0ZXN0OiBmdW5jdGlvbiB0ZXN0KCkge1xuICAgICAgdmFyIGFyZ3MgPSBbXSxcbiAgICAgICAgICBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgICB3aGlsZSAobGVuLS0pIHtcbiAgICAgICAgYXJnc1tsZW5dID0gYXJndW1lbnRzW2xlbl07XG4gICAgICB9XG5cbiAgICAgIGFyZ3MgPSB1bnBhY2skbShhcmdzLCAnbGFiJyk7XG5cbiAgICAgIGlmICh0eXBlJDkoYXJncykgPT09ICdhcnJheScgJiYgYXJncy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgcmV0dXJuICdsYWInO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHZhciB1bnBhY2skbiA9IHV0aWxzLnVucGFjaztcbiAgdmFyIFJBRDJERUcgPSB1dGlscy5SQUQyREVHO1xuICB2YXIgc3FydCQxID0gTWF0aC5zcXJ0O1xuICB2YXIgYXRhbjIgPSBNYXRoLmF0YW4yO1xuICB2YXIgcm91bmQkNCA9IE1hdGgucm91bmQ7XG5cbiAgdmFyIGxhYjJsY2ggPSBmdW5jdGlvbiBsYWIybGNoKCkge1xuICAgIHZhciBhcmdzID0gW10sXG4gICAgICAgIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cbiAgICB3aGlsZSAobGVuLS0pIHtcbiAgICAgIGFyZ3NbbGVuXSA9IGFyZ3VtZW50c1tsZW5dO1xuICAgIH1cblxuICAgIHZhciByZWYgPSB1bnBhY2skbihhcmdzLCAnbGFiJyk7XG4gICAgdmFyIGwgPSByZWZbMF07XG4gICAgdmFyIGEgPSByZWZbMV07XG4gICAgdmFyIGIgPSByZWZbMl07XG4gICAgdmFyIGMgPSBzcXJ0JDEoYSAqIGEgKyBiICogYik7XG4gICAgdmFyIGggPSAoYXRhbjIoYiwgYSkgKiBSQUQyREVHICsgMzYwKSAlIDM2MDtcblxuICAgIGlmIChyb3VuZCQ0KGMgKiAxMDAwMCkgPT09IDApIHtcbiAgICAgIGggPSBOdW1iZXIuTmFOO1xuICAgIH1cblxuICAgIHJldHVybiBbbCwgYywgaF07XG4gIH07XG5cbiAgdmFyIGxhYjJsY2hfMSA9IGxhYjJsY2g7XG4gIHZhciB1bnBhY2skbyA9IHV0aWxzLnVucGFjaztcblxuICB2YXIgcmdiMmxjaCA9IGZ1bmN0aW9uIHJnYjJsY2goKSB7XG4gICAgdmFyIGFyZ3MgPSBbXSxcbiAgICAgICAgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcblxuICAgIHdoaWxlIChsZW4tLSkge1xuICAgICAgYXJnc1tsZW5dID0gYXJndW1lbnRzW2xlbl07XG4gICAgfVxuXG4gICAgdmFyIHJlZiA9IHVucGFjayRvKGFyZ3MsICdyZ2InKTtcbiAgICB2YXIgciA9IHJlZlswXTtcbiAgICB2YXIgZyA9IHJlZlsxXTtcbiAgICB2YXIgYiA9IHJlZlsyXTtcbiAgICB2YXIgcmVmJDEgPSByZ2IybGFiXzEociwgZywgYik7XG4gICAgdmFyIGwgPSByZWYkMVswXTtcbiAgICB2YXIgYSA9IHJlZiQxWzFdO1xuICAgIHZhciBiXyA9IHJlZiQxWzJdO1xuICAgIHJldHVybiBsYWIybGNoXzEobCwgYSwgYl8pO1xuICB9O1xuXG4gIHZhciByZ2IybGNoXzEgPSByZ2IybGNoO1xuICB2YXIgdW5wYWNrJHAgPSB1dGlscy51bnBhY2s7XG4gIHZhciBERUcyUkFEID0gdXRpbHMuREVHMlJBRDtcbiAgdmFyIHNpbiA9IE1hdGguc2luO1xuICB2YXIgY29zJDEgPSBNYXRoLmNvcztcblxuICB2YXIgbGNoMmxhYiA9IGZ1bmN0aW9uIGxjaDJsYWIoKSB7XG4gICAgdmFyIGFyZ3MgPSBbXSxcbiAgICAgICAgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcblxuICAgIHdoaWxlIChsZW4tLSkge1xuICAgICAgYXJnc1tsZW5dID0gYXJndW1lbnRzW2xlbl07XG4gICAgfVxuICAgIC8qXG4gICAgQ29udmVydCBmcm9tIGEgcXVhbGl0YXRpdmUgcGFyYW1ldGVyIGggYW5kIGEgcXVhbnRpdGF0aXZlIHBhcmFtZXRlciBsIHRvIGEgMjQtYml0IHBpeGVsLlxuICAgIFRoZXNlIGZvcm11bGFzIHdlcmUgaW52ZW50ZWQgYnkgRGF2aWQgRGFscnltcGxlIHRvIG9idGFpbiBtYXhpbXVtIGNvbnRyYXN0IHdpdGhvdXQgZ29pbmdcbiAgICBvdXQgb2YgZ2FtdXQgaWYgdGhlIHBhcmFtZXRlcnMgYXJlIGluIHRoZSByYW5nZSAwLTEuXG4gICAgIEEgc2F0dXJhdGlvbiBtdWx0aXBsaWVyIHdhcyBhZGRlZCBieSBHcmVnb3IgQWlzY2hcbiAgICAqL1xuXG5cbiAgICB2YXIgcmVmID0gdW5wYWNrJHAoYXJncywgJ2xjaCcpO1xuICAgIHZhciBsID0gcmVmWzBdO1xuICAgIHZhciBjID0gcmVmWzFdO1xuICAgIHZhciBoID0gcmVmWzJdO1xuXG4gICAgaWYgKGlzTmFOKGgpKSB7XG4gICAgICBoID0gMDtcbiAgICB9XG5cbiAgICBoID0gaCAqIERFRzJSQUQ7XG4gICAgcmV0dXJuIFtsLCBjb3MkMShoKSAqIGMsIHNpbihoKSAqIGNdO1xuICB9O1xuXG4gIHZhciBsY2gybGFiXzEgPSBsY2gybGFiO1xuICB2YXIgdW5wYWNrJHEgPSB1dGlscy51bnBhY2s7XG5cbiAgdmFyIGxjaDJyZ2IgPSBmdW5jdGlvbiBsY2gycmdiKCkge1xuICAgIHZhciBhcmdzID0gW10sXG4gICAgICAgIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cbiAgICB3aGlsZSAobGVuLS0pIHtcbiAgICAgIGFyZ3NbbGVuXSA9IGFyZ3VtZW50c1tsZW5dO1xuICAgIH1cblxuICAgIGFyZ3MgPSB1bnBhY2skcShhcmdzLCAnbGNoJyk7XG4gICAgdmFyIGwgPSBhcmdzWzBdO1xuICAgIHZhciBjID0gYXJnc1sxXTtcbiAgICB2YXIgaCA9IGFyZ3NbMl07XG4gICAgdmFyIHJlZiA9IGxjaDJsYWJfMShsLCBjLCBoKTtcbiAgICB2YXIgTCA9IHJlZlswXTtcbiAgICB2YXIgYSA9IHJlZlsxXTtcbiAgICB2YXIgYl8gPSByZWZbMl07XG4gICAgdmFyIHJlZiQxID0gbGFiMnJnYl8xKEwsIGEsIGJfKTtcbiAgICB2YXIgciA9IHJlZiQxWzBdO1xuICAgIHZhciBnID0gcmVmJDFbMV07XG4gICAgdmFyIGIgPSByZWYkMVsyXTtcbiAgICByZXR1cm4gW3IsIGcsIGIsIGFyZ3MubGVuZ3RoID4gMyA/IGFyZ3NbM10gOiAxXTtcbiAgfTtcblxuICB2YXIgbGNoMnJnYl8xID0gbGNoMnJnYjtcbiAgdmFyIHVucGFjayRyID0gdXRpbHMudW5wYWNrO1xuXG4gIHZhciBoY2wycmdiID0gZnVuY3Rpb24gaGNsMnJnYigpIHtcbiAgICB2YXIgYXJncyA9IFtdLFxuICAgICAgICBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGxlbi0tKSB7XG4gICAgICBhcmdzW2xlbl0gPSBhcmd1bWVudHNbbGVuXTtcbiAgICB9XG5cbiAgICB2YXIgaGNsID0gdW5wYWNrJHIoYXJncywgJ2hjbCcpLnJldmVyc2UoKTtcbiAgICByZXR1cm4gbGNoMnJnYl8xLmFwcGx5KHZvaWQgMCwgaGNsKTtcbiAgfTtcblxuICB2YXIgaGNsMnJnYl8xID0gaGNsMnJnYjtcbiAgdmFyIHVucGFjayRzID0gdXRpbHMudW5wYWNrO1xuICB2YXIgdHlwZSRhID0gdXRpbHMudHlwZTtcblxuICBDb2xvcl8xLnByb3RvdHlwZS5sY2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHJnYjJsY2hfMSh0aGlzLl9yZ2IpO1xuICB9O1xuXG4gIENvbG9yXzEucHJvdG90eXBlLmhjbCA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gcmdiMmxjaF8xKHRoaXMuX3JnYikucmV2ZXJzZSgpO1xuICB9O1xuXG4gIGNocm9tYV8xLmxjaCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYXJncyA9IFtdLFxuICAgICAgICBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGxlbi0tKSB7XG4gICAgICBhcmdzW2xlbl0gPSBhcmd1bWVudHNbbGVuXTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IChGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5hcHBseShDb2xvcl8xLCBbbnVsbF0uY29uY2F0KGFyZ3MsIFsnbGNoJ10pKSkoKTtcbiAgfTtcblxuICBjaHJvbWFfMS5oY2wgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGFyZ3MgPSBbXSxcbiAgICAgICAgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcblxuICAgIHdoaWxlIChsZW4tLSkge1xuICAgICAgYXJnc1tsZW5dID0gYXJndW1lbnRzW2xlbl07XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuYXBwbHkoQ29sb3JfMSwgW251bGxdLmNvbmNhdChhcmdzLCBbJ2hjbCddKSkpKCk7XG4gIH07XG5cbiAgaW5wdXQuZm9ybWF0LmxjaCA9IGxjaDJyZ2JfMTtcbiAgaW5wdXQuZm9ybWF0LmhjbCA9IGhjbDJyZ2JfMTtcbiAgWydsY2gnLCAnaGNsJ10uZm9yRWFjaChmdW5jdGlvbiAobSkge1xuICAgIHJldHVybiBpbnB1dC5hdXRvZGV0ZWN0LnB1c2goe1xuICAgICAgcDogMixcbiAgICAgIHRlc3Q6IGZ1bmN0aW9uIHRlc3QoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sXG4gICAgICAgICAgICBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgICAgIHdoaWxlIChsZW4tLSkge1xuICAgICAgICAgIGFyZ3NbbGVuXSA9IGFyZ3VtZW50c1tsZW5dO1xuICAgICAgICB9XG5cbiAgICAgICAgYXJncyA9IHVucGFjayRzKGFyZ3MsIG0pO1xuXG4gICAgICAgIGlmICh0eXBlJGEoYXJncykgPT09ICdhcnJheScgJiYgYXJncy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICByZXR1cm4gbTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbiAgLyoqXG4gIFx0WDExIGNvbG9yIG5hbWVzXG4gICBcdGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtY29sb3IvI3N2Zy1jb2xvclxuICAqL1xuXG4gIHZhciB3M2N4MTEgPSB7XG4gICAgYWxpY2VibHVlOiAnI2YwZjhmZicsXG4gICAgYW50aXF1ZXdoaXRlOiAnI2ZhZWJkNycsXG4gICAgYXF1YTogJyMwMGZmZmYnLFxuICAgIGFxdWFtYXJpbmU6ICcjN2ZmZmQ0JyxcbiAgICBhenVyZTogJyNmMGZmZmYnLFxuICAgIGJlaWdlOiAnI2Y1ZjVkYycsXG4gICAgYmlzcXVlOiAnI2ZmZTRjNCcsXG4gICAgYmxhY2s6ICcjMDAwMDAwJyxcbiAgICBibGFuY2hlZGFsbW9uZDogJyNmZmViY2QnLFxuICAgIGJsdWU6ICcjMDAwMGZmJyxcbiAgICBibHVldmlvbGV0OiAnIzhhMmJlMicsXG4gICAgYnJvd246ICcjYTUyYTJhJyxcbiAgICBidXJseXdvb2Q6ICcjZGViODg3JyxcbiAgICBjYWRldGJsdWU6ICcjNWY5ZWEwJyxcbiAgICBjaGFydHJldXNlOiAnIzdmZmYwMCcsXG4gICAgY2hvY29sYXRlOiAnI2QyNjkxZScsXG4gICAgY29yYWw6ICcjZmY3ZjUwJyxcbiAgICBjb3JuZmxvd2VyOiAnIzY0OTVlZCcsXG4gICAgY29ybmZsb3dlcmJsdWU6ICcjNjQ5NWVkJyxcbiAgICBjb3Juc2lsazogJyNmZmY4ZGMnLFxuICAgIGNyaW1zb246ICcjZGMxNDNjJyxcbiAgICBjeWFuOiAnIzAwZmZmZicsXG4gICAgZGFya2JsdWU6ICcjMDAwMDhiJyxcbiAgICBkYXJrY3lhbjogJyMwMDhiOGInLFxuICAgIGRhcmtnb2xkZW5yb2Q6ICcjYjg4NjBiJyxcbiAgICBkYXJrZ3JheTogJyNhOWE5YTknLFxuICAgIGRhcmtncmVlbjogJyMwMDY0MDAnLFxuICAgIGRhcmtncmV5OiAnI2E5YTlhOScsXG4gICAgZGFya2toYWtpOiAnI2JkYjc2YicsXG4gICAgZGFya21hZ2VudGE6ICcjOGIwMDhiJyxcbiAgICBkYXJrb2xpdmVncmVlbjogJyM1NTZiMmYnLFxuICAgIGRhcmtvcmFuZ2U6ICcjZmY4YzAwJyxcbiAgICBkYXJrb3JjaGlkOiAnIzk5MzJjYycsXG4gICAgZGFya3JlZDogJyM4YjAwMDAnLFxuICAgIGRhcmtzYWxtb246ICcjZTk5NjdhJyxcbiAgICBkYXJrc2VhZ3JlZW46ICcjOGZiYzhmJyxcbiAgICBkYXJrc2xhdGVibHVlOiAnIzQ4M2Q4YicsXG4gICAgZGFya3NsYXRlZ3JheTogJyMyZjRmNGYnLFxuICAgIGRhcmtzbGF0ZWdyZXk6ICcjMmY0ZjRmJyxcbiAgICBkYXJrdHVycXVvaXNlOiAnIzAwY2VkMScsXG4gICAgZGFya3Zpb2xldDogJyM5NDAwZDMnLFxuICAgIGRlZXBwaW5rOiAnI2ZmMTQ5MycsXG4gICAgZGVlcHNreWJsdWU6ICcjMDBiZmZmJyxcbiAgICBkaW1ncmF5OiAnIzY5Njk2OScsXG4gICAgZGltZ3JleTogJyM2OTY5NjknLFxuICAgIGRvZGdlcmJsdWU6ICcjMWU5MGZmJyxcbiAgICBmaXJlYnJpY2s6ICcjYjIyMjIyJyxcbiAgICBmbG9yYWx3aGl0ZTogJyNmZmZhZjAnLFxuICAgIGZvcmVzdGdyZWVuOiAnIzIyOGIyMicsXG4gICAgZnVjaHNpYTogJyNmZjAwZmYnLFxuICAgIGdhaW5zYm9ybzogJyNkY2RjZGMnLFxuICAgIGdob3N0d2hpdGU6ICcjZjhmOGZmJyxcbiAgICBnb2xkOiAnI2ZmZDcwMCcsXG4gICAgZ29sZGVucm9kOiAnI2RhYTUyMCcsXG4gICAgZ3JheTogJyM4MDgwODAnLFxuICAgIGdyZWVuOiAnIzAwODAwMCcsXG4gICAgZ3JlZW55ZWxsb3c6ICcjYWRmZjJmJyxcbiAgICBncmV5OiAnIzgwODA4MCcsXG4gICAgaG9uZXlkZXc6ICcjZjBmZmYwJyxcbiAgICBob3RwaW5rOiAnI2ZmNjliNCcsXG4gICAgaW5kaWFucmVkOiAnI2NkNWM1YycsXG4gICAgaW5kaWdvOiAnIzRiMDA4MicsXG4gICAgaXZvcnk6ICcjZmZmZmYwJyxcbiAgICBraGFraTogJyNmMGU2OGMnLFxuICAgIGxhc2VybGVtb246ICcjZmZmZjU0JyxcbiAgICBsYXZlbmRlcjogJyNlNmU2ZmEnLFxuICAgIGxhdmVuZGVyYmx1c2g6ICcjZmZmMGY1JyxcbiAgICBsYXduZ3JlZW46ICcjN2NmYzAwJyxcbiAgICBsZW1vbmNoaWZmb246ICcjZmZmYWNkJyxcbiAgICBsaWdodGJsdWU6ICcjYWRkOGU2JyxcbiAgICBsaWdodGNvcmFsOiAnI2YwODA4MCcsXG4gICAgbGlnaHRjeWFuOiAnI2UwZmZmZicsXG4gICAgbGlnaHRnb2xkZW5yb2Q6ICcjZmFmYWQyJyxcbiAgICBsaWdodGdvbGRlbnJvZHllbGxvdzogJyNmYWZhZDInLFxuICAgIGxpZ2h0Z3JheTogJyNkM2QzZDMnLFxuICAgIGxpZ2h0Z3JlZW46ICcjOTBlZTkwJyxcbiAgICBsaWdodGdyZXk6ICcjZDNkM2QzJyxcbiAgICBsaWdodHBpbms6ICcjZmZiNmMxJyxcbiAgICBsaWdodHNhbG1vbjogJyNmZmEwN2EnLFxuICAgIGxpZ2h0c2VhZ3JlZW46ICcjMjBiMmFhJyxcbiAgICBsaWdodHNreWJsdWU6ICcjODdjZWZhJyxcbiAgICBsaWdodHNsYXRlZ3JheTogJyM3Nzg4OTknLFxuICAgIGxpZ2h0c2xhdGVncmV5OiAnIzc3ODg5OScsXG4gICAgbGlnaHRzdGVlbGJsdWU6ICcjYjBjNGRlJyxcbiAgICBsaWdodHllbGxvdzogJyNmZmZmZTAnLFxuICAgIGxpbWU6ICcjMDBmZjAwJyxcbiAgICBsaW1lZ3JlZW46ICcjMzJjZDMyJyxcbiAgICBsaW5lbjogJyNmYWYwZTYnLFxuICAgIG1hZ2VudGE6ICcjZmYwMGZmJyxcbiAgICBtYXJvb246ICcjODAwMDAwJyxcbiAgICBtYXJvb24yOiAnIzdmMDAwMCcsXG4gICAgbWFyb29uMzogJyNiMDMwNjAnLFxuICAgIG1lZGl1bWFxdWFtYXJpbmU6ICcjNjZjZGFhJyxcbiAgICBtZWRpdW1ibHVlOiAnIzAwMDBjZCcsXG4gICAgbWVkaXVtb3JjaGlkOiAnI2JhNTVkMycsXG4gICAgbWVkaXVtcHVycGxlOiAnIzkzNzBkYicsXG4gICAgbWVkaXVtc2VhZ3JlZW46ICcjM2NiMzcxJyxcbiAgICBtZWRpdW1zbGF0ZWJsdWU6ICcjN2I2OGVlJyxcbiAgICBtZWRpdW1zcHJpbmdncmVlbjogJyMwMGZhOWEnLFxuICAgIG1lZGl1bXR1cnF1b2lzZTogJyM0OGQxY2MnLFxuICAgIG1lZGl1bXZpb2xldHJlZDogJyNjNzE1ODUnLFxuICAgIG1pZG5pZ2h0Ymx1ZTogJyMxOTE5NzAnLFxuICAgIG1pbnRjcmVhbTogJyNmNWZmZmEnLFxuICAgIG1pc3R5cm9zZTogJyNmZmU0ZTEnLFxuICAgIG1vY2Nhc2luOiAnI2ZmZTRiNScsXG4gICAgbmF2YWpvd2hpdGU6ICcjZmZkZWFkJyxcbiAgICBuYXZ5OiAnIzAwMDA4MCcsXG4gICAgb2xkbGFjZTogJyNmZGY1ZTYnLFxuICAgIG9saXZlOiAnIzgwODAwMCcsXG4gICAgb2xpdmVkcmFiOiAnIzZiOGUyMycsXG4gICAgb3JhbmdlOiAnI2ZmYTUwMCcsXG4gICAgb3JhbmdlcmVkOiAnI2ZmNDUwMCcsXG4gICAgb3JjaGlkOiAnI2RhNzBkNicsXG4gICAgcGFsZWdvbGRlbnJvZDogJyNlZWU4YWEnLFxuICAgIHBhbGVncmVlbjogJyM5OGZiOTgnLFxuICAgIHBhbGV0dXJxdW9pc2U6ICcjYWZlZWVlJyxcbiAgICBwYWxldmlvbGV0cmVkOiAnI2RiNzA5MycsXG4gICAgcGFwYXlhd2hpcDogJyNmZmVmZDUnLFxuICAgIHBlYWNocHVmZjogJyNmZmRhYjknLFxuICAgIHBlcnU6ICcjY2Q4NTNmJyxcbiAgICBwaW5rOiAnI2ZmYzBjYicsXG4gICAgcGx1bTogJyNkZGEwZGQnLFxuICAgIHBvd2RlcmJsdWU6ICcjYjBlMGU2JyxcbiAgICBwdXJwbGU6ICcjODAwMDgwJyxcbiAgICBwdXJwbGUyOiAnIzdmMDA3ZicsXG4gICAgcHVycGxlMzogJyNhMDIwZjAnLFxuICAgIHJlYmVjY2FwdXJwbGU6ICcjNjYzMzk5JyxcbiAgICByZWQ6ICcjZmYwMDAwJyxcbiAgICByb3N5YnJvd246ICcjYmM4ZjhmJyxcbiAgICByb3lhbGJsdWU6ICcjNDE2OWUxJyxcbiAgICBzYWRkbGVicm93bjogJyM4YjQ1MTMnLFxuICAgIHNhbG1vbjogJyNmYTgwNzInLFxuICAgIHNhbmR5YnJvd246ICcjZjRhNDYwJyxcbiAgICBzZWFncmVlbjogJyMyZThiNTcnLFxuICAgIHNlYXNoZWxsOiAnI2ZmZjVlZScsXG4gICAgc2llbm5hOiAnI2EwNTIyZCcsXG4gICAgc2lsdmVyOiAnI2MwYzBjMCcsXG4gICAgc2t5Ymx1ZTogJyM4N2NlZWInLFxuICAgIHNsYXRlYmx1ZTogJyM2YTVhY2QnLFxuICAgIHNsYXRlZ3JheTogJyM3MDgwOTAnLFxuICAgIHNsYXRlZ3JleTogJyM3MDgwOTAnLFxuICAgIHNub3c6ICcjZmZmYWZhJyxcbiAgICBzcHJpbmdncmVlbjogJyMwMGZmN2YnLFxuICAgIHN0ZWVsYmx1ZTogJyM0NjgyYjQnLFxuICAgIHRhbjogJyNkMmI0OGMnLFxuICAgIHRlYWw6ICcjMDA4MDgwJyxcbiAgICB0aGlzdGxlOiAnI2Q4YmZkOCcsXG4gICAgdG9tYXRvOiAnI2ZmNjM0NycsXG4gICAgdHVycXVvaXNlOiAnIzQwZTBkMCcsXG4gICAgdmlvbGV0OiAnI2VlODJlZScsXG4gICAgd2hlYXQ6ICcjZjVkZWIzJyxcbiAgICB3aGl0ZTogJyNmZmZmZmYnLFxuICAgIHdoaXRlc21va2U6ICcjZjVmNWY1JyxcbiAgICB5ZWxsb3c6ICcjZmZmZjAwJyxcbiAgICB5ZWxsb3dncmVlbjogJyM5YWNkMzInXG4gIH07XG4gIHZhciB3M2N4MTFfMSA9IHczY3gxMTtcbiAgdmFyIHR5cGUkYiA9IHV0aWxzLnR5cGU7XG5cbiAgQ29sb3JfMS5wcm90b3R5cGUubmFtZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaGV4ID0gcmdiMmhleF8xKHRoaXMuX3JnYiwgJ3JnYicpO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGxpc3QgPSBPYmplY3Qua2V5cyh3M2N4MTFfMSk7IGkgPCBsaXN0Lmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICB2YXIgbiA9IGxpc3RbaV07XG5cbiAgICAgIGlmICh3M2N4MTFfMVtuXSA9PT0gaGV4KSB7XG4gICAgICAgIHJldHVybiBuLnRvTG93ZXJDYXNlKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGhleDtcbiAgfTtcblxuICBpbnB1dC5mb3JtYXQubmFtZWQgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgICBpZiAodzNjeDExXzFbbmFtZV0pIHtcbiAgICAgIHJldHVybiBoZXgycmdiXzEodzNjeDExXzFbbmFtZV0pO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcigndW5rbm93biBjb2xvciBuYW1lOiAnICsgbmFtZSk7XG4gIH07XG5cbiAgaW5wdXQuYXV0b2RldGVjdC5wdXNoKHtcbiAgICBwOiA1LFxuICAgIHRlc3Q6IGZ1bmN0aW9uIHRlc3QoaCkge1xuICAgICAgdmFyIHJlc3QgPSBbXSxcbiAgICAgICAgICBsZW4gPSBhcmd1bWVudHMubGVuZ3RoIC0gMTtcblxuICAgICAgd2hpbGUgKGxlbi0tID4gMCkge1xuICAgICAgICByZXN0W2xlbl0gPSBhcmd1bWVudHNbbGVuICsgMV07XG4gICAgICB9XG5cbiAgICAgIGlmICghcmVzdC5sZW5ndGggJiYgdHlwZSRiKGgpID09PSAnc3RyaW5nJyAmJiB3M2N4MTFfMVtoLnRvTG93ZXJDYXNlKCldKSB7XG4gICAgICAgIHJldHVybiAnbmFtZWQnO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHZhciB1bnBhY2skdCA9IHV0aWxzLnVucGFjaztcblxuICB2YXIgcmdiMm51bSA9IGZ1bmN0aW9uIHJnYjJudW0oKSB7XG4gICAgdmFyIGFyZ3MgPSBbXSxcbiAgICAgICAgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcblxuICAgIHdoaWxlIChsZW4tLSkge1xuICAgICAgYXJnc1tsZW5dID0gYXJndW1lbnRzW2xlbl07XG4gICAgfVxuXG4gICAgdmFyIHJlZiA9IHVucGFjayR0KGFyZ3MsICdyZ2InKTtcbiAgICB2YXIgciA9IHJlZlswXTtcbiAgICB2YXIgZyA9IHJlZlsxXTtcbiAgICB2YXIgYiA9IHJlZlsyXTtcbiAgICByZXR1cm4gKHIgPDwgMTYpICsgKGcgPDwgOCkgKyBiO1xuICB9O1xuXG4gIHZhciByZ2IybnVtXzEgPSByZ2IybnVtO1xuICB2YXIgdHlwZSRjID0gdXRpbHMudHlwZTtcblxuICB2YXIgbnVtMnJnYiA9IGZ1bmN0aW9uIG51bTJyZ2IobnVtKSB7XG4gICAgaWYgKHR5cGUkYyhudW0pID09IFwibnVtYmVyXCIgJiYgbnVtID49IDAgJiYgbnVtIDw9IDB4RkZGRkZGKSB7XG4gICAgICB2YXIgciA9IG51bSA+PiAxNjtcbiAgICAgIHZhciBnID0gbnVtID4+IDggJiAweEZGO1xuICAgICAgdmFyIGIgPSBudW0gJiAweEZGO1xuICAgICAgcmV0dXJuIFtyLCBnLCBiLCAxXTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIG51bSBjb2xvcjogXCIgKyBudW0pO1xuICB9O1xuXG4gIHZhciBudW0ycmdiXzEgPSBudW0ycmdiO1xuICB2YXIgdHlwZSRkID0gdXRpbHMudHlwZTtcblxuICBDb2xvcl8xLnByb3RvdHlwZS5udW0gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHJnYjJudW1fMSh0aGlzLl9yZ2IpO1xuICB9O1xuXG4gIGNocm9tYV8xLm51bSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYXJncyA9IFtdLFxuICAgICAgICBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGxlbi0tKSB7XG4gICAgICBhcmdzW2xlbl0gPSBhcmd1bWVudHNbbGVuXTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IChGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5hcHBseShDb2xvcl8xLCBbbnVsbF0uY29uY2F0KGFyZ3MsIFsnbnVtJ10pKSkoKTtcbiAgfTtcblxuICBpbnB1dC5mb3JtYXQubnVtID0gbnVtMnJnYl8xO1xuICBpbnB1dC5hdXRvZGV0ZWN0LnB1c2goe1xuICAgIHA6IDUsXG4gICAgdGVzdDogZnVuY3Rpb24gdGVzdCgpIHtcbiAgICAgIHZhciBhcmdzID0gW10sXG4gICAgICAgICAgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcblxuICAgICAgd2hpbGUgKGxlbi0tKSB7XG4gICAgICAgIGFyZ3NbbGVuXSA9IGFyZ3VtZW50c1tsZW5dO1xuICAgICAgfVxuXG4gICAgICBpZiAoYXJncy5sZW5ndGggPT09IDEgJiYgdHlwZSRkKGFyZ3NbMF0pID09PSAnbnVtYmVyJyAmJiBhcmdzWzBdID49IDAgJiYgYXJnc1swXSA8PSAweEZGRkZGRikge1xuICAgICAgICByZXR1cm4gJ251bSc7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgdmFyIHVucGFjayR1ID0gdXRpbHMudW5wYWNrO1xuICB2YXIgdHlwZSRlID0gdXRpbHMudHlwZTtcbiAgdmFyIHJvdW5kJDUgPSBNYXRoLnJvdW5kO1xuXG4gIENvbG9yXzEucHJvdG90eXBlLnJnYiA9IGZ1bmN0aW9uIChybmQpIHtcbiAgICBpZiAocm5kID09PSB2b2lkIDApIHJuZCA9IHRydWU7XG5cbiAgICBpZiAocm5kID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3JnYi5zbGljZSgwLCAzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcmdiLnNsaWNlKDAsIDMpLm1hcChyb3VuZCQ1KTtcbiAgfTtcblxuICBDb2xvcl8xLnByb3RvdHlwZS5yZ2JhID0gZnVuY3Rpb24gKHJuZCkge1xuICAgIGlmIChybmQgPT09IHZvaWQgMCkgcm5kID0gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcy5fcmdiLnNsaWNlKDAsIDQpLm1hcChmdW5jdGlvbiAodiwgaSkge1xuICAgICAgcmV0dXJuIGkgPCAzID8gcm5kID09PSBmYWxzZSA/IHYgOiByb3VuZCQ1KHYpIDogdjtcbiAgICB9KTtcbiAgfTtcblxuICBjaHJvbWFfMS5yZ2IgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGFyZ3MgPSBbXSxcbiAgICAgICAgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcblxuICAgIHdoaWxlIChsZW4tLSkge1xuICAgICAgYXJnc1tsZW5dID0gYXJndW1lbnRzW2xlbl07XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuYXBwbHkoQ29sb3JfMSwgW251bGxdLmNvbmNhdChhcmdzLCBbJ3JnYiddKSkpKCk7XG4gIH07XG5cbiAgaW5wdXQuZm9ybWF0LnJnYiA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYXJncyA9IFtdLFxuICAgICAgICBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGxlbi0tKSB7XG4gICAgICBhcmdzW2xlbl0gPSBhcmd1bWVudHNbbGVuXTtcbiAgICB9XG5cbiAgICB2YXIgcmdiYSA9IHVucGFjayR1KGFyZ3MsICdyZ2JhJyk7XG5cbiAgICBpZiAocmdiYVszXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZ2JhWzNdID0gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmdiYTtcbiAgfTtcblxuICBpbnB1dC5hdXRvZGV0ZWN0LnB1c2goe1xuICAgIHA6IDMsXG4gICAgdGVzdDogZnVuY3Rpb24gdGVzdCgpIHtcbiAgICAgIHZhciBhcmdzID0gW10sXG4gICAgICAgICAgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcblxuICAgICAgd2hpbGUgKGxlbi0tKSB7XG4gICAgICAgIGFyZ3NbbGVuXSA9IGFyZ3VtZW50c1tsZW5dO1xuICAgICAgfVxuXG4gICAgICBhcmdzID0gdW5wYWNrJHUoYXJncywgJ3JnYmEnKTtcblxuICAgICAgaWYgKHR5cGUkZShhcmdzKSA9PT0gJ2FycmF5JyAmJiAoYXJncy5sZW5ndGggPT09IDMgfHwgYXJncy5sZW5ndGggPT09IDQgJiYgdHlwZSRlKGFyZ3NbM10pID09ICdudW1iZXInICYmIGFyZ3NbM10gPj0gMCAmJiBhcmdzWzNdIDw9IDEpKSB7XG4gICAgICAgIHJldHVybiAncmdiJztcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICAvKlxuICAgKiBCYXNlZCBvbiBpbXBsZW1lbnRhdGlvbiBieSBOZWlsIEJhcnRsZXR0XG4gICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9uZWlsYmFydGxldHQvY29sb3ItdGVtcGVyYXR1cmVcbiAgICovXG5cbiAgdmFyIGxvZyA9IE1hdGgubG9nO1xuXG4gIHZhciB0ZW1wZXJhdHVyZTJyZ2IgPSBmdW5jdGlvbiB0ZW1wZXJhdHVyZTJyZ2Ioa2VsdmluKSB7XG4gICAgdmFyIHRlbXAgPSBrZWx2aW4gLyAxMDA7XG4gICAgdmFyIHIsIGcsIGI7XG5cbiAgICBpZiAodGVtcCA8IDY2KSB7XG4gICAgICByID0gMjU1O1xuICAgICAgZyA9IC0xNTUuMjU0ODU1NjI3MDkxNzkgLSAwLjQ0NTk2OTUwNDY5NTc5MTMzICogKGcgPSB0ZW1wIC0gMikgKyAxMDQuNDkyMTYxOTkzOTM4ODggKiBsb2coZyk7XG4gICAgICBiID0gdGVtcCA8IDIwID8gMCA6IC0yNTQuNzY5MzUxODQxMjA5MDIgKyAwLjgyNzQwOTYwNjQwMDczOTUgKiAoYiA9IHRlbXAgLSAxMCkgKyAxMTUuNjc5OTQ0MDEwNjYxNDcgKiBsb2coYik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHIgPSAzNTEuOTc2OTA1NjY4MDU2OTMgKyAwLjExNDIwNjQ1Mzc4NDE2NSAqIChyID0gdGVtcCAtIDU1KSAtIDQwLjI1MzY2MzA5MzMyMTI3ICogbG9nKHIpO1xuICAgICAgZyA9IDMyNS40NDk0MTI1NzExOTc0ICsgMC4wNzk0MzQ1NjUzNjY2MjM0MiAqIChnID0gdGVtcCAtIDUwKSAtIDI4LjA4NTI5NjM1MDc5NTcgKiBsb2coZyk7XG4gICAgICBiID0gMjU1O1xuICAgIH1cblxuICAgIHJldHVybiBbciwgZywgYiwgMV07XG4gIH07XG5cbiAgdmFyIHRlbXBlcmF0dXJlMnJnYl8xID0gdGVtcGVyYXR1cmUycmdiO1xuICAvKlxuICAgKiBCYXNlZCBvbiBpbXBsZW1lbnRhdGlvbiBieSBOZWlsIEJhcnRsZXR0XG4gICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9uZWlsYmFydGxldHQvY29sb3ItdGVtcGVyYXR1cmVcbiAgICoqL1xuXG4gIHZhciB1bnBhY2skdiA9IHV0aWxzLnVucGFjaztcbiAgdmFyIHJvdW5kJDYgPSBNYXRoLnJvdW5kO1xuXG4gIHZhciByZ2IydGVtcGVyYXR1cmUgPSBmdW5jdGlvbiByZ2IydGVtcGVyYXR1cmUoKSB7XG4gICAgdmFyIGFyZ3MgPSBbXSxcbiAgICAgICAgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcblxuICAgIHdoaWxlIChsZW4tLSkge1xuICAgICAgYXJnc1tsZW5dID0gYXJndW1lbnRzW2xlbl07XG4gICAgfVxuXG4gICAgdmFyIHJnYiA9IHVucGFjayR2KGFyZ3MsICdyZ2InKTtcbiAgICB2YXIgciA9IHJnYlswXSxcbiAgICAgICAgYiA9IHJnYlsyXTtcbiAgICB2YXIgbWluVGVtcCA9IDEwMDA7XG4gICAgdmFyIG1heFRlbXAgPSA0MDAwMDtcbiAgICB2YXIgZXBzID0gMC40O1xuICAgIHZhciB0ZW1wO1xuXG4gICAgd2hpbGUgKG1heFRlbXAgLSBtaW5UZW1wID4gZXBzKSB7XG4gICAgICB0ZW1wID0gKG1heFRlbXAgKyBtaW5UZW1wKSAqIDAuNTtcbiAgICAgIHZhciByZ2IkMSA9IHRlbXBlcmF0dXJlMnJnYl8xKHRlbXApO1xuXG4gICAgICBpZiAocmdiJDFbMl0gLyByZ2IkMVswXSA+PSBiIC8gcikge1xuICAgICAgICBtYXhUZW1wID0gdGVtcDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1pblRlbXAgPSB0ZW1wO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByb3VuZCQ2KHRlbXApO1xuICB9O1xuXG4gIHZhciByZ2IydGVtcGVyYXR1cmVfMSA9IHJnYjJ0ZW1wZXJhdHVyZTtcblxuICBDb2xvcl8xLnByb3RvdHlwZS50ZW1wID0gQ29sb3JfMS5wcm90b3R5cGUua2VsdmluID0gQ29sb3JfMS5wcm90b3R5cGUudGVtcGVyYXR1cmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHJnYjJ0ZW1wZXJhdHVyZV8xKHRoaXMuX3JnYik7XG4gIH07XG5cbiAgY2hyb21hXzEudGVtcCA9IGNocm9tYV8xLmtlbHZpbiA9IGNocm9tYV8xLnRlbXBlcmF0dXJlID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBhcmdzID0gW10sXG4gICAgICAgIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cbiAgICB3aGlsZSAobGVuLS0pIHtcbiAgICAgIGFyZ3NbbGVuXSA9IGFyZ3VtZW50c1tsZW5dO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KENvbG9yXzEsIFtudWxsXS5jb25jYXQoYXJncywgWyd0ZW1wJ10pKSkoKTtcbiAgfTtcblxuICBpbnB1dC5mb3JtYXQudGVtcCA9IGlucHV0LmZvcm1hdC5rZWx2aW4gPSBpbnB1dC5mb3JtYXQudGVtcGVyYXR1cmUgPSB0ZW1wZXJhdHVyZTJyZ2JfMTtcbiAgdmFyIHR5cGUkZiA9IHV0aWxzLnR5cGU7XG5cbiAgQ29sb3JfMS5wcm90b3R5cGUuYWxwaGEgPSBmdW5jdGlvbiAoYSwgbXV0YXRlKSB7XG4gICAgaWYgKG11dGF0ZSA9PT0gdm9pZCAwKSBtdXRhdGUgPSBmYWxzZTtcblxuICAgIGlmIChhICE9PSB1bmRlZmluZWQgJiYgdHlwZSRmKGEpID09PSAnbnVtYmVyJykge1xuICAgICAgaWYgKG11dGF0ZSkge1xuICAgICAgICB0aGlzLl9yZ2JbM10gPSBhO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBDb2xvcl8xKFt0aGlzLl9yZ2JbMF0sIHRoaXMuX3JnYlsxXSwgdGhpcy5fcmdiWzJdLCBhXSwgJ3JnYicpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9yZ2JbM107XG4gIH07XG5cbiAgQ29sb3JfMS5wcm90b3R5cGUuY2xpcHBlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmdiLl9jbGlwcGVkIHx8IGZhbHNlO1xuICB9O1xuXG4gIENvbG9yXzEucHJvdG90eXBlLmRhcmtlbiA9IGZ1bmN0aW9uIChhbW91bnQpIHtcbiAgICBpZiAoYW1vdW50ID09PSB2b2lkIDApIGFtb3VudCA9IDE7XG4gICAgdmFyIG1lID0gdGhpcztcbiAgICB2YXIgbGFiID0gbWUubGFiKCk7XG4gICAgbGFiWzBdIC09IGxhYkNvbnN0YW50cy5LbiAqIGFtb3VudDtcbiAgICByZXR1cm4gbmV3IENvbG9yXzEobGFiLCAnbGFiJykuYWxwaGEobWUuYWxwaGEoKSwgdHJ1ZSk7XG4gIH07XG5cbiAgQ29sb3JfMS5wcm90b3R5cGUuYnJpZ2h0ZW4gPSBmdW5jdGlvbiAoYW1vdW50KSB7XG4gICAgaWYgKGFtb3VudCA9PT0gdm9pZCAwKSBhbW91bnQgPSAxO1xuICAgIHJldHVybiB0aGlzLmRhcmtlbigtYW1vdW50KTtcbiAgfTtcblxuICBDb2xvcl8xLnByb3RvdHlwZS5kYXJrZXIgPSBDb2xvcl8xLnByb3RvdHlwZS5kYXJrZW47XG4gIENvbG9yXzEucHJvdG90eXBlLmJyaWdodGVyID0gQ29sb3JfMS5wcm90b3R5cGUuYnJpZ2h0ZW47XG5cbiAgQ29sb3JfMS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKG1jKSB7XG4gICAgdmFyIHJlZiA9IG1jLnNwbGl0KCcuJyk7XG4gICAgdmFyIG1vZGUgPSByZWZbMF07XG4gICAgdmFyIGNoYW5uZWwgPSByZWZbMV07XG4gICAgdmFyIHNyYyA9IHRoaXNbbW9kZV0oKTtcblxuICAgIGlmIChjaGFubmVsKSB7XG4gICAgICB2YXIgaSA9IG1vZGUuaW5kZXhPZihjaGFubmVsKTtcblxuICAgICAgaWYgKGkgPiAtMSkge1xuICAgICAgICByZXR1cm4gc3JjW2ldO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIGNoYW5uZWwgXCIgKyBjaGFubmVsICsgXCIgaW4gbW9kZSBcIiArIG1vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gc3JjO1xuICAgIH1cbiAgfTtcblxuICB2YXIgdHlwZSRnID0gdXRpbHMudHlwZTtcbiAgdmFyIHBvdyQyID0gTWF0aC5wb3c7XG4gIHZhciBFUFMgPSAxZS03O1xuICB2YXIgTUFYX0lURVIgPSAyMDtcblxuICBDb2xvcl8xLnByb3RvdHlwZS5sdW1pbmFuY2UgPSBmdW5jdGlvbiAobHVtKSB7XG4gICAgaWYgKGx1bSAhPT0gdW5kZWZpbmVkICYmIHR5cGUkZyhsdW0pID09PSAnbnVtYmVyJykge1xuICAgICAgaWYgKGx1bSA9PT0gMCkge1xuICAgICAgICAvLyByZXR1cm4gcHVyZSBibGFja1xuICAgICAgICByZXR1cm4gbmV3IENvbG9yXzEoWzAsIDAsIDAsIHRoaXMuX3JnYlszXV0sICdyZ2InKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGx1bSA9PT0gMSkge1xuICAgICAgICAvLyByZXR1cm4gcHVyZSB3aGl0ZVxuICAgICAgICByZXR1cm4gbmV3IENvbG9yXzEoWzI1NSwgMjU1LCAyNTUsIHRoaXMuX3JnYlszXV0sICdyZ2InKTtcbiAgICAgIH0gLy8gY29tcHV0ZSBuZXcgY29sb3IgdXNpbmcuLi5cblxuXG4gICAgICB2YXIgY3VyX2x1bSA9IHRoaXMubHVtaW5hbmNlKCk7XG4gICAgICB2YXIgbW9kZSA9ICdyZ2InO1xuICAgICAgdmFyIG1heF9pdGVyID0gTUFYX0lURVI7XG5cbiAgICAgIHZhciB0ZXN0ID0gZnVuY3Rpb24gdGVzdChsb3csIGhpZ2gpIHtcbiAgICAgICAgdmFyIG1pZCA9IGxvdy5pbnRlcnBvbGF0ZShoaWdoLCAwLjUsIG1vZGUpO1xuICAgICAgICB2YXIgbG0gPSBtaWQubHVtaW5hbmNlKCk7XG5cbiAgICAgICAgaWYgKE1hdGguYWJzKGx1bSAtIGxtKSA8IEVQUyB8fCAhbWF4X2l0ZXItLSkge1xuICAgICAgICAgIC8vIGNsb3NlIGVub3VnaFxuICAgICAgICAgIHJldHVybiBtaWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbG0gPiBsdW0gPyB0ZXN0KGxvdywgbWlkKSA6IHRlc3QobWlkLCBoaWdoKTtcbiAgICAgIH07XG5cbiAgICAgIHZhciByZ2IgPSAoY3VyX2x1bSA+IGx1bSA/IHRlc3QobmV3IENvbG9yXzEoWzAsIDAsIDBdKSwgdGhpcykgOiB0ZXN0KHRoaXMsIG5ldyBDb2xvcl8xKFsyNTUsIDI1NSwgMjU1XSkpKS5yZ2IoKTtcbiAgICAgIHJldHVybiBuZXcgQ29sb3JfMShyZ2IuY29uY2F0KFt0aGlzLl9yZ2JbM11dKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJnYjJsdW1pbmFuY2UuYXBwbHkodm9pZCAwLCB0aGlzLl9yZ2Iuc2xpY2UoMCwgMykpO1xuICB9O1xuXG4gIHZhciByZ2IybHVtaW5hbmNlID0gZnVuY3Rpb24gcmdiMmx1bWluYW5jZShyLCBnLCBiKSB7XG4gICAgLy8gcmVsYXRpdmUgbHVtaW5hbmNlXG4gICAgLy8gc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDgvUkVDLVdDQUcyMC0yMDA4MTIxMS8jcmVsYXRpdmVsdW1pbmFuY2VkZWZcbiAgICByID0gbHVtaW5hbmNlX3gocik7XG4gICAgZyA9IGx1bWluYW5jZV94KGcpO1xuICAgIGIgPSBsdW1pbmFuY2VfeChiKTtcbiAgICByZXR1cm4gMC4yMTI2ICogciArIDAuNzE1MiAqIGcgKyAwLjA3MjIgKiBiO1xuICB9O1xuXG4gIHZhciBsdW1pbmFuY2VfeCA9IGZ1bmN0aW9uIGx1bWluYW5jZV94KHgpIHtcbiAgICB4IC89IDI1NTtcbiAgICByZXR1cm4geCA8PSAwLjAzOTI4ID8geCAvIDEyLjkyIDogcG93JDIoKHggKyAwLjA1NSkgLyAxLjA1NSwgMi40KTtcbiAgfTtcblxuICB2YXIgaW50ZXJwb2xhdG9yID0ge307XG4gIHZhciB0eXBlJGggPSB1dGlscy50eXBlO1xuXG4gIHZhciBtaXggPSBmdW5jdGlvbiBtaXgoY29sMSwgY29sMiwgZikge1xuICAgIGlmIChmID09PSB2b2lkIDApIGYgPSAwLjU7XG4gICAgdmFyIHJlc3QgPSBbXSxcbiAgICAgICAgbGVuID0gYXJndW1lbnRzLmxlbmd0aCAtIDM7XG5cbiAgICB3aGlsZSAobGVuLS0gPiAwKSB7XG4gICAgICByZXN0W2xlbl0gPSBhcmd1bWVudHNbbGVuICsgM107XG4gICAgfVxuXG4gICAgdmFyIG1vZGUgPSByZXN0WzBdIHx8ICdscmdiJztcblxuICAgIGlmICghaW50ZXJwb2xhdG9yW21vZGVdICYmICFyZXN0Lmxlbmd0aCkge1xuICAgICAgLy8gZmFsbCBiYWNrIHRvIHRoZSBmaXJzdCBzdXBwb3J0ZWQgbW9kZVxuICAgICAgbW9kZSA9IE9iamVjdC5rZXlzKGludGVycG9sYXRvcilbMF07XG4gICAgfVxuXG4gICAgaWYgKCFpbnRlcnBvbGF0b3JbbW9kZV0pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImludGVycG9sYXRpb24gbW9kZSBcIiArIG1vZGUgKyBcIiBpcyBub3QgZGVmaW5lZFwiKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZSRoKGNvbDEpICE9PSAnb2JqZWN0Jykge1xuICAgICAgY29sMSA9IG5ldyBDb2xvcl8xKGNvbDEpO1xuICAgIH1cblxuICAgIGlmICh0eXBlJGgoY29sMikgIT09ICdvYmplY3QnKSB7XG4gICAgICBjb2wyID0gbmV3IENvbG9yXzEoY29sMik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGludGVycG9sYXRvclttb2RlXShjb2wxLCBjb2wyLCBmKS5hbHBoYShjb2wxLmFscGhhKCkgKyBmICogKGNvbDIuYWxwaGEoKSAtIGNvbDEuYWxwaGEoKSkpO1xuICB9O1xuXG4gIENvbG9yXzEucHJvdG90eXBlLm1peCA9IENvbG9yXzEucHJvdG90eXBlLmludGVycG9sYXRlID0gZnVuY3Rpb24gKGNvbDIsIGYpIHtcbiAgICBpZiAoZiA9PT0gdm9pZCAwKSBmID0gMC41O1xuICAgIHZhciByZXN0ID0gW10sXG4gICAgICAgIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGggLSAyO1xuXG4gICAgd2hpbGUgKGxlbi0tID4gMCkge1xuICAgICAgcmVzdFtsZW5dID0gYXJndW1lbnRzW2xlbiArIDJdO1xuICAgIH1cblxuICAgIHJldHVybiBtaXguYXBwbHkodm9pZCAwLCBbdGhpcywgY29sMiwgZl0uY29uY2F0KHJlc3QpKTtcbiAgfTtcblxuICBDb2xvcl8xLnByb3RvdHlwZS5wcmVtdWx0aXBseSA9IGZ1bmN0aW9uIChtdXRhdGUpIHtcbiAgICBpZiAobXV0YXRlID09PSB2b2lkIDApIG11dGF0ZSA9IGZhbHNlO1xuICAgIHZhciByZ2IgPSB0aGlzLl9yZ2I7XG4gICAgdmFyIGEgPSByZ2JbM107XG5cbiAgICBpZiAobXV0YXRlKSB7XG4gICAgICB0aGlzLl9yZ2IgPSBbcmdiWzBdICogYSwgcmdiWzFdICogYSwgcmdiWzJdICogYSwgYV07XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBDb2xvcl8xKFtyZ2JbMF0gKiBhLCByZ2JbMV0gKiBhLCByZ2JbMl0gKiBhLCBhXSwgJ3JnYicpO1xuICAgIH1cbiAgfTtcblxuICBDb2xvcl8xLnByb3RvdHlwZS5zYXR1cmF0ZSA9IGZ1bmN0aW9uIChhbW91bnQpIHtcbiAgICBpZiAoYW1vdW50ID09PSB2b2lkIDApIGFtb3VudCA9IDE7XG4gICAgdmFyIG1lID0gdGhpcztcbiAgICB2YXIgbGNoID0gbWUubGNoKCk7XG4gICAgbGNoWzFdICs9IGxhYkNvbnN0YW50cy5LbiAqIGFtb3VudDtcblxuICAgIGlmIChsY2hbMV0gPCAwKSB7XG4gICAgICBsY2hbMV0gPSAwO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgQ29sb3JfMShsY2gsICdsY2gnKS5hbHBoYShtZS5hbHBoYSgpLCB0cnVlKTtcbiAgfTtcblxuICBDb2xvcl8xLnByb3RvdHlwZS5kZXNhdHVyYXRlID0gZnVuY3Rpb24gKGFtb3VudCkge1xuICAgIGlmIChhbW91bnQgPT09IHZvaWQgMCkgYW1vdW50ID0gMTtcbiAgICByZXR1cm4gdGhpcy5zYXR1cmF0ZSgtYW1vdW50KTtcbiAgfTtcblxuICB2YXIgdHlwZSRpID0gdXRpbHMudHlwZTtcblxuICBDb2xvcl8xLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAobWMsIHZhbHVlLCBtdXRhdGUpIHtcbiAgICBpZiAobXV0YXRlID09PSB2b2lkIDApIG11dGF0ZSA9IGZhbHNlO1xuICAgIHZhciByZWYgPSBtYy5zcGxpdCgnLicpO1xuICAgIHZhciBtb2RlID0gcmVmWzBdO1xuICAgIHZhciBjaGFubmVsID0gcmVmWzFdO1xuICAgIHZhciBzcmMgPSB0aGlzW21vZGVdKCk7XG5cbiAgICBpZiAoY2hhbm5lbCkge1xuICAgICAgdmFyIGkgPSBtb2RlLmluZGV4T2YoY2hhbm5lbCk7XG5cbiAgICAgIGlmIChpID4gLTEpIHtcbiAgICAgICAgaWYgKHR5cGUkaSh2YWx1ZSkgPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBzd2l0Y2ggKHZhbHVlLmNoYXJBdCgwKSkge1xuICAgICAgICAgICAgY2FzZSAnKyc6XG4gICAgICAgICAgICAgIHNyY1tpXSArPSArdmFsdWU7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICctJzpcbiAgICAgICAgICAgICAgc3JjW2ldICs9ICt2YWx1ZTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJyonOlxuICAgICAgICAgICAgICBzcmNbaV0gKj0gK3ZhbHVlLnN1YnN0cigxKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJy8nOlxuICAgICAgICAgICAgICBzcmNbaV0gLz0gK3ZhbHVlLnN1YnN0cigxKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHNyY1tpXSA9ICt2YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSRpKHZhbHVlKSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBzcmNbaV0gPSB2YWx1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1bnN1cHBvcnRlZCB2YWx1ZSBmb3IgQ29sb3Iuc2V0XCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG91dCA9IG5ldyBDb2xvcl8xKHNyYywgbW9kZSk7XG5cbiAgICAgICAgaWYgKG11dGF0ZSkge1xuICAgICAgICAgIHRoaXMuX3JnYiA9IG91dC5fcmdiO1xuICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwidW5rbm93biBjaGFubmVsIFwiICsgY2hhbm5lbCArIFwiIGluIG1vZGUgXCIgKyBtb2RlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHNyYztcbiAgICB9XG4gIH07XG5cbiAgdmFyIHJnYiQxID0gZnVuY3Rpb24gcmdiJDEoY29sMSwgY29sMiwgZikge1xuICAgIHZhciB4eXowID0gY29sMS5fcmdiO1xuICAgIHZhciB4eXoxID0gY29sMi5fcmdiO1xuICAgIHJldHVybiBuZXcgQ29sb3JfMSh4eXowWzBdICsgZiAqICh4eXoxWzBdIC0geHl6MFswXSksIHh5ejBbMV0gKyBmICogKHh5ejFbMV0gLSB4eXowWzFdKSwgeHl6MFsyXSArIGYgKiAoeHl6MVsyXSAtIHh5ejBbMl0pLCAncmdiJyk7XG4gIH07IC8vIHJlZ2lzdGVyIGludGVycG9sYXRvclxuXG5cbiAgaW50ZXJwb2xhdG9yLnJnYiA9IHJnYiQxO1xuICB2YXIgc3FydCQyID0gTWF0aC5zcXJ0O1xuICB2YXIgcG93JDMgPSBNYXRoLnBvdztcblxuICB2YXIgbHJnYiA9IGZ1bmN0aW9uIGxyZ2IoY29sMSwgY29sMiwgZikge1xuICAgIHZhciByZWYgPSBjb2wxLl9yZ2I7XG4gICAgdmFyIHgxID0gcmVmWzBdO1xuICAgIHZhciB5MSA9IHJlZlsxXTtcbiAgICB2YXIgejEgPSByZWZbMl07XG4gICAgdmFyIHJlZiQxID0gY29sMi5fcmdiO1xuICAgIHZhciB4MiA9IHJlZiQxWzBdO1xuICAgIHZhciB5MiA9IHJlZiQxWzFdO1xuICAgIHZhciB6MiA9IHJlZiQxWzJdO1xuICAgIHJldHVybiBuZXcgQ29sb3JfMShzcXJ0JDIocG93JDMoeDEsIDIpICogKDEgLSBmKSArIHBvdyQzKHgyLCAyKSAqIGYpLCBzcXJ0JDIocG93JDMoeTEsIDIpICogKDEgLSBmKSArIHBvdyQzKHkyLCAyKSAqIGYpLCBzcXJ0JDIocG93JDMoejEsIDIpICogKDEgLSBmKSArIHBvdyQzKHoyLCAyKSAqIGYpLCAncmdiJyk7XG4gIH07IC8vIHJlZ2lzdGVyIGludGVycG9sYXRvclxuXG5cbiAgaW50ZXJwb2xhdG9yLmxyZ2IgPSBscmdiO1xuXG4gIHZhciBsYWIkMSA9IGZ1bmN0aW9uIGxhYiQxKGNvbDEsIGNvbDIsIGYpIHtcbiAgICB2YXIgeHl6MCA9IGNvbDEubGFiKCk7XG4gICAgdmFyIHh5ejEgPSBjb2wyLmxhYigpO1xuICAgIHJldHVybiBuZXcgQ29sb3JfMSh4eXowWzBdICsgZiAqICh4eXoxWzBdIC0geHl6MFswXSksIHh5ejBbMV0gKyBmICogKHh5ejFbMV0gLSB4eXowWzFdKSwgeHl6MFsyXSArIGYgKiAoeHl6MVsyXSAtIHh5ejBbMl0pLCAnbGFiJyk7XG4gIH07IC8vIHJlZ2lzdGVyIGludGVycG9sYXRvclxuXG5cbiAgaW50ZXJwb2xhdG9yLmxhYiA9IGxhYiQxO1xuXG4gIHZhciBfaHN4ID0gZnVuY3Rpb24gX2hzeChjb2wxLCBjb2wyLCBmLCBtKSB7XG4gICAgdmFyIGFzc2lnbiwgYXNzaWduJDE7XG4gICAgdmFyIHh5ejAsIHh5ejE7XG5cbiAgICBpZiAobSA9PT0gJ2hzbCcpIHtcbiAgICAgIHh5ejAgPSBjb2wxLmhzbCgpO1xuICAgICAgeHl6MSA9IGNvbDIuaHNsKCk7XG4gICAgfSBlbHNlIGlmIChtID09PSAnaHN2Jykge1xuICAgICAgeHl6MCA9IGNvbDEuaHN2KCk7XG4gICAgICB4eXoxID0gY29sMi5oc3YoKTtcbiAgICB9IGVsc2UgaWYgKG0gPT09ICdoY2cnKSB7XG4gICAgICB4eXowID0gY29sMS5oY2coKTtcbiAgICAgIHh5ejEgPSBjb2wyLmhjZygpO1xuICAgIH0gZWxzZSBpZiAobSA9PT0gJ2hzaScpIHtcbiAgICAgIHh5ejAgPSBjb2wxLmhzaSgpO1xuICAgICAgeHl6MSA9IGNvbDIuaHNpKCk7XG4gICAgfSBlbHNlIGlmIChtID09PSAnbGNoJyB8fCBtID09PSAnaGNsJykge1xuICAgICAgbSA9ICdoY2wnO1xuICAgICAgeHl6MCA9IGNvbDEuaGNsKCk7XG4gICAgICB4eXoxID0gY29sMi5oY2woKTtcbiAgICB9XG5cbiAgICB2YXIgaHVlMCwgaHVlMSwgc2F0MCwgc2F0MSwgbGJ2MCwgbGJ2MTtcblxuICAgIGlmIChtLnN1YnN0cigwLCAxKSA9PT0gJ2gnKSB7XG4gICAgICBhc3NpZ24gPSB4eXowLCBodWUwID0gYXNzaWduWzBdLCBzYXQwID0gYXNzaWduWzFdLCBsYnYwID0gYXNzaWduWzJdO1xuICAgICAgYXNzaWduJDEgPSB4eXoxLCBodWUxID0gYXNzaWduJDFbMF0sIHNhdDEgPSBhc3NpZ24kMVsxXSwgbGJ2MSA9IGFzc2lnbiQxWzJdO1xuICAgIH1cblxuICAgIHZhciBzYXQsIGh1ZSwgbGJ2LCBkaDtcblxuICAgIGlmICghaXNOYU4oaHVlMCkgJiYgIWlzTmFOKGh1ZTEpKSB7XG4gICAgICAvLyBib3RoIGNvbG9ycyBoYXZlIGh1ZVxuICAgICAgaWYgKGh1ZTEgPiBodWUwICYmIGh1ZTEgLSBodWUwID4gMTgwKSB7XG4gICAgICAgIGRoID0gaHVlMSAtIChodWUwICsgMzYwKTtcbiAgICAgIH0gZWxzZSBpZiAoaHVlMSA8IGh1ZTAgJiYgaHVlMCAtIGh1ZTEgPiAxODApIHtcbiAgICAgICAgZGggPSBodWUxICsgMzYwIC0gaHVlMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRoID0gaHVlMSAtIGh1ZTA7XG4gICAgICB9XG5cbiAgICAgIGh1ZSA9IGh1ZTAgKyBmICogZGg7XG4gICAgfSBlbHNlIGlmICghaXNOYU4oaHVlMCkpIHtcbiAgICAgIGh1ZSA9IGh1ZTA7XG5cbiAgICAgIGlmICgobGJ2MSA9PSAxIHx8IGxidjEgPT0gMCkgJiYgbSAhPSAnaHN2Jykge1xuICAgICAgICBzYXQgPSBzYXQwO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIWlzTmFOKGh1ZTEpKSB7XG4gICAgICBodWUgPSBodWUxO1xuXG4gICAgICBpZiAoKGxidjAgPT0gMSB8fCBsYnYwID09IDApICYmIG0gIT0gJ2hzdicpIHtcbiAgICAgICAgc2F0ID0gc2F0MTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaHVlID0gTnVtYmVyLk5hTjtcbiAgICB9XG5cbiAgICBpZiAoc2F0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHNhdCA9IHNhdDAgKyBmICogKHNhdDEgLSBzYXQwKTtcbiAgICB9XG5cbiAgICBsYnYgPSBsYnYwICsgZiAqIChsYnYxIC0gbGJ2MCk7XG4gICAgcmV0dXJuIG5ldyBDb2xvcl8xKFtodWUsIHNhdCwgbGJ2XSwgbSk7XG4gIH07XG5cbiAgdmFyIGxjaCQxID0gZnVuY3Rpb24gbGNoJDEoY29sMSwgY29sMiwgZikge1xuICAgIHJldHVybiBfaHN4KGNvbDEsIGNvbDIsIGYsICdsY2gnKTtcbiAgfTsgLy8gcmVnaXN0ZXIgaW50ZXJwb2xhdG9yXG5cblxuICBpbnRlcnBvbGF0b3IubGNoID0gbGNoJDE7XG4gIGludGVycG9sYXRvci5oY2wgPSBsY2gkMTtcblxuICB2YXIgbnVtJDEgPSBmdW5jdGlvbiBudW0kMShjb2wxLCBjb2wyLCBmKSB7XG4gICAgdmFyIGMxID0gY29sMS5udW0oKTtcbiAgICB2YXIgYzIgPSBjb2wyLm51bSgpO1xuICAgIHJldHVybiBuZXcgQ29sb3JfMShjMSArIGYgKiAoYzIgLSBjMSksICdudW0nKTtcbiAgfTsgLy8gcmVnaXN0ZXIgaW50ZXJwb2xhdG9yXG5cblxuICBpbnRlcnBvbGF0b3IubnVtID0gbnVtJDE7XG5cbiAgdmFyIGhjZyQxID0gZnVuY3Rpb24gaGNnJDEoY29sMSwgY29sMiwgZikge1xuICAgIHJldHVybiBfaHN4KGNvbDEsIGNvbDIsIGYsICdoY2cnKTtcbiAgfTsgLy8gcmVnaXN0ZXIgaW50ZXJwb2xhdG9yXG5cblxuICBpbnRlcnBvbGF0b3IuaGNnID0gaGNnJDE7XG5cbiAgdmFyIGhzaSQxID0gZnVuY3Rpb24gaHNpJDEoY29sMSwgY29sMiwgZikge1xuICAgIHJldHVybiBfaHN4KGNvbDEsIGNvbDIsIGYsICdoc2knKTtcbiAgfTsgLy8gcmVnaXN0ZXIgaW50ZXJwb2xhdG9yXG5cblxuICBpbnRlcnBvbGF0b3IuaHNpID0gaHNpJDE7XG5cbiAgdmFyIGhzbCQxID0gZnVuY3Rpb24gaHNsJDEoY29sMSwgY29sMiwgZikge1xuICAgIHJldHVybiBfaHN4KGNvbDEsIGNvbDIsIGYsICdoc2wnKTtcbiAgfTsgLy8gcmVnaXN0ZXIgaW50ZXJwb2xhdG9yXG5cblxuICBpbnRlcnBvbGF0b3IuaHNsID0gaHNsJDE7XG5cbiAgdmFyIGhzdiQxID0gZnVuY3Rpb24gaHN2JDEoY29sMSwgY29sMiwgZikge1xuICAgIHJldHVybiBfaHN4KGNvbDEsIGNvbDIsIGYsICdoc3YnKTtcbiAgfTsgLy8gcmVnaXN0ZXIgaW50ZXJwb2xhdG9yXG5cblxuICBpbnRlcnBvbGF0b3IuaHN2ID0gaHN2JDE7XG4gIHZhciBjbGlwX3JnYiQyID0gdXRpbHMuY2xpcF9yZ2I7XG4gIHZhciBwb3ckNCA9IE1hdGgucG93O1xuICB2YXIgc3FydCQzID0gTWF0aC5zcXJ0O1xuICB2YXIgUEkkMSA9IE1hdGguUEk7XG4gIHZhciBjb3MkMiA9IE1hdGguY29zO1xuICB2YXIgc2luJDEgPSBNYXRoLnNpbjtcbiAgdmFyIGF0YW4yJDEgPSBNYXRoLmF0YW4yO1xuXG4gIHZhciBhdmVyYWdlID0gZnVuY3Rpb24gYXZlcmFnZShjb2xvcnMsIG1vZGUsIHdlaWdodHMpIHtcbiAgICBpZiAobW9kZSA9PT0gdm9pZCAwKSBtb2RlID0gJ2xyZ2InO1xuICAgIGlmICh3ZWlnaHRzID09PSB2b2lkIDApIHdlaWdodHMgPSBudWxsO1xuICAgIHZhciBsID0gY29sb3JzLmxlbmd0aDtcblxuICAgIGlmICghd2VpZ2h0cykge1xuICAgICAgd2VpZ2h0cyA9IEFycmF5LmZyb20obmV3IEFycmF5KGwpKS5tYXAoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gMTtcbiAgICAgIH0pO1xuICAgIH0gLy8gbm9ybWFsaXplIHdlaWdodHNcblxuXG4gICAgdmFyIGsgPSBsIC8gd2VpZ2h0cy5yZWR1Y2UoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIHJldHVybiBhICsgYjtcbiAgICB9KTtcbiAgICB3ZWlnaHRzLmZvckVhY2goZnVuY3Rpb24gKHcsIGkpIHtcbiAgICAgIHdlaWdodHNbaV0gKj0gaztcbiAgICB9KTsgLy8gY29udmVydCBjb2xvcnMgdG8gQ29sb3Igb2JqZWN0c1xuXG4gICAgY29sb3JzID0gY29sb3JzLm1hcChmdW5jdGlvbiAoYykge1xuICAgICAgcmV0dXJuIG5ldyBDb2xvcl8xKGMpO1xuICAgIH0pO1xuXG4gICAgaWYgKG1vZGUgPT09ICdscmdiJykge1xuICAgICAgcmV0dXJuIF9hdmVyYWdlX2xyZ2IoY29sb3JzLCB3ZWlnaHRzKTtcbiAgICB9XG5cbiAgICB2YXIgZmlyc3QgPSBjb2xvcnMuc2hpZnQoKTtcbiAgICB2YXIgeHl6ID0gZmlyc3QuZ2V0KG1vZGUpO1xuICAgIHZhciBjbnQgPSBbXTtcbiAgICB2YXIgZHggPSAwO1xuICAgIHZhciBkeSA9IDA7IC8vIGluaXRpYWwgY29sb3JcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeHl6Lmxlbmd0aDsgaSsrKSB7XG4gICAgICB4eXpbaV0gPSAoeHl6W2ldIHx8IDApICogd2VpZ2h0c1swXTtcbiAgICAgIGNudC5wdXNoKGlzTmFOKHh5eltpXSkgPyAwIDogd2VpZ2h0c1swXSk7XG5cbiAgICAgIGlmIChtb2RlLmNoYXJBdChpKSA9PT0gJ2gnICYmICFpc05hTih4eXpbaV0pKSB7XG4gICAgICAgIHZhciBBID0geHl6W2ldIC8gMTgwICogUEkkMTtcbiAgICAgICAgZHggKz0gY29zJDIoQSkgKiB3ZWlnaHRzWzBdO1xuICAgICAgICBkeSArPSBzaW4kMShBKSAqIHdlaWdodHNbMF07XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGFscGhhID0gZmlyc3QuYWxwaGEoKSAqIHdlaWdodHNbMF07XG4gICAgY29sb3JzLmZvckVhY2goZnVuY3Rpb24gKGMsIGNpKSB7XG4gICAgICB2YXIgeHl6MiA9IGMuZ2V0KG1vZGUpO1xuICAgICAgYWxwaGEgKz0gYy5hbHBoYSgpICogd2VpZ2h0c1tjaSArIDFdO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHh5ei5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoIWlzTmFOKHh5ejJbaV0pKSB7XG4gICAgICAgICAgY250W2ldICs9IHdlaWdodHNbY2kgKyAxXTtcblxuICAgICAgICAgIGlmIChtb2RlLmNoYXJBdChpKSA9PT0gJ2gnKSB7XG4gICAgICAgICAgICB2YXIgQSA9IHh5ejJbaV0gLyAxODAgKiBQSSQxO1xuICAgICAgICAgICAgZHggKz0gY29zJDIoQSkgKiB3ZWlnaHRzW2NpICsgMV07XG4gICAgICAgICAgICBkeSArPSBzaW4kMShBKSAqIHdlaWdodHNbY2kgKyAxXTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgeHl6W2ldICs9IHh5ejJbaV0gKiB3ZWlnaHRzW2NpICsgMV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBmb3IgKHZhciBpJDEgPSAwOyBpJDEgPCB4eXoubGVuZ3RoOyBpJDErKykge1xuICAgICAgaWYgKG1vZGUuY2hhckF0KGkkMSkgPT09ICdoJykge1xuICAgICAgICB2YXIgQSQxID0gYXRhbjIkMShkeSAvIGNudFtpJDFdLCBkeCAvIGNudFtpJDFdKSAvIFBJJDEgKiAxODA7XG5cbiAgICAgICAgd2hpbGUgKEEkMSA8IDApIHtcbiAgICAgICAgICBBJDEgKz0gMzYwO1xuICAgICAgICB9XG5cbiAgICAgICAgd2hpbGUgKEEkMSA+PSAzNjApIHtcbiAgICAgICAgICBBJDEgLT0gMzYwO1xuICAgICAgICB9XG5cbiAgICAgICAgeHl6W2kkMV0gPSBBJDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB4eXpbaSQxXSA9IHh5eltpJDFdIC8gY250W2kkMV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgYWxwaGEgLz0gbDtcbiAgICByZXR1cm4gbmV3IENvbG9yXzEoeHl6LCBtb2RlKS5hbHBoYShhbHBoYSA+IDAuOTk5OTkgPyAxIDogYWxwaGEsIHRydWUpO1xuICB9O1xuXG4gIHZhciBfYXZlcmFnZV9scmdiID0gZnVuY3Rpb24gX2F2ZXJhZ2VfbHJnYihjb2xvcnMsIHdlaWdodHMpIHtcbiAgICB2YXIgbCA9IGNvbG9ycy5sZW5ndGg7XG4gICAgdmFyIHh5eiA9IFswLCAwLCAwLCAwXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29sb3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY29sID0gY29sb3JzW2ldO1xuICAgICAgdmFyIGYgPSB3ZWlnaHRzW2ldIC8gbDtcbiAgICAgIHZhciByZ2IgPSBjb2wuX3JnYjtcbiAgICAgIHh5elswXSArPSBwb3ckNChyZ2JbMF0sIDIpICogZjtcbiAgICAgIHh5elsxXSArPSBwb3ckNChyZ2JbMV0sIDIpICogZjtcbiAgICAgIHh5elsyXSArPSBwb3ckNChyZ2JbMl0sIDIpICogZjtcbiAgICAgIHh5elszXSArPSByZ2JbM10gKiBmO1xuICAgIH1cblxuICAgIHh5elswXSA9IHNxcnQkMyh4eXpbMF0pO1xuICAgIHh5elsxXSA9IHNxcnQkMyh4eXpbMV0pO1xuICAgIHh5elsyXSA9IHNxcnQkMyh4eXpbMl0pO1xuXG4gICAgaWYgKHh5elszXSA+IDAuOTk5OTk5OSkge1xuICAgICAgeHl6WzNdID0gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IENvbG9yXzEoY2xpcF9yZ2IkMih4eXopKTtcbiAgfTsgLy8gbWluaW1hbCBtdWx0aS1wdXJwb3NlIGludGVyZmFjZVxuICAvLyBAcmVxdWlyZXMgdXRpbHMgY29sb3IgYW5hbHl6ZVxuXG5cbiAgdmFyIHR5cGUkaiA9IHV0aWxzLnR5cGU7XG4gIHZhciBwb3ckNSA9IE1hdGgucG93O1xuXG4gIHZhciBzY2FsZSA9IGZ1bmN0aW9uIHNjYWxlKGNvbG9ycykge1xuICAgIC8vIGNvbnN0cnVjdG9yXG4gICAgdmFyIF9tb2RlID0gJ3JnYic7XG5cbiAgICB2YXIgX25hY29sID0gY2hyb21hXzEoJyNjY2MnKTtcblxuICAgIHZhciBfc3ByZWFkID0gMDsgLy8gY29uc3QgX2ZpeGVkID0gZmFsc2U7XG5cbiAgICB2YXIgX2RvbWFpbiA9IFswLCAxXTtcbiAgICB2YXIgX3BvcyA9IFtdO1xuICAgIHZhciBfcGFkZGluZyA9IFswLCAwXTtcbiAgICB2YXIgX2NsYXNzZXMgPSBmYWxzZTtcbiAgICB2YXIgX2NvbG9ycyA9IFtdO1xuICAgIHZhciBfb3V0ID0gZmFsc2U7XG4gICAgdmFyIF9taW4gPSAwO1xuICAgIHZhciBfbWF4ID0gMTtcbiAgICB2YXIgX2NvcnJlY3RMaWdodG5lc3MgPSBmYWxzZTtcbiAgICB2YXIgX2NvbG9yQ2FjaGUgPSB7fTtcbiAgICB2YXIgX3VzZUNhY2hlID0gdHJ1ZTtcbiAgICB2YXIgX2dhbW1hID0gMTsgLy8gcHJpdmF0ZSBtZXRob2RzXG5cbiAgICB2YXIgc2V0Q29sb3JzID0gZnVuY3Rpb24gc2V0Q29sb3JzKGNvbG9ycykge1xuICAgICAgY29sb3JzID0gY29sb3JzIHx8IFsnI2ZmZicsICcjMDAwJ107XG5cbiAgICAgIGlmIChjb2xvcnMgJiYgdHlwZSRqKGNvbG9ycykgPT09ICdzdHJpbmcnICYmIGNocm9tYV8xLmJyZXdlciAmJiBjaHJvbWFfMS5icmV3ZXJbY29sb3JzLnRvTG93ZXJDYXNlKCldKSB7XG4gICAgICAgIGNvbG9ycyA9IGNocm9tYV8xLmJyZXdlcltjb2xvcnMudG9Mb3dlckNhc2UoKV07XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlJGooY29sb3JzKSA9PT0gJ2FycmF5Jykge1xuICAgICAgICAvLyBoYW5kbGUgc2luZ2xlIGNvbG9yXG4gICAgICAgIGlmIChjb2xvcnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgY29sb3JzID0gW2NvbG9yc1swXSwgY29sb3JzWzBdXTtcbiAgICAgICAgfSAvLyBtYWtlIGEgY29weSBvZiB0aGUgY29sb3JzXG5cblxuICAgICAgICBjb2xvcnMgPSBjb2xvcnMuc2xpY2UoMCk7IC8vIGNvbnZlcnQgdG8gY2hyb21hIGNsYXNzZXNcblxuICAgICAgICBmb3IgKHZhciBjID0gMDsgYyA8IGNvbG9ycy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgIGNvbG9yc1tjXSA9IGNocm9tYV8xKGNvbG9yc1tjXSk7XG4gICAgICAgIH0gLy8gYXV0by1maWxsIGNvbG9yIHBvc2l0aW9uXG5cblxuICAgICAgICBfcG9zLmxlbmd0aCA9IDA7XG5cbiAgICAgICAgZm9yICh2YXIgYyQxID0gMDsgYyQxIDwgY29sb3JzLmxlbmd0aDsgYyQxKyspIHtcbiAgICAgICAgICBfcG9zLnB1c2goYyQxIC8gKGNvbG9ycy5sZW5ndGggLSAxKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmVzZXRDYWNoZSgpO1xuICAgICAgcmV0dXJuIF9jb2xvcnMgPSBjb2xvcnM7XG4gICAgfTtcblxuICAgIHZhciBnZXRDbGFzcyA9IGZ1bmN0aW9uIGdldENsYXNzKHZhbHVlKSB7XG4gICAgICBpZiAoX2NsYXNzZXMgIT0gbnVsbCkge1xuICAgICAgICB2YXIgbiA9IF9jbGFzc2VzLmxlbmd0aCAtIDE7XG4gICAgICAgIHZhciBpID0gMDtcblxuICAgICAgICB3aGlsZSAoaSA8IG4gJiYgdmFsdWUgPj0gX2NsYXNzZXNbaV0pIHtcbiAgICAgICAgICBpKys7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaSAtIDE7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAwO1xuICAgIH07XG5cbiAgICB2YXIgdE1hcExpZ2h0bmVzcyA9IGZ1bmN0aW9uIHRNYXBMaWdodG5lc3ModCkge1xuICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcblxuICAgIHZhciB0TWFwRG9tYWluID0gZnVuY3Rpb24gdE1hcERvbWFpbih0KSB7XG4gICAgICByZXR1cm4gdDtcbiAgICB9OyAvLyBjb25zdCBjbGFzc2lmeVZhbHVlID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAvLyAgICAgbGV0IHZhbCA9IHZhbHVlO1xuICAgIC8vICAgICBpZiAoX2NsYXNzZXMubGVuZ3RoID4gMikge1xuICAgIC8vICAgICAgICAgY29uc3QgbiA9IF9jbGFzc2VzLmxlbmd0aC0xO1xuICAgIC8vICAgICAgICAgY29uc3QgaSA9IGdldENsYXNzKHZhbHVlKTtcbiAgICAvLyAgICAgICAgIGNvbnN0IG1pbmMgPSBfY2xhc3Nlc1swXSArICgoX2NsYXNzZXNbMV0tX2NsYXNzZXNbMF0pICogKDAgKyAoX3NwcmVhZCAqIDAuNSkpKTsgIC8vIGNlbnRlciBvZiAxc3QgY2xhc3NcbiAgICAvLyAgICAgICAgIGNvbnN0IG1heGMgPSBfY2xhc3Nlc1tuLTFdICsgKChfY2xhc3Nlc1tuXS1fY2xhc3Nlc1tuLTFdKSAqICgxIC0gKF9zcHJlYWQgKiAwLjUpKSk7ICAvLyBjZW50ZXIgb2YgbGFzdCBjbGFzc1xuICAgIC8vICAgICAgICAgdmFsID0gX21pbiArICgoKChfY2xhc3Nlc1tpXSArICgoX2NsYXNzZXNbaSsxXSAtIF9jbGFzc2VzW2ldKSAqIDAuNSkpIC0gbWluYykgLyAobWF4Yy1taW5jKSkgKiAoX21heCAtIF9taW4pKTtcbiAgICAvLyAgICAgfVxuICAgIC8vICAgICByZXR1cm4gdmFsO1xuICAgIC8vIH07XG5cblxuICAgIHZhciBnZXRDb2xvciA9IGZ1bmN0aW9uIGdldENvbG9yKHZhbCwgYnlwYXNzTWFwKSB7XG4gICAgICB2YXIgY29sLCB0O1xuXG4gICAgICBpZiAoYnlwYXNzTWFwID09IG51bGwpIHtcbiAgICAgICAgYnlwYXNzTWFwID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc05hTih2YWwpIHx8IHZhbCA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gX25hY29sO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWJ5cGFzc01hcCkge1xuICAgICAgICBpZiAoX2NsYXNzZXMgJiYgX2NsYXNzZXMubGVuZ3RoID4gMikge1xuICAgICAgICAgIC8vIGZpbmQgdGhlIGNsYXNzXG4gICAgICAgICAgdmFyIGMgPSBnZXRDbGFzcyh2YWwpO1xuICAgICAgICAgIHQgPSBjIC8gKF9jbGFzc2VzLmxlbmd0aCAtIDIpO1xuICAgICAgICB9IGVsc2UgaWYgKF9tYXggIT09IF9taW4pIHtcbiAgICAgICAgICAvLyBqdXN0IGludGVycG9sYXRlIGJldHdlZW4gbWluL21heFxuICAgICAgICAgIHQgPSAodmFsIC0gX21pbikgLyAoX21heCAtIF9taW4pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHQgPSAxO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0ID0gdmFsO1xuICAgICAgfSAvLyBkb21haW4gbWFwXG5cblxuICAgICAgdCA9IHRNYXBEb21haW4odCk7XG5cbiAgICAgIGlmICghYnlwYXNzTWFwKSB7XG4gICAgICAgIHQgPSB0TWFwTGlnaHRuZXNzKHQpOyAvLyBsaWdodG5lc3MgY29ycmVjdGlvblxuICAgICAgfVxuXG4gICAgICBpZiAoX2dhbW1hICE9PSAxKSB7XG4gICAgICAgIHQgPSBwb3ckNSh0LCBfZ2FtbWEpO1xuICAgICAgfVxuXG4gICAgICB0ID0gX3BhZGRpbmdbMF0gKyB0ICogKDEgLSBfcGFkZGluZ1swXSAtIF9wYWRkaW5nWzFdKTtcbiAgICAgIHQgPSBNYXRoLm1pbigxLCBNYXRoLm1heCgwLCB0KSk7XG4gICAgICB2YXIgayA9IE1hdGguZmxvb3IodCAqIDEwMDAwKTtcblxuICAgICAgaWYgKF91c2VDYWNoZSAmJiBfY29sb3JDYWNoZVtrXSkge1xuICAgICAgICBjb2wgPSBfY29sb3JDYWNoZVtrXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0eXBlJGooX2NvbG9ycykgPT09ICdhcnJheScpIHtcbiAgICAgICAgICAvL2ZvciBpIGluIFswLi5fcG9zLmxlbmd0aC0xXVxuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgX3Bvcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIHAgPSBfcG9zW2ldO1xuXG4gICAgICAgICAgICBpZiAodCA8PSBwKSB7XG4gICAgICAgICAgICAgIGNvbCA9IF9jb2xvcnNbaV07XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodCA+PSBwICYmIGkgPT09IF9wb3MubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICBjb2wgPSBfY29sb3JzW2ldO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHQgPiBwICYmIHQgPCBfcG9zW2kgKyAxXSkge1xuICAgICAgICAgICAgICB0ID0gKHQgLSBwKSAvIChfcG9zW2kgKyAxXSAtIHApO1xuICAgICAgICAgICAgICBjb2wgPSBjaHJvbWFfMS5pbnRlcnBvbGF0ZShfY29sb3JzW2ldLCBfY29sb3JzW2kgKyAxXSwgdCwgX21vZGUpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSRqKF9jb2xvcnMpID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgY29sID0gX2NvbG9ycyh0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChfdXNlQ2FjaGUpIHtcbiAgICAgICAgICBfY29sb3JDYWNoZVtrXSA9IGNvbDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29sO1xuICAgIH07XG5cbiAgICB2YXIgcmVzZXRDYWNoZSA9IGZ1bmN0aW9uIHJlc2V0Q2FjaGUoKSB7XG4gICAgICByZXR1cm4gX2NvbG9yQ2FjaGUgPSB7fTtcbiAgICB9O1xuXG4gICAgc2V0Q29sb3JzKGNvbG9ycyk7IC8vIHB1YmxpYyBpbnRlcmZhY2VcblxuICAgIHZhciBmID0gZnVuY3Rpb24gZih2KSB7XG4gICAgICB2YXIgYyA9IGNocm9tYV8xKGdldENvbG9yKHYpKTtcblxuICAgICAgaWYgKF9vdXQgJiYgY1tfb3V0XSkge1xuICAgICAgICByZXR1cm4gY1tfb3V0XSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGM7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGYuY2xhc3NlcyA9IGZ1bmN0aW9uIChjbGFzc2VzKSB7XG4gICAgICBpZiAoY2xhc3NlcyAhPSBudWxsKSB7XG4gICAgICAgIGlmICh0eXBlJGooY2xhc3NlcykgPT09ICdhcnJheScpIHtcbiAgICAgICAgICBfY2xhc3NlcyA9IGNsYXNzZXM7XG4gICAgICAgICAgX2RvbWFpbiA9IFtjbGFzc2VzWzBdLCBjbGFzc2VzW2NsYXNzZXMubGVuZ3RoIC0gMV1dO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBkID0gY2hyb21hXzEuYW5hbHl6ZShfZG9tYWluKTtcblxuICAgICAgICAgIGlmIChjbGFzc2VzID09PSAwKSB7XG4gICAgICAgICAgICBfY2xhc3NlcyA9IFtkLm1pbiwgZC5tYXhdO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBfY2xhc3NlcyA9IGNocm9tYV8xLmxpbWl0cyhkLCAnZScsIGNsYXNzZXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX2NsYXNzZXM7XG4gICAgfTtcblxuICAgIGYuZG9tYWluID0gZnVuY3Rpb24gKGRvbWFpbikge1xuICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBfZG9tYWluO1xuICAgICAgfVxuXG4gICAgICBfbWluID0gZG9tYWluWzBdO1xuICAgICAgX21heCA9IGRvbWFpbltkb21haW4ubGVuZ3RoIC0gMV07XG4gICAgICBfcG9zID0gW107XG4gICAgICB2YXIgayA9IF9jb2xvcnMubGVuZ3RoO1xuXG4gICAgICBpZiAoZG9tYWluLmxlbmd0aCA9PT0gayAmJiBfbWluICE9PSBfbWF4KSB7XG4gICAgICAgIC8vIHVwZGF0ZSBwb3NpdGlvbnNcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxpc3QgPSBBcnJheS5mcm9tKGRvbWFpbik7IGkgPCBsaXN0Lmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgdmFyIGQgPSBsaXN0W2ldO1xuXG4gICAgICAgICAgX3Bvcy5wdXNoKChkIC0gX21pbikgLyAoX21heCAtIF9taW4pKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yICh2YXIgYyA9IDA7IGMgPCBrOyBjKyspIHtcbiAgICAgICAgICBfcG9zLnB1c2goYyAvIChrIC0gMSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRvbWFpbi5sZW5ndGggPiAyKSB7XG4gICAgICAgICAgLy8gc2V0IGRvbWFpbiBtYXBcbiAgICAgICAgICB2YXIgdE91dCA9IGRvbWFpbi5tYXAoZnVuY3Rpb24gKGQsIGkpIHtcbiAgICAgICAgICAgIHJldHVybiBpIC8gKGRvbWFpbi5sZW5ndGggLSAxKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB2YXIgdEJyZWFrcyA9IGRvbWFpbi5tYXAoZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgICAgIHJldHVybiAoZCAtIF9taW4pIC8gKF9tYXggLSBfbWluKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGlmICghdEJyZWFrcy5ldmVyeShmdW5jdGlvbiAodmFsLCBpKSB7XG4gICAgICAgICAgICByZXR1cm4gdE91dFtpXSA9PT0gdmFsO1xuICAgICAgICAgIH0pKSB7XG4gICAgICAgICAgICB0TWFwRG9tYWluID0gZnVuY3Rpb24gdE1hcERvbWFpbih0KSB7XG4gICAgICAgICAgICAgIGlmICh0IDw9IDAgfHwgdCA+PSAxKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHQ7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB2YXIgaSA9IDA7XG5cbiAgICAgICAgICAgICAgd2hpbGUgKHQgPj0gdEJyZWFrc1tpICsgMV0pIHtcbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB2YXIgZiA9ICh0IC0gdEJyZWFrc1tpXSkgLyAodEJyZWFrc1tpICsgMV0gLSB0QnJlYWtzW2ldKTtcbiAgICAgICAgICAgICAgdmFyIG91dCA9IHRPdXRbaV0gKyBmICogKHRPdXRbaSArIDFdIC0gdE91dFtpXSk7XG4gICAgICAgICAgICAgIHJldHVybiBvdXQ7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBfZG9tYWluID0gW19taW4sIF9tYXhdO1xuICAgICAgcmV0dXJuIGY7XG4gICAgfTtcblxuICAgIGYubW9kZSA9IGZ1bmN0aW9uIChfbSkge1xuICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBfbW9kZTtcbiAgICAgIH1cblxuICAgICAgX21vZGUgPSBfbTtcbiAgICAgIHJlc2V0Q2FjaGUoKTtcbiAgICAgIHJldHVybiBmO1xuICAgIH07XG5cbiAgICBmLnJhbmdlID0gZnVuY3Rpb24gKGNvbG9ycywgX3Bvcykge1xuICAgICAgc2V0Q29sb3JzKGNvbG9ycywgX3Bvcyk7XG4gICAgICByZXR1cm4gZjtcbiAgICB9O1xuXG4gICAgZi5vdXQgPSBmdW5jdGlvbiAoX28pIHtcbiAgICAgIF9vdXQgPSBfbztcbiAgICAgIHJldHVybiBmO1xuICAgIH07XG5cbiAgICBmLnNwcmVhZCA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gX3NwcmVhZDtcbiAgICAgIH1cblxuICAgICAgX3NwcmVhZCA9IHZhbDtcbiAgICAgIHJldHVybiBmO1xuICAgIH07XG5cbiAgICBmLmNvcnJlY3RMaWdodG5lc3MgPSBmdW5jdGlvbiAodikge1xuICAgICAgaWYgKHYgPT0gbnVsbCkge1xuICAgICAgICB2ID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgX2NvcnJlY3RMaWdodG5lc3MgPSB2O1xuICAgICAgcmVzZXRDYWNoZSgpO1xuXG4gICAgICBpZiAoX2NvcnJlY3RMaWdodG5lc3MpIHtcbiAgICAgICAgdE1hcExpZ2h0bmVzcyA9IGZ1bmN0aW9uIHRNYXBMaWdodG5lc3ModCkge1xuICAgICAgICAgIHZhciBMMCA9IGdldENvbG9yKDAsIHRydWUpLmxhYigpWzBdO1xuICAgICAgICAgIHZhciBMMSA9IGdldENvbG9yKDEsIHRydWUpLmxhYigpWzBdO1xuICAgICAgICAgIHZhciBwb2wgPSBMMCA+IEwxO1xuICAgICAgICAgIHZhciBMX2FjdHVhbCA9IGdldENvbG9yKHQsIHRydWUpLmxhYigpWzBdO1xuICAgICAgICAgIHZhciBMX2lkZWFsID0gTDAgKyAoTDEgLSBMMCkgKiB0O1xuICAgICAgICAgIHZhciBMX2RpZmYgPSBMX2FjdHVhbCAtIExfaWRlYWw7XG4gICAgICAgICAgdmFyIHQwID0gMDtcbiAgICAgICAgICB2YXIgdDEgPSAxO1xuICAgICAgICAgIHZhciBtYXhfaXRlciA9IDIwO1xuXG4gICAgICAgICAgd2hpbGUgKE1hdGguYWJzKExfZGlmZikgPiAxZS0yICYmIG1heF9pdGVyLS0gPiAwKSB7XG4gICAgICAgICAgICAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICBpZiAocG9sKSB7XG4gICAgICAgICAgICAgICAgTF9kaWZmICo9IC0xO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKExfZGlmZiA8IDApIHtcbiAgICAgICAgICAgICAgICB0MCA9IHQ7XG4gICAgICAgICAgICAgICAgdCArPSAodDEgLSB0KSAqIDAuNTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0MSA9IHQ7XG4gICAgICAgICAgICAgICAgdCArPSAodDAgLSB0KSAqIDAuNTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIExfYWN0dWFsID0gZ2V0Q29sb3IodCwgdHJ1ZSkubGFiKClbMF07XG4gICAgICAgICAgICAgIHJldHVybiBMX2RpZmYgPSBMX2FjdHVhbCAtIExfaWRlYWw7XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB0O1xuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdE1hcExpZ2h0bmVzcyA9IGZ1bmN0aW9uIHRNYXBMaWdodG5lc3ModCkge1xuICAgICAgICAgIHJldHVybiB0O1xuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZjtcbiAgICB9O1xuXG4gICAgZi5wYWRkaW5nID0gZnVuY3Rpb24gKHApIHtcbiAgICAgIGlmIChwICE9IG51bGwpIHtcbiAgICAgICAgaWYgKHR5cGUkaihwKSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBwID0gW3AsIHBdO1xuICAgICAgICB9XG5cbiAgICAgICAgX3BhZGRpbmcgPSBwO1xuICAgICAgICByZXR1cm4gZjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBfcGFkZGluZztcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZi5jb2xvcnMgPSBmdW5jdGlvbiAobnVtQ29sb3JzLCBvdXQpIHtcbiAgICAgIC8vIElmIG5vIGFyZ3VtZW50cyBhcmUgZ2l2ZW4sIHJldHVybiB0aGUgb3JpZ2luYWwgY29sb3JzIHRoYXQgd2VyZSBwcm92aWRlZFxuICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgICAgIG91dCA9ICdoZXgnO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVzdWx0ID0gW107XG5cbiAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJlc3VsdCA9IF9jb2xvcnMuc2xpY2UoMCk7XG4gICAgICB9IGVsc2UgaWYgKG51bUNvbG9ycyA9PT0gMSkge1xuICAgICAgICByZXN1bHQgPSBbZigwLjUpXTtcbiAgICAgIH0gZWxzZSBpZiAobnVtQ29sb3JzID4gMSkge1xuICAgICAgICB2YXIgZG0gPSBfZG9tYWluWzBdO1xuICAgICAgICB2YXIgZGQgPSBfZG9tYWluWzFdIC0gZG07XG4gICAgICAgIHJlc3VsdCA9IF9fcmFuZ2VfXygwLCBudW1Db2xvcnMsIGZhbHNlKS5tYXAoZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgICByZXR1cm4gZihkbSArIGkgLyAobnVtQ29sb3JzIC0gMSkgKiBkZCk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gcmV0dXJucyBhbGwgY29sb3JzIGJhc2VkIG9uIHRoZSBkZWZpbmVkIGNsYXNzZXNcbiAgICAgICAgY29sb3JzID0gW107XG4gICAgICAgIHZhciBzYW1wbGVzID0gW107XG5cbiAgICAgICAgaWYgKF9jbGFzc2VzICYmIF9jbGFzc2VzLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMSwgZW5kID0gX2NsYXNzZXMubGVuZ3RoLCBhc2MgPSAxIDw9IGVuZDsgYXNjID8gaSA8IGVuZCA6IGkgPiBlbmQ7IGFzYyA/IGkrKyA6IGktLSkge1xuICAgICAgICAgICAgc2FtcGxlcy5wdXNoKChfY2xhc3Nlc1tpIC0gMV0gKyBfY2xhc3Nlc1tpXSkgKiAwLjUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzYW1wbGVzID0gX2RvbWFpbjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlc3VsdCA9IHNhbXBsZXMubWFwKGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgcmV0dXJuIGYodik7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2hyb21hXzFbb3V0XSkge1xuICAgICAgICByZXN1bHQgPSByZXN1bHQubWFwKGZ1bmN0aW9uIChjKSB7XG4gICAgICAgICAgcmV0dXJuIGNbb3V0XSgpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgZi5jYWNoZSA9IGZ1bmN0aW9uIChjKSB7XG4gICAgICBpZiAoYyAhPSBudWxsKSB7XG4gICAgICAgIF91c2VDYWNoZSA9IGM7XG4gICAgICAgIHJldHVybiBmO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIF91c2VDYWNoZTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZi5nYW1tYSA9IGZ1bmN0aW9uIChnKSB7XG4gICAgICBpZiAoZyAhPSBudWxsKSB7XG4gICAgICAgIF9nYW1tYSA9IGc7XG4gICAgICAgIHJldHVybiBmO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIF9nYW1tYTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZi5ub2RhdGEgPSBmdW5jdGlvbiAoZCkge1xuICAgICAgaWYgKGQgIT0gbnVsbCkge1xuICAgICAgICBfbmFjb2wgPSBjaHJvbWFfMShkKTtcbiAgICAgICAgcmV0dXJuIGY7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gX25hY29sO1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gZjtcbiAgfTtcblxuICBmdW5jdGlvbiBfX3JhbmdlX18obGVmdCwgcmlnaHQsIGluY2x1c2l2ZSkge1xuICAgIHZhciByYW5nZSA9IFtdO1xuICAgIHZhciBhc2NlbmRpbmcgPSBsZWZ0IDwgcmlnaHQ7XG4gICAgdmFyIGVuZCA9ICFpbmNsdXNpdmUgPyByaWdodCA6IGFzY2VuZGluZyA/IHJpZ2h0ICsgMSA6IHJpZ2h0IC0gMTtcblxuICAgIGZvciAodmFyIGkgPSBsZWZ0OyBhc2NlbmRpbmcgPyBpIDwgZW5kIDogaSA+IGVuZDsgYXNjZW5kaW5nID8gaSsrIDogaS0tKSB7XG4gICAgICByYW5nZS5wdXNoKGkpO1xuICAgIH1cblxuICAgIHJldHVybiByYW5nZTtcbiAgfSAvL1xuICAvLyBpbnRlcnBvbGF0ZXMgYmV0d2VlbiBhIHNldCBvZiBjb2xvcnMgdXppbmcgYSBiZXppZXIgc3BsaW5lXG4gIC8vXG4gIC8vIEByZXF1aXJlcyB1dGlscyBsYWJcblxuXG4gIHZhciBiZXppZXIgPSBmdW5jdGlvbiBiZXppZXIoY29sb3JzKSB7XG4gICAgdmFyIGFzc2lnbiwgYXNzaWduJDEsIGFzc2lnbiQyO1xuICAgIHZhciBJLCBsYWIwLCBsYWIxLCBsYWIyO1xuICAgIGNvbG9ycyA9IGNvbG9ycy5tYXAoZnVuY3Rpb24gKGMpIHtcbiAgICAgIHJldHVybiBuZXcgQ29sb3JfMShjKTtcbiAgICB9KTtcblxuICAgIGlmIChjb2xvcnMubGVuZ3RoID09PSAyKSB7XG4gICAgICAvLyBsaW5lYXIgaW50ZXJwb2xhdGlvblxuICAgICAgYXNzaWduID0gY29sb3JzLm1hcChmdW5jdGlvbiAoYykge1xuICAgICAgICByZXR1cm4gYy5sYWIoKTtcbiAgICAgIH0pLCBsYWIwID0gYXNzaWduWzBdLCBsYWIxID0gYXNzaWduWzFdO1xuXG4gICAgICBJID0gZnVuY3Rpb24gSSh0KSB7XG4gICAgICAgIHZhciBsYWIgPSBbMCwgMSwgMl0ubWFwKGZ1bmN0aW9uIChpKSB7XG4gICAgICAgICAgcmV0dXJuIGxhYjBbaV0gKyB0ICogKGxhYjFbaV0gLSBsYWIwW2ldKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBuZXcgQ29sb3JfMShsYWIsICdsYWInKTtcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChjb2xvcnMubGVuZ3RoID09PSAzKSB7XG4gICAgICAvLyBxdWFkcmF0aWMgYmV6aWVyIGludGVycG9sYXRpb25cbiAgICAgIGFzc2lnbiQxID0gY29sb3JzLm1hcChmdW5jdGlvbiAoYykge1xuICAgICAgICByZXR1cm4gYy5sYWIoKTtcbiAgICAgIH0pLCBsYWIwID0gYXNzaWduJDFbMF0sIGxhYjEgPSBhc3NpZ24kMVsxXSwgbGFiMiA9IGFzc2lnbiQxWzJdO1xuXG4gICAgICBJID0gZnVuY3Rpb24gSSh0KSB7XG4gICAgICAgIHZhciBsYWIgPSBbMCwgMSwgMl0ubWFwKGZ1bmN0aW9uIChpKSB7XG4gICAgICAgICAgcmV0dXJuICgxIC0gdCkgKiAoMSAtIHQpICogbGFiMFtpXSArIDIgKiAoMSAtIHQpICogdCAqIGxhYjFbaV0gKyB0ICogdCAqIGxhYjJbaV07XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbmV3IENvbG9yXzEobGFiLCAnbGFiJyk7XG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAoY29sb3JzLmxlbmd0aCA9PT0gNCkge1xuICAgICAgLy8gY3ViaWMgYmV6aWVyIGludGVycG9sYXRpb25cbiAgICAgIHZhciBsYWIzO1xuICAgICAgYXNzaWduJDIgPSBjb2xvcnMubWFwKGZ1bmN0aW9uIChjKSB7XG4gICAgICAgIHJldHVybiBjLmxhYigpO1xuICAgICAgfSksIGxhYjAgPSBhc3NpZ24kMlswXSwgbGFiMSA9IGFzc2lnbiQyWzFdLCBsYWIyID0gYXNzaWduJDJbMl0sIGxhYjMgPSBhc3NpZ24kMlszXTtcblxuICAgICAgSSA9IGZ1bmN0aW9uIEkodCkge1xuICAgICAgICB2YXIgbGFiID0gWzAsIDEsIDJdLm1hcChmdW5jdGlvbiAoaSkge1xuICAgICAgICAgIHJldHVybiAoMSAtIHQpICogKDEgLSB0KSAqICgxIC0gdCkgKiBsYWIwW2ldICsgMyAqICgxIC0gdCkgKiAoMSAtIHQpICogdCAqIGxhYjFbaV0gKyAzICogKDEgLSB0KSAqIHQgKiB0ICogbGFiMltpXSArIHQgKiB0ICogdCAqIGxhYjNbaV07XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbmV3IENvbG9yXzEobGFiLCAnbGFiJyk7XG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAoY29sb3JzLmxlbmd0aCA9PT0gNSkge1xuICAgICAgdmFyIEkwID0gYmV6aWVyKGNvbG9ycy5zbGljZSgwLCAzKSk7XG4gICAgICB2YXIgSTEgPSBiZXppZXIoY29sb3JzLnNsaWNlKDIsIDUpKTtcblxuICAgICAgSSA9IGZ1bmN0aW9uIEkodCkge1xuICAgICAgICBpZiAodCA8IDAuNSkge1xuICAgICAgICAgIHJldHVybiBJMCh0ICogMik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIEkxKCh0IC0gMC41KSAqIDIpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBJO1xuICB9O1xuXG4gIHZhciBiZXppZXJfMSA9IGZ1bmN0aW9uIGJlemllcl8xKGNvbG9ycykge1xuICAgIHZhciBmID0gYmV6aWVyKGNvbG9ycyk7XG5cbiAgICBmLnNjYWxlID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHNjYWxlKGYpO1xuICAgIH07XG5cbiAgICByZXR1cm4gZjtcbiAgfTtcbiAgLypcbiAgICogaW50ZXJwb2xhdGVzIGJldHdlZW4gYSBzZXQgb2YgY29sb3JzIHV6aW5nIGEgYmV6aWVyIHNwbGluZVxuICAgKiBibGVuZCBtb2RlIGZvcm11bGFzIHRha2VuIGZyb20gaHR0cDovL3d3dy52ZW50dXJlLXdhcmUuY29tL2tldmluL2NvZGluZy9sZXRzLWxlYXJuLW1hdGgtcGhvdG9zaG9wLWJsZW5kLW1vZGVzL1xuICAgKi9cblxuXG4gIHZhciBibGVuZCA9IGZ1bmN0aW9uIGJsZW5kKGJvdHRvbSwgdG9wLCBtb2RlKSB7XG4gICAgaWYgKCFibGVuZFttb2RlXSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmtub3duIGJsZW5kIG1vZGUgJyArIG1vZGUpO1xuICAgIH1cblxuICAgIHJldHVybiBibGVuZFttb2RlXShib3R0b20sIHRvcCk7XG4gIH07XG5cbiAgdmFyIGJsZW5kX2YgPSBmdW5jdGlvbiBibGVuZF9mKGYpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGJvdHRvbSwgdG9wKSB7XG4gICAgICB2YXIgYzAgPSBjaHJvbWFfMSh0b3ApLnJnYigpO1xuICAgICAgdmFyIGMxID0gY2hyb21hXzEoYm90dG9tKS5yZ2IoKTtcbiAgICAgIHJldHVybiBjaHJvbWFfMS5yZ2IoZihjMCwgYzEpKTtcbiAgICB9O1xuICB9O1xuXG4gIHZhciBlYWNoID0gZnVuY3Rpb24gZWFjaChmKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChjMCwgYzEpIHtcbiAgICAgIHZhciBvdXQgPSBbXTtcbiAgICAgIG91dFswXSA9IGYoYzBbMF0sIGMxWzBdKTtcbiAgICAgIG91dFsxXSA9IGYoYzBbMV0sIGMxWzFdKTtcbiAgICAgIG91dFsyXSA9IGYoYzBbMl0sIGMxWzJdKTtcbiAgICAgIHJldHVybiBvdXQ7XG4gICAgfTtcbiAgfTtcblxuICB2YXIgbm9ybWFsID0gZnVuY3Rpb24gbm9ybWFsKGEpIHtcbiAgICByZXR1cm4gYTtcbiAgfTtcblxuICB2YXIgbXVsdGlwbHkgPSBmdW5jdGlvbiBtdWx0aXBseShhLCBiKSB7XG4gICAgcmV0dXJuIGEgKiBiIC8gMjU1O1xuICB9O1xuXG4gIHZhciBkYXJrZW4kMSA9IGZ1bmN0aW9uIGRhcmtlbiQxKGEsIGIpIHtcbiAgICByZXR1cm4gYSA+IGIgPyBiIDogYTtcbiAgfTtcblxuICB2YXIgbGlnaHRlbiA9IGZ1bmN0aW9uIGxpZ2h0ZW4oYSwgYikge1xuICAgIHJldHVybiBhID4gYiA/IGEgOiBiO1xuICB9O1xuXG4gIHZhciBzY3JlZW4gPSBmdW5jdGlvbiBzY3JlZW4oYSwgYikge1xuICAgIHJldHVybiAyNTUgKiAoMSAtICgxIC0gYSAvIDI1NSkgKiAoMSAtIGIgLyAyNTUpKTtcbiAgfTtcblxuICB2YXIgb3ZlcmxheSA9IGZ1bmN0aW9uIG92ZXJsYXkoYSwgYikge1xuICAgIHJldHVybiBiIDwgMTI4ID8gMiAqIGEgKiBiIC8gMjU1IDogMjU1ICogKDEgLSAyICogKDEgLSBhIC8gMjU1KSAqICgxIC0gYiAvIDI1NSkpO1xuICB9O1xuXG4gIHZhciBidXJuID0gZnVuY3Rpb24gYnVybihhLCBiKSB7XG4gICAgcmV0dXJuIDI1NSAqICgxIC0gKDEgLSBiIC8gMjU1KSAvIChhIC8gMjU1KSk7XG4gIH07XG5cbiAgdmFyIGRvZGdlID0gZnVuY3Rpb24gZG9kZ2UoYSwgYikge1xuICAgIGlmIChhID09PSAyNTUpIHtcbiAgICAgIHJldHVybiAyNTU7XG4gICAgfVxuXG4gICAgYSA9IDI1NSAqIChiIC8gMjU1KSAvICgxIC0gYSAvIDI1NSk7XG4gICAgcmV0dXJuIGEgPiAyNTUgPyAyNTUgOiBhO1xuICB9OyAvLyAjIGFkZCA9IChhLGIpIC0+XG4gIC8vICMgICAgIGlmIChhICsgYiA+IDI1NSkgdGhlbiAyNTUgZWxzZSBhICsgYlxuXG5cbiAgYmxlbmQubm9ybWFsID0gYmxlbmRfZihlYWNoKG5vcm1hbCkpO1xuICBibGVuZC5tdWx0aXBseSA9IGJsZW5kX2YoZWFjaChtdWx0aXBseSkpO1xuICBibGVuZC5zY3JlZW4gPSBibGVuZF9mKGVhY2goc2NyZWVuKSk7XG4gIGJsZW5kLm92ZXJsYXkgPSBibGVuZF9mKGVhY2gob3ZlcmxheSkpO1xuICBibGVuZC5kYXJrZW4gPSBibGVuZF9mKGVhY2goZGFya2VuJDEpKTtcbiAgYmxlbmQubGlnaHRlbiA9IGJsZW5kX2YoZWFjaChsaWdodGVuKSk7XG4gIGJsZW5kLmRvZGdlID0gYmxlbmRfZihlYWNoKGRvZGdlKSk7XG4gIGJsZW5kLmJ1cm4gPSBibGVuZF9mKGVhY2goYnVybikpOyAvLyBibGVuZC5hZGQgPSBibGVuZF9mKGVhY2goYWRkKSk7XG5cbiAgdmFyIGJsZW5kXzEgPSBibGVuZDsgLy8gY3ViZWhlbGl4IGludGVycG9sYXRpb25cbiAgLy8gYmFzZWQgb24gRC5BLiBHcmVlbiBcIkEgY29sb3VyIHNjaGVtZSBmb3IgdGhlIGRpc3BsYXkgb2YgYXN0cm9ub21pY2FsIGludGVuc2l0eSBpbWFnZXNcIlxuICAvLyBodHRwOi8vYXN0cm9uLXNvYy5pbi9idWxsZXRpbi8xMUp1bmUvMjg5MzkyMDExLnBkZlxuXG4gIHZhciB0eXBlJGsgPSB1dGlscy50eXBlO1xuICB2YXIgY2xpcF9yZ2IkMyA9IHV0aWxzLmNsaXBfcmdiO1xuICB2YXIgVFdPUEkkMiA9IHV0aWxzLlRXT1BJO1xuICB2YXIgcG93JDYgPSBNYXRoLnBvdztcbiAgdmFyIHNpbiQyID0gTWF0aC5zaW47XG4gIHZhciBjb3MkMyA9IE1hdGguY29zO1xuXG4gIHZhciBjdWJlaGVsaXggPSBmdW5jdGlvbiBjdWJlaGVsaXgoc3RhcnQsIHJvdGF0aW9ucywgaHVlLCBnYW1tYSwgbGlnaHRuZXNzKSB7XG4gICAgaWYgKHN0YXJ0ID09PSB2b2lkIDApIHN0YXJ0ID0gMzAwO1xuICAgIGlmIChyb3RhdGlvbnMgPT09IHZvaWQgMCkgcm90YXRpb25zID0gLTEuNTtcbiAgICBpZiAoaHVlID09PSB2b2lkIDApIGh1ZSA9IDE7XG4gICAgaWYgKGdhbW1hID09PSB2b2lkIDApIGdhbW1hID0gMTtcbiAgICBpZiAobGlnaHRuZXNzID09PSB2b2lkIDApIGxpZ2h0bmVzcyA9IFswLCAxXTtcbiAgICB2YXIgZGggPSAwLFxuICAgICAgICBkbDtcblxuICAgIGlmICh0eXBlJGsobGlnaHRuZXNzKSA9PT0gJ2FycmF5Jykge1xuICAgICAgZGwgPSBsaWdodG5lc3NbMV0gLSBsaWdodG5lc3NbMF07XG4gICAgfSBlbHNlIHtcbiAgICAgIGRsID0gMDtcbiAgICAgIGxpZ2h0bmVzcyA9IFtsaWdodG5lc3MsIGxpZ2h0bmVzc107XG4gICAgfVxuXG4gICAgdmFyIGYgPSBmdW5jdGlvbiBmKGZyYWN0KSB7XG4gICAgICB2YXIgYSA9IFRXT1BJJDIgKiAoKHN0YXJ0ICsgMTIwKSAvIDM2MCArIHJvdGF0aW9ucyAqIGZyYWN0KTtcbiAgICAgIHZhciBsID0gcG93JDYobGlnaHRuZXNzWzBdICsgZGwgKiBmcmFjdCwgZ2FtbWEpO1xuICAgICAgdmFyIGggPSBkaCAhPT0gMCA/IGh1ZVswXSArIGZyYWN0ICogZGggOiBodWU7XG4gICAgICB2YXIgYW1wID0gaCAqIGwgKiAoMSAtIGwpIC8gMjtcbiAgICAgIHZhciBjb3NfYSA9IGNvcyQzKGEpO1xuICAgICAgdmFyIHNpbl9hID0gc2luJDIoYSk7XG4gICAgICB2YXIgciA9IGwgKyBhbXAgKiAoLTAuMTQ4NjEgKiBjb3NfYSArIDEuNzgyNzcgKiBzaW5fYSk7XG4gICAgICB2YXIgZyA9IGwgKyBhbXAgKiAoLTAuMjkyMjcgKiBjb3NfYSAtIDAuOTA2NDkgKiBzaW5fYSk7XG4gICAgICB2YXIgYiA9IGwgKyBhbXAgKiAoKzEuOTcyOTQgKiBjb3NfYSk7XG4gICAgICByZXR1cm4gY2hyb21hXzEoY2xpcF9yZ2IkMyhbciAqIDI1NSwgZyAqIDI1NSwgYiAqIDI1NSwgMV0pKTtcbiAgICB9O1xuXG4gICAgZi5zdGFydCA9IGZ1bmN0aW9uIChzKSB7XG4gICAgICBpZiAocyA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBzdGFydDtcbiAgICAgIH1cblxuICAgICAgc3RhcnQgPSBzO1xuICAgICAgcmV0dXJuIGY7XG4gICAgfTtcblxuICAgIGYucm90YXRpb25zID0gZnVuY3Rpb24gKHIpIHtcbiAgICAgIGlmIChyID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHJvdGF0aW9ucztcbiAgICAgIH1cblxuICAgICAgcm90YXRpb25zID0gcjtcbiAgICAgIHJldHVybiBmO1xuICAgIH07XG5cbiAgICBmLmdhbW1hID0gZnVuY3Rpb24gKGcpIHtcbiAgICAgIGlmIChnID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGdhbW1hO1xuICAgICAgfVxuXG4gICAgICBnYW1tYSA9IGc7XG4gICAgICByZXR1cm4gZjtcbiAgICB9O1xuXG4gICAgZi5odWUgPSBmdW5jdGlvbiAoaCkge1xuICAgICAgaWYgKGggPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gaHVlO1xuICAgICAgfVxuXG4gICAgICBodWUgPSBoO1xuXG4gICAgICBpZiAodHlwZSRrKGh1ZSkgPT09ICdhcnJheScpIHtcbiAgICAgICAgZGggPSBodWVbMV0gLSBodWVbMF07XG5cbiAgICAgICAgaWYgKGRoID09PSAwKSB7XG4gICAgICAgICAgaHVlID0gaHVlWzFdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkaCA9IDA7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmO1xuICAgIH07XG5cbiAgICBmLmxpZ2h0bmVzcyA9IGZ1bmN0aW9uIChoKSB7XG4gICAgICBpZiAoaCA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBsaWdodG5lc3M7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlJGsoaCkgPT09ICdhcnJheScpIHtcbiAgICAgICAgbGlnaHRuZXNzID0gaDtcbiAgICAgICAgZGwgPSBoWzFdIC0gaFswXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxpZ2h0bmVzcyA9IFtoLCBoXTtcbiAgICAgICAgZGwgPSAwO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZjtcbiAgICB9O1xuXG4gICAgZi5zY2FsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBjaHJvbWFfMS5zY2FsZShmKTtcbiAgICB9O1xuXG4gICAgZi5odWUoaHVlKTtcbiAgICByZXR1cm4gZjtcbiAgfTtcblxuICB2YXIgZGlnaXRzID0gJzAxMjM0NTY3ODlhYmNkZWYnO1xuICB2YXIgZmxvb3IkMiA9IE1hdGguZmxvb3I7XG4gIHZhciByYW5kb20gPSBNYXRoLnJhbmRvbTtcblxuICB2YXIgcmFuZG9tXzEgPSBmdW5jdGlvbiByYW5kb21fMSgpIHtcbiAgICB2YXIgY29kZSA9ICcjJztcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNjsgaSsrKSB7XG4gICAgICBjb2RlICs9IGRpZ2l0cy5jaGFyQXQoZmxvb3IkMihyYW5kb20oKSAqIDE2KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBDb2xvcl8xKGNvZGUsICdoZXgnKTtcbiAgfTtcblxuICB2YXIgbG9nJDEgPSBNYXRoLmxvZztcbiAgdmFyIHBvdyQ3ID0gTWF0aC5wb3c7XG4gIHZhciBmbG9vciQzID0gTWF0aC5mbG9vcjtcbiAgdmFyIGFicyA9IE1hdGguYWJzO1xuXG4gIHZhciBhbmFseXplID0gZnVuY3Rpb24gYW5hbHl6ZShkYXRhLCBrZXkpIHtcbiAgICBpZiAoa2V5ID09PSB2b2lkIDApIGtleSA9IG51bGw7XG4gICAgdmFyIHIgPSB7XG4gICAgICBtaW46IE51bWJlci5NQVhfVkFMVUUsXG4gICAgICBtYXg6IE51bWJlci5NQVhfVkFMVUUgKiAtMSxcbiAgICAgIHN1bTogMCxcbiAgICAgIHZhbHVlczogW10sXG4gICAgICBjb3VudDogMFxuICAgIH07XG5cbiAgICBpZiAodHlwZShkYXRhKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGRhdGEgPSBPYmplY3QudmFsdWVzKGRhdGEpO1xuICAgIH1cblxuICAgIGRhdGEuZm9yRWFjaChmdW5jdGlvbiAodmFsKSB7XG4gICAgICBpZiAoa2V5ICYmIHR5cGUodmFsKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgdmFsID0gdmFsW2tleV07XG4gICAgICB9XG5cbiAgICAgIGlmICh2YWwgIT09IHVuZGVmaW5lZCAmJiB2YWwgIT09IG51bGwgJiYgIWlzTmFOKHZhbCkpIHtcbiAgICAgICAgci52YWx1ZXMucHVzaCh2YWwpO1xuICAgICAgICByLnN1bSArPSB2YWw7XG5cbiAgICAgICAgaWYgKHZhbCA8IHIubWluKSB7XG4gICAgICAgICAgci5taW4gPSB2YWw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsID4gci5tYXgpIHtcbiAgICAgICAgICByLm1heCA9IHZhbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHIuY291bnQgKz0gMTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByLmRvbWFpbiA9IFtyLm1pbiwgci5tYXhdO1xuXG4gICAgci5saW1pdHMgPSBmdW5jdGlvbiAobW9kZSwgbnVtKSB7XG4gICAgICByZXR1cm4gbGltaXRzKHIsIG1vZGUsIG51bSk7XG4gICAgfTtcblxuICAgIHJldHVybiByO1xuICB9O1xuXG4gIHZhciBsaW1pdHMgPSBmdW5jdGlvbiBsaW1pdHMoZGF0YSwgbW9kZSwgbnVtKSB7XG4gICAgaWYgKG1vZGUgPT09IHZvaWQgMCkgbW9kZSA9ICdlcXVhbCc7XG4gICAgaWYgKG51bSA9PT0gdm9pZCAwKSBudW0gPSA3O1xuXG4gICAgaWYgKHR5cGUoZGF0YSkgPT0gJ2FycmF5Jykge1xuICAgICAgZGF0YSA9IGFuYWx5emUoZGF0YSk7XG4gICAgfVxuXG4gICAgdmFyIG1pbiA9IGRhdGEubWluO1xuICAgIHZhciBtYXggPSBkYXRhLm1heDtcbiAgICB2YXIgdmFsdWVzID0gZGF0YS52YWx1ZXMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgcmV0dXJuIGEgLSBiO1xuICAgIH0pO1xuXG4gICAgaWYgKG51bSA9PT0gMSkge1xuICAgICAgcmV0dXJuIFttaW4sIG1heF07XG4gICAgfVxuXG4gICAgdmFyIGxpbWl0cyA9IFtdO1xuXG4gICAgaWYgKG1vZGUuc3Vic3RyKDAsIDEpID09PSAnYycpIHtcbiAgICAgIC8vIGNvbnRpbnVvdXNcbiAgICAgIGxpbWl0cy5wdXNoKG1pbik7XG4gICAgICBsaW1pdHMucHVzaChtYXgpO1xuICAgIH1cblxuICAgIGlmIChtb2RlLnN1YnN0cigwLCAxKSA9PT0gJ2UnKSB7XG4gICAgICAvLyBlcXVhbCBpbnRlcnZhbFxuICAgICAgbGltaXRzLnB1c2gobWluKTtcblxuICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBudW07IGkrKykge1xuICAgICAgICBsaW1pdHMucHVzaChtaW4gKyBpIC8gbnVtICogKG1heCAtIG1pbikpO1xuICAgICAgfVxuXG4gICAgICBsaW1pdHMucHVzaChtYXgpO1xuICAgIH0gZWxzZSBpZiAobW9kZS5zdWJzdHIoMCwgMSkgPT09ICdsJykge1xuICAgICAgLy8gbG9nIHNjYWxlXG4gICAgICBpZiAobWluIDw9IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdMb2dhcml0aG1pYyBzY2FsZXMgYXJlIG9ubHkgcG9zc2libGUgZm9yIHZhbHVlcyA+IDAnKTtcbiAgICAgIH1cblxuICAgICAgdmFyIG1pbl9sb2cgPSBNYXRoLkxPRzEwRSAqIGxvZyQxKG1pbik7XG4gICAgICB2YXIgbWF4X2xvZyA9IE1hdGguTE9HMTBFICogbG9nJDEobWF4KTtcbiAgICAgIGxpbWl0cy5wdXNoKG1pbik7XG5cbiAgICAgIGZvciAodmFyIGkkMSA9IDE7IGkkMSA8IG51bTsgaSQxKyspIHtcbiAgICAgICAgbGltaXRzLnB1c2gocG93JDcoMTAsIG1pbl9sb2cgKyBpJDEgLyBudW0gKiAobWF4X2xvZyAtIG1pbl9sb2cpKSk7XG4gICAgICB9XG5cbiAgICAgIGxpbWl0cy5wdXNoKG1heCk7XG4gICAgfSBlbHNlIGlmIChtb2RlLnN1YnN0cigwLCAxKSA9PT0gJ3EnKSB7XG4gICAgICAvLyBxdWFudGlsZSBzY2FsZVxuICAgICAgbGltaXRzLnB1c2gobWluKTtcblxuICAgICAgZm9yICh2YXIgaSQyID0gMTsgaSQyIDwgbnVtOyBpJDIrKykge1xuICAgICAgICB2YXIgcCA9ICh2YWx1ZXMubGVuZ3RoIC0gMSkgKiBpJDIgLyBudW07XG4gICAgICAgIHZhciBwYiA9IGZsb29yJDMocCk7XG5cbiAgICAgICAgaWYgKHBiID09PSBwKSB7XG4gICAgICAgICAgbGltaXRzLnB1c2godmFsdWVzW3BiXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gcCA+IHBiXG4gICAgICAgICAgdmFyIHByID0gcCAtIHBiO1xuICAgICAgICAgIGxpbWl0cy5wdXNoKHZhbHVlc1twYl0gKiAoMSAtIHByKSArIHZhbHVlc1twYiArIDFdICogcHIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxpbWl0cy5wdXNoKG1heCk7XG4gICAgfSBlbHNlIGlmIChtb2RlLnN1YnN0cigwLCAxKSA9PT0gJ2snKSB7XG4gICAgICAvLyBrLW1lYW5zIGNsdXN0ZXJpbmdcblxuICAgICAgLypcbiAgICAgIGltcGxlbWVudGF0aW9uIGJhc2VkIG9uXG4gICAgICBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvZmlndWUvc291cmNlL2Jyb3dzZS90cnVuay9maWd1ZS5qcyMzMzZcbiAgICAgIHNpbXBsaWZpZWQgZm9yIDEtZCBpbnB1dCB2YWx1ZXNcbiAgICAgICovXG4gICAgICB2YXIgY2x1c3RlcjtcbiAgICAgIHZhciBuID0gdmFsdWVzLmxlbmd0aDtcbiAgICAgIHZhciBhc3NpZ25tZW50cyA9IG5ldyBBcnJheShuKTtcbiAgICAgIHZhciBjbHVzdGVyU2l6ZXMgPSBuZXcgQXJyYXkobnVtKTtcbiAgICAgIHZhciByZXBlYXQgPSB0cnVlO1xuICAgICAgdmFyIG5iX2l0ZXJzID0gMDtcbiAgICAgIHZhciBjZW50cm9pZHMgPSBudWxsOyAvLyBnZXQgc2VlZCB2YWx1ZXNcblxuICAgICAgY2VudHJvaWRzID0gW107XG4gICAgICBjZW50cm9pZHMucHVzaChtaW4pO1xuXG4gICAgICBmb3IgKHZhciBpJDMgPSAxOyBpJDMgPCBudW07IGkkMysrKSB7XG4gICAgICAgIGNlbnRyb2lkcy5wdXNoKG1pbiArIGkkMyAvIG51bSAqIChtYXggLSBtaW4pKTtcbiAgICAgIH1cblxuICAgICAgY2VudHJvaWRzLnB1c2gobWF4KTtcblxuICAgICAgd2hpbGUgKHJlcGVhdCkge1xuICAgICAgICAvLyBhc3NpZ25tZW50IHN0ZXBcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBudW07IGorKykge1xuICAgICAgICAgIGNsdXN0ZXJTaXplc1tqXSA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKHZhciBpJDQgPSAwOyBpJDQgPCBuOyBpJDQrKykge1xuICAgICAgICAgIHZhciB2YWx1ZSA9IHZhbHVlc1tpJDRdO1xuICAgICAgICAgIHZhciBtaW5kaXN0ID0gTnVtYmVyLk1BWF9WQUxVRTtcbiAgICAgICAgICB2YXIgYmVzdCA9IHZvaWQgMDtcblxuICAgICAgICAgIGZvciAodmFyIGokMSA9IDA7IGokMSA8IG51bTsgaiQxKyspIHtcbiAgICAgICAgICAgIHZhciBkaXN0ID0gYWJzKGNlbnRyb2lkc1tqJDFdIC0gdmFsdWUpO1xuXG4gICAgICAgICAgICBpZiAoZGlzdCA8IG1pbmRpc3QpIHtcbiAgICAgICAgICAgICAgbWluZGlzdCA9IGRpc3Q7XG4gICAgICAgICAgICAgIGJlc3QgPSBqJDE7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNsdXN0ZXJTaXplc1tiZXN0XSsrO1xuICAgICAgICAgICAgYXNzaWdubWVudHNbaSQ0XSA9IGJlc3Q7XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIHVwZGF0ZSBjZW50cm9pZHMgc3RlcFxuXG5cbiAgICAgICAgdmFyIG5ld0NlbnRyb2lkcyA9IG5ldyBBcnJheShudW0pO1xuXG4gICAgICAgIGZvciAodmFyIGokMiA9IDA7IGokMiA8IG51bTsgaiQyKyspIHtcbiAgICAgICAgICBuZXdDZW50cm9pZHNbaiQyXSA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKHZhciBpJDUgPSAwOyBpJDUgPCBuOyBpJDUrKykge1xuICAgICAgICAgIGNsdXN0ZXIgPSBhc3NpZ25tZW50c1tpJDVdO1xuXG4gICAgICAgICAgaWYgKG5ld0NlbnRyb2lkc1tjbHVzdGVyXSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgbmV3Q2VudHJvaWRzW2NsdXN0ZXJdID0gdmFsdWVzW2kkNV07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5ld0NlbnRyb2lkc1tjbHVzdGVyXSArPSB2YWx1ZXNbaSQ1XTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKHZhciBqJDMgPSAwOyBqJDMgPCBudW07IGokMysrKSB7XG4gICAgICAgICAgbmV3Q2VudHJvaWRzW2okM10gKj0gMSAvIGNsdXN0ZXJTaXplc1tqJDNdO1xuICAgICAgICB9IC8vIGNoZWNrIGNvbnZlcmdlbmNlXG5cblxuICAgICAgICByZXBlYXQgPSBmYWxzZTtcblxuICAgICAgICBmb3IgKHZhciBqJDQgPSAwOyBqJDQgPCBudW07IGokNCsrKSB7XG4gICAgICAgICAgaWYgKG5ld0NlbnRyb2lkc1tqJDRdICE9PSBjZW50cm9pZHNbaiQ0XSkge1xuICAgICAgICAgICAgcmVwZWF0ID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNlbnRyb2lkcyA9IG5ld0NlbnRyb2lkcztcbiAgICAgICAgbmJfaXRlcnMrKztcblxuICAgICAgICBpZiAobmJfaXRlcnMgPiAyMDApIHtcbiAgICAgICAgICByZXBlYXQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBmaW5pc2hlZCBrLW1lYW5zIGNsdXN0ZXJpbmdcbiAgICAgIC8vIHRoZSBuZXh0IHBhcnQgaXMgYm9ycm93ZWQgZnJvbSBnYWJyaWVsZmxvci5pdFxuXG5cbiAgICAgIHZhciBrQ2x1c3RlcnMgPSB7fTtcblxuICAgICAgZm9yICh2YXIgaiQ1ID0gMDsgaiQ1IDwgbnVtOyBqJDUrKykge1xuICAgICAgICBrQ2x1c3RlcnNbaiQ1XSA9IFtdO1xuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBpJDYgPSAwOyBpJDYgPCBuOyBpJDYrKykge1xuICAgICAgICBjbHVzdGVyID0gYXNzaWdubWVudHNbaSQ2XTtcbiAgICAgICAga0NsdXN0ZXJzW2NsdXN0ZXJdLnB1c2godmFsdWVzW2kkNl0pO1xuICAgICAgfVxuXG4gICAgICB2YXIgdG1wS01lYW5zQnJlYWtzID0gW107XG5cbiAgICAgIGZvciAodmFyIGokNiA9IDA7IGokNiA8IG51bTsgaiQ2KyspIHtcbiAgICAgICAgdG1wS01lYW5zQnJlYWtzLnB1c2goa0NsdXN0ZXJzW2okNl1bMF0pO1xuICAgICAgICB0bXBLTWVhbnNCcmVha3MucHVzaChrQ2x1c3RlcnNbaiQ2XVtrQ2x1c3RlcnNbaiQ2XS5sZW5ndGggLSAxXSk7XG4gICAgICB9XG5cbiAgICAgIHRtcEtNZWFuc0JyZWFrcyA9IHRtcEtNZWFuc0JyZWFrcy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgIHJldHVybiBhIC0gYjtcbiAgICAgIH0pO1xuICAgICAgbGltaXRzLnB1c2godG1wS01lYW5zQnJlYWtzWzBdKTtcblxuICAgICAgZm9yICh2YXIgaSQ3ID0gMTsgaSQ3IDwgdG1wS01lYW5zQnJlYWtzLmxlbmd0aDsgaSQ3ICs9IDIpIHtcbiAgICAgICAgdmFyIHYgPSB0bXBLTWVhbnNCcmVha3NbaSQ3XTtcblxuICAgICAgICBpZiAoIWlzTmFOKHYpICYmIGxpbWl0cy5pbmRleE9mKHYpID09PSAtMSkge1xuICAgICAgICAgIGxpbWl0cy5wdXNoKHYpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGxpbWl0cztcbiAgfTtcblxuICB2YXIgYW5hbHl6ZV8xID0ge1xuICAgIGFuYWx5emU6IGFuYWx5emUsXG4gICAgbGltaXRzOiBsaW1pdHNcbiAgfTtcblxuICB2YXIgY29udHJhc3QgPSBmdW5jdGlvbiBjb250cmFzdChhLCBiKSB7XG4gICAgLy8gV0NBRyBjb250cmFzdCByYXRpb1xuICAgIC8vIHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDA4L1JFQy1XQ0FHMjAtMjAwODEyMTEvI2NvbnRyYXN0LXJhdGlvZGVmXG4gICAgYSA9IG5ldyBDb2xvcl8xKGEpO1xuICAgIGIgPSBuZXcgQ29sb3JfMShiKTtcbiAgICB2YXIgbDEgPSBhLmx1bWluYW5jZSgpO1xuICAgIHZhciBsMiA9IGIubHVtaW5hbmNlKCk7XG4gICAgcmV0dXJuIGwxID4gbDIgPyAobDEgKyAwLjA1KSAvIChsMiArIDAuMDUpIDogKGwyICsgMC4wNSkgLyAobDEgKyAwLjA1KTtcbiAgfTtcblxuICB2YXIgc3FydCQ0ID0gTWF0aC5zcXJ0O1xuICB2YXIgYXRhbjIkMiA9IE1hdGguYXRhbjI7XG4gIHZhciBhYnMkMSA9IE1hdGguYWJzO1xuICB2YXIgY29zJDQgPSBNYXRoLmNvcztcbiAgdmFyIFBJJDIgPSBNYXRoLlBJO1xuXG4gIHZhciBkZWx0YUUgPSBmdW5jdGlvbiBkZWx0YUUoYSwgYiwgTCwgQykge1xuICAgIGlmIChMID09PSB2b2lkIDApIEwgPSAxO1xuICAgIGlmIChDID09PSB2b2lkIDApIEMgPSAxOyAvLyBEZWx0YSBFIChDTUMpXG4gICAgLy8gc2VlIGh0dHA6Ly93d3cuYnJ1Y2VsaW5kYmxvb20uY29tL2luZGV4Lmh0bWw/RXFuX0RlbHRhRV9DTUMuaHRtbFxuXG4gICAgYSA9IG5ldyBDb2xvcl8xKGEpO1xuICAgIGIgPSBuZXcgQ29sb3JfMShiKTtcbiAgICB2YXIgcmVmID0gQXJyYXkuZnJvbShhLmxhYigpKTtcbiAgICB2YXIgTDEgPSByZWZbMF07XG4gICAgdmFyIGExID0gcmVmWzFdO1xuICAgIHZhciBiMSA9IHJlZlsyXTtcbiAgICB2YXIgcmVmJDEgPSBBcnJheS5mcm9tKGIubGFiKCkpO1xuICAgIHZhciBMMiA9IHJlZiQxWzBdO1xuICAgIHZhciBhMiA9IHJlZiQxWzFdO1xuICAgIHZhciBiMiA9IHJlZiQxWzJdO1xuICAgIHZhciBjMSA9IHNxcnQkNChhMSAqIGExICsgYjEgKiBiMSk7XG4gICAgdmFyIGMyID0gc3FydCQ0KGEyICogYTIgKyBiMiAqIGIyKTtcbiAgICB2YXIgc2wgPSBMMSA8IDE2LjAgPyAwLjUxMSA6IDAuMDQwOTc1ICogTDEgLyAoMS4wICsgMC4wMTc2NSAqIEwxKTtcbiAgICB2YXIgc2MgPSAwLjA2MzggKiBjMSAvICgxLjAgKyAwLjAxMzEgKiBjMSkgKyAwLjYzODtcbiAgICB2YXIgaDEgPSBjMSA8IDAuMDAwMDAxID8gMC4wIDogYXRhbjIkMihiMSwgYTEpICogMTgwLjAgLyBQSSQyO1xuXG4gICAgd2hpbGUgKGgxIDwgMCkge1xuICAgICAgaDEgKz0gMzYwO1xuICAgIH1cblxuICAgIHdoaWxlIChoMSA+PSAzNjApIHtcbiAgICAgIGgxIC09IDM2MDtcbiAgICB9XG5cbiAgICB2YXIgdCA9IGgxID49IDE2NC4wICYmIGgxIDw9IDM0NS4wID8gMC41NiArIGFicyQxKDAuMiAqIGNvcyQ0KFBJJDIgKiAoaDEgKyAxNjguMCkgLyAxODAuMCkpIDogMC4zNiArIGFicyQxKDAuNCAqIGNvcyQ0KFBJJDIgKiAoaDEgKyAzNS4wKSAvIDE4MC4wKSk7XG4gICAgdmFyIGM0ID0gYzEgKiBjMSAqIGMxICogYzE7XG4gICAgdmFyIGYgPSBzcXJ0JDQoYzQgLyAoYzQgKyAxOTAwLjApKTtcbiAgICB2YXIgc2ggPSBzYyAqIChmICogdCArIDEuMCAtIGYpO1xuICAgIHZhciBkZWxMID0gTDEgLSBMMjtcbiAgICB2YXIgZGVsQyA9IGMxIC0gYzI7XG4gICAgdmFyIGRlbEEgPSBhMSAtIGEyO1xuICAgIHZhciBkZWxCID0gYjEgLSBiMjtcbiAgICB2YXIgZEgyID0gZGVsQSAqIGRlbEEgKyBkZWxCICogZGVsQiAtIGRlbEMgKiBkZWxDO1xuICAgIHZhciB2MSA9IGRlbEwgLyAoTCAqIHNsKTtcbiAgICB2YXIgdjIgPSBkZWxDIC8gKEMgKiBzYyk7XG4gICAgdmFyIHYzID0gc2g7XG4gICAgcmV0dXJuIHNxcnQkNCh2MSAqIHYxICsgdjIgKiB2MiArIGRIMiAvICh2MyAqIHYzKSk7XG4gIH07IC8vIHNpbXBsZSBFdWNsaWRlYW4gZGlzdGFuY2VcblxuXG4gIHZhciBkaXN0YW5jZSA9IGZ1bmN0aW9uIGRpc3RhbmNlKGEsIGIsIG1vZGUpIHtcbiAgICBpZiAobW9kZSA9PT0gdm9pZCAwKSBtb2RlID0gJ2xhYic7IC8vIERlbHRhIEUgKENJRSAxOTc2KVxuICAgIC8vIHNlZSBodHRwOi8vd3d3LmJydWNlbGluZGJsb29tLmNvbS9pbmRleC5odG1sP0VxdWF0aW9ucy5odG1sXG5cbiAgICBhID0gbmV3IENvbG9yXzEoYSk7XG4gICAgYiA9IG5ldyBDb2xvcl8xKGIpO1xuICAgIHZhciBsMSA9IGEuZ2V0KG1vZGUpO1xuICAgIHZhciBsMiA9IGIuZ2V0KG1vZGUpO1xuICAgIHZhciBzdW1fc3EgPSAwO1xuXG4gICAgZm9yICh2YXIgaSBpbiBsMSkge1xuICAgICAgdmFyIGQgPSAobDFbaV0gfHwgMCkgLSAobDJbaV0gfHwgMCk7XG4gICAgICBzdW1fc3EgKz0gZCAqIGQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIE1hdGguc3FydChzdW1fc3EpO1xuICB9O1xuXG4gIHZhciB2YWxpZCA9IGZ1bmN0aW9uIHZhbGlkKCkge1xuICAgIHZhciBhcmdzID0gW10sXG4gICAgICAgIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cbiAgICB3aGlsZSAobGVuLS0pIHtcbiAgICAgIGFyZ3NbbGVuXSA9IGFyZ3VtZW50c1tsZW5dO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KENvbG9yXzEsIFtudWxsXS5jb25jYXQoYXJncykpKSgpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfTsgLy8gc29tZSBwcmUtZGVmaW5lZCBjb2xvciBzY2FsZXM6XG5cblxuICB2YXIgc2NhbGVzID0ge1xuICAgIGNvb2w6IGZ1bmN0aW9uIGNvb2woKSB7XG4gICAgICByZXR1cm4gc2NhbGUoW2Nocm9tYV8xLmhzbCgxODAsIDEsIC45KSwgY2hyb21hXzEuaHNsKDI1MCwgLjcsIC40KV0pO1xuICAgIH0sXG4gICAgaG90OiBmdW5jdGlvbiBob3QoKSB7XG4gICAgICByZXR1cm4gc2NhbGUoWycjMDAwJywgJyNmMDAnLCAnI2ZmMCcsICcjZmZmJ10sIFswLCAuMjUsIC43NSwgMV0pLm1vZGUoJ3JnYicpO1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAgICBDb2xvckJyZXdlciBjb2xvcnMgZm9yIGNocm9tYS5qc1xuICAgICAgIENvcHlyaWdodCAoYykgMjAwMiBDeW50aGlhIEJyZXdlciwgTWFyayBIYXJyb3dlciwgYW5kIFRoZVxuICAgICAgUGVubnN5bHZhbmlhIFN0YXRlIFVuaXZlcnNpdHkuXG4gICAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gICAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSBkaXN0cmlidXRlZFxuICAgICAgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1JcbiAgICAgIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlXG4gICAgICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICAqL1xuXG4gIHZhciBjb2xvcmJyZXdlciA9IHtcbiAgICAvLyBzZXF1ZW50aWFsXG4gICAgT3JSZDogWycjZmZmN2VjJywgJyNmZWU4YzgnLCAnI2ZkZDQ5ZScsICcjZmRiYjg0JywgJyNmYzhkNTknLCAnI2VmNjU0OCcsICcjZDczMDFmJywgJyNiMzAwMDAnLCAnIzdmMDAwMCddLFxuICAgIFB1QnU6IFsnI2ZmZjdmYicsICcjZWNlN2YyJywgJyNkMGQxZTYnLCAnI2E2YmRkYicsICcjNzRhOWNmJywgJyMzNjkwYzAnLCAnIzA1NzBiMCcsICcjMDQ1YThkJywgJyMwMjM4NTgnXSxcbiAgICBCdVB1OiBbJyNmN2ZjZmQnLCAnI2UwZWNmNCcsICcjYmZkM2U2JywgJyM5ZWJjZGEnLCAnIzhjOTZjNicsICcjOGM2YmIxJywgJyM4ODQxOWQnLCAnIzgxMGY3YycsICcjNGQwMDRiJ10sXG4gICAgT3JhbmdlczogWycjZmZmNWViJywgJyNmZWU2Y2UnLCAnI2ZkZDBhMicsICcjZmRhZTZiJywgJyNmZDhkM2MnLCAnI2YxNjkxMycsICcjZDk0ODAxJywgJyNhNjM2MDMnLCAnIzdmMjcwNCddLFxuICAgIEJ1R246IFsnI2Y3ZmNmZCcsICcjZTVmNWY5JywgJyNjY2VjZTYnLCAnIzk5ZDhjOScsICcjNjZjMmE0JywgJyM0MWFlNzYnLCAnIzIzOGI0NScsICcjMDA2ZDJjJywgJyMwMDQ0MWInXSxcbiAgICBZbE9yQnI6IFsnI2ZmZmZlNScsICcjZmZmN2JjJywgJyNmZWUzOTEnLCAnI2ZlYzQ0ZicsICcjZmU5OTI5JywgJyNlYzcwMTQnLCAnI2NjNGMwMicsICcjOTkzNDA0JywgJyM2NjI1MDYnXSxcbiAgICBZbEduOiBbJyNmZmZmZTUnLCAnI2Y3ZmNiOScsICcjZDlmMGEzJywgJyNhZGRkOGUnLCAnIzc4YzY3OScsICcjNDFhYjVkJywgJyMyMzg0NDMnLCAnIzAwNjgzNycsICcjMDA0NTI5J10sXG4gICAgUmVkczogWycjZmZmNWYwJywgJyNmZWUwZDInLCAnI2ZjYmJhMScsICcjZmM5MjcyJywgJyNmYjZhNGEnLCAnI2VmM2IyYycsICcjY2IxODFkJywgJyNhNTBmMTUnLCAnIzY3MDAwZCddLFxuICAgIFJkUHU6IFsnI2ZmZjdmMycsICcjZmRlMGRkJywgJyNmY2M1YzAnLCAnI2ZhOWZiNScsICcjZjc2OGExJywgJyNkZDM0OTcnLCAnI2FlMDE3ZScsICcjN2EwMTc3JywgJyM0OTAwNmEnXSxcbiAgICBHcmVlbnM6IFsnI2Y3ZmNmNScsICcjZTVmNWUwJywgJyNjN2U5YzAnLCAnI2ExZDk5YicsICcjNzRjNDc2JywgJyM0MWFiNWQnLCAnIzIzOGI0NScsICcjMDA2ZDJjJywgJyMwMDQ0MWInXSxcbiAgICBZbEduQnU6IFsnI2ZmZmZkOScsICcjZWRmOGIxJywgJyNjN2U5YjQnLCAnIzdmY2RiYicsICcjNDFiNmM0JywgJyMxZDkxYzAnLCAnIzIyNWVhOCcsICcjMjUzNDk0JywgJyMwODFkNTgnXSxcbiAgICBQdXJwbGVzOiBbJyNmY2ZiZmQnLCAnI2VmZWRmNScsICcjZGFkYWViJywgJyNiY2JkZGMnLCAnIzllOWFjOCcsICcjODA3ZGJhJywgJyM2YTUxYTMnLCAnIzU0Mjc4ZicsICcjM2YwMDdkJ10sXG4gICAgR25CdTogWycjZjdmY2YwJywgJyNlMGYzZGInLCAnI2NjZWJjNScsICcjYThkZGI1JywgJyM3YmNjYzQnLCAnIzRlYjNkMycsICcjMmI4Y2JlJywgJyMwODY4YWMnLCAnIzA4NDA4MSddLFxuICAgIEdyZXlzOiBbJyNmZmZmZmYnLCAnI2YwZjBmMCcsICcjZDlkOWQ5JywgJyNiZGJkYmQnLCAnIzk2OTY5NicsICcjNzM3MzczJywgJyM1MjUyNTInLCAnIzI1MjUyNScsICcjMDAwMDAwJ10sXG4gICAgWWxPclJkOiBbJyNmZmZmY2MnLCAnI2ZmZWRhMCcsICcjZmVkOTc2JywgJyNmZWIyNGMnLCAnI2ZkOGQzYycsICcjZmM0ZTJhJywgJyNlMzFhMWMnLCAnI2JkMDAyNicsICcjODAwMDI2J10sXG4gICAgUHVSZDogWycjZjdmNGY5JywgJyNlN2UxZWYnLCAnI2Q0YjlkYScsICcjYzk5NGM3JywgJyNkZjY1YjAnLCAnI2U3Mjk4YScsICcjY2UxMjU2JywgJyM5ODAwNDMnLCAnIzY3MDAxZiddLFxuICAgIEJsdWVzOiBbJyNmN2ZiZmYnLCAnI2RlZWJmNycsICcjYzZkYmVmJywgJyM5ZWNhZTEnLCAnIzZiYWVkNicsICcjNDI5MmM2JywgJyMyMTcxYjUnLCAnIzA4NTE5YycsICcjMDgzMDZiJ10sXG4gICAgUHVCdUduOiBbJyNmZmY3ZmInLCAnI2VjZTJmMCcsICcjZDBkMWU2JywgJyNhNmJkZGInLCAnIzY3YTljZicsICcjMzY5MGMwJywgJyMwMjgxOGEnLCAnIzAxNmM1OScsICcjMDE0NjM2J10sXG4gICAgVmlyaWRpczogWycjNDQwMTU0JywgJyM0ODI3NzcnLCAnIzNmNGE4YScsICcjMzE2NzhlJywgJyMyNjgzOGYnLCAnIzFmOWQ4YScsICcjNmNjZTVhJywgJyNiNmRlMmInLCAnI2ZlZTgyNSddLFxuICAgIC8vIGRpdmVyZ2luZ1xuICAgIFNwZWN0cmFsOiBbJyM5ZTAxNDInLCAnI2Q1M2U0ZicsICcjZjQ2ZDQzJywgJyNmZGFlNjEnLCAnI2ZlZTA4YicsICcjZmZmZmJmJywgJyNlNmY1OTgnLCAnI2FiZGRhNCcsICcjNjZjMmE1JywgJyMzMjg4YmQnLCAnIzVlNGZhMiddLFxuICAgIFJkWWxHbjogWycjYTUwMDI2JywgJyNkNzMwMjcnLCAnI2Y0NmQ0MycsICcjZmRhZTYxJywgJyNmZWUwOGInLCAnI2ZmZmZiZicsICcjZDllZjhiJywgJyNhNmQ5NmEnLCAnIzY2YmQ2MycsICcjMWE5ODUwJywgJyMwMDY4MzcnXSxcbiAgICBSZEJ1OiBbJyM2NzAwMWYnLCAnI2IyMTgyYicsICcjZDY2MDRkJywgJyNmNGE1ODInLCAnI2ZkZGJjNycsICcjZjdmN2Y3JywgJyNkMWU1ZjAnLCAnIzkyYzVkZScsICcjNDM5M2MzJywgJyMyMTY2YWMnLCAnIzA1MzA2MSddLFxuICAgIFBpWUc6IFsnIzhlMDE1MicsICcjYzUxYjdkJywgJyNkZTc3YWUnLCAnI2YxYjZkYScsICcjZmRlMGVmJywgJyNmN2Y3ZjcnLCAnI2U2ZjVkMCcsICcjYjhlMTg2JywgJyM3ZmJjNDEnLCAnIzRkOTIyMScsICcjMjc2NDE5J10sXG4gICAgUFJHbjogWycjNDAwMDRiJywgJyM3NjJhODMnLCAnIzk5NzBhYicsICcjYzJhNWNmJywgJyNlN2Q0ZTgnLCAnI2Y3ZjdmNycsICcjZDlmMGQzJywgJyNhNmRiYTAnLCAnIzVhYWU2MScsICcjMWI3ODM3JywgJyMwMDQ0MWInXSxcbiAgICBSZFlsQnU6IFsnI2E1MDAyNicsICcjZDczMDI3JywgJyNmNDZkNDMnLCAnI2ZkYWU2MScsICcjZmVlMDkwJywgJyNmZmZmYmYnLCAnI2UwZjNmOCcsICcjYWJkOWU5JywgJyM3NGFkZDEnLCAnIzQ1NzViNCcsICcjMzEzNjk1J10sXG4gICAgQnJCRzogWycjNTQzMDA1JywgJyM4YzUxMGEnLCAnI2JmODEyZCcsICcjZGZjMjdkJywgJyNmNmU4YzMnLCAnI2Y1ZjVmNScsICcjYzdlYWU1JywgJyM4MGNkYzEnLCAnIzM1OTc4ZicsICcjMDE2NjVlJywgJyMwMDNjMzAnXSxcbiAgICBSZEd5OiBbJyM2NzAwMWYnLCAnI2IyMTgyYicsICcjZDY2MDRkJywgJyNmNGE1ODInLCAnI2ZkZGJjNycsICcjZmZmZmZmJywgJyNlMGUwZTAnLCAnI2JhYmFiYScsICcjODc4Nzg3JywgJyM0ZDRkNGQnLCAnIzFhMWExYSddLFxuICAgIFB1T3I6IFsnIzdmM2IwOCcsICcjYjM1ODA2JywgJyNlMDgyMTQnLCAnI2ZkYjg2MycsICcjZmVlMGI2JywgJyNmN2Y3ZjcnLCAnI2Q4ZGFlYicsICcjYjJhYmQyJywgJyM4MDczYWMnLCAnIzU0Mjc4OCcsICcjMmQwMDRiJ10sXG4gICAgLy8gcXVhbGl0YXRpdmVcbiAgICBTZXQyOiBbJyM2NmMyYTUnLCAnI2ZjOGQ2MicsICcjOGRhMGNiJywgJyNlNzhhYzMnLCAnI2E2ZDg1NCcsICcjZmZkOTJmJywgJyNlNWM0OTQnLCAnI2IzYjNiMyddLFxuICAgIEFjY2VudDogWycjN2ZjOTdmJywgJyNiZWFlZDQnLCAnI2ZkYzA4NicsICcjZmZmZjk5JywgJyMzODZjYjAnLCAnI2YwMDI3ZicsICcjYmY1YjE3JywgJyM2NjY2NjYnXSxcbiAgICBTZXQxOiBbJyNlNDFhMWMnLCAnIzM3N2ViOCcsICcjNGRhZjRhJywgJyM5ODRlYTMnLCAnI2ZmN2YwMCcsICcjZmZmZjMzJywgJyNhNjU2MjgnLCAnI2Y3ODFiZicsICcjOTk5OTk5J10sXG4gICAgU2V0MzogWycjOGRkM2M3JywgJyNmZmZmYjMnLCAnI2JlYmFkYScsICcjZmI4MDcyJywgJyM4MGIxZDMnLCAnI2ZkYjQ2MicsICcjYjNkZTY5JywgJyNmY2NkZTUnLCAnI2Q5ZDlkOScsICcjYmM4MGJkJywgJyNjY2ViYzUnLCAnI2ZmZWQ2ZiddLFxuICAgIERhcmsyOiBbJyMxYjllNzcnLCAnI2Q5NWYwMicsICcjNzU3MGIzJywgJyNlNzI5OGEnLCAnIzY2YTYxZScsICcjZTZhYjAyJywgJyNhNjc2MWQnLCAnIzY2NjY2NiddLFxuICAgIFBhaXJlZDogWycjYTZjZWUzJywgJyMxZjc4YjQnLCAnI2IyZGY4YScsICcjMzNhMDJjJywgJyNmYjlhOTknLCAnI2UzMWExYycsICcjZmRiZjZmJywgJyNmZjdmMDAnLCAnI2NhYjJkNicsICcjNmEzZDlhJywgJyNmZmZmOTknLCAnI2IxNTkyOCddLFxuICAgIFBhc3RlbDI6IFsnI2IzZTJjZCcsICcjZmRjZGFjJywgJyNjYmQ1ZTgnLCAnI2Y0Y2FlNCcsICcjZTZmNWM5JywgJyNmZmYyYWUnLCAnI2YxZTJjYycsICcjY2NjY2NjJ10sXG4gICAgUGFzdGVsMTogWycjZmJiNGFlJywgJyNiM2NkZTMnLCAnI2NjZWJjNScsICcjZGVjYmU0JywgJyNmZWQ5YTYnLCAnI2ZmZmZjYycsICcjZTVkOGJkJywgJyNmZGRhZWMnLCAnI2YyZjJmMiddXG4gIH07IC8vIGFkZCBsb3dlcmNhc2UgYWxpYXNlcyBmb3IgY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaGVzXG5cbiAgZm9yICh2YXIgaSQxID0gMCwgbGlzdCQxID0gT2JqZWN0LmtleXMoY29sb3JicmV3ZXIpOyBpJDEgPCBsaXN0JDEubGVuZ3RoOyBpJDEgKz0gMSkge1xuICAgIHZhciBrZXkgPSBsaXN0JDFbaSQxXTtcbiAgICBjb2xvcmJyZXdlcltrZXkudG9Mb3dlckNhc2UoKV0gPSBjb2xvcmJyZXdlcltrZXldO1xuICB9XG5cbiAgdmFyIGNvbG9yYnJld2VyXzEgPSBjb2xvcmJyZXdlcjsgLy8gZmVlbCBmcmVlIHRvIGNvbW1lbnQgb3V0IGFueXRoaW5nIHRvIHJvbGx1cFxuICAvLyBhIHNtYWxsZXIgY2hyb21hLmpzIGJ1aWx0XG4gIC8vIGlvIC0tPiBjb252ZXJ0IGNvbG9yc1xuICAvLyBvcGVyYXRvcnMgLS0+IG1vZGlmeSBleGlzdGluZyBDb2xvcnNcbiAgLy8gaW50ZXJwb2xhdG9yc1xuICAvLyBnZW5lcmF0b3JzIC0tID4gY3JlYXRlIG5ldyBjb2xvcnNcblxuICBjaHJvbWFfMS5hdmVyYWdlID0gYXZlcmFnZTtcbiAgY2hyb21hXzEuYmV6aWVyID0gYmV6aWVyXzE7XG4gIGNocm9tYV8xLmJsZW5kID0gYmxlbmRfMTtcbiAgY2hyb21hXzEuY3ViZWhlbGl4ID0gY3ViZWhlbGl4O1xuICBjaHJvbWFfMS5taXggPSBjaHJvbWFfMS5pbnRlcnBvbGF0ZSA9IG1peDtcbiAgY2hyb21hXzEucmFuZG9tID0gcmFuZG9tXzE7XG4gIGNocm9tYV8xLnNjYWxlID0gc2NhbGU7IC8vIG90aGVyIHV0aWxpdHkgbWV0aG9kc1xuXG4gIGNocm9tYV8xLmFuYWx5emUgPSBhbmFseXplXzEuYW5hbHl6ZTtcbiAgY2hyb21hXzEuY29udHJhc3QgPSBjb250cmFzdDtcbiAgY2hyb21hXzEuZGVsdGFFID0gZGVsdGFFO1xuICBjaHJvbWFfMS5kaXN0YW5jZSA9IGRpc3RhbmNlO1xuICBjaHJvbWFfMS5saW1pdHMgPSBhbmFseXplXzEubGltaXRzO1xuICBjaHJvbWFfMS52YWxpZCA9IHZhbGlkOyAvLyBzY2FsZVxuXG4gIGNocm9tYV8xLnNjYWxlcyA9IHNjYWxlczsgLy8gY29sb3JzXG5cbiAgY2hyb21hXzEuY29sb3JzID0gdzNjeDExXzE7XG4gIGNocm9tYV8xLmJyZXdlciA9IGNvbG9yYnJld2VyXzE7XG4gIHZhciBjaHJvbWFfanMgPSBjaHJvbWFfMTtcbiAgcmV0dXJuIGNocm9tYV9qcztcbn0pOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3873\n")},5087:function(module,exports,__webpack_require__){eval("var __WEBPACK_AMD_DEFINE_RESULT__;/*! Hammer.JS - v2.0.7 - 2016-04-22\n * http://hammerjs.github.io/\n *\n * Copyright (c) 2016 Jorik Tangelder;\n * Licensed under the MIT license */\n(function (window, document, exportName, undefined) {\n 'use strict';\n\n var VENDOR_PREFIXES = ['', 'webkit', 'Moz', 'MS', 'ms', 'o'];\n var TEST_ELEMENT = document.createElement('div');\n var TYPE_FUNCTION = 'function';\n var round = Math.round;\n var abs = Math.abs;\n var now = Date.now;\n /**\n * set a timeout with a given scope\n * @param {Function} fn\n * @param {Number} timeout\n * @param {Object} context\n * @returns {number}\n */\n\n function setTimeoutContext(fn, timeout, context) {\n return setTimeout(bindFn(fn, context), timeout);\n }\n /**\n * if the argument is an array, we want to execute the fn on each entry\n * if it aint an array we don't want to do a thing.\n * this is used by all the methods that accept a single and array argument.\n * @param {*|Array} arg\n * @param {String} fn\n * @param {Object} [context]\n * @returns {Boolean}\n */\n\n\n function invokeArrayArg(arg, fn, context) {\n if (Array.isArray(arg)) {\n each(arg, context[fn], context);\n return true;\n }\n\n return false;\n }\n /**\n * walk objects and arrays\n * @param {Object} obj\n * @param {Function} iterator\n * @param {Object} context\n */\n\n\n function each(obj, iterator, context) {\n var i;\n\n if (!obj) {\n return;\n }\n\n if (obj.forEach) {\n obj.forEach(iterator, context);\n } else if (obj.length !== undefined) {\n i = 0;\n\n while (i < obj.length) {\n iterator.call(context, obj[i], i, obj);\n i++;\n }\n } else {\n for (i in obj) {\n obj.hasOwnProperty(i) && iterator.call(context, obj[i], i, obj);\n }\n }\n }\n /**\n * wrap a method with a deprecation warning and stack trace\n * @param {Function} method\n * @param {String} name\n * @param {String} message\n * @returns {Function} A new function wrapping the supplied method.\n */\n\n\n function deprecate(method, name, message) {\n var deprecationMessage = 'DEPRECATED METHOD: ' + name + '\\n' + message + ' AT \\n';\n return function () {\n var e = new Error('get-stack-trace');\n var stack = e && e.stack ? e.stack.replace(/^[^\\(]+?[\\n$]/gm, '').replace(/^\\s+at\\s+/gm, '').replace(/^Object.\\s*\\(/gm, '{anonymous}()@') : 'Unknown Stack Trace';\n var log = window.console && (window.console.warn || window.console.log);\n\n if (log) {\n log.call(window.console, deprecationMessage, stack);\n }\n\n return method.apply(this, arguments);\n };\n }\n /**\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} target\n * @param {...Object} objects_to_assign\n * @returns {Object} target\n */\n\n\n var assign;\n\n if (typeof Object.assign !== 'function') {\n assign = function assign(target) {\n if (target === undefined || target === null) {\n throw new TypeError('Cannot convert undefined or null to object');\n }\n\n var output = Object(target);\n\n for (var index = 1; index < arguments.length; index++) {\n var source = arguments[index];\n\n if (source !== undefined && source !== null) {\n for (var nextKey in source) {\n if (source.hasOwnProperty(nextKey)) {\n output[nextKey] = source[nextKey];\n }\n }\n }\n }\n\n return output;\n };\n } else {\n assign = Object.assign;\n }\n /**\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} dest\n * @param {Object} src\n * @param {Boolean} [merge=false]\n * @returns {Object} dest\n */\n\n\n var extend = deprecate(function extend(dest, src, merge) {\n var keys = Object.keys(src);\n var i = 0;\n\n while (i < keys.length) {\n if (!merge || merge && dest[keys[i]] === undefined) {\n dest[keys[i]] = src[keys[i]];\n }\n\n i++;\n }\n\n return dest;\n }, 'extend', 'Use `assign`.');\n /**\n * merge the values from src in the dest.\n * means that properties that exist in dest will not be overwritten by src\n * @param {Object} dest\n * @param {Object} src\n * @returns {Object} dest\n */\n\n var merge = deprecate(function merge(dest, src) {\n return extend(dest, src, true);\n }, 'merge', 'Use `assign`.');\n /**\n * simple class inheritance\n * @param {Function} child\n * @param {Function} base\n * @param {Object} [properties]\n */\n\n function inherit(child, base, properties) {\n var baseP = base.prototype,\n childP;\n childP = child.prototype = Object.create(baseP);\n childP.constructor = child;\n childP._super = baseP;\n\n if (properties) {\n assign(childP, properties);\n }\n }\n /**\n * simple function bind\n * @param {Function} fn\n * @param {Object} context\n * @returns {Function}\n */\n\n\n function bindFn(fn, context) {\n return function boundFn() {\n return fn.apply(context, arguments);\n };\n }\n /**\n * let a boolean value also be a function that must return a boolean\n * this first item in args will be used as the context\n * @param {Boolean|Function} val\n * @param {Array} [args]\n * @returns {Boolean}\n */\n\n\n function boolOrFn(val, args) {\n if (typeof val == TYPE_FUNCTION) {\n return val.apply(args ? args[0] || undefined : undefined, args);\n }\n\n return val;\n }\n /**\n * use the val2 when val1 is undefined\n * @param {*} val1\n * @param {*} val2\n * @returns {*}\n */\n\n\n function ifUndefined(val1, val2) {\n return val1 === undefined ? val2 : val1;\n }\n /**\n * addEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\n\n\n function addEventListeners(target, types, handler) {\n each(splitStr(types), function (type) {\n target.addEventListener(type, handler, false);\n });\n }\n /**\n * removeEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\n\n\n function removeEventListeners(target, types, handler) {\n each(splitStr(types), function (type) {\n target.removeEventListener(type, handler, false);\n });\n }\n /**\n * find if a node is in the given parent\n * @method hasParent\n * @param {HTMLElement} node\n * @param {HTMLElement} parent\n * @return {Boolean} found\n */\n\n\n function hasParent(node, parent) {\n while (node) {\n if (node == parent) {\n return true;\n }\n\n node = node.parentNode;\n }\n\n return false;\n }\n /**\n * small indexOf wrapper\n * @param {String} str\n * @param {String} find\n * @returns {Boolean} found\n */\n\n\n function inStr(str, find) {\n return str.indexOf(find) > -1;\n }\n /**\n * split string on whitespace\n * @param {String} str\n * @returns {Array} words\n */\n\n\n function splitStr(str) {\n return str.trim().split(/\\s+/g);\n }\n /**\n * find if a array contains the object using indexOf or a simple polyFill\n * @param {Array} src\n * @param {String} find\n * @param {String} [findByKey]\n * @return {Boolean|Number} false when not found, or the index\n */\n\n\n function inArray(src, find, findByKey) {\n if (src.indexOf && !findByKey) {\n return src.indexOf(find);\n } else {\n var i = 0;\n\n while (i < src.length) {\n if (findByKey && src[i][findByKey] == find || !findByKey && src[i] === find) {\n return i;\n }\n\n i++;\n }\n\n return -1;\n }\n }\n /**\n * convert array-like objects to real arrays\n * @param {Object} obj\n * @returns {Array}\n */\n\n\n function toArray(obj) {\n return Array.prototype.slice.call(obj, 0);\n }\n /**\n * unique array with objects based on a key (like 'id') or just by the array's value\n * @param {Array} src [{id:1},{id:2},{id:1}]\n * @param {String} [key]\n * @param {Boolean} [sort=False]\n * @returns {Array} [{id:1},{id:2}]\n */\n\n\n function uniqueArray(src, key, sort) {\n var results = [];\n var values = [];\n var i = 0;\n\n while (i < src.length) {\n var val = key ? src[i][key] : src[i];\n\n if (inArray(values, val) < 0) {\n results.push(src[i]);\n }\n\n values[i] = val;\n i++;\n }\n\n if (sort) {\n if (!key) {\n results = results.sort();\n } else {\n results = results.sort(function sortUniqueArray(a, b) {\n return a[key] > b[key];\n });\n }\n }\n\n return results;\n }\n /**\n * get the prefixed property\n * @param {Object} obj\n * @param {String} property\n * @returns {String|Undefined} prefixed\n */\n\n\n function prefixed(obj, property) {\n var prefix, prop;\n var camelProp = property[0].toUpperCase() + property.slice(1);\n var i = 0;\n\n while (i < VENDOR_PREFIXES.length) {\n prefix = VENDOR_PREFIXES[i];\n prop = prefix ? prefix + camelProp : property;\n\n if (prop in obj) {\n return prop;\n }\n\n i++;\n }\n\n return undefined;\n }\n /**\n * get a unique id\n * @returns {number} uniqueId\n */\n\n\n var _uniqueId = 1;\n\n function uniqueId() {\n return _uniqueId++;\n }\n /**\n * get the window object of an element\n * @param {HTMLElement} element\n * @returns {DocumentView|Window}\n */\n\n\n function getWindowForElement(element) {\n var doc = element.ownerDocument || element;\n return doc.defaultView || doc.parentWindow || window;\n }\n\n var MOBILE_REGEX = /mobile|tablet|ip(ad|hone|od)|android/i;\n var SUPPORT_TOUCH = ('ontouchstart' in window);\n var SUPPORT_POINTER_EVENTS = prefixed(window, 'PointerEvent') !== undefined;\n var SUPPORT_ONLY_TOUCH = SUPPORT_TOUCH && MOBILE_REGEX.test(navigator.userAgent);\n var INPUT_TYPE_TOUCH = 'touch';\n var INPUT_TYPE_PEN = 'pen';\n var INPUT_TYPE_MOUSE = 'mouse';\n var INPUT_TYPE_KINECT = 'kinect';\n var COMPUTE_INTERVAL = 25;\n var INPUT_START = 1;\n var INPUT_MOVE = 2;\n var INPUT_END = 4;\n var INPUT_CANCEL = 8;\n var DIRECTION_NONE = 1;\n var DIRECTION_LEFT = 2;\n var DIRECTION_RIGHT = 4;\n var DIRECTION_UP = 8;\n var DIRECTION_DOWN = 16;\n var DIRECTION_HORIZONTAL = DIRECTION_LEFT | DIRECTION_RIGHT;\n var DIRECTION_VERTICAL = DIRECTION_UP | DIRECTION_DOWN;\n var DIRECTION_ALL = DIRECTION_HORIZONTAL | DIRECTION_VERTICAL;\n var PROPS_XY = ['x', 'y'];\n var PROPS_CLIENT_XY = ['clientX', 'clientY'];\n /**\n * create new input type manager\n * @param {Manager} manager\n * @param {Function} callback\n * @returns {Input}\n * @constructor\n */\n\n function Input(manager, callback) {\n var self = this;\n this.manager = manager;\n this.callback = callback;\n this.element = manager.element;\n this.target = manager.options.inputTarget; // smaller wrapper around the handler, for the scope and the enabled state of the manager,\n // so when disabled the input events are completely bypassed.\n\n this.domHandler = function (ev) {\n if (boolOrFn(manager.options.enable, [manager])) {\n self.handler(ev);\n }\n };\n\n this.init();\n }\n\n Input.prototype = {\n /**\n * should handle the inputEvent data and trigger the callback\n * @virtual\n */\n handler: function handler() {},\n\n /**\n * bind the events\n */\n init: function init() {\n this.evEl && addEventListeners(this.element, this.evEl, this.domHandler);\n this.evTarget && addEventListeners(this.target, this.evTarget, this.domHandler);\n this.evWin && addEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n },\n\n /**\n * unbind the events\n */\n destroy: function destroy() {\n this.evEl && removeEventListeners(this.element, this.evEl, this.domHandler);\n this.evTarget && removeEventListeners(this.target, this.evTarget, this.domHandler);\n this.evWin && removeEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n }\n };\n /**\n * create new input type manager\n * called by the Manager constructor\n * @param {Hammer} manager\n * @returns {Input}\n */\n\n function createInputInstance(manager) {\n var Type;\n var inputClass = manager.options.inputClass;\n\n if (inputClass) {\n Type = inputClass;\n } else if (SUPPORT_POINTER_EVENTS) {\n Type = PointerEventInput;\n } else if (SUPPORT_ONLY_TOUCH) {\n Type = TouchInput;\n } else if (!SUPPORT_TOUCH) {\n Type = MouseInput;\n } else {\n Type = TouchMouseInput;\n }\n\n return new Type(manager, inputHandler);\n }\n /**\n * handle input events\n * @param {Manager} manager\n * @param {String} eventType\n * @param {Object} input\n */\n\n\n function inputHandler(manager, eventType, input) {\n var pointersLen = input.pointers.length;\n var changedPointersLen = input.changedPointers.length;\n var isFirst = eventType & INPUT_START && pointersLen - changedPointersLen === 0;\n var isFinal = eventType & (INPUT_END | INPUT_CANCEL) && pointersLen - changedPointersLen === 0;\n input.isFirst = !!isFirst;\n input.isFinal = !!isFinal;\n\n if (isFirst) {\n manager.session = {};\n } // source event is the normalized value of the domEvents\n // like 'touchstart, mouseup, pointerdown'\n\n\n input.eventType = eventType; // compute scale, rotation etc\n\n computeInputData(manager, input); // emit secret event\n\n manager.emit('hammer.input', input);\n manager.recognize(input);\n manager.session.prevInput = input;\n }\n /**\n * extend the data with some usable properties like scale, rotate, velocity etc\n * @param {Object} manager\n * @param {Object} input\n */\n\n\n function computeInputData(manager, input) {\n var session = manager.session;\n var pointers = input.pointers;\n var pointersLength = pointers.length; // store the first input to calculate the distance and direction\n\n if (!session.firstInput) {\n session.firstInput = simpleCloneInputData(input);\n } // to compute scale and rotation we need to store the multiple touches\n\n\n if (pointersLength > 1 && !session.firstMultiple) {\n session.firstMultiple = simpleCloneInputData(input);\n } else if (pointersLength === 1) {\n session.firstMultiple = false;\n }\n\n var firstInput = session.firstInput;\n var firstMultiple = session.firstMultiple;\n var offsetCenter = firstMultiple ? firstMultiple.center : firstInput.center;\n var center = input.center = getCenter(pointers);\n input.timeStamp = now();\n input.deltaTime = input.timeStamp - firstInput.timeStamp;\n input.angle = getAngle(offsetCenter, center);\n input.distance = getDistance(offsetCenter, center);\n computeDeltaXY(session, input);\n input.offsetDirection = getDirection(input.deltaX, input.deltaY);\n var overallVelocity = getVelocity(input.deltaTime, input.deltaX, input.deltaY);\n input.overallVelocityX = overallVelocity.x;\n input.overallVelocityY = overallVelocity.y;\n input.overallVelocity = abs(overallVelocity.x) > abs(overallVelocity.y) ? overallVelocity.x : overallVelocity.y;\n input.scale = firstMultiple ? getScale(firstMultiple.pointers, pointers) : 1;\n input.rotation = firstMultiple ? getRotation(firstMultiple.pointers, pointers) : 0;\n input.maxPointers = !session.prevInput ? input.pointers.length : input.pointers.length > session.prevInput.maxPointers ? input.pointers.length : session.prevInput.maxPointers;\n computeIntervalInputData(session, input); // find the correct target\n\n var target = manager.element;\n\n if (hasParent(input.srcEvent.target, target)) {\n target = input.srcEvent.target;\n }\n\n input.target = target;\n }\n\n function computeDeltaXY(session, input) {\n var center = input.center;\n var offset = session.offsetDelta || {};\n var prevDelta = session.prevDelta || {};\n var prevInput = session.prevInput || {};\n\n if (input.eventType === INPUT_START || prevInput.eventType === INPUT_END) {\n prevDelta = session.prevDelta = {\n x: prevInput.deltaX || 0,\n y: prevInput.deltaY || 0\n };\n offset = session.offsetDelta = {\n x: center.x,\n y: center.y\n };\n }\n\n input.deltaX = prevDelta.x + (center.x - offset.x);\n input.deltaY = prevDelta.y + (center.y - offset.y);\n }\n /**\n * velocity is calculated every x ms\n * @param {Object} session\n * @param {Object} input\n */\n\n\n function computeIntervalInputData(session, input) {\n var last = session.lastInterval || input,\n deltaTime = input.timeStamp - last.timeStamp,\n velocity,\n velocityX,\n velocityY,\n direction;\n\n if (input.eventType != INPUT_CANCEL && (deltaTime > COMPUTE_INTERVAL || last.velocity === undefined)) {\n var deltaX = input.deltaX - last.deltaX;\n var deltaY = input.deltaY - last.deltaY;\n var v = getVelocity(deltaTime, deltaX, deltaY);\n velocityX = v.x;\n velocityY = v.y;\n velocity = abs(v.x) > abs(v.y) ? v.x : v.y;\n direction = getDirection(deltaX, deltaY);\n session.lastInterval = input;\n } else {\n // use latest velocity info if it doesn't overtake a minimum period\n velocity = last.velocity;\n velocityX = last.velocityX;\n velocityY = last.velocityY;\n direction = last.direction;\n }\n\n input.velocity = velocity;\n input.velocityX = velocityX;\n input.velocityY = velocityY;\n input.direction = direction;\n }\n /**\n * create a simple clone from the input used for storage of firstInput and firstMultiple\n * @param {Object} input\n * @returns {Object} clonedInputData\n */\n\n\n function simpleCloneInputData(input) {\n // make a simple copy of the pointers because we will get a reference if we don't\n // we only need clientXY for the calculations\n var pointers = [];\n var i = 0;\n\n while (i < input.pointers.length) {\n pointers[i] = {\n clientX: round(input.pointers[i].clientX),\n clientY: round(input.pointers[i].clientY)\n };\n i++;\n }\n\n return {\n timeStamp: now(),\n pointers: pointers,\n center: getCenter(pointers),\n deltaX: input.deltaX,\n deltaY: input.deltaY\n };\n }\n /**\n * get the center of all the pointers\n * @param {Array} pointers\n * @return {Object} center contains `x` and `y` properties\n */\n\n\n function getCenter(pointers) {\n var pointersLength = pointers.length; // no need to loop when only one touch\n\n if (pointersLength === 1) {\n return {\n x: round(pointers[0].clientX),\n y: round(pointers[0].clientY)\n };\n }\n\n var x = 0,\n y = 0,\n i = 0;\n\n while (i < pointersLength) {\n x += pointers[i].clientX;\n y += pointers[i].clientY;\n i++;\n }\n\n return {\n x: round(x / pointersLength),\n y: round(y / pointersLength)\n };\n }\n /**\n * calculate the velocity between two points. unit is in px per ms.\n * @param {Number} deltaTime\n * @param {Number} x\n * @param {Number} y\n * @return {Object} velocity `x` and `y`\n */\n\n\n function getVelocity(deltaTime, x, y) {\n return {\n x: x / deltaTime || 0,\n y: y / deltaTime || 0\n };\n }\n /**\n * get the direction between two points\n * @param {Number} x\n * @param {Number} y\n * @return {Number} direction\n */\n\n\n function getDirection(x, y) {\n if (x === y) {\n return DIRECTION_NONE;\n }\n\n if (abs(x) >= abs(y)) {\n return x < 0 ? DIRECTION_LEFT : DIRECTION_RIGHT;\n }\n\n return y < 0 ? DIRECTION_UP : DIRECTION_DOWN;\n }\n /**\n * calculate the absolute distance between two points\n * @param {Object} p1 {x, y}\n * @param {Object} p2 {x, y}\n * @param {Array} [props] containing x and y keys\n * @return {Number} distance\n */\n\n\n function getDistance(p1, p2, props) {\n if (!props) {\n props = PROPS_XY;\n }\n\n var x = p2[props[0]] - p1[props[0]],\n y = p2[props[1]] - p1[props[1]];\n return Math.sqrt(x * x + y * y);\n }\n /**\n * calculate the angle between two coordinates\n * @param {Object} p1\n * @param {Object} p2\n * @param {Array} [props] containing x and y keys\n * @return {Number} angle\n */\n\n\n function getAngle(p1, p2, props) {\n if (!props) {\n props = PROPS_XY;\n }\n\n var x = p2[props[0]] - p1[props[0]],\n y = p2[props[1]] - p1[props[1]];\n return Math.atan2(y, x) * 180 / Math.PI;\n }\n /**\n * calculate the rotation degrees between two pointersets\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} rotation\n */\n\n\n function getRotation(start, end) {\n return getAngle(end[1], end[0], PROPS_CLIENT_XY) + getAngle(start[1], start[0], PROPS_CLIENT_XY);\n }\n /**\n * calculate the scale factor between two pointersets\n * no scale is 1, and goes down to 0 when pinched together, and bigger when pinched out\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} scale\n */\n\n\n function getScale(start, end) {\n return getDistance(end[0], end[1], PROPS_CLIENT_XY) / getDistance(start[0], start[1], PROPS_CLIENT_XY);\n }\n\n var MOUSE_INPUT_MAP = {\n mousedown: INPUT_START,\n mousemove: INPUT_MOVE,\n mouseup: INPUT_END\n };\n var MOUSE_ELEMENT_EVENTS = 'mousedown';\n var MOUSE_WINDOW_EVENTS = 'mousemove mouseup';\n /**\n * Mouse events input\n * @constructor\n * @extends Input\n */\n\n function MouseInput() {\n this.evEl = MOUSE_ELEMENT_EVENTS;\n this.evWin = MOUSE_WINDOW_EVENTS;\n this.pressed = false; // mousedown state\n\n Input.apply(this, arguments);\n }\n\n inherit(MouseInput, Input, {\n /**\n * handle mouse events\n * @param {Object} ev\n */\n handler: function MEhandler(ev) {\n var eventType = MOUSE_INPUT_MAP[ev.type]; // on start we want to have the left mouse button down\n\n if (eventType & INPUT_START && ev.button === 0) {\n this.pressed = true;\n }\n\n if (eventType & INPUT_MOVE && ev.which !== 1) {\n eventType = INPUT_END;\n } // mouse must be down\n\n\n if (!this.pressed) {\n return;\n }\n\n if (eventType & INPUT_END) {\n this.pressed = false;\n }\n\n this.callback(this.manager, eventType, {\n pointers: [ev],\n changedPointers: [ev],\n pointerType: INPUT_TYPE_MOUSE,\n srcEvent: ev\n });\n }\n });\n var POINTER_INPUT_MAP = {\n pointerdown: INPUT_START,\n pointermove: INPUT_MOVE,\n pointerup: INPUT_END,\n pointercancel: INPUT_CANCEL,\n pointerout: INPUT_CANCEL\n }; // in IE10 the pointer types is defined as an enum\n\n var IE10_POINTER_TYPE_ENUM = {\n 2: INPUT_TYPE_TOUCH,\n 3: INPUT_TYPE_PEN,\n 4: INPUT_TYPE_MOUSE,\n 5: INPUT_TYPE_KINECT // see https://twitter.com/jacobrossi/status/480596438489890816\n\n };\n var POINTER_ELEMENT_EVENTS = 'pointerdown';\n var POINTER_WINDOW_EVENTS = 'pointermove pointerup pointercancel'; // IE10 has prefixed support, and case-sensitive\n\n if (window.MSPointerEvent && !window.PointerEvent) {\n POINTER_ELEMENT_EVENTS = 'MSPointerDown';\n POINTER_WINDOW_EVENTS = 'MSPointerMove MSPointerUp MSPointerCancel';\n }\n /**\n * Pointer events input\n * @constructor\n * @extends Input\n */\n\n\n function PointerEventInput() {\n this.evEl = POINTER_ELEMENT_EVENTS;\n this.evWin = POINTER_WINDOW_EVENTS;\n Input.apply(this, arguments);\n this.store = this.manager.session.pointerEvents = [];\n }\n\n inherit(PointerEventInput, Input, {\n /**\n * handle mouse events\n * @param {Object} ev\n */\n handler: function PEhandler(ev) {\n var store = this.store;\n var removePointer = false;\n var eventTypeNormalized = ev.type.toLowerCase().replace('ms', '');\n var eventType = POINTER_INPUT_MAP[eventTypeNormalized];\n var pointerType = IE10_POINTER_TYPE_ENUM[ev.pointerType] || ev.pointerType;\n var isTouch = pointerType == INPUT_TYPE_TOUCH; // get index of the event in the store\n\n var storeIndex = inArray(store, ev.pointerId, 'pointerId'); // start and mouse must be down\n\n if (eventType & INPUT_START && (ev.button === 0 || isTouch)) {\n if (storeIndex < 0) {\n store.push(ev);\n storeIndex = store.length - 1;\n }\n } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n removePointer = true;\n } // it not found, so the pointer hasn't been down (so it's probably a hover)\n\n\n if (storeIndex < 0) {\n return;\n } // update the event in the store\n\n\n store[storeIndex] = ev;\n this.callback(this.manager, eventType, {\n pointers: store,\n changedPointers: [ev],\n pointerType: pointerType,\n srcEvent: ev\n });\n\n if (removePointer) {\n // remove from the store\n store.splice(storeIndex, 1);\n }\n }\n });\n var SINGLE_TOUCH_INPUT_MAP = {\n touchstart: INPUT_START,\n touchmove: INPUT_MOVE,\n touchend: INPUT_END,\n touchcancel: INPUT_CANCEL\n };\n var SINGLE_TOUCH_TARGET_EVENTS = 'touchstart';\n var SINGLE_TOUCH_WINDOW_EVENTS = 'touchstart touchmove touchend touchcancel';\n /**\n * Touch events input\n * @constructor\n * @extends Input\n */\n\n function SingleTouchInput() {\n this.evTarget = SINGLE_TOUCH_TARGET_EVENTS;\n this.evWin = SINGLE_TOUCH_WINDOW_EVENTS;\n this.started = false;\n Input.apply(this, arguments);\n }\n\n inherit(SingleTouchInput, Input, {\n handler: function TEhandler(ev) {\n var type = SINGLE_TOUCH_INPUT_MAP[ev.type]; // should we handle the touch events?\n\n if (type === INPUT_START) {\n this.started = true;\n }\n\n if (!this.started) {\n return;\n }\n\n var touches = normalizeSingleTouches.call(this, ev, type); // when done, reset the started state\n\n if (type & (INPUT_END | INPUT_CANCEL) && touches[0].length - touches[1].length === 0) {\n this.started = false;\n }\n\n this.callback(this.manager, type, {\n pointers: touches[0],\n changedPointers: touches[1],\n pointerType: INPUT_TYPE_TOUCH,\n srcEvent: ev\n });\n }\n });\n /**\n * @this {TouchInput}\n * @param {Object} ev\n * @param {Number} type flag\n * @returns {undefined|Array} [all, changed]\n */\n\n function normalizeSingleTouches(ev, type) {\n var all = toArray(ev.touches);\n var changed = toArray(ev.changedTouches);\n\n if (type & (INPUT_END | INPUT_CANCEL)) {\n all = uniqueArray(all.concat(changed), 'identifier', true);\n }\n\n return [all, changed];\n }\n\n var TOUCH_INPUT_MAP = {\n touchstart: INPUT_START,\n touchmove: INPUT_MOVE,\n touchend: INPUT_END,\n touchcancel: INPUT_CANCEL\n };\n var TOUCH_TARGET_EVENTS = 'touchstart touchmove touchend touchcancel';\n /**\n * Multi-user touch events input\n * @constructor\n * @extends Input\n */\n\n function TouchInput() {\n this.evTarget = TOUCH_TARGET_EVENTS;\n this.targetIds = {};\n Input.apply(this, arguments);\n }\n\n inherit(TouchInput, Input, {\n handler: function MTEhandler(ev) {\n var type = TOUCH_INPUT_MAP[ev.type];\n var touches = getTouches.call(this, ev, type);\n\n if (!touches) {\n return;\n }\n\n this.callback(this.manager, type, {\n pointers: touches[0],\n changedPointers: touches[1],\n pointerType: INPUT_TYPE_TOUCH,\n srcEvent: ev\n });\n }\n });\n /**\n * @this {TouchInput}\n * @param {Object} ev\n * @param {Number} type flag\n * @returns {undefined|Array} [all, changed]\n */\n\n function getTouches(ev, type) {\n var allTouches = toArray(ev.touches);\n var targetIds = this.targetIds; // when there is only one touch, the process can be simplified\n\n if (type & (INPUT_START | INPUT_MOVE) && allTouches.length === 1) {\n targetIds[allTouches[0].identifier] = true;\n return [allTouches, allTouches];\n }\n\n var i,\n targetTouches,\n changedTouches = toArray(ev.changedTouches),\n changedTargetTouches = [],\n target = this.target; // get target touches from touches\n\n targetTouches = allTouches.filter(function (touch) {\n return hasParent(touch.target, target);\n }); // collect touches\n\n if (type === INPUT_START) {\n i = 0;\n\n while (i < targetTouches.length) {\n targetIds[targetTouches[i].identifier] = true;\n i++;\n }\n } // filter changed touches to only contain touches that exist in the collected target ids\n\n\n i = 0;\n\n while (i < changedTouches.length) {\n if (targetIds[changedTouches[i].identifier]) {\n changedTargetTouches.push(changedTouches[i]);\n } // cleanup removed touches\n\n\n if (type & (INPUT_END | INPUT_CANCEL)) {\n delete targetIds[changedTouches[i].identifier];\n }\n\n i++;\n }\n\n if (!changedTargetTouches.length) {\n return;\n }\n\n return [// merge targetTouches with changedTargetTouches so it contains ALL touches, including 'end' and 'cancel'\n uniqueArray(targetTouches.concat(changedTargetTouches), 'identifier', true), changedTargetTouches];\n }\n /**\n * Combined touch and mouse input\n *\n * Touch has a higher priority then mouse, and while touching no mouse events are allowed.\n * This because touch devices also emit mouse events while doing a touch.\n *\n * @constructor\n * @extends Input\n */\n\n\n var DEDUP_TIMEOUT = 2500;\n var DEDUP_DISTANCE = 25;\n\n function TouchMouseInput() {\n Input.apply(this, arguments);\n var handler = bindFn(this.handler, this);\n this.touch = new TouchInput(this.manager, handler);\n this.mouse = new MouseInput(this.manager, handler);\n this.primaryTouch = null;\n this.lastTouches = [];\n }\n\n inherit(TouchMouseInput, Input, {\n /**\n * handle mouse and touch events\n * @param {Hammer} manager\n * @param {String} inputEvent\n * @param {Object} inputData\n */\n handler: function TMEhandler(manager, inputEvent, inputData) {\n var isTouch = inputData.pointerType == INPUT_TYPE_TOUCH,\n isMouse = inputData.pointerType == INPUT_TYPE_MOUSE;\n\n if (isMouse && inputData.sourceCapabilities && inputData.sourceCapabilities.firesTouchEvents) {\n return;\n } // when we're in a touch event, record touches to de-dupe synthetic mouse event\n\n\n if (isTouch) {\n recordTouches.call(this, inputEvent, inputData);\n } else if (isMouse && isSyntheticEvent.call(this, inputData)) {\n return;\n }\n\n this.callback(manager, inputEvent, inputData);\n },\n\n /**\n * remove the event listeners\n */\n destroy: function destroy() {\n this.touch.destroy();\n this.mouse.destroy();\n }\n });\n\n function recordTouches(eventType, eventData) {\n if (eventType & INPUT_START) {\n this.primaryTouch = eventData.changedPointers[0].identifier;\n setLastTouch.call(this, eventData);\n } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n setLastTouch.call(this, eventData);\n }\n }\n\n function setLastTouch(eventData) {\n var touch = eventData.changedPointers[0];\n\n if (touch.identifier === this.primaryTouch) {\n var lastTouch = {\n x: touch.clientX,\n y: touch.clientY\n };\n this.lastTouches.push(lastTouch);\n var lts = this.lastTouches;\n\n var removeLastTouch = function removeLastTouch() {\n var i = lts.indexOf(lastTouch);\n\n if (i > -1) {\n lts.splice(i, 1);\n }\n };\n\n setTimeout(removeLastTouch, DEDUP_TIMEOUT);\n }\n }\n\n function isSyntheticEvent(eventData) {\n var x = eventData.srcEvent.clientX,\n y = eventData.srcEvent.clientY;\n\n for (var i = 0; i < this.lastTouches.length; i++) {\n var t = this.lastTouches[i];\n var dx = Math.abs(x - t.x),\n dy = Math.abs(y - t.y);\n\n if (dx <= DEDUP_DISTANCE && dy <= DEDUP_DISTANCE) {\n return true;\n }\n }\n\n return false;\n }\n\n var PREFIXED_TOUCH_ACTION = prefixed(TEST_ELEMENT.style, 'touchAction');\n var NATIVE_TOUCH_ACTION = PREFIXED_TOUCH_ACTION !== undefined; // magical touchAction value\n\n var TOUCH_ACTION_COMPUTE = 'compute';\n var TOUCH_ACTION_AUTO = 'auto';\n var TOUCH_ACTION_MANIPULATION = 'manipulation'; // not implemented\n\n var TOUCH_ACTION_NONE = 'none';\n var TOUCH_ACTION_PAN_X = 'pan-x';\n var TOUCH_ACTION_PAN_Y = 'pan-y';\n var TOUCH_ACTION_MAP = getTouchActionProps();\n /**\n * Touch Action\n * sets the touchAction property or uses the js alternative\n * @param {Manager} manager\n * @param {String} value\n * @constructor\n */\n\n function TouchAction(manager, value) {\n this.manager = manager;\n this.set(value);\n }\n\n TouchAction.prototype = {\n /**\n * set the touchAction value on the element or enable the polyfill\n * @param {String} value\n */\n set: function set(value) {\n // find out the touch-action by the event handlers\n if (value == TOUCH_ACTION_COMPUTE) {\n value = this.compute();\n }\n\n if (NATIVE_TOUCH_ACTION && this.manager.element.style && TOUCH_ACTION_MAP[value]) {\n this.manager.element.style[PREFIXED_TOUCH_ACTION] = value;\n }\n\n this.actions = value.toLowerCase().trim();\n },\n\n /**\n * just re-set the touchAction value\n */\n update: function update() {\n this.set(this.manager.options.touchAction);\n },\n\n /**\n * compute the value for the touchAction property based on the recognizer's settings\n * @returns {String} value\n */\n compute: function compute() {\n var actions = [];\n each(this.manager.recognizers, function (recognizer) {\n if (boolOrFn(recognizer.options.enable, [recognizer])) {\n actions = actions.concat(recognizer.getTouchAction());\n }\n });\n return cleanTouchActions(actions.join(' '));\n },\n\n /**\n * this method is called on each input cycle and provides the preventing of the browser behavior\n * @param {Object} input\n */\n preventDefaults: function preventDefaults(input) {\n var srcEvent = input.srcEvent;\n var direction = input.offsetDirection; // if the touch action did prevented once this session\n\n if (this.manager.session.prevented) {\n srcEvent.preventDefault();\n return;\n }\n\n var actions = this.actions;\n var hasNone = inStr(actions, TOUCH_ACTION_NONE) && !TOUCH_ACTION_MAP[TOUCH_ACTION_NONE];\n var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_Y];\n var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_X];\n\n if (hasNone) {\n //do not prevent defaults if this is a tap gesture\n var isTapPointer = input.pointers.length === 1;\n var isTapMovement = input.distance < 2;\n var isTapTouchTime = input.deltaTime < 250;\n\n if (isTapPointer && isTapMovement && isTapTouchTime) {\n return;\n }\n }\n\n if (hasPanX && hasPanY) {\n // `pan-x pan-y` means browser handles all scrolling/panning, do not prevent\n return;\n }\n\n if (hasNone || hasPanY && direction & DIRECTION_HORIZONTAL || hasPanX && direction & DIRECTION_VERTICAL) {\n return this.preventSrc(srcEvent);\n }\n },\n\n /**\n * call preventDefault to prevent the browser's default behavior (scrolling in most cases)\n * @param {Object} srcEvent\n */\n preventSrc: function preventSrc(srcEvent) {\n this.manager.session.prevented = true;\n srcEvent.preventDefault();\n }\n };\n /**\n * when the touchActions are collected they are not a valid value, so we need to clean things up. *\n * @param {String} actions\n * @returns {*}\n */\n\n function cleanTouchActions(actions) {\n // none\n if (inStr(actions, TOUCH_ACTION_NONE)) {\n return TOUCH_ACTION_NONE;\n }\n\n var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X);\n var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y); // if both pan-x and pan-y are set (different recognizers\n // for different directions, e.g. horizontal pan but vertical swipe?)\n // we need none (as otherwise with pan-x pan-y combined none of these\n // recognizers will work, since the browser would handle all panning\n\n if (hasPanX && hasPanY) {\n return TOUCH_ACTION_NONE;\n } // pan-x OR pan-y\n\n\n if (hasPanX || hasPanY) {\n return hasPanX ? TOUCH_ACTION_PAN_X : TOUCH_ACTION_PAN_Y;\n } // manipulation\n\n\n if (inStr(actions, TOUCH_ACTION_MANIPULATION)) {\n return TOUCH_ACTION_MANIPULATION;\n }\n\n return TOUCH_ACTION_AUTO;\n }\n\n function getTouchActionProps() {\n if (!NATIVE_TOUCH_ACTION) {\n return false;\n }\n\n var touchMap = {};\n var cssSupports = window.CSS && window.CSS.supports;\n ['auto', 'manipulation', 'pan-y', 'pan-x', 'pan-x pan-y', 'none'].forEach(function (val) {\n // If css.supports is not supported but there is native touch-action assume it supports\n // all values. This is the case for IE 10 and 11.\n touchMap[val] = cssSupports ? window.CSS.supports('touch-action', val) : true;\n });\n return touchMap;\n }\n /**\n * Recognizer flow explained; *\n * All recognizers have the initial state of POSSIBLE when a input session starts.\n * The definition of a input session is from the first input until the last input, with all it's movement in it. *\n * Example session for mouse-input: mousedown -> mousemove -> mouseup\n *\n * On each recognizing cycle (see Manager.recognize) the .recognize() method is executed\n * which determines with state it should be.\n *\n * If the recognizer has the state FAILED, CANCELLED or RECOGNIZED (equals ENDED), it is reset to\n * POSSIBLE to give it another change on the next cycle.\n *\n * Possible\n * |\n * +-----+---------------+\n * | |\n * +-----+-----+ |\n * | | |\n * Failed Cancelled |\n * +-------+------+\n * | |\n * Recognized Began\n * |\n * Changed\n * |\n * Ended/Recognized\n */\n\n\n var STATE_POSSIBLE = 1;\n var STATE_BEGAN = 2;\n var STATE_CHANGED = 4;\n var STATE_ENDED = 8;\n var STATE_RECOGNIZED = STATE_ENDED;\n var STATE_CANCELLED = 16;\n var STATE_FAILED = 32;\n /**\n * Recognizer\n * Every recognizer needs to extend from this class.\n * @constructor\n * @param {Object} options\n */\n\n function Recognizer(options) {\n this.options = assign({}, this.defaults, options || {});\n this.id = uniqueId();\n this.manager = null; // default is enable true\n\n this.options.enable = ifUndefined(this.options.enable, true);\n this.state = STATE_POSSIBLE;\n this.simultaneous = {};\n this.requireFail = [];\n }\n\n Recognizer.prototype = {\n /**\n * @virtual\n * @type {Object}\n */\n defaults: {},\n\n /**\n * set options\n * @param {Object} options\n * @return {Recognizer}\n */\n set: function set(options) {\n assign(this.options, options); // also update the touchAction, in case something changed about the directions/enabled state\n\n this.manager && this.manager.touchAction.update();\n return this;\n },\n\n /**\n * recognize simultaneous with an other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n recognizeWith: function recognizeWith(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'recognizeWith', this)) {\n return this;\n }\n\n var simultaneous = this.simultaneous;\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n\n if (!simultaneous[otherRecognizer.id]) {\n simultaneous[otherRecognizer.id] = otherRecognizer;\n otherRecognizer.recognizeWith(this);\n }\n\n return this;\n },\n\n /**\n * drop the simultaneous link. it doesnt remove the link on the other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n dropRecognizeWith: function dropRecognizeWith(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'dropRecognizeWith', this)) {\n return this;\n }\n\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n delete this.simultaneous[otherRecognizer.id];\n return this;\n },\n\n /**\n * recognizer can only run when an other is failing\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n requireFailure: function requireFailure(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'requireFailure', this)) {\n return this;\n }\n\n var requireFail = this.requireFail;\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n\n if (inArray(requireFail, otherRecognizer) === -1) {\n requireFail.push(otherRecognizer);\n otherRecognizer.requireFailure(this);\n }\n\n return this;\n },\n\n /**\n * drop the requireFailure link. it does not remove the link on the other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n dropRequireFailure: function dropRequireFailure(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'dropRequireFailure', this)) {\n return this;\n }\n\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n var index = inArray(this.requireFail, otherRecognizer);\n\n if (index > -1) {\n this.requireFail.splice(index, 1);\n }\n\n return this;\n },\n\n /**\n * has require failures boolean\n * @returns {boolean}\n */\n hasRequireFailures: function hasRequireFailures() {\n return this.requireFail.length > 0;\n },\n\n /**\n * if the recognizer can recognize simultaneous with an other recognizer\n * @param {Recognizer} otherRecognizer\n * @returns {Boolean}\n */\n canRecognizeWith: function canRecognizeWith(otherRecognizer) {\n return !!this.simultaneous[otherRecognizer.id];\n },\n\n /**\n * You should use `tryEmit` instead of `emit` directly to check\n * that all the needed recognizers has failed before emitting.\n * @param {Object} input\n */\n emit: function emit(input) {\n var self = this;\n var state = this.state;\n\n function emit(event) {\n self.manager.emit(event, input);\n } // 'panstart' and 'panmove'\n\n\n if (state < STATE_ENDED) {\n emit(self.options.event + stateStr(state));\n }\n\n emit(self.options.event); // simple 'eventName' events\n\n if (input.additionalEvent) {\n // additional event(panleft, panright, pinchin, pinchout...)\n emit(input.additionalEvent);\n } // panend and pancancel\n\n\n if (state >= STATE_ENDED) {\n emit(self.options.event + stateStr(state));\n }\n },\n\n /**\n * Check that all the require failure recognizers has failed,\n * if true, it emits a gesture event,\n * otherwise, setup the state to FAILED.\n * @param {Object} input\n */\n tryEmit: function tryEmit(input) {\n if (this.canEmit()) {\n return this.emit(input);\n } // it's failing anyway\n\n\n this.state = STATE_FAILED;\n },\n\n /**\n * can we emit?\n * @returns {boolean}\n */\n canEmit: function canEmit() {\n var i = 0;\n\n while (i < this.requireFail.length) {\n if (!(this.requireFail[i].state & (STATE_FAILED | STATE_POSSIBLE))) {\n return false;\n }\n\n i++;\n }\n\n return true;\n },\n\n /**\n * update the recognizer\n * @param {Object} inputData\n */\n recognize: function recognize(inputData) {\n // make a new copy of the inputData\n // so we can change the inputData without messing up the other recognizers\n var inputDataClone = assign({}, inputData); // is is enabled and allow recognizing?\n\n if (!boolOrFn(this.options.enable, [this, inputDataClone])) {\n this.reset();\n this.state = STATE_FAILED;\n return;\n } // reset when we've reached the end\n\n\n if (this.state & (STATE_RECOGNIZED | STATE_CANCELLED | STATE_FAILED)) {\n this.state = STATE_POSSIBLE;\n }\n\n this.state = this.process(inputDataClone); // the recognizer has recognized a gesture\n // so trigger an event\n\n if (this.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED | STATE_CANCELLED)) {\n this.tryEmit(inputDataClone);\n }\n },\n\n /**\n * return the state of the recognizer\n * the actual recognizing happens in this method\n * @virtual\n * @param {Object} inputData\n * @returns {Const} STATE\n */\n process: function process(inputData) {},\n // jshint ignore:line\n\n /**\n * return the preferred touch-action\n * @virtual\n * @returns {Array}\n */\n getTouchAction: function getTouchAction() {},\n\n /**\n * called when the gesture isn't allowed to recognize\n * like when another is being recognized or it is disabled\n * @virtual\n */\n reset: function reset() {}\n };\n /**\n * get a usable string, used as event postfix\n * @param {Const} state\n * @returns {String} state\n */\n\n function stateStr(state) {\n if (state & STATE_CANCELLED) {\n return 'cancel';\n } else if (state & STATE_ENDED) {\n return 'end';\n } else if (state & STATE_CHANGED) {\n return 'move';\n } else if (state & STATE_BEGAN) {\n return 'start';\n }\n\n return '';\n }\n /**\n * direction cons to string\n * @param {Const} direction\n * @returns {String}\n */\n\n\n function directionStr(direction) {\n if (direction == DIRECTION_DOWN) {\n return 'down';\n } else if (direction == DIRECTION_UP) {\n return 'up';\n } else if (direction == DIRECTION_LEFT) {\n return 'left';\n } else if (direction == DIRECTION_RIGHT) {\n return 'right';\n }\n\n return '';\n }\n /**\n * get a recognizer by name if it is bound to a manager\n * @param {Recognizer|String} otherRecognizer\n * @param {Recognizer} recognizer\n * @returns {Recognizer}\n */\n\n\n function getRecognizerByNameIfManager(otherRecognizer, recognizer) {\n var manager = recognizer.manager;\n\n if (manager) {\n return manager.get(otherRecognizer);\n }\n\n return otherRecognizer;\n }\n /**\n * This recognizer is just used as a base for the simple attribute recognizers.\n * @constructor\n * @extends Recognizer\n */\n\n\n function AttrRecognizer() {\n Recognizer.apply(this, arguments);\n }\n\n inherit(AttrRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof AttrRecognizer\n */\n defaults: {\n /**\n * @type {Number}\n * @default 1\n */\n pointers: 1\n },\n\n /**\n * Used to check if it the recognizer receives valid input, like input.distance > 10.\n * @memberof AttrRecognizer\n * @param {Object} input\n * @returns {Boolean} recognized\n */\n attrTest: function attrTest(input) {\n var optionPointers = this.options.pointers;\n return optionPointers === 0 || input.pointers.length === optionPointers;\n },\n\n /**\n * Process the input and return the state for the recognizer\n * @memberof AttrRecognizer\n * @param {Object} input\n * @returns {*} State\n */\n process: function process(input) {\n var state = this.state;\n var eventType = input.eventType;\n var isRecognized = state & (STATE_BEGAN | STATE_CHANGED);\n var isValid = this.attrTest(input); // on cancel input and we've recognized before, return STATE_CANCELLED\n\n if (isRecognized && (eventType & INPUT_CANCEL || !isValid)) {\n return state | STATE_CANCELLED;\n } else if (isRecognized || isValid) {\n if (eventType & INPUT_END) {\n return state | STATE_ENDED;\n } else if (!(state & STATE_BEGAN)) {\n return STATE_BEGAN;\n }\n\n return state | STATE_CHANGED;\n }\n\n return STATE_FAILED;\n }\n });\n /**\n * Pan\n * Recognized when the pointer is down and moved in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\n\n function PanRecognizer() {\n AttrRecognizer.apply(this, arguments);\n this.pX = null;\n this.pY = null;\n }\n\n inherit(PanRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof PanRecognizer\n */\n defaults: {\n event: 'pan',\n threshold: 10,\n pointers: 1,\n direction: DIRECTION_ALL\n },\n getTouchAction: function getTouchAction() {\n var direction = this.options.direction;\n var actions = [];\n\n if (direction & DIRECTION_HORIZONTAL) {\n actions.push(TOUCH_ACTION_PAN_Y);\n }\n\n if (direction & DIRECTION_VERTICAL) {\n actions.push(TOUCH_ACTION_PAN_X);\n }\n\n return actions;\n },\n directionTest: function directionTest(input) {\n var options = this.options;\n var hasMoved = true;\n var distance = input.distance;\n var direction = input.direction;\n var x = input.deltaX;\n var y = input.deltaY; // lock to axis?\n\n if (!(direction & options.direction)) {\n if (options.direction & DIRECTION_HORIZONTAL) {\n direction = x === 0 ? DIRECTION_NONE : x < 0 ? DIRECTION_LEFT : DIRECTION_RIGHT;\n hasMoved = x != this.pX;\n distance = Math.abs(input.deltaX);\n } else {\n direction = y === 0 ? DIRECTION_NONE : y < 0 ? DIRECTION_UP : DIRECTION_DOWN;\n hasMoved = y != this.pY;\n distance = Math.abs(input.deltaY);\n }\n }\n\n input.direction = direction;\n return hasMoved && distance > options.threshold && direction & options.direction;\n },\n attrTest: function attrTest(input) {\n return AttrRecognizer.prototype.attrTest.call(this, input) && (this.state & STATE_BEGAN || !(this.state & STATE_BEGAN) && this.directionTest(input));\n },\n emit: function emit(input) {\n this.pX = input.deltaX;\n this.pY = input.deltaY;\n var direction = directionStr(input.direction);\n\n if (direction) {\n input.additionalEvent = this.options.event + direction;\n }\n\n this._super.emit.call(this, input);\n }\n });\n /**\n * Pinch\n * Recognized when two or more pointers are moving toward (zoom-in) or away from each other (zoom-out).\n * @constructor\n * @extends AttrRecognizer\n */\n\n function PinchRecognizer() {\n AttrRecognizer.apply(this, arguments);\n }\n\n inherit(PinchRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof PinchRecognizer\n */\n defaults: {\n event: 'pinch',\n threshold: 0,\n pointers: 2\n },\n getTouchAction: function getTouchAction() {\n return [TOUCH_ACTION_NONE];\n },\n attrTest: function attrTest(input) {\n return this._super.attrTest.call(this, input) && (Math.abs(input.scale - 1) > this.options.threshold || this.state & STATE_BEGAN);\n },\n emit: function emit(input) {\n if (input.scale !== 1) {\n var inOut = input.scale < 1 ? 'in' : 'out';\n input.additionalEvent = this.options.event + inOut;\n }\n\n this._super.emit.call(this, input);\n }\n });\n /**\n * Press\n * Recognized when the pointer is down for x ms without any movement.\n * @constructor\n * @extends Recognizer\n */\n\n function PressRecognizer() {\n Recognizer.apply(this, arguments);\n this._timer = null;\n this._input = null;\n }\n\n inherit(PressRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof PressRecognizer\n */\n defaults: {\n event: 'press',\n pointers: 1,\n time: 251,\n // minimal time of the pointer to be pressed\n threshold: 9 // a minimal movement is ok, but keep it low\n\n },\n getTouchAction: function getTouchAction() {\n return [TOUCH_ACTION_AUTO];\n },\n process: function process(input) {\n var options = this.options;\n var validPointers = input.pointers.length === options.pointers;\n var validMovement = input.distance < options.threshold;\n var validTime = input.deltaTime > options.time;\n this._input = input; // we only allow little movement\n // and we've reached an end event, so a tap is possible\n\n if (!validMovement || !validPointers || input.eventType & (INPUT_END | INPUT_CANCEL) && !validTime) {\n this.reset();\n } else if (input.eventType & INPUT_START) {\n this.reset();\n this._timer = setTimeoutContext(function () {\n this.state = STATE_RECOGNIZED;\n this.tryEmit();\n }, options.time, this);\n } else if (input.eventType & INPUT_END) {\n return STATE_RECOGNIZED;\n }\n\n return STATE_FAILED;\n },\n reset: function reset() {\n clearTimeout(this._timer);\n },\n emit: function emit(input) {\n if (this.state !== STATE_RECOGNIZED) {\n return;\n }\n\n if (input && input.eventType & INPUT_END) {\n this.manager.emit(this.options.event + 'up', input);\n } else {\n this._input.timeStamp = now();\n this.manager.emit(this.options.event, this._input);\n }\n }\n });\n /**\n * Rotate\n * Recognized when two or more pointer are moving in a circular motion.\n * @constructor\n * @extends AttrRecognizer\n */\n\n function RotateRecognizer() {\n AttrRecognizer.apply(this, arguments);\n }\n\n inherit(RotateRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof RotateRecognizer\n */\n defaults: {\n event: 'rotate',\n threshold: 0,\n pointers: 2\n },\n getTouchAction: function getTouchAction() {\n return [TOUCH_ACTION_NONE];\n },\n attrTest: function attrTest(input) {\n return this._super.attrTest.call(this, input) && (Math.abs(input.rotation) > this.options.threshold || this.state & STATE_BEGAN);\n }\n });\n /**\n * Swipe\n * Recognized when the pointer is moving fast (velocity), with enough distance in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\n\n function SwipeRecognizer() {\n AttrRecognizer.apply(this, arguments);\n }\n\n inherit(SwipeRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof SwipeRecognizer\n */\n defaults: {\n event: 'swipe',\n threshold: 10,\n velocity: 0.3,\n direction: DIRECTION_HORIZONTAL | DIRECTION_VERTICAL,\n pointers: 1\n },\n getTouchAction: function getTouchAction() {\n return PanRecognizer.prototype.getTouchAction.call(this);\n },\n attrTest: function attrTest(input) {\n var direction = this.options.direction;\n var velocity;\n\n if (direction & (DIRECTION_HORIZONTAL | DIRECTION_VERTICAL)) {\n velocity = input.overallVelocity;\n } else if (direction & DIRECTION_HORIZONTAL) {\n velocity = input.overallVelocityX;\n } else if (direction & DIRECTION_VERTICAL) {\n velocity = input.overallVelocityY;\n }\n\n return this._super.attrTest.call(this, input) && direction & input.offsetDirection && input.distance > this.options.threshold && input.maxPointers == this.options.pointers && abs(velocity) > this.options.velocity && input.eventType & INPUT_END;\n },\n emit: function emit(input) {\n var direction = directionStr(input.offsetDirection);\n\n if (direction) {\n this.manager.emit(this.options.event + direction, input);\n }\n\n this.manager.emit(this.options.event, input);\n }\n });\n /**\n * A tap is ecognized when the pointer is doing a small tap/click. Multiple taps are recognized if they occur\n * between the given interval and position. The delay option can be used to recognize multi-taps without firing\n * a single tap.\n *\n * The eventData from the emitted event contains the property `tapCount`, which contains the amount of\n * multi-taps being recognized.\n * @constructor\n * @extends Recognizer\n */\n\n function TapRecognizer() {\n Recognizer.apply(this, arguments); // previous time and center,\n // used for tap counting\n\n this.pTime = false;\n this.pCenter = false;\n this._timer = null;\n this._input = null;\n this.count = 0;\n }\n\n inherit(TapRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof PinchRecognizer\n */\n defaults: {\n event: 'tap',\n pointers: 1,\n taps: 1,\n interval: 300,\n // max time between the multi-tap taps\n time: 250,\n // max time of the pointer to be down (like finger on the screen)\n threshold: 9,\n // a minimal movement is ok, but keep it low\n posThreshold: 10 // a multi-tap can be a bit off the initial position\n\n },\n getTouchAction: function getTouchAction() {\n return [TOUCH_ACTION_MANIPULATION];\n },\n process: function process(input) {\n var options = this.options;\n var validPointers = input.pointers.length === options.pointers;\n var validMovement = input.distance < options.threshold;\n var validTouchTime = input.deltaTime < options.time;\n this.reset();\n\n if (input.eventType & INPUT_START && this.count === 0) {\n return this.failTimeout();\n } // we only allow little movement\n // and we've reached an end event, so a tap is possible\n\n\n if (validMovement && validTouchTime && validPointers) {\n if (input.eventType != INPUT_END) {\n return this.failTimeout();\n }\n\n var validInterval = this.pTime ? input.timeStamp - this.pTime < options.interval : true;\n var validMultiTap = !this.pCenter || getDistance(this.pCenter, input.center) < options.posThreshold;\n this.pTime = input.timeStamp;\n this.pCenter = input.center;\n\n if (!validMultiTap || !validInterval) {\n this.count = 1;\n } else {\n this.count += 1;\n }\n\n this._input = input; // if tap count matches we have recognized it,\n // else it has began recognizing...\n\n var tapCount = this.count % options.taps;\n\n if (tapCount === 0) {\n // no failing requirements, immediately trigger the tap event\n // or wait as long as the multitap interval to trigger\n if (!this.hasRequireFailures()) {\n return STATE_RECOGNIZED;\n } else {\n this._timer = setTimeoutContext(function () {\n this.state = STATE_RECOGNIZED;\n this.tryEmit();\n }, options.interval, this);\n return STATE_BEGAN;\n }\n }\n }\n\n return STATE_FAILED;\n },\n failTimeout: function failTimeout() {\n this._timer = setTimeoutContext(function () {\n this.state = STATE_FAILED;\n }, this.options.interval, this);\n return STATE_FAILED;\n },\n reset: function reset() {\n clearTimeout(this._timer);\n },\n emit: function emit() {\n if (this.state == STATE_RECOGNIZED) {\n this._input.tapCount = this.count;\n this.manager.emit(this.options.event, this._input);\n }\n }\n });\n /**\n * Simple way to create a manager with a default set of recognizers.\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\n\n function Hammer(element, options) {\n options = options || {};\n options.recognizers = ifUndefined(options.recognizers, Hammer.defaults.preset);\n return new Manager(element, options);\n }\n /**\n * @const {string}\n */\n\n\n Hammer.VERSION = '2.0.7';\n /**\n * default settings\n * @namespace\n */\n\n Hammer.defaults = {\n /**\n * set if DOM events are being triggered.\n * But this is slower and unused by simple implementations, so disabled by default.\n * @type {Boolean}\n * @default false\n */\n domEvents: false,\n\n /**\n * The value for the touchAction property/fallback.\n * When set to `compute` it will magically set the correct value based on the added recognizers.\n * @type {String}\n * @default compute\n */\n touchAction: TOUCH_ACTION_COMPUTE,\n\n /**\n * @type {Boolean}\n * @default true\n */\n enable: true,\n\n /**\n * EXPERIMENTAL FEATURE -- can be removed/changed\n * Change the parent input target element.\n * If Null, then it is being set the to main element.\n * @type {Null|EventTarget}\n * @default null\n */\n inputTarget: null,\n\n /**\n * force an input class\n * @type {Null|Function}\n * @default null\n */\n inputClass: null,\n\n /**\n * Default recognizer setup when calling `Hammer()`\n * When creating a new Manager these will be skipped.\n * @type {Array}\n */\n preset: [// RecognizerClass, options, [recognizeWith, ...], [requireFailure, ...]\n [RotateRecognizer, {\n enable: false\n }], [PinchRecognizer, {\n enable: false\n }, ['rotate']], [SwipeRecognizer, {\n direction: DIRECTION_HORIZONTAL\n }], [PanRecognizer, {\n direction: DIRECTION_HORIZONTAL\n }, ['swipe']], [TapRecognizer], [TapRecognizer, {\n event: 'doubletap',\n taps: 2\n }, ['tap']], [PressRecognizer]],\n\n /**\n * Some CSS properties can be used to improve the working of Hammer.\n * Add them to this method and they will be set when creating a new Manager.\n * @namespace\n */\n cssProps: {\n /**\n * Disables text selection to improve the dragging gesture. Mainly for desktop browsers.\n * @type {String}\n * @default 'none'\n */\n userSelect: 'none',\n\n /**\n * Disable the Windows Phone grippers when pressing an element.\n * @type {String}\n * @default 'none'\n */\n touchSelect: 'none',\n\n /**\n * Disables the default callout shown when you touch and hold a touch target.\n * On iOS, when you touch and hold a touch target such as a link, Safari displays\n * a callout containing information about the link. This property allows you to disable that callout.\n * @type {String}\n * @default 'none'\n */\n touchCallout: 'none',\n\n /**\n * Specifies whether zooming is enabled. Used by IE10>\n * @type {String}\n * @default 'none'\n */\n contentZooming: 'none',\n\n /**\n * Specifies that an entire element should be draggable instead of its contents. Mainly for desktop browsers.\n * @type {String}\n * @default 'none'\n */\n userDrag: 'none',\n\n /**\n * Overrides the highlight color shown when the user taps a link or a JavaScript\n * clickable element in iOS. This property obeys the alpha value, if specified.\n * @type {String}\n * @default 'rgba(0,0,0,0)'\n */\n tapHighlightColor: 'rgba(0,0,0,0)'\n }\n };\n var STOP = 1;\n var FORCED_STOP = 2;\n /**\n * Manager\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\n\n function Manager(element, options) {\n this.options = assign({}, Hammer.defaults, options || {});\n this.options.inputTarget = this.options.inputTarget || element;\n this.handlers = {};\n this.session = {};\n this.recognizers = [];\n this.oldCssProps = {};\n this.element = element;\n this.input = createInputInstance(this);\n this.touchAction = new TouchAction(this, this.options.touchAction);\n toggleCssProps(this, true);\n each(this.options.recognizers, function (item) {\n var recognizer = this.add(new item[0](item[1]));\n item[2] && recognizer.recognizeWith(item[2]);\n item[3] && recognizer.requireFailure(item[3]);\n }, this);\n }\n\n Manager.prototype = {\n /**\n * set options\n * @param {Object} options\n * @returns {Manager}\n */\n set: function set(options) {\n assign(this.options, options); // Options that need a little more setup\n\n if (options.touchAction) {\n this.touchAction.update();\n }\n\n if (options.inputTarget) {\n // Clean up existing event listeners and reinitialize\n this.input.destroy();\n this.input.target = options.inputTarget;\n this.input.init();\n }\n\n return this;\n },\n\n /**\n * stop recognizing for this session.\n * This session will be discarded, when a new [input]start event is fired.\n * When forced, the recognizer cycle is stopped immediately.\n * @param {Boolean} [force]\n */\n stop: function stop(force) {\n this.session.stopped = force ? FORCED_STOP : STOP;\n },\n\n /**\n * run the recognizers!\n * called by the inputHandler function on every movement of the pointers (touches)\n * it walks through all the recognizers and tries to detect the gesture that is being made\n * @param {Object} inputData\n */\n recognize: function recognize(inputData) {\n var session = this.session;\n\n if (session.stopped) {\n return;\n } // run the touch-action polyfill\n\n\n this.touchAction.preventDefaults(inputData);\n var recognizer;\n var recognizers = this.recognizers; // this holds the recognizer that is being recognized.\n // so the recognizer's state needs to be BEGAN, CHANGED, ENDED or RECOGNIZED\n // if no recognizer is detecting a thing, it is set to `null`\n\n var curRecognizer = session.curRecognizer; // reset when the last recognizer is recognized\n // or when we're in a new session\n\n if (!curRecognizer || curRecognizer && curRecognizer.state & STATE_RECOGNIZED) {\n curRecognizer = session.curRecognizer = null;\n }\n\n var i = 0;\n\n while (i < recognizers.length) {\n recognizer = recognizers[i]; // find out if we are allowed try to recognize the input for this one.\n // 1. allow if the session is NOT forced stopped (see the .stop() method)\n // 2. allow if we still haven't recognized a gesture in this session, or the this recognizer is the one\n // that is being recognized.\n // 3. allow if the recognizer is allowed to run simultaneous with the current recognized recognizer.\n // this can be setup with the `recognizeWith()` method on the recognizer.\n\n if (session.stopped !== FORCED_STOP && ( // 1\n !curRecognizer || recognizer == curRecognizer || // 2\n recognizer.canRecognizeWith(curRecognizer))) {\n // 3\n recognizer.recognize(inputData);\n } else {\n recognizer.reset();\n } // if the recognizer has been recognizing the input as a valid gesture, we want to store this one as the\n // current active recognizer. but only if we don't already have an active recognizer\n\n\n if (!curRecognizer && recognizer.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED)) {\n curRecognizer = session.curRecognizer = recognizer;\n }\n\n i++;\n }\n },\n\n /**\n * get a recognizer by its event name.\n * @param {Recognizer|String} recognizer\n * @returns {Recognizer|Null}\n */\n get: function get(recognizer) {\n if (recognizer instanceof Recognizer) {\n return recognizer;\n }\n\n var recognizers = this.recognizers;\n\n for (var i = 0; i < recognizers.length; i++) {\n if (recognizers[i].options.event == recognizer) {\n return recognizers[i];\n }\n }\n\n return null;\n },\n\n /**\n * add a recognizer to the manager\n * existing recognizers with the same event name will be removed\n * @param {Recognizer} recognizer\n * @returns {Recognizer|Manager}\n */\n add: function add(recognizer) {\n if (invokeArrayArg(recognizer, 'add', this)) {\n return this;\n } // remove existing\n\n\n var existing = this.get(recognizer.options.event);\n\n if (existing) {\n this.remove(existing);\n }\n\n this.recognizers.push(recognizer);\n recognizer.manager = this;\n this.touchAction.update();\n return recognizer;\n },\n\n /**\n * remove a recognizer by name or instance\n * @param {Recognizer|String} recognizer\n * @returns {Manager}\n */\n remove: function remove(recognizer) {\n if (invokeArrayArg(recognizer, 'remove', this)) {\n return this;\n }\n\n recognizer = this.get(recognizer); // let's make sure this recognizer exists\n\n if (recognizer) {\n var recognizers = this.recognizers;\n var index = inArray(recognizers, recognizer);\n\n if (index !== -1) {\n recognizers.splice(index, 1);\n this.touchAction.update();\n }\n }\n\n return this;\n },\n\n /**\n * bind event\n * @param {String} events\n * @param {Function} handler\n * @returns {EventEmitter} this\n */\n on: function on(events, handler) {\n if (events === undefined) {\n return;\n }\n\n if (handler === undefined) {\n return;\n }\n\n var handlers = this.handlers;\n each(splitStr(events), function (event) {\n handlers[event] = handlers[event] || [];\n handlers[event].push(handler);\n });\n return this;\n },\n\n /**\n * unbind event, leave emit blank to remove all handlers\n * @param {String} events\n * @param {Function} [handler]\n * @returns {EventEmitter} this\n */\n off: function off(events, handler) {\n if (events === undefined) {\n return;\n }\n\n var handlers = this.handlers;\n each(splitStr(events), function (event) {\n if (!handler) {\n delete handlers[event];\n } else {\n handlers[event] && handlers[event].splice(inArray(handlers[event], handler), 1);\n }\n });\n return this;\n },\n\n /**\n * emit event to the listeners\n * @param {String} event\n * @param {Object} data\n */\n emit: function emit(event, data) {\n // we also want to trigger dom events\n if (this.options.domEvents) {\n triggerDomEvent(event, data);\n } // no handlers, so skip it all\n\n\n var handlers = this.handlers[event] && this.handlers[event].slice();\n\n if (!handlers || !handlers.length) {\n return;\n }\n\n data.type = event;\n\n data.preventDefault = function () {\n data.srcEvent.preventDefault();\n };\n\n var i = 0;\n\n while (i < handlers.length) {\n handlers[i](data);\n i++;\n }\n },\n\n /**\n * destroy the manager and unbinds all events\n * it doesn't unbind dom events, that is the user own responsibility\n */\n destroy: function destroy() {\n this.element && toggleCssProps(this, false);\n this.handlers = {};\n this.session = {};\n this.input.destroy();\n this.element = null;\n }\n };\n /**\n * add/remove the css properties as defined in manager.options.cssProps\n * @param {Manager} manager\n * @param {Boolean} add\n */\n\n function toggleCssProps(manager, add) {\n var element = manager.element;\n\n if (!element.style) {\n return;\n }\n\n var prop;\n each(manager.options.cssProps, function (value, name) {\n prop = prefixed(element.style, name);\n\n if (add) {\n manager.oldCssProps[prop] = element.style[prop];\n element.style[prop] = value;\n } else {\n element.style[prop] = manager.oldCssProps[prop] || '';\n }\n });\n\n if (!add) {\n manager.oldCssProps = {};\n }\n }\n /**\n * trigger dom event\n * @param {String} event\n * @param {Object} data\n */\n\n\n function triggerDomEvent(event, data) {\n var gestureEvent = document.createEvent('Event');\n gestureEvent.initEvent(event, true, true);\n gestureEvent.gesture = data;\n data.target.dispatchEvent(gestureEvent);\n }\n\n assign(Hammer, {\n INPUT_START: INPUT_START,\n INPUT_MOVE: INPUT_MOVE,\n INPUT_END: INPUT_END,\n INPUT_CANCEL: INPUT_CANCEL,\n STATE_POSSIBLE: STATE_POSSIBLE,\n STATE_BEGAN: STATE_BEGAN,\n STATE_CHANGED: STATE_CHANGED,\n STATE_ENDED: STATE_ENDED,\n STATE_RECOGNIZED: STATE_RECOGNIZED,\n STATE_CANCELLED: STATE_CANCELLED,\n STATE_FAILED: STATE_FAILED,\n DIRECTION_NONE: DIRECTION_NONE,\n DIRECTION_LEFT: DIRECTION_LEFT,\n DIRECTION_RIGHT: DIRECTION_RIGHT,\n DIRECTION_UP: DIRECTION_UP,\n DIRECTION_DOWN: DIRECTION_DOWN,\n DIRECTION_HORIZONTAL: DIRECTION_HORIZONTAL,\n DIRECTION_VERTICAL: DIRECTION_VERTICAL,\n DIRECTION_ALL: DIRECTION_ALL,\n Manager: Manager,\n Input: Input,\n TouchAction: TouchAction,\n TouchInput: TouchInput,\n MouseInput: MouseInput,\n PointerEventInput: PointerEventInput,\n TouchMouseInput: TouchMouseInput,\n SingleTouchInput: SingleTouchInput,\n Recognizer: Recognizer,\n AttrRecognizer: AttrRecognizer,\n Tap: TapRecognizer,\n Pan: PanRecognizer,\n Swipe: SwipeRecognizer,\n Pinch: PinchRecognizer,\n Rotate: RotateRecognizer,\n Press: PressRecognizer,\n on: addEventListeners,\n off: removeEventListeners,\n each: each,\n merge: merge,\n extend: extend,\n assign: assign,\n inherit: inherit,\n bindFn: bindFn,\n prefixed: prefixed\n }); // this prevents errors when Hammer is loaded in the presence of an AMD\n // style loader but by script tag, not by the loader.\n\n var freeGlobal = typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}; // jshint ignore:line\n\n freeGlobal.Hammer = Hammer;\n\n if (true) {\n !(__WEBPACK_AMD_DEFINE_RESULT__ = (function () {\n return Hammer;\n }).call(exports, __webpack_require__, exports, module),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else {}\n})(window, document, 'Hammer');//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9oYW1tZXJqcy9oYW1tZXIuanM/ZWJmYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxTQUFTO0FBQ3RCLGFBQWEsT0FBTztBQUNwQixhQUFhLE9BQU87QUFDcEIsZUFBZTtBQUNmOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCLGFBQWEsT0FBTztBQUNwQixhQUFhLE9BQU87QUFDcEIsZUFBZTtBQUNmOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxPQUFPO0FBQ3BCLGFBQWEsU0FBUztBQUN0QixhQUFhLE9BQU87QUFDcEI7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLFNBQVM7QUFDdEIsYUFBYSxPQUFPO0FBQ3BCLGFBQWEsT0FBTztBQUNwQixlQUFlLFNBQVM7QUFDeEI7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMklBQTJJLFVBQVU7QUFDcko7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsT0FBTztBQUNwQixhQUFhLFVBQVU7QUFDdkIsZUFBZSxPQUFPO0FBQ3RCOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLHlCQUF5QiwwQkFBMEI7QUFDbkQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtB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RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCO0FBQzFCOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHNDQUFzQztBQUN0Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEs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QUFRO0FBQ3JCLGFBQWEsUUFBUTtBQUNyQjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsT0FBTztBQUNwQixhQUFhLE9BQU87QUFDcEI7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHLEVBQUU7QUFDTDs7QUFFQSxvR0FBb0c7O0FBRXBHOztBQUVBLE1BQU0sSUFBMEM7QUFDaEQsSUFBSSxtQ0FBTztBQUNYO0FBQ0EsS0FBSztBQUFBLGtHQUFDO0FBQ04sR0FBRyxNQUFNLEVBSU47QUFDSCxDQUFDIiwiZmlsZSI6IjUwODcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiEgSGFtbWVyLkpTIC0gdjIuMC43IC0gMjAxNi0wNC0yMlxuICogaHR0cDovL2hhbW1lcmpzLmdpdGh1Yi5pby9cbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTYgSm9yaWsgVGFuZ2VsZGVyO1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlICovXG4oZnVuY3Rpb24gKHdpbmRvdywgZG9jdW1lbnQsIGV4cG9ydE5hbWUsIHVuZGVmaW5lZCkge1xuICAndXNlIHN0cmljdCc7XG5cbiAgdmFyIFZFTkRPUl9QUkVGSVhFUyA9IFsnJywgJ3dlYmtpdCcsICdNb3onLCAnTVMnLCAnbXMnLCAnbyddO1xuICB2YXIgVEVTVF9FTEVNRU5UID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIHZhciBUWVBFX0ZVTkNUSU9OID0gJ2Z1bmN0aW9uJztcbiAgdmFyIHJvdW5kID0gTWF0aC5yb3VuZDtcbiAgdmFyIGFicyA9IE1hdGguYWJzO1xuICB2YXIgbm93ID0gRGF0ZS5ub3c7XG4gIC8qKlxuICAgKiBzZXQgYSB0aW1lb3V0IHdpdGggYSBnaXZlbiBzY29wZVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICAgKiBAcGFyYW0ge051bWJlcn0gdGltZW91dFxuICAgKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cblxuICBmdW5jdGlvbiBzZXRUaW1lb3V0Q29udGV4dChmbiwgdGltZW91dCwgY29udGV4dCkge1xuICAgIHJldHVybiBzZXRUaW1lb3V0KGJpbmRGbihmbiwgY29udGV4dCksIHRpbWVvdXQpO1xuICB9XG4gIC8qKlxuICAgKiBpZiB0aGUgYXJndW1lbnQgaXMgYW4gYXJyYXksIHdlIHdhbnQgdG8gZXhlY3V0ZSB0aGUgZm4gb24gZWFjaCBlbnRyeVxuICAgKiBpZiBpdCBhaW50IGFuIGFycmF5IHdlIGRvbid0IHdhbnQgdG8gZG8gYSB0aGluZy5cbiAgICogdGhpcyBpcyB1c2VkIGJ5IGFsbCB0aGUgbWV0aG9kcyB0aGF0IGFjY2VwdCBhIHNpbmdsZSBhbmQgYXJyYXkgYXJndW1lbnQuXG4gICAqIEBwYXJhbSB7KnxBcnJheX0gYXJnXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBmblxuICAgKiBAcGFyYW0ge09iamVjdH0gW2NvbnRleHRdXG4gICAqIEByZXR1cm5zIHtCb29sZWFufVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGludm9rZUFycmF5QXJnKGFyZywgZm4sIGNvbnRleHQpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7XG4gICAgICBlYWNoKGFyZywgY29udGV4dFtmbl0sIGNvbnRleHQpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8qKlxuICAgKiB3YWxrIG9iamVjdHMgYW5kIGFycmF5c1xuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdG9yXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0XG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gZWFjaChvYmosIGl0ZXJhdG9yLCBjb250ZXh0KSB7XG4gICAgdmFyIGk7XG5cbiAgICBpZiAoIW9iaikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChvYmouZm9yRWFjaCkge1xuICAgICAgb2JqLmZvckVhY2goaXRlcmF0b3IsIGNvbnRleHQpO1xuICAgIH0gZWxzZSBpZiAob2JqLmxlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpID0gMDtcblxuICAgICAgd2hpbGUgKGkgPCBvYmoubGVuZ3RoKSB7XG4gICAgICAgIGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgb2JqW2ldLCBpLCBvYmopO1xuICAgICAgICBpKys7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAoaSBpbiBvYmopIHtcbiAgICAgICAgb2JqLmhhc093blByb3BlcnR5KGkpICYmIGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgb2JqW2ldLCBpLCBvYmopO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvKipcbiAgICogd3JhcCBhIG1ldGhvZCB3aXRoIGEgZGVwcmVjYXRpb24gd2FybmluZyBhbmQgc3RhY2sgdHJhY2VcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gbWV0aG9kXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gQSBuZXcgZnVuY3Rpb24gd3JhcHBpbmcgdGhlIHN1cHBsaWVkIG1ldGhvZC5cbiAgICovXG5cblxuICBmdW5jdGlvbiBkZXByZWNhdGUobWV0aG9kLCBuYW1lLCBtZXNzYWdlKSB7XG4gICAgdmFyIGRlcHJlY2F0aW9uTWVzc2FnZSA9ICdERVBSRUNBVEVEIE1FVEhPRDogJyArIG5hbWUgKyAnXFxuJyArIG1lc3NhZ2UgKyAnIEFUIFxcbic7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBlID0gbmV3IEVycm9yKCdnZXQtc3RhY2stdHJhY2UnKTtcbiAgICAgIHZhciBzdGFjayA9IGUgJiYgZS5zdGFjayA/IGUuc3RhY2sucmVwbGFjZSgvXlteXFwoXSs/W1xcbiRdL2dtLCAnJykucmVwbGFjZSgvXlxccythdFxccysvZ20sICcnKS5yZXBsYWNlKC9eT2JqZWN0Ljxhbm9ueW1vdXM+XFxzKlxcKC9nbSwgJ3thbm9ueW1vdXN9KClAJykgOiAnVW5rbm93biBTdGFjayBUcmFjZSc7XG4gICAgICB2YXIgbG9nID0gd2luZG93LmNvbnNvbGUgJiYgKHdpbmRvdy5jb25zb2xlLndhcm4gfHwgd2luZG93LmNvbnNvbGUubG9nKTtcblxuICAgICAgaWYgKGxvZykge1xuICAgICAgICBsb2cuY2FsbCh3aW5kb3cuY29uc29sZSwgZGVwcmVjYXRpb25NZXNzYWdlLCBzdGFjayk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBtZXRob2QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9O1xuICB9XG4gIC8qKlxuICAgKiBleHRlbmQgb2JqZWN0LlxuICAgKiBtZWFucyB0aGF0IHByb3BlcnRpZXMgaW4gZGVzdCB3aWxsIGJlIG92ZXJ3cml0dGVuIGJ5IHRoZSBvbmVzIGluIHNyYy5cbiAgICogQHBhcmFtIHtPYmplY3R9IHRhcmdldFxuICAgKiBAcGFyYW0gey4uLk9iamVjdH0gb2JqZWN0c190b19hc3NpZ25cbiAgICogQHJldHVybnMge09iamVjdH0gdGFyZ2V0XG4gICAqL1xuXG5cbiAgdmFyIGFzc2lnbjtcblxuICBpZiAodHlwZW9mIE9iamVjdC5hc3NpZ24gIT09ICdmdW5jdGlvbicpIHtcbiAgICBhc3NpZ24gPSBmdW5jdGlvbiBhc3NpZ24odGFyZ2V0KSB7XG4gICAgICBpZiAodGFyZ2V0ID09PSB1bmRlZmluZWQgfHwgdGFyZ2V0ID09PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IHVuZGVmaW5lZCBvciBudWxsIHRvIG9iamVjdCcpO1xuICAgICAgfVxuXG4gICAgICB2YXIgb3V0cHV0ID0gT2JqZWN0KHRhcmdldCk7XG5cbiAgICAgIGZvciAodmFyIGluZGV4ID0gMTsgaW5kZXggPCBhcmd1bWVudHMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaW5kZXhdO1xuXG4gICAgICAgIGlmIChzb3VyY2UgIT09IHVuZGVmaW5lZCAmJiBzb3VyY2UgIT09IG51bGwpIHtcbiAgICAgICAgICBmb3IgKHZhciBuZXh0S2V5IGluIHNvdXJjZSkge1xuICAgICAgICAgICAgaWYgKHNvdXJjZS5oYXNPd25Qcm9wZXJ0eShuZXh0S2V5KSkge1xuICAgICAgICAgICAgICBvdXRwdXRbbmV4dEtleV0gPSBzb3VyY2VbbmV4dEtleV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBhc3NpZ24gPSBPYmplY3QuYXNzaWduO1xuICB9XG4gIC8qKlxuICAgKiBleHRlbmQgb2JqZWN0LlxuICAgKiBtZWFucyB0aGF0IHByb3BlcnRpZXMgaW4gZGVzdCB3aWxsIGJlIG92ZXJ3cml0dGVuIGJ5IHRoZSBvbmVzIGluIHNyYy5cbiAgICogQHBhcmFtIHtPYmplY3R9IGRlc3RcbiAgICogQHBhcmFtIHtPYmplY3R9IHNyY1xuICAgKiBAcGFyYW0ge0Jvb2xlYW59IFttZXJnZT1mYWxzZV1cbiAgICogQHJldHVybnMge09iamVjdH0gZGVzdFxuICAgKi9cblxuXG4gIHZhciBleHRlbmQgPSBkZXByZWNhdGUoZnVuY3Rpb24gZXh0ZW5kKGRlc3QsIHNyYywgbWVyZ2UpIHtcbiAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHNyYyk7XG4gICAgdmFyIGkgPSAwO1xuXG4gICAgd2hpbGUgKGkgPCBrZXlzLmxlbmd0aCkge1xuICAgICAgaWYgKCFtZXJnZSB8fCBtZXJnZSAmJiBkZXN0W2tleXNbaV1dID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZGVzdFtrZXlzW2ldXSA9IHNyY1trZXlzW2ldXTtcbiAgICAgIH1cblxuICAgICAgaSsrO1xuICAgIH1cblxuICAgIHJldHVybiBkZXN0O1xuICB9LCAnZXh0ZW5kJywgJ1VzZSBgYXNzaWduYC4nKTtcbiAgLyoqXG4gICAqIG1lcmdlIHRoZSB2YWx1ZXMgZnJvbSBzcmMgaW4gdGhlIGRlc3QuXG4gICAqIG1lYW5zIHRoYXQgcHJvcGVydGllcyB0aGF0IGV4aXN0IGluIGRlc3Qgd2lsbCBub3QgYmUgb3ZlcndyaXR0ZW4gYnkgc3JjXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBkZXN0XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBzcmNcbiAgICogQHJldHVybnMge09iamVjdH0gZGVzdFxuICAgKi9cblxuICB2YXIgbWVyZ2UgPSBkZXByZWNhdGUoZnVuY3Rpb24gbWVyZ2UoZGVzdCwgc3JjKSB7XG4gICAgcmV0dXJuIGV4dGVuZChkZXN0LCBzcmMsIHRydWUpO1xuICB9LCAnbWVyZ2UnLCAnVXNlIGBhc3NpZ25gLicpO1xuICAvKipcbiAgICogc2ltcGxlIGNsYXNzIGluaGVyaXRhbmNlXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNoaWxkXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGJhc2VcbiAgICogQHBhcmFtIHtPYmplY3R9IFtwcm9wZXJ0aWVzXVxuICAgKi9cblxuICBmdW5jdGlvbiBpbmhlcml0KGNoaWxkLCBiYXNlLCBwcm9wZXJ0aWVzKSB7XG4gICAgdmFyIGJhc2VQID0gYmFzZS5wcm90b3R5cGUsXG4gICAgICAgIGNoaWxkUDtcbiAgICBjaGlsZFAgPSBjaGlsZC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGJhc2VQKTtcbiAgICBjaGlsZFAuY29uc3RydWN0b3IgPSBjaGlsZDtcbiAgICBjaGlsZFAuX3N1cGVyID0gYmFzZVA7XG5cbiAgICBpZiAocHJvcGVydGllcykge1xuICAgICAgYXNzaWduKGNoaWxkUCwgcHJvcGVydGllcyk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBzaW1wbGUgZnVuY3Rpb24gYmluZFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICAgKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFxuICAgKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gYmluZEZuKGZuLCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGJvdW5kRm4oKSB7XG4gICAgICByZXR1cm4gZm4uYXBwbHkoY29udGV4dCwgYXJndW1lbnRzKTtcbiAgICB9O1xuICB9XG4gIC8qKlxuICAgKiBsZXQgYSBib29sZWFuIHZhbHVlIGFsc28gYmUgYSBmdW5jdGlvbiB0aGF0IG11c3QgcmV0dXJuIGEgYm9vbGVhblxuICAgKiB0aGlzIGZpcnN0IGl0ZW0gaW4gYXJncyB3aWxsIGJlIHVzZWQgYXMgdGhlIGNvbnRleHRcbiAgICogQHBhcmFtIHtCb29sZWFufEZ1bmN0aW9ufSB2YWxcbiAgICogQHBhcmFtIHtBcnJheX0gW2FyZ3NdXG4gICAqIEByZXR1cm5zIHtCb29sZWFufVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGJvb2xPckZuKHZhbCwgYXJncykge1xuICAgIGlmICh0eXBlb2YgdmFsID09IFRZUEVfRlVOQ1RJT04pIHtcbiAgICAgIHJldHVybiB2YWwuYXBwbHkoYXJncyA/IGFyZ3NbMF0gfHwgdW5kZWZpbmVkIDogdW5kZWZpbmVkLCBhcmdzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsO1xuICB9XG4gIC8qKlxuICAgKiB1c2UgdGhlIHZhbDIgd2hlbiB2YWwxIGlzIHVuZGVmaW5lZFxuICAgKiBAcGFyYW0geyp9IHZhbDFcbiAgICogQHBhcmFtIHsqfSB2YWwyXG4gICAqIEByZXR1cm5zIHsqfVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGlmVW5kZWZpbmVkKHZhbDEsIHZhbDIpIHtcbiAgICByZXR1cm4gdmFsMSA9PT0gdW5kZWZpbmVkID8gdmFsMiA6IHZhbDE7XG4gIH1cbiAgLyoqXG4gICAqIGFkZEV2ZW50TGlzdGVuZXIgd2l0aCBtdWx0aXBsZSBldmVudHMgYXQgb25jZVxuICAgKiBAcGFyYW0ge0V2ZW50VGFyZ2V0fSB0YXJnZXRcbiAgICogQHBhcmFtIHtTdHJpbmd9IHR5cGVzXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXJcbiAgICovXG5cblxuICBmdW5jdGlvbiBhZGRFdmVudExpc3RlbmVycyh0YXJnZXQsIHR5cGVzLCBoYW5kbGVyKSB7XG4gICAgZWFjaChzcGxpdFN0cih0eXBlcyksIGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBoYW5kbGVyLCBmYWxzZSk7XG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIHJlbW92ZUV2ZW50TGlzdGVuZXIgd2l0aCBtdWx0aXBsZSBldmVudHMgYXQgb25jZVxuICAgKiBAcGFyYW0ge0V2ZW50VGFyZ2V0fSB0YXJnZXRcbiAgICogQHBhcmFtIHtTdHJpbmd9IHR5cGVzXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXJcbiAgICovXG5cblxuICBmdW5jdGlvbiByZW1vdmVFdmVudExpc3RlbmVycyh0YXJnZXQsIHR5cGVzLCBoYW5kbGVyKSB7XG4gICAgZWFjaChzcGxpdFN0cih0eXBlcyksIGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgICB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBoYW5kbGVyLCBmYWxzZSk7XG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIGZpbmQgaWYgYSBub2RlIGlzIGluIHRoZSBnaXZlbiBwYXJlbnRcbiAgICogQG1ldGhvZCBoYXNQYXJlbnRcbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gbm9kZVxuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBwYXJlbnRcbiAgICogQHJldHVybiB7Qm9vbGVhbn0gZm91bmRcbiAgICovXG5cblxuICBmdW5jdGlvbiBoYXNQYXJlbnQobm9kZSwgcGFyZW50KSB7XG4gICAgd2hpbGUgKG5vZGUpIHtcbiAgICAgIGlmIChub2RlID09IHBhcmVudCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLyoqXG4gICAqIHNtYWxsIGluZGV4T2Ygd3JhcHBlclxuICAgKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBmaW5kXG4gICAqIEByZXR1cm5zIHtCb29sZWFufSBmb3VuZFxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGluU3RyKHN0ciwgZmluZCkge1xuICAgIHJldHVybiBzdHIuaW5kZXhPZihmaW5kKSA+IC0xO1xuICB9XG4gIC8qKlxuICAgKiBzcGxpdCBzdHJpbmcgb24gd2hpdGVzcGFjZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gICAqIEByZXR1cm5zIHtBcnJheX0gd29yZHNcbiAgICovXG5cblxuICBmdW5jdGlvbiBzcGxpdFN0cihzdHIpIHtcbiAgICByZXR1cm4gc3RyLnRyaW0oKS5zcGxpdCgvXFxzKy9nKTtcbiAgfVxuICAvKipcbiAgICogZmluZCBpZiBhIGFycmF5IGNvbnRhaW5zIHRoZSBvYmplY3QgdXNpbmcgaW5kZXhPZiBvciBhIHNpbXBsZSBwb2x5RmlsbFxuICAgKiBAcGFyYW0ge0FycmF5fSBzcmNcbiAgICogQHBhcmFtIHtTdHJpbmd9IGZpbmRcbiAgICogQHBhcmFtIHtTdHJpbmd9IFtmaW5kQnlLZXldXG4gICAqIEByZXR1cm4ge0Jvb2xlYW58TnVtYmVyfSBmYWxzZSB3aGVuIG5vdCBmb3VuZCwgb3IgdGhlIGluZGV4XG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gaW5BcnJheShzcmMsIGZpbmQsIGZpbmRCeUtleSkge1xuICAgIGlmIChzcmMuaW5kZXhPZiAmJiAhZmluZEJ5S2V5KSB7XG4gICAgICByZXR1cm4gc3JjLmluZGV4T2YoZmluZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBpID0gMDtcblxuICAgICAgd2hpbGUgKGkgPCBzcmMubGVuZ3RoKSB7XG4gICAgICAgIGlmIChmaW5kQnlLZXkgJiYgc3JjW2ldW2ZpbmRCeUtleV0gPT0gZmluZCB8fCAhZmluZEJ5S2V5ICYmIHNyY1tpXSA9PT0gZmluZCkge1xuICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICB9XG5cbiAgICAgICAgaSsrO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBjb252ZXJ0IGFycmF5LWxpa2Ugb2JqZWN0cyB0byByZWFsIGFycmF5c1xuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gICAqIEByZXR1cm5zIHtBcnJheX1cbiAgICovXG5cblxuICBmdW5jdGlvbiB0b0FycmF5KG9iaikge1xuICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChvYmosIDApO1xuICB9XG4gIC8qKlxuICAgKiB1bmlxdWUgYXJyYXkgd2l0aCBvYmplY3RzIGJhc2VkIG9uIGEga2V5IChsaWtlICdpZCcpIG9yIGp1c3QgYnkgdGhlIGFycmF5J3MgdmFsdWVcbiAgICogQHBhcmFtIHtBcnJheX0gc3JjIFt7aWQ6MX0se2lkOjJ9LHtpZDoxfV1cbiAgICogQHBhcmFtIHtTdHJpbmd9IFtrZXldXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gW3NvcnQ9RmFsc2VdXG4gICAqIEByZXR1cm5zIHtBcnJheX0gW3tpZDoxfSx7aWQ6Mn1dXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gdW5pcXVlQXJyYXkoc3JjLCBrZXksIHNvcnQpIHtcbiAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgIHZhciB2YWx1ZXMgPSBbXTtcbiAgICB2YXIgaSA9IDA7XG5cbiAgICB3aGlsZSAoaSA8IHNyYy5sZW5ndGgpIHtcbiAgICAgIHZhciB2YWwgPSBrZXkgPyBzcmNbaV1ba2V5XSA6IHNyY1tpXTtcblxuICAgICAgaWYgKGluQXJyYXkodmFsdWVzLCB2YWwpIDwgMCkge1xuICAgICAgICByZXN1bHRzLnB1c2goc3JjW2ldKTtcbiAgICAgIH1cblxuICAgICAgdmFsdWVzW2ldID0gdmFsO1xuICAgICAgaSsrO1xuICAgIH1cblxuICAgIGlmIChzb3J0KSB7XG4gICAgICBpZiAoIWtleSkge1xuICAgICAgICByZXN1bHRzID0gcmVzdWx0cy5zb3J0KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHRzID0gcmVzdWx0cy5zb3J0KGZ1bmN0aW9uIHNvcnRVbmlxdWVBcnJheShhLCBiKSB7XG4gICAgICAgICAgcmV0dXJuIGFba2V5XSA+IGJba2V5XTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH1cbiAgLyoqXG4gICAqIGdldCB0aGUgcHJlZml4ZWQgcHJvcGVydHlcbiAgICogQHBhcmFtIHtPYmplY3R9IG9ialxuICAgKiBAcGFyYW0ge1N0cmluZ30gcHJvcGVydHlcbiAgICogQHJldHVybnMge1N0cmluZ3xVbmRlZmluZWR9IHByZWZpeGVkXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcHJlZml4ZWQob2JqLCBwcm9wZXJ0eSkge1xuICAgIHZhciBwcmVmaXgsIHByb3A7XG4gICAgdmFyIGNhbWVsUHJvcCA9IHByb3BlcnR5WzBdLnRvVXBwZXJDYXNlKCkgKyBwcm9wZXJ0eS5zbGljZSgxKTtcbiAgICB2YXIgaSA9IDA7XG5cbiAgICB3aGlsZSAoaSA8IFZFTkRPUl9QUkVGSVhFUy5sZW5ndGgpIHtcbiAgICAgIHByZWZpeCA9IFZFTkRPUl9QUkVGSVhFU1tpXTtcbiAgICAgIHByb3AgPSBwcmVmaXggPyBwcmVmaXggKyBjYW1lbFByb3AgOiBwcm9wZXJ0eTtcblxuICAgICAgaWYgKHByb3AgaW4gb2JqKSB7XG4gICAgICAgIHJldHVybiBwcm9wO1xuICAgICAgfVxuXG4gICAgICBpKys7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICAvKipcbiAgICogZ2V0IGEgdW5pcXVlIGlkXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IHVuaXF1ZUlkXG4gICAqL1xuXG5cbiAgdmFyIF91bmlxdWVJZCA9IDE7XG5cbiAgZnVuY3Rpb24gdW5pcXVlSWQoKSB7XG4gICAgcmV0dXJuIF91bmlxdWVJZCsrO1xuICB9XG4gIC8qKlxuICAgKiBnZXQgdGhlIHdpbmRvdyBvYmplY3Qgb2YgYW4gZWxlbWVudFxuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gICAqIEByZXR1cm5zIHtEb2N1bWVudFZpZXd8V2luZG93fVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGdldFdpbmRvd0ZvckVsZW1lbnQoZWxlbWVudCkge1xuICAgIHZhciBkb2MgPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQgfHwgZWxlbWVudDtcbiAgICByZXR1cm4gZG9jLmRlZmF1bHRWaWV3IHx8IGRvYy5wYXJlbnRXaW5kb3cgfHwgd2luZG93O1xuICB9XG5cbiAgdmFyIE1PQklMRV9SRUdFWCA9IC9tb2JpbGV8dGFibGV0fGlwKGFkfGhvbmV8b2QpfGFuZHJvaWQvaTtcbiAgdmFyIFNVUFBPUlRfVE9VQ0ggPSAoJ29udG91Y2hzdGFydCcgaW4gd2luZG93KTtcbiAgdmFyIFNVUFBPUlRfUE9JTlRFUl9FVkVOVFMgPSBwcmVmaXhlZCh3aW5kb3csICdQb2ludGVyRXZlbnQnKSAhPT0gdW5kZWZpbmVkO1xuICB2YXIgU1VQUE9SVF9PTkxZX1RPVUNIID0gU1VQUE9SVF9UT1VDSCAmJiBNT0JJTEVfUkVHRVgudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbiAgdmFyIElOUFVUX1RZUEVfVE9VQ0ggPSAndG91Y2gnO1xuICB2YXIgSU5QVVRfVFlQRV9QRU4gPSAncGVuJztcbiAgdmFyIElOUFVUX1RZUEVfTU9VU0UgPSAnbW91c2UnO1xuICB2YXIgSU5QVVRfVFlQRV9LSU5FQ1QgPSAna2luZWN0JztcbiAgdmFyIENPTVBVVEVfSU5URVJWQUwgPSAyNTtcbiAgdmFyIElOUFVUX1NUQVJUID0gMTtcbiAgdmFyIElOUFVUX01PVkUgPSAyO1xuICB2YXIgSU5QVVRfRU5EID0gNDtcbiAgdmFyIElOUFVUX0NBTkNFTCA9IDg7XG4gIHZhciBESVJFQ1RJT05fTk9ORSA9IDE7XG4gIHZhciBESVJFQ1RJT05fTEVGVCA9IDI7XG4gIHZhciBESVJFQ1RJT05fUklHSFQgPSA0O1xuICB2YXIgRElSRUNUSU9OX1VQID0gODtcbiAgdmFyIERJUkVDVElPTl9ET1dOID0gMTY7XG4gIHZhciBESVJFQ1RJT05fSE9SSVpPTlRBTCA9IERJUkVDVElPTl9MRUZUIHwgRElSRUNUSU9OX1JJR0hUO1xuICB2YXIgRElSRUNUSU9OX1ZFUlRJQ0FMID0gRElSRUNUSU9OX1VQIHwgRElSRUNUSU9OX0RPV047XG4gIHZhciBESVJFQ1RJT05fQUxMID0gRElSRUNUSU9OX0hPUklaT05UQUwgfCBESVJFQ1RJT05fVkVSVElDQUw7XG4gIHZhciBQUk9QU19YWSA9IFsneCcsICd5J107XG4gIHZhciBQUk9QU19DTElFTlRfWFkgPSBbJ2NsaWVudFgnLCAnY2xpZW50WSddO1xuICAvKipcbiAgICogY3JlYXRlIG5ldyBpbnB1dCB0eXBlIG1hbmFnZXJcbiAgICogQHBhcmFtIHtNYW5hZ2VyfSBtYW5hZ2VyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gICAqIEByZXR1cm5zIHtJbnB1dH1cbiAgICogQGNvbnN0cnVjdG9yXG4gICAqL1xuXG4gIGZ1bmN0aW9uIElucHV0KG1hbmFnZXIsIGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMubWFuYWdlciA9IG1hbmFnZXI7XG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgIHRoaXMuZWxlbWVudCA9IG1hbmFnZXIuZWxlbWVudDtcbiAgICB0aGlzLnRhcmdldCA9IG1hbmFnZXIub3B0aW9ucy5pbnB1dFRhcmdldDsgLy8gc21hbGxlciB3cmFwcGVyIGFyb3VuZCB0aGUgaGFuZGxlciwgZm9yIHRoZSBzY29wZSBhbmQgdGhlIGVuYWJsZWQgc3RhdGUgb2YgdGhlIG1hbmFnZXIsXG4gICAgLy8gc28gd2hlbiBkaXNhYmxlZCB0aGUgaW5wdXQgZXZlbnRzIGFyZSBjb21wbGV0ZWx5IGJ5cGFzc2VkLlxuXG4gICAgdGhpcy5kb21IYW5kbGVyID0gZnVuY3Rpb24gKGV2KSB7XG4gICAgICBpZiAoYm9vbE9yRm4obWFuYWdlci5vcHRpb25zLmVuYWJsZSwgW21hbmFnZXJdKSkge1xuICAgICAgICBzZWxmLmhhbmRsZXIoZXYpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLmluaXQoKTtcbiAgfVxuXG4gIElucHV0LnByb3RvdHlwZSA9IHtcbiAgICAvKipcbiAgICAgKiBzaG91bGQgaGFuZGxlIHRoZSBpbnB1dEV2ZW50IGRhdGEgYW5kIHRyaWdnZXIgdGhlIGNhbGxiYWNrXG4gICAgICogQHZpcnR1YWxcbiAgICAgKi9cbiAgICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKCkge30sXG5cbiAgICAvKipcbiAgICAgKiBiaW5kIHRoZSBldmVudHNcbiAgICAgKi9cbiAgICBpbml0OiBmdW5jdGlvbiBpbml0KCkge1xuICAgICAgdGhpcy5ldkVsICYmIGFkZEV2ZW50TGlzdGVuZXJzKHRoaXMuZWxlbWVudCwgdGhpcy5ldkVsLCB0aGlzLmRvbUhhbmRsZXIpO1xuICAgICAgdGhpcy5ldlRhcmdldCAmJiBhZGRFdmVudExpc3RlbmVycyh0aGlzLnRhcmdldCwgdGhpcy5ldlRhcmdldCwgdGhpcy5kb21IYW5kbGVyKTtcbiAgICAgIHRoaXMuZXZXaW4gJiYgYWRkRXZlbnRMaXN0ZW5lcnMoZ2V0V2luZG93Rm9yRWxlbWVudCh0aGlzLmVsZW1lbnQpLCB0aGlzLmV2V2luLCB0aGlzLmRvbUhhbmRsZXIpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiB1bmJpbmQgdGhlIGV2ZW50c1xuICAgICAqL1xuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICB0aGlzLmV2RWwgJiYgcmVtb3ZlRXZlbnRMaXN0ZW5lcnModGhpcy5lbGVtZW50LCB0aGlzLmV2RWwsIHRoaXMuZG9tSGFuZGxlcik7XG4gICAgICB0aGlzLmV2VGFyZ2V0ICYmIHJlbW92ZUV2ZW50TGlzdGVuZXJzKHRoaXMudGFyZ2V0LCB0aGlzLmV2VGFyZ2V0LCB0aGlzLmRvbUhhbmRsZXIpO1xuICAgICAgdGhpcy5ldldpbiAmJiByZW1vdmVFdmVudExpc3RlbmVycyhnZXRXaW5kb3dGb3JFbGVtZW50KHRoaXMuZWxlbWVudCksIHRoaXMuZXZXaW4sIHRoaXMuZG9tSGFuZGxlcik7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogY3JlYXRlIG5ldyBpbnB1dCB0eXBlIG1hbmFnZXJcbiAgICogY2FsbGVkIGJ5IHRoZSBNYW5hZ2VyIGNvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSB7SGFtbWVyfSBtYW5hZ2VyXG4gICAqIEByZXR1cm5zIHtJbnB1dH1cbiAgICovXG5cbiAgZnVuY3Rpb24gY3JlYXRlSW5wdXRJbnN0YW5jZShtYW5hZ2VyKSB7XG4gICAgdmFyIFR5cGU7XG4gICAgdmFyIGlucHV0Q2xhc3MgPSBtYW5hZ2VyLm9wdGlvbnMuaW5wdXRDbGFzcztcblxuICAgIGlmIChpbnB1dENsYXNzKSB7XG4gICAgICBUeXBlID0gaW5wdXRDbGFzcztcbiAgICB9IGVsc2UgaWYgKFNVUFBPUlRfUE9JTlRFUl9FVkVOVFMpIHtcbiAgICAgIFR5cGUgPSBQb2ludGVyRXZlbnRJbnB1dDtcbiAgICB9IGVsc2UgaWYgKFNVUFBPUlRfT05MWV9UT1VDSCkge1xuICAgICAgVHlwZSA9IFRvdWNoSW5wdXQ7XG4gICAgfSBlbHNlIGlmICghU1VQUE9SVF9UT1VDSCkge1xuICAgICAgVHlwZSA9IE1vdXNlSW5wdXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIFR5cGUgPSBUb3VjaE1vdXNlSW5wdXQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBUeXBlKG1hbmFnZXIsIGlucHV0SGFuZGxlcik7XG4gIH1cbiAgLyoqXG4gICAqIGhhbmRsZSBpbnB1dCBldmVudHNcbiAgICogQHBhcmFtIHtNYW5hZ2VyfSBtYW5hZ2VyXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBldmVudFR5cGVcbiAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gaW5wdXRIYW5kbGVyKG1hbmFnZXIsIGV2ZW50VHlwZSwgaW5wdXQpIHtcbiAgICB2YXIgcG9pbnRlcnNMZW4gPSBpbnB1dC5wb2ludGVycy5sZW5ndGg7XG4gICAgdmFyIGNoYW5nZWRQb2ludGVyc0xlbiA9IGlucHV0LmNoYW5nZWRQb2ludGVycy5sZW5ndGg7XG4gICAgdmFyIGlzRmlyc3QgPSBldmVudFR5cGUgJiBJTlBVVF9TVEFSVCAmJiBwb2ludGVyc0xlbiAtIGNoYW5nZWRQb2ludGVyc0xlbiA9PT0gMDtcbiAgICB2YXIgaXNGaW5hbCA9IGV2ZW50VHlwZSAmIChJTlBVVF9FTkQgfCBJTlBVVF9DQU5DRUwpICYmIHBvaW50ZXJzTGVuIC0gY2hhbmdlZFBvaW50ZXJzTGVuID09PSAwO1xuICAgIGlucHV0LmlzRmlyc3QgPSAhIWlzRmlyc3Q7XG4gICAgaW5wdXQuaXNGaW5hbCA9ICEhaXNGaW5hbDtcblxuICAgIGlmIChpc0ZpcnN0KSB7XG4gICAgICBtYW5hZ2VyLnNlc3Npb24gPSB7fTtcbiAgICB9IC8vIHNvdXJjZSBldmVudCBpcyB0aGUgbm9ybWFsaXplZCB2YWx1ZSBvZiB0aGUgZG9tRXZlbnRzXG4gICAgLy8gbGlrZSAndG91Y2hzdGFydCwgbW91c2V1cCwgcG9pbnRlcmRvd24nXG5cblxuICAgIGlucHV0LmV2ZW50VHlwZSA9IGV2ZW50VHlwZTsgLy8gY29tcHV0ZSBzY2FsZSwgcm90YXRpb24gZXRjXG5cbiAgICBjb21wdXRlSW5wdXREYXRhKG1hbmFnZXIsIGlucHV0KTsgLy8gZW1pdCBzZWNyZXQgZXZlbnRcblxuICAgIG1hbmFnZXIuZW1pdCgnaGFtbWVyLmlucHV0JywgaW5wdXQpO1xuICAgIG1hbmFnZXIucmVjb2duaXplKGlucHV0KTtcbiAgICBtYW5hZ2VyLnNlc3Npb24ucHJldklucHV0ID0gaW5wdXQ7XG4gIH1cbiAgLyoqXG4gICAqIGV4dGVuZCB0aGUgZGF0YSB3aXRoIHNvbWUgdXNhYmxlIHByb3BlcnRpZXMgbGlrZSBzY2FsZSwgcm90YXRlLCB2ZWxvY2l0eSBldGNcbiAgICogQHBhcmFtIHtPYmplY3R9IG1hbmFnZXJcbiAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gY29tcHV0ZUlucHV0RGF0YShtYW5hZ2VyLCBpbnB1dCkge1xuICAgIHZhciBzZXNzaW9uID0gbWFuYWdlci5zZXNzaW9uO1xuICAgIHZhciBwb2ludGVycyA9IGlucHV0LnBvaW50ZXJzO1xuICAgIHZhciBwb2ludGVyc0xlbmd0aCA9IHBvaW50ZXJzLmxlbmd0aDsgLy8gc3RvcmUgdGhlIGZpcnN0IGlucHV0IHRvIGNhbGN1bGF0ZSB0aGUgZGlzdGFuY2UgYW5kIGRpcmVjdGlvblxuXG4gICAgaWYgKCFzZXNzaW9uLmZpcnN0SW5wdXQpIHtcbiAgICAgIHNlc3Npb24uZmlyc3RJbnB1dCA9IHNpbXBsZUNsb25lSW5wdXREYXRhKGlucHV0KTtcbiAgICB9IC8vIHRvIGNvbXB1dGUgc2NhbGUgYW5kIHJvdGF0aW9uIHdlIG5lZWQgdG8gc3RvcmUgdGhlIG11bHRpcGxlIHRvdWNoZXNcblxuXG4gICAgaWYgKHBvaW50ZXJzTGVuZ3RoID4gMSAmJiAhc2Vzc2lvbi5maXJzdE11bHRpcGxlKSB7XG4gICAgICBzZXNzaW9uLmZpcnN0TXVsdGlwbGUgPSBzaW1wbGVDbG9uZUlucHV0RGF0YShpbnB1dCk7XG4gICAgfSBlbHNlIGlmIChwb2ludGVyc0xlbmd0aCA9PT0gMSkge1xuICAgICAgc2Vzc2lvbi5maXJzdE11bHRpcGxlID0gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIGZpcnN0SW5wdXQgPSBzZXNzaW9uLmZpcnN0SW5wdXQ7XG4gICAgdmFyIGZpcnN0TXVsdGlwbGUgPSBzZXNzaW9uLmZpcnN0TXVsdGlwbGU7XG4gICAgdmFyIG9mZnNldENlbnRlciA9IGZpcnN0TXVsdGlwbGUgPyBmaXJzdE11bHRpcGxlLmNlbnRlciA6IGZpcnN0SW5wdXQuY2VudGVyO1xuICAgIHZhciBjZW50ZXIgPSBpbnB1dC5jZW50ZXIgPSBnZXRDZW50ZXIocG9pbnRlcnMpO1xuICAgIGlucHV0LnRpbWVTdGFtcCA9IG5vdygpO1xuICAgIGlucHV0LmRlbHRhVGltZSA9IGlucHV0LnRpbWVTdGFtcCAtIGZpcnN0SW5wdXQudGltZVN0YW1wO1xuICAgIGlucHV0LmFuZ2xlID0gZ2V0QW5nbGUob2Zmc2V0Q2VudGVyLCBjZW50ZXIpO1xuICAgIGlucHV0LmRpc3RhbmNlID0gZ2V0RGlzdGFuY2Uob2Zmc2V0Q2VudGVyLCBjZW50ZXIpO1xuICAgIGNvbXB1dGVEZWx0YVhZKHNlc3Npb24sIGlucHV0KTtcbiAgICBpbnB1dC5vZmZzZXREaXJlY3Rpb24gPSBnZXREaXJlY3Rpb24oaW5wdXQuZGVsdGFYLCBpbnB1dC5kZWx0YVkpO1xuICAgIHZhciBvdmVyYWxsVmVsb2NpdHkgPSBnZXRWZWxvY2l0eShpbnB1dC5kZWx0YVRpbWUsIGlucHV0LmRlbHRhWCwgaW5wdXQuZGVsdGFZKTtcbiAgICBpbnB1dC5vdmVyYWxsVmVsb2NpdHlYID0gb3ZlcmFsbFZlbG9jaXR5Lng7XG4gICAgaW5wdXQub3ZlcmFsbFZlbG9jaXR5WSA9IG92ZXJhbGxWZWxvY2l0eS55O1xuICAgIGlucHV0Lm92ZXJhbGxWZWxvY2l0eSA9IGFicyhvdmVyYWxsVmVsb2NpdHkueCkgPiBhYnMob3ZlcmFsbFZlbG9jaXR5LnkpID8gb3ZlcmFsbFZlbG9jaXR5LnggOiBvdmVyYWxsVmVsb2NpdHkueTtcbiAgICBpbnB1dC5zY2FsZSA9IGZpcnN0TXVsdGlwbGUgPyBnZXRTY2FsZShmaXJzdE11bHRpcGxlLnBvaW50ZXJzLCBwb2ludGVycykgOiAxO1xuICAgIGlucHV0LnJvdGF0aW9uID0gZmlyc3RNdWx0aXBsZSA/IGdldFJvdGF0aW9uKGZpcnN0TXVsdGlwbGUucG9pbnRlcnMsIHBvaW50ZXJzKSA6IDA7XG4gICAgaW5wdXQubWF4UG9pbnRlcnMgPSAhc2Vzc2lvbi5wcmV2SW5wdXQgPyBpbnB1dC5wb2ludGVycy5sZW5ndGggOiBpbnB1dC5wb2ludGVycy5sZW5ndGggPiBzZXNzaW9uLnByZXZJbnB1dC5tYXhQb2ludGVycyA/IGlucHV0LnBvaW50ZXJzLmxlbmd0aCA6IHNlc3Npb24ucHJldklucHV0Lm1heFBvaW50ZXJzO1xuICAgIGNvbXB1dGVJbnRlcnZhbElucHV0RGF0YShzZXNzaW9uLCBpbnB1dCk7IC8vIGZpbmQgdGhlIGNvcnJlY3QgdGFyZ2V0XG5cbiAgICB2YXIgdGFyZ2V0ID0gbWFuYWdlci5lbGVtZW50O1xuXG4gICAgaWYgKGhhc1BhcmVudChpbnB1dC5zcmNFdmVudC50YXJnZXQsIHRhcmdldCkpIHtcbiAgICAgIHRhcmdldCA9IGlucHV0LnNyY0V2ZW50LnRhcmdldDtcbiAgICB9XG5cbiAgICBpbnB1dC50YXJnZXQgPSB0YXJnZXQ7XG4gIH1cblxuICBmdW5jdGlvbiBjb21wdXRlRGVsdGFYWShzZXNzaW9uLCBpbnB1dCkge1xuICAgIHZhciBjZW50ZXIgPSBpbnB1dC5jZW50ZXI7XG4gICAgdmFyIG9mZnNldCA9IHNlc3Npb24ub2Zmc2V0RGVsdGEgfHwge307XG4gICAgdmFyIHByZXZEZWx0YSA9IHNlc3Npb24ucHJldkRlbHRhIHx8IHt9O1xuICAgIHZhciBwcmV2SW5wdXQgPSBzZXNzaW9uLnByZXZJbnB1dCB8fCB7fTtcblxuICAgIGlmIChpbnB1dC5ldmVudFR5cGUgPT09IElOUFVUX1NUQVJUIHx8IHByZXZJbnB1dC5ldmVudFR5cGUgPT09IElOUFVUX0VORCkge1xuICAgICAgcHJldkRlbHRhID0gc2Vzc2lvbi5wcmV2RGVsdGEgPSB7XG4gICAgICAgIHg6IHByZXZJbnB1dC5kZWx0YVggfHwgMCxcbiAgICAgICAgeTogcHJldklucHV0LmRlbHRhWSB8fCAwXG4gICAgICB9O1xuICAgICAgb2Zmc2V0ID0gc2Vzc2lvbi5vZmZzZXREZWx0YSA9IHtcbiAgICAgICAgeDogY2VudGVyLngsXG4gICAgICAgIHk6IGNlbnRlci55XG4gICAgICB9O1xuICAgIH1cblxuICAgIGlucHV0LmRlbHRhWCA9IHByZXZEZWx0YS54ICsgKGNlbnRlci54IC0gb2Zmc2V0LngpO1xuICAgIGlucHV0LmRlbHRhWSA9IHByZXZEZWx0YS55ICsgKGNlbnRlci55IC0gb2Zmc2V0LnkpO1xuICB9XG4gIC8qKlxuICAgKiB2ZWxvY2l0eSBpcyBjYWxjdWxhdGVkIGV2ZXJ5IHggbXNcbiAgICogQHBhcmFtIHtPYmplY3R9IHNlc3Npb25cbiAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gY29tcHV0ZUludGVydmFsSW5wdXREYXRhKHNlc3Npb24sIGlucHV0KSB7XG4gICAgdmFyIGxhc3QgPSBzZXNzaW9uLmxhc3RJbnRlcnZhbCB8fCBpbnB1dCxcbiAgICAgICAgZGVsdGFUaW1lID0gaW5wdXQudGltZVN0YW1wIC0gbGFzdC50aW1lU3RhbXAsXG4gICAgICAgIHZlbG9jaXR5LFxuICAgICAgICB2ZWxvY2l0eVgsXG4gICAgICAgIHZlbG9jaXR5WSxcbiAgICAgICAgZGlyZWN0aW9uO1xuXG4gICAgaWYgKGlucHV0LmV2ZW50VHlwZSAhPSBJTlBVVF9DQU5DRUwgJiYgKGRlbHRhVGltZSA+IENPTVBVVEVfSU5URVJWQUwgfHwgbGFzdC52ZWxvY2l0eSA9PT0gdW5kZWZpbmVkKSkge1xuICAgICAgdmFyIGRlbHRhWCA9IGlucHV0LmRlbHRhWCAtIGxhc3QuZGVsdGFYO1xuICAgICAgdmFyIGRlbHRhWSA9IGlucHV0LmRlbHRhWSAtIGxhc3QuZGVsdGFZO1xuICAgICAgdmFyIHYgPSBnZXRWZWxvY2l0eShkZWx0YVRpbWUsIGRlbHRhWCwgZGVsdGFZKTtcbiAgICAgIHZlbG9jaXR5WCA9IHYueDtcbiAgICAgIHZlbG9jaXR5WSA9IHYueTtcbiAgICAgIHZlbG9jaXR5ID0gYWJzKHYueCkgPiBhYnModi55KSA/IHYueCA6IHYueTtcbiAgICAgIGRpcmVjdGlvbiA9IGdldERpcmVjdGlvbihkZWx0YVgsIGRlbHRhWSk7XG4gICAgICBzZXNzaW9uLmxhc3RJbnRlcnZhbCA9IGlucHV0O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB1c2UgbGF0ZXN0IHZlbG9jaXR5IGluZm8gaWYgaXQgZG9lc24ndCBvdmVydGFrZSBhIG1pbmltdW0gcGVyaW9kXG4gICAgICB2ZWxvY2l0eSA9IGxhc3QudmVsb2NpdHk7XG4gICAgICB2ZWxvY2l0eVggPSBsYXN0LnZlbG9jaXR5WDtcbiAgICAgIHZlbG9jaXR5WSA9IGxhc3QudmVsb2NpdHlZO1xuICAgICAgZGlyZWN0aW9uID0gbGFzdC5kaXJlY3Rpb247XG4gICAgfVxuXG4gICAgaW5wdXQudmVsb2NpdHkgPSB2ZWxvY2l0eTtcbiAgICBpbnB1dC52ZWxvY2l0eVggPSB2ZWxvY2l0eVg7XG4gICAgaW5wdXQudmVsb2NpdHlZID0gdmVsb2NpdHlZO1xuICAgIGlucHV0LmRpcmVjdGlvbiA9IGRpcmVjdGlvbjtcbiAgfVxuICAvKipcbiAgICogY3JlYXRlIGEgc2ltcGxlIGNsb25lIGZyb20gdGhlIGlucHV0IHVzZWQgZm9yIHN0b3JhZ2Ugb2YgZmlyc3RJbnB1dCBhbmQgZmlyc3RNdWx0aXBsZVxuICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXRcbiAgICogQHJldHVybnMge09iamVjdH0gY2xvbmVkSW5wdXREYXRhXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gc2ltcGxlQ2xvbmVJbnB1dERhdGEoaW5wdXQpIHtcbiAgICAvLyBtYWtlIGEgc2ltcGxlIGNvcHkgb2YgdGhlIHBvaW50ZXJzIGJlY2F1c2Ugd2Ugd2lsbCBnZXQgYSByZWZlcmVuY2UgaWYgd2UgZG9uJ3RcbiAgICAvLyB3ZSBvbmx5IG5lZWQgY2xpZW50WFkgZm9yIHRoZSBjYWxjdWxhdGlvbnNcbiAgICB2YXIgcG9pbnRlcnMgPSBbXTtcbiAgICB2YXIgaSA9IDA7XG5cbiAgICB3aGlsZSAoaSA8IGlucHV0LnBvaW50ZXJzLmxlbmd0aCkge1xuICAgICAgcG9pbnRlcnNbaV0gPSB7XG4gICAgICAgIGNsaWVudFg6IHJvdW5kKGlucHV0LnBvaW50ZXJzW2ldLmNsaWVudFgpLFxuICAgICAgICBjbGllbnRZOiByb3VuZChpbnB1dC5wb2ludGVyc1tpXS5jbGllbnRZKVxuICAgICAgfTtcbiAgICAgIGkrKztcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdGltZVN0YW1wOiBub3coKSxcbiAgICAgIHBvaW50ZXJzOiBwb2ludGVycyxcbiAgICAgIGNlbnRlcjogZ2V0Q2VudGVyKHBvaW50ZXJzKSxcbiAgICAgIGRlbHRhWDogaW5wdXQuZGVsdGFYLFxuICAgICAgZGVsdGFZOiBpbnB1dC5kZWx0YVlcbiAgICB9O1xuICB9XG4gIC8qKlxuICAgKiBnZXQgdGhlIGNlbnRlciBvZiBhbGwgdGhlIHBvaW50ZXJzXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBvaW50ZXJzXG4gICAqIEByZXR1cm4ge09iamVjdH0gY2VudGVyIGNvbnRhaW5zIGB4YCBhbmQgYHlgIHByb3BlcnRpZXNcbiAgICovXG5cblxuICBmdW5jdGlvbiBnZXRDZW50ZXIocG9pbnRlcnMpIHtcbiAgICB2YXIgcG9pbnRlcnNMZW5ndGggPSBwb2ludGVycy5sZW5ndGg7IC8vIG5vIG5lZWQgdG8gbG9vcCB3aGVuIG9ubHkgb25lIHRvdWNoXG5cbiAgICBpZiAocG9pbnRlcnNMZW5ndGggPT09IDEpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHg6IHJvdW5kKHBvaW50ZXJzWzBdLmNsaWVudFgpLFxuICAgICAgICB5OiByb3VuZChwb2ludGVyc1swXS5jbGllbnRZKVxuICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgeCA9IDAsXG4gICAgICAgIHkgPSAwLFxuICAgICAgICBpID0gMDtcblxuICAgIHdoaWxlIChpIDwgcG9pbnRlcnNMZW5ndGgpIHtcbiAgICAgIHggKz0gcG9pbnRlcnNbaV0uY2xpZW50WDtcbiAgICAgIHkgKz0gcG9pbnRlcnNbaV0uY2xpZW50WTtcbiAgICAgIGkrKztcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgeDogcm91bmQoeCAvIHBvaW50ZXJzTGVuZ3RoKSxcbiAgICAgIHk6IHJvdW5kKHkgLyBwb2ludGVyc0xlbmd0aClcbiAgICB9O1xuICB9XG4gIC8qKlxuICAgKiBjYWxjdWxhdGUgdGhlIHZlbG9jaXR5IGJldHdlZW4gdHdvIHBvaW50cy4gdW5pdCBpcyBpbiBweCBwZXIgbXMuXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBkZWx0YVRpbWVcbiAgICogQHBhcmFtIHtOdW1iZXJ9IHhcbiAgICogQHBhcmFtIHtOdW1iZXJ9IHlcbiAgICogQHJldHVybiB7T2JqZWN0fSB2ZWxvY2l0eSBgeGAgYW5kIGB5YFxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGdldFZlbG9jaXR5KGRlbHRhVGltZSwgeCwgeSkge1xuICAgIHJldHVybiB7XG4gICAgICB4OiB4IC8gZGVsdGFUaW1lIHx8IDAsXG4gICAgICB5OiB5IC8gZGVsdGFUaW1lIHx8IDBcbiAgICB9O1xuICB9XG4gIC8qKlxuICAgKiBnZXQgdGhlIGRpcmVjdGlvbiBiZXR3ZWVuIHR3byBwb2ludHNcbiAgICogQHBhcmFtIHtOdW1iZXJ9IHhcbiAgICogQHBhcmFtIHtOdW1iZXJ9IHlcbiAgICogQHJldHVybiB7TnVtYmVyfSBkaXJlY3Rpb25cbiAgICovXG5cblxuICBmdW5jdGlvbiBnZXREaXJlY3Rpb24oeCwgeSkge1xuICAgIGlmICh4ID09PSB5KSB7XG4gICAgICByZXR1cm4gRElSRUNUSU9OX05PTkU7XG4gICAgfVxuXG4gICAgaWYgKGFicyh4KSA+PSBhYnMoeSkpIHtcbiAgICAgIHJldHVybiB4IDwgMCA/IERJUkVDVElPTl9MRUZUIDogRElSRUNUSU9OX1JJR0hUO1xuICAgIH1cblxuICAgIHJldHVybiB5IDwgMCA/IERJUkVDVElPTl9VUCA6IERJUkVDVElPTl9ET1dOO1xuICB9XG4gIC8qKlxuICAgKiBjYWxjdWxhdGUgdGhlIGFic29sdXRlIGRpc3RhbmNlIGJldHdlZW4gdHdvIHBvaW50c1xuICAgKiBAcGFyYW0ge09iamVjdH0gcDEge3gsIHl9XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwMiB7eCwgeX1cbiAgICogQHBhcmFtIHtBcnJheX0gW3Byb3BzXSBjb250YWluaW5nIHggYW5kIHkga2V5c1xuICAgKiBAcmV0dXJuIHtOdW1iZXJ9IGRpc3RhbmNlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gZ2V0RGlzdGFuY2UocDEsIHAyLCBwcm9wcykge1xuICAgIGlmICghcHJvcHMpIHtcbiAgICAgIHByb3BzID0gUFJPUFNfWFk7XG4gICAgfVxuXG4gICAgdmFyIHggPSBwMltwcm9wc1swXV0gLSBwMVtwcm9wc1swXV0sXG4gICAgICAgIHkgPSBwMltwcm9wc1sxXV0gLSBwMVtwcm9wc1sxXV07XG4gICAgcmV0dXJuIE1hdGguc3FydCh4ICogeCArIHkgKiB5KTtcbiAgfVxuICAvKipcbiAgICogY2FsY3VsYXRlIHRoZSBhbmdsZSBiZXR3ZWVuIHR3byBjb29yZGluYXRlc1xuICAgKiBAcGFyYW0ge09iamVjdH0gcDFcbiAgICogQHBhcmFtIHtPYmplY3R9IHAyXG4gICAqIEBwYXJhbSB7QXJyYXl9IFtwcm9wc10gY29udGFpbmluZyB4IGFuZCB5IGtleXNcbiAgICogQHJldHVybiB7TnVtYmVyfSBhbmdsZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGdldEFuZ2xlKHAxLCBwMiwgcHJvcHMpIHtcbiAgICBpZiAoIXByb3BzKSB7XG4gICAgICBwcm9wcyA9IFBST1BTX1hZO1xuICAgIH1cblxuICAgIHZhciB4ID0gcDJbcHJvcHNbMF1dIC0gcDFbcHJvcHNbMF1dLFxuICAgICAgICB5ID0gcDJbcHJvcHNbMV1dIC0gcDFbcHJvcHNbMV1dO1xuICAgIHJldHVybiBNYXRoLmF0YW4yKHksIHgpICogMTgwIC8gTWF0aC5QSTtcbiAgfVxuICAvKipcbiAgICogY2FsY3VsYXRlIHRoZSByb3RhdGlvbiBkZWdyZWVzIGJldHdlZW4gdHdvIHBvaW50ZXJzZXRzXG4gICAqIEBwYXJhbSB7QXJyYXl9IHN0YXJ0IGFycmF5IG9mIHBvaW50ZXJzXG4gICAqIEBwYXJhbSB7QXJyYXl9IGVuZCBhcnJheSBvZiBwb2ludGVyc1xuICAgKiBAcmV0dXJuIHtOdW1iZXJ9IHJvdGF0aW9uXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gZ2V0Um90YXRpb24oc3RhcnQsIGVuZCkge1xuICAgIHJldHVybiBnZXRBbmdsZShlbmRbMV0sIGVuZFswXSwgUFJPUFNfQ0xJRU5UX1hZKSArIGdldEFuZ2xlKHN0YXJ0WzFdLCBzdGFydFswXSwgUFJPUFNfQ0xJRU5UX1hZKTtcbiAgfVxuICAvKipcbiAgICogY2FsY3VsYXRlIHRoZSBzY2FsZSBmYWN0b3IgYmV0d2VlbiB0d28gcG9pbnRlcnNldHNcbiAgICogbm8gc2NhbGUgaXMgMSwgYW5kIGdvZXMgZG93biB0byAwIHdoZW4gcGluY2hlZCB0b2dldGhlciwgYW5kIGJpZ2dlciB3aGVuIHBpbmNoZWQgb3V0XG4gICAqIEBwYXJhbSB7QXJyYXl9IHN0YXJ0IGFycmF5IG9mIHBvaW50ZXJzXG4gICAqIEBwYXJhbSB7QXJyYXl9IGVuZCBhcnJheSBvZiBwb2ludGVyc1xuICAgKiBAcmV0dXJuIHtOdW1iZXJ9IHNjYWxlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gZ2V0U2NhbGUoc3RhcnQsIGVuZCkge1xuICAgIHJldHVybiBnZXREaXN0YW5jZShlbmRbMF0sIGVuZFsxXSwgUFJPUFNfQ0xJRU5UX1hZKSAvIGdldERpc3RhbmNlKHN0YXJ0WzBdLCBzdGFydFsxXSwgUFJPUFNfQ0xJRU5UX1hZKTtcbiAgfVxuXG4gIHZhciBNT1VTRV9JTlBVVF9NQVAgPSB7XG4gICAgbW91c2Vkb3duOiBJTlBVVF9TVEFSVCxcbiAgICBtb3VzZW1vdmU6IElOUFVUX01PVkUsXG4gICAgbW91c2V1cDogSU5QVVRfRU5EXG4gIH07XG4gIHZhciBNT1VTRV9FTEVNRU5UX0VWRU5UUyA9ICdtb3VzZWRvd24nO1xuICB2YXIgTU9VU0VfV0lORE9XX0VWRU5UUyA9ICdtb3VzZW1vdmUgbW91c2V1cCc7XG4gIC8qKlxuICAgKiBNb3VzZSBldmVudHMgaW5wdXRcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBleHRlbmRzIElucHV0XG4gICAqL1xuXG4gIGZ1bmN0aW9uIE1vdXNlSW5wdXQoKSB7XG4gICAgdGhpcy5ldkVsID0gTU9VU0VfRUxFTUVOVF9FVkVOVFM7XG4gICAgdGhpcy5ldldpbiA9IE1PVVNFX1dJTkRPV19FVkVOVFM7XG4gICAgdGhpcy5wcmVzc2VkID0gZmFsc2U7IC8vIG1vdXNlZG93biBzdGF0ZVxuXG4gICAgSW5wdXQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIGluaGVyaXQoTW91c2VJbnB1dCwgSW5wdXQsIHtcbiAgICAvKipcbiAgICAgKiBoYW5kbGUgbW91c2UgZXZlbnRzXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGV2XG4gICAgICovXG4gICAgaGFuZGxlcjogZnVuY3Rpb24gTUVoYW5kbGVyKGV2KSB7XG4gICAgICB2YXIgZXZlbnRUeXBlID0gTU9VU0VfSU5QVVRfTUFQW2V2LnR5cGVdOyAvLyBvbiBzdGFydCB3ZSB3YW50IHRvIGhhdmUgdGhlIGxlZnQgbW91c2UgYnV0dG9uIGRvd25cblxuICAgICAgaWYgKGV2ZW50VHlwZSAmIElOUFVUX1NUQVJUICYmIGV2LmJ1dHRvbiA9PT0gMCkge1xuICAgICAgICB0aGlzLnByZXNzZWQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnRUeXBlICYgSU5QVVRfTU9WRSAmJiBldi53aGljaCAhPT0gMSkge1xuICAgICAgICBldmVudFR5cGUgPSBJTlBVVF9FTkQ7XG4gICAgICB9IC8vIG1vdXNlIG11c3QgYmUgZG93blxuXG5cbiAgICAgIGlmICghdGhpcy5wcmVzc2VkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50VHlwZSAmIElOUFVUX0VORCkge1xuICAgICAgICB0aGlzLnByZXNzZWQgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5jYWxsYmFjayh0aGlzLm1hbmFnZXIsIGV2ZW50VHlwZSwge1xuICAgICAgICBwb2ludGVyczogW2V2XSxcbiAgICAgICAgY2hhbmdlZFBvaW50ZXJzOiBbZXZdLFxuICAgICAgICBwb2ludGVyVHlwZTogSU5QVVRfVFlQRV9NT1VTRSxcbiAgICAgICAgc3JjRXZlbnQ6IGV2XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuICB2YXIgUE9JTlRFUl9JTlBVVF9NQVAgPSB7XG4gICAgcG9pbnRlcmRvd246IElOUFVUX1NUQVJULFxuICAgIHBvaW50ZXJtb3ZlOiBJTlBVVF9NT1ZFLFxuICAgIHBvaW50ZXJ1cDogSU5QVVRfRU5ELFxuICAgIHBvaW50ZXJjYW5jZWw6IElOUFVUX0NBTkNFTCxcbiAgICBwb2ludGVyb3V0OiBJTlBVVF9DQU5DRUxcbiAgfTsgLy8gaW4gSUUxMCB0aGUgcG9pbnRlciB0eXBlcyBpcyBkZWZpbmVkIGFzIGFuIGVudW1cblxuICB2YXIgSUUxMF9QT0lOVEVSX1RZUEVfRU5VTSA9IHtcbiAgICAyOiBJTlBVVF9UWVBFX1RPVUNILFxuICAgIDM6IElOUFVUX1RZUEVfUEVOLFxuICAgIDQ6IElOUFVUX1RZUEVfTU9VU0UsXG4gICAgNTogSU5QVVRfVFlQRV9LSU5FQ1QgLy8gc2VlIGh0dHBzOi8vdHdpdHRlci5jb20vamFjb2Jyb3NzaS9zdGF0dXMvNDgwNTk2NDM4NDg5ODkwODE2XG5cbiAgfTtcbiAgdmFyIFBPSU5URVJfRUxFTUVOVF9FVkVOVFMgPSAncG9pbnRlcmRvd24nO1xuICB2YXIgUE9JTlRFUl9XSU5ET1dfRVZFTlRTID0gJ3BvaW50ZXJtb3ZlIHBvaW50ZXJ1cCBwb2ludGVyY2FuY2VsJzsgLy8gSUUxMCBoYXMgcHJlZml4ZWQgc3VwcG9ydCwgYW5kIGNhc2Utc2Vuc2l0aXZlXG5cbiAgaWYgKHdpbmRvdy5NU1BvaW50ZXJFdmVudCAmJiAhd2luZG93LlBvaW50ZXJFdmVudCkge1xuICAgIFBPSU5URVJfRUxFTUVOVF9FVkVOVFMgPSAnTVNQb2ludGVyRG93bic7XG4gICAgUE9JTlRFUl9XSU5ET1dfRVZFTlRTID0gJ01TUG9pbnRlck1vdmUgTVNQb2ludGVyVXAgTVNQb2ludGVyQ2FuY2VsJztcbiAgfVxuICAvKipcbiAgICogUG9pbnRlciBldmVudHMgaW5wdXRcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBleHRlbmRzIElucHV0XG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gUG9pbnRlckV2ZW50SW5wdXQoKSB7XG4gICAgdGhpcy5ldkVsID0gUE9JTlRFUl9FTEVNRU5UX0VWRU5UUztcbiAgICB0aGlzLmV2V2luID0gUE9JTlRFUl9XSU5ET1dfRVZFTlRTO1xuICAgIElucHV0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgdGhpcy5zdG9yZSA9IHRoaXMubWFuYWdlci5zZXNzaW9uLnBvaW50ZXJFdmVudHMgPSBbXTtcbiAgfVxuXG4gIGluaGVyaXQoUG9pbnRlckV2ZW50SW5wdXQsIElucHV0LCB7XG4gICAgLyoqXG4gICAgICogaGFuZGxlIG1vdXNlIGV2ZW50c1xuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBldlxuICAgICAqL1xuICAgIGhhbmRsZXI6IGZ1bmN0aW9uIFBFaGFuZGxlcihldikge1xuICAgICAgdmFyIHN0b3JlID0gdGhpcy5zdG9yZTtcbiAgICAgIHZhciByZW1vdmVQb2ludGVyID0gZmFsc2U7XG4gICAgICB2YXIgZXZlbnRUeXBlTm9ybWFsaXplZCA9IGV2LnR5cGUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKCdtcycsICcnKTtcbiAgICAgIHZhciBldmVudFR5cGUgPSBQT0lOVEVSX0lOUFVUX01BUFtldmVudFR5cGVOb3JtYWxpemVkXTtcbiAgICAgIHZhciBwb2ludGVyVHlwZSA9IElFMTBfUE9JTlRFUl9UWVBFX0VOVU1bZXYucG9pbnRlclR5cGVdIHx8IGV2LnBvaW50ZXJUeXBlO1xuICAgICAgdmFyIGlzVG91Y2ggPSBwb2ludGVyVHlwZSA9PSBJTlBVVF9UWVBFX1RPVUNIOyAvLyBnZXQgaW5kZXggb2YgdGhlIGV2ZW50IGluIHRoZSBzdG9yZVxuXG4gICAgICB2YXIgc3RvcmVJbmRleCA9IGluQXJyYXkoc3RvcmUsIGV2LnBvaW50ZXJJZCwgJ3BvaW50ZXJJZCcpOyAvLyBzdGFydCBhbmQgbW91c2UgbXVzdCBiZSBkb3duXG5cbiAgICAgIGlmIChldmVudFR5cGUgJiBJTlBVVF9TVEFSVCAmJiAoZXYuYnV0dG9uID09PSAwIHx8IGlzVG91Y2gpKSB7XG4gICAgICAgIGlmIChzdG9yZUluZGV4IDwgMCkge1xuICAgICAgICAgIHN0b3JlLnB1c2goZXYpO1xuICAgICAgICAgIHN0b3JlSW5kZXggPSBzdG9yZS5sZW5ndGggLSAxO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSAmIChJTlBVVF9FTkQgfCBJTlBVVF9DQU5DRUwpKSB7XG4gICAgICAgIHJlbW92ZVBvaW50ZXIgPSB0cnVlO1xuICAgICAgfSAvLyBpdCBub3QgZm91bmQsIHNvIHRoZSBwb2ludGVyIGhhc24ndCBiZWVuIGRvd24gKHNvIGl0J3MgcHJvYmFibHkgYSBob3ZlcilcblxuXG4gICAgICBpZiAoc3RvcmVJbmRleCA8IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSAvLyB1cGRhdGUgdGhlIGV2ZW50IGluIHRoZSBzdG9yZVxuXG5cbiAgICAgIHN0b3JlW3N0b3JlSW5kZXhdID0gZXY7XG4gICAgICB0aGlzLmNhbGxiYWNrKHRoaXMubWFuYWdlciwgZXZlbnRUeXBlLCB7XG4gICAgICAgIHBvaW50ZXJzOiBzdG9yZSxcbiAgICAgICAgY2hhbmdlZFBvaW50ZXJzOiBbZXZdLFxuICAgICAgICBwb2ludGVyVHlwZTogcG9pbnRlclR5cGUsXG4gICAgICAgIHNyY0V2ZW50OiBldlxuICAgICAgfSk7XG5cbiAgICAgIGlmIChyZW1vdmVQb2ludGVyKSB7XG4gICAgICAgIC8vIHJlbW92ZSBmcm9tIHRoZSBzdG9yZVxuICAgICAgICBzdG9yZS5zcGxpY2Uoc3RvcmVJbmRleCwgMSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgdmFyIFNJTkdMRV9UT1VDSF9JTlBVVF9NQVAgPSB7XG4gICAgdG91Y2hzdGFydDogSU5QVVRfU1RBUlQsXG4gICAgdG91Y2htb3ZlOiBJTlBVVF9NT1ZFLFxuICAgIHRvdWNoZW5kOiBJTlBVVF9FTkQsXG4gICAgdG91Y2hjYW5jZWw6IElOUFVUX0NBTkNFTFxuICB9O1xuICB2YXIgU0lOR0xFX1RPVUNIX1RBUkdFVF9FVkVOVFMgPSAndG91Y2hzdGFydCc7XG4gIHZhciBTSU5HTEVfVE9VQ0hfV0lORE9XX0VWRU5UUyA9ICd0b3VjaHN0YXJ0IHRvdWNobW92ZSB0b3VjaGVuZCB0b3VjaGNhbmNlbCc7XG4gIC8qKlxuICAgKiBUb3VjaCBldmVudHMgaW5wdXRcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBleHRlbmRzIElucHV0XG4gICAqL1xuXG4gIGZ1bmN0aW9uIFNpbmdsZVRvdWNoSW5wdXQoKSB7XG4gICAgdGhpcy5ldlRhcmdldCA9IFNJTkdMRV9UT1VDSF9UQVJHRVRfRVZFTlRTO1xuICAgIHRoaXMuZXZXaW4gPSBTSU5HTEVfVE9VQ0hfV0lORE9XX0VWRU5UUztcbiAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcbiAgICBJbnB1dC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgaW5oZXJpdChTaW5nbGVUb3VjaElucHV0LCBJbnB1dCwge1xuICAgIGhhbmRsZXI6IGZ1bmN0aW9uIFRFaGFuZGxlcihldikge1xuICAgICAgdmFyIHR5cGUgPSBTSU5HTEVfVE9VQ0hfSU5QVVRfTUFQW2V2LnR5cGVdOyAvLyBzaG91bGQgd2UgaGFuZGxlIHRoZSB0b3VjaCBldmVudHM/XG5cbiAgICAgIGlmICh0eXBlID09PSBJTlBVVF9TVEFSVCkge1xuICAgICAgICB0aGlzLnN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMuc3RhcnRlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciB0b3VjaGVzID0gbm9ybWFsaXplU2luZ2xlVG91Y2hlcy5jYWxsKHRoaXMsIGV2LCB0eXBlKTsgLy8gd2hlbiBkb25lLCByZXNldCB0aGUgc3RhcnRlZCBzdGF0ZVxuXG4gICAgICBpZiAodHlwZSAmIChJTlBVVF9FTkQgfCBJTlBVVF9DQU5DRUwpICYmIHRvdWNoZXNbMF0ubGVuZ3RoIC0gdG91Y2hlc1sxXS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhpcy5zdGFydGVkID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY2FsbGJhY2sodGhpcy5tYW5hZ2VyLCB0eXBlLCB7XG4gICAgICAgIHBvaW50ZXJzOiB0b3VjaGVzWzBdLFxuICAgICAgICBjaGFuZ2VkUG9pbnRlcnM6IHRvdWNoZXNbMV0sXG4gICAgICAgIHBvaW50ZXJUeXBlOiBJTlBVVF9UWVBFX1RPVUNILFxuICAgICAgICBzcmNFdmVudDogZXZcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG4gIC8qKlxuICAgKiBAdGhpcyB7VG91Y2hJbnB1dH1cbiAgICogQHBhcmFtIHtPYmplY3R9IGV2XG4gICAqIEBwYXJhbSB7TnVtYmVyfSB0eXBlIGZsYWdcbiAgICogQHJldHVybnMge3VuZGVmaW5lZHxBcnJheX0gW2FsbCwgY2hhbmdlZF1cbiAgICovXG5cbiAgZnVuY3Rpb24gbm9ybWFsaXplU2luZ2xlVG91Y2hlcyhldiwgdHlwZSkge1xuICAgIHZhciBhbGwgPSB0b0FycmF5KGV2LnRvdWNoZXMpO1xuICAgIHZhciBjaGFuZ2VkID0gdG9BcnJheShldi5jaGFuZ2VkVG91Y2hlcyk7XG5cbiAgICBpZiAodHlwZSAmIChJTlBVVF9FTkQgfCBJTlBVVF9DQU5DRUwpKSB7XG4gICAgICBhbGwgPSB1bmlxdWVBcnJheShhbGwuY29uY2F0KGNoYW5nZWQpLCAnaWRlbnRpZmllcicsIHRydWUpO1xuICAgIH1cblxuICAgIHJldHVybiBbYWxsLCBjaGFuZ2VkXTtcbiAgfVxuXG4gIHZhciBUT1VDSF9JTlBVVF9NQVAgPSB7XG4gICAgdG91Y2hzdGFydDogSU5QVVRfU1RBUlQsXG4gICAgdG91Y2htb3ZlOiBJTlBVVF9NT1ZFLFxuICAgIHRvdWNoZW5kOiBJTlBVVF9FTkQsXG4gICAgdG91Y2hjYW5jZWw6IElOUFVUX0NBTkNFTFxuICB9O1xuICB2YXIgVE9VQ0hfVEFSR0VUX0VWRU5UUyA9ICd0b3VjaHN0YXJ0IHRvdWNobW92ZSB0b3VjaGVuZCB0b3VjaGNhbmNlbCc7XG4gIC8qKlxuICAgKiBNdWx0aS11c2VyIHRvdWNoIGV2ZW50cyBpbnB1dFxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQGV4dGVuZHMgSW5wdXRcbiAgICovXG5cbiAgZnVuY3Rpb24gVG91Y2hJbnB1dCgpIHtcbiAgICB0aGlzLmV2VGFyZ2V0ID0gVE9VQ0hfVEFSR0VUX0VWRU5UUztcbiAgICB0aGlzLnRhcmdldElkcyA9IHt9O1xuICAgIElucHV0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBpbmhlcml0KFRvdWNoSW5wdXQsIElucHV0LCB7XG4gICAgaGFuZGxlcjogZnVuY3Rpb24gTVRFaGFuZGxlcihldikge1xuICAgICAgdmFyIHR5cGUgPSBUT1VDSF9JTlBVVF9NQVBbZXYudHlwZV07XG4gICAgICB2YXIgdG91Y2hlcyA9IGdldFRvdWNoZXMuY2FsbCh0aGlzLCBldiwgdHlwZSk7XG5cbiAgICAgIGlmICghdG91Y2hlcykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY2FsbGJhY2sodGhpcy5tYW5hZ2VyLCB0eXBlLCB7XG4gICAgICAgIHBvaW50ZXJzOiB0b3VjaGVzWzBdLFxuICAgICAgICBjaGFuZ2VkUG9pbnRlcnM6IHRvdWNoZXNbMV0sXG4gICAgICAgIHBvaW50ZXJUeXBlOiBJTlBVVF9UWVBFX1RPVUNILFxuICAgICAgICBzcmNFdmVudDogZXZcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG4gIC8qKlxuICAgKiBAdGhpcyB7VG91Y2hJbnB1dH1cbiAgICogQHBhcmFtIHtPYmplY3R9IGV2XG4gICAqIEBwYXJhbSB7TnVtYmVyfSB0eXBlIGZsYWdcbiAgICogQHJldHVybnMge3VuZGVmaW5lZHxBcnJheX0gW2FsbCwgY2hhbmdlZF1cbiAgICovXG5cbiAgZnVuY3Rpb24gZ2V0VG91Y2hlcyhldiwgdHlwZSkge1xuICAgIHZhciBhbGxUb3VjaGVzID0gdG9BcnJheShldi50b3VjaGVzKTtcbiAgICB2YXIgdGFyZ2V0SWRzID0gdGhpcy50YXJnZXRJZHM7IC8vIHdoZW4gdGhlcmUgaXMgb25seSBvbmUgdG91Y2gsIHRoZSBwcm9jZXNzIGNhbiBiZSBzaW1wbGlmaWVkXG5cbiAgICBpZiAodHlwZSAmIChJTlBVVF9TVEFSVCB8IElOUFVUX01PVkUpICYmIGFsbFRvdWNoZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICB0YXJnZXRJZHNbYWxsVG91Y2hlc1swXS5pZGVudGlmaWVyXSA9IHRydWU7XG4gICAgICByZXR1cm4gW2FsbFRvdWNoZXMsIGFsbFRvdWNoZXNdO1xuICAgIH1cblxuICAgIHZhciBpLFxuICAgICAgICB0YXJnZXRUb3VjaGVzLFxuICAgICAgICBjaGFuZ2VkVG91Y2hlcyA9IHRvQXJyYXkoZXYuY2hhbmdlZFRvdWNoZXMpLFxuICAgICAgICBjaGFuZ2VkVGFyZ2V0VG91Y2hlcyA9IFtdLFxuICAgICAgICB0YXJnZXQgPSB0aGlzLnRhcmdldDsgLy8gZ2V0IHRhcmdldCB0b3VjaGVzIGZyb20gdG91Y2hlc1xuXG4gICAgdGFyZ2V0VG91Y2hlcyA9IGFsbFRvdWNoZXMuZmlsdGVyKGZ1bmN0aW9uICh0b3VjaCkge1xuICAgICAgcmV0dXJuIGhhc1BhcmVudCh0b3VjaC50YXJnZXQsIHRhcmdldCk7XG4gICAgfSk7IC8vIGNvbGxlY3QgdG91Y2hlc1xuXG4gICAgaWYgKHR5cGUgPT09IElOUFVUX1NUQVJUKSB7XG4gICAgICBpID0gMDtcblxuICAgICAgd2hpbGUgKGkgPCB0YXJnZXRUb3VjaGVzLmxlbmd0aCkge1xuICAgICAgICB0YXJnZXRJZHNbdGFyZ2V0VG91Y2hlc1tpXS5pZGVudGlmaWVyXSA9IHRydWU7XG4gICAgICAgIGkrKztcbiAgICAgIH1cbiAgICB9IC8vIGZpbHRlciBjaGFuZ2VkIHRvdWNoZXMgdG8gb25seSBjb250YWluIHRvdWNoZXMgdGhhdCBleGlzdCBpbiB0aGUgY29sbGVjdGVkIHRhcmdldCBpZHNcblxuXG4gICAgaSA9IDA7XG5cbiAgICB3aGlsZSAoaSA8IGNoYW5nZWRUb3VjaGVzLmxlbmd0aCkge1xuICAgICAgaWYgKHRhcmdldElkc1tjaGFuZ2VkVG91Y2hlc1tpXS5pZGVudGlmaWVyXSkge1xuICAgICAgICBjaGFuZ2VkVGFyZ2V0VG91Y2hlcy5wdXNoKGNoYW5nZWRUb3VjaGVzW2ldKTtcbiAgICAgIH0gLy8gY2xlYW51cCByZW1vdmVkIHRvdWNoZXNcblxuXG4gICAgICBpZiAodHlwZSAmIChJTlBVVF9FTkQgfCBJTlBVVF9DQU5DRUwpKSB7XG4gICAgICAgIGRlbGV0ZSB0YXJnZXRJZHNbY2hhbmdlZFRvdWNoZXNbaV0uaWRlbnRpZmllcl07XG4gICAgICB9XG5cbiAgICAgIGkrKztcbiAgICB9XG5cbiAgICBpZiAoIWNoYW5nZWRUYXJnZXRUb3VjaGVzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiBbLy8gbWVyZ2UgdGFyZ2V0VG91Y2hlcyB3aXRoIGNoYW5nZWRUYXJnZXRUb3VjaGVzIHNvIGl0IGNvbnRhaW5zIEFMTCB0b3VjaGVzLCBpbmNsdWRpbmcgJ2VuZCcgYW5kICdjYW5jZWwnXG4gICAgdW5pcXVlQXJyYXkodGFyZ2V0VG91Y2hlcy5jb25jYXQoY2hhbmdlZFRhcmdldFRvdWNoZXMpLCAnaWRlbnRpZmllcicsIHRydWUpLCBjaGFuZ2VkVGFyZ2V0VG91Y2hlc107XG4gIH1cbiAgLyoqXG4gICAqIENvbWJpbmVkIHRvdWNoIGFuZCBtb3VzZSBpbnB1dFxuICAgKlxuICAgKiBUb3VjaCBoYXMgYSBoaWdoZXIgcHJpb3JpdHkgdGhlbiBtb3VzZSwgYW5kIHdoaWxlIHRvdWNoaW5nIG5vIG1vdXNlIGV2ZW50cyBhcmUgYWxsb3dlZC5cbiAgICogVGhpcyBiZWNhdXNlIHRvdWNoIGRldmljZXMgYWxzbyBlbWl0IG1vdXNlIGV2ZW50cyB3aGlsZSBkb2luZyBhIHRvdWNoLlxuICAgKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQGV4dGVuZHMgSW5wdXRcbiAgICovXG5cblxuICB2YXIgREVEVVBfVElNRU9VVCA9IDI1MDA7XG4gIHZhciBERURVUF9ESVNUQU5DRSA9IDI1O1xuXG4gIGZ1bmN0aW9uIFRvdWNoTW91c2VJbnB1dCgpIHtcbiAgICBJbnB1dC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIHZhciBoYW5kbGVyID0gYmluZEZuKHRoaXMuaGFuZGxlciwgdGhpcyk7XG4gICAgdGhpcy50b3VjaCA9IG5ldyBUb3VjaElucHV0KHRoaXMubWFuYWdlciwgaGFuZGxlcik7XG4gICAgdGhpcy5tb3VzZSA9IG5ldyBNb3VzZUlucHV0KHRoaXMubWFuYWdlciwgaGFuZGxlcik7XG4gICAgdGhpcy5wcmltYXJ5VG91Y2ggPSBudWxsO1xuICAgIHRoaXMubGFzdFRvdWNoZXMgPSBbXTtcbiAgfVxuXG4gIGluaGVyaXQoVG91Y2hNb3VzZUlucHV0LCBJbnB1dCwge1xuICAgIC8qKlxuICAgICAqIGhhbmRsZSBtb3VzZSBhbmQgdG91Y2ggZXZlbnRzXG4gICAgICogQHBhcmFtIHtIYW1tZXJ9IG1hbmFnZXJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXRFdmVudFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dERhdGFcbiAgICAgKi9cbiAgICBoYW5kbGVyOiBmdW5jdGlvbiBUTUVoYW5kbGVyKG1hbmFnZXIsIGlucHV0RXZlbnQsIGlucHV0RGF0YSkge1xuICAgICAgdmFyIGlzVG91Y2ggPSBpbnB1dERhdGEucG9pbnRlclR5cGUgPT0gSU5QVVRfVFlQRV9UT1VDSCxcbiAgICAgICAgICBpc01vdXNlID0gaW5wdXREYXRhLnBvaW50ZXJUeXBlID09IElOUFVUX1RZUEVfTU9VU0U7XG5cbiAgICAgIGlmIChpc01vdXNlICYmIGlucHV0RGF0YS5zb3VyY2VDYXBhYmlsaXRpZXMgJiYgaW5wdXREYXRhLnNvdXJjZUNhcGFiaWxpdGllcy5maXJlc1RvdWNoRXZlbnRzKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gLy8gd2hlbiB3ZSdyZSBpbiBhIHRvdWNoIGV2ZW50LCByZWNvcmQgdG91Y2hlcyB0byAgZGUtZHVwZSBzeW50aGV0aWMgbW91c2UgZXZlbnRcblxuXG4gICAgICBpZiAoaXNUb3VjaCkge1xuICAgICAgICByZWNvcmRUb3VjaGVzLmNhbGwodGhpcywgaW5wdXRFdmVudCwgaW5wdXREYXRhKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNNb3VzZSAmJiBpc1N5bnRoZXRpY0V2ZW50LmNhbGwodGhpcywgaW5wdXREYXRhKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY2FsbGJhY2sobWFuYWdlciwgaW5wdXRFdmVudCwgaW5wdXREYXRhKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogcmVtb3ZlIHRoZSBldmVudCBsaXN0ZW5lcnNcbiAgICAgKi9cbiAgICBkZXN0cm95OiBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgICAgdGhpcy50b3VjaC5kZXN0cm95KCk7XG4gICAgICB0aGlzLm1vdXNlLmRlc3Ryb3koKTtcbiAgICB9XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIHJlY29yZFRvdWNoZXMoZXZlbnRUeXBlLCBldmVudERhdGEpIHtcbiAgICBpZiAoZXZlbnRUeXBlICYgSU5QVVRfU1RBUlQpIHtcbiAgICAgIHRoaXMucHJpbWFyeVRvdWNoID0gZXZlbnREYXRhLmNoYW5nZWRQb2ludGVyc1swXS5pZGVudGlmaWVyO1xuICAgICAgc2V0TGFzdFRvdWNoLmNhbGwodGhpcywgZXZlbnREYXRhKTtcbiAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSAmIChJTlBVVF9FTkQgfCBJTlBVVF9DQU5DRUwpKSB7XG4gICAgICBzZXRMYXN0VG91Y2guY2FsbCh0aGlzLCBldmVudERhdGEpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNldExhc3RUb3VjaChldmVudERhdGEpIHtcbiAgICB2YXIgdG91Y2ggPSBldmVudERhdGEuY2hhbmdlZFBvaW50ZXJzWzBdO1xuXG4gICAgaWYgKHRvdWNoLmlkZW50aWZpZXIgPT09IHRoaXMucHJpbWFyeVRvdWNoKSB7XG4gICAgICB2YXIgbGFzdFRvdWNoID0ge1xuICAgICAgICB4OiB0b3VjaC5jbGllbnRYLFxuICAgICAgICB5OiB0b3VjaC5jbGllbnRZXG4gICAgICB9O1xuICAgICAgdGhpcy5sYXN0VG91Y2hlcy5wdXNoKGxhc3RUb3VjaCk7XG4gICAgICB2YXIgbHRzID0gdGhpcy5sYXN0VG91Y2hlcztcblxuICAgICAgdmFyIHJlbW92ZUxhc3RUb3VjaCA9IGZ1bmN0aW9uIHJlbW92ZUxhc3RUb3VjaCgpIHtcbiAgICAgICAgdmFyIGkgPSBsdHMuaW5kZXhPZihsYXN0VG91Y2gpO1xuXG4gICAgICAgIGlmIChpID4gLTEpIHtcbiAgICAgICAgICBsdHMuc3BsaWNlKGksIDEpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBzZXRUaW1lb3V0KHJlbW92ZUxhc3RUb3VjaCwgREVEVVBfVElNRU9VVCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaXNTeW50aGV0aWNFdmVudChldmVudERhdGEpIHtcbiAgICB2YXIgeCA9IGV2ZW50RGF0YS5zcmNFdmVudC5jbGllbnRYLFxuICAgICAgICB5ID0gZXZlbnREYXRhLnNyY0V2ZW50LmNsaWVudFk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGFzdFRvdWNoZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB0ID0gdGhpcy5sYXN0VG91Y2hlc1tpXTtcbiAgICAgIHZhciBkeCA9IE1hdGguYWJzKHggLSB0LngpLFxuICAgICAgICAgIGR5ID0gTWF0aC5hYnMoeSAtIHQueSk7XG5cbiAgICAgIGlmIChkeCA8PSBERURVUF9ESVNUQU5DRSAmJiBkeSA8PSBERURVUF9ESVNUQU5DRSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgUFJFRklYRURfVE9VQ0hfQUNUSU9OID0gcHJlZml4ZWQoVEVTVF9FTEVNRU5ULnN0eWxlLCAndG91Y2hBY3Rpb24nKTtcbiAgdmFyIE5BVElWRV9UT1VDSF9BQ1RJT04gPSBQUkVGSVhFRF9UT1VDSF9BQ1RJT04gIT09IHVuZGVmaW5lZDsgLy8gbWFnaWNhbCB0b3VjaEFjdGlvbiB2YWx1ZVxuXG4gIHZhciBUT1VDSF9BQ1RJT05fQ09NUFVURSA9ICdjb21wdXRlJztcbiAgdmFyIFRPVUNIX0FDVElPTl9BVVRPID0gJ2F1dG8nO1xuICB2YXIgVE9VQ0hfQUNUSU9OX01BTklQVUxBVElPTiA9ICdtYW5pcHVsYXRpb24nOyAvLyBub3QgaW1wbGVtZW50ZWRcblxuICB2YXIgVE9VQ0hfQUNUSU9OX05PTkUgPSAnbm9uZSc7XG4gIHZhciBUT1VDSF9BQ1RJT05fUEFOX1ggPSAncGFuLXgnO1xuICB2YXIgVE9VQ0hfQUNUSU9OX1BBTl9ZID0gJ3Bhbi15JztcbiAgdmFyIFRPVUNIX0FDVElPTl9NQVAgPSBnZXRUb3VjaEFjdGlvblByb3BzKCk7XG4gIC8qKlxuICAgKiBUb3VjaCBBY3Rpb25cbiAgICogc2V0cyB0aGUgdG91Y2hBY3Rpb24gcHJvcGVydHkgb3IgdXNlcyB0aGUganMgYWx0ZXJuYXRpdmVcbiAgICogQHBhcmFtIHtNYW5hZ2VyfSBtYW5hZ2VyXG4gICAqIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZVxuICAgKiBAY29uc3RydWN0b3JcbiAgICovXG5cbiAgZnVuY3Rpb24gVG91Y2hBY3Rpb24obWFuYWdlciwgdmFsdWUpIHtcbiAgICB0aGlzLm1hbmFnZXIgPSBtYW5hZ2VyO1xuICAgIHRoaXMuc2V0KHZhbHVlKTtcbiAgfVxuXG4gIFRvdWNoQWN0aW9uLnByb3RvdHlwZSA9IHtcbiAgICAvKipcbiAgICAgKiBzZXQgdGhlIHRvdWNoQWN0aW9uIHZhbHVlIG9uIHRoZSBlbGVtZW50IG9yIGVuYWJsZSB0aGUgcG9seWZpbGxcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gdmFsdWVcbiAgICAgKi9cbiAgICBzZXQ6IGZ1bmN0aW9uIHNldCh2YWx1ZSkge1xuICAgICAgLy8gZmluZCBvdXQgdGhlIHRvdWNoLWFjdGlvbiBieSB0aGUgZXZlbnQgaGFuZGxlcnNcbiAgICAgIGlmICh2YWx1ZSA9PSBUT1VDSF9BQ1RJT05fQ09NUFVURSkge1xuICAgICAgICB2YWx1ZSA9IHRoaXMuY29tcHV0ZSgpO1xuICAgICAgfVxuXG4gICAgICBpZiAoTkFUSVZFX1RPVUNIX0FDVElPTiAmJiB0aGlzLm1hbmFnZXIuZWxlbWVudC5zdHlsZSAmJiBUT1VDSF9BQ1RJT05fTUFQW3ZhbHVlXSkge1xuICAgICAgICB0aGlzLm1hbmFnZXIuZWxlbWVudC5zdHlsZVtQUkVGSVhFRF9UT1VDSF9BQ1RJT05dID0gdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuYWN0aW9ucyA9IHZhbHVlLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBqdXN0IHJlLXNldCB0aGUgdG91Y2hBY3Rpb24gdmFsdWVcbiAgICAgKi9cbiAgICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZSgpIHtcbiAgICAgIHRoaXMuc2V0KHRoaXMubWFuYWdlci5vcHRpb25zLnRvdWNoQWN0aW9uKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogY29tcHV0ZSB0aGUgdmFsdWUgZm9yIHRoZSB0b3VjaEFjdGlvbiBwcm9wZXJ0eSBiYXNlZCBvbiB0aGUgcmVjb2duaXplcidzIHNldHRpbmdzXG4gICAgICogQHJldHVybnMge1N0cmluZ30gdmFsdWVcbiAgICAgKi9cbiAgICBjb21wdXRlOiBmdW5jdGlvbiBjb21wdXRlKCkge1xuICAgICAgdmFyIGFjdGlvbnMgPSBbXTtcbiAgICAgIGVhY2godGhpcy5tYW5hZ2VyLnJlY29nbml6ZXJzLCBmdW5jdGlvbiAocmVjb2duaXplcikge1xuICAgICAgICBpZiAoYm9vbE9yRm4ocmVjb2duaXplci5vcHRpb25zLmVuYWJsZSwgW3JlY29nbml6ZXJdKSkge1xuICAgICAgICAgIGFjdGlvbnMgPSBhY3Rpb25zLmNvbmNhdChyZWNvZ25pemVyLmdldFRvdWNoQWN0aW9uKCkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBjbGVhblRvdWNoQWN0aW9ucyhhY3Rpb25zLmpvaW4oJyAnKSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbiBlYWNoIGlucHV0IGN5Y2xlIGFuZCBwcm92aWRlcyB0aGUgcHJldmVudGluZyBvZiB0aGUgYnJvd3NlciBiZWhhdmlvclxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICAgICAqL1xuICAgIHByZXZlbnREZWZhdWx0czogZnVuY3Rpb24gcHJldmVudERlZmF1bHRzKGlucHV0KSB7XG4gICAgICB2YXIgc3JjRXZlbnQgPSBpbnB1dC5zcmNFdmVudDtcbiAgICAgIHZhciBkaXJlY3Rpb24gPSBpbnB1dC5vZmZzZXREaXJlY3Rpb247IC8vIGlmIHRoZSB0b3VjaCBhY3Rpb24gZGlkIHByZXZlbnRlZCBvbmNlIHRoaXMgc2Vzc2lvblxuXG4gICAgICBpZiAodGhpcy5tYW5hZ2VyLnNlc3Npb24ucHJldmVudGVkKSB7XG4gICAgICAgIHNyY0V2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIGFjdGlvbnMgPSB0aGlzLmFjdGlvbnM7XG4gICAgICB2YXIgaGFzTm9uZSA9IGluU3RyKGFjdGlvbnMsIFRPVUNIX0FDVElPTl9OT05FKSAmJiAhVE9VQ0hfQUNUSU9OX01BUFtUT1VDSF9BQ1RJT05fTk9ORV07XG4gICAgICB2YXIgaGFzUGFuWSA9IGluU3RyKGFjdGlvbnMsIFRPVUNIX0FDVElPTl9QQU5fWSkgJiYgIVRPVUNIX0FDVElPTl9NQVBbVE9VQ0hfQUNUSU9OX1BBTl9ZXTtcbiAgICAgIHZhciBoYXNQYW5YID0gaW5TdHIoYWN0aW9ucywgVE9VQ0hfQUNUSU9OX1BBTl9YKSAmJiAhVE9VQ0hfQUNUSU9OX01BUFtUT1VDSF9BQ1RJT05fUEFOX1hdO1xuXG4gICAgICBpZiAoaGFzTm9uZSkge1xuICAgICAgICAvL2RvIG5vdCBwcmV2ZW50IGRlZmF1bHRzIGlmIHRoaXMgaXMgYSB0YXAgZ2VzdHVyZVxuICAgICAgICB2YXIgaXNUYXBQb2ludGVyID0gaW5wdXQucG9pbnRlcnMubGVuZ3RoID09PSAxO1xuICAgICAgICB2YXIgaXNUYXBNb3ZlbWVudCA9IGlucHV0LmRpc3RhbmNlIDwgMjtcbiAgICAgICAgdmFyIGlzVGFwVG91Y2hUaW1lID0gaW5wdXQuZGVsdGFUaW1lIDwgMjUwO1xuXG4gICAgICAgIGlmIChpc1RhcFBvaW50ZXIgJiYgaXNUYXBNb3ZlbWVudCAmJiBpc1RhcFRvdWNoVGltZSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaGFzUGFuWCAmJiBoYXNQYW5ZKSB7XG4gICAgICAgIC8vIGBwYW4teCBwYW4teWAgbWVhbnMgYnJvd3NlciBoYW5kbGVzIGFsbCBzY3JvbGxpbmcvcGFubmluZywgZG8gbm90IHByZXZlbnRcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoaGFzTm9uZSB8fCBoYXNQYW5ZICYmIGRpcmVjdGlvbiAmIERJUkVDVElPTl9IT1JJWk9OVEFMIHx8IGhhc1BhblggJiYgZGlyZWN0aW9uICYgRElSRUNUSU9OX1ZFUlRJQ0FMKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByZXZlbnRTcmMoc3JjRXZlbnQpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBjYWxsIHByZXZlbnREZWZhdWx0IHRvIHByZXZlbnQgdGhlIGJyb3dzZXIncyBkZWZhdWx0IGJlaGF2aW9yIChzY3JvbGxpbmcgaW4gbW9zdCBjYXNlcylcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc3JjRXZlbnRcbiAgICAgKi9cbiAgICBwcmV2ZW50U3JjOiBmdW5jdGlvbiBwcmV2ZW50U3JjKHNyY0V2ZW50KSB7XG4gICAgICB0aGlzLm1hbmFnZXIuc2Vzc2lvbi5wcmV2ZW50ZWQgPSB0cnVlO1xuICAgICAgc3JjRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiB3aGVuIHRoZSB0b3VjaEFjdGlvbnMgYXJlIGNvbGxlY3RlZCB0aGV5IGFyZSBub3QgYSB2YWxpZCB2YWx1ZSwgc28gd2UgbmVlZCB0byBjbGVhbiB0aGluZ3MgdXAuICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IGFjdGlvbnNcbiAgICogQHJldHVybnMgeyp9XG4gICAqL1xuXG4gIGZ1bmN0aW9uIGNsZWFuVG91Y2hBY3Rpb25zKGFjdGlvbnMpIHtcbiAgICAvLyBub25lXG4gICAgaWYgKGluU3RyKGFjdGlvbnMsIFRPVUNIX0FDVElPTl9OT05FKSkge1xuICAgICAgcmV0dXJuIFRPVUNIX0FDVElPTl9OT05FO1xuICAgIH1cblxuICAgIHZhciBoYXNQYW5YID0gaW5TdHIoYWN0aW9ucywgVE9VQ0hfQUNUSU9OX1BBTl9YKTtcbiAgICB2YXIgaGFzUGFuWSA9IGluU3RyKGFjdGlvbnMsIFRPVUNIX0FDVElPTl9QQU5fWSk7IC8vIGlmIGJvdGggcGFuLXggYW5kIHBhbi15IGFyZSBzZXQgKGRpZmZlcmVudCByZWNvZ25pemVyc1xuICAgIC8vIGZvciBkaWZmZXJlbnQgZGlyZWN0aW9ucywgZS5nLiBob3Jpem9udGFsIHBhbiBidXQgdmVydGljYWwgc3dpcGU/KVxuICAgIC8vIHdlIG5lZWQgbm9uZSAoYXMgb3RoZXJ3aXNlIHdpdGggcGFuLXggcGFuLXkgY29tYmluZWQgbm9uZSBvZiB0aGVzZVxuICAgIC8vIHJlY29nbml6ZXJzIHdpbGwgd29yaywgc2luY2UgdGhlIGJyb3dzZXIgd291bGQgaGFuZGxlIGFsbCBwYW5uaW5nXG5cbiAgICBpZiAoaGFzUGFuWCAmJiBoYXNQYW5ZKSB7XG4gICAgICByZXR1cm4gVE9VQ0hfQUNUSU9OX05PTkU7XG4gICAgfSAvLyBwYW4teCBPUiBwYW4teVxuXG5cbiAgICBpZiAoaGFzUGFuWCB8fCBoYXNQYW5ZKSB7XG4gICAgICByZXR1cm4gaGFzUGFuWCA/IFRPVUNIX0FDVElPTl9QQU5fWCA6IFRPVUNIX0FDVElPTl9QQU5fWTtcbiAgICB9IC8vIG1hbmlwdWxhdGlvblxuXG5cbiAgICBpZiAoaW5TdHIoYWN0aW9ucywgVE9VQ0hfQUNUSU9OX01BTklQVUxBVElPTikpIHtcbiAgICAgIHJldHVybiBUT1VDSF9BQ1RJT05fTUFOSVBVTEFUSU9OO1xuICAgIH1cblxuICAgIHJldHVybiBUT1VDSF9BQ1RJT05fQVVUTztcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFRvdWNoQWN0aW9uUHJvcHMoKSB7XG4gICAgaWYgKCFOQVRJVkVfVE9VQ0hfQUNUSU9OKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIHRvdWNoTWFwID0ge307XG4gICAgdmFyIGNzc1N1cHBvcnRzID0gd2luZG93LkNTUyAmJiB3aW5kb3cuQ1NTLnN1cHBvcnRzO1xuICAgIFsnYXV0bycsICdtYW5pcHVsYXRpb24nLCAncGFuLXknLCAncGFuLXgnLCAncGFuLXggcGFuLXknLCAnbm9uZSddLmZvckVhY2goZnVuY3Rpb24gKHZhbCkge1xuICAgICAgLy8gSWYgY3NzLnN1cHBvcnRzIGlzIG5vdCBzdXBwb3J0ZWQgYnV0IHRoZXJlIGlzIG5hdGl2ZSB0b3VjaC1hY3Rpb24gYXNzdW1lIGl0IHN1cHBvcnRzXG4gICAgICAvLyBhbGwgdmFsdWVzLiBUaGlzIGlzIHRoZSBjYXNlIGZvciBJRSAxMCBhbmQgMTEuXG4gICAgICB0b3VjaE1hcFt2YWxdID0gY3NzU3VwcG9ydHMgPyB3aW5kb3cuQ1NTLnN1cHBvcnRzKCd0b3VjaC1hY3Rpb24nLCB2YWwpIDogdHJ1ZTtcbiAgICB9KTtcbiAgICByZXR1cm4gdG91Y2hNYXA7XG4gIH1cbiAgLyoqXG4gICAqIFJlY29nbml6ZXIgZmxvdyBleHBsYWluZWQ7ICpcbiAgICogQWxsIHJlY29nbml6ZXJzIGhhdmUgdGhlIGluaXRpYWwgc3RhdGUgb2YgUE9TU0lCTEUgd2hlbiBhIGlucHV0IHNlc3Npb24gc3RhcnRzLlxuICAgKiBUaGUgZGVmaW5pdGlvbiBvZiBhIGlucHV0IHNlc3Npb24gaXMgZnJvbSB0aGUgZmlyc3QgaW5wdXQgdW50aWwgdGhlIGxhc3QgaW5wdXQsIHdpdGggYWxsIGl0J3MgbW92ZW1lbnQgaW4gaXQuICpcbiAgICogRXhhbXBsZSBzZXNzaW9uIGZvciBtb3VzZS1pbnB1dDogbW91c2Vkb3duIC0+IG1vdXNlbW92ZSAtPiBtb3VzZXVwXG4gICAqXG4gICAqIE9uIGVhY2ggcmVjb2duaXppbmcgY3ljbGUgKHNlZSBNYW5hZ2VyLnJlY29nbml6ZSkgdGhlIC5yZWNvZ25pemUoKSBtZXRob2QgaXMgZXhlY3V0ZWRcbiAgICogd2hpY2ggZGV0ZXJtaW5lcyB3aXRoIHN0YXRlIGl0IHNob3VsZCBiZS5cbiAgICpcbiAgICogSWYgdGhlIHJlY29nbml6ZXIgaGFzIHRoZSBzdGF0ZSBGQUlMRUQsIENBTkNFTExFRCBvciBSRUNPR05JWkVEIChlcXVhbHMgRU5ERUQpLCBpdCBpcyByZXNldCB0b1xuICAgKiBQT1NTSUJMRSB0byBnaXZlIGl0IGFub3RoZXIgY2hhbmdlIG9uIHRoZSBuZXh0IGN5Y2xlLlxuICAgKlxuICAgKiAgICAgICAgICAgICAgIFBvc3NpYmxlXG4gICAqICAgICAgICAgICAgICAgICAgfFxuICAgKiAgICAgICAgICAgICstLS0tLSstLS0tLS0tLS0tLS0tLS0rXG4gICAqICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHxcbiAgICogICAgICArLS0tLS0rLS0tLS0rICAgICAgICAgICAgICAgfFxuICAgKiAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICB8XG4gICAqICAgRmFpbGVkICAgICAgQ2FuY2VsbGVkICAgICAgICAgIHxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tKy0tLS0tLStcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIHxcbiAgICogICAgICAgICAgICAgICAgICAgICAgUmVjb2duaXplZCAgICAgICBCZWdhblxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlZFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbmRlZC9SZWNvZ25pemVkXG4gICAqL1xuXG5cbiAgdmFyIFNUQVRFX1BPU1NJQkxFID0gMTtcbiAgdmFyIFNUQVRFX0JFR0FOID0gMjtcbiAgdmFyIFNUQVRFX0NIQU5HRUQgPSA0O1xuICB2YXIgU1RBVEVfRU5ERUQgPSA4O1xuICB2YXIgU1RBVEVfUkVDT0dOSVpFRCA9IFNUQVRFX0VOREVEO1xuICB2YXIgU1RBVEVfQ0FOQ0VMTEVEID0gMTY7XG4gIHZhciBTVEFURV9GQUlMRUQgPSAzMjtcbiAgLyoqXG4gICAqIFJlY29nbml6ZXJcbiAgICogRXZlcnkgcmVjb2duaXplciBuZWVkcyB0byBleHRlbmQgZnJvbSB0aGlzIGNsYXNzLlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICovXG5cbiAgZnVuY3Rpb24gUmVjb2duaXplcihvcHRpb25zKSB7XG4gICAgdGhpcy5vcHRpb25zID0gYXNzaWduKHt9LCB0aGlzLmRlZmF1bHRzLCBvcHRpb25zIHx8IHt9KTtcbiAgICB0aGlzLmlkID0gdW5pcXVlSWQoKTtcbiAgICB0aGlzLm1hbmFnZXIgPSBudWxsOyAvLyBkZWZhdWx0IGlzIGVuYWJsZSB0cnVlXG5cbiAgICB0aGlzLm9wdGlvbnMuZW5hYmxlID0gaWZVbmRlZmluZWQodGhpcy5vcHRpb25zLmVuYWJsZSwgdHJ1ZSk7XG4gICAgdGhpcy5zdGF0ZSA9IFNUQVRFX1BPU1NJQkxFO1xuICAgIHRoaXMuc2ltdWx0YW5lb3VzID0ge307XG4gICAgdGhpcy5yZXF1aXJlRmFpbCA9IFtdO1xuICB9XG5cbiAgUmVjb2duaXplci5wcm90b3R5cGUgPSB7XG4gICAgLyoqXG4gICAgICogQHZpcnR1YWxcbiAgICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgICAqL1xuICAgIGRlZmF1bHRzOiB7fSxcblxuICAgIC8qKlxuICAgICAqIHNldCBvcHRpb25zXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICAgKiBAcmV0dXJuIHtSZWNvZ25pemVyfVxuICAgICAqL1xuICAgIHNldDogZnVuY3Rpb24gc2V0KG9wdGlvbnMpIHtcbiAgICAgIGFzc2lnbih0aGlzLm9wdGlvbnMsIG9wdGlvbnMpOyAvLyBhbHNvIHVwZGF0ZSB0aGUgdG91Y2hBY3Rpb24sIGluIGNhc2Ugc29tZXRoaW5nIGNoYW5nZWQgYWJvdXQgdGhlIGRpcmVjdGlvbnMvZW5hYmxlZCBzdGF0ZVxuXG4gICAgICB0aGlzLm1hbmFnZXIgJiYgdGhpcy5tYW5hZ2VyLnRvdWNoQWN0aW9uLnVwZGF0ZSgpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIHJlY29nbml6ZSBzaW11bHRhbmVvdXMgd2l0aCBhbiBvdGhlciByZWNvZ25pemVyLlxuICAgICAqIEBwYXJhbSB7UmVjb2duaXplcn0gb3RoZXJSZWNvZ25pemVyXG4gICAgICogQHJldHVybnMge1JlY29nbml6ZXJ9IHRoaXNcbiAgICAgKi9cbiAgICByZWNvZ25pemVXaXRoOiBmdW5jdGlvbiByZWNvZ25pemVXaXRoKG90aGVyUmVjb2duaXplcikge1xuICAgICAgaWYgKGludm9rZUFycmF5QXJnKG90aGVyUmVjb2duaXplciwgJ3JlY29nbml6ZVdpdGgnLCB0aGlzKSkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cblxuICAgICAgdmFyIHNpbXVsdGFuZW91cyA9IHRoaXMuc2ltdWx0YW5lb3VzO1xuICAgICAgb3RoZXJSZWNvZ25pemVyID0gZ2V0UmVjb2duaXplckJ5TmFtZUlmTWFuYWdlcihvdGhlclJlY29nbml6ZXIsIHRoaXMpO1xuXG4gICAgICBpZiAoIXNpbXVsdGFuZW91c1tvdGhlclJlY29nbml6ZXIuaWRdKSB7XG4gICAgICAgIHNpbXVsdGFuZW91c1tvdGhlclJlY29nbml6ZXIuaWRdID0gb3RoZXJSZWNvZ25pemVyO1xuICAgICAgICBvdGhlclJlY29nbml6ZXIucmVjb2duaXplV2l0aCh0aGlzKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIGRyb3AgdGhlIHNpbXVsdGFuZW91cyBsaW5rLiBpdCBkb2VzbnQgcmVtb3ZlIHRoZSBsaW5rIG9uIHRoZSBvdGhlciByZWNvZ25pemVyLlxuICAgICAqIEBwYXJhbSB7UmVjb2duaXplcn0gb3RoZXJSZWNvZ25pemVyXG4gICAgICogQHJldHVybnMge1JlY29nbml6ZXJ9IHRoaXNcbiAgICAgKi9cbiAgICBkcm9wUmVjb2duaXplV2l0aDogZnVuY3Rpb24gZHJvcFJlY29nbml6ZVdpdGgob3RoZXJSZWNvZ25pemVyKSB7XG4gICAgICBpZiAoaW52b2tlQXJyYXlBcmcob3RoZXJSZWNvZ25pemVyLCAnZHJvcFJlY29nbml6ZVdpdGgnLCB0aGlzKSkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cblxuICAgICAgb3RoZXJSZWNvZ25pemVyID0gZ2V0UmVjb2duaXplckJ5TmFtZUlmTWFuYWdlcihvdGhlclJlY29nbml6ZXIsIHRoaXMpO1xuICAgICAgZGVsZXRlIHRoaXMuc2ltdWx0YW5lb3VzW290aGVyUmVjb2duaXplci5pZF07XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogcmVjb2duaXplciBjYW4gb25seSBydW4gd2hlbiBhbiBvdGhlciBpcyBmYWlsaW5nXG4gICAgICogQHBhcmFtIHtSZWNvZ25pemVyfSBvdGhlclJlY29nbml6ZXJcbiAgICAgKiBAcmV0dXJucyB7UmVjb2duaXplcn0gdGhpc1xuICAgICAqL1xuICAgIHJlcXVpcmVGYWlsdXJlOiBmdW5jdGlvbiByZXF1aXJlRmFpbHVyZShvdGhlclJlY29nbml6ZXIpIHtcbiAgICAgIGlmIChpbnZva2VBcnJheUFyZyhvdGhlclJlY29nbml6ZXIsICdyZXF1aXJlRmFpbHVyZScsIHRoaXMpKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVxdWlyZUZhaWwgPSB0aGlzLnJlcXVpcmVGYWlsO1xuICAgICAgb3RoZXJSZWNvZ25pemVyID0gZ2V0UmVjb2duaXplckJ5TmFtZUlmTWFuYWdlcihvdGhlclJlY29nbml6ZXIsIHRoaXMpO1xuXG4gICAgICBpZiAoaW5BcnJheShyZXF1aXJlRmFpbCwgb3RoZXJSZWNvZ25pemVyKSA9PT0gLTEpIHtcbiAgICAgICAgcmVxdWlyZUZhaWwucHVzaChvdGhlclJlY29nbml6ZXIpO1xuICAgICAgICBvdGhlclJlY29nbml6ZXIucmVxdWlyZUZhaWx1cmUodGhpcyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBkcm9wIHRoZSByZXF1aXJlRmFpbHVyZSBsaW5rLiBpdCBkb2VzIG5vdCByZW1vdmUgdGhlIGxpbmsgb24gdGhlIG90aGVyIHJlY29nbml6ZXIuXG4gICAgICogQHBhcmFtIHtSZWNvZ25pemVyfSBvdGhlclJlY29nbml6ZXJcbiAgICAgKiBAcmV0dXJucyB7UmVjb2duaXplcn0gdGhpc1xuICAgICAqL1xuICAgIGRyb3BSZXF1aXJlRmFpbHVyZTogZnVuY3Rpb24gZHJvcFJlcXVpcmVGYWlsdXJlKG90aGVyUmVjb2duaXplcikge1xuICAgICAgaWYgKGludm9rZUFycmF5QXJnKG90aGVyUmVjb2duaXplciwgJ2Ryb3BSZXF1aXJlRmFpbHVyZScsIHRoaXMpKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuXG4gICAgICBvdGhlclJlY29nbml6ZXIgPSBnZXRSZWNvZ25pemVyQnlOYW1lSWZNYW5hZ2VyKG90aGVyUmVjb2duaXplciwgdGhpcyk7XG4gICAgICB2YXIgaW5kZXggPSBpbkFycmF5KHRoaXMucmVxdWlyZUZhaWwsIG90aGVyUmVjb2duaXplcik7XG5cbiAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgIHRoaXMucmVxdWlyZUZhaWwuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIGhhcyByZXF1aXJlIGZhaWx1cmVzIGJvb2xlYW5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBoYXNSZXF1aXJlRmFpbHVyZXM6IGZ1bmN0aW9uIGhhc1JlcXVpcmVGYWlsdXJlcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlcXVpcmVGYWlsLmxlbmd0aCA+IDA7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIGlmIHRoZSByZWNvZ25pemVyIGNhbiByZWNvZ25pemUgc2ltdWx0YW5lb3VzIHdpdGggYW4gb3RoZXIgcmVjb2duaXplclxuICAgICAqIEBwYXJhbSB7UmVjb2duaXplcn0gb3RoZXJSZWNvZ25pemVyXG4gICAgICogQHJldHVybnMge0Jvb2xlYW59XG4gICAgICovXG4gICAgY2FuUmVjb2duaXplV2l0aDogZnVuY3Rpb24gY2FuUmVjb2duaXplV2l0aChvdGhlclJlY29nbml6ZXIpIHtcbiAgICAgIHJldHVybiAhIXRoaXMuc2ltdWx0YW5lb3VzW290aGVyUmVjb2duaXplci5pZF07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFlvdSBzaG91bGQgdXNlIGB0cnlFbWl0YCBpbnN0ZWFkIG9mIGBlbWl0YCBkaXJlY3RseSB0byBjaGVja1xuICAgICAqIHRoYXQgYWxsIHRoZSBuZWVkZWQgcmVjb2duaXplcnMgaGFzIGZhaWxlZCBiZWZvcmUgZW1pdHRpbmcuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gICAgICovXG4gICAgZW1pdDogZnVuY3Rpb24gZW1pdChpbnB1dCkge1xuICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgdmFyIHN0YXRlID0gdGhpcy5zdGF0ZTtcblxuICAgICAgZnVuY3Rpb24gZW1pdChldmVudCkge1xuICAgICAgICBzZWxmLm1hbmFnZXIuZW1pdChldmVudCwgaW5wdXQpO1xuICAgICAgfSAvLyAncGFuc3RhcnQnIGFuZCAncGFubW92ZSdcblxuXG4gICAgICBpZiAoc3RhdGUgPCBTVEFURV9FTkRFRCkge1xuICAgICAgICBlbWl0KHNlbGYub3B0aW9ucy5ldmVudCArIHN0YXRlU3RyKHN0YXRlKSk7XG4gICAgICB9XG5cbiAgICAgIGVtaXQoc2VsZi5vcHRpb25zLmV2ZW50KTsgLy8gc2ltcGxlICdldmVudE5hbWUnIGV2ZW50c1xuXG4gICAgICBpZiAoaW5wdXQuYWRkaXRpb25hbEV2ZW50KSB7XG4gICAgICAgIC8vIGFkZGl0aW9uYWwgZXZlbnQocGFubGVmdCwgcGFucmlnaHQsIHBpbmNoaW4sIHBpbmNob3V0Li4uKVxuICAgICAgICBlbWl0KGlucHV0LmFkZGl0aW9uYWxFdmVudCk7XG4gICAgICB9IC8vIHBhbmVuZCBhbmQgcGFuY2FuY2VsXG5cblxuICAgICAgaWYgKHN0YXRlID49IFNUQVRFX0VOREVEKSB7XG4gICAgICAgIGVtaXQoc2VsZi5vcHRpb25zLmV2ZW50ICsgc3RhdGVTdHIoc3RhdGUpKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgdGhhdCBhbGwgdGhlIHJlcXVpcmUgZmFpbHVyZSByZWNvZ25pemVycyBoYXMgZmFpbGVkLFxuICAgICAqIGlmIHRydWUsIGl0IGVtaXRzIGEgZ2VzdHVyZSBldmVudCxcbiAgICAgKiBvdGhlcndpc2UsIHNldHVwIHRoZSBzdGF0ZSB0byBGQUlMRUQuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gICAgICovXG4gICAgdHJ5RW1pdDogZnVuY3Rpb24gdHJ5RW1pdChpbnB1dCkge1xuICAgICAgaWYgKHRoaXMuY2FuRW1pdCgpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVtaXQoaW5wdXQpO1xuICAgICAgfSAvLyBpdCdzIGZhaWxpbmcgYW55d2F5XG5cblxuICAgICAgdGhpcy5zdGF0ZSA9IFNUQVRFX0ZBSUxFRDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogY2FuIHdlIGVtaXQ/XG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICovXG4gICAgY2FuRW1pdDogZnVuY3Rpb24gY2FuRW1pdCgpIHtcbiAgICAgIHZhciBpID0gMDtcblxuICAgICAgd2hpbGUgKGkgPCB0aGlzLnJlcXVpcmVGYWlsLmxlbmd0aCkge1xuICAgICAgICBpZiAoISh0aGlzLnJlcXVpcmVGYWlsW2ldLnN0YXRlICYgKFNUQVRFX0ZBSUxFRCB8IFNUQVRFX1BPU1NJQkxFKSkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpKys7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiB1cGRhdGUgdGhlIHJlY29nbml6ZXJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXREYXRhXG4gICAgICovXG4gICAgcmVjb2duaXplOiBmdW5jdGlvbiByZWNvZ25pemUoaW5wdXREYXRhKSB7XG4gICAgICAvLyBtYWtlIGEgbmV3IGNvcHkgb2YgdGhlIGlucHV0RGF0YVxuICAgICAgLy8gc28gd2UgY2FuIGNoYW5nZSB0aGUgaW5wdXREYXRhIHdpdGhvdXQgbWVzc2luZyB1cCB0aGUgb3RoZXIgcmVjb2duaXplcnNcbiAgICAgIHZhciBpbnB1dERhdGFDbG9uZSA9IGFzc2lnbih7fSwgaW5wdXREYXRhKTsgLy8gaXMgaXMgZW5hYmxlZCBhbmQgYWxsb3cgcmVjb2duaXppbmc/XG5cbiAgICAgIGlmICghYm9vbE9yRm4odGhpcy5vcHRpb25zLmVuYWJsZSwgW3RoaXMsIGlucHV0RGF0YUNsb25lXSkpIHtcbiAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgICAgICB0aGlzLnN0YXRlID0gU1RBVEVfRkFJTEVEO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IC8vIHJlc2V0IHdoZW4gd2UndmUgcmVhY2hlZCB0aGUgZW5kXG5cblxuICAgICAgaWYgKHRoaXMuc3RhdGUgJiAoU1RBVEVfUkVDT0dOSVpFRCB8IFNUQVRFX0NBTkNFTExFRCB8IFNUQVRFX0ZBSUxFRCkpIHtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNUQVRFX1BPU1NJQkxFO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnN0YXRlID0gdGhpcy5wcm9jZXNzKGlucHV0RGF0YUNsb25lKTsgLy8gdGhlIHJlY29nbml6ZXIgaGFzIHJlY29nbml6ZWQgYSBnZXN0dXJlXG4gICAgICAvLyBzbyB0cmlnZ2VyIGFuIGV2ZW50XG5cbiAgICAgIGlmICh0aGlzLnN0YXRlICYgKFNUQVRFX0JFR0FOIHwgU1RBVEVfQ0hBTkdFRCB8IFNUQVRFX0VOREVEIHwgU1RBVEVfQ0FOQ0VMTEVEKSkge1xuICAgICAgICB0aGlzLnRyeUVtaXQoaW5wdXREYXRhQ2xvbmUpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiByZXR1cm4gdGhlIHN0YXRlIG9mIHRoZSByZWNvZ25pemVyXG4gICAgICogdGhlIGFjdHVhbCByZWNvZ25pemluZyBoYXBwZW5zIGluIHRoaXMgbWV0aG9kXG4gICAgICogQHZpcnR1YWxcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXREYXRhXG4gICAgICogQHJldHVybnMge0NvbnN0fSBTVEFURVxuICAgICAqL1xuICAgIHByb2Nlc3M6IGZ1bmN0aW9uIHByb2Nlc3MoaW5wdXREYXRhKSB7fSxcbiAgICAvLyBqc2hpbnQgaWdub3JlOmxpbmVcblxuICAgIC8qKlxuICAgICAqIHJldHVybiB0aGUgcHJlZmVycmVkIHRvdWNoLWFjdGlvblxuICAgICAqIEB2aXJ0dWFsXG4gICAgICogQHJldHVybnMge0FycmF5fVxuICAgICAqL1xuICAgIGdldFRvdWNoQWN0aW9uOiBmdW5jdGlvbiBnZXRUb3VjaEFjdGlvbigpIHt9LFxuXG4gICAgLyoqXG4gICAgICogY2FsbGVkIHdoZW4gdGhlIGdlc3R1cmUgaXNuJ3QgYWxsb3dlZCB0byByZWNvZ25pemVcbiAgICAgKiBsaWtlIHdoZW4gYW5vdGhlciBpcyBiZWluZyByZWNvZ25pemVkIG9yIGl0IGlzIGRpc2FibGVkXG4gICAgICogQHZpcnR1YWxcbiAgICAgKi9cbiAgICByZXNldDogZnVuY3Rpb24gcmVzZXQoKSB7fVxuICB9O1xuICAvKipcbiAgICogZ2V0IGEgdXNhYmxlIHN0cmluZywgdXNlZCBhcyBldmVudCBwb3N0Zml4XG4gICAqIEBwYXJhbSB7Q29uc3R9IHN0YXRlXG4gICAqIEByZXR1cm5zIHtTdHJpbmd9IHN0YXRlXG4gICAqL1xuXG4gIGZ1bmN0aW9uIHN0YXRlU3RyKHN0YXRlKSB7XG4gICAgaWYgKHN0YXRlICYgU1RBVEVfQ0FOQ0VMTEVEKSB7XG4gICAgICByZXR1cm4gJ2NhbmNlbCc7XG4gICAgfSBlbHNlIGlmIChzdGF0ZSAmIFNUQVRFX0VOREVEKSB7XG4gICAgICByZXR1cm4gJ2VuZCc7XG4gICAgfSBlbHNlIGlmIChzdGF0ZSAmIFNUQVRFX0NIQU5HRUQpIHtcbiAgICAgIHJldHVybiAnbW92ZSc7XG4gICAgfSBlbHNlIGlmIChzdGF0ZSAmIFNUQVRFX0JFR0FOKSB7XG4gICAgICByZXR1cm4gJ3N0YXJ0JztcbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgLyoqXG4gICAqIGRpcmVjdGlvbiBjb25zIHRvIHN0cmluZ1xuICAgKiBAcGFyYW0ge0NvbnN0fSBkaXJlY3Rpb25cbiAgICogQHJldHVybnMge1N0cmluZ31cbiAgICovXG5cblxuICBmdW5jdGlvbiBkaXJlY3Rpb25TdHIoZGlyZWN0aW9uKSB7XG4gICAgaWYgKGRpcmVjdGlvbiA9PSBESVJFQ1RJT05fRE9XTikge1xuICAgICAgcmV0dXJuICdkb3duJztcbiAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PSBESVJFQ1RJT05fVVApIHtcbiAgICAgIHJldHVybiAndXAnO1xuICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09IERJUkVDVElPTl9MRUZUKSB7XG4gICAgICByZXR1cm4gJ2xlZnQnO1xuICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09IERJUkVDVElPTl9SSUdIVCkge1xuICAgICAgcmV0dXJuICdyaWdodCc7XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xuICB9XG4gIC8qKlxuICAgKiBnZXQgYSByZWNvZ25pemVyIGJ5IG5hbWUgaWYgaXQgaXMgYm91bmQgdG8gYSBtYW5hZ2VyXG4gICAqIEBwYXJhbSB7UmVjb2duaXplcnxTdHJpbmd9IG90aGVyUmVjb2duaXplclxuICAgKiBAcGFyYW0ge1JlY29nbml6ZXJ9IHJlY29nbml6ZXJcbiAgICogQHJldHVybnMge1JlY29nbml6ZXJ9XG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gZ2V0UmVjb2duaXplckJ5TmFtZUlmTWFuYWdlcihvdGhlclJlY29nbml6ZXIsIHJlY29nbml6ZXIpIHtcbiAgICB2YXIgbWFuYWdlciA9IHJlY29nbml6ZXIubWFuYWdlcjtcblxuICAgIGlmIChtYW5hZ2VyKSB7XG4gICAgICByZXR1cm4gbWFuYWdlci5nZXQob3RoZXJSZWNvZ25pemVyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3RoZXJSZWNvZ25pemVyO1xuICB9XG4gIC8qKlxuICAgKiBUaGlzIHJlY29nbml6ZXIgaXMganVzdCB1c2VkIGFzIGEgYmFzZSBmb3IgdGhlIHNpbXBsZSBhdHRyaWJ1dGUgcmVjb2duaXplcnMuXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAZXh0ZW5kcyBSZWNvZ25pemVyXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gQXR0clJlY29nbml6ZXIoKSB7XG4gICAgUmVjb2duaXplci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgaW5oZXJpdChBdHRyUmVjb2duaXplciwgUmVjb2duaXplciwge1xuICAgIC8qKlxuICAgICAqIEBuYW1lc3BhY2VcbiAgICAgKiBAbWVtYmVyb2YgQXR0clJlY29nbml6ZXJcbiAgICAgKi9cbiAgICBkZWZhdWx0czoge1xuICAgICAgLyoqXG4gICAgICAgKiBAdHlwZSB7TnVtYmVyfVxuICAgICAgICogQGRlZmF1bHQgMVxuICAgICAgICovXG4gICAgICBwb2ludGVyczogMVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGNoZWNrIGlmIGl0IHRoZSByZWNvZ25pemVyIHJlY2VpdmVzIHZhbGlkIGlucHV0LCBsaWtlIGlucHV0LmRpc3RhbmNlID4gMTAuXG4gICAgICogQG1lbWJlcm9mIEF0dHJSZWNvZ25pemVyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gICAgICogQHJldHVybnMge0Jvb2xlYW59IHJlY29nbml6ZWRcbiAgICAgKi9cbiAgICBhdHRyVGVzdDogZnVuY3Rpb24gYXR0clRlc3QoaW5wdXQpIHtcbiAgICAgIHZhciBvcHRpb25Qb2ludGVycyA9IHRoaXMub3B0aW9ucy5wb2ludGVycztcbiAgICAgIHJldHVybiBvcHRpb25Qb2ludGVycyA9PT0gMCB8fCBpbnB1dC5wb2ludGVycy5sZW5ndGggPT09IG9wdGlvblBvaW50ZXJzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBQcm9jZXNzIHRoZSBpbnB1dCBhbmQgcmV0dXJuIHRoZSBzdGF0ZSBmb3IgdGhlIHJlY29nbml6ZXJcbiAgICAgKiBAbWVtYmVyb2YgQXR0clJlY29nbml6ZXJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXRcbiAgICAgKiBAcmV0dXJucyB7Kn0gU3RhdGVcbiAgICAgKi9cbiAgICBwcm9jZXNzOiBmdW5jdGlvbiBwcm9jZXNzKGlucHV0KSB7XG4gICAgICB2YXIgc3RhdGUgPSB0aGlzLnN0YXRlO1xuICAgICAgdmFyIGV2ZW50VHlwZSA9IGlucHV0LmV2ZW50VHlwZTtcbiAgICAgIHZhciBpc1JlY29nbml6ZWQgPSBzdGF0ZSAmIChTVEFURV9CRUdBTiB8IFNUQVRFX0NIQU5HRUQpO1xuICAgICAgdmFyIGlzVmFsaWQgPSB0aGlzLmF0dHJUZXN0KGlucHV0KTsgLy8gb24gY2FuY2VsIGlucHV0IGFuZCB3ZSd2ZSByZWNvZ25pemVkIGJlZm9yZSwgcmV0dXJuIFNUQVRFX0NBTkNFTExFRFxuXG4gICAgICBpZiAoaXNSZWNvZ25pemVkICYmIChldmVudFR5cGUgJiBJTlBVVF9DQU5DRUwgfHwgIWlzVmFsaWQpKSB7XG4gICAgICAgIHJldHVybiBzdGF0ZSB8IFNUQVRFX0NBTkNFTExFRDtcbiAgICAgIH0gZWxzZSBpZiAoaXNSZWNvZ25pemVkIHx8IGlzVmFsaWQpIHtcbiAgICAgICAgaWYgKGV2ZW50VHlwZSAmIElOUFVUX0VORCkge1xuICAgICAgICAgIHJldHVybiBzdGF0ZSB8IFNUQVRFX0VOREVEO1xuICAgICAgICB9IGVsc2UgaWYgKCEoc3RhdGUgJiBTVEFURV9CRUdBTikpIHtcbiAgICAgICAgICByZXR1cm4gU1RBVEVfQkVHQU47XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3RhdGUgfCBTVEFURV9DSEFOR0VEO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gU1RBVEVfRkFJTEVEO1xuICAgIH1cbiAgfSk7XG4gIC8qKlxuICAgKiBQYW5cbiAgICogUmVjb2duaXplZCB3aGVuIHRoZSBwb2ludGVyIGlzIGRvd24gYW5kIG1vdmVkIGluIHRoZSBhbGxvd2VkIGRpcmVjdGlvbi5cbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBleHRlbmRzIEF0dHJSZWNvZ25pemVyXG4gICAqL1xuXG4gIGZ1bmN0aW9uIFBhblJlY29nbml6ZXIoKSB7XG4gICAgQXR0clJlY29nbml6ZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB0aGlzLnBYID0gbnVsbDtcbiAgICB0aGlzLnBZID0gbnVsbDtcbiAgfVxuXG4gIGluaGVyaXQoUGFuUmVjb2duaXplciwgQXR0clJlY29nbml6ZXIsIHtcbiAgICAvKipcbiAgICAgKiBAbmFtZXNwYWNlXG4gICAgICogQG1lbWJlcm9mIFBhblJlY29nbml6ZXJcbiAgICAgKi9cbiAgICBkZWZhdWx0czoge1xuICAgICAgZXZlbnQ6ICdwYW4nLFxuICAgICAgdGhyZXNob2xkOiAxMCxcbiAgICAgIHBvaW50ZXJzOiAxLFxuICAgICAgZGlyZWN0aW9uOiBESVJFQ1RJT05fQUxMXG4gICAgfSxcbiAgICBnZXRUb3VjaEFjdGlvbjogZnVuY3Rpb24gZ2V0VG91Y2hBY3Rpb24oKSB7XG4gICAgICB2YXIgZGlyZWN0aW9uID0gdGhpcy5vcHRpb25zLmRpcmVjdGlvbjtcbiAgICAgIHZhciBhY3Rpb25zID0gW107XG5cbiAgICAgIGlmIChkaXJlY3Rpb24gJiBESVJFQ1RJT05fSE9SSVpPTlRBTCkge1xuICAgICAgICBhY3Rpb25zLnB1c2goVE9VQ0hfQUNUSU9OX1BBTl9ZKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRpcmVjdGlvbiAmIERJUkVDVElPTl9WRVJUSUNBTCkge1xuICAgICAgICBhY3Rpb25zLnB1c2goVE9VQ0hfQUNUSU9OX1BBTl9YKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFjdGlvbnM7XG4gICAgfSxcbiAgICBkaXJlY3Rpb25UZXN0OiBmdW5jdGlvbiBkaXJlY3Rpb25UZXN0KGlucHV0KSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICAgIHZhciBoYXNNb3ZlZCA9IHRydWU7XG4gICAgICB2YXIgZGlzdGFuY2UgPSBpbnB1dC5kaXN0YW5jZTtcbiAgICAgIHZhciBkaXJlY3Rpb24gPSBpbnB1dC5kaXJlY3Rpb247XG4gICAgICB2YXIgeCA9IGlucHV0LmRlbHRhWDtcbiAgICAgIHZhciB5ID0gaW5wdXQuZGVsdGFZOyAvLyBsb2NrIHRvIGF4aXM/XG5cbiAgICAgIGlmICghKGRpcmVjdGlvbiAmIG9wdGlvbnMuZGlyZWN0aW9uKSkge1xuICAgICAgICBpZiAob3B0aW9ucy5kaXJlY3Rpb24gJiBESVJFQ1RJT05fSE9SSVpPTlRBTCkge1xuICAgICAgICAgIGRpcmVjdGlvbiA9IHggPT09IDAgPyBESVJFQ1RJT05fTk9ORSA6IHggPCAwID8gRElSRUNUSU9OX0xFRlQgOiBESVJFQ1RJT05fUklHSFQ7XG4gICAgICAgICAgaGFzTW92ZWQgPSB4ICE9IHRoaXMucFg7XG4gICAgICAgICAgZGlzdGFuY2UgPSBNYXRoLmFicyhpbnB1dC5kZWx0YVgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRpcmVjdGlvbiA9IHkgPT09IDAgPyBESVJFQ1RJT05fTk9ORSA6IHkgPCAwID8gRElSRUNUSU9OX1VQIDogRElSRUNUSU9OX0RPV047XG4gICAgICAgICAgaGFzTW92ZWQgPSB5ICE9IHRoaXMucFk7XG4gICAgICAgICAgZGlzdGFuY2UgPSBNYXRoLmFicyhpbnB1dC5kZWx0YVkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlucHV0LmRpcmVjdGlvbiA9IGRpcmVjdGlvbjtcbiAgICAgIHJldHVybiBoYXNNb3ZlZCAmJiBkaXN0YW5jZSA+IG9wdGlvbnMudGhyZXNob2xkICYmIGRpcmVjdGlvbiAmIG9wdGlvbnMuZGlyZWN0aW9uO1xuICAgIH0sXG4gICAgYXR0clRlc3Q6IGZ1bmN0aW9uIGF0dHJUZXN0KGlucHV0KSB7XG4gICAgICByZXR1cm4gQXR0clJlY29nbml6ZXIucHJvdG90eXBlLmF0dHJUZXN0LmNhbGwodGhpcywgaW5wdXQpICYmICh0aGlzLnN0YXRlICYgU1RBVEVfQkVHQU4gfHwgISh0aGlzLnN0YXRlICYgU1RBVEVfQkVHQU4pICYmIHRoaXMuZGlyZWN0aW9uVGVzdChpbnB1dCkpO1xuICAgIH0sXG4gICAgZW1pdDogZnVuY3Rpb24gZW1pdChpbnB1dCkge1xuICAgICAgdGhpcy5wWCA9IGlucHV0LmRlbHRhWDtcbiAgICAgIHRoaXMucFkgPSBpbnB1dC5kZWx0YVk7XG4gICAgICB2YXIgZGlyZWN0aW9uID0gZGlyZWN0aW9uU3RyKGlucHV0LmRpcmVjdGlvbik7XG5cbiAgICAgIGlmIChkaXJlY3Rpb24pIHtcbiAgICAgICAgaW5wdXQuYWRkaXRpb25hbEV2ZW50ID0gdGhpcy5vcHRpb25zLmV2ZW50ICsgZGlyZWN0aW9uO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9zdXBlci5lbWl0LmNhbGwodGhpcywgaW5wdXQpO1xuICAgIH1cbiAgfSk7XG4gIC8qKlxuICAgKiBQaW5jaFxuICAgKiBSZWNvZ25pemVkIHdoZW4gdHdvIG9yIG1vcmUgcG9pbnRlcnMgYXJlIG1vdmluZyB0b3dhcmQgKHpvb20taW4pIG9yIGF3YXkgZnJvbSBlYWNoIG90aGVyICh6b29tLW91dCkuXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAZXh0ZW5kcyBBdHRyUmVjb2duaXplclxuICAgKi9cblxuICBmdW5jdGlvbiBQaW5jaFJlY29nbml6ZXIoKSB7XG4gICAgQXR0clJlY29nbml6ZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIGluaGVyaXQoUGluY2hSZWNvZ25pemVyLCBBdHRyUmVjb2duaXplciwge1xuICAgIC8qKlxuICAgICAqIEBuYW1lc3BhY2VcbiAgICAgKiBAbWVtYmVyb2YgUGluY2hSZWNvZ25pemVyXG4gICAgICovXG4gICAgZGVmYXVsdHM6IHtcbiAgICAgIGV2ZW50OiAncGluY2gnLFxuICAgICAgdGhyZXNob2xkOiAwLFxuICAgICAgcG9pbnRlcnM6IDJcbiAgICB9LFxuICAgIGdldFRvdWNoQWN0aW9uOiBmdW5jdGlvbiBnZXRUb3VjaEFjdGlvbigpIHtcbiAgICAgIHJldHVybiBbVE9VQ0hfQUNUSU9OX05PTkVdO1xuICAgIH0sXG4gICAgYXR0clRlc3Q6IGZ1bmN0aW9uIGF0dHJUZXN0KGlucHV0KSB7XG4gICAgICByZXR1cm4gdGhpcy5fc3VwZXIuYXR0clRlc3QuY2FsbCh0aGlzLCBpbnB1dCkgJiYgKE1hdGguYWJzKGlucHV0LnNjYWxlIC0gMSkgPiB0aGlzLm9wdGlvbnMudGhyZXNob2xkIHx8IHRoaXMuc3RhdGUgJiBTVEFURV9CRUdBTik7XG4gICAgfSxcbiAgICBlbWl0OiBmdW5jdGlvbiBlbWl0KGlucHV0KSB7XG4gICAgICBpZiAoaW5wdXQuc2NhbGUgIT09IDEpIHtcbiAgICAgICAgdmFyIGluT3V0ID0gaW5wdXQuc2NhbGUgPCAxID8gJ2luJyA6ICdvdXQnO1xuICAgICAgICBpbnB1dC5hZGRpdGlvbmFsRXZlbnQgPSB0aGlzLm9wdGlvbnMuZXZlbnQgKyBpbk91dDtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fc3VwZXIuZW1pdC5jYWxsKHRoaXMsIGlucHV0KTtcbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogUHJlc3NcbiAgICogUmVjb2duaXplZCB3aGVuIHRoZSBwb2ludGVyIGlzIGRvd24gZm9yIHggbXMgd2l0aG91dCBhbnkgbW92ZW1lbnQuXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAZXh0ZW5kcyBSZWNvZ25pemVyXG4gICAqL1xuXG4gIGZ1bmN0aW9uIFByZXNzUmVjb2duaXplcigpIHtcbiAgICBSZWNvZ25pemVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgdGhpcy5fdGltZXIgPSBudWxsO1xuICAgIHRoaXMuX2lucHV0ID0gbnVsbDtcbiAgfVxuXG4gIGluaGVyaXQoUHJlc3NSZWNvZ25pemVyLCBSZWNvZ25pemVyLCB7XG4gICAgLyoqXG4gICAgICogQG5hbWVzcGFjZVxuICAgICAqIEBtZW1iZXJvZiBQcmVzc1JlY29nbml6ZXJcbiAgICAgKi9cbiAgICBkZWZhdWx0czoge1xuICAgICAgZXZlbnQ6ICdwcmVzcycsXG4gICAgICBwb2ludGVyczogMSxcbiAgICAgIHRpbWU6IDI1MSxcbiAgICAgIC8vIG1pbmltYWwgdGltZSBvZiB0aGUgcG9pbnRlciB0byBiZSBwcmVzc2VkXG4gICAgICB0aHJlc2hvbGQ6IDkgLy8gYSBtaW5pbWFsIG1vdmVtZW50IGlzIG9rLCBidXQga2VlcCBpdCBsb3dcblxuICAgIH0sXG4gICAgZ2V0VG91Y2hBY3Rpb246IGZ1bmN0aW9uIGdldFRvdWNoQWN0aW9uKCkge1xuICAgICAgcmV0dXJuIFtUT1VDSF9BQ1RJT05fQVVUT107XG4gICAgfSxcbiAgICBwcm9jZXNzOiBmdW5jdGlvbiBwcm9jZXNzKGlucHV0KSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICAgIHZhciB2YWxpZFBvaW50ZXJzID0gaW5wdXQucG9pbnRlcnMubGVuZ3RoID09PSBvcHRpb25zLnBvaW50ZXJzO1xuICAgICAgdmFyIHZhbGlkTW92ZW1lbnQgPSBpbnB1dC5kaXN0YW5jZSA8IG9wdGlvbnMudGhyZXNob2xkO1xuICAgICAgdmFyIHZhbGlkVGltZSA9IGlucHV0LmRlbHRhVGltZSA+IG9wdGlvbnMudGltZTtcbiAgICAgIHRoaXMuX2lucHV0ID0gaW5wdXQ7IC8vIHdlIG9ubHkgYWxsb3cgbGl0dGxlIG1vdmVtZW50XG4gICAgICAvLyBhbmQgd2UndmUgcmVhY2hlZCBhbiBlbmQgZXZlbnQsIHNvIGEgdGFwIGlzIHBvc3NpYmxlXG5cbiAgICAgIGlmICghdmFsaWRNb3ZlbWVudCB8fCAhdmFsaWRQb2ludGVycyB8fCBpbnB1dC5ldmVudFR5cGUgJiAoSU5QVVRfRU5EIHwgSU5QVVRfQ0FOQ0VMKSAmJiAhdmFsaWRUaW1lKSB7XG4gICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgIH0gZWxzZSBpZiAoaW5wdXQuZXZlbnRUeXBlICYgSU5QVVRfU1RBUlQpIHtcbiAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgICAgICB0aGlzLl90aW1lciA9IHNldFRpbWVvdXRDb250ZXh0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB0aGlzLnN0YXRlID0gU1RBVEVfUkVDT0dOSVpFRDtcbiAgICAgICAgICB0aGlzLnRyeUVtaXQoKTtcbiAgICAgICAgfSwgb3B0aW9ucy50aW1lLCB0aGlzKTtcbiAgICAgIH0gZWxzZSBpZiAoaW5wdXQuZXZlbnRUeXBlICYgSU5QVVRfRU5EKSB7XG4gICAgICAgIHJldHVybiBTVEFURV9SRUNPR05JWkVEO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gU1RBVEVfRkFJTEVEO1xuICAgIH0sXG4gICAgcmVzZXQ6IGZ1bmN0aW9uIHJlc2V0KCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyKTtcbiAgICB9LFxuICAgIGVtaXQ6IGZ1bmN0aW9uIGVtaXQoaW5wdXQpIHtcbiAgICAgIGlmICh0aGlzLnN0YXRlICE9PSBTVEFURV9SRUNPR05JWkVEKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGlucHV0ICYmIGlucHV0LmV2ZW50VHlwZSAmIElOUFVUX0VORCkge1xuICAgICAgICB0aGlzLm1hbmFnZXIuZW1pdCh0aGlzLm9wdGlvbnMuZXZlbnQgKyAndXAnLCBpbnB1dCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9pbnB1dC50aW1lU3RhbXAgPSBub3coKTtcbiAgICAgICAgdGhpcy5tYW5hZ2VyLmVtaXQodGhpcy5vcHRpb25zLmV2ZW50LCB0aGlzLl9pbnB1dCk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgLyoqXG4gICAqIFJvdGF0ZVxuICAgKiBSZWNvZ25pemVkIHdoZW4gdHdvIG9yIG1vcmUgcG9pbnRlciBhcmUgbW92aW5nIGluIGEgY2lyY3VsYXIgbW90aW9uLlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQGV4dGVuZHMgQXR0clJlY29nbml6ZXJcbiAgICovXG5cbiAgZnVuY3Rpb24gUm90YXRlUmVjb2duaXplcigpIHtcbiAgICBBdHRyUmVjb2duaXplci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgaW5oZXJpdChSb3RhdGVSZWNvZ25pemVyLCBBdHRyUmVjb2duaXplciwge1xuICAgIC8qKlxuICAgICAqIEBuYW1lc3BhY2VcbiAgICAgKiBAbWVtYmVyb2YgUm90YXRlUmVjb2duaXplclxuICAgICAqL1xuICAgIGRlZmF1bHRzOiB7XG4gICAgICBldmVudDogJ3JvdGF0ZScsXG4gICAgICB0aHJlc2hvbGQ6IDAsXG4gICAgICBwb2ludGVyczogMlxuICAgIH0sXG4gICAgZ2V0VG91Y2hBY3Rpb246IGZ1bmN0aW9uIGdldFRvdWNoQWN0aW9uKCkge1xuICAgICAgcmV0dXJuIFtUT1VDSF9BQ1RJT05fTk9ORV07XG4gICAgfSxcbiAgICBhdHRyVGVzdDogZnVuY3Rpb24gYXR0clRlc3QoaW5wdXQpIHtcbiAgICAgIHJldHVybiB0aGlzLl9zdXBlci5hdHRyVGVzdC5jYWxsKHRoaXMsIGlucHV0KSAmJiAoTWF0aC5hYnMoaW5wdXQucm90YXRpb24pID4gdGhpcy5vcHRpb25zLnRocmVzaG9sZCB8fCB0aGlzLnN0YXRlICYgU1RBVEVfQkVHQU4pO1xuICAgIH1cbiAgfSk7XG4gIC8qKlxuICAgKiBTd2lwZVxuICAgKiBSZWNvZ25pemVkIHdoZW4gdGhlIHBvaW50ZXIgaXMgbW92aW5nIGZhc3QgKHZlbG9jaXR5KSwgd2l0aCBlbm91Z2ggZGlzdGFuY2UgaW4gdGhlIGFsbG93ZWQgZGlyZWN0aW9uLlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQGV4dGVuZHMgQXR0clJlY29nbml6ZXJcbiAgICovXG5cbiAgZnVuY3Rpb24gU3dpcGVSZWNvZ25pemVyKCkge1xuICAgIEF0dHJSZWNvZ25pemVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBpbmhlcml0KFN3aXBlUmVjb2duaXplciwgQXR0clJlY29nbml6ZXIsIHtcbiAgICAvKipcbiAgICAgKiBAbmFtZXNwYWNlXG4gICAgICogQG1lbWJlcm9mIFN3aXBlUmVjb2duaXplclxuICAgICAqL1xuICAgIGRlZmF1bHRzOiB7XG4gICAgICBldmVudDogJ3N3aXBlJyxcbiAgICAgIHRocmVzaG9sZDogMTAsXG4gICAgICB2ZWxvY2l0eTogMC4zLFxuICAgICAgZGlyZWN0aW9uOiBESVJFQ1RJT05fSE9SSVpPTlRBTCB8IERJUkVDVElPTl9WRVJUSUNBTCxcbiAgICAgIHBvaW50ZXJzOiAxXG4gICAgfSxcbiAgICBnZXRUb3VjaEFjdGlvbjogZnVuY3Rpb24gZ2V0VG91Y2hBY3Rpb24oKSB7XG4gICAgICByZXR1cm4gUGFuUmVjb2duaXplci5wcm90b3R5cGUuZ2V0VG91Y2hBY3Rpb24uY2FsbCh0aGlzKTtcbiAgICB9LFxuICAgIGF0dHJUZXN0OiBmdW5jdGlvbiBhdHRyVGVzdChpbnB1dCkge1xuICAgICAgdmFyIGRpcmVjdGlvbiA9IHRoaXMub3B0aW9ucy5kaXJlY3Rpb247XG4gICAgICB2YXIgdmVsb2NpdHk7XG5cbiAgICAgIGlmIChkaXJlY3Rpb24gJiAoRElSRUNUSU9OX0hPUklaT05UQUwgfCBESVJFQ1RJT05fVkVSVElDQUwpKSB7XG4gICAgICAgIHZlbG9jaXR5ID0gaW5wdXQub3ZlcmFsbFZlbG9jaXR5O1xuICAgICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gJiBESVJFQ1RJT05fSE9SSVpPTlRBTCkge1xuICAgICAgICB2ZWxvY2l0eSA9IGlucHV0Lm92ZXJhbGxWZWxvY2l0eVg7XG4gICAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiAmIERJUkVDVElPTl9WRVJUSUNBTCkge1xuICAgICAgICB2ZWxvY2l0eSA9IGlucHV0Lm92ZXJhbGxWZWxvY2l0eVk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLl9zdXBlci5hdHRyVGVzdC5jYWxsKHRoaXMsIGlucHV0KSAmJiBkaXJlY3Rpb24gJiBpbnB1dC5vZmZzZXREaXJlY3Rpb24gJiYgaW5wdXQuZGlzdGFuY2UgPiB0aGlzLm9wdGlvbnMudGhyZXNob2xkICYmIGlucHV0Lm1heFBvaW50ZXJzID09IHRoaXMub3B0aW9ucy5wb2ludGVycyAmJiBhYnModmVsb2NpdHkpID4gdGhpcy5vcHRpb25zLnZlbG9jaXR5ICYmIGlucHV0LmV2ZW50VHlwZSAmIElOUFVUX0VORDtcbiAgICB9LFxuICAgIGVtaXQ6IGZ1bmN0aW9uIGVtaXQoaW5wdXQpIHtcbiAgICAgIHZhciBkaXJlY3Rpb24gPSBkaXJlY3Rpb25TdHIoaW5wdXQub2Zmc2V0RGlyZWN0aW9uKTtcblxuICAgICAgaWYgKGRpcmVjdGlvbikge1xuICAgICAgICB0aGlzLm1hbmFnZXIuZW1pdCh0aGlzLm9wdGlvbnMuZXZlbnQgKyBkaXJlY3Rpb24sIGlucHV0KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5tYW5hZ2VyLmVtaXQodGhpcy5vcHRpb25zLmV2ZW50LCBpbnB1dCk7XG4gICAgfVxuICB9KTtcbiAgLyoqXG4gICAqIEEgdGFwIGlzIGVjb2duaXplZCB3aGVuIHRoZSBwb2ludGVyIGlzIGRvaW5nIGEgc21hbGwgdGFwL2NsaWNrLiBNdWx0aXBsZSB0YXBzIGFyZSByZWNvZ25pemVkIGlmIHRoZXkgb2NjdXJcbiAgICogYmV0d2VlbiB0aGUgZ2l2ZW4gaW50ZXJ2YWwgYW5kIHBvc2l0aW9uLiBUaGUgZGVsYXkgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHJlY29nbml6ZSBtdWx0aS10YXBzIHdpdGhvdXQgZmlyaW5nXG4gICAqIGEgc2luZ2xlIHRhcC5cbiAgICpcbiAgICogVGhlIGV2ZW50RGF0YSBmcm9tIHRoZSBlbWl0dGVkIGV2ZW50IGNvbnRhaW5zIHRoZSBwcm9wZXJ0eSBgdGFwQ291bnRgLCB3aGljaCBjb250YWlucyB0aGUgYW1vdW50IG9mXG4gICAqIG11bHRpLXRhcHMgYmVpbmcgcmVjb2duaXplZC5cbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBleHRlbmRzIFJlY29nbml6ZXJcbiAgICovXG5cbiAgZnVuY3Rpb24gVGFwUmVjb2duaXplcigpIHtcbiAgICBSZWNvZ25pemVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IC8vIHByZXZpb3VzIHRpbWUgYW5kIGNlbnRlcixcbiAgICAvLyB1c2VkIGZvciB0YXAgY291bnRpbmdcblxuICAgIHRoaXMucFRpbWUgPSBmYWxzZTtcbiAgICB0aGlzLnBDZW50ZXIgPSBmYWxzZTtcbiAgICB0aGlzLl90aW1lciA9IG51bGw7XG4gICAgdGhpcy5faW5wdXQgPSBudWxsO1xuICAgIHRoaXMuY291bnQgPSAwO1xuICB9XG5cbiAgaW5oZXJpdChUYXBSZWNvZ25pemVyLCBSZWNvZ25pemVyLCB7XG4gICAgLyoqXG4gICAgICogQG5hbWVzcGFjZVxuICAgICAqIEBtZW1iZXJvZiBQaW5jaFJlY29nbml6ZXJcbiAgICAgKi9cbiAgICBkZWZhdWx0czoge1xuICAgICAgZXZlbnQ6ICd0YXAnLFxuICAgICAgcG9pbnRlcnM6IDEsXG4gICAgICB0YXBzOiAxLFxuICAgICAgaW50ZXJ2YWw6IDMwMCxcbiAgICAgIC8vIG1heCB0aW1lIGJldHdlZW4gdGhlIG11bHRpLXRhcCB0YXBzXG4gICAgICB0aW1lOiAyNTAsXG4gICAgICAvLyBtYXggdGltZSBvZiB0aGUgcG9pbnRlciB0byBiZSBkb3duIChsaWtlIGZpbmdlciBvbiB0aGUgc2NyZWVuKVxuICAgICAgdGhyZXNob2xkOiA5LFxuICAgICAgLy8gYSBtaW5pbWFsIG1vdmVtZW50IGlzIG9rLCBidXQga2VlcCBpdCBsb3dcbiAgICAgIHBvc1RocmVzaG9sZDogMTAgLy8gYSBtdWx0aS10YXAgY2FuIGJlIGEgYml0IG9mZiB0aGUgaW5pdGlhbCBwb3NpdGlvblxuXG4gICAgfSxcbiAgICBnZXRUb3VjaEFjdGlvbjogZnVuY3Rpb24gZ2V0VG91Y2hBY3Rpb24oKSB7XG4gICAgICByZXR1cm4gW1RPVUNIX0FDVElPTl9NQU5JUFVMQVRJT05dO1xuICAgIH0sXG4gICAgcHJvY2VzczogZnVuY3Rpb24gcHJvY2VzcyhpbnB1dCkge1xuICAgICAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICB2YXIgdmFsaWRQb2ludGVycyA9IGlucHV0LnBvaW50ZXJzLmxlbmd0aCA9PT0gb3B0aW9ucy5wb2ludGVycztcbiAgICAgIHZhciB2YWxpZE1vdmVtZW50ID0gaW5wdXQuZGlzdGFuY2UgPCBvcHRpb25zLnRocmVzaG9sZDtcbiAgICAgIHZhciB2YWxpZFRvdWNoVGltZSA9IGlucHV0LmRlbHRhVGltZSA8IG9wdGlvbnMudGltZTtcbiAgICAgIHRoaXMucmVzZXQoKTtcblxuICAgICAgaWYgKGlucHV0LmV2ZW50VHlwZSAmIElOUFVUX1NUQVJUICYmIHRoaXMuY291bnQgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmFpbFRpbWVvdXQoKTtcbiAgICAgIH0gLy8gd2Ugb25seSBhbGxvdyBsaXR0bGUgbW92ZW1lbnRcbiAgICAgIC8vIGFuZCB3ZSd2ZSByZWFjaGVkIGFuIGVuZCBldmVudCwgc28gYSB0YXAgaXMgcG9zc2libGVcblxuXG4gICAgICBpZiAodmFsaWRNb3ZlbWVudCAmJiB2YWxpZFRvdWNoVGltZSAmJiB2YWxpZFBvaW50ZXJzKSB7XG4gICAgICAgIGlmIChpbnB1dC5ldmVudFR5cGUgIT0gSU5QVVRfRU5EKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZmFpbFRpbWVvdXQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB2YWxpZEludGVydmFsID0gdGhpcy5wVGltZSA/IGlucHV0LnRpbWVTdGFtcCAtIHRoaXMucFRpbWUgPCBvcHRpb25zLmludGVydmFsIDogdHJ1ZTtcbiAgICAgICAgdmFyIHZhbGlkTXVsdGlUYXAgPSAhdGhpcy5wQ2VudGVyIHx8IGdldERpc3RhbmNlKHRoaXMucENlbnRlciwgaW5wdXQuY2VudGVyKSA8IG9wdGlvbnMucG9zVGhyZXNob2xkO1xuICAgICAgICB0aGlzLnBUaW1lID0gaW5wdXQudGltZVN0YW1wO1xuICAgICAgICB0aGlzLnBDZW50ZXIgPSBpbnB1dC5jZW50ZXI7XG5cbiAgICAgICAgaWYgKCF2YWxpZE11bHRpVGFwIHx8ICF2YWxpZEludGVydmFsKSB7XG4gICAgICAgICAgdGhpcy5jb3VudCA9IDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jb3VudCArPSAxO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5faW5wdXQgPSBpbnB1dDsgLy8gaWYgdGFwIGNvdW50IG1hdGNoZXMgd2UgaGF2ZSByZWNvZ25pemVkIGl0LFxuICAgICAgICAvLyBlbHNlIGl0IGhhcyBiZWdhbiByZWNvZ25pemluZy4uLlxuXG4gICAgICAgIHZhciB0YXBDb3VudCA9IHRoaXMuY291bnQgJSBvcHRpb25zLnRhcHM7XG5cbiAgICAgICAgaWYgKHRhcENvdW50ID09PSAwKSB7XG4gICAgICAgICAgLy8gbm8gZmFpbGluZyByZXF1aXJlbWVudHMsIGltbWVkaWF0ZWx5IHRyaWdnZXIgdGhlIHRhcCBldmVudFxuICAgICAgICAgIC8vIG9yIHdhaXQgYXMgbG9uZyBhcyB0aGUgbXVsdGl0YXAgaW50ZXJ2YWwgdG8gdHJpZ2dlclxuICAgICAgICAgIGlmICghdGhpcy5oYXNSZXF1aXJlRmFpbHVyZXMoKSkge1xuICAgICAgICAgICAgcmV0dXJuIFNUQVRFX1JFQ09HTklaRUQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3RpbWVyID0gc2V0VGltZW91dENvbnRleHQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU1RBVEVfUkVDT0dOSVpFRDtcbiAgICAgICAgICAgICAgdGhpcy50cnlFbWl0KCk7XG4gICAgICAgICAgICB9LCBvcHRpb25zLmludGVydmFsLCB0aGlzKTtcbiAgICAgICAgICAgIHJldHVybiBTVEFURV9CRUdBTjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFNUQVRFX0ZBSUxFRDtcbiAgICB9LFxuICAgIGZhaWxUaW1lb3V0OiBmdW5jdGlvbiBmYWlsVGltZW91dCgpIHtcbiAgICAgIHRoaXMuX3RpbWVyID0gc2V0VGltZW91dENvbnRleHQoZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnN0YXRlID0gU1RBVEVfRkFJTEVEO1xuICAgICAgfSwgdGhpcy5vcHRpb25zLmludGVydmFsLCB0aGlzKTtcbiAgICAgIHJldHVybiBTVEFURV9GQUlMRUQ7XG4gICAgfSxcbiAgICByZXNldDogZnVuY3Rpb24gcmVzZXQoKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZXIpO1xuICAgIH0sXG4gICAgZW1pdDogZnVuY3Rpb24gZW1pdCgpIHtcbiAgICAgIGlmICh0aGlzLnN0YXRlID09IFNUQVRFX1JFQ09HTklaRUQpIHtcbiAgICAgICAgdGhpcy5faW5wdXQudGFwQ291bnQgPSB0aGlzLmNvdW50O1xuICAgICAgICB0aGlzLm1hbmFnZXIuZW1pdCh0aGlzLm9wdGlvbnMuZXZlbnQsIHRoaXMuX2lucHV0KTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogU2ltcGxlIHdheSB0byBjcmVhdGUgYSBtYW5hZ2VyIHdpdGggYSBkZWZhdWx0IHNldCBvZiByZWNvZ25pemVycy5cbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKi9cblxuICBmdW5jdGlvbiBIYW1tZXIoZWxlbWVudCwgb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIG9wdGlvbnMucmVjb2duaXplcnMgPSBpZlVuZGVmaW5lZChvcHRpb25zLnJlY29nbml6ZXJzLCBIYW1tZXIuZGVmYXVsdHMucHJlc2V0KTtcbiAgICByZXR1cm4gbmV3IE1hbmFnZXIoZWxlbWVudCwgb3B0aW9ucyk7XG4gIH1cbiAgLyoqXG4gICAqIEBjb25zdCB7c3RyaW5nfVxuICAgKi9cblxuXG4gIEhhbW1lci5WRVJTSU9OID0gJzIuMC43JztcbiAgLyoqXG4gICAqIGRlZmF1bHQgc2V0dGluZ3NcbiAgICogQG5hbWVzcGFjZVxuICAgKi9cblxuICBIYW1tZXIuZGVmYXVsdHMgPSB7XG4gICAgLyoqXG4gICAgICogc2V0IGlmIERPTSBldmVudHMgYXJlIGJlaW5nIHRyaWdnZXJlZC5cbiAgICAgKiBCdXQgdGhpcyBpcyBzbG93ZXIgYW5kIHVudXNlZCBieSBzaW1wbGUgaW1wbGVtZW50YXRpb25zLCBzbyBkaXNhYmxlZCBieSBkZWZhdWx0LlxuICAgICAqIEB0eXBlIHtCb29sZWFufVxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgZG9tRXZlbnRzOiBmYWxzZSxcblxuICAgIC8qKlxuICAgICAqIFRoZSB2YWx1ZSBmb3IgdGhlIHRvdWNoQWN0aW9uIHByb3BlcnR5L2ZhbGxiYWNrLlxuICAgICAqIFdoZW4gc2V0IHRvIGBjb21wdXRlYCBpdCB3aWxsIG1hZ2ljYWxseSBzZXQgdGhlIGNvcnJlY3QgdmFsdWUgYmFzZWQgb24gdGhlIGFkZGVkIHJlY29nbml6ZXJzLlxuICAgICAqIEB0eXBlIHtTdHJpbmd9XG4gICAgICogQGRlZmF1bHQgY29tcHV0ZVxuICAgICAqL1xuICAgIHRvdWNoQWN0aW9uOiBUT1VDSF9BQ1RJT05fQ09NUFVURSxcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtCb29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICBlbmFibGU6IHRydWUsXG5cbiAgICAvKipcbiAgICAgKiBFWFBFUklNRU5UQUwgRkVBVFVSRSAtLSBjYW4gYmUgcmVtb3ZlZC9jaGFuZ2VkXG4gICAgICogQ2hhbmdlIHRoZSBwYXJlbnQgaW5wdXQgdGFyZ2V0IGVsZW1lbnQuXG4gICAgICogSWYgTnVsbCwgdGhlbiBpdCBpcyBiZWluZyBzZXQgdGhlIHRvIG1haW4gZWxlbWVudC5cbiAgICAgKiBAdHlwZSB7TnVsbHxFdmVudFRhcmdldH1cbiAgICAgKiBAZGVmYXVsdCBudWxsXG4gICAgICovXG4gICAgaW5wdXRUYXJnZXQ6IG51bGwsXG5cbiAgICAvKipcbiAgICAgKiBmb3JjZSBhbiBpbnB1dCBjbGFzc1xuICAgICAqIEB0eXBlIHtOdWxsfEZ1bmN0aW9ufVxuICAgICAqIEBkZWZhdWx0IG51bGxcbiAgICAgKi9cbiAgICBpbnB1dENsYXNzOiBudWxsLFxuXG4gICAgLyoqXG4gICAgICogRGVmYXVsdCByZWNvZ25pemVyIHNldHVwIHdoZW4gY2FsbGluZyBgSGFtbWVyKClgXG4gICAgICogV2hlbiBjcmVhdGluZyBhIG5ldyBNYW5hZ2VyIHRoZXNlIHdpbGwgYmUgc2tpcHBlZC5cbiAgICAgKiBAdHlwZSB7QXJyYXl9XG4gICAgICovXG4gICAgcHJlc2V0OiBbLy8gUmVjb2duaXplckNsYXNzLCBvcHRpb25zLCBbcmVjb2duaXplV2l0aCwgLi4uXSwgW3JlcXVpcmVGYWlsdXJlLCAuLi5dXG4gICAgW1JvdGF0ZVJlY29nbml6ZXIsIHtcbiAgICAgIGVuYWJsZTogZmFsc2VcbiAgICB9XSwgW1BpbmNoUmVjb2duaXplciwge1xuICAgICAgZW5hYmxlOiBmYWxzZVxuICAgIH0sIFsncm90YXRlJ11dLCBbU3dpcGVSZWNvZ25pemVyLCB7XG4gICAgICBkaXJlY3Rpb246IERJUkVDVElPTl9IT1JJWk9OVEFMXG4gICAgfV0sIFtQYW5SZWNvZ25pemVyLCB7XG4gICAgICBkaXJlY3Rpb246IERJUkVDVElPTl9IT1JJWk9OVEFMXG4gICAgfSwgWydzd2lwZSddXSwgW1RhcFJlY29nbml6ZXJdLCBbVGFwUmVjb2duaXplciwge1xuICAgICAgZXZlbnQ6ICdkb3VibGV0YXAnLFxuICAgICAgdGFwczogMlxuICAgIH0sIFsndGFwJ11dLCBbUHJlc3NSZWNvZ25pemVyXV0sXG5cbiAgICAvKipcbiAgICAgKiBTb21lIENTUyBwcm9wZXJ0aWVzIGNhbiBiZSB1c2VkIHRvIGltcHJvdmUgdGhlIHdvcmtpbmcgb2YgSGFtbWVyLlxuICAgICAqIEFkZCB0aGVtIHRvIHRoaXMgbWV0aG9kIGFuZCB0aGV5IHdpbGwgYmUgc2V0IHdoZW4gY3JlYXRpbmcgYSBuZXcgTWFuYWdlci5cbiAgICAgKiBAbmFtZXNwYWNlXG4gICAgICovXG4gICAgY3NzUHJvcHM6IHtcbiAgICAgIC8qKlxuICAgICAgICogRGlzYWJsZXMgdGV4dCBzZWxlY3Rpb24gdG8gaW1wcm92ZSB0aGUgZHJhZ2dpbmcgZ2VzdHVyZS4gTWFpbmx5IGZvciBkZXNrdG9wIGJyb3dzZXJzLlxuICAgICAgICogQHR5cGUge1N0cmluZ31cbiAgICAgICAqIEBkZWZhdWx0ICdub25lJ1xuICAgICAgICovXG4gICAgICB1c2VyU2VsZWN0OiAnbm9uZScsXG5cbiAgICAgIC8qKlxuICAgICAgICogRGlzYWJsZSB0aGUgV2luZG93cyBQaG9uZSBncmlwcGVycyB3aGVuIHByZXNzaW5nIGFuIGVsZW1lbnQuXG4gICAgICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgICAgICogQGRlZmF1bHQgJ25vbmUnXG4gICAgICAgKi9cbiAgICAgIHRvdWNoU2VsZWN0OiAnbm9uZScsXG5cbiAgICAgIC8qKlxuICAgICAgICogRGlzYWJsZXMgdGhlIGRlZmF1bHQgY2FsbG91dCBzaG93biB3aGVuIHlvdSB0b3VjaCBhbmQgaG9sZCBhIHRvdWNoIHRhcmdldC5cbiAgICAgICAqIE9uIGlPUywgd2hlbiB5b3UgdG91Y2ggYW5kIGhvbGQgYSB0b3VjaCB0YXJnZXQgc3VjaCBhcyBhIGxpbmssIFNhZmFyaSBkaXNwbGF5c1xuICAgICAgICogYSBjYWxsb3V0IGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGxpbmsuIFRoaXMgcHJvcGVydHkgYWxsb3dzIHlvdSB0byBkaXNhYmxlIHRoYXQgY2FsbG91dC5cbiAgICAgICAqIEB0eXBlIHtTdHJpbmd9XG4gICAgICAgKiBAZGVmYXVsdCAnbm9uZSdcbiAgICAgICAqL1xuICAgICAgdG91Y2hDYWxsb3V0OiAnbm9uZScsXG5cbiAgICAgIC8qKlxuICAgICAgICogU3BlY2lmaWVzIHdoZXRoZXIgem9vbWluZyBpcyBlbmFibGVkLiBVc2VkIGJ5IElFMTA+XG4gICAgICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgICAgICogQGRlZmF1bHQgJ25vbmUnXG4gICAgICAgKi9cbiAgICAgIGNvbnRlbnRab29taW5nOiAnbm9uZScsXG5cbiAgICAgIC8qKlxuICAgICAgICogU3BlY2lmaWVzIHRoYXQgYW4gZW50aXJlIGVsZW1lbnQgc2hvdWxkIGJlIGRyYWdnYWJsZSBpbnN0ZWFkIG9mIGl0cyBjb250ZW50cy4gTWFpbmx5IGZvciBkZXNrdG9wIGJyb3dzZXJzLlxuICAgICAgICogQHR5cGUge1N0cmluZ31cbiAgICAgICAqIEBkZWZhdWx0ICdub25lJ1xuICAgICAgICovXG4gICAgICB1c2VyRHJhZzogJ25vbmUnLFxuXG4gICAgICAvKipcbiAgICAgICAqIE92ZXJyaWRlcyB0aGUgaGlnaGxpZ2h0IGNvbG9yIHNob3duIHdoZW4gdGhlIHVzZXIgdGFwcyBhIGxpbmsgb3IgYSBKYXZhU2NyaXB0XG4gICAgICAgKiBjbGlja2FibGUgZWxlbWVudCBpbiBpT1MuIFRoaXMgcHJvcGVydHkgb2JleXMgdGhlIGFscGhhIHZhbHVlLCBpZiBzcGVjaWZpZWQuXG4gICAgICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgICAgICogQGRlZmF1bHQgJ3JnYmEoMCwwLDAsMCknXG4gICAgICAgKi9cbiAgICAgIHRhcEhpZ2hsaWdodENvbG9yOiAncmdiYSgwLDAsMCwwKSdcbiAgICB9XG4gIH07XG4gIHZhciBTVE9QID0gMTtcbiAgdmFyIEZPUkNFRF9TVE9QID0gMjtcbiAgLyoqXG4gICAqIE1hbmFnZXJcbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKi9cblxuICBmdW5jdGlvbiBNYW5hZ2VyKGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBhc3NpZ24oe30sIEhhbW1lci5kZWZhdWx0cywgb3B0aW9ucyB8fCB7fSk7XG4gICAgdGhpcy5vcHRpb25zLmlucHV0VGFyZ2V0ID0gdGhpcy5vcHRpb25zLmlucHV0VGFyZ2V0IHx8IGVsZW1lbnQ7XG4gICAgdGhpcy5oYW5kbGVycyA9IHt9O1xuICAgIHRoaXMuc2Vzc2lvbiA9IHt9O1xuICAgIHRoaXMucmVjb2duaXplcnMgPSBbXTtcbiAgICB0aGlzLm9sZENzc1Byb3BzID0ge307XG4gICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcbiAgICB0aGlzLmlucHV0ID0gY3JlYXRlSW5wdXRJbnN0YW5jZSh0aGlzKTtcbiAgICB0aGlzLnRvdWNoQWN0aW9uID0gbmV3IFRvdWNoQWN0aW9uKHRoaXMsIHRoaXMub3B0aW9ucy50b3VjaEFjdGlvbik7XG4gICAgdG9nZ2xlQ3NzUHJvcHModGhpcywgdHJ1ZSk7XG4gICAgZWFjaCh0aGlzLm9wdGlvbnMucmVjb2duaXplcnMsIGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICB2YXIgcmVjb2duaXplciA9IHRoaXMuYWRkKG5ldyBpdGVtWzBdKGl0ZW1bMV0pKTtcbiAgICAgIGl0ZW1bMl0gJiYgcmVjb2duaXplci5yZWNvZ25pemVXaXRoKGl0ZW1bMl0pO1xuICAgICAgaXRlbVszXSAmJiByZWNvZ25pemVyLnJlcXVpcmVGYWlsdXJlKGl0ZW1bM10pO1xuICAgIH0sIHRoaXMpO1xuICB9XG5cbiAgTWFuYWdlci5wcm90b3R5cGUgPSB7XG4gICAgLyoqXG4gICAgICogc2V0IG9wdGlvbnNcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgICAqIEByZXR1cm5zIHtNYW5hZ2VyfVxuICAgICAqL1xuICAgIHNldDogZnVuY3Rpb24gc2V0KG9wdGlvbnMpIHtcbiAgICAgIGFzc2lnbih0aGlzLm9wdGlvbnMsIG9wdGlvbnMpOyAvLyBPcHRpb25zIHRoYXQgbmVlZCBhIGxpdHRsZSBtb3JlIHNldHVwXG5cbiAgICAgIGlmIChvcHRpb25zLnRvdWNoQWN0aW9uKSB7XG4gICAgICAgIHRoaXMudG91Y2hBY3Rpb24udXBkYXRlKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmlucHV0VGFyZ2V0KSB7XG4gICAgICAgIC8vIENsZWFuIHVwIGV4aXN0aW5nIGV2ZW50IGxpc3RlbmVycyBhbmQgcmVpbml0aWFsaXplXG4gICAgICAgIHRoaXMuaW5wdXQuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLmlucHV0LnRhcmdldCA9IG9wdGlvbnMuaW5wdXRUYXJnZXQ7XG4gICAgICAgIHRoaXMuaW5wdXQuaW5pdCgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogc3RvcCByZWNvZ25pemluZyBmb3IgdGhpcyBzZXNzaW9uLlxuICAgICAqIFRoaXMgc2Vzc2lvbiB3aWxsIGJlIGRpc2NhcmRlZCwgd2hlbiBhIG5ldyBbaW5wdXRdc3RhcnQgZXZlbnQgaXMgZmlyZWQuXG4gICAgICogV2hlbiBmb3JjZWQsIHRoZSByZWNvZ25pemVyIGN5Y2xlIGlzIHN0b3BwZWQgaW1tZWRpYXRlbHkuXG4gICAgICogQHBhcmFtIHtCb29sZWFufSBbZm9yY2VdXG4gICAgICovXG4gICAgc3RvcDogZnVuY3Rpb24gc3RvcChmb3JjZSkge1xuICAgICAgdGhpcy5zZXNzaW9uLnN0b3BwZWQgPSBmb3JjZSA/IEZPUkNFRF9TVE9QIDogU1RPUDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogcnVuIHRoZSByZWNvZ25pemVycyFcbiAgICAgKiBjYWxsZWQgYnkgdGhlIGlucHV0SGFuZGxlciBmdW5jdGlvbiBvbiBldmVyeSBtb3ZlbWVudCBvZiB0aGUgcG9pbnRlcnMgKHRvdWNoZXMpXG4gICAgICogaXQgd2Fsa3MgdGhyb3VnaCBhbGwgdGhlIHJlY29nbml6ZXJzIGFuZCB0cmllcyB0byBkZXRlY3QgdGhlIGdlc3R1cmUgdGhhdCBpcyBiZWluZyBtYWRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0RGF0YVxuICAgICAqL1xuICAgIHJlY29nbml6ZTogZnVuY3Rpb24gcmVjb2duaXplKGlucHV0RGF0YSkge1xuICAgICAgdmFyIHNlc3Npb24gPSB0aGlzLnNlc3Npb247XG5cbiAgICAgIGlmIChzZXNzaW9uLnN0b3BwZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSAvLyBydW4gdGhlIHRvdWNoLWFjdGlvbiBwb2x5ZmlsbFxuXG5cbiAgICAgIHRoaXMudG91Y2hBY3Rpb24ucHJldmVudERlZmF1bHRzKGlucHV0RGF0YSk7XG4gICAgICB2YXIgcmVjb2duaXplcjtcbiAgICAgIHZhciByZWNvZ25pemVycyA9IHRoaXMucmVjb2duaXplcnM7IC8vIHRoaXMgaG9sZHMgdGhlIHJlY29nbml6ZXIgdGhhdCBpcyBiZWluZyByZWNvZ25pemVkLlxuICAgICAgLy8gc28gdGhlIHJlY29nbml6ZXIncyBzdGF0ZSBuZWVkcyB0byBiZSBCRUdBTiwgQ0hBTkdFRCwgRU5ERUQgb3IgUkVDT0dOSVpFRFxuICAgICAgLy8gaWYgbm8gcmVjb2duaXplciBpcyBkZXRlY3RpbmcgYSB0aGluZywgaXQgaXMgc2V0IHRvIGBudWxsYFxuXG4gICAgICB2YXIgY3VyUmVjb2duaXplciA9IHNlc3Npb24uY3VyUmVjb2duaXplcjsgLy8gcmVzZXQgd2hlbiB0aGUgbGFzdCByZWNvZ25pemVyIGlzIHJlY29nbml6ZWRcbiAgICAgIC8vIG9yIHdoZW4gd2UncmUgaW4gYSBuZXcgc2Vzc2lvblxuXG4gICAgICBpZiAoIWN1clJlY29nbml6ZXIgfHwgY3VyUmVjb2duaXplciAmJiBjdXJSZWNvZ25pemVyLnN0YXRlICYgU1RBVEVfUkVDT0dOSVpFRCkge1xuICAgICAgICBjdXJSZWNvZ25pemVyID0gc2Vzc2lvbi5jdXJSZWNvZ25pemVyID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgdmFyIGkgPSAwO1xuXG4gICAgICB3aGlsZSAoaSA8IHJlY29nbml6ZXJzLmxlbmd0aCkge1xuICAgICAgICByZWNvZ25pemVyID0gcmVjb2duaXplcnNbaV07IC8vIGZpbmQgb3V0IGlmIHdlIGFyZSBhbGxvd2VkIHRyeSB0byByZWNvZ25pemUgdGhlIGlucHV0IGZvciB0aGlzIG9uZS5cbiAgICAgICAgLy8gMS4gICBhbGxvdyBpZiB0aGUgc2Vzc2lvbiBpcyBOT1QgZm9yY2VkIHN0b3BwZWQgKHNlZSB0aGUgLnN0b3AoKSBtZXRob2QpXG4gICAgICAgIC8vIDIuICAgYWxsb3cgaWYgd2Ugc3RpbGwgaGF2ZW4ndCByZWNvZ25pemVkIGEgZ2VzdHVyZSBpbiB0aGlzIHNlc3Npb24sIG9yIHRoZSB0aGlzIHJlY29nbml6ZXIgaXMgdGhlIG9uZVxuICAgICAgICAvLyAgICAgIHRoYXQgaXMgYmVpbmcgcmVjb2duaXplZC5cbiAgICAgICAgLy8gMy4gICBhbGxvdyBpZiB0aGUgcmVjb2duaXplciBpcyBhbGxvd2VkIHRvIHJ1biBzaW11bHRhbmVvdXMgd2l0aCB0aGUgY3VycmVudCByZWNvZ25pemVkIHJlY29nbml6ZXIuXG4gICAgICAgIC8vICAgICAgdGhpcyBjYW4gYmUgc2V0dXAgd2l0aCB0aGUgYHJlY29nbml6ZVdpdGgoKWAgbWV0aG9kIG9uIHRoZSByZWNvZ25pemVyLlxuXG4gICAgICAgIGlmIChzZXNzaW9uLnN0b3BwZWQgIT09IEZPUkNFRF9TVE9QICYmICggLy8gMVxuICAgICAgICAhY3VyUmVjb2duaXplciB8fCByZWNvZ25pemVyID09IGN1clJlY29nbml6ZXIgfHwgLy8gMlxuICAgICAgICByZWNvZ25pemVyLmNhblJlY29nbml6ZVdpdGgoY3VyUmVjb2duaXplcikpKSB7XG4gICAgICAgICAgLy8gM1xuICAgICAgICAgIHJlY29nbml6ZXIucmVjb2duaXplKGlucHV0RGF0YSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVjb2duaXplci5yZXNldCgpO1xuICAgICAgICB9IC8vIGlmIHRoZSByZWNvZ25pemVyIGhhcyBiZWVuIHJlY29nbml6aW5nIHRoZSBpbnB1dCBhcyBhIHZhbGlkIGdlc3R1cmUsIHdlIHdhbnQgdG8gc3RvcmUgdGhpcyBvbmUgYXMgdGhlXG4gICAgICAgIC8vIGN1cnJlbnQgYWN0aXZlIHJlY29nbml6ZXIuIGJ1dCBvbmx5IGlmIHdlIGRvbid0IGFscmVhZHkgaGF2ZSBhbiBhY3RpdmUgcmVjb2duaXplclxuXG5cbiAgICAgICAgaWYgKCFjdXJSZWNvZ25pemVyICYmIHJlY29nbml6ZXIuc3RhdGUgJiAoU1RBVEVfQkVHQU4gfCBTVEFURV9DSEFOR0VEIHwgU1RBVEVfRU5ERUQpKSB7XG4gICAgICAgICAgY3VyUmVjb2duaXplciA9IHNlc3Npb24uY3VyUmVjb2duaXplciA9IHJlY29nbml6ZXI7XG4gICAgICAgIH1cblxuICAgICAgICBpKys7XG4gICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIGdldCBhIHJlY29nbml6ZXIgYnkgaXRzIGV2ZW50IG5hbWUuXG4gICAgICogQHBhcmFtIHtSZWNvZ25pemVyfFN0cmluZ30gcmVjb2duaXplclxuICAgICAqIEByZXR1cm5zIHtSZWNvZ25pemVyfE51bGx9XG4gICAgICovXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQocmVjb2duaXplcikge1xuICAgICAgaWYgKHJlY29nbml6ZXIgaW5zdGFuY2VvZiBSZWNvZ25pemVyKSB7XG4gICAgICAgIHJldHVybiByZWNvZ25pemVyO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVjb2duaXplcnMgPSB0aGlzLnJlY29nbml6ZXJzO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlY29nbml6ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChyZWNvZ25pemVyc1tpXS5vcHRpb25zLmV2ZW50ID09IHJlY29nbml6ZXIpIHtcbiAgICAgICAgICByZXR1cm4gcmVjb2duaXplcnNbaV07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIGFkZCBhIHJlY29nbml6ZXIgdG8gdGhlIG1hbmFnZXJcbiAgICAgKiBleGlzdGluZyByZWNvZ25pemVycyB3aXRoIHRoZSBzYW1lIGV2ZW50IG5hbWUgd2lsbCBiZSByZW1vdmVkXG4gICAgICogQHBhcmFtIHtSZWNvZ25pemVyfSByZWNvZ25pemVyXG4gICAgICogQHJldHVybnMge1JlY29nbml6ZXJ8TWFuYWdlcn1cbiAgICAgKi9cbiAgICBhZGQ6IGZ1bmN0aW9uIGFkZChyZWNvZ25pemVyKSB7XG4gICAgICBpZiAoaW52b2tlQXJyYXlBcmcocmVjb2duaXplciwgJ2FkZCcsIHRoaXMpKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSAvLyByZW1vdmUgZXhpc3RpbmdcblxuXG4gICAgICB2YXIgZXhpc3RpbmcgPSB0aGlzLmdldChyZWNvZ25pemVyLm9wdGlvbnMuZXZlbnQpO1xuXG4gICAgICBpZiAoZXhpc3RpbmcpIHtcbiAgICAgICAgdGhpcy5yZW1vdmUoZXhpc3RpbmcpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnJlY29nbml6ZXJzLnB1c2gocmVjb2duaXplcik7XG4gICAgICByZWNvZ25pemVyLm1hbmFnZXIgPSB0aGlzO1xuICAgICAgdGhpcy50b3VjaEFjdGlvbi51cGRhdGUoKTtcbiAgICAgIHJldHVybiByZWNvZ25pemVyO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiByZW1vdmUgYSByZWNvZ25pemVyIGJ5IG5hbWUgb3IgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge1JlY29nbml6ZXJ8U3RyaW5nfSByZWNvZ25pemVyXG4gICAgICogQHJldHVybnMge01hbmFnZXJ9XG4gICAgICovXG4gICAgcmVtb3ZlOiBmdW5jdGlvbiByZW1vdmUocmVjb2duaXplcikge1xuICAgICAgaWYgKGludm9rZUFycmF5QXJnKHJlY29nbml6ZXIsICdyZW1vdmUnLCB0aGlzKSkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cblxuICAgICAgcmVjb2duaXplciA9IHRoaXMuZ2V0KHJlY29nbml6ZXIpOyAvLyBsZXQncyBtYWtlIHN1cmUgdGhpcyByZWNvZ25pemVyIGV4aXN0c1xuXG4gICAgICBpZiAocmVjb2duaXplcikge1xuICAgICAgICB2YXIgcmVjb2duaXplcnMgPSB0aGlzLnJlY29nbml6ZXJzO1xuICAgICAgICB2YXIgaW5kZXggPSBpbkFycmF5KHJlY29nbml6ZXJzLCByZWNvZ25pemVyKTtcblxuICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgcmVjb2duaXplcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICB0aGlzLnRvdWNoQWN0aW9uLnVwZGF0ZSgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBiaW5kIGV2ZW50XG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50c1xuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXJcbiAgICAgKiBAcmV0dXJucyB7RXZlbnRFbWl0dGVyfSB0aGlzXG4gICAgICovXG4gICAgb246IGZ1bmN0aW9uIG9uKGV2ZW50cywgaGFuZGxlcikge1xuICAgICAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGhhbmRsZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBoYW5kbGVycyA9IHRoaXMuaGFuZGxlcnM7XG4gICAgICBlYWNoKHNwbGl0U3RyKGV2ZW50cyksIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICBoYW5kbGVyc1tldmVudF0gPSBoYW5kbGVyc1tldmVudF0gfHwgW107XG4gICAgICAgIGhhbmRsZXJzW2V2ZW50XS5wdXNoKGhhbmRsZXIpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogdW5iaW5kIGV2ZW50LCBsZWF2ZSBlbWl0IGJsYW5rIHRvIHJlbW92ZSBhbGwgaGFuZGxlcnNcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gZXZlbnRzXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2hhbmRsZXJdXG4gICAgICogQHJldHVybnMge0V2ZW50RW1pdHRlcn0gdGhpc1xuICAgICAqL1xuICAgIG9mZjogZnVuY3Rpb24gb2ZmKGV2ZW50cywgaGFuZGxlcikge1xuICAgICAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIGhhbmRsZXJzID0gdGhpcy5oYW5kbGVycztcbiAgICAgIGVhY2goc3BsaXRTdHIoZXZlbnRzKSwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIGlmICghaGFuZGxlcikge1xuICAgICAgICAgIGRlbGV0ZSBoYW5kbGVyc1tldmVudF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaGFuZGxlcnNbZXZlbnRdICYmIGhhbmRsZXJzW2V2ZW50XS5zcGxpY2UoaW5BcnJheShoYW5kbGVyc1tldmVudF0sIGhhbmRsZXIpLCAxKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogZW1pdCBldmVudCB0byB0aGUgbGlzdGVuZXJzXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50XG4gICAgICogQHBhcmFtIHtPYmplY3R9IGRhdGFcbiAgICAgKi9cbiAgICBlbWl0OiBmdW5jdGlvbiBlbWl0KGV2ZW50LCBkYXRhKSB7XG4gICAgICAvLyB3ZSBhbHNvIHdhbnQgdG8gdHJpZ2dlciBkb20gZXZlbnRzXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmRvbUV2ZW50cykge1xuICAgICAgICB0cmlnZ2VyRG9tRXZlbnQoZXZlbnQsIGRhdGEpO1xuICAgICAgfSAvLyBubyBoYW5kbGVycywgc28gc2tpcCBpdCBhbGxcblxuXG4gICAgICB2YXIgaGFuZGxlcnMgPSB0aGlzLmhhbmRsZXJzW2V2ZW50XSAmJiB0aGlzLmhhbmRsZXJzW2V2ZW50XS5zbGljZSgpO1xuXG4gICAgICBpZiAoIWhhbmRsZXJzIHx8ICFoYW5kbGVycy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBkYXRhLnR5cGUgPSBldmVudDtcblxuICAgICAgZGF0YS5wcmV2ZW50RGVmYXVsdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZGF0YS5zcmNFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfTtcblxuICAgICAgdmFyIGkgPSAwO1xuXG4gICAgICB3aGlsZSAoaSA8IGhhbmRsZXJzLmxlbmd0aCkge1xuICAgICAgICBoYW5kbGVyc1tpXShkYXRhKTtcbiAgICAgICAgaSsrO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBkZXN0cm95IHRoZSBtYW5hZ2VyIGFuZCB1bmJpbmRzIGFsbCBldmVudHNcbiAgICAgKiBpdCBkb2Vzbid0IHVuYmluZCBkb20gZXZlbnRzLCB0aGF0IGlzIHRoZSB1c2VyIG93biByZXNwb25zaWJpbGl0eVxuICAgICAqL1xuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICB0aGlzLmVsZW1lbnQgJiYgdG9nZ2xlQ3NzUHJvcHModGhpcywgZmFsc2UpO1xuICAgICAgdGhpcy5oYW5kbGVycyA9IHt9O1xuICAgICAgdGhpcy5zZXNzaW9uID0ge307XG4gICAgICB0aGlzLmlucHV0LmRlc3Ryb3koKTtcbiAgICAgIHRoaXMuZWxlbWVudCA9IG51bGw7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogYWRkL3JlbW92ZSB0aGUgY3NzIHByb3BlcnRpZXMgYXMgZGVmaW5lZCBpbiBtYW5hZ2VyLm9wdGlvbnMuY3NzUHJvcHNcbiAgICogQHBhcmFtIHtNYW5hZ2VyfSBtYW5hZ2VyXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gYWRkXG4gICAqL1xuXG4gIGZ1bmN0aW9uIHRvZ2dsZUNzc1Byb3BzKG1hbmFnZXIsIGFkZCkge1xuICAgIHZhciBlbGVtZW50ID0gbWFuYWdlci5lbGVtZW50O1xuXG4gICAgaWYgKCFlbGVtZW50LnN0eWxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHByb3A7XG4gICAgZWFjaChtYW5hZ2VyLm9wdGlvbnMuY3NzUHJvcHMsIGZ1bmN0aW9uICh2YWx1ZSwgbmFtZSkge1xuICAgICAgcHJvcCA9IHByZWZpeGVkKGVsZW1lbnQuc3R5bGUsIG5hbWUpO1xuXG4gICAgICBpZiAoYWRkKSB7XG4gICAgICAgIG1hbmFnZXIub2xkQ3NzUHJvcHNbcHJvcF0gPSBlbGVtZW50LnN0eWxlW3Byb3BdO1xuICAgICAgICBlbGVtZW50LnN0eWxlW3Byb3BdID0gdmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbGVtZW50LnN0eWxlW3Byb3BdID0gbWFuYWdlci5vbGRDc3NQcm9wc1twcm9wXSB8fCAnJztcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICghYWRkKSB7XG4gICAgICBtYW5hZ2VyLm9sZENzc1Byb3BzID0ge307XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiB0cmlnZ2VyIGRvbSBldmVudFxuICAgKiBAcGFyYW0ge1N0cmluZ30gZXZlbnRcbiAgICogQHBhcmFtIHtPYmplY3R9IGRhdGFcbiAgICovXG5cblxuICBmdW5jdGlvbiB0cmlnZ2VyRG9tRXZlbnQoZXZlbnQsIGRhdGEpIHtcbiAgICB2YXIgZ2VzdHVyZUV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0V2ZW50Jyk7XG4gICAgZ2VzdHVyZUV2ZW50LmluaXRFdmVudChldmVudCwgdHJ1ZSwgdHJ1ZSk7XG4gICAgZ2VzdHVyZUV2ZW50Lmdlc3R1cmUgPSBkYXRhO1xuICAgIGRhdGEudGFyZ2V0LmRpc3BhdGNoRXZlbnQoZ2VzdHVyZUV2ZW50KTtcbiAgfVxuXG4gIGFzc2lnbihIYW1tZXIsIHtcbiAgICBJTlBVVF9TVEFSVDogSU5QVVRfU1RBUlQsXG4gICAgSU5QVVRfTU9WRTogSU5QVVRfTU9WRSxcbiAgICBJTlBVVF9FTkQ6IElOUFVUX0VORCxcbiAgICBJTlBVVF9DQU5DRUw6IElOUFVUX0NBTkNFTCxcbiAgICBTVEFURV9QT1NTSUJMRTogU1RBVEVfUE9TU0lCTEUsXG4gICAgU1RBVEVfQkVHQU46IFNUQVRFX0JFR0FOLFxuICAgIFNUQVRFX0NIQU5HRUQ6IFNUQVRFX0NIQU5HRUQsXG4gICAgU1RBVEVfRU5ERUQ6IFNUQVRFX0VOREVELFxuICAgIFNUQVRFX1JFQ09HTklaRUQ6IFNUQVRFX1JFQ09HTklaRUQsXG4gICAgU1RBVEVfQ0FOQ0VMTEVEOiBTVEFURV9DQU5DRUxMRUQsXG4gICAgU1RBVEVfRkFJTEVEOiBTVEFURV9GQUlMRUQsXG4gICAgRElSRUNUSU9OX05PTkU6IERJUkVDVElPTl9OT05FLFxuICAgIERJUkVDVElPTl9MRUZUOiBESVJFQ1RJT05fTEVGVCxcbiAgICBESVJFQ1RJT05fUklHSFQ6IERJUkVDVElPTl9SSUdIVCxcbiAgICBESVJFQ1RJT05fVVA6IERJUkVDVElPTl9VUCxcbiAgICBESVJFQ1RJT05fRE9XTjogRElSRUNUSU9OX0RPV04sXG4gICAgRElSRUNUSU9OX0hPUklaT05UQUw6IERJUkVDVElPTl9IT1JJWk9OVEFMLFxuICAgIERJUkVDVElPTl9WRVJUSUNBTDogRElSRUNUSU9OX1ZFUlRJQ0FMLFxuICAgIERJUkVDVElPTl9BTEw6IERJUkVDVElPTl9BTEwsXG4gICAgTWFuYWdlcjogTWFuYWdlcixcbiAgICBJbnB1dDogSW5wdXQsXG4gICAgVG91Y2hBY3Rpb246IFRvdWNoQWN0aW9uLFxuICAgIFRvdWNoSW5wdXQ6IFRvdWNoSW5wdXQsXG4gICAgTW91c2VJbnB1dDogTW91c2VJbnB1dCxcbiAgICBQb2ludGVyRXZlbnRJbnB1dDogUG9pbnRlckV2ZW50SW5wdXQsXG4gICAgVG91Y2hNb3VzZUlucHV0OiBUb3VjaE1vdXNlSW5wdXQsXG4gICAgU2luZ2xlVG91Y2hJbnB1dDogU2luZ2xlVG91Y2hJbnB1dCxcbiAgICBSZWNvZ25pemVyOiBSZWNvZ25pemVyLFxuICAgIEF0dHJSZWNvZ25pemVyOiBBdHRyUmVjb2duaXplcixcbiAgICBUYXA6IFRhcFJlY29nbml6ZXIsXG4gICAgUGFuOiBQYW5SZWNvZ25pemVyLFxuICAgIFN3aXBlOiBTd2lwZVJlY29nbml6ZXIsXG4gICAgUGluY2g6IFBpbmNoUmVjb2duaXplcixcbiAgICBSb3RhdGU6IFJvdGF0ZVJlY29nbml6ZXIsXG4gICAgUHJlc3M6IFByZXNzUmVjb2duaXplcixcbiAgICBvbjogYWRkRXZlbnRMaXN0ZW5lcnMsXG4gICAgb2ZmOiByZW1vdmVFdmVudExpc3RlbmVycyxcbiAgICBlYWNoOiBlYWNoLFxuICAgIG1lcmdlOiBtZXJnZSxcbiAgICBleHRlbmQ6IGV4dGVuZCxcbiAgICBhc3NpZ246IGFzc2lnbixcbiAgICBpbmhlcml0OiBpbmhlcml0LFxuICAgIGJpbmRGbjogYmluZEZuLFxuICAgIHByZWZpeGVkOiBwcmVmaXhlZFxuICB9KTsgLy8gdGhpcyBwcmV2ZW50cyBlcnJvcnMgd2hlbiBIYW1tZXIgaXMgbG9hZGVkIGluIHRoZSBwcmVzZW5jZSBvZiBhbiBBTURcbiAgLy8gIHN0eWxlIGxvYWRlciBidXQgYnkgc2NyaXB0IHRhZywgbm90IGJ5IHRoZSBsb2FkZXIuXG5cbiAgdmFyIGZyZWVHbG9iYWwgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyA/IHNlbGYgOiB7fTsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5cbiAgZnJlZUdsb2JhbC5IYW1tZXIgPSBIYW1tZXI7XG5cbiAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgIGRlZmluZShmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gSGFtbWVyO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBtb2R1bGUgIT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IEhhbW1lcjtcbiAgfSBlbHNlIHtcbiAgICB3aW5kb3dbZXhwb3J0TmFtZV0gPSBIYW1tZXI7XG4gIH1cbn0pKHdpbmRvdywgZG9jdW1lbnQsICdIYW1tZXInKTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5087\n")},1677:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval('var __webpack_unused_export__;\n\n\n__webpack_unused_export__ = ({\n value: true\n});\n\nfunction _interopDefault(ex) {\n return ex && typeof ex === \'object\' && \'default\' in ex ? ex[\'default\'] : ex;\n}\n\nvar React = __webpack_require__(7294);\n\nvar React__default = _interopDefault(React);\n\nvar UAParser = __webpack_require__(4889);\n\nvar UA = new UAParser();\nvar browser = UA.getBrowser();\nvar cpu = UA.getCPU();\nvar device = UA.getDevice();\nvar engine = UA.getEngine();\nvar os = UA.getOS();\nvar ua = UA.getUA();\n\nvar setDefaults = function setDefaults(p) {\n var d = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \'none\';\n return p ? p : d;\n};\n\nvar getNavigatorInstance = function getNavigatorInstance() {\n if (typeof window !== \'undefined\') {\n if (window.navigator || navigator) {\n return window.navigator || navigator;\n }\n }\n\n return false;\n};\n\nvar isIOS13Check = function isIOS13Check(type) {\n var nav = getNavigatorInstance();\n return nav && nav.platform && (nav.platform.indexOf(type) !== -1 || nav.platform === \'MacIntel\' && nav.maxTouchPoints > 1 && !window.MSStream);\n};\n\nfunction _typeof(obj) {\n if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError("Cannot call a class as a function");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ("value" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(source, true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(source).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== "function" && superClass !== null) {\n throw new TypeError("Super expression must either be null or a function");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called");\n }\n\n return self;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (typeof call === "object" || typeof call === "function")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nvar DeviceTypes = {\n Mobile: \'mobile\',\n Tablet: \'tablet\',\n SmartTv: \'smarttv\',\n Console: \'console\',\n Wearable: \'wearable\',\n Browser: undefined\n};\nvar BrowserTypes = {\n Chrome: \'Chrome\',\n Firefox: "Firefox",\n Opera: "Opera",\n Yandex: "Yandex",\n Safari: "Safari",\n InternetExplorer: "Internet Explorer",\n Edge: "Edge",\n Chromium: "Chromium",\n Ie: \'IE\',\n MobileSafari: "Mobile Safari",\n EdgeChromium: "Edge Chromium",\n MIUI: "MIUI Browser",\n SamsungBrowser: \'Samsung Browser\'\n};\nvar OsTypes = {\n IOS: \'iOS\',\n Android: "Android",\n WindowsPhone: "Windows Phone",\n Windows: \'Windows\',\n MAC_OS: \'Mac OS\'\n};\nvar initialData = {\n isMobile: false,\n isTablet: false,\n isBrowser: false,\n isSmartTV: false,\n isConsole: false,\n isWearable: false\n};\n\nvar checkType = function checkType(type) {\n switch (type) {\n case DeviceTypes.Mobile:\n return {\n isMobile: true\n };\n\n case DeviceTypes.Tablet:\n return {\n isTablet: true\n };\n\n case DeviceTypes.SmartTv:\n return {\n isSmartTV: true\n };\n\n case DeviceTypes.Console:\n return {\n isConsole: true\n };\n\n case DeviceTypes.Wearable:\n return {\n isWearable: true\n };\n\n case DeviceTypes.Browser:\n return {\n isBrowser: true\n };\n\n default:\n return initialData;\n }\n};\n\nvar broPayload = function broPayload(isBrowser, browser, engine, os, ua) {\n return {\n isBrowser: isBrowser,\n browserMajorVersion: setDefaults(browser.major),\n browserFullVersion: setDefaults(browser.version),\n browserName: setDefaults(browser.name),\n engineName: setDefaults(engine.name),\n engineVersion: setDefaults(engine.version),\n osName: setDefaults(os.name),\n osVersion: setDefaults(os.version),\n userAgent: setDefaults(ua)\n };\n};\n\nvar mobilePayload = function mobilePayload(type, device, os, ua) {\n return _objectSpread2({}, type, {\n vendor: setDefaults(device.vendor),\n model: setDefaults(device.model),\n os: setDefaults(os.name),\n osVersion: setDefaults(os.version),\n ua: setDefaults(ua)\n });\n};\n\nvar stvPayload = function stvPayload(isSmartTV, engine, os, ua) {\n return {\n isSmartTV: isSmartTV,\n engineName: setDefaults(engine.name),\n engineVersion: setDefaults(engine.version),\n osName: setDefaults(os.name),\n osVersion: setDefaults(os.version),\n userAgent: setDefaults(ua)\n };\n};\n\nvar consolePayload = function consolePayload(isConsole, engine, os, ua) {\n return {\n isConsole: isConsole,\n engineName: setDefaults(engine.name),\n engineVersion: setDefaults(engine.version),\n osName: setDefaults(os.name),\n osVersion: setDefaults(os.version),\n userAgent: setDefaults(ua)\n };\n};\n\nvar wearPayload = function wearPayload(isWearable, engine, os, ua) {\n return {\n isWearable: isWearable,\n engineName: setDefaults(engine.name),\n engineVersion: setDefaults(engine.version),\n osName: setDefaults(os.name),\n osVersion: setDefaults(os.version),\n userAgent: setDefaults(ua)\n };\n};\n\nvar type = checkType(device.type);\n\nfunction deviceDetect() {\n var isBrowser = type.isBrowser,\n isMobile = type.isMobile,\n isTablet = type.isTablet,\n isSmartTV = type.isSmartTV,\n isConsole = type.isConsole,\n isWearable = type.isWearable;\n\n if (isBrowser) {\n return broPayload(isBrowser, browser, engine, os, ua);\n }\n\n if (isSmartTV) {\n return stvPayload(isSmartTV, engine, os, ua);\n }\n\n if (isConsole) {\n return consolePayload(isConsole, engine, os, ua);\n }\n\n if (isMobile) {\n return mobilePayload(type, device, os, ua);\n }\n\n if (isTablet) {\n return mobilePayload(type, device, os, ua);\n }\n\n if (isWearable) {\n return wearPayload(isWearable, engine, os, ua);\n }\n}\n\nvar isMobileType = function isMobileType() {\n return device.type === DeviceTypes.Mobile;\n};\n\nvar isTabletType = function isTabletType() {\n return device.type === DeviceTypes.Tablet;\n};\n\nvar isMobileAndTabletType = function isMobileAndTabletType() {\n switch (device.type) {\n case DeviceTypes.Mobile:\n case DeviceTypes.Tablet:\n return true;\n\n default:\n return false;\n }\n};\n\nvar isEdgeChromiumType = function isEdgeChromiumType() {\n return typeof ua === \'string\' && ua.indexOf(\'Edg/\') !== -1;\n};\n\nvar isSmartTVType = function isSmartTVType() {\n return device.type === DeviceTypes.SmartTv;\n};\n\nvar isBrowserType = function isBrowserType() {\n return device.type === DeviceTypes.Browser;\n};\n\nvar isWearableType = function isWearableType() {\n return device.type === DeviceTypes.Wearable;\n};\n\nvar isConsoleType = function isConsoleType() {\n return device.type === DeviceTypes.Console;\n};\n\nvar isAndroidType = function isAndroidType() {\n return os.name === OsTypes.Android;\n};\n\nvar isWindowsType = function isWindowsType() {\n return os.name === OsTypes.Windows;\n};\n\nvar isMacOsType = function isMacOsType() {\n return os.name === OsTypes.MAC_OS;\n};\n\nvar isWinPhoneType = function isWinPhoneType() {\n return os.name === OsTypes.WindowsPhone;\n};\n\nvar isIOSType = function isIOSType() {\n return os.name === OsTypes.IOS;\n};\n\nvar isChromeType = function isChromeType() {\n return browser.name === BrowserTypes.Chrome;\n};\n\nvar isFirefoxType = function isFirefoxType() {\n return browser.name === BrowserTypes.Firefox;\n};\n\nvar isChromiumType = function isChromiumType() {\n return browser.name === BrowserTypes.Chromium;\n};\n\nvar isEdgeType = function isEdgeType() {\n return browser.name === BrowserTypes.Edge;\n};\n\nvar isYandexType = function isYandexType() {\n return browser.name === BrowserTypes.Yandex;\n};\n\nvar isSafariType = function isSafariType() {\n return browser.name === BrowserTypes.Safari || browser.name === BrowserTypes.MobileSafari;\n};\n\nvar isMobileSafariType = function isMobileSafariType() {\n return browser.name === BrowserTypes.MobileSafari;\n};\n\nvar isOperaType = function isOperaType() {\n return browser.name === BrowserTypes.Opera;\n};\n\nvar isIEType = function isIEType() {\n return browser.name === BrowserTypes.InternetExplorer || browser.name === BrowserTypes.Ie;\n};\n\nvar isMIUIType = function isMIUIType() {\n return browser.name === BrowserTypes.MIUI;\n};\n\nvar isSamsungBrowserType = function isSamsungBrowserType() {\n return browser.name === BrowserTypes.SamsungBrowser;\n};\n\nvar isElectronType = function isElectronType() {\n var nav = getNavigatorInstance();\n var ua = nav && nav.userAgent && nav.userAgent.toLowerCase();\n return typeof ua === \'string\' ? /electron/.test(ua) : false;\n};\n\nvar getIOS13 = function getIOS13() {\n var nav = getNavigatorInstance();\n return nav && (/iPad|iPhone|iPod/.test(nav.platform) || nav.platform === \'MacIntel\' && nav.maxTouchPoints > 1) && !window.MSStream;\n};\n\nvar getIPad13 = function getIPad13() {\n return isIOS13Check(\'iPad\');\n};\n\nvar getIphone13 = function getIphone13() {\n return isIOS13Check(\'iPhone\');\n};\n\nvar getIPod13 = function getIPod13() {\n return isIOS13Check(\'iPod\');\n};\n\nvar getBrowserFullVersion = function getBrowserFullVersion() {\n return setDefaults(browser.version);\n};\n\nvar getBrowserVersion = function getBrowserVersion() {\n return setDefaults(browser.major);\n};\n\nvar getOsVersion = function getOsVersion() {\n return setDefaults(os.version);\n};\n\nvar getOsName = function getOsName() {\n return setDefaults(os.name);\n};\n\nvar getBrowserName = function getBrowserName() {\n return setDefaults(browser.name);\n};\n\nvar getMobileVendor = function getMobileVendor() {\n return setDefaults(device.vendor);\n};\n\nvar getMobileModel = function getMobileModel() {\n return setDefaults(device.model);\n};\n\nvar getEngineName = function getEngineName() {\n return setDefaults(engine.name);\n};\n\nvar getEngineVersion = function getEngineVersion() {\n return setDefaults(engine.version);\n};\n\nvar getUseragent = function getUseragent() {\n return setDefaults(ua);\n};\n\nvar getDeviceType = function getDeviceType() {\n return setDefaults(device.type, \'browser\');\n};\n\nvar isSmartTV = isSmartTVType();\nvar isConsole = isConsoleType();\nvar isWearable = isWearableType();\nvar isMobileSafari = isMobileSafariType() || getIPad13();\nvar isChromium = isChromiumType();\nvar isMobile = isMobileAndTabletType() || getIPad13();\nvar isMobileOnly = isMobileType();\nvar isTablet = isTabletType() || getIPad13();\nvar isBrowser = isBrowserType();\nvar isDesktop = isBrowserType();\nvar isAndroid = isAndroidType();\nvar isWinPhone = isWinPhoneType();\nvar isIOS = isIOSType() || getIPad13();\nvar isChrome = isChromeType();\nvar isFirefox = isFirefoxType();\nvar isSafari = isSafariType();\nvar isOpera = isOperaType();\nvar isIE = isIEType();\nvar osVersion = getOsVersion();\nvar osName = getOsName();\nvar fullBrowserVersion = getBrowserFullVersion();\nvar browserVersion = getBrowserVersion();\nvar browserName = getBrowserName();\nvar mobileVendor = getMobileVendor();\nvar mobileModel = getMobileModel();\nvar engineName = getEngineName();\nvar engineVersion = getEngineVersion();\nvar getUA = getUseragent();\nvar isEdge = isEdgeType() || isEdgeChromiumType();\nvar isYandex = isYandexType();\nvar deviceType = getDeviceType();\nvar isIOS13 = getIOS13();\nvar isIPad13 = getIPad13();\nvar isIPhone13 = getIphone13();\nvar isIPod13 = getIPod13();\nvar isElectron = isElectronType();\nvar isEdgeChromium = isEdgeChromiumType();\nvar isLegacyEdge = isEdgeType() && !isEdgeChromiumType();\nvar isWindows = isWindowsType();\nvar isMacOs = isMacOsType();\nvar isMIUI = isMIUIType();\nvar isSamsungBrowser = isSamsungBrowserType();\n\nvar AndroidView = function AndroidView(_ref) {\n var renderWithFragment = _ref.renderWithFragment,\n children = _ref.children,\n viewClassName = _ref.viewClassName,\n style = _ref.style,\n props = _objectWithoutProperties(_ref, ["renderWithFragment", "children", "viewClassName", "style"]);\n\n return isAndroid ? renderWithFragment ? React__default.createElement(React.Fragment, null, children) : React__default.createElement("div", _extends({\n className: viewClassName,\n style: style\n }, props), children) : null;\n};\n\nvar BrowserView = function BrowserView(_ref2) {\n var renderWithFragment = _ref2.renderWithFragment,\n children = _ref2.children,\n viewClassName = _ref2.viewClassName,\n style = _ref2.style,\n props = _objectWithoutProperties(_ref2, ["renderWithFragment", "children", "viewClassName", "style"]);\n\n return isBrowser ? renderWithFragment ? React__default.createElement(React.Fragment, null, children) : React__default.createElement("div", _extends({\n className: viewClassName,\n style: style\n }, props), children) : null;\n};\n\nvar IEView = function IEView(_ref3) {\n var renderWithFragment = _ref3.renderWithFragment,\n children = _ref3.children,\n viewClassName = _ref3.viewClassName,\n style = _ref3.style,\n props = _objectWithoutProperties(_ref3, ["renderWithFragment", "children", "viewClassName", "style"]);\n\n return isIE ? renderWithFragment ? React__default.createElement(React.Fragment, null, children) : React__default.createElement("div", _extends({\n className: viewClassName,\n style: style\n }, props), children) : null;\n};\n\nvar IOSView = function IOSView(_ref4) {\n var renderWithFragment = _ref4.renderWithFragment,\n children = _ref4.children,\n viewClassName = _ref4.viewClassName,\n style = _ref4.style,\n props = _objectWithoutProperties(_ref4, ["renderWithFragment", "children", "viewClassName", "style"]);\n\n return isIOS ? renderWithFragment ? React__default.createElement(React.Fragment, null, children) : React__default.createElement("div", _extends({\n className: viewClassName,\n style: style\n }, props), children) : null;\n};\n\nvar MobileView = function MobileView(_ref5) {\n var renderWithFragment = _ref5.renderWithFragment,\n children = _ref5.children,\n viewClassName = _ref5.viewClassName,\n style = _ref5.style,\n props = _objectWithoutProperties(_ref5, ["renderWithFragment", "children", "viewClassName", "style"]);\n\n return isMobile ? renderWithFragment ? React__default.createElement(React.Fragment, null, children) : React__default.createElement("div", _extends({\n className: viewClassName,\n style: style\n }, props), children) : null;\n};\n\nvar TabletView = function TabletView(_ref6) {\n var renderWithFragment = _ref6.renderWithFragment,\n children = _ref6.children,\n viewClassName = _ref6.viewClassName,\n style = _ref6.style,\n props = _objectWithoutProperties(_ref6, ["renderWithFragment", "children", "viewClassName", "style"]);\n\n return isTablet ? renderWithFragment ? React__default.createElement(React.Fragment, null, children) : React__default.createElement("div", _extends({\n className: viewClassName,\n style: style\n }, props), children) : null;\n};\n\nvar WinPhoneView = function WinPhoneView(_ref7) {\n var renderWithFragment = _ref7.renderWithFragment,\n children = _ref7.children,\n viewClassName = _ref7.viewClassName,\n style = _ref7.style,\n props = _objectWithoutProperties(_ref7, ["renderWithFragment", "children", "viewClassName", "style"]);\n\n return isWinPhone ? renderWithFragment ? React__default.createElement(React.Fragment, null, children) : React__default.createElement("div", _extends({\n className: viewClassName,\n style: style\n }, props), children) : null;\n};\n\nvar MobileOnlyView = function MobileOnlyView(_ref8) {\n var renderWithFragment = _ref8.renderWithFragment,\n children = _ref8.children,\n viewClassName = _ref8.viewClassName,\n style = _ref8.style,\n props = _objectWithoutProperties(_ref8, ["renderWithFragment", "children", "viewClassName", "style"]);\n\n return isMobileOnly ? renderWithFragment ? React__default.createElement(React.Fragment, null, children) : React__default.createElement("div", _extends({\n className: viewClassName,\n style: style\n }, props), children) : null;\n};\n\nvar SmartTVView = function SmartTVView(_ref9) {\n var renderWithFragment = _ref9.renderWithFragment,\n children = _ref9.children,\n viewClassName = _ref9.viewClassName,\n style = _ref9.style,\n props = _objectWithoutProperties(_ref9, ["renderWithFragment", "children", "viewClassName", "style"]);\n\n return isSmartTV ? renderWithFragment ? React__default.createElement(React.Fragment, null, children) : React__default.createElement("div", _extends({\n className: viewClassName,\n style: style\n }, props), children) : null;\n};\n\nvar ConsoleView = function ConsoleView(_ref10) {\n var renderWithFragment = _ref10.renderWithFragment,\n children = _ref10.children,\n viewClassName = _ref10.viewClassName,\n style = _ref10.style,\n props = _objectWithoutProperties(_ref10, ["renderWithFragment", "children", "viewClassName", "style"]);\n\n return isConsole ? renderWithFragment ? React__default.createElement(React.Fragment, null, children) : React__default.createElement("div", _extends({\n className: viewClassName,\n style: style\n }, props), children) : null;\n};\n\nvar WearableView = function WearableView(_ref11) {\n var renderWithFragment = _ref11.renderWithFragment,\n children = _ref11.children,\n viewClassName = _ref11.viewClassName,\n style = _ref11.style,\n props = _objectWithoutProperties(_ref11, ["renderWithFragment", "children", "viewClassName", "style"]);\n\n return isWearable ? renderWithFragment ? React__default.createElement(React.Fragment, null, children) : React__default.createElement("div", _extends({\n className: viewClassName,\n style: style\n }, props), children) : null;\n};\n\nvar CustomView = function CustomView(_ref12) {\n var renderWithFragment = _ref12.renderWithFragment,\n children = _ref12.children,\n viewClassName = _ref12.viewClassName,\n style = _ref12.style,\n condition = _ref12.condition,\n props = _objectWithoutProperties(_ref12, ["renderWithFragment", "children", "viewClassName", "style", "condition"]);\n\n return condition ? renderWithFragment ? React__default.createElement(React.Fragment, null, children) : React__default.createElement("div", _extends({\n className: viewClassName,\n style: style\n }, props), children) : null;\n};\n\nfunction withOrientationChange(WrappedComponent) {\n return /*#__PURE__*/function (_React$Component) {\n _inherits(_class, _React$Component);\n\n function _class(props) {\n var _this;\n\n _classCallCheck(this, _class);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(_class).call(this, props));\n _this.isEventListenerAdded = false;\n _this.handleOrientationChange = _this.handleOrientationChange.bind(_assertThisInitialized(_this));\n _this.onOrientationChange = _this.onOrientationChange.bind(_assertThisInitialized(_this));\n _this.onPageLoad = _this.onPageLoad.bind(_assertThisInitialized(_this));\n _this.state = {\n isLandscape: false,\n isPortrait: false\n };\n return _this;\n }\n\n _createClass(_class, [{\n key: "handleOrientationChange",\n value: function handleOrientationChange() {\n if (!this.isEventListenerAdded) {\n this.isEventListenerAdded = true;\n }\n\n var orientation = window.innerWidth > window.innerHeight ? 90 : 0;\n this.setState({\n isPortrait: orientation === 0,\n isLandscape: orientation === 90\n });\n }\n }, {\n key: "onOrientationChange",\n value: function onOrientationChange() {\n this.handleOrientationChange();\n }\n }, {\n key: "onPageLoad",\n value: function onPageLoad() {\n this.handleOrientationChange();\n }\n }, {\n key: "componentDidMount",\n value: function componentDidMount() {\n if ((typeof window === "undefined" ? "undefined" : _typeof(window)) !== undefined && isMobile) {\n if (!this.isEventListenerAdded) {\n this.handleOrientationChange();\n window.addEventListener("load", this.onPageLoad, false);\n } else {\n window.removeEventListener("load", this.onPageLoad, false);\n }\n\n window.addEventListener("resize", this.onOrientationChange, false);\n }\n }\n }, {\n key: "componentWillUnmount",\n value: function componentWillUnmount() {\n window.removeEventListener("resize", this.onOrientationChange, false);\n }\n }, {\n key: "render",\n value: function render() {\n return React__default.createElement(WrappedComponent, _extends({}, this.props, {\n isLandscape: this.state.isLandscape,\n isPortrait: this.state.isPortrait\n }));\n }\n }]);\n\n return _class;\n }(React__default.Component);\n}\n\n__webpack_unused_export__ = AndroidView;\n__webpack_unused_export__ = BrowserTypes;\n__webpack_unused_export__ = BrowserView;\n__webpack_unused_export__ = ConsoleView;\n__webpack_unused_export__ = CustomView;\n__webpack_unused_export__ = IEView;\n__webpack_unused_export__ = IOSView;\n__webpack_unused_export__ = MobileOnlyView;\n__webpack_unused_export__ = MobileView;\n__webpack_unused_export__ = OsTypes;\n__webpack_unused_export__ = SmartTVView;\n__webpack_unused_export__ = TabletView;\n__webpack_unused_export__ = WearableView;\n__webpack_unused_export__ = WinPhoneView;\n__webpack_unused_export__ = browserName;\n__webpack_unused_export__ = browserVersion;\n__webpack_unused_export__ = deviceDetect;\n__webpack_unused_export__ = deviceType;\n__webpack_unused_export__ = engineName;\n__webpack_unused_export__ = engineVersion;\n__webpack_unused_export__ = fullBrowserVersion;\n__webpack_unused_export__ = getUA;\n__webpack_unused_export__ = isAndroid;\n__webpack_unused_export__ = isBrowser;\n__webpack_unused_export__ = isChrome;\n__webpack_unused_export__ = isChromium;\n__webpack_unused_export__ = isConsole;\n__webpack_unused_export__ = isDesktop;\n__webpack_unused_export__ = isEdge;\n__webpack_unused_export__ = isEdgeChromium;\n__webpack_unused_export__ = isElectron;\n__webpack_unused_export__ = isFirefox;\n__webpack_unused_export__ = isIE;\n__webpack_unused_export__ = isIOS;\n__webpack_unused_export__ = isIOS13;\n__webpack_unused_export__ = isIPad13;\n__webpack_unused_export__ = isIPhone13;\n__webpack_unused_export__ = isIPod13;\n__webpack_unused_export__ = isLegacyEdge;\n__webpack_unused_export__ = isMIUI;\n__webpack_unused_export__ = isMacOs;\nexports.tq = isMobile;\n__webpack_unused_export__ = isMobileOnly;\n__webpack_unused_export__ = isMobileSafari;\n__webpack_unused_export__ = isOpera;\n__webpack_unused_export__ = isSafari;\n__webpack_unused_export__ = isSamsungBrowser;\n__webpack_unused_export__ = isSmartTV;\n__webpack_unused_export__ = isTablet;\n__webpack_unused_export__ = isWearable;\n__webpack_unused_export__ = isWinPhone;\n__webpack_unused_export__ = isWindows;\n__webpack_unused_export__ = isYandex;\n__webpack_unused_export__ = mobileModel;\n__webpack_unused_export__ = mobileVendor;\n__webpack_unused_export__ = osName;\n__webpack_unused_export__ = osVersion;\n__webpack_unused_export__ = withOrientationChange;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9yZWFjdC1kZXZpY2UtZGV0ZWN0L21haW4uanM/N2I2OSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQWE7O0FBRWIsNkJBQTZDO0FBQzdDO0FBQ0EsQ0FBQyxDQUFDOztBQUVGO0FBQ0E7QUFDQTs7QUFFQSxZQUFZLG1CQUFPLENBQUMsSUFBTzs7QUFFM0I7O0FBRUEsZUFBZSxtQkFBTyxDQUFDLElBQWlDOztBQUV4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGlCQUFpQixrQkFBa0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUIsc0JBQXNCO0FBQ3pDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxpQkFBaUIsc0JBQXNCO0FBQ3ZDOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGFBQWEsdUJBQXVCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLGVBQWUsNkJBQTZCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLHlFQUF5RTtBQUN6RTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLEdBQUc7QUFDSDs7QUFFQSx5QkFBbUI7QUFDbkIseUJBQW9CO0FBQ3BCLHlCQUFtQjtBQUNuQix5QkFBbUI7QUFDbkIseUJBQWtCO0FBQ2xCLHlCQUFjO0FBQ2QseUJBQWU7QUFDZix5QkFBc0I7QUFDdEIseUJBQWtCO0FBQ2xCLHlCQUFlO0FBQ2YseUJBQW1CO0FBQ25CLHlCQUFrQjtBQUNsQix5QkFBb0I7QUFDcEIseUJBQW9CO0FBQ3BCLHlCQUFtQjtBQUNuQix5QkFBc0I7QUFDdEIseUJBQW9CO0FBQ3BCLHlCQUFrQjtBQUNsQix5QkFBa0I7QUFDbEIseUJBQXFCO0FBQ3JCLHlCQUEwQjtBQUMxQix5QkFBYTtBQUNiLHlCQUFpQjtBQUNqQix5QkFBaUI7QUFDakIseUJBQWdCO0FBQ2hCLHlCQUFrQjtBQUNsQix5QkFBaUI7QUFDakIseUJBQWlCO0FBQ2pCLHlCQUFjO0FBQ2QseUJBQXNCO0FBQ3RCLHlCQUFrQjtBQUNsQix5QkFBaUI7QUFDakIseUJBQVk7QUFDWix5QkFBYTtBQUNiLHlCQUFlO0FBQ2YseUJBQWdCO0FBQ2hCLHlCQUFrQjtBQUNsQix5QkFBZ0I7QUFDaEIseUJBQW9CO0FBQ3BCLHlCQUFjO0FBQ2QseUJBQWU7QUFDZixVQUFnQjtBQUNoQix5QkFBb0I7QUFDcEIseUJBQXNCO0FBQ3RCLHlCQUFlO0FBQ2YseUJBQWdCO0FBQ2hCLHlCQUF3QjtBQUN4Qix5QkFBaUI7QUFDakIseUJBQWdCO0FBQ2hCLHlCQUFrQjtBQUNsQix5QkFBa0I7QUFDbEIseUJBQWlCO0FBQ2pCLHlCQUFnQjtBQUNoQix5QkFBbUI7QUFDbkIseUJBQW9CO0FBQ3BCLHlCQUFjO0FBQ2QseUJBQWlCO0FBQ2pCLHlCQUE2QiIsImZpbGUiOiIxNjc3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxuZnVuY3Rpb24gX2ludGVyb3BEZWZhdWx0KGV4KSB7XG4gIHJldHVybiBleCAmJiB0eXBlb2YgZXggPT09ICdvYmplY3QnICYmICdkZWZhdWx0JyBpbiBleCA/IGV4WydkZWZhdWx0J10gOiBleDtcbn1cblxudmFyIFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcblxudmFyIFJlYWN0X19kZWZhdWx0ID0gX2ludGVyb3BEZWZhdWx0KFJlYWN0KTtcblxudmFyIFVBUGFyc2VyID0gcmVxdWlyZSgndWEtcGFyc2VyLWpzL2Rpc3QvdWEtcGFyc2VyLm1pbicpO1xuXG52YXIgVUEgPSBuZXcgVUFQYXJzZXIoKTtcbnZhciBicm93c2VyID0gVUEuZ2V0QnJvd3NlcigpO1xudmFyIGNwdSA9IFVBLmdldENQVSgpO1xudmFyIGRldmljZSA9IFVBLmdldERldmljZSgpO1xudmFyIGVuZ2luZSA9IFVBLmdldEVuZ2luZSgpO1xudmFyIG9zID0gVUEuZ2V0T1MoKTtcbnZhciB1YSA9IFVBLmdldFVBKCk7XG5cbnZhciBzZXREZWZhdWx0cyA9IGZ1bmN0aW9uIHNldERlZmF1bHRzKHApIHtcbiAgdmFyIGQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6ICdub25lJztcbiAgcmV0dXJuIHAgPyBwIDogZDtcbn07XG5cbnZhciBnZXROYXZpZ2F0b3JJbnN0YW5jZSA9IGZ1bmN0aW9uIGdldE5hdmlnYXRvckluc3RhbmNlKCkge1xuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBpZiAod2luZG93Lm5hdmlnYXRvciB8fCBuYXZpZ2F0b3IpIHtcbiAgICAgIHJldHVybiB3aW5kb3cubmF2aWdhdG9yIHx8IG5hdmlnYXRvcjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59O1xuXG52YXIgaXNJT1MxM0NoZWNrID0gZnVuY3Rpb24gaXNJT1MxM0NoZWNrKHR5cGUpIHtcbiAgdmFyIG5hdiA9IGdldE5hdmlnYXRvckluc3RhbmNlKCk7XG4gIHJldHVybiBuYXYgJiYgbmF2LnBsYXRmb3JtICYmIChuYXYucGxhdGZvcm0uaW5kZXhPZih0eXBlKSAhPT0gLTEgfHwgbmF2LnBsYXRmb3JtID09PSAnTWFjSW50ZWwnICYmIG5hdi5tYXhUb3VjaFBvaW50cyA+IDEgJiYgIXdpbmRvdy5NU1N0cmVhbSk7XG59O1xuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHtcbiAgICBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgICAgIHJldHVybiB0eXBlb2Ygb2JqO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gICAgICByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIF90eXBlb2Yob2JqKTtcbn1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgcmV0dXJuIENvbnN0cnVjdG9yO1xufVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIG9iajtcbn1cblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7XG4gIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07XG5cbiAgICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHtcbiAgICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfTtcblxuICByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn1cblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7XG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTtcblxuICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICAgIHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpO1xuICAgIGlmIChlbnVtZXJhYmxlT25seSkgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHtcbiAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlO1xuICAgIH0pO1xuICAgIGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTtcbiAgfVxuXG4gIHJldHVybiBrZXlzO1xufVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkMih0YXJnZXQpIHtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTtcblxuICAgIGlmIChpICUgMikge1xuICAgICAgb3duS2V5cyhzb3VyY2UsIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG93bktleXMoc291cmNlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTtcbiAgfVxuXG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwge1xuICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICB2YWx1ZTogc3ViQ2xhc3MsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH1cbiAgfSk7XG4gIGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICAgIHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7XG4gIH07XG4gIHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7XG59XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgIG8uX19wcm90b19fID0gcDtcbiAgICByZXR1cm4gbztcbiAgfTtcblxuICByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApO1xufVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7XG4gIGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9O1xuICB2YXIgdGFyZ2V0ID0ge307XG4gIHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTtcbiAgdmFyIGtleSwgaTtcblxuICBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGtleSA9IHNvdXJjZUtleXNbaV07XG4gICAgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTtcbiAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHtcbiAgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307XG5cbiAgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpO1xuXG4gIHZhciBrZXksIGk7XG5cbiAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldO1xuICAgICAgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTtcbiAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7XG4gICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikge1xuICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG5cbiAgcmV0dXJuIHNlbGY7XG59XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHtcbiAgaWYgKGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7XG4gICAgcmV0dXJuIGNhbGw7XG4gIH1cblxuICByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTtcbn1cblxudmFyIERldmljZVR5cGVzID0ge1xuICBNb2JpbGU6ICdtb2JpbGUnLFxuICBUYWJsZXQ6ICd0YWJsZXQnLFxuICBTbWFydFR2OiAnc21hcnR0dicsXG4gIENvbnNvbGU6ICdjb25zb2xlJyxcbiAgV2VhcmFibGU6ICd3ZWFyYWJsZScsXG4gIEJyb3dzZXI6IHVuZGVmaW5lZFxufTtcbnZhciBCcm93c2VyVHlwZXMgPSB7XG4gIENocm9tZTogJ0Nocm9tZScsXG4gIEZpcmVmb3g6IFwiRmlyZWZveFwiLFxuICBPcGVyYTogXCJPcGVyYVwiLFxuICBZYW5kZXg6IFwiWWFuZGV4XCIsXG4gIFNhZmFyaTogXCJTYWZhcmlcIixcbiAgSW50ZXJuZXRFeHBsb3JlcjogXCJJbnRlcm5ldCBFeHBsb3JlclwiLFxuICBFZGdlOiBcIkVkZ2VcIixcbiAgQ2hyb21pdW06IFwiQ2hyb21pdW1cIixcbiAgSWU6ICdJRScsXG4gIE1vYmlsZVNhZmFyaTogXCJNb2JpbGUgU2FmYXJpXCIsXG4gIEVkZ2VDaHJvbWl1bTogXCJFZGdlIENocm9taXVtXCIsXG4gIE1JVUk6IFwiTUlVSSBCcm93c2VyXCIsXG4gIFNhbXN1bmdCcm93c2VyOiAnU2Ftc3VuZyBCcm93c2VyJ1xufTtcbnZhciBPc1R5cGVzID0ge1xuICBJT1M6ICdpT1MnLFxuICBBbmRyb2lkOiBcIkFuZHJvaWRcIixcbiAgV2luZG93c1Bob25lOiBcIldpbmRvd3MgUGhvbmVcIixcbiAgV2luZG93czogJ1dpbmRvd3MnLFxuICBNQUNfT1M6ICdNYWMgT1MnXG59O1xudmFyIGluaXRpYWxEYXRhID0ge1xuICBpc01vYmlsZTogZmFsc2UsXG4gIGlzVGFibGV0OiBmYWxzZSxcbiAgaXNCcm93c2VyOiBmYWxzZSxcbiAgaXNTbWFydFRWOiBmYWxzZSxcbiAgaXNDb25zb2xlOiBmYWxzZSxcbiAgaXNXZWFyYWJsZTogZmFsc2Vcbn07XG5cbnZhciBjaGVja1R5cGUgPSBmdW5jdGlvbiBjaGVja1R5cGUodHlwZSkge1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIERldmljZVR5cGVzLk1vYmlsZTpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlzTW9iaWxlOiB0cnVlXG4gICAgICB9O1xuXG4gICAgY2FzZSBEZXZpY2VUeXBlcy5UYWJsZXQ6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpc1RhYmxldDogdHJ1ZVxuICAgICAgfTtcblxuICAgIGNhc2UgRGV2aWNlVHlwZXMuU21hcnRUdjpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlzU21hcnRUVjogdHJ1ZVxuICAgICAgfTtcblxuICAgIGNhc2UgRGV2aWNlVHlwZXMuQ29uc29sZTpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlzQ29uc29sZTogdHJ1ZVxuICAgICAgfTtcblxuICAgIGNhc2UgRGV2aWNlVHlwZXMuV2VhcmFibGU6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpc1dlYXJhYmxlOiB0cnVlXG4gICAgICB9O1xuXG4gICAgY2FzZSBEZXZpY2VUeXBlcy5Ccm93c2VyOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaXNCcm93c2VyOiB0cnVlXG4gICAgICB9O1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBpbml0aWFsRGF0YTtcbiAgfVxufTtcblxudmFyIGJyb1BheWxvYWQgPSBmdW5jdGlvbiBicm9QYXlsb2FkKGlzQnJvd3NlciwgYnJvd3NlciwgZW5naW5lLCBvcywgdWEpIHtcbiAgcmV0dXJuIHtcbiAgICBpc0Jyb3dzZXI6IGlzQnJvd3NlcixcbiAgICBicm93c2VyTWFqb3JWZXJzaW9uOiBzZXREZWZhdWx0cyhicm93c2VyLm1ham9yKSxcbiAgICBicm93c2VyRnVsbFZlcnNpb246IHNldERlZmF1bHRzKGJyb3dzZXIudmVyc2lvbiksXG4gICAgYnJvd3Nlck5hbWU6IHNldERlZmF1bHRzKGJyb3dzZXIubmFtZSksXG4gICAgZW5naW5lTmFtZTogc2V0RGVmYXVsdHMoZW5naW5lLm5hbWUpLFxuICAgIGVuZ2luZVZlcnNpb246IHNldERlZmF1bHRzKGVuZ2luZS52ZXJzaW9uKSxcbiAgICBvc05hbWU6IHNldERlZmF1bHRzKG9zLm5hbWUpLFxuICAgIG9zVmVyc2lvbjogc2V0RGVmYXVsdHMob3MudmVyc2lvbiksXG4gICAgdXNlckFnZW50OiBzZXREZWZhdWx0cyh1YSlcbiAgfTtcbn07XG5cbnZhciBtb2JpbGVQYXlsb2FkID0gZnVuY3Rpb24gbW9iaWxlUGF5bG9hZCh0eXBlLCBkZXZpY2UsIG9zLCB1YSkge1xuICByZXR1cm4gX29iamVjdFNwcmVhZDIoe30sIHR5cGUsIHtcbiAgICB2ZW5kb3I6IHNldERlZmF1bHRzKGRldmljZS52ZW5kb3IpLFxuICAgIG1vZGVsOiBzZXREZWZhdWx0cyhkZXZpY2UubW9kZWwpLFxuICAgIG9zOiBzZXREZWZhdWx0cyhvcy5uYW1lKSxcbiAgICBvc1ZlcnNpb246IHNldERlZmF1bHRzKG9zLnZlcnNpb24pLFxuICAgIHVhOiBzZXREZWZhdWx0cyh1YSlcbiAgfSk7XG59O1xuXG52YXIgc3R2UGF5bG9hZCA9IGZ1bmN0aW9uIHN0dlBheWxvYWQoaXNTbWFydFRWLCBlbmdpbmUsIG9zLCB1YSkge1xuICByZXR1cm4ge1xuICAgIGlzU21hcnRUVjogaXNTbWFydFRWLFxuICAgIGVuZ2luZU5hbWU6IHNldERlZmF1bHRzKGVuZ2luZS5uYW1lKSxcbiAgICBlbmdpbmVWZXJzaW9uOiBzZXREZWZhdWx0cyhlbmdpbmUudmVyc2lvbiksXG4gICAgb3NOYW1lOiBzZXREZWZhdWx0cyhvcy5uYW1lKSxcbiAgICBvc1ZlcnNpb246IHNldERlZmF1bHRzKG9zLnZlcnNpb24pLFxuICAgIHVzZXJBZ2VudDogc2V0RGVmYXVsdHModWEpXG4gIH07XG59O1xuXG52YXIgY29uc29sZVBheWxvYWQgPSBmdW5jdGlvbiBjb25zb2xlUGF5bG9hZChpc0NvbnNvbGUsIGVuZ2luZSwgb3MsIHVhKSB7XG4gIHJldHVybiB7XG4gICAgaXNDb25zb2xlOiBpc0NvbnNvbGUsXG4gICAgZW5naW5lTmFtZTogc2V0RGVmYXVsdHMoZW5naW5lLm5hbWUpLFxuICAgIGVuZ2luZVZlcnNpb246IHNldERlZmF1bHRzKGVuZ2luZS52ZXJzaW9uKSxcbiAgICBvc05hbWU6IHNldERlZmF1bHRzKG9zLm5hbWUpLFxuICAgIG9zVmVyc2lvbjogc2V0RGVmYXVsdHMob3MudmVyc2lvbiksXG4gICAgdXNlckFnZW50OiBzZXREZWZhdWx0cyh1YSlcbiAgfTtcbn07XG5cbnZhciB3ZWFyUGF5bG9hZCA9IGZ1bmN0aW9uIHdlYXJQYXlsb2FkKGlzV2VhcmFibGUsIGVuZ2luZSwgb3MsIHVhKSB7XG4gIHJldHVybiB7XG4gICAgaXNXZWFyYWJsZTogaXNXZWFyYWJsZSxcbiAgICBlbmdpbmVOYW1lOiBzZXREZWZhdWx0cyhlbmdpbmUubmFtZSksXG4gICAgZW5naW5lVmVyc2lvbjogc2V0RGVmYXVsdHMoZW5naW5lLnZlcnNpb24pLFxuICAgIG9zTmFtZTogc2V0RGVmYXVsdHMob3MubmFtZSksXG4gICAgb3NWZXJzaW9uOiBzZXREZWZhdWx0cyhvcy52ZXJzaW9uKSxcbiAgICB1c2VyQWdlbnQ6IHNldERlZmF1bHRzKHVhKVxuICB9O1xufTtcblxudmFyIHR5cGUgPSBjaGVja1R5cGUoZGV2aWNlLnR5cGUpO1xuXG5mdW5jdGlvbiBkZXZpY2VEZXRlY3QoKSB7XG4gIHZhciBpc0Jyb3dzZXIgPSB0eXBlLmlzQnJvd3NlcixcbiAgICAgIGlzTW9iaWxlID0gdHlwZS5pc01vYmlsZSxcbiAgICAgIGlzVGFibGV0ID0gdHlwZS5pc1RhYmxldCxcbiAgICAgIGlzU21hcnRUViA9IHR5cGUuaXNTbWFydFRWLFxuICAgICAgaXNDb25zb2xlID0gdHlwZS5pc0NvbnNvbGUsXG4gICAgICBpc1dlYXJhYmxlID0gdHlwZS5pc1dlYXJhYmxlO1xuXG4gIGlmIChpc0Jyb3dzZXIpIHtcbiAgICByZXR1cm4gYnJvUGF5bG9hZChpc0Jyb3dzZXIsIGJyb3dzZXIsIGVuZ2luZSwgb3MsIHVhKTtcbiAgfVxuXG4gIGlmIChpc1NtYXJ0VFYpIHtcbiAgICByZXR1cm4gc3R2UGF5bG9hZChpc1NtYXJ0VFYsIGVuZ2luZSwgb3MsIHVhKTtcbiAgfVxuXG4gIGlmIChpc0NvbnNvbGUpIHtcbiAgICByZXR1cm4gY29uc29sZVBheWxvYWQoaXNDb25zb2xlLCBlbmdpbmUsIG9zLCB1YSk7XG4gIH1cblxuICBpZiAoaXNNb2JpbGUpIHtcbiAgICByZXR1cm4gbW9iaWxlUGF5bG9hZCh0eXBlLCBkZXZpY2UsIG9zLCB1YSk7XG4gIH1cblxuICBpZiAoaXNUYWJsZXQpIHtcbiAgICByZXR1cm4gbW9iaWxlUGF5bG9hZCh0eXBlLCBkZXZpY2UsIG9zLCB1YSk7XG4gIH1cblxuICBpZiAoaXNXZWFyYWJsZSkge1xuICAgIHJldHVybiB3ZWFyUGF5bG9hZChpc1dlYXJhYmxlLCBlbmdpbmUsIG9zLCB1YSk7XG4gIH1cbn1cblxudmFyIGlzTW9iaWxlVHlwZSA9IGZ1bmN0aW9uIGlzTW9iaWxlVHlwZSgpIHtcbiAgcmV0dXJuIGRldmljZS50eXBlID09PSBEZXZpY2VUeXBlcy5Nb2JpbGU7XG59O1xuXG52YXIgaXNUYWJsZXRUeXBlID0gZnVuY3Rpb24gaXNUYWJsZXRUeXBlKCkge1xuICByZXR1cm4gZGV2aWNlLnR5cGUgPT09IERldmljZVR5cGVzLlRhYmxldDtcbn07XG5cbnZhciBpc01vYmlsZUFuZFRhYmxldFR5cGUgPSBmdW5jdGlvbiBpc01vYmlsZUFuZFRhYmxldFR5cGUoKSB7XG4gIHN3aXRjaCAoZGV2aWNlLnR5cGUpIHtcbiAgICBjYXNlIERldmljZVR5cGVzLk1vYmlsZTpcbiAgICBjYXNlIERldmljZVR5cGVzLlRhYmxldDpcbiAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxudmFyIGlzRWRnZUNocm9taXVtVHlwZSA9IGZ1bmN0aW9uIGlzRWRnZUNocm9taXVtVHlwZSgpIHtcbiAgcmV0dXJuIHR5cGVvZiB1YSA9PT0gJ3N0cmluZycgJiYgdWEuaW5kZXhPZignRWRnLycpICE9PSAtMTtcbn07XG5cbnZhciBpc1NtYXJ0VFZUeXBlID0gZnVuY3Rpb24gaXNTbWFydFRWVHlwZSgpIHtcbiAgcmV0dXJuIGRldmljZS50eXBlID09PSBEZXZpY2VUeXBlcy5TbWFydFR2O1xufTtcblxudmFyIGlzQnJvd3NlclR5cGUgPSBmdW5jdGlvbiBpc0Jyb3dzZXJUeXBlKCkge1xuICByZXR1cm4gZGV2aWNlLnR5cGUgPT09IERldmljZVR5cGVzLkJyb3dzZXI7XG59O1xuXG52YXIgaXNXZWFyYWJsZVR5cGUgPSBmdW5jdGlvbiBpc1dlYXJhYmxlVHlwZSgpIHtcbiAgcmV0dXJuIGRldmljZS50eXBlID09PSBEZXZpY2VUeXBlcy5XZWFyYWJsZTtcbn07XG5cbnZhciBpc0NvbnNvbGVUeXBlID0gZnVuY3Rpb24gaXNDb25zb2xlVHlwZSgpIHtcbiAgcmV0dXJuIGRldmljZS50eXBlID09PSBEZXZpY2VUeXBlcy5Db25zb2xlO1xufTtcblxudmFyIGlzQW5kcm9pZFR5cGUgPSBmdW5jdGlvbiBpc0FuZHJvaWRUeXBlKCkge1xuICByZXR1cm4gb3MubmFtZSA9PT0gT3NUeXBlcy5BbmRyb2lkO1xufTtcblxudmFyIGlzV2luZG93c1R5cGUgPSBmdW5jdGlvbiBpc1dpbmRvd3NUeXBlKCkge1xuICByZXR1cm4gb3MubmFtZSA9PT0gT3NUeXBlcy5XaW5kb3dzO1xufTtcblxudmFyIGlzTWFjT3NUeXBlID0gZnVuY3Rpb24gaXNNYWNPc1R5cGUoKSB7XG4gIHJldHVybiBvcy5uYW1lID09PSBPc1R5cGVzLk1BQ19PUztcbn07XG5cbnZhciBpc1dpblBob25lVHlwZSA9IGZ1bmN0aW9uIGlzV2luUGhvbmVUeXBlKCkge1xuICByZXR1cm4gb3MubmFtZSA9PT0gT3NUeXBlcy5XaW5kb3dzUGhvbmU7XG59O1xuXG52YXIgaXNJT1NUeXBlID0gZnVuY3Rpb24gaXNJT1NUeXBlKCkge1xuICByZXR1cm4gb3MubmFtZSA9PT0gT3NUeXBlcy5JT1M7XG59O1xuXG52YXIgaXNDaHJvbWVUeXBlID0gZnVuY3Rpb24gaXNDaHJvbWVUeXBlKCkge1xuICByZXR1cm4gYnJvd3Nlci5uYW1lID09PSBCcm93c2VyVHlwZXMuQ2hyb21lO1xufTtcblxudmFyIGlzRmlyZWZveFR5cGUgPSBmdW5jdGlvbiBpc0ZpcmVmb3hUeXBlKCkge1xuICByZXR1cm4gYnJvd3Nlci5uYW1lID09PSBCcm93c2VyVHlwZXMuRmlyZWZveDtcbn07XG5cbnZhciBpc0Nocm9taXVtVHlwZSA9IGZ1bmN0aW9uIGlzQ2hyb21pdW1UeXBlKCkge1xuICByZXR1cm4gYnJvd3Nlci5uYW1lID09PSBCcm93c2VyVHlwZXMuQ2hyb21pdW07XG59O1xuXG52YXIgaXNFZGdlVHlwZSA9IGZ1bmN0aW9uIGlzRWRnZVR5cGUoKSB7XG4gIHJldHVybiBicm93c2VyLm5hbWUgPT09IEJyb3dzZXJUeXBlcy5FZGdlO1xufTtcblxudmFyIGlzWWFuZGV4VHlwZSA9IGZ1bmN0aW9uIGlzWWFuZGV4VHlwZSgpIHtcbiAgcmV0dXJuIGJyb3dzZXIubmFtZSA9PT0gQnJvd3NlclR5cGVzLllhbmRleDtcbn07XG5cbnZhciBpc1NhZmFyaVR5cGUgPSBmdW5jdGlvbiBpc1NhZmFyaVR5cGUoKSB7XG4gIHJldHVybiBicm93c2VyLm5hbWUgPT09IEJyb3dzZXJUeXBlcy5TYWZhcmkgfHwgYnJvd3Nlci5uYW1lID09PSBCcm93c2VyVHlwZXMuTW9iaWxlU2FmYXJpO1xufTtcblxudmFyIGlzTW9iaWxlU2FmYXJpVHlwZSA9IGZ1bmN0aW9uIGlzTW9iaWxlU2FmYXJpVHlwZSgpIHtcbiAgcmV0dXJuIGJyb3dzZXIubmFtZSA9PT0gQnJvd3NlclR5cGVzLk1vYmlsZVNhZmFyaTtcbn07XG5cbnZhciBpc09wZXJhVHlwZSA9IGZ1bmN0aW9uIGlzT3BlcmFUeXBlKCkge1xuICByZXR1cm4gYnJvd3Nlci5uYW1lID09PSBCcm93c2VyVHlwZXMuT3BlcmE7XG59O1xuXG52YXIgaXNJRVR5cGUgPSBmdW5jdGlvbiBpc0lFVHlwZSgpIHtcbiAgcmV0dXJuIGJyb3dzZXIubmFtZSA9PT0gQnJvd3NlclR5cGVzLkludGVybmV0RXhwbG9yZXIgfHwgYnJvd3Nlci5uYW1lID09PSBCcm93c2VyVHlwZXMuSWU7XG59O1xuXG52YXIgaXNNSVVJVHlwZSA9IGZ1bmN0aW9uIGlzTUlVSVR5cGUoKSB7XG4gIHJldHVybiBicm93c2VyLm5hbWUgPT09IEJyb3dzZXJUeXBlcy5NSVVJO1xufTtcblxudmFyIGlzU2Ftc3VuZ0Jyb3dzZXJUeXBlID0gZnVuY3Rpb24gaXNTYW1zdW5nQnJvd3NlclR5cGUoKSB7XG4gIHJldHVybiBicm93c2VyLm5hbWUgPT09IEJyb3dzZXJUeXBlcy5TYW1zdW5nQnJvd3Nlcjtcbn07XG5cbnZhciBpc0VsZWN0cm9uVHlwZSA9IGZ1bmN0aW9uIGlzRWxlY3Ryb25UeXBlKCkge1xuICB2YXIgbmF2ID0gZ2V0TmF2aWdhdG9ySW5zdGFuY2UoKTtcbiAgdmFyIHVhID0gbmF2ICYmIG5hdi51c2VyQWdlbnQgJiYgbmF2LnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gdHlwZW9mIHVhID09PSAnc3RyaW5nJyA/IC9lbGVjdHJvbi8udGVzdCh1YSkgOiBmYWxzZTtcbn07XG5cbnZhciBnZXRJT1MxMyA9IGZ1bmN0aW9uIGdldElPUzEzKCkge1xuICB2YXIgbmF2ID0gZ2V0TmF2aWdhdG9ySW5zdGFuY2UoKTtcbiAgcmV0dXJuIG5hdiAmJiAoL2lQYWR8aVBob25lfGlQb2QvLnRlc3QobmF2LnBsYXRmb3JtKSB8fCBuYXYucGxhdGZvcm0gPT09ICdNYWNJbnRlbCcgJiYgbmF2Lm1heFRvdWNoUG9pbnRzID4gMSkgJiYgIXdpbmRvdy5NU1N0cmVhbTtcbn07XG5cbnZhciBnZXRJUGFkMTMgPSBmdW5jdGlvbiBnZXRJUGFkMTMoKSB7XG4gIHJldHVybiBpc0lPUzEzQ2hlY2soJ2lQYWQnKTtcbn07XG5cbnZhciBnZXRJcGhvbmUxMyA9IGZ1bmN0aW9uIGdldElwaG9uZTEzKCkge1xuICByZXR1cm4gaXNJT1MxM0NoZWNrKCdpUGhvbmUnKTtcbn07XG5cbnZhciBnZXRJUG9kMTMgPSBmdW5jdGlvbiBnZXRJUG9kMTMoKSB7XG4gIHJldHVybiBpc0lPUzEzQ2hlY2soJ2lQb2QnKTtcbn07XG5cbnZhciBnZXRCcm93c2VyRnVsbFZlcnNpb24gPSBmdW5jdGlvbiBnZXRCcm93c2VyRnVsbFZlcnNpb24oKSB7XG4gIHJldHVybiBzZXREZWZhdWx0cyhicm93c2VyLnZlcnNpb24pO1xufTtcblxudmFyIGdldEJyb3dzZXJWZXJzaW9uID0gZnVuY3Rpb24gZ2V0QnJvd3NlclZlcnNpb24oKSB7XG4gIHJldHVybiBzZXREZWZhdWx0cyhicm93c2VyLm1ham9yKTtcbn07XG5cbnZhciBnZXRPc1ZlcnNpb24gPSBmdW5jdGlvbiBnZXRPc1ZlcnNpb24oKSB7XG4gIHJldHVybiBzZXREZWZhdWx0cyhvcy52ZXJzaW9uKTtcbn07XG5cbnZhciBnZXRPc05hbWUgPSBmdW5jdGlvbiBnZXRPc05hbWUoKSB7XG4gIHJldHVybiBzZXREZWZhdWx0cyhvcy5uYW1lKTtcbn07XG5cbnZhciBnZXRCcm93c2VyTmFtZSA9IGZ1bmN0aW9uIGdldEJyb3dzZXJOYW1lKCkge1xuICByZXR1cm4gc2V0RGVmYXVsdHMoYnJvd3Nlci5uYW1lKTtcbn07XG5cbnZhciBnZXRNb2JpbGVWZW5kb3IgPSBmdW5jdGlvbiBnZXRNb2JpbGVWZW5kb3IoKSB7XG4gIHJldHVybiBzZXREZWZhdWx0cyhkZXZpY2UudmVuZG9yKTtcbn07XG5cbnZhciBnZXRNb2JpbGVNb2RlbCA9IGZ1bmN0aW9uIGdldE1vYmlsZU1vZGVsKCkge1xuICByZXR1cm4gc2V0RGVmYXVsdHMoZGV2aWNlLm1vZGVsKTtcbn07XG5cbnZhciBnZXRFbmdpbmVOYW1lID0gZnVuY3Rpb24gZ2V0RW5naW5lTmFtZSgpIHtcbiAgcmV0dXJuIHNldERlZmF1bHRzKGVuZ2luZS5uYW1lKTtcbn07XG5cbnZhciBnZXRFbmdpbmVWZXJzaW9uID0gZnVuY3Rpb24gZ2V0RW5naW5lVmVyc2lvbigpIHtcbiAgcmV0dXJuIHNldERlZmF1bHRzKGVuZ2luZS52ZXJzaW9uKTtcbn07XG5cbnZhciBnZXRVc2VyYWdlbnQgPSBmdW5jdGlvbiBnZXRVc2VyYWdlbnQoKSB7XG4gIHJldHVybiBzZXREZWZhdWx0cyh1YSk7XG59O1xuXG52YXIgZ2V0RGV2aWNlVHlwZSA9IGZ1bmN0aW9uIGdldERldmljZVR5cGUoKSB7XG4gIHJldHVybiBzZXREZWZhdWx0cyhkZXZpY2UudHlwZSwgJ2Jyb3dzZXInKTtcbn07XG5cbnZhciBpc1NtYXJ0VFYgPSBpc1NtYXJ0VFZUeXBlKCk7XG52YXIgaXNDb25zb2xlID0gaXNDb25zb2xlVHlwZSgpO1xudmFyIGlzV2VhcmFibGUgPSBpc1dlYXJhYmxlVHlwZSgpO1xudmFyIGlzTW9iaWxlU2FmYXJpID0gaXNNb2JpbGVTYWZhcmlUeXBlKCkgfHwgZ2V0SVBhZDEzKCk7XG52YXIgaXNDaHJvbWl1bSA9IGlzQ2hyb21pdW1UeXBlKCk7XG52YXIgaXNNb2JpbGUgPSBpc01vYmlsZUFuZFRhYmxldFR5cGUoKSB8fCBnZXRJUGFkMTMoKTtcbnZhciBpc01vYmlsZU9ubHkgPSBpc01vYmlsZVR5cGUoKTtcbnZhciBpc1RhYmxldCA9IGlzVGFibGV0VHlwZSgpIHx8IGdldElQYWQxMygpO1xudmFyIGlzQnJvd3NlciA9IGlzQnJvd3NlclR5cGUoKTtcbnZhciBpc0Rlc2t0b3AgPSBpc0Jyb3dzZXJUeXBlKCk7XG52YXIgaXNBbmRyb2lkID0gaXNBbmRyb2lkVHlwZSgpO1xudmFyIGlzV2luUGhvbmUgPSBpc1dpblBob25lVHlwZSgpO1xudmFyIGlzSU9TID0gaXNJT1NUeXBlKCkgfHwgZ2V0SVBhZDEzKCk7XG52YXIgaXNDaHJvbWUgPSBpc0Nocm9tZVR5cGUoKTtcbnZhciBpc0ZpcmVmb3ggPSBpc0ZpcmVmb3hUeXBlKCk7XG52YXIgaXNTYWZhcmkgPSBpc1NhZmFyaVR5cGUoKTtcbnZhciBpc09wZXJhID0gaXNPcGVyYVR5cGUoKTtcbnZhciBpc0lFID0gaXNJRVR5cGUoKTtcbnZhciBvc1ZlcnNpb24gPSBnZXRPc1ZlcnNpb24oKTtcbnZhciBvc05hbWUgPSBnZXRPc05hbWUoKTtcbnZhciBmdWxsQnJvd3NlclZlcnNpb24gPSBnZXRCcm93c2VyRnVsbFZlcnNpb24oKTtcbnZhciBicm93c2VyVmVyc2lvbiA9IGdldEJyb3dzZXJWZXJzaW9uKCk7XG52YXIgYnJvd3Nlck5hbWUgPSBnZXRCcm93c2VyTmFtZSgpO1xudmFyIG1vYmlsZVZlbmRvciA9IGdldE1vYmlsZVZlbmRvcigpO1xudmFyIG1vYmlsZU1vZGVsID0gZ2V0TW9iaWxlTW9kZWwoKTtcbnZhciBlbmdpbmVOYW1lID0gZ2V0RW5naW5lTmFtZSgpO1xudmFyIGVuZ2luZVZlcnNpb24gPSBnZXRFbmdpbmVWZXJzaW9uKCk7XG52YXIgZ2V0VUEgPSBnZXRVc2VyYWdlbnQoKTtcbnZhciBpc0VkZ2UgPSBpc0VkZ2VUeXBlKCkgfHwgaXNFZGdlQ2hyb21pdW1UeXBlKCk7XG52YXIgaXNZYW5kZXggPSBpc1lhbmRleFR5cGUoKTtcbnZhciBkZXZpY2VUeXBlID0gZ2V0RGV2aWNlVHlwZSgpO1xudmFyIGlzSU9TMTMgPSBnZXRJT1MxMygpO1xudmFyIGlzSVBhZDEzID0gZ2V0SVBhZDEzKCk7XG52YXIgaXNJUGhvbmUxMyA9IGdldElwaG9uZTEzKCk7XG52YXIgaXNJUG9kMTMgPSBnZXRJUG9kMTMoKTtcbnZhciBpc0VsZWN0cm9uID0gaXNFbGVjdHJvblR5cGUoKTtcbnZhciBpc0VkZ2VDaHJvbWl1bSA9IGlzRWRnZUNocm9taXVtVHlwZSgpO1xudmFyIGlzTGVnYWN5RWRnZSA9IGlzRWRnZVR5cGUoKSAmJiAhaXNFZGdlQ2hyb21pdW1UeXBlKCk7XG52YXIgaXNXaW5kb3dzID0gaXNXaW5kb3dzVHlwZSgpO1xudmFyIGlzTWFjT3MgPSBpc01hY09zVHlwZSgpO1xudmFyIGlzTUlVSSA9IGlzTUlVSVR5cGUoKTtcbnZhciBpc1NhbXN1bmdCcm93c2VyID0gaXNTYW1zdW5nQnJvd3NlclR5cGUoKTtcblxudmFyIEFuZHJvaWRWaWV3ID0gZnVuY3Rpb24gQW5kcm9pZFZpZXcoX3JlZikge1xuICB2YXIgcmVuZGVyV2l0aEZyYWdtZW50ID0gX3JlZi5yZW5kZXJXaXRoRnJhZ21lbnQsXG4gICAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICB2aWV3Q2xhc3NOYW1lID0gX3JlZi52aWV3Q2xhc3NOYW1lLFxuICAgICAgc3R5bGUgPSBfcmVmLnN0eWxlLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wicmVuZGVyV2l0aEZyYWdtZW50XCIsIFwiY2hpbGRyZW5cIiwgXCJ2aWV3Q2xhc3NOYW1lXCIsIFwic3R5bGVcIl0pO1xuXG4gIHJldHVybiBpc0FuZHJvaWQgPyByZW5kZXJXaXRoRnJhZ21lbnQgPyBSZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLCBjaGlsZHJlbikgOiBSZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IHZpZXdDbGFzc05hbWUsXG4gICAgc3R5bGU6IHN0eWxlXG4gIH0sIHByb3BzKSwgY2hpbGRyZW4pIDogbnVsbDtcbn07XG5cbnZhciBCcm93c2VyVmlldyA9IGZ1bmN0aW9uIEJyb3dzZXJWaWV3KF9yZWYyKSB7XG4gIHZhciByZW5kZXJXaXRoRnJhZ21lbnQgPSBfcmVmMi5yZW5kZXJXaXRoRnJhZ21lbnQsXG4gICAgICBjaGlsZHJlbiA9IF9yZWYyLmNoaWxkcmVuLFxuICAgICAgdmlld0NsYXNzTmFtZSA9IF9yZWYyLnZpZXdDbGFzc05hbWUsXG4gICAgICBzdHlsZSA9IF9yZWYyLnN0eWxlLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZjIsIFtcInJlbmRlcldpdGhGcmFnbWVudFwiLCBcImNoaWxkcmVuXCIsIFwidmlld0NsYXNzTmFtZVwiLCBcInN0eWxlXCJdKTtcblxuICByZXR1cm4gaXNCcm93c2VyID8gcmVuZGVyV2l0aEZyYWdtZW50ID8gUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCwgY2hpbGRyZW4pIDogUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiB2aWV3Q2xhc3NOYW1lLFxuICAgIHN0eWxlOiBzdHlsZVxuICB9LCBwcm9wcyksIGNoaWxkcmVuKSA6IG51bGw7XG59O1xuXG52YXIgSUVWaWV3ID0gZnVuY3Rpb24gSUVWaWV3KF9yZWYzKSB7XG4gIHZhciByZW5kZXJXaXRoRnJhZ21lbnQgPSBfcmVmMy5yZW5kZXJXaXRoRnJhZ21lbnQsXG4gICAgICBjaGlsZHJlbiA9IF9yZWYzLmNoaWxkcmVuLFxuICAgICAgdmlld0NsYXNzTmFtZSA9IF9yZWYzLnZpZXdDbGFzc05hbWUsXG4gICAgICBzdHlsZSA9IF9yZWYzLnN0eWxlLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZjMsIFtcInJlbmRlcldpdGhGcmFnbWVudFwiLCBcImNoaWxkcmVuXCIsIFwidmlld0NsYXNzTmFtZVwiLCBcInN0eWxlXCJdKTtcblxuICByZXR1cm4gaXNJRSA/IHJlbmRlcldpdGhGcmFnbWVudCA/IFJlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsIGNoaWxkcmVuKSA6IFJlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogdmlld0NsYXNzTmFtZSxcbiAgICBzdHlsZTogc3R5bGVcbiAgfSwgcHJvcHMpLCBjaGlsZHJlbikgOiBudWxsO1xufTtcblxudmFyIElPU1ZpZXcgPSBmdW5jdGlvbiBJT1NWaWV3KF9yZWY0KSB7XG4gIHZhciByZW5kZXJXaXRoRnJhZ21lbnQgPSBfcmVmNC5yZW5kZXJXaXRoRnJhZ21lbnQsXG4gICAgICBjaGlsZHJlbiA9IF9yZWY0LmNoaWxkcmVuLFxuICAgICAgdmlld0NsYXNzTmFtZSA9IF9yZWY0LnZpZXdDbGFzc05hbWUsXG4gICAgICBzdHlsZSA9IF9yZWY0LnN0eWxlLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZjQsIFtcInJlbmRlcldpdGhGcmFnbWVudFwiLCBcImNoaWxkcmVuXCIsIFwidmlld0NsYXNzTmFtZVwiLCBcInN0eWxlXCJdKTtcblxuICByZXR1cm4gaXNJT1MgPyByZW5kZXJXaXRoRnJhZ21lbnQgPyBSZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLCBjaGlsZHJlbikgOiBSZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IHZpZXdDbGFzc05hbWUsXG4gICAgc3R5bGU6IHN0eWxlXG4gIH0sIHByb3BzKSwgY2hpbGRyZW4pIDogbnVsbDtcbn07XG5cbnZhciBNb2JpbGVWaWV3ID0gZnVuY3Rpb24gTW9iaWxlVmlldyhfcmVmNSkge1xuICB2YXIgcmVuZGVyV2l0aEZyYWdtZW50ID0gX3JlZjUucmVuZGVyV2l0aEZyYWdtZW50LFxuICAgICAgY2hpbGRyZW4gPSBfcmVmNS5jaGlsZHJlbixcbiAgICAgIHZpZXdDbGFzc05hbWUgPSBfcmVmNS52aWV3Q2xhc3NOYW1lLFxuICAgICAgc3R5bGUgPSBfcmVmNS5zdHlsZSxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWY1LCBbXCJyZW5kZXJXaXRoRnJhZ21lbnRcIiwgXCJjaGlsZHJlblwiLCBcInZpZXdDbGFzc05hbWVcIiwgXCJzdHlsZVwiXSk7XG5cbiAgcmV0dXJuIGlzTW9iaWxlID8gcmVuZGVyV2l0aEZyYWdtZW50ID8gUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCwgY2hpbGRyZW4pIDogUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiB2aWV3Q2xhc3NOYW1lLFxuICAgIHN0eWxlOiBzdHlsZVxuICB9LCBwcm9wcyksIGNoaWxkcmVuKSA6IG51bGw7XG59O1xuXG52YXIgVGFibGV0VmlldyA9IGZ1bmN0aW9uIFRhYmxldFZpZXcoX3JlZjYpIHtcbiAgdmFyIHJlbmRlcldpdGhGcmFnbWVudCA9IF9yZWY2LnJlbmRlcldpdGhGcmFnbWVudCxcbiAgICAgIGNoaWxkcmVuID0gX3JlZjYuY2hpbGRyZW4sXG4gICAgICB2aWV3Q2xhc3NOYW1lID0gX3JlZjYudmlld0NsYXNzTmFtZSxcbiAgICAgIHN0eWxlID0gX3JlZjYuc3R5bGUsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmNiwgW1wicmVuZGVyV2l0aEZyYWdtZW50XCIsIFwiY2hpbGRyZW5cIiwgXCJ2aWV3Q2xhc3NOYW1lXCIsIFwic3R5bGVcIl0pO1xuXG4gIHJldHVybiBpc1RhYmxldCA/IHJlbmRlcldpdGhGcmFnbWVudCA/IFJlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsIGNoaWxkcmVuKSA6IFJlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogdmlld0NsYXNzTmFtZSxcbiAgICBzdHlsZTogc3R5bGVcbiAgfSwgcHJvcHMpLCBjaGlsZHJlbikgOiBudWxsO1xufTtcblxudmFyIFdpblBob25lVmlldyA9IGZ1bmN0aW9uIFdpblBob25lVmlldyhfcmVmNykge1xuICB2YXIgcmVuZGVyV2l0aEZyYWdtZW50ID0gX3JlZjcucmVuZGVyV2l0aEZyYWdtZW50LFxuICAgICAgY2hpbGRyZW4gPSBfcmVmNy5jaGlsZHJlbixcbiAgICAgIHZpZXdDbGFzc05hbWUgPSBfcmVmNy52aWV3Q2xhc3NOYW1lLFxuICAgICAgc3R5bGUgPSBfcmVmNy5zdHlsZSxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWY3LCBbXCJyZW5kZXJXaXRoRnJhZ21lbnRcIiwgXCJjaGlsZHJlblwiLCBcInZpZXdDbGFzc05hbWVcIiwgXCJzdHlsZVwiXSk7XG5cbiAgcmV0dXJuIGlzV2luUGhvbmUgPyByZW5kZXJXaXRoRnJhZ21lbnQgPyBSZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLCBjaGlsZHJlbikgOiBSZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IHZpZXdDbGFzc05hbWUsXG4gICAgc3R5bGU6IHN0eWxlXG4gIH0sIHByb3BzKSwgY2hpbGRyZW4pIDogbnVsbDtcbn07XG5cbnZhciBNb2JpbGVPbmx5VmlldyA9IGZ1bmN0aW9uIE1vYmlsZU9ubHlWaWV3KF9yZWY4KSB7XG4gIHZhciByZW5kZXJXaXRoRnJhZ21lbnQgPSBfcmVmOC5yZW5kZXJXaXRoRnJhZ21lbnQsXG4gICAgICBjaGlsZHJlbiA9IF9yZWY4LmNoaWxkcmVuLFxuICAgICAgdmlld0NsYXNzTmFtZSA9IF9yZWY4LnZpZXdDbGFzc05hbWUsXG4gICAgICBzdHlsZSA9IF9yZWY4LnN0eWxlLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZjgsIFtcInJlbmRlcldpdGhGcmFnbWVudFwiLCBcImNoaWxkcmVuXCIsIFwidmlld0NsYXNzTmFtZVwiLCBcInN0eWxlXCJdKTtcblxuICByZXR1cm4gaXNNb2JpbGVPbmx5ID8gcmVuZGVyV2l0aEZyYWdtZW50ID8gUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCwgY2hpbGRyZW4pIDogUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiB2aWV3Q2xhc3NOYW1lLFxuICAgIHN0eWxlOiBzdHlsZVxuICB9LCBwcm9wcyksIGNoaWxkcmVuKSA6IG51bGw7XG59O1xuXG52YXIgU21hcnRUVlZpZXcgPSBmdW5jdGlvbiBTbWFydFRWVmlldyhfcmVmOSkge1xuICB2YXIgcmVuZGVyV2l0aEZyYWdtZW50ID0gX3JlZjkucmVuZGVyV2l0aEZyYWdtZW50LFxuICAgICAgY2hpbGRyZW4gPSBfcmVmOS5jaGlsZHJlbixcbiAgICAgIHZpZXdDbGFzc05hbWUgPSBfcmVmOS52aWV3Q2xhc3NOYW1lLFxuICAgICAgc3R5bGUgPSBfcmVmOS5zdHlsZSxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWY5LCBbXCJyZW5kZXJXaXRoRnJhZ21lbnRcIiwgXCJjaGlsZHJlblwiLCBcInZpZXdDbGFzc05hbWVcIiwgXCJzdHlsZVwiXSk7XG5cbiAgcmV0dXJuIGlzU21hcnRUViA/IHJlbmRlcldpdGhGcmFnbWVudCA/IFJlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsIGNoaWxkcmVuKSA6IFJlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogdmlld0NsYXNzTmFtZSxcbiAgICBzdHlsZTogc3R5bGVcbiAgfSwgcHJvcHMpLCBjaGlsZHJlbikgOiBudWxsO1xufTtcblxudmFyIENvbnNvbGVWaWV3ID0gZnVuY3Rpb24gQ29uc29sZVZpZXcoX3JlZjEwKSB7XG4gIHZhciByZW5kZXJXaXRoRnJhZ21lbnQgPSBfcmVmMTAucmVuZGVyV2l0aEZyYWdtZW50LFxuICAgICAgY2hpbGRyZW4gPSBfcmVmMTAuY2hpbGRyZW4sXG4gICAgICB2aWV3Q2xhc3NOYW1lID0gX3JlZjEwLnZpZXdDbGFzc05hbWUsXG4gICAgICBzdHlsZSA9IF9yZWYxMC5zdHlsZSxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYxMCwgW1wicmVuZGVyV2l0aEZyYWdtZW50XCIsIFwiY2hpbGRyZW5cIiwgXCJ2aWV3Q2xhc3NOYW1lXCIsIFwic3R5bGVcIl0pO1xuXG4gIHJldHVybiBpc0NvbnNvbGUgPyByZW5kZXJXaXRoRnJhZ21lbnQgPyBSZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLCBjaGlsZHJlbikgOiBSZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IHZpZXdDbGFzc05hbWUsXG4gICAgc3R5bGU6IHN0eWxlXG4gIH0sIHByb3BzKSwgY2hpbGRyZW4pIDogbnVsbDtcbn07XG5cbnZhciBXZWFyYWJsZVZpZXcgPSBmdW5jdGlvbiBXZWFyYWJsZVZpZXcoX3JlZjExKSB7XG4gIHZhciByZW5kZXJXaXRoRnJhZ21lbnQgPSBfcmVmMTEucmVuZGVyV2l0aEZyYWdtZW50LFxuICAgICAgY2hpbGRyZW4gPSBfcmVmMTEuY2hpbGRyZW4sXG4gICAgICB2aWV3Q2xhc3NOYW1lID0gX3JlZjExLnZpZXdDbGFzc05hbWUsXG4gICAgICBzdHlsZSA9IF9yZWYxMS5zdHlsZSxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYxMSwgW1wicmVuZGVyV2l0aEZyYWdtZW50XCIsIFwiY2hpbGRyZW5cIiwgXCJ2aWV3Q2xhc3NOYW1lXCIsIFwic3R5bGVcIl0pO1xuXG4gIHJldHVybiBpc1dlYXJhYmxlID8gcmVuZGVyV2l0aEZyYWdtZW50ID8gUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCwgY2hpbGRyZW4pIDogUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiB2aWV3Q2xhc3NOYW1lLFxuICAgIHN0eWxlOiBzdHlsZVxuICB9LCBwcm9wcyksIGNoaWxkcmVuKSA6IG51bGw7XG59O1xuXG52YXIgQ3VzdG9tVmlldyA9IGZ1bmN0aW9uIEN1c3RvbVZpZXcoX3JlZjEyKSB7XG4gIHZhciByZW5kZXJXaXRoRnJhZ21lbnQgPSBfcmVmMTIucmVuZGVyV2l0aEZyYWdtZW50LFxuICAgICAgY2hpbGRyZW4gPSBfcmVmMTIuY2hpbGRyZW4sXG4gICAgICB2aWV3Q2xhc3NOYW1lID0gX3JlZjEyLnZpZXdDbGFzc05hbWUsXG4gICAgICBzdHlsZSA9IF9yZWYxMi5zdHlsZSxcbiAgICAgIGNvbmRpdGlvbiA9IF9yZWYxMi5jb25kaXRpb24sXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmMTIsIFtcInJlbmRlcldpdGhGcmFnbWVudFwiLCBcImNoaWxkcmVuXCIsIFwidmlld0NsYXNzTmFtZVwiLCBcInN0eWxlXCIsIFwiY29uZGl0aW9uXCJdKTtcblxuICByZXR1cm4gY29uZGl0aW9uID8gcmVuZGVyV2l0aEZyYWdtZW50ID8gUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCwgY2hpbGRyZW4pIDogUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiB2aWV3Q2xhc3NOYW1lLFxuICAgIHN0eWxlOiBzdHlsZVxuICB9LCBwcm9wcyksIGNoaWxkcmVuKSA6IG51bGw7XG59O1xuXG5mdW5jdGlvbiB3aXRoT3JpZW50YXRpb25DaGFuZ2UoV3JhcHBlZENvbXBvbmVudCkge1xuICByZXR1cm4gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gICAgX2luaGVyaXRzKF9jbGFzcywgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgICBmdW5jdGlvbiBfY2xhc3MocHJvcHMpIHtcbiAgICAgIHZhciBfdGhpcztcblxuICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIF9jbGFzcyk7XG5cbiAgICAgIF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX2dldFByb3RvdHlwZU9mKF9jbGFzcykuY2FsbCh0aGlzLCBwcm9wcykpO1xuICAgICAgX3RoaXMuaXNFdmVudExpc3RlbmVyQWRkZWQgPSBmYWxzZTtcbiAgICAgIF90aGlzLmhhbmRsZU9yaWVudGF0aW9uQ2hhbmdlID0gX3RoaXMuaGFuZGxlT3JpZW50YXRpb25DaGFuZ2UuYmluZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSk7XG4gICAgICBfdGhpcy5vbk9yaWVudGF0aW9uQ2hhbmdlID0gX3RoaXMub25PcmllbnRhdGlvbkNoYW5nZS5iaW5kKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKTtcbiAgICAgIF90aGlzLm9uUGFnZUxvYWQgPSBfdGhpcy5vblBhZ2VMb2FkLmJpbmQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpO1xuICAgICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICAgIGlzTGFuZHNjYXBlOiBmYWxzZSxcbiAgICAgICAgaXNQb3J0cmFpdDogZmFsc2VcbiAgICAgIH07XG4gICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuXG4gICAgX2NyZWF0ZUNsYXNzKF9jbGFzcywgW3tcbiAgICAgIGtleTogXCJoYW5kbGVPcmllbnRhdGlvbkNoYW5nZVwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGhhbmRsZU9yaWVudGF0aW9uQ2hhbmdlKCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNFdmVudExpc3RlbmVyQWRkZWQpIHtcbiAgICAgICAgICB0aGlzLmlzRXZlbnRMaXN0ZW5lckFkZGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBvcmllbnRhdGlvbiA9IHdpbmRvdy5pbm5lcldpZHRoID4gd2luZG93LmlubmVySGVpZ2h0ID8gOTAgOiAwO1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBpc1BvcnRyYWl0OiBvcmllbnRhdGlvbiA9PT0gMCxcbiAgICAgICAgICBpc0xhbmRzY2FwZTogb3JpZW50YXRpb24gPT09IDkwXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJvbk9yaWVudGF0aW9uQ2hhbmdlXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gb25PcmllbnRhdGlvbkNoYW5nZSgpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVPcmllbnRhdGlvbkNoYW5nZSgpO1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJvblBhZ2VMb2FkXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gb25QYWdlTG9hZCgpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVPcmllbnRhdGlvbkNoYW5nZSgpO1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgICBpZiAoKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIgPyBcInVuZGVmaW5lZFwiIDogX3R5cGVvZih3aW5kb3cpKSAhPT0gdW5kZWZpbmVkICYmIGlzTW9iaWxlKSB7XG4gICAgICAgICAgaWYgKCF0aGlzLmlzRXZlbnRMaXN0ZW5lckFkZGVkKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZU9yaWVudGF0aW9uQ2hhbmdlKCk7XG4gICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIiwgdGhpcy5vblBhZ2VMb2FkLCBmYWxzZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwibG9hZFwiLCB0aGlzLm9uUGFnZUxvYWQsIGZhbHNlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCB0aGlzLm9uT3JpZW50YXRpb25DaGFuZ2UsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJjb21wb25lbnRXaWxsVW5tb3VudFwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCB0aGlzLm9uT3JpZW50YXRpb25DaGFuZ2UsIGZhbHNlKTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgICByZXR1cm4gUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChXcmFwcGVkQ29tcG9uZW50LCBfZXh0ZW5kcyh7fSwgdGhpcy5wcm9wcywge1xuICAgICAgICAgIGlzTGFuZHNjYXBlOiB0aGlzLnN0YXRlLmlzTGFuZHNjYXBlLFxuICAgICAgICAgIGlzUG9ydHJhaXQ6IHRoaXMuc3RhdGUuaXNQb3J0cmFpdFxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfV0pO1xuXG4gICAgcmV0dXJuIF9jbGFzcztcbiAgfShSZWFjdF9fZGVmYXVsdC5Db21wb25lbnQpO1xufVxuXG5leHBvcnRzLkFuZHJvaWRWaWV3ID0gQW5kcm9pZFZpZXc7XG5leHBvcnRzLkJyb3dzZXJUeXBlcyA9IEJyb3dzZXJUeXBlcztcbmV4cG9ydHMuQnJvd3NlclZpZXcgPSBCcm93c2VyVmlldztcbmV4cG9ydHMuQ29uc29sZVZpZXcgPSBDb25zb2xlVmlldztcbmV4cG9ydHMuQ3VzdG9tVmlldyA9IEN1c3RvbVZpZXc7XG5leHBvcnRzLklFVmlldyA9IElFVmlldztcbmV4cG9ydHMuSU9TVmlldyA9IElPU1ZpZXc7XG5leHBvcnRzLk1vYmlsZU9ubHlWaWV3ID0gTW9iaWxlT25seVZpZXc7XG5leHBvcnRzLk1vYmlsZVZpZXcgPSBNb2JpbGVWaWV3O1xuZXhwb3J0cy5Pc1R5cGVzID0gT3NUeXBlcztcbmV4cG9ydHMuU21hcnRUVlZpZXcgPSBTbWFydFRWVmlldztcbmV4cG9ydHMuVGFibGV0VmlldyA9IFRhYmxldFZpZXc7XG5leHBvcnRzLldlYXJhYmxlVmlldyA9IFdlYXJhYmxlVmlldztcbmV4cG9ydHMuV2luUGhvbmVWaWV3ID0gV2luUGhvbmVWaWV3O1xuZXhwb3J0cy5icm93c2VyTmFtZSA9IGJyb3dzZXJOYW1lO1xuZXhwb3J0cy5icm93c2VyVmVyc2lvbiA9IGJyb3dzZXJWZXJzaW9uO1xuZXhwb3J0cy5kZXZpY2VEZXRlY3QgPSBkZXZpY2VEZXRlY3Q7XG5leHBvcnRzLmRldmljZVR5cGUgPSBkZXZpY2VUeXBlO1xuZXhwb3J0cy5lbmdpbmVOYW1lID0gZW5naW5lTmFtZTtcbmV4cG9ydHMuZW5naW5lVmVyc2lvbiA9IGVuZ2luZVZlcnNpb247XG5leHBvcnRzLmZ1bGxCcm93c2VyVmVyc2lvbiA9IGZ1bGxCcm93c2VyVmVyc2lvbjtcbmV4cG9ydHMuZ2V0VUEgPSBnZXRVQTtcbmV4cG9ydHMuaXNBbmRyb2lkID0gaXNBbmRyb2lkO1xuZXhwb3J0cy5pc0Jyb3dzZXIgPSBpc0Jyb3dzZXI7XG5leHBvcnRzLmlzQ2hyb21lID0gaXNDaHJvbWU7XG5leHBvcnRzLmlzQ2hyb21pdW0gPSBpc0Nocm9taXVtO1xuZXhwb3J0cy5pc0NvbnNvbGUgPSBpc0NvbnNvbGU7XG5leHBvcnRzLmlzRGVza3RvcCA9IGlzRGVza3RvcDtcbmV4cG9ydHMuaXNFZGdlID0gaXNFZGdlO1xuZXhwb3J0cy5pc0VkZ2VDaHJvbWl1bSA9IGlzRWRnZUNocm9taXVtO1xuZXhwb3J0cy5pc0VsZWN0cm9uID0gaXNFbGVjdHJvbjtcbmV4cG9ydHMuaXNGaXJlZm94ID0gaXNGaXJlZm94O1xuZXhwb3J0cy5pc0lFID0gaXNJRTtcbmV4cG9ydHMuaXNJT1MgPSBpc0lPUztcbmV4cG9ydHMuaXNJT1MxMyA9IGlzSU9TMTM7XG5leHBvcnRzLmlzSVBhZDEzID0gaXNJUGFkMTM7XG5leHBvcnRzLmlzSVBob25lMTMgPSBpc0lQaG9uZTEzO1xuZXhwb3J0cy5pc0lQb2QxMyA9IGlzSVBvZDEzO1xuZXhwb3J0cy5pc0xlZ2FjeUVkZ2UgPSBpc0xlZ2FjeUVkZ2U7XG5leHBvcnRzLmlzTUlVSSA9IGlzTUlVSTtcbmV4cG9ydHMuaXNNYWNPcyA9IGlzTWFjT3M7XG5leHBvcnRzLmlzTW9iaWxlID0gaXNNb2JpbGU7XG5leHBvcnRzLmlzTW9iaWxlT25seSA9IGlzTW9iaWxlT25seTtcbmV4cG9ydHMuaXNNb2JpbGVTYWZhcmkgPSBpc01vYmlsZVNhZmFyaTtcbmV4cG9ydHMuaXNPcGVyYSA9IGlzT3BlcmE7XG5leHBvcnRzLmlzU2FmYXJpID0gaXNTYWZhcmk7XG5leHBvcnRzLmlzU2Ftc3VuZ0Jyb3dzZXIgPSBpc1NhbXN1bmdCcm93c2VyO1xuZXhwb3J0cy5pc1NtYXJ0VFYgPSBpc1NtYXJ0VFY7XG5leHBvcnRzLmlzVGFibGV0ID0gaXNUYWJsZXQ7XG5leHBvcnRzLmlzV2VhcmFibGUgPSBpc1dlYXJhYmxlO1xuZXhwb3J0cy5pc1dpblBob25lID0gaXNXaW5QaG9uZTtcbmV4cG9ydHMuaXNXaW5kb3dzID0gaXNXaW5kb3dzO1xuZXhwb3J0cy5pc1lhbmRleCA9IGlzWWFuZGV4O1xuZXhwb3J0cy5tb2JpbGVNb2RlbCA9IG1vYmlsZU1vZGVsO1xuZXhwb3J0cy5tb2JpbGVWZW5kb3IgPSBtb2JpbGVWZW5kb3I7XG5leHBvcnRzLm9zTmFtZSA9IG9zTmFtZTtcbmV4cG9ydHMub3NWZXJzaW9uID0gb3NWZXJzaW9uO1xuZXhwb3J0cy53aXRoT3JpZW50YXRpb25DaGFuZ2UgPSB3aXRoT3JpZW50YXRpb25DaGFuZ2U7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1677\n')},4889:function(module,exports,__webpack_require__){eval('var __WEBPACK_AMD_DEFINE_RESULT__;/*!@license\n * UAParser.js v0.7.28\n * Lightweight JavaScript-based User-Agent string parser\n * https://github.com/faisalman/ua-parser-js\n *\n * Copyright © 2012-2021 Faisal Salman \n * Licensed under MIT License\n */\n(function (window, undefined) {\n "use strict";\n\n var LIBVERSION = "0.7.28",\n EMPTY = "",\n UNKNOWN = "?",\n FUNC_TYPE = "function",\n UNDEF_TYPE = "undefined",\n OBJ_TYPE = "object",\n STR_TYPE = "string",\n MAJOR = "major",\n MODEL = "model",\n NAME = "name",\n TYPE = "type",\n VENDOR = "vendor",\n VERSION = "version",\n ARCHITECTURE = "architecture",\n CONSOLE = "console",\n MOBILE = "mobile",\n TABLET = "tablet",\n SMARTTV = "smarttv",\n WEARABLE = "wearable",\n EMBEDDED = "embedded",\n UA_MAX_LENGTH = 255;\n var util = {\n extend: function extend(regexes, extensions) {\n var mergedRegexes = {};\n\n for (var i in regexes) {\n if (extensions[i] && extensions[i].length % 2 === 0) {\n mergedRegexes[i] = extensions[i].concat(regexes[i]);\n } else {\n mergedRegexes[i] = regexes[i];\n }\n }\n\n return mergedRegexes;\n },\n has: function has(str1, str2) {\n return typeof str1 === STR_TYPE ? str2.toLowerCase().indexOf(str1.toLowerCase()) !== -1 : false;\n },\n lowerize: function lowerize(str) {\n return str.toLowerCase();\n },\n major: function major(version) {\n return typeof version === STR_TYPE ? version.replace(/[^\\d\\.]/g, "").split(".")[0] : undefined;\n },\n trim: function trim(str, len) {\n str = str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, "");\n return typeof len === UNDEF_TYPE ? str : str.substring(0, UA_MAX_LENGTH);\n }\n };\n var mapper = {\n rgx: function rgx(ua, arrays) {\n var i = 0,\n j,\n k,\n p,\n q,\n matches,\n match;\n\n while (i < arrays.length && !matches) {\n var regex = arrays[i],\n props = arrays[i + 1];\n j = k = 0;\n\n while (j < regex.length && !matches) {\n matches = regex[j++].exec(ua);\n\n if (!!matches) {\n for (p = 0; p < props.length; p++) {\n match = matches[++k];\n q = props[p];\n\n if (typeof q === OBJ_TYPE && q.length > 0) {\n if (q.length == 2) {\n if (typeof q[1] == FUNC_TYPE) {\n this[q[0]] = q[1].call(this, match);\n } else {\n this[q[0]] = q[1];\n }\n } else if (q.length == 3) {\n if (typeof q[1] === FUNC_TYPE && !(q[1].exec && q[1].test)) {\n this[q[0]] = match ? q[1].call(this, match, q[2]) : undefined;\n } else {\n this[q[0]] = match ? match.replace(q[1], q[2]) : undefined;\n }\n } else if (q.length == 4) {\n this[q[0]] = match ? q[3].call(this, match.replace(q[1], q[2])) : undefined;\n }\n } else {\n this[q] = match ? match : undefined;\n }\n }\n }\n }\n\n i += 2;\n }\n },\n str: function str(_str, map) {\n for (var i in map) {\n if (typeof map[i] === OBJ_TYPE && map[i].length > 0) {\n for (var j = 0; j < map[i].length; j++) {\n if (util.has(map[i][j], _str)) {\n return i === UNKNOWN ? undefined : i;\n }\n }\n } else if (util.has(map[i], _str)) {\n return i === UNKNOWN ? undefined : i;\n }\n }\n\n return _str;\n }\n };\n var maps = {\n browser: {\n oldSafari: {\n version: {\n "1.0": "/8",\n 1.2: "/1",\n 1.3: "/3",\n "2.0": "/412",\n "2.0.2": "/416",\n "2.0.3": "/417",\n "2.0.4": "/419",\n "?": "/"\n }\n },\n oldEdge: {\n version: {\n .1: "12.",\n 21: "13.",\n 31: "14.",\n 39: "15.",\n 41: "16.",\n 42: "17.",\n 44: "18."\n }\n }\n },\n os: {\n windows: {\n version: {\n ME: "4.90",\n "NT 3.11": "NT3.51",\n "NT 4.0": "NT4.0",\n 2e3: "NT 5.0",\n XP: ["NT 5.1", "NT 5.2"],\n Vista: "NT 6.0",\n 7: "NT 6.1",\n 8: "NT 6.2",\n 8.1: "NT 6.3",\n 10: ["NT 6.4", "NT 10.0"],\n RT: "ARM"\n }\n }\n }\n };\n var regexes = {\n browser: [[/\\b(?:crmo|crios)\\/([\\w\\.]+)/i], [VERSION, [NAME, "Chrome"]], [/(?:edge|edgios|edga|edg)\\/([\\w\\.]+)/i], [VERSION, [NAME, "Edge"]], [/(opera\\smini)\\/([\\w\\.-]+)/i, /(opera\\s[mobiletab]{3,6})\\b.+version\\/([\\w\\.-]+)/i, /(opera)(?:.+version\\/|[\\/\\s]+)([\\w\\.]+)/i], [NAME, VERSION], [/opios[\\/\\s]+([\\w\\.]+)/i], [VERSION, [NAME, "Opera Mini"]], [/\\sopr\\/([\\w\\.]+)/i], [VERSION, [NAME, "Opera"]], [/(kindle)\\/([\\w\\.]+)/i, /(lunascape|maxthon|netfront|jasmine|blazer)[\\/\\s]?([\\w\\.]*)/i, /(avant\\s|iemobile|slim)(?:browser)?[\\/\\s]?([\\w\\.]*)/i, /(ba?idubrowser)[\\/\\s]?([\\w\\.]+)/i, /(?:ms|\\()(ie)\\s([\\w\\.]+)/i, /(flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon)\\/([\\w\\.-]+)/i, /(rekonq|puffin|brave|whale|qqbrowserlite|qq)\\/([\\w\\.]+)/i, /(weibo)__([\\d\\.]+)/i], [NAME, VERSION], [/(?:[\\s\\/]uc?\\s?browser|(?:juc.+)ucweb)[\\/\\s]?([\\w\\.]+)/i], [VERSION, [NAME, "UCBrowser"]], [/(?:windowswechat)?\\sqbcore\\/([\\w\\.]+)\\b.*(?:windowswechat)?/i], [VERSION, [NAME, "WeChat(Win) Desktop"]], [/micromessenger\\/([\\w\\.]+)/i], [VERSION, [NAME, "WeChat"]], [/konqueror\\/([\\w\\.]+)/i], [VERSION, [NAME, "Konqueror"]], [/trident.+rv[:\\s]([\\w\\.]{1,9})\\b.+like\\sgecko/i], [VERSION, [NAME, "IE"]], [/yabrowser\\/([\\w\\.]+)/i], [VERSION, [NAME, "Yandex"]], [/(avast|avg)\\/([\\w\\.]+)/i], [[NAME, /(.+)/, "$1 Secure Browser"], VERSION], [/focus\\/([\\w\\.]+)/i], [VERSION, [NAME, "Firefox Focus"]], [/opt\\/([\\w\\.]+)/i], [VERSION, [NAME, "Opera Touch"]], [/coc_coc_browser\\/([\\w\\.]+)/i], [VERSION, [NAME, "Coc Coc"]], [/dolfin\\/([\\w\\.]+)/i], [VERSION, [NAME, "Dolphin"]], [/coast\\/([\\w\\.]+)/i], [VERSION, [NAME, "Opera Coast"]], [/xiaomi\\/miuibrowser\\/([\\w\\.]+)/i], [VERSION, [NAME, "MIUI Browser"]], [/fxios\\/([\\w\\.-]+)/i], [VERSION, [NAME, "Firefox"]], [/(qihu|qhbrowser|qihoobrowser|360browser)/i], [[NAME, "360 Browser"]], [/(oculus|samsung|sailfish)browser\\/([\\w\\.]+)/i], [[NAME, /(.+)/, "$1 Browser"], VERSION], [/(comodo_dragon)\\/([\\w\\.]+)/i], [[NAME, /_/g, " "], VERSION], [/\\s(electron)\\/([\\w\\.]+)\\ssafari/i, /(tesla)(?:\\sqtcarbrowser|\\/(20[12]\\d\\.[\\w\\.-]+))/i, /m?(qqbrowser|baiduboxapp|2345Explorer)[\\/\\s]?([\\w\\.]+)/i], [NAME, VERSION], [/(MetaSr)[\\/\\s]?([\\w\\.]+)/i, /(LBBROWSER)/i], [NAME], [/;fbav\\/([\\w\\.]+);/i], [VERSION, [NAME, "Facebook"]], [/FBAN\\/FBIOS|FB_IAB\\/FB4A/i], [[NAME, "Facebook"]], [/safari\\s(line)\\/([\\w\\.]+)/i, /\\b(line)\\/([\\w\\.]+)\\/iab/i, /(chromium|instagram)[\\/\\s]([\\w\\.-]+)/i], [NAME, VERSION], [/\\bgsa\\/([\\w\\.]+)\\s.*safari\\//i], [VERSION, [NAME, "GSA"]], [/headlesschrome(?:\\/([\\w\\.]+)|\\s)/i], [VERSION, [NAME, "Chrome Headless"]], [/\\swv\\).+(chrome)\\/([\\w\\.]+)/i], [[NAME, "Chrome WebView"], VERSION], [/droid.+\\sversion\\/([\\w\\.]+)\\b.+(?:mobile\\ssafari|safari)/i], [VERSION, [NAME, "Android Browser"]], [/(chrome|omniweb|arora|[tizenoka]{5}\\s?browser)\\/v?([\\w\\.]+)/i], [NAME, VERSION], [/version\\/([\\w\\.]+)\\s.*mobile\\/\\w+\\s(safari)/i], [VERSION, [NAME, "Mobile Safari"]], [/version\\/([\\w\\.]+)\\s.*(mobile\\s?safari|safari)/i], [VERSION, NAME], [/webkit.+?(mobile\\s?safari|safari)(\\/[\\w\\.]+)/i], [NAME, [VERSION, mapper.str, maps.browser.oldSafari.version]], [/(webkit|khtml)\\/([\\w\\.]+)/i], [NAME, VERSION], [/(navigator|netscape)\\/([\\w\\.-]+)/i], [[NAME, "Netscape"], VERSION], [/ile\\svr;\\srv:([\\w\\.]+)\\).+firefox/i], [VERSION, [NAME, "Firefox Reality"]], [/ekiohf.+(flow)\\/([\\w\\.]+)/i, /(swiftfox)/i, /(icedragon|iceweasel|camino|chimera|fennec|maemo\\sbrowser|minimo|conkeror)[\\/\\s]?([\\w\\.\\+]+)/i, /(firefox|seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\\/([\\w\\.-]+)$/i, /(firefox)\\/([\\w\\.]+)\\s[\\w\\s\\-]+\\/[\\w\\.]+$/i, /(mozilla)\\/([\\w\\.]+)\\s.+rv\\:.+gecko\\/\\d+/i, /(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir)[\\/\\s]?([\\w\\.]+)/i, /(links)\\s\\(([\\w\\.]+)/i, /(gobrowser)\\/?([\\w\\.]*)/i, /(ice\\s?browser)\\/v?([\\w\\._]+)/i, /(mosaic)[\\/\\s]([\\w\\.]+)/i], [NAME, VERSION]],\n cpu: [[/(?:(amd|x(?:(?:86|64)[_-])?|wow|win)64)[;\\)]/i], [[ARCHITECTURE, "amd64"]], [/(ia32(?=;))/i], [[ARCHITECTURE, util.lowerize]], [/((?:i[346]|x)86)[;\\)]/i], [[ARCHITECTURE, "ia32"]], [/\\b(aarch64|armv?8e?l?)\\b/i], [[ARCHITECTURE, "arm64"]], [/\\b(arm(?:v[67])?ht?n?[fl]p?)\\b/i], [[ARCHITECTURE, "armhf"]], [/windows\\s(ce|mobile);\\sppc;/i], [[ARCHITECTURE, "arm"]], [/((?:ppc|powerpc)(?:64)?)(?:\\smac|;|\\))/i], [[ARCHITECTURE, /ower/, "", util.lowerize]], [/(sun4\\w)[;\\)]/i], [[ARCHITECTURE, "sparc"]], [/((?:avr32|ia64(?=;))|68k(?=\\))|\\barm(?:64|(?=v(?:[1-7]|[5-7]1)l?|;|eabi))|(?=atmel\\s)avr|(?:irix|mips|sparc)(?:64)?\\b|pa-risc)/i], [[ARCHITECTURE, util.lowerize]]],\n device: [[/\\b(sch-i[89]0\\d|shw-m380s|sm-[pt]\\w{2,4}|gt-[pn]\\d{2,4}|sgh-t8[56]9|nexus\\s10)/i], [MODEL, [VENDOR, "Samsung"], [TYPE, TABLET]], [/\\b((?:s[cgp]h|gt|sm)-\\w+|galaxy\\snexus)/i, /\\ssamsung[\\s-]([\\w-]+)/i, /sec-(sgh\\w+)/i], [MODEL, [VENDOR, "Samsung"], [TYPE, MOBILE]], [/\\((ip(?:hone|od)[\\s\\w]*);/i], [MODEL, [VENDOR, "Apple"], [TYPE, MOBILE]], [/\\((ipad);[\\w\\s\\),;-]+apple/i, /applecoremedia\\/[\\w\\.]+\\s\\((ipad)/i, /\\b(ipad)\\d\\d?,\\d\\d?[;\\]].+ios/i], [MODEL, [VENDOR, "Apple"], [TYPE, TABLET]], [/\\b((?:agr|ags[23]|bah2?|sht?)-a?[lw]\\d{2})/i], [MODEL, [VENDOR, "Huawei"], [TYPE, TABLET]], [/d\\/huawei([\\w\\s-]+)[;\\)]/i, /\\b(nexus\\s6p|vog-[at]?l\\d\\d|ane-[at]?l[x\\d]\\d|eml-a?l\\d\\da?|lya-[at]?l\\d[\\dc]|clt-a?l\\d\\di?|ele-l\\d\\d)/i, /\\b(\\w{2,4}-[atu][ln][01259][019])[;\\)\\s]/i], [MODEL, [VENDOR, "Huawei"], [TYPE, MOBILE]], [/\\b(poco[\\s\\w]+)(?:\\sbuild|\\))/i, /\\b;\\s(\\w+)\\sbuild\\/hm\\1/i, /\\b(hm[\\s\\-_]?note?[\\s_]?(?:\\d\\w)?)\\sbuild/i, /\\b(redmi[\\s\\-_]?(?:note|k)?[\\w\\s_]+)(?:\\sbuild|\\))/i, /\\b(mi[\\s\\-_]?(?:a\\d|one|one[\\s_]plus|note lte)?[\\s_]?(?:\\d?\\w?)[\\s_]?(?:plus)?)\\sbuild/i], [[MODEL, /_/g, " "], [VENDOR, "Xiaomi"], [TYPE, MOBILE]], [/\\b(mi[\\s\\-_]?(?:pad)(?:[\\w\\s_]+))(?:\\sbuild|\\))/i], [[MODEL, /_/g, " "], [VENDOR, "Xiaomi"], [TYPE, TABLET]], [/;\\s(\\w+)\\sbuild.+\\soppo/i, /\\s(cph[12]\\d{3}|p(?:af|c[al]|d\\w|e[ar])[mt]\\d0|x9007)\\b/i], [MODEL, [VENDOR, "OPPO"], [TYPE, MOBILE]], [/\\svivo\\s(\\w+)(?:\\sbuild|\\))/i, /\\s(v[12]\\d{3}\\w?[at])(?:\\sbuild|;)/i], [MODEL, [VENDOR, "Vivo"], [TYPE, MOBILE]], [/\\s(rmx[12]\\d{3})(?:\\sbuild|;)/i], [MODEL, [VENDOR, "Realme"], [TYPE, MOBILE]], [/\\s(milestone|droid(?:[2-4x]|\\s(?:bionic|x2|pro|razr))?:?(\\s4g)?)\\b[\\w\\s]+build\\//i, /\\smot(?:orola)?[\\s-](\\w*)/i, /((?:moto[\\s\\w\\(\\)]+|xt\\d{3,4}|nexus\\s6)(?=\\sbuild|\\)))/i], [MODEL, [VENDOR, "Motorola"], [TYPE, MOBILE]], [/\\s(mz60\\d|xoom[\\s2]{0,2})\\sbuild\\//i], [MODEL, [VENDOR, "Motorola"], [TYPE, TABLET]], [/((?=lg)?[vl]k\\-?\\d{3})\\sbuild|\\s3\\.[\\s\\w;-]{10}lg?-([06cv9]{3,4})/i], [MODEL, [VENDOR, "LG"], [TYPE, TABLET]], [/(lm-?f100[nv]?|nexus\\s[45])/i, /lg[e;\\s\\/-]+((?!browser|netcast)\\w+)/i, /\\blg(\\-?[\\d\\w]+)\\sbuild/i], [MODEL, [VENDOR, "LG"], [TYPE, MOBILE]], [/(ideatab[\\w\\-\\s]+)/i, /lenovo\\s?(s(?:5000|6000)(?:[\\w-]+)|tab(?:[\\s\\w]+)|yt[\\d\\w-]{6}|tb[\\d\\w-]{6})/i], [MODEL, [VENDOR, "Lenovo"], [TYPE, TABLET]], [/(?:maemo|nokia).*(n900|lumia\\s\\d+)/i, /nokia[\\s_-]?([\\w\\.-]*)/i], [[MODEL, /_/g, " "], [VENDOR, "Nokia"], [TYPE, MOBILE]], [/droid.+;\\s(pixel\\sc)[\\s)]/i], [MODEL, [VENDOR, "Google"], [TYPE, TABLET]], [/droid.+;\\s(pixel[\\s\\daxl]{0,6})(?:\\sbuild|\\))/i], [MODEL, [VENDOR, "Google"], [TYPE, MOBILE]], [/droid.+\\s([c-g]\\d{4}|so[-l]\\w+|xq-a\\w[4-7][12])(?=\\sbuild\\/|\\).+chrome\\/(?![1-6]{0,1}\\d\\.))/i], [MODEL, [VENDOR, "Sony"], [TYPE, MOBILE]], [/sony\\stablet\\s[ps]\\sbuild\\//i, /(?:sony)?sgp\\w+(?:\\sbuild\\/|\\))/i], [[MODEL, "Xperia Tablet"], [VENDOR, "Sony"], [TYPE, TABLET]], [/\\s(kb2005|in20[12]5|be20[12][59])\\b/i, /\\ba000(1)\\sbuild/i, /\\boneplus\\s(a\\d{4})[\\s)]/i], [MODEL, [VENDOR, "OnePlus"], [TYPE, MOBILE]], [/(alexa)webm/i, /(kf[a-z]{2}wi)(\\sbuild\\/|\\))/i, /(kf[a-z]+)(\\sbuild\\/|\\)).+silk\\//i], [MODEL, [VENDOR, "Amazon"], [TYPE, TABLET]], [/(sd|kf)[0349hijorstuw]+(\\sbuild\\/|\\)).+silk\\//i], [[MODEL, "Fire Phone"], [VENDOR, "Amazon"], [TYPE, MOBILE]], [/\\((playbook);[\\w\\s\\),;-]+(rim)/i], [MODEL, VENDOR, [TYPE, TABLET]], [/((?:bb[a-f]|st[hv])100-\\d)/i, /\\(bb10;\\s(\\w+)/i], [MODEL, [VENDOR, "BlackBerry"], [TYPE, MOBILE]], [/(?:\\b|asus_)(transfo[prime\\s]{4,10}\\s\\w+|eeepc|slider\\s\\w+|nexus\\s7|padfone|p00[cj])/i], [MODEL, [VENDOR, "ASUS"], [TYPE, TABLET]], [/\\s(z[es]6[027][01][km][ls]|zenfone\\s\\d\\w?)\\b/i], [MODEL, [VENDOR, "ASUS"], [TYPE, MOBILE]], [/(nexus\\s9)/i], [MODEL, [VENDOR, "HTC"], [TYPE, TABLET]], [/(htc)[;_\\s-]{1,2}([\\w\\s]+(?=\\)|\\sbuild)|\\w+)/i, /(zte)-(\\w*)/i, /(alcatel|geeksphone|nexian|panasonic|(?=;\\s)sony)[_\\s-]?([\\w-]*)/i], [VENDOR, [MODEL, /_/g, " "], [TYPE, MOBILE]], [/droid[x\\d\\.\\s;]+\\s([ab][1-7]\\-?[0178a]\\d\\d?)/i], [MODEL, [VENDOR, "Acer"], [TYPE, TABLET]], [/droid.+;\\s(m[1-5]\\snote)\\sbuild/i, /\\bmz-([\\w-]{2,})/i], [MODEL, [VENDOR, "Meizu"], [TYPE, MOBILE]], [/(blackberry|benq|palm(?=\\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron)[\\s_-]?([\\w-]*)/i, /(hp)\\s([\\w\\s]+\\w)/i, /(asus)-?(\\w+)/i, /(microsoft);\\s(lumia[\\s\\w]+)/i, /(lenovo)[_\\s-]?([\\w-]+)/i, /linux;.+(jolla);/i, /droid.+;\\s(oppo)\\s?([\\w\\s]+)\\sbuild/i], [VENDOR, MODEL, [TYPE, MOBILE]], [/(archos)\\s(gamepad2?)/i, /(hp).+(touchpad(?!.+tablet)|tablet)/i, /(kindle)\\/([\\w\\.]+)/i, /\\s(nook)[\\w\\s]+build\\/(\\w+)/i, /(dell)\\s(strea[kpr\\s\\d]*[\\dko])/i, /[;\\/]\\s?(le[\\s\\-]+pan)[\\s\\-]+(\\w{1,9})\\sbuild/i, /[;\\/]\\s?(trinity)[\\-\\s]*(t\\d{3})\\sbuild/i, /\\b(gigaset)[\\s\\-]+(q\\w{1,9})\\sbuild/i, /\\b(vodafone)\\s([\\w\\s]+)(?:\\)|\\sbuild)/i], [VENDOR, MODEL, [TYPE, TABLET]], [/\\s(surface\\sduo)\\s/i], [MODEL, [VENDOR, "Microsoft"], [TYPE, TABLET]], [/droid\\s[\\d\\.]+;\\s(fp\\du?)\\sbuild/i], [MODEL, [VENDOR, "Fairphone"], [TYPE, MOBILE]], [/\\s(u304aa)\\sbuild/i], [MODEL, [VENDOR, "AT&T"], [TYPE, MOBILE]], [/sie-(\\w*)/i], [MODEL, [VENDOR, "Siemens"], [TYPE, MOBILE]], [/[;\\/]\\s?(rct\\w+)\\sbuild/i], [MODEL, [VENDOR, "RCA"], [TYPE, TABLET]], [/[;\\/\\s](venue[\\d\\s]{2,7})\\sbuild/i], [MODEL, [VENDOR, "Dell"], [TYPE, TABLET]], [/[;\\/]\\s?(q(?:mv|ta)\\w+)\\sbuild/i], [MODEL, [VENDOR, "Verizon"], [TYPE, TABLET]], [/[;\\/]\\s(?:barnes[&\\s]+noble\\s|bn[rt])([\\w\\s\\+]*)\\sbuild/i], [MODEL, [VENDOR, "Barnes & Noble"], [TYPE, TABLET]], [/[;\\/]\\s(tm\\d{3}\\w+)\\sbuild/i], [MODEL, [VENDOR, "NuVision"], [TYPE, TABLET]], [/;\\s(k88)\\sbuild/i], [MODEL, [VENDOR, "ZTE"], [TYPE, TABLET]], [/;\\s(nx\\d{3}j)\\sbuild/i], [MODEL, [VENDOR, "ZTE"], [TYPE, MOBILE]], [/[;\\/]\\s?(gen\\d{3})\\sbuild.*49h/i], [MODEL, [VENDOR, "Swiss"], [TYPE, MOBILE]], [/[;\\/]\\s?(zur\\d{3})\\sbuild/i], [MODEL, [VENDOR, "Swiss"], [TYPE, TABLET]], [/[;\\/]\\s?((zeki)?tb.*\\b)\\sbuild/i], [MODEL, [VENDOR, "Zeki"], [TYPE, TABLET]], [/[;\\/]\\s([yr]\\d{2})\\sbuild/i, /[;\\/]\\s(dragon[\\-\\s]+touch\\s|dt)(\\w{5})\\sbuild/i], [[VENDOR, "Dragon Touch"], MODEL, [TYPE, TABLET]], [/[;\\/]\\s?(ns-?\\w{0,9})\\sbuild/i], [MODEL, [VENDOR, "Insignia"], [TYPE, TABLET]], [/[;\\/]\\s?((nxa|Next)-?\\w{0,9})\\sbuild/i], [MODEL, [VENDOR, "NextBook"], [TYPE, TABLET]], [/[;\\/]\\s?(xtreme\\_)?(v(1[045]|2[015]|[3469]0|7[05]))\\sbuild/i], [[VENDOR, "Voice"], MODEL, [TYPE, MOBILE]], [/[;\\/]\\s?(lvtel\\-)?(v1[12])\\sbuild/i], [[VENDOR, "LvTel"], MODEL, [TYPE, MOBILE]], [/;\\s(ph-1)\\s/i], [MODEL, [VENDOR, "Essential"], [TYPE, MOBILE]], [/[;\\/]\\s?(v(100md|700na|7011|917g).*\\b)\\sbuild/i], [MODEL, [VENDOR, "Envizen"], [TYPE, TABLET]], [/[;\\/]\\s?(trio[\\s\\w\\-\\.]+)\\sbuild/i], [MODEL, [VENDOR, "MachSpeed"], [TYPE, TABLET]], [/[;\\/]\\s?tu_(1491)\\sbuild/i], [MODEL, [VENDOR, "Rotor"], [TYPE, TABLET]], [/(shield[\\w\\s]+)\\sbuild/i], [MODEL, [VENDOR, "Nvidia"], [TYPE, TABLET]], [/(sprint)\\s(\\w+)/i], [VENDOR, MODEL, [TYPE, MOBILE]], [/(kin\\.[onetw]{3})/i], [[MODEL, /\\./g, " "], [VENDOR, "Microsoft"], [TYPE, MOBILE]], [/droid\\s[\\d\\.]+;\\s(cc6666?|et5[16]|mc[239][23]x?|vc8[03]x?)\\)/i], [MODEL, [VENDOR, "Zebra"], [TYPE, TABLET]], [/droid\\s[\\d\\.]+;\\s(ec30|ps20|tc[2-8]\\d[kx])\\)/i], [MODEL, [VENDOR, "Zebra"], [TYPE, MOBILE]], [/\\s(ouya)\\s/i, /(nintendo)\\s([wids3utch]+)/i], [VENDOR, MODEL, [TYPE, CONSOLE]], [/droid.+;\\s(shield)\\sbuild/i], [MODEL, [VENDOR, "Nvidia"], [TYPE, CONSOLE]], [/(playstation\\s[345portablevi]+)/i], [MODEL, [VENDOR, "Sony"], [TYPE, CONSOLE]], [/[\\s\\(;](xbox(?:\\sone)?(?!;\\sxbox))[\\s\\);]/i], [MODEL, [VENDOR, "Microsoft"], [TYPE, CONSOLE]], [/smart-tv.+(samsung)/i], [VENDOR, [TYPE, SMARTTV]], [/hbbtv.+maple;(\\d+)/i], [[MODEL, /^/, "SmartTV"], [VENDOR, "Samsung"], [TYPE, SMARTTV]], [/(?:linux;\\snetcast.+smarttv|lg\\snetcast\\.tv-201\\d)/i], [[VENDOR, "LG"], [TYPE, SMARTTV]], [/(apple)\\s?tv/i], [VENDOR, [MODEL, "Apple TV"], [TYPE, SMARTTV]], [/crkey/i], [[MODEL, "Chromecast"], [VENDOR, "Google"], [TYPE, SMARTTV]], [/droid.+aft([\\w])(\\sbuild\\/|\\))/i], [MODEL, [VENDOR, "Amazon"], [TYPE, SMARTTV]], [/\\(dtv[\\);].+(aquos)/i], [MODEL, [VENDOR, "Sharp"], [TYPE, SMARTTV]], [/hbbtv\\/\\d+\\.\\d+\\.\\d+\\s+\\([\\w\\s]*;\\s*(\\w[^;]*);([^;]*)/i], [[VENDOR, util.trim], [MODEL, util.trim], [TYPE, SMARTTV]], [/[\\s\\/\\(](android\\s|smart[-\\s]?|opera\\s)tv[;\\)\\s]/i], [[TYPE, SMARTTV]], [/((pebble))app\\/[\\d\\.]+\\s/i], [VENDOR, MODEL, [TYPE, WEARABLE]], [/droid.+;\\s(glass)\\s\\d/i], [MODEL, [VENDOR, "Google"], [TYPE, WEARABLE]], [/droid\\s[\\d\\.]+;\\s(wt63?0{2,3})\\)/i], [MODEL, [VENDOR, "Zebra"], [TYPE, WEARABLE]], [/(tesla)(?:\\sqtcarbrowser|\\/20[12]\\d\\.[\\w\\.-]+)/i], [VENDOR, [TYPE, EMBEDDED]], [/droid .+?; ([^;]+?)(?: build|\\) applewebkit).+? mobile safari/i], [MODEL, [TYPE, MOBILE]], [/droid .+?;\\s([^;]+?)(?: build|\\) applewebkit).+?(?! mobile) safari/i], [MODEL, [TYPE, TABLET]], [/\\s(tablet|tab)[;\\/]/i, /\\s(mobile)(?:[;\\/]|\\ssafari)/i], [[TYPE, util.lowerize]], [/(android[\\w\\.\\s\\-]{0,9});.+build/i], [MODEL, [VENDOR, "Generic"]], [/(phone)/i], [[TYPE, MOBILE]]],\n engine: [[/windows.+\\sedge\\/([\\w\\.]+)/i], [VERSION, [NAME, "EdgeHTML"]], [/webkit\\/537\\.36.+chrome\\/(?!27)([\\w\\.]+)/i], [VERSION, [NAME, "Blink"]], [/(presto)\\/([\\w\\.]+)/i, /(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\\/([\\w\\.]+)/i, /ekioh(flow)\\/([\\w\\.]+)/i, /(khtml|tasman|links)[\\/\\s]\\(?([\\w\\.]+)/i, /(icab)[\\/\\s]([23]\\.[\\d\\.]+)/i], [NAME, VERSION], [/rv\\:([\\w\\.]{1,9})\\b.+(gecko)/i], [VERSION, NAME]],\n os: [[/microsoft\\s(windows)\\s(vista|xp)/i], [NAME, VERSION], [/(windows)\\snt\\s6\\.2;\\s(arm)/i, /(windows\\sphone(?:\\sos)*)[\\s\\/]?([\\d\\.\\s\\w]*)/i, /(windows\\smobile|windows)[\\s\\/]?([ntce\\d\\.\\s]+\\w)(?!.+xbox)/i], [NAME, [VERSION, mapper.str, maps.os.windows.version]], [/(win(?=3|9|n)|win\\s9x\\s)([nt\\d\\.]+)/i], [[NAME, "Windows"], [VERSION, mapper.str, maps.os.windows.version]], [/ip[honead]{2,4}\\b(?:.*os\\s([\\w]+)\\slike\\smac|;\\sopera)/i, /cfnetwork\\/.+darwin/i], [[VERSION, /_/g, "."], [NAME, "iOS"]], [/(mac\\sos\\sx)\\s?([\\w\\s\\.]*)/i, /(macintosh|mac(?=_powerpc)\\s)(?!.+haiku)/i], [[NAME, "Mac OS"], [VERSION, /_/g, "."]], [/(android|webos|palm\\sos|qnx|bada|rim\\stablet\\sos|meego|sailfish|contiki)[\\/\\s-]?([\\w\\.]*)/i, /(blackberry)\\w*\\/([\\w\\.]*)/i, /(tizen|kaios)[\\/\\s]([\\w\\.]+)/i, /\\((series40);/i], [NAME, VERSION], [/\\(bb(10);/i], [VERSION, [NAME, "BlackBerry"]], [/(?:symbian\\s?os|symbos|s60(?=;)|series60)[\\/\\s-]?([\\w\\.]*)/i], [VERSION, [NAME, "Symbian"]], [/mozilla.+\\(mobile;.+gecko.+firefox/i], [[NAME, "Firefox OS"]], [/web0s;.+rt(tv)/i, /\\b(?:hp)?wos(?:browser)?\\/([\\w\\.]+)/i], [VERSION, [NAME, "webOS"]], [/crkey\\/([\\d\\.]+)/i], [VERSION, [NAME, "Chromecast"]], [/(cros)\\s[\\w]+\\s([\\w\\.]+\\w)/i], [[NAME, "Chromium OS"], VERSION], [/(nintendo|playstation)\\s([wids345portablevuch]+)/i, /(xbox);\\s+xbox\\s([^\\);]+)/i, /(mint)[\\/\\s\\(\\)]?(\\w*)/i, /(mageia|vectorlinux)[;\\s]/i, /(joli|[kxln]?ubuntu|debian|suse|opensuse|gentoo|arch(?=\\slinux)|slackware|fedora|mandriva|centos|pclinuxos|redhat|zenwalk|linpus|raspbian)(?:\\sgnu\\/linux)?(?:\\slinux)?[\\/\\s-]?(?!chrom|package)([\\w\\.-]*)/i, /(hurd|linux)\\s?([\\w\\.]*)/i, /(gnu)\\s?([\\w\\.]*)/i, /\\s([frentopc-]{0,4}bsd|dragonfly)\\s?(?!amd|[ix346]{1,2}86)([\\w\\.]*)/i, /(haiku)\\s(\\w+)/i], [NAME, VERSION], [/(sunos)\\s?([\\w\\.\\d]*)/i], [[NAME, "Solaris"], VERSION], [/((?:open)?solaris)[\\/\\s-]?([\\w\\.]*)/i, /(aix)\\s((\\d)(?=\\.|\\)|\\s)[\\w\\.])*/i, /(plan\\s9|minix|beos|os\\/2|amigaos|morphos|risc\\sos|openvms|fuchsia)/i, /(unix)\\s?([\\w\\.]*)/i], [NAME, VERSION]]\n };\n\n var UAParser = function UAParser(ua, extensions) {\n if (typeof ua === "object") {\n extensions = ua;\n ua = undefined;\n }\n\n if (!(this instanceof UAParser)) {\n return new UAParser(ua, extensions).getResult();\n }\n\n var _ua = ua || (typeof window !== "undefined" && window.navigator && window.navigator.userAgent ? window.navigator.userAgent : EMPTY);\n\n var _rgxmap = extensions ? util.extend(regexes, extensions) : regexes;\n\n this.getBrowser = function () {\n var _browser = {\n name: undefined,\n version: undefined\n };\n mapper.rgx.call(_browser, _ua, _rgxmap.browser);\n _browser.major = util.major(_browser.version);\n return _browser;\n };\n\n this.getCPU = function () {\n var _cpu = {\n architecture: undefined\n };\n mapper.rgx.call(_cpu, _ua, _rgxmap.cpu);\n return _cpu;\n };\n\n this.getDevice = function () {\n var _device = {\n vendor: undefined,\n model: undefined,\n type: undefined\n };\n mapper.rgx.call(_device, _ua, _rgxmap.device);\n return _device;\n };\n\n this.getEngine = function () {\n var _engine = {\n name: undefined,\n version: undefined\n };\n mapper.rgx.call(_engine, _ua, _rgxmap.engine);\n return _engine;\n };\n\n this.getOS = function () {\n var _os = {\n name: undefined,\n version: undefined\n };\n mapper.rgx.call(_os, _ua, _rgxmap.os);\n return _os;\n };\n\n this.getResult = function () {\n return {\n ua: this.getUA(),\n browser: this.getBrowser(),\n engine: this.getEngine(),\n os: this.getOS(),\n device: this.getDevice(),\n cpu: this.getCPU()\n };\n };\n\n this.getUA = function () {\n return _ua;\n };\n\n this.setUA = function (ua) {\n _ua = typeof ua === STR_TYPE && ua.length > UA_MAX_LENGTH ? util.trim(ua, UA_MAX_LENGTH) : ua;\n return this;\n };\n\n this.setUA(_ua);\n return this;\n };\n\n UAParser.VERSION = LIBVERSION;\n UAParser.BROWSER = {\n NAME: NAME,\n MAJOR: MAJOR,\n VERSION: VERSION\n };\n UAParser.CPU = {\n ARCHITECTURE: ARCHITECTURE\n };\n UAParser.DEVICE = {\n MODEL: MODEL,\n VENDOR: VENDOR,\n TYPE: TYPE,\n CONSOLE: CONSOLE,\n MOBILE: MOBILE,\n SMARTTV: SMARTTV,\n TABLET: TABLET,\n WEARABLE: WEARABLE,\n EMBEDDED: EMBEDDED\n };\n UAParser.ENGINE = {\n NAME: NAME,\n VERSION: VERSION\n };\n UAParser.OS = {\n NAME: NAME,\n VERSION: VERSION\n };\n\n if (typeof exports !== UNDEF_TYPE) {\n if ("object" !== UNDEF_TYPE && module.exports) {\n exports = module.exports = UAParser;\n }\n\n exports.UAParser = UAParser;\n } else {\n if (true) {\n !(__WEBPACK_AMD_DEFINE_RESULT__ = (function () {\n return UAParser;\n }).call(exports, __webpack_require__, exports, module),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else {}\n }\n\n var $ = typeof window !== "undefined" && (window.jQuery || window.Zepto);\n\n if ($ && !$.ua) {\n var parser = new UAParser();\n $.ua = parser.getResult();\n\n $.ua.get = function () {\n return parser.getUA();\n };\n\n $.ua.set = function (uastring) {\n parser.setUA(uastring);\n var result = parser.getResult();\n\n for (var prop in result) {\n $.ua[prop] = result[prop];\n }\n };\n }\n})(typeof window === "object" ? window : this);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy91YS1wYXJzZXItanMvZGlzdC91YS1wYXJzZXIubWluLmpzP2QxMjMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsdUJBQXVCLGtCQUFrQjtBQUN6QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQjtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QixtQkFBbUI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQ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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxRQUFRLFFBQWE7QUFDckI7QUFDQTs7QUFFQSxJQUFJLGdCQUFnQjtBQUNwQixHQUFHO0FBQ0gsUUFBUSxJQUEwQztBQUNsRCxNQUFNLG1DQUFPO0FBQ2I7QUFDQSxPQUFPO0FBQUEsa0dBQUM7QUFDUixLQUFLLE1BQU0sRUFFTjtBQUNMOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjQ4ODkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFAbGljZW5zZVxuICogVUFQYXJzZXIuanMgdjAuNy4yOFxuICogTGlnaHR3ZWlnaHQgSmF2YVNjcmlwdC1iYXNlZCBVc2VyLUFnZW50IHN0cmluZyBwYXJzZXJcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWlzYWxtYW4vdWEtcGFyc2VyLWpzXG4gKlxuICogQ29weXJpZ2h0IMKpIDIwMTItMjAyMSBGYWlzYWwgU2FsbWFuIDxmQGZhaXNhbG1hbi5jb20+XG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgTGljZW5zZVxuICovXG4oZnVuY3Rpb24gKHdpbmRvdywgdW5kZWZpbmVkKSB7XG4gIFwidXNlIHN0cmljdFwiO1xuXG4gIHZhciBMSUJWRVJTSU9OID0gXCIwLjcuMjhcIixcbiAgICAgIEVNUFRZID0gXCJcIixcbiAgICAgIFVOS05PV04gPSBcIj9cIixcbiAgICAgIEZVTkNfVFlQRSA9IFwiZnVuY3Rpb25cIixcbiAgICAgIFVOREVGX1RZUEUgPSBcInVuZGVmaW5lZFwiLFxuICAgICAgT0JKX1RZUEUgPSBcIm9iamVjdFwiLFxuICAgICAgU1RSX1RZUEUgPSBcInN0cmluZ1wiLFxuICAgICAgTUFKT1IgPSBcIm1ham9yXCIsXG4gICAgICBNT0RFTCA9IFwibW9kZWxcIixcbiAgICAgIE5BTUUgPSBcIm5hbWVcIixcbiAgICAgIFRZUEUgPSBcInR5cGVcIixcbiAgICAgIFZFTkRPUiA9IFwidmVuZG9yXCIsXG4gICAgICBWRVJTSU9OID0gXCJ2ZXJzaW9uXCIsXG4gICAgICBBUkNISVRFQ1RVUkUgPSBcImFyY2hpdGVjdHVyZVwiLFxuICAgICAgQ09OU09MRSA9IFwiY29uc29sZVwiLFxuICAgICAgTU9CSUxFID0gXCJtb2JpbGVcIixcbiAgICAgIFRBQkxFVCA9IFwidGFibGV0XCIsXG4gICAgICBTTUFSVFRWID0gXCJzbWFydHR2XCIsXG4gICAgICBXRUFSQUJMRSA9IFwid2VhcmFibGVcIixcbiAgICAgIEVNQkVEREVEID0gXCJlbWJlZGRlZFwiLFxuICAgICAgVUFfTUFYX0xFTkdUSCA9IDI1NTtcbiAgdmFyIHV0aWwgPSB7XG4gICAgZXh0ZW5kOiBmdW5jdGlvbiBleHRlbmQocmVnZXhlcywgZXh0ZW5zaW9ucykge1xuICAgICAgdmFyIG1lcmdlZFJlZ2V4ZXMgPSB7fTtcblxuICAgICAgZm9yICh2YXIgaSBpbiByZWdleGVzKSB7XG4gICAgICAgIGlmIChleHRlbnNpb25zW2ldICYmIGV4dGVuc2lvbnNbaV0ubGVuZ3RoICUgMiA9PT0gMCkge1xuICAgICAgICAgIG1lcmdlZFJlZ2V4ZXNbaV0gPSBleHRlbnNpb25zW2ldLmNvbmNhdChyZWdleGVzW2ldKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBtZXJnZWRSZWdleGVzW2ldID0gcmVnZXhlc1tpXTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbWVyZ2VkUmVnZXhlcztcbiAgICB9LFxuICAgIGhhczogZnVuY3Rpb24gaGFzKHN0cjEsIHN0cjIpIHtcbiAgICAgIHJldHVybiB0eXBlb2Ygc3RyMSA9PT0gU1RSX1RZUEUgPyBzdHIyLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihzdHIxLnRvTG93ZXJDYXNlKCkpICE9PSAtMSA6IGZhbHNlO1xuICAgIH0sXG4gICAgbG93ZXJpemU6IGZ1bmN0aW9uIGxvd2VyaXplKHN0cikge1xuICAgICAgcmV0dXJuIHN0ci50b0xvd2VyQ2FzZSgpO1xuICAgIH0sXG4gICAgbWFqb3I6IGZ1bmN0aW9uIG1ham9yKHZlcnNpb24pIHtcbiAgICAgIHJldHVybiB0eXBlb2YgdmVyc2lvbiA9PT0gU1RSX1RZUEUgPyB2ZXJzaW9uLnJlcGxhY2UoL1teXFxkXFwuXS9nLCBcIlwiKS5zcGxpdChcIi5cIilbMF0gOiB1bmRlZmluZWQ7XG4gICAgfSxcbiAgICB0cmltOiBmdW5jdGlvbiB0cmltKHN0ciwgbGVuKSB7XG4gICAgICBzdHIgPSBzdHIucmVwbGFjZSgvXltcXHNcXHVGRUZGXFx4QTBdK3xbXFxzXFx1RkVGRlxceEEwXSskL2csIFwiXCIpO1xuICAgICAgcmV0dXJuIHR5cGVvZiBsZW4gPT09IFVOREVGX1RZUEUgPyBzdHIgOiBzdHIuc3Vic3RyaW5nKDAsIFVBX01BWF9MRU5HVEgpO1xuICAgIH1cbiAgfTtcbiAgdmFyIG1hcHBlciA9IHtcbiAgICByZ3g6IGZ1bmN0aW9uIHJneCh1YSwgYXJyYXlzKSB7XG4gICAgICB2YXIgaSA9IDAsXG4gICAgICAgICAgaixcbiAgICAgICAgICBrLFxuICAgICAgICAgIHAsXG4gICAgICAgICAgcSxcbiAgICAgICAgICBtYXRjaGVzLFxuICAgICAgICAgIG1hdGNoO1xuXG4gICAgICB3aGlsZSAoaSA8IGFycmF5cy5sZW5ndGggJiYgIW1hdGNoZXMpIHtcbiAgICAgICAgdmFyIHJlZ2V4ID0gYXJyYXlzW2ldLFxuICAgICAgICAgICAgcHJvcHMgPSBhcnJheXNbaSArIDFdO1xuICAgICAgICBqID0gayA9IDA7XG5cbiAgICAgICAgd2hpbGUgKGogPCByZWdleC5sZW5ndGggJiYgIW1hdGNoZXMpIHtcbiAgICAgICAgICBtYXRjaGVzID0gcmVnZXhbaisrXS5leGVjKHVhKTtcblxuICAgICAgICAgIGlmICghIW1hdGNoZXMpIHtcbiAgICAgICAgICAgIGZvciAocCA9IDA7IHAgPCBwcm9wcy5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgICBtYXRjaCA9IG1hdGNoZXNbKytrXTtcbiAgICAgICAgICAgICAgcSA9IHByb3BzW3BdO1xuXG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgcSA9PT0gT0JKX1RZUEUgJiYgcS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKHEubGVuZ3RoID09IDIpIHtcbiAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcVsxXSA9PSBGVU5DX1RZUEUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpc1txWzBdXSA9IHFbMV0uY2FsbCh0aGlzLCBtYXRjaCk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzW3FbMF1dID0gcVsxXTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHEubGVuZ3RoID09IDMpIHtcbiAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcVsxXSA9PT0gRlVOQ19UWVBFICYmICEocVsxXS5leGVjICYmIHFbMV0udGVzdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpc1txWzBdXSA9IG1hdGNoID8gcVsxXS5jYWxsKHRoaXMsIG1hdGNoLCBxWzJdKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXNbcVswXV0gPSBtYXRjaCA/IG1hdGNoLnJlcGxhY2UocVsxXSwgcVsyXSkgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChxLmxlbmd0aCA9PSA0KSB7XG4gICAgICAgICAgICAgICAgICB0aGlzW3FbMF1dID0gbWF0Y2ggPyBxWzNdLmNhbGwodGhpcywgbWF0Y2gucmVwbGFjZShxWzFdLCBxWzJdKSkgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXNbcV0gPSBtYXRjaCA/IG1hdGNoIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaSArPSAyO1xuICAgICAgfVxuICAgIH0sXG4gICAgc3RyOiBmdW5jdGlvbiBzdHIoX3N0ciwgbWFwKSB7XG4gICAgICBmb3IgKHZhciBpIGluIG1hcCkge1xuICAgICAgICBpZiAodHlwZW9mIG1hcFtpXSA9PT0gT0JKX1RZUEUgJiYgbWFwW2ldLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG1hcFtpXS5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgaWYgKHV0aWwuaGFzKG1hcFtpXVtqXSwgX3N0cikpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGkgPT09IFVOS05PV04gPyB1bmRlZmluZWQgOiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh1dGlsLmhhcyhtYXBbaV0sIF9zdHIpKSB7XG4gICAgICAgICAgcmV0dXJuIGkgPT09IFVOS05PV04gPyB1bmRlZmluZWQgOiBpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfc3RyO1xuICAgIH1cbiAgfTtcbiAgdmFyIG1hcHMgPSB7XG4gICAgYnJvd3Nlcjoge1xuICAgICAgb2xkU2FmYXJpOiB7XG4gICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICBcIjEuMFwiOiBcIi84XCIsXG4gICAgICAgICAgMS4yOiBcIi8xXCIsXG4gICAgICAgICAgMS4zOiBcIi8zXCIsXG4gICAgICAgICAgXCIyLjBcIjogXCIvNDEyXCIsXG4gICAgICAgICAgXCIyLjAuMlwiOiBcIi80MTZcIixcbiAgICAgICAgICBcIjIuMC4zXCI6IFwiLzQxN1wiLFxuICAgICAgICAgIFwiMi4wLjRcIjogXCIvNDE5XCIsXG4gICAgICAgICAgXCI/XCI6IFwiL1wiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBvbGRFZGdlOiB7XG4gICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAuMTogXCIxMi5cIixcbiAgICAgICAgICAyMTogXCIxMy5cIixcbiAgICAgICAgICAzMTogXCIxNC5cIixcbiAgICAgICAgICAzOTogXCIxNS5cIixcbiAgICAgICAgICA0MTogXCIxNi5cIixcbiAgICAgICAgICA0MjogXCIxNy5cIixcbiAgICAgICAgICA0NDogXCIxOC5cIlxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBvczoge1xuICAgICAgd2luZG93czoge1xuICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgTUU6IFwiNC45MFwiLFxuICAgICAgICAgIFwiTlQgMy4xMVwiOiBcIk5UMy41MVwiLFxuICAgICAgICAgIFwiTlQgNC4wXCI6IFwiTlQ0LjBcIixcbiAgICAgICAgICAyZTM6IFwiTlQgNS4wXCIsXG4gICAgICAgICAgWFA6IFtcIk5UIDUuMVwiLCBcIk5UIDUuMlwiXSxcbiAgICAgICAgICBWaXN0YTogXCJOVCA2LjBcIixcbiAgICAgICAgICA3OiBcIk5UIDYuMVwiLFxuICAgICAgICAgIDg6IFwiTlQgNi4yXCIsXG4gICAgICAgICAgOC4xOiBcIk5UIDYuM1wiLFxuICAgICAgICAgIDEwOiBbXCJOVCA2LjRcIiwgXCJOVCAxMC4wXCJdLFxuICAgICAgICAgIFJUOiBcIkFSTVwiXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIHZhciByZWdleGVzID0ge1xuICAgIGJyb3dzZXI6IFtbL1xcYig/OmNybW98Y3Jpb3MpXFwvKFtcXHdcXC5dKykvaV0sIFtWRVJTSU9OLCBbTkFNRSwgXCJDaHJvbWVcIl1dLCBbLyg/OmVkZ2V8ZWRnaW9zfGVkZ2F8ZWRnKVxcLyhbXFx3XFwuXSspL2ldLCBbVkVSU0lPTiwgW05BTUUsIFwiRWRnZVwiXV0sIFsvKG9wZXJhXFxzbWluaSlcXC8oW1xcd1xcLi1dKykvaSwgLyhvcGVyYVxcc1ttb2JpbGV0YWJdezMsNn0pXFxiLit2ZXJzaW9uXFwvKFtcXHdcXC4tXSspL2ksIC8ob3BlcmEpKD86Lit2ZXJzaW9uXFwvfFtcXC9cXHNdKykoW1xcd1xcLl0rKS9pXSwgW05BTUUsIFZFUlNJT05dLCBbL29waW9zW1xcL1xcc10rKFtcXHdcXC5dKykvaV0sIFtWRVJTSU9OLCBbTkFNRSwgXCJPcGVyYSBNaW5pXCJdXSwgWy9cXHNvcHJcXC8oW1xcd1xcLl0rKS9pXSwgW1ZFUlNJT04sIFtOQU1FLCBcIk9wZXJhXCJdXSwgWy8oa2luZGxlKVxcLyhbXFx3XFwuXSspL2ksIC8obHVuYXNjYXBlfG1heHRob258bmV0ZnJvbnR8amFzbWluZXxibGF6ZXIpW1xcL1xcc10/KFtcXHdcXC5dKikvaSwgLyhhdmFudFxcc3xpZW1vYmlsZXxzbGltKSg/OmJyb3dzZXIpP1tcXC9cXHNdPyhbXFx3XFwuXSopL2ksIC8oYmE/aWR1YnJvd3NlcilbXFwvXFxzXT8oW1xcd1xcLl0rKS9pLCAvKD86bXN8XFwoKShpZSlcXHMoW1xcd1xcLl0rKS9pLCAvKGZsb2NrfHJvY2ttZWx0fG1pZG9yaXxlcGlwaGFueXxzaWxrfHNreWZpcmV8b3ZpYnJvd3Nlcnxib2x0fGlyb258dml2YWxkaXxpcmlkaXVtfHBoYW50b21qc3xib3dzZXJ8cXVhcmt8cXVwemlsbGF8ZmFsa29uKVxcLyhbXFx3XFwuLV0rKS9pLCAvKHJla29ucXxwdWZmaW58YnJhdmV8d2hhbGV8cXFicm93c2VybGl0ZXxxcSlcXC8oW1xcd1xcLl0rKS9pLCAvKHdlaWJvKV9fKFtcXGRcXC5dKykvaV0sIFtOQU1FLCBWRVJTSU9OXSwgWy8oPzpbXFxzXFwvXXVjP1xccz9icm93c2VyfCg/Omp1Yy4rKXVjd2ViKVtcXC9cXHNdPyhbXFx3XFwuXSspL2ldLCBbVkVSU0lPTiwgW05BTUUsIFwiVUNCcm93c2VyXCJdXSwgWy8oPzp3aW5kb3dzd2VjaGF0KT9cXHNxYmNvcmVcXC8oW1xcd1xcLl0rKVxcYi4qKD86d2luZG93c3dlY2hhdCk/L2ldLCBbVkVSU0lPTiwgW05BTUUsIFwiV2VDaGF0KFdpbikgRGVza3RvcFwiXV0sIFsvbWljcm9tZXNzZW5nZXJcXC8oW1xcd1xcLl0rKS9pXSwgW1ZFUlNJT04sIFtOQU1FLCBcIldlQ2hhdFwiXV0sIFsva29ucXVlcm9yXFwvKFtcXHdcXC5dKykvaV0sIFtWRVJTSU9OLCBbTkFNRSwgXCJLb25xdWVyb3JcIl1dLCBbL3RyaWRlbnQuK3J2WzpcXHNdKFtcXHdcXC5dezEsOX0pXFxiLitsaWtlXFxzZ2Vja28vaV0sIFtWRVJTSU9OLCBbTkFNRSwgXCJJRVwiXV0sIFsveWFicm93c2VyXFwvKFtcXHdcXC5dKykvaV0sIFtWRVJTSU9OLCBbTkFNRSwgXCJZYW5kZXhcIl1dLCBbLyhhdmFzdHxhdmcpXFwvKFtcXHdcXC5dKykvaV0sIFtbTkFNRSwgLyguKykvLCBcIiQxIFNlY3VyZSBCcm93c2VyXCJdLCBWRVJTSU9OXSwgWy9mb2N1c1xcLyhbXFx3XFwuXSspL2ldLCBbVkVSU0lPTiwgW05BTUUsIFwiRmlyZWZveCBGb2N1c1wiXV0sIFsvb3B0XFwvKFtcXHdcXC5dKykvaV0sIFtWRVJTSU9OLCBbTkFNRSwgXCJPcGVyYSBUb3VjaFwiXV0sIFsvY29jX2NvY19icm93c2VyXFwvKFtcXHdcXC5dKykvaV0sIFtWRVJTSU9OLCBbTkFNRSwgXCJDb2MgQ29jXCJdXSwgWy9kb2xmaW5cXC8oW1xcd1xcLl0rKS9pXSwgW1ZFUlNJT04sIFtOQU1FLCBcIkRvbHBoaW5cIl1dLCBbL2NvYXN0XFwvKFtcXHdcXC5dKykvaV0sIFtWRVJTSU9OLCBbTkFNRSwgXCJPcGVyYSBDb2FzdFwiXV0sIFsveGlhb21pXFwvbWl1aWJyb3dzZXJcXC8oW1xcd1xcLl0rKS9pXSwgW1ZFUlNJT04sIFtOQU1FLCBcIk1JVUkgQnJvd3NlclwiXV0sIFsvZnhpb3NcXC8oW1xcd1xcLi1dKykvaV0sIFtWRVJTSU9OLCBbTkFNRSwgXCJGaXJlZm94XCJdXSwgWy8ocWlodXxxaGJyb3dzZXJ8cWlob29icm93c2VyfDM2MGJyb3dzZXIpL2ldLCBbW05BTUUsIFwiMzYwIEJyb3dzZXJcIl1dLCBbLyhvY3VsdXN8c2Ftc3VuZ3xzYWlsZmlzaClicm93c2VyXFwvKFtcXHdcXC5dKykvaV0sIFtbTkFNRSwgLyguKykvLCBcIiQxIEJyb3dzZXJcIl0sIFZFUlNJT05dLCBbLyhjb21vZG9fZHJhZ29uKVxcLyhbXFx3XFwuXSspL2ldLCBbW05BTUUsIC9fL2csIFwiIFwiXSwgVkVSU0lPTl0sIFsvXFxzKGVsZWN0cm9uKVxcLyhbXFx3XFwuXSspXFxzc2FmYXJpL2ksIC8odGVzbGEpKD86XFxzcXRjYXJicm93c2VyfFxcLygyMFsxMl1cXGRcXC5bXFx3XFwuLV0rKSkvaSwgL20/KHFxYnJvd3NlcnxiYWlkdWJveGFwcHwyMzQ1RXhwbG9yZXIpW1xcL1xcc10/KFtcXHdcXC5dKykvaV0sIFtOQU1FLCBWRVJTSU9OXSwgWy8oTWV0YVNyKVtcXC9cXHNdPyhbXFx3XFwuXSspL2ksIC8oTEJCUk9XU0VSKS9pXSwgW05BTUVdLCBbLztmYmF2XFwvKFtcXHdcXC5dKyk7L2ldLCBbVkVSU0lPTiwgW05BTUUsIFwiRmFjZWJvb2tcIl1dLCBbL0ZCQU5cXC9GQklPU3xGQl9JQUJcXC9GQjRBL2ldLCBbW05BTUUsIFwiRmFjZWJvb2tcIl1dLCBbL3NhZmFyaVxccyhsaW5lKVxcLyhbXFx3XFwuXSspL2ksIC9cXGIobGluZSlcXC8oW1xcd1xcLl0rKVxcL2lhYi9pLCAvKGNocm9taXVtfGluc3RhZ3JhbSlbXFwvXFxzXShbXFx3XFwuLV0rKS9pXSwgW05BTUUsIFZFUlNJT05dLCBbL1xcYmdzYVxcLyhbXFx3XFwuXSspXFxzLipzYWZhcmlcXC8vaV0sIFtWRVJTSU9OLCBbTkFNRSwgXCJHU0FcIl1dLCBbL2hlYWRsZXNzY2hyb21lKD86XFwvKFtcXHdcXC5dKyl8XFxzKS9pXSwgW1ZFUlNJT04sIFtOQU1FLCBcIkNocm9tZSBIZWFkbGVzc1wiXV0sIFsvXFxzd3ZcXCkuKyhjaHJvbWUpXFwvKFtcXHdcXC5dKykvaV0sIFtbTkFNRSwgXCJDaHJvbWUgV2ViVmlld1wiXSwgVkVSU0lPTl0sIFsvZHJvaWQuK1xcc3ZlcnNpb25cXC8oW1xcd1xcLl0rKVxcYi4rKD86bW9iaWxlXFxzc2FmYXJpfHNhZmFyaSkvaV0sIFtWRVJTSU9OLCBbTkFNRSwgXCJBbmRyb2lkIEJyb3dzZXJcIl1dLCBbLyhjaHJvbWV8b21uaXdlYnxhcm9yYXxbdGl6ZW5va2FdezV9XFxzP2Jyb3dzZXIpXFwvdj8oW1xcd1xcLl0rKS9pXSwgW05BTUUsIFZFUlNJT05dLCBbL3ZlcnNpb25cXC8oW1xcd1xcLl0rKVxccy4qbW9iaWxlXFwvXFx3K1xccyhzYWZhcmkpL2ldLCBbVkVSU0lPTiwgW05BTUUsIFwiTW9iaWxlIFNhZmFyaVwiXV0sIFsvdmVyc2lvblxcLyhbXFx3XFwuXSspXFxzLioobW9iaWxlXFxzP3NhZmFyaXxzYWZhcmkpL2ldLCBbVkVSU0lPTiwgTkFNRV0sIFsvd2Via2l0Lis/KG1vYmlsZVxccz9zYWZhcml8c2FmYXJpKShcXC9bXFx3XFwuXSspL2ldLCBbTkFNRSwgW1ZFUlNJT04sIG1hcHBlci5zdHIsIG1hcHMuYnJvd3Nlci5vbGRTYWZhcmkudmVyc2lvbl1dLCBbLyh3ZWJraXR8a2h0bWwpXFwvKFtcXHdcXC5dKykvaV0sIFtOQU1FLCBWRVJTSU9OXSwgWy8obmF2aWdhdG9yfG5ldHNjYXBlKVxcLyhbXFx3XFwuLV0rKS9pXSwgW1tOQU1FLCBcIk5ldHNjYXBlXCJdLCBWRVJTSU9OXSwgWy9pbGVcXHN2cjtcXHNydjooW1xcd1xcLl0rKVxcKS4rZmlyZWZveC9pXSwgW1ZFUlNJT04sIFtOQU1FLCBcIkZpcmVmb3ggUmVhbGl0eVwiXV0sIFsvZWtpb2hmLisoZmxvdylcXC8oW1xcd1xcLl0rKS9pLCAvKHN3aWZ0Zm94KS9pLCAvKGljZWRyYWdvbnxpY2V3ZWFzZWx8Y2FtaW5vfGNoaW1lcmF8ZmVubmVjfG1hZW1vXFxzYnJvd3NlcnxtaW5pbW98Y29ua2Vyb3IpW1xcL1xcc10/KFtcXHdcXC5cXCtdKykvaSwgLyhmaXJlZm94fHNlYW1vbmtleXxrLW1lbGVvbnxpY2VjYXR8aWNlYXBlfGZpcmViaXJkfHBob2VuaXh8cGFsZW1vb258YmFzaWxpc2t8d2F0ZXJmb3gpXFwvKFtcXHdcXC4tXSspJC9pLCAvKGZpcmVmb3gpXFwvKFtcXHdcXC5dKylcXHNbXFx3XFxzXFwtXStcXC9bXFx3XFwuXSskL2ksIC8obW96aWxsYSlcXC8oW1xcd1xcLl0rKVxccy4rcnZcXDouK2dlY2tvXFwvXFxkKy9pLCAvKHBvbGFyaXN8bHlueHxkaWxsb3xpY2FifGRvcmlzfGFtYXlhfHczbXxuZXRzdXJmfHNsZWlwbmlyKVtcXC9cXHNdPyhbXFx3XFwuXSspL2ksIC8obGlua3MpXFxzXFwoKFtcXHdcXC5dKykvaSwgLyhnb2Jyb3dzZXIpXFwvPyhbXFx3XFwuXSopL2ksIC8oaWNlXFxzP2Jyb3dzZXIpXFwvdj8oW1xcd1xcLl9dKykvaSwgLyhtb3NhaWMpW1xcL1xcc10oW1xcd1xcLl0rKS9pXSwgW05BTUUsIFZFUlNJT05dXSxcbiAgICBjcHU6IFtbLyg/OihhbWR8eCg/Oig/Ojg2fDY0KVtfLV0pP3x3b3d8d2luKTY0KVs7XFwpXS9pXSwgW1tBUkNISVRFQ1RVUkUsIFwiYW1kNjRcIl1dLCBbLyhpYTMyKD89OykpL2ldLCBbW0FSQ0hJVEVDVFVSRSwgdXRpbC5sb3dlcml6ZV1dLCBbLygoPzppWzM0Nl18eCk4NilbO1xcKV0vaV0sIFtbQVJDSElURUNUVVJFLCBcImlhMzJcIl1dLCBbL1xcYihhYXJjaDY0fGFybXY/OGU/bD8pXFxiL2ldLCBbW0FSQ0hJVEVDVFVSRSwgXCJhcm02NFwiXV0sIFsvXFxiKGFybSg/OnZbNjddKT9odD9uP1tmbF1wPylcXGIvaV0sIFtbQVJDSElURUNUVVJFLCBcImFybWhmXCJdXSwgWy93aW5kb3dzXFxzKGNlfG1vYmlsZSk7XFxzcHBjOy9pXSwgW1tBUkNISVRFQ1RVUkUsIFwiYXJtXCJdXSwgWy8oKD86cHBjfHBvd2VycGMpKD86NjQpPykoPzpcXHNtYWN8O3xcXCkpL2ldLCBbW0FSQ0hJVEVDVFVSRSwgL293ZXIvLCBcIlwiLCB1dGlsLmxvd2VyaXplXV0sIFsvKHN1bjRcXHcpWztcXCldL2ldLCBbW0FSQ0hJVEVDVFVSRSwgXCJzcGFyY1wiXV0sIFsvKCg/OmF2cjMyfGlhNjQoPz07KSl8NjhrKD89XFwpKXxcXGJhcm0oPzo2NHwoPz12KD86WzEtN118WzUtN10xKWw/fDt8ZWFiaSkpfCg/PWF0bWVsXFxzKWF2cnwoPzppcml4fG1pcHN8c3BhcmMpKD86NjQpP1xcYnxwYS1yaXNjKS9pXSwgW1tBUkNISVRFQ1RVUkUsIHV0aWwubG93ZXJpemVdXV0sXG4gICAgZGV2aWNlOiBbWy9cXGIoc2NoLWlbODldMFxcZHxzaHctbTM4MHN8c20tW3B0XVxcd3syLDR9fGd0LVtwbl1cXGR7Miw0fXxzZ2gtdDhbNTZdOXxuZXh1c1xcczEwKS9pXSwgW01PREVMLCBbVkVORE9SLCBcIlNhbXN1bmdcIl0sIFtUWVBFLCBUQUJMRVRdXSwgWy9cXGIoKD86c1tjZ3BdaHxndHxzbSktXFx3K3xnYWxheHlcXHNuZXh1cykvaSwgL1xcc3NhbXN1bmdbXFxzLV0oW1xcdy1dKykvaSwgL3NlYy0oc2doXFx3KykvaV0sIFtNT0RFTCwgW1ZFTkRPUiwgXCJTYW1zdW5nXCJdLCBbVFlQRSwgTU9CSUxFXV0sIFsvXFwoKGlwKD86aG9uZXxvZClbXFxzXFx3XSopOy9pXSwgW01PREVMLCBbVkVORE9SLCBcIkFwcGxlXCJdLCBbVFlQRSwgTU9CSUxFXV0sIFsvXFwoKGlwYWQpO1tcXHdcXHNcXCksOy1dK2FwcGxlL2ksIC9hcHBsZWNvcmVtZWRpYVxcL1tcXHdcXC5dK1xcc1xcKChpcGFkKS9pLCAvXFxiKGlwYWQpXFxkXFxkPyxcXGRcXGQ/WztcXF1dLitpb3MvaV0sIFtNT0RFTCwgW1ZFTkRPUiwgXCJBcHBsZVwiXSwgW1RZUEUsIFRBQkxFVF1dLCBbL1xcYigoPzphZ3J8YWdzWzIzXXxiYWgyP3xzaHQ/KS1hP1tsd11cXGR7Mn0pL2ldLCBbTU9ERUwsIFtWRU5ET1IsIFwiSHVhd2VpXCJdLCBbVFlQRSwgVEFCTEVUXV0sIFsvZFxcL2h1YXdlaShbXFx3XFxzLV0rKVs7XFwpXS9pLCAvXFxiKG5leHVzXFxzNnB8dm9nLVthdF0/bFxcZFxcZHxhbmUtW2F0XT9sW3hcXGRdXFxkfGVtbC1hP2xcXGRcXGRhP3xseWEtW2F0XT9sXFxkW1xcZGNdfGNsdC1hP2xcXGRcXGRpP3xlbGUtbFxcZFxcZCkvaSwgL1xcYihcXHd7Miw0fS1bYXR1XVtsbl1bMDEyNTldWzAxOV0pWztcXClcXHNdL2ldLCBbTU9ERUwsIFtWRU5ET1IsIFwiSHVhd2VpXCJdLCBbVFlQRSwgTU9CSUxFXV0sIFsvXFxiKHBvY29bXFxzXFx3XSspKD86XFxzYnVpbGR8XFwpKS9pLCAvXFxiO1xccyhcXHcrKVxcc2J1aWxkXFwvaG1cXDEvaSwgL1xcYihobVtcXHNcXC1fXT9ub3RlP1tcXHNfXT8oPzpcXGRcXHcpPylcXHNidWlsZC9pLCAvXFxiKHJlZG1pW1xcc1xcLV9dPyg/Om5vdGV8ayk/W1xcd1xcc19dKykoPzpcXHNidWlsZHxcXCkpL2ksIC9cXGIobWlbXFxzXFwtX10/KD86YVxcZHxvbmV8b25lW1xcc19dcGx1c3xub3RlIGx0ZSk/W1xcc19dPyg/OlxcZD9cXHc/KVtcXHNfXT8oPzpwbHVzKT8pXFxzYnVpbGQvaV0sIFtbTU9ERUwsIC9fL2csIFwiIFwiXSwgW1ZFTkRPUiwgXCJYaWFvbWlcIl0sIFtUWVBFLCBNT0JJTEVdXSwgWy9cXGIobWlbXFxzXFwtX10/KD86cGFkKSg/OltcXHdcXHNfXSspKSg/Olxcc2J1aWxkfFxcKSkvaV0sIFtbTU9ERUwsIC9fL2csIFwiIFwiXSwgW1ZFTkRPUiwgXCJYaWFvbWlcIl0sIFtUWVBFLCBUQUJMRVRdXSwgWy87XFxzKFxcdyspXFxzYnVpbGQuK1xcc29wcG8vaSwgL1xccyhjcGhbMTJdXFxkezN9fHAoPzphZnxjW2FsXXxkXFx3fGVbYXJdKVttdF1cXGQwfHg5MDA3KVxcYi9pXSwgW01PREVMLCBbVkVORE9SLCBcIk9QUE9cIl0sIFtUWVBFLCBNT0JJTEVdXSwgWy9cXHN2aXZvXFxzKFxcdyspKD86XFxzYnVpbGR8XFwpKS9pLCAvXFxzKHZbMTJdXFxkezN9XFx3P1thdF0pKD86XFxzYnVpbGR8OykvaV0sIFtNT0RFTCwgW1ZFTkRPUiwgXCJWaXZvXCJdLCBbVFlQRSwgTU9CSUxFXV0sIFsvXFxzKHJteFsxMl1cXGR7M30pKD86XFxzYnVpbGR8OykvaV0sIFtNT0RFTCwgW1ZFTkRPUiwgXCJSZWFsbWVcIl0sIFtUWVBFLCBNT0JJTEVdXSwgWy9cXHMobWlsZXN0b25lfGRyb2lkKD86WzItNHhdfFxccyg/OmJpb25pY3x4Mnxwcm98cmF6cikpPzo/KFxcczRnKT8pXFxiW1xcd1xcc10rYnVpbGRcXC8vaSwgL1xcc21vdCg/Om9yb2xhKT9bXFxzLV0oXFx3KikvaSwgLygoPzptb3RvW1xcc1xcd1xcKFxcKV0rfHh0XFxkezMsNH18bmV4dXNcXHM2KSg/PVxcc2J1aWxkfFxcKSkpL2ldLCBbTU9ERUwsIFtWRU5ET1IsIFwiTW90b3JvbGFcIl0sIFtUWVBFLCBNT0JJTEVdXSwgWy9cXHMobXo2MFxcZHx4b29tW1xcczJdezAsMn0pXFxzYnVpbGRcXC8vaV0sIFtNT0RFTCwgW1ZFTkRPUiwgXCJNb3Rvcm9sYVwiXSwgW1RZUEUsIFRBQkxFVF1dLCBbLygoPz1sZyk/W3ZsXWtcXC0/XFxkezN9KVxcc2J1aWxkfFxcczNcXC5bXFxzXFx3Oy1dezEwfWxnPy0oWzA2Y3Y5XXszLDR9KS9pXSwgW01PREVMLCBbVkVORE9SLCBcIkxHXCJdLCBbVFlQRSwgVEFCTEVUXV0sIFsvKGxtLT9mMTAwW252XT98bmV4dXNcXHNbNDVdKS9pLCAvbGdbZTtcXHNcXC8tXSsoKD8hYnJvd3NlcnxuZXRjYXN0KVxcdyspL2ksIC9cXGJsZyhcXC0/W1xcZFxcd10rKVxcc2J1aWxkL2ldLCBbTU9ERUwsIFtWRU5ET1IsIFwiTEdcIl0sIFtUWVBFLCBNT0JJTEVdXSwgWy8oaWRlYXRhYltcXHdcXC1cXHNdKykvaSwgL2xlbm92b1xccz8ocyg/OjUwMDB8NjAwMCkoPzpbXFx3LV0rKXx0YWIoPzpbXFxzXFx3XSspfHl0W1xcZFxcdy1dezZ9fHRiW1xcZFxcdy1dezZ9KS9pXSwgW01PREVMLCBbVkVORE9SLCBcIkxlbm92b1wiXSwgW1RZUEUsIFRBQkxFVF1dLCBbLyg/Om1hZW1vfG5va2lhKS4qKG45MDB8bHVtaWFcXHNcXGQrKS9pLCAvbm9raWFbXFxzXy1dPyhbXFx3XFwuLV0qKS9pXSwgW1tNT0RFTCwgL18vZywgXCIgXCJdLCBbVkVORE9SLCBcIk5va2lhXCJdLCBbVFlQRSwgTU9CSUxFXV0sIFsvZHJvaWQuKztcXHMocGl4ZWxcXHNjKVtcXHMpXS9pXSwgW01PREVMLCBbVkVORE9SLCBcIkdvb2dsZVwiXSwgW1RZUEUsIFRBQkxFVF1dLCBbL2Ryb2lkLis7XFxzKHBpeGVsW1xcc1xcZGF4bF17MCw2fSkoPzpcXHNidWlsZHxcXCkpL2ldLCBbTU9ERUwsIFtWRU5ET1IsIFwiR29vZ2xlXCJdLCBbVFlQRSwgTU9CSUxFXV0sIFsvZHJvaWQuK1xccyhbYy1nXVxcZHs0fXxzb1stbF1cXHcrfHhxLWFcXHdbNC03XVsxMl0pKD89XFxzYnVpbGRcXC98XFwpLitjaHJvbWVcXC8oPyFbMS02XXswLDF9XFxkXFwuKSkvaV0sIFtNT0RFTCwgW1ZFTkRPUiwgXCJTb255XCJdLCBbVFlQRSwgTU9CSUxFXV0sIFsvc29ueVxcc3RhYmxldFxcc1twc11cXHNidWlsZFxcLy9pLCAvKD86c29ueSk/c2dwXFx3Kyg/Olxcc2J1aWxkXFwvfFxcKSkvaV0sIFtbTU9ERUwsIFwiWHBlcmlhIFRhYmxldFwiXSwgW1ZFTkRPUiwgXCJTb255XCJdLCBbVFlQRSwgVEFCTEVUXV0sIFsvXFxzKGtiMjAwNXxpbjIwWzEyXTV8YmUyMFsxMl1bNTldKVxcYi9pLCAvXFxiYTAwMCgxKVxcc2J1aWxkL2ksIC9cXGJvbmVwbHVzXFxzKGFcXGR7NH0pW1xccyldL2ldLCBbTU9ERUwsIFtWRU5ET1IsIFwiT25lUGx1c1wiXSwgW1RZUEUsIE1PQklMRV1dLCBbLyhhbGV4YSl3ZWJtL2ksIC8oa2ZbYS16XXsyfXdpKShcXHNidWlsZFxcL3xcXCkpL2ksIC8oa2ZbYS16XSspKFxcc2J1aWxkXFwvfFxcKSkuK3NpbGtcXC8vaV0sIFtNT0RFTCwgW1ZFTkRPUiwgXCJBbWF6b25cIl0sIFtUWVBFLCBUQUJMRVRdXSwgWy8oc2R8a2YpWzAzNDloaWpvcnN0dXddKyhcXHNidWlsZFxcL3xcXCkpLitzaWxrXFwvL2ldLCBbW01PREVMLCBcIkZpcmUgUGhvbmVcIl0sIFtWRU5ET1IsIFwiQW1hem9uXCJdLCBbVFlQRSwgTU9CSUxFXV0sIFsvXFwoKHBsYXlib29rKTtbXFx3XFxzXFwpLDstXSsocmltKS9pXSwgW01PREVMLCBWRU5ET1IsIFtUWVBFLCBUQUJMRVRdXSwgWy8oKD86YmJbYS1mXXxzdFtodl0pMTAwLVxcZCkvaSwgL1xcKGJiMTA7XFxzKFxcdyspL2ldLCBbTU9ERUwsIFtWRU5ET1IsIFwiQmxhY2tCZXJyeVwiXSwgW1RZUEUsIE1PQklMRV1dLCBbLyg/OlxcYnxhc3VzXykodHJhbnNmb1twcmltZVxcc117NCwxMH1cXHNcXHcrfGVlZXBjfHNsaWRlclxcc1xcdyt8bmV4dXNcXHM3fHBhZGZvbmV8cDAwW2NqXSkvaV0sIFtNT0RFTCwgW1ZFTkRPUiwgXCJBU1VTXCJdLCBbVFlQRSwgVEFCTEVUXV0sIFsvXFxzKHpbZXNdNlswMjddWzAxXVtrbV1bbHNdfHplbmZvbmVcXHNcXGRcXHc/KVxcYi9pXSwgW01PREVMLCBbVkVORE9SLCBcIkFTVVNcIl0sIFtUWVBFLCBNT0JJTEVdXSwgWy8obmV4dXNcXHM5KS9pXSwgW01PREVMLCBbVkVORE9SLCBcIkhUQ1wiXSwgW1RZUEUsIFRBQkxFVF1dLCBbLyhodGMpWztfXFxzLV17MSwyfShbXFx3XFxzXSsoPz1cXCl8XFxzYnVpbGQpfFxcdyspL2ksIC8oenRlKS0oXFx3KikvaSwgLyhhbGNhdGVsfGdlZWtzcGhvbmV8bmV4aWFufHBhbmFzb25pY3woPz07XFxzKXNvbnkpW19cXHMtXT8oW1xcdy1dKikvaV0sIFtWRU5ET1IsIFtNT0RFTCwgL18vZywgXCIgXCJdLCBbVFlQRSwgTU9CSUxFXV0sIFsvZHJvaWRbeFxcZFxcLlxccztdK1xccyhbYWJdWzEtN11cXC0/WzAxNzhhXVxcZFxcZD8pL2ldLCBbTU9ERUwsIFtWRU5ET1IsIFwiQWNlclwiXSwgW1RZUEUsIFRBQkxFVF1dLCBbL2Ryb2lkLis7XFxzKG1bMS01XVxcc25vdGUpXFxzYnVpbGQvaSwgL1xcYm16LShbXFx3LV17Mix9KS9pXSwgW01PREVMLCBbVkVORE9SLCBcIk1laXp1XCJdLCBbVFlQRSwgTU9CSUxFXV0sIFsvKGJsYWNrYmVycnl8YmVucXxwYWxtKD89XFwtKXxzb255ZXJpY3Nzb258YWNlcnxhc3VzfGRlbGx8bWVpenV8bW90b3JvbGF8cG9seXRyb24pW1xcc18tXT8oW1xcdy1dKikvaSwgLyhocClcXHMoW1xcd1xcc10rXFx3KS9pLCAvKGFzdXMpLT8oXFx3KykvaSwgLyhtaWNyb3NvZnQpO1xccyhsdW1pYVtcXHNcXHddKykvaSwgLyhsZW5vdm8pW19cXHMtXT8oW1xcdy1dKykvaSwgL2xpbnV4Oy4rKGpvbGxhKTsvaSwgL2Ryb2lkLis7XFxzKG9wcG8pXFxzPyhbXFx3XFxzXSspXFxzYnVpbGQvaV0sIFtWRU5ET1IsIE1PREVMLCBbVFlQRSwgTU9CSUxFXV0sIFsvKGFyY2hvcylcXHMoZ2FtZXBhZDI/KS9pLCAvKGhwKS4rKHRvdWNocGFkKD8hLit0YWJsZXQpfHRhYmxldCkvaSwgLyhraW5kbGUpXFwvKFtcXHdcXC5dKykvaSwgL1xccyhub29rKVtcXHdcXHNdK2J1aWxkXFwvKFxcdyspL2ksIC8oZGVsbClcXHMoc3RyZWFba3ByXFxzXFxkXSpbXFxka29dKS9pLCAvWztcXC9dXFxzPyhsZVtcXHNcXC1dK3BhbilbXFxzXFwtXSsoXFx3ezEsOX0pXFxzYnVpbGQvaSwgL1s7XFwvXVxccz8odHJpbml0eSlbXFwtXFxzXSoodFxcZHszfSlcXHNidWlsZC9pLCAvXFxiKGdpZ2FzZXQpW1xcc1xcLV0rKHFcXHd7MSw5fSlcXHNidWlsZC9pLCAvXFxiKHZvZGFmb25lKVxccyhbXFx3XFxzXSspKD86XFwpfFxcc2J1aWxkKS9pXSwgW1ZFTkRPUiwgTU9ERUwsIFtUWVBFLCBUQUJMRVRdXSwgWy9cXHMoc3VyZmFjZVxcc2R1bylcXHMvaV0sIFtNT0RFTCwgW1ZFTkRPUiwgXCJNaWNyb3NvZnRcIl0sIFtUWVBFLCBUQUJMRVRdXSwgWy9kcm9pZFxcc1tcXGRcXC5dKztcXHMoZnBcXGR1PylcXHNidWlsZC9pXSwgW01PREVMLCBbVkVORE9SLCBcIkZhaXJwaG9uZVwiXSwgW1RZUEUsIE1PQklMRV1dLCBbL1xccyh1MzA0YWEpXFxzYnVpbGQvaV0sIFtNT0RFTCwgW1ZFTkRPUiwgXCJBVCZUXCJdLCBbVFlQRSwgTU9CSUxFXV0sIFsvc2llLShcXHcqKS9pXSwgW01PREVMLCBbVkVORE9SLCBcIlNpZW1lbnNcIl0sIFtUWVBFLCBNT0JJTEVdXSwgWy9bO1xcL11cXHM/KHJjdFxcdyspXFxzYnVpbGQvaV0sIFtNT0RFTCwgW1ZFTkRPUiwgXCJSQ0FcIl0sIFtUWVBFLCBUQUJMRVRdXSwgWy9bO1xcL1xcc10odmVudWVbXFxkXFxzXXsyLDd9KVxcc2J1aWxkL2ldLCBbTU9ERUwsIFtWRU5ET1IsIFwiRGVsbFwiXSwgW1RZUEUsIFRBQkxFVF1dLCBbL1s7XFwvXVxccz8ocSg/Om12fHRhKVxcdyspXFxzYnVpbGQvaV0sIFtNT0RFTCwgW1ZFTkRPUiwgXCJWZXJpem9uXCJdLCBbVFlQRSwgVEFCTEVUXV0sIFsvWztcXC9dXFxzKD86YmFybmVzWyZcXHNdK25vYmxlXFxzfGJuW3J0XSkoW1xcd1xcc1xcK10qKVxcc2J1aWxkL2ldLCBbTU9ERUwsIFtWRU5ET1IsIFwiQmFybmVzICYgTm9ibGVcIl0sIFtUWVBFLCBUQUJMRVRdXSwgWy9bO1xcL11cXHModG1cXGR7M31cXHcrKVxcc2J1aWxkL2ldLCBbTU9ERUwsIFtWRU5ET1IsIFwiTnVWaXNpb25cIl0sIFtUWVBFLCBUQUJMRVRdXSwgWy87XFxzKGs4OClcXHNidWlsZC9pXSwgW01PREVMLCBbVkVORE9SLCBcIlpURVwiXSwgW1RZUEUsIFRBQkxFVF1dLCBbLztcXHMobnhcXGR7M31qKVxcc2J1aWxkL2ldLCBbTU9ERUwsIFtWRU5ET1IsIFwiWlRFXCJdLCBbVFlQRSwgTU9CSUxFXV0sIFsvWztcXC9dXFxzPyhnZW5cXGR7M30pXFxzYnVpbGQuKjQ5aC9pXSwgW01PREVMLCBbVkVORE9SLCBcIlN3aXNzXCJdLCBbVFlQRSwgTU9CSUxFXV0sIFsvWztcXC9dXFxzPyh6dXJcXGR7M30pXFxzYnVpbGQvaV0sIFtNT0RFTCwgW1ZFTkRPUiwgXCJTd2lzc1wiXSwgW1RZUEUsIFRBQkxFVF1dLCBbL1s7XFwvXVxccz8oKHpla2kpP3RiLipcXGIpXFxzYnVpbGQvaV0sIFtNT0RFTCwgW1ZFTkRPUiwgXCJaZWtpXCJdLCBbVFlQRSwgVEFCTEVUXV0sIFsvWztcXC9dXFxzKFt5cl1cXGR7Mn0pXFxzYnVpbGQvaSwgL1s7XFwvXVxccyhkcmFnb25bXFwtXFxzXSt0b3VjaFxcc3xkdCkoXFx3ezV9KVxcc2J1aWxkL2ldLCBbW1ZFTkRPUiwgXCJEcmFnb24gVG91Y2hcIl0sIE1PREVMLCBbVFlQRSwgVEFCTEVUXV0sIFsvWztcXC9dXFxzPyhucy0/XFx3ezAsOX0pXFxzYnVpbGQvaV0sIFtNT0RFTCwgW1ZFTkRPUiwgXCJJbnNpZ25pYVwiXSwgW1RZUEUsIFRBQkxFVF1dLCBbL1s7XFwvXVxccz8oKG54YXxOZXh0KS0/XFx3ezAsOX0pXFxzYnVpbGQvaV0sIFtNT0RFTCwgW1ZFTkRPUiwgXCJOZXh0Qm9va1wiXSwgW1RZUEUsIFRBQkxFVF1dLCBbL1s7XFwvXVxccz8oeHRyZW1lXFxfKT8odigxWzA0NV18MlswMTVdfFszNDY5XTB8N1swNV0pKVxcc2J1aWxkL2ldLCBbW1ZFTkRPUiwgXCJWb2ljZVwiXSwgTU9ERUwsIFtUWVBFLCBNT0JJTEVdXSwgWy9bO1xcL11cXHM/KGx2dGVsXFwtKT8odjFbMTJdKVxcc2J1aWxkL2ldLCBbW1ZFTkRPUiwgXCJMdlRlbFwiXSwgTU9ERUwsIFtUWVBFLCBNT0JJTEVdXSwgWy87XFxzKHBoLTEpXFxzL2ldLCBbTU9ERUwsIFtWRU5ET1IsIFwiRXNzZW50aWFsXCJdLCBbVFlQRSwgTU9CSUxFXV0sIFsvWztcXC9dXFxzPyh2KDEwMG1kfDcwMG5hfDcwMTF8OTE3ZykuKlxcYilcXHNidWlsZC9pXSwgW01PREVMLCBbVkVORE9SLCBcIkVudml6ZW5cIl0sIFtUWVBFLCBUQUJMRVRdXSwgWy9bO1xcL11cXHM/KHRyaW9bXFxzXFx3XFwtXFwuXSspXFxzYnVpbGQvaV0sIFtNT0RFTCwgW1ZFTkRPUiwgXCJNYWNoU3BlZWRcIl0sIFtUWVBFLCBUQUJMRVRdXSwgWy9bO1xcL11cXHM/dHVfKDE0OTEpXFxzYnVpbGQvaV0sIFtNT0RFTCwgW1ZFTkRPUiwgXCJSb3RvclwiXSwgW1RZUEUsIFRBQkxFVF1dLCBbLyhzaGllbGRbXFx3XFxzXSspXFxzYnVpbGQvaV0sIFtNT0RFTCwgW1ZFTkRPUiwgXCJOdmlkaWFcIl0sIFtUWVBFLCBUQUJMRVRdXSwgWy8oc3ByaW50KVxccyhcXHcrKS9pXSwgW1ZFTkRPUiwgTU9ERUwsIFtUWVBFLCBNT0JJTEVdXSwgWy8oa2luXFwuW29uZXR3XXszfSkvaV0sIFtbTU9ERUwsIC9cXC4vZywgXCIgXCJdLCBbVkVORE9SLCBcIk1pY3Jvc29mdFwiXSwgW1RZUEUsIE1PQklMRV1dLCBbL2Ryb2lkXFxzW1xcZFxcLl0rO1xccyhjYzY2NjY/fGV0NVsxNl18bWNbMjM5XVsyM114P3x2YzhbMDNdeD8pXFwpL2ldLCBbTU9ERUwsIFtWRU5ET1IsIFwiWmVicmFcIl0sIFtUWVBFLCBUQUJMRVRdXSwgWy9kcm9pZFxcc1tcXGRcXC5dKztcXHMoZWMzMHxwczIwfHRjWzItOF1cXGRba3hdKVxcKS9pXSwgW01PREVMLCBbVkVORE9SLCBcIlplYnJhXCJdLCBbVFlQRSwgTU9CSUxFXV0sIFsvXFxzKG91eWEpXFxzL2ksIC8obmludGVuZG8pXFxzKFt3aWRzM3V0Y2hdKykvaV0sIFtWRU5ET1IsIE1PREVMLCBbVFlQRSwgQ09OU09MRV1dLCBbL2Ryb2lkLis7XFxzKHNoaWVsZClcXHNidWlsZC9pXSwgW01PREVMLCBbVkVORE9SLCBcIk52aWRpYVwiXSwgW1RZUEUsIENPTlNPTEVdXSwgWy8ocGxheXN0YXRpb25cXHNbMzQ1cG9ydGFibGV2aV0rKS9pXSwgW01PREVMLCBbVkVORE9SLCBcIlNvbnlcIl0sIFtUWVBFLCBDT05TT0xFXV0sIFsvW1xcc1xcKDtdKHhib3goPzpcXHNvbmUpPyg/ITtcXHN4Ym94KSlbXFxzXFwpO10vaV0sIFtNT0RFTCwgW1ZFTkRPUiwgXCJNaWNyb3NvZnRcIl0sIFtUWVBFLCBDT05TT0xFXV0sIFsvc21hcnQtdHYuKyhzYW1zdW5nKS9pXSwgW1ZFTkRPUiwgW1RZUEUsIFNNQVJUVFZdXSwgWy9oYmJ0di4rbWFwbGU7KFxcZCspL2ldLCBbW01PREVMLCAvXi8sIFwiU21hcnRUVlwiXSwgW1ZFTkRPUiwgXCJTYW1zdW5nXCJdLCBbVFlQRSwgU01BUlRUVl1dLCBbLyg/OmxpbnV4O1xcc25ldGNhc3QuK3NtYXJ0dHZ8bGdcXHNuZXRjYXN0XFwudHYtMjAxXFxkKS9pXSwgW1tWRU5ET1IsIFwiTEdcIl0sIFtUWVBFLCBTTUFSVFRWXV0sIFsvKGFwcGxlKVxccz90di9pXSwgW1ZFTkRPUiwgW01PREVMLCBcIkFwcGxlIFRWXCJdLCBbVFlQRSwgU01BUlRUVl1dLCBbL2Nya2V5L2ldLCBbW01PREVMLCBcIkNocm9tZWNhc3RcIl0sIFtWRU5ET1IsIFwiR29vZ2xlXCJdLCBbVFlQRSwgU01BUlRUVl1dLCBbL2Ryb2lkLithZnQoW1xcd10pKFxcc2J1aWxkXFwvfFxcKSkvaV0sIFtNT0RFTCwgW1ZFTkRPUiwgXCJBbWF6b25cIl0sIFtUWVBFLCBTTUFSVFRWXV0sIFsvXFwoZHR2W1xcKTtdLisoYXF1b3MpL2ldLCBbTU9ERUwsIFtWRU5ET1IsIFwiU2hhcnBcIl0sIFtUWVBFLCBTTUFSVFRWXV0sIFsvaGJidHZcXC9cXGQrXFwuXFxkK1xcLlxcZCtcXHMrXFwoW1xcd1xcc10qO1xccyooXFx3W147XSopOyhbXjtdKikvaV0sIFtbVkVORE9SLCB1dGlsLnRyaW1dLCBbTU9ERUwsIHV0aWwudHJpbV0sIFtUWVBFLCBTTUFSVFRWXV0sIFsvW1xcc1xcL1xcKF0oYW5kcm9pZFxcc3xzbWFydFstXFxzXT98b3BlcmFcXHMpdHZbO1xcKVxcc10vaV0sIFtbVFlQRSwgU01BUlRUVl1dLCBbLygocGViYmxlKSlhcHBcXC9bXFxkXFwuXStcXHMvaV0sIFtWRU5ET1IsIE1PREVMLCBbVFlQRSwgV0VBUkFCTEVdXSwgWy9kcm9pZC4rO1xccyhnbGFzcylcXHNcXGQvaV0sIFtNT0RFTCwgW1ZFTkRPUiwgXCJHb29nbGVcIl0sIFtUWVBFLCBXRUFSQUJMRV1dLCBbL2Ryb2lkXFxzW1xcZFxcLl0rO1xccyh3dDYzPzB7MiwzfSlcXCkvaV0sIFtNT0RFTCwgW1ZFTkRPUiwgXCJaZWJyYVwiXSwgW1RZUEUsIFdFQVJBQkxFXV0sIFsvKHRlc2xhKSg/Olxcc3F0Y2FyYnJvd3NlcnxcXC8yMFsxMl1cXGRcXC5bXFx3XFwuLV0rKS9pXSwgW1ZFTkRPUiwgW1RZUEUsIEVNQkVEREVEXV0sIFsvZHJvaWQgLis/OyAoW147XSs/KSg/OiBidWlsZHxcXCkgYXBwbGV3ZWJraXQpLis/IG1vYmlsZSBzYWZhcmkvaV0sIFtNT0RFTCwgW1RZUEUsIE1PQklMRV1dLCBbL2Ryb2lkIC4rPztcXHMoW147XSs/KSg/OiBidWlsZHxcXCkgYXBwbGV3ZWJraXQpLis/KD8hIG1vYmlsZSkgc2FmYXJpL2ldLCBbTU9ERUwsIFtUWVBFLCBUQUJMRVRdXSwgWy9cXHModGFibGV0fHRhYilbO1xcL10vaSwgL1xccyhtb2JpbGUpKD86WztcXC9dfFxcc3NhZmFyaSkvaV0sIFtbVFlQRSwgdXRpbC5sb3dlcml6ZV1dLCBbLyhhbmRyb2lkW1xcd1xcLlxcc1xcLV17MCw5fSk7LitidWlsZC9pXSwgW01PREVMLCBbVkVORE9SLCBcIkdlbmVyaWNcIl1dLCBbLyhwaG9uZSkvaV0sIFtbVFlQRSwgTU9CSUxFXV1dLFxuICAgIGVuZ2luZTogW1svd2luZG93cy4rXFxzZWRnZVxcLyhbXFx3XFwuXSspL2ldLCBbVkVSU0lPTiwgW05BTUUsIFwiRWRnZUhUTUxcIl1dLCBbL3dlYmtpdFxcLzUzN1xcLjM2LitjaHJvbWVcXC8oPyEyNykoW1xcd1xcLl0rKS9pXSwgW1ZFUlNJT04sIFtOQU1FLCBcIkJsaW5rXCJdXSwgWy8ocHJlc3RvKVxcLyhbXFx3XFwuXSspL2ksIC8od2Via2l0fHRyaWRlbnR8bmV0ZnJvbnR8bmV0c3VyZnxhbWF5YXxseW54fHczbXxnb2FubmEpXFwvKFtcXHdcXC5dKykvaSwgL2VraW9oKGZsb3cpXFwvKFtcXHdcXC5dKykvaSwgLyhraHRtbHx0YXNtYW58bGlua3MpW1xcL1xcc11cXCg/KFtcXHdcXC5dKykvaSwgLyhpY2FiKVtcXC9cXHNdKFsyM11cXC5bXFxkXFwuXSspL2ldLCBbTkFNRSwgVkVSU0lPTl0sIFsvcnZcXDooW1xcd1xcLl17MSw5fSlcXGIuKyhnZWNrbykvaV0sIFtWRVJTSU9OLCBOQU1FXV0sXG4gICAgb3M6IFtbL21pY3Jvc29mdFxccyh3aW5kb3dzKVxccyh2aXN0YXx4cCkvaV0sIFtOQU1FLCBWRVJTSU9OXSwgWy8od2luZG93cylcXHNudFxcczZcXC4yO1xccyhhcm0pL2ksIC8od2luZG93c1xcc3Bob25lKD86XFxzb3MpKilbXFxzXFwvXT8oW1xcZFxcLlxcc1xcd10qKS9pLCAvKHdpbmRvd3NcXHNtb2JpbGV8d2luZG93cylbXFxzXFwvXT8oW250Y2VcXGRcXC5cXHNdK1xcdykoPyEuK3hib3gpL2ldLCBbTkFNRSwgW1ZFUlNJT04sIG1hcHBlci5zdHIsIG1hcHMub3Mud2luZG93cy52ZXJzaW9uXV0sIFsvKHdpbig/PTN8OXxuKXx3aW5cXHM5eFxccykoW250XFxkXFwuXSspL2ldLCBbW05BTUUsIFwiV2luZG93c1wiXSwgW1ZFUlNJT04sIG1hcHBlci5zdHIsIG1hcHMub3Mud2luZG93cy52ZXJzaW9uXV0sIFsvaXBbaG9uZWFkXXsyLDR9XFxiKD86Lipvc1xccyhbXFx3XSspXFxzbGlrZVxcc21hY3w7XFxzb3BlcmEpL2ksIC9jZm5ldHdvcmtcXC8uK2Rhcndpbi9pXSwgW1tWRVJTSU9OLCAvXy9nLCBcIi5cIl0sIFtOQU1FLCBcImlPU1wiXV0sIFsvKG1hY1xcc29zXFxzeClcXHM/KFtcXHdcXHNcXC5dKikvaSwgLyhtYWNpbnRvc2h8bWFjKD89X3Bvd2VycGMpXFxzKSg/IS4raGFpa3UpL2ldLCBbW05BTUUsIFwiTWFjIE9TXCJdLCBbVkVSU0lPTiwgL18vZywgXCIuXCJdXSwgWy8oYW5kcm9pZHx3ZWJvc3xwYWxtXFxzb3N8cW54fGJhZGF8cmltXFxzdGFibGV0XFxzb3N8bWVlZ298c2FpbGZpc2h8Y29udGlraSlbXFwvXFxzLV0/KFtcXHdcXC5dKikvaSwgLyhibGFja2JlcnJ5KVxcdypcXC8oW1xcd1xcLl0qKS9pLCAvKHRpemVufGthaW9zKVtcXC9cXHNdKFtcXHdcXC5dKykvaSwgL1xcKChzZXJpZXM0MCk7L2ldLCBbTkFNRSwgVkVSU0lPTl0sIFsvXFwoYmIoMTApOy9pXSwgW1ZFUlNJT04sIFtOQU1FLCBcIkJsYWNrQmVycnlcIl1dLCBbLyg/OnN5bWJpYW5cXHM/b3N8c3ltYm9zfHM2MCg/PTspfHNlcmllczYwKVtcXC9cXHMtXT8oW1xcd1xcLl0qKS9pXSwgW1ZFUlNJT04sIFtOQU1FLCBcIlN5bWJpYW5cIl1dLCBbL21vemlsbGEuK1xcKG1vYmlsZTsuK2dlY2tvLitmaXJlZm94L2ldLCBbW05BTUUsIFwiRmlyZWZveCBPU1wiXV0sIFsvd2ViMHM7LitydCh0dikvaSwgL1xcYig/OmhwKT93b3MoPzpicm93c2VyKT9cXC8oW1xcd1xcLl0rKS9pXSwgW1ZFUlNJT04sIFtOQU1FLCBcIndlYk9TXCJdXSwgWy9jcmtleVxcLyhbXFxkXFwuXSspL2ldLCBbVkVSU0lPTiwgW05BTUUsIFwiQ2hyb21lY2FzdFwiXV0sIFsvKGNyb3MpXFxzW1xcd10rXFxzKFtcXHdcXC5dK1xcdykvaV0sIFtbTkFNRSwgXCJDaHJvbWl1bSBPU1wiXSwgVkVSU0lPTl0sIFsvKG5pbnRlbmRvfHBsYXlzdGF0aW9uKVxccyhbd2lkczM0NXBvcnRhYmxldnVjaF0rKS9pLCAvKHhib3gpO1xccyt4Ym94XFxzKFteXFwpO10rKS9pLCAvKG1pbnQpW1xcL1xcc1xcKFxcKV0/KFxcdyopL2ksIC8obWFnZWlhfHZlY3RvcmxpbnV4KVs7XFxzXS9pLCAvKGpvbGl8W2t4bG5dP3VidW50dXxkZWJpYW58c3VzZXxvcGVuc3VzZXxnZW50b298YXJjaCg/PVxcc2xpbnV4KXxzbGFja3dhcmV8ZmVkb3JhfG1hbmRyaXZhfGNlbnRvc3xwY2xpbnV4b3N8cmVkaGF0fHplbndhbGt8bGlucHVzfHJhc3BiaWFuKSg/Olxcc2dudVxcL2xpbnV4KT8oPzpcXHNsaW51eCk/W1xcL1xccy1dPyg/IWNocm9tfHBhY2thZ2UpKFtcXHdcXC4tXSopL2ksIC8oaHVyZHxsaW51eClcXHM/KFtcXHdcXC5dKikvaSwgLyhnbnUpXFxzPyhbXFx3XFwuXSopL2ksIC9cXHMoW2ZyZW50b3BjLV17MCw0fWJzZHxkcmFnb25mbHkpXFxzPyg/IWFtZHxbaXgzNDZdezEsMn04NikoW1xcd1xcLl0qKS9pLCAvKGhhaWt1KVxccyhcXHcrKS9pXSwgW05BTUUsIFZFUlNJT05dLCBbLyhzdW5vcylcXHM/KFtcXHdcXC5cXGRdKikvaV0sIFtbTkFNRSwgXCJTb2xhcmlzXCJdLCBWRVJTSU9OXSwgWy8oKD86b3Blbik/c29sYXJpcylbXFwvXFxzLV0/KFtcXHdcXC5dKikvaSwgLyhhaXgpXFxzKChcXGQpKD89XFwufFxcKXxcXHMpW1xcd1xcLl0pKi9pLCAvKHBsYW5cXHM5fG1pbml4fGJlb3N8b3NcXC8yfGFtaWdhb3N8bW9ycGhvc3xyaXNjXFxzb3N8b3BlbnZtc3xmdWNoc2lhKS9pLCAvKHVuaXgpXFxzPyhbXFx3XFwuXSopL2ldLCBbTkFNRSwgVkVSU0lPTl1dXG4gIH07XG5cbiAgdmFyIFVBUGFyc2VyID0gZnVuY3Rpb24gVUFQYXJzZXIodWEsIGV4dGVuc2lvbnMpIHtcbiAgICBpZiAodHlwZW9mIHVhID09PSBcIm9iamVjdFwiKSB7XG4gICAgICBleHRlbnNpb25zID0gdWE7XG4gICAgICB1YSA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgVUFQYXJzZXIpKSB7XG4gICAgICByZXR1cm4gbmV3IFVBUGFyc2VyKHVhLCBleHRlbnNpb25zKS5nZXRSZXN1bHQoKTtcbiAgICB9XG5cbiAgICB2YXIgX3VhID0gdWEgfHwgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgd2luZG93Lm5hdmlnYXRvciAmJiB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCA/IHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50IDogRU1QVFkpO1xuXG4gICAgdmFyIF9yZ3htYXAgPSBleHRlbnNpb25zID8gdXRpbC5leHRlbmQocmVnZXhlcywgZXh0ZW5zaW9ucykgOiByZWdleGVzO1xuXG4gICAgdGhpcy5nZXRCcm93c2VyID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIF9icm93c2VyID0ge1xuICAgICAgICBuYW1lOiB1bmRlZmluZWQsXG4gICAgICAgIHZlcnNpb246IHVuZGVmaW5lZFxuICAgICAgfTtcbiAgICAgIG1hcHBlci5yZ3guY2FsbChfYnJvd3NlciwgX3VhLCBfcmd4bWFwLmJyb3dzZXIpO1xuICAgICAgX2Jyb3dzZXIubWFqb3IgPSB1dGlsLm1ham9yKF9icm93c2VyLnZlcnNpb24pO1xuICAgICAgcmV0dXJuIF9icm93c2VyO1xuICAgIH07XG5cbiAgICB0aGlzLmdldENQVSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBfY3B1ID0ge1xuICAgICAgICBhcmNoaXRlY3R1cmU6IHVuZGVmaW5lZFxuICAgICAgfTtcbiAgICAgIG1hcHBlci5yZ3guY2FsbChfY3B1LCBfdWEsIF9yZ3htYXAuY3B1KTtcbiAgICAgIHJldHVybiBfY3B1O1xuICAgIH07XG5cbiAgICB0aGlzLmdldERldmljZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBfZGV2aWNlID0ge1xuICAgICAgICB2ZW5kb3I6IHVuZGVmaW5lZCxcbiAgICAgICAgbW9kZWw6IHVuZGVmaW5lZCxcbiAgICAgICAgdHlwZTogdW5kZWZpbmVkXG4gICAgICB9O1xuICAgICAgbWFwcGVyLnJneC5jYWxsKF9kZXZpY2UsIF91YSwgX3JneG1hcC5kZXZpY2UpO1xuICAgICAgcmV0dXJuIF9kZXZpY2U7XG4gICAgfTtcblxuICAgIHRoaXMuZ2V0RW5naW5lID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIF9lbmdpbmUgPSB7XG4gICAgICAgIG5hbWU6IHVuZGVmaW5lZCxcbiAgICAgICAgdmVyc2lvbjogdW5kZWZpbmVkXG4gICAgICB9O1xuICAgICAgbWFwcGVyLnJneC5jYWxsKF9lbmdpbmUsIF91YSwgX3JneG1hcC5lbmdpbmUpO1xuICAgICAgcmV0dXJuIF9lbmdpbmU7XG4gICAgfTtcblxuICAgIHRoaXMuZ2V0T1MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgX29zID0ge1xuICAgICAgICBuYW1lOiB1bmRlZmluZWQsXG4gICAgICAgIHZlcnNpb246IHVuZGVmaW5lZFxuICAgICAgfTtcbiAgICAgIG1hcHBlci5yZ3guY2FsbChfb3MsIF91YSwgX3JneG1hcC5vcyk7XG4gICAgICByZXR1cm4gX29zO1xuICAgIH07XG5cbiAgICB0aGlzLmdldFJlc3VsdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHVhOiB0aGlzLmdldFVBKCksXG4gICAgICAgIGJyb3dzZXI6IHRoaXMuZ2V0QnJvd3NlcigpLFxuICAgICAgICBlbmdpbmU6IHRoaXMuZ2V0RW5naW5lKCksXG4gICAgICAgIG9zOiB0aGlzLmdldE9TKCksXG4gICAgICAgIGRldmljZTogdGhpcy5nZXREZXZpY2UoKSxcbiAgICAgICAgY3B1OiB0aGlzLmdldENQVSgpXG4gICAgICB9O1xuICAgIH07XG5cbiAgICB0aGlzLmdldFVBID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF91YTtcbiAgICB9O1xuXG4gICAgdGhpcy5zZXRVQSA9IGZ1bmN0aW9uICh1YSkge1xuICAgICAgX3VhID0gdHlwZW9mIHVhID09PSBTVFJfVFlQRSAmJiB1YS5sZW5ndGggPiBVQV9NQVhfTEVOR1RIID8gdXRpbC50cmltKHVhLCBVQV9NQVhfTEVOR1RIKSA6IHVhO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIHRoaXMuc2V0VUEoX3VhKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBVQVBhcnNlci5WRVJTSU9OID0gTElCVkVSU0lPTjtcbiAgVUFQYXJzZXIuQlJPV1NFUiA9IHtcbiAgICBOQU1FOiBOQU1FLFxuICAgIE1BSk9SOiBNQUpPUixcbiAgICBWRVJTSU9OOiBWRVJTSU9OXG4gIH07XG4gIFVBUGFyc2VyLkNQVSA9IHtcbiAgICBBUkNISVRFQ1RVUkU6IEFSQ0hJVEVDVFVSRVxuICB9O1xuICBVQVBhcnNlci5ERVZJQ0UgPSB7XG4gICAgTU9ERUw6IE1PREVMLFxuICAgIFZFTkRPUjogVkVORE9SLFxuICAgIFRZUEU6IFRZUEUsXG4gICAgQ09OU09MRTogQ09OU09MRSxcbiAgICBNT0JJTEU6IE1PQklMRSxcbiAgICBTTUFSVFRWOiBTTUFSVFRWLFxuICAgIFRBQkxFVDogVEFCTEVULFxuICAgIFdFQVJBQkxFOiBXRUFSQUJMRSxcbiAgICBFTUJFRERFRDogRU1CRURERURcbiAgfTtcbiAgVUFQYXJzZXIuRU5HSU5FID0ge1xuICAgIE5BTUU6IE5BTUUsXG4gICAgVkVSU0lPTjogVkVSU0lPTlxuICB9O1xuICBVQVBhcnNlci5PUyA9IHtcbiAgICBOQU1FOiBOQU1FLFxuICAgIFZFUlNJT046IFZFUlNJT05cbiAgfTtcblxuICBpZiAodHlwZW9mIGV4cG9ydHMgIT09IFVOREVGX1RZUEUpIHtcbiAgICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gVU5ERUZfVFlQRSAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgICAgZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gVUFQYXJzZXI7XG4gICAgfVxuXG4gICAgZXhwb3J0cy5VQVBhcnNlciA9IFVBUGFyc2VyO1xuICB9IGVsc2Uge1xuICAgIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgZGVmaW5lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIFVBUGFyc2VyO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICB3aW5kb3cuVUFQYXJzZXIgPSBVQVBhcnNlcjtcbiAgICB9XG4gIH1cblxuICB2YXIgJCA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgKHdpbmRvdy5qUXVlcnkgfHwgd2luZG93LlplcHRvKTtcblxuICBpZiAoJCAmJiAhJC51YSkge1xuICAgIHZhciBwYXJzZXIgPSBuZXcgVUFQYXJzZXIoKTtcbiAgICAkLnVhID0gcGFyc2VyLmdldFJlc3VsdCgpO1xuXG4gICAgJC51YS5nZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gcGFyc2VyLmdldFVBKCk7XG4gICAgfTtcblxuICAgICQudWEuc2V0ID0gZnVuY3Rpb24gKHVhc3RyaW5nKSB7XG4gICAgICBwYXJzZXIuc2V0VUEodWFzdHJpbmcpO1xuICAgICAgdmFyIHJlc3VsdCA9IHBhcnNlci5nZXRSZXN1bHQoKTtcblxuICAgICAgZm9yICh2YXIgcHJvcCBpbiByZXN1bHQpIHtcbiAgICAgICAgJC51YVtwcm9wXSA9IHJlc3VsdFtwcm9wXTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG59KSh0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiID8gd2luZG93IDogdGhpcyk7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4889\n')},5438:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("var $ = __webpack_require__(2109);\n\n// eslint-disable-next-line es/no-math-hypot -- required for testing\nvar $hypot = Math.hypot;\nvar abs = Math.abs;\nvar sqrt = Math.sqrt;\n\n// Chrome 77 bug\n// https://bugs.chromium.org/p/v8/issues/detail?id=9546\nvar BUGGY = !!$hypot && $hypot(Infinity, NaN) !== Infinity;\n\n// `Math.hypot` method\n// https://tc39.es/ecma262/#sec-math.hypot\n$({ target: 'Math', stat: true, forced: BUGGY }, {\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n hypot: function hypot(value1, value2) {\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * sqrt(sum);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMubWF0aC5oeXBvdC5qcz80MDU3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFFBQVEsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHLDRDQUE0QztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiNTQzOC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tbWF0aC1oeXBvdCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xudmFyICRoeXBvdCA9IE1hdGguaHlwb3Q7XG52YXIgYWJzID0gTWF0aC5hYnM7XG52YXIgc3FydCA9IE1hdGguc3FydDtcblxuLy8gQ2hyb21lIDc3IGJ1Z1xuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9OTU0NlxudmFyIEJVR0dZID0gISEkaHlwb3QgJiYgJGh5cG90KEluZmluaXR5LCBOYU4pICE9PSBJbmZpbml0eTtcblxuLy8gYE1hdGguaHlwb3RgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXRoLmh5cG90XG4kKHsgdGFyZ2V0OiAnTWF0aCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogQlVHR1kgfSwge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICBoeXBvdDogZnVuY3Rpb24gaHlwb3QodmFsdWUxLCB2YWx1ZTIpIHtcbiAgICB2YXIgc3VtID0gMDtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBsYXJnID0gMDtcbiAgICB2YXIgYXJnLCBkaXY7XG4gICAgd2hpbGUgKGkgPCBhTGVuKSB7XG4gICAgICBhcmcgPSBhYnMoYXJndW1lbnRzW2krK10pO1xuICAgICAgaWYgKGxhcmcgPCBhcmcpIHtcbiAgICAgICAgZGl2ID0gbGFyZyAvIGFyZztcbiAgICAgICAgc3VtID0gc3VtICogZGl2ICogZGl2ICsgMTtcbiAgICAgICAgbGFyZyA9IGFyZztcbiAgICAgIH0gZWxzZSBpZiAoYXJnID4gMCkge1xuICAgICAgICBkaXYgPSBhcmcgLyBsYXJnO1xuICAgICAgICBzdW0gKz0gZGl2ICogZGl2O1xuICAgICAgfSBlbHNlIHN1bSArPSBhcmc7XG4gICAgfVxuICAgIHJldHVybiBsYXJnID09PSBJbmZpbml0eSA/IEluZmluaXR5IDogbGFyZyAqIHNxcnQoc3VtKTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5438\n")},9338:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n "default": function() { return /* binding */ cejst; }\n});\n\n// NAMESPACE OBJECT: ./src/components/areaDetail.module.scss\nvar areaDetail_module_namespaceObject = {};\n__webpack_require__.r(areaDetail_module_namespaceObject);\n__webpack_require__.d(areaDetail_module_namespaceObject, {\n "_D": function() { return areaDetailContainer; },\n "yM": function() { return areaDetail_module_categorization; },\n "Iq": function() { return censusLabel; },\n "J_": function() { return censusRow; },\n "jF": function() { return censusText; },\n "rN": function() { return cumulativeIndexScore; },\n "qE": function() { return divider; },\n "H": function() { return indicatorBox; },\n "GL": function() { return indicatorDescription; },\n "ls": function() { return indicatorTitle; },\n "Kr": function() { return indicatorValue; },\n "KW": function() { return nonPrioritized; },\n "y": function() { return prioritization; },\n "ah": function() { return prioritized; },\n "O3": function() { return priority; },\n "Gs": function() { return areaDetail_module_score; },\n "zZ": function() { return scoreSuperscript; },\n "Lj": function() { return threshold; },\n "NU": function() { return topRow; },\n "oJ": function() { return topRowSubTitle; },\n "yq": function() { return topRowTitle; }\n});\n\n// NAMESPACE OBJECT: ./src/components/mapLegend.module.scss\nvar mapLegend_module_namespaceObject = {};\n__webpack_require__.r(mapLegend_module_namespaceObject);\n__webpack_require__.d(mapLegend_module_namespaceObject, {\n "Ww": function() { return colorSwatch; },\n "nm": function() { return legendContainer; },\n "oI": function() { return legendItem; },\n "KW": function() { return mapLegend_module_nonPrioritized; },\n "ah": function() { return mapLegend_module_prioritized; },\n "VV": function() { return swatchContainer; },\n "Lj": function() { return mapLegend_module_threshold; }\n});\n\n// EXTERNAL MODULE: ./node_modules/react/index.js\nvar react = __webpack_require__(7294);\n// EXTERNAL MODULE: ./src/components/layout.tsx + 7 modules\nvar layout = __webpack_require__(1857);\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/extends.js\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js + 3 modules\nvar toConsumableArray = __webpack_require__(7329);\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/defineProperty.js\nfunction defineProperty_defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n// EXTERNAL MODULE: ./node_modules/prop-types/index.js\nvar prop_types = __webpack_require__(5697);\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js\nfunction _iterableToArrayLimit(arr, i) {\n var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];\n\n if (_i == null) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n\n var _s, _e;\n\n try {\n for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i["return"] != null) _i["return"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js\nvar unsupportedIterableToArray = __webpack_require__(2961);\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/nonIterableRest.js\nfunction _nonIterableRest() {\n throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");\n}\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/slicedToArray.js\n\n\n\n\nfunction slicedToArray_slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || (0,unsupportedIterableToArray/* default */.Z)(arr, i) || _nonIterableRest();\n}\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/classCallCheck.js\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError("Cannot call a class as a function");\n }\n}\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/createClass.js\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ("value" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.math.hypot.js\nvar es_math_hypot = __webpack_require__(5438);\n;// CONCATENATED MODULE: ./node_modules/gl-matrix/esm/common.js\n\n\n/**\r\n * Common utilities\r\n * @module glMatrix\r\n */\n// Configuration Constants\nvar EPSILON = 0.000001;\nvar ARRAY_TYPE = typeof Float32Array !== \'undefined\' ? Float32Array : Array;\nvar RANDOM = Math.random;\n/**\r\n * Sets the type of array used when creating new vectors and matrices\r\n *\r\n * @param {Float32ArrayConstructor | ArrayConstructor} type Array type, such as Float32Array or Array\r\n */\n\nfunction setMatrixArrayType(type) {\n ARRAY_TYPE = type;\n}\nvar degree = Math.PI / 180;\n/**\r\n * Convert Degree To Radian\r\n *\r\n * @param {Number} a Angle in Degrees\r\n */\n\nfunction toRadian(a) {\n return a * degree;\n}\n/**\r\n * Tests whether or not the arguments have approximately the same value, within an absolute\r\n * or relative tolerance of glMatrix.EPSILON (an absolute tolerance is used for values less\r\n * than or equal to 1.0, and a relative tolerance is used for larger values)\r\n *\r\n * @param {Number} a The first number to test.\r\n * @param {Number} b The second number to test.\r\n * @returns {Boolean} True if the numbers are approximately equal, false otherwise.\r\n */\n\nfunction equals(a, b) {\n return Math.abs(a - b) <= EPSILON * Math.max(1.0, Math.abs(a), Math.abs(b));\n}\nif (!Math.hypot) Math.hypot = function () {\n var y = 0,\n i = arguments.length;\n\n while (i--) {\n y += arguments[i] * arguments[i];\n }\n\n return Math.sqrt(y);\n};\n;// CONCATENATED MODULE: ./node_modules/gl-matrix/esm/vec4.js\n\n\n/**\r\n * 4 Dimensional Vector\r\n * @module vec4\r\n */\n\n/**\r\n * Creates a new, empty vec4\r\n *\r\n * @returns {vec4} a new 4D vector\r\n */\n\nfunction create() {\n var out = new ARRAY_TYPE(4);\n\n if (ARRAY_TYPE != Float32Array) {\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n }\n\n return out;\n}\n/**\r\n * Creates a new vec4 initialized with values from an existing vector\r\n *\r\n * @param {ReadonlyVec4} a vector to clone\r\n * @returns {vec4} a new 4D vector\r\n */\n\nfunction clone(a) {\n var out = new glMatrix.ARRAY_TYPE(4);\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n return out;\n}\n/**\r\n * Creates a new vec4 initialized with the given values\r\n *\r\n * @param {Number} x X component\r\n * @param {Number} y Y component\r\n * @param {Number} z Z component\r\n * @param {Number} w W component\r\n * @returns {vec4} a new 4D vector\r\n */\n\nfunction fromValues(x, y, z, w) {\n var out = new glMatrix.ARRAY_TYPE(4);\n out[0] = x;\n out[1] = y;\n out[2] = z;\n out[3] = w;\n return out;\n}\n/**\r\n * Copy the values from one vec4 to another\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {ReadonlyVec4} a the source vector\r\n * @returns {vec4} out\r\n */\n\nfunction copy(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n return out;\n}\n/**\r\n * Set the components of a vec4 to the given values\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {Number} x X component\r\n * @param {Number} y Y component\r\n * @param {Number} z Z component\r\n * @param {Number} w W component\r\n * @returns {vec4} out\r\n */\n\nfunction set(out, x, y, z, w) {\n out[0] = x;\n out[1] = y;\n out[2] = z;\n out[3] = w;\n return out;\n}\n/**\r\n * Adds two vec4\'s\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {ReadonlyVec4} a the first operand\r\n * @param {ReadonlyVec4} b the second operand\r\n * @returns {vec4} out\r\n */\n\nfunction add(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n out[2] = a[2] + b[2];\n out[3] = a[3] + b[3];\n return out;\n}\n/**\r\n * Subtracts vector b from vector a\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {ReadonlyVec4} a the first operand\r\n * @param {ReadonlyVec4} b the second operand\r\n * @returns {vec4} out\r\n */\n\nfunction subtract(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n out[2] = a[2] - b[2];\n out[3] = a[3] - b[3];\n return out;\n}\n/**\r\n * Multiplies two vec4\'s\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {ReadonlyVec4} a the first operand\r\n * @param {ReadonlyVec4} b the second operand\r\n * @returns {vec4} out\r\n */\n\nfunction multiply(out, a, b) {\n out[0] = a[0] * b[0];\n out[1] = a[1] * b[1];\n out[2] = a[2] * b[2];\n out[3] = a[3] * b[3];\n return out;\n}\n/**\r\n * Divides two vec4\'s\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {ReadonlyVec4} a the first operand\r\n * @param {ReadonlyVec4} b the second operand\r\n * @returns {vec4} out\r\n */\n\nfunction divide(out, a, b) {\n out[0] = a[0] / b[0];\n out[1] = a[1] / b[1];\n out[2] = a[2] / b[2];\n out[3] = a[3] / b[3];\n return out;\n}\n/**\r\n * Math.ceil the components of a vec4\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {ReadonlyVec4} a vector to ceil\r\n * @returns {vec4} out\r\n */\n\nfunction ceil(out, a) {\n out[0] = Math.ceil(a[0]);\n out[1] = Math.ceil(a[1]);\n out[2] = Math.ceil(a[2]);\n out[3] = Math.ceil(a[3]);\n return out;\n}\n/**\r\n * Math.floor the components of a vec4\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {ReadonlyVec4} a vector to floor\r\n * @returns {vec4} out\r\n */\n\nfunction floor(out, a) {\n out[0] = Math.floor(a[0]);\n out[1] = Math.floor(a[1]);\n out[2] = Math.floor(a[2]);\n out[3] = Math.floor(a[3]);\n return out;\n}\n/**\r\n * Returns the minimum of two vec4\'s\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {ReadonlyVec4} a the first operand\r\n * @param {ReadonlyVec4} b the second operand\r\n * @returns {vec4} out\r\n */\n\nfunction min(out, a, b) {\n out[0] = Math.min(a[0], b[0]);\n out[1] = Math.min(a[1], b[1]);\n out[2] = Math.min(a[2], b[2]);\n out[3] = Math.min(a[3], b[3]);\n return out;\n}\n/**\r\n * Returns the maximum of two vec4\'s\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {ReadonlyVec4} a the first operand\r\n * @param {ReadonlyVec4} b the second operand\r\n * @returns {vec4} out\r\n */\n\nfunction max(out, a, b) {\n out[0] = Math.max(a[0], b[0]);\n out[1] = Math.max(a[1], b[1]);\n out[2] = Math.max(a[2], b[2]);\n out[3] = Math.max(a[3], b[3]);\n return out;\n}\n/**\r\n * Math.round the components of a vec4\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {ReadonlyVec4} a vector to round\r\n * @returns {vec4} out\r\n */\n\nfunction round(out, a) {\n out[0] = Math.round(a[0]);\n out[1] = Math.round(a[1]);\n out[2] = Math.round(a[2]);\n out[3] = Math.round(a[3]);\n return out;\n}\n/**\r\n * Scales a vec4 by a scalar number\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {ReadonlyVec4} a the vector to scale\r\n * @param {Number} b amount to scale the vector by\r\n * @returns {vec4} out\r\n */\n\nfunction scale(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n out[2] = a[2] * b;\n out[3] = a[3] * b;\n return out;\n}\n/**\r\n * Adds two vec4\'s after scaling the second operand by a scalar value\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {ReadonlyVec4} a the first operand\r\n * @param {ReadonlyVec4} b the second operand\r\n * @param {Number} scale the amount to scale b by before adding\r\n * @returns {vec4} out\r\n */\n\nfunction scaleAndAdd(out, a, b, scale) {\n out[0] = a[0] + b[0] * scale;\n out[1] = a[1] + b[1] * scale;\n out[2] = a[2] + b[2] * scale;\n out[3] = a[3] + b[3] * scale;\n return out;\n}\n/**\r\n * Calculates the euclidian distance between two vec4\'s\r\n *\r\n * @param {ReadonlyVec4} a the first operand\r\n * @param {ReadonlyVec4} b the second operand\r\n * @returns {Number} distance between a and b\r\n */\n\nfunction distance(a, b) {\n var x = b[0] - a[0];\n var y = b[1] - a[1];\n var z = b[2] - a[2];\n var w = b[3] - a[3];\n return Math.hypot(x, y, z, w);\n}\n/**\r\n * Calculates the squared euclidian distance between two vec4\'s\r\n *\r\n * @param {ReadonlyVec4} a the first operand\r\n * @param {ReadonlyVec4} b the second operand\r\n * @returns {Number} squared distance between a and b\r\n */\n\nfunction squaredDistance(a, b) {\n var x = b[0] - a[0];\n var y = b[1] - a[1];\n var z = b[2] - a[2];\n var w = b[3] - a[3];\n return x * x + y * y + z * z + w * w;\n}\n/**\r\n * Calculates the length of a vec4\r\n *\r\n * @param {ReadonlyVec4} a vector to calculate length of\r\n * @returns {Number} length of a\r\n */\n\nfunction vec4_length(a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n var w = a[3];\n return Math.hypot(x, y, z, w);\n}\n/**\r\n * Calculates the squared length of a vec4\r\n *\r\n * @param {ReadonlyVec4} a vector to calculate squared length of\r\n * @returns {Number} squared length of a\r\n */\n\nfunction squaredLength(a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n var w = a[3];\n return x * x + y * y + z * z + w * w;\n}\n/**\r\n * Negates the components of a vec4\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {ReadonlyVec4} a vector to negate\r\n * @returns {vec4} out\r\n */\n\nfunction negate(out, a) {\n out[0] = -a[0];\n out[1] = -a[1];\n out[2] = -a[2];\n out[3] = -a[3];\n return out;\n}\n/**\r\n * Returns the inverse of the components of a vec4\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {ReadonlyVec4} a vector to invert\r\n * @returns {vec4} out\r\n */\n\nfunction inverse(out, a) {\n out[0] = 1.0 / a[0];\n out[1] = 1.0 / a[1];\n out[2] = 1.0 / a[2];\n out[3] = 1.0 / a[3];\n return out;\n}\n/**\r\n * Normalize a vec4\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {ReadonlyVec4} a vector to normalize\r\n * @returns {vec4} out\r\n */\n\nfunction normalize(out, a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n var w = a[3];\n var len = x * x + y * y + z * z + w * w;\n\n if (len > 0) {\n len = 1 / Math.sqrt(len);\n }\n\n out[0] = x * len;\n out[1] = y * len;\n out[2] = z * len;\n out[3] = w * len;\n return out;\n}\n/**\r\n * Calculates the dot product of two vec4\'s\r\n *\r\n * @param {ReadonlyVec4} a the first operand\r\n * @param {ReadonlyVec4} b the second operand\r\n * @returns {Number} dot product of a and b\r\n */\n\nfunction dot(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];\n}\n/**\r\n * Returns the cross-product of three vectors in a 4-dimensional space\r\n *\r\n * @param {ReadonlyVec4} result the receiving vector\r\n * @param {ReadonlyVec4} U the first vector\r\n * @param {ReadonlyVec4} V the second vector\r\n * @param {ReadonlyVec4} W the third vector\r\n * @returns {vec4} result\r\n */\n\nfunction cross(out, u, v, w) {\n var A = v[0] * w[1] - v[1] * w[0],\n B = v[0] * w[2] - v[2] * w[0],\n C = v[0] * w[3] - v[3] * w[0],\n D = v[1] * w[2] - v[2] * w[1],\n E = v[1] * w[3] - v[3] * w[1],\n F = v[2] * w[3] - v[3] * w[2];\n var G = u[0];\n var H = u[1];\n var I = u[2];\n var J = u[3];\n out[0] = H * F - I * E + J * D;\n out[1] = -(G * F) + I * C - J * B;\n out[2] = G * E - H * C + J * A;\n out[3] = -(G * D) + H * B - I * A;\n return out;\n}\n/**\r\n * Performs a linear interpolation between two vec4\'s\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {ReadonlyVec4} a the first operand\r\n * @param {ReadonlyVec4} b the second operand\r\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\r\n * @returns {vec4} out\r\n */\n\nfunction lerp(out, a, b, t) {\n var ax = a[0];\n var ay = a[1];\n var az = a[2];\n var aw = a[3];\n out[0] = ax + t * (b[0] - ax);\n out[1] = ay + t * (b[1] - ay);\n out[2] = az + t * (b[2] - az);\n out[3] = aw + t * (b[3] - aw);\n return out;\n}\n/**\r\n * Generates a random vector with the given scale\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {Number} [scale] Length of the resulting vector. If ommitted, a unit vector will be returned\r\n * @returns {vec4} out\r\n */\n\nfunction random(out, scale) {\n scale = scale || 1.0; // Marsaglia, George. Choosing a Point from the Surface of a\n // Sphere. Ann. Math. Statist. 43 (1972), no. 2, 645--646.\n // http://projecteuclid.org/euclid.aoms/1177692644;\n\n var v1, v2, v3, v4;\n var s1, s2;\n\n do {\n v1 = glMatrix.RANDOM() * 2 - 1;\n v2 = glMatrix.RANDOM() * 2 - 1;\n s1 = v1 * v1 + v2 * v2;\n } while (s1 >= 1);\n\n do {\n v3 = glMatrix.RANDOM() * 2 - 1;\n v4 = glMatrix.RANDOM() * 2 - 1;\n s2 = v3 * v3 + v4 * v4;\n } while (s2 >= 1);\n\n var d = Math.sqrt((1 - s1) / s2);\n out[0] = scale * v1;\n out[1] = scale * v2;\n out[2] = scale * v3 * d;\n out[3] = scale * v4 * d;\n return out;\n}\n/**\r\n * Transforms the vec4 with a mat4.\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {ReadonlyVec4} a the vector to transform\r\n * @param {ReadonlyMat4} m matrix to transform with\r\n * @returns {vec4} out\r\n */\n\nfunction transformMat4(out, a, m) {\n var x = a[0],\n y = a[1],\n z = a[2],\n w = a[3];\n out[0] = m[0] * x + m[4] * y + m[8] * z + m[12] * w;\n out[1] = m[1] * x + m[5] * y + m[9] * z + m[13] * w;\n out[2] = m[2] * x + m[6] * y + m[10] * z + m[14] * w;\n out[3] = m[3] * x + m[7] * y + m[11] * z + m[15] * w;\n return out;\n}\n/**\r\n * Transforms the vec4 with a quat\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {ReadonlyVec4} a the vector to transform\r\n * @param {ReadonlyQuat} q quaternion to transform with\r\n * @returns {vec4} out\r\n */\n\nfunction transformQuat(out, a, q) {\n var x = a[0],\n y = a[1],\n z = a[2];\n var qx = q[0],\n qy = q[1],\n qz = q[2],\n qw = q[3]; // calculate quat * vec\n\n var ix = qw * x + qy * z - qz * y;\n var iy = qw * y + qz * x - qx * z;\n var iz = qw * z + qx * y - qy * x;\n var iw = -qx * x - qy * y - qz * z; // calculate result * inverse quat\n\n out[0] = ix * qw + iw * -qx + iy * -qz - iz * -qy;\n out[1] = iy * qw + iw * -qy + iz * -qx - ix * -qz;\n out[2] = iz * qw + iw * -qz + ix * -qy - iy * -qx;\n out[3] = a[3];\n return out;\n}\n/**\r\n * Set the components of a vec4 to zero\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @returns {vec4} out\r\n */\n\nfunction zero(out) {\n out[0] = 0.0;\n out[1] = 0.0;\n out[2] = 0.0;\n out[3] = 0.0;\n return out;\n}\n/**\r\n * Returns a string representation of a vector\r\n *\r\n * @param {ReadonlyVec4} a vector to represent as a string\r\n * @returns {String} string representation of the vector\r\n */\n\nfunction str(a) {\n return "vec4(" + a[0] + ", " + a[1] + ", " + a[2] + ", " + a[3] + ")";\n}\n/**\r\n * Returns whether or not the vectors have exactly the same elements in the same position (when compared with ===)\r\n *\r\n * @param {ReadonlyVec4} a The first vector.\r\n * @param {ReadonlyVec4} b The second vector.\r\n * @returns {Boolean} True if the vectors are equal, false otherwise.\r\n */\n\nfunction exactEquals(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3];\n}\n/**\r\n * Returns whether or not the vectors have approximately the same elements in the same position.\r\n *\r\n * @param {ReadonlyVec4} a The first vector.\r\n * @param {ReadonlyVec4} b The second vector.\r\n * @returns {Boolean} True if the vectors are equal, false otherwise.\r\n */\n\nfunction vec4_equals(a, b) {\n var a0 = a[0],\n a1 = a[1],\n a2 = a[2],\n a3 = a[3];\n var b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3];\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3));\n}\n/**\r\n * Alias for {@link vec4.subtract}\r\n * @function\r\n */\n\nvar sub = (/* unused pure expression or super */ null && (subtract));\n/**\r\n * Alias for {@link vec4.multiply}\r\n * @function\r\n */\n\nvar mul = (/* unused pure expression or super */ null && (multiply));\n/**\r\n * Alias for {@link vec4.divide}\r\n * @function\r\n */\n\nvar div = (/* unused pure expression or super */ null && (divide));\n/**\r\n * Alias for {@link vec4.distance}\r\n * @function\r\n */\n\nvar dist = (/* unused pure expression or super */ null && (distance));\n/**\r\n * Alias for {@link vec4.squaredDistance}\r\n * @function\r\n */\n\nvar sqrDist = (/* unused pure expression or super */ null && (squaredDistance));\n/**\r\n * Alias for {@link vec4.length}\r\n * @function\r\n */\n\nvar len = (/* unused pure expression or super */ null && (vec4_length));\n/**\r\n * Alias for {@link vec4.squaredLength}\r\n * @function\r\n */\n\nvar sqrLen = (/* unused pure expression or super */ null && (squaredLength));\n/**\r\n * Perform some operation over an array of vec4s.\r\n *\r\n * @param {Array} a the array of vectors to iterate over\r\n * @param {Number} stride Number of elements between the start of each vec4. If 0 assumes tightly packed\r\n * @param {Number} offset Number of elements to skip at the beginning of the array\r\n * @param {Number} count Number of vec4s to iterate over. If 0 iterates over entire array\r\n * @param {Function} fn Function to call for each vector in the array\r\n * @param {Object} [arg] additional argument to pass to fn\r\n * @returns {Array} a\r\n * @function\r\n */\n\nvar forEach = function () {\n var vec = create();\n return function (a, stride, offset, count, fn, arg) {\n var i, l;\n\n if (!stride) {\n stride = 4;\n }\n\n if (!offset) {\n offset = 0;\n }\n\n if (count) {\n l = Math.min(count * stride + offset, a.length);\n } else {\n l = a.length;\n }\n\n for (i = offset; i < l; i += stride) {\n vec[0] = a[i];\n vec[1] = a[i + 1];\n vec[2] = a[i + 2];\n vec[3] = a[i + 3];\n fn(vec, vec, arg);\n a[i] = vec[0];\n a[i + 1] = vec[1];\n a[i + 2] = vec[2];\n a[i + 3] = vec[3];\n }\n\n return a;\n };\n}();\n;// CONCATENATED MODULE: ./node_modules/@math.gl/web-mercator/dist/esm/math-utils.js\n\nfunction createMat4() {\n return [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];\n}\nfunction transformVector(matrix, vector) {\n var result = transformMat4([], vector, matrix);\n scale(result, result, 1 / result[3]);\n return result;\n}\nfunction mod(value, divisor) {\n var modulus = value % divisor;\n return modulus < 0 ? divisor + modulus : modulus;\n}\nfunction math_utils_lerp(start, end, step) {\n return step * end + (1 - step) * start;\n}\n\nfunction ieLog2(x) {\n return Math.log(x) * Math.LOG2E;\n}\n\nvar log2 = Math.log2 || ieLog2;\n;// CONCATENATED MODULE: ./node_modules/gl-matrix/esm/mat4.js\n\n\n/**\r\n * 4x4 Matrix
Format: column-major, when typed out it looks like row-major
The matrices are being post multiplied.\r\n * @module mat4\r\n */\n\n/**\r\n * Creates a new identity mat4\r\n *\r\n * @returns {mat4} a new 4x4 matrix\r\n */\n\nfunction mat4_create() {\n var out = new glMatrix.ARRAY_TYPE(16);\n\n if (glMatrix.ARRAY_TYPE != Float32Array) {\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n }\n\n out[0] = 1;\n out[5] = 1;\n out[10] = 1;\n out[15] = 1;\n return out;\n}\n/**\r\n * Creates a new mat4 initialized with values from an existing matrix\r\n *\r\n * @param {ReadonlyMat4} a matrix to clone\r\n * @returns {mat4} a new 4x4 matrix\r\n */\n\nfunction mat4_clone(a) {\n var out = new glMatrix.ARRAY_TYPE(16);\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n out[9] = a[9];\n out[10] = a[10];\n out[11] = a[11];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n return out;\n}\n/**\r\n * Copy the values from one mat4 to another\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {ReadonlyMat4} a the source matrix\r\n * @returns {mat4} out\r\n */\n\nfunction mat4_copy(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n out[9] = a[9];\n out[10] = a[10];\n out[11] = a[11];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n return out;\n}\n/**\r\n * Create a new mat4 with the given values\r\n *\r\n * @param {Number} m00 Component in column 0, row 0 position (index 0)\r\n * @param {Number} m01 Component in column 0, row 1 position (index 1)\r\n * @param {Number} m02 Component in column 0, row 2 position (index 2)\r\n * @param {Number} m03 Component in column 0, row 3 position (index 3)\r\n * @param {Number} m10 Component in column 1, row 0 position (index 4)\r\n * @param {Number} m11 Component in column 1, row 1 position (index 5)\r\n * @param {Number} m12 Component in column 1, row 2 position (index 6)\r\n * @param {Number} m13 Component in column 1, row 3 position (index 7)\r\n * @param {Number} m20 Component in column 2, row 0 position (index 8)\r\n * @param {Number} m21 Component in column 2, row 1 position (index 9)\r\n * @param {Number} m22 Component in column 2, row 2 position (index 10)\r\n * @param {Number} m23 Component in column 2, row 3 position (index 11)\r\n * @param {Number} m30 Component in column 3, row 0 position (index 12)\r\n * @param {Number} m31 Component in column 3, row 1 position (index 13)\r\n * @param {Number} m32 Component in column 3, row 2 position (index 14)\r\n * @param {Number} m33 Component in column 3, row 3 position (index 15)\r\n * @returns {mat4} A new mat4\r\n */\n\nfunction mat4_fromValues(m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33) {\n var out = new glMatrix.ARRAY_TYPE(16);\n out[0] = m00;\n out[1] = m01;\n out[2] = m02;\n out[3] = m03;\n out[4] = m10;\n out[5] = m11;\n out[6] = m12;\n out[7] = m13;\n out[8] = m20;\n out[9] = m21;\n out[10] = m22;\n out[11] = m23;\n out[12] = m30;\n out[13] = m31;\n out[14] = m32;\n out[15] = m33;\n return out;\n}\n/**\r\n * Set the components of a mat4 to the given values\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {Number} m00 Component in column 0, row 0 position (index 0)\r\n * @param {Number} m01 Component in column 0, row 1 position (index 1)\r\n * @param {Number} m02 Component in column 0, row 2 position (index 2)\r\n * @param {Number} m03 Component in column 0, row 3 position (index 3)\r\n * @param {Number} m10 Component in column 1, row 0 position (index 4)\r\n * @param {Number} m11 Component in column 1, row 1 position (index 5)\r\n * @param {Number} m12 Component in column 1, row 2 position (index 6)\r\n * @param {Number} m13 Component in column 1, row 3 position (index 7)\r\n * @param {Number} m20 Component in column 2, row 0 position (index 8)\r\n * @param {Number} m21 Component in column 2, row 1 position (index 9)\r\n * @param {Number} m22 Component in column 2, row 2 position (index 10)\r\n * @param {Number} m23 Component in column 2, row 3 position (index 11)\r\n * @param {Number} m30 Component in column 3, row 0 position (index 12)\r\n * @param {Number} m31 Component in column 3, row 1 position (index 13)\r\n * @param {Number} m32 Component in column 3, row 2 position (index 14)\r\n * @param {Number} m33 Component in column 3, row 3 position (index 15)\r\n * @returns {mat4} out\r\n */\n\nfunction mat4_set(out, m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33) {\n out[0] = m00;\n out[1] = m01;\n out[2] = m02;\n out[3] = m03;\n out[4] = m10;\n out[5] = m11;\n out[6] = m12;\n out[7] = m13;\n out[8] = m20;\n out[9] = m21;\n out[10] = m22;\n out[11] = m23;\n out[12] = m30;\n out[13] = m31;\n out[14] = m32;\n out[15] = m33;\n return out;\n}\n/**\r\n * Set a mat4 to the identity matrix\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @returns {mat4} out\r\n */\n\nfunction identity(out) {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = 1;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 1;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n/**\r\n * Transpose the values of a mat4\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {ReadonlyMat4} a the source matrix\r\n * @returns {mat4} out\r\n */\n\nfunction transpose(out, a) {\n // If we are transposing ourselves we can skip a few steps but have to cache some values\n if (out === a) {\n var a01 = a[1],\n a02 = a[2],\n a03 = a[3];\n var a12 = a[6],\n a13 = a[7];\n var a23 = a[11];\n out[1] = a[4];\n out[2] = a[8];\n out[3] = a[12];\n out[4] = a01;\n out[6] = a[9];\n out[7] = a[13];\n out[8] = a02;\n out[9] = a12;\n out[11] = a[14];\n out[12] = a03;\n out[13] = a13;\n out[14] = a23;\n } else {\n out[0] = a[0];\n out[1] = a[4];\n out[2] = a[8];\n out[3] = a[12];\n out[4] = a[1];\n out[5] = a[5];\n out[6] = a[9];\n out[7] = a[13];\n out[8] = a[2];\n out[9] = a[6];\n out[10] = a[10];\n out[11] = a[14];\n out[12] = a[3];\n out[13] = a[7];\n out[14] = a[11];\n out[15] = a[15];\n }\n\n return out;\n}\n/**\r\n * Inverts a mat4\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {ReadonlyMat4} a the source matrix\r\n * @returns {mat4} out\r\n */\n\nfunction invert(out, a) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a03 = a[3];\n var a10 = a[4],\n a11 = a[5],\n a12 = a[6],\n a13 = a[7];\n var a20 = a[8],\n a21 = a[9],\n a22 = a[10],\n a23 = a[11];\n var a30 = a[12],\n a31 = a[13],\n a32 = a[14],\n a33 = a[15];\n var b00 = a00 * a11 - a01 * a10;\n var b01 = a00 * a12 - a02 * a10;\n var b02 = a00 * a13 - a03 * a10;\n var b03 = a01 * a12 - a02 * a11;\n var b04 = a01 * a13 - a03 * a11;\n var b05 = a02 * a13 - a03 * a12;\n var b06 = a20 * a31 - a21 * a30;\n var b07 = a20 * a32 - a22 * a30;\n var b08 = a20 * a33 - a23 * a30;\n var b09 = a21 * a32 - a22 * a31;\n var b10 = a21 * a33 - a23 * a31;\n var b11 = a22 * a33 - a23 * a32; // Calculate the determinant\n\n var det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n\n if (!det) {\n return null;\n }\n\n det = 1.0 / det;\n out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det;\n out[1] = (a02 * b10 - a01 * b11 - a03 * b09) * det;\n out[2] = (a31 * b05 - a32 * b04 + a33 * b03) * det;\n out[3] = (a22 * b04 - a21 * b05 - a23 * b03) * det;\n out[4] = (a12 * b08 - a10 * b11 - a13 * b07) * det;\n out[5] = (a00 * b11 - a02 * b08 + a03 * b07) * det;\n out[6] = (a32 * b02 - a30 * b05 - a33 * b01) * det;\n out[7] = (a20 * b05 - a22 * b02 + a23 * b01) * det;\n out[8] = (a10 * b10 - a11 * b08 + a13 * b06) * det;\n out[9] = (a01 * b08 - a00 * b10 - a03 * b06) * det;\n out[10] = (a30 * b04 - a31 * b02 + a33 * b00) * det;\n out[11] = (a21 * b02 - a20 * b04 - a23 * b00) * det;\n out[12] = (a11 * b07 - a10 * b09 - a12 * b06) * det;\n out[13] = (a00 * b09 - a01 * b07 + a02 * b06) * det;\n out[14] = (a31 * b01 - a30 * b03 - a32 * b00) * det;\n out[15] = (a20 * b03 - a21 * b01 + a22 * b00) * det;\n return out;\n}\n/**\r\n * Calculates the adjugate of a mat4\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {ReadonlyMat4} a the source matrix\r\n * @returns {mat4} out\r\n */\n\nfunction adjoint(out, a) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a03 = a[3];\n var a10 = a[4],\n a11 = a[5],\n a12 = a[6],\n a13 = a[7];\n var a20 = a[8],\n a21 = a[9],\n a22 = a[10],\n a23 = a[11];\n var a30 = a[12],\n a31 = a[13],\n a32 = a[14],\n a33 = a[15];\n out[0] = a11 * (a22 * a33 - a23 * a32) - a21 * (a12 * a33 - a13 * a32) + a31 * (a12 * a23 - a13 * a22);\n out[1] = -(a01 * (a22 * a33 - a23 * a32) - a21 * (a02 * a33 - a03 * a32) + a31 * (a02 * a23 - a03 * a22));\n out[2] = a01 * (a12 * a33 - a13 * a32) - a11 * (a02 * a33 - a03 * a32) + a31 * (a02 * a13 - a03 * a12);\n out[3] = -(a01 * (a12 * a23 - a13 * a22) - a11 * (a02 * a23 - a03 * a22) + a21 * (a02 * a13 - a03 * a12));\n out[4] = -(a10 * (a22 * a33 - a23 * a32) - a20 * (a12 * a33 - a13 * a32) + a30 * (a12 * a23 - a13 * a22));\n out[5] = a00 * (a22 * a33 - a23 * a32) - a20 * (a02 * a33 - a03 * a32) + a30 * (a02 * a23 - a03 * a22);\n out[6] = -(a00 * (a12 * a33 - a13 * a32) - a10 * (a02 * a33 - a03 * a32) + a30 * (a02 * a13 - a03 * a12));\n out[7] = a00 * (a12 * a23 - a13 * a22) - a10 * (a02 * a23 - a03 * a22) + a20 * (a02 * a13 - a03 * a12);\n out[8] = a10 * (a21 * a33 - a23 * a31) - a20 * (a11 * a33 - a13 * a31) + a30 * (a11 * a23 - a13 * a21);\n out[9] = -(a00 * (a21 * a33 - a23 * a31) - a20 * (a01 * a33 - a03 * a31) + a30 * (a01 * a23 - a03 * a21));\n out[10] = a00 * (a11 * a33 - a13 * a31) - a10 * (a01 * a33 - a03 * a31) + a30 * (a01 * a13 - a03 * a11);\n out[11] = -(a00 * (a11 * a23 - a13 * a21) - a10 * (a01 * a23 - a03 * a21) + a20 * (a01 * a13 - a03 * a11));\n out[12] = -(a10 * (a21 * a32 - a22 * a31) - a20 * (a11 * a32 - a12 * a31) + a30 * (a11 * a22 - a12 * a21));\n out[13] = a00 * (a21 * a32 - a22 * a31) - a20 * (a01 * a32 - a02 * a31) + a30 * (a01 * a22 - a02 * a21);\n out[14] = -(a00 * (a11 * a32 - a12 * a31) - a10 * (a01 * a32 - a02 * a31) + a30 * (a01 * a12 - a02 * a11));\n out[15] = a00 * (a11 * a22 - a12 * a21) - a10 * (a01 * a22 - a02 * a21) + a20 * (a01 * a12 - a02 * a11);\n return out;\n}\n/**\r\n * Calculates the determinant of a mat4\r\n *\r\n * @param {ReadonlyMat4} a the source matrix\r\n * @returns {Number} determinant of a\r\n */\n\nfunction determinant(a) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a03 = a[3];\n var a10 = a[4],\n a11 = a[5],\n a12 = a[6],\n a13 = a[7];\n var a20 = a[8],\n a21 = a[9],\n a22 = a[10],\n a23 = a[11];\n var a30 = a[12],\n a31 = a[13],\n a32 = a[14],\n a33 = a[15];\n var b00 = a00 * a11 - a01 * a10;\n var b01 = a00 * a12 - a02 * a10;\n var b02 = a00 * a13 - a03 * a10;\n var b03 = a01 * a12 - a02 * a11;\n var b04 = a01 * a13 - a03 * a11;\n var b05 = a02 * a13 - a03 * a12;\n var b06 = a20 * a31 - a21 * a30;\n var b07 = a20 * a32 - a22 * a30;\n var b08 = a20 * a33 - a23 * a30;\n var b09 = a21 * a32 - a22 * a31;\n var b10 = a21 * a33 - a23 * a31;\n var b11 = a22 * a33 - a23 * a32; // Calculate the determinant\n\n return b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n}\n/**\r\n * Multiplies two mat4s\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {ReadonlyMat4} a the first operand\r\n * @param {ReadonlyMat4} b the second operand\r\n * @returns {mat4} out\r\n */\n\nfunction mat4_multiply(out, a, b) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a03 = a[3];\n var a10 = a[4],\n a11 = a[5],\n a12 = a[6],\n a13 = a[7];\n var a20 = a[8],\n a21 = a[9],\n a22 = a[10],\n a23 = a[11];\n var a30 = a[12],\n a31 = a[13],\n a32 = a[14],\n a33 = a[15]; // Cache only the current line of the second matrix\n\n var b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3];\n out[0] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[1] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[2] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[3] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n b0 = b[4];\n b1 = b[5];\n b2 = b[6];\n b3 = b[7];\n out[4] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[5] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[6] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[7] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n b0 = b[8];\n b1 = b[9];\n b2 = b[10];\n b3 = b[11];\n out[8] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[9] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[10] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[11] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n b0 = b[12];\n b1 = b[13];\n b2 = b[14];\n b3 = b[15];\n out[12] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[13] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[14] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[15] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n return out;\n}\n/**\r\n * Translate a mat4 by the given vector\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {ReadonlyMat4} a the matrix to translate\r\n * @param {ReadonlyVec3} v vector to translate by\r\n * @returns {mat4} out\r\n */\n\nfunction translate(out, a, v) {\n var x = v[0],\n y = v[1],\n z = v[2];\n var a00, a01, a02, a03;\n var a10, a11, a12, a13;\n var a20, a21, a22, a23;\n\n if (a === out) {\n out[12] = a[0] * x + a[4] * y + a[8] * z + a[12];\n out[13] = a[1] * x + a[5] * y + a[9] * z + a[13];\n out[14] = a[2] * x + a[6] * y + a[10] * z + a[14];\n out[15] = a[3] * x + a[7] * y + a[11] * z + a[15];\n } else {\n a00 = a[0];\n a01 = a[1];\n a02 = a[2];\n a03 = a[3];\n a10 = a[4];\n a11 = a[5];\n a12 = a[6];\n a13 = a[7];\n a20 = a[8];\n a21 = a[9];\n a22 = a[10];\n a23 = a[11];\n out[0] = a00;\n out[1] = a01;\n out[2] = a02;\n out[3] = a03;\n out[4] = a10;\n out[5] = a11;\n out[6] = a12;\n out[7] = a13;\n out[8] = a20;\n out[9] = a21;\n out[10] = a22;\n out[11] = a23;\n out[12] = a00 * x + a10 * y + a20 * z + a[12];\n out[13] = a01 * x + a11 * y + a21 * z + a[13];\n out[14] = a02 * x + a12 * y + a22 * z + a[14];\n out[15] = a03 * x + a13 * y + a23 * z + a[15];\n }\n\n return out;\n}\n/**\r\n * Scales the mat4 by the dimensions in the given vec3 not using vectorization\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {ReadonlyMat4} a the matrix to scale\r\n * @param {ReadonlyVec3} v the vec3 to scale the matrix by\r\n * @returns {mat4} out\r\n **/\n\nfunction mat4_scale(out, a, v) {\n var x = v[0],\n y = v[1],\n z = v[2];\n out[0] = a[0] * x;\n out[1] = a[1] * x;\n out[2] = a[2] * x;\n out[3] = a[3] * x;\n out[4] = a[4] * y;\n out[5] = a[5] * y;\n out[6] = a[6] * y;\n out[7] = a[7] * y;\n out[8] = a[8] * z;\n out[9] = a[9] * z;\n out[10] = a[10] * z;\n out[11] = a[11] * z;\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n return out;\n}\n/**\r\n * Rotates a mat4 by the given angle around the given axis\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {ReadonlyMat4} a the matrix to rotate\r\n * @param {Number} rad the angle to rotate the matrix by\r\n * @param {ReadonlyVec3} axis the axis to rotate around\r\n * @returns {mat4} out\r\n */\n\nfunction rotate(out, a, rad, axis) {\n var x = axis[0],\n y = axis[1],\n z = axis[2];\n var len = Math.hypot(x, y, z);\n var s, c, t;\n var a00, a01, a02, a03;\n var a10, a11, a12, a13;\n var a20, a21, a22, a23;\n var b00, b01, b02;\n var b10, b11, b12;\n var b20, b21, b22;\n\n if (len < glMatrix.EPSILON) {\n return null;\n }\n\n len = 1 / len;\n x *= len;\n y *= len;\n z *= len;\n s = Math.sin(rad);\n c = Math.cos(rad);\n t = 1 - c;\n a00 = a[0];\n a01 = a[1];\n a02 = a[2];\n a03 = a[3];\n a10 = a[4];\n a11 = a[5];\n a12 = a[6];\n a13 = a[7];\n a20 = a[8];\n a21 = a[9];\n a22 = a[10];\n a23 = a[11]; // Construct the elements of the rotation matrix\n\n b00 = x * x * t + c;\n b01 = y * x * t + z * s;\n b02 = z * x * t - y * s;\n b10 = x * y * t - z * s;\n b11 = y * y * t + c;\n b12 = z * y * t + x * s;\n b20 = x * z * t + y * s;\n b21 = y * z * t - x * s;\n b22 = z * z * t + c; // Perform rotation-specific matrix multiplication\n\n out[0] = a00 * b00 + a10 * b01 + a20 * b02;\n out[1] = a01 * b00 + a11 * b01 + a21 * b02;\n out[2] = a02 * b00 + a12 * b01 + a22 * b02;\n out[3] = a03 * b00 + a13 * b01 + a23 * b02;\n out[4] = a00 * b10 + a10 * b11 + a20 * b12;\n out[5] = a01 * b10 + a11 * b11 + a21 * b12;\n out[6] = a02 * b10 + a12 * b11 + a22 * b12;\n out[7] = a03 * b10 + a13 * b11 + a23 * b12;\n out[8] = a00 * b20 + a10 * b21 + a20 * b22;\n out[9] = a01 * b20 + a11 * b21 + a21 * b22;\n out[10] = a02 * b20 + a12 * b21 + a22 * b22;\n out[11] = a03 * b20 + a13 * b21 + a23 * b22;\n\n if (a !== out) {\n // If the source and destination differ, copy the unchanged last row\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n }\n\n return out;\n}\n/**\r\n * Rotates a matrix by the given angle around the X axis\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {ReadonlyMat4} a the matrix to rotate\r\n * @param {Number} rad the angle to rotate the matrix by\r\n * @returns {mat4} out\r\n */\n\nfunction rotateX(out, a, rad) {\n var s = Math.sin(rad);\n var c = Math.cos(rad);\n var a10 = a[4];\n var a11 = a[5];\n var a12 = a[6];\n var a13 = a[7];\n var a20 = a[8];\n var a21 = a[9];\n var a22 = a[10];\n var a23 = a[11];\n\n if (a !== out) {\n // If the source and destination differ, copy the unchanged rows\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n } // Perform axis-specific matrix multiplication\n\n\n out[4] = a10 * c + a20 * s;\n out[5] = a11 * c + a21 * s;\n out[6] = a12 * c + a22 * s;\n out[7] = a13 * c + a23 * s;\n out[8] = a20 * c - a10 * s;\n out[9] = a21 * c - a11 * s;\n out[10] = a22 * c - a12 * s;\n out[11] = a23 * c - a13 * s;\n return out;\n}\n/**\r\n * Rotates a matrix by the given angle around the Y axis\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {ReadonlyMat4} a the matrix to rotate\r\n * @param {Number} rad the angle to rotate the matrix by\r\n * @returns {mat4} out\r\n */\n\nfunction rotateY(out, a, rad) {\n var s = Math.sin(rad);\n var c = Math.cos(rad);\n var a00 = a[0];\n var a01 = a[1];\n var a02 = a[2];\n var a03 = a[3];\n var a20 = a[8];\n var a21 = a[9];\n var a22 = a[10];\n var a23 = a[11];\n\n if (a !== out) {\n // If the source and destination differ, copy the unchanged rows\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n } // Perform axis-specific matrix multiplication\n\n\n out[0] = a00 * c - a20 * s;\n out[1] = a01 * c - a21 * s;\n out[2] = a02 * c - a22 * s;\n out[3] = a03 * c - a23 * s;\n out[8] = a00 * s + a20 * c;\n out[9] = a01 * s + a21 * c;\n out[10] = a02 * s + a22 * c;\n out[11] = a03 * s + a23 * c;\n return out;\n}\n/**\r\n * Rotates a matrix by the given angle around the Z axis\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {ReadonlyMat4} a the matrix to rotate\r\n * @param {Number} rad the angle to rotate the matrix by\r\n * @returns {mat4} out\r\n */\n\nfunction rotateZ(out, a, rad) {\n var s = Math.sin(rad);\n var c = Math.cos(rad);\n var a00 = a[0];\n var a01 = a[1];\n var a02 = a[2];\n var a03 = a[3];\n var a10 = a[4];\n var a11 = a[5];\n var a12 = a[6];\n var a13 = a[7];\n\n if (a !== out) {\n // If the source and destination differ, copy the unchanged last row\n out[8] = a[8];\n out[9] = a[9];\n out[10] = a[10];\n out[11] = a[11];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n } // Perform axis-specific matrix multiplication\n\n\n out[0] = a00 * c + a10 * s;\n out[1] = a01 * c + a11 * s;\n out[2] = a02 * c + a12 * s;\n out[3] = a03 * c + a13 * s;\n out[4] = a10 * c - a00 * s;\n out[5] = a11 * c - a01 * s;\n out[6] = a12 * c - a02 * s;\n out[7] = a13 * c - a03 * s;\n return out;\n}\n/**\r\n * Creates a matrix from a vector translation\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat4.identity(dest);\r\n * mat4.translate(dest, dest, vec);\r\n *\r\n * @param {mat4} out mat4 receiving operation result\r\n * @param {ReadonlyVec3} v Translation vector\r\n * @returns {mat4} out\r\n */\n\nfunction fromTranslation(out, v) {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = 1;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 1;\n out[11] = 0;\n out[12] = v[0];\n out[13] = v[1];\n out[14] = v[2];\n out[15] = 1;\n return out;\n}\n/**\r\n * Creates a matrix from a vector scaling\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat4.identity(dest);\r\n * mat4.scale(dest, dest, vec);\r\n *\r\n * @param {mat4} out mat4 receiving operation result\r\n * @param {ReadonlyVec3} v Scaling vector\r\n * @returns {mat4} out\r\n */\n\nfunction fromScaling(out, v) {\n out[0] = v[0];\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = v[1];\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = v[2];\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n/**\r\n * Creates a matrix from a given angle around a given axis\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat4.identity(dest);\r\n * mat4.rotate(dest, dest, rad, axis);\r\n *\r\n * @param {mat4} out mat4 receiving operation result\r\n * @param {Number} rad the angle to rotate the matrix by\r\n * @param {ReadonlyVec3} axis the axis to rotate around\r\n * @returns {mat4} out\r\n */\n\nfunction fromRotation(out, rad, axis) {\n var x = axis[0],\n y = axis[1],\n z = axis[2];\n var len = Math.hypot(x, y, z);\n var s, c, t;\n\n if (len < glMatrix.EPSILON) {\n return null;\n }\n\n len = 1 / len;\n x *= len;\n y *= len;\n z *= len;\n s = Math.sin(rad);\n c = Math.cos(rad);\n t = 1 - c; // Perform rotation-specific matrix multiplication\n\n out[0] = x * x * t + c;\n out[1] = y * x * t + z * s;\n out[2] = z * x * t - y * s;\n out[3] = 0;\n out[4] = x * y * t - z * s;\n out[5] = y * y * t + c;\n out[6] = z * y * t + x * s;\n out[7] = 0;\n out[8] = x * z * t + y * s;\n out[9] = y * z * t - x * s;\n out[10] = z * z * t + c;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n/**\r\n * Creates a matrix from the given angle around the X axis\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat4.identity(dest);\r\n * mat4.rotateX(dest, dest, rad);\r\n *\r\n * @param {mat4} out mat4 receiving operation result\r\n * @param {Number} rad the angle to rotate the matrix by\r\n * @returns {mat4} out\r\n */\n\nfunction fromXRotation(out, rad) {\n var s = Math.sin(rad);\n var c = Math.cos(rad); // Perform axis-specific matrix multiplication\n\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = c;\n out[6] = s;\n out[7] = 0;\n out[8] = 0;\n out[9] = -s;\n out[10] = c;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n/**\r\n * Creates a matrix from the given angle around the Y axis\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat4.identity(dest);\r\n * mat4.rotateY(dest, dest, rad);\r\n *\r\n * @param {mat4} out mat4 receiving operation result\r\n * @param {Number} rad the angle to rotate the matrix by\r\n * @returns {mat4} out\r\n */\n\nfunction fromYRotation(out, rad) {\n var s = Math.sin(rad);\n var c = Math.cos(rad); // Perform axis-specific matrix multiplication\n\n out[0] = c;\n out[1] = 0;\n out[2] = -s;\n out[3] = 0;\n out[4] = 0;\n out[5] = 1;\n out[6] = 0;\n out[7] = 0;\n out[8] = s;\n out[9] = 0;\n out[10] = c;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n/**\r\n * Creates a matrix from the given angle around the Z axis\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat4.identity(dest);\r\n * mat4.rotateZ(dest, dest, rad);\r\n *\r\n * @param {mat4} out mat4 receiving operation result\r\n * @param {Number} rad the angle to rotate the matrix by\r\n * @returns {mat4} out\r\n */\n\nfunction fromZRotation(out, rad) {\n var s = Math.sin(rad);\n var c = Math.cos(rad); // Perform axis-specific matrix multiplication\n\n out[0] = c;\n out[1] = s;\n out[2] = 0;\n out[3] = 0;\n out[4] = -s;\n out[5] = c;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 1;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n/**\r\n * Creates a matrix from a quaternion rotation and vector translation\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat4.identity(dest);\r\n * mat4.translate(dest, vec);\r\n * let quatMat = mat4.create();\r\n * quat4.toMat4(quat, quatMat);\r\n * mat4.multiply(dest, quatMat);\r\n *\r\n * @param {mat4} out mat4 receiving operation result\r\n * @param {quat4} q Rotation quaternion\r\n * @param {ReadonlyVec3} v Translation vector\r\n * @returns {mat4} out\r\n */\n\nfunction fromRotationTranslation(out, q, v) {\n // Quaternion math\n var x = q[0],\n y = q[1],\n z = q[2],\n w = q[3];\n var x2 = x + x;\n var y2 = y + y;\n var z2 = z + z;\n var xx = x * x2;\n var xy = x * y2;\n var xz = x * z2;\n var yy = y * y2;\n var yz = y * z2;\n var zz = z * z2;\n var wx = w * x2;\n var wy = w * y2;\n var wz = w * z2;\n out[0] = 1 - (yy + zz);\n out[1] = xy + wz;\n out[2] = xz - wy;\n out[3] = 0;\n out[4] = xy - wz;\n out[5] = 1 - (xx + zz);\n out[6] = yz + wx;\n out[7] = 0;\n out[8] = xz + wy;\n out[9] = yz - wx;\n out[10] = 1 - (xx + yy);\n out[11] = 0;\n out[12] = v[0];\n out[13] = v[1];\n out[14] = v[2];\n out[15] = 1;\n return out;\n}\n/**\r\n * Creates a new mat4 from a dual quat.\r\n *\r\n * @param {mat4} out Matrix\r\n * @param {ReadonlyQuat2} a Dual Quaternion\r\n * @returns {mat4} mat4 receiving operation result\r\n */\n\nfunction fromQuat2(out, a) {\n var translation = new glMatrix.ARRAY_TYPE(3);\n var bx = -a[0],\n by = -a[1],\n bz = -a[2],\n bw = a[3],\n ax = a[4],\n ay = a[5],\n az = a[6],\n aw = a[7];\n var magnitude = bx * bx + by * by + bz * bz + bw * bw; //Only scale if it makes sense\n\n if (magnitude > 0) {\n translation[0] = (ax * bw + aw * bx + ay * bz - az * by) * 2 / magnitude;\n translation[1] = (ay * bw + aw * by + az * bx - ax * bz) * 2 / magnitude;\n translation[2] = (az * bw + aw * bz + ax * by - ay * bx) * 2 / magnitude;\n } else {\n translation[0] = (ax * bw + aw * bx + ay * bz - az * by) * 2;\n translation[1] = (ay * bw + aw * by + az * bx - ax * bz) * 2;\n translation[2] = (az * bw + aw * bz + ax * by - ay * bx) * 2;\n }\n\n fromRotationTranslation(out, a, translation);\n return out;\n}\n/**\r\n * Returns the translation vector component of a transformation\r\n * matrix. If a matrix is built with fromRotationTranslation,\r\n * the returned vector will be the same as the translation vector\r\n * originally supplied.\r\n * @param {vec3} out Vector to receive translation component\r\n * @param {ReadonlyMat4} mat Matrix to be decomposed (input)\r\n * @return {vec3} out\r\n */\n\nfunction getTranslation(out, mat) {\n out[0] = mat[12];\n out[1] = mat[13];\n out[2] = mat[14];\n return out;\n}\n/**\r\n * Returns the scaling factor component of a transformation\r\n * matrix. If a matrix is built with fromRotationTranslationScale\r\n * with a normalized Quaternion paramter, the returned vector will be\r\n * the same as the scaling vector\r\n * originally supplied.\r\n * @param {vec3} out Vector to receive scaling factor component\r\n * @param {ReadonlyMat4} mat Matrix to be decomposed (input)\r\n * @return {vec3} out\r\n */\n\nfunction getScaling(out, mat) {\n var m11 = mat[0];\n var m12 = mat[1];\n var m13 = mat[2];\n var m21 = mat[4];\n var m22 = mat[5];\n var m23 = mat[6];\n var m31 = mat[8];\n var m32 = mat[9];\n var m33 = mat[10];\n out[0] = Math.hypot(m11, m12, m13);\n out[1] = Math.hypot(m21, m22, m23);\n out[2] = Math.hypot(m31, m32, m33);\n return out;\n}\n/**\r\n * Returns a quaternion representing the rotational component\r\n * of a transformation matrix. If a matrix is built with\r\n * fromRotationTranslation, the returned quaternion will be the\r\n * same as the quaternion originally supplied.\r\n * @param {quat} out Quaternion to receive the rotation component\r\n * @param {ReadonlyMat4} mat Matrix to be decomposed (input)\r\n * @return {quat} out\r\n */\n\nfunction getRotation(out, mat) {\n var scaling = new glMatrix.ARRAY_TYPE(3);\n getScaling(scaling, mat);\n var is1 = 1 / scaling[0];\n var is2 = 1 / scaling[1];\n var is3 = 1 / scaling[2];\n var sm11 = mat[0] * is1;\n var sm12 = mat[1] * is2;\n var sm13 = mat[2] * is3;\n var sm21 = mat[4] * is1;\n var sm22 = mat[5] * is2;\n var sm23 = mat[6] * is3;\n var sm31 = mat[8] * is1;\n var sm32 = mat[9] * is2;\n var sm33 = mat[10] * is3;\n var trace = sm11 + sm22 + sm33;\n var S = 0;\n\n if (trace > 0) {\n S = Math.sqrt(trace + 1.0) * 2;\n out[3] = 0.25 * S;\n out[0] = (sm23 - sm32) / S;\n out[1] = (sm31 - sm13) / S;\n out[2] = (sm12 - sm21) / S;\n } else if (sm11 > sm22 && sm11 > sm33) {\n S = Math.sqrt(1.0 + sm11 - sm22 - sm33) * 2;\n out[3] = (sm23 - sm32) / S;\n out[0] = 0.25 * S;\n out[1] = (sm12 + sm21) / S;\n out[2] = (sm31 + sm13) / S;\n } else if (sm22 > sm33) {\n S = Math.sqrt(1.0 + sm22 - sm11 - sm33) * 2;\n out[3] = (sm31 - sm13) / S;\n out[0] = (sm12 + sm21) / S;\n out[1] = 0.25 * S;\n out[2] = (sm23 + sm32) / S;\n } else {\n S = Math.sqrt(1.0 + sm33 - sm11 - sm22) * 2;\n out[3] = (sm12 - sm21) / S;\n out[0] = (sm31 + sm13) / S;\n out[1] = (sm23 + sm32) / S;\n out[2] = 0.25 * S;\n }\n\n return out;\n}\n/**\r\n * Creates a matrix from a quaternion rotation, vector translation and vector scale\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat4.identity(dest);\r\n * mat4.translate(dest, vec);\r\n * let quatMat = mat4.create();\r\n * quat4.toMat4(quat, quatMat);\r\n * mat4.multiply(dest, quatMat);\r\n * mat4.scale(dest, scale)\r\n *\r\n * @param {mat4} out mat4 receiving operation result\r\n * @param {quat4} q Rotation quaternion\r\n * @param {ReadonlyVec3} v Translation vector\r\n * @param {ReadonlyVec3} s Scaling vector\r\n * @returns {mat4} out\r\n */\n\nfunction fromRotationTranslationScale(out, q, v, s) {\n // Quaternion math\n var x = q[0],\n y = q[1],\n z = q[2],\n w = q[3];\n var x2 = x + x;\n var y2 = y + y;\n var z2 = z + z;\n var xx = x * x2;\n var xy = x * y2;\n var xz = x * z2;\n var yy = y * y2;\n var yz = y * z2;\n var zz = z * z2;\n var wx = w * x2;\n var wy = w * y2;\n var wz = w * z2;\n var sx = s[0];\n var sy = s[1];\n var sz = s[2];\n out[0] = (1 - (yy + zz)) * sx;\n out[1] = (xy + wz) * sx;\n out[2] = (xz - wy) * sx;\n out[3] = 0;\n out[4] = (xy - wz) * sy;\n out[5] = (1 - (xx + zz)) * sy;\n out[6] = (yz + wx) * sy;\n out[7] = 0;\n out[8] = (xz + wy) * sz;\n out[9] = (yz - wx) * sz;\n out[10] = (1 - (xx + yy)) * sz;\n out[11] = 0;\n out[12] = v[0];\n out[13] = v[1];\n out[14] = v[2];\n out[15] = 1;\n return out;\n}\n/**\r\n * Creates a matrix from a quaternion rotation, vector translation and vector scale, rotating and scaling around the given origin\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat4.identity(dest);\r\n * mat4.translate(dest, vec);\r\n * mat4.translate(dest, origin);\r\n * let quatMat = mat4.create();\r\n * quat4.toMat4(quat, quatMat);\r\n * mat4.multiply(dest, quatMat);\r\n * mat4.scale(dest, scale)\r\n * mat4.translate(dest, negativeOrigin);\r\n *\r\n * @param {mat4} out mat4 receiving operation result\r\n * @param {quat4} q Rotation quaternion\r\n * @param {ReadonlyVec3} v Translation vector\r\n * @param {ReadonlyVec3} s Scaling vector\r\n * @param {ReadonlyVec3} o The origin vector around which to scale and rotate\r\n * @returns {mat4} out\r\n */\n\nfunction fromRotationTranslationScaleOrigin(out, q, v, s, o) {\n // Quaternion math\n var x = q[0],\n y = q[1],\n z = q[2],\n w = q[3];\n var x2 = x + x;\n var y2 = y + y;\n var z2 = z + z;\n var xx = x * x2;\n var xy = x * y2;\n var xz = x * z2;\n var yy = y * y2;\n var yz = y * z2;\n var zz = z * z2;\n var wx = w * x2;\n var wy = w * y2;\n var wz = w * z2;\n var sx = s[0];\n var sy = s[1];\n var sz = s[2];\n var ox = o[0];\n var oy = o[1];\n var oz = o[2];\n var out0 = (1 - (yy + zz)) * sx;\n var out1 = (xy + wz) * sx;\n var out2 = (xz - wy) * sx;\n var out4 = (xy - wz) * sy;\n var out5 = (1 - (xx + zz)) * sy;\n var out6 = (yz + wx) * sy;\n var out8 = (xz + wy) * sz;\n var out9 = (yz - wx) * sz;\n var out10 = (1 - (xx + yy)) * sz;\n out[0] = out0;\n out[1] = out1;\n out[2] = out2;\n out[3] = 0;\n out[4] = out4;\n out[5] = out5;\n out[6] = out6;\n out[7] = 0;\n out[8] = out8;\n out[9] = out9;\n out[10] = out10;\n out[11] = 0;\n out[12] = v[0] + ox - (out0 * ox + out4 * oy + out8 * oz);\n out[13] = v[1] + oy - (out1 * ox + out5 * oy + out9 * oz);\n out[14] = v[2] + oz - (out2 * ox + out6 * oy + out10 * oz);\n out[15] = 1;\n return out;\n}\n/**\r\n * Calculates a 4x4 matrix from the given quaternion\r\n *\r\n * @param {mat4} out mat4 receiving operation result\r\n * @param {ReadonlyQuat} q Quaternion to create matrix from\r\n *\r\n * @returns {mat4} out\r\n */\n\nfunction fromQuat(out, q) {\n var x = q[0],\n y = q[1],\n z = q[2],\n w = q[3];\n var x2 = x + x;\n var y2 = y + y;\n var z2 = z + z;\n var xx = x * x2;\n var yx = y * x2;\n var yy = y * y2;\n var zx = z * x2;\n var zy = z * y2;\n var zz = z * z2;\n var wx = w * x2;\n var wy = w * y2;\n var wz = w * z2;\n out[0] = 1 - yy - zz;\n out[1] = yx + wz;\n out[2] = zx - wy;\n out[3] = 0;\n out[4] = yx - wz;\n out[5] = 1 - xx - zz;\n out[6] = zy + wx;\n out[7] = 0;\n out[8] = zx + wy;\n out[9] = zy - wx;\n out[10] = 1 - xx - yy;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n/**\r\n * Generates a frustum matrix with the given bounds\r\n *\r\n * @param {mat4} out mat4 frustum matrix will be written into\r\n * @param {Number} left Left bound of the frustum\r\n * @param {Number} right Right bound of the frustum\r\n * @param {Number} bottom Bottom bound of the frustum\r\n * @param {Number} top Top bound of the frustum\r\n * @param {Number} near Near bound of the frustum\r\n * @param {Number} far Far bound of the frustum\r\n * @returns {mat4} out\r\n */\n\nfunction frustum(out, left, right, bottom, top, near, far) {\n var rl = 1 / (right - left);\n var tb = 1 / (top - bottom);\n var nf = 1 / (near - far);\n out[0] = near * 2 * rl;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = near * 2 * tb;\n out[6] = 0;\n out[7] = 0;\n out[8] = (right + left) * rl;\n out[9] = (top + bottom) * tb;\n out[10] = (far + near) * nf;\n out[11] = -1;\n out[12] = 0;\n out[13] = 0;\n out[14] = far * near * 2 * nf;\n out[15] = 0;\n return out;\n}\n/**\r\n * Generates a perspective projection matrix with the given bounds.\r\n * Passing null/undefined/no value for far will generate infinite projection matrix.\r\n *\r\n * @param {mat4} out mat4 frustum matrix will be written into\r\n * @param {number} fovy Vertical field of view in radians\r\n * @param {number} aspect Aspect ratio. typically viewport width/height\r\n * @param {number} near Near bound of the frustum\r\n * @param {number} far Far bound of the frustum, can be null or Infinity\r\n * @returns {mat4} out\r\n */\n\nfunction perspective(out, fovy, aspect, near, far) {\n var f = 1.0 / Math.tan(fovy / 2),\n nf;\n out[0] = f / aspect;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = f;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[11] = -1;\n out[12] = 0;\n out[13] = 0;\n out[15] = 0;\n\n if (far != null && far !== Infinity) {\n nf = 1 / (near - far);\n out[10] = (far + near) * nf;\n out[14] = 2 * far * near * nf;\n } else {\n out[10] = -1;\n out[14] = -2 * near;\n }\n\n return out;\n}\n/**\r\n * Generates a perspective projection matrix with the given field of view.\r\n * This is primarily useful for generating projection matrices to be used\r\n * with the still experiemental WebVR API.\r\n *\r\n * @param {mat4} out mat4 frustum matrix will be written into\r\n * @param {Object} fov Object containing the following values: upDegrees, downDegrees, leftDegrees, rightDegrees\r\n * @param {number} near Near bound of the frustum\r\n * @param {number} far Far bound of the frustum\r\n * @returns {mat4} out\r\n */\n\nfunction perspectiveFromFieldOfView(out, fov, near, far) {\n var upTan = Math.tan(fov.upDegrees * Math.PI / 180.0);\n var downTan = Math.tan(fov.downDegrees * Math.PI / 180.0);\n var leftTan = Math.tan(fov.leftDegrees * Math.PI / 180.0);\n var rightTan = Math.tan(fov.rightDegrees * Math.PI / 180.0);\n var xScale = 2.0 / (leftTan + rightTan);\n var yScale = 2.0 / (upTan + downTan);\n out[0] = xScale;\n out[1] = 0.0;\n out[2] = 0.0;\n out[3] = 0.0;\n out[4] = 0.0;\n out[5] = yScale;\n out[6] = 0.0;\n out[7] = 0.0;\n out[8] = -((leftTan - rightTan) * xScale * 0.5);\n out[9] = (upTan - downTan) * yScale * 0.5;\n out[10] = far / (near - far);\n out[11] = -1.0;\n out[12] = 0.0;\n out[13] = 0.0;\n out[14] = far * near / (near - far);\n out[15] = 0.0;\n return out;\n}\n/**\r\n * Generates a orthogonal projection matrix with the given bounds\r\n *\r\n * @param {mat4} out mat4 frustum matrix will be written into\r\n * @param {number} left Left bound of the frustum\r\n * @param {number} right Right bound of the frustum\r\n * @param {number} bottom Bottom bound of the frustum\r\n * @param {number} top Top bound of the frustum\r\n * @param {number} near Near bound of the frustum\r\n * @param {number} far Far bound of the frustum\r\n * @returns {mat4} out\r\n */\n\nfunction ortho(out, left, right, bottom, top, near, far) {\n var lr = 1 / (left - right);\n var bt = 1 / (bottom - top);\n var nf = 1 / (near - far);\n out[0] = -2 * lr;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = -2 * bt;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 2 * nf;\n out[11] = 0;\n out[12] = (left + right) * lr;\n out[13] = (top + bottom) * bt;\n out[14] = (far + near) * nf;\n out[15] = 1;\n return out;\n}\n/**\r\n * Generates a look-at matrix with the given eye position, focal point, and up axis.\r\n * If you want a matrix that actually makes an object look at another object, you should use targetTo instead.\r\n *\r\n * @param {mat4} out mat4 frustum matrix will be written into\r\n * @param {ReadonlyVec3} eye Position of the viewer\r\n * @param {ReadonlyVec3} center Point the viewer is looking at\r\n * @param {ReadonlyVec3} up vec3 pointing up\r\n * @returns {mat4} out\r\n */\n\nfunction lookAt(out, eye, center, up) {\n var x0, x1, x2, y0, y1, y2, z0, z1, z2, len;\n var eyex = eye[0];\n var eyey = eye[1];\n var eyez = eye[2];\n var upx = up[0];\n var upy = up[1];\n var upz = up[2];\n var centerx = center[0];\n var centery = center[1];\n var centerz = center[2];\n\n if (Math.abs(eyex - centerx) < glMatrix.EPSILON && Math.abs(eyey - centery) < glMatrix.EPSILON && Math.abs(eyez - centerz) < glMatrix.EPSILON) {\n return identity(out);\n }\n\n z0 = eyex - centerx;\n z1 = eyey - centery;\n z2 = eyez - centerz;\n len = 1 / Math.hypot(z0, z1, z2);\n z0 *= len;\n z1 *= len;\n z2 *= len;\n x0 = upy * z2 - upz * z1;\n x1 = upz * z0 - upx * z2;\n x2 = upx * z1 - upy * z0;\n len = Math.hypot(x0, x1, x2);\n\n if (!len) {\n x0 = 0;\n x1 = 0;\n x2 = 0;\n } else {\n len = 1 / len;\n x0 *= len;\n x1 *= len;\n x2 *= len;\n }\n\n y0 = z1 * x2 - z2 * x1;\n y1 = z2 * x0 - z0 * x2;\n y2 = z0 * x1 - z1 * x0;\n len = Math.hypot(y0, y1, y2);\n\n if (!len) {\n y0 = 0;\n y1 = 0;\n y2 = 0;\n } else {\n len = 1 / len;\n y0 *= len;\n y1 *= len;\n y2 *= len;\n }\n\n out[0] = x0;\n out[1] = y0;\n out[2] = z0;\n out[3] = 0;\n out[4] = x1;\n out[5] = y1;\n out[6] = z1;\n out[7] = 0;\n out[8] = x2;\n out[9] = y2;\n out[10] = z2;\n out[11] = 0;\n out[12] = -(x0 * eyex + x1 * eyey + x2 * eyez);\n out[13] = -(y0 * eyex + y1 * eyey + y2 * eyez);\n out[14] = -(z0 * eyex + z1 * eyey + z2 * eyez);\n out[15] = 1;\n return out;\n}\n/**\r\n * Generates a matrix that makes something look at something else.\r\n *\r\n * @param {mat4} out mat4 frustum matrix will be written into\r\n * @param {ReadonlyVec3} eye Position of the viewer\r\n * @param {ReadonlyVec3} center Point the viewer is looking at\r\n * @param {ReadonlyVec3} up vec3 pointing up\r\n * @returns {mat4} out\r\n */\n\nfunction targetTo(out, eye, target, up) {\n var eyex = eye[0],\n eyey = eye[1],\n eyez = eye[2],\n upx = up[0],\n upy = up[1],\n upz = up[2];\n var z0 = eyex - target[0],\n z1 = eyey - target[1],\n z2 = eyez - target[2];\n var len = z0 * z0 + z1 * z1 + z2 * z2;\n\n if (len > 0) {\n len = 1 / Math.sqrt(len);\n z0 *= len;\n z1 *= len;\n z2 *= len;\n }\n\n var x0 = upy * z2 - upz * z1,\n x1 = upz * z0 - upx * z2,\n x2 = upx * z1 - upy * z0;\n len = x0 * x0 + x1 * x1 + x2 * x2;\n\n if (len > 0) {\n len = 1 / Math.sqrt(len);\n x0 *= len;\n x1 *= len;\n x2 *= len;\n }\n\n out[0] = x0;\n out[1] = x1;\n out[2] = x2;\n out[3] = 0;\n out[4] = z1 * x2 - z2 * x1;\n out[5] = z2 * x0 - z0 * x2;\n out[6] = z0 * x1 - z1 * x0;\n out[7] = 0;\n out[8] = z0;\n out[9] = z1;\n out[10] = z2;\n out[11] = 0;\n out[12] = eyex;\n out[13] = eyey;\n out[14] = eyez;\n out[15] = 1;\n return out;\n}\n/**\r\n * Returns a string representation of a mat4\r\n *\r\n * @param {ReadonlyMat4} a matrix to represent as a string\r\n * @returns {String} string representation of the matrix\r\n */\n\nfunction mat4_str(a) {\n return "mat4(" + a[0] + ", " + a[1] + ", " + a[2] + ", " + a[3] + ", " + a[4] + ", " + a[5] + ", " + a[6] + ", " + a[7] + ", " + a[8] + ", " + a[9] + ", " + a[10] + ", " + a[11] + ", " + a[12] + ", " + a[13] + ", " + a[14] + ", " + a[15] + ")";\n}\n/**\r\n * Returns Frobenius norm of a mat4\r\n *\r\n * @param {ReadonlyMat4} a the matrix to calculate Frobenius norm of\r\n * @returns {Number} Frobenius norm\r\n */\n\nfunction frob(a) {\n return Math.hypot(a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], a[13], a[14], a[15]);\n}\n/**\r\n * Adds two mat4\'s\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {ReadonlyMat4} a the first operand\r\n * @param {ReadonlyMat4} b the second operand\r\n * @returns {mat4} out\r\n */\n\nfunction mat4_add(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n out[2] = a[2] + b[2];\n out[3] = a[3] + b[3];\n out[4] = a[4] + b[4];\n out[5] = a[5] + b[5];\n out[6] = a[6] + b[6];\n out[7] = a[7] + b[7];\n out[8] = a[8] + b[8];\n out[9] = a[9] + b[9];\n out[10] = a[10] + b[10];\n out[11] = a[11] + b[11];\n out[12] = a[12] + b[12];\n out[13] = a[13] + b[13];\n out[14] = a[14] + b[14];\n out[15] = a[15] + b[15];\n return out;\n}\n/**\r\n * Subtracts matrix b from matrix a\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {ReadonlyMat4} a the first operand\r\n * @param {ReadonlyMat4} b the second operand\r\n * @returns {mat4} out\r\n */\n\nfunction mat4_subtract(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n out[2] = a[2] - b[2];\n out[3] = a[3] - b[3];\n out[4] = a[4] - b[4];\n out[5] = a[5] - b[5];\n out[6] = a[6] - b[6];\n out[7] = a[7] - b[7];\n out[8] = a[8] - b[8];\n out[9] = a[9] - b[9];\n out[10] = a[10] - b[10];\n out[11] = a[11] - b[11];\n out[12] = a[12] - b[12];\n out[13] = a[13] - b[13];\n out[14] = a[14] - b[14];\n out[15] = a[15] - b[15];\n return out;\n}\n/**\r\n * Multiply each element of the matrix by a scalar.\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {ReadonlyMat4} a the matrix to scale\r\n * @param {Number} b amount to scale the matrix\'s elements by\r\n * @returns {mat4} out\r\n */\n\nfunction multiplyScalar(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n out[2] = a[2] * b;\n out[3] = a[3] * b;\n out[4] = a[4] * b;\n out[5] = a[5] * b;\n out[6] = a[6] * b;\n out[7] = a[7] * b;\n out[8] = a[8] * b;\n out[9] = a[9] * b;\n out[10] = a[10] * b;\n out[11] = a[11] * b;\n out[12] = a[12] * b;\n out[13] = a[13] * b;\n out[14] = a[14] * b;\n out[15] = a[15] * b;\n return out;\n}\n/**\r\n * Adds two mat4\'s after multiplying each element of the second operand by a scalar value.\r\n *\r\n * @param {mat4} out the receiving vector\r\n * @param {ReadonlyMat4} a the first operand\r\n * @param {ReadonlyMat4} b the second operand\r\n * @param {Number} scale the amount to scale b\'s elements by before adding\r\n * @returns {mat4} out\r\n */\n\nfunction multiplyScalarAndAdd(out, a, b, scale) {\n out[0] = a[0] + b[0] * scale;\n out[1] = a[1] + b[1] * scale;\n out[2] = a[2] + b[2] * scale;\n out[3] = a[3] + b[3] * scale;\n out[4] = a[4] + b[4] * scale;\n out[5] = a[5] + b[5] * scale;\n out[6] = a[6] + b[6] * scale;\n out[7] = a[7] + b[7] * scale;\n out[8] = a[8] + b[8] * scale;\n out[9] = a[9] + b[9] * scale;\n out[10] = a[10] + b[10] * scale;\n out[11] = a[11] + b[11] * scale;\n out[12] = a[12] + b[12] * scale;\n out[13] = a[13] + b[13] * scale;\n out[14] = a[14] + b[14] * scale;\n out[15] = a[15] + b[15] * scale;\n return out;\n}\n/**\r\n * Returns whether or not the matrices have exactly the same elements in the same position (when compared with ===)\r\n *\r\n * @param {ReadonlyMat4} a The first matrix.\r\n * @param {ReadonlyMat4} b The second matrix.\r\n * @returns {Boolean} True if the matrices are equal, false otherwise.\r\n */\n\nfunction mat4_exactEquals(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3] && a[4] === b[4] && a[5] === b[5] && a[6] === b[6] && a[7] === b[7] && a[8] === b[8] && a[9] === b[9] && a[10] === b[10] && a[11] === b[11] && a[12] === b[12] && a[13] === b[13] && a[14] === b[14] && a[15] === b[15];\n}\n/**\r\n * Returns whether or not the matrices have approximately the same elements in the same position.\r\n *\r\n * @param {ReadonlyMat4} a The first matrix.\r\n * @param {ReadonlyMat4} b The second matrix.\r\n * @returns {Boolean} True if the matrices are equal, false otherwise.\r\n */\n\nfunction mat4_equals(a, b) {\n var a0 = a[0],\n a1 = a[1],\n a2 = a[2],\n a3 = a[3];\n var a4 = a[4],\n a5 = a[5],\n a6 = a[6],\n a7 = a[7];\n var a8 = a[8],\n a9 = a[9],\n a10 = a[10],\n a11 = a[11];\n var a12 = a[12],\n a13 = a[13],\n a14 = a[14],\n a15 = a[15];\n var b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3];\n var b4 = b[4],\n b5 = b[5],\n b6 = b[6],\n b7 = b[7];\n var b8 = b[8],\n b9 = b[9],\n b10 = b[10],\n b11 = b[11];\n var b12 = b[12],\n b13 = b[13],\n b14 = b[14],\n b15 = b[15];\n return Math.abs(a0 - b0) <= EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3)) && Math.abs(a4 - b4) <= EPSILON * Math.max(1.0, Math.abs(a4), Math.abs(b4)) && Math.abs(a5 - b5) <= EPSILON * Math.max(1.0, Math.abs(a5), Math.abs(b5)) && Math.abs(a6 - b6) <= EPSILON * Math.max(1.0, Math.abs(a6), Math.abs(b6)) && Math.abs(a7 - b7) <= EPSILON * Math.max(1.0, Math.abs(a7), Math.abs(b7)) && Math.abs(a8 - b8) <= EPSILON * Math.max(1.0, Math.abs(a8), Math.abs(b8)) && Math.abs(a9 - b9) <= EPSILON * Math.max(1.0, Math.abs(a9), Math.abs(b9)) && Math.abs(a10 - b10) <= EPSILON * Math.max(1.0, Math.abs(a10), Math.abs(b10)) && Math.abs(a11 - b11) <= EPSILON * Math.max(1.0, Math.abs(a11), Math.abs(b11)) && Math.abs(a12 - b12) <= EPSILON * Math.max(1.0, Math.abs(a12), Math.abs(b12)) && Math.abs(a13 - b13) <= EPSILON * Math.max(1.0, Math.abs(a13), Math.abs(b13)) && Math.abs(a14 - b14) <= EPSILON * Math.max(1.0, Math.abs(a14), Math.abs(b14)) && Math.abs(a15 - b15) <= EPSILON * Math.max(1.0, Math.abs(a15), Math.abs(b15));\n}\n/**\r\n * Alias for {@link mat4.multiply}\r\n * @function\r\n */\n\nvar mat4_mul = (/* unused pure expression or super */ null && (mat4_multiply));\n/**\r\n * Alias for {@link mat4.subtract}\r\n * @function\r\n */\n\nvar mat4_sub = (/* unused pure expression or super */ null && (mat4_subtract));\n;// CONCATENATED MODULE: ./node_modules/gl-matrix/esm/vec2.js\n\n\n/**\r\n * 2 Dimensional Vector\r\n * @module vec2\r\n */\n\n/**\r\n * Creates a new, empty vec2\r\n *\r\n * @returns {vec2} a new 2D vector\r\n */\n\nfunction vec2_create() {\n var out = new ARRAY_TYPE(2);\n\n if (ARRAY_TYPE != Float32Array) {\n out[0] = 0;\n out[1] = 0;\n }\n\n return out;\n}\n/**\r\n * Creates a new vec2 initialized with values from an existing vector\r\n *\r\n * @param {ReadonlyVec2} a vector to clone\r\n * @returns {vec2} a new 2D vector\r\n */\n\nfunction vec2_clone(a) {\n var out = new glMatrix.ARRAY_TYPE(2);\n out[0] = a[0];\n out[1] = a[1];\n return out;\n}\n/**\r\n * Creates a new vec2 initialized with the given values\r\n *\r\n * @param {Number} x X component\r\n * @param {Number} y Y component\r\n * @returns {vec2} a new 2D vector\r\n */\n\nfunction vec2_fromValues(x, y) {\n var out = new glMatrix.ARRAY_TYPE(2);\n out[0] = x;\n out[1] = y;\n return out;\n}\n/**\r\n * Copy the values from one vec2 to another\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the source vector\r\n * @returns {vec2} out\r\n */\n\nfunction vec2_copy(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n return out;\n}\n/**\r\n * Set the components of a vec2 to the given values\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {Number} x X component\r\n * @param {Number} y Y component\r\n * @returns {vec2} out\r\n */\n\nfunction vec2_set(out, x, y) {\n out[0] = x;\n out[1] = y;\n return out;\n}\n/**\r\n * Adds two vec2\'s\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @returns {vec2} out\r\n */\n\nfunction vec2_add(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n return out;\n}\n/**\r\n * Subtracts vector b from vector a\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @returns {vec2} out\r\n */\n\nfunction vec2_subtract(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n return out;\n}\n/**\r\n * Multiplies two vec2\'s\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @returns {vec2} out\r\n */\n\nfunction vec2_multiply(out, a, b) {\n out[0] = a[0] * b[0];\n out[1] = a[1] * b[1];\n return out;\n}\n/**\r\n * Divides two vec2\'s\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @returns {vec2} out\r\n */\n\nfunction vec2_divide(out, a, b) {\n out[0] = a[0] / b[0];\n out[1] = a[1] / b[1];\n return out;\n}\n/**\r\n * Math.ceil the components of a vec2\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a vector to ceil\r\n * @returns {vec2} out\r\n */\n\nfunction vec2_ceil(out, a) {\n out[0] = Math.ceil(a[0]);\n out[1] = Math.ceil(a[1]);\n return out;\n}\n/**\r\n * Math.floor the components of a vec2\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a vector to floor\r\n * @returns {vec2} out\r\n */\n\nfunction vec2_floor(out, a) {\n out[0] = Math.floor(a[0]);\n out[1] = Math.floor(a[1]);\n return out;\n}\n/**\r\n * Returns the minimum of two vec2\'s\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @returns {vec2} out\r\n */\n\nfunction vec2_min(out, a, b) {\n out[0] = Math.min(a[0], b[0]);\n out[1] = Math.min(a[1], b[1]);\n return out;\n}\n/**\r\n * Returns the maximum of two vec2\'s\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @returns {vec2} out\r\n */\n\nfunction vec2_max(out, a, b) {\n out[0] = Math.max(a[0], b[0]);\n out[1] = Math.max(a[1], b[1]);\n return out;\n}\n/**\r\n * Math.round the components of a vec2\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a vector to round\r\n * @returns {vec2} out\r\n */\n\nfunction vec2_round(out, a) {\n out[0] = Math.round(a[0]);\n out[1] = Math.round(a[1]);\n return out;\n}\n/**\r\n * Scales a vec2 by a scalar number\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the vector to scale\r\n * @param {Number} b amount to scale the vector by\r\n * @returns {vec2} out\r\n */\n\nfunction vec2_scale(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n return out;\n}\n/**\r\n * Adds two vec2\'s after scaling the second operand by a scalar value\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @param {Number} scale the amount to scale b by before adding\r\n * @returns {vec2} out\r\n */\n\nfunction vec2_scaleAndAdd(out, a, b, scale) {\n out[0] = a[0] + b[0] * scale;\n out[1] = a[1] + b[1] * scale;\n return out;\n}\n/**\r\n * Calculates the euclidian distance between two vec2\'s\r\n *\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @returns {Number} distance between a and b\r\n */\n\nfunction vec2_distance(a, b) {\n var x = b[0] - a[0],\n y = b[1] - a[1];\n return Math.hypot(x, y);\n}\n/**\r\n * Calculates the squared euclidian distance between two vec2\'s\r\n *\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @returns {Number} squared distance between a and b\r\n */\n\nfunction vec2_squaredDistance(a, b) {\n var x = b[0] - a[0],\n y = b[1] - a[1];\n return x * x + y * y;\n}\n/**\r\n * Calculates the length of a vec2\r\n *\r\n * @param {ReadonlyVec2} a vector to calculate length of\r\n * @returns {Number} length of a\r\n */\n\nfunction vec2_length(a) {\n var x = a[0],\n y = a[1];\n return Math.hypot(x, y);\n}\n/**\r\n * Calculates the squared length of a vec2\r\n *\r\n * @param {ReadonlyVec2} a vector to calculate squared length of\r\n * @returns {Number} squared length of a\r\n */\n\nfunction vec2_squaredLength(a) {\n var x = a[0],\n y = a[1];\n return x * x + y * y;\n}\n/**\r\n * Negates the components of a vec2\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a vector to negate\r\n * @returns {vec2} out\r\n */\n\nfunction vec2_negate(out, a) {\n out[0] = -a[0];\n out[1] = -a[1];\n return out;\n}\n/**\r\n * Returns the inverse of the components of a vec2\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a vector to invert\r\n * @returns {vec2} out\r\n */\n\nfunction vec2_inverse(out, a) {\n out[0] = 1.0 / a[0];\n out[1] = 1.0 / a[1];\n return out;\n}\n/**\r\n * Normalize a vec2\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a vector to normalize\r\n * @returns {vec2} out\r\n */\n\nfunction vec2_normalize(out, a) {\n var x = a[0],\n y = a[1];\n var len = x * x + y * y;\n\n if (len > 0) {\n //TODO: evaluate use of glm_invsqrt here?\n len = 1 / Math.sqrt(len);\n }\n\n out[0] = a[0] * len;\n out[1] = a[1] * len;\n return out;\n}\n/**\r\n * Calculates the dot product of two vec2\'s\r\n *\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @returns {Number} dot product of a and b\r\n */\n\nfunction vec2_dot(a, b) {\n return a[0] * b[0] + a[1] * b[1];\n}\n/**\r\n * Computes the cross product of two vec2\'s\r\n * Note that the cross product must by definition produce a 3D vector\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @returns {vec3} out\r\n */\n\nfunction vec2_cross(out, a, b) {\n var z = a[0] * b[1] - a[1] * b[0];\n out[0] = out[1] = 0;\n out[2] = z;\n return out;\n}\n/**\r\n * Performs a linear interpolation between two vec2\'s\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\r\n * @returns {vec2} out\r\n */\n\nfunction vec2_lerp(out, a, b, t) {\n var ax = a[0],\n ay = a[1];\n out[0] = ax + t * (b[0] - ax);\n out[1] = ay + t * (b[1] - ay);\n return out;\n}\n/**\r\n * Generates a random vector with the given scale\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {Number} [scale] Length of the resulting vector. If ommitted, a unit vector will be returned\r\n * @returns {vec2} out\r\n */\n\nfunction vec2_random(out, scale) {\n scale = scale || 1.0;\n var r = glMatrix.RANDOM() * 2.0 * Math.PI;\n out[0] = Math.cos(r) * scale;\n out[1] = Math.sin(r) * scale;\n return out;\n}\n/**\r\n * Transforms the vec2 with a mat2\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the vector to transform\r\n * @param {ReadonlyMat2} m matrix to transform with\r\n * @returns {vec2} out\r\n */\n\nfunction transformMat2(out, a, m) {\n var x = a[0],\n y = a[1];\n out[0] = m[0] * x + m[2] * y;\n out[1] = m[1] * x + m[3] * y;\n return out;\n}\n/**\r\n * Transforms the vec2 with a mat2d\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the vector to transform\r\n * @param {ReadonlyMat2d} m matrix to transform with\r\n * @returns {vec2} out\r\n */\n\nfunction transformMat2d(out, a, m) {\n var x = a[0],\n y = a[1];\n out[0] = m[0] * x + m[2] * y + m[4];\n out[1] = m[1] * x + m[3] * y + m[5];\n return out;\n}\n/**\r\n * Transforms the vec2 with a mat3\r\n * 3rd vector component is implicitly \'1\'\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the vector to transform\r\n * @param {ReadonlyMat3} m matrix to transform with\r\n * @returns {vec2} out\r\n */\n\nfunction transformMat3(out, a, m) {\n var x = a[0],\n y = a[1];\n out[0] = m[0] * x + m[3] * y + m[6];\n out[1] = m[1] * x + m[4] * y + m[7];\n return out;\n}\n/**\r\n * Transforms the vec2 with a mat4\r\n * 3rd vector component is implicitly \'0\'\r\n * 4th vector component is implicitly \'1\'\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the vector to transform\r\n * @param {ReadonlyMat4} m matrix to transform with\r\n * @returns {vec2} out\r\n */\n\nfunction vec2_transformMat4(out, a, m) {\n var x = a[0];\n var y = a[1];\n out[0] = m[0] * x + m[4] * y + m[12];\n out[1] = m[1] * x + m[5] * y + m[13];\n return out;\n}\n/**\r\n * Rotate a 2D vector\r\n * @param {vec2} out The receiving vec2\r\n * @param {ReadonlyVec2} a The vec2 point to rotate\r\n * @param {ReadonlyVec2} b The origin of the rotation\r\n * @param {Number} rad The angle of rotation in radians\r\n * @returns {vec2} out\r\n */\n\nfunction vec2_rotate(out, a, b, rad) {\n //Translate point to the origin\n var p0 = a[0] - b[0],\n p1 = a[1] - b[1],\n sinC = Math.sin(rad),\n cosC = Math.cos(rad); //perform rotation and translate to correct position\n\n out[0] = p0 * cosC - p1 * sinC + b[0];\n out[1] = p0 * sinC + p1 * cosC + b[1];\n return out;\n}\n/**\r\n * Get the angle between two 2D vectors\r\n * @param {ReadonlyVec2} a The first operand\r\n * @param {ReadonlyVec2} b The second operand\r\n * @returns {Number} The angle in radians\r\n */\n\nfunction angle(a, b) {\n var x1 = a[0],\n y1 = a[1],\n x2 = b[0],\n y2 = b[1],\n // mag is the product of the magnitudes of a and b\n mag = Math.sqrt(x1 * x1 + y1 * y1) * Math.sqrt(x2 * x2 + y2 * y2),\n // mag &&.. short circuits if mag == 0\n cosine = mag && (x1 * x2 + y1 * y2) / mag; // Math.min(Math.max(cosine, -1), 1) clamps the cosine between -1 and 1\n\n return Math.acos(Math.min(Math.max(cosine, -1), 1));\n}\n/**\r\n * Set the components of a vec2 to zero\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @returns {vec2} out\r\n */\n\nfunction vec2_zero(out) {\n out[0] = 0.0;\n out[1] = 0.0;\n return out;\n}\n/**\r\n * Returns a string representation of a vector\r\n *\r\n * @param {ReadonlyVec2} a vector to represent as a string\r\n * @returns {String} string representation of the vector\r\n */\n\nfunction vec2_str(a) {\n return "vec2(" + a[0] + ", " + a[1] + ")";\n}\n/**\r\n * Returns whether or not the vectors exactly have the same elements in the same position (when compared with ===)\r\n *\r\n * @param {ReadonlyVec2} a The first vector.\r\n * @param {ReadonlyVec2} b The second vector.\r\n * @returns {Boolean} True if the vectors are equal, false otherwise.\r\n */\n\nfunction vec2_exactEquals(a, b) {\n return a[0] === b[0] && a[1] === b[1];\n}\n/**\r\n * Returns whether or not the vectors have approximately the same elements in the same position.\r\n *\r\n * @param {ReadonlyVec2} a The first vector.\r\n * @param {ReadonlyVec2} b The second vector.\r\n * @returns {Boolean} True if the vectors are equal, false otherwise.\r\n */\n\nfunction vec2_equals(a, b) {\n var a0 = a[0],\n a1 = a[1];\n var b0 = b[0],\n b1 = b[1];\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1));\n}\n/**\r\n * Alias for {@link vec2.length}\r\n * @function\r\n */\n\nvar vec2_len = (/* unused pure expression or super */ null && (vec2_length));\n/**\r\n * Alias for {@link vec2.subtract}\r\n * @function\r\n */\n\nvar vec2_sub = vec2_subtract;\n/**\r\n * Alias for {@link vec2.multiply}\r\n * @function\r\n */\n\nvar vec2_mul = (/* unused pure expression or super */ null && (vec2_multiply));\n/**\r\n * Alias for {@link vec2.divide}\r\n * @function\r\n */\n\nvar vec2_div = (/* unused pure expression or super */ null && (vec2_divide));\n/**\r\n * Alias for {@link vec2.distance}\r\n * @function\r\n */\n\nvar vec2_dist = (/* unused pure expression or super */ null && (vec2_distance));\n/**\r\n * Alias for {@link vec2.squaredDistance}\r\n * @function\r\n */\n\nvar vec2_sqrDist = (/* unused pure expression or super */ null && (vec2_squaredDistance));\n/**\r\n * Alias for {@link vec2.squaredLength}\r\n * @function\r\n */\n\nvar vec2_sqrLen = (/* unused pure expression or super */ null && (vec2_squaredLength));\n/**\r\n * Perform some operation over an array of vec2s.\r\n *\r\n * @param {Array} a the array of vectors to iterate over\r\n * @param {Number} stride Number of elements between the start of each vec2. If 0 assumes tightly packed\r\n * @param {Number} offset Number of elements to skip at the beginning of the array\r\n * @param {Number} count Number of vec2s to iterate over. If 0 iterates over entire array\r\n * @param {Function} fn Function to call for each vector in the array\r\n * @param {Object} [arg] additional argument to pass to fn\r\n * @returns {Array} a\r\n * @function\r\n */\n\nvar vec2_forEach = function () {\n var vec = vec2_create();\n return function (a, stride, offset, count, fn, arg) {\n var i, l;\n\n if (!stride) {\n stride = 2;\n }\n\n if (!offset) {\n offset = 0;\n }\n\n if (count) {\n l = Math.min(count * stride + offset, a.length);\n } else {\n l = a.length;\n }\n\n for (i = offset; i < l; i += stride) {\n vec[0] = a[i];\n vec[1] = a[i + 1];\n fn(vec, vec, arg);\n a[i] = vec[0];\n a[i + 1] = vec[1];\n }\n\n return a;\n };\n}();\n;// CONCATENATED MODULE: ./node_modules/gl-matrix/esm/vec3.js\n\n\n/**\r\n * 3 Dimensional Vector\r\n * @module vec3\r\n */\n\n/**\r\n * Creates a new, empty vec3\r\n *\r\n * @returns {vec3} a new 3D vector\r\n */\n\nfunction vec3_create() {\n var out = new ARRAY_TYPE(3);\n\n if (ARRAY_TYPE != Float32Array) {\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n }\n\n return out;\n}\n/**\r\n * Creates a new vec3 initialized with values from an existing vector\r\n *\r\n * @param {ReadonlyVec3} a vector to clone\r\n * @returns {vec3} a new 3D vector\r\n */\n\nfunction vec3_clone(a) {\n var out = new glMatrix.ARRAY_TYPE(3);\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n return out;\n}\n/**\r\n * Calculates the length of a vec3\r\n *\r\n * @param {ReadonlyVec3} a vector to calculate length of\r\n * @returns {Number} length of a\r\n */\n\nfunction vec3_length(a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n return Math.hypot(x, y, z);\n}\n/**\r\n * Creates a new vec3 initialized with the given values\r\n *\r\n * @param {Number} x X component\r\n * @param {Number} y Y component\r\n * @param {Number} z Z component\r\n * @returns {vec3} a new 3D vector\r\n */\n\nfunction vec3_fromValues(x, y, z) {\n var out = new glMatrix.ARRAY_TYPE(3);\n out[0] = x;\n out[1] = y;\n out[2] = z;\n return out;\n}\n/**\r\n * Copy the values from one vec3 to another\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the source vector\r\n * @returns {vec3} out\r\n */\n\nfunction vec3_copy(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n return out;\n}\n/**\r\n * Set the components of a vec3 to the given values\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {Number} x X component\r\n * @param {Number} y Y component\r\n * @param {Number} z Z component\r\n * @returns {vec3} out\r\n */\n\nfunction vec3_set(out, x, y, z) {\n out[0] = x;\n out[1] = y;\n out[2] = z;\n return out;\n}\n/**\r\n * Adds two vec3\'s\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @returns {vec3} out\r\n */\n\nfunction vec3_add(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n out[2] = a[2] + b[2];\n return out;\n}\n/**\r\n * Subtracts vector b from vector a\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @returns {vec3} out\r\n */\n\nfunction vec3_subtract(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n out[2] = a[2] - b[2];\n return out;\n}\n/**\r\n * Multiplies two vec3\'s\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @returns {vec3} out\r\n */\n\nfunction vec3_multiply(out, a, b) {\n out[0] = a[0] * b[0];\n out[1] = a[1] * b[1];\n out[2] = a[2] * b[2];\n return out;\n}\n/**\r\n * Divides two vec3\'s\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @returns {vec3} out\r\n */\n\nfunction vec3_divide(out, a, b) {\n out[0] = a[0] / b[0];\n out[1] = a[1] / b[1];\n out[2] = a[2] / b[2];\n return out;\n}\n/**\r\n * Math.ceil the components of a vec3\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a vector to ceil\r\n * @returns {vec3} out\r\n */\n\nfunction vec3_ceil(out, a) {\n out[0] = Math.ceil(a[0]);\n out[1] = Math.ceil(a[1]);\n out[2] = Math.ceil(a[2]);\n return out;\n}\n/**\r\n * Math.floor the components of a vec3\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a vector to floor\r\n * @returns {vec3} out\r\n */\n\nfunction vec3_floor(out, a) {\n out[0] = Math.floor(a[0]);\n out[1] = Math.floor(a[1]);\n out[2] = Math.floor(a[2]);\n return out;\n}\n/**\r\n * Returns the minimum of two vec3\'s\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @returns {vec3} out\r\n */\n\nfunction vec3_min(out, a, b) {\n out[0] = Math.min(a[0], b[0]);\n out[1] = Math.min(a[1], b[1]);\n out[2] = Math.min(a[2], b[2]);\n return out;\n}\n/**\r\n * Returns the maximum of two vec3\'s\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @returns {vec3} out\r\n */\n\nfunction vec3_max(out, a, b) {\n out[0] = Math.max(a[0], b[0]);\n out[1] = Math.max(a[1], b[1]);\n out[2] = Math.max(a[2], b[2]);\n return out;\n}\n/**\r\n * Math.round the components of a vec3\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a vector to round\r\n * @returns {vec3} out\r\n */\n\nfunction vec3_round(out, a) {\n out[0] = Math.round(a[0]);\n out[1] = Math.round(a[1]);\n out[2] = Math.round(a[2]);\n return out;\n}\n/**\r\n * Scales a vec3 by a scalar number\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the vector to scale\r\n * @param {Number} b amount to scale the vector by\r\n * @returns {vec3} out\r\n */\n\nfunction vec3_scale(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n out[2] = a[2] * b;\n return out;\n}\n/**\r\n * Adds two vec3\'s after scaling the second operand by a scalar value\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @param {Number} scale the amount to scale b by before adding\r\n * @returns {vec3} out\r\n */\n\nfunction vec3_scaleAndAdd(out, a, b, scale) {\n out[0] = a[0] + b[0] * scale;\n out[1] = a[1] + b[1] * scale;\n out[2] = a[2] + b[2] * scale;\n return out;\n}\n/**\r\n * Calculates the euclidian distance between two vec3\'s\r\n *\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @returns {Number} distance between a and b\r\n */\n\nfunction vec3_distance(a, b) {\n var x = b[0] - a[0];\n var y = b[1] - a[1];\n var z = b[2] - a[2];\n return Math.hypot(x, y, z);\n}\n/**\r\n * Calculates the squared euclidian distance between two vec3\'s\r\n *\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @returns {Number} squared distance between a and b\r\n */\n\nfunction vec3_squaredDistance(a, b) {\n var x = b[0] - a[0];\n var y = b[1] - a[1];\n var z = b[2] - a[2];\n return x * x + y * y + z * z;\n}\n/**\r\n * Calculates the squared length of a vec3\r\n *\r\n * @param {ReadonlyVec3} a vector to calculate squared length of\r\n * @returns {Number} squared length of a\r\n */\n\nfunction vec3_squaredLength(a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n return x * x + y * y + z * z;\n}\n/**\r\n * Negates the components of a vec3\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a vector to negate\r\n * @returns {vec3} out\r\n */\n\nfunction vec3_negate(out, a) {\n out[0] = -a[0];\n out[1] = -a[1];\n out[2] = -a[2];\n return out;\n}\n/**\r\n * Returns the inverse of the components of a vec3\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a vector to invert\r\n * @returns {vec3} out\r\n */\n\nfunction vec3_inverse(out, a) {\n out[0] = 1.0 / a[0];\n out[1] = 1.0 / a[1];\n out[2] = 1.0 / a[2];\n return out;\n}\n/**\r\n * Normalize a vec3\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a vector to normalize\r\n * @returns {vec3} out\r\n */\n\nfunction vec3_normalize(out, a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n var len = x * x + y * y + z * z;\n\n if (len > 0) {\n //TODO: evaluate use of glm_invsqrt here?\n len = 1 / Math.sqrt(len);\n }\n\n out[0] = a[0] * len;\n out[1] = a[1] * len;\n out[2] = a[2] * len;\n return out;\n}\n/**\r\n * Calculates the dot product of two vec3\'s\r\n *\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @returns {Number} dot product of a and b\r\n */\n\nfunction vec3_dot(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n}\n/**\r\n * Computes the cross product of two vec3\'s\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @returns {vec3} out\r\n */\n\nfunction vec3_cross(out, a, b) {\n var ax = a[0],\n ay = a[1],\n az = a[2];\n var bx = b[0],\n by = b[1],\n bz = b[2];\n out[0] = ay * bz - az * by;\n out[1] = az * bx - ax * bz;\n out[2] = ax * by - ay * bx;\n return out;\n}\n/**\r\n * Performs a linear interpolation between two vec3\'s\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\r\n * @returns {vec3} out\r\n */\n\nfunction vec3_lerp(out, a, b, t) {\n var ax = a[0];\n var ay = a[1];\n var az = a[2];\n out[0] = ax + t * (b[0] - ax);\n out[1] = ay + t * (b[1] - ay);\n out[2] = az + t * (b[2] - az);\n return out;\n}\n/**\r\n * Performs a hermite interpolation with two control points\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @param {ReadonlyVec3} c the third operand\r\n * @param {ReadonlyVec3} d the fourth operand\r\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\r\n * @returns {vec3} out\r\n */\n\nfunction hermite(out, a, b, c, d, t) {\n var factorTimes2 = t * t;\n var factor1 = factorTimes2 * (2 * t - 3) + 1;\n var factor2 = factorTimes2 * (t - 2) + t;\n var factor3 = factorTimes2 * (t - 1);\n var factor4 = factorTimes2 * (3 - 2 * t);\n out[0] = a[0] * factor1 + b[0] * factor2 + c[0] * factor3 + d[0] * factor4;\n out[1] = a[1] * factor1 + b[1] * factor2 + c[1] * factor3 + d[1] * factor4;\n out[2] = a[2] * factor1 + b[2] * factor2 + c[2] * factor3 + d[2] * factor4;\n return out;\n}\n/**\r\n * Performs a bezier interpolation with two control points\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @param {ReadonlyVec3} c the third operand\r\n * @param {ReadonlyVec3} d the fourth operand\r\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\r\n * @returns {vec3} out\r\n */\n\nfunction bezier(out, a, b, c, d, t) {\n var inverseFactor = 1 - t;\n var inverseFactorTimesTwo = inverseFactor * inverseFactor;\n var factorTimes2 = t * t;\n var factor1 = inverseFactorTimesTwo * inverseFactor;\n var factor2 = 3 * t * inverseFactorTimesTwo;\n var factor3 = 3 * factorTimes2 * inverseFactor;\n var factor4 = factorTimes2 * t;\n out[0] = a[0] * factor1 + b[0] * factor2 + c[0] * factor3 + d[0] * factor4;\n out[1] = a[1] * factor1 + b[1] * factor2 + c[1] * factor3 + d[1] * factor4;\n out[2] = a[2] * factor1 + b[2] * factor2 + c[2] * factor3 + d[2] * factor4;\n return out;\n}\n/**\r\n * Generates a random vector with the given scale\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {Number} [scale] Length of the resulting vector. If ommitted, a unit vector will be returned\r\n * @returns {vec3} out\r\n */\n\nfunction vec3_random(out, scale) {\n scale = scale || 1.0;\n var r = glMatrix.RANDOM() * 2.0 * Math.PI;\n var z = glMatrix.RANDOM() * 2.0 - 1.0;\n var zScale = Math.sqrt(1.0 - z * z) * scale;\n out[0] = Math.cos(r) * zScale;\n out[1] = Math.sin(r) * zScale;\n out[2] = z * scale;\n return out;\n}\n/**\r\n * Transforms the vec3 with a mat4.\r\n * 4th vector component is implicitly \'1\'\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the vector to transform\r\n * @param {ReadonlyMat4} m matrix to transform with\r\n * @returns {vec3} out\r\n */\n\nfunction vec3_transformMat4(out, a, m) {\n var x = a[0],\n y = a[1],\n z = a[2];\n var w = m[3] * x + m[7] * y + m[11] * z + m[15];\n w = w || 1.0;\n out[0] = (m[0] * x + m[4] * y + m[8] * z + m[12]) / w;\n out[1] = (m[1] * x + m[5] * y + m[9] * z + m[13]) / w;\n out[2] = (m[2] * x + m[6] * y + m[10] * z + m[14]) / w;\n return out;\n}\n/**\r\n * Transforms the vec3 with a mat3.\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the vector to transform\r\n * @param {ReadonlyMat3} m the 3x3 matrix to transform with\r\n * @returns {vec3} out\r\n */\n\nfunction vec3_transformMat3(out, a, m) {\n var x = a[0],\n y = a[1],\n z = a[2];\n out[0] = x * m[0] + y * m[3] + z * m[6];\n out[1] = x * m[1] + y * m[4] + z * m[7];\n out[2] = x * m[2] + y * m[5] + z * m[8];\n return out;\n}\n/**\r\n * Transforms the vec3 with a quat\r\n * Can also be used for dual quaternions. (Multiply it with the real part)\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the vector to transform\r\n * @param {ReadonlyQuat} q quaternion to transform with\r\n * @returns {vec3} out\r\n */\n\nfunction vec3_transformQuat(out, a, q) {\n // benchmarks: https://jsperf.com/quaternion-transform-vec3-implementations-fixed\n var qx = q[0],\n qy = q[1],\n qz = q[2],\n qw = q[3];\n var x = a[0],\n y = a[1],\n z = a[2]; // var qvec = [qx, qy, qz];\n // var uv = vec3.cross([], qvec, a);\n\n var uvx = qy * z - qz * y,\n uvy = qz * x - qx * z,\n uvz = qx * y - qy * x; // var uuv = vec3.cross([], qvec, uv);\n\n var uuvx = qy * uvz - qz * uvy,\n uuvy = qz * uvx - qx * uvz,\n uuvz = qx * uvy - qy * uvx; // vec3.scale(uv, uv, 2 * w);\n\n var w2 = qw * 2;\n uvx *= w2;\n uvy *= w2;\n uvz *= w2; // vec3.scale(uuv, uuv, 2);\n\n uuvx *= 2;\n uuvy *= 2;\n uuvz *= 2; // return vec3.add(out, a, vec3.add(out, uv, uuv));\n\n out[0] = x + uvx + uuvx;\n out[1] = y + uvy + uuvy;\n out[2] = z + uvz + uuvz;\n return out;\n}\n/**\r\n * Rotate a 3D vector around the x-axis\r\n * @param {vec3} out The receiving vec3\r\n * @param {ReadonlyVec3} a The vec3 point to rotate\r\n * @param {ReadonlyVec3} b The origin of the rotation\r\n * @param {Number} rad The angle of rotation in radians\r\n * @returns {vec3} out\r\n */\n\nfunction vec3_rotateX(out, a, b, rad) {\n var p = [],\n r = []; //Translate point to the origin\n\n p[0] = a[0] - b[0];\n p[1] = a[1] - b[1];\n p[2] = a[2] - b[2]; //perform rotation\n\n r[0] = p[0];\n r[1] = p[1] * Math.cos(rad) - p[2] * Math.sin(rad);\n r[2] = p[1] * Math.sin(rad) + p[2] * Math.cos(rad); //translate to correct position\n\n out[0] = r[0] + b[0];\n out[1] = r[1] + b[1];\n out[2] = r[2] + b[2];\n return out;\n}\n/**\r\n * Rotate a 3D vector around the y-axis\r\n * @param {vec3} out The receiving vec3\r\n * @param {ReadonlyVec3} a The vec3 point to rotate\r\n * @param {ReadonlyVec3} b The origin of the rotation\r\n * @param {Number} rad The angle of rotation in radians\r\n * @returns {vec3} out\r\n */\n\nfunction vec3_rotateY(out, a, b, rad) {\n var p = [],\n r = []; //Translate point to the origin\n\n p[0] = a[0] - b[0];\n p[1] = a[1] - b[1];\n p[2] = a[2] - b[2]; //perform rotation\n\n r[0] = p[2] * Math.sin(rad) + p[0] * Math.cos(rad);\n r[1] = p[1];\n r[2] = p[2] * Math.cos(rad) - p[0] * Math.sin(rad); //translate to correct position\n\n out[0] = r[0] + b[0];\n out[1] = r[1] + b[1];\n out[2] = r[2] + b[2];\n return out;\n}\n/**\r\n * Rotate a 3D vector around the z-axis\r\n * @param {vec3} out The receiving vec3\r\n * @param {ReadonlyVec3} a The vec3 point to rotate\r\n * @param {ReadonlyVec3} b The origin of the rotation\r\n * @param {Number} rad The angle of rotation in radians\r\n * @returns {vec3} out\r\n */\n\nfunction vec3_rotateZ(out, a, b, rad) {\n var p = [],\n r = []; //Translate point to the origin\n\n p[0] = a[0] - b[0];\n p[1] = a[1] - b[1];\n p[2] = a[2] - b[2]; //perform rotation\n\n r[0] = p[0] * Math.cos(rad) - p[1] * Math.sin(rad);\n r[1] = p[0] * Math.sin(rad) + p[1] * Math.cos(rad);\n r[2] = p[2]; //translate to correct position\n\n out[0] = r[0] + b[0];\n out[1] = r[1] + b[1];\n out[2] = r[2] + b[2];\n return out;\n}\n/**\r\n * Get the angle between two 3D vectors\r\n * @param {ReadonlyVec3} a The first operand\r\n * @param {ReadonlyVec3} b The second operand\r\n * @returns {Number} The angle in radians\r\n */\n\nfunction vec3_angle(a, b) {\n var ax = a[0],\n ay = a[1],\n az = a[2],\n bx = b[0],\n by = b[1],\n bz = b[2],\n mag1 = Math.sqrt(ax * ax + ay * ay + az * az),\n mag2 = Math.sqrt(bx * bx + by * by + bz * bz),\n mag = mag1 * mag2,\n cosine = mag && vec3_dot(a, b) / mag;\n return Math.acos(Math.min(Math.max(cosine, -1), 1));\n}\n/**\r\n * Set the components of a vec3 to zero\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @returns {vec3} out\r\n */\n\nfunction vec3_zero(out) {\n out[0] = 0.0;\n out[1] = 0.0;\n out[2] = 0.0;\n return out;\n}\n/**\r\n * Returns a string representation of a vector\r\n *\r\n * @param {ReadonlyVec3} a vector to represent as a string\r\n * @returns {String} string representation of the vector\r\n */\n\nfunction vec3_str(a) {\n return "vec3(" + a[0] + ", " + a[1] + ", " + a[2] + ")";\n}\n/**\r\n * Returns whether or not the vectors have exactly the same elements in the same position (when compared with ===)\r\n *\r\n * @param {ReadonlyVec3} a The first vector.\r\n * @param {ReadonlyVec3} b The second vector.\r\n * @returns {Boolean} True if the vectors are equal, false otherwise.\r\n */\n\nfunction vec3_exactEquals(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2];\n}\n/**\r\n * Returns whether or not the vectors have approximately the same elements in the same position.\r\n *\r\n * @param {ReadonlyVec3} a The first vector.\r\n * @param {ReadonlyVec3} b The second vector.\r\n * @returns {Boolean} True if the vectors are equal, false otherwise.\r\n */\n\nfunction vec3_equals(a, b) {\n var a0 = a[0],\n a1 = a[1],\n a2 = a[2];\n var b0 = b[0],\n b1 = b[1],\n b2 = b[2];\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2));\n}\n/**\r\n * Alias for {@link vec3.subtract}\r\n * @function\r\n */\n\nvar vec3_sub = (/* unused pure expression or super */ null && (vec3_subtract));\n/**\r\n * Alias for {@link vec3.multiply}\r\n * @function\r\n */\n\nvar vec3_mul = vec3_multiply;\n/**\r\n * Alias for {@link vec3.divide}\r\n * @function\r\n */\n\nvar vec3_div = (/* unused pure expression or super */ null && (vec3_divide));\n/**\r\n * Alias for {@link vec3.distance}\r\n * @function\r\n */\n\nvar vec3_dist = (/* unused pure expression or super */ null && (vec3_distance));\n/**\r\n * Alias for {@link vec3.squaredDistance}\r\n * @function\r\n */\n\nvar vec3_sqrDist = (/* unused pure expression or super */ null && (vec3_squaredDistance));\n/**\r\n * Alias for {@link vec3.length}\r\n * @function\r\n */\n\nvar vec3_len = (/* unused pure expression or super */ null && (vec3_length));\n/**\r\n * Alias for {@link vec3.squaredLength}\r\n * @function\r\n */\n\nvar vec3_sqrLen = (/* unused pure expression or super */ null && (vec3_squaredLength));\n/**\r\n * Perform some operation over an array of vec3s.\r\n *\r\n * @param {Array} a the array of vectors to iterate over\r\n * @param {Number} stride Number of elements between the start of each vec3. If 0 assumes tightly packed\r\n * @param {Number} offset Number of elements to skip at the beginning of the array\r\n * @param {Number} count Number of vec3s to iterate over. If 0 iterates over entire array\r\n * @param {Function} fn Function to call for each vector in the array\r\n * @param {Object} [arg] additional argument to pass to fn\r\n * @returns {Array} a\r\n * @function\r\n */\n\nvar vec3_forEach = function () {\n var vec = vec3_create();\n return function (a, stride, offset, count, fn, arg) {\n var i, l;\n\n if (!stride) {\n stride = 3;\n }\n\n if (!offset) {\n offset = 0;\n }\n\n if (count) {\n l = Math.min(count * stride + offset, a.length);\n } else {\n l = a.length;\n }\n\n for (i = offset; i < l; i += stride) {\n vec[0] = a[i];\n vec[1] = a[i + 1];\n vec[2] = a[i + 2];\n fn(vec, vec, arg);\n a[i] = vec[0];\n a[i + 1] = vec[1];\n a[i + 2] = vec[2];\n }\n\n return a;\n };\n}();\n;// CONCATENATED MODULE: ./node_modules/@math.gl/web-mercator/dist/esm/assert.js\nfunction assert_assert(condition, message) {\n if (!condition) {\n throw new Error(message || \'@math.gl/web-mercator: assertion failed.\');\n }\n}\n;// CONCATENATED MODULE: ./node_modules/@math.gl/web-mercator/dist/esm/web-mercator-utils.js\n\n\n\n\n\n\nvar PI = Math.PI;\nvar PI_4 = PI / 4;\nvar DEGREES_TO_RADIANS = PI / 180;\nvar RADIANS_TO_DEGREES = 180 / PI;\nvar TILE_SIZE = 512;\nvar EARTH_CIRCUMFERENCE = 40.03e6;\nvar DEFAULT_ALTITUDE = 1.5;\nfunction zoomToScale(zoom) {\n return Math.pow(2, zoom);\n}\nfunction scaleToZoom(scale) {\n return log2(scale);\n}\nfunction lngLatToWorld(_ref) {\n var _ref2 = slicedToArray_slicedToArray(_ref, 2),\n lng = _ref2[0],\n lat = _ref2[1];\n\n assert_assert(Number.isFinite(lng));\n assert_assert(Number.isFinite(lat) && lat >= -90 && lat <= 90, \'invalid latitude\');\n var lambda2 = lng * DEGREES_TO_RADIANS;\n var phi2 = lat * DEGREES_TO_RADIANS;\n var x = TILE_SIZE * (lambda2 + PI) / (2 * PI);\n var y = TILE_SIZE * (PI + Math.log(Math.tan(PI_4 + phi2 * 0.5))) / (2 * PI);\n return [x, y];\n}\nfunction worldToLngLat(_ref3) {\n var _ref4 = slicedToArray_slicedToArray(_ref3, 2),\n x = _ref4[0],\n y = _ref4[1];\n\n var lambda2 = x / TILE_SIZE * (2 * PI) - PI;\n var phi2 = 2 * (Math.atan(Math.exp(y / TILE_SIZE * (2 * PI) - PI)) - PI_4);\n return [lambda2 * RADIANS_TO_DEGREES, phi2 * RADIANS_TO_DEGREES];\n}\nfunction getMeterZoom(_ref5) {\n var latitude = _ref5.latitude;\n assert(Number.isFinite(latitude));\n var latCosine = Math.cos(latitude * DEGREES_TO_RADIANS);\n return scaleToZoom(EARTH_CIRCUMFERENCE * latCosine) - 9;\n}\nfunction getDistanceScales(_ref6) {\n var latitude = _ref6.latitude,\n longitude = _ref6.longitude,\n _ref6$highPrecision = _ref6.highPrecision,\n highPrecision = _ref6$highPrecision === void 0 ? false : _ref6$highPrecision;\n assert_assert(Number.isFinite(latitude) && Number.isFinite(longitude));\n var result = {};\n var worldSize = TILE_SIZE;\n var latCosine = Math.cos(latitude * DEGREES_TO_RADIANS);\n var unitsPerDegreeX = worldSize / 360;\n var unitsPerDegreeY = unitsPerDegreeX / latCosine;\n var altUnitsPerMeter = worldSize / EARTH_CIRCUMFERENCE / latCosine;\n result.unitsPerMeter = [altUnitsPerMeter, altUnitsPerMeter, altUnitsPerMeter];\n result.metersPerUnit = [1 / altUnitsPerMeter, 1 / altUnitsPerMeter, 1 / altUnitsPerMeter];\n result.unitsPerDegree = [unitsPerDegreeX, unitsPerDegreeY, altUnitsPerMeter];\n result.degreesPerUnit = [1 / unitsPerDegreeX, 1 / unitsPerDegreeY, 1 / altUnitsPerMeter];\n\n if (highPrecision) {\n var latCosine2 = DEGREES_TO_RADIANS * Math.tan(latitude * DEGREES_TO_RADIANS) / latCosine;\n var unitsPerDegreeY2 = unitsPerDegreeX * latCosine2 / 2;\n var altUnitsPerDegree2 = worldSize / EARTH_CIRCUMFERENCE * latCosine2;\n var altUnitsPerMeter2 = altUnitsPerDegree2 / unitsPerDegreeY * altUnitsPerMeter;\n result.unitsPerDegree2 = [0, unitsPerDegreeY2, altUnitsPerDegree2];\n result.unitsPerMeter2 = [altUnitsPerMeter2, 0, altUnitsPerMeter2];\n }\n\n return result;\n}\nfunction addMetersToLngLat(lngLatZ, xyz) {\n var _lngLatZ = _slicedToArray(lngLatZ, 3),\n longitude = _lngLatZ[0],\n latitude = _lngLatZ[1],\n z0 = _lngLatZ[2];\n\n var _xyz = _slicedToArray(xyz, 3),\n x = _xyz[0],\n y = _xyz[1],\n z = _xyz[2];\n\n var _getDistanceScales = getDistanceScales({\n longitude: longitude,\n latitude: latitude,\n highPrecision: true\n }),\n unitsPerMeter = _getDistanceScales.unitsPerMeter,\n unitsPerMeter2 = _getDistanceScales.unitsPerMeter2;\n\n var worldspace = lngLatToWorld(lngLatZ);\n worldspace[0] += x * (unitsPerMeter[0] + unitsPerMeter2[0] * y);\n worldspace[1] += y * (unitsPerMeter[1] + unitsPerMeter2[1] * y);\n var newLngLat = worldToLngLat(worldspace);\n var newZ = (z0 || 0) + (z || 0);\n return Number.isFinite(z0) || Number.isFinite(z) ? [newLngLat[0], newLngLat[1], newZ] : newLngLat;\n}\nfunction getViewMatrix(_ref7) {\n var height = _ref7.height,\n pitch = _ref7.pitch,\n bearing = _ref7.bearing,\n altitude = _ref7.altitude,\n scale = _ref7.scale,\n _ref7$center = _ref7.center,\n center = _ref7$center === void 0 ? null : _ref7$center;\n var vm = createMat4();\n translate(vm, vm, [0, 0, -altitude]);\n rotateX(vm, vm, -pitch * DEGREES_TO_RADIANS);\n rotateZ(vm, vm, bearing * DEGREES_TO_RADIANS);\n scale /= height;\n mat4_scale(vm, vm, [scale, scale, scale]);\n\n if (center) {\n translate(vm, vm, vec3_negate([], center));\n }\n\n return vm;\n}\nfunction getProjectionParameters(_ref8) {\n var width = _ref8.width,\n height = _ref8.height,\n _ref8$fovy = _ref8.fovy,\n fovy = _ref8$fovy === void 0 ? altitudeToFovy(DEFAULT_ALTITUDE) : _ref8$fovy,\n altitude = _ref8.altitude,\n _ref8$pitch = _ref8.pitch,\n pitch = _ref8$pitch === void 0 ? 0 : _ref8$pitch,\n _ref8$nearZMultiplier = _ref8.nearZMultiplier,\n nearZMultiplier = _ref8$nearZMultiplier === void 0 ? 1 : _ref8$nearZMultiplier,\n _ref8$farZMultiplier = _ref8.farZMultiplier,\n farZMultiplier = _ref8$farZMultiplier === void 0 ? 1 : _ref8$farZMultiplier;\n\n if (altitude !== undefined) {\n fovy = altitudeToFovy(altitude);\n }\n\n var halfFov = 0.5 * fovy * DEGREES_TO_RADIANS;\n var focalDistance = fovyToAltitude(fovy);\n var pitchRadians = pitch * DEGREES_TO_RADIANS;\n var topHalfSurfaceDistance = Math.sin(halfFov) * focalDistance / Math.sin(Math.min(Math.max(Math.PI / 2 - pitchRadians - halfFov, 0.01), Math.PI - 0.01));\n var farZ = Math.sin(pitchRadians) * topHalfSurfaceDistance + focalDistance;\n return {\n fov: 2 * halfFov,\n aspect: width / height,\n focalDistance: focalDistance,\n near: nearZMultiplier,\n far: farZ * farZMultiplier\n };\n}\nfunction getProjectionMatrix(_ref9) {\n var width = _ref9.width,\n height = _ref9.height,\n pitch = _ref9.pitch,\n altitude = _ref9.altitude,\n fovy = _ref9.fovy,\n nearZMultiplier = _ref9.nearZMultiplier,\n farZMultiplier = _ref9.farZMultiplier;\n\n var _getProjectionParamet = getProjectionParameters({\n width: width,\n height: height,\n altitude: altitude,\n fovy: fovy,\n pitch: pitch,\n nearZMultiplier: nearZMultiplier,\n farZMultiplier: farZMultiplier\n }),\n fov = _getProjectionParamet.fov,\n aspect = _getProjectionParamet.aspect,\n near = _getProjectionParamet.near,\n far = _getProjectionParamet.far;\n\n var projectionMatrix = perspective([], fov, aspect, near, far);\n return projectionMatrix;\n}\nfunction altitudeToFovy(altitude) {\n return 2 * Math.atan(0.5 / altitude) * RADIANS_TO_DEGREES;\n}\nfunction fovyToAltitude(fovy) {\n return 0.5 / Math.tan(0.5 * fovy * DEGREES_TO_RADIANS);\n}\nfunction worldToPixels(xyz, pixelProjectionMatrix) {\n var _xyz2 = slicedToArray_slicedToArray(xyz, 3),\n x = _xyz2[0],\n y = _xyz2[1],\n _xyz2$ = _xyz2[2],\n z = _xyz2$ === void 0 ? 0 : _xyz2$;\n\n assert_assert(Number.isFinite(x) && Number.isFinite(y) && Number.isFinite(z));\n return transformVector(pixelProjectionMatrix, [x, y, z, 1]);\n}\nfunction pixelsToWorld(xyz, pixelUnprojectionMatrix) {\n var targetZ = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n\n var _xyz3 = slicedToArray_slicedToArray(xyz, 3),\n x = _xyz3[0],\n y = _xyz3[1],\n z = _xyz3[2];\n\n assert_assert(Number.isFinite(x) && Number.isFinite(y), \'invalid pixel coordinate\');\n\n if (Number.isFinite(z)) {\n var coord = transformVector(pixelUnprojectionMatrix, [x, y, z, 1]);\n return coord;\n }\n\n var coord0 = transformVector(pixelUnprojectionMatrix, [x, y, 0, 1]);\n var coord1 = transformVector(pixelUnprojectionMatrix, [x, y, 1, 1]);\n var z0 = coord0[2];\n var z1 = coord1[2];\n var t = z0 === z1 ? 0 : ((targetZ || 0) - z0) / (z1 - z0);\n return vec2_lerp([], coord0, coord1, t);\n}\n;// CONCATENATED MODULE: ./node_modules/@math.gl/web-mercator/dist/esm/fit-bounds.js\n\n\n\n\nfunction fit_bounds_fitBounds(_ref) {\n var width = _ref.width,\n height = _ref.height,\n bounds = _ref.bounds,\n _ref$minExtent = _ref.minExtent,\n minExtent = _ref$minExtent === void 0 ? 0 : _ref$minExtent,\n _ref$maxZoom = _ref.maxZoom,\n maxZoom = _ref$maxZoom === void 0 ? 24 : _ref$maxZoom,\n _ref$padding = _ref.padding,\n padding = _ref$padding === void 0 ? 0 : _ref$padding,\n _ref$offset = _ref.offset,\n offset = _ref$offset === void 0 ? [0, 0] : _ref$offset;\n\n var _bounds = slicedToArray_slicedToArray(bounds, 2),\n _bounds$ = slicedToArray_slicedToArray(_bounds[0], 2),\n west = _bounds$[0],\n south = _bounds$[1],\n _bounds$2 = slicedToArray_slicedToArray(_bounds[1], 2),\n east = _bounds$2[0],\n north = _bounds$2[1];\n\n if (Number.isFinite(padding)) {\n var p = padding;\n padding = {\n top: p,\n bottom: p,\n left: p,\n right: p\n };\n } else {\n assert_assert(Number.isFinite(padding.top) && Number.isFinite(padding.bottom) && Number.isFinite(padding.left) && Number.isFinite(padding.right));\n }\n\n var viewport = new WebMercatorViewport({\n width: width,\n height: height,\n longitude: 0,\n latitude: 0,\n zoom: 0\n });\n var nw = viewport.project([west, north]);\n var se = viewport.project([east, south]);\n var size = [Math.max(Math.abs(se[0] - nw[0]), minExtent), Math.max(Math.abs(se[1] - nw[1]), minExtent)];\n var targetSize = [width - padding.left - padding.right - Math.abs(offset[0]) * 2, height - padding.top - padding.bottom - Math.abs(offset[1]) * 2];\n assert_assert(targetSize[0] > 0 && targetSize[1] > 0);\n var scaleX = targetSize[0] / size[0];\n var scaleY = targetSize[1] / size[1];\n var offsetX = (padding.right - padding.left) / 2 / scaleX;\n var offsetY = (padding.bottom - padding.top) / 2 / scaleY;\n var center = [(se[0] + nw[0]) / 2 + offsetX, (se[1] + nw[1]) / 2 + offsetY];\n var centerLngLat = viewport.unproject(center);\n var zoom = Math.min(maxZoom, viewport.zoom + log2(Math.abs(Math.min(scaleX, scaleY))));\n assert_assert(Number.isFinite(zoom));\n return {\n longitude: centerLngLat[0],\n latitude: centerLngLat[1],\n zoom: zoom\n };\n}\n;// CONCATENATED MODULE: ./node_modules/@math.gl/web-mercator/dist/esm/get-bounds.js\n\n\n\nvar get_bounds_DEGREES_TO_RADIANS = Math.PI / 180;\nfunction getBounds(viewport) {\n var z = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var width = viewport.width,\n height = viewport.height,\n unproject = viewport.unproject;\n var unprojectOps = {\n targetZ: z\n };\n var bottomLeft = unproject([0, height], unprojectOps);\n var bottomRight = unproject([width, height], unprojectOps);\n var topLeft;\n var topRight;\n var halfFov = viewport.fovy ? 0.5 * viewport.fovy * get_bounds_DEGREES_TO_RADIANS : Math.atan(0.5 / viewport.altitude);\n var angleToGround = (90 - viewport.pitch) * get_bounds_DEGREES_TO_RADIANS;\n\n if (halfFov > angleToGround - 0.01) {\n topLeft = unprojectOnFarPlane(viewport, 0, z);\n topRight = unprojectOnFarPlane(viewport, width, z);\n } else {\n topLeft = unproject([0, 0], unprojectOps);\n topRight = unproject([width, 0], unprojectOps);\n }\n\n return [bottomLeft, bottomRight, topRight, topLeft];\n}\n\nfunction unprojectOnFarPlane(viewport, x, targetZ) {\n var pixelUnprojectionMatrix = viewport.pixelUnprojectionMatrix;\n var coord0 = transformVector(pixelUnprojectionMatrix, [x, 0, 1, 1]);\n var coord1 = transformVector(pixelUnprojectionMatrix, [x, viewport.height, 1, 1]);\n var z = targetZ * viewport.distanceScales.unitsPerMeter[2];\n var t = (z - coord0[2]) / (coord1[2] - coord0[2]);\n var coord = vec2_lerp([], coord0, coord1, t);\n var result = worldToLngLat(coord);\n result[2] = targetZ;\n return result;\n}\n;// CONCATENATED MODULE: ./node_modules/@math.gl/web-mercator/dist/esm/web-mercator-viewport.js\n\n\n\n\n\n\n\n\n\n\n\n\nvar WebMercatorViewport = /*#__PURE__*/function () {\n function WebMercatorViewport() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {\n width: 1,\n height: 1\n },\n width = _ref.width,\n height = _ref.height,\n _ref$latitude = _ref.latitude,\n latitude = _ref$latitude === void 0 ? 0 : _ref$latitude,\n _ref$longitude = _ref.longitude,\n longitude = _ref$longitude === void 0 ? 0 : _ref$longitude,\n _ref$zoom = _ref.zoom,\n zoom = _ref$zoom === void 0 ? 0 : _ref$zoom,\n _ref$pitch = _ref.pitch,\n pitch = _ref$pitch === void 0 ? 0 : _ref$pitch,\n _ref$bearing = _ref.bearing,\n bearing = _ref$bearing === void 0 ? 0 : _ref$bearing,\n _ref$altitude = _ref.altitude,\n altitude = _ref$altitude === void 0 ? null : _ref$altitude,\n _ref$fovy = _ref.fovy,\n fovy = _ref$fovy === void 0 ? null : _ref$fovy,\n _ref$position = _ref.position,\n position = _ref$position === void 0 ? null : _ref$position,\n _ref$nearZMultiplier = _ref.nearZMultiplier,\n nearZMultiplier = _ref$nearZMultiplier === void 0 ? 0.02 : _ref$nearZMultiplier,\n _ref$farZMultiplier = _ref.farZMultiplier,\n farZMultiplier = _ref$farZMultiplier === void 0 ? 1.01 : _ref$farZMultiplier;\n\n _classCallCheck(this, WebMercatorViewport);\n\n width = width || 1;\n height = height || 1;\n\n if (fovy === null && altitude === null) {\n altitude = DEFAULT_ALTITUDE;\n fovy = altitudeToFovy(altitude);\n } else if (fovy === null) {\n fovy = altitudeToFovy(altitude);\n } else if (altitude === null) {\n altitude = fovyToAltitude(fovy);\n }\n\n var scale = zoomToScale(zoom);\n altitude = Math.max(0.75, altitude);\n var distanceScales = getDistanceScales({\n longitude: longitude,\n latitude: latitude\n });\n var center = lngLatToWorld([longitude, latitude]);\n center[2] = 0;\n\n if (position) {\n vec3_add(center, center, vec3_mul([], position, distanceScales.unitsPerMeter));\n }\n\n this.projectionMatrix = getProjectionMatrix({\n width: width,\n height: height,\n pitch: pitch,\n fovy: fovy,\n nearZMultiplier: nearZMultiplier,\n farZMultiplier: farZMultiplier\n });\n this.viewMatrix = getViewMatrix({\n height: height,\n scale: scale,\n center: center,\n pitch: pitch,\n bearing: bearing,\n altitude: altitude\n });\n this.width = width;\n this.height = height;\n this.scale = scale;\n this.latitude = latitude;\n this.longitude = longitude;\n this.zoom = zoom;\n this.pitch = pitch;\n this.bearing = bearing;\n this.altitude = altitude;\n this.fovy = fovy;\n this.center = center;\n this.meterOffset = position || [0, 0, 0];\n this.distanceScales = distanceScales;\n\n this._initMatrices();\n\n this.equals = this.equals.bind(this);\n this.project = this.project.bind(this);\n this.unproject = this.unproject.bind(this);\n this.projectPosition = this.projectPosition.bind(this);\n this.unprojectPosition = this.unprojectPosition.bind(this);\n Object.freeze(this);\n }\n\n _createClass(WebMercatorViewport, [{\n key: "_initMatrices",\n value: function _initMatrices() {\n var width = this.width,\n height = this.height,\n projectionMatrix = this.projectionMatrix,\n viewMatrix = this.viewMatrix;\n var vpm = createMat4();\n mat4_multiply(vpm, vpm, projectionMatrix);\n mat4_multiply(vpm, vpm, viewMatrix);\n this.viewProjectionMatrix = vpm;\n var m = createMat4();\n mat4_scale(m, m, [width / 2, -height / 2, 1]);\n translate(m, m, [1, -1, 0]);\n mat4_multiply(m, m, vpm);\n var mInverse = invert(createMat4(), m);\n\n if (!mInverse) {\n throw new Error(\'Pixel project matrix not invertible\');\n }\n\n this.pixelProjectionMatrix = m;\n this.pixelUnprojectionMatrix = mInverse;\n }\n }, {\n key: "equals",\n value: function equals(viewport) {\n if (!(viewport instanceof WebMercatorViewport)) {\n return false;\n }\n\n return viewport.width === this.width && viewport.height === this.height && mat4_equals(viewport.projectionMatrix, this.projectionMatrix) && mat4_equals(viewport.viewMatrix, this.viewMatrix);\n }\n }, {\n key: "project",\n value: function project(xyz) {\n var _ref2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref2$topLeft = _ref2.topLeft,\n topLeft = _ref2$topLeft === void 0 ? true : _ref2$topLeft;\n\n var worldPosition = this.projectPosition(xyz);\n var coord = worldToPixels(worldPosition, this.pixelProjectionMatrix);\n\n var _coord = slicedToArray_slicedToArray(coord, 2),\n x = _coord[0],\n y = _coord[1];\n\n var y2 = topLeft ? y : this.height - y;\n return xyz.length === 2 ? [x, y2] : [x, y2, coord[2]];\n }\n }, {\n key: "unproject",\n value: function unproject(xyz) {\n var _ref3 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref3$topLeft = _ref3.topLeft,\n topLeft = _ref3$topLeft === void 0 ? true : _ref3$topLeft,\n _ref3$targetZ = _ref3.targetZ,\n targetZ = _ref3$targetZ === void 0 ? undefined : _ref3$targetZ;\n\n var _xyz = slicedToArray_slicedToArray(xyz, 3),\n x = _xyz[0],\n y = _xyz[1],\n z = _xyz[2];\n\n var y2 = topLeft ? y : this.height - y;\n var targetZWorld = targetZ && targetZ * this.distanceScales.unitsPerMeter[2];\n var coord = pixelsToWorld([x, y2, z], this.pixelUnprojectionMatrix, targetZWorld);\n\n var _this$unprojectPositi = this.unprojectPosition(coord),\n _this$unprojectPositi2 = slicedToArray_slicedToArray(_this$unprojectPositi, 3),\n X = _this$unprojectPositi2[0],\n Y = _this$unprojectPositi2[1],\n Z = _this$unprojectPositi2[2];\n\n if (Number.isFinite(z)) {\n return [X, Y, Z];\n }\n\n return Number.isFinite(targetZ) ? [X, Y, targetZ] : [X, Y];\n }\n }, {\n key: "projectPosition",\n value: function projectPosition(xyz) {\n var _lngLatToWorld = lngLatToWorld(xyz),\n _lngLatToWorld2 = slicedToArray_slicedToArray(_lngLatToWorld, 2),\n X = _lngLatToWorld2[0],\n Y = _lngLatToWorld2[1];\n\n var Z = (xyz[2] || 0) * this.distanceScales.unitsPerMeter[2];\n return [X, Y, Z];\n }\n }, {\n key: "unprojectPosition",\n value: function unprojectPosition(xyz) {\n var _worldToLngLat = worldToLngLat(xyz),\n _worldToLngLat2 = slicedToArray_slicedToArray(_worldToLngLat, 2),\n X = _worldToLngLat2[0],\n Y = _worldToLngLat2[1];\n\n var Z = (xyz[2] || 0) * this.distanceScales.metersPerUnit[2];\n return [X, Y, Z];\n }\n }, {\n key: "projectFlat",\n value: function projectFlat(lngLat) {\n return lngLatToWorld(lngLat);\n }\n }, {\n key: "unprojectFlat",\n value: function unprojectFlat(xy) {\n return worldToLngLat(xy);\n }\n }, {\n key: "getMapCenterByLngLatPosition",\n value: function getMapCenterByLngLatPosition(_ref4) {\n var lngLat = _ref4.lngLat,\n pos = _ref4.pos;\n var fromLocation = pixelsToWorld(pos, this.pixelUnprojectionMatrix);\n var toLocation = lngLatToWorld(lngLat);\n var translate = vec2_add([], toLocation, vec2_negate([], fromLocation));\n var newCenter = vec2_add([], this.center, translate);\n return worldToLngLat(newCenter);\n }\n }, {\n key: "getLocationAtPoint",\n value: function getLocationAtPoint(_ref5) {\n var lngLat = _ref5.lngLat,\n pos = _ref5.pos;\n return this.getMapCenterByLngLatPosition({\n lngLat: lngLat,\n pos: pos\n });\n }\n }, {\n key: "fitBounds",\n value: function fitBounds(bounds) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var width = this.width,\n height = this.height;\n\n var _fitBounds2 = fit_bounds_fitBounds(Object.assign({\n width: width,\n height: height,\n bounds: bounds\n }, options)),\n longitude = _fitBounds2.longitude,\n latitude = _fitBounds2.latitude,\n zoom = _fitBounds2.zoom;\n\n return new WebMercatorViewport({\n width: width,\n height: height,\n longitude: longitude,\n latitude: latitude,\n zoom: zoom\n });\n }\n }, {\n key: "getBounds",\n value: function getBounds(options) {\n var corners = this.getBoundingRegion(options);\n var west = Math.min.apply(Math, (0,toConsumableArray/* default */.Z)(corners.map(function (p) {\n return p[0];\n })));\n var east = Math.max.apply(Math, (0,toConsumableArray/* default */.Z)(corners.map(function (p) {\n return p[0];\n })));\n var south = Math.min.apply(Math, (0,toConsumableArray/* default */.Z)(corners.map(function (p) {\n return p[1];\n })));\n var north = Math.max.apply(Math, (0,toConsumableArray/* default */.Z)(corners.map(function (p) {\n return p[1];\n })));\n return [[west, south], [east, north]];\n }\n }, {\n key: "getBoundingRegion",\n value: function getBoundingRegion() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return getBounds(this, options.z || 0);\n }\n }]);\n\n return WebMercatorViewport;\n}();\n\n\n;// CONCATENATED MODULE: ./node_modules/@math.gl/web-mercator/dist/esm/normalize-viewport-props.js\n\n\nvar MAX_LATITUDE = 85.05113;\nvar MIN_LATITUDE = -85.05113;\nfunction normalizeViewportProps(_ref) {\n var width = _ref.width,\n height = _ref.height,\n longitude = _ref.longitude,\n latitude = _ref.latitude,\n zoom = _ref.zoom,\n _ref$pitch = _ref.pitch,\n pitch = _ref$pitch === void 0 ? 0 : _ref$pitch,\n _ref$bearing = _ref.bearing,\n bearing = _ref$bearing === void 0 ? 0 : _ref$bearing;\n\n if (longitude < -180 || longitude > 180) {\n longitude = mod(longitude + 180, 360) - 180;\n }\n\n if (bearing < -180 || bearing > 180) {\n bearing = mod(bearing + 180, 360) - 180;\n }\n\n var flatViewport = new WebMercatorViewport({\n width: width,\n height: height,\n longitude: longitude,\n latitude: latitude,\n zoom: zoom\n });\n var topY = flatViewport.project([longitude, MAX_LATITUDE])[1];\n var bottomY = flatViewport.project([longitude, MIN_LATITUDE])[1];\n var shiftY = 0;\n\n if (bottomY - topY < height) {\n zoom += log2(height / (bottomY - topY));\n flatViewport = new WebMercatorViewport({\n width: width,\n height: height,\n longitude: longitude,\n latitude: latitude,\n zoom: zoom\n });\n topY = flatViewport.project([longitude, MAX_LATITUDE])[1];\n bottomY = flatViewport.project([longitude, MIN_LATITUDE])[1];\n }\n\n if (topY > 0) {\n shiftY = topY;\n } else if (bottomY < height) {\n shiftY = bottomY - height;\n }\n\n if (shiftY) {\n latitude = flatViewport.unproject([width / 2, height / 2 + shiftY])[1];\n }\n\n return {\n width: width,\n height: height,\n longitude: longitude,\n latitude: latitude,\n zoom: zoom,\n pitch: pitch,\n bearing: bearing\n };\n}\n;// CONCATENATED MODULE: ./node_modules/@math.gl/web-mercator/dist/esm/fly-to-viewport.js\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\n\n\n\nvar fly_to_viewport_EPSILON = 0.01;\nvar VIEWPORT_TRANSITION_PROPS = [\'longitude\', \'latitude\', \'zoom\'];\nvar DEFAULT_OPTS = {\n curve: 1.414,\n speed: 1.2\n};\nfunction flyToViewport(startProps, endProps, t) {\n var opts = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var viewport = {};\n\n var _getFlyToTransitionPa = getFlyToTransitionParams(startProps, endProps, opts),\n startZoom = _getFlyToTransitionPa.startZoom,\n startCenterXY = _getFlyToTransitionPa.startCenterXY,\n uDelta = _getFlyToTransitionPa.uDelta,\n w0 = _getFlyToTransitionPa.w0,\n u1 = _getFlyToTransitionPa.u1,\n S = _getFlyToTransitionPa.S,\n rho = _getFlyToTransitionPa.rho,\n rho2 = _getFlyToTransitionPa.rho2,\n r0 = _getFlyToTransitionPa.r0;\n\n if (u1 < fly_to_viewport_EPSILON) {\n var _iterator = _createForOfIteratorHelper(VIEWPORT_TRANSITION_PROPS),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var key = _step.value;\n var startValue = startProps[key];\n var endValue = endProps[key];\n viewport[key] = math_utils_lerp(startValue, endValue, t);\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n return viewport;\n }\n\n var s = t * S;\n var w = Math.cosh(r0) / Math.cosh(r0 + rho * s);\n var u = w0 * ((Math.cosh(r0) * Math.tanh(r0 + rho * s) - Math.sinh(r0)) / rho2) / u1;\n var scaleIncrement = 1 / w;\n var newZoom = startZoom + scaleToZoom(scaleIncrement);\n var newCenterWorld = vec2_scale([], uDelta, u);\n vec2_add(newCenterWorld, newCenterWorld, startCenterXY);\n var newCenter = worldToLngLat(newCenterWorld);\n viewport.longitude = newCenter[0];\n viewport.latitude = newCenter[1];\n viewport.zoom = newZoom;\n return viewport;\n}\nfunction getFlyToDuration(startProps, endProps) {\n var opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n opts = Object.assign({}, DEFAULT_OPTS, opts);\n var _opts = opts,\n screenSpeed = _opts.screenSpeed,\n speed = _opts.speed,\n maxDuration = _opts.maxDuration;\n\n var _getFlyToTransitionPa2 = getFlyToTransitionParams(startProps, endProps, opts),\n S = _getFlyToTransitionPa2.S,\n rho = _getFlyToTransitionPa2.rho;\n\n var length = 1000 * S;\n var duration;\n\n if (Number.isFinite(screenSpeed)) {\n duration = length / (screenSpeed / rho);\n } else {\n duration = length / speed;\n }\n\n return Number.isFinite(maxDuration) && duration > maxDuration ? 0 : duration;\n}\n\nfunction getFlyToTransitionParams(startProps, endProps, opts) {\n opts = Object.assign({}, DEFAULT_OPTS, opts);\n var rho = opts.curve;\n var startZoom = startProps.zoom;\n var startCenter = [startProps.longitude, startProps.latitude];\n var startScale = zoomToScale(startZoom);\n var endZoom = endProps.zoom;\n var endCenter = [endProps.longitude, endProps.latitude];\n var scale = zoomToScale(endZoom - startZoom);\n var startCenterXY = lngLatToWorld(startCenter);\n var endCenterXY = lngLatToWorld(endCenter);\n var uDelta = vec2_sub([], endCenterXY, startCenterXY);\n var w0 = Math.max(startProps.width, startProps.height);\n var w1 = w0 / scale;\n var u1 = vec2_length(uDelta) * startScale;\n\n var _u1 = Math.max(u1, fly_to_viewport_EPSILON);\n\n var rho2 = rho * rho;\n var b0 = (w1 * w1 - w0 * w0 + rho2 * rho2 * _u1 * _u1) / (2 * w0 * rho2 * _u1);\n var b1 = (w1 * w1 - w0 * w0 - rho2 * rho2 * _u1 * _u1) / (2 * w1 * rho2 * _u1);\n var r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0);\n var r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n var S = (r1 - r0) / rho;\n return {\n startZoom: startZoom,\n startCenterXY: startCenterXY,\n uDelta: uDelta,\n w0: w0,\n u1: u1,\n S: S,\n rho: rho,\n rho2: rho2,\n r0: r0,\n r1: r1\n };\n}\n;// CONCATENATED MODULE: ./node_modules/@math.gl/web-mercator/dist/esm/index.js\n\n\n\n\n\n\n\n;// CONCATENATED MODULE: ./node_modules/viewport-mercator-project/module.js\n\n\n;// CONCATENATED MODULE: ./node_modules/resize-observer-polyfill/dist/ResizeObserver.es.js\n/**\r\n * A collection of shims that provide minimal functionality of the ES6 collections.\r\n *\r\n * These implementations are not meant to be used outside of the ResizeObserver\r\n * modules as they cover only a limited range of use cases.\r\n */\n\n/* eslint-disable require-jsdoc, valid-jsdoc */\nvar MapShim = function () {\n if (typeof Map !== \'undefined\') {\n return Map;\n }\n /**\r\n * Returns index in provided array that matches the specified key.\r\n *\r\n * @param {Array} arr\r\n * @param {*} key\r\n * @returns {number}\r\n */\n\n\n function getIndex(arr, key) {\n var result = -1;\n arr.some(function (entry, index) {\n if (entry[0] === key) {\n result = index;\n return true;\n }\n\n return false;\n });\n return result;\n }\n\n return (\n /** @class */\n function () {\n function class_1() {\n this.__entries__ = [];\n }\n\n Object.defineProperty(class_1.prototype, "size", {\n /**\r\n * @returns {boolean}\r\n */\n get: function get() {\n return this.__entries__.length;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * @param {*} key\r\n * @returns {*}\r\n */\n\n class_1.prototype.get = function (key) {\n var index = getIndex(this.__entries__, key);\n var entry = this.__entries__[index];\n return entry && entry[1];\n };\n /**\r\n * @param {*} key\r\n * @param {*} value\r\n * @returns {void}\r\n */\n\n\n class_1.prototype.set = function (key, value) {\n var index = getIndex(this.__entries__, key);\n\n if (~index) {\n this.__entries__[index][1] = value;\n } else {\n this.__entries__.push([key, value]);\n }\n };\n /**\r\n * @param {*} key\r\n * @returns {void}\r\n */\n\n\n class_1.prototype.delete = function (key) {\n var entries = this.__entries__;\n var index = getIndex(entries, key);\n\n if (~index) {\n entries.splice(index, 1);\n }\n };\n /**\r\n * @param {*} key\r\n * @returns {void}\r\n */\n\n\n class_1.prototype.has = function (key) {\n return !!~getIndex(this.__entries__, key);\n };\n /**\r\n * @returns {void}\r\n */\n\n\n class_1.prototype.clear = function () {\n this.__entries__.splice(0);\n };\n /**\r\n * @param {Function} callback\r\n * @param {*} [ctx=null]\r\n * @returns {void}\r\n */\n\n\n class_1.prototype.forEach = function (callback, ctx) {\n if (ctx === void 0) {\n ctx = null;\n }\n\n for (var _i = 0, _a = this.__entries__; _i < _a.length; _i++) {\n var entry = _a[_i];\n callback.call(ctx, entry[1], entry[0]);\n }\n };\n\n return class_1;\n }()\n );\n}();\n/**\r\n * Detects whether window and document objects are available in current environment.\r\n */\n\n\nvar isBrowser = typeof window !== \'undefined\' && typeof document !== \'undefined\' && window.document === document; // Returns global object of a current environment.\n\nvar global$1 = function () {\n if (typeof __webpack_require__.g !== \'undefined\' && __webpack_require__.g.Math === Math) {\n return __webpack_require__.g;\n }\n\n if (typeof self !== \'undefined\' && self.Math === Math) {\n return self;\n }\n\n if (typeof window !== \'undefined\' && window.Math === Math) {\n return window;\n } // eslint-disable-next-line no-new-func\n\n\n return Function(\'return this\')();\n}();\n/**\r\n * A shim for the requestAnimationFrame which falls back to the setTimeout if\r\n * first one is not supported.\r\n *\r\n * @returns {number} Requests\' identifier.\r\n */\n\n\nvar requestAnimationFrame$1 = function () {\n if (typeof requestAnimationFrame === \'function\') {\n // It\'s required to use a bounded function because IE sometimes throws\n // an "Invalid calling object" error if rAF is invoked without the global\n // object on the left hand side.\n return requestAnimationFrame.bind(global$1);\n }\n\n return function (callback) {\n return setTimeout(function () {\n return callback(Date.now());\n }, 1000 / 60);\n };\n}(); // Defines minimum timeout before adding a trailing call.\n\n\nvar trailingTimeout = 2;\n/**\r\n * Creates a wrapper function which ensures that provided callback will be\r\n * invoked only once during the specified delay period.\r\n *\r\n * @param {Function} callback - Function to be invoked after the delay period.\r\n * @param {number} delay - Delay after which to invoke callback.\r\n * @returns {Function}\r\n */\n\nfunction throttle(callback, delay) {\n var leadingCall = false,\n trailingCall = false,\n lastCallTime = 0;\n /**\r\n * Invokes the original callback function and schedules new invocation if\r\n * the "proxy" was called during current request.\r\n *\r\n * @returns {void}\r\n */\n\n function resolvePending() {\n if (leadingCall) {\n leadingCall = false;\n callback();\n }\n\n if (trailingCall) {\n proxy();\n }\n }\n /**\r\n * Callback invoked after the specified delay. It will further postpone\r\n * invocation of the original function delegating it to the\r\n * requestAnimationFrame.\r\n *\r\n * @returns {void}\r\n */\n\n\n function timeoutCallback() {\n requestAnimationFrame$1(resolvePending);\n }\n /**\r\n * Schedules invocation of the original function.\r\n *\r\n * @returns {void}\r\n */\n\n\n function proxy() {\n var timeStamp = Date.now();\n\n if (leadingCall) {\n // Reject immediately following calls.\n if (timeStamp - lastCallTime < trailingTimeout) {\n return;\n } // Schedule new call to be in invoked when the pending one is resolved.\n // This is important for "transitions" which never actually start\n // immediately so there is a chance that we might miss one if change\n // happens amids the pending invocation.\n\n\n trailingCall = true;\n } else {\n leadingCall = true;\n trailingCall = false;\n setTimeout(timeoutCallback, delay);\n }\n\n lastCallTime = timeStamp;\n }\n\n return proxy;\n} // Minimum delay before invoking the update of observers.\n\n\nvar REFRESH_DELAY = 20; // A list of substrings of CSS properties used to find transition events that\n// might affect dimensions of observed elements.\n\nvar transitionKeys = [\'top\', \'right\', \'bottom\', \'left\', \'width\', \'height\', \'size\', \'weight\']; // Check if MutationObserver is available.\n\nvar mutationObserverSupported = typeof MutationObserver !== \'undefined\';\n/**\r\n * Singleton controller class which handles updates of ResizeObserver instances.\r\n */\n\nvar ResizeObserverController =\n/** @class */\nfunction () {\n /**\r\n * Creates a new instance of ResizeObserverController.\r\n *\r\n * @private\r\n */\n function ResizeObserverController() {\n /**\r\n * Indicates whether DOM listeners have been added.\r\n *\r\n * @private {boolean}\r\n */\n this.connected_ = false;\n /**\r\n * Tells that controller has subscribed for Mutation Events.\r\n *\r\n * @private {boolean}\r\n */\n\n this.mutationEventsAdded_ = false;\n /**\r\n * Keeps reference to the instance of MutationObserver.\r\n *\r\n * @private {MutationObserver}\r\n */\n\n this.mutationsObserver_ = null;\n /**\r\n * A list of connected observers.\r\n *\r\n * @private {Array}\r\n */\n\n this.observers_ = [];\n this.onTransitionEnd_ = this.onTransitionEnd_.bind(this);\n this.refresh = throttle(this.refresh.bind(this), REFRESH_DELAY);\n }\n /**\r\n * Adds observer to observers list.\r\n *\r\n * @param {ResizeObserverSPI} observer - Observer to be added.\r\n * @returns {void}\r\n */\n\n\n ResizeObserverController.prototype.addObserver = function (observer) {\n if (!~this.observers_.indexOf(observer)) {\n this.observers_.push(observer);\n } // Add listeners if they haven\'t been added yet.\n\n\n if (!this.connected_) {\n this.connect_();\n }\n };\n /**\r\n * Removes observer from observers list.\r\n *\r\n * @param {ResizeObserverSPI} observer - Observer to be removed.\r\n * @returns {void}\r\n */\n\n\n ResizeObserverController.prototype.removeObserver = function (observer) {\n var observers = this.observers_;\n var index = observers.indexOf(observer); // Remove observer if it\'s present in registry.\n\n if (~index) {\n observers.splice(index, 1);\n } // Remove listeners if controller has no connected observers.\n\n\n if (!observers.length && this.connected_) {\n this.disconnect_();\n }\n };\n /**\r\n * Invokes the update of observers. It will continue running updates insofar\r\n * it detects changes.\r\n *\r\n * @returns {void}\r\n */\n\n\n ResizeObserverController.prototype.refresh = function () {\n var changesDetected = this.updateObservers_(); // Continue running updates if changes have been detected as there might\n // be future ones caused by CSS transitions.\n\n if (changesDetected) {\n this.refresh();\n }\n };\n /**\r\n * Updates every observer from observers list and notifies them of queued\r\n * entries.\r\n *\r\n * @private\r\n * @returns {boolean} Returns "true" if any observer has detected changes in\r\n * dimensions of it\'s elements.\r\n */\n\n\n ResizeObserverController.prototype.updateObservers_ = function () {\n // Collect observers that have active observations.\n var activeObservers = this.observers_.filter(function (observer) {\n return observer.gatherActive(), observer.hasActive();\n }); // Deliver notifications in a separate cycle in order to avoid any\n // collisions between observers, e.g. when multiple instances of\n // ResizeObserver are tracking the same element and the callback of one\n // of them changes content dimensions of the observed target. Sometimes\n // this may result in notifications being blocked for the rest of observers.\n\n activeObservers.forEach(function (observer) {\n return observer.broadcastActive();\n });\n return activeObservers.length > 0;\n };\n /**\r\n * Initializes DOM listeners.\r\n *\r\n * @private\r\n * @returns {void}\r\n */\n\n\n ResizeObserverController.prototype.connect_ = function () {\n // Do nothing if running in a non-browser environment or if listeners\n // have been already added.\n if (!isBrowser || this.connected_) {\n return;\n } // Subscription to the "Transitionend" event is used as a workaround for\n // delayed transitions. This way it\'s possible to capture at least the\n // final state of an element.\n\n\n document.addEventListener(\'transitionend\', this.onTransitionEnd_);\n window.addEventListener(\'resize\', this.refresh);\n\n if (mutationObserverSupported) {\n this.mutationsObserver_ = new MutationObserver(this.refresh);\n this.mutationsObserver_.observe(document, {\n attributes: true,\n childList: true,\n characterData: true,\n subtree: true\n });\n } else {\n document.addEventListener(\'DOMSubtreeModified\', this.refresh);\n this.mutationEventsAdded_ = true;\n }\n\n this.connected_ = true;\n };\n /**\r\n * Removes DOM listeners.\r\n *\r\n * @private\r\n * @returns {void}\r\n */\n\n\n ResizeObserverController.prototype.disconnect_ = function () {\n // Do nothing if running in a non-browser environment or if listeners\n // have been already removed.\n if (!isBrowser || !this.connected_) {\n return;\n }\n\n document.removeEventListener(\'transitionend\', this.onTransitionEnd_);\n window.removeEventListener(\'resize\', this.refresh);\n\n if (this.mutationsObserver_) {\n this.mutationsObserver_.disconnect();\n }\n\n if (this.mutationEventsAdded_) {\n document.removeEventListener(\'DOMSubtreeModified\', this.refresh);\n }\n\n this.mutationsObserver_ = null;\n this.mutationEventsAdded_ = false;\n this.connected_ = false;\n };\n /**\r\n * "Transitionend" event handler.\r\n *\r\n * @private\r\n * @param {TransitionEvent} event\r\n * @returns {void}\r\n */\n\n\n ResizeObserverController.prototype.onTransitionEnd_ = function (_a) {\n var _b = _a.propertyName,\n propertyName = _b === void 0 ? \'\' : _b; // Detect whether transition may affect dimensions of an element.\n\n var isReflowProperty = transitionKeys.some(function (key) {\n return !!~propertyName.indexOf(key);\n });\n\n if (isReflowProperty) {\n this.refresh();\n }\n };\n /**\r\n * Returns instance of the ResizeObserverController.\r\n *\r\n * @returns {ResizeObserverController}\r\n */\n\n\n ResizeObserverController.getInstance = function () {\n if (!this.instance_) {\n this.instance_ = new ResizeObserverController();\n }\n\n return this.instance_;\n };\n /**\r\n * Holds reference to the controller\'s instance.\r\n *\r\n * @private {ResizeObserverController}\r\n */\n\n\n ResizeObserverController.instance_ = null;\n return ResizeObserverController;\n}();\n/**\r\n * Defines non-writable/enumerable properties of the provided target object.\r\n *\r\n * @param {Object} target - Object for which to define properties.\r\n * @param {Object} props - Properties to be defined.\r\n * @returns {Object} Target object.\r\n */\n\n\nvar defineConfigurable = function defineConfigurable(target, props) {\n for (var _i = 0, _a = Object.keys(props); _i < _a.length; _i++) {\n var key = _a[_i];\n Object.defineProperty(target, key, {\n value: props[key],\n enumerable: false,\n writable: false,\n configurable: true\n });\n }\n\n return target;\n};\n/**\r\n * Returns the global object associated with provided element.\r\n *\r\n * @param {Object} target\r\n * @returns {Object}\r\n */\n\n\nvar getWindowOf = function getWindowOf(target) {\n // Assume that the element is an instance of Node, which means that it\n // has the "ownerDocument" property from which we can retrieve a\n // corresponding global object.\n var ownerGlobal = target && target.ownerDocument && target.ownerDocument.defaultView; // Return the local global object if it\'s not possible extract one from\n // provided element.\n\n return ownerGlobal || global$1;\n}; // Placeholder of an empty content rectangle.\n\n\nvar emptyRect = createRectInit(0, 0, 0, 0);\n/**\r\n * Converts provided string to a number.\r\n *\r\n * @param {number|string} value\r\n * @returns {number}\r\n */\n\nfunction toFloat(value) {\n return parseFloat(value) || 0;\n}\n/**\r\n * Extracts borders size from provided styles.\r\n *\r\n * @param {CSSStyleDeclaration} styles\r\n * @param {...string} positions - Borders positions (top, right, ...)\r\n * @returns {number}\r\n */\n\n\nfunction getBordersSize(styles) {\n var positions = [];\n\n for (var _i = 1; _i < arguments.length; _i++) {\n positions[_i - 1] = arguments[_i];\n }\n\n return positions.reduce(function (size, position) {\n var value = styles[\'border-\' + position + \'-width\'];\n return size + toFloat(value);\n }, 0);\n}\n/**\r\n * Extracts paddings sizes from provided styles.\r\n *\r\n * @param {CSSStyleDeclaration} styles\r\n * @returns {Object} Paddings box.\r\n */\n\n\nfunction getPaddings(styles) {\n var positions = [\'top\', \'right\', \'bottom\', \'left\'];\n var paddings = {};\n\n for (var _i = 0, positions_1 = positions; _i < positions_1.length; _i++) {\n var position = positions_1[_i];\n var value = styles[\'padding-\' + position];\n paddings[position] = toFloat(value);\n }\n\n return paddings;\n}\n/**\r\n * Calculates content rectangle of provided SVG element.\r\n *\r\n * @param {SVGGraphicsElement} target - Element content rectangle of which needs\r\n * to be calculated.\r\n * @returns {DOMRectInit}\r\n */\n\n\nfunction getSVGContentRect(target) {\n var bbox = target.getBBox();\n return createRectInit(0, 0, bbox.width, bbox.height);\n}\n/**\r\n * Calculates content rectangle of provided HTMLElement.\r\n *\r\n * @param {HTMLElement} target - Element for which to calculate the content rectangle.\r\n * @returns {DOMRectInit}\r\n */\n\n\nfunction getHTMLElementContentRect(target) {\n // Client width & height properties can\'t be\n // used exclusively as they provide rounded values.\n var clientWidth = target.clientWidth,\n clientHeight = target.clientHeight; // By this condition we can catch all non-replaced inline, hidden and\n // detached elements. Though elements with width & height properties less\n // than 0.5 will be discarded as well.\n //\n // Without it we would need to implement separate methods for each of\n // those cases and it\'s not possible to perform a precise and performance\n // effective test for hidden elements. E.g. even jQuery\'s \':visible\' filter\n // gives wrong results for elements with width & height less than 0.5.\n\n if (!clientWidth && !clientHeight) {\n return emptyRect;\n }\n\n var styles = getWindowOf(target).getComputedStyle(target);\n var paddings = getPaddings(styles);\n var horizPad = paddings.left + paddings.right;\n var vertPad = paddings.top + paddings.bottom; // Computed styles of width & height are being used because they are the\n // only dimensions available to JS that contain non-rounded values. It could\n // be possible to utilize the getBoundingClientRect if only it\'s data wasn\'t\n // affected by CSS transformations let alone paddings, borders and scroll bars.\n\n var width = toFloat(styles.width),\n height = toFloat(styles.height); // Width & height include paddings and borders when the \'border-box\' box\n // model is applied (except for IE).\n\n if (styles.boxSizing === \'border-box\') {\n // Following conditions are required to handle Internet Explorer which\n // doesn\'t include paddings and borders to computed CSS dimensions.\n //\n // We can say that if CSS dimensions + paddings are equal to the "client"\n // properties then it\'s either IE, and thus we don\'t need to subtract\n // anything, or an element merely doesn\'t have paddings/borders styles.\n if (Math.round(width + horizPad) !== clientWidth) {\n width -= getBordersSize(styles, \'left\', \'right\') + horizPad;\n }\n\n if (Math.round(height + vertPad) !== clientHeight) {\n height -= getBordersSize(styles, \'top\', \'bottom\') + vertPad;\n }\n } // Following steps can\'t be applied to the document\'s root element as its\n // client[Width/Height] properties represent viewport area of the window.\n // Besides, it\'s as well not necessary as the itself neither has\n // rendered scroll bars nor it can be clipped.\n\n\n if (!isDocumentElement(target)) {\n // In some browsers (only in Firefox, actually) CSS width & height\n // include scroll bars size which can be removed at this step as scroll\n // bars are the only difference between rounded dimensions + paddings\n // and "client" properties, though that is not always true in Chrome.\n var vertScrollbar = Math.round(width + horizPad) - clientWidth;\n var horizScrollbar = Math.round(height + vertPad) - clientHeight; // Chrome has a rather weird rounding of "client" properties.\n // E.g. for an element with content width of 314.2px it sometimes gives\n // the client width of 315px and for the width of 314.7px it may give\n // 314px. And it doesn\'t happen all the time. So just ignore this delta\n // as a non-relevant.\n\n if (Math.abs(vertScrollbar) !== 1) {\n width -= vertScrollbar;\n }\n\n if (Math.abs(horizScrollbar) !== 1) {\n height -= horizScrollbar;\n }\n }\n\n return createRectInit(paddings.left, paddings.top, width, height);\n}\n/**\r\n * Checks whether provided element is an instance of the SVGGraphicsElement.\r\n *\r\n * @param {Element} target - Element to be checked.\r\n * @returns {boolean}\r\n */\n\n\nvar isSVGGraphicsElement = function () {\n // Some browsers, namely IE and Edge, don\'t have the SVGGraphicsElement\n // interface.\n if (typeof SVGGraphicsElement !== \'undefined\') {\n return function (target) {\n return target instanceof getWindowOf(target).SVGGraphicsElement;\n };\n } // If it\'s so, then check that element is at least an instance of the\n // SVGElement and that it has the "getBBox" method.\n // eslint-disable-next-line no-extra-parens\n\n\n return function (target) {\n return target instanceof getWindowOf(target).SVGElement && typeof target.getBBox === \'function\';\n };\n}();\n/**\r\n * Checks whether provided element is a document element ().\r\n *\r\n * @param {Element} target - Element to be checked.\r\n * @returns {boolean}\r\n */\n\n\nfunction isDocumentElement(target) {\n return target === getWindowOf(target).document.documentElement;\n}\n/**\r\n * Calculates an appropriate content rectangle for provided html or svg element.\r\n *\r\n * @param {Element} target - Element content rectangle of which needs to be calculated.\r\n * @returns {DOMRectInit}\r\n */\n\n\nfunction getContentRect(target) {\n if (!isBrowser) {\n return emptyRect;\n }\n\n if (isSVGGraphicsElement(target)) {\n return getSVGContentRect(target);\n }\n\n return getHTMLElementContentRect(target);\n}\n/**\r\n * Creates rectangle with an interface of the DOMRectReadOnly.\r\n * Spec: https://drafts.fxtf.org/geometry/#domrectreadonly\r\n *\r\n * @param {DOMRectInit} rectInit - Object with rectangle\'s x/y coordinates and dimensions.\r\n * @returns {DOMRectReadOnly}\r\n */\n\n\nfunction createReadOnlyRect(_a) {\n var x = _a.x,\n y = _a.y,\n width = _a.width,\n height = _a.height; // If DOMRectReadOnly is available use it as a prototype for the rectangle.\n\n var Constr = typeof DOMRectReadOnly !== \'undefined\' ? DOMRectReadOnly : Object;\n var rect = Object.create(Constr.prototype); // Rectangle\'s properties are not writable and non-enumerable.\n\n defineConfigurable(rect, {\n x: x,\n y: y,\n width: width,\n height: height,\n top: y,\n right: x + width,\n bottom: height + y,\n left: x\n });\n return rect;\n}\n/**\r\n * Creates DOMRectInit object based on the provided dimensions and the x/y coordinates.\r\n * Spec: https://drafts.fxtf.org/geometry/#dictdef-domrectinit\r\n *\r\n * @param {number} x - X coordinate.\r\n * @param {number} y - Y coordinate.\r\n * @param {number} width - Rectangle\'s width.\r\n * @param {number} height - Rectangle\'s height.\r\n * @returns {DOMRectInit}\r\n */\n\n\nfunction createRectInit(x, y, width, height) {\n return {\n x: x,\n y: y,\n width: width,\n height: height\n };\n}\n/**\r\n * Class that is responsible for computations of the content rectangle of\r\n * provided DOM element and for keeping track of it\'s changes.\r\n */\n\n\nvar ResizeObservation =\n/** @class */\nfunction () {\n /**\r\n * Creates an instance of ResizeObservation.\r\n *\r\n * @param {Element} target - Element to be observed.\r\n */\n function ResizeObservation(target) {\n /**\r\n * Broadcasted width of content rectangle.\r\n *\r\n * @type {number}\r\n */\n this.broadcastWidth = 0;\n /**\r\n * Broadcasted height of content rectangle.\r\n *\r\n * @type {number}\r\n */\n\n this.broadcastHeight = 0;\n /**\r\n * Reference to the last observed content rectangle.\r\n *\r\n * @private {DOMRectInit}\r\n */\n\n this.contentRect_ = createRectInit(0, 0, 0, 0);\n this.target = target;\n }\n /**\r\n * Updates content rectangle and tells whether it\'s width or height properties\r\n * have changed since the last broadcast.\r\n *\r\n * @returns {boolean}\r\n */\n\n\n ResizeObservation.prototype.isActive = function () {\n var rect = getContentRect(this.target);\n this.contentRect_ = rect;\n return rect.width !== this.broadcastWidth || rect.height !== this.broadcastHeight;\n };\n /**\r\n * Updates \'broadcastWidth\' and \'broadcastHeight\' properties with a data\r\n * from the corresponding properties of the last observed content rectangle.\r\n *\r\n * @returns {DOMRectInit} Last observed content rectangle.\r\n */\n\n\n ResizeObservation.prototype.broadcastRect = function () {\n var rect = this.contentRect_;\n this.broadcastWidth = rect.width;\n this.broadcastHeight = rect.height;\n return rect;\n };\n\n return ResizeObservation;\n}();\n\nvar ResizeObserverEntry =\n/** @class */\nfunction () {\n /**\r\n * Creates an instance of ResizeObserverEntry.\r\n *\r\n * @param {Element} target - Element that is being observed.\r\n * @param {DOMRectInit} rectInit - Data of the element\'s content rectangle.\r\n */\n function ResizeObserverEntry(target, rectInit) {\n var contentRect = createReadOnlyRect(rectInit); // According to the specification following properties are not writable\n // and are also not enumerable in the native implementation.\n //\n // Property accessors are not being used as they\'d require to define a\n // private WeakMap storage which may cause memory leaks in browsers that\n // don\'t support this type of collections.\n\n defineConfigurable(this, {\n target: target,\n contentRect: contentRect\n });\n }\n\n return ResizeObserverEntry;\n}();\n\nvar ResizeObserverSPI =\n/** @class */\nfunction () {\n /**\r\n * Creates a new instance of ResizeObserver.\r\n *\r\n * @param {ResizeObserverCallback} callback - Callback function that is invoked\r\n * when one of the observed elements changes it\'s content dimensions.\r\n * @param {ResizeObserverController} controller - Controller instance which\r\n * is responsible for the updates of observer.\r\n * @param {ResizeObserver} callbackCtx - Reference to the public\r\n * ResizeObserver instance which will be passed to callback function.\r\n */\n function ResizeObserverSPI(callback, controller, callbackCtx) {\n /**\r\n * Collection of resize observations that have detected changes in dimensions\r\n * of elements.\r\n *\r\n * @private {Array}\r\n */\n this.activeObservations_ = [];\n /**\r\n * Registry of the ResizeObservation instances.\r\n *\r\n * @private {Map}\r\n */\n\n this.observations_ = new MapShim();\n\n if (typeof callback !== \'function\') {\n throw new TypeError(\'The callback provided as parameter 1 is not a function.\');\n }\n\n this.callback_ = callback;\n this.controller_ = controller;\n this.callbackCtx_ = callbackCtx;\n }\n /**\r\n * Starts observing provided element.\r\n *\r\n * @param {Element} target - Element to be observed.\r\n * @returns {void}\r\n */\n\n\n ResizeObserverSPI.prototype.observe = function (target) {\n if (!arguments.length) {\n throw new TypeError(\'1 argument required, but only 0 present.\');\n } // Do nothing if current environment doesn\'t have the Element interface.\n\n\n if (typeof Element === \'undefined\' || !(Element instanceof Object)) {\n return;\n }\n\n if (!(target instanceof getWindowOf(target).Element)) {\n throw new TypeError(\'parameter 1 is not of type "Element".\');\n }\n\n var observations = this.observations_; // Do nothing if element is already being observed.\n\n if (observations.has(target)) {\n return;\n }\n\n observations.set(target, new ResizeObservation(target));\n this.controller_.addObserver(this); // Force the update of observations.\n\n this.controller_.refresh();\n };\n /**\r\n * Stops observing provided element.\r\n *\r\n * @param {Element} target - Element to stop observing.\r\n * @returns {void}\r\n */\n\n\n ResizeObserverSPI.prototype.unobserve = function (target) {\n if (!arguments.length) {\n throw new TypeError(\'1 argument required, but only 0 present.\');\n } // Do nothing if current environment doesn\'t have the Element interface.\n\n\n if (typeof Element === \'undefined\' || !(Element instanceof Object)) {\n return;\n }\n\n if (!(target instanceof getWindowOf(target).Element)) {\n throw new TypeError(\'parameter 1 is not of type "Element".\');\n }\n\n var observations = this.observations_; // Do nothing if element is not being observed.\n\n if (!observations.has(target)) {\n return;\n }\n\n observations.delete(target);\n\n if (!observations.size) {\n this.controller_.removeObserver(this);\n }\n };\n /**\r\n * Stops observing all elements.\r\n *\r\n * @returns {void}\r\n */\n\n\n ResizeObserverSPI.prototype.disconnect = function () {\n this.clearActive();\n this.observations_.clear();\n this.controller_.removeObserver(this);\n };\n /**\r\n * Collects observation instances the associated element of which has changed\r\n * it\'s content rectangle.\r\n *\r\n * @returns {void}\r\n */\n\n\n ResizeObserverSPI.prototype.gatherActive = function () {\n var _this = this;\n\n this.clearActive();\n this.observations_.forEach(function (observation) {\n if (observation.isActive()) {\n _this.activeObservations_.push(observation);\n }\n });\n };\n /**\r\n * Invokes initial callback function with a list of ResizeObserverEntry\r\n * instances collected from active resize observations.\r\n *\r\n * @returns {void}\r\n */\n\n\n ResizeObserverSPI.prototype.broadcastActive = function () {\n // Do nothing if observer doesn\'t have active observations.\n if (!this.hasActive()) {\n return;\n }\n\n var ctx = this.callbackCtx_; // Create ResizeObserverEntry instance for every active observation.\n\n var entries = this.activeObservations_.map(function (observation) {\n return new ResizeObserverEntry(observation.target, observation.broadcastRect());\n });\n this.callback_.call(ctx, entries, ctx);\n this.clearActive();\n };\n /**\r\n * Clears the collection of active observations.\r\n *\r\n * @returns {void}\r\n */\n\n\n ResizeObserverSPI.prototype.clearActive = function () {\n this.activeObservations_.splice(0);\n };\n /**\r\n * Tells whether observer has active observations.\r\n *\r\n * @returns {boolean}\r\n */\n\n\n ResizeObserverSPI.prototype.hasActive = function () {\n return this.activeObservations_.length > 0;\n };\n\n return ResizeObserverSPI;\n}(); // Registry of internal observers. If WeakMap is not available use current shim\n// for the Map collection as it has all required methods and because WeakMap\n// can\'t be fully polyfilled anyway.\n\n\nvar observers = typeof WeakMap !== \'undefined\' ? new WeakMap() : new MapShim();\n/**\r\n * ResizeObserver API. Encapsulates the ResizeObserver SPI implementation\r\n * exposing only those methods and properties that are defined in the spec.\r\n */\n\nvar ResizeObserver =\n/** @class */\nfunction () {\n /**\r\n * Creates a new instance of ResizeObserver.\r\n *\r\n * @param {ResizeObserverCallback} callback - Callback that is invoked when\r\n * dimensions of the observed elements change.\r\n */\n function ResizeObserver(callback) {\n if (!(this instanceof ResizeObserver)) {\n throw new TypeError(\'Cannot call a class as a function.\');\n }\n\n if (!arguments.length) {\n throw new TypeError(\'1 argument required, but only 0 present.\');\n }\n\n var controller = ResizeObserverController.getInstance();\n var observer = new ResizeObserverSPI(callback, controller, this);\n observers.set(this, observer);\n }\n\n return ResizeObserver;\n}(); // Expose public methods of ResizeObserver.\n\n\n[\'observe\', \'unobserve\', \'disconnect\'].forEach(function (method) {\n ResizeObserver.prototype[method] = function () {\n var _a;\n\n return (_a = observers.get(this))[method].apply(_a, arguments);\n };\n});\n\nvar index = function () {\n // Export existing implementation if available.\n if (typeof global$1.ResizeObserver !== \'undefined\') {\n return global$1.ResizeObserver;\n }\n\n return ResizeObserver;\n}();\n\n/* harmony default export */ var ResizeObserver_es = (index);\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/utils/globals.js\nvar window_ = typeof window !== \'undefined\' ? window : __webpack_require__.g;\nvar global_ = typeof __webpack_require__.g !== \'undefined\' ? __webpack_require__.g : window;\nvar document_ = typeof document !== \'undefined\' ? document : {};\n\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/utils/style-utils.js\n\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n defineProperty_defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction style_utils_createForOfIteratorHelper(o, allowArrayLike) {\n var it;\n\n if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) {\n if (Array.isArray(o) || (it = style_utils_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {\n if (it) o = it;\n var i = 0;\n\n var F = function F() {};\n\n return {\n s: F,\n n: function n() {\n if (i >= o.length) return {\n done: true\n };\n return {\n done: false,\n value: o[i++]\n };\n },\n e: function e(_e) {\n throw _e;\n },\n f: F\n };\n }\n\n throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");\n }\n\n var normalCompletion = true,\n didErr = false,\n err;\n return {\n s: function s() {\n it = o[Symbol.iterator]();\n },\n n: function n() {\n var step = it.next();\n normalCompletion = step.done;\n return step;\n },\n e: function e(_e2) {\n didErr = true;\n err = _e2;\n },\n f: function f() {\n try {\n if (!normalCompletion && it["return"] != null) it["return"]();\n } finally {\n if (didErr) throw err;\n }\n }\n };\n}\n\nfunction style_utils_unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === "string") return style_utils_arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === "Object" && o.constructor) n = o.constructor.name;\n if (n === "Map" || n === "Set") return Array.from(o);\n if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return style_utils_arrayLikeToArray(o, minLen);\n}\n\nfunction style_utils_arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}\n\nvar refProps = [\'type\', \'source\', \'source-layer\', \'minzoom\', \'maxzoom\', \'filter\', \'layout\'];\nfunction normalizeStyle(style) {\n if (!style) {\n return null;\n }\n\n if (typeof style === \'string\') {\n return style;\n }\n\n if (style.toJS) {\n style = style.toJS();\n }\n\n var layerIndex = {};\n\n var _iterator = style_utils_createForOfIteratorHelper(style.layers),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var layer = _step.value;\n layerIndex[layer.id] = layer;\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n var layers = style.layers.map(function (layer) {\n var layerRef = layerIndex[layer.ref];\n var normalizedLayer = null;\n\n if (\'interactive\' in layer) {\n normalizedLayer = _objectSpread({}, layer);\n delete normalizedLayer.interactive;\n }\n\n if (layerRef) {\n normalizedLayer = normalizedLayer || _objectSpread({}, layer);\n delete normalizedLayer.ref;\n\n var _iterator2 = style_utils_createForOfIteratorHelper(refProps),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var propName = _step2.value;\n\n if (propName in layerRef) {\n normalizedLayer[propName] = layerRef[propName];\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n }\n\n return normalizedLayer || layer;\n });\n return _objectSpread(_objectSpread({}, style), {}, {\n layers: layers\n });\n}\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/mapbox/mapbox.js\n\n\n\n\n\n\n\nfunction noop() {}\n\nfunction defaultOnError(event) {\n if (event) {\n console.error(event.error);\n }\n}\n\nvar propTypes = {\n container: prop_types.object,\n gl: prop_types.object,\n mapboxApiAccessToken: prop_types.string,\n mapboxApiUrl: prop_types.string,\n attributionControl: prop_types.bool,\n preserveDrawingBuffer: prop_types.bool,\n reuseMaps: prop_types.bool,\n transformRequest: prop_types.func,\n mapOptions: prop_types.object,\n mapStyle: prop_types.oneOfType([prop_types.string, prop_types.object]),\n preventStyleDiffing: prop_types.bool,\n visible: prop_types.bool,\n asyncRender: prop_types.bool,\n onLoad: prop_types.func,\n onError: prop_types.func,\n width: prop_types.number,\n height: prop_types.number,\n viewState: prop_types.object,\n longitude: prop_types.number,\n latitude: prop_types.number,\n zoom: prop_types.number,\n bearing: prop_types.number,\n pitch: prop_types.number,\n altitude: prop_types.number\n};\nvar defaultProps = {\n container: document_.body,\n mapboxApiAccessToken: getAccessToken(),\n mapboxApiUrl: \'https://api.mapbox.com\',\n preserveDrawingBuffer: false,\n attributionControl: true,\n reuseMaps: false,\n mapOptions: {},\n mapStyle: \'mapbox://styles/mapbox/light-v8\',\n preventStyleDiffing: false,\n visible: true,\n asyncRender: false,\n onLoad: noop,\n onError: defaultOnError,\n width: 0,\n height: 0,\n longitude: 0,\n latitude: 0,\n zoom: 0,\n bearing: 0,\n pitch: 0,\n altitude: 1.5\n};\nfunction getAccessToken() {\n var accessToken = null;\n\n if (typeof window !== \'undefined\' && window.location) {\n var match = window.location.search.match(/access_token=([^&\\/]*)/);\n accessToken = match && match[1];\n }\n\n if (!accessToken && typeof process !== \'undefined\') {\n accessToken = accessToken || ({}).MapboxAccessToken || ({}).REACT_APP_MAPBOX_ACCESS_TOKEN;\n }\n\n return accessToken || \'no-token\';\n}\n\nfunction checkPropTypes(props) {\n var component = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \'component\';\n\n if (props.debug) {\n prop_types.checkPropTypes(propTypes, props, \'prop\', component);\n }\n}\n\nvar Mapbox = function () {\n function Mapbox(props) {\n var _this = this;\n\n _classCallCheck(this, Mapbox);\n\n defineProperty_defineProperty(this, "props", defaultProps);\n\n defineProperty_defineProperty(this, "width", 0);\n\n defineProperty_defineProperty(this, "height", 0);\n\n defineProperty_defineProperty(this, "_fireLoadEvent", function () {\n _this.props.onLoad({\n type: \'load\',\n target: _this._map\n });\n });\n\n if (!props.mapboxgl) {\n throw new Error(\'Mapbox not available\');\n }\n\n this.mapboxgl = props.mapboxgl;\n\n if (!Mapbox.initialized) {\n Mapbox.initialized = true;\n\n this._checkStyleSheet(this.mapboxgl.version);\n }\n\n this._initialize(props);\n }\n\n _createClass(Mapbox, [{\n key: "finalize",\n value: function finalize() {\n this._destroy();\n\n return this;\n }\n }, {\n key: "setProps",\n value: function setProps(props) {\n this._update(this.props, props);\n\n return this;\n }\n }, {\n key: "redraw",\n value: function redraw() {\n var map = this._map;\n\n if (map.style) {\n if (map._frame) {\n map._frame.cancel();\n\n map._frame = null;\n }\n\n map._render();\n }\n }\n }, {\n key: "getMap",\n value: function getMap() {\n return this._map;\n }\n }, {\n key: "_reuse",\n value: function _reuse(props) {\n this._map = Mapbox.savedMap;\n\n var oldContainer = this._map.getContainer();\n\n var newContainer = props.container;\n newContainer.classList.add(\'mapboxgl-map\');\n\n while (oldContainer.childNodes.length > 0) {\n newContainer.appendChild(oldContainer.childNodes[0]);\n }\n\n this._map._container = newContainer;\n Mapbox.savedMap = null;\n\n if (props.mapStyle) {\n this._map.setStyle(normalizeStyle(props.mapStyle), {\n diff: false\n });\n }\n\n if (this._map.isStyleLoaded()) {\n this._fireLoadEvent();\n } else {\n this._map.once(\'styledata\', this._fireLoadEvent);\n }\n }\n }, {\n key: "_create",\n value: function _create(props) {\n if (props.reuseMaps && Mapbox.savedMap) {\n this._reuse(props);\n } else {\n if (props.gl) {\n var getContext = HTMLCanvasElement.prototype.getContext;\n\n HTMLCanvasElement.prototype.getContext = function () {\n HTMLCanvasElement.prototype.getContext = getContext;\n return props.gl;\n };\n }\n\n var mapOptions = {\n container: props.container,\n center: [0, 0],\n zoom: 8,\n pitch: 0,\n bearing: 0,\n maxZoom: 24,\n style: normalizeStyle(props.mapStyle),\n interactive: false,\n trackResize: false,\n attributionControl: props.attributionControl,\n preserveDrawingBuffer: props.preserveDrawingBuffer\n };\n\n if (props.transformRequest) {\n mapOptions.transformRequest = props.transformRequest;\n }\n\n this._map = new this.mapboxgl.Map(Object.assign({}, mapOptions, props.mapOptions));\n\n this._map.once(\'load\', props.onLoad);\n\n this._map.on(\'error\', props.onError);\n }\n\n return this;\n }\n }, {\n key: "_destroy",\n value: function _destroy() {\n if (!this._map) {\n return;\n }\n\n if (!Mapbox.savedMap) {\n Mapbox.savedMap = this._map;\n\n this._map.off(\'load\', this.props.onLoad);\n\n this._map.off(\'error\', this.props.onError);\n\n this._map.off(\'styledata\', this._fireLoadEvent);\n } else {\n this._map.remove();\n }\n\n this._map = null;\n }\n }, {\n key: "_initialize",\n value: function _initialize(props) {\n var _this2 = this;\n\n props = Object.assign({}, defaultProps, props);\n checkPropTypes(props, \'Mapbox\');\n this.mapboxgl.accessToken = props.mapboxApiAccessToken || defaultProps.mapboxApiAccessToken;\n this.mapboxgl.baseApiUrl = props.mapboxApiUrl;\n\n this._create(props);\n\n var _props = props,\n container = _props.container;\n Object.defineProperty(container, \'offsetWidth\', {\n get: function get() {\n return _this2.width;\n }\n });\n Object.defineProperty(container, \'clientWidth\', {\n get: function get() {\n return _this2.width;\n }\n });\n Object.defineProperty(container, \'offsetHeight\', {\n get: function get() {\n return _this2.height;\n }\n });\n Object.defineProperty(container, \'clientHeight\', {\n get: function get() {\n return _this2.height;\n }\n });\n\n var canvas = this._map.getCanvas();\n\n if (canvas) {\n canvas.style.outline = \'none\';\n }\n\n this._updateMapViewport({}, props);\n\n this._updateMapSize({}, props);\n\n this.props = props;\n }\n }, {\n key: "_update",\n value: function _update(oldProps, newProps) {\n if (!this._map) {\n return;\n }\n\n newProps = Object.assign({}, this.props, newProps);\n checkPropTypes(newProps, \'Mapbox\');\n\n var viewportChanged = this._updateMapViewport(oldProps, newProps);\n\n var sizeChanged = this._updateMapSize(oldProps, newProps);\n\n this._updateMapStyle(oldProps, newProps);\n\n if (!newProps.asyncRender && (viewportChanged || sizeChanged)) {\n this.redraw();\n }\n\n this.props = newProps;\n }\n }, {\n key: "_updateMapStyle",\n value: function _updateMapStyle(oldProps, newProps) {\n var styleChanged = oldProps.mapStyle !== newProps.mapStyle;\n\n if (styleChanged) {\n this._map.setStyle(normalizeStyle(newProps.mapStyle), {\n diff: !newProps.preventStyleDiffing\n });\n }\n }\n }, {\n key: "_updateMapSize",\n value: function _updateMapSize(oldProps, newProps) {\n var sizeChanged = oldProps.width !== newProps.width || oldProps.height !== newProps.height;\n\n if (sizeChanged) {\n this.width = newProps.width;\n this.height = newProps.height;\n\n this._map.resize();\n }\n\n return sizeChanged;\n }\n }, {\n key: "_updateMapViewport",\n value: function _updateMapViewport(oldProps, newProps) {\n var oldViewState = this._getViewState(oldProps);\n\n var newViewState = this._getViewState(newProps);\n\n var viewportChanged = newViewState.latitude !== oldViewState.latitude || newViewState.longitude !== oldViewState.longitude || newViewState.zoom !== oldViewState.zoom || newViewState.pitch !== oldViewState.pitch || newViewState.bearing !== oldViewState.bearing || newViewState.altitude !== oldViewState.altitude;\n\n if (viewportChanged) {\n this._map.jumpTo(this._viewStateToMapboxProps(newViewState));\n\n if (newViewState.altitude !== oldViewState.altitude) {\n this._map.transform.altitude = newViewState.altitude;\n }\n }\n\n return viewportChanged;\n }\n }, {\n key: "_getViewState",\n value: function _getViewState(props) {\n var _ref = props.viewState || props,\n longitude = _ref.longitude,\n latitude = _ref.latitude,\n zoom = _ref.zoom,\n _ref$pitch = _ref.pitch,\n pitch = _ref$pitch === void 0 ? 0 : _ref$pitch,\n _ref$bearing = _ref.bearing,\n bearing = _ref$bearing === void 0 ? 0 : _ref$bearing,\n _ref$altitude = _ref.altitude,\n altitude = _ref$altitude === void 0 ? 1.5 : _ref$altitude;\n\n return {\n longitude: longitude,\n latitude: latitude,\n zoom: zoom,\n pitch: pitch,\n bearing: bearing,\n altitude: altitude\n };\n }\n }, {\n key: "_checkStyleSheet",\n value: function _checkStyleSheet() {\n var mapboxVersion = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \'0.47.0\';\n\n if (typeof document_ === \'undefined\') {\n return;\n }\n\n try {\n var testElement = document_.createElement(\'div\');\n testElement.className = \'mapboxgl-map\';\n testElement.style.display = \'none\';\n document_.body.appendChild(testElement);\n var isCssLoaded = window.getComputedStyle(testElement).position !== \'static\';\n\n if (!isCssLoaded) {\n var link = document_.createElement(\'link\');\n link.setAttribute(\'rel\', \'stylesheet\');\n link.setAttribute(\'type\', \'text/css\');\n link.setAttribute(\'href\', "https://api.tiles.mapbox.com/mapbox-gl-js/v".concat(mapboxVersion, "/mapbox-gl.css"));\n document_.head.appendChild(link);\n }\n } catch (error) {}\n }\n }, {\n key: "_viewStateToMapboxProps",\n value: function _viewStateToMapboxProps(viewState) {\n return {\n center: [viewState.longitude, viewState.latitude],\n zoom: viewState.zoom,\n bearing: viewState.bearing,\n pitch: viewState.pitch\n };\n }\n }]);\n\n return Mapbox;\n}();\n\ndefineProperty_defineProperty(Mapbox, "initialized", false);\n\ndefineProperty_defineProperty(Mapbox, "propTypes", propTypes);\n\ndefineProperty_defineProperty(Mapbox, "defaultProps", defaultProps);\n\ndefineProperty_defineProperty(Mapbox, "savedMap", null);\n\n\n// EXTERNAL MODULE: ./node_modules/maplibre-gl/dist/maplibre-gl.js\nvar maplibre_gl = __webpack_require__(9910);\nvar maplibre_gl_default = /*#__PURE__*/__webpack_require__.n(maplibre_gl);\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/utils/mapboxgl.browser.js\n\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/utils/math-utils.js\nvar math_utils_EPSILON = 1e-7;\n\nfunction isArray(value) {\n return Array.isArray(value) || ArrayBuffer.isView(value);\n}\n\nfunction math_utils_equals(a, b) {\n if (a === b) {\n return true;\n }\n\n if (isArray(a) && isArray(b)) {\n if (a.length !== b.length) {\n return false;\n }\n\n for (var i = 0; i < a.length; ++i) {\n if (!math_utils_equals(a[i], b[i])) {\n return false;\n }\n }\n\n return true;\n }\n\n return Math.abs(a - b) <= math_utils_EPSILON;\n}\nfunction clamp(value, min, max) {\n return Math.max(min, Math.min(max, value));\n}\nfunction utils_math_utils_lerp(a, b, t) {\n if (isArray(a)) {\n return a.map(function (ai, i) {\n return utils_math_utils_lerp(ai, b[i], t);\n });\n }\n\n return t * b + (1 - t) * a;\n}\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/utils/assert.js\nfunction utils_assert_assert(condition, message) {\n if (!condition) {\n throw new Error(message || \'react-map-gl: assertion failed.\');\n }\n}\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/utils/map-state.js\n\n\n\n\n\nfunction map_state_ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction map_state_objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n map_state_ownKeys(Object(source), true).forEach(function (key) {\n defineProperty_defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n map_state_ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\n\n\n\nvar MAPBOX_LIMITS = {\n minZoom: 0,\n maxZoom: 24,\n minPitch: 0,\n maxPitch: 85\n};\nvar DEFAULT_STATE = {\n pitch: 0,\n bearing: 0,\n altitude: 1.5\n};\nvar PITCH_MOUSE_THRESHOLD = 5;\nvar PITCH_ACCEL = 1.2;\n\nvar MapState = function () {\n function MapState(_ref) {\n var width = _ref.width,\n height = _ref.height,\n latitude = _ref.latitude,\n longitude = _ref.longitude,\n zoom = _ref.zoom,\n _ref$bearing = _ref.bearing,\n bearing = _ref$bearing === void 0 ? DEFAULT_STATE.bearing : _ref$bearing,\n _ref$pitch = _ref.pitch,\n pitch = _ref$pitch === void 0 ? DEFAULT_STATE.pitch : _ref$pitch,\n _ref$altitude = _ref.altitude,\n altitude = _ref$altitude === void 0 ? DEFAULT_STATE.altitude : _ref$altitude,\n _ref$maxZoom = _ref.maxZoom,\n maxZoom = _ref$maxZoom === void 0 ? MAPBOX_LIMITS.maxZoom : _ref$maxZoom,\n _ref$minZoom = _ref.minZoom,\n minZoom = _ref$minZoom === void 0 ? MAPBOX_LIMITS.minZoom : _ref$minZoom,\n _ref$maxPitch = _ref.maxPitch,\n maxPitch = _ref$maxPitch === void 0 ? MAPBOX_LIMITS.maxPitch : _ref$maxPitch,\n _ref$minPitch = _ref.minPitch,\n minPitch = _ref$minPitch === void 0 ? MAPBOX_LIMITS.minPitch : _ref$minPitch,\n transitionDuration = _ref.transitionDuration,\n transitionEasing = _ref.transitionEasing,\n transitionInterpolator = _ref.transitionInterpolator,\n transitionInterruption = _ref.transitionInterruption,\n startPanLngLat = _ref.startPanLngLat,\n startZoomLngLat = _ref.startZoomLngLat,\n startRotatePos = _ref.startRotatePos,\n startBearing = _ref.startBearing,\n startPitch = _ref.startPitch,\n startZoom = _ref.startZoom;\n\n _classCallCheck(this, MapState);\n\n utils_assert_assert(Number.isFinite(width), \'`width` must be supplied\');\n utils_assert_assert(Number.isFinite(height), \'`height` must be supplied\');\n utils_assert_assert(Number.isFinite(longitude), \'`longitude` must be supplied\');\n utils_assert_assert(Number.isFinite(latitude), \'`latitude` must be supplied\');\n utils_assert_assert(Number.isFinite(zoom), \'`zoom` must be supplied\');\n this._viewportProps = this._applyConstraints({\n width: width,\n height: height,\n latitude: latitude,\n longitude: longitude,\n zoom: zoom,\n bearing: bearing,\n pitch: pitch,\n altitude: altitude,\n maxZoom: maxZoom,\n minZoom: minZoom,\n maxPitch: maxPitch,\n minPitch: minPitch,\n transitionDuration: transitionDuration,\n transitionEasing: transitionEasing,\n transitionInterpolator: transitionInterpolator,\n transitionInterruption: transitionInterruption\n });\n this._state = {\n startPanLngLat: startPanLngLat,\n startZoomLngLat: startZoomLngLat,\n startRotatePos: startRotatePos,\n startBearing: startBearing,\n startPitch: startPitch,\n startZoom: startZoom\n };\n }\n\n _createClass(MapState, [{\n key: "getViewportProps",\n value: function getViewportProps() {\n return this._viewportProps;\n }\n }, {\n key: "getState",\n value: function getState() {\n return this._state;\n }\n }, {\n key: "panStart",\n value: function panStart(_ref2) {\n var pos = _ref2.pos;\n return this._getUpdatedMapState({\n startPanLngLat: this._unproject(pos)\n });\n }\n }, {\n key: "pan",\n value: function pan(_ref3) {\n var pos = _ref3.pos,\n startPos = _ref3.startPos;\n\n var startPanLngLat = this._state.startPanLngLat || this._unproject(startPos);\n\n if (!startPanLngLat) {\n return this;\n }\n\n var _this$_calculateNewLn = this._calculateNewLngLat({\n startPanLngLat: startPanLngLat,\n pos: pos\n }),\n _this$_calculateNewLn2 = slicedToArray_slicedToArray(_this$_calculateNewLn, 2),\n longitude = _this$_calculateNewLn2[0],\n latitude = _this$_calculateNewLn2[1];\n\n return this._getUpdatedMapState({\n longitude: longitude,\n latitude: latitude\n });\n }\n }, {\n key: "panEnd",\n value: function panEnd() {\n return this._getUpdatedMapState({\n startPanLngLat: null\n });\n }\n }, {\n key: "rotateStart",\n value: function rotateStart(_ref4) {\n var pos = _ref4.pos;\n return this._getUpdatedMapState({\n startRotatePos: pos,\n startBearing: this._viewportProps.bearing,\n startPitch: this._viewportProps.pitch\n });\n }\n }, {\n key: "rotate",\n value: function rotate(_ref5) {\n var pos = _ref5.pos,\n _ref5$deltaAngleX = _ref5.deltaAngleX,\n deltaAngleX = _ref5$deltaAngleX === void 0 ? 0 : _ref5$deltaAngleX,\n _ref5$deltaAngleY = _ref5.deltaAngleY,\n deltaAngleY = _ref5$deltaAngleY === void 0 ? 0 : _ref5$deltaAngleY;\n var _this$_state = this._state,\n startRotatePos = _this$_state.startRotatePos,\n startBearing = _this$_state.startBearing,\n startPitch = _this$_state.startPitch;\n\n if (!Number.isFinite(startBearing) || !Number.isFinite(startPitch)) {\n return this;\n }\n\n var newRotation;\n\n if (pos) {\n newRotation = this._calculateNewPitchAndBearing(map_state_objectSpread(map_state_objectSpread({}, this._getRotationParams(pos, startRotatePos)), {}, {\n startBearing: startBearing,\n startPitch: startPitch\n }));\n } else {\n newRotation = {\n bearing: startBearing + deltaAngleX,\n pitch: startPitch + deltaAngleY\n };\n }\n\n return this._getUpdatedMapState(newRotation);\n }\n }, {\n key: "rotateEnd",\n value: function rotateEnd() {\n return this._getUpdatedMapState({\n startBearing: null,\n startPitch: null\n });\n }\n }, {\n key: "zoomStart",\n value: function zoomStart(_ref6) {\n var pos = _ref6.pos;\n return this._getUpdatedMapState({\n startZoomLngLat: this._unproject(pos),\n startZoom: this._viewportProps.zoom\n });\n }\n }, {\n key: "zoom",\n value: function zoom(_ref7) {\n var pos = _ref7.pos,\n startPos = _ref7.startPos,\n scale = _ref7.scale;\n utils_assert_assert(scale > 0, \'`scale` must be a positive number\');\n var _this$_state2 = this._state,\n startZoom = _this$_state2.startZoom,\n startZoomLngLat = _this$_state2.startZoomLngLat;\n\n if (!Number.isFinite(startZoom)) {\n startZoom = this._viewportProps.zoom;\n startZoomLngLat = this._unproject(startPos) || this._unproject(pos);\n }\n\n utils_assert_assert(startZoomLngLat, \'`startZoomLngLat` prop is required \' + \'for zoom behavior to calculate where to position the map.\');\n\n var zoom = this._calculateNewZoom({\n scale: scale,\n startZoom: startZoom || 0\n });\n\n var zoomedViewport = new WebMercatorViewport(Object.assign({}, this._viewportProps, {\n zoom: zoom\n }));\n\n var _zoomedViewport$getMa = zoomedViewport.getMapCenterByLngLatPosition({\n lngLat: startZoomLngLat,\n pos: pos\n }),\n _zoomedViewport$getMa2 = slicedToArray_slicedToArray(_zoomedViewport$getMa, 2),\n longitude = _zoomedViewport$getMa2[0],\n latitude = _zoomedViewport$getMa2[1];\n\n return this._getUpdatedMapState({\n zoom: zoom,\n longitude: longitude,\n latitude: latitude\n });\n }\n }, {\n key: "zoomEnd",\n value: function zoomEnd() {\n return this._getUpdatedMapState({\n startZoomLngLat: null,\n startZoom: null\n });\n }\n }, {\n key: "_getUpdatedMapState",\n value: function _getUpdatedMapState(newProps) {\n return new MapState(Object.assign({}, this._viewportProps, this._state, newProps));\n }\n }, {\n key: "_applyConstraints",\n value: function _applyConstraints(props) {\n var maxZoom = props.maxZoom,\n minZoom = props.minZoom,\n zoom = props.zoom;\n props.zoom = clamp(zoom, minZoom, maxZoom);\n var maxPitch = props.maxPitch,\n minPitch = props.minPitch,\n pitch = props.pitch;\n props.pitch = clamp(pitch, minPitch, maxPitch);\n Object.assign(props, normalizeViewportProps(props));\n return props;\n }\n }, {\n key: "_unproject",\n value: function _unproject(pos) {\n var viewport = new WebMercatorViewport(this._viewportProps);\n return pos && viewport.unproject(pos);\n }\n }, {\n key: "_calculateNewLngLat",\n value: function _calculateNewLngLat(_ref8) {\n var startPanLngLat = _ref8.startPanLngLat,\n pos = _ref8.pos;\n var viewport = new WebMercatorViewport(this._viewportProps);\n return viewport.getMapCenterByLngLatPosition({\n lngLat: startPanLngLat,\n pos: pos\n });\n }\n }, {\n key: "_calculateNewZoom",\n value: function _calculateNewZoom(_ref9) {\n var scale = _ref9.scale,\n startZoom = _ref9.startZoom;\n var _this$_viewportProps = this._viewportProps,\n maxZoom = _this$_viewportProps.maxZoom,\n minZoom = _this$_viewportProps.minZoom;\n var zoom = startZoom + Math.log2(scale);\n return clamp(zoom, minZoom, maxZoom);\n }\n }, {\n key: "_calculateNewPitchAndBearing",\n value: function _calculateNewPitchAndBearing(_ref10) {\n var deltaScaleX = _ref10.deltaScaleX,\n deltaScaleY = _ref10.deltaScaleY,\n startBearing = _ref10.startBearing,\n startPitch = _ref10.startPitch;\n deltaScaleY = clamp(deltaScaleY, -1, 1);\n var _this$_viewportProps2 = this._viewportProps,\n minPitch = _this$_viewportProps2.minPitch,\n maxPitch = _this$_viewportProps2.maxPitch;\n var bearing = startBearing + 180 * deltaScaleX;\n var pitch = startPitch;\n\n if (deltaScaleY > 0) {\n pitch = startPitch + deltaScaleY * (maxPitch - startPitch);\n } else if (deltaScaleY < 0) {\n pitch = startPitch - deltaScaleY * (minPitch - startPitch);\n }\n\n return {\n pitch: pitch,\n bearing: bearing\n };\n }\n }, {\n key: "_getRotationParams",\n value: function _getRotationParams(pos, startPos) {\n var deltaX = pos[0] - startPos[0];\n var deltaY = pos[1] - startPos[1];\n var centerY = pos[1];\n var startY = startPos[1];\n var _this$_viewportProps3 = this._viewportProps,\n width = _this$_viewportProps3.width,\n height = _this$_viewportProps3.height;\n var deltaScaleX = deltaX / width;\n var deltaScaleY = 0;\n\n if (deltaY > 0) {\n if (Math.abs(height - startY) > PITCH_MOUSE_THRESHOLD) {\n deltaScaleY = deltaY / (startY - height) * PITCH_ACCEL;\n }\n } else if (deltaY < 0) {\n if (startY > PITCH_MOUSE_THRESHOLD) {\n deltaScaleY = 1 - centerY / startY;\n }\n }\n\n deltaScaleY = Math.min(1, Math.max(-1, deltaScaleY));\n return {\n deltaScaleX: deltaScaleX,\n deltaScaleY: deltaScaleY\n };\n }\n }]);\n\n return MapState;\n}();\n\n\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/utils/map-constraints.js\n\n\nfunction decapitalize(s) {\n return s[0].toLowerCase() + s.slice(1);\n}\n\nfunction checkVisibilityConstraints(props) {\n var constraints = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : MAPBOX_LIMITS;\n\n for (var constraintName in constraints) {\n var type = constraintName.slice(0, 3);\n var propName = decapitalize(constraintName.slice(3));\n\n if (type === \'min\' && props[propName] < constraints[constraintName]) {\n return false;\n }\n\n if (type === \'max\' && props[propName] > constraints[constraintName]) {\n return false;\n }\n }\n\n return true;\n}\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/components/map-context.js\n\n\n\nfunction map_context_ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction map_context_objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n map_context_ownKeys(Object(source), true).forEach(function (key) {\n defineProperty_defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n map_context_ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\n\n\nvar map_context_MapContext = (0,react.createContext)({\n viewport: null,\n map: null,\n container: null,\n onViewportChange: null,\n onViewStateChange: null,\n eventManager: null\n});\nvar MapContextProvider = map_context_MapContext.Provider;\n\nfunction WrappedProvider(_ref) {\n var value = _ref.value,\n children = _ref.children;\n\n var _useState = (0,react.useState)(null),\n _useState2 = slicedToArray_slicedToArray(_useState, 2),\n map = _useState2[0],\n setMap = _useState2[1];\n\n var context = (0,react.useContext)(map_context_MapContext);\n value = map_context_objectSpread(map_context_objectSpread({\n setMap: setMap\n }, context), {}, {\n map: context && context.map || map\n }, value);\n return react.createElement(MapContextProvider, {\n value: value\n }, children);\n}\n\nmap_context_MapContext.Provider = WrappedProvider;\n/* harmony default export */ var map_context = (map_context_MapContext);\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/utils/use-isomorphic-layout-effect.js\n\nvar useIsomorphicLayoutEffect = typeof window !== \'undefined\' ? react.useLayoutEffect : react.useEffect;\n/* harmony default export */ var use_isomorphic_layout_effect = (useIsomorphicLayoutEffect);\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/utils/terrain.js\nfunction getTerrainElevation(map, _ref) {\n var longitude = _ref.longitude,\n latitude = _ref.latitude;\n\n if (map && map.queryTerrainElevation) {\n return map.queryTerrainElevation([longitude, latitude]) || 0;\n }\n\n return 0;\n}\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/components/static-map.js\n\n\n\nfunction static_map_ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction static_map_objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n static_map_ownKeys(Object(source), true).forEach(function (key) {\n defineProperty_defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n static_map_ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\n\n\n\n\n\n\n\n\n\n\n\nvar TOKEN_DOC_URL = \'https://visgl.github.io/react-map-gl/docs/get-started/mapbox-tokens\';\nvar NO_TOKEN_WARNING = \'A valid API access token is required to use Mapbox data\';\n\nfunction static_map_noop() {}\n\nfunction getViewport(_ref) {\n var map = _ref.map,\n props = _ref.props,\n width = _ref.width,\n height = _ref.height;\n\n var viewportProps = static_map_objectSpread(static_map_objectSpread(static_map_objectSpread({}, props), props.viewState), {}, {\n width: width,\n height: height\n });\n\n viewportProps.position = [0, 0, getTerrainElevation(map, viewportProps)];\n return new WebMercatorViewport(viewportProps);\n}\nvar UNAUTHORIZED_ERROR_CODE = 401;\nvar CONTAINER_STYLE = {\n position: \'absolute\',\n width: \'100%\',\n height: \'100%\',\n overflow: \'hidden\'\n};\nvar static_map_defaultProps = Object.assign({}, Mapbox.defaultProps, {\n disableTokenWarning: false,\n visible: true,\n onResize: static_map_noop,\n className: \'\',\n style: null,\n visibilityConstraints: MAPBOX_LIMITS\n});\n\nfunction NoTokenWarning() {\n var style = {\n position: \'absolute\',\n left: 0,\n top: 0\n };\n return react.createElement("div", {\n key: "warning",\n id: "no-token-warning",\n style: style\n }, react.createElement("h3", {\n key: "header"\n }, NO_TOKEN_WARNING), react.createElement("div", {\n key: "text"\n }, "For information on setting up your basemap, read"), react.createElement("a", {\n key: "link",\n href: TOKEN_DOC_URL\n }, "Note on Map Tokens"));\n}\n\nfunction getRefHandles(mapboxRef) {\n return {\n getMap: function getMap() {\n return mapboxRef.current && mapboxRef.current.getMap();\n },\n queryRenderedFeatures: function queryRenderedFeatures(geometry) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var map = mapboxRef.current && mapboxRef.current.getMap();\n return map && map.queryRenderedFeatures(geometry, options);\n }\n };\n}\n\nvar StaticMap = (0,react.forwardRef)(function (props, ref) {\n var _useState = (0,react.useState)(true),\n _useState2 = slicedToArray_slicedToArray(_useState, 2),\n accessTokenValid = _useState2[0],\n setTokenState = _useState2[1];\n\n var _useState3 = (0,react.useState)({\n width: 0,\n height: 0\n }),\n _useState4 = slicedToArray_slicedToArray(_useState3, 2),\n size = _useState4[0],\n setSize = _useState4[1];\n\n var mapboxRef = (0,react.useRef)(null);\n var mapDivRef = (0,react.useRef)(null);\n var containerRef = (0,react.useRef)(null);\n var overlayRef = (0,react.useRef)(null);\n var context = (0,react.useContext)(map_context);\n use_isomorphic_layout_effect(function () {\n if (!StaticMap.supported()) {\n return undefined;\n }\n\n var mapbox = new Mapbox(static_map_objectSpread(static_map_objectSpread(static_map_objectSpread({}, props), size), {}, {\n mapboxgl: (maplibre_gl_default()),\n container: mapDivRef.current,\n onError: function onError(evt) {\n var statusCode = evt.error && evt.error.status || evt.status;\n\n if (statusCode === UNAUTHORIZED_ERROR_CODE && accessTokenValid) {\n console.error(NO_TOKEN_WARNING);\n setTokenState(false);\n }\n\n props.onError(evt);\n }\n }));\n mapboxRef.current = mapbox;\n\n if (context && context.setMap) {\n context.setMap(mapbox.getMap());\n }\n\n var resizeObserver = new ResizeObserver_es(function (entries) {\n if (entries[0].contentRect) {\n var _entries$0$contentRec = entries[0].contentRect,\n _width = _entries$0$contentRec.width,\n _height = _entries$0$contentRec.height;\n setSize({\n width: _width,\n height: _height\n });\n props.onResize({\n width: _width,\n height: _height\n });\n }\n });\n resizeObserver.observe(containerRef.current);\n return function () {\n mapbox.finalize();\n mapboxRef.current = null;\n resizeObserver.disconnect();\n };\n }, []);\n use_isomorphic_layout_effect(function () {\n if (mapboxRef.current) {\n mapboxRef.current.setProps(static_map_objectSpread(static_map_objectSpread({}, props), size));\n }\n });\n var map = mapboxRef.current && mapboxRef.current.getMap();\n (0,react.useImperativeHandle)(ref, function () {\n return getRefHandles(mapboxRef);\n }, []);\n var preventScroll = (0,react.useCallback)(function (_ref2) {\n var target = _ref2.target;\n\n if (target === overlayRef.current) {\n target.scrollTo(0, 0);\n }\n }, []);\n var overlays = map && react.createElement(MapContextProvider, {\n value: static_map_objectSpread(static_map_objectSpread({}, context), {}, {\n viewport: context.viewport || getViewport(static_map_objectSpread({\n map: map,\n props: props\n }, size)),\n map: map,\n container: context.container || containerRef.current\n })\n }, react.createElement("div", {\n key: "map-overlays",\n className: "overlays",\n ref: overlayRef,\n style: CONTAINER_STYLE,\n onScroll: preventScroll\n }, props.children));\n var className = props.className,\n width = props.width,\n height = props.height,\n style = props.style,\n visibilityConstraints = props.visibilityConstraints;\n var mapContainerStyle = Object.assign({\n position: \'relative\'\n }, style, {\n width: width,\n height: height\n });\n var visible = props.visible && checkVisibilityConstraints(props.viewState || props, visibilityConstraints);\n var mapStyle = Object.assign({}, CONTAINER_STYLE, {\n visibility: visible ? \'inherit\' : \'hidden\'\n });\n return react.createElement("div", {\n key: "map-container",\n ref: containerRef,\n style: mapContainerStyle\n }, react.createElement("div", {\n key: "map-mapbox",\n ref: mapDivRef,\n style: mapStyle,\n className: className\n }), overlays, !accessTokenValid && !props.disableTokenWarning && react.createElement(NoTokenWarning, null));\n});\n\nStaticMap.supported = function () {\n return (maplibre_gl_default()) && maplibre_gl_default().supported();\n};\n\nStaticMap.defaultProps = static_map_defaultProps;\n/* harmony default export */ var static_map = (StaticMap);\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/utils/transition/transition-interpolator.js\n\n\n\n\nfunction transition_interpolator_createForOfIteratorHelper(o, allowArrayLike) {\n var it;\n\n if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) {\n if (Array.isArray(o) || (it = transition_interpolator_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {\n if (it) o = it;\n var i = 0;\n\n var F = function F() {};\n\n return {\n s: F,\n n: function n() {\n if (i >= o.length) return {\n done: true\n };\n return {\n done: false,\n value: o[i++]\n };\n },\n e: function e(_e) {\n throw _e;\n },\n f: F\n };\n }\n\n throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");\n }\n\n var normalCompletion = true,\n didErr = false,\n err;\n return {\n s: function s() {\n it = o[Symbol.iterator]();\n },\n n: function n() {\n var step = it.next();\n normalCompletion = step.done;\n return step;\n },\n e: function e(_e2) {\n didErr = true;\n err = _e2;\n },\n f: function f() {\n try {\n if (!normalCompletion && it["return"] != null) it["return"]();\n } finally {\n if (didErr) throw err;\n }\n }\n };\n}\n\nfunction transition_interpolator_unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === "string") return transition_interpolator_arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === "Object" && o.constructor) n = o.constructor.name;\n if (n === "Map" || n === "Set") return Array.from(o);\n if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return transition_interpolator_arrayLikeToArray(o, minLen);\n}\n\nfunction transition_interpolator_arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}\n\n\n\n\nvar TransitionInterpolator = function () {\n function TransitionInterpolator() {\n _classCallCheck(this, TransitionInterpolator);\n\n defineProperty_defineProperty(this, "propNames", []);\n }\n\n _createClass(TransitionInterpolator, [{\n key: "arePropsEqual",\n value: function arePropsEqual(currentProps, nextProps) {\n var _iterator = transition_interpolator_createForOfIteratorHelper(this.propNames || []),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var key = _step.value;\n\n if (!math_utils_equals(currentProps[key], nextProps[key])) {\n return false;\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n return true;\n }\n }, {\n key: "initializeProps",\n value: function initializeProps(startProps, endProps) {\n return {\n start: startProps,\n end: endProps\n };\n }\n }, {\n key: "interpolateProps",\n value: function interpolateProps(startProps, endProps, t) {\n utils_assert_assert(false, \'interpolateProps is not implemented\');\n }\n }, {\n key: "getDuration",\n value: function getDuration(startProps, endProps) {\n return endProps.transitionDuration;\n }\n }]);\n\n return TransitionInterpolator;\n}();\n\n\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called");\n }\n\n return self;\n}\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js\nvar setPrototypeOf = __webpack_require__(4665);\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/inherits.js\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== "function" && superClass !== null) {\n throw new TypeError("Super expression must either be null or a function");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) (0,setPrototypeOf/* default */.Z)(subClass, superClass);\n}\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/typeof.js\nvar helpers_typeof = __webpack_require__(8);\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js\n\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (helpers_typeof(call) === "object" || typeof call === "function")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/utils/transition/transition-utils.js\nvar WRAPPED_ANGULAR_PROPS = {\n longitude: 1,\n bearing: 1\n};\nfunction transition_utils_mod(value, divisor) {\n var modulus = value % divisor;\n return modulus < 0 ? divisor + modulus : modulus;\n}\nfunction isValid(prop) {\n return Number.isFinite(prop) || Array.isArray(prop);\n}\n\nfunction isWrappedAngularProp(propName) {\n return propName in WRAPPED_ANGULAR_PROPS;\n}\n\nfunction getEndValueByShortestPath(propName, startValue, endValue) {\n if (isWrappedAngularProp(propName) && Math.abs(endValue - startValue) > 180) {\n endValue = endValue < 0 ? endValue + 360 : endValue - 360;\n }\n\n return endValue;\n}\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/utils/transition/viewport-fly-to-interpolator.js\n\n\n\n\n\n\n\n\nfunction viewport_fly_to_interpolator_createForOfIteratorHelper(o, allowArrayLike) {\n var it;\n\n if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) {\n if (Array.isArray(o) || (it = viewport_fly_to_interpolator_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {\n if (it) o = it;\n var i = 0;\n\n var F = function F() {};\n\n return {\n s: F,\n n: function n() {\n if (i >= o.length) return {\n done: true\n };\n return {\n done: false,\n value: o[i++]\n };\n },\n e: function e(_e) {\n throw _e;\n },\n f: F\n };\n }\n\n throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");\n }\n\n var normalCompletion = true,\n didErr = false,\n err;\n return {\n s: function s() {\n it = o[Symbol.iterator]();\n },\n n: function n() {\n var step = it.next();\n normalCompletion = step.done;\n return step;\n },\n e: function e(_e2) {\n didErr = true;\n err = _e2;\n },\n f: function f() {\n try {\n if (!normalCompletion && it["return"] != null) it["return"]();\n } finally {\n if (didErr) throw err;\n }\n }\n };\n}\n\nfunction viewport_fly_to_interpolator_unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === "string") return viewport_fly_to_interpolator_arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === "Object" && o.constructor) n = o.constructor.name;\n if (n === "Map" || n === "Set") return Array.from(o);\n if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return viewport_fly_to_interpolator_arrayLikeToArray(o, minLen);\n}\n\nfunction viewport_fly_to_interpolator_arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}\n\nfunction _createSuper(Derived) {\n var hasNativeReflectConstruct = _isNativeReflectConstruct();\n\n return function _createSuperInternal() {\n var Super = _getPrototypeOf(Derived),\n result;\n\n if (hasNativeReflectConstruct) {\n var NewTarget = _getPrototypeOf(this).constructor;\n\n result = Reflect.construct(Super, arguments, NewTarget);\n } else {\n result = Super.apply(this, arguments);\n }\n\n return _possibleConstructorReturn(this, result);\n };\n}\n\nfunction _isNativeReflectConstruct() {\n if (typeof Reflect === "undefined" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === "function") return true;\n\n try {\n Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}\n\n\n\n\n\n\nvar viewport_fly_to_interpolator_VIEWPORT_TRANSITION_PROPS = [\'longitude\', \'latitude\', \'zoom\', \'bearing\', \'pitch\'];\nvar REQUIRED_PROPS = [\'latitude\', \'longitude\', \'zoom\', \'width\', \'height\'];\nvar LINEARLY_INTERPOLATED_PROPS = [\'bearing\', \'pitch\'];\nvar viewport_fly_to_interpolator_DEFAULT_OPTS = {\n speed: 1.2,\n curve: 1.414\n};\n\nvar ViewportFlyToInterpolator = function (_TransitionInterpolat) {\n _inherits(ViewportFlyToInterpolator, _TransitionInterpolat);\n\n var _super = _createSuper(ViewportFlyToInterpolator);\n\n function ViewportFlyToInterpolator() {\n var _this;\n\n var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n _classCallCheck(this, ViewportFlyToInterpolator);\n\n _this = _super.call(this);\n\n defineProperty_defineProperty(_assertThisInitialized(_this), "propNames", viewport_fly_to_interpolator_VIEWPORT_TRANSITION_PROPS);\n\n _this.props = Object.assign({}, viewport_fly_to_interpolator_DEFAULT_OPTS, props);\n return _this;\n }\n\n _createClass(ViewportFlyToInterpolator, [{\n key: "initializeProps",\n value: function initializeProps(startProps, endProps) {\n var startViewportProps = {};\n var endViewportProps = {};\n\n var _iterator = viewport_fly_to_interpolator_createForOfIteratorHelper(REQUIRED_PROPS),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var key = _step.value;\n var startValue = startProps[key];\n var endValue = endProps[key];\n utils_assert_assert(isValid(startValue) && isValid(endValue), "".concat(key, " must be supplied for transition"));\n startViewportProps[key] = startValue;\n endViewportProps[key] = getEndValueByShortestPath(key, startValue, endValue);\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n var _iterator2 = viewport_fly_to_interpolator_createForOfIteratorHelper(LINEARLY_INTERPOLATED_PROPS),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var _key = _step2.value;\n\n var _startValue = startProps[_key] || 0;\n\n var _endValue = endProps[_key] || 0;\n\n startViewportProps[_key] = _startValue;\n endViewportProps[_key] = getEndValueByShortestPath(_key, _startValue, _endValue);\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n return {\n start: startViewportProps,\n end: endViewportProps\n };\n }\n }, {\n key: "interpolateProps",\n value: function interpolateProps(startProps, endProps, t) {\n var viewport = flyToViewport(startProps, endProps, t, this.props);\n\n var _iterator3 = viewport_fly_to_interpolator_createForOfIteratorHelper(LINEARLY_INTERPOLATED_PROPS),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var key = _step3.value;\n viewport[key] = utils_math_utils_lerp(startProps[key], endProps[key], t);\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n\n return viewport;\n }\n }, {\n key: "getDuration",\n value: function getDuration(startProps, endProps) {\n var transitionDuration = endProps.transitionDuration;\n\n if (transitionDuration === \'auto\') {\n transitionDuration = getFlyToDuration(startProps, endProps, this.props);\n }\n\n return transitionDuration;\n }\n }]);\n\n return ViewportFlyToInterpolator;\n}(TransitionInterpolator);\n\n\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/utils/transition/linear-interpolator.js\n\n\n\n\n\n\n\nfunction linear_interpolator_createForOfIteratorHelper(o, allowArrayLike) {\n var it;\n\n if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) {\n if (Array.isArray(o) || (it = linear_interpolator_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {\n if (it) o = it;\n var i = 0;\n\n var F = function F() {};\n\n return {\n s: F,\n n: function n() {\n if (i >= o.length) return {\n done: true\n };\n return {\n done: false,\n value: o[i++]\n };\n },\n e: function e(_e) {\n throw _e;\n },\n f: F\n };\n }\n\n throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");\n }\n\n var normalCompletion = true,\n didErr = false,\n err;\n return {\n s: function s() {\n it = o[Symbol.iterator]();\n },\n n: function n() {\n var step = it.next();\n normalCompletion = step.done;\n return step;\n },\n e: function e(_e2) {\n didErr = true;\n err = _e2;\n },\n f: function f() {\n try {\n if (!normalCompletion && it["return"] != null) it["return"]();\n } finally {\n if (didErr) throw err;\n }\n }\n };\n}\n\nfunction linear_interpolator_unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === "string") return linear_interpolator_arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === "Object" && o.constructor) n = o.constructor.name;\n if (n === "Map" || n === "Set") return Array.from(o);\n if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return linear_interpolator_arrayLikeToArray(o, minLen);\n}\n\nfunction linear_interpolator_arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}\n\nfunction linear_interpolator_createSuper(Derived) {\n var hasNativeReflectConstruct = linear_interpolator_isNativeReflectConstruct();\n\n return function _createSuperInternal() {\n var Super = _getPrototypeOf(Derived),\n result;\n\n if (hasNativeReflectConstruct) {\n var NewTarget = _getPrototypeOf(this).constructor;\n\n result = Reflect.construct(Super, arguments, NewTarget);\n } else {\n result = Super.apply(this, arguments);\n }\n\n return _possibleConstructorReturn(this, result);\n };\n}\n\nfunction linear_interpolator_isNativeReflectConstruct() {\n if (typeof Reflect === "undefined" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === "function") return true;\n\n try {\n Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}\n\n\n\n\n\n\nvar linear_interpolator_VIEWPORT_TRANSITION_PROPS = [\'longitude\', \'latitude\', \'zoom\', \'bearing\', \'pitch\'];\n\nvar LinearInterpolator = function (_TransitionInterpolat) {\n _inherits(LinearInterpolator, _TransitionInterpolat);\n\n var _super = linear_interpolator_createSuper(LinearInterpolator);\n\n function LinearInterpolator() {\n var _this;\n\n var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n _classCallCheck(this, LinearInterpolator);\n\n _this = _super.call(this);\n\n if (Array.isArray(opts)) {\n opts = {\n transitionProps: opts\n };\n }\n\n _this.propNames = opts.transitionProps || linear_interpolator_VIEWPORT_TRANSITION_PROPS;\n\n if (opts.around) {\n _this.around = opts.around;\n }\n\n return _this;\n }\n\n _createClass(LinearInterpolator, [{\n key: "initializeProps",\n value: function initializeProps(startProps, endProps) {\n var startViewportProps = {};\n var endViewportProps = {};\n\n if (this.around) {\n startViewportProps.around = this.around;\n var aroundLngLat = new WebMercatorViewport(startProps).unproject(this.around);\n Object.assign(endViewportProps, endProps, {\n around: new WebMercatorViewport(endProps).project(aroundLngLat),\n aroundLngLat: aroundLngLat\n });\n }\n\n var _iterator = linear_interpolator_createForOfIteratorHelper(this.propNames),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var key = _step.value;\n var startValue = startProps[key];\n var endValue = endProps[key];\n utils_assert_assert(isValid(startValue) && isValid(endValue), "".concat(key, " must be supplied for transition"));\n startViewportProps[key] = startValue;\n endViewportProps[key] = getEndValueByShortestPath(key, startValue, endValue);\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n return {\n start: startViewportProps,\n end: endViewportProps\n };\n }\n }, {\n key: "interpolateProps",\n value: function interpolateProps(startProps, endProps, t) {\n var viewport = {};\n\n var _iterator2 = linear_interpolator_createForOfIteratorHelper(this.propNames),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var key = _step2.value;\n viewport[key] = utils_math_utils_lerp(startProps[key], endProps[key], t);\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n if (endProps.around) {\n var _WebMercatorViewport$ = new WebMercatorViewport(Object.assign({}, endProps, viewport)).getMapCenterByLngLatPosition({\n lngLat: endProps.aroundLngLat,\n pos: utils_math_utils_lerp(startProps.around, endProps.around, t)\n }),\n _WebMercatorViewport$2 = slicedToArray_slicedToArray(_WebMercatorViewport$, 2),\n longitude = _WebMercatorViewport$2[0],\n latitude = _WebMercatorViewport$2[1];\n\n viewport.longitude = longitude;\n viewport.latitude = latitude;\n }\n\n return viewport;\n }\n }]);\n\n return LinearInterpolator;\n}(TransitionInterpolator);\n\n\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/utils/transition/index.js\n\n\n\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/utils/transition-manager.js\n\n\n\n\n\n\n\nvar transition_manager_noop = function noop() {};\n\nfunction cropEasingFunction(easing, x0) {\n var y0 = easing(x0);\n return function (t) {\n return 1 / (1 - y0) * (easing(t * (1 - x0) + x0) - y0);\n };\n}\nvar TRANSITION_EVENTS = {\n BREAK: 1,\n SNAP_TO_END: 2,\n IGNORE: 3,\n UPDATE: 4\n};\nvar DEFAULT_PROPS = {\n transitionDuration: 0,\n transitionEasing: function transitionEasing(t) {\n return t;\n },\n transitionInterpolator: new LinearInterpolator(),\n transitionInterruption: TRANSITION_EVENTS.BREAK,\n onTransitionStart: transition_manager_noop,\n onTransitionInterrupt: transition_manager_noop,\n onTransitionEnd: transition_manager_noop\n};\n\nvar TransitionManager = function () {\n function TransitionManager() {\n var _this = this;\n\n var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n _classCallCheck(this, TransitionManager);\n\n defineProperty_defineProperty(this, "_animationFrame", null);\n\n defineProperty_defineProperty(this, "_onTransitionFrame", function () {\n _this._animationFrame = requestAnimationFrame(_this._onTransitionFrame);\n\n _this._updateViewport();\n });\n\n this.props = null;\n this.onViewportChange = opts.onViewportChange || transition_manager_noop;\n this.onStateChange = opts.onStateChange || transition_manager_noop;\n this.time = opts.getTime || Date.now;\n }\n\n _createClass(TransitionManager, [{\n key: "getViewportInTransition",\n value: function getViewportInTransition() {\n return this._animationFrame ? this.state.propsInTransition : null;\n }\n }, {\n key: "processViewportChange",\n value: function processViewportChange(nextProps) {\n var currentProps = this.props;\n this.props = nextProps;\n\n if (!currentProps || this._shouldIgnoreViewportChange(currentProps, nextProps)) {\n return false;\n }\n\n if (this._isTransitionEnabled(nextProps)) {\n var startProps = Object.assign({}, currentProps);\n var endProps = Object.assign({}, nextProps);\n\n if (this._isTransitionInProgress()) {\n currentProps.onTransitionInterrupt();\n\n if (this.state.interruption === TRANSITION_EVENTS.SNAP_TO_END) {\n Object.assign(startProps, this.state.endProps);\n } else {\n Object.assign(startProps, this.state.propsInTransition);\n }\n\n if (this.state.interruption === TRANSITION_EVENTS.UPDATE) {\n var currentTime = this.time();\n var x0 = (currentTime - this.state.startTime) / this.state.duration;\n endProps.transitionDuration = this.state.duration - (currentTime - this.state.startTime);\n endProps.transitionEasing = cropEasingFunction(this.state.easing, x0);\n endProps.transitionInterpolator = startProps.transitionInterpolator;\n }\n }\n\n endProps.onTransitionStart();\n\n this._triggerTransition(startProps, endProps);\n\n return true;\n }\n\n if (this._isTransitionInProgress()) {\n currentProps.onTransitionInterrupt();\n\n this._endTransition();\n }\n\n return false;\n }\n }, {\n key: "_isTransitionInProgress",\n value: function _isTransitionInProgress() {\n return Boolean(this._animationFrame);\n }\n }, {\n key: "_isTransitionEnabled",\n value: function _isTransitionEnabled(props) {\n var transitionDuration = props.transitionDuration,\n transitionInterpolator = props.transitionInterpolator;\n return (transitionDuration > 0 || transitionDuration === \'auto\') && Boolean(transitionInterpolator);\n }\n }, {\n key: "_isUpdateDueToCurrentTransition",\n value: function _isUpdateDueToCurrentTransition(props) {\n if (this.state.propsInTransition) {\n return this.state.interpolator.arePropsEqual(props, this.state.propsInTransition);\n }\n\n return false;\n }\n }, {\n key: "_shouldIgnoreViewportChange",\n value: function _shouldIgnoreViewportChange(currentProps, nextProps) {\n if (!currentProps) {\n return true;\n }\n\n if (this._isTransitionInProgress()) {\n return this.state.interruption === TRANSITION_EVENTS.IGNORE || this._isUpdateDueToCurrentTransition(nextProps);\n }\n\n if (this._isTransitionEnabled(nextProps)) {\n return nextProps.transitionInterpolator.arePropsEqual(currentProps, nextProps);\n }\n\n return true;\n }\n }, {\n key: "_triggerTransition",\n value: function _triggerTransition(startProps, endProps) {\n utils_assert_assert(this._isTransitionEnabled(endProps));\n\n if (this._animationFrame) {\n cancelAnimationFrame(this._animationFrame);\n }\n\n var transitionInterpolator = endProps.transitionInterpolator;\n var duration = transitionInterpolator.getDuration ? transitionInterpolator.getDuration(startProps, endProps) : endProps.transitionDuration;\n\n if (duration === 0) {\n return;\n }\n\n var initialProps = endProps.transitionInterpolator.initializeProps(startProps, endProps);\n var interactionState = {\n inTransition: true,\n isZooming: startProps.zoom !== endProps.zoom,\n isPanning: startProps.longitude !== endProps.longitude || startProps.latitude !== endProps.latitude,\n isRotating: startProps.bearing !== endProps.bearing || startProps.pitch !== endProps.pitch\n };\n this.state = {\n duration: duration,\n easing: endProps.transitionEasing,\n interpolator: endProps.transitionInterpolator,\n interruption: endProps.transitionInterruption,\n startTime: this.time(),\n startProps: initialProps.start,\n endProps: initialProps.end,\n animation: null,\n propsInTransition: {}\n };\n\n this._onTransitionFrame();\n\n this.onStateChange(interactionState);\n }\n }, {\n key: "_endTransition",\n value: function _endTransition() {\n if (this._animationFrame) {\n cancelAnimationFrame(this._animationFrame);\n this._animationFrame = null;\n }\n\n this.onStateChange({\n inTransition: false,\n isZooming: false,\n isPanning: false,\n isRotating: false\n });\n }\n }, {\n key: "_updateViewport",\n value: function _updateViewport() {\n var currentTime = this.time();\n var _this$state = this.state,\n startTime = _this$state.startTime,\n duration = _this$state.duration,\n easing = _this$state.easing,\n interpolator = _this$state.interpolator,\n startProps = _this$state.startProps,\n endProps = _this$state.endProps;\n var shouldEnd = false;\n var t = (currentTime - startTime) / duration;\n\n if (t >= 1) {\n t = 1;\n shouldEnd = true;\n }\n\n t = easing(t);\n var viewport = interpolator.interpolateProps(startProps, endProps, t);\n var mapState = new MapState(Object.assign({}, this.props, viewport));\n this.state.propsInTransition = mapState.getViewportProps();\n this.onViewportChange(this.state.propsInTransition, this.props);\n\n if (shouldEnd) {\n this._endTransition();\n\n this.props.onTransitionEnd();\n }\n }\n }]);\n\n return TransitionManager;\n}();\n\ndefineProperty_defineProperty(TransitionManager, "defaultProps", DEFAULT_PROPS);\n\n\n// EXTERNAL MODULE: ./node_modules/hammerjs/hammer.js\nvar hammer = __webpack_require__(5087);\nvar hammer_default = /*#__PURE__*/__webpack_require__.n(hammer);\n;// CONCATENATED MODULE: ./node_modules/mjolnir.js/dist/esm/utils/hammer-overrides.js\nvar INPUT_START = 1;\nvar INPUT_MOVE = 2;\nvar INPUT_END = 4;\nvar MOUSE_INPUT_MAP = {\n mousedown: INPUT_START,\n mousemove: INPUT_MOVE,\n mouseup: INPUT_END\n};\n\nfunction some(array, predict) {\n for (var i = 0; i < array.length; i++) {\n if (predict(array[i])) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction enhancePointerEventInput(PointerEventInput) {\n var oldHandler = PointerEventInput.prototype.handler;\n\n PointerEventInput.prototype.handler = function handler(ev) {\n var store = this.store;\n\n if (ev.button > 0 && ev.type === \'pointerdown\') {\n if (!some(store, function (e) {\n return e.pointerId === ev.pointerId;\n })) {\n store.push(ev);\n }\n }\n\n oldHandler.call(this, ev);\n };\n}\nfunction enhanceMouseInput(MouseInput) {\n MouseInput.prototype.handler = function handler(ev) {\n var eventType = MOUSE_INPUT_MAP[ev.type];\n\n if (eventType & INPUT_START && ev.button >= 0) {\n this.pressed = true;\n }\n\n if (eventType & INPUT_MOVE && ev.which === 0) {\n eventType = INPUT_END;\n }\n\n if (!this.pressed) {\n return;\n }\n\n if (eventType & INPUT_END) {\n this.pressed = false;\n }\n\n this.callback(this.manager, eventType, {\n pointers: [ev],\n changedPointers: [ev],\n pointerType: \'mouse\',\n srcEvent: ev\n });\n };\n}\n;// CONCATENATED MODULE: ./node_modules/mjolnir.js/dist/esm/utils/hammer.browser.js\n\n\nenhancePointerEventInput((hammer_default()).PointerEventInput);\nenhanceMouseInput((hammer_default()).MouseInput);\nvar Manager = (hammer_default()).Manager;\n/* harmony default export */ var hammer_browser = ((hammer_default()));\n;// CONCATENATED MODULE: ./node_modules/mjolnir.js/dist/esm/constants.js\n\nvar RECOGNIZERS = hammer_browser ? [[hammer_browser.Pan, {\n event: \'tripan\',\n pointers: 3,\n threshold: 0,\n enable: false\n}], [hammer_browser.Rotate, {\n enable: false\n}], [hammer_browser.Pinch, {\n enable: false\n}], [hammer_browser.Swipe, {\n enable: false\n}], [hammer_browser.Pan, {\n threshold: 0,\n enable: false\n}], [hammer_browser.Press, {\n enable: false\n}], [hammer_browser.Tap, {\n event: \'doubletap\',\n taps: 2,\n enable: false\n}], [hammer_browser.Tap, {\n event: \'anytap\',\n enable: false\n}], [hammer_browser.Tap, {\n enable: false\n}]] : null;\nvar RECOGNIZER_COMPATIBLE_MAP = {\n tripan: [\'rotate\', \'pinch\', \'pan\'],\n rotate: [\'pinch\'],\n pinch: [\'pan\'],\n pan: [\'press\', \'doubletap\', \'anytap\', \'tap\'],\n doubletap: [\'anytap\'],\n anytap: [\'tap\']\n};\nvar RECOGNIZER_FALLBACK_MAP = {\n doubletap: [\'tap\']\n};\nvar BASIC_EVENT_ALIASES = {\n pointerdown: \'pointerdown\',\n pointermove: \'pointermove\',\n pointerup: \'pointerup\',\n touchstart: \'pointerdown\',\n touchmove: \'pointermove\',\n touchend: \'pointerup\',\n mousedown: \'pointerdown\',\n mousemove: \'pointermove\',\n mouseup: \'pointerup\'\n};\nvar INPUT_EVENT_TYPES = {\n KEY_EVENTS: [\'keydown\', \'keyup\'],\n MOUSE_EVENTS: [\'mousedown\', \'mousemove\', \'mouseup\', \'mouseover\', \'mouseout\', \'mouseleave\'],\n WHEEL_EVENTS: [\'wheel\', \'mousewheel\']\n};\nvar EVENT_RECOGNIZER_MAP = {\n tap: \'tap\',\n anytap: \'anytap\',\n doubletap: \'doubletap\',\n press: \'press\',\n pinch: \'pinch\',\n pinchin: \'pinch\',\n pinchout: \'pinch\',\n pinchstart: \'pinch\',\n pinchmove: \'pinch\',\n pinchend: \'pinch\',\n pinchcancel: \'pinch\',\n rotate: \'rotate\',\n rotatestart: \'rotate\',\n rotatemove: \'rotate\',\n rotateend: \'rotate\',\n rotatecancel: \'rotate\',\n tripan: \'tripan\',\n tripanstart: \'tripan\',\n tripanmove: \'tripan\',\n tripanup: \'tripan\',\n tripandown: \'tripan\',\n tripanleft: \'tripan\',\n tripanright: \'tripan\',\n tripanend: \'tripan\',\n tripancancel: \'tripan\',\n pan: \'pan\',\n panstart: \'pan\',\n panmove: \'pan\',\n panup: \'pan\',\n pandown: \'pan\',\n panleft: \'pan\',\n panright: \'pan\',\n panend: \'pan\',\n pancancel: \'pan\',\n swipe: \'swipe\',\n swipeleft: \'swipe\',\n swiperight: \'swipe\',\n swipeup: \'swipe\',\n swipedown: \'swipe\'\n};\nvar GESTURE_EVENT_ALIASES = {\n click: \'tap\',\n anyclick: \'anytap\',\n dblclick: \'doubletap\',\n mousedown: \'pointerdown\',\n mousemove: \'pointermove\',\n mouseup: \'pointerup\',\n mouseover: \'pointerover\',\n mouseout: \'pointerout\',\n mouseleave: \'pointerleave\'\n};\n;// CONCATENATED MODULE: ./node_modules/mjolnir.js/dist/esm/utils/globals.js\nvar userAgent = typeof navigator !== \'undefined\' && navigator.userAgent ? navigator.userAgent.toLowerCase() : \'\';\nvar globals_window_ = typeof window !== \'undefined\' ? window : __webpack_require__.g;\nvar globals_global_ = typeof __webpack_require__.g !== \'undefined\' ? __webpack_require__.g : window;\nvar globals_document_ = typeof document !== \'undefined\' ? document : {};\n\nvar passiveSupported = false;\n\ntry {\n var options = {\n get passive() {\n passiveSupported = true;\n return true;\n }\n\n };\n globals_window_.addEventListener(\'test\', options, options);\n globals_window_.removeEventListener(\'test\', options, options);\n} catch (err) {}\n\n\n;// CONCATENATED MODULE: ./node_modules/mjolnir.js/dist/esm/inputs/wheel-input.js\n\n\n\n\nvar firefox = userAgent.indexOf(\'firefox\') !== -1;\nvar WHEEL_EVENTS = INPUT_EVENT_TYPES.WHEEL_EVENTS;\nvar EVENT_TYPE = \'wheel\';\nvar WHEEL_DELTA_MAGIC_SCALER = 4.000244140625;\nvar WHEEL_DELTA_PER_LINE = 40;\nvar SHIFT_MULTIPLIER = 0.25;\n\nvar WheelInput = /*#__PURE__*/function () {\n function WheelInput(element, callback) {\n var _this = this;\n\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n _classCallCheck(this, WheelInput);\n\n this.element = element;\n this.callback = callback;\n this.options = Object.assign({\n enable: true\n }, options);\n this.events = WHEEL_EVENTS.concat(options.events || []);\n this.handleEvent = this.handleEvent.bind(this);\n this.events.forEach(function (event) {\n return element.addEventListener(event, _this.handleEvent, passiveSupported ? {\n passive: false\n } : false);\n });\n }\n\n _createClass(WheelInput, [{\n key: "destroy",\n value: function destroy() {\n var _this2 = this;\n\n this.events.forEach(function (event) {\n return _this2.element.removeEventListener(event, _this2.handleEvent);\n });\n }\n }, {\n key: "enableEventType",\n value: function enableEventType(eventType, enabled) {\n if (eventType === EVENT_TYPE) {\n this.options.enable = enabled;\n }\n }\n }, {\n key: "handleEvent",\n value: function handleEvent(event) {\n if (!this.options.enable) {\n return;\n }\n\n var value = event.deltaY;\n\n if (globals_window_.WheelEvent) {\n if (firefox && event.deltaMode === globals_window_.WheelEvent.DOM_DELTA_PIXEL) {\n value /= globals_window_.devicePixelRatio;\n }\n\n if (event.deltaMode === globals_window_.WheelEvent.DOM_DELTA_LINE) {\n value *= WHEEL_DELTA_PER_LINE;\n }\n }\n\n var wheelPosition = {\n x: event.clientX,\n y: event.clientY\n };\n\n if (value !== 0 && value % WHEEL_DELTA_MAGIC_SCALER === 0) {\n value = Math.floor(value / WHEEL_DELTA_MAGIC_SCALER);\n }\n\n if (event.shiftKey && value) {\n value = value * SHIFT_MULTIPLIER;\n }\n\n this._onWheel(event, -value, wheelPosition);\n }\n }, {\n key: "_onWheel",\n value: function _onWheel(srcEvent, delta, position) {\n this.callback({\n type: EVENT_TYPE,\n center: position,\n delta: delta,\n srcEvent: srcEvent,\n pointerType: \'mouse\',\n target: srcEvent.target\n });\n }\n }]);\n\n return WheelInput;\n}();\n\n\n;// CONCATENATED MODULE: ./node_modules/mjolnir.js/dist/esm/inputs/move-input.js\n\n\n\nvar MOUSE_EVENTS = INPUT_EVENT_TYPES.MOUSE_EVENTS;\nvar MOVE_EVENT_TYPE = \'pointermove\';\nvar OVER_EVENT_TYPE = \'pointerover\';\nvar OUT_EVENT_TYPE = \'pointerout\';\nvar LEAVE_EVENT_TYPE = \'pointerleave\';\n\nvar MoveInput = /*#__PURE__*/function () {\n function MoveInput(element, callback) {\n var _this = this;\n\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n _classCallCheck(this, MoveInput);\n\n this.element = element;\n this.callback = callback;\n this.pressed = false;\n this.options = Object.assign({\n enable: true\n }, options);\n this.enableMoveEvent = this.options.enable;\n this.enableLeaveEvent = this.options.enable;\n this.enableOutEvent = this.options.enable;\n this.enableOverEvent = this.options.enable;\n this.events = MOUSE_EVENTS.concat(options.events || []);\n this.handleEvent = this.handleEvent.bind(this);\n this.events.forEach(function (event) {\n return element.addEventListener(event, _this.handleEvent);\n });\n }\n\n _createClass(MoveInput, [{\n key: "destroy",\n value: function destroy() {\n var _this2 = this;\n\n this.events.forEach(function (event) {\n return _this2.element.removeEventListener(event, _this2.handleEvent);\n });\n }\n }, {\n key: "enableEventType",\n value: function enableEventType(eventType, enabled) {\n if (eventType === MOVE_EVENT_TYPE) {\n this.enableMoveEvent = enabled;\n }\n\n if (eventType === OVER_EVENT_TYPE) {\n this.enableOverEvent = enabled;\n }\n\n if (eventType === OUT_EVENT_TYPE) {\n this.enableOutEvent = enabled;\n }\n\n if (eventType === LEAVE_EVENT_TYPE) {\n this.enableLeaveEvent = enabled;\n }\n }\n }, {\n key: "handleEvent",\n value: function handleEvent(event) {\n this.handleOverEvent(event);\n this.handleOutEvent(event);\n this.handleLeaveEvent(event);\n this.handleMoveEvent(event);\n }\n }, {\n key: "handleOverEvent",\n value: function handleOverEvent(event) {\n if (this.enableOverEvent) {\n if (event.type === \'mouseover\') {\n this.callback({\n type: OVER_EVENT_TYPE,\n srcEvent: event,\n pointerType: \'mouse\',\n target: event.target\n });\n }\n }\n }\n }, {\n key: "handleOutEvent",\n value: function handleOutEvent(event) {\n if (this.enableOutEvent) {\n if (event.type === \'mouseout\') {\n this.callback({\n type: OUT_EVENT_TYPE,\n srcEvent: event,\n pointerType: \'mouse\',\n target: event.target\n });\n }\n }\n }\n }, {\n key: "handleLeaveEvent",\n value: function handleLeaveEvent(event) {\n if (this.enableLeaveEvent) {\n if (event.type === \'mouseleave\') {\n this.callback({\n type: LEAVE_EVENT_TYPE,\n srcEvent: event,\n pointerType: \'mouse\',\n target: event.target\n });\n }\n }\n }\n }, {\n key: "handleMoveEvent",\n value: function handleMoveEvent(event) {\n if (this.enableMoveEvent) {\n switch (event.type) {\n case \'mousedown\':\n if (event.button >= 0) {\n this.pressed = true;\n }\n\n break;\n\n case \'mousemove\':\n if (event.which === 0) {\n this.pressed = false;\n }\n\n if (!this.pressed) {\n this.callback({\n type: MOVE_EVENT_TYPE,\n srcEvent: event,\n pointerType: \'mouse\',\n target: event.target\n });\n }\n\n break;\n\n case \'mouseup\':\n this.pressed = false;\n break;\n\n default:\n }\n }\n }\n }]);\n\n return MoveInput;\n}();\n\n\n;// CONCATENATED MODULE: ./node_modules/mjolnir.js/dist/esm/inputs/key-input.js\n\n\n\nvar KEY_EVENTS = INPUT_EVENT_TYPES.KEY_EVENTS;\nvar DOWN_EVENT_TYPE = \'keydown\';\nvar UP_EVENT_TYPE = \'keyup\';\n\nvar KeyInput = /*#__PURE__*/function () {\n function KeyInput(element, callback) {\n var _this = this;\n\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n _classCallCheck(this, KeyInput);\n\n this.element = element;\n this.callback = callback;\n this.options = Object.assign({\n enable: true\n }, options);\n this.enableDownEvent = this.options.enable;\n this.enableUpEvent = this.options.enable;\n this.events = KEY_EVENTS.concat(options.events || []);\n this.handleEvent = this.handleEvent.bind(this);\n element.tabIndex = options.tabIndex || 0;\n element.style.outline = \'none\';\n this.events.forEach(function (event) {\n return element.addEventListener(event, _this.handleEvent);\n });\n }\n\n _createClass(KeyInput, [{\n key: "destroy",\n value: function destroy() {\n var _this2 = this;\n\n this.events.forEach(function (event) {\n return _this2.element.removeEventListener(event, _this2.handleEvent);\n });\n }\n }, {\n key: "enableEventType",\n value: function enableEventType(eventType, enabled) {\n if (eventType === DOWN_EVENT_TYPE) {\n this.enableDownEvent = enabled;\n }\n\n if (eventType === UP_EVENT_TYPE) {\n this.enableUpEvent = enabled;\n }\n }\n }, {\n key: "handleEvent",\n value: function handleEvent(event) {\n var targetElement = event.target || event.srcElement;\n\n if (targetElement.tagName === \'INPUT\' && targetElement.type === \'text\' || targetElement.tagName === \'TEXTAREA\') {\n return;\n }\n\n if (this.enableDownEvent && event.type === \'keydown\') {\n this.callback({\n type: DOWN_EVENT_TYPE,\n srcEvent: event,\n key: event.key,\n target: event.target\n });\n }\n\n if (this.enableUpEvent && event.type === \'keyup\') {\n this.callback({\n type: UP_EVENT_TYPE,\n srcEvent: event,\n key: event.key,\n target: event.target\n });\n }\n }\n }]);\n\n return KeyInput;\n}();\n\n\n;// CONCATENATED MODULE: ./node_modules/mjolnir.js/dist/esm/inputs/contextmenu-input.js\n\n\nvar contextmenu_input_EVENT_TYPE = \'contextmenu\';\n\nvar ContextmenuInput = /*#__PURE__*/function () {\n function ContextmenuInput(element, callback) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n _classCallCheck(this, ContextmenuInput);\n\n this.element = element;\n this.callback = callback;\n this.options = Object.assign({\n enable: true\n }, options);\n this.handleEvent = this.handleEvent.bind(this);\n element.addEventListener(\'contextmenu\', this.handleEvent);\n }\n\n _createClass(ContextmenuInput, [{\n key: "destroy",\n value: function destroy() {\n this.element.removeEventListener(\'contextmenu\', this.handleEvent);\n }\n }, {\n key: "enableEventType",\n value: function enableEventType(eventType, enabled) {\n if (eventType === contextmenu_input_EVENT_TYPE) {\n this.options.enable = enabled;\n }\n }\n }, {\n key: "handleEvent",\n value: function handleEvent(event) {\n if (!this.options.enable) {\n return;\n }\n\n this.callback({\n type: contextmenu_input_EVENT_TYPE,\n center: {\n x: event.clientX,\n y: event.clientY\n },\n srcEvent: event,\n pointerType: \'mouse\',\n target: event.target\n });\n }\n }]);\n\n return ContextmenuInput;\n}();\n\n\n;// CONCATENATED MODULE: ./node_modules/mjolnir.js/dist/esm/utils/event-utils.js\nvar DOWN_EVENT = 1;\nvar MOVE_EVENT = 2;\nvar UP_EVENT = 4;\nvar event_utils_MOUSE_EVENTS = {\n pointerdown: DOWN_EVENT,\n pointermove: MOVE_EVENT,\n pointerup: UP_EVENT,\n mousedown: DOWN_EVENT,\n mousemove: MOVE_EVENT,\n mouseup: UP_EVENT\n};\nvar MOUSE_EVENT_WHICH_LEFT = 1;\nvar MOUSE_EVENT_WHICH_MIDDLE = 2;\nvar MOUSE_EVENT_WHICH_RIGHT = 3;\nvar MOUSE_EVENT_BUTTON_LEFT = 0;\nvar MOUSE_EVENT_BUTTON_MIDDLE = 1;\nvar MOUSE_EVENT_BUTTON_RIGHT = 2;\nvar MOUSE_EVENT_BUTTONS_LEFT_MASK = 1;\nvar MOUSE_EVENT_BUTTONS_RIGHT_MASK = 2;\nvar MOUSE_EVENT_BUTTONS_MIDDLE_MASK = 4;\nfunction whichButtons(event) {\n var eventType = event_utils_MOUSE_EVENTS[event.srcEvent.type];\n\n if (!eventType) {\n return null;\n }\n\n var _event$srcEvent = event.srcEvent,\n buttons = _event$srcEvent.buttons,\n button = _event$srcEvent.button,\n which = _event$srcEvent.which;\n var leftButton = false;\n var middleButton = false;\n var rightButton = false;\n\n if (eventType === UP_EVENT || eventType === MOVE_EVENT && !Number.isFinite(buttons)) {\n leftButton = which === MOUSE_EVENT_WHICH_LEFT;\n middleButton = which === MOUSE_EVENT_WHICH_MIDDLE;\n rightButton = which === MOUSE_EVENT_WHICH_RIGHT;\n } else if (eventType === MOVE_EVENT) {\n leftButton = Boolean(buttons & MOUSE_EVENT_BUTTONS_LEFT_MASK);\n middleButton = Boolean(buttons & MOUSE_EVENT_BUTTONS_MIDDLE_MASK);\n rightButton = Boolean(buttons & MOUSE_EVENT_BUTTONS_RIGHT_MASK);\n } else if (eventType === DOWN_EVENT) {\n leftButton = button === MOUSE_EVENT_BUTTON_LEFT;\n middleButton = button === MOUSE_EVENT_BUTTON_MIDDLE;\n rightButton = button === MOUSE_EVENT_BUTTON_RIGHT;\n }\n\n return {\n leftButton: leftButton,\n middleButton: middleButton,\n rightButton: rightButton\n };\n}\nfunction getOffsetPosition(event, rootElement) {\n var srcEvent = event.srcEvent;\n\n if (!event.center && !Number.isFinite(srcEvent.clientX)) {\n return null;\n }\n\n var center = event.center || {\n x: srcEvent.clientX,\n y: srcEvent.clientY\n };\n var rect = rootElement.getBoundingClientRect();\n var scaleX = rect.width / rootElement.offsetWidth || 1;\n var scaleY = rect.height / rootElement.offsetHeight || 1;\n var offsetCenter = {\n x: (center.x - rect.left - rootElement.clientLeft) / scaleX,\n y: (center.y - rect.top - rootElement.clientTop) / scaleY\n };\n return {\n center: center,\n offsetCenter: offsetCenter\n };\n}\n;// CONCATENATED MODULE: ./node_modules/mjolnir.js/dist/esm/utils/event-registrar.js\n\n\n\nvar DEFAULT_OPTIONS = {\n srcElement: \'root\',\n priority: 0\n};\n\nvar EventRegistrar = /*#__PURE__*/function () {\n function EventRegistrar(eventManager) {\n _classCallCheck(this, EventRegistrar);\n\n this.eventManager = eventManager;\n this.handlers = [];\n this.handlersByElement = new Map();\n this.handleEvent = this.handleEvent.bind(this);\n this._active = false;\n }\n\n _createClass(EventRegistrar, [{\n key: "isEmpty",\n value: function isEmpty() {\n return !this._active;\n }\n }, {\n key: "add",\n value: function add(type, handler, opts) {\n var once = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n var passive = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n var handlers = this.handlers,\n handlersByElement = this.handlersByElement;\n\n if (opts && (typeof opts !== \'object\' || opts.addEventListener)) {\n opts = {\n srcElement: opts\n };\n }\n\n opts = opts ? Object.assign({}, DEFAULT_OPTIONS, opts) : DEFAULT_OPTIONS;\n var entries = handlersByElement.get(opts.srcElement);\n\n if (!entries) {\n entries = [];\n handlersByElement.set(opts.srcElement, entries);\n }\n\n var entry = {\n type: type,\n handler: handler,\n srcElement: opts.srcElement,\n priority: opts.priority\n };\n\n if (once) {\n entry.once = true;\n }\n\n if (passive) {\n entry.passive = true;\n }\n\n handlers.push(entry);\n this._active = this._active || !entry.passive;\n var insertPosition = entries.length - 1;\n\n while (insertPosition >= 0) {\n if (entries[insertPosition].priority >= entry.priority) {\n break;\n }\n\n insertPosition--;\n }\n\n entries.splice(insertPosition + 1, 0, entry);\n }\n }, {\n key: "remove",\n value: function remove(type, handler) {\n var handlers = this.handlers,\n handlersByElement = this.handlersByElement;\n\n for (var i = handlers.length - 1; i >= 0; i--) {\n var entry = handlers[i];\n\n if (entry.type === type && entry.handler === handler) {\n handlers.splice(i, 1);\n var entries = handlersByElement.get(entry.srcElement);\n entries.splice(entries.indexOf(entry), 1);\n\n if (entries.length === 0) {\n handlersByElement.delete(entry.srcElement);\n }\n }\n }\n\n this._active = handlers.some(function (entry) {\n return !entry.passive;\n });\n }\n }, {\n key: "handleEvent",\n value: function handleEvent(event) {\n if (this.isEmpty()) {\n return;\n }\n\n var mjolnirEvent = this._normalizeEvent(event);\n\n var target = event.srcEvent.target;\n\n while (target && target !== mjolnirEvent.rootElement) {\n this._emit(mjolnirEvent, target);\n\n if (mjolnirEvent.handled) {\n return;\n }\n\n target = target.parentNode;\n }\n\n this._emit(mjolnirEvent, \'root\');\n }\n }, {\n key: "_emit",\n value: function _emit(event, srcElement) {\n var entries = this.handlersByElement.get(srcElement);\n\n if (entries) {\n var immediatePropagationStopped = false;\n\n var stopPropagation = function stopPropagation() {\n event.handled = true;\n };\n\n var stopImmediatePropagation = function stopImmediatePropagation() {\n event.handled = true;\n immediatePropagationStopped = true;\n };\n\n var entriesToRemove = [];\n\n for (var i = 0; i < entries.length; i++) {\n var _entries$i = entries[i],\n type = _entries$i.type,\n handler = _entries$i.handler,\n once = _entries$i.once;\n handler(Object.assign({}, event, {\n type: type,\n stopPropagation: stopPropagation,\n stopImmediatePropagation: stopImmediatePropagation\n }));\n\n if (once) {\n entriesToRemove.push(entries[i]);\n }\n\n if (immediatePropagationStopped) {\n break;\n }\n }\n\n for (var _i = 0; _i < entriesToRemove.length; _i++) {\n var _entriesToRemove$_i = entriesToRemove[_i],\n _type = _entriesToRemove$_i.type,\n _handler = _entriesToRemove$_i.handler;\n this.remove(_type, _handler);\n }\n }\n }\n }, {\n key: "_normalizeEvent",\n value: function _normalizeEvent(event) {\n var rootElement = this.eventManager.element;\n return Object.assign({}, event, whichButtons(event), getOffsetPosition(event, rootElement), {\n handled: false,\n rootElement: rootElement\n });\n }\n }]);\n\n return EventRegistrar;\n}();\n\n\n;// CONCATENATED MODULE: ./node_modules/mjolnir.js/dist/esm/event-manager.js\n\n\n\n\nfunction event_manager_createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = event_manager_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction event_manager_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return event_manager_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return event_manager_arrayLikeToArray(o, minLen); }\n\nfunction event_manager_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\n\n\n\n\n\n\n\nvar event_manager_DEFAULT_OPTIONS = {\n events: null,\n recognizers: null,\n recognizerOptions: {},\n Manager: Manager,\n touchAction: \'none\',\n tabIndex: 0\n};\n\nvar EventManager = /*#__PURE__*/function () {\n function EventManager() {\n var element = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n _classCallCheck(this, EventManager);\n\n this.options = Object.assign({}, event_manager_DEFAULT_OPTIONS, options);\n this.events = new Map();\n this._onBasicInput = this._onBasicInput.bind(this);\n this._onOtherEvent = this._onOtherEvent.bind(this);\n this.setElement(element);\n var events = options.events;\n\n if (events) {\n this.on(events);\n }\n }\n\n _createClass(EventManager, [{\n key: "setElement",\n value: function setElement(element) {\n var _this = this;\n\n if (this.element) {\n this.destroy();\n }\n\n this.element = element;\n\n if (!element) {\n return;\n }\n\n var options = this.options;\n var ManagerClass = options.Manager;\n this.manager = new ManagerClass(element, {\n touchAction: options.touchAction,\n recognizers: options.recognizers || RECOGNIZERS\n }).on(\'hammer.input\', this._onBasicInput);\n\n if (!options.recognizers) {\n Object.keys(RECOGNIZER_COMPATIBLE_MAP).forEach(function (name) {\n var recognizer = _this.manager.get(name);\n\n if (recognizer) {\n RECOGNIZER_COMPATIBLE_MAP[name].forEach(function (otherName) {\n recognizer.recognizeWith(otherName);\n });\n }\n });\n }\n\n for (var recognizerName in options.recognizerOptions) {\n var recognizer = this.manager.get(recognizerName);\n\n if (recognizer) {\n var recognizerOption = options.recognizerOptions[recognizerName];\n delete recognizerOption.enable;\n recognizer.set(recognizerOption);\n }\n }\n\n this.wheelInput = new WheelInput(element, this._onOtherEvent, {\n enable: false\n });\n this.moveInput = new MoveInput(element, this._onOtherEvent, {\n enable: false\n });\n this.keyInput = new KeyInput(element, this._onOtherEvent, {\n enable: false,\n tabIndex: options.tabIndex\n });\n this.contextmenuInput = new ContextmenuInput(element, this._onOtherEvent, {\n enable: false\n });\n\n var _iterator = event_manager_createForOfIteratorHelper(this.events),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var _step$value = slicedToArray_slicedToArray(_step.value, 2),\n eventAlias = _step$value[0],\n eventRegistrar = _step$value[1];\n\n if (!eventRegistrar.isEmpty()) {\n this._toggleRecognizer(eventRegistrar.recognizerName, true);\n\n this.manager.on(eventAlias, eventRegistrar.handleEvent);\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n }\n }, {\n key: "destroy",\n value: function destroy() {\n if (this.element) {\n this.wheelInput.destroy();\n this.moveInput.destroy();\n this.keyInput.destroy();\n this.contextmenuInput.destroy();\n this.manager.destroy();\n this.wheelInput = null;\n this.moveInput = null;\n this.keyInput = null;\n this.contextmenuInput = null;\n this.manager = null;\n this.element = null;\n }\n }\n }, {\n key: "on",\n value: function on(event, handler, opts) {\n this._addEventHandler(event, handler, opts, false);\n }\n }, {\n key: "once",\n value: function once(event, handler, opts) {\n this._addEventHandler(event, handler, opts, true);\n }\n }, {\n key: "watch",\n value: function watch(event, handler, opts) {\n this._addEventHandler(event, handler, opts, false, true);\n }\n }, {\n key: "off",\n value: function off(event, handler) {\n this._removeEventHandler(event, handler);\n }\n }, {\n key: "_toggleRecognizer",\n value: function _toggleRecognizer(name, enabled) {\n var manager = this.manager;\n\n if (!manager) {\n return;\n }\n\n var recognizer = manager.get(name);\n\n if (recognizer && recognizer.options.enable !== enabled) {\n recognizer.set({\n enable: enabled\n });\n var fallbackRecognizers = RECOGNIZER_FALLBACK_MAP[name];\n\n if (fallbackRecognizers && !this.options.recognizers) {\n fallbackRecognizers.forEach(function (otherName) {\n var otherRecognizer = manager.get(otherName);\n\n if (enabled) {\n otherRecognizer.requireFailure(name);\n recognizer.dropRequireFailure(otherName);\n } else {\n otherRecognizer.dropRequireFailure(name);\n }\n });\n }\n }\n\n this.wheelInput.enableEventType(name, enabled);\n this.moveInput.enableEventType(name, enabled);\n this.keyInput.enableEventType(name, enabled);\n this.contextmenuInput.enableEventType(name, enabled);\n }\n }, {\n key: "_addEventHandler",\n value: function _addEventHandler(event, handler, opts, once, passive) {\n if (typeof event !== \'string\') {\n opts = handler;\n\n for (var eventName in event) {\n this._addEventHandler(eventName, event[eventName], opts, once, passive);\n }\n\n return;\n }\n\n var manager = this.manager,\n events = this.events;\n var eventAlias = GESTURE_EVENT_ALIASES[event] || event;\n var eventRegistrar = events.get(eventAlias);\n\n if (!eventRegistrar) {\n eventRegistrar = new EventRegistrar(this);\n events.set(eventAlias, eventRegistrar);\n eventRegistrar.recognizerName = EVENT_RECOGNIZER_MAP[eventAlias] || eventAlias;\n\n if (manager) {\n manager.on(eventAlias, eventRegistrar.handleEvent);\n }\n }\n\n eventRegistrar.add(event, handler, opts, once, passive);\n\n if (!eventRegistrar.isEmpty()) {\n this._toggleRecognizer(eventRegistrar.recognizerName, true);\n }\n }\n }, {\n key: "_removeEventHandler",\n value: function _removeEventHandler(event, handler) {\n if (typeof event !== \'string\') {\n for (var eventName in event) {\n this._removeEventHandler(eventName, event[eventName]);\n }\n\n return;\n }\n\n var events = this.events;\n var eventAlias = GESTURE_EVENT_ALIASES[event] || event;\n var eventRegistrar = events.get(eventAlias);\n\n if (!eventRegistrar) {\n return;\n }\n\n eventRegistrar.remove(event, handler);\n\n if (eventRegistrar.isEmpty()) {\n var recognizerName = eventRegistrar.recognizerName;\n var isRecognizerUsed = false;\n\n var _iterator2 = event_manager_createForOfIteratorHelper(events.values()),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var eh = _step2.value;\n\n if (eh.recognizerName === recognizerName && !eh.isEmpty()) {\n isRecognizerUsed = true;\n break;\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n if (!isRecognizerUsed) {\n this._toggleRecognizer(recognizerName, false);\n }\n }\n }\n }, {\n key: "_onBasicInput",\n value: function _onBasicInput(event) {\n var srcEvent = event.srcEvent;\n var alias = BASIC_EVENT_ALIASES[srcEvent.type];\n\n if (alias) {\n this.manager.emit(alias, event);\n }\n }\n }, {\n key: "_onOtherEvent",\n value: function _onOtherEvent(event) {\n this.manager.emit(event.type, event);\n }\n }]);\n\n return EventManager;\n}();\n\n\n;// CONCATENATED MODULE: ./node_modules/mjolnir.js/dist/esm/index.js\n\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/utils/map-controller.js\n\n\n\n\nfunction map_controller_ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction map_controller_objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n map_controller_ownKeys(Object(source), true).forEach(function (key) {\n defineProperty_defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n map_controller_ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\n\n\n\nvar NO_TRANSITION_PROPS = {\n transitionDuration: 0\n};\nvar LINEAR_TRANSITION_PROPS = {\n transitionDuration: 300,\n transitionEasing: function transitionEasing(t) {\n return t;\n },\n transitionInterpolator: new LinearInterpolator(),\n transitionInterruption: TRANSITION_EVENTS.BREAK\n};\nvar DEFAULT_INERTIA = 300;\n\nvar INERTIA_EASING = function INERTIA_EASING(t) {\n return 1 - (1 - t) * (1 - t);\n};\n\nvar EVENT_TYPES = {\n WHEEL: [\'wheel\'],\n PAN: [\'panstart\', \'panmove\', \'panend\'],\n PINCH: [\'pinchstart\', \'pinchmove\', \'pinchend\'],\n TRIPLE_PAN: [\'tripanstart\', \'tripanmove\', \'tripanend\'],\n DOUBLE_TAP: [\'doubletap\'],\n KEYBOARD: [\'keydown\']\n};\n\nvar MapController = function () {\n function MapController() {\n var _this = this;\n\n _classCallCheck(this, MapController);\n\n defineProperty_defineProperty(this, "events", []);\n\n defineProperty_defineProperty(this, "scrollZoom", true);\n\n defineProperty_defineProperty(this, "dragPan", true);\n\n defineProperty_defineProperty(this, "dragRotate", true);\n\n defineProperty_defineProperty(this, "doubleClickZoom", true);\n\n defineProperty_defineProperty(this, "touchZoom", true);\n\n defineProperty_defineProperty(this, "touchRotate", false);\n\n defineProperty_defineProperty(this, "keyboard", true);\n\n defineProperty_defineProperty(this, "_interactionState", {\n isDragging: false\n });\n\n defineProperty_defineProperty(this, "_events", {});\n\n defineProperty_defineProperty(this, "_setInteractionState", function (newState) {\n Object.assign(_this._interactionState, newState);\n\n if (_this.onStateChange) {\n _this.onStateChange(_this._interactionState);\n }\n });\n\n defineProperty_defineProperty(this, "_onTransition", function (newViewport, oldViewport) {\n _this.onViewportChange(newViewport, _this._interactionState, oldViewport);\n });\n\n this.handleEvent = this.handleEvent.bind(this);\n this._transitionManager = new TransitionManager({\n onViewportChange: this._onTransition,\n onStateChange: this._setInteractionState\n });\n }\n\n _createClass(MapController, [{\n key: "handleEvent",\n value: function handleEvent(event) {\n this.mapState = this.getMapState();\n var eventStartBlocked = this._eventStartBlocked;\n\n switch (event.type) {\n case \'panstart\':\n return eventStartBlocked ? false : this._onPanStart(event);\n\n case \'panmove\':\n return this._onPan(event);\n\n case \'panend\':\n return this._onPanEnd(event);\n\n case \'pinchstart\':\n return eventStartBlocked ? false : this._onPinchStart(event);\n\n case \'pinchmove\':\n return this._onPinch(event);\n\n case \'pinchend\':\n return this._onPinchEnd(event);\n\n case \'tripanstart\':\n return eventStartBlocked ? false : this._onTriplePanStart(event);\n\n case \'tripanmove\':\n return this._onTriplePan(event);\n\n case \'tripanend\':\n return this._onTriplePanEnd(event);\n\n case \'doubletap\':\n return this._onDoubleTap(event);\n\n case \'wheel\':\n return this._onWheel(event);\n\n case \'keydown\':\n return this._onKeyDown(event);\n\n default:\n return false;\n }\n }\n }, {\n key: "getCenter",\n value: function getCenter(event) {\n var _event$offsetCenter = event.offsetCenter,\n x = _event$offsetCenter.x,\n y = _event$offsetCenter.y;\n return [x, y];\n }\n }, {\n key: "isFunctionKeyPressed",\n value: function isFunctionKeyPressed(event) {\n var srcEvent = event.srcEvent;\n return Boolean(srcEvent.metaKey || srcEvent.altKey || srcEvent.ctrlKey || srcEvent.shiftKey);\n }\n }, {\n key: "blockEvents",\n value: function blockEvents(timeout) {\n var _this2 = this;\n\n var timer = setTimeout(function () {\n if (_this2._eventStartBlocked === timer) {\n _this2._eventStartBlocked = null;\n }\n }, timeout);\n this._eventStartBlocked = timer;\n }\n }, {\n key: "updateViewport",\n value: function updateViewport(newMapState, extraProps, interactionState) {\n var oldViewport = this.mapState instanceof MapState ? this.mapState.getViewportProps() : this.mapState;\n\n var newViewport = map_controller_objectSpread(map_controller_objectSpread({}, newMapState.getViewportProps()), extraProps);\n\n var viewStateChanged = Object.keys(newViewport).some(function (key) {\n return oldViewport[key] !== newViewport[key];\n });\n this._state = newMapState.getState();\n\n this._setInteractionState(interactionState);\n\n if (viewStateChanged) {\n this.onViewportChange(newViewport, this._interactionState, oldViewport);\n }\n }\n }, {\n key: "getMapState",\n value: function getMapState(overrides) {\n return new MapState(map_controller_objectSpread(map_controller_objectSpread(map_controller_objectSpread({}, this.mapStateProps), this._state), overrides));\n }\n }, {\n key: "isDragging",\n value: function isDragging() {\n return this._interactionState.isDragging;\n }\n }, {\n key: "setOptions",\n value: function setOptions(options) {\n var onViewportChange = options.onViewportChange,\n onStateChange = options.onStateChange,\n _options$eventManager = options.eventManager,\n eventManager = _options$eventManager === void 0 ? this.eventManager : _options$eventManager,\n _options$isInteractiv = options.isInteractive,\n isInteractive = _options$isInteractiv === void 0 ? true : _options$isInteractiv,\n _options$scrollZoom = options.scrollZoom,\n scrollZoom = _options$scrollZoom === void 0 ? this.scrollZoom : _options$scrollZoom,\n _options$dragPan = options.dragPan,\n dragPan = _options$dragPan === void 0 ? this.dragPan : _options$dragPan,\n _options$dragRotate = options.dragRotate,\n dragRotate = _options$dragRotate === void 0 ? this.dragRotate : _options$dragRotate,\n _options$doubleClickZ = options.doubleClickZoom,\n doubleClickZoom = _options$doubleClickZ === void 0 ? this.doubleClickZoom : _options$doubleClickZ,\n _options$touchZoom = options.touchZoom,\n touchZoom = _options$touchZoom === void 0 ? this.touchZoom : _options$touchZoom,\n _options$touchRotate = options.touchRotate,\n touchRotate = _options$touchRotate === void 0 ? this.touchRotate : _options$touchRotate,\n _options$keyboard = options.keyboard,\n keyboard = _options$keyboard === void 0 ? this.keyboard : _options$keyboard;\n this.onViewportChange = onViewportChange;\n this.onStateChange = onStateChange;\n var prevOptions = this.mapStateProps || {};\n var dimensionChanged = prevOptions.height !== options.height || prevOptions.width !== options.width;\n this.mapStateProps = options;\n\n if (dimensionChanged) {\n this.mapState = prevOptions;\n this.updateViewport(new MapState(options));\n }\n\n this._transitionManager.processViewportChange(options);\n\n if (this.eventManager !== eventManager) {\n this.eventManager = eventManager;\n this._events = {};\n this.toggleEvents(this.events, true);\n }\n\n this.toggleEvents(EVENT_TYPES.WHEEL, isInteractive && Boolean(scrollZoom));\n this.toggleEvents(EVENT_TYPES.PAN, isInteractive && Boolean(dragPan || dragRotate));\n this.toggleEvents(EVENT_TYPES.PINCH, isInteractive && Boolean(touchZoom || touchRotate));\n this.toggleEvents(EVENT_TYPES.TRIPLE_PAN, isInteractive && Boolean(touchRotate));\n this.toggleEvents(EVENT_TYPES.DOUBLE_TAP, isInteractive && Boolean(doubleClickZoom));\n this.toggleEvents(EVENT_TYPES.KEYBOARD, isInteractive && Boolean(keyboard));\n this.scrollZoom = scrollZoom;\n this.dragPan = dragPan;\n this.dragRotate = dragRotate;\n this.doubleClickZoom = doubleClickZoom;\n this.touchZoom = touchZoom;\n this.touchRotate = touchRotate;\n this.keyboard = keyboard;\n }\n }, {\n key: "toggleEvents",\n value: function toggleEvents(eventNames, enabled) {\n var _this3 = this;\n\n if (this.eventManager) {\n eventNames.forEach(function (eventName) {\n if (_this3._events[eventName] !== enabled) {\n _this3._events[eventName] = enabled;\n\n if (enabled) {\n _this3.eventManager.on(eventName, _this3.handleEvent);\n } else {\n _this3.eventManager.off(eventName, _this3.handleEvent);\n }\n }\n });\n }\n }\n }, {\n key: "_onPanStart",\n value: function _onPanStart(event) {\n var pos = this.getCenter(event);\n this._panRotate = this.isFunctionKeyPressed(event) || event.rightButton;\n var newMapState = this._panRotate ? this.mapState.rotateStart({\n pos: pos\n }) : this.mapState.panStart({\n pos: pos\n });\n this.updateViewport(newMapState, NO_TRANSITION_PROPS, {\n isDragging: true\n });\n return true;\n }\n }, {\n key: "_onPan",\n value: function _onPan(event) {\n if (!this.isDragging()) {\n return false;\n }\n\n return this._panRotate ? this._onPanRotate(event) : this._onPanMove(event);\n }\n }, {\n key: "_onPanEnd",\n value: function _onPanEnd(event) {\n if (!this.isDragging()) {\n return false;\n }\n\n return this._panRotate ? this._onPanRotateEnd(event) : this._onPanMoveEnd(event);\n }\n }, {\n key: "_onPanMove",\n value: function _onPanMove(event) {\n if (!this.dragPan) {\n return false;\n }\n\n var pos = this.getCenter(event);\n var newMapState = this.mapState.pan({\n pos: pos\n });\n this.updateViewport(newMapState, NO_TRANSITION_PROPS, {\n isPanning: true\n });\n return true;\n }\n }, {\n key: "_onPanMoveEnd",\n value: function _onPanMoveEnd(event) {\n if (this.dragPan) {\n var _this$dragPan$inertia = this.dragPan.inertia,\n inertia = _this$dragPan$inertia === void 0 ? DEFAULT_INERTIA : _this$dragPan$inertia;\n\n if (inertia && event.velocity) {\n var pos = this.getCenter(event);\n var endPos = [pos[0] + event.velocityX * inertia / 2, pos[1] + event.velocityY * inertia / 2];\n var newControllerState = this.mapState.pan({\n pos: endPos\n }).panEnd();\n this.updateViewport(newControllerState, map_controller_objectSpread(map_controller_objectSpread({}, LINEAR_TRANSITION_PROPS), {}, {\n transitionDuration: inertia,\n transitionEasing: INERTIA_EASING\n }), {\n isDragging: false,\n isPanning: true\n });\n return true;\n }\n }\n\n var newMapState = this.mapState.panEnd();\n this.updateViewport(newMapState, null, {\n isDragging: false,\n isPanning: false\n });\n return true;\n }\n }, {\n key: "_onPanRotate",\n value: function _onPanRotate(event) {\n if (!this.dragRotate) {\n return false;\n }\n\n var pos = this.getCenter(event);\n var newMapState = this.mapState.rotate({\n pos: pos\n });\n this.updateViewport(newMapState, NO_TRANSITION_PROPS, {\n isRotating: true\n });\n return true;\n }\n }, {\n key: "_onPanRotateEnd",\n value: function _onPanRotateEnd(event) {\n if (this.dragRotate) {\n var _this$dragRotate$iner = this.dragRotate.inertia,\n inertia = _this$dragRotate$iner === void 0 ? DEFAULT_INERTIA : _this$dragRotate$iner;\n\n if (inertia && event.velocity) {\n var pos = this.getCenter(event);\n var endPos = [pos[0] + event.velocityX * inertia / 2, pos[1] + event.velocityY * inertia / 2];\n var newControllerState = this.mapState.rotate({\n pos: endPos\n }).rotateEnd();\n this.updateViewport(newControllerState, map_controller_objectSpread(map_controller_objectSpread({}, LINEAR_TRANSITION_PROPS), {}, {\n transitionDuration: inertia,\n transitionEasing: INERTIA_EASING\n }), {\n isDragging: false,\n isRotating: true\n });\n return true;\n }\n }\n\n var newMapState = this.mapState.panEnd();\n this.updateViewport(newMapState, null, {\n isDragging: false,\n isRotating: false\n });\n return true;\n }\n }, {\n key: "_onWheel",\n value: function _onWheel(event) {\n if (!this.scrollZoom) {\n return false;\n }\n\n var _this$scrollZoom = this.scrollZoom,\n _this$scrollZoom$spee = _this$scrollZoom.speed,\n speed = _this$scrollZoom$spee === void 0 ? 0.01 : _this$scrollZoom$spee,\n _this$scrollZoom$smoo = _this$scrollZoom.smooth,\n smooth = _this$scrollZoom$smoo === void 0 ? false : _this$scrollZoom$smoo;\n event.preventDefault();\n var pos = this.getCenter(event);\n var delta = event.delta;\n var scale = 2 / (1 + Math.exp(-Math.abs(delta * speed)));\n\n if (delta < 0 && scale !== 0) {\n scale = 1 / scale;\n }\n\n var newMapState = this.mapState.zoom({\n pos: pos,\n scale: scale\n });\n this.updateViewport(newMapState, map_controller_objectSpread(map_controller_objectSpread({}, LINEAR_TRANSITION_PROPS), {}, {\n transitionInterpolator: new LinearInterpolator({\n around: pos\n }),\n transitionDuration: smooth ? 250 : 1\n }), {\n isPanning: true,\n isZooming: true\n });\n return true;\n }\n }, {\n key: "_onPinchStart",\n value: function _onPinchStart(event) {\n var pos = this.getCenter(event);\n var newMapState = this.mapState.zoomStart({\n pos: pos\n }).rotateStart({\n pos: pos\n });\n this._startPinchRotation = event.rotation;\n this._lastPinchEvent = event;\n this.updateViewport(newMapState, NO_TRANSITION_PROPS, {\n isDragging: true\n });\n return true;\n }\n }, {\n key: "_onPinch",\n value: function _onPinch(event) {\n if (!this.isDragging()) {\n return false;\n }\n\n if (!this.touchZoom && !this.touchRotate) {\n return false;\n }\n\n var newMapState = this.mapState;\n\n if (this.touchZoom) {\n var scale = event.scale;\n var pos = this.getCenter(event);\n newMapState = newMapState.zoom({\n pos: pos,\n scale: scale\n });\n }\n\n if (this.touchRotate) {\n var rotation = event.rotation;\n newMapState = newMapState.rotate({\n deltaAngleX: this._startPinchRotation - rotation\n });\n }\n\n this.updateViewport(newMapState, NO_TRANSITION_PROPS, {\n isDragging: true,\n isPanning: Boolean(this.touchZoom),\n isZooming: Boolean(this.touchZoom),\n isRotating: Boolean(this.touchRotate)\n });\n this._lastPinchEvent = event;\n return true;\n }\n }, {\n key: "_onPinchEnd",\n value: function _onPinchEnd(event) {\n if (!this.isDragging()) {\n return false;\n }\n\n if (this.touchZoom) {\n var _this$touchZoom$inert = this.touchZoom.inertia,\n inertia = _this$touchZoom$inert === void 0 ? DEFAULT_INERTIA : _this$touchZoom$inert;\n var _lastPinchEvent = this._lastPinchEvent;\n\n if (inertia && _lastPinchEvent && event.scale !== _lastPinchEvent.scale) {\n var pos = this.getCenter(event);\n\n var _newMapState = this.mapState.rotateEnd();\n\n var z = Math.log2(event.scale);\n\n var velocityZ = (z - Math.log2(_lastPinchEvent.scale)) / (event.deltaTime - _lastPinchEvent.deltaTime);\n\n var endScale = Math.pow(2, z + velocityZ * inertia / 2);\n _newMapState = _newMapState.zoom({\n pos: pos,\n scale: endScale\n }).zoomEnd();\n this.updateViewport(_newMapState, map_controller_objectSpread(map_controller_objectSpread({}, LINEAR_TRANSITION_PROPS), {}, {\n transitionInterpolator: new LinearInterpolator({\n around: pos\n }),\n transitionDuration: inertia,\n transitionEasing: INERTIA_EASING\n }), {\n isDragging: false,\n isPanning: Boolean(this.touchZoom),\n isZooming: Boolean(this.touchZoom),\n isRotating: false\n });\n this.blockEvents(inertia);\n return true;\n }\n }\n\n var newMapState = this.mapState.zoomEnd().rotateEnd();\n this._state.startPinchRotation = 0;\n this.updateViewport(newMapState, null, {\n isDragging: false,\n isPanning: false,\n isZooming: false,\n isRotating: false\n });\n this._startPinchRotation = null;\n this._lastPinchEvent = null;\n return true;\n }\n }, {\n key: "_onTriplePanStart",\n value: function _onTriplePanStart(event) {\n var pos = this.getCenter(event);\n var newMapState = this.mapState.rotateStart({\n pos: pos\n });\n this.updateViewport(newMapState, NO_TRANSITION_PROPS, {\n isDragging: true\n });\n return true;\n }\n }, {\n key: "_onTriplePan",\n value: function _onTriplePan(event) {\n if (!this.isDragging()) {\n return false;\n }\n\n if (!this.touchRotate) {\n return false;\n }\n\n var pos = this.getCenter(event);\n pos[0] -= event.deltaX;\n var newMapState = this.mapState.rotate({\n pos: pos\n });\n this.updateViewport(newMapState, NO_TRANSITION_PROPS, {\n isRotating: true\n });\n return true;\n }\n }, {\n key: "_onTriplePanEnd",\n value: function _onTriplePanEnd(event) {\n if (!this.isDragging()) {\n return false;\n }\n\n if (this.touchRotate) {\n var _this$touchRotate$ine = this.touchRotate.inertia,\n inertia = _this$touchRotate$ine === void 0 ? DEFAULT_INERTIA : _this$touchRotate$ine;\n\n if (inertia && event.velocityY) {\n var pos = this.getCenter(event);\n var endPos = [pos[0], pos[1] += event.velocityY * inertia / 2];\n\n var _newMapState2 = this.mapState.rotate({\n pos: endPos\n });\n\n this.updateViewport(_newMapState2, map_controller_objectSpread(map_controller_objectSpread({}, LINEAR_TRANSITION_PROPS), {}, {\n transitionDuration: inertia,\n transitionEasing: INERTIA_EASING\n }), {\n isDragging: false,\n isRotating: true\n });\n this.blockEvents(inertia);\n return false;\n }\n }\n\n var newMapState = this.mapState.rotateEnd();\n this.updateViewport(newMapState, null, {\n isDragging: false,\n isRotating: false\n });\n return true;\n }\n }, {\n key: "_onDoubleTap",\n value: function _onDoubleTap(event) {\n if (!this.doubleClickZoom) {\n return false;\n }\n\n var pos = this.getCenter(event);\n var isZoomOut = this.isFunctionKeyPressed(event);\n var newMapState = this.mapState.zoom({\n pos: pos,\n scale: isZoomOut ? 0.5 : 2\n });\n this.updateViewport(newMapState, Object.assign({}, LINEAR_TRANSITION_PROPS, {\n transitionInterpolator: new LinearInterpolator({\n around: pos\n })\n }), {\n isZooming: true\n });\n return true;\n }\n }, {\n key: "_onKeyDown",\n value: function _onKeyDown(event) {\n if (!this.keyboard) {\n return false;\n }\n\n var funcKey = this.isFunctionKeyPressed(event);\n var _this$keyboard = this.keyboard,\n _this$keyboard$zoomSp = _this$keyboard.zoomSpeed,\n zoomSpeed = _this$keyboard$zoomSp === void 0 ? 2 : _this$keyboard$zoomSp,\n _this$keyboard$moveSp = _this$keyboard.moveSpeed,\n moveSpeed = _this$keyboard$moveSp === void 0 ? 100 : _this$keyboard$moveSp,\n _this$keyboard$rotate = _this$keyboard.rotateSpeedX,\n rotateSpeedX = _this$keyboard$rotate === void 0 ? 15 : _this$keyboard$rotate,\n _this$keyboard$rotate2 = _this$keyboard.rotateSpeedY,\n rotateSpeedY = _this$keyboard$rotate2 === void 0 ? 10 : _this$keyboard$rotate2;\n var mapStateProps = this.mapStateProps;\n var newMapState;\n\n switch (event.srcEvent.keyCode) {\n case 189:\n if (funcKey) {\n newMapState = this.getMapState({\n zoom: mapStateProps.zoom - Math.log2(zoomSpeed) - 1\n });\n } else {\n newMapState = this.getMapState({\n zoom: mapStateProps.zoom - Math.log2(zoomSpeed)\n });\n }\n\n break;\n\n case 187:\n if (funcKey) {\n newMapState = this.getMapState({\n zoom: mapStateProps.zoom + Math.log2(zoomSpeed) + 1\n });\n } else {\n newMapState = this.getMapState({\n zoom: mapStateProps.zoom + Math.log2(zoomSpeed)\n });\n }\n\n break;\n\n case 37:\n if (funcKey) {\n newMapState = this.getMapState({\n bearing: mapStateProps.bearing - rotateSpeedX\n });\n } else {\n newMapState = this.mapState.pan({\n pos: [moveSpeed, 0],\n startPos: [0, 0]\n });\n }\n\n break;\n\n case 39:\n if (funcKey) {\n newMapState = this.getMapState({\n bearing: mapStateProps.bearing + rotateSpeedX\n });\n } else {\n newMapState = this.mapState.pan({\n pos: [-moveSpeed, 0],\n startPos: [0, 0]\n });\n }\n\n break;\n\n case 38:\n if (funcKey) {\n newMapState = this.getMapState({\n pitch: mapStateProps.pitch + rotateSpeedY\n });\n } else {\n newMapState = this.mapState.pan({\n pos: [0, moveSpeed],\n startPos: [0, 0]\n });\n }\n\n break;\n\n case 40:\n if (funcKey) {\n newMapState = this.getMapState({\n pitch: mapStateProps.pitch - rotateSpeedY\n });\n } else {\n newMapState = this.mapState.pan({\n pos: [0, -moveSpeed],\n startPos: [0, 0]\n });\n }\n\n break;\n\n default:\n return false;\n }\n\n return this.updateViewport(newMapState, LINEAR_TRANSITION_PROPS);\n }\n }]);\n\n return MapController;\n}();\n\n\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/components/interactive-map.js\n\n\n\n\nfunction interactive_map_ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction interactive_map_objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n interactive_map_ownKeys(Object(source), true).forEach(function (key) {\n defineProperty_defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n interactive_map_ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\n\n\n\n\n\n\n\n\n\n\n\nvar interactive_map_propTypes = Object.assign({}, static_map.propTypes, {\n maxZoom: prop_types.number,\n minZoom: prop_types.number,\n maxPitch: prop_types.number,\n minPitch: prop_types.number,\n onViewStateChange: prop_types.func,\n onViewportChange: prop_types.func,\n onInteractionStateChange: prop_types.func,\n transitionDuration: prop_types.oneOfType([prop_types.number, prop_types.string]),\n transitionInterpolator: prop_types.object,\n transitionInterruption: prop_types.number,\n transitionEasing: prop_types.func,\n onTransitionStart: prop_types.func,\n onTransitionInterrupt: prop_types.func,\n onTransitionEnd: prop_types.func,\n scrollZoom: prop_types.oneOfType([prop_types.bool, prop_types.object]),\n dragPan: prop_types.oneOfType([prop_types.bool, prop_types.object]),\n dragRotate: prop_types.oneOfType([prop_types.bool, prop_types.object]),\n doubleClickZoom: prop_types.bool,\n touchZoom: prop_types.oneOfType([prop_types.bool, prop_types.object]),\n touchRotate: prop_types.oneOfType([prop_types.bool, prop_types.object]),\n keyboard: prop_types.oneOfType([prop_types.bool, prop_types.object]),\n onHover: prop_types.func,\n onClick: prop_types.func,\n onDblClick: prop_types.func,\n onContextMenu: prop_types.func,\n onMouseDown: prop_types.func,\n onMouseMove: prop_types.func,\n onMouseUp: prop_types.func,\n onTouchStart: prop_types.func,\n onTouchMove: prop_types.func,\n onTouchEnd: prop_types.func,\n onMouseEnter: prop_types.func,\n onMouseLeave: prop_types.func,\n onMouseOut: prop_types.func,\n onWheel: prop_types.func,\n touchAction: prop_types.string,\n eventRecognizerOptions: prop_types.object,\n clickRadius: prop_types.number,\n interactiveLayerIds: prop_types.array,\n getCursor: prop_types.func,\n controller: prop_types.instanceOf(MapController)\n});\n\nvar getDefaultCursor = function getDefaultCursor(_ref) {\n var isDragging = _ref.isDragging,\n isHovering = _ref.isHovering;\n return isDragging ? \'grabbing\' : isHovering ? \'pointer\' : \'grab\';\n};\n\nvar interactive_map_defaultProps = Object.assign({}, static_map.defaultProps, MAPBOX_LIMITS, TransitionManager.defaultProps, {\n onViewStateChange: null,\n onViewportChange: null,\n onClick: null,\n onNativeClick: null,\n onHover: null,\n onContextMenu: function onContextMenu(event) {\n return event.preventDefault();\n },\n scrollZoom: true,\n dragPan: true,\n dragRotate: true,\n doubleClickZoom: true,\n touchZoom: true,\n touchRotate: false,\n keyboard: true,\n touchAction: \'none\',\n eventRecognizerOptions: {},\n clickRadius: 0,\n getCursor: getDefaultCursor\n});\n\nfunction normalizeEvent(event) {\n if (event.lngLat || !event.offsetCenter) {\n return event;\n }\n\n var _event$offsetCenter = event.offsetCenter,\n x = _event$offsetCenter.x,\n y = _event$offsetCenter.y;\n\n if (!Number.isFinite(x) || !Number.isFinite(y)) {\n return event;\n }\n\n var pos = [x, y];\n event.point = pos;\n var viewport = this.viewport;\n var location = viewport.unproject(pos, {\n targetZ: viewport.meterOffset[2]\n });\n event.lngLat = [location[0], location[1]];\n return event;\n}\n\nfunction getFeatures(pos) {\n var map = this.map;\n\n if (!map || !pos) {\n return null;\n }\n\n var queryParams = {};\n var size = this.props.clickRadius;\n\n if (this.props.interactiveLayerIds) {\n queryParams.layers = this.props.interactiveLayerIds;\n }\n\n try {\n return map.queryRenderedFeatures(size ? [[pos[0] - size, pos[1] + size], [pos[0] + size, pos[1] - size]] : pos, queryParams);\n } catch (_unused) {\n return null;\n }\n}\n\nfunction onEvent(callbackName, event) {\n var func = this.props[callbackName];\n\n if (func) {\n func(normalizeEvent.call(this, event));\n }\n}\n\nfunction onPointerDown(event) {\n onEvent.call(this, event.pointerType === \'touch\' ? \'onTouchStart\' : \'onMouseDown\', event);\n}\n\nfunction onPointerUp(event) {\n onEvent.call(this, event.pointerType === \'touch\' ? \'onTouchEnd\' : \'onMouseUp\', event);\n}\n\nfunction onPointerMove(event) {\n onEvent.call(this, event.pointerType === \'touch\' ? \'onTouchMove\' : \'onMouseMove\', event);\n\n if (!this.state.isDragging) {\n var _this$props = this.props,\n onHover = _this$props.onHover,\n interactiveLayerIds = _this$props.interactiveLayerIds;\n var features;\n event = normalizeEvent.call(this, event);\n\n if (interactiveLayerIds || onHover) {\n features = getFeatures.call(this, event.point);\n }\n\n var isHovering = Boolean(interactiveLayerIds && features && features.length > 0);\n var isEntering = isHovering && !this.state.isHovering;\n var isExiting = !isHovering && this.state.isHovering;\n\n if (onHover || isEntering) {\n event.features = features;\n\n if (onHover) {\n onHover(event);\n }\n }\n\n if (isEntering) {\n onEvent.call(this, \'onMouseEnter\', event);\n }\n\n if (isExiting) {\n onEvent.call(this, \'onMouseLeave\', event);\n }\n\n if (isEntering || isExiting) {\n this.setState({\n isHovering: isHovering\n });\n }\n }\n}\n\nfunction onPointerClick(event) {\n var _this$props2 = this.props,\n onClick = _this$props2.onClick,\n onNativeClick = _this$props2.onNativeClick,\n onDblClick = _this$props2.onDblClick,\n doubleClickZoom = _this$props2.doubleClickZoom;\n var callbacks = [];\n var isDoubleClickEnabled = onDblClick || doubleClickZoom;\n\n switch (event.type) {\n case \'anyclick\':\n callbacks.push(onNativeClick);\n\n if (!isDoubleClickEnabled) {\n callbacks.push(onClick);\n }\n\n break;\n\n case \'click\':\n if (isDoubleClickEnabled) {\n callbacks.push(onClick);\n }\n\n break;\n\n default:\n }\n\n callbacks = callbacks.filter(Boolean);\n\n if (callbacks.length) {\n event = normalizeEvent.call(this, event);\n event.features = getFeatures.call(this, event.point);\n callbacks.forEach(function (cb) {\n return cb(event);\n });\n }\n}\n\nfunction interactive_map_getRefHandles(staticMapRef) {\n return {\n getMap: staticMapRef.current && staticMapRef.current.getMap,\n queryRenderedFeatures: staticMapRef.current && staticMapRef.current.queryRenderedFeatures\n };\n}\n\nvar InteractiveMap = (0,react.forwardRef)(function (props, ref) {\n var parentContext = (0,react.useContext)(map_context);\n var controller = (0,react.useMemo)(function () {\n return props.controller || new MapController();\n }, []);\n var eventManager = (0,react.useMemo)(function () {\n return new EventManager(null, {\n touchAction: props.touchAction,\n recognizerOptions: props.eventRecognizerOptions\n });\n }, []);\n var eventCanvasRef = (0,react.useRef)(null);\n var staticMapRef = (0,react.useRef)(null);\n\n var _thisRef = (0,react.useRef)({\n width: 0,\n height: 0,\n state: {\n isHovering: false,\n isDragging: false\n }\n });\n\n var thisRef = _thisRef.current;\n thisRef.props = props;\n thisRef.map = staticMapRef.current && staticMapRef.current.getMap();\n\n thisRef.setState = function (newState) {\n thisRef.state = interactive_map_objectSpread(interactive_map_objectSpread({}, thisRef.state), newState);\n eventCanvasRef.current.style.cursor = props.getCursor(thisRef.state);\n };\n\n var inRender = true;\n var viewportUpdateRequested;\n var stateUpdateRequested;\n\n var handleViewportChange = function handleViewportChange(viewState, interactionState, oldViewState) {\n if (inRender) {\n viewportUpdateRequested = [viewState, interactionState, oldViewState];\n return;\n }\n\n var _thisRef$props = thisRef.props,\n onViewStateChange = _thisRef$props.onViewStateChange,\n onViewportChange = _thisRef$props.onViewportChange;\n Object.defineProperty(viewState, \'position\', {\n get: function get() {\n return [0, 0, getTerrainElevation(thisRef.map, viewState)];\n }\n });\n\n if (onViewStateChange) {\n onViewStateChange({\n viewState: viewState,\n interactionState: interactionState,\n oldViewState: oldViewState\n });\n }\n\n if (onViewportChange) {\n onViewportChange(viewState, interactionState, oldViewState);\n }\n };\n\n (0,react.useImperativeHandle)(ref, function () {\n return interactive_map_getRefHandles(staticMapRef);\n }, []);\n var context = (0,react.useMemo)(function () {\n return interactive_map_objectSpread(interactive_map_objectSpread({}, parentContext), {}, {\n eventManager: eventManager,\n container: parentContext.container || eventCanvasRef.current\n });\n }, [parentContext, eventCanvasRef.current]);\n context.onViewportChange = handleViewportChange;\n context.viewport = parentContext.viewport || getViewport(thisRef);\n thisRef.viewport = context.viewport;\n\n var handleInteractionStateChange = function handleInteractionStateChange(interactionState) {\n var _interactionState$isD = interactionState.isDragging,\n isDragging = _interactionState$isD === void 0 ? false : _interactionState$isD;\n\n if (isDragging !== thisRef.state.isDragging) {\n thisRef.setState({\n isDragging: isDragging\n });\n }\n\n if (inRender) {\n stateUpdateRequested = interactionState;\n return;\n }\n\n var onInteractionStateChange = thisRef.props.onInteractionStateChange;\n\n if (onInteractionStateChange) {\n onInteractionStateChange(interactionState);\n }\n };\n\n var updateControllerOpts = function updateControllerOpts() {\n if (thisRef.width && thisRef.height) {\n controller.setOptions(interactive_map_objectSpread(interactive_map_objectSpread(interactive_map_objectSpread({}, thisRef.props), thisRef.props.viewState), {}, {\n isInteractive: Boolean(thisRef.props.onViewStateChange || thisRef.props.onViewportChange),\n onViewportChange: handleViewportChange,\n onStateChange: handleInteractionStateChange,\n eventManager: eventManager,\n width: thisRef.width,\n height: thisRef.height\n }));\n }\n };\n\n var onResize = function onResize(_ref2) {\n var width = _ref2.width,\n height = _ref2.height;\n thisRef.width = width;\n thisRef.height = height;\n updateControllerOpts();\n thisRef.props.onResize({\n width: width,\n height: height\n });\n };\n\n (0,react.useEffect)(function () {\n eventManager.setElement(eventCanvasRef.current);\n eventManager.on({\n pointerdown: onPointerDown.bind(thisRef),\n pointermove: onPointerMove.bind(thisRef),\n pointerup: onPointerUp.bind(thisRef),\n pointerleave: onEvent.bind(thisRef, \'onMouseOut\'),\n click: onPointerClick.bind(thisRef),\n anyclick: onPointerClick.bind(thisRef),\n dblclick: onEvent.bind(thisRef, \'onDblClick\'),\n wheel: onEvent.bind(thisRef, \'onWheel\'),\n contextmenu: onEvent.bind(thisRef, \'onContextMenu\')\n });\n return function () {\n eventManager.destroy();\n };\n }, []);\n use_isomorphic_layout_effect(function () {\n if (viewportUpdateRequested) {\n handleViewportChange.apply(void 0, (0,toConsumableArray/* default */.Z)(viewportUpdateRequested));\n }\n\n if (stateUpdateRequested) {\n handleInteractionStateChange(stateUpdateRequested);\n }\n });\n updateControllerOpts();\n var width = props.width,\n height = props.height,\n style = props.style,\n getCursor = props.getCursor;\n var eventCanvasStyle = (0,react.useMemo)(function () {\n return interactive_map_objectSpread(interactive_map_objectSpread({\n position: \'relative\'\n }, style), {}, {\n width: width,\n height: height,\n cursor: getCursor(thisRef.state)\n });\n }, [style, width, height, getCursor, thisRef.state]);\n\n if (!viewportUpdateRequested || !thisRef._child) {\n thisRef._child = react.createElement(MapContextProvider, {\n value: context\n }, react.createElement("div", {\n key: "event-canvas",\n ref: eventCanvasRef,\n style: eventCanvasStyle\n }, react.createElement(static_map, _extends({}, props, {\n width: "100%",\n height: "100%",\n style: null,\n onResize: onResize,\n ref: staticMapRef\n }))));\n }\n\n inRender = false;\n return thisRef._child;\n});\nInteractiveMap.supported = static_map.supported;\nInteractiveMap.propTypes = interactive_map_propTypes;\nInteractiveMap.defaultProps = interactive_map_defaultProps;\n/* harmony default export */ var interactive_map = (InteractiveMap);\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/components/source.js\n\n\n\nfunction source_ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction source_objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n source_ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n source_ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\n\n\n\n\n\n\nvar sourceCounter = 0;\n\nfunction createSource(map, id, props) {\n if (map.style && map.style._loaded) {\n var options = source_objectSpread({}, props);\n\n delete options.id;\n delete options.children;\n map.addSource(id, options);\n return map.getSource(id);\n }\n\n return null;\n}\n\nfunction updateSource(source, props, prevProps) {\n assert(props.id === prevProps.id, \'source id changed\');\n assert(props.type === prevProps.type, \'source type changed\');\n var changedKey = \'\';\n var changedKeyCount = 0;\n\n for (var key in props) {\n if (key !== \'children\' && key !== \'id\' && !deepEqual(prevProps[key], props[key])) {\n changedKey = key;\n changedKeyCount++;\n }\n }\n\n if (!changedKeyCount) {\n return;\n }\n\n var type = props.type;\n\n if (type === \'geojson\') {\n source.setData(props.data);\n } else if (type === \'image\') {\n source.updateImage({\n url: props.url,\n coordinates: props.coordinates\n });\n } else if ((type === \'canvas\' || type === \'video\') && changedKeyCount === 1 && changedKey === \'coordinates\') {\n source.setCoordinates(props.coordinates);\n } else if (type === \'vector\' && source.setUrl) {\n switch (changedKey) {\n case \'url\':\n source.setUrl(props.url);\n break;\n\n case \'tiles\':\n source.setTiles(props.tiles);\n break;\n\n default:\n }\n } else {\n console.warn("Unable to update prop: ".concat(changedKey));\n }\n}\n\nfunction Source(props) {\n var context = useContext(MapContext);\n var propsRef = useRef({\n id: props.id,\n type: props.type\n });\n\n var _useState = useState(0),\n _useState2 = _slicedToArray(_useState, 2),\n setStyleLoaded = _useState2[1];\n\n var id = useMemo(function () {\n return props.id || "jsx-source-".concat(sourceCounter++);\n }, []);\n var map = context.map;\n useEffect(function () {\n if (map) {\n var forceUpdate = function forceUpdate() {\n return setStyleLoaded(function (version) {\n return version + 1;\n });\n };\n\n map.on(\'styledata\', forceUpdate);\n return function () {\n map.off(\'styledata\', forceUpdate);\n requestAnimationFrame(function () {\n if (map.style && map.style._loaded && map.getSource(id)) {\n map.removeSource(id);\n }\n });\n };\n }\n\n return undefined;\n }, [map, id]);\n var source = map && map.style && map.getSource(id);\n\n if (source) {\n updateSource(source, props, propsRef.current);\n } else {\n source = createSource(map, id, props);\n }\n\n propsRef.current = props;\n return source && React.Children.map(props.children, function (child) {\n return child && cloneElement(child, {\n source: id\n });\n }) || null;\n}\n\n/* harmony default export */ var source = ((/* unused pure expression or super */ null && (Source)));\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = _objectWithoutPropertiesLoose(source, excluded);\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/typeof.js\nfunction _typeof(obj) {\n "@babel/helpers - typeof";\n\n if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/utils/deep-equal.js\n\nfunction deep_equal_deepEqual(a, b) {\n if (a === b) {\n return true;\n }\n\n if (!a || !b) {\n return false;\n }\n\n if (Array.isArray(a)) {\n if (!Array.isArray(b) || a.length !== b.length) {\n return false;\n }\n\n for (var i = 0; i < a.length; i++) {\n if (!deep_equal_deepEqual(a[i], b[i])) {\n return false;\n }\n }\n\n return true;\n } else if (Array.isArray(b)) {\n return false;\n }\n\n if (_typeof(a) === \'object\' && _typeof(b) === \'object\') {\n var aKeys = Object.keys(a);\n var bKeys = Object.keys(b);\n\n if (aKeys.length !== bKeys.length) {\n return false;\n }\n\n for (var _i = 0, _aKeys = aKeys; _i < _aKeys.length; _i++) {\n var key = _aKeys[_i];\n\n if (!b.hasOwnProperty(key)) {\n return false;\n }\n\n if (!deep_equal_deepEqual(a[key], b[key])) {\n return false;\n }\n }\n\n return true;\n }\n\n return false;\n}\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/components/layer.js\n\n\n\n\nfunction layer_ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction layer_objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n layer_ownKeys(Object(source), true).forEach(function (key) {\n defineProperty_defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n layer_ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\n\n\n\n\n\nvar LAYER_TYPES = [\'fill\', \'line\', \'symbol\', \'circle\', \'fill-extrusion\', \'raster\', \'background\', \'heatmap\', \'hillshade\', \'sky\'];\nvar layer_propTypes = {\n type: prop_types.oneOf(LAYER_TYPES).isRequired,\n id: prop_types.string,\n source: prop_types.string,\n beforeId: prop_types.string\n};\n\nfunction diffLayerStyles(map, id, props, prevProps) {\n var _props$layout = props.layout,\n layout = _props$layout === void 0 ? {} : _props$layout,\n _props$paint = props.paint,\n paint = _props$paint === void 0 ? {} : _props$paint,\n filter = props.filter,\n minzoom = props.minzoom,\n maxzoom = props.maxzoom,\n beforeId = props.beforeId,\n otherProps = _objectWithoutProperties(props, ["layout", "paint", "filter", "minzoom", "maxzoom", "beforeId"]);\n\n if (beforeId !== prevProps.beforeId) {\n map.moveLayer(id, beforeId);\n }\n\n if (layout !== prevProps.layout) {\n var prevLayout = prevProps.layout || {};\n\n for (var key in layout) {\n if (!deep_equal_deepEqual(layout[key], prevLayout[key])) {\n map.setLayoutProperty(id, key, layout[key]);\n }\n }\n\n for (var _key in prevLayout) {\n if (!layout.hasOwnProperty(_key)) {\n map.setLayoutProperty(id, _key, undefined);\n }\n }\n }\n\n if (paint !== prevProps.paint) {\n var prevPaint = prevProps.paint || {};\n\n for (var _key2 in paint) {\n if (!deep_equal_deepEqual(paint[_key2], prevPaint[_key2])) {\n map.setPaintProperty(id, _key2, paint[_key2]);\n }\n }\n\n for (var _key3 in prevPaint) {\n if (!paint.hasOwnProperty(_key3)) {\n map.setPaintProperty(id, _key3, undefined);\n }\n }\n }\n\n if (!deep_equal_deepEqual(filter, prevProps.filter)) {\n map.setFilter(id, filter);\n }\n\n if (minzoom !== prevProps.minzoom || maxzoom !== prevProps.maxzoom) {\n map.setLayerZoomRange(id, minzoom, maxzoom);\n }\n\n for (var _key4 in otherProps) {\n if (!deep_equal_deepEqual(otherProps[_key4], prevProps[_key4])) {\n map.setLayerProperty(id, _key4, otherProps[_key4]);\n }\n }\n}\n\nfunction createLayer(map, id, props) {\n if (map.style && map.style._loaded) {\n var options = layer_objectSpread(layer_objectSpread({}, props), {}, {\n id: id\n });\n\n delete options.beforeId;\n map.addLayer(options, props.beforeId);\n }\n}\n\nfunction updateLayer(map, id, props, prevProps) {\n utils_assert_assert(props.id === prevProps.id, \'layer id changed\');\n utils_assert_assert(props.type === prevProps.type, \'layer type changed\');\n\n try {\n diffLayerStyles(map, id, props, prevProps);\n } catch (error) {\n console.warn(error);\n }\n}\n\nvar layerCounter = 0;\n\nfunction Layer(props) {\n var context = (0,react.useContext)(map_context);\n var propsRef = (0,react.useRef)({\n id: props.id,\n type: props.type\n });\n\n var _useState = (0,react.useState)(0),\n _useState2 = slicedToArray_slicedToArray(_useState, 2),\n setStyleLoaded = _useState2[1];\n\n var id = (0,react.useMemo)(function () {\n return props.id || "jsx-layer-".concat(layerCounter++);\n }, []);\n var map = context.map;\n (0,react.useEffect)(function () {\n if (map) {\n var forceUpdate = function forceUpdate() {\n return setStyleLoaded(function (version) {\n return version + 1;\n });\n };\n\n map.on(\'styledata\', forceUpdate);\n return function () {\n map.off(\'styledata\', forceUpdate);\n\n if (map.style && map.style._loaded) {\n map.removeLayer(id);\n }\n };\n }\n\n return undefined;\n }, [map]);\n var layer = map && map.style && map.getLayer(id);\n\n if (layer) {\n updateLayer(map, id, props, propsRef.current);\n } else {\n createLayer(map, id, props);\n }\n\n propsRef.current = props;\n return null;\n}\n\nLayer.propTypes = layer_propTypes;\n/* harmony default export */ var components_layer = ((/* unused pure expression or super */ null && (Layer)));\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/components/use-map-control.js\n\n\n\nvar mapControlDefaultProps = {\n captureScroll: false,\n captureDrag: true,\n captureClick: true,\n captureDoubleClick: true,\n capturePointerMove: false\n};\nvar mapControlPropTypes = {\n captureScroll: prop_types.bool,\n captureDrag: prop_types.bool,\n captureClick: prop_types.bool,\n captureDoubleClick: prop_types.bool,\n capturePointerMove: prop_types.bool\n};\n\nfunction onMount(thisRef) {\n var ref = thisRef.containerRef.current;\n var eventManager = thisRef.context.eventManager;\n\n if (!ref || !eventManager) {\n return undefined;\n }\n\n var events = {\n wheel: function wheel(evt) {\n var props = thisRef.props;\n\n if (props.captureScroll) {\n evt.stopPropagation();\n }\n\n if (props.onScroll) {\n props.onScroll(evt, thisRef);\n }\n },\n panstart: function panstart(evt) {\n var props = thisRef.props;\n\n if (props.captureDrag) {\n evt.stopPropagation();\n }\n\n if (props.onDragStart) {\n props.onDragStart(evt, thisRef);\n }\n },\n anyclick: function anyclick(evt) {\n var props = thisRef.props;\n\n if (props.captureClick) {\n evt.stopPropagation();\n }\n\n if (props.onClick) {\n props.onClick(evt, thisRef);\n }\n },\n click: function click(evt) {\n var props = thisRef.props;\n\n if (props.captureClick) {\n evt.stopPropagation();\n }\n\n if (props.onClick) {\n props.onClick(evt, thisRef);\n }\n },\n dblclick: function dblclick(evt) {\n var props = thisRef.props;\n\n if (props.captureDoubleClick) {\n evt.stopPropagation();\n }\n\n if (props.onDoubleClick) {\n props.onDoubleClick(evt, thisRef);\n }\n },\n pointermove: function pointermove(evt) {\n var props = thisRef.props;\n\n if (props.capturePointerMove) {\n evt.stopPropagation();\n }\n\n if (props.onPointerMove) {\n props.onPointerMove(evt, thisRef);\n }\n }\n };\n eventManager.watch(events, ref);\n return function () {\n eventManager.off(events);\n };\n}\n\nfunction useMapControl() {\n var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var context = (0,react.useContext)(map_context);\n var containerRef = (0,react.useRef)(null);\n\n var _thisRef = (0,react.useRef)({\n props: props,\n state: {},\n context: context,\n containerRef: containerRef\n });\n\n var thisRef = _thisRef.current;\n thisRef.props = props;\n thisRef.context = context;\n (0,react.useEffect)(function () {\n return onMount(thisRef);\n }, [context.eventManager]);\n return thisRef;\n}\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/components/base-control.js\n\n\n\n\n\n\n\n\n\nfunction base_control_createSuper(Derived) {\n var hasNativeReflectConstruct = base_control_isNativeReflectConstruct();\n\n return function _createSuperInternal() {\n var Super = _getPrototypeOf(Derived),\n result;\n\n if (hasNativeReflectConstruct) {\n var NewTarget = _getPrototypeOf(this).constructor;\n\n result = Reflect.construct(Super, arguments, NewTarget);\n } else {\n result = Super.apply(this, arguments);\n }\n\n return _possibleConstructorReturn(this, result);\n };\n}\n\nfunction base_control_isNativeReflectConstruct() {\n if (typeof Reflect === "undefined" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === "function") return true;\n\n try {\n Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}\n\n\n\n\n\nfunction Control(props) {\n var instance = props.instance;\n\n var _useMapControl = useMapControl(props),\n context = _useMapControl.context,\n containerRef = _useMapControl.containerRef;\n\n instance._context = context;\n instance._containerRef = containerRef;\n return instance._render();\n}\n\nvar BaseControl = function (_PureComponent) {\n _inherits(BaseControl, _PureComponent);\n\n var _super = base_control_createSuper(BaseControl);\n\n function BaseControl() {\n var _this;\n\n _classCallCheck(this, BaseControl);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n defineProperty_defineProperty(_assertThisInitialized(_this), "_context", {});\n\n defineProperty_defineProperty(_assertThisInitialized(_this), "_containerRef", (0,react.createRef)());\n\n defineProperty_defineProperty(_assertThisInitialized(_this), "_onScroll", function (evt) {});\n\n defineProperty_defineProperty(_assertThisInitialized(_this), "_onDragStart", function (evt) {});\n\n defineProperty_defineProperty(_assertThisInitialized(_this), "_onDblClick", function (evt) {});\n\n defineProperty_defineProperty(_assertThisInitialized(_this), "_onClick", function (evt) {});\n\n defineProperty_defineProperty(_assertThisInitialized(_this), "_onPointerMove", function (evt) {});\n\n return _this;\n }\n\n _createClass(BaseControl, [{\n key: "_render",\n value: function _render() {\n throw new Error(\'_render() not implemented\');\n }\n }, {\n key: "render",\n value: function render() {\n return react.createElement(Control, _extends({\n instance: this\n }, this.props, {\n onScroll: this._onScroll,\n onDragStart: this._onDragStart,\n onDblClick: this._onDblClick,\n onClick: this._onClick,\n onPointerMove: this._onPointerMove\n }));\n }\n }]);\n\n return BaseControl;\n}(react.PureComponent);\n\ndefineProperty_defineProperty(BaseControl, "propTypes", mapControlPropTypes);\n\ndefineProperty_defineProperty(BaseControl, "defaultProps", mapControlDefaultProps);\n\n\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/components/draggable-control.js\n\n\n\nfunction draggable_control_ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction draggable_control_objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n draggable_control_ownKeys(Object(source), true).forEach(function (key) {\n defineProperty_defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n draggable_control_ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\n\n\n\nvar draggableControlPropTypes = Object.assign({}, mapControlPropTypes, {\n draggable: prop_types.bool,\n onDrag: prop_types.func,\n onDragEnd: prop_types.func,\n onDragStart: prop_types.func,\n offsetLeft: prop_types.number,\n offsetTop: prop_types.number\n});\nvar draggableControlDefaultProps = Object.assign({}, mapControlDefaultProps, {\n draggable: false,\n offsetLeft: 0,\n offsetTop: 0\n});\n\nfunction getDragEventPosition(event) {\n var _event$offsetCenter = event.offsetCenter,\n x = _event$offsetCenter.x,\n y = _event$offsetCenter.y;\n return [x, y];\n}\n\nfunction getDragEventOffset(event, container) {\n var _event$center = event.center,\n x = _event$center.x,\n y = _event$center.y;\n\n if (container) {\n var rect = container.getBoundingClientRect();\n return [rect.left - x, rect.top - y];\n }\n\n return null;\n}\n\nfunction getDragLngLat(dragPos, dragOffset, props, context) {\n var x = dragPos[0] + dragOffset[0] - props.offsetLeft;\n var y = dragPos[1] + dragOffset[1] - props.offsetTop;\n return context.viewport.unproject([x, y]);\n}\n\nfunction onDragStart(event, _ref) {\n var props = _ref.props,\n callbacks = _ref.callbacks,\n state = _ref.state,\n context = _ref.context,\n containerRef = _ref.containerRef;\n var draggable = props.draggable;\n\n if (!draggable) {\n return;\n }\n\n event.stopPropagation();\n var dragPos = getDragEventPosition(event);\n var dragOffset = getDragEventOffset(event, containerRef.current);\n state.setDragPos(dragPos);\n state.setDragOffset(dragOffset);\n\n if (callbacks.onDragStart && dragOffset) {\n var callbackEvent = Object.assign({}, event);\n callbackEvent.lngLat = getDragLngLat(dragPos, dragOffset, props, context);\n callbacks.onDragStart(callbackEvent);\n }\n}\n\nfunction onDrag(event, _ref2) {\n var props = _ref2.props,\n callbacks = _ref2.callbacks,\n state = _ref2.state,\n context = _ref2.context;\n event.stopPropagation();\n var dragPos = getDragEventPosition(event);\n state.setDragPos(dragPos);\n var dragOffset = state.dragOffset;\n\n if (callbacks.onDrag && dragOffset) {\n var callbackEvent = Object.assign({}, event);\n callbackEvent.lngLat = getDragLngLat(dragPos, dragOffset, props, context);\n callbacks.onDrag(callbackEvent);\n }\n}\n\nfunction onDragEnd(event, _ref3) {\n var props = _ref3.props,\n callbacks = _ref3.callbacks,\n state = _ref3.state,\n context = _ref3.context;\n event.stopPropagation();\n var dragPos = state.dragPos,\n dragOffset = state.dragOffset;\n state.setDragPos(null);\n state.setDragOffset(null);\n\n if (callbacks.onDragEnd && dragPos && dragOffset) {\n var callbackEvent = Object.assign({}, event);\n callbackEvent.lngLat = getDragLngLat(dragPos, dragOffset, props, context);\n callbacks.onDragEnd(callbackEvent);\n }\n}\n\nfunction onDragCancel(event, _ref4) {\n var state = _ref4.state;\n event.stopPropagation();\n state.setDragPos(null);\n state.setDragOffset(null);\n}\n\nfunction registerEvents(thisRef) {\n var eventManager = thisRef.context.eventManager;\n\n if (!eventManager || !thisRef.state.dragPos) {\n return undefined;\n }\n\n var events = {\n panmove: function panmove(evt) {\n return onDrag(evt, thisRef);\n },\n panend: function panend(evt) {\n return onDragEnd(evt, thisRef);\n },\n pancancel: function pancancel(evt) {\n return onDragCancel(evt, thisRef);\n }\n };\n eventManager.watch(events);\n return function () {\n eventManager.off(events);\n };\n}\n\nfunction useDraggableControl(props) {\n var _useState = (0,react.useState)(null),\n _useState2 = slicedToArray_slicedToArray(_useState, 2),\n dragPos = _useState2[0],\n setDragPos = _useState2[1];\n\n var _useState3 = (0,react.useState)(null),\n _useState4 = slicedToArray_slicedToArray(_useState3, 2),\n dragOffset = _useState4[0],\n setDragOffset = _useState4[1];\n\n var thisRef = useMapControl(draggable_control_objectSpread(draggable_control_objectSpread({}, props), {}, {\n onDragStart: onDragStart\n }));\n thisRef.callbacks = props;\n thisRef.state.dragPos = dragPos;\n thisRef.state.setDragPos = setDragPos;\n thisRef.state.dragOffset = dragOffset;\n thisRef.state.setDragOffset = setDragOffset;\n (0,react.useEffect)(function () {\n return registerEvents(thisRef);\n }, [thisRef.context.eventManager, Boolean(dragPos)]);\n return thisRef;\n}\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/utils/crisp-pixel.js\nvar pixelRatio = typeof window !== \'undefined\' && window.devicePixelRatio || 1;\nvar crispPixel = function crispPixel(size) {\n return Math.round(size * pixelRatio) / pixelRatio;\n};\nvar crispPercentage = function crispPercentage(el, percentage) {\n var dimension = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : \'x\';\n\n if (el === null) {\n return percentage;\n }\n\n var origSize = dimension === \'x\' ? el.offsetWidth : el.offsetHeight;\n return crispPixel(percentage / 100 * origSize) / origSize * 100;\n};\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/components/marker.js\n\n\n\n\n\n\nvar marker_defaultProps = Object.assign({}, draggableControlDefaultProps, {\n className: \'\'\n});\n\nfunction getPosition(_ref) {\n var props = _ref.props,\n state = _ref.state,\n context = _ref.context;\n var longitude = props.longitude,\n latitude = props.latitude,\n offsetLeft = props.offsetLeft,\n offsetTop = props.offsetTop;\n var dragPos = state.dragPos,\n dragOffset = state.dragOffset;\n var viewport = context.viewport,\n map = context.map;\n\n if (dragPos && dragOffset) {\n return [dragPos[0] + dragOffset[0], dragPos[1] + dragOffset[1]];\n }\n\n var altitude = getTerrainElevation(map, {\n longitude: longitude,\n latitude: latitude\n });\n\n var _viewport$project = viewport.project([longitude, latitude, altitude]),\n _viewport$project2 = slicedToArray_slicedToArray(_viewport$project, 2),\n x = _viewport$project2[0],\n y = _viewport$project2[1];\n\n x += offsetLeft;\n y += offsetTop;\n return [x, y];\n}\n\nfunction Marker(props) {\n var thisRef = useDraggableControl(props);\n var state = thisRef.state,\n containerRef = thisRef.containerRef;\n var children = props.children,\n className = props.className,\n draggable = props.draggable;\n var dragPos = state.dragPos;\n\n var _getPosition = getPosition(thisRef),\n _getPosition2 = slicedToArray_slicedToArray(_getPosition, 2),\n x = _getPosition2[0],\n y = _getPosition2[1];\n\n var transform = "translate(".concat(crispPixel(x), "px, ").concat(crispPixel(y), "px)");\n var cursor = draggable ? dragPos ? \'grabbing\' : \'grab\' : \'auto\';\n var control = (0,react.useMemo)(function () {\n var containerStyle = {\n position: \'absolute\',\n left: 0,\n top: 0,\n transform: transform,\n cursor: cursor\n };\n return react.createElement("div", {\n className: "mapboxgl-marker ".concat(className),\n ref: thisRef.containerRef,\n style: containerStyle\n }, children);\n }, [children, className]);\n var container = containerRef.current;\n\n if (container) {\n container.style.transform = transform;\n container.style.cursor = cursor;\n }\n\n return control;\n}\n\nMarker.defaultProps = marker_defaultProps;\n/* harmony default export */ var marker = (react.memo(Marker));\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/utils/dynamic-position.js\nvar ANCHOR_POSITION = {\n top: {\n x: 0.5,\n y: 0\n },\n \'top-left\': {\n x: 0,\n y: 0\n },\n \'top-right\': {\n x: 1,\n y: 0\n },\n bottom: {\n x: 0.5,\n y: 1\n },\n \'bottom-left\': {\n x: 0,\n y: 1\n },\n \'bottom-right\': {\n x: 1,\n y: 1\n },\n left: {\n x: 0,\n y: 0.5\n },\n right: {\n x: 1,\n y: 0.5\n }\n};\nvar ANCHOR_TYPES = Object.keys(ANCHOR_POSITION);\nfunction getDynamicPosition(_ref) {\n var x = _ref.x,\n y = _ref.y,\n width = _ref.width,\n height = _ref.height,\n selfWidth = _ref.selfWidth,\n selfHeight = _ref.selfHeight,\n anchor = _ref.anchor,\n _ref$padding = _ref.padding,\n padding = _ref$padding === void 0 ? 0 : _ref$padding;\n var _ANCHOR_POSITION$anch = ANCHOR_POSITION[anchor],\n anchorX = _ANCHOR_POSITION$anch.x,\n anchorY = _ANCHOR_POSITION$anch.y;\n var top = y - anchorY * selfHeight;\n var bottom = top + selfHeight;\n var cutoffY = Math.max(0, padding - top) + Math.max(0, bottom - height + padding);\n\n if (cutoffY > 0) {\n var bestAnchorY = anchorY;\n var minCutoff = cutoffY;\n\n for (anchorY = 0; anchorY <= 1; anchorY += 0.5) {\n top = y - anchorY * selfHeight;\n bottom = top + selfHeight;\n cutoffY = Math.max(0, padding - top) + Math.max(0, bottom - height + padding);\n\n if (cutoffY < minCutoff) {\n minCutoff = cutoffY;\n bestAnchorY = anchorY;\n }\n }\n\n anchorY = bestAnchorY;\n }\n\n var xStep = 0.5;\n\n if (anchorY === 0.5) {\n anchorX = Math.floor(anchorX);\n xStep = 1;\n }\n\n var left = x - anchorX * selfWidth;\n var right = left + selfWidth;\n var cutoffX = Math.max(0, padding - left) + Math.max(0, right - width + padding);\n\n if (cutoffX > 0) {\n var bestAnchorX = anchorX;\n var _minCutoff = cutoffX;\n\n for (anchorX = 0; anchorX <= 1; anchorX += xStep) {\n left = x - anchorX * selfWidth;\n right = left + selfWidth;\n cutoffX = Math.max(0, padding - left) + Math.max(0, right - width + padding);\n\n if (cutoffX < _minCutoff) {\n _minCutoff = cutoffX;\n bestAnchorX = anchorX;\n }\n }\n\n anchorX = bestAnchorX;\n }\n\n return ANCHOR_TYPES.find(function (positionType) {\n var anchorPosition = ANCHOR_POSITION[positionType];\n return anchorPosition.x === anchorX && anchorPosition.y === anchorY;\n }) || anchor;\n}\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/components/popup.js\n\n\n\nfunction popup_ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction popup_objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n popup_ownKeys(Object(source), true).forEach(function (key) {\n defineProperty_defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n popup_ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\n\n\n\n\n\n\nvar popup_defaultProps = Object.assign({}, mapControlDefaultProps, {\n className: \'\',\n offsetLeft: 0,\n offsetTop: 0,\n tipSize: 10,\n anchor: \'bottom\',\n dynamicPosition: true,\n sortByDepth: false,\n closeButton: true,\n closeOnClick: true,\n onClose: function onClose() {}\n});\n\nfunction popup_getPosition(props, viewport, el, _ref) {\n var _ref2 = slicedToArray_slicedToArray(_ref, 2),\n x = _ref2[0],\n y = _ref2[1];\n\n var anchor = props.anchor,\n dynamicPosition = props.dynamicPosition,\n tipSize = props.tipSize;\n\n if (el) {\n return dynamicPosition ? getDynamicPosition({\n x: x,\n y: y,\n anchor: anchor,\n padding: tipSize,\n width: viewport.width,\n height: viewport.height,\n selfWidth: el.clientWidth,\n selfHeight: el.clientHeight\n }) : anchor;\n }\n\n return anchor;\n}\n\nfunction getContainerStyle(props, viewport, el, _ref3, positionType) {\n var _ref4 = slicedToArray_slicedToArray(_ref3, 3),\n x = _ref4[0],\n y = _ref4[1],\n z = _ref4[2];\n\n var offsetLeft = props.offsetLeft,\n offsetTop = props.offsetTop,\n sortByDepth = props.sortByDepth;\n var anchorPosition = ANCHOR_POSITION[positionType];\n var left = x + offsetLeft;\n var top = y + offsetTop;\n var xPercentage = crispPercentage(el, -anchorPosition.x * 100);\n var yPercentage = crispPercentage(el, -anchorPosition.y * 100, \'y\');\n var style = {\n position: \'absolute\',\n transform: "\\n translate(".concat(xPercentage, "%, ").concat(yPercentage, "%)\\n translate(").concat(crispPixel(left), "px, ").concat(crispPixel(top), "px)\\n "),\n display: undefined,\n zIndex: undefined\n };\n\n if (!sortByDepth) {\n return style;\n }\n\n if (z > 1 || z < -1 || x < 0 || x > viewport.width || y < 0 || y > viewport.height) {\n style.display = \'none\';\n } else {\n style.zIndex = Math.floor((1 - z) / 2 * 100000);\n }\n\n return style;\n}\n\nfunction onClick(evt, _ref5) {\n var props = _ref5.props,\n context = _ref5.context;\n\n if (props.closeOnClick || evt.target.className === \'mapboxgl-popup-close-button\') {\n props.onClose();\n\n if (context.eventManager) {\n context.eventManager.once(\'click\', function (e) {\n return e.stopPropagation();\n }, evt.target);\n }\n }\n}\n\nfunction Popup(props) {\n var contentRef = (0,react.useRef)(null);\n var thisRef = useMapControl(popup_objectSpread(popup_objectSpread({}, props), {}, {\n onClick: onClick\n }));\n var context = thisRef.context,\n containerRef = thisRef.containerRef;\n\n var _useState = (0,react.useState)(false),\n _useState2 = slicedToArray_slicedToArray(_useState, 2),\n setLoaded = _useState2[1];\n\n (0,react.useEffect)(function () {\n setLoaded(true);\n }, [contentRef.current]);\n var viewport = context.viewport,\n map = context.map;\n var className = props.className,\n longitude = props.longitude,\n latitude = props.latitude,\n tipSize = props.tipSize,\n closeButton = props.closeButton,\n children = props.children;\n var altitude = props.altitude;\n\n if (altitude === undefined) {\n altitude = getTerrainElevation(map, {\n longitude: longitude,\n latitude: latitude\n });\n }\n\n var position = viewport.project([longitude, latitude, altitude]);\n var positionType = popup_getPosition(props, viewport, contentRef.current, position);\n var containerStyle = getContainerStyle(props, viewport, containerRef.current, position, positionType);\n var onReactClick = (0,react.useCallback)(function (e) {\n return !context.eventManager && onClick(e, thisRef);\n }, [context.eventManager]);\n return react.createElement("div", {\n className: "mapboxgl-popup mapboxgl-popup-anchor-".concat(positionType, " ").concat(className),\n style: containerStyle,\n ref: containerRef\n }, react.createElement("div", {\n key: "tip",\n className: "mapboxgl-popup-tip",\n style: {\n borderWidth: tipSize\n }\n }), react.createElement("div", {\n key: "content",\n ref: contentRef,\n className: "mapboxgl-popup-content",\n onClick: onReactClick\n }, closeButton && react.createElement("button", {\n key: "close-button",\n className: "mapboxgl-popup-close-button",\n type: "button"\n }, "\\xD7"), children));\n}\n\nPopup.defaultProps = popup_defaultProps;\n/* harmony default export */ var popup = (react.memo(Popup));\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/components/attribution-control.js\n\n\n\nfunction attribution_control_ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction attribution_control_objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n attribution_control_ownKeys(Object(source), true).forEach(function (key) {\n defineProperty_defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n attribution_control_ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\n\n\n\n\nvar attribution_control_defaultProps = Object.assign({}, mapControlDefaultProps, {\n className: \'\',\n toggleLabel: \'Toggle Attribution\'\n});\n\nfunction setupAttributioncontrol(opts, map, container, attributionContainer) {\n var control = new (maplibre_gl_default()).AttributionControl(opts);\n control._map = map;\n control._container = container;\n control._innerContainer = attributionContainer;\n\n control._updateAttributions();\n\n control._updateEditLink();\n\n map.on(\'styledata\', control._updateData);\n map.on(\'sourcedata\', control._updateData);\n return control;\n}\n\nfunction removeAttributionControl(control) {\n control._map.off(\'styledata\', control._updateData);\n\n control._map.off(\'sourcedata\', control._updateData);\n}\n\nfunction AttributionControl(props) {\n var _useMapControl = useMapControl(props),\n context = _useMapControl.context,\n containerRef = _useMapControl.containerRef;\n\n var innerContainerRef = (0,react.useRef)(null);\n\n var _useState = (0,react.useState)(false),\n _useState2 = slicedToArray_slicedToArray(_useState, 2),\n showCompact = _useState2[0],\n setShowCompact = _useState2[1];\n\n (0,react.useEffect)(function () {\n var control;\n\n if (context.map) {\n control = setupAttributioncontrol({\n customAttribution: props.customAttribution\n }, context.map, containerRef.current, innerContainerRef.current);\n }\n\n return function () {\n return control && removeAttributionControl(control);\n };\n }, [context.map]);\n var compact = props.compact === undefined ? context.viewport.width <= 640 : props.compact;\n (0,react.useEffect)(function () {\n if (!compact && showCompact) {\n setShowCompact(false);\n }\n }, [compact]);\n var toggleAttribution = (0,react.useCallback)(function () {\n return setShowCompact(function (value) {\n return !value;\n });\n }, []);\n var style = (0,react.useMemo)(function () {\n return attribution_control_objectSpread({\n position: \'absolute\'\n }, props.style);\n }, [props.style]);\n return react.createElement("div", {\n style: style,\n className: props.className\n }, react.createElement("div", {\n ref: containerRef,\n "aria-pressed": showCompact,\n className: "mapboxgl-ctrl mapboxgl-ctrl-attrib ".concat(compact ? \'mapboxgl-compact\' : \'\', " ").concat(showCompact ? \'mapboxgl-compact-show\' : \'\')\n }, react.createElement("button", {\n type: "button",\n className: "mapboxgl-ctrl-attrib-button",\n title: props.toggleLabel,\n onClick: toggleAttribution\n }), react.createElement("div", {\n ref: innerContainerRef,\n className: "mapboxgl-ctrl-attrib-inner",\n role: "list"\n })));\n}\n\nAttributionControl.defaultProps = attribution_control_defaultProps;\n/* harmony default export */ var attribution_control = (react.memo(AttributionControl));\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/components/fullscreen-control.js\n\n\n\nfunction fullscreen_control_ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction fullscreen_control_objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n fullscreen_control_ownKeys(Object(source), true).forEach(function (key) {\n defineProperty_defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n fullscreen_control_ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\n\n\n\n\n\nvar fullscreen_control_defaultProps = Object.assign({}, mapControlDefaultProps, {\n className: \'\',\n container: null,\n label: \'Toggle fullscreen\'\n});\n\nfunction FullscreenControl(props) {\n var _useMapControl = useMapControl(props),\n context = _useMapControl.context,\n containerRef = _useMapControl.containerRef;\n\n var _useState = (0,react.useState)(false),\n _useState2 = slicedToArray_slicedToArray(_useState, 2),\n isFullscreen = _useState2[0],\n setIsFullscreen = _useState2[1];\n\n var _useState3 = (0,react.useState)(false),\n _useState4 = slicedToArray_slicedToArray(_useState3, 2),\n showButton = _useState4[0],\n setShowButton = _useState4[1];\n\n var _useState5 = (0,react.useState)(null),\n _useState6 = slicedToArray_slicedToArray(_useState5, 2),\n mapboxFullscreenControl = _useState6[0],\n createMapboxFullscreenControl = _useState6[1];\n\n (0,react.useEffect)(function () {\n var control = new (maplibre_gl_default()).FullscreenControl();\n createMapboxFullscreenControl(control);\n setShowButton(control._checkFullscreenSupport());\n\n var onFullscreenChange = function onFullscreenChange() {\n var nextState = !control._fullscreen;\n control._fullscreen = nextState;\n setIsFullscreen(nextState);\n };\n\n document_.addEventListener(control._fullscreenchange, onFullscreenChange);\n return function () {\n document_.removeEventListener(control._fullscreenchange, onFullscreenChange);\n };\n }, []);\n\n var onClickFullscreen = function onClickFullscreen() {\n if (mapboxFullscreenControl) {\n mapboxFullscreenControl._container = props.container || context.container;\n\n mapboxFullscreenControl._onClickFullscreen();\n }\n };\n\n var style = (0,react.useMemo)(function () {\n return fullscreen_control_objectSpread({\n position: \'absolute\'\n }, props.style);\n }, [props.style]);\n\n if (!showButton) {\n return null;\n }\n\n var className = props.className,\n label = props.label;\n var type = isFullscreen ? \'shrink\' : \'fullscreen\';\n return react.createElement("div", {\n style: style,\n className: className\n }, react.createElement("div", {\n className: "mapboxgl-ctrl mapboxgl-ctrl-group",\n ref: containerRef\n }, react.createElement("button", {\n key: type,\n className: "mapboxgl-ctrl-icon mapboxgl-ctrl-".concat(type),\n type: "button",\n title: label,\n onClick: onClickFullscreen\n }, react.createElement("span", {\n className: "mapboxgl-ctrl-icon",\n "aria-hidden": "true"\n }))));\n}\n\nFullscreenControl.defaultProps = fullscreen_control_defaultProps;\n/* harmony default export */ var fullscreen_control = (react.memo(FullscreenControl));\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/utils/geolocate-utils.js\nvar supported;\nfunction isGeolocationSupported() {\n if (supported !== undefined) {\n return Promise.resolve(supported);\n }\n\n if (window.navigator.permissions !== undefined) {\n return window.navigator.permissions.query({\n name: \'geolocation\'\n }).then(function (p) {\n supported = p.state !== \'denied\';\n return supported;\n });\n }\n\n supported = Boolean(window.navigator.geolocation);\n return Promise.resolve(supported);\n}\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/components/geolocate-control.js\n\n\n\nfunction geolocate_control_ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction geolocate_control_objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n geolocate_control_ownKeys(Object(source), true).forEach(function (key) {\n defineProperty_defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n geolocate_control_ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\n\n\n\n\n\n\n\n\n\nvar geolocate_control_noop = function noop() {};\n\nvar geolocate_control_defaultProps = Object.assign({}, mapControlDefaultProps, {\n className: \'\',\n label: \'Find My Location\',\n disabledLabel: \'Location Not Available\',\n auto: false,\n positionOptions: {\n enableHighAccuracy: false,\n timeout: 6000\n },\n fitBoundsOptions: {\n maxZoom: 15\n },\n trackUserLocation: false,\n showUserLocation: true,\n showAccuracyCircle: true,\n onGeolocate: function onGeolocate() {}\n});\n\nfunction geolocate_control_getBounds(position) {\n var center = new (maplibre_gl_default()).LngLat(position.coords.longitude, position.coords.latitude);\n var radius = position.coords.accuracy;\n var bounds = center.toBounds(radius);\n return [[bounds._ne.lng, bounds._ne.lat], [bounds._sw.lng, bounds._sw.lat]];\n}\n\nfunction setupMapboxGeolocateControl(context, props, geolocateButton) {\n var control = new (maplibre_gl_default()).GeolocateControl(props);\n control._container = document_.createElement(\'div\');\n control._map = {\n on: function on() {},\n _getUIString: function _getUIString() {\n return \'\';\n }\n };\n\n control._setupUI(true);\n\n control._map = context.map;\n control._geolocateButton = geolocateButton;\n var eventManager = context.eventManager;\n\n if (control.options.trackUserLocation && eventManager) {\n eventManager.on(\'panstart\', function () {\n if (control._watchState === \'ACTIVE_LOCK\') {\n control._watchState = \'BACKGROUND\';\n geolocateButton.classList.add(\'mapboxgl-ctrl-geolocate-background\');\n geolocateButton.classList.remove(\'mapboxgl-ctrl-geolocate-active\');\n }\n });\n }\n\n control.on(\'geolocate\', props.onGeolocate);\n return control;\n}\n\nfunction updateCamera(position, _ref) {\n var context = _ref.context,\n props = _ref.props;\n var bounds = geolocate_control_getBounds(position);\n\n var _context$viewport$fit = context.viewport.fitBounds(bounds, props.fitBoundsOptions),\n longitude = _context$viewport$fit.longitude,\n latitude = _context$viewport$fit.latitude,\n zoom = _context$viewport$fit.zoom;\n\n var newViewState = Object.assign({}, context.viewport, {\n longitude: longitude,\n latitude: latitude,\n zoom: zoom\n });\n var mapState = new MapState(newViewState);\n var viewState = Object.assign({}, mapState.getViewportProps(), LINEAR_TRANSITION_PROPS);\n var onViewportChange = props.onViewportChange || context.onViewportChange || geolocate_control_noop;\n var onViewStateChange = props.onViewStateChange || context.onViewStateChange || geolocate_control_noop;\n onViewStateChange({\n viewState: viewState\n });\n onViewportChange(viewState);\n}\n\nfunction GeolocateControl(props) {\n var thisRef = useMapControl(props);\n var context = thisRef.context,\n containerRef = thisRef.containerRef;\n var geolocateButtonRef = (0,react.useRef)(null);\n\n var _useState = (0,react.useState)(null),\n _useState2 = slicedToArray_slicedToArray(_useState, 2),\n mapboxGeolocateControl = _useState2[0],\n createMapboxGeolocateControl = _useState2[1];\n\n var _useState3 = (0,react.useState)(false),\n _useState4 = slicedToArray_slicedToArray(_useState3, 2),\n supportsGeolocation = _useState4[0],\n setSupportsGeolocation = _useState4[1];\n\n (0,react.useEffect)(function () {\n var control;\n\n if (context.map) {\n isGeolocationSupported().then(function (result) {\n setSupportsGeolocation(result);\n\n if (geolocateButtonRef.current) {\n control = setupMapboxGeolocateControl(context, props, geolocateButtonRef.current);\n\n control._updateCamera = function (position) {\n return updateCamera(position, thisRef);\n };\n\n createMapboxGeolocateControl(control);\n }\n });\n }\n\n return function () {\n if (control) {\n control._clearWatch();\n }\n };\n }, [context.map]);\n var triggerGeolocate = (0,react.useCallback)(function () {\n if (mapboxGeolocateControl) {\n mapboxGeolocateControl.options = thisRef.props;\n mapboxGeolocateControl.trigger();\n }\n }, [mapboxGeolocateControl]);\n (0,react.useEffect)(function () {\n if (props.auto) {\n triggerGeolocate();\n }\n }, [mapboxGeolocateControl, props.auto]);\n (0,react.useEffect)(function () {\n if (mapboxGeolocateControl) {\n mapboxGeolocateControl._onZoom();\n }\n }, [context.viewport.zoom]);\n var className = props.className,\n label = props.label,\n disabledLabel = props.disabledLabel,\n trackUserLocation = props.trackUserLocation;\n var style = (0,react.useMemo)(function () {\n return geolocate_control_objectSpread({\n position: \'absolute\'\n }, props.style);\n }, [props.style]);\n return react.createElement("div", {\n style: style,\n className: className\n }, react.createElement("div", {\n key: "geolocate-control",\n className: "mapboxgl-ctrl mapboxgl-ctrl-group",\n ref: containerRef\n }, react.createElement("button", {\n key: "geolocate",\n className: "mapboxgl-ctrl-icon mapboxgl-ctrl-geolocate",\n ref: geolocateButtonRef,\n disabled: !supportsGeolocation,\n "aria-pressed": !trackUserLocation,\n type: "button",\n title: supportsGeolocation ? label : disabledLabel,\n "aria-label": supportsGeolocation ? label : disabledLabel,\n onClick: triggerGeolocate\n }, react.createElement("span", {\n className: "mapboxgl-ctrl-icon",\n "aria-hidden": "true"\n }))));\n}\n\nGeolocateControl.defaultProps = geolocate_control_defaultProps;\n/* harmony default export */ var geolocate_control = (react.memo(GeolocateControl));\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/utils/version.js\nfunction compareVersions(version1, version2) {\n var v1 = (version1 || \'\').split(\'.\').map(Number);\n var v2 = (version2 || \'\').split(\'.\').map(Number);\n\n for (var i = 0; i < 3; i++) {\n var part1 = v1[i] || 0;\n var part2 = v2[i] || 0;\n\n if (part1 < part2) {\n return -1;\n }\n\n if (part1 > part2) {\n return 1;\n }\n }\n\n return 0;\n}\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/components/navigation-control.js\n\n\nfunction navigation_control_ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction navigation_control_objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n navigation_control_ownKeys(Object(source), true).forEach(function (key) {\n defineProperty_defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n navigation_control_ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\n\n\n\n\n\n\n\nvar navigation_control_noop = function noop() {};\n\nvar navigation_control_defaultProps = Object.assign({}, mapControlDefaultProps, {\n className: \'\',\n showCompass: true,\n showZoom: true,\n zoomInLabel: \'Zoom In\',\n zoomOutLabel: \'Zoom Out\',\n compassLabel: \'Reset North\'\n});\nvar VERSION_LEGACY = 1;\nvar VERSION_1_6 = 2;\n\nfunction getUIVersion(mapboxVersion) {\n return compareVersions(mapboxVersion, \'1.6.0\') >= 0 ? VERSION_1_6 : VERSION_LEGACY;\n}\n\nfunction updateViewport(context, props, opts) {\n var viewport = context.viewport;\n var mapState = new MapState(Object.assign({}, viewport, opts));\n var viewState = Object.assign({}, mapState.getViewportProps(), LINEAR_TRANSITION_PROPS);\n var onViewportChange = props.onViewportChange || context.onViewportChange || navigation_control_noop;\n var onViewStateChange = props.onViewStateChange || context.onViewStateChange || navigation_control_noop;\n onViewStateChange({\n viewState: viewState\n });\n onViewportChange(viewState);\n}\n\nfunction renderButton(type, label, callback, children) {\n return react.createElement("button", {\n key: type,\n className: "mapboxgl-ctrl-icon mapboxgl-ctrl-".concat(type),\n type: "button",\n title: label,\n onClick: callback\n }, children || react.createElement("span", {\n className: "mapboxgl-ctrl-icon",\n "aria-hidden": "true"\n }));\n}\n\nfunction renderCompass(context) {\n var uiVersion = (0,react.useMemo)(function () {\n return context.map ? getUIVersion(context.map.version) : VERSION_1_6;\n }, [context.map]);\n var bearing = context.viewport.bearing;\n var style = {\n transform: "rotate(".concat(-bearing, "deg)")\n };\n return uiVersion === VERSION_1_6 ? react.createElement("span", {\n className: "mapboxgl-ctrl-icon",\n "aria-hidden": "true",\n style: style\n }) : react.createElement("span", {\n className: "mapboxgl-ctrl-compass-arrow",\n style: style\n });\n}\n\nfunction NavigationControl(props) {\n var _useMapControl = useMapControl(props),\n context = _useMapControl.context,\n containerRef = _useMapControl.containerRef;\n\n var onZoomIn = function onZoomIn() {\n updateViewport(context, props, {\n zoom: context.viewport.zoom + 1\n });\n };\n\n var onZoomOut = function onZoomOut() {\n updateViewport(context, props, {\n zoom: context.viewport.zoom - 1\n });\n };\n\n var onResetNorth = function onResetNorth() {\n updateViewport(context, props, {\n bearing: 0,\n pitch: 0\n });\n };\n\n var className = props.className,\n showCompass = props.showCompass,\n showZoom = props.showZoom,\n zoomInLabel = props.zoomInLabel,\n zoomOutLabel = props.zoomOutLabel,\n compassLabel = props.compassLabel;\n var style = (0,react.useMemo)(function () {\n return navigation_control_objectSpread({\n position: \'absolute\'\n }, props.style);\n }, [props.style]);\n return react.createElement("div", {\n style: style,\n className: className\n }, react.createElement("div", {\n className: "mapboxgl-ctrl mapboxgl-ctrl-group",\n ref: containerRef\n }, showZoom && renderButton(\'zoom-in\', zoomInLabel, onZoomIn), showZoom && renderButton(\'zoom-out\', zoomOutLabel, onZoomOut), showCompass && renderButton(\'compass\', compassLabel, onResetNorth, renderCompass(context))));\n}\n\nNavigationControl.defaultProps = navigation_control_defaultProps;\n/* harmony default export */ var navigation_control = (react.memo(NavigationControl));\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/components/scale-control.js\n\n\n\nfunction scale_control_ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction scale_control_objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n scale_control_ownKeys(Object(source), true).forEach(function (key) {\n defineProperty_defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n scale_control_ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\n\n\n\n\nvar scale_control_defaultProps = Object.assign({}, mapControlDefaultProps, {\n className: \'\',\n maxWidth: 100,\n unit: \'metric\'\n});\n\nfunction ScaleControl(props) {\n var _useMapControl = useMapControl(props),\n context = _useMapControl.context,\n containerRef = _useMapControl.containerRef;\n\n var _useState = (0,react.useState)(null),\n _useState2 = slicedToArray_slicedToArray(_useState, 2),\n mapboxScaleControl = _useState2[0],\n createMapboxScaleControl = _useState2[1];\n\n (0,react.useEffect)(function () {\n if (context.map) {\n var control = new (maplibre_gl_default()).ScaleControl();\n control._map = context.map;\n control._container = containerRef.current;\n createMapboxScaleControl(control);\n }\n }, [context.map]);\n\n if (mapboxScaleControl) {\n mapboxScaleControl.options = props;\n\n mapboxScaleControl._onMove();\n }\n\n var style = (0,react.useMemo)(function () {\n return scale_control_objectSpread({\n position: \'absolute\'\n }, props.style);\n }, [props.style]);\n return react.createElement("div", {\n style: style,\n className: props.className\n }, react.createElement("div", {\n ref: containerRef,\n className: "mapboxgl-ctrl mapboxgl-ctrl-scale"\n }));\n}\n\nScaleControl.defaultProps = scale_control_defaultProps;\n/* harmony default export */ var scale_control = (react.memo(ScaleControl));\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/overlays/canvas-overlay.js\n\n\n\n\nvar canvas_overlay_pixelRatio = typeof window !== \'undefined\' && window.devicePixelRatio || 1;\nvar canvas_overlay_defaultProps = {\n captureScroll: false,\n captureDrag: false,\n captureClick: false,\n captureDoubleClick: false,\n capturePointerMove: false\n};\n\nfunction CanvasOverlay(props) {\n var _useMapControl = useMapControl(props),\n context = _useMapControl.context,\n containerRef = _useMapControl.containerRef;\n\n var _useState = (0,react.useState)(null),\n _useState2 = slicedToArray_slicedToArray(_useState, 2),\n ctx = _useState2[0],\n setDrawingContext = _useState2[1];\n\n (0,react.useEffect)(function () {\n setDrawingContext(containerRef.current.getContext(\'2d\'));\n }, []);\n var viewport = context.viewport,\n isDragging = context.isDragging;\n\n if (ctx) {\n ctx.save();\n ctx.scale(canvas_overlay_pixelRatio, canvas_overlay_pixelRatio);\n props.redraw({\n width: viewport.width,\n height: viewport.height,\n ctx: ctx,\n isDragging: isDragging,\n project: viewport.project,\n unproject: viewport.unproject\n });\n ctx.restore();\n }\n\n return react.createElement("canvas", {\n ref: containerRef,\n width: viewport.width * canvas_overlay_pixelRatio,\n height: viewport.height * canvas_overlay_pixelRatio,\n style: {\n width: "".concat(viewport.width, "px"),\n height: "".concat(viewport.height, "px"),\n position: \'absolute\',\n left: 0,\n top: 0\n }\n });\n}\n\nCanvasOverlay.defaultProps = canvas_overlay_defaultProps;\n/* harmony default export */ var canvas_overlay = ((/* unused pure expression or super */ null && (CanvasOverlay)));\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/overlays/html-overlay.js\n\n\nfunction html_overlay_ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction html_overlay_objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n html_overlay_ownKeys(Object(source), true).forEach(function (key) {\n defineProperty_defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n html_overlay_ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\n\n\nvar html_overlay_defaultProps = {\n captureScroll: false,\n captureDrag: false,\n captureClick: false,\n captureDoubleClick: false,\n capturePointerMove: false\n};\n\nfunction HTMLOverlay(props) {\n var _useMapControl = useMapControl(props),\n context = _useMapControl.context,\n containerRef = _useMapControl.containerRef;\n\n var viewport = context.viewport,\n isDragging = context.isDragging;\n\n var style = html_overlay_objectSpread({\n position: \'absolute\',\n left: 0,\n top: 0,\n width: viewport.width,\n height: viewport.height\n }, props.style);\n\n return react.createElement("div", {\n ref: containerRef,\n style: style\n }, props.redraw({\n width: viewport.width,\n height: viewport.height,\n isDragging: isDragging,\n project: viewport.project,\n unproject: viewport.unproject\n }));\n}\n\nHTMLOverlay.defaultProps = html_overlay_defaultProps;\n/* harmony default export */ var html_overlay = ((/* unused pure expression or super */ null && (HTMLOverlay)));\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/overlays/svg-overlay.js\n\n\nfunction svg_overlay_ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction svg_overlay_objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n svg_overlay_ownKeys(Object(source), true).forEach(function (key) {\n defineProperty_defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n svg_overlay_ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\n\n\nvar svg_overlay_defaultProps = {\n captureScroll: false,\n captureDrag: false,\n captureClick: false,\n captureDoubleClick: false,\n capturePointerMove: false\n};\n\nfunction SVGOverlay(props) {\n var _useMapControl = useMapControl(props),\n context = _useMapControl.context,\n containerRef = _useMapControl.containerRef;\n\n var viewport = context.viewport,\n isDragging = context.isDragging;\n\n var style = svg_overlay_objectSpread({\n position: \'absolute\',\n left: 0,\n top: 0\n }, props.style);\n\n return react.createElement("svg", {\n width: viewport.width,\n height: viewport.height,\n ref: containerRef,\n style: style\n }, props.redraw({\n width: viewport.width,\n height: viewport.height,\n isDragging: isDragging,\n project: viewport.project,\n unproject: viewport.unproject\n }));\n}\n\nSVGOverlay.defaultProps = svg_overlay_defaultProps;\n/* harmony default export */ var svg_overlay = ((/* unused pure expression or super */ null && (SVGOverlay)));\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/utils/set-rtl-text-plugin.js\n\nvar setRTLTextPlugin = (maplibre_gl_default()) ? (maplibre_gl_default()).setRTLTextPlugin : function () {};\n/* harmony default export */ var set_rtl_text_plugin = ((/* unused pure expression or super */ null && (setRTLTextPlugin)));\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/index.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n;// CONCATENATED MODULE: ./node_modules/@turf/helpers/dist/es/index.js\n/**\n * @module helpers\n */\n\n/**\n * Earth Radius used with the Harvesine formula and approximates using a spherical (non-ellipsoid) Earth.\n *\n * @memberof helpers\n * @type {number}\n */\nvar earthRadius = 6371008.8;\n/**\n * Unit of measurement factors using a spherical (non-ellipsoid) earth radius.\n *\n * @memberof helpers\n * @type {Object}\n */\n\nvar factors = {\n centimeters: earthRadius * 100,\n centimetres: earthRadius * 100,\n degrees: earthRadius / 111325,\n feet: earthRadius * 3.28084,\n inches: earthRadius * 39.37,\n kilometers: earthRadius / 1000,\n kilometres: earthRadius / 1000,\n meters: earthRadius,\n metres: earthRadius,\n miles: earthRadius / 1609.344,\n millimeters: earthRadius * 1000,\n millimetres: earthRadius * 1000,\n nauticalmiles: earthRadius / 1852,\n radians: 1,\n yards: earthRadius * 1.0936\n};\n/**\n * Units of measurement factors based on 1 meter.\n *\n * @memberof helpers\n * @type {Object}\n */\n\nvar unitsFactors = {\n centimeters: 100,\n centimetres: 100,\n degrees: 1 / 111325,\n feet: 3.28084,\n inches: 39.37,\n kilometers: 1 / 1000,\n kilometres: 1 / 1000,\n meters: 1,\n metres: 1,\n miles: 1 / 1609.344,\n millimeters: 1000,\n millimetres: 1000,\n nauticalmiles: 1 / 1852,\n radians: 1 / earthRadius,\n yards: 1.0936133\n};\n/**\n * Area of measurement factors based on 1 square meter.\n *\n * @memberof helpers\n * @type {Object}\n */\n\nvar areaFactors = {\n acres: 0.000247105,\n centimeters: 10000,\n centimetres: 10000,\n feet: 10.763910417,\n hectares: 0.0001,\n inches: 1550.003100006,\n kilometers: 0.000001,\n kilometres: 0.000001,\n meters: 1,\n metres: 1,\n miles: 3.86e-7,\n millimeters: 1000000,\n millimetres: 1000000,\n yards: 1.195990046\n};\n/**\n * Wraps a GeoJSON {@link Geometry} in a GeoJSON {@link Feature}.\n *\n * @name feature\n * @param {Geometry} geometry input geometry\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature} a GeoJSON Feature\n * @example\n * var geometry = {\n * "type": "Point",\n * "coordinates": [110, 50]\n * };\n *\n * var feature = turf.feature(geometry);\n *\n * //=feature\n */\n\nfunction es_feature(geom, properties, options) {\n if (options === void 0) {\n options = {};\n }\n\n var feat = {\n type: "Feature"\n };\n\n if (options.id === 0 || options.id) {\n feat.id = options.id;\n }\n\n if (options.bbox) {\n feat.bbox = options.bbox;\n }\n\n feat.properties = properties || {};\n feat.geometry = geom;\n return feat;\n}\n/**\n * Creates a GeoJSON {@link Geometry} from a Geometry string type & coordinates.\n * For GeometryCollection type use `helpers.geometryCollection`\n *\n * @name geometry\n * @param {string} type Geometry Type\n * @param {Array} coordinates Coordinates\n * @param {Object} [options={}] Optional Parameters\n * @returns {Geometry} a GeoJSON Geometry\n * @example\n * var type = "Point";\n * var coordinates = [110, 50];\n * var geometry = turf.geometry(type, coordinates);\n * // => geometry\n */\n\nfunction geometry(type, coordinates, _options) {\n if (_options === void 0) {\n _options = {};\n }\n\n switch (type) {\n case "Point":\n return es_point(coordinates).geometry;\n\n case "LineString":\n return es_lineString(coordinates).geometry;\n\n case "Polygon":\n return polygon(coordinates).geometry;\n\n case "MultiPoint":\n return multiPoint(coordinates).geometry;\n\n case "MultiLineString":\n return multiLineString(coordinates).geometry;\n\n case "MultiPolygon":\n return multiPolygon(coordinates).geometry;\n\n default:\n throw new Error(type + " is invalid");\n }\n}\n/**\n * Creates a {@link Point} {@link Feature} from a Position.\n *\n * @name point\n * @param {Array} coordinates longitude, latitude position (each in decimal degrees)\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature} a Point feature\n * @example\n * var point = turf.point([-75.343, 39.984]);\n *\n * //=point\n */\n\nfunction es_point(coordinates, properties, options) {\n if (options === void 0) {\n options = {};\n }\n\n if (!coordinates) {\n throw new Error("coordinates is required");\n }\n\n if (!Array.isArray(coordinates)) {\n throw new Error("coordinates must be an Array");\n }\n\n if (coordinates.length < 2) {\n throw new Error("coordinates must be at least 2 numbers long");\n }\n\n if (!isNumber(coordinates[0]) || !isNumber(coordinates[1])) {\n throw new Error("coordinates must contain numbers");\n }\n\n var geom = {\n type: "Point",\n coordinates: coordinates\n };\n return es_feature(geom, properties, options);\n}\n/**\n * Creates a {@link Point} {@link FeatureCollection} from an Array of Point coordinates.\n *\n * @name points\n * @param {Array>} coordinates an array of Points\n * @param {Object} [properties={}] Translate these properties to each Feature\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north]\n * associated with the FeatureCollection\n * @param {string|number} [options.id] Identifier associated with the FeatureCollection\n * @returns {FeatureCollection} Point Feature\n * @example\n * var points = turf.points([\n * [-75, 39],\n * [-80, 45],\n * [-78, 50]\n * ]);\n *\n * //=points\n */\n\nfunction points(coordinates, properties, options) {\n if (options === void 0) {\n options = {};\n }\n\n return featureCollection(coordinates.map(function (coords) {\n return es_point(coords, properties);\n }), options);\n}\n/**\n * Creates a {@link Polygon} {@link Feature} from an Array of LinearRings.\n *\n * @name polygon\n * @param {Array>>} coordinates an array of LinearRings\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature} Polygon Feature\n * @example\n * var polygon = turf.polygon([[[-5, 52], [-4, 56], [-2, 51], [-7, 54], [-5, 52]]], { name: \'poly1\' });\n *\n * //=polygon\n */\n\nfunction polygon(coordinates, properties, options) {\n if (options === void 0) {\n options = {};\n }\n\n for (var _i = 0, coordinates_1 = coordinates; _i < coordinates_1.length; _i++) {\n var ring = coordinates_1[_i];\n\n if (ring.length < 4) {\n throw new Error("Each LinearRing of a Polygon must have 4 or more Positions.");\n }\n\n for (var j = 0; j < ring[ring.length - 1].length; j++) {\n // Check if first point of Polygon contains two numbers\n if (ring[ring.length - 1][j] !== ring[0][j]) {\n throw new Error("First and last Position are not equivalent.");\n }\n }\n }\n\n var geom = {\n type: "Polygon",\n coordinates: coordinates\n };\n return es_feature(geom, properties, options);\n}\n/**\n * Creates a {@link Polygon} {@link FeatureCollection} from an Array of Polygon coordinates.\n *\n * @name polygons\n * @param {Array>>>} coordinates an array of Polygon coordinates\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the FeatureCollection\n * @returns {FeatureCollection} Polygon FeatureCollection\n * @example\n * var polygons = turf.polygons([\n * [[[-5, 52], [-4, 56], [-2, 51], [-7, 54], [-5, 52]]],\n * [[[-15, 42], [-14, 46], [-12, 41], [-17, 44], [-15, 42]]],\n * ]);\n *\n * //=polygons\n */\n\nfunction polygons(coordinates, properties, options) {\n if (options === void 0) {\n options = {};\n }\n\n return featureCollection(coordinates.map(function (coords) {\n return polygon(coords, properties);\n }), options);\n}\n/**\n * Creates a {@link LineString} {@link Feature} from an Array of Positions.\n *\n * @name lineString\n * @param {Array>} coordinates an array of Positions\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature} LineString Feature\n * @example\n * var linestring1 = turf.lineString([[-24, 63], [-23, 60], [-25, 65], [-20, 69]], {name: \'line 1\'});\n * var linestring2 = turf.lineString([[-14, 43], [-13, 40], [-15, 45], [-10, 49]], {name: \'line 2\'});\n *\n * //=linestring1\n * //=linestring2\n */\n\nfunction es_lineString(coordinates, properties, options) {\n if (options === void 0) {\n options = {};\n }\n\n if (coordinates.length < 2) {\n throw new Error("coordinates must be an array of two or more positions");\n }\n\n var geom = {\n type: "LineString",\n coordinates: coordinates\n };\n return es_feature(geom, properties, options);\n}\n/**\n * Creates a {@link LineString} {@link FeatureCollection} from an Array of LineString coordinates.\n *\n * @name lineStrings\n * @param {Array>>} coordinates an array of LinearRings\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north]\n * associated with the FeatureCollection\n * @param {string|number} [options.id] Identifier associated with the FeatureCollection\n * @returns {FeatureCollection} LineString FeatureCollection\n * @example\n * var linestrings = turf.lineStrings([\n * [[-24, 63], [-23, 60], [-25, 65], [-20, 69]],\n * [[-14, 43], [-13, 40], [-15, 45], [-10, 49]]\n * ]);\n *\n * //=linestrings\n */\n\nfunction lineStrings(coordinates, properties, options) {\n if (options === void 0) {\n options = {};\n }\n\n return featureCollection(coordinates.map(function (coords) {\n return es_lineString(coords, properties);\n }), options);\n}\n/**\n * Takes one or more {@link Feature|Features} and creates a {@link FeatureCollection}.\n *\n * @name featureCollection\n * @param {Feature[]} features input features\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {FeatureCollection} FeatureCollection of Features\n * @example\n * var locationA = turf.point([-75.343, 39.984], {name: \'Location A\'});\n * var locationB = turf.point([-75.833, 39.284], {name: \'Location B\'});\n * var locationC = turf.point([-75.534, 39.123], {name: \'Location C\'});\n *\n * var collection = turf.featureCollection([\n * locationA,\n * locationB,\n * locationC\n * ]);\n *\n * //=collection\n */\n\nfunction featureCollection(features, options) {\n if (options === void 0) {\n options = {};\n }\n\n var fc = {\n type: "FeatureCollection"\n };\n\n if (options.id) {\n fc.id = options.id;\n }\n\n if (options.bbox) {\n fc.bbox = options.bbox;\n }\n\n fc.features = features;\n return fc;\n}\n/**\n * Creates a {@link Feature} based on a\n * coordinate array. Properties can be added optionally.\n *\n * @name multiLineString\n * @param {Array>>} coordinates an array of LineStrings\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature} a MultiLineString feature\n * @throws {Error} if no coordinates are passed\n * @example\n * var multiLine = turf.multiLineString([[[0,0],[10,10]]]);\n *\n * //=multiLine\n */\n\nfunction multiLineString(coordinates, properties, options) {\n if (options === void 0) {\n options = {};\n }\n\n var geom = {\n type: "MultiLineString",\n coordinates: coordinates\n };\n return es_feature(geom, properties, options);\n}\n/**\n * Creates a {@link Feature} based on a\n * coordinate array. Properties can be added optionally.\n *\n * @name multiPoint\n * @param {Array>} coordinates an array of Positions\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature} a MultiPoint feature\n * @throws {Error} if no coordinates are passed\n * @example\n * var multiPt = turf.multiPoint([[0,0],[10,10]]);\n *\n * //=multiPt\n */\n\nfunction multiPoint(coordinates, properties, options) {\n if (options === void 0) {\n options = {};\n }\n\n var geom = {\n type: "MultiPoint",\n coordinates: coordinates\n };\n return es_feature(geom, properties, options);\n}\n/**\n * Creates a {@link Feature} based on a\n * coordinate array. Properties can be added optionally.\n *\n * @name multiPolygon\n * @param {Array>>>} coordinates an array of Polygons\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature} a multipolygon feature\n * @throws {Error} if no coordinates are passed\n * @example\n * var multiPoly = turf.multiPolygon([[[[0,0],[0,10],[10,10],[10,0],[0,0]]]]);\n *\n * //=multiPoly\n *\n */\n\nfunction multiPolygon(coordinates, properties, options) {\n if (options === void 0) {\n options = {};\n }\n\n var geom = {\n type: "MultiPolygon",\n coordinates: coordinates\n };\n return es_feature(geom, properties, options);\n}\n/**\n * Creates a {@link Feature} based on a\n * coordinate array. Properties can be added optionally.\n *\n * @name geometryCollection\n * @param {Array} geometries an array of GeoJSON Geometries\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature} a GeoJSON GeometryCollection Feature\n * @example\n * var pt = turf.geometry("Point", [100, 0]);\n * var line = turf.geometry("LineString", [[101, 0], [102, 1]]);\n * var collection = turf.geometryCollection([pt, line]);\n *\n * // => collection\n */\n\nfunction geometryCollection(geometries, properties, options) {\n if (options === void 0) {\n options = {};\n }\n\n var geom = {\n type: "GeometryCollection",\n geometries: geometries\n };\n return es_feature(geom, properties, options);\n}\n/**\n * Round number to precision\n *\n * @param {number} num Number\n * @param {number} [precision=0] Precision\n * @returns {number} rounded number\n * @example\n * turf.round(120.4321)\n * //=120\n *\n * turf.round(120.4321, 2)\n * //=120.43\n */\n\nfunction es_round(num, precision) {\n if (precision === void 0) {\n precision = 0;\n }\n\n if (precision && !(precision >= 0)) {\n throw new Error("precision must be a positive number");\n }\n\n var multiplier = Math.pow(10, precision || 0);\n return Math.round(num * multiplier) / multiplier;\n}\n/**\n * Convert a distance measurement (assuming a spherical Earth) from radians to a more friendly unit.\n * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet\n *\n * @name radiansToLength\n * @param {number} radians in radians across the sphere\n * @param {string} [units="kilometers"] can be degrees, radians, miles, inches, yards, metres,\n * meters, kilometres, kilometers.\n * @returns {number} distance\n */\n\nfunction radiansToLength(radians, units) {\n if (units === void 0) {\n units = "kilometers";\n }\n\n var factor = factors[units];\n\n if (!factor) {\n throw new Error(units + " units is invalid");\n }\n\n return radians * factor;\n}\n/**\n * Convert a distance measurement (assuming a spherical Earth) from a real-world unit into radians\n * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet\n *\n * @name lengthToRadians\n * @param {number} distance in real units\n * @param {string} [units="kilometers"] can be degrees, radians, miles, inches, yards, metres,\n * meters, kilometres, kilometers.\n * @returns {number} radians\n */\n\nfunction lengthToRadians(distance, units) {\n if (units === void 0) {\n units = "kilometers";\n }\n\n var factor = factors[units];\n\n if (!factor) {\n throw new Error(units + " units is invalid");\n }\n\n return distance / factor;\n}\n/**\n * Convert a distance measurement (assuming a spherical Earth) from a real-world unit into degrees\n * Valid units: miles, nauticalmiles, inches, yards, meters, metres, centimeters, kilometres, feet\n *\n * @name lengthToDegrees\n * @param {number} distance in real units\n * @param {string} [units="kilometers"] can be degrees, radians, miles, inches, yards, metres,\n * meters, kilometres, kilometers.\n * @returns {number} degrees\n */\n\nfunction lengthToDegrees(distance, units) {\n return radiansToDegrees(lengthToRadians(distance, units));\n}\n/**\n * Converts any bearing angle from the north line direction (positive clockwise)\n * and returns an angle between 0-360 degrees (positive clockwise), 0 being the north line\n *\n * @name bearingToAzimuth\n * @param {number} bearing angle, between -180 and +180 degrees\n * @returns {number} angle between 0 and 360 degrees\n */\n\nfunction bearingToAzimuth(bearing) {\n var angle = bearing % 360;\n\n if (angle < 0) {\n angle += 360;\n }\n\n return angle;\n}\n/**\n * Converts an angle in radians to degrees\n *\n * @name radiansToDegrees\n * @param {number} radians angle in radians\n * @returns {number} degrees between 0 and 360 degrees\n */\n\nfunction radiansToDegrees(radians) {\n var degrees = radians % (2 * Math.PI);\n return degrees * 180 / Math.PI;\n}\n/**\n * Converts an angle in degrees to radians\n *\n * @name degreesToRadians\n * @param {number} degrees angle between 0 and 360 degrees\n * @returns {number} angle in radians\n */\n\nfunction degreesToRadians(degrees) {\n var radians = degrees % 360;\n return radians * Math.PI / 180;\n}\n/**\n * Converts a length to the requested unit.\n * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet\n *\n * @param {number} length to be converted\n * @param {Units} [originalUnit="kilometers"] of the length\n * @param {Units} [finalUnit="kilometers"] returned unit\n * @returns {number} the converted length\n */\n\nfunction convertLength(length, originalUnit, finalUnit) {\n if (originalUnit === void 0) {\n originalUnit = "kilometers";\n }\n\n if (finalUnit === void 0) {\n finalUnit = "kilometers";\n }\n\n if (!(length >= 0)) {\n throw new Error("length must be a positive number");\n }\n\n return radiansToLength(lengthToRadians(length, originalUnit), finalUnit);\n}\n/**\n * Converts a area to the requested unit.\n * Valid units: kilometers, kilometres, meters, metres, centimetres, millimeters, acres, miles, yards, feet, inches, hectares\n * @param {number} area to be converted\n * @param {Units} [originalUnit="meters"] of the distance\n * @param {Units} [finalUnit="kilometers"] returned unit\n * @returns {number} the converted area\n */\n\nfunction convertArea(area, originalUnit, finalUnit) {\n if (originalUnit === void 0) {\n originalUnit = "meters";\n }\n\n if (finalUnit === void 0) {\n finalUnit = "kilometers";\n }\n\n if (!(area >= 0)) {\n throw new Error("area must be a positive number");\n }\n\n var startFactor = areaFactors[originalUnit];\n\n if (!startFactor) {\n throw new Error("invalid original units");\n }\n\n var finalFactor = areaFactors[finalUnit];\n\n if (!finalFactor) {\n throw new Error("invalid final units");\n }\n\n return area / startFactor * finalFactor;\n}\n/**\n * isNumber\n *\n * @param {*} num Number to validate\n * @returns {boolean} true/false\n * @example\n * turf.isNumber(123)\n * //=true\n * turf.isNumber(\'foo\')\n * //=false\n */\n\nfunction isNumber(num) {\n return !isNaN(num) && num !== null && !Array.isArray(num);\n}\n/**\n * isObject\n *\n * @param {*} input variable to validate\n * @returns {boolean} true/false\n * @example\n * turf.isObject({elevation: 10})\n * //=true\n * turf.isObject(\'foo\')\n * //=false\n */\n\nfunction es_isObject(input) {\n return !!input && input.constructor === Object;\n}\n/**\n * Validate BBox\n *\n * @private\n * @param {Array} bbox BBox to validate\n * @returns {void}\n * @throws Error if BBox is not valid\n * @example\n * validateBBox([-180, -40, 110, 50])\n * //=OK\n * validateBBox([-180, -40])\n * //=Error\n * validateBBox(\'Foo\')\n * //=Error\n * validateBBox(5)\n * //=Error\n * validateBBox(null)\n * //=Error\n * validateBBox(undefined)\n * //=Error\n */\n\nfunction validateBBox(bbox) {\n if (!bbox) {\n throw new Error("bbox is required");\n }\n\n if (!Array.isArray(bbox)) {\n throw new Error("bbox must be an Array");\n }\n\n if (bbox.length !== 4 && bbox.length !== 6) {\n throw new Error("bbox must be an Array of 4 or 6 numbers");\n }\n\n bbox.forEach(function (num) {\n if (!isNumber(num)) {\n throw new Error("bbox must only contain numbers");\n }\n });\n}\n/**\n * Validate Id\n *\n * @private\n * @param {string|number} id Id to validate\n * @returns {void}\n * @throws Error if Id is not valid\n * @example\n * validateId([-180, -40, 110, 50])\n * //=Error\n * validateId([-180, -40])\n * //=Error\n * validateId(\'Foo\')\n * //=OK\n * validateId(5)\n * //=OK\n * validateId(null)\n * //=Error\n * validateId(undefined)\n * //=Error\n */\n\nfunction validateId(id) {\n if (!id) {\n throw new Error("id is required");\n }\n\n if (["string", "number"].indexOf(typeof id) === -1) {\n throw new Error("id must be a number or a string");\n }\n}\n;// CONCATENATED MODULE: ./node_modules/@turf/meta/dist/es/index.js\n\n/**\n * Callback for coordEach\n *\n * @callback coordEachCallback\n * @param {Array} currentCoord The current coordinate being processed.\n * @param {number} coordIndex The current index of the coordinate being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n * @param {number} geometryIndex The current index of the Geometry being processed.\n */\n\n/**\n * Iterate over coordinates in any GeoJSON object, similar to Array.forEach()\n *\n * @name coordEach\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (currentCoord, coordIndex, featureIndex, multiFeatureIndex)\n * @param {boolean} [excludeWrapCoord=false] whether or not to include the final coordinate of LinearRings that wraps the ring in its iteration.\n * @returns {void}\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {"foo": "bar"}),\n * turf.point([36, 53], {"hello": "world"})\n * ]);\n *\n * turf.coordEach(features, function (currentCoord, coordIndex, featureIndex, multiFeatureIndex, geometryIndex) {\n * //=currentCoord\n * //=coordIndex\n * //=featureIndex\n * //=multiFeatureIndex\n * //=geometryIndex\n * });\n */\n\nfunction coordEach(geojson, callback, excludeWrapCoord) {\n // Handles null Geometry -- Skips this GeoJSON\n if (geojson === null) return;\n var j,\n k,\n l,\n geometry,\n stopG,\n coords,\n geometryMaybeCollection,\n wrapShrink = 0,\n coordIndex = 0,\n isGeometryCollection,\n type = geojson.type,\n isFeatureCollection = type === "FeatureCollection",\n isFeature = type === "Feature",\n stop = isFeatureCollection ? geojson.features.length : 1; // This logic may look a little weird. The reason why it is that way\n // is because it\'s trying to be fast. GeoJSON supports multiple kinds\n // of objects at its root: FeatureCollection, Features, Geometries.\n // This function has the responsibility of handling all of them, and that\n // means that some of the `for` loops you see below actually just don\'t apply\n // to certain inputs. For instance, if you give this just a\n // Point geometry, then both loops are short-circuited and all we do\n // is gradually rename the input until it\'s called \'geometry\'.\n //\n // This also aims to allocate as few resources as possible: just a\n // few numbers and booleans, rather than any temporary arrays as would\n // be required with the normalization approach.\n\n for (var featureIndex = 0; featureIndex < stop; featureIndex++) {\n geometryMaybeCollection = isFeatureCollection ? geojson.features[featureIndex].geometry : isFeature ? geojson.geometry : geojson;\n isGeometryCollection = geometryMaybeCollection ? geometryMaybeCollection.type === "GeometryCollection" : false;\n stopG = isGeometryCollection ? geometryMaybeCollection.geometries.length : 1;\n\n for (var geomIndex = 0; geomIndex < stopG; geomIndex++) {\n var multiFeatureIndex = 0;\n var geometryIndex = 0;\n geometry = isGeometryCollection ? geometryMaybeCollection.geometries[geomIndex] : geometryMaybeCollection; // Handles null Geometry -- Skips this geometry\n\n if (geometry === null) continue;\n coords = geometry.coordinates;\n var geomType = geometry.type;\n wrapShrink = excludeWrapCoord && (geomType === "Polygon" || geomType === "MultiPolygon") ? 1 : 0;\n\n switch (geomType) {\n case null:\n break;\n\n case "Point":\n if (callback(coords, coordIndex, featureIndex, multiFeatureIndex, geometryIndex) === false) return false;\n coordIndex++;\n multiFeatureIndex++;\n break;\n\n case "LineString":\n case "MultiPoint":\n for (j = 0; j < coords.length; j++) {\n if (callback(coords[j], coordIndex, featureIndex, multiFeatureIndex, geometryIndex) === false) return false;\n coordIndex++;\n if (geomType === "MultiPoint") multiFeatureIndex++;\n }\n\n if (geomType === "LineString") multiFeatureIndex++;\n break;\n\n case "Polygon":\n case "MultiLineString":\n for (j = 0; j < coords.length; j++) {\n for (k = 0; k < coords[j].length - wrapShrink; k++) {\n if (callback(coords[j][k], coordIndex, featureIndex, multiFeatureIndex, geometryIndex) === false) return false;\n coordIndex++;\n }\n\n if (geomType === "MultiLineString") multiFeatureIndex++;\n if (geomType === "Polygon") geometryIndex++;\n }\n\n if (geomType === "Polygon") multiFeatureIndex++;\n break;\n\n case "MultiPolygon":\n for (j = 0; j < coords.length; j++) {\n geometryIndex = 0;\n\n for (k = 0; k < coords[j].length; k++) {\n for (l = 0; l < coords[j][k].length - wrapShrink; l++) {\n if (callback(coords[j][k][l], coordIndex, featureIndex, multiFeatureIndex, geometryIndex) === false) return false;\n coordIndex++;\n }\n\n geometryIndex++;\n }\n\n multiFeatureIndex++;\n }\n\n break;\n\n case "GeometryCollection":\n for (j = 0; j < geometry.geometries.length; j++) {\n if (coordEach(geometry.geometries[j], callback, excludeWrapCoord) === false) return false;\n }\n\n break;\n\n default:\n throw new Error("Unknown Geometry Type");\n }\n }\n }\n}\n/**\n * Callback for coordReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n * - The previousValue argument is initialValue.\n * - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n * - The previousValue argument is the value of the first element present in the array.\n * - The currentValue argument is the value of the second element present in the array.\n *\n * @callback coordReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Array} currentCoord The current coordinate being processed.\n * @param {number} coordIndex The current index of the coordinate being processed.\n * Starts at index 0, if an initialValue is provided, and at index 1 otherwise.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n * @param {number} geometryIndex The current index of the Geometry being processed.\n */\n\n/**\n * Reduce coordinates in any GeoJSON object, similar to Array.reduce()\n *\n * @name coordReduce\n * @param {FeatureCollection|Geometry|Feature} geojson any GeoJSON object\n * @param {Function} callback a method that takes (previousValue, currentCoord, coordIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @param {boolean} [excludeWrapCoord=false] whether or not to include the final coordinate of LinearRings that wraps the ring in its iteration.\n * @returns {*} The value that results from the reduction.\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {"foo": "bar"}),\n * turf.point([36, 53], {"hello": "world"})\n * ]);\n *\n * turf.coordReduce(features, function (previousValue, currentCoord, coordIndex, featureIndex, multiFeatureIndex, geometryIndex) {\n * //=previousValue\n * //=currentCoord\n * //=coordIndex\n * //=featureIndex\n * //=multiFeatureIndex\n * //=geometryIndex\n * return currentCoord;\n * });\n */\n\n\nfunction coordReduce(geojson, callback, initialValue, excludeWrapCoord) {\n var previousValue = initialValue;\n coordEach(geojson, function (currentCoord, coordIndex, featureIndex, multiFeatureIndex, geometryIndex) {\n if (coordIndex === 0 && initialValue === undefined) previousValue = currentCoord;else previousValue = callback(previousValue, currentCoord, coordIndex, featureIndex, multiFeatureIndex, geometryIndex);\n }, excludeWrapCoord);\n return previousValue;\n}\n/**\n * Callback for propEach\n *\n * @callback propEachCallback\n * @param {Object} currentProperties The current Properties being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n */\n\n/**\n * Iterate over properties in any GeoJSON object, similar to Array.forEach()\n *\n * @name propEach\n * @param {FeatureCollection|Feature} geojson any GeoJSON object\n * @param {Function} callback a method that takes (currentProperties, featureIndex)\n * @returns {void}\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: \'bar\'}),\n * turf.point([36, 53], {hello: \'world\'})\n * ]);\n *\n * turf.propEach(features, function (currentProperties, featureIndex) {\n * //=currentProperties\n * //=featureIndex\n * });\n */\n\n\nfunction propEach(geojson, callback) {\n var i;\n\n switch (geojson.type) {\n case "FeatureCollection":\n for (i = 0; i < geojson.features.length; i++) {\n if (callback(geojson.features[i].properties, i) === false) break;\n }\n\n break;\n\n case "Feature":\n callback(geojson.properties, 0);\n break;\n }\n}\n/**\n * Callback for propReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n * - The previousValue argument is initialValue.\n * - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n * - The previousValue argument is the value of the first element present in the array.\n * - The currentValue argument is the value of the second element present in the array.\n *\n * @callback propReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {*} currentProperties The current Properties being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n */\n\n/**\n * Reduce properties in any GeoJSON object into a single value,\n * similar to how Array.reduce works. However, in this case we lazily run\n * the reduction, so an array of all properties is unnecessary.\n *\n * @name propReduce\n * @param {FeatureCollection|Feature} geojson any GeoJSON object\n * @param {Function} callback a method that takes (previousValue, currentProperties, featureIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {*} The value that results from the reduction.\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: \'bar\'}),\n * turf.point([36, 53], {hello: \'world\'})\n * ]);\n *\n * turf.propReduce(features, function (previousValue, currentProperties, featureIndex) {\n * //=previousValue\n * //=currentProperties\n * //=featureIndex\n * return currentProperties\n * });\n */\n\n\nfunction propReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n propEach(geojson, function (currentProperties, featureIndex) {\n if (featureIndex === 0 && initialValue === undefined) previousValue = currentProperties;else previousValue = callback(previousValue, currentProperties, featureIndex);\n });\n return previousValue;\n}\n/**\n * Callback for featureEach\n *\n * @callback featureEachCallback\n * @param {Feature} currentFeature The current Feature being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n */\n\n/**\n * Iterate over features in any GeoJSON object, similar to\n * Array.forEach.\n *\n * @name featureEach\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (currentFeature, featureIndex)\n * @returns {void}\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: \'bar\'}),\n * turf.point([36, 53], {hello: \'world\'})\n * ]);\n *\n * turf.featureEach(features, function (currentFeature, featureIndex) {\n * //=currentFeature\n * //=featureIndex\n * });\n */\n\n\nfunction featureEach(geojson, callback) {\n if (geojson.type === "Feature") {\n callback(geojson, 0);\n } else if (geojson.type === "FeatureCollection") {\n for (var i = 0; i < geojson.features.length; i++) {\n if (callback(geojson.features[i], i) === false) break;\n }\n }\n}\n/**\n * Callback for featureReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n * - The previousValue argument is initialValue.\n * - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n * - The previousValue argument is the value of the first element present in the array.\n * - The currentValue argument is the value of the second element present in the array.\n *\n * @callback featureReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Feature} currentFeature The current Feature being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n */\n\n/**\n * Reduce features in any GeoJSON object, similar to Array.reduce().\n *\n * @name featureReduce\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (previousValue, currentFeature, featureIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {*} The value that results from the reduction.\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {"foo": "bar"}),\n * turf.point([36, 53], {"hello": "world"})\n * ]);\n *\n * turf.featureReduce(features, function (previousValue, currentFeature, featureIndex) {\n * //=previousValue\n * //=currentFeature\n * //=featureIndex\n * return currentFeature\n * });\n */\n\n\nfunction featureReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n featureEach(geojson, function (currentFeature, featureIndex) {\n if (featureIndex === 0 && initialValue === undefined) previousValue = currentFeature;else previousValue = callback(previousValue, currentFeature, featureIndex);\n });\n return previousValue;\n}\n/**\n * Get all coordinates from any GeoJSON object.\n *\n * @name coordAll\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @returns {Array>} coordinate position array\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: \'bar\'}),\n * turf.point([36, 53], {hello: \'world\'})\n * ]);\n *\n * var coords = turf.coordAll(features);\n * //= [[26, 37], [36, 53]]\n */\n\n\nfunction coordAll(geojson) {\n var coords = [];\n coordEach(geojson, function (coord) {\n coords.push(coord);\n });\n return coords;\n}\n/**\n * Callback for geomEach\n *\n * @callback geomEachCallback\n * @param {Geometry} currentGeometry The current Geometry being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {Object} featureProperties The current Feature Properties being processed.\n * @param {Array} featureBBox The current Feature BBox being processed.\n * @param {number|string} featureId The current Feature Id being processed.\n */\n\n/**\n * Iterate over each geometry in any GeoJSON object, similar to Array.forEach()\n *\n * @name geomEach\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (currentGeometry, featureIndex, featureProperties, featureBBox, featureId)\n * @returns {void}\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: \'bar\'}),\n * turf.point([36, 53], {hello: \'world\'})\n * ]);\n *\n * turf.geomEach(features, function (currentGeometry, featureIndex, featureProperties, featureBBox, featureId) {\n * //=currentGeometry\n * //=featureIndex\n * //=featureProperties\n * //=featureBBox\n * //=featureId\n * });\n */\n\n\nfunction geomEach(geojson, callback) {\n var i,\n j,\n g,\n geometry,\n stopG,\n geometryMaybeCollection,\n isGeometryCollection,\n featureProperties,\n featureBBox,\n featureId,\n featureIndex = 0,\n isFeatureCollection = geojson.type === "FeatureCollection",\n isFeature = geojson.type === "Feature",\n stop = isFeatureCollection ? geojson.features.length : 1; // This logic may look a little weird. The reason why it is that way\n // is because it\'s trying to be fast. GeoJSON supports multiple kinds\n // of objects at its root: FeatureCollection, Features, Geometries.\n // This function has the responsibility of handling all of them, and that\n // means that some of the `for` loops you see below actually just don\'t apply\n // to certain inputs. For instance, if you give this just a\n // Point geometry, then both loops are short-circuited and all we do\n // is gradually rename the input until it\'s called \'geometry\'.\n //\n // This also aims to allocate as few resources as possible: just a\n // few numbers and booleans, rather than any temporary arrays as would\n // be required with the normalization approach.\n\n for (i = 0; i < stop; i++) {\n geometryMaybeCollection = isFeatureCollection ? geojson.features[i].geometry : isFeature ? geojson.geometry : geojson;\n featureProperties = isFeatureCollection ? geojson.features[i].properties : isFeature ? geojson.properties : {};\n featureBBox = isFeatureCollection ? geojson.features[i].bbox : isFeature ? geojson.bbox : undefined;\n featureId = isFeatureCollection ? geojson.features[i].id : isFeature ? geojson.id : undefined;\n isGeometryCollection = geometryMaybeCollection ? geometryMaybeCollection.type === "GeometryCollection" : false;\n stopG = isGeometryCollection ? geometryMaybeCollection.geometries.length : 1;\n\n for (g = 0; g < stopG; g++) {\n geometry = isGeometryCollection ? geometryMaybeCollection.geometries[g] : geometryMaybeCollection; // Handle null Geometry\n\n if (geometry === null) {\n if (callback(null, featureIndex, featureProperties, featureBBox, featureId) === false) return false;\n continue;\n }\n\n switch (geometry.type) {\n case "Point":\n case "LineString":\n case "MultiPoint":\n case "Polygon":\n case "MultiLineString":\n case "MultiPolygon":\n {\n if (callback(geometry, featureIndex, featureProperties, featureBBox, featureId) === false) return false;\n break;\n }\n\n case "GeometryCollection":\n {\n for (j = 0; j < geometry.geometries.length; j++) {\n if (callback(geometry.geometries[j], featureIndex, featureProperties, featureBBox, featureId) === false) return false;\n }\n\n break;\n }\n\n default:\n throw new Error("Unknown Geometry Type");\n }\n } // Only increase `featureIndex` per each feature\n\n\n featureIndex++;\n }\n}\n/**\n * Callback for geomReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n * - The previousValue argument is initialValue.\n * - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n * - The previousValue argument is the value of the first element present in the array.\n * - The currentValue argument is the value of the second element present in the array.\n *\n * @callback geomReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Geometry} currentGeometry The current Geometry being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {Object} featureProperties The current Feature Properties being processed.\n * @param {Array} featureBBox The current Feature BBox being processed.\n * @param {number|string} featureId The current Feature Id being processed.\n */\n\n/**\n * Reduce geometry in any GeoJSON object, similar to Array.reduce().\n *\n * @name geomReduce\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (previousValue, currentGeometry, featureIndex, featureProperties, featureBBox, featureId)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {*} The value that results from the reduction.\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: \'bar\'}),\n * turf.point([36, 53], {hello: \'world\'})\n * ]);\n *\n * turf.geomReduce(features, function (previousValue, currentGeometry, featureIndex, featureProperties, featureBBox, featureId) {\n * //=previousValue\n * //=currentGeometry\n * //=featureIndex\n * //=featureProperties\n * //=featureBBox\n * //=featureId\n * return currentGeometry\n * });\n */\n\n\nfunction geomReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n geomEach(geojson, function (currentGeometry, featureIndex, featureProperties, featureBBox, featureId) {\n if (featureIndex === 0 && initialValue === undefined) previousValue = currentGeometry;else previousValue = callback(previousValue, currentGeometry, featureIndex, featureProperties, featureBBox, featureId);\n });\n return previousValue;\n}\n/**\n * Callback for flattenEach\n *\n * @callback flattenEachCallback\n * @param {Feature} currentFeature The current flattened feature being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n */\n\n/**\n * Iterate over flattened features in any GeoJSON object, similar to\n * Array.forEach.\n *\n * @name flattenEach\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (currentFeature, featureIndex, multiFeatureIndex)\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: \'bar\'}),\n * turf.multiPoint([[40, 30], [36, 53]], {hello: \'world\'})\n * ]);\n *\n * turf.flattenEach(features, function (currentFeature, featureIndex, multiFeatureIndex) {\n * //=currentFeature\n * //=featureIndex\n * //=multiFeatureIndex\n * });\n */\n\n\nfunction flattenEach(geojson, callback) {\n geomEach(geojson, function (geometry, featureIndex, properties, bbox, id) {\n // Callback for single geometry\n var type = geometry === null ? null : geometry.type;\n\n switch (type) {\n case null:\n case "Point":\n case "LineString":\n case "Polygon":\n if (callback(feature(geometry, properties, {\n bbox: bbox,\n id: id\n }), featureIndex, 0) === false) return false;\n return;\n }\n\n var geomType; // Callback for multi-geometry\n\n switch (type) {\n case "MultiPoint":\n geomType = "Point";\n break;\n\n case "MultiLineString":\n geomType = "LineString";\n break;\n\n case "MultiPolygon":\n geomType = "Polygon";\n break;\n }\n\n for (var multiFeatureIndex = 0; multiFeatureIndex < geometry.coordinates.length; multiFeatureIndex++) {\n var coordinate = geometry.coordinates[multiFeatureIndex];\n var geom = {\n type: geomType,\n coordinates: coordinate\n };\n if (callback(feature(geom, properties), featureIndex, multiFeatureIndex) === false) return false;\n }\n });\n}\n/**\n * Callback for flattenReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n * - The previousValue argument is initialValue.\n * - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n * - The previousValue argument is the value of the first element present in the array.\n * - The currentValue argument is the value of the second element present in the array.\n *\n * @callback flattenReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Feature} currentFeature The current Feature being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n */\n\n/**\n * Reduce flattened features in any GeoJSON object, similar to Array.reduce().\n *\n * @name flattenReduce\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (previousValue, currentFeature, featureIndex, multiFeatureIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {*} The value that results from the reduction.\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: \'bar\'}),\n * turf.multiPoint([[40, 30], [36, 53]], {hello: \'world\'})\n * ]);\n *\n * turf.flattenReduce(features, function (previousValue, currentFeature, featureIndex, multiFeatureIndex) {\n * //=previousValue\n * //=currentFeature\n * //=featureIndex\n * //=multiFeatureIndex\n * return currentFeature\n * });\n */\n\n\nfunction flattenReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n flattenEach(geojson, function (currentFeature, featureIndex, multiFeatureIndex) {\n if (featureIndex === 0 && multiFeatureIndex === 0 && initialValue === undefined) previousValue = currentFeature;else previousValue = callback(previousValue, currentFeature, featureIndex, multiFeatureIndex);\n });\n return previousValue;\n}\n/**\n * Callback for segmentEach\n *\n * @callback segmentEachCallback\n * @param {Feature} currentSegment The current Segment being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n * @param {number} geometryIndex The current index of the Geometry being processed.\n * @param {number} segmentIndex The current index of the Segment being processed.\n * @returns {void}\n */\n\n/**\n * Iterate over 2-vertex line segment in any GeoJSON object, similar to Array.forEach()\n * (Multi)Point geometries do not contain segments therefore they are ignored during this operation.\n *\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON\n * @param {Function} callback a method that takes (currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex)\n * @returns {void}\n * @example\n * var polygon = turf.polygon([[[-50, 5], [-40, -10], [-50, -10], [-40, 5], [-50, 5]]]);\n *\n * // Iterate over GeoJSON by 2-vertex segments\n * turf.segmentEach(polygon, function (currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex) {\n * //=currentSegment\n * //=featureIndex\n * //=multiFeatureIndex\n * //=geometryIndex\n * //=segmentIndex\n * });\n *\n * // Calculate the total number of segments\n * var total = 0;\n * turf.segmentEach(polygon, function () {\n * total++;\n * });\n */\n\n\nfunction segmentEach(geojson, callback) {\n flattenEach(geojson, function (feature, featureIndex, multiFeatureIndex) {\n var segmentIndex = 0; // Exclude null Geometries\n\n if (!feature.geometry) return; // (Multi)Point geometries do not contain segments therefore they are ignored during this operation.\n\n var type = feature.geometry.type;\n if (type === "Point" || type === "MultiPoint") return; // Generate 2-vertex line segments\n\n var previousCoords;\n var previousFeatureIndex = 0;\n var previousMultiIndex = 0;\n var prevGeomIndex = 0;\n if (coordEach(feature, function (currentCoord, coordIndex, featureIndexCoord, multiPartIndexCoord, geometryIndex) {\n // Simulating a meta.coordReduce() since `reduce` operations cannot be stopped by returning `false`\n if (previousCoords === undefined || featureIndex > previousFeatureIndex || multiPartIndexCoord > previousMultiIndex || geometryIndex > prevGeomIndex) {\n previousCoords = currentCoord;\n previousFeatureIndex = featureIndex;\n previousMultiIndex = multiPartIndexCoord;\n prevGeomIndex = geometryIndex;\n segmentIndex = 0;\n return;\n }\n\n var currentSegment = lineString([previousCoords, currentCoord], feature.properties);\n if (callback(currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex) === false) return false;\n segmentIndex++;\n previousCoords = currentCoord;\n }) === false) return false;\n });\n}\n/**\n * Callback for segmentReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n * - The previousValue argument is initialValue.\n * - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n * - The previousValue argument is the value of the first element present in the array.\n * - The currentValue argument is the value of the second element present in the array.\n *\n * @callback segmentReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Feature} currentSegment The current Segment being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n * @param {number} geometryIndex The current index of the Geometry being processed.\n * @param {number} segmentIndex The current index of the Segment being processed.\n */\n\n/**\n * Reduce 2-vertex line segment in any GeoJSON object, similar to Array.reduce()\n * (Multi)Point geometries do not contain segments therefore they are ignored during this operation.\n *\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON\n * @param {Function} callback a method that takes (previousValue, currentSegment, currentIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {void}\n * @example\n * var polygon = turf.polygon([[[-50, 5], [-40, -10], [-50, -10], [-40, 5], [-50, 5]]]);\n *\n * // Iterate over GeoJSON by 2-vertex segments\n * turf.segmentReduce(polygon, function (previousSegment, currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex) {\n * //= previousSegment\n * //= currentSegment\n * //= featureIndex\n * //= multiFeatureIndex\n * //= geometryIndex\n * //= segmentIndex\n * return currentSegment\n * });\n *\n * // Calculate the total number of segments\n * var initialValue = 0\n * var total = turf.segmentReduce(polygon, function (previousValue) {\n * previousValue++;\n * return previousValue;\n * }, initialValue);\n */\n\n\nfunction segmentReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n var started = false;\n segmentEach(geojson, function (currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex) {\n if (started === false && initialValue === undefined) previousValue = currentSegment;else previousValue = callback(previousValue, currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex);\n started = true;\n });\n return previousValue;\n}\n/**\n * Callback for lineEach\n *\n * @callback lineEachCallback\n * @param {Feature} currentLine The current LineString|LinearRing being processed\n * @param {number} featureIndex The current index of the Feature being processed\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed\n * @param {number} geometryIndex The current index of the Geometry being processed\n */\n\n/**\n * Iterate over line or ring coordinates in LineString, Polygon, MultiLineString, MultiPolygon Features or Geometries,\n * similar to Array.forEach.\n *\n * @name lineEach\n * @param {Geometry|Feature} geojson object\n * @param {Function} callback a method that takes (currentLine, featureIndex, multiFeatureIndex, geometryIndex)\n * @example\n * var multiLine = turf.multiLineString([\n * [[26, 37], [35, 45]],\n * [[36, 53], [38, 50], [41, 55]]\n * ]);\n *\n * turf.lineEach(multiLine, function (currentLine, featureIndex, multiFeatureIndex, geometryIndex) {\n * //=currentLine\n * //=featureIndex\n * //=multiFeatureIndex\n * //=geometryIndex\n * });\n */\n\n\nfunction lineEach(geojson, callback) {\n // validation\n if (!geojson) throw new Error("geojson is required");\n flattenEach(geojson, function (feature, featureIndex, multiFeatureIndex) {\n if (feature.geometry === null) return;\n var type = feature.geometry.type;\n var coords = feature.geometry.coordinates;\n\n switch (type) {\n case "LineString":\n if (callback(feature, featureIndex, multiFeatureIndex, 0, 0) === false) return false;\n break;\n\n case "Polygon":\n for (var geometryIndex = 0; geometryIndex < coords.length; geometryIndex++) {\n if (callback(lineString(coords[geometryIndex], feature.properties), featureIndex, multiFeatureIndex, geometryIndex) === false) return false;\n }\n\n break;\n }\n });\n}\n/**\n * Callback for lineReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n * - The previousValue argument is initialValue.\n * - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n * - The previousValue argument is the value of the first element present in the array.\n * - The currentValue argument is the value of the second element present in the array.\n *\n * @callback lineReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Feature} currentLine The current LineString|LinearRing being processed.\n * @param {number} featureIndex The current index of the Feature being processed\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed\n * @param {number} geometryIndex The current index of the Geometry being processed\n */\n\n/**\n * Reduce features in any GeoJSON object, similar to Array.reduce().\n *\n * @name lineReduce\n * @param {Geometry|Feature} geojson object\n * @param {Function} callback a method that takes (previousValue, currentLine, featureIndex, multiFeatureIndex, geometryIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {*} The value that results from the reduction.\n * @example\n * var multiPoly = turf.multiPolygon([\n * turf.polygon([[[12,48],[2,41],[24,38],[12,48]], [[9,44],[13,41],[13,45],[9,44]]]),\n * turf.polygon([[[5, 5], [0, 0], [2, 2], [4, 4], [5, 5]]])\n * ]);\n *\n * turf.lineReduce(multiPoly, function (previousValue, currentLine, featureIndex, multiFeatureIndex, geometryIndex) {\n * //=previousValue\n * //=currentLine\n * //=featureIndex\n * //=multiFeatureIndex\n * //=geometryIndex\n * return currentLine\n * });\n */\n\n\nfunction lineReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n lineEach(geojson, function (currentLine, featureIndex, multiFeatureIndex, geometryIndex) {\n if (featureIndex === 0 && initialValue === undefined) previousValue = currentLine;else previousValue = callback(previousValue, currentLine, featureIndex, multiFeatureIndex, geometryIndex);\n });\n return previousValue;\n}\n/**\n * Finds a particular 2-vertex LineString Segment from a GeoJSON using `@turf/meta` indexes.\n *\n * Negative indexes are permitted.\n * Point & MultiPoint will always return null.\n *\n * @param {FeatureCollection|Feature|Geometry} geojson Any GeoJSON Feature or Geometry\n * @param {Object} [options={}] Optional parameters\n * @param {number} [options.featureIndex=0] Feature Index\n * @param {number} [options.multiFeatureIndex=0] Multi-Feature Index\n * @param {number} [options.geometryIndex=0] Geometry Index\n * @param {number} [options.segmentIndex=0] Segment Index\n * @param {Object} [options.properties={}] Translate Properties to output LineString\n * @param {BBox} [options.bbox={}] Translate BBox to output LineString\n * @param {number|string} [options.id={}] Translate Id to output LineString\n * @returns {Feature} 2-vertex GeoJSON Feature LineString\n * @example\n * var multiLine = turf.multiLineString([\n * [[10, 10], [50, 30], [30, 40]],\n * [[-10, -10], [-50, -30], [-30, -40]]\n * ]);\n *\n * // First Segment (defaults are 0)\n * turf.findSegment(multiLine);\n * // => Feature>\n *\n * // First Segment of 2nd Multi Feature\n * turf.findSegment(multiLine, {multiFeatureIndex: 1});\n * // => Feature>\n *\n * // Last Segment of Last Multi Feature\n * turf.findSegment(multiLine, {multiFeatureIndex: -1, segmentIndex: -1});\n * // => Feature>\n */\n\n\nfunction findSegment(geojson, options) {\n // Optional Parameters\n options = options || {};\n if (!isObject(options)) throw new Error("options is invalid");\n var featureIndex = options.featureIndex || 0;\n var multiFeatureIndex = options.multiFeatureIndex || 0;\n var geometryIndex = options.geometryIndex || 0;\n var segmentIndex = options.segmentIndex || 0; // Find FeatureIndex\n\n var properties = options.properties;\n var geometry;\n\n switch (geojson.type) {\n case "FeatureCollection":\n if (featureIndex < 0) featureIndex = geojson.features.length + featureIndex;\n properties = properties || geojson.features[featureIndex].properties;\n geometry = geojson.features[featureIndex].geometry;\n break;\n\n case "Feature":\n properties = properties || geojson.properties;\n geometry = geojson.geometry;\n break;\n\n case "Point":\n case "MultiPoint":\n return null;\n\n case "LineString":\n case "Polygon":\n case "MultiLineString":\n case "MultiPolygon":\n geometry = geojson;\n break;\n\n default:\n throw new Error("geojson is invalid");\n } // Find SegmentIndex\n\n\n if (geometry === null) return null;\n var coords = geometry.coordinates;\n\n switch (geometry.type) {\n case "Point":\n case "MultiPoint":\n return null;\n\n case "LineString":\n if (segmentIndex < 0) segmentIndex = coords.length + segmentIndex - 1;\n return lineString([coords[segmentIndex], coords[segmentIndex + 1]], properties, options);\n\n case "Polygon":\n if (geometryIndex < 0) geometryIndex = coords.length + geometryIndex;\n if (segmentIndex < 0) segmentIndex = coords[geometryIndex].length + segmentIndex - 1;\n return lineString([coords[geometryIndex][segmentIndex], coords[geometryIndex][segmentIndex + 1]], properties, options);\n\n case "MultiLineString":\n if (multiFeatureIndex < 0) multiFeatureIndex = coords.length + multiFeatureIndex;\n if (segmentIndex < 0) segmentIndex = coords[multiFeatureIndex].length + segmentIndex - 1;\n return lineString([coords[multiFeatureIndex][segmentIndex], coords[multiFeatureIndex][segmentIndex + 1]], properties, options);\n\n case "MultiPolygon":\n if (multiFeatureIndex < 0) multiFeatureIndex = coords.length + multiFeatureIndex;\n if (geometryIndex < 0) geometryIndex = coords[multiFeatureIndex].length + geometryIndex;\n if (segmentIndex < 0) segmentIndex = coords[multiFeatureIndex][geometryIndex].length - segmentIndex - 1;\n return lineString([coords[multiFeatureIndex][geometryIndex][segmentIndex], coords[multiFeatureIndex][geometryIndex][segmentIndex + 1]], properties, options);\n }\n\n throw new Error("geojson is invalid");\n}\n/**\n * Finds a particular Point from a GeoJSON using `@turf/meta` indexes.\n *\n * Negative indexes are permitted.\n *\n * @param {FeatureCollection|Feature|Geometry} geojson Any GeoJSON Feature or Geometry\n * @param {Object} [options={}] Optional parameters\n * @param {number} [options.featureIndex=0] Feature Index\n * @param {number} [options.multiFeatureIndex=0] Multi-Feature Index\n * @param {number} [options.geometryIndex=0] Geometry Index\n * @param {number} [options.coordIndex=0] Coord Index\n * @param {Object} [options.properties={}] Translate Properties to output Point\n * @param {BBox} [options.bbox={}] Translate BBox to output Point\n * @param {number|string} [options.id={}] Translate Id to output Point\n * @returns {Feature} 2-vertex GeoJSON Feature Point\n * @example\n * var multiLine = turf.multiLineString([\n * [[10, 10], [50, 30], [30, 40]],\n * [[-10, -10], [-50, -30], [-30, -40]]\n * ]);\n *\n * // First Segment (defaults are 0)\n * turf.findPoint(multiLine);\n * // => Feature>\n *\n * // First Segment of the 2nd Multi-Feature\n * turf.findPoint(multiLine, {multiFeatureIndex: 1});\n * // => Feature>\n *\n * // Last Segment of last Multi-Feature\n * turf.findPoint(multiLine, {multiFeatureIndex: -1, coordIndex: -1});\n * // => Feature>\n */\n\n\nfunction findPoint(geojson, options) {\n // Optional Parameters\n options = options || {};\n if (!isObject(options)) throw new Error("options is invalid");\n var featureIndex = options.featureIndex || 0;\n var multiFeatureIndex = options.multiFeatureIndex || 0;\n var geometryIndex = options.geometryIndex || 0;\n var coordIndex = options.coordIndex || 0; // Find FeatureIndex\n\n var properties = options.properties;\n var geometry;\n\n switch (geojson.type) {\n case "FeatureCollection":\n if (featureIndex < 0) featureIndex = geojson.features.length + featureIndex;\n properties = properties || geojson.features[featureIndex].properties;\n geometry = geojson.features[featureIndex].geometry;\n break;\n\n case "Feature":\n properties = properties || geojson.properties;\n geometry = geojson.geometry;\n break;\n\n case "Point":\n case "MultiPoint":\n return null;\n\n case "LineString":\n case "Polygon":\n case "MultiLineString":\n case "MultiPolygon":\n geometry = geojson;\n break;\n\n default:\n throw new Error("geojson is invalid");\n } // Find Coord Index\n\n\n if (geometry === null) return null;\n var coords = geometry.coordinates;\n\n switch (geometry.type) {\n case "Point":\n return point(coords, properties, options);\n\n case "MultiPoint":\n if (multiFeatureIndex < 0) multiFeatureIndex = coords.length + multiFeatureIndex;\n return point(coords[multiFeatureIndex], properties, options);\n\n case "LineString":\n if (coordIndex < 0) coordIndex = coords.length + coordIndex;\n return point(coords[coordIndex], properties, options);\n\n case "Polygon":\n if (geometryIndex < 0) geometryIndex = coords.length + geometryIndex;\n if (coordIndex < 0) coordIndex = coords[geometryIndex].length + coordIndex;\n return point(coords[geometryIndex][coordIndex], properties, options);\n\n case "MultiLineString":\n if (multiFeatureIndex < 0) multiFeatureIndex = coords.length + multiFeatureIndex;\n if (coordIndex < 0) coordIndex = coords[multiFeatureIndex].length + coordIndex;\n return point(coords[multiFeatureIndex][coordIndex], properties, options);\n\n case "MultiPolygon":\n if (multiFeatureIndex < 0) multiFeatureIndex = coords.length + multiFeatureIndex;\n if (geometryIndex < 0) geometryIndex = coords[multiFeatureIndex].length + geometryIndex;\n if (coordIndex < 0) coordIndex = coords[multiFeatureIndex][geometryIndex].length - coordIndex;\n return point(coords[multiFeatureIndex][geometryIndex][coordIndex], properties, options);\n }\n\n throw new Error("geojson is invalid");\n}\n\n\n;// CONCATENATED MODULE: ./node_modules/@turf/bbox/dist/es/index.js\n\n/**\n * Takes a set of features, calculates the bbox of all input features, and returns a bounding box.\n *\n * @name bbox\n * @param {GeoJSON} geojson any GeoJSON object\n * @returns {BBox} bbox extent in [minX, minY, maxX, maxY] order\n * @example\n * var line = turf.lineString([[-74, 40], [-78, 42], [-82, 35]]);\n * var bbox = turf.bbox(line);\n * var bboxPolygon = turf.bboxPolygon(bbox);\n *\n * //addToMap\n * var addToMap = [line, bboxPolygon]\n */\n\nfunction bbox(geojson) {\n var result = [Infinity, Infinity, -Infinity, -Infinity];\n coordEach(geojson, function (coord) {\n if (result[0] > coord[0]) {\n result[0] = coord[0];\n }\n\n if (result[1] > coord[1]) {\n result[1] = coord[1];\n }\n\n if (result[2] < coord[0]) {\n result[2] = coord[0];\n }\n\n if (result[3] < coord[1]) {\n result[3] = coord[1];\n }\n });\n return result;\n}\n\nbbox["default"] = bbox;\n/* harmony default export */ var es = (bbox);\n;// CONCATENATED MODULE: ./node_modules/d3-ease/src/cubic.js\nfunction cubicIn(t) {\n return t * t * t;\n}\nfunction cubicOut(t) {\n return --t * t * t + 1;\n}\nfunction cubicInOut(t) {\n return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n// EXTERNAL MODULE: ./node_modules/react-device-detect/main.js\nvar main = __webpack_require__(1677);\n// EXTERNAL MODULE: ./src/contexts/FlagContext.tsx\nvar FlagContext = __webpack_require__(774);\n// EXTERNAL MODULE: ./node_modules/gatsby-plugin-intl/index.js\nvar gatsby_plugin_intl = __webpack_require__(9703);\n;// CONCATENATED MODULE: ./src/components/territoryFocusControl.module.scss\n// extracted by mini-css-extract-plugin\nvar territoryFocusButton = "territoryFocusControl-module--territoryFocusButton--3wWoV";\nvar territoryFocusContainer = "territoryFocusControl-module--territoryFocusContainer--3N0XM";\n;// CONCATENATED MODULE: ./src/components/territoryFocusControl.tsx\nvar TerritoryFocusControl=function TerritoryFocusControl(_ref){var onClickTerritoryFocusButton=_ref.onClickTerritoryFocusButton;var intl=(0,gatsby_plugin_intl.useIntl)();var _useMapControl=useMapControl({// @ts-ignore // Types have not caught up yet, see https://github.com/visgl/react-map-gl/issues/1492\nonClick:onClickTerritoryFocusButton}),containerRef=_useMapControl.containerRef;var territories=[{short:intl.formatMessage({id:\'map.territoryFocus.lower48.short\',defaultMessage:\'48\',description:\'The abbreviated name indicating the bounds of the Lower 48 states\'}),long:intl.formatMessage({id:\'map.territoryFocus.lower48.long\',defaultMessage:\'Lower 48\',description:\'The longer name indicating the bounds of the Lower 48 states\'})},{short:intl.formatMessage({id:\'map.territoryFocus.alaska.short\',defaultMessage:\'AK\',description:\'The abbreviated indicating the bounds of Alaska\'}),long:intl.formatMessage({id:\'map.territoryFocus.alaska.long\',defaultMessage:\'Alaska\',description:\'The full name indicating the bounds of Alaska\'})},{short:intl.formatMessage({id:\'map.territoryFocus.hawaii.short\',defaultMessage:\'HI\',description:\'The abbreviated name indicating the bounds of Hawaii\'}),long:intl.formatMessage({id:\'map.territoryFocus.hawaii.long\',defaultMessage:\'Hawaii\',description:\'The longer name indicating the bounds of Hawaii\'})},{short:intl.formatMessage({id:\'map.territoryFocus.puerto_rico.short\',defaultMessage:\'PR\',description:\'The abbreviated name indicating the bounds of Puerto Rico\'}),long:intl.formatMessage({id:\'map.territoryFocus.puerto_rico.long\',defaultMessage:\'Puerto Rico\',description:\'The full name indicating the bounds of Puerto Rico\'})}];return/*#__PURE__*/react.createElement("div",{ref:containerRef,className:territoryFocusContainer},territories.map(function(territory){return/*#__PURE__*/react.createElement("button",{id:territory.short,key:territory.short,onClick:onClickTerritoryFocusButton,className:territoryFocusButton,"aria-label":intl.formatMessage({id:\'map.territoryFocus.focusOn\',defaultMessage:\'Focus on {territory}\',description:\'Focus on the bounds of a specific territory\'},{territory:territory.long})},territory.short);}));};/* harmony default export */ var territoryFocusControl = (TerritoryFocusControl);\n// EXTERNAL MODULE: ./node_modules/react-intl/lib/index.js + 8 modules\nvar lib = __webpack_require__(4424);\n;// CONCATENATED MODULE: ./node_modules/uswds/dist/img/usa-icons/lightbulb_outline.svg\n/* harmony default export */ var lightbulb_outline = ("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDI0IDI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCI+PGc+PHJlY3QgZmlsbD0ibm9uZSIgaGVpZ2h0PSIyNCIgd2lkdGg9IjI0Ii8+PC9nPjxnPjxnPjxnPjxwYXRoIGQ9Ik05LDIxYzAsMC41NSwwLjQ1LDEsMSwxaDRjMC41NSwwLDEtMC40NSwxLTF2LTFIOVYyMXogTTEyLDJDOC4xNCwyLDUsNS4xNCw1LDljMCwyLjM4LDEuMTksNC40NywzLDUuNzRWMTcgYzAsMC41NSwwLjQ1LDEsMSwxaDZjMC41NSwwLDEtMC40NSwxLTF2LTIuMjZjMS44MS0xLjI3LDMtMy4zNiwzLTUuNzRDMTksNS4xNCwxNS44NiwyLDEyLDJ6IE0xNCwxMy43VjE2aC00di0yLjMgQzguNDgsMTIuNjMsNywxMS41Myw3LDljMC0yLjc2LDIuMjQtNSw1LTVzNSwyLjI0LDUsNUMxNywxMS40OSwxNS40OSwxMi42NSwxNCwxMy43eiIvPjwvZz48L2c+PC9nPjwvc3ZnPg==");\n;// CONCATENATED MODULE: ./src/components/mapIntroduction.module.scss\n// extracted by mini-css-extract-plugin\nvar mapIntroContainer = "mapIntroduction-module--mapIntroContainer--1K8du";\nvar mapIntroHeader = "mapIntroduction-module--mapIntroHeader--32LBs";\nvar mapIntroText = "mapIntroduction-module--mapIntroText--Tib8L";\nvar mapIntroLightbulb = "mapIntroduction-module--mapIntroLightbulb--3LBx0";\nvar didYouKnowBox = "mapIntroduction-module--didYouKnowBox--3ztEy";\nvar didYouKnow = "mapIntroduction-module--didYouKnow--3_v_i";\nvar didYouKnowText = "mapIntroduction-module--didYouKnowText--3sgHs";\n;// CONCATENATED MODULE: ./src/components/mapIntroduction.tsx\n// @ts-ignore\nvar MapIntroduction=function MapIntroduction(){var intl=(0,gatsby_plugin_intl.useIntl)();var messages=(0,lib/* defineMessages */.vU)({mapIntroHeader:{id:\'mapIntro.mapIntroHeader\',defaultMessage:\'Zoom and select a census block group to view data\',description:\'introductory text of ways to use the map\'},didYouKnow:{id:\'mapIntro.didYouKnow\',defaultMessage:\' Did you know?\',description:\'text prompting a cite paragraph\'},censusBlockGroupDefinition:{id:\'mapIntro.censusBlockGroupDefinition\',defaultMessage:\'A census block group is generally between 600 and 3,000 people. \'+\'It is the smallest geographical unit for which the U.S. Census \'+\'Bureau publishes sample data.\',description:\'cites the definition and helpful information about census groups\'}});return/*#__PURE__*/react.createElement("aside",{className:mapIntroContainer},/*#__PURE__*/react.createElement("header",{className:mapIntroHeader},intl.formatMessage(messages.mapIntroHeader)),/*#__PURE__*/react.createElement("div",{className:mapIntroText},/*#__PURE__*/react.createElement("img",{className:mapIntroLightbulb,src:lightbulb_outline}),/*#__PURE__*/react.createElement("div",{className:didYouKnowBox},/*#__PURE__*/react.createElement("div",{className:didYouKnow},intl.formatMessage(messages.didYouKnow)),/*#__PURE__*/react.createElement("cite",{className:didYouKnowText},intl.formatMessage(messages.censusBlockGroupDefinition)))));};/* harmony default export */ var mapIntroduction = (MapIntroduction);\n;// CONCATENATED MODULE: ./src/components/areaDetail.module.scss\n// extracted by mini-css-extract-plugin\nvar areaDetailContainer = "areaDetail-module--areaDetailContainer--15ae9";\nvar topRow = "areaDetail-module--topRow--GKfYj";\nvar cumulativeIndexScore = "areaDetail-module--cumulativeIndexScore--6IjJ9";\nvar areaDetail_module_categorization = "areaDetail-module--categorization--3HQ3g";\nvar topRowTitle = "areaDetail-module--topRowTitle--3pDta";\nvar censusLabel = "areaDetail-module--censusLabel--2jDJl";\nvar topRowSubTitle = "areaDetail-module--topRowSubTitle--N8_GP";\nvar areaDetail_module_score = "areaDetail-module--score--3i8w1";\nvar scoreSuperscript = "areaDetail-module--scoreSuperscript--wmEIg";\nvar priority = "areaDetail-module--priority--PLMch";\nvar prioritized = "areaDetail-module--prioritized--1fVrQ";\nvar threshold = "areaDetail-module--threshold--34bIL";\nvar nonPrioritized = "areaDetail-module--nonPrioritized--1dEfk";\nvar prioritization = "areaDetail-module--prioritization--282dL";\nvar censusRow = "areaDetail-module--censusRow--1b9rm";\nvar censusText = "areaDetail-module--censusText--4hgvr";\nvar indicatorDescription = "areaDetail-module--indicatorDescription--2GABj";\nvar divider = "areaDetail-module--divider--3pt_a";\nvar indicatorBox = "areaDetail-module--indicatorBox--wTEld";\nvar indicatorTitle = "areaDetail-module--indicatorTitle--1tXMA";\nvar indicatorValue = "areaDetail-module--indicatorValue--3pmOI";\n;// CONCATENATED MODULE: ./src/data/constants.tsx\n// URLS\nvar FEATURE_TILE_BASE_URL=\'https://d2zjid6n5ja2pt.cloudfront.net\';var XYZ_SUFFIX=\'{z}/{x}/{y}.pbf\';var featureURLForTilesetName=function featureURLForTilesetName(tilesetName){return FEATURE_TILE_BASE_URL+"/"+tilesetName+"/"+XYZ_SUFFIX;};var FEATURE_TILE_HIGH_ZOOM_URL=featureURLForTilesetName(\'0714_high\');var FEATURE_TILE_LOW_ZOOM_URL=featureURLForTilesetName(\'tiles_low\');// Performance markers\nvar PERFORMANCE_MARKER_MAP_IDLE=\'MAP_IDLE\';// Properties\nvar SCORE_PROPERTY_HIGH=\'Score D (percentile)\';var SCORE_PROPERTY_LOW=\'D_SCORE\';var GEOID_PROPERTY=\'GEOID10\';var HIGH_SCORE_SOURCE_NAME=\'score-high\';var HIGH_SCORE_LAYER_NAME=\'score-high-layer\';var LOW_SCORE_SOURCE_NAME=\'score-low\';var LOW_SCORE_LAYER_NAME=\'score-low-layer\';var SELECTED_PROPERTY=\'selected\';var POVERTY_PROPERTY_PERCENTILE=\'Poverty (Less than 200% of federal poverty line) (percentile)\';var HOUSING_BURDEN_PROPERTY_PERCENTILE=\'Housing burden (percent) (percentile)\';var LINGUISTIC_ISOLATION_PROPERTY_PERCENTILE=\'Linguistic isolation (percent) (percentile)\';var UNEMPLOYMENT_PROPERTY_PERCENTILE=\'Unemployed civilians (percent) (percentile)\';var TOTAL_POPULATION=\'Total population\';var EDUCATION_PROPERTY_PERCENTILE=\'Percent individuals age 25 or over \'+\'with less than high school degree (percentile)\';// The name of the layer within the tiles that contains the score\nvar SCORE_SOURCE_LAYER=\'blocks\';// Zoom\nvar GLOBAL_MIN_ZOOM=3;var GLOBAL_MAX_ZOOM=22;var GLOBAL_MIN_ZOOM_LOW=3;var GLOBAL_MAX_ZOOM_LOW=7;var GLOBAL_MIN_ZOOM_HIGHLIGHT=9;var GLOBAL_MAX_ZOOM_HIGHLIGHT=22;var GLOBAL_MIN_ZOOM_HIGH=7;var GLOBAL_MAX_ZOOM_HIGH=11;// Bounds\nvar GLOBAL_MAX_BOUNDS=(/* unused pure expression or super */ null && ([[-180.118306,5.499550],[-65.0,83.162102]]));var LOWER_48_BOUNDS=[[-124.7844079,24.7433195],[-66.9513812,49.3457868]];var ALASKA_BOUNDS=[[-183.856888,50.875311],[-140.932617,71.958797]];var HAWAII_BOUNDS=[[-168.118306,18.748115],[-154.757881,22.378413]];var PUERTO_RICO_BOUNDS=[[-67.945404,17.88328],[-65.220703,18.515683]];var GUAM_BOUNDS=(/* unused pure expression or super */ null && ([[-215.389709,13.225909],[-215.040894,13.663335]]));var MARIANA_ISLAND_BOUNDS=(/* unused pure expression or super */ null && ([[-215.313449,14.007801],[-213.742404,19.750326]]));var AMERICAN_SAMOA_BOUNDS=(/* unused pure expression or super */ null && ([[-171.089874,-14.548699],[-168.1433,-11.046934]]));var DEFAULT_CENTER=[32.4687126,-86.502136];// Opacity\nvar DEFAULT_LAYER_OPACITY=0.6;// Colors\nvar DEFAULT_OUTLINE_COLOR=\'#4EA5CF\';var MIN_COLOR=\'#FFFFFF\';var MED_COLOR=\'#D1DAE6\';var MAX_COLOR=\'#768FB3\';var BORDER_HIGHLIGHT_COLOR=\'#00BDE3\';// Widths\nvar HIGHLIGHT_BORDER_WIDTH=5.0;// Score boundaries\nvar SCORE_BOUNDARY_LOW=0.0;var SCORE_BOUNDARY_THRESHOLD=0.6;var SCORE_BOUNDARY_PRIORITIZED=0.75;var isMobile=main/* isMobile */.tq;\n;// CONCATENATED MODULE: ./src/components/areaDetail.tsx\n// External Libs:\n// Components:\n// Styles and constants\nvar readablePercent=function readablePercent(percent){return""+(percent*100).toFixed(1);};var getCategorization=function getCategorization(percentile){var categorization;var categoryCircleStyle;if(percentile>=SCORE_BOUNDARY_PRIORITIZED){categorization=\'Prioritized\';categoryCircleStyle=prioritized;}else if(SCORE_BOUNDARY_THRESHOLD<=percentile&&percentile\',SCORE_PROPERTY_HIGH,SCORE_BOUNDARY_THRESHOLD]],\'paint\':makePaint({field:SCORE_PROPERTY_HIGH,minRamp:SCORE_BOUNDARY_LOW,medRamp:SCORE_BOUNDARY_THRESHOLD,maxRamp:SCORE_BOUNDARY_PRIORITIZED}),\'minzoom\':GLOBAL_MIN_ZOOM_HIGH},{\'id\':LOW_SCORE_LAYER_NAME,\'source\':LOW_SCORE_SOURCE_NAME,\'source-layer\':SCORE_SOURCE_LAYER,\'type\':\'fill\',\'filter\':[\'all\',[\'>\',SCORE_PROPERTY_LOW,SCORE_BOUNDARY_THRESHOLD]],\'paint\':makePaint({field:SCORE_PROPERTY_LOW,minRamp:SCORE_BOUNDARY_LOW,medRamp:SCORE_BOUNDARY_THRESHOLD,maxRamp:SCORE_BOUNDARY_PRIORITIZED}),\'minzoom\':GLOBAL_MIN_ZOOM_LOW,\'maxzoom\':GLOBAL_MAX_ZOOM_LOW},{// "Score-highlights" represents the border\n// around given tiles that appears at higher zooms\n\'id\':\'score-highlights-layer\',\'source\':HIGH_SCORE_SOURCE_NAME,\'source-layer\':SCORE_SOURCE_LAYER,\'type\':\'line\',\'layout\':{\'visibility\':\'visible\',\'line-join\':\'round\',\'line-cap\':\'round\'},\'paint\':{\'line-color\':DEFAULT_OUTLINE_COLOR,\'line-width\':0.8,\'line-opacity\':0.5},\'minzoom\':GLOBAL_MIN_ZOOM_HIGHLIGHT,\'maxzoom\':GLOBAL_MAX_ZOOM_HIGHLIGHT},{// "score-border-highlight" is used to highlight\n// the currently-selected feature\n\'id\':\'score-border-highlight-layer\',\'type\':\'line\',\'source\':HIGH_SCORE_SOURCE_NAME,\'source-layer\':SCORE_SOURCE_LAYER,\'layout\':{},\'paint\':{\'line-color\':BORDER_HIGHLIGHT_COLOR,\'line-width\':[\'case\',[\'boolean\',[\'feature-state\',SELECTED_PROPERTY],false],HIGHLIGHT_BORDER_WIDTH,0]},\'minzoom\':GLOBAL_MIN_ZOOM_HIGH},{// We put labels last to ensure prominence\n\'id\':\'labels-only-layer\',\'type\':\'raster\',\'source\':\'labels\',\'minzoom\':GLOBAL_MIN_ZOOM,\'maxzoom\':GLOBAL_MAX_ZOOM}]};};\n;// CONCATENATED MODULE: ./src/components/J40Map.module.scss\n// extracted by mini-css-extract-plugin\nvar mapAndInfoPanelContainer = "J40Map-module--mapAndInfoPanelContainer--q-ody";\nvar j40Popup = "J40Map-module--j40Popup--3yJGr";\nvar navigationControl = "J40Map-module--navigationControl--2Aybf";\nvar fullscreenControl = "J40Map-module--fullscreenControl--1UBKe";\nvar geolocateControl = "J40Map-module--geolocateControl--3KVAk";\nvar J40Map_module_mapInfoPanel = "J40Map-module--mapInfoPanel--F3jR4";\n;// CONCATENATED MODULE: ./src/components/J40Map.tsx\n/* eslint-disable no-unused-vars */ // External Libs:\n// Contexts:\n// Components:\n// Styles and constants\n;var J40Map=function J40Map(){var _useState=(0,react.useState)({latitude:DEFAULT_CENTER[0],longitude:DEFAULT_CENTER[1],zoom:GLOBAL_MIN_ZOOM}),viewport=_useState[0],setViewport=_useState[1];var _useState2=(0,react.useState)(),selectedFeature=_useState2[0],setSelectedFeature=_useState2[1];var _useState3=(0,react.useState)(),detailViewData=_useState3[0],setDetailViewData=_useState3[1];var _useState4=(0,react.useState)(false),transitionInProgress=_useState4[0],setTransitionInProgress=_useState4[1];var _useState5=(0,react.useState)(false),geolocationInProgress=_useState5[0],setGeolocationInProgress=_useState5[1];var _useState6=(0,react.useState)(false),isMobileMapState=_useState6[0],setIsMobileMapState=_useState6[1];var mapRef=(0,react.useRef)(null);var flags=(0,FlagContext/* useFlags */.Vb)();var onClick=function onClick(event){var feature=event.features&&event.features[0];if(feature){var _bbox=es(feature),minLng=_bbox[0],minLat=_bbox[1],maxLng=_bbox[2],maxLat=_bbox[3];var newViewPort=new WebMercatorViewport({height:viewport.height,width:viewport.width});var _newViewPort$fitBound=newViewPort.fitBounds([[minLng,minLat],[maxLng,maxLat]],{padding:40}),longitude=_newViewPort$fitBound.longitude,latitude=_newViewPort$fitBound.latitude,zoom=_newViewPort$fitBound.zoom;// If we\'ve selected a new feature, set \'selected\' to false\nif(selectedFeature&&feature.id!==selectedFeature.id){setMapSelected(selectedFeature,false);}setMapSelected(feature,true);var popupInfo={longitude:longitude,latitude:latitude,zoom:zoom,properties:feature.properties};goToPlace([[minLng,minLat],[maxLng,maxLat]]);setDetailViewData(popupInfo);}};var onLoad=function onLoad(){if(typeof window!==\'undefined\'&&window.Cypress&&mapRef.current){window.underlyingMap=mapRef.current.getMap();}if(main/* isMobile */.tq)setIsMobileMapState(true);};var goToPlace=function goToPlace(bounds){var _WebMercatorViewport$=new WebMercatorViewport({height:viewport.height,width:viewport.width}).fitBounds(bounds,{padding:20,offset:[0,-100]}),longitude=_WebMercatorViewport$.longitude,latitude=_WebMercatorViewport$.latitude,zoom=_WebMercatorViewport$.zoom;setViewport(Object.assign({},viewport,{longitude:longitude,latitude:latitude,zoom:zoom,transitionDuration:1000,transitionInterpolator:new ViewportFlyToInterpolator(),transitionEasing:cubicInOut}));};var setMapSelected=function setMapSelected(feature,isSelected){var _mapRef$current$getMa;// The below can be confirmed during debug with:\n// mapRef.current.getFeatureState({"id":feature.id, "source":feature.source, "sourceLayer":feature.sourceLayer})\nmapRef.current&&mapRef.current.getMap().setFeatureState({source:feature.source,sourceLayer:feature.sourceLayer,id:feature.id},(_mapRef$current$getMa={},_mapRef$current$getMa[SELECTED_PROPERTY]=isSelected,_mapRef$current$getMa));if(isSelected){setSelectedFeature(feature);}else{setSelectedFeature(undefined);}};var onClickTerritoryFocusButton=function onClickTerritoryFocusButton(event){var buttonID=event.target&&event.target.id;switch(buttonID){case\'48\':goToPlace(LOWER_48_BOUNDS);break;case\'AK\':goToPlace(ALASKA_BOUNDS);break;case\'HI\':goToPlace(HAWAII_BOUNDS);break;case\'PR\':goToPlace(PUERTO_RICO_BOUNDS);break;default:break;}};var onTransitionStart=function onTransitionStart(){setTransitionInProgress(true);};var onTransitionEnd=function onTransitionEnd(){setTransitionInProgress(false);};var onGeolocate=function onGeolocate(){setGeolocationInProgress(false);};var onClickGeolocate=function onClickGeolocate(){setGeolocationInProgress(true);};return/*#__PURE__*/react.createElement("div",{className:mapAndInfoPanelContainer},/*#__PURE__*/react.createElement(interactive_map,Object.assign({},viewport,{mapStyle:makeMapStyle(flags),minZoom:GLOBAL_MIN_ZOOM,maxZoom:GLOBAL_MAX_ZOOM,mapOptions:{hash:true},width:"100%",height:isMobileMapState?\'44vh\':\'100%\',dragRotate:false,touchRotate:false,interactiveLayerIds:[HIGH_SCORE_LAYER_NAME],onViewportChange:setViewport,onClick:onClick,onLoad:onLoad,onTransitionStart:onTransitionStart,onTransitionEnd:onTransitionEnd,ref:mapRef,"data-cy":\'reactMapGL\'}),\'fs\'in flags&&detailViewData&&!transitionInProgress&&/*#__PURE__*/react.createElement(popup,{className:j40Popup,tipSize:5,anchor:"top",longitude:detailViewData.longitude,latitude:detailViewData.latitude,closeOnClick:true,onClose:setDetailViewData,captureScroll:true},/*#__PURE__*/react.createElement(areaDetail,{properties:detailViewData.properties})),/*#__PURE__*/react.createElement(navigation_control,{showCompass:false,className:navigationControl}),\'gl\'in flags?/*#__PURE__*/react.createElement(geolocate_control,{className:geolocateControl,positionOptions:{enableHighAccuracy:true},onGeolocate:onGeolocate// @ts-ignore // Types have not caught up yet, see https://github.com/visgl/react-map-gl/issues/1492\n,onClick:onClickGeolocate}):\'\',geolocationInProgress?/*#__PURE__*/react.createElement("div",null,"Geolocation in progress..."):\'\',/*#__PURE__*/react.createElement(territoryFocusControl,{onClickTerritoryFocusButton:onClickTerritoryFocusButton}),\'fs\'in flags?/*#__PURE__*/react.createElement(fullscreen_control,{className:fullscreenControl}):\'\'),/*#__PURE__*/react.createElement(mapInfoPanel,{className:J40Map_module_mapInfoPanel,featureProperties:detailViewData===null||detailViewData===void 0?void 0:detailViewData.properties,selectedFeatureId:selectedFeature===null||selectedFeature===void 0?void 0:selectedFeature.id}));};/* harmony default export */ var components_J40Map = (J40Map);\n;// CONCATENATED MODULE: ./src/components/mapLegend.module.scss\n// extracted by mini-css-extract-plugin\nvar legendContainer = "mapLegend-module--legendContainer--2N1FC";\nvar swatchContainer = "mapLegend-module--swatchContainer--1yZX1";\nvar legendItem = "mapLegend-module--legendItem--WezUf";\nvar colorSwatch = "mapLegend-module--colorSwatch--oBUN2";\nvar mapLegend_module_prioritized = "mapLegend-module--prioritized--1I534";\nvar mapLegend_module_threshold = "mapLegend-module--threshold--1zali";\nvar mapLegend_module_nonPrioritized = "mapLegend-module--nonPrioritized--2y0Vm";\n;// CONCATENATED MODULE: ./src/components/mapLegend.tsx\nvar MapLegend=function MapLegend(){return/*#__PURE__*/react.createElement("div",{className:legendContainer},/*#__PURE__*/react.createElement("h3",{className:mapLegend_module_namespaceObject.legendHeader},"COLOR KEY"),/*#__PURE__*/react.createElement("div",{className:swatchContainer},/*#__PURE__*/react.createElement("div",{className:legendItem},/*#__PURE__*/react.createElement("div",{className:colorSwatch,id:mapLegend_module_prioritized}),/*#__PURE__*/react.createElement("span",null,"Prioritized Community")),/*#__PURE__*/react.createElement("div",{className:legendItem},/*#__PURE__*/react.createElement("div",{className:colorSwatch,id:mapLegend_module_threshold}),/*#__PURE__*/react.createElement("span",null,"Threshold Community")),/*#__PURE__*/react.createElement("div",{className:legendItem},/*#__PURE__*/react.createElement("div",{className:colorSwatch,id:mapLegend_module_nonPrioritized}),/*#__PURE__*/react.createElement("span",null,"Non-Prioritized Community"))));};/* harmony default export */ var mapLegend = (MapLegend);\n;// CONCATENATED MODULE: ./src/components/mapWrapper.tsx\nvar MapWrapper=function MapWrapper(){return/*#__PURE__*/react.createElement("section",null,/*#__PURE__*/react.createElement("h2",null,"Explore the Tool"),/*#__PURE__*/react.createElement(components_J40Map,null),/*#__PURE__*/react.createElement(mapLegend,null));};/* harmony default export */ var mapWrapper = (MapWrapper);\n;// CONCATENATED MODULE: ./src/components/HowYouCanHelp.module.scss\n// extracted by mini-css-extract-plugin\nvar howYouCanHelpContainer = "HowYouCanHelp-module--howYouCanHelpContainer--2kqBa";\n;// CONCATENATED MODULE: ./src/components/HowYouCanHelp.tsx\nvar HowYouCanHelp=function HowYouCanHelp(){return/*#__PURE__*/react.createElement("div",{className:howYouCanHelpContainer},/*#__PURE__*/react.createElement("h2",null,"How You Can Help Improve the Tool"),/*#__PURE__*/react.createElement("ul",{className:\'usa-list\'},/*#__PURE__*/react.createElement("li",null,"If you have information that could help, we\\u2019d love to hear from you."),/*#__PURE__*/react.createElement("li",null,"View our full set of data sources and methodology where you can add or download sources and check statuses on our data roadmap."),/*#__PURE__*/react.createElement("li",null,"Check out our timeline and send feedback or attend relevant events."),/*#__PURE__*/react.createElement("li",null,"Contact us and share the stories of your community.")));};/* harmony default export */ var components_HowYouCanHelp = (HowYouCanHelp);\n// EXTERNAL MODULE: ./node_modules/@trussworks/react-uswds/lib/index.js\nvar react_uswds_lib = __webpack_require__(2593);\n;// CONCATENATED MODULE: ./src/components/downloadPacket.module.scss\n// extracted by mini-css-extract-plugin\nvar downloadBoxContainer = "downloadPacket-module--downloadBoxContainer--IfYSI";\nvar downloadBox = "downloadPacket-module--downloadBox--23qAG";\nvar downloadBoxTextBox = "downloadPacket-module--downloadBoxTextBox--2C08I";\nvar downloadBoxTitle = "downloadPacket-module--downloadBoxTitle--2oQsR";\nvar downloadBoxText = "downloadPacket-module--downloadBoxText--s09H8";\nvar downloadBoxButtonContainer = "downloadPacket-module--downloadBoxButtonContainer--EBWUf";\nvar downloadBoxButton = "downloadPacket-module--downloadBoxButton--3w-ok";\nvar downloadPacketText = "downloadPacket-module--downloadPacketText--2MyEV";\n;// CONCATENATED MODULE: ./node_modules/uswds/dist/img/usa-icons/file_download.svg\n/* harmony default export */ var file_download = ("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXoiLz48L3N2Zz4=");\n;// CONCATENATED MODULE: ./src/components/downloadPacket.tsx\n// @ts-ignore\nvar cbgFileURL=\'https://justice40-data.s3.amazonaws.com/Score/usa.zip\';var DownloadPacket=function DownloadPacket(){return/*#__PURE__*/react.createElement("div",{className:downloadBoxContainer},/*#__PURE__*/react.createElement("div",{className:downloadBox},/*#__PURE__*/react.createElement("div",{className:downloadBoxTextBox},/*#__PURE__*/react.createElement("div",{className:downloadBoxTitle},"Just Progress Packet"),/*#__PURE__*/react.createElement("div",{className:downloadBoxText},"This downloadable packet includes the list of Just Progress prioritized communities (30,021 census block groups) and 18 datasets."),/*#__PURE__*/react.createElement("div",{className:downloadBoxButtonContainer},/*#__PURE__*/react.createElement("a",{id:\'download-link\',href:cbgFileURL},/*#__PURE__*/react.createElement(react_uswds_lib.Button,{className:downloadBoxButton,type:"button"},/*#__PURE__*/react.createElement("div",null,/*#__PURE__*/react.createElement("img",{src:file_download})," "),/*#__PURE__*/react.createElement("div",{className:downloadPacketText},"Download packet")))))));};/* harmony default export */ var downloadPacket = (DownloadPacket);\n;// CONCATENATED MODULE: ./src/pages/cejst.module.scss\n// extracted by mini-css-extract-plugin\nvar disclaimer = "cejst-module--disclaimer--3LC1y";\nvar textBox = "cejst-module--textBox--9wuDw";\n;// CONCATENATED MODULE: ./src/pages/cejst.tsx\nvar CEJSTPage=function CEJSTPage(_ref){var location=_ref.location;// We temporarily removed MapControls, which would enable you to `setFeatures` also, for now\n// We will bring back later when we have interactive controls.\nreturn/*#__PURE__*/react.createElement(layout/* default */.Z,{location:location},/*#__PURE__*/react.createElement("main",{id:"main-content",role:"main"},/*#__PURE__*/react.createElement("section",null,/*#__PURE__*/react.createElement("h2",null,"Just Progress communities"),/*#__PURE__*/react.createElement("div",{className:disclaimer},/*#__PURE__*/react.createElement("div",{className:textBox},/*#__PURE__*/react.createElement("p",null,"Just Progress helps identify and prioritize communities across the United States and U.S. territories that have been historically overburdened and underserved. These communities will receive 40% of the benefits from investments in key areas outlined by the \\xA0",/*#__PURE__*/react.createElement("a",{href:\'https://www.whitehouse.gov/briefing-room/\'+\'presidential-actions/2021/01/27/\'+\'executive-order-on-tackling-the-climate-\'+\'crisis-at-home-and-abroad/\',target:\'_blank\',rel:\'noreferrer\'},"Executive Order on Tackling the Climate Crisis at Home and Abroad"),"."),/*#__PURE__*/react.createElement("p",null,"Download the Just Progress packet or explore the map below to see the list of prioritized communites. To learn more about how these communities were prioritized check out the \\xA0",/*#__PURE__*/react.createElement("a",{href:\'./methodology\'},"Methodology"),"\\xA0 page.")),/*#__PURE__*/react.createElement(downloadPacket,null))),/*#__PURE__*/react.createElement(mapWrapper,null),/*#__PURE__*/react.createElement(components_HowYouCanHelp,null)));};/* harmony default export */ var cejst = (CEJSTPage);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzLmpzP2MzMWQiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHkuanM/YWRlMyIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hcnJheVdpdGhIb2xlcy5qcz8wZDIxIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzPzA5ZjAiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vbm9uSXRlcmFibGVSZXN0LmpzPzNkOGMiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheS5qcz8zODM1Iiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NsYXNzQ2FsbENoZWNrLmpzP2Q0ZWMiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY3JlYXRlQ2xhc3MuanM/YmVlMiIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9nbC1tYXRyaXgvZXNtL2NvbW1vbi5qcz9iOTNlIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL2dsLW1hdHJpeC9lc20vdmVjNC5qcz84OWJiIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL0BtYXRoLmdsL3dlYi1tZXJjYXRvci9kaXN0L2VzbS9tYXRoLXV0aWxzLmpzP2Q5MDYiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvZ2wtbWF0cml4L2VzbS9tYXQ0LmpzPzQ1ODkiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvZ2wtbWF0cml4L2VzbS92ZWMyLmpzPzFhNzEiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvZ2wtbWF0cml4L2VzbS92ZWMzLmpzPzg5MDIiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvQG1hdGguZ2wvd2ViLW1lcmNhdG9yL2Rpc3QvZXNtL2Fzc2VydC5qcz9hYTdhIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL0BtYXRoLmdsL3dlYi1tZXJjYXRvci9kaXN0L2VzbS93ZWItbWVyY2F0b3ItdXRpbHMuanM/NzM1MiIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AbWF0aC5nbC93ZWItbWVyY2F0b3IvZGlzdC9lc20vZml0LWJvdW5kcy5qcz84MTdlIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL0BtYXRoLmdsL3dlYi1tZXJjYXRvci9kaXN0L2VzbS9nZXQtYm91bmRzLmpzPzQwZjMiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvQG1hdGguZ2wvd2ViLW1lcmNhdG9yL2Rpc3QvZXNtL3dlYi1tZXJjYXRvci12aWV3cG9ydC5qcz8xYWQ2Iiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL0BtYXRoLmdsL3dlYi1tZXJjYXRvci9kaXN0L2VzbS9ub3JtYWxpemUtdmlld3BvcnQtcHJvcHMuanM/YzNkOCIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AbWF0aC5nbC93ZWItbWVyY2F0b3IvZGlzdC9lc20vZmx5LXRvLXZpZXdwb3J0LmpzPzNjMjgiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvQG1hdGguZ2wvd2ViLW1lcmNhdG9yL2Rpc3QvZXNtL2luZGV4LmpzP2U1YjMiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvdmlld3BvcnQtbWVyY2F0b3ItcHJvamVjdC9tb2R1bGUuanM/ZTI0NSIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9yZXNpemUtb2JzZXJ2ZXItcG9seWZpbGwvZGlzdC9SZXNpemVPYnNlcnZlci5lcy5qcz82ZmVhIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL3JlYWN0LW1hcC1nbC9kaXN0L2VzbS91dGlscy9nbG9iYWxzLmpzP2U3YWUiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvcmVhY3QtbWFwLWdsL2Rpc3QvZXNtL3V0aWxzL3N0eWxlLXV0aWxzLmpzP2UyZGEiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvcmVhY3QtbWFwLWdsL2Rpc3QvZXNtL21hcGJveC9tYXBib3guanM/OWM3ZCIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9yZWFjdC1tYXAtZ2wvZGlzdC9lc20vdXRpbHMvbWF0aC11dGlscy5qcz9mOTFhIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL3JlYWN0LW1hcC1nbC9kaXN0L2VzbS91dGlscy9hc3NlcnQuanM/ODA0NyIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9yZWFjdC1tYXAtZ2wvZGlzdC9lc20vdXRpbHMvbWFwLXN0YXRlLmpzPzRmYjEiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvcmVhY3QtbWFwLWdsL2Rpc3QvZXNtL3V0aWxzL21hcC1jb25zdHJhaW50cy5qcz8yMWNiIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL3JlYWN0LW1hcC1nbC9kaXN0L2VzbS9jb21wb25lbnRzL21hcC1jb250ZXh0LmpzP2M2N2EiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvcmVhY3QtbWFwLWdsL2Rpc3QvZXNtL3V0aWxzL3VzZS1pc29tb3JwaGljLWxheW91dC1lZmZlY3QuanM/NGY3MSIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9yZWFjdC1tYXAtZ2wvZGlzdC9lc20vdXRpbHMvdGVycmFpbi5qcz8xMDFiIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL3JlYWN0LW1hcC1nbC9kaXN0L2VzbS9jb21wb25lbnRzL3N0YXRpYy1tYXAuanM/NjhkMCIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9yZWFjdC1tYXAtZ2wvZGlzdC9lc20vdXRpbHMvdHJhbnNpdGlvbi90cmFuc2l0aW9uLWludGVycG9sYXRvci5qcz80YWQ0Iiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qcz8yNTdlIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzLmpzPzI2MmUiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcz85OWRlIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2dldFByb3RvdHlwZU9mLmpzPzdlODQiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvcmVhY3QtbWFwLWdsL2Rpc3QvZXNtL3V0aWxzL3RyYW5zaXRpb24vdHJhbnNpdGlvbi11dGlscy5qcz84ZDM2Iiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL3JlYWN0LW1hcC1nbC9kaXN0L2VzbS91dGlscy90cmFuc2l0aW9uL3ZpZXdwb3J0LWZseS10by1pbnRlcnBvbGF0b3IuanM/NDg3MiIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9yZWFjdC1tYXAtZ2wvZGlzdC9lc20vdXRpbHMvdHJhbnNpdGlvbi9saW5lYXItaW50ZXJwb2xhdG9yLmpzPzRiMGUiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvcmVhY3QtbWFwLWdsL2Rpc3QvZXNtL3V0aWxzL3RyYW5zaXRpb24vaW5kZXguanM/MmJiOSIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9yZWFjdC1tYXAtZ2wvZGlzdC9lc20vdXRpbHMvdHJhbnNpdGlvbi1tYW5hZ2VyLmpzP2MzMzQiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvbWpvbG5pci5qcy9kaXN0L2VzbS91dGlscy9oYW1tZXItb3ZlcnJpZGVzLmpzPzNjNzYiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvbWpvbG5pci5qcy9kaXN0L2VzbS91dGlscy9oYW1tZXIuYnJvd3Nlci5qcz9iNjk4Iiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL21qb2xuaXIuanMvZGlzdC9lc20vY29uc3RhbnRzLmpzP2Y0MjUiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvbWpvbG5pci5qcy9kaXN0L2VzbS91dGlscy9nbG9iYWxzLmpzP2UxNDEiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvbWpvbG5pci5qcy9kaXN0L2VzbS9pbnB1dHMvd2hlZWwtaW5wdXQuanM/MDUzZSIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9tam9sbmlyLmpzL2Rpc3QvZXNtL2lucHV0cy9tb3ZlLWlucHV0LmpzP2JiNDAiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvbWpvbG5pci5qcy9kaXN0L2VzbS9pbnB1dHMva2V5LWlucHV0LmpzPzQzMmEiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvbWpvbG5pci5qcy9kaXN0L2VzbS9pbnB1dHMvY29udGV4dG1lbnUtaW5wdXQuanM/NWVkMSIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9tam9sbmlyLmpzL2Rpc3QvZXNtL3V0aWxzL2V2ZW50LXV0aWxzLmpzPzI1NjIiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvbWpvbG5pci5qcy9kaXN0L2VzbS91dGlscy9ldmVudC1yZWdpc3RyYXIuanM/NDc1MyIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9tam9sbmlyLmpzL2Rpc3QvZXNtL2V2ZW50LW1hbmFnZXIuanM/ZDE3MSIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9yZWFjdC1tYXAtZ2wvZGlzdC9lc20vdXRpbHMvbWFwLWNvbnRyb2xsZXIuanM/MmM1MSIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9yZWFjdC1tYXAtZ2wvZGlzdC9lc20vY29tcG9uZW50cy9pbnRlcmFjdGl2ZS1tYXAuanM/ODZkYiIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9yZWFjdC1tYXAtZ2wvZGlzdC9lc20vY29tcG9uZW50cy9zb3VyY2UuanM/NmVlNCIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlLmpzP2NjYjUiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXMuanM/MTVmZCIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanM/NTNjYSIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9yZWFjdC1tYXAtZ2wvZGlzdC9lc20vdXRpbHMvZGVlcC1lcXVhbC5qcz82NTAyIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL3JlYWN0LW1hcC1nbC9kaXN0L2VzbS9jb21wb25lbnRzL2xheWVyLmpzPzlmZjciLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvcmVhY3QtbWFwLWdsL2Rpc3QvZXNtL2NvbXBvbmVudHMvdXNlLW1hcC1jb250cm9sLmpzPzgzYjciLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvcmVhY3QtbWFwLWdsL2Rpc3QvZXNtL2NvbXBvbmVudHMvYmFzZS1jb250cm9sLmpzP2MzNTciLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvcmVhY3QtbWFwLWdsL2Rpc3QvZXNtL2NvbXBvbmVudHMvZHJhZ2dhYmxlLWNvbnRyb2wuanM/MmY3NCIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9yZWFjdC1tYXAtZ2wvZGlzdC9lc20vdXRpbHMvY3Jpc3AtcGl4ZWwuanM/ODhhZCIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9yZWFjdC1tYXAtZ2wvZGlzdC9lc20vY29tcG9uZW50cy9tYXJrZXIuanM/MDA4ZCIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9yZWFjdC1tYXAtZ2wvZGlzdC9lc20vdXRpbHMvZHluYW1pYy1wb3NpdGlvbi5qcz9hZDM5Iiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL3JlYWN0LW1hcC1nbC9kaXN0L2VzbS9jb21wb25lbnRzL3BvcHVwLmpzPzk5MzYiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvcmVhY3QtbWFwLWdsL2Rpc3QvZXNtL2NvbXBvbmVudHMvYXR0cmlidXRpb24tY29udHJvbC5qcz8yMzEyIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL3JlYWN0LW1hcC1nbC9kaXN0L2VzbS9jb21wb25lbnRzL2Z1bGxzY3JlZW4tY29udHJvbC5qcz8xMDM2Iiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL3JlYWN0LW1hcC1nbC9kaXN0L2VzbS91dGlscy9nZW9sb2NhdGUtdXRpbHMuanM/ZDM2YiIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9yZWFjdC1tYXAtZ2wvZGlzdC9lc20vY29tcG9uZW50cy9nZW9sb2NhdGUtY29udHJvbC5qcz9hYzMwIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL3JlYWN0LW1hcC1nbC9kaXN0L2VzbS91dGlscy92ZXJzaW9uLmpzP2IyNzgiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvcmVhY3QtbWFwLWdsL2Rpc3QvZXNtL2NvbXBvbmVudHMvbmF2aWdhdGlvbi1jb250cm9sLmpzP2ExYzUiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvcmVhY3QtbWFwLWdsL2Rpc3QvZXNtL2NvbXBvbmVudHMvc2NhbGUtY29udHJvbC5qcz9lNzIwIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL3JlYWN0LW1hcC1nbC9kaXN0L2VzbS9vdmVybGF5cy9jYW52YXMtb3ZlcmxheS5qcz84NTMzIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL3JlYWN0LW1hcC1nbC9kaXN0L2VzbS9vdmVybGF5cy9odG1sLW92ZXJsYXkuanM/Y2Q3ZCIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9yZWFjdC1tYXAtZ2wvZGlzdC9lc20vb3ZlcmxheXMvc3ZnLW92ZXJsYXkuanM/OGU1MCIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9yZWFjdC1tYXAtZ2wvZGlzdC9lc20vdXRpbHMvc2V0LXJ0bC10ZXh0LXBsdWdpbi5qcz8wMGNmIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL3JlYWN0LW1hcC1nbC9kaXN0L2VzbS9pbmRleC5qcz9jMWIzIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL0B0dXJmL2hlbHBlcnMvZGlzdC9lcy9pbmRleC5qcz8yOTI1Iiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL0B0dXJmL21ldGEvZGlzdC9lcy9pbmRleC5qcz80ZTU4Iiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL0B0dXJmL2Jib3gvZGlzdC9lcy9pbmRleC5qcz9jZTFjIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL2QzLWVhc2Uvc3JjL2N1YmljLmpzP2U0MmQiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9zcmMvY29tcG9uZW50cy90ZXJyaXRvcnlGb2N1c0NvbnRyb2wubW9kdWxlLnNjc3M/MDAwYyIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL3NyYy9jb21wb25lbnRzL3RlcnJpdG9yeUZvY3VzQ29udHJvbC50c3g/MTRlNSIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy91c3dkcy9kaXN0L2ltZy91c2EtaWNvbnMvbGlnaHRidWxiX291dGxpbmUuc3ZnPzg0YWYiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9zcmMvY29tcG9uZW50cy9tYXBJbnRyb2R1Y3Rpb24ubW9kdWxlLnNjc3M/YWE4NiIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL3NyYy9jb21wb25lbnRzL21hcEludHJvZHVjdGlvbi50c3g/MmJkMiIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL3NyYy9jb21wb25lbnRzL2FyZWFEZXRhaWwubW9kdWxlLnNjc3M/NGM3MCIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL3NyYy9kYXRhL2NvbnN0YW50cy50c3g/YmU1YSIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL3NyYy9jb21wb25lbnRzL2FyZWFEZXRhaWwudHN4PzI5NTciLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9zcmMvY29tcG9uZW50cy9tYXBJbmZvUGFuZWwudHN4Pzg4NDMiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9zcmMvZGF0YS9tYXBTdHlsZS50c3g/OWQ5NiIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL3NyYy9jb21wb25lbnRzL0o0ME1hcC5tb2R1bGUuc2Nzcz9iN2RiIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vc3JjL2NvbXBvbmVudHMvSjQwTWFwLnRzeD9hZjc3Iiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vc3JjL2NvbXBvbmVudHMvbWFwTGVnZW5kLm1vZHVsZS5zY3NzP2JjYmMiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9zcmMvY29tcG9uZW50cy9tYXBMZWdlbmQudHN4PzgxNjEiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9zcmMvY29tcG9uZW50cy9tYXBXcmFwcGVyLnRzeD8xNWI4Iiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vc3JjL2NvbXBvbmVudHMvSG93WW91Q2FuSGVscC5tb2R1bGUuc2Nzcz9jY2NiIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vc3JjL2NvbXBvbmVudHMvSG93WW91Q2FuSGVscC50c3g/OTBiNCIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL3NyYy9jb21wb25lbnRzL2Rvd25sb2FkUGFja2V0Lm1vZHVsZS5zY3NzP2JiODMiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvdXN3ZHMvZGlzdC9pbWcvdXNhLWljb25zL2ZpbGVfZG93bmxvYWQuc3ZnPzIyNzkiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9zcmMvY29tcG9uZW50cy9kb3dubG9hZFBhY2tldC50c3g/Nzk4MiIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL3NyYy9wYWdlcy9jZWpzdC5tb2R1bGUuc2Nzcz82MWUzIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vc3JjL3BhZ2VzL2NlanN0LnRzeD9lMWRmIl0sIm5hbWVzIjpbIlRlcnJpdG9yeUZvY3VzQ29udHJvbCIsIm9uQ2xpY2tUZXJyaXRvcnlGb2N1c0J1dHRvbiIsImludGwiLCJ1c2VJbnRsIiwidXNlTWFwQ29udHJvbCIsIm9uQ2xpY2siLCJjb250YWluZXJSZWYiLCJ0ZXJyaXRvcmllcyIsInNob3J0IiwiZm9ybWF0TWVzc2FnZSIsImlkIiwiZGVmYXVsdE1lc3NhZ2UiLCJkZXNjcmlwdGlvbiIsImxvbmciLCJzdHlsZXMiLCJtYXAiLCJ0ZXJyaXRvcnkiLCJNYXBJbnRyb2R1Y3Rpb24iLCJtZXNzYWdlcyIsImRlZmluZU1lc3NhZ2VzIiwibWFwSW50cm9IZWFkZXIiLCJkaWRZb3VLbm93IiwiY2Vuc3VzQmxvY2tHcm91cERlZmluaXRpb24iLCJsaWdodGJ1bGJJY29uIiwiRkVBVFVSRV9USUxFX0JBU0VfVVJMIiwiWFlaX1NVRkZJWCIsImZlYXR1cmVVUkxGb3JUaWxlc2V0TmFtZSIsInRpbGVzZXROYW1lIiwiRkVBVFVSRV9USUxFX0hJR0hfWk9PTV9VUkwiLCJGRUFUVVJFX1RJTEVfTE9XX1pPT01fVVJMIiwiUEVSRk9STUFOQ0VfTUFSS0VSX01BUF9JRExFIiwiU0NPUkVfUFJPUEVSVFlfSElHSCIsIlNDT1JFX1BST1BFUlRZX0xPVyIsIkdFT0lEX1BST1BFUlRZIiwiSElHSF9TQ09SRV9TT1VSQ0VfTkFNRSIsIkhJR0hfU0NPUkVfTEFZRVJfTkFNRSIsIkxPV19TQ09SRV9TT1VSQ0VfTkFNRSIsIkxPV19TQ09SRV9MQVlFUl9OQU1FIiwiU0VMRUNURURfUFJPUEVSVFkiLCJQT1ZFUlRZX1BST1BFUlRZX1BFUkNFTlRJTEUiLCJIT1VTSU5HX0JVUkRFTl9QUk9QRVJUWV9QRVJDRU5USUxFIiwiTElOR1VJU1RJQ19JU09MQVRJT05fUFJPUEVSVFlfUEVSQ0VOVElMRSIsIlVORU1QTE9ZTUVOVF9QUk9QRVJUWV9QRVJDRU5USUxFIiwiVE9UQUxfUE9QVUxBVElPTiIsIkVEVUNBVElPTl9QUk9QRVJUWV9QRVJDRU5USUxFIiwiU0NPUkVfU09VUkNFX0xBWUVSIiwiR0xPQkFMX01JTl9aT09NIiwiR0xPQkFMX01BWF9aT09NIiwiR0xPQkFMX01JTl9aT09NX0xPVyIsIkdMT0JBTF9NQVhfWk9PTV9MT1ciLCJHTE9CQUxfTUlOX1pPT01fSElHSExJR0hUIiwiR0xPQkFMX01BWF9aT09NX0hJR0hMSUdIVCIsIkdMT0JBTF9NSU5fWk9PTV9ISUdIIiwiR0xPQkFMX01BWF9aT09NX0hJR0giLCJHTE9CQUxfTUFYX0JPVU5EUyIsIkxPV0VSXzQ4X0JPVU5EUyIsIkFMQVNLQV9CT1VORFMiLCJIQVdBSUlfQk9VTkRTIiwiUFVFUlRPX1JJQ09fQk9VTkRTIiwiR1VBTV9CT1VORFMiLCJNQVJJQU5BX0lTTEFORF9CT1VORFMiLCJBTUVSSUNBTl9TQU1PQV9CT1VORFMiLCJERUZBVUxUX0NFTlRFUiIsIkRFRkFVTFRfTEFZRVJfT1BBQ0lUWSIsIkRFRkFVTFRfT1VUTElORV9DT0xPUiIsIk1JTl9DT0xPUiIsIk1FRF9DT0xPUiIsIk1BWF9DT0xPUiIsIkJPUkRFUl9ISUdITElHSFRfQ09MT1IiLCJISUdITElHSFRfQk9SREVSX1dJRFRIIiwiU0NPUkVfQk9VTkRBUllfTE9XIiwiU0NPUkVfQk9VTkRBUllfVEhSRVNIT0xEIiwiU0NPUkVfQk9VTkRBUllfUFJJT1JJVElaRUQiLCJpc01vYmlsZSIsImlzTW9iaWxlUmVhY3REZXZpY2VEZXRlY3QiLCJyZWFkYWJsZVBlcmNlbnQiLCJwZXJjZW50IiwidG9GaXhlZCIsImdldENhdGVnb3JpemF0aW9uIiwicGVyY2VudGlsZSIsImNhdGVnb3JpemF0aW9uIiwiY2F0ZWdvcnlDaXJjbGVTdHlsZSIsImNvbnN0YW50cyIsIkFyZWFEZXRhaWwiLCJwcm9wZXJ0aWVzIiwiY3VtdWxhdGl2ZUluZGV4U2NvcmUiLCJjZW5zdXNCbG9ja0dyb3VwIiwiY291bnR5Iiwic3RhdGUiLCJwb3B1bGF0aW9uIiwiaW5kaWNhdG9yQ29sdW1uSGVhZGVyIiwicGVyY2VudGlsZUNvbHVtbkhlYWRlciIsInBvdmVydHkiLCJlZHVjYXRpb24iLCJsaW5ndWlzdGljSXNvbGF0aW9uIiwidW5lbXBsb3ltZW50IiwiaG91c2VCdXJkZW4iLCJzY29yZSIsImJsb2NrR3JvdXAiLCJwb3ZlcnR5SW5mbyIsImxhYmVsIiwidmFsdWUiLCJlZHVJbmZvIiwibGluSXNvSW5mbyIsInVtZW1wbG95SW5mbyIsImluZGljYXRvcnMiLCJ0b0xvY2FsZVN0cmluZyIsImluZGljYXRvciIsImluZGV4IiwiTWFwSW5mb1BhbmVsIiwiY2xhc3NOYW1lIiwiZmVhdHVyZVByb3BlcnRpZXMiLCJzZWxlY3RlZEZlYXR1cmVJZCIsImhleFRvSFNMQSIsImhleCIsImFscGhhIiwiY2hyb21hIiwiY3NzIiwibWFrZVBhaW50IiwiZmllbGQiLCJtaW5SYW1wIiwibWVkUmFtcCIsIm1heFJhbXAiLCJwYWludERlc2NyaXB0b3IiLCJpbWFnZVN1ZmZpeCIsIm1ha2VNYXBTdHlsZSIsImZsYWdDb250YWluZXIiLCJKNDBNYXAiLCJ1c2VTdGF0ZSIsImxhdGl0dWRlIiwibG9uZ2l0dWRlIiwiem9vbSIsInZpZXdwb3J0Iiwic2V0Vmlld3BvcnQiLCJzZWxlY3RlZEZlYXR1cmUiLCJzZXRTZWxlY3RlZEZlYXR1cmUiLCJkZXRhaWxWaWV3RGF0YSIsInNldERldGFpbFZpZXdEYXRhIiwidHJhbnNpdGlvbkluUHJvZ3Jlc3MiLCJzZXRUcmFuc2l0aW9uSW5Qcm9ncmVzcyIsImdlb2xvY2F0aW9uSW5Qcm9ncmVzcyIsInNldEdlb2xvY2F0aW9uSW5Qcm9ncmVzcyIsImlzTW9iaWxlTWFwU3RhdGUiLCJzZXRJc01vYmlsZU1hcFN0YXRlIiwibWFwUmVmIiwidXNlUmVmIiwiZmxhZ3MiLCJ1c2VGbGFncyIsImV2ZW50IiwiZmVhdHVyZSIsImZlYXR1cmVzIiwiYmJveCIsIm1pbkxuZyIsIm1pbkxhdCIsIm1heExuZyIsIm1heExhdCIsIm5ld1ZpZXdQb3J0IiwiV2ViTWVyY2F0b3JWaWV3cG9ydCIsImhlaWdodCIsIndpZHRoIiwiZml0Qm91bmRzIiwicGFkZGluZyIsInNldE1hcFNlbGVjdGVkIiwicG9wdXBJbmZvIiwiZ29Ub1BsYWNlIiwib25Mb2FkIiwid2luZG93IiwiQ3lwcmVzcyIsImN1cnJlbnQiLCJ1bmRlcmx5aW5nTWFwIiwiZ2V0TWFwIiwiYm91bmRzIiwib2Zmc2V0IiwidHJhbnNpdGlvbkR1cmF0aW9uIiwidHJhbnNpdGlvbkludGVycG9sYXRvciIsIkZseVRvSW50ZXJwb2xhdG9yIiwidHJhbnNpdGlvbkVhc2luZyIsImQzIiwiaXNTZWxlY3RlZCIsInNldEZlYXR1cmVTdGF0ZSIsInNvdXJjZSIsInNvdXJjZUxheWVyIiwidW5kZWZpbmVkIiwiYnV0dG9uSUQiLCJ0YXJnZXQiLCJvblRyYW5zaXRpb25TdGFydCIsIm9uVHJhbnNpdGlvbkVuZCIsIm9uR2VvbG9jYXRlIiwib25DbGlja0dlb2xvY2F0ZSIsImhhc2giLCJlbmFibGVIaWdoQWNjdXJhY3kiLCJNYXBMZWdlbmQiLCJNYXBXcmFwcGVyIiwiSG93WW91Q2FuSGVscCIsImNiZ0ZpbGVVUkwiLCJEb3dubG9hZFBhY2tldCIsImRvd25sb2FkSWNvbiIsIkNFSlNUUGFnZSIsImxvY2F0aW9uIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFlO0FBQ2Y7QUFDQSxtQkFBbUIsc0JBQXNCO0FBQ3pDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsQzs7OztBQ2hCZSxTQUFTLDZCQUFlO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBLEM7Ozs7QUNiZTtBQUNmO0FBQ0EsQzs7QUNGZTtBQUNmOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsMkJBQTJCLCtCQUErQjtBQUMxRDs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDOzs7O0FDNUJlO0FBQ2Y7QUFDQSxDOztBQ0ZpRDtBQUNZO0FBQ1k7QUFDdEI7QUFDcEMsU0FBUywyQkFBYztBQUN0QyxTQUFTLGVBQWMsU0FBUyxxQkFBb0IsWUFBWSw2Q0FBMEIsWUFBWSxnQkFBZTtBQUNySCxDOztBQ05lO0FBQ2Y7QUFDQTtBQUNBO0FBQ0EsQzs7QUNKQTtBQUNBLGlCQUFpQixrQkFBa0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWU7QUFDZjtBQUNBO0FBQ0E7QUFDQSxDOzs7O0FDZDBDOztBQUUxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDQTtBQUNBO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsV0FBVywyQ0FBMkM7QUFDdEQ7O0FBRU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEI7O0FBRU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsYUFBYSxRQUFRO0FBQ3JCOztBQUVPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFOztBQ25EMEM7QUFDRjtBQUN4QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLEtBQUs7QUFDbEI7O0FBRU87QUFDUCxnQkFBZ0IsVUFBbUI7O0FBRW5DLE1BQU0sVUFBbUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxhQUFhO0FBQ3hCLGFBQWEsS0FBSztBQUNsQjs7QUFFTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLGFBQWEsS0FBSztBQUNsQjs7QUFFTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFdBQVcsYUFBYTtBQUN4QixhQUFhLEtBQUs7QUFDbEI7O0FBRU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLGFBQWEsS0FBSztBQUNsQjs7QUFFTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixXQUFXLGFBQWE7QUFDeEIsV0FBVyxhQUFhO0FBQ3hCLGFBQWEsS0FBSztBQUNsQjs7QUFFTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixXQUFXLGFBQWE7QUFDeEIsV0FBVyxhQUFhO0FBQ3hCLGFBQWEsS0FBSztBQUNsQjs7QUFFTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixXQUFXLGFBQWE7QUFDeEIsV0FBVyxhQUFhO0FBQ3hCLGFBQWEsS0FBSztBQUNsQjs7QUFFTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixXQUFXLGFBQWE7QUFDeEIsV0FBVyxhQUFhO0FBQ3hCLGFBQWEsS0FBSztBQUNsQjs7QUFFTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixXQUFXLGFBQWE7QUFDeEIsYUFBYSxLQUFLO0FBQ2xCOztBQUVPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFdBQVcsYUFBYTtBQUN4QixhQUFhLEtBQUs7QUFDbEI7O0FBRU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsV0FBVyxhQUFhO0FBQ3hCLFdBQVcsYUFBYTtBQUN4QixhQUFhLEtBQUs7QUFDbEI7O0FBRU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsV0FBVyxhQUFhO0FBQ3hCLFdBQVcsYUFBYTtBQUN4QixhQUFhLEtBQUs7QUFDbEI7O0FBRU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsV0FBVyxhQUFhO0FBQ3hCLGFBQWEsS0FB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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixhQUFhLEtBQUs7QUFDbEI7O0FBRU8sU0FBUyxlQUFVO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixhQUFhLEtBQUs7QUFDbEI7O0FBRU8sU0FBUyxRQUFHO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFdBQVcsYUFBYTtBQUN4QjtBQUNBLGFBQWEsS0FBSztBQUNsQjs7QUFFTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLGFBQWEsS0FBSztBQUNsQjs7QUFFTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixhQUFhLEtBQUs7QUFDbEI7O0FBRU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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QUFLLFNBQVMsQ0FBRUEsT0FBaEIsZUFDRSxrVEFLRSx5QkFDRSxJQUFJLENBQUUsNENBQ0osa0NBREksQ0FFSiwwQ0FGSSxDQUdKLDRCQUpKLENBS0UsTUFBTSxDQUFFLFFBTFYsQ0FNRSxHQUFHLENBQUUsWUFOUCxzRUFMRixLQURGLGNBZ0JFLGdPQUlFLHlCQUNFLElBQUksQ0FBRSxlQURSLGdCQUpGLGNBaEJGLENBREYsY0E2QkUsb0JBQUMsY0FBRCxNQTdCRixDQUZGLENBRkYsY0FvQ0Usb0JBQUMsVUFBRCxNQXBDRixjQXFDRSxvQkFBQyx3QkFBRCxNQXJDRixDQURGLENBREYsQ0EyQ0QsQ0E5Q0QsQ0FnREEsMENBQWV1TCxTQUFmIiwiZmlsZSI6IjkzMzguanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfZXh0ZW5kcygpIHtcbiAgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTtcblxuICAgICAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9O1xuXG4gIHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHtcbiAgaWYgKGtleSBpbiBvYmopIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9ialtrZXldID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gb2JqO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7XG4gIHZhciBfaSA9IGFyciA9PSBudWxsID8gbnVsbCA6IHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgYXJyW1N5bWJvbC5pdGVyYXRvcl0gfHwgYXJyW1wiQEBpdGVyYXRvclwiXTtcblxuICBpZiAoX2kgPT0gbnVsbCkgcmV0dXJuO1xuICB2YXIgX2FyciA9IFtdO1xuICB2YXIgX24gPSB0cnVlO1xuICB2YXIgX2QgPSBmYWxzZTtcblxuICB2YXIgX3MsIF9lO1xuXG4gIHRyeSB7XG4gICAgZm9yIChfaSA9IF9pLmNhbGwoYXJyKTsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkge1xuICAgICAgX2Fyci5wdXNoKF9zLnZhbHVlKTtcblxuICAgICAgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgX2QgPSB0cnVlO1xuICAgIF9lID0gZXJyO1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChfZCkgdGhyb3cgX2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIF9hcnI7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn0iLCJpbXBvcnQgYXJyYXlXaXRoSG9sZXMgZnJvbSBcIi4vYXJyYXlXaXRoSG9sZXMuanNcIjtcbmltcG9ydCBpdGVyYWJsZVRvQXJyYXlMaW1pdCBmcm9tIFwiLi9pdGVyYWJsZVRvQXJyYXlMaW1pdC5qc1wiO1xuaW1wb3J0IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IGZyb20gXCIuL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzXCI7XG5pbXBvcnQgbm9uSXRlcmFibGVSZXN0IGZyb20gXCIuL25vbkl0ZXJhYmxlUmVzdC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7XG4gIHJldHVybiBhcnJheVdpdGhIb2xlcyhhcnIpIHx8IGl0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyLCBpKSB8fCBub25JdGVyYWJsZVJlc3QoKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgfVxufSIsImZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn0iLCJpbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMubWF0aC5oeXBvdC5qc1wiO1xuXG4vKipcclxuICogQ29tbW9uIHV0aWxpdGllc1xyXG4gKiBAbW9kdWxlIGdsTWF0cml4XHJcbiAqL1xuLy8gQ29uZmlndXJhdGlvbiBDb25zdGFudHNcbmV4cG9ydCB2YXIgRVBTSUxPTiA9IDAuMDAwMDAxO1xuZXhwb3J0IHZhciBBUlJBWV9UWVBFID0gdHlwZW9mIEZsb2F0MzJBcnJheSAhPT0gJ3VuZGVmaW5lZCcgPyBGbG9hdDMyQXJyYXkgOiBBcnJheTtcbmV4cG9ydCB2YXIgUkFORE9NID0gTWF0aC5yYW5kb207XG4vKipcclxuICogU2V0cyB0aGUgdHlwZSBvZiBhcnJheSB1c2VkIHdoZW4gY3JlYXRpbmcgbmV3IHZlY3RvcnMgYW5kIG1hdHJpY2VzXHJcbiAqXHJcbiAqIEBwYXJhbSB7RmxvYXQzMkFycmF5Q29uc3RydWN0b3IgfCBBcnJheUNvbnN0cnVjdG9yfSB0eXBlIEFycmF5IHR5cGUsIHN1Y2ggYXMgRmxvYXQzMkFycmF5IG9yIEFycmF5XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc2V0TWF0cml4QXJyYXlUeXBlKHR5cGUpIHtcbiAgQVJSQVlfVFlQRSA9IHR5cGU7XG59XG52YXIgZGVncmVlID0gTWF0aC5QSSAvIDE4MDtcbi8qKlxyXG4gKiBDb252ZXJ0IERlZ3JlZSBUbyBSYWRpYW5cclxuICpcclxuICogQHBhcmFtIHtOdW1iZXJ9IGEgQW5nbGUgaW4gRGVncmVlc1xyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHRvUmFkaWFuKGEpIHtcbiAgcmV0dXJuIGEgKiBkZWdyZWU7XG59XG4vKipcclxuICogVGVzdHMgd2hldGhlciBvciBub3QgdGhlIGFyZ3VtZW50cyBoYXZlIGFwcHJveGltYXRlbHkgdGhlIHNhbWUgdmFsdWUsIHdpdGhpbiBhbiBhYnNvbHV0ZVxyXG4gKiBvciByZWxhdGl2ZSB0b2xlcmFuY2Ugb2YgZ2xNYXRyaXguRVBTSUxPTiAoYW4gYWJzb2x1dGUgdG9sZXJhbmNlIGlzIHVzZWQgZm9yIHZhbHVlcyBsZXNzXHJcbiAqIHRoYW4gb3IgZXF1YWwgdG8gMS4wLCBhbmQgYSByZWxhdGl2ZSB0b2xlcmFuY2UgaXMgdXNlZCBmb3IgbGFyZ2VyIHZhbHVlcylcclxuICpcclxuICogQHBhcmFtIHtOdW1iZXJ9IGEgVGhlIGZpcnN0IG51bWJlciB0byB0ZXN0LlxyXG4gKiBAcGFyYW0ge051bWJlcn0gYiBUaGUgc2Vjb25kIG51bWJlciB0byB0ZXN0LlxyXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gVHJ1ZSBpZiB0aGUgbnVtYmVycyBhcmUgYXBwcm94aW1hdGVseSBlcXVhbCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWFscyhhLCBiKSB7XG4gIHJldHVybiBNYXRoLmFicyhhIC0gYikgPD0gRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYSksIE1hdGguYWJzKGIpKTtcbn1cbmlmICghTWF0aC5oeXBvdCkgTWF0aC5oeXBvdCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHkgPSAwLFxuICAgICAgaSA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cbiAgd2hpbGUgKGktLSkge1xuICAgIHkgKz0gYXJndW1lbnRzW2ldICogYXJndW1lbnRzW2ldO1xuICB9XG5cbiAgcmV0dXJuIE1hdGguc3FydCh5KTtcbn07IiwiaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLm1hdGguaHlwb3QuanNcIjtcbmltcG9ydCAqIGFzIGdsTWF0cml4IGZyb20gXCIuL2NvbW1vbi5qc1wiO1xuLyoqXHJcbiAqIDQgRGltZW5zaW9uYWwgVmVjdG9yXHJcbiAqIEBtb2R1bGUgdmVjNFxyXG4gKi9cblxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcsIGVtcHR5IHZlYzRcclxuICpcclxuICogQHJldHVybnMge3ZlYzR9IGEgbmV3IDREIHZlY3RvclxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgdmFyIG91dCA9IG5ldyBnbE1hdHJpeC5BUlJBWV9UWVBFKDQpO1xuXG4gIGlmIChnbE1hdHJpeC5BUlJBWV9UWVBFICE9IEZsb2F0MzJBcnJheSkge1xuICAgIG91dFswXSA9IDA7XG4gICAgb3V0WzFdID0gMDtcbiAgICBvdXRbMl0gPSAwO1xuICAgIG91dFszXSA9IDA7XG4gIH1cblxuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgdmVjNCBpbml0aWFsaXplZCB3aXRoIHZhbHVlcyBmcm9tIGFuIGV4aXN0aW5nIHZlY3RvclxyXG4gKlxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjNH0gYSB2ZWN0b3IgdG8gY2xvbmVcclxuICogQHJldHVybnMge3ZlYzR9IGEgbmV3IDREIHZlY3RvclxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNsb25lKGEpIHtcbiAgdmFyIG91dCA9IG5ldyBnbE1hdHJpeC5BUlJBWV9UWVBFKDQpO1xuICBvdXRbMF0gPSBhWzBdO1xuICBvdXRbMV0gPSBhWzFdO1xuICBvdXRbMl0gPSBhWzJdO1xuICBvdXRbM10gPSBhWzNdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgdmVjNCBpbml0aWFsaXplZCB3aXRoIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHtOdW1iZXJ9IHggWCBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHkgWSBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHogWiBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHcgVyBjb21wb25lbnRcclxuICogQHJldHVybnMge3ZlYzR9IGEgbmV3IDREIHZlY3RvclxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21WYWx1ZXMoeCwgeSwgeiwgdykge1xuICB2YXIgb3V0ID0gbmV3IGdsTWF0cml4LkFSUkFZX1RZUEUoNCk7XG4gIG91dFswXSA9IHg7XG4gIG91dFsxXSA9IHk7XG4gIG91dFsyXSA9IHo7XG4gIG91dFszXSA9IHc7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ29weSB0aGUgdmFsdWVzIGZyb20gb25lIHZlYzQgdG8gYW5vdGhlclxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjNH0gYSB0aGUgc291cmNlIHZlY3RvclxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY29weShvdXQsIGEpIHtcbiAgb3V0WzBdID0gYVswXTtcbiAgb3V0WzFdID0gYVsxXTtcbiAgb3V0WzJdID0gYVsyXTtcbiAgb3V0WzNdID0gYVszXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBTZXQgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWM0IHRvIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtOdW1iZXJ9IHggWCBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHkgWSBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHogWiBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHcgVyBjb21wb25lbnRcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNldChvdXQsIHgsIHksIHosIHcpIHtcbiAgb3V0WzBdID0geDtcbiAgb3V0WzFdID0geTtcbiAgb3V0WzJdID0gejtcbiAgb3V0WzNdID0gdztcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBBZGRzIHR3byB2ZWM0J3NcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBhZGQob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IGFbMF0gKyBiWzBdO1xuICBvdXRbMV0gPSBhWzFdICsgYlsxXTtcbiAgb3V0WzJdID0gYVsyXSArIGJbMl07XG4gIG91dFszXSA9IGFbM10gKyBiWzNdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFN1YnRyYWN0cyB2ZWN0b3IgYiBmcm9tIHZlY3RvciBhXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWM0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc3VidHJhY3Qob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IGFbMF0gLSBiWzBdO1xuICBvdXRbMV0gPSBhWzFdIC0gYlsxXTtcbiAgb3V0WzJdID0gYVsyXSAtIGJbMl07XG4gIG91dFszXSA9IGFbM10gLSBiWzNdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIE11bHRpcGxpZXMgdHdvIHZlYzQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjNH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjNH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG11bHRpcGx5KG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdICogYlswXTtcbiAgb3V0WzFdID0gYVsxXSAqIGJbMV07XG4gIG91dFsyXSA9IGFbMl0gKiBiWzJdO1xuICBvdXRbM10gPSBhWzNdICogYlszXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBEaXZpZGVzIHR3byB2ZWM0J3NcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBkaXZpZGUob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IGFbMF0gLyBiWzBdO1xuICBvdXRbMV0gPSBhWzFdIC8gYlsxXTtcbiAgb3V0WzJdID0gYVsyXSAvIGJbMl07XG4gIG91dFszXSA9IGFbM10gLyBiWzNdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIE1hdGguY2VpbCB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzRcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzR9IGEgdmVjdG9yIHRvIGNlaWxcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNlaWwob3V0LCBhKSB7XG4gIG91dFswXSA9IE1hdGguY2VpbChhWzBdKTtcbiAgb3V0WzFdID0gTWF0aC5jZWlsKGFbMV0pO1xuICBvdXRbMl0gPSBNYXRoLmNlaWwoYVsyXSk7XG4gIG91dFszXSA9IE1hdGguY2VpbChhWzNdKTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBNYXRoLmZsb29yIHRoZSBjb21wb25lbnRzIG9mIGEgdmVjNFxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjNH0gYSB2ZWN0b3IgdG8gZmxvb3JcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZsb29yKG91dCwgYSkge1xuICBvdXRbMF0gPSBNYXRoLmZsb29yKGFbMF0pO1xuICBvdXRbMV0gPSBNYXRoLmZsb29yKGFbMV0pO1xuICBvdXRbMl0gPSBNYXRoLmZsb29yKGFbMl0pO1xuICBvdXRbM10gPSBNYXRoLmZsb29yKGFbM10pO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJldHVybnMgdGhlIG1pbmltdW0gb2YgdHdvIHZlYzQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjNH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjNH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG1pbihvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gTWF0aC5taW4oYVswXSwgYlswXSk7XG4gIG91dFsxXSA9IE1hdGgubWluKGFbMV0sIGJbMV0pO1xuICBvdXRbMl0gPSBNYXRoLm1pbihhWzJdLCBiWzJdKTtcbiAgb3V0WzNdID0gTWF0aC5taW4oYVszXSwgYlszXSk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUmV0dXJucyB0aGUgbWF4aW11bSBvZiB0d28gdmVjNCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWM0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbWF4KG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBNYXRoLm1heChhWzBdLCBiWzBdKTtcbiAgb3V0WzFdID0gTWF0aC5tYXgoYVsxXSwgYlsxXSk7XG4gIG91dFsyXSA9IE1hdGgubWF4KGFbMl0sIGJbMl0pO1xuICBvdXRbM10gPSBNYXRoLm1heChhWzNdLCBiWzNdKTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBNYXRoLnJvdW5kIHRoZSBjb21wb25lbnRzIG9mIGEgdmVjNFxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjNH0gYSB2ZWN0b3IgdG8gcm91bmRcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHJvdW5kKG91dCwgYSkge1xuICBvdXRbMF0gPSBNYXRoLnJvdW5kKGFbMF0pO1xuICBvdXRbMV0gPSBNYXRoLnJvdW5kKGFbMV0pO1xuICBvdXRbMl0gPSBNYXRoLnJvdW5kKGFbMl0pO1xuICBvdXRbM10gPSBNYXRoLnJvdW5kKGFbM10pO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFNjYWxlcyBhIHZlYzQgYnkgYSBzY2FsYXIgbnVtYmVyXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWM0fSBhIHRoZSB2ZWN0b3IgdG8gc2NhbGVcclxuICogQHBhcmFtIHtOdW1iZXJ9IGIgYW1vdW50IHRvIHNjYWxlIHRoZSB2ZWN0b3IgYnlcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNjYWxlKG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdICogYjtcbiAgb3V0WzFdID0gYVsxXSAqIGI7XG4gIG91dFsyXSA9IGFbMl0gKiBiO1xuICBvdXRbM10gPSBhWzNdICogYjtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBBZGRzIHR3byB2ZWM0J3MgYWZ0ZXIgc2NhbGluZyB0aGUgc2Vjb25kIG9wZXJhbmQgYnkgYSBzY2FsYXIgdmFsdWVcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBzY2FsZSB0aGUgYW1vdW50IHRvIHNjYWxlIGIgYnkgYmVmb3JlIGFkZGluZ1xyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc2NhbGVBbmRBZGQob3V0LCBhLCBiLCBzY2FsZSkge1xuICBvdXRbMF0gPSBhWzBdICsgYlswXSAqIHNjYWxlO1xuICBvdXRbMV0gPSBhWzFdICsgYlsxXSAqIHNjYWxlO1xuICBvdXRbMl0gPSBhWzJdICsgYlsyXSAqIHNjYWxlO1xuICBvdXRbM10gPSBhWzNdICsgYlszXSAqIHNjYWxlO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGV1Y2xpZGlhbiBkaXN0YW5jZSBiZXR3ZWVuIHR3byB2ZWM0J3NcclxuICpcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGRpc3RhbmNlIGJldHdlZW4gYSBhbmQgYlxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGRpc3RhbmNlKGEsIGIpIHtcbiAgdmFyIHggPSBiWzBdIC0gYVswXTtcbiAgdmFyIHkgPSBiWzFdIC0gYVsxXTtcbiAgdmFyIHogPSBiWzJdIC0gYVsyXTtcbiAgdmFyIHcgPSBiWzNdIC0gYVszXTtcbiAgcmV0dXJuIE1hdGguaHlwb3QoeCwgeSwgeiwgdyk7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgc3F1YXJlZCBldWNsaWRpYW4gZGlzdGFuY2UgYmV0d2VlbiB0d28gdmVjNCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWM0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBzcXVhcmVkIGRpc3RhbmNlIGJldHdlZW4gYSBhbmQgYlxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNxdWFyZWREaXN0YW5jZShhLCBiKSB7XG4gIHZhciB4ID0gYlswXSAtIGFbMF07XG4gIHZhciB5ID0gYlsxXSAtIGFbMV07XG4gIHZhciB6ID0gYlsyXSAtIGFbMl07XG4gIHZhciB3ID0gYlszXSAtIGFbM107XG4gIHJldHVybiB4ICogeCArIHkgKiB5ICsgeiAqIHogKyB3ICogdztcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBsZW5ndGggb2YgYSB2ZWM0XHJcbiAqXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWM0fSBhIHZlY3RvciB0byBjYWxjdWxhdGUgbGVuZ3RoIG9mXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGxlbmd0aCBvZiBhXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbGVuZ3RoKGEpIHtcbiAgdmFyIHggPSBhWzBdO1xuICB2YXIgeSA9IGFbMV07XG4gIHZhciB6ID0gYVsyXTtcbiAgdmFyIHcgPSBhWzNdO1xuICByZXR1cm4gTWF0aC5oeXBvdCh4LCB5LCB6LCB3KTtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBzcXVhcmVkIGxlbmd0aCBvZiBhIHZlYzRcclxuICpcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzR9IGEgdmVjdG9yIHRvIGNhbGN1bGF0ZSBzcXVhcmVkIGxlbmd0aCBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBzcXVhcmVkIGxlbmd0aCBvZiBhXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc3F1YXJlZExlbmd0aChhKSB7XG4gIHZhciB4ID0gYVswXTtcbiAgdmFyIHkgPSBhWzFdO1xuICB2YXIgeiA9IGFbMl07XG4gIHZhciB3ID0gYVszXTtcbiAgcmV0dXJuIHggKiB4ICsgeSAqIHkgKyB6ICogeiArIHcgKiB3O1xufVxuLyoqXHJcbiAqIE5lZ2F0ZXMgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWM0XHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWM0fSBhIHZlY3RvciB0byBuZWdhdGVcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG5lZ2F0ZShvdXQsIGEpIHtcbiAgb3V0WzBdID0gLWFbMF07XG4gIG91dFsxXSA9IC1hWzFdO1xuICBvdXRbMl0gPSAtYVsyXTtcbiAgb3V0WzNdID0gLWFbM107XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUmV0dXJucyB0aGUgaW52ZXJzZSBvZiB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzRcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzR9IGEgdmVjdG9yIHRvIGludmVydFxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaW52ZXJzZShvdXQsIGEpIHtcbiAgb3V0WzBdID0gMS4wIC8gYVswXTtcbiAgb3V0WzFdID0gMS4wIC8gYVsxXTtcbiAgb3V0WzJdID0gMS4wIC8gYVsyXTtcbiAgb3V0WzNdID0gMS4wIC8gYVszXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBOb3JtYWxpemUgYSB2ZWM0XHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWM0fSBhIHZlY3RvciB0byBub3JtYWxpemVcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZShvdXQsIGEpIHtcbiAgdmFyIHggPSBhWzBdO1xuICB2YXIgeSA9IGFbMV07XG4gIHZhciB6ID0gYVsyXTtcbiAgdmFyIHcgPSBhWzNdO1xuICB2YXIgbGVuID0geCAqIHggKyB5ICogeSArIHogKiB6ICsgdyAqIHc7XG5cbiAgaWYgKGxlbiA+IDApIHtcbiAgICBsZW4gPSAxIC8gTWF0aC5zcXJ0KGxlbik7XG4gIH1cblxuICBvdXRbMF0gPSB4ICogbGVuO1xuICBvdXRbMV0gPSB5ICogbGVuO1xuICBvdXRbMl0gPSB6ICogbGVuO1xuICBvdXRbM10gPSB3ICogbGVuO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGRvdCBwcm9kdWN0IG9mIHR3byB2ZWM0J3NcclxuICpcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGRvdCBwcm9kdWN0IG9mIGEgYW5kIGJcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBkb3QoYSwgYikge1xuICByZXR1cm4gYVswXSAqIGJbMF0gKyBhWzFdICogYlsxXSArIGFbMl0gKiBiWzJdICsgYVszXSAqIGJbM107XG59XG4vKipcclxuICogUmV0dXJucyB0aGUgY3Jvc3MtcHJvZHVjdCBvZiB0aHJlZSB2ZWN0b3JzIGluIGEgNC1kaW1lbnNpb25hbCBzcGFjZVxyXG4gKlxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjNH0gcmVzdWx0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWM0fSBVIHRoZSBmaXJzdCB2ZWN0b3JcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzR9IFYgdGhlIHNlY29uZCB2ZWN0b3JcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzR9IFcgdGhlIHRoaXJkIHZlY3RvclxyXG4gKiBAcmV0dXJucyB7dmVjNH0gcmVzdWx0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY3Jvc3Mob3V0LCB1LCB2LCB3KSB7XG4gIHZhciBBID0gdlswXSAqIHdbMV0gLSB2WzFdICogd1swXSxcbiAgICAgIEIgPSB2WzBdICogd1syXSAtIHZbMl0gKiB3WzBdLFxuICAgICAgQyA9IHZbMF0gKiB3WzNdIC0gdlszXSAqIHdbMF0sXG4gICAgICBEID0gdlsxXSAqIHdbMl0gLSB2WzJdICogd1sxXSxcbiAgICAgIEUgPSB2WzFdICogd1szXSAtIHZbM10gKiB3WzFdLFxuICAgICAgRiA9IHZbMl0gKiB3WzNdIC0gdlszXSAqIHdbMl07XG4gIHZhciBHID0gdVswXTtcbiAgdmFyIEggPSB1WzFdO1xuICB2YXIgSSA9IHVbMl07XG4gIHZhciBKID0gdVszXTtcbiAgb3V0WzBdID0gSCAqIEYgLSBJICogRSArIEogKiBEO1xuICBvdXRbMV0gPSAtKEcgKiBGKSArIEkgKiBDIC0gSiAqIEI7XG4gIG91dFsyXSA9IEcgKiBFIC0gSCAqIEMgKyBKICogQTtcbiAgb3V0WzNdID0gLShHICogRCkgKyBIICogQiAtIEkgKiBBO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFBlcmZvcm1zIGEgbGluZWFyIGludGVycG9sYXRpb24gYmV0d2VlbiB0d28gdmVjNCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWM0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gdCBpbnRlcnBvbGF0aW9uIGFtb3VudCwgaW4gdGhlIHJhbmdlIFswLTFdLCBiZXR3ZWVuIHRoZSB0d28gaW5wdXRzXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBsZXJwKG91dCwgYSwgYiwgdCkge1xuICB2YXIgYXggPSBhWzBdO1xuICB2YXIgYXkgPSBhWzFdO1xuICB2YXIgYXogPSBhWzJdO1xuICB2YXIgYXcgPSBhWzNdO1xuICBvdXRbMF0gPSBheCArIHQgKiAoYlswXSAtIGF4KTtcbiAgb3V0WzFdID0gYXkgKyB0ICogKGJbMV0gLSBheSk7XG4gIG91dFsyXSA9IGF6ICsgdCAqIChiWzJdIC0gYXopO1xuICBvdXRbM10gPSBhdyArIHQgKiAoYlszXSAtIGF3KTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBHZW5lcmF0ZXMgYSByYW5kb20gdmVjdG9yIHdpdGggdGhlIGdpdmVuIHNjYWxlXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBbc2NhbGVdIExlbmd0aCBvZiB0aGUgcmVzdWx0aW5nIHZlY3Rvci4gSWYgb21taXR0ZWQsIGEgdW5pdCB2ZWN0b3Igd2lsbCBiZSByZXR1cm5lZFxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcmFuZG9tKG91dCwgc2NhbGUpIHtcbiAgc2NhbGUgPSBzY2FsZSB8fCAxLjA7IC8vIE1hcnNhZ2xpYSwgR2VvcmdlLiBDaG9vc2luZyBhIFBvaW50IGZyb20gdGhlIFN1cmZhY2Ugb2YgYVxuICAvLyBTcGhlcmUuIEFubi4gTWF0aC4gU3RhdGlzdC4gNDMgKDE5NzIpLCBuby4gMiwgNjQ1LS02NDYuXG4gIC8vIGh0dHA6Ly9wcm9qZWN0ZXVjbGlkLm9yZy9ldWNsaWQuYW9tcy8xMTc3NjkyNjQ0O1xuXG4gIHZhciB2MSwgdjIsIHYzLCB2NDtcbiAgdmFyIHMxLCBzMjtcblxuICBkbyB7XG4gICAgdjEgPSBnbE1hdHJpeC5SQU5ET00oKSAqIDIgLSAxO1xuICAgIHYyID0gZ2xNYXRyaXguUkFORE9NKCkgKiAyIC0gMTtcbiAgICBzMSA9IHYxICogdjEgKyB2MiAqIHYyO1xuICB9IHdoaWxlIChzMSA+PSAxKTtcblxuICBkbyB7XG4gICAgdjMgPSBnbE1hdHJpeC5SQU5ET00oKSAqIDIgLSAxO1xuICAgIHY0ID0gZ2xNYXRyaXguUkFORE9NKCkgKiAyIC0gMTtcbiAgICBzMiA9IHYzICogdjMgKyB2NCAqIHY0O1xuICB9IHdoaWxlIChzMiA+PSAxKTtcblxuICB2YXIgZCA9IE1hdGguc3FydCgoMSAtIHMxKSAvIHMyKTtcbiAgb3V0WzBdID0gc2NhbGUgKiB2MTtcbiAgb3V0WzFdID0gc2NhbGUgKiB2MjtcbiAgb3V0WzJdID0gc2NhbGUgKiB2MyAqIGQ7XG4gIG91dFszXSA9IHNjYWxlICogdjQgKiBkO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFRyYW5zZm9ybXMgdGhlIHZlYzQgd2l0aCBhIG1hdDQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWM0fSBhIHRoZSB2ZWN0b3IgdG8gdHJhbnNmb3JtXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlNYXQ0fSBtIG1hdHJpeCB0byB0cmFuc2Zvcm0gd2l0aFxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtTWF0NChvdXQsIGEsIG0pIHtcbiAgdmFyIHggPSBhWzBdLFxuICAgICAgeSA9IGFbMV0sXG4gICAgICB6ID0gYVsyXSxcbiAgICAgIHcgPSBhWzNdO1xuICBvdXRbMF0gPSBtWzBdICogeCArIG1bNF0gKiB5ICsgbVs4XSAqIHogKyBtWzEyXSAqIHc7XG4gIG91dFsxXSA9IG1bMV0gKiB4ICsgbVs1XSAqIHkgKyBtWzldICogeiArIG1bMTNdICogdztcbiAgb3V0WzJdID0gbVsyXSAqIHggKyBtWzZdICogeSArIG1bMTBdICogeiArIG1bMTRdICogdztcbiAgb3V0WzNdID0gbVszXSAqIHggKyBtWzddICogeSArIG1bMTFdICogeiArIG1bMTVdICogdztcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBUcmFuc2Zvcm1zIHRoZSB2ZWM0IHdpdGggYSBxdWF0XHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWM0fSBhIHRoZSB2ZWN0b3IgdG8gdHJhbnNmb3JtXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlRdWF0fSBxIHF1YXRlcm5pb24gdG8gdHJhbnNmb3JtIHdpdGhcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybVF1YXQob3V0LCBhLCBxKSB7XG4gIHZhciB4ID0gYVswXSxcbiAgICAgIHkgPSBhWzFdLFxuICAgICAgeiA9IGFbMl07XG4gIHZhciBxeCA9IHFbMF0sXG4gICAgICBxeSA9IHFbMV0sXG4gICAgICBxeiA9IHFbMl0sXG4gICAgICBxdyA9IHFbM107IC8vIGNhbGN1bGF0ZSBxdWF0ICogdmVjXG5cbiAgdmFyIGl4ID0gcXcgKiB4ICsgcXkgKiB6IC0gcXogKiB5O1xuICB2YXIgaXkgPSBxdyAqIHkgKyBxeiAqIHggLSBxeCAqIHo7XG4gIHZhciBpeiA9IHF3ICogeiArIHF4ICogeSAtIHF5ICogeDtcbiAgdmFyIGl3ID0gLXF4ICogeCAtIHF5ICogeSAtIHF6ICogejsgLy8gY2FsY3VsYXRlIHJlc3VsdCAqIGludmVyc2UgcXVhdFxuXG4gIG91dFswXSA9IGl4ICogcXcgKyBpdyAqIC1xeCArIGl5ICogLXF6IC0gaXogKiAtcXk7XG4gIG91dFsxXSA9IGl5ICogcXcgKyBpdyAqIC1xeSArIGl6ICogLXF4IC0gaXggKiAtcXo7XG4gIG91dFsyXSA9IGl6ICogcXcgKyBpdyAqIC1xeiArIGl4ICogLXF5IC0gaXkgKiAtcXg7XG4gIG91dFszXSA9IGFbM107XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU2V0IHRoZSBjb21wb25lbnRzIG9mIGEgdmVjNCB0byB6ZXJvXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB6ZXJvKG91dCkge1xuICBvdXRbMF0gPSAwLjA7XG4gIG91dFsxXSA9IDAuMDtcbiAgb3V0WzJdID0gMC4wO1xuICBvdXRbM10gPSAwLjA7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIHZlY3RvclxyXG4gKlxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjNH0gYSB2ZWN0b3IgdG8gcmVwcmVzZW50IGFzIGEgc3RyaW5nXHJcbiAqIEByZXR1cm5zIHtTdHJpbmd9IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdmVjdG9yXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc3RyKGEpIHtcbiAgcmV0dXJuIFwidmVjNChcIiArIGFbMF0gKyBcIiwgXCIgKyBhWzFdICsgXCIsIFwiICsgYVsyXSArIFwiLCBcIiArIGFbM10gKyBcIilcIjtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSB2ZWN0b3JzIGhhdmUgZXhhY3RseSB0aGUgc2FtZSBlbGVtZW50cyBpbiB0aGUgc2FtZSBwb3NpdGlvbiAod2hlbiBjb21wYXJlZCB3aXRoID09PSlcclxuICpcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzR9IGEgVGhlIGZpcnN0IHZlY3Rvci5cclxuICogQHBhcmFtIHtSZWFkb25seVZlYzR9IGIgVGhlIHNlY29uZCB2ZWN0b3IuXHJcbiAqIEByZXR1cm5zIHtCb29sZWFufSBUcnVlIGlmIHRoZSB2ZWN0b3JzIGFyZSBlcXVhbCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGV4YWN0RXF1YWxzKGEsIGIpIHtcbiAgcmV0dXJuIGFbMF0gPT09IGJbMF0gJiYgYVsxXSA9PT0gYlsxXSAmJiBhWzJdID09PSBiWzJdICYmIGFbM10gPT09IGJbM107XG59XG4vKipcclxuICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgdmVjdG9ycyBoYXZlIGFwcHJveGltYXRlbHkgdGhlIHNhbWUgZWxlbWVudHMgaW4gdGhlIHNhbWUgcG9zaXRpb24uXHJcbiAqXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWM0fSBhIFRoZSBmaXJzdCB2ZWN0b3IuXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWM0fSBiIFRoZSBzZWNvbmQgdmVjdG9yLlxyXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gVHJ1ZSBpZiB0aGUgdmVjdG9ycyBhcmUgZXF1YWwsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBlcXVhbHMoYSwgYikge1xuICB2YXIgYTAgPSBhWzBdLFxuICAgICAgYTEgPSBhWzFdLFxuICAgICAgYTIgPSBhWzJdLFxuICAgICAgYTMgPSBhWzNdO1xuICB2YXIgYjAgPSBiWzBdLFxuICAgICAgYjEgPSBiWzFdLFxuICAgICAgYjIgPSBiWzJdLFxuICAgICAgYjMgPSBiWzNdO1xuICByZXR1cm4gTWF0aC5hYnMoYTAgLSBiMCkgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTApLCBNYXRoLmFicyhiMCkpICYmIE1hdGguYWJzKGExIC0gYjEpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGExKSwgTWF0aC5hYnMoYjEpKSAmJiBNYXRoLmFicyhhMiAtIGIyKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMiksIE1hdGguYWJzKGIyKSkgJiYgTWF0aC5hYnMoYTMgLSBiMykgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTMpLCBNYXRoLmFicyhiMykpO1xufVxuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjNC5zdWJ0cmFjdH1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIHN1YiA9IHN1YnRyYWN0O1xuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjNC5tdWx0aXBseX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIG11bCA9IG11bHRpcGx5O1xuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjNC5kaXZpZGV9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBkaXYgPSBkaXZpZGU7XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWM0LmRpc3RhbmNlfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgZGlzdCA9IGRpc3RhbmNlO1xuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjNC5zcXVhcmVkRGlzdGFuY2V9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBzcXJEaXN0ID0gc3F1YXJlZERpc3RhbmNlO1xuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjNC5sZW5ndGh9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBsZW4gPSBsZW5ndGg7XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWM0LnNxdWFyZWRMZW5ndGh9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBzcXJMZW4gPSBzcXVhcmVkTGVuZ3RoO1xuLyoqXHJcbiAqIFBlcmZvcm0gc29tZSBvcGVyYXRpb24gb3ZlciBhbiBhcnJheSBvZiB2ZWM0cy5cclxuICpcclxuICogQHBhcmFtIHtBcnJheX0gYSB0aGUgYXJyYXkgb2YgdmVjdG9ycyB0byBpdGVyYXRlIG92ZXJcclxuICogQHBhcmFtIHtOdW1iZXJ9IHN0cmlkZSBOdW1iZXIgb2YgZWxlbWVudHMgYmV0d2VlbiB0aGUgc3RhcnQgb2YgZWFjaCB2ZWM0LiBJZiAwIGFzc3VtZXMgdGlnaHRseSBwYWNrZWRcclxuICogQHBhcmFtIHtOdW1iZXJ9IG9mZnNldCBOdW1iZXIgb2YgZWxlbWVudHMgdG8gc2tpcCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcnJheVxyXG4gKiBAcGFyYW0ge051bWJlcn0gY291bnQgTnVtYmVyIG9mIHZlYzRzIHRvIGl0ZXJhdGUgb3Zlci4gSWYgMCBpdGVyYXRlcyBvdmVyIGVudGlyZSBhcnJheVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBGdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIHZlY3RvciBpbiB0aGUgYXJyYXlcclxuICogQHBhcmFtIHtPYmplY3R9IFthcmddIGFkZGl0aW9uYWwgYXJndW1lbnQgdG8gcGFzcyB0byBmblxyXG4gKiBAcmV0dXJucyB7QXJyYXl9IGFcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIGZvckVhY2ggPSBmdW5jdGlvbiAoKSB7XG4gIHZhciB2ZWMgPSBjcmVhdGUoKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChhLCBzdHJpZGUsIG9mZnNldCwgY291bnQsIGZuLCBhcmcpIHtcbiAgICB2YXIgaSwgbDtcblxuICAgIGlmICghc3RyaWRlKSB7XG4gICAgICBzdHJpZGUgPSA0O1xuICAgIH1cblxuICAgIGlmICghb2Zmc2V0KSB7XG4gICAgICBvZmZzZXQgPSAwO1xuICAgIH1cblxuICAgIGlmIChjb3VudCkge1xuICAgICAgbCA9IE1hdGgubWluKGNvdW50ICogc3RyaWRlICsgb2Zmc2V0LCBhLmxlbmd0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGwgPSBhLmxlbmd0aDtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSBvZmZzZXQ7IGkgPCBsOyBpICs9IHN0cmlkZSkge1xuICAgICAgdmVjWzBdID0gYVtpXTtcbiAgICAgIHZlY1sxXSA9IGFbaSArIDFdO1xuICAgICAgdmVjWzJdID0gYVtpICsgMl07XG4gICAgICB2ZWNbM10gPSBhW2kgKyAzXTtcbiAgICAgIGZuKHZlYywgdmVjLCBhcmcpO1xuICAgICAgYVtpXSA9IHZlY1swXTtcbiAgICAgIGFbaSArIDFdID0gdmVjWzFdO1xuICAgICAgYVtpICsgMl0gPSB2ZWNbMl07XG4gICAgICBhW2kgKyAzXSA9IHZlY1szXTtcbiAgICB9XG5cbiAgICByZXR1cm4gYTtcbiAgfTtcbn0oKTsiLCJpbXBvcnQgKiBhcyB2ZWM0IGZyb20gJ2dsLW1hdHJpeC92ZWM0JztcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNYXQ0KCkge1xuICByZXR1cm4gWzEsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDFdO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybVZlY3RvcihtYXRyaXgsIHZlY3Rvcikge1xuICB2YXIgcmVzdWx0ID0gdmVjNC50cmFuc2Zvcm1NYXQ0KFtdLCB2ZWN0b3IsIG1hdHJpeCk7XG4gIHZlYzQuc2NhbGUocmVzdWx0LCByZXN1bHQsIDEgLyByZXN1bHRbM10pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuZXhwb3J0IGZ1bmN0aW9uIG1vZCh2YWx1ZSwgZGl2aXNvcikge1xuICB2YXIgbW9kdWx1cyA9IHZhbHVlICUgZGl2aXNvcjtcbiAgcmV0dXJuIG1vZHVsdXMgPCAwID8gZGl2aXNvciArIG1vZHVsdXMgOiBtb2R1bHVzO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGxlcnAoc3RhcnQsIGVuZCwgc3RlcCkge1xuICByZXR1cm4gc3RlcCAqIGVuZCArICgxIC0gc3RlcCkgKiBzdGFydDtcbn1cblxuZnVuY3Rpb24gaWVMb2cyKHgpIHtcbiAgcmV0dXJuIE1hdGgubG9nKHgpICogTWF0aC5MT0cyRTtcbn1cblxuZXhwb3J0IHZhciBsb2cyID0gTWF0aC5sb2cyIHx8IGllTG9nMjsiLCJpbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMubWF0aC5oeXBvdC5qc1wiO1xuaW1wb3J0ICogYXMgZ2xNYXRyaXggZnJvbSBcIi4vY29tbW9uLmpzXCI7XG4vKipcclxuICogNHg0IE1hdHJpeDxicj5Gb3JtYXQ6IGNvbHVtbi1tYWpvciwgd2hlbiB0eXBlZCBvdXQgaXQgbG9va3MgbGlrZSByb3ctbWFqb3I8YnI+VGhlIG1hdHJpY2VzIGFyZSBiZWluZyBwb3N0IG11bHRpcGxpZWQuXHJcbiAqIEBtb2R1bGUgbWF0NFxyXG4gKi9cblxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgaWRlbnRpdHkgbWF0NFxyXG4gKlxyXG4gKiBAcmV0dXJucyB7bWF0NH0gYSBuZXcgNHg0IG1hdHJpeFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgdmFyIG91dCA9IG5ldyBnbE1hdHJpeC5BUlJBWV9UWVBFKDE2KTtcblxuICBpZiAoZ2xNYXRyaXguQVJSQVlfVFlQRSAhPSBGbG9hdDMyQXJyYXkpIHtcbiAgICBvdXRbMV0gPSAwO1xuICAgIG91dFsyXSA9IDA7XG4gICAgb3V0WzNdID0gMDtcbiAgICBvdXRbNF0gPSAwO1xuICAgIG91dFs2XSA9IDA7XG4gICAgb3V0WzddID0gMDtcbiAgICBvdXRbOF0gPSAwO1xuICAgIG91dFs5XSA9IDA7XG4gICAgb3V0WzExXSA9IDA7XG4gICAgb3V0WzEyXSA9IDA7XG4gICAgb3V0WzEzXSA9IDA7XG4gICAgb3V0WzE0XSA9IDA7XG4gIH1cblxuICBvdXRbMF0gPSAxO1xuICBvdXRbNV0gPSAxO1xuICBvdXRbMTBdID0gMTtcbiAgb3V0WzE1XSA9IDE7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBtYXQ0IGluaXRpYWxpemVkIHdpdGggdmFsdWVzIGZyb20gYW4gZXhpc3RpbmcgbWF0cml4XHJcbiAqXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlNYXQ0fSBhIG1hdHJpeCB0byBjbG9uZVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gYSBuZXcgNHg0IG1hdHJpeFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNsb25lKGEpIHtcbiAgdmFyIG91dCA9IG5ldyBnbE1hdHJpeC5BUlJBWV9UWVBFKDE2KTtcbiAgb3V0WzBdID0gYVswXTtcbiAgb3V0WzFdID0gYVsxXTtcbiAgb3V0WzJdID0gYVsyXTtcbiAgb3V0WzNdID0gYVszXTtcbiAgb3V0WzRdID0gYVs0XTtcbiAgb3V0WzVdID0gYVs1XTtcbiAgb3V0WzZdID0gYVs2XTtcbiAgb3V0WzddID0gYVs3XTtcbiAgb3V0WzhdID0gYVs4XTtcbiAgb3V0WzldID0gYVs5XTtcbiAgb3V0WzEwXSA9IGFbMTBdO1xuICBvdXRbMTFdID0gYVsxMV07XG4gIG91dFsxMl0gPSBhWzEyXTtcbiAgb3V0WzEzXSA9IGFbMTNdO1xuICBvdXRbMTRdID0gYVsxNF07XG4gIG91dFsxNV0gPSBhWzE1XTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDb3B5IHRoZSB2YWx1ZXMgZnJvbSBvbmUgbWF0NCB0byBhbm90aGVyXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlNYXQ0fSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjb3B5KG91dCwgYSkge1xuICBvdXRbMF0gPSBhWzBdO1xuICBvdXRbMV0gPSBhWzFdO1xuICBvdXRbMl0gPSBhWzJdO1xuICBvdXRbM10gPSBhWzNdO1xuICBvdXRbNF0gPSBhWzRdO1xuICBvdXRbNV0gPSBhWzVdO1xuICBvdXRbNl0gPSBhWzZdO1xuICBvdXRbN10gPSBhWzddO1xuICBvdXRbOF0gPSBhWzhdO1xuICBvdXRbOV0gPSBhWzldO1xuICBvdXRbMTBdID0gYVsxMF07XG4gIG91dFsxMV0gPSBhWzExXTtcbiAgb3V0WzEyXSA9IGFbMTJdO1xuICBvdXRbMTNdID0gYVsxM107XG4gIG91dFsxNF0gPSBhWzE0XTtcbiAgb3V0WzE1XSA9IGFbMTVdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZSBhIG5ldyBtYXQ0IHdpdGggdGhlIGdpdmVuIHZhbHVlc1xyXG4gKlxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTAwIENvbXBvbmVudCBpbiBjb2x1bW4gMCwgcm93IDAgcG9zaXRpb24gKGluZGV4IDApXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMDEgQ29tcG9uZW50IGluIGNvbHVtbiAwLCByb3cgMSBwb3NpdGlvbiAoaW5kZXggMSlcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0wMiBDb21wb25lbnQgaW4gY29sdW1uIDAsIHJvdyAyIHBvc2l0aW9uIChpbmRleCAyKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTAzIENvbXBvbmVudCBpbiBjb2x1bW4gMCwgcm93IDMgcG9zaXRpb24gKGluZGV4IDMpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMTAgQ29tcG9uZW50IGluIGNvbHVtbiAxLCByb3cgMCBwb3NpdGlvbiAoaW5kZXggNClcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0xMSBDb21wb25lbnQgaW4gY29sdW1uIDEsIHJvdyAxIHBvc2l0aW9uIChpbmRleCA1KVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTEyIENvbXBvbmVudCBpbiBjb2x1bW4gMSwgcm93IDIgcG9zaXRpb24gKGluZGV4IDYpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMTMgQ29tcG9uZW50IGluIGNvbHVtbiAxLCByb3cgMyBwb3NpdGlvbiAoaW5kZXggNylcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0yMCBDb21wb25lbnQgaW4gY29sdW1uIDIsIHJvdyAwIHBvc2l0aW9uIChpbmRleCA4KVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTIxIENvbXBvbmVudCBpbiBjb2x1bW4gMiwgcm93IDEgcG9zaXRpb24gKGluZGV4IDkpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMjIgQ29tcG9uZW50IGluIGNvbHVtbiAyLCByb3cgMiBwb3NpdGlvbiAoaW5kZXggMTApXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMjMgQ29tcG9uZW50IGluIGNvbHVtbiAyLCByb3cgMyBwb3NpdGlvbiAoaW5kZXggMTEpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMzAgQ29tcG9uZW50IGluIGNvbHVtbiAzLCByb3cgMCBwb3NpdGlvbiAoaW5kZXggMTIpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMzEgQ29tcG9uZW50IGluIGNvbHVtbiAzLCByb3cgMSBwb3NpdGlvbiAoaW5kZXggMTMpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMzIgQ29tcG9uZW50IGluIGNvbHVtbiAzLCByb3cgMiBwb3NpdGlvbiAoaW5kZXggMTQpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMzMgQ29tcG9uZW50IGluIGNvbHVtbiAzLCByb3cgMyBwb3NpdGlvbiAoaW5kZXggMTUpXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBBIG5ldyBtYXQ0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVZhbHVlcyhtMDAsIG0wMSwgbTAyLCBtMDMsIG0xMCwgbTExLCBtMTIsIG0xMywgbTIwLCBtMjEsIG0yMiwgbTIzLCBtMzAsIG0zMSwgbTMyLCBtMzMpIHtcbiAgdmFyIG91dCA9IG5ldyBnbE1hdHJpeC5BUlJBWV9UWVBFKDE2KTtcbiAgb3V0WzBdID0gbTAwO1xuICBvdXRbMV0gPSBtMDE7XG4gIG91dFsyXSA9IG0wMjtcbiAgb3V0WzNdID0gbTAzO1xuICBvdXRbNF0gPSBtMTA7XG4gIG91dFs1XSA9IG0xMTtcbiAgb3V0WzZdID0gbTEyO1xuICBvdXRbN10gPSBtMTM7XG4gIG91dFs4XSA9IG0yMDtcbiAgb3V0WzldID0gbTIxO1xuICBvdXRbMTBdID0gbTIyO1xuICBvdXRbMTFdID0gbTIzO1xuICBvdXRbMTJdID0gbTMwO1xuICBvdXRbMTNdID0gbTMxO1xuICBvdXRbMTRdID0gbTMyO1xuICBvdXRbMTVdID0gbTMzO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFNldCB0aGUgY29tcG9uZW50cyBvZiBhIG1hdDQgdG8gdGhlIGdpdmVuIHZhbHVlc1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTAwIENvbXBvbmVudCBpbiBjb2x1bW4gMCwgcm93IDAgcG9zaXRpb24gKGluZGV4IDApXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMDEgQ29tcG9uZW50IGluIGNvbHVtbiAwLCByb3cgMSBwb3NpdGlvbiAoaW5kZXggMSlcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0wMiBDb21wb25lbnQgaW4gY29sdW1uIDAsIHJvdyAyIHBvc2l0aW9uIChpbmRleCAyKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTAzIENvbXBvbmVudCBpbiBjb2x1bW4gMCwgcm93IDMgcG9zaXRpb24gKGluZGV4IDMpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMTAgQ29tcG9uZW50IGluIGNvbHVtbiAxLCByb3cgMCBwb3NpdGlvbiAoaW5kZXggNClcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0xMSBDb21wb25lbnQgaW4gY29sdW1uIDEsIHJvdyAxIHBvc2l0aW9uIChpbmRleCA1KVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTEyIENvbXBvbmVudCBpbiBjb2x1bW4gMSwgcm93IDIgcG9zaXRpb24gKGluZGV4IDYpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMTMgQ29tcG9uZW50IGluIGNvbHVtbiAxLCByb3cgMyBwb3NpdGlvbiAoaW5kZXggNylcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0yMCBDb21wb25lbnQgaW4gY29sdW1uIDIsIHJvdyAwIHBvc2l0aW9uIChpbmRleCA4KVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTIxIENvbXBvbmVudCBpbiBjb2x1bW4gMiwgcm93IDEgcG9zaXRpb24gKGluZGV4IDkpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMjIgQ29tcG9uZW50IGluIGNvbHVtbiAyLCByb3cgMiBwb3NpdGlvbiAoaW5kZXggMTApXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMjMgQ29tcG9uZW50IGluIGNvbHVtbiAyLCByb3cgMyBwb3NpdGlvbiAoaW5kZXggMTEpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMzAgQ29tcG9uZW50IGluIGNvbHVtbiAzLCByb3cgMCBwb3NpdGlvbiAoaW5kZXggMTIpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMzEgQ29tcG9uZW50IGluIGNvbHVtbiAzLCByb3cgMSBwb3NpdGlvbiAoaW5kZXggMTMpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMzIgQ29tcG9uZW50IGluIGNvbHVtbiAzLCByb3cgMiBwb3NpdGlvbiAoaW5kZXggMTQpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMzMgQ29tcG9uZW50IGluIGNvbHVtbiAzLCByb3cgMyBwb3NpdGlvbiAoaW5kZXggMTUpXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzZXQob3V0LCBtMDAsIG0wMSwgbTAyLCBtMDMsIG0xMCwgbTExLCBtMTIsIG0xMywgbTIwLCBtMjEsIG0yMiwgbTIzLCBtMzAsIG0zMSwgbTMyLCBtMzMpIHtcbiAgb3V0WzBdID0gbTAwO1xuICBvdXRbMV0gPSBtMDE7XG4gIG91dFsyXSA9IG0wMjtcbiAgb3V0WzNdID0gbTAzO1xuICBvdXRbNF0gPSBtMTA7XG4gIG91dFs1XSA9IG0xMTtcbiAgb3V0WzZdID0gbTEyO1xuICBvdXRbN10gPSBtMTM7XG4gIG91dFs4XSA9IG0yMDtcbiAgb3V0WzldID0gbTIxO1xuICBvdXRbMTBdID0gbTIyO1xuICBvdXRbMTFdID0gbTIzO1xuICBvdXRbMTJdID0gbTMwO1xuICBvdXRbMTNdID0gbTMxO1xuICBvdXRbMTRdID0gbTMyO1xuICBvdXRbMTVdID0gbTMzO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFNldCBhIG1hdDQgdG8gdGhlIGlkZW50aXR5IG1hdHJpeFxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHkob3V0KSB7XG4gIG91dFswXSA9IDE7XG4gIG91dFsxXSA9IDA7XG4gIG91dFsyXSA9IDA7XG4gIG91dFszXSA9IDA7XG4gIG91dFs0XSA9IDA7XG4gIG91dFs1XSA9IDE7XG4gIG91dFs2XSA9IDA7XG4gIG91dFs3XSA9IDA7XG4gIG91dFs4XSA9IDA7XG4gIG91dFs5XSA9IDA7XG4gIG91dFsxMF0gPSAxO1xuICBvdXRbMTFdID0gMDtcbiAgb3V0WzEyXSA9IDA7XG4gIG91dFsxM10gPSAwO1xuICBvdXRbMTRdID0gMDtcbiAgb3V0WzE1XSA9IDE7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogVHJhbnNwb3NlIHRoZSB2YWx1ZXMgb2YgYSBtYXQ0XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlNYXQ0fSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc3Bvc2Uob3V0LCBhKSB7XG4gIC8vIElmIHdlIGFyZSB0cmFuc3Bvc2luZyBvdXJzZWx2ZXMgd2UgY2FuIHNraXAgYSBmZXcgc3RlcHMgYnV0IGhhdmUgdG8gY2FjaGUgc29tZSB2YWx1ZXNcbiAgaWYgKG91dCA9PT0gYSkge1xuICAgIHZhciBhMDEgPSBhWzFdLFxuICAgICAgICBhMDIgPSBhWzJdLFxuICAgICAgICBhMDMgPSBhWzNdO1xuICAgIHZhciBhMTIgPSBhWzZdLFxuICAgICAgICBhMTMgPSBhWzddO1xuICAgIHZhciBhMjMgPSBhWzExXTtcbiAgICBvdXRbMV0gPSBhWzRdO1xuICAgIG91dFsyXSA9IGFbOF07XG4gICAgb3V0WzNdID0gYVsxMl07XG4gICAgb3V0WzRdID0gYTAxO1xuICAgIG91dFs2XSA9IGFbOV07XG4gICAgb3V0WzddID0gYVsxM107XG4gICAgb3V0WzhdID0gYTAyO1xuICAgIG91dFs5XSA9IGExMjtcbiAgICBvdXRbMTFdID0gYVsxNF07XG4gICAgb3V0WzEyXSA9IGEwMztcbiAgICBvdXRbMTNdID0gYTEzO1xuICAgIG91dFsxNF0gPSBhMjM7XG4gIH0gZWxzZSB7XG4gICAgb3V0WzBdID0gYVswXTtcbiAgICBvdXRbMV0gPSBhWzRdO1xuICAgIG91dFsyXSA9IGFbOF07XG4gICAgb3V0WzNdID0gYVsxMl07XG4gICAgb3V0WzRdID0gYVsxXTtcbiAgICBvdXRbNV0gPSBhWzVdO1xuICAgIG91dFs2XSA9IGFbOV07XG4gICAgb3V0WzddID0gYVsxM107XG4gICAgb3V0WzhdID0gYVsyXTtcbiAgICBvdXRbOV0gPSBhWzZdO1xuICAgIG91dFsxMF0gPSBhWzEwXTtcbiAgICBvdXRbMTFdID0gYVsxNF07XG4gICAgb3V0WzEyXSA9IGFbM107XG4gICAgb3V0WzEzXSA9IGFbN107XG4gICAgb3V0WzE0XSA9IGFbMTFdO1xuICAgIG91dFsxNV0gPSBhWzE1XTtcbiAgfVxuXG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogSW52ZXJ0cyBhIG1hdDRcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHtSZWFkb25seU1hdDR9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGludmVydChvdXQsIGEpIHtcbiAgdmFyIGEwMCA9IGFbMF0sXG4gICAgICBhMDEgPSBhWzFdLFxuICAgICAgYTAyID0gYVsyXSxcbiAgICAgIGEwMyA9IGFbM107XG4gIHZhciBhMTAgPSBhWzRdLFxuICAgICAgYTExID0gYVs1XSxcbiAgICAgIGExMiA9IGFbNl0sXG4gICAgICBhMTMgPSBhWzddO1xuICB2YXIgYTIwID0gYVs4XSxcbiAgICAgIGEyMSA9IGFbOV0sXG4gICAgICBhMjIgPSBhWzEwXSxcbiAgICAgIGEyMyA9IGFbMTFdO1xuICB2YXIgYTMwID0gYVsxMl0sXG4gICAgICBhMzEgPSBhWzEzXSxcbiAgICAgIGEzMiA9IGFbMTRdLFxuICAgICAgYTMzID0gYVsxNV07XG4gIHZhciBiMDAgPSBhMDAgKiBhMTEgLSBhMDEgKiBhMTA7XG4gIHZhciBiMDEgPSBhMDAgKiBhMTIgLSBhMDIgKiBhMTA7XG4gIHZhciBiMDIgPSBhMDAgKiBhMTMgLSBhMDMgKiBhMTA7XG4gIHZhciBiMDMgPSBhMDEgKiBhMTIgLSBhMDIgKiBhMTE7XG4gIHZhciBiMDQgPSBhMDEgKiBhMTMgLSBhMDMgKiBhMTE7XG4gIHZhciBiMDUgPSBhMDIgKiBhMTMgLSBhMDMgKiBhMTI7XG4gIHZhciBiMDYgPSBhMjAgKiBhMzEgLSBhMjEgKiBhMzA7XG4gIHZhciBiMDcgPSBhMjAgKiBhMzIgLSBhMjIgKiBhMzA7XG4gIHZhciBiMDggPSBhMjAgKiBhMzMgLSBhMjMgKiBhMzA7XG4gIHZhciBiMDkgPSBhMjEgKiBhMzIgLSBhMjIgKiBhMzE7XG4gIHZhciBiMTAgPSBhMjEgKiBhMzMgLSBhMjMgKiBhMzE7XG4gIHZhciBiMTEgPSBhMjIgKiBhMzMgLSBhMjMgKiBhMzI7IC8vIENhbGN1bGF0ZSB0aGUgZGV0ZXJtaW5hbnRcblxuICB2YXIgZGV0ID0gYjAwICogYjExIC0gYjAxICogYjEwICsgYjAyICogYjA5ICsgYjAzICogYjA4IC0gYjA0ICogYjA3ICsgYjA1ICogYjA2O1xuXG4gIGlmICghZGV0KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBkZXQgPSAxLjAgLyBkZXQ7XG4gIG91dFswXSA9IChhMTEgKiBiMTEgLSBhMTIgKiBiMTAgKyBhMTMgKiBiMDkpICogZGV0O1xuICBvdXRbMV0gPSAoYTAyICogYjEwIC0gYTAxICogYjExIC0gYTAzICogYjA5KSAqIGRldDtcbiAgb3V0WzJdID0gKGEzMSAqIGIwNSAtIGEzMiAqIGIwNCArIGEzMyAqIGIwMykgKiBkZXQ7XG4gIG91dFszXSA9IChhMjIgKiBiMDQgLSBhMjEgKiBiMDUgLSBhMjMgKiBiMDMpICogZGV0O1xuICBvdXRbNF0gPSAoYTEyICogYjA4IC0gYTEwICogYjExIC0gYTEzICogYjA3KSAqIGRldDtcbiAgb3V0WzVdID0gKGEwMCAqIGIxMSAtIGEwMiAqIGIwOCArIGEwMyAqIGIwNykgKiBkZXQ7XG4gIG91dFs2XSA9IChhMzIgKiBiMDIgLSBhMzAgKiBiMDUgLSBhMzMgKiBiMDEpICogZGV0O1xuICBvdXRbN10gPSAoYTIwICogYjA1IC0gYTIyICogYjAyICsgYTIzICogYjAxKSAqIGRldDtcbiAgb3V0WzhdID0gKGExMCAqIGIxMCAtIGExMSAqIGIwOCArIGExMyAqIGIwNikgKiBkZXQ7XG4gIG91dFs5XSA9IChhMDEgKiBiMDggLSBhMDAgKiBiMTAgLSBhMDMgKiBiMDYpICogZGV0O1xuICBvdXRbMTBdID0gKGEzMCAqIGIwNCAtIGEzMSAqIGIwMiArIGEzMyAqIGIwMCkgKiBkZXQ7XG4gIG91dFsxMV0gPSAoYTIxICogYjAyIC0gYTIwICogYjA0IC0gYTIzICogYjAwKSAqIGRldDtcbiAgb3V0WzEyXSA9IChhMTEgKiBiMDcgLSBhMTAgKiBiMDkgLSBhMTIgKiBiMDYpICogZGV0O1xuICBvdXRbMTNdID0gKGEwMCAqIGIwOSAtIGEwMSAqIGIwNyArIGEwMiAqIGIwNikgKiBkZXQ7XG4gIG91dFsxNF0gPSAoYTMxICogYjAxIC0gYTMwICogYjAzIC0gYTMyICogYjAwKSAqIGRldDtcbiAgb3V0WzE1XSA9IChhMjAgKiBiMDMgLSBhMjEgKiBiMDEgKyBhMjIgKiBiMDApICogZGV0O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGFkanVnYXRlIG9mIGEgbWF0NFxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5TWF0NH0gYSB0aGUgc291cmNlIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gYWRqb2ludChvdXQsIGEpIHtcbiAgdmFyIGEwMCA9IGFbMF0sXG4gICAgICBhMDEgPSBhWzFdLFxuICAgICAgYTAyID0gYVsyXSxcbiAgICAgIGEwMyA9IGFbM107XG4gIHZhciBhMTAgPSBhWzRdLFxuICAgICAgYTExID0gYVs1XSxcbiAgICAgIGExMiA9IGFbNl0sXG4gICAgICBhMTMgPSBhWzddO1xuICB2YXIgYTIwID0gYVs4XSxcbiAgICAgIGEyMSA9IGFbOV0sXG4gICAgICBhMjIgPSBhWzEwXSxcbiAgICAgIGEyMyA9IGFbMTFdO1xuICB2YXIgYTMwID0gYVsxMl0sXG4gICAgICBhMzEgPSBhWzEzXSxcbiAgICAgIGEzMiA9IGFbMTRdLFxuICAgICAgYTMzID0gYVsxNV07XG4gIG91dFswXSA9IGExMSAqIChhMjIgKiBhMzMgLSBhMjMgKiBhMzIpIC0gYTIxICogKGExMiAqIGEzMyAtIGExMyAqIGEzMikgKyBhMzEgKiAoYTEyICogYTIzIC0gYTEzICogYTIyKTtcbiAgb3V0WzFdID0gLShhMDEgKiAoYTIyICogYTMzIC0gYTIzICogYTMyKSAtIGEyMSAqIChhMDIgKiBhMzMgLSBhMDMgKiBhMzIpICsgYTMxICogKGEwMiAqIGEyMyAtIGEwMyAqIGEyMikpO1xuICBvdXRbMl0gPSBhMDEgKiAoYTEyICogYTMzIC0gYTEzICogYTMyKSAtIGExMSAqIChhMDIgKiBhMzMgLSBhMDMgKiBhMzIpICsgYTMxICogKGEwMiAqIGExMyAtIGEwMyAqIGExMik7XG4gIG91dFszXSA9IC0oYTAxICogKGExMiAqIGEyMyAtIGExMyAqIGEyMikgLSBhMTEgKiAoYTAyICogYTIzIC0gYTAzICogYTIyKSArIGEyMSAqIChhMDIgKiBhMTMgLSBhMDMgKiBhMTIpKTtcbiAgb3V0WzRdID0gLShhMTAgKiAoYTIyICogYTMzIC0gYTIzICogYTMyKSAtIGEyMCAqIChhMTIgKiBhMzMgLSBhMTMgKiBhMzIpICsgYTMwICogKGExMiAqIGEyMyAtIGExMyAqIGEyMikpO1xuICBvdXRbNV0gPSBhMDAgKiAoYTIyICogYTMzIC0gYTIzICogYTMyKSAtIGEyMCAqIChhMDIgKiBhMzMgLSBhMDMgKiBhMzIpICsgYTMwICogKGEwMiAqIGEyMyAtIGEwMyAqIGEyMik7XG4gIG91dFs2XSA9IC0oYTAwICogKGExMiAqIGEzMyAtIGExMyAqIGEzMikgLSBhMTAgKiAoYTAyICogYTMzIC0gYTAzICogYTMyKSArIGEzMCAqIChhMDIgKiBhMTMgLSBhMDMgKiBhMTIpKTtcbiAgb3V0WzddID0gYTAwICogKGExMiAqIGEyMyAtIGExMyAqIGEyMikgLSBhMTAgKiAoYTAyICogYTIzIC0gYTAzICogYTIyKSArIGEyMCAqIChhMDIgKiBhMTMgLSBhMDMgKiBhMTIpO1xuICBvdXRbOF0gPSBhMTAgKiAoYTIxICogYTMzIC0gYTIzICogYTMxKSAtIGEyMCAqIChhMTEgKiBhMzMgLSBhMTMgKiBhMzEpICsgYTMwICogKGExMSAqIGEyMyAtIGExMyAqIGEyMSk7XG4gIG91dFs5XSA9IC0oYTAwICogKGEyMSAqIGEzMyAtIGEyMyAqIGEzMSkgLSBhMjAgKiAoYTAxICogYTMzIC0gYTAzICogYTMxKSArIGEzMCAqIChhMDEgKiBhMjMgLSBhMDMgKiBhMjEpKTtcbiAgb3V0WzEwXSA9IGEwMCAqIChhMTEgKiBhMzMgLSBhMTMgKiBhMzEpIC0gYTEwICogKGEwMSAqIGEzMyAtIGEwMyAqIGEzMSkgKyBhMzAgKiAoYTAxICogYTEzIC0gYTAzICogYTExKTtcbiAgb3V0WzExXSA9IC0oYTAwICogKGExMSAqIGEyMyAtIGExMyAqIGEyMSkgLSBhMTAgKiAoYTAxICogYTIzIC0gYTAzICogYTIxKSArIGEyMCAqIChhMDEgKiBhMTMgLSBhMDMgKiBhMTEpKTtcbiAgb3V0WzEyXSA9IC0oYTEwICogKGEyMSAqIGEzMiAtIGEyMiAqIGEzMSkgLSBhMjAgKiAoYTExICogYTMyIC0gYTEyICogYTMxKSArIGEzMCAqIChhMTEgKiBhMjIgLSBhMTIgKiBhMjEpKTtcbiAgb3V0WzEzXSA9IGEwMCAqIChhMjEgKiBhMzIgLSBhMjIgKiBhMzEpIC0gYTIwICogKGEwMSAqIGEzMiAtIGEwMiAqIGEzMSkgKyBhMzAgKiAoYTAxICogYTIyIC0gYTAyICogYTIxKTtcbiAgb3V0WzE0XSA9IC0oYTAwICogKGExMSAqIGEzMiAtIGExMiAqIGEzMSkgLSBhMTAgKiAoYTAxICogYTMyIC0gYTAyICogYTMxKSArIGEzMCAqIChhMDEgKiBhMTIgLSBhMDIgKiBhMTEpKTtcbiAgb3V0WzE1XSA9IGEwMCAqIChhMTEgKiBhMjIgLSBhMTIgKiBhMjEpIC0gYTEwICogKGEwMSAqIGEyMiAtIGEwMiAqIGEyMSkgKyBhMjAgKiAoYTAxICogYTEyIC0gYTAyICogYTExKTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBkZXRlcm1pbmFudCBvZiBhIG1hdDRcclxuICpcclxuICogQHBhcmFtIHtSZWFkb25seU1hdDR9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge051bWJlcn0gZGV0ZXJtaW5hbnQgb2YgYVxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGRldGVybWluYW50KGEpIHtcbiAgdmFyIGEwMCA9IGFbMF0sXG4gICAgICBhMDEgPSBhWzFdLFxuICAgICAgYTAyID0gYVsyXSxcbiAgICAgIGEwMyA9IGFbM107XG4gIHZhciBhMTAgPSBhWzRdLFxuICAgICAgYTExID0gYVs1XSxcbiAgICAgIGExMiA9IGFbNl0sXG4gICAgICBhMTMgPSBhWzddO1xuICB2YXIgYTIwID0gYVs4XSxcbiAgICAgIGEyMSA9IGFbOV0sXG4gICAgICBhMjIgPSBhWzEwXSxcbiAgICAgIGEyMyA9IGFbMTFdO1xuICB2YXIgYTMwID0gYVsxMl0sXG4gICAgICBhMzEgPSBhWzEzXSxcbiAgICAgIGEzMiA9IGFbMTRdLFxuICAgICAgYTMzID0gYVsxNV07XG4gIHZhciBiMDAgPSBhMDAgKiBhMTEgLSBhMDEgKiBhMTA7XG4gIHZhciBiMDEgPSBhMDAgKiBhMTIgLSBhMDIgKiBhMTA7XG4gIHZhciBiMDIgPSBhMDAgKiBhMTMgLSBhMDMgKiBhMTA7XG4gIHZhciBiMDMgPSBhMDEgKiBhMTIgLSBhMDIgKiBhMTE7XG4gIHZhciBiMDQgPSBhMDEgKiBhMTMgLSBhMDMgKiBhMTE7XG4gIHZhciBiMDUgPSBhMDIgKiBhMTMgLSBhMDMgKiBhMTI7XG4gIHZhciBiMDYgPSBhMjAgKiBhMzEgLSBhMjEgKiBhMzA7XG4gIHZhciBiMDcgPSBhMjAgKiBhMzIgLSBhMjIgKiBhMzA7XG4gIHZhciBiMDggPSBhMjAgKiBhMzMgLSBhMjMgKiBhMzA7XG4gIHZhciBiMDkgPSBhMjEgKiBhMzIgLSBhMjIgKiBhMzE7XG4gIHZhciBiMTAgPSBhMjEgKiBhMzMgLSBhMjMgKiBhMzE7XG4gIHZhciBiMTEgPSBhMjIgKiBhMzMgLSBhMjMgKiBhMzI7IC8vIENhbGN1bGF0ZSB0aGUgZGV0ZXJtaW5hbnRcblxuICByZXR1cm4gYjAwICogYjExIC0gYjAxICogYjEwICsgYjAyICogYjA5ICsgYjAzICogYjA4IC0gYjA0ICogYjA3ICsgYjA1ICogYjA2O1xufVxuLyoqXHJcbiAqIE11bHRpcGxpZXMgdHdvIG1hdDRzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlNYXQ0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlNYXQ0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbXVsdGlwbHkob3V0LCBhLCBiKSB7XG4gIHZhciBhMDAgPSBhWzBdLFxuICAgICAgYTAxID0gYVsxXSxcbiAgICAgIGEwMiA9IGFbMl0sXG4gICAgICBhMDMgPSBhWzNdO1xuICB2YXIgYTEwID0gYVs0XSxcbiAgICAgIGExMSA9IGFbNV0sXG4gICAgICBhMTIgPSBhWzZdLFxuICAgICAgYTEzID0gYVs3XTtcbiAgdmFyIGEyMCA9IGFbOF0sXG4gICAgICBhMjEgPSBhWzldLFxuICAgICAgYTIyID0gYVsxMF0sXG4gICAgICBhMjMgPSBhWzExXTtcbiAgdmFyIGEzMCA9IGFbMTJdLFxuICAgICAgYTMxID0gYVsxM10sXG4gICAgICBhMzIgPSBhWzE0XSxcbiAgICAgIGEzMyA9IGFbMTVdOyAvLyBDYWNoZSBvbmx5IHRoZSBjdXJyZW50IGxpbmUgb2YgdGhlIHNlY29uZCBtYXRyaXhcblxuICB2YXIgYjAgPSBiWzBdLFxuICAgICAgYjEgPSBiWzFdLFxuICAgICAgYjIgPSBiWzJdLFxuICAgICAgYjMgPSBiWzNdO1xuICBvdXRbMF0gPSBiMCAqIGEwMCArIGIxICogYTEwICsgYjIgKiBhMjAgKyBiMyAqIGEzMDtcbiAgb3V0WzFdID0gYjAgKiBhMDEgKyBiMSAqIGExMSArIGIyICogYTIxICsgYjMgKiBhMzE7XG4gIG91dFsyXSA9IGIwICogYTAyICsgYjEgKiBhMTIgKyBiMiAqIGEyMiArIGIzICogYTMyO1xuICBvdXRbM10gPSBiMCAqIGEwMyArIGIxICogYTEzICsgYjIgKiBhMjMgKyBiMyAqIGEzMztcbiAgYjAgPSBiWzRdO1xuICBiMSA9IGJbNV07XG4gIGIyID0gYls2XTtcbiAgYjMgPSBiWzddO1xuICBvdXRbNF0gPSBiMCAqIGEwMCArIGIxICogYTEwICsgYjIgKiBhMjAgKyBiMyAqIGEzMDtcbiAgb3V0WzVdID0gYjAgKiBhMDEgKyBiMSAqIGExMSArIGIyICogYTIxICsgYjMgKiBhMzE7XG4gIG91dFs2XSA9IGIwICogYTAyICsgYjEgKiBhMTIgKyBiMiAqIGEyMiArIGIzICogYTMyO1xuICBvdXRbN10gPSBiMCAqIGEwMyArIGIxICogYTEzICsgYjIgKiBhMjMgKyBiMyAqIGEzMztcbiAgYjAgPSBiWzhdO1xuICBiMSA9IGJbOV07XG4gIGIyID0gYlsxMF07XG4gIGIzID0gYlsxMV07XG4gIG91dFs4XSA9IGIwICogYTAwICsgYjEgKiBhMTAgKyBiMiAqIGEyMCArIGIzICogYTMwO1xuICBvdXRbOV0gPSBiMCAqIGEwMSArIGIxICogYTExICsgYjIgKiBhMjEgKyBiMyAqIGEzMTtcbiAgb3V0WzEwXSA9IGIwICogYTAyICsgYjEgKiBhMTIgKyBiMiAqIGEyMiArIGIzICogYTMyO1xuICBvdXRbMTFdID0gYjAgKiBhMDMgKyBiMSAqIGExMyArIGIyICogYTIzICsgYjMgKiBhMzM7XG4gIGIwID0gYlsxMl07XG4gIGIxID0gYlsxM107XG4gIGIyID0gYlsxNF07XG4gIGIzID0gYlsxNV07XG4gIG91dFsxMl0gPSBiMCAqIGEwMCArIGIxICogYTEwICsgYjIgKiBhMjAgKyBiMyAqIGEzMDtcbiAgb3V0WzEzXSA9IGIwICogYTAxICsgYjEgKiBhMTEgKyBiMiAqIGEyMSArIGIzICogYTMxO1xuICBvdXRbMTRdID0gYjAgKiBhMDIgKyBiMSAqIGExMiArIGIyICogYTIyICsgYjMgKiBhMzI7XG4gIG91dFsxNV0gPSBiMCAqIGEwMyArIGIxICogYTEzICsgYjIgKiBhMjMgKyBiMyAqIGEzMztcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBUcmFuc2xhdGUgYSBtYXQ0IGJ5IHRoZSBnaXZlbiB2ZWN0b3JcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHtSZWFkb25seU1hdDR9IGEgdGhlIG1hdHJpeCB0byB0cmFuc2xhdGVcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzN9IHYgdmVjdG9yIHRvIHRyYW5zbGF0ZSBieVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNsYXRlKG91dCwgYSwgdikge1xuICB2YXIgeCA9IHZbMF0sXG4gICAgICB5ID0gdlsxXSxcbiAgICAgIHogPSB2WzJdO1xuICB2YXIgYTAwLCBhMDEsIGEwMiwgYTAzO1xuICB2YXIgYTEwLCBhMTEsIGExMiwgYTEzO1xuICB2YXIgYTIwLCBhMjEsIGEyMiwgYTIzO1xuXG4gIGlmIChhID09PSBvdXQpIHtcbiAgICBvdXRbMTJdID0gYVswXSAqIHggKyBhWzRdICogeSArIGFbOF0gKiB6ICsgYVsxMl07XG4gICAgb3V0WzEzXSA9IGFbMV0gKiB4ICsgYVs1XSAqIHkgKyBhWzldICogeiArIGFbMTNdO1xuICAgIG91dFsxNF0gPSBhWzJdICogeCArIGFbNl0gKiB5ICsgYVsxMF0gKiB6ICsgYVsxNF07XG4gICAgb3V0WzE1XSA9IGFbM10gKiB4ICsgYVs3XSAqIHkgKyBhWzExXSAqIHogKyBhWzE1XTtcbiAgfSBlbHNlIHtcbiAgICBhMDAgPSBhWzBdO1xuICAgIGEwMSA9IGFbMV07XG4gICAgYTAyID0gYVsyXTtcbiAgICBhMDMgPSBhWzNdO1xuICAgIGExMCA9IGFbNF07XG4gICAgYTExID0gYVs1XTtcbiAgICBhMTIgPSBhWzZdO1xuICAgIGExMyA9IGFbN107XG4gICAgYTIwID0gYVs4XTtcbiAgICBhMjEgPSBhWzldO1xuICAgIGEyMiA9IGFbMTBdO1xuICAgIGEyMyA9IGFbMTFdO1xuICAgIG91dFswXSA9IGEwMDtcbiAgICBvdXRbMV0gPSBhMDE7XG4gICAgb3V0WzJdID0gYTAyO1xuICAgIG91dFszXSA9IGEwMztcbiAgICBvdXRbNF0gPSBhMTA7XG4gICAgb3V0WzVdID0gYTExO1xuICAgIG91dFs2XSA9IGExMjtcbiAgICBvdXRbN10gPSBhMTM7XG4gICAgb3V0WzhdID0gYTIwO1xuICAgIG91dFs5XSA9IGEyMTtcbiAgICBvdXRbMTBdID0gYTIyO1xuICAgIG91dFsxMV0gPSBhMjM7XG4gICAgb3V0WzEyXSA9IGEwMCAqIHggKyBhMTAgKiB5ICsgYTIwICogeiArIGFbMTJdO1xuICAgIG91dFsxM10gPSBhMDEgKiB4ICsgYTExICogeSArIGEyMSAqIHogKyBhWzEzXTtcbiAgICBvdXRbMTRdID0gYTAyICogeCArIGExMiAqIHkgKyBhMjIgKiB6ICsgYVsxNF07XG4gICAgb3V0WzE1XSA9IGEwMyAqIHggKyBhMTMgKiB5ICsgYTIzICogeiArIGFbMTVdO1xuICB9XG5cbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBTY2FsZXMgdGhlIG1hdDQgYnkgdGhlIGRpbWVuc2lvbnMgaW4gdGhlIGdpdmVuIHZlYzMgbm90IHVzaW5nIHZlY3Rvcml6YXRpb25cclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHtSZWFkb25seU1hdDR9IGEgdGhlIG1hdHJpeCB0byBzY2FsZVxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjM30gdiB0aGUgdmVjMyB0byBzY2FsZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICoqL1xuXG5leHBvcnQgZnVuY3Rpb24gc2NhbGUob3V0LCBhLCB2KSB7XG4gIHZhciB4ID0gdlswXSxcbiAgICAgIHkgPSB2WzFdLFxuICAgICAgeiA9IHZbMl07XG4gIG91dFswXSA9IGFbMF0gKiB4O1xuICBvdXRbMV0gPSBhWzFdICogeDtcbiAgb3V0WzJdID0gYVsyXSAqIHg7XG4gIG91dFszXSA9IGFbM10gKiB4O1xuICBvdXRbNF0gPSBhWzRdICogeTtcbiAgb3V0WzVdID0gYVs1XSAqIHk7XG4gIG91dFs2XSA9IGFbNl0gKiB5O1xuICBvdXRbN10gPSBhWzddICogeTtcbiAgb3V0WzhdID0gYVs4XSAqIHo7XG4gIG91dFs5XSA9IGFbOV0gKiB6O1xuICBvdXRbMTBdID0gYVsxMF0gKiB6O1xuICBvdXRbMTFdID0gYVsxMV0gKiB6O1xuICBvdXRbMTJdID0gYVsxMl07XG4gIG91dFsxM10gPSBhWzEzXTtcbiAgb3V0WzE0XSA9IGFbMTRdO1xuICBvdXRbMTVdID0gYVsxNV07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUm90YXRlcyBhIG1hdDQgYnkgdGhlIGdpdmVuIGFuZ2xlIGFyb3VuZCB0aGUgZ2l2ZW4gYXhpc1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5TWF0NH0gYSB0aGUgbWF0cml4IHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmFkIHRoZSBhbmdsZSB0byByb3RhdGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjM30gYXhpcyB0aGUgYXhpcyB0byByb3RhdGUgYXJvdW5kXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiByb3RhdGUob3V0LCBhLCByYWQsIGF4aXMpIHtcbiAgdmFyIHggPSBheGlzWzBdLFxuICAgICAgeSA9IGF4aXNbMV0sXG4gICAgICB6ID0gYXhpc1syXTtcbiAgdmFyIGxlbiA9IE1hdGguaHlwb3QoeCwgeSwgeik7XG4gIHZhciBzLCBjLCB0O1xuICB2YXIgYTAwLCBhMDEsIGEwMiwgYTAzO1xuICB2YXIgYTEwLCBhMTEsIGExMiwgYTEzO1xuICB2YXIgYTIwLCBhMjEsIGEyMiwgYTIzO1xuICB2YXIgYjAwLCBiMDEsIGIwMjtcbiAgdmFyIGIxMCwgYjExLCBiMTI7XG4gIHZhciBiMjAsIGIyMSwgYjIyO1xuXG4gIGlmIChsZW4gPCBnbE1hdHJpeC5FUFNJTE9OKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBsZW4gPSAxIC8gbGVuO1xuICB4ICo9IGxlbjtcbiAgeSAqPSBsZW47XG4gIHogKj0gbGVuO1xuICBzID0gTWF0aC5zaW4ocmFkKTtcbiAgYyA9IE1hdGguY29zKHJhZCk7XG4gIHQgPSAxIC0gYztcbiAgYTAwID0gYVswXTtcbiAgYTAxID0gYVsxXTtcbiAgYTAyID0gYVsyXTtcbiAgYTAzID0gYVszXTtcbiAgYTEwID0gYVs0XTtcbiAgYTExID0gYVs1XTtcbiAgYTEyID0gYVs2XTtcbiAgYTEzID0gYVs3XTtcbiAgYTIwID0gYVs4XTtcbiAgYTIxID0gYVs5XTtcbiAgYTIyID0gYVsxMF07XG4gIGEyMyA9IGFbMTFdOyAvLyBDb25zdHJ1Y3QgdGhlIGVsZW1lbnRzIG9mIHRoZSByb3RhdGlvbiBtYXRyaXhcblxuICBiMDAgPSB4ICogeCAqIHQgKyBjO1xuICBiMDEgPSB5ICogeCAqIHQgKyB6ICogcztcbiAgYjAyID0geiAqIHggKiB0IC0geSAqIHM7XG4gIGIxMCA9IHggKiB5ICogdCAtIHogKiBzO1xuICBiMTEgPSB5ICogeSAqIHQgKyBjO1xuICBiMTIgPSB6ICogeSAqIHQgKyB4ICogcztcbiAgYjIwID0geCAqIHogKiB0ICsgeSAqIHM7XG4gIGIyMSA9IHkgKiB6ICogdCAtIHggKiBzO1xuICBiMjIgPSB6ICogeiAqIHQgKyBjOyAvLyBQZXJmb3JtIHJvdGF0aW9uLXNwZWNpZmljIG1hdHJpeCBtdWx0aXBsaWNhdGlvblxuXG4gIG91dFswXSA9IGEwMCAqIGIwMCArIGExMCAqIGIwMSArIGEyMCAqIGIwMjtcbiAgb3V0WzFdID0gYTAxICogYjAwICsgYTExICogYjAxICsgYTIxICogYjAyO1xuICBvdXRbMl0gPSBhMDIgKiBiMDAgKyBhMTIgKiBiMDEgKyBhMjIgKiBiMDI7XG4gIG91dFszXSA9IGEwMyAqIGIwMCArIGExMyAqIGIwMSArIGEyMyAqIGIwMjtcbiAgb3V0WzRdID0gYTAwICogYjEwICsgYTEwICogYjExICsgYTIwICogYjEyO1xuICBvdXRbNV0gPSBhMDEgKiBiMTAgKyBhMTEgKiBiMTEgKyBhMjEgKiBiMTI7XG4gIG91dFs2XSA9IGEwMiAqIGIxMCArIGExMiAqIGIxMSArIGEyMiAqIGIxMjtcbiAgb3V0WzddID0gYTAzICogYjEwICsgYTEzICogYjExICsgYTIzICogYjEyO1xuICBvdXRbOF0gPSBhMDAgKiBiMjAgKyBhMTAgKiBiMjEgKyBhMjAgKiBiMjI7XG4gIG91dFs5XSA9IGEwMSAqIGIyMCArIGExMSAqIGIyMSArIGEyMSAqIGIyMjtcbiAgb3V0WzEwXSA9IGEwMiAqIGIyMCArIGExMiAqIGIyMSArIGEyMiAqIGIyMjtcbiAgb3V0WzExXSA9IGEwMyAqIGIyMCArIGExMyAqIGIyMSArIGEyMyAqIGIyMjtcblxuICBpZiAoYSAhPT0gb3V0KSB7XG4gICAgLy8gSWYgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gZGlmZmVyLCBjb3B5IHRoZSB1bmNoYW5nZWQgbGFzdCByb3dcbiAgICBvdXRbMTJdID0gYVsxMl07XG4gICAgb3V0WzEzXSA9IGFbMTNdO1xuICAgIG91dFsxNF0gPSBhWzE0XTtcbiAgICBvdXRbMTVdID0gYVsxNV07XG4gIH1cblxuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJvdGF0ZXMgYSBtYXRyaXggYnkgdGhlIGdpdmVuIGFuZ2xlIGFyb3VuZCB0aGUgWCBheGlzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlNYXQ0fSBhIHRoZSBtYXRyaXggdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgdGhlIGFuZ2xlIHRvIHJvdGF0ZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiByb3RhdGVYKG91dCwgYSwgcmFkKSB7XG4gIHZhciBzID0gTWF0aC5zaW4ocmFkKTtcbiAgdmFyIGMgPSBNYXRoLmNvcyhyYWQpO1xuICB2YXIgYTEwID0gYVs0XTtcbiAgdmFyIGExMSA9IGFbNV07XG4gIHZhciBhMTIgPSBhWzZdO1xuICB2YXIgYTEzID0gYVs3XTtcbiAgdmFyIGEyMCA9IGFbOF07XG4gIHZhciBhMjEgPSBhWzldO1xuICB2YXIgYTIyID0gYVsxMF07XG4gIHZhciBhMjMgPSBhWzExXTtcblxuICBpZiAoYSAhPT0gb3V0KSB7XG4gICAgLy8gSWYgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gZGlmZmVyLCBjb3B5IHRoZSB1bmNoYW5nZWQgcm93c1xuICAgIG91dFswXSA9IGFbMF07XG4gICAgb3V0WzFdID0gYVsxXTtcbiAgICBvdXRbMl0gPSBhWzJdO1xuICAgIG91dFszXSA9IGFbM107XG4gICAgb3V0WzEyXSA9IGFbMTJdO1xuICAgIG91dFsxM10gPSBhWzEzXTtcbiAgICBvdXRbMTRdID0gYVsxNF07XG4gICAgb3V0WzE1XSA9IGFbMTVdO1xuICB9IC8vIFBlcmZvcm0gYXhpcy1zcGVjaWZpYyBtYXRyaXggbXVsdGlwbGljYXRpb25cblxuXG4gIG91dFs0XSA9IGExMCAqIGMgKyBhMjAgKiBzO1xuICBvdXRbNV0gPSBhMTEgKiBjICsgYTIxICogcztcbiAgb3V0WzZdID0gYTEyICogYyArIGEyMiAqIHM7XG4gIG91dFs3XSA9IGExMyAqIGMgKyBhMjMgKiBzO1xuICBvdXRbOF0gPSBhMjAgKiBjIC0gYTEwICogcztcbiAgb3V0WzldID0gYTIxICogYyAtIGExMSAqIHM7XG4gIG91dFsxMF0gPSBhMjIgKiBjIC0gYTEyICogcztcbiAgb3V0WzExXSA9IGEyMyAqIGMgLSBhMTMgKiBzO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJvdGF0ZXMgYSBtYXRyaXggYnkgdGhlIGdpdmVuIGFuZ2xlIGFyb3VuZCB0aGUgWSBheGlzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlNYXQ0fSBhIHRoZSBtYXRyaXggdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgdGhlIGFuZ2xlIHRvIHJvdGF0ZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiByb3RhdGVZKG91dCwgYSwgcmFkKSB7XG4gIHZhciBzID0gTWF0aC5zaW4ocmFkKTtcbiAgdmFyIGMgPSBNYXRoLmNvcyhyYWQpO1xuICB2YXIgYTAwID0gYVswXTtcbiAgdmFyIGEwMSA9IGFbMV07XG4gIHZhciBhMDIgPSBhWzJdO1xuICB2YXIgYTAzID0gYVszXTtcbiAgdmFyIGEyMCA9IGFbOF07XG4gIHZhciBhMjEgPSBhWzldO1xuICB2YXIgYTIyID0gYVsxMF07XG4gIHZhciBhMjMgPSBhWzExXTtcblxuICBpZiAoYSAhPT0gb3V0KSB7XG4gICAgLy8gSWYgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gZGlmZmVyLCBjb3B5IHRoZSB1bmNoYW5nZWQgcm93c1xuICAgIG91dFs0XSA9IGFbNF07XG4gICAgb3V0WzVdID0gYVs1XTtcbiAgICBvdXRbNl0gPSBhWzZdO1xuICAgIG91dFs3XSA9IGFbN107XG4gICAgb3V0WzEyXSA9IGFbMTJdO1xuICAgIG91dFsxM10gPSBhWzEzXTtcbiAgICBvdXRbMTRdID0gYVsxNF07XG4gICAgb3V0WzE1XSA9IGFbMTVdO1xuICB9IC8vIFBlcmZvcm0gYXhpcy1zcGVjaWZpYyBtYXRyaXggbXVsdGlwbGljYXRpb25cblxuXG4gIG91dFswXSA9IGEwMCAqIGMgLSBhMjAgKiBzO1xuICBvdXRbMV0gPSBhMDEgKiBjIC0gYTIxICogcztcbiAgb3V0WzJdID0gYTAyICogYyAtIGEyMiAqIHM7XG4gIG91dFszXSA9IGEwMyAqIGMgLSBhMjMgKiBzO1xuICBvdXRbOF0gPSBhMDAgKiBzICsgYTIwICogYztcbiAgb3V0WzldID0gYTAxICogcyArIGEyMSAqIGM7XG4gIG91dFsxMF0gPSBhMDIgKiBzICsgYTIyICogYztcbiAgb3V0WzExXSA9IGEwMyAqIHMgKyBhMjMgKiBjO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJvdGF0ZXMgYSBtYXRyaXggYnkgdGhlIGdpdmVuIGFuZ2xlIGFyb3VuZCB0aGUgWiBheGlzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlNYXQ0fSBhIHRoZSBtYXRyaXggdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgdGhlIGFuZ2xlIHRvIHJvdGF0ZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiByb3RhdGVaKG91dCwgYSwgcmFkKSB7XG4gIHZhciBzID0gTWF0aC5zaW4ocmFkKTtcbiAgdmFyIGMgPSBNYXRoLmNvcyhyYWQpO1xuICB2YXIgYTAwID0gYVswXTtcbiAgdmFyIGEwMSA9IGFbMV07XG4gIHZhciBhMDIgPSBhWzJdO1xuICB2YXIgYTAzID0gYVszXTtcbiAgdmFyIGExMCA9IGFbNF07XG4gIHZhciBhMTEgPSBhWzVdO1xuICB2YXIgYTEyID0gYVs2XTtcbiAgdmFyIGExMyA9IGFbN107XG5cbiAgaWYgKGEgIT09IG91dCkge1xuICAgIC8vIElmIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGRpZmZlciwgY29weSB0aGUgdW5jaGFuZ2VkIGxhc3Qgcm93XG4gICAgb3V0WzhdID0gYVs4XTtcbiAgICBvdXRbOV0gPSBhWzldO1xuICAgIG91dFsxMF0gPSBhWzEwXTtcbiAgICBvdXRbMTFdID0gYVsxMV07XG4gICAgb3V0WzEyXSA9IGFbMTJdO1xuICAgIG91dFsxM10gPSBhWzEzXTtcbiAgICBvdXRbMTRdID0gYVsxNF07XG4gICAgb3V0WzE1XSA9IGFbMTVdO1xuICB9IC8vIFBlcmZvcm0gYXhpcy1zcGVjaWZpYyBtYXRyaXggbXVsdGlwbGljYXRpb25cblxuXG4gIG91dFswXSA9IGEwMCAqIGMgKyBhMTAgKiBzO1xuICBvdXRbMV0gPSBhMDEgKiBjICsgYTExICogcztcbiAgb3V0WzJdID0gYTAyICogYyArIGExMiAqIHM7XG4gIG91dFszXSA9IGEwMyAqIGMgKyBhMTMgKiBzO1xuICBvdXRbNF0gPSBhMTAgKiBjIC0gYTAwICogcztcbiAgb3V0WzVdID0gYTExICogYyAtIGEwMSAqIHM7XG4gIG91dFs2XSA9IGExMiAqIGMgLSBhMDIgKiBzO1xuICBvdXRbN10gPSBhMTMgKiBjIC0gYTAzICogcztcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbWF0cml4IGZyb20gYSB2ZWN0b3IgdHJhbnNsYXRpb25cclxuICogVGhpcyBpcyBlcXVpdmFsZW50IHRvIChidXQgbXVjaCBmYXN0ZXIgdGhhbik6XHJcbiAqXHJcbiAqICAgICBtYXQ0LmlkZW50aXR5KGRlc3QpO1xyXG4gKiAgICAgbWF0NC50cmFuc2xhdGUoZGVzdCwgZGVzdCwgdmVjKTtcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgbWF0NCByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjM30gdiBUcmFuc2xhdGlvbiB2ZWN0b3JcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21UcmFuc2xhdGlvbihvdXQsIHYpIHtcbiAgb3V0WzBdID0gMTtcbiAgb3V0WzFdID0gMDtcbiAgb3V0WzJdID0gMDtcbiAgb3V0WzNdID0gMDtcbiAgb3V0WzRdID0gMDtcbiAgb3V0WzVdID0gMTtcbiAgb3V0WzZdID0gMDtcbiAgb3V0WzddID0gMDtcbiAgb3V0WzhdID0gMDtcbiAgb3V0WzldID0gMDtcbiAgb3V0WzEwXSA9IDE7XG4gIG91dFsxMV0gPSAwO1xuICBvdXRbMTJdID0gdlswXTtcbiAgb3V0WzEzXSA9IHZbMV07XG4gIG91dFsxNF0gPSB2WzJdO1xuICBvdXRbMTVdID0gMTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbWF0cml4IGZyb20gYSB2ZWN0b3Igc2NhbGluZ1xyXG4gKiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gKGJ1dCBtdWNoIGZhc3RlciB0aGFuKTpcclxuICpcclxuICogICAgIG1hdDQuaWRlbnRpdHkoZGVzdCk7XHJcbiAqICAgICBtYXQ0LnNjYWxlKGRlc3QsIGRlc3QsIHZlYyk7XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IG1hdDQgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzN9IHYgU2NhbGluZyB2ZWN0b3JcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21TY2FsaW5nKG91dCwgdikge1xuICBvdXRbMF0gPSB2WzBdO1xuICBvdXRbMV0gPSAwO1xuICBvdXRbMl0gPSAwO1xuICBvdXRbM10gPSAwO1xuICBvdXRbNF0gPSAwO1xuICBvdXRbNV0gPSB2WzFdO1xuICBvdXRbNl0gPSAwO1xuICBvdXRbN10gPSAwO1xuICBvdXRbOF0gPSAwO1xuICBvdXRbOV0gPSAwO1xuICBvdXRbMTBdID0gdlsyXTtcbiAgb3V0WzExXSA9IDA7XG4gIG91dFsxMl0gPSAwO1xuICBvdXRbMTNdID0gMDtcbiAgb3V0WzE0XSA9IDA7XG4gIG91dFsxNV0gPSAxO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBtYXRyaXggZnJvbSBhIGdpdmVuIGFuZ2xlIGFyb3VuZCBhIGdpdmVuIGF4aXNcclxuICogVGhpcyBpcyBlcXVpdmFsZW50IHRvIChidXQgbXVjaCBmYXN0ZXIgdGhhbik6XHJcbiAqXHJcbiAqICAgICBtYXQ0LmlkZW50aXR5KGRlc3QpO1xyXG4gKiAgICAgbWF0NC5yb3RhdGUoZGVzdCwgZGVzdCwgcmFkLCBheGlzKTtcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgbWF0NCByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmFkIHRoZSBhbmdsZSB0byByb3RhdGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjM30gYXhpcyB0aGUgYXhpcyB0byByb3RhdGUgYXJvdW5kXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tUm90YXRpb24ob3V0LCByYWQsIGF4aXMpIHtcbiAgdmFyIHggPSBheGlzWzBdLFxuICAgICAgeSA9IGF4aXNbMV0sXG4gICAgICB6ID0gYXhpc1syXTtcbiAgdmFyIGxlbiA9IE1hdGguaHlwb3QoeCwgeSwgeik7XG4gIHZhciBzLCBjLCB0O1xuXG4gIGlmIChsZW4gPCBnbE1hdHJpeC5FUFNJTE9OKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBsZW4gPSAxIC8gbGVuO1xuICB4ICo9IGxlbjtcbiAgeSAqPSBsZW47XG4gIHogKj0gbGVuO1xuICBzID0gTWF0aC5zaW4ocmFkKTtcbiAgYyA9IE1hdGguY29zKHJhZCk7XG4gIHQgPSAxIC0gYzsgLy8gUGVyZm9ybSByb3RhdGlvbi1zcGVjaWZpYyBtYXRyaXggbXVsdGlwbGljYXRpb25cblxuICBvdXRbMF0gPSB4ICogeCAqIHQgKyBjO1xuICBvdXRbMV0gPSB5ICogeCAqIHQgKyB6ICogcztcbiAgb3V0WzJdID0geiAqIHggKiB0IC0geSAqIHM7XG4gIG91dFszXSA9IDA7XG4gIG91dFs0XSA9IHggKiB5ICogdCAtIHogKiBzO1xuICBvdXRbNV0gPSB5ICogeSAqIHQgKyBjO1xuICBvdXRbNl0gPSB6ICogeSAqIHQgKyB4ICogcztcbiAgb3V0WzddID0gMDtcbiAgb3V0WzhdID0geCAqIHogKiB0ICsgeSAqIHM7XG4gIG91dFs5XSA9IHkgKiB6ICogdCAtIHggKiBzO1xuICBvdXRbMTBdID0geiAqIHogKiB0ICsgYztcbiAgb3V0WzExXSA9IDA7XG4gIG91dFsxMl0gPSAwO1xuICBvdXRbMTNdID0gMDtcbiAgb3V0WzE0XSA9IDA7XG4gIG91dFsxNV0gPSAxO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBtYXRyaXggZnJvbSB0aGUgZ2l2ZW4gYW5nbGUgYXJvdW5kIHRoZSBYIGF4aXNcclxuICogVGhpcyBpcyBlcXVpdmFsZW50IHRvIChidXQgbXVjaCBmYXN0ZXIgdGhhbik6XHJcbiAqXHJcbiAqICAgICBtYXQ0LmlkZW50aXR5KGRlc3QpO1xyXG4gKiAgICAgbWF0NC5yb3RhdGVYKGRlc3QsIGRlc3QsIHJhZCk7XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IG1hdDQgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHJhZCB0aGUgYW5nbGUgdG8gcm90YXRlIHRoZSBtYXRyaXggYnlcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21YUm90YXRpb24ob3V0LCByYWQpIHtcbiAgdmFyIHMgPSBNYXRoLnNpbihyYWQpO1xuICB2YXIgYyA9IE1hdGguY29zKHJhZCk7IC8vIFBlcmZvcm0gYXhpcy1zcGVjaWZpYyBtYXRyaXggbXVsdGlwbGljYXRpb25cblxuICBvdXRbMF0gPSAxO1xuICBvdXRbMV0gPSAwO1xuICBvdXRbMl0gPSAwO1xuICBvdXRbM10gPSAwO1xuICBvdXRbNF0gPSAwO1xuICBvdXRbNV0gPSBjO1xuICBvdXRbNl0gPSBzO1xuICBvdXRbN10gPSAwO1xuICBvdXRbOF0gPSAwO1xuICBvdXRbOV0gPSAtcztcbiAgb3V0WzEwXSA9IGM7XG4gIG91dFsxMV0gPSAwO1xuICBvdXRbMTJdID0gMDtcbiAgb3V0WzEzXSA9IDA7XG4gIG91dFsxNF0gPSAwO1xuICBvdXRbMTVdID0gMTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbWF0cml4IGZyb20gdGhlIGdpdmVuIGFuZ2xlIGFyb3VuZCB0aGUgWSBheGlzXHJcbiAqIFRoaXMgaXMgZXF1aXZhbGVudCB0byAoYnV0IG11Y2ggZmFzdGVyIHRoYW4pOlxyXG4gKlxyXG4gKiAgICAgbWF0NC5pZGVudGl0eShkZXN0KTtcclxuICogICAgIG1hdDQucm90YXRlWShkZXN0LCBkZXN0LCByYWQpO1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCBtYXQ0IHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgdGhlIGFuZ2xlIHRvIHJvdGF0ZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tWVJvdGF0aW9uKG91dCwgcmFkKSB7XG4gIHZhciBzID0gTWF0aC5zaW4ocmFkKTtcbiAgdmFyIGMgPSBNYXRoLmNvcyhyYWQpOyAvLyBQZXJmb3JtIGF4aXMtc3BlY2lmaWMgbWF0cml4IG11bHRpcGxpY2F0aW9uXG5cbiAgb3V0WzBdID0gYztcbiAgb3V0WzFdID0gMDtcbiAgb3V0WzJdID0gLXM7XG4gIG91dFszXSA9IDA7XG4gIG91dFs0XSA9IDA7XG4gIG91dFs1XSA9IDE7XG4gIG91dFs2XSA9IDA7XG4gIG91dFs3XSA9IDA7XG4gIG91dFs4XSA9IHM7XG4gIG91dFs5XSA9IDA7XG4gIG91dFsxMF0gPSBjO1xuICBvdXRbMTFdID0gMDtcbiAgb3V0WzEyXSA9IDA7XG4gIG91dFsxM10gPSAwO1xuICBvdXRbMTRdID0gMDtcbiAgb3V0WzE1XSA9IDE7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIG1hdHJpeCBmcm9tIHRoZSBnaXZlbiBhbmdsZSBhcm91bmQgdGhlIFogYXhpc1xyXG4gKiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gKGJ1dCBtdWNoIGZhc3RlciB0aGFuKTpcclxuICpcclxuICogICAgIG1hdDQuaWRlbnRpdHkoZGVzdCk7XHJcbiAqICAgICBtYXQ0LnJvdGF0ZVooZGVzdCwgZGVzdCwgcmFkKTtcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgbWF0NCByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmFkIHRoZSBhbmdsZSB0byByb3RhdGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVpSb3RhdGlvbihvdXQsIHJhZCkge1xuICB2YXIgcyA9IE1hdGguc2luKHJhZCk7XG4gIHZhciBjID0gTWF0aC5jb3MocmFkKTsgLy8gUGVyZm9ybSBheGlzLXNwZWNpZmljIG1hdHJpeCBtdWx0aXBsaWNhdGlvblxuXG4gIG91dFswXSA9IGM7XG4gIG91dFsxXSA9IHM7XG4gIG91dFsyXSA9IDA7XG4gIG91dFszXSA9IDA7XG4gIG91dFs0XSA9IC1zO1xuICBvdXRbNV0gPSBjO1xuICBvdXRbNl0gPSAwO1xuICBvdXRbN10gPSAwO1xuICBvdXRbOF0gPSAwO1xuICBvdXRbOV0gPSAwO1xuICBvdXRbMTBdID0gMTtcbiAgb3V0WzExXSA9IDA7XG4gIG91dFsxMl0gPSAwO1xuICBvdXRbMTNdID0gMDtcbiAgb3V0WzE0XSA9IDA7XG4gIG91dFsxNV0gPSAxO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBtYXRyaXggZnJvbSBhIHF1YXRlcm5pb24gcm90YXRpb24gYW5kIHZlY3RvciB0cmFuc2xhdGlvblxyXG4gKiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gKGJ1dCBtdWNoIGZhc3RlciB0aGFuKTpcclxuICpcclxuICogICAgIG1hdDQuaWRlbnRpdHkoZGVzdCk7XHJcbiAqICAgICBtYXQ0LnRyYW5zbGF0ZShkZXN0LCB2ZWMpO1xyXG4gKiAgICAgbGV0IHF1YXRNYXQgPSBtYXQ0LmNyZWF0ZSgpO1xyXG4gKiAgICAgcXVhdDQudG9NYXQ0KHF1YXQsIHF1YXRNYXQpO1xyXG4gKiAgICAgbWF0NC5tdWx0aXBseShkZXN0LCBxdWF0TWF0KTtcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgbWF0NCByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4gKiBAcGFyYW0ge3F1YXQ0fSBxIFJvdGF0aW9uIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHtSZWFkb25seVZlYzN9IHYgVHJhbnNsYXRpb24gdmVjdG9yXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tUm90YXRpb25UcmFuc2xhdGlvbihvdXQsIHEsIHYpIHtcbiAgLy8gUXVhdGVybmlvbiBtYXRoXG4gIHZhciB4ID0gcVswXSxcbiAgICAgIHkgPSBxWzFdLFxuICAgICAgeiA9IHFbMl0sXG4gICAgICB3ID0gcVszXTtcbiAgdmFyIHgyID0geCArIHg7XG4gIHZhciB5MiA9IHkgKyB5O1xuICB2YXIgejIgPSB6ICsgejtcbiAgdmFyIHh4ID0geCAqIHgyO1xuICB2YXIgeHkgPSB4ICogeTI7XG4gIHZhciB4eiA9IHggKiB6MjtcbiAgdmFyIHl5ID0geSAqIHkyO1xuICB2YXIgeXogPSB5ICogejI7XG4gIHZhciB6eiA9IHogKiB6MjtcbiAgdmFyIHd4ID0gdyAqIHgyO1xuICB2YXIgd3kgPSB3ICogeTI7XG4gIHZhciB3eiA9IHcgKiB6MjtcbiAgb3V0WzBdID0gMSAtICh5eSArIHp6KTtcbiAgb3V0WzFdID0geHkgKyB3ejtcbiAgb3V0WzJdID0geHogLSB3eTtcbiAgb3V0WzNdID0gMDtcbiAgb3V0WzRdID0geHkgLSB3ejtcbiAgb3V0WzVdID0gMSAtICh4eCArIHp6KTtcbiAgb3V0WzZdID0geXogKyB3eDtcbiAgb3V0WzddID0gMDtcbiAgb3V0WzhdID0geHogKyB3eTtcbiAgb3V0WzldID0geXogLSB3eDtcbiAgb3V0WzEwXSA9IDEgLSAoeHggKyB5eSk7XG4gIG91dFsxMV0gPSAwO1xuICBvdXRbMTJdID0gdlswXTtcbiAgb3V0WzEzXSA9IHZbMV07XG4gIG91dFsxNF0gPSB2WzJdO1xuICBvdXRbMTVdID0gMTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IG1hdDQgZnJvbSBhIGR1YWwgcXVhdC5cclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgTWF0cml4XHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlRdWF0Mn0gYSBEdWFsIFF1YXRlcm5pb25cclxuICogQHJldHVybnMge21hdDR9IG1hdDQgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tUXVhdDIob3V0LCBhKSB7XG4gIHZhciB0cmFuc2xhdGlvbiA9IG5ldyBnbE1hdHJpeC5BUlJBWV9UWVBFKDMpO1xuICB2YXIgYnggPSAtYVswXSxcbiAgICAgIGJ5ID0gLWFbMV0sXG4gICAgICBieiA9IC1hWzJdLFxuICAgICAgYncgPSBhWzNdLFxuICAgICAgYXggPSBhWzRdLFxuICAgICAgYXkgPSBhWzVdLFxuICAgICAgYXogPSBhWzZdLFxuICAgICAgYXcgPSBhWzddO1xuICB2YXIgbWFnbml0dWRlID0gYnggKiBieCArIGJ5ICogYnkgKyBieiAqIGJ6ICsgYncgKiBidzsgLy9Pbmx5IHNjYWxlIGlmIGl0IG1ha2VzIHNlbnNlXG5cbiAgaWYgKG1hZ25pdHVkZSA+IDApIHtcbiAgICB0cmFuc2xhdGlvblswXSA9IChheCAqIGJ3ICsgYXcgKiBieCArIGF5ICogYnogLSBheiAqIGJ5KSAqIDIgLyBtYWduaXR1ZGU7XG4gICAgdHJhbnNsYXRpb25bMV0gPSAoYXkgKiBidyArIGF3ICogYnkgKyBheiAqIGJ4IC0gYXggKiBieikgKiAyIC8gbWFnbml0dWRlO1xuICAgIHRyYW5zbGF0aW9uWzJdID0gKGF6ICogYncgKyBhdyAqIGJ6ICsgYXggKiBieSAtIGF5ICogYngpICogMiAvIG1hZ25pdHVkZTtcbiAgfSBlbHNlIHtcbiAgICB0cmFuc2xhdGlvblswXSA9IChheCAqIGJ3ICsgYXcgKiBieCArIGF5ICogYnogLSBheiAqIGJ5KSAqIDI7XG4gICAgdHJhbnNsYXRpb25bMV0gPSAoYXkgKiBidyArIGF3ICogYnkgKyBheiAqIGJ4IC0gYXggKiBieikgKiAyO1xuICAgIHRyYW5zbGF0aW9uWzJdID0gKGF6ICogYncgKyBhdyAqIGJ6ICsgYXggKiBieSAtIGF5ICogYngpICogMjtcbiAgfVxuXG4gIGZyb21Sb3RhdGlvblRyYW5zbGF0aW9uKG91dCwgYSwgdHJhbnNsYXRpb24pO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJldHVybnMgdGhlIHRyYW5zbGF0aW9uIHZlY3RvciBjb21wb25lbnQgb2YgYSB0cmFuc2Zvcm1hdGlvblxyXG4gKiAgbWF0cml4LiBJZiBhIG1hdHJpeCBpcyBidWlsdCB3aXRoIGZyb21Sb3RhdGlvblRyYW5zbGF0aW9uLFxyXG4gKiAgdGhlIHJldHVybmVkIHZlY3RvciB3aWxsIGJlIHRoZSBzYW1lIGFzIHRoZSB0cmFuc2xhdGlvbiB2ZWN0b3JcclxuICogIG9yaWdpbmFsbHkgc3VwcGxpZWQuXHJcbiAqIEBwYXJhbSAge3ZlYzN9IG91dCBWZWN0b3IgdG8gcmVjZWl2ZSB0cmFuc2xhdGlvbiBjb21wb25lbnRcclxuICogQHBhcmFtICB7UmVhZG9ubHlNYXQ0fSBtYXQgTWF0cml4IHRvIGJlIGRlY29tcG9zZWQgKGlucHV0KVxyXG4gKiBAcmV0dXJuIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUcmFuc2xhdGlvbihvdXQsIG1hdCkge1xuICBvdXRbMF0gPSBtYXRbMTJdO1xuICBvdXRbMV0gPSBtYXRbMTNdO1xuICBvdXRbMl0gPSBtYXRbMTRdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJldHVybnMgdGhlIHNjYWxpbmcgZmFjdG9yIGNvbXBvbmVudCBvZiBhIHRyYW5zZm9ybWF0aW9uXHJcbiAqICBtYXRyaXguIElmIGEgbWF0cml4IGlzIGJ1aWx0IHdpdGggZnJvbVJvdGF0aW9uVHJhbnNsYXRpb25TY2FsZVxyXG4gKiAgd2l0aCBhIG5vcm1hbGl6ZWQgUXVhdGVybmlvbiBwYXJhbXRlciwgdGhlIHJldHVybmVkIHZlY3RvciB3aWxsIGJlXHJcbiAqICB0aGUgc2FtZSBhcyB0aGUgc2NhbGluZyB2ZWN0b3JcclxuICogIG9yaWdpbmFsbHkgc3VwcGxpZWQuXHJcbiAqIEBwYXJhbSAge3ZlYzN9IG91dCBWZWN0b3IgdG8gcmVjZWl2ZSBzY2FsaW5nIGZhY3RvciBjb21wb25lbnRcclxuICogQHBhcmFtICB7UmVhZG9ubHlNYXQ0fSBtYXQgTWF0cml4IHRvIGJlIGRlY29tcG9zZWQgKGlucHV0KVxyXG4gKiBAcmV0dXJuIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTY2FsaW5nKG91dCwgbWF0KSB7XG4gIHZhciBtMTEgPSBtYXRbMF07XG4gIHZhciBtMTIgPSBtYXRbMV07XG4gIHZhciBtMTMgPSBtYXRbMl07XG4gIHZhciBtMjEgPSBtYXRbNF07XG4gIHZhciBtMjIgPSBtYXRbNV07XG4gIHZhciBtMjMgPSBtYXRbNl07XG4gIHZhciBtMzEgPSBtYXRbOF07XG4gIHZhciBtMzIgPSBtYXRbOV07XG4gIHZhciBtMzMgPSBtYXRbMTBdO1xuICBvdXRbMF0gPSBNYXRoLmh5cG90KG0xMSwgbTEyLCBtMTMpO1xuICBvdXRbMV0gPSBNYXRoLmh5cG90KG0yMSwgbTIyLCBtMjMpO1xuICBvdXRbMl0gPSBNYXRoLmh5cG90KG0zMSwgbTMyLCBtMzMpO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJldHVybnMgYSBxdWF0ZXJuaW9uIHJlcHJlc2VudGluZyB0aGUgcm90YXRpb25hbCBjb21wb25lbnRcclxuICogIG9mIGEgdHJhbnNmb3JtYXRpb24gbWF0cml4LiBJZiBhIG1hdHJpeCBpcyBidWlsdCB3aXRoXHJcbiAqICBmcm9tUm90YXRpb25UcmFuc2xhdGlvbiwgdGhlIHJldHVybmVkIHF1YXRlcm5pb24gd2lsbCBiZSB0aGVcclxuICogIHNhbWUgYXMgdGhlIHF1YXRlcm5pb24gb3JpZ2luYWxseSBzdXBwbGllZC5cclxuICogQHBhcmFtIHtxdWF0fSBvdXQgUXVhdGVybmlvbiB0byByZWNlaXZlIHRoZSByb3RhdGlvbiBjb21wb25lbnRcclxuICogQHBhcmFtIHtSZWFkb25seU1hdDR9IG1hdCBNYXRyaXggdG8gYmUgZGVjb21wb3NlZCAoaW5wdXQpXHJcbiAqIEByZXR1cm4ge3F1YXR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFJvdGF0aW9uKG91dCwgbWF0KSB7XG4gIHZhciBzY2FsaW5nID0gbmV3IGdsTWF0cml4LkFSUkFZX1RZUEUoMyk7XG4gIGdldFNjYWxpbmcoc2NhbGluZywgbWF0KTtcbiAgdmFyIGlzMSA9IDEgLyBzY2FsaW5nWzBdO1xuICB2YXIgaXMyID0gMSAvIHNjYWxpbmdbMV07XG4gIHZhciBpczMgPSAxIC8gc2NhbGluZ1syXTtcbiAgdmFyIHNtMTEgPSBtYXRbMF0gKiBpczE7XG4gIHZhciBzbTEyID0gbWF0WzFdICogaXMyO1xuICB2YXIgc20xMyA9IG1hdFsyXSAqIGlzMztcbiAgdmFyIHNtMjEgPSBtYXRbNF0gKiBpczE7XG4gIHZhciBzbTIyID0gbWF0WzVdICogaXMyO1xuICB2YXIgc20yMyA9IG1hdFs2XSAqIGlzMztcbiAgdmFyIHNtMzEgPSBtYXRbOF0gKiBpczE7XG4gIHZhciBzbTMyID0gbWF0WzldICogaXMyO1xuICB2YXIgc20zMyA9IG1hdFsxMF0gKiBpczM7XG4gIHZhciB0cmFjZSA9IHNtMTEgKyBzbTIyICsgc20zMztcbiAgdmFyIFMgPSAwO1xuXG4gIGlmICh0cmFjZSA+IDApIHtcbiAgICBTID0gTWF0aC5zcXJ0KHRyYWNlICsgMS4wKSAqIDI7XG4gICAgb3V0WzNdID0gMC4yNSAqIFM7XG4gICAgb3V0WzBdID0gKHNtMjMgLSBzbTMyKSAvIFM7XG4gICAgb3V0WzFdID0gKHNtMzEgLSBzbTEzKSAvIFM7XG4gICAgb3V0WzJdID0gKHNtMTIgLSBzbTIxKSAvIFM7XG4gIH0gZWxzZSBpZiAoc20xMSA+IHNtMjIgJiYgc20xMSA+IHNtMzMpIHtcbiAgICBTID0gTWF0aC5zcXJ0KDEuMCArIHNtMTEgLSBzbTIyIC0gc20zMykgKiAyO1xuICAgIG91dFszXSA9IChzbTIzIC0gc20zMikgLyBTO1xuICAgIG91dFswXSA9IDAuMjUgKiBTO1xuICAgIG91dFsxXSA9IChzbTEyICsgc20yMSkgLyBTO1xuICAgIG91dFsyXSA9IChzbTMxICsgc20xMykgLyBTO1xuICB9IGVsc2UgaWYgKHNtMjIgPiBzbTMzKSB7XG4gICAgUyA9IE1hdGguc3FydCgxLjAgKyBzbTIyIC0gc20xMSAtIHNtMzMpICogMjtcbiAgICBvdXRbM10gPSAoc20zMSAtIHNtMTMpIC8gUztcbiAgICBvdXRbMF0gPSAoc20xMiArIHNtMjEpIC8gUztcbiAgICBvdXRbMV0gPSAwLjI1ICogUztcbiAgICBvdXRbMl0gPSAoc20yMyArIHNtMzIpIC8gUztcbiAgfSBlbHNlIHtcbiAgICBTID0gTWF0aC5zcXJ0KDEuMCArIHNtMzMgLSBzbTExIC0gc20yMikgKiAyO1xuICAgIG91dFszXSA9IChzbTEyIC0gc20yMSkgLyBTO1xuICAgIG91dFswXSA9IChzbTMxICsgc20xMykgLyBTO1xuICAgIG91dFsxXSA9IChzbTIzICsgc20zMikgLyBTO1xuICAgIG91dFsyXSA9IDAuMjUgKiBTO1xuICB9XG5cbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbWF0cml4IGZyb20gYSBxdWF0ZXJuaW9uIHJvdGF0aW9uLCB2ZWN0b3IgdHJhbnNsYXRpb24gYW5kIHZlY3RvciBzY2FsZVxyXG4gKiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gKGJ1dCBtdWNoIGZhc3RlciB0aGFuKTpcclxuICpcclxuICogICAgIG1hdDQuaWRlbnRpdHkoZGVzdCk7XHJcbiAqICAgICBtYXQ0LnRyYW5zbGF0ZShkZXN0LCB2ZWMpO1xyXG4gKiAgICAgbGV0IHF1YXRNYXQgPSBtYXQ0LmNyZWF0ZSgpO1xyXG4gKiAgICAgcXVhdDQudG9NYXQ0KHF1YXQsIHF1YXRNYXQpO1xyXG4gKiAgICAgbWF0NC5tdWx0aXBseShkZXN0LCBxdWF0TWF0KTtcclxuICogICAgIG1hdDQuc2NhbGUoZGVzdCwgc2NhbGUpXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IG1hdDQgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQHBhcmFtIHtxdWF0NH0gcSBSb3RhdGlvbiBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMzfSB2IFRyYW5zbGF0aW9uIHZlY3RvclxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjM30gcyBTY2FsaW5nIHZlY3RvclxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVJvdGF0aW9uVHJhbnNsYXRpb25TY2FsZShvdXQsIHEsIHYsIHMpIHtcbiAgLy8gUXVhdGVybmlvbiBtYXRoXG4gIHZhciB4ID0gcVswXSxcbiAgICAgIHkgPSBxWzFdLFxuICAgICAgeiA9IHFbMl0sXG4gICAgICB3ID0gcVszXTtcbiAgdmFyIHgyID0geCArIHg7XG4gIHZhciB5MiA9IHkgKyB5O1xuICB2YXIgejIgPSB6ICsgejtcbiAgdmFyIHh4ID0geCAqIHgyO1xuICB2YXIgeHkgPSB4ICogeTI7XG4gIHZhciB4eiA9IHggKiB6MjtcbiAgdmFyIHl5ID0geSAqIHkyO1xuICB2YXIgeXogPSB5ICogejI7XG4gIHZhciB6eiA9IHogKiB6MjtcbiAgdmFyIHd4ID0gdyAqIHgyO1xuICB2YXIgd3kgPSB3ICogeTI7XG4gIHZhciB3eiA9IHcgKiB6MjtcbiAgdmFyIHN4ID0gc1swXTtcbiAgdmFyIHN5ID0gc1sxXTtcbiAgdmFyIHN6ID0gc1syXTtcbiAgb3V0WzBdID0gKDEgLSAoeXkgKyB6eikpICogc3g7XG4gIG91dFsxXSA9ICh4eSArIHd6KSAqIHN4O1xuICBvdXRbMl0gPSAoeHogLSB3eSkgKiBzeDtcbiAgb3V0WzNdID0gMDtcbiAgb3V0WzRdID0gKHh5IC0gd3opICogc3k7XG4gIG91dFs1XSA9ICgxIC0gKHh4ICsgenopKSAqIHN5O1xuICBvdXRbNl0gPSAoeXogKyB3eCkgKiBzeTtcbiAgb3V0WzddID0gMDtcbiAgb3V0WzhdID0gKHh6ICsgd3kpICogc3o7XG4gIG91dFs5XSA9ICh5eiAtIHd4KSAqIHN6O1xuICBvdXRbMTBdID0gKDEgLSAoeHggKyB5eSkpICogc3o7XG4gIG91dFsxMV0gPSAwO1xuICBvdXRbMTJdID0gdlswXTtcbiAgb3V0WzEzXSA9IHZbMV07XG4gIG91dFsxNF0gPSB2WzJdO1xuICBvdXRbMTVdID0gMTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbWF0cml4IGZyb20gYSBxdWF0ZXJuaW9uIHJvdGF0aW9uLCB2ZWN0b3IgdHJhbnNsYXRpb24gYW5kIHZlY3RvciBzY2FsZSwgcm90YXRpbmcgYW5kIHNjYWxpbmcgYXJvdW5kIHRoZSBnaXZlbiBvcmlnaW5cclxuICogVGhpcyBpcyBlcXVpdmFsZW50IHRvIChidXQgbXVjaCBmYXN0ZXIgdGhhbik6XHJcbiAqXHJcbiAqICAgICBtYXQ0LmlkZW50aXR5KGRlc3QpO1xyXG4gKiAgICAgbWF0NC50cmFuc2xhdGUoZGVzdCwgdmVjKTtcclxuICogICAgIG1hdDQudHJhbnNsYXRlKGRlc3QsIG9yaWdpbik7XHJcbiAqICAgICBsZXQgcXVhdE1hdCA9IG1hdDQuY3JlYXRlKCk7XHJcbiAqICAgICBxdWF0NC50b01hdDQocXVhdCwgcXVhdE1hdCk7XHJcbiAqICAgICBtYXQ0Lm11bHRpcGx5KGRlc3QsIHF1YXRNYXQpO1xyXG4gKiAgICAgbWF0NC5zY2FsZShkZXN0LCBzY2FsZSlcclxuICogICAgIG1hdDQudHJhbnNsYXRlKGRlc3QsIG5lZ2F0aXZlT3JpZ2luKTtcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgbWF0NCByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4gKiBAcGFyYW0ge3F1YXQ0fSBxIFJvdGF0aW9uIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHtSZWFkb25seVZlYzN9IHYgVHJhbnNsYXRpb24gdmVjdG9yXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMzfSBzIFNjYWxpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMzfSBvIFRoZSBvcmlnaW4gdmVjdG9yIGFyb3VuZCB3aGljaCB0byBzY2FsZSBhbmQgcm90YXRlXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tUm90YXRpb25UcmFuc2xhdGlvblNjYWxlT3JpZ2luKG91dCwgcSwgdiwgcywgbykge1xuICAvLyBRdWF0ZXJuaW9uIG1hdGhcbiAgdmFyIHggPSBxWzBdLFxuICAgICAgeSA9IHFbMV0sXG4gICAgICB6ID0gcVsyXSxcbiAgICAgIHcgPSBxWzNdO1xuICB2YXIgeDIgPSB4ICsgeDtcbiAgdmFyIHkyID0geSArIHk7XG4gIHZhciB6MiA9IHogKyB6O1xuICB2YXIgeHggPSB4ICogeDI7XG4gIHZhciB4eSA9IHggKiB5MjtcbiAgdmFyIHh6ID0geCAqIHoyO1xuICB2YXIgeXkgPSB5ICogeTI7XG4gIHZhciB5eiA9IHkgKiB6MjtcbiAgdmFyIHp6ID0geiAqIHoyO1xuICB2YXIgd3ggPSB3ICogeDI7XG4gIHZhciB3eSA9IHcgKiB5MjtcbiAgdmFyIHd6ID0gdyAqIHoyO1xuICB2YXIgc3ggPSBzWzBdO1xuICB2YXIgc3kgPSBzWzFdO1xuICB2YXIgc3ogPSBzWzJdO1xuICB2YXIgb3ggPSBvWzBdO1xuICB2YXIgb3kgPSBvWzFdO1xuICB2YXIgb3ogPSBvWzJdO1xuICB2YXIgb3V0MCA9ICgxIC0gKHl5ICsgenopKSAqIHN4O1xuICB2YXIgb3V0MSA9ICh4eSArIHd6KSAqIHN4O1xuICB2YXIgb3V0MiA9ICh4eiAtIHd5KSAqIHN4O1xuICB2YXIgb3V0NCA9ICh4eSAtIHd6KSAqIHN5O1xuICB2YXIgb3V0NSA9ICgxIC0gKHh4ICsgenopKSAqIHN5O1xuICB2YXIgb3V0NiA9ICh5eiArIHd4KSAqIHN5O1xuICB2YXIgb3V0OCA9ICh4eiArIHd5KSAqIHN6O1xuICB2YXIgb3V0OSA9ICh5eiAtIHd4KSAqIHN6O1xuICB2YXIgb3V0MTAgPSAoMSAtICh4eCArIHl5KSkgKiBzejtcbiAgb3V0WzBdID0gb3V0MDtcbiAgb3V0WzFdID0gb3V0MTtcbiAgb3V0WzJdID0gb3V0MjtcbiAgb3V0WzNdID0gMDtcbiAgb3V0WzRdID0gb3V0NDtcbiAgb3V0WzVdID0gb3V0NTtcbiAgb3V0WzZdID0gb3V0NjtcbiAgb3V0WzddID0gMDtcbiAgb3V0WzhdID0gb3V0ODtcbiAgb3V0WzldID0gb3V0OTtcbiAgb3V0WzEwXSA9IG91dDEwO1xuICBvdXRbMTFdID0gMDtcbiAgb3V0WzEyXSA9IHZbMF0gKyBveCAtIChvdXQwICogb3ggKyBvdXQ0ICogb3kgKyBvdXQ4ICogb3opO1xuICBvdXRbMTNdID0gdlsxXSArIG95IC0gKG91dDEgKiBveCArIG91dDUgKiBveSArIG91dDkgKiBveik7XG4gIG91dFsxNF0gPSB2WzJdICsgb3ogLSAob3V0MiAqIG94ICsgb3V0NiAqIG95ICsgb3V0MTAgKiBveik7XG4gIG91dFsxNV0gPSAxO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgYSA0eDQgbWF0cml4IGZyb20gdGhlIGdpdmVuIHF1YXRlcm5pb25cclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgbWF0NCByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5UXVhdH0gcSBRdWF0ZXJuaW9uIHRvIGNyZWF0ZSBtYXRyaXggZnJvbVxyXG4gKlxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVF1YXQob3V0LCBxKSB7XG4gIHZhciB4ID0gcVswXSxcbiAgICAgIHkgPSBxWzFdLFxuICAgICAgeiA9IHFbMl0sXG4gICAgICB3ID0gcVszXTtcbiAgdmFyIHgyID0geCArIHg7XG4gIHZhciB5MiA9IHkgKyB5O1xuICB2YXIgejIgPSB6ICsgejtcbiAgdmFyIHh4ID0geCAqIHgyO1xuICB2YXIgeXggPSB5ICogeDI7XG4gIHZhciB5eSA9IHkgKiB5MjtcbiAgdmFyIHp4ID0geiAqIHgyO1xuICB2YXIgenkgPSB6ICogeTI7XG4gIHZhciB6eiA9IHogKiB6MjtcbiAgdmFyIHd4ID0gdyAqIHgyO1xuICB2YXIgd3kgPSB3ICogeTI7XG4gIHZhciB3eiA9IHcgKiB6MjtcbiAgb3V0WzBdID0gMSAtIHl5IC0geno7XG4gIG91dFsxXSA9IHl4ICsgd3o7XG4gIG91dFsyXSA9IHp4IC0gd3k7XG4gIG91dFszXSA9IDA7XG4gIG91dFs0XSA9IHl4IC0gd3o7XG4gIG91dFs1XSA9IDEgLSB4eCAtIHp6O1xuICBvdXRbNl0gPSB6eSArIHd4O1xuICBvdXRbN10gPSAwO1xuICBvdXRbOF0gPSB6eCArIHd5O1xuICBvdXRbOV0gPSB6eSAtIHd4O1xuICBvdXRbMTBdID0gMSAtIHh4IC0geXk7XG4gIG91dFsxMV0gPSAwO1xuICBvdXRbMTJdID0gMDtcbiAgb3V0WzEzXSA9IDA7XG4gIG91dFsxNF0gPSAwO1xuICBvdXRbMTVdID0gMTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBHZW5lcmF0ZXMgYSBmcnVzdHVtIG1hdHJpeCB3aXRoIHRoZSBnaXZlbiBib3VuZHNcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgbWF0NCBmcnVzdHVtIG1hdHJpeCB3aWxsIGJlIHdyaXR0ZW4gaW50b1xyXG4gKiBAcGFyYW0ge051bWJlcn0gbGVmdCBMZWZ0IGJvdW5kIG9mIHRoZSBmcnVzdHVtXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSByaWdodCBSaWdodCBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcGFyYW0ge051bWJlcn0gYm90dG9tIEJvdHRvbSBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcGFyYW0ge051bWJlcn0gdG9wIFRvcCBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbmVhciBOZWFyIGJvdW5kIG9mIHRoZSBmcnVzdHVtXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBmYXIgRmFyIGJvdW5kIG9mIHRoZSBmcnVzdHVtXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcnVzdHVtKG91dCwgbGVmdCwgcmlnaHQsIGJvdHRvbSwgdG9wLCBuZWFyLCBmYXIpIHtcbiAgdmFyIHJsID0gMSAvIChyaWdodCAtIGxlZnQpO1xuICB2YXIgdGIgPSAxIC8gKHRvcCAtIGJvdHRvbSk7XG4gIHZhciBuZiA9IDEgLyAobmVhciAtIGZhcik7XG4gIG91dFswXSA9IG5lYXIgKiAyICogcmw7XG4gIG91dFsxXSA9IDA7XG4gIG91dFsyXSA9IDA7XG4gIG91dFszXSA9IDA7XG4gIG91dFs0XSA9IDA7XG4gIG91dFs1XSA9IG5lYXIgKiAyICogdGI7XG4gIG91dFs2XSA9IDA7XG4gIG91dFs3XSA9IDA7XG4gIG91dFs4XSA9IChyaWdodCArIGxlZnQpICogcmw7XG4gIG91dFs5XSA9ICh0b3AgKyBib3R0b20pICogdGI7XG4gIG91dFsxMF0gPSAoZmFyICsgbmVhcikgKiBuZjtcbiAgb3V0WzExXSA9IC0xO1xuICBvdXRbMTJdID0gMDtcbiAgb3V0WzEzXSA9IDA7XG4gIG91dFsxNF0gPSBmYXIgKiBuZWFyICogMiAqIG5mO1xuICBvdXRbMTVdID0gMDtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBHZW5lcmF0ZXMgYSBwZXJzcGVjdGl2ZSBwcm9qZWN0aW9uIG1hdHJpeCB3aXRoIHRoZSBnaXZlbiBib3VuZHMuXHJcbiAqIFBhc3NpbmcgbnVsbC91bmRlZmluZWQvbm8gdmFsdWUgZm9yIGZhciB3aWxsIGdlbmVyYXRlIGluZmluaXRlIHByb2plY3Rpb24gbWF0cml4LlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCBtYXQ0IGZydXN0dW0gbWF0cml4IHdpbGwgYmUgd3JpdHRlbiBpbnRvXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBmb3Z5IFZlcnRpY2FsIGZpZWxkIG9mIHZpZXcgaW4gcmFkaWFuc1xyXG4gKiBAcGFyYW0ge251bWJlcn0gYXNwZWN0IEFzcGVjdCByYXRpby4gdHlwaWNhbGx5IHZpZXdwb3J0IHdpZHRoL2hlaWdodFxyXG4gKiBAcGFyYW0ge251bWJlcn0gbmVhciBOZWFyIGJvdW5kIG9mIHRoZSBmcnVzdHVtXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBmYXIgRmFyIGJvdW5kIG9mIHRoZSBmcnVzdHVtLCBjYW4gYmUgbnVsbCBvciBJbmZpbml0eVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcGVyc3BlY3RpdmUob3V0LCBmb3Z5LCBhc3BlY3QsIG5lYXIsIGZhcikge1xuICB2YXIgZiA9IDEuMCAvIE1hdGgudGFuKGZvdnkgLyAyKSxcbiAgICAgIG5mO1xuICBvdXRbMF0gPSBmIC8gYXNwZWN0O1xuICBvdXRbMV0gPSAwO1xuICBvdXRbMl0gPSAwO1xuICBvdXRbM10gPSAwO1xuICBvdXRbNF0gPSAwO1xuICBvdXRbNV0gPSBmO1xuICBvdXRbNl0gPSAwO1xuICBvdXRbN10gPSAwO1xuICBvdXRbOF0gPSAwO1xuICBvdXRbOV0gPSAwO1xuICBvdXRbMTFdID0gLTE7XG4gIG91dFsxMl0gPSAwO1xuICBvdXRbMTNdID0gMDtcbiAgb3V0WzE1XSA9IDA7XG5cbiAgaWYgKGZhciAhPSBudWxsICYmIGZhciAhPT0gSW5maW5pdHkpIHtcbiAgICBuZiA9IDEgLyAobmVhciAtIGZhcik7XG4gICAgb3V0WzEwXSA9IChmYXIgKyBuZWFyKSAqIG5mO1xuICAgIG91dFsxNF0gPSAyICogZmFyICogbmVhciAqIG5mO1xuICB9IGVsc2Uge1xuICAgIG91dFsxMF0gPSAtMTtcbiAgICBvdXRbMTRdID0gLTIgKiBuZWFyO1xuICB9XG5cbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBHZW5lcmF0ZXMgYSBwZXJzcGVjdGl2ZSBwcm9qZWN0aW9uIG1hdHJpeCB3aXRoIHRoZSBnaXZlbiBmaWVsZCBvZiB2aWV3LlxyXG4gKiBUaGlzIGlzIHByaW1hcmlseSB1c2VmdWwgZm9yIGdlbmVyYXRpbmcgcHJvamVjdGlvbiBtYXRyaWNlcyB0byBiZSB1c2VkXHJcbiAqIHdpdGggdGhlIHN0aWxsIGV4cGVyaWVtZW50YWwgV2ViVlIgQVBJLlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCBtYXQ0IGZydXN0dW0gbWF0cml4IHdpbGwgYmUgd3JpdHRlbiBpbnRvXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBmb3YgT2JqZWN0IGNvbnRhaW5pbmcgdGhlIGZvbGxvd2luZyB2YWx1ZXM6IHVwRGVncmVlcywgZG93bkRlZ3JlZXMsIGxlZnREZWdyZWVzLCByaWdodERlZ3JlZXNcclxuICogQHBhcmFtIHtudW1iZXJ9IG5lYXIgTmVhciBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcGFyYW0ge251bWJlcn0gZmFyIEZhciBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcGVyc3BlY3RpdmVGcm9tRmllbGRPZlZpZXcob3V0LCBmb3YsIG5lYXIsIGZhcikge1xuICB2YXIgdXBUYW4gPSBNYXRoLnRhbihmb3YudXBEZWdyZWVzICogTWF0aC5QSSAvIDE4MC4wKTtcbiAgdmFyIGRvd25UYW4gPSBNYXRoLnRhbihmb3YuZG93bkRlZ3JlZXMgKiBNYXRoLlBJIC8gMTgwLjApO1xuICB2YXIgbGVmdFRhbiA9IE1hdGgudGFuKGZvdi5sZWZ0RGVncmVlcyAqIE1hdGguUEkgLyAxODAuMCk7XG4gIHZhciByaWdodFRhbiA9IE1hdGgudGFuKGZvdi5yaWdodERlZ3JlZXMgKiBNYXRoLlBJIC8gMTgwLjApO1xuICB2YXIgeFNjYWxlID0gMi4wIC8gKGxlZnRUYW4gKyByaWdodFRhbik7XG4gIHZhciB5U2NhbGUgPSAyLjAgLyAodXBUYW4gKyBkb3duVGFuKTtcbiAgb3V0WzBdID0geFNjYWxlO1xuICBvdXRbMV0gPSAwLjA7XG4gIG91dFsyXSA9IDAuMDtcbiAgb3V0WzNdID0gMC4wO1xuICBvdXRbNF0gPSAwLjA7XG4gIG91dFs1XSA9IHlTY2FsZTtcbiAgb3V0WzZdID0gMC4wO1xuICBvdXRbN10gPSAwLjA7XG4gIG91dFs4XSA9IC0oKGxlZnRUYW4gLSByaWdodFRhbikgKiB4U2NhbGUgKiAwLjUpO1xuICBvdXRbOV0gPSAodXBUYW4gLSBkb3duVGFuKSAqIHlTY2FsZSAqIDAuNTtcbiAgb3V0WzEwXSA9IGZhciAvIChuZWFyIC0gZmFyKTtcbiAgb3V0WzExXSA9IC0xLjA7XG4gIG91dFsxMl0gPSAwLjA7XG4gIG91dFsxM10gPSAwLjA7XG4gIG91dFsxNF0gPSBmYXIgKiBuZWFyIC8gKG5lYXIgLSBmYXIpO1xuICBvdXRbMTVdID0gMC4wO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIEdlbmVyYXRlcyBhIG9ydGhvZ29uYWwgcHJvamVjdGlvbiBtYXRyaXggd2l0aCB0aGUgZ2l2ZW4gYm91bmRzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IG1hdDQgZnJ1c3R1bSBtYXRyaXggd2lsbCBiZSB3cml0dGVuIGludG9cclxuICogQHBhcmFtIHtudW1iZXJ9IGxlZnQgTGVmdCBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcGFyYW0ge251bWJlcn0gcmlnaHQgUmlnaHQgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHBhcmFtIHtudW1iZXJ9IGJvdHRvbSBCb3R0b20gYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHBhcmFtIHtudW1iZXJ9IHRvcCBUb3AgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHBhcmFtIHtudW1iZXJ9IG5lYXIgTmVhciBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcGFyYW0ge251bWJlcn0gZmFyIEZhciBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gb3J0aG8ob3V0LCBsZWZ0LCByaWdodCwgYm90dG9tLCB0b3AsIG5lYXIsIGZhcikge1xuICB2YXIgbHIgPSAxIC8gKGxlZnQgLSByaWdodCk7XG4gIHZhciBidCA9IDEgLyAoYm90dG9tIC0gdG9wKTtcbiAgdmFyIG5mID0gMSAvIChuZWFyIC0gZmFyKTtcbiAgb3V0WzBdID0gLTIgKiBscjtcbiAgb3V0WzFdID0gMDtcbiAgb3V0WzJdID0gMDtcbiAgb3V0WzNdID0gMDtcbiAgb3V0WzRdID0gMDtcbiAgb3V0WzVdID0gLTIgKiBidDtcbiAgb3V0WzZdID0gMDtcbiAgb3V0WzddID0gMDtcbiAgb3V0WzhdID0gMDtcbiAgb3V0WzldID0gMDtcbiAgb3V0WzEwXSA9IDIgKiBuZjtcbiAgb3V0WzExXSA9IDA7XG4gIG91dFsxMl0gPSAobGVmdCArIHJpZ2h0KSAqIGxyO1xuICBvdXRbMTNdID0gKHRvcCArIGJvdHRvbSkgKiBidDtcbiAgb3V0WzE0XSA9IChmYXIgKyBuZWFyKSAqIG5mO1xuICBvdXRbMTVdID0gMTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBHZW5lcmF0ZXMgYSBsb29rLWF0IG1hdHJpeCB3aXRoIHRoZSBnaXZlbiBleWUgcG9zaXRpb24sIGZvY2FsIHBvaW50LCBhbmQgdXAgYXhpcy5cclxuICogSWYgeW91IHdhbnQgYSBtYXRyaXggdGhhdCBhY3R1YWxseSBtYWtlcyBhbiBvYmplY3QgbG9vayBhdCBhbm90aGVyIG9iamVjdCwgeW91IHNob3VsZCB1c2UgdGFyZ2V0VG8gaW5zdGVhZC5cclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgbWF0NCBmcnVzdHVtIG1hdHJpeCB3aWxsIGJlIHdyaXR0ZW4gaW50b1xyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjM30gZXllIFBvc2l0aW9uIG9mIHRoZSB2aWV3ZXJcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzN9IGNlbnRlciBQb2ludCB0aGUgdmlld2VyIGlzIGxvb2tpbmcgYXRcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzN9IHVwIHZlYzMgcG9pbnRpbmcgdXBcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGxvb2tBdChvdXQsIGV5ZSwgY2VudGVyLCB1cCkge1xuICB2YXIgeDAsIHgxLCB4MiwgeTAsIHkxLCB5MiwgejAsIHoxLCB6MiwgbGVuO1xuICB2YXIgZXlleCA9IGV5ZVswXTtcbiAgdmFyIGV5ZXkgPSBleWVbMV07XG4gIHZhciBleWV6ID0gZXllWzJdO1xuICB2YXIgdXB4ID0gdXBbMF07XG4gIHZhciB1cHkgPSB1cFsxXTtcbiAgdmFyIHVweiA9IHVwWzJdO1xuICB2YXIgY2VudGVyeCA9IGNlbnRlclswXTtcbiAgdmFyIGNlbnRlcnkgPSBjZW50ZXJbMV07XG4gIHZhciBjZW50ZXJ6ID0gY2VudGVyWzJdO1xuXG4gIGlmIChNYXRoLmFicyhleWV4IC0gY2VudGVyeCkgPCBnbE1hdHJpeC5FUFNJTE9OICYmIE1hdGguYWJzKGV5ZXkgLSBjZW50ZXJ5KSA8IGdsTWF0cml4LkVQU0lMT04gJiYgTWF0aC5hYnMoZXlleiAtIGNlbnRlcnopIDwgZ2xNYXRyaXguRVBTSUxPTikge1xuICAgIHJldHVybiBpZGVudGl0eShvdXQpO1xuICB9XG5cbiAgejAgPSBleWV4IC0gY2VudGVyeDtcbiAgejEgPSBleWV5IC0gY2VudGVyeTtcbiAgejIgPSBleWV6IC0gY2VudGVyejtcbiAgbGVuID0gMSAvIE1hdGguaHlwb3QoejAsIHoxLCB6Mik7XG4gIHowICo9IGxlbjtcbiAgejEgKj0gbGVuO1xuICB6MiAqPSBsZW47XG4gIHgwID0gdXB5ICogejIgLSB1cHogKiB6MTtcbiAgeDEgPSB1cHogKiB6MCAtIHVweCAqIHoyO1xuICB4MiA9IHVweCAqIHoxIC0gdXB5ICogejA7XG4gIGxlbiA9IE1hdGguaHlwb3QoeDAsIHgxLCB4Mik7XG5cbiAgaWYgKCFsZW4pIHtcbiAgICB4MCA9IDA7XG4gICAgeDEgPSAwO1xuICAgIHgyID0gMDtcbiAgfSBlbHNlIHtcbiAgICBsZW4gPSAxIC8gbGVuO1xuICAgIHgwICo9IGxlbjtcbiAgICB4MSAqPSBsZW47XG4gICAgeDIgKj0gbGVuO1xuICB9XG5cbiAgeTAgPSB6MSAqIHgyIC0gejIgKiB4MTtcbiAgeTEgPSB6MiAqIHgwIC0gejAgKiB4MjtcbiAgeTIgPSB6MCAqIHgxIC0gejEgKiB4MDtcbiAgbGVuID0gTWF0aC5oeXBvdCh5MCwgeTEsIHkyKTtcblxuICBpZiAoIWxlbikge1xuICAgIHkwID0gMDtcbiAgICB5MSA9IDA7XG4gICAgeTIgPSAwO1xuICB9IGVsc2Uge1xuICAgIGxlbiA9IDEgLyBsZW47XG4gICAgeTAgKj0gbGVuO1xuICAgIHkxICo9IGxlbjtcbiAgICB5MiAqPSBsZW47XG4gIH1cblxuICBvdXRbMF0gPSB4MDtcbiAgb3V0WzFdID0geTA7XG4gIG91dFsyXSA9IHowO1xuICBvdXRbM10gPSAwO1xuICBvdXRbNF0gPSB4MTtcbiAgb3V0WzVdID0geTE7XG4gIG91dFs2XSA9IHoxO1xuICBvdXRbN10gPSAwO1xuICBvdXRbOF0gPSB4MjtcbiAgb3V0WzldID0geTI7XG4gIG91dFsxMF0gPSB6MjtcbiAgb3V0WzExXSA9IDA7XG4gIG91dFsxMl0gPSAtKHgwICogZXlleCArIHgxICogZXlleSArIHgyICogZXlleik7XG4gIG91dFsxM10gPSAtKHkwICogZXlleCArIHkxICogZXlleSArIHkyICogZXlleik7XG4gIG91dFsxNF0gPSAtKHowICogZXlleCArIHoxICogZXlleSArIHoyICogZXlleik7XG4gIG91dFsxNV0gPSAxO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIEdlbmVyYXRlcyBhIG1hdHJpeCB0aGF0IG1ha2VzIHNvbWV0aGluZyBsb29rIGF0IHNvbWV0aGluZyBlbHNlLlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCBtYXQ0IGZydXN0dW0gbWF0cml4IHdpbGwgYmUgd3JpdHRlbiBpbnRvXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMzfSBleWUgUG9zaXRpb24gb2YgdGhlIHZpZXdlclxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjM30gY2VudGVyIFBvaW50IHRoZSB2aWV3ZXIgaXMgbG9va2luZyBhdFxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjM30gdXAgdmVjMyBwb2ludGluZyB1cFxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdGFyZ2V0VG8ob3V0LCBleWUsIHRhcmdldCwgdXApIHtcbiAgdmFyIGV5ZXggPSBleWVbMF0sXG4gICAgICBleWV5ID0gZXllWzFdLFxuICAgICAgZXlleiA9IGV5ZVsyXSxcbiAgICAgIHVweCA9IHVwWzBdLFxuICAgICAgdXB5ID0gdXBbMV0sXG4gICAgICB1cHogPSB1cFsyXTtcbiAgdmFyIHowID0gZXlleCAtIHRhcmdldFswXSxcbiAgICAgIHoxID0gZXlleSAtIHRhcmdldFsxXSxcbiAgICAgIHoyID0gZXlleiAtIHRhcmdldFsyXTtcbiAgdmFyIGxlbiA9IHowICogejAgKyB6MSAqIHoxICsgejIgKiB6MjtcblxuICBpZiAobGVuID4gMCkge1xuICAgIGxlbiA9IDEgLyBNYXRoLnNxcnQobGVuKTtcbiAgICB6MCAqPSBsZW47XG4gICAgejEgKj0gbGVuO1xuICAgIHoyICo9IGxlbjtcbiAgfVxuXG4gIHZhciB4MCA9IHVweSAqIHoyIC0gdXB6ICogejEsXG4gICAgICB4MSA9IHVweiAqIHowIC0gdXB4ICogejIsXG4gICAgICB4MiA9IHVweCAqIHoxIC0gdXB5ICogejA7XG4gIGxlbiA9IHgwICogeDAgKyB4MSAqIHgxICsgeDIgKiB4MjtcblxuICBpZiAobGVuID4gMCkge1xuICAgIGxlbiA9IDEgLyBNYXRoLnNxcnQobGVuKTtcbiAgICB4MCAqPSBsZW47XG4gICAgeDEgKj0gbGVuO1xuICAgIHgyICo9IGxlbjtcbiAgfVxuXG4gIG91dFswXSA9IHgwO1xuICBvdXRbMV0gPSB4MTtcbiAgb3V0WzJdID0geDI7XG4gIG91dFszXSA9IDA7XG4gIG91dFs0XSA9IHoxICogeDIgLSB6MiAqIHgxO1xuICBvdXRbNV0gPSB6MiAqIHgwIC0gejAgKiB4MjtcbiAgb3V0WzZdID0gejAgKiB4MSAtIHoxICogeDA7XG4gIG91dFs3XSA9IDA7XG4gIG91dFs4XSA9IHowO1xuICBvdXRbOV0gPSB6MTtcbiAgb3V0WzEwXSA9IHoyO1xuICBvdXRbMTFdID0gMDtcbiAgb3V0WzEyXSA9IGV5ZXg7XG4gIG91dFsxM10gPSBleWV5O1xuICBvdXRbMTRdID0gZXllejtcbiAgb3V0WzE1XSA9IDE7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIG1hdDRcclxuICpcclxuICogQHBhcmFtIHtSZWFkb25seU1hdDR9IGEgbWF0cml4IHRvIHJlcHJlc2VudCBhcyBhIHN0cmluZ1xyXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1hdHJpeFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cihhKSB7XG4gIHJldHVybiBcIm1hdDQoXCIgKyBhWzBdICsgXCIsIFwiICsgYVsxXSArIFwiLCBcIiArIGFbMl0gKyBcIiwgXCIgKyBhWzNdICsgXCIsIFwiICsgYVs0XSArIFwiLCBcIiArIGFbNV0gKyBcIiwgXCIgKyBhWzZdICsgXCIsIFwiICsgYVs3XSArIFwiLCBcIiArIGFbOF0gKyBcIiwgXCIgKyBhWzldICsgXCIsIFwiICsgYVsxMF0gKyBcIiwgXCIgKyBhWzExXSArIFwiLCBcIiArIGFbMTJdICsgXCIsIFwiICsgYVsxM10gKyBcIiwgXCIgKyBhWzE0XSArIFwiLCBcIiArIGFbMTVdICsgXCIpXCI7XG59XG4vKipcclxuICogUmV0dXJucyBGcm9iZW5pdXMgbm9ybSBvZiBhIG1hdDRcclxuICpcclxuICogQHBhcmFtIHtSZWFkb25seU1hdDR9IGEgdGhlIG1hdHJpeCB0byBjYWxjdWxhdGUgRnJvYmVuaXVzIG5vcm0gb2ZcclxuICogQHJldHVybnMge051bWJlcn0gRnJvYmVuaXVzIG5vcm1cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9iKGEpIHtcbiAgcmV0dXJuIE1hdGguaHlwb3QoYVswXSwgYVsxXSwgYVsyXSwgYVszXSwgYVs0XSwgYVs1XSwgYVs2XSwgYVs3XSwgYVs4XSwgYVs5XSwgYVsxMF0sIGFbMTFdLCBhWzEyXSwgYVsxM10sIGFbMTRdLCBhWzE1XSk7XG59XG4vKipcclxuICogQWRkcyB0d28gbWF0NCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlNYXQ0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlNYXQ0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gYWRkKG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdICsgYlswXTtcbiAgb3V0WzFdID0gYVsxXSArIGJbMV07XG4gIG91dFsyXSA9IGFbMl0gKyBiWzJdO1xuICBvdXRbM10gPSBhWzNdICsgYlszXTtcbiAgb3V0WzRdID0gYVs0XSArIGJbNF07XG4gIG91dFs1XSA9IGFbNV0gKyBiWzVdO1xuICBvdXRbNl0gPSBhWzZdICsgYls2XTtcbiAgb3V0WzddID0gYVs3XSArIGJbN107XG4gIG91dFs4XSA9IGFbOF0gKyBiWzhdO1xuICBvdXRbOV0gPSBhWzldICsgYls5XTtcbiAgb3V0WzEwXSA9IGFbMTBdICsgYlsxMF07XG4gIG91dFsxMV0gPSBhWzExXSArIGJbMTFdO1xuICBvdXRbMTJdID0gYVsxMl0gKyBiWzEyXTtcbiAgb3V0WzEzXSA9IGFbMTNdICsgYlsxM107XG4gIG91dFsxNF0gPSBhWzE0XSArIGJbMTRdO1xuICBvdXRbMTVdID0gYVsxNV0gKyBiWzE1XTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBTdWJ0cmFjdHMgbWF0cml4IGIgZnJvbSBtYXRyaXggYVxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5TWF0NH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5TWF0NH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnRyYWN0KG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdIC0gYlswXTtcbiAgb3V0WzFdID0gYVsxXSAtIGJbMV07XG4gIG91dFsyXSA9IGFbMl0gLSBiWzJdO1xuICBvdXRbM10gPSBhWzNdIC0gYlszXTtcbiAgb3V0WzRdID0gYVs0XSAtIGJbNF07XG4gIG91dFs1XSA9IGFbNV0gLSBiWzVdO1xuICBvdXRbNl0gPSBhWzZdIC0gYls2XTtcbiAgb3V0WzddID0gYVs3XSAtIGJbN107XG4gIG91dFs4XSA9IGFbOF0gLSBiWzhdO1xuICBvdXRbOV0gPSBhWzldIC0gYls5XTtcbiAgb3V0WzEwXSA9IGFbMTBdIC0gYlsxMF07XG4gIG91dFsxMV0gPSBhWzExXSAtIGJbMTFdO1xuICBvdXRbMTJdID0gYVsxMl0gLSBiWzEyXTtcbiAgb3V0WzEzXSA9IGFbMTNdIC0gYlsxM107XG4gIG91dFsxNF0gPSBhWzE0XSAtIGJbMTRdO1xuICBvdXRbMTVdID0gYVsxNV0gLSBiWzE1XTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBNdWx0aXBseSBlYWNoIGVsZW1lbnQgb2YgdGhlIG1hdHJpeCBieSBhIHNjYWxhci5cclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHtSZWFkb25seU1hdDR9IGEgdGhlIG1hdHJpeCB0byBzY2FsZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gYiBhbW91bnQgdG8gc2NhbGUgdGhlIG1hdHJpeCdzIGVsZW1lbnRzIGJ5XHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBtdWx0aXBseVNjYWxhcihvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gYVswXSAqIGI7XG4gIG91dFsxXSA9IGFbMV0gKiBiO1xuICBvdXRbMl0gPSBhWzJdICogYjtcbiAgb3V0WzNdID0gYVszXSAqIGI7XG4gIG91dFs0XSA9IGFbNF0gKiBiO1xuICBvdXRbNV0gPSBhWzVdICogYjtcbiAgb3V0WzZdID0gYVs2XSAqIGI7XG4gIG91dFs3XSA9IGFbN10gKiBiO1xuICBvdXRbOF0gPSBhWzhdICogYjtcbiAgb3V0WzldID0gYVs5XSAqIGI7XG4gIG91dFsxMF0gPSBhWzEwXSAqIGI7XG4gIG91dFsxMV0gPSBhWzExXSAqIGI7XG4gIG91dFsxMl0gPSBhWzEyXSAqIGI7XG4gIG91dFsxM10gPSBhWzEzXSAqIGI7XG4gIG91dFsxNF0gPSBhWzE0XSAqIGI7XG4gIG91dFsxNV0gPSBhWzE1XSAqIGI7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQWRkcyB0d28gbWF0NCdzIGFmdGVyIG11bHRpcGx5aW5nIGVhY2ggZWxlbWVudCBvZiB0aGUgc2Vjb25kIG9wZXJhbmQgYnkgYSBzY2FsYXIgdmFsdWUuXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlNYXQ0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlNYXQ0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gc2NhbGUgdGhlIGFtb3VudCB0byBzY2FsZSBiJ3MgZWxlbWVudHMgYnkgYmVmb3JlIGFkZGluZ1xyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbXVsdGlwbHlTY2FsYXJBbmRBZGQob3V0LCBhLCBiLCBzY2FsZSkge1xuICBvdXRbMF0gPSBhWzBdICsgYlswXSAqIHNjYWxlO1xuICBvdXRbMV0gPSBhWzFdICsgYlsxXSAqIHNjYWxlO1xuICBvdXRbMl0gPSBhWzJdICsgYlsyXSAqIHNjYWxlO1xuICBvdXRbM10gPSBhWzNdICsgYlszXSAqIHNjYWxlO1xuICBvdXRbNF0gPSBhWzRdICsgYls0XSAqIHNjYWxlO1xuICBvdXRbNV0gPSBhWzVdICsgYls1XSAqIHNjYWxlO1xuICBvdXRbNl0gPSBhWzZdICsgYls2XSAqIHNjYWxlO1xuICBvdXRbN10gPSBhWzddICsgYls3XSAqIHNjYWxlO1xuICBvdXRbOF0gPSBhWzhdICsgYls4XSAqIHNjYWxlO1xuICBvdXRbOV0gPSBhWzldICsgYls5XSAqIHNjYWxlO1xuICBvdXRbMTBdID0gYVsxMF0gKyBiWzEwXSAqIHNjYWxlO1xuICBvdXRbMTFdID0gYVsxMV0gKyBiWzExXSAqIHNjYWxlO1xuICBvdXRbMTJdID0gYVsxMl0gKyBiWzEyXSAqIHNjYWxlO1xuICBvdXRbMTNdID0gYVsxM10gKyBiWzEzXSAqIHNjYWxlO1xuICBvdXRbMTRdID0gYVsxNF0gKyBiWzE0XSAqIHNjYWxlO1xuICBvdXRbMTVdID0gYVsxNV0gKyBiWzE1XSAqIHNjYWxlO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIG1hdHJpY2VzIGhhdmUgZXhhY3RseSB0aGUgc2FtZSBlbGVtZW50cyBpbiB0aGUgc2FtZSBwb3NpdGlvbiAod2hlbiBjb21wYXJlZCB3aXRoID09PSlcclxuICpcclxuICogQHBhcmFtIHtSZWFkb25seU1hdDR9IGEgVGhlIGZpcnN0IG1hdHJpeC5cclxuICogQHBhcmFtIHtSZWFkb25seU1hdDR9IGIgVGhlIHNlY29uZCBtYXRyaXguXHJcbiAqIEByZXR1cm5zIHtCb29sZWFufSBUcnVlIGlmIHRoZSBtYXRyaWNlcyBhcmUgZXF1YWwsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBleGFjdEVxdWFscyhhLCBiKSB7XG4gIHJldHVybiBhWzBdID09PSBiWzBdICYmIGFbMV0gPT09IGJbMV0gJiYgYVsyXSA9PT0gYlsyXSAmJiBhWzNdID09PSBiWzNdICYmIGFbNF0gPT09IGJbNF0gJiYgYVs1XSA9PT0gYls1XSAmJiBhWzZdID09PSBiWzZdICYmIGFbN10gPT09IGJbN10gJiYgYVs4XSA9PT0gYls4XSAmJiBhWzldID09PSBiWzldICYmIGFbMTBdID09PSBiWzEwXSAmJiBhWzExXSA9PT0gYlsxMV0gJiYgYVsxMl0gPT09IGJbMTJdICYmIGFbMTNdID09PSBiWzEzXSAmJiBhWzE0XSA9PT0gYlsxNF0gJiYgYVsxNV0gPT09IGJbMTVdO1xufVxuLyoqXHJcbiAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIG1hdHJpY2VzIGhhdmUgYXBwcm94aW1hdGVseSB0aGUgc2FtZSBlbGVtZW50cyBpbiB0aGUgc2FtZSBwb3NpdGlvbi5cclxuICpcclxuICogQHBhcmFtIHtSZWFkb25seU1hdDR9IGEgVGhlIGZpcnN0IG1hdHJpeC5cclxuICogQHBhcmFtIHtSZWFkb25seU1hdDR9IGIgVGhlIHNlY29uZCBtYXRyaXguXHJcbiAqIEByZXR1cm5zIHtCb29sZWFufSBUcnVlIGlmIHRoZSBtYXRyaWNlcyBhcmUgZXF1YWwsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBlcXVhbHMoYSwgYikge1xuICB2YXIgYTAgPSBhWzBdLFxuICAgICAgYTEgPSBhWzFdLFxuICAgICAgYTIgPSBhWzJdLFxuICAgICAgYTMgPSBhWzNdO1xuICB2YXIgYTQgPSBhWzRdLFxuICAgICAgYTUgPSBhWzVdLFxuICAgICAgYTYgPSBhWzZdLFxuICAgICAgYTcgPSBhWzddO1xuICB2YXIgYTggPSBhWzhdLFxuICAgICAgYTkgPSBhWzldLFxuICAgICAgYTEwID0gYVsxMF0sXG4gICAgICBhMTEgPSBhWzExXTtcbiAgdmFyIGExMiA9IGFbMTJdLFxuICAgICAgYTEzID0gYVsxM10sXG4gICAgICBhMTQgPSBhWzE0XSxcbiAgICAgIGExNSA9IGFbMTVdO1xuICB2YXIgYjAgPSBiWzBdLFxuICAgICAgYjEgPSBiWzFdLFxuICAgICAgYjIgPSBiWzJdLFxuICAgICAgYjMgPSBiWzNdO1xuICB2YXIgYjQgPSBiWzRdLFxuICAgICAgYjUgPSBiWzVdLFxuICAgICAgYjYgPSBiWzZdLFxuICAgICAgYjcgPSBiWzddO1xuICB2YXIgYjggPSBiWzhdLFxuICAgICAgYjkgPSBiWzldLFxuICAgICAgYjEwID0gYlsxMF0sXG4gICAgICBiMTEgPSBiWzExXTtcbiAgdmFyIGIxMiA9IGJbMTJdLFxuICAgICAgYjEzID0gYlsxM10sXG4gICAgICBiMTQgPSBiWzE0XSxcbiAgICAgIGIxNSA9IGJbMTVdO1xuICByZXR1cm4gTWF0aC5hYnMoYTAgLSBiMCkgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTApLCBNYXRoLmFicyhiMCkpICYmIE1hdGguYWJzKGExIC0gYjEpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGExKSwgTWF0aC5hYnMoYjEpKSAmJiBNYXRoLmFicyhhMiAtIGIyKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMiksIE1hdGguYWJzKGIyKSkgJiYgTWF0aC5hYnMoYTMgLSBiMykgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTMpLCBNYXRoLmFicyhiMykpICYmIE1hdGguYWJzKGE0IC0gYjQpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGE0KSwgTWF0aC5hYnMoYjQpKSAmJiBNYXRoLmFicyhhNSAtIGI1KSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhNSksIE1hdGguYWJzKGI1KSkgJiYgTWF0aC5hYnMoYTYgLSBiNikgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTYpLCBNYXRoLmFicyhiNikpICYmIE1hdGguYWJzKGE3IC0gYjcpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGE3KSwgTWF0aC5hYnMoYjcpKSAmJiBNYXRoLmFicyhhOCAtIGI4KSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhOCksIE1hdGguYWJzKGI4KSkgJiYgTWF0aC5hYnMoYTkgLSBiOSkgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTkpLCBNYXRoLmFicyhiOSkpICYmIE1hdGguYWJzKGExMCAtIGIxMCkgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTEwKSwgTWF0aC5hYnMoYjEwKSkgJiYgTWF0aC5hYnMoYTExIC0gYjExKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMTEpLCBNYXRoLmFicyhiMTEpKSAmJiBNYXRoLmFicyhhMTIgLSBiMTIpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGExMiksIE1hdGguYWJzKGIxMikpICYmIE1hdGguYWJzKGExMyAtIGIxMykgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTEzKSwgTWF0aC5hYnMoYjEzKSkgJiYgTWF0aC5hYnMoYTE0IC0gYjE0KSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMTQpLCBNYXRoLmFicyhiMTQpKSAmJiBNYXRoLmFicyhhMTUgLSBiMTUpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGExNSksIE1hdGguYWJzKGIxNSkpO1xufVxuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgbWF0NC5tdWx0aXBseX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIG11bCA9IG11bHRpcGx5O1xuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgbWF0NC5zdWJ0cmFjdH1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIHN1YiA9IHN1YnRyYWN0OyIsImltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5tYXRoLmh5cG90LmpzXCI7XG5pbXBvcnQgKiBhcyBnbE1hdHJpeCBmcm9tIFwiLi9jb21tb24uanNcIjtcbi8qKlxyXG4gKiAyIERpbWVuc2lvbmFsIFZlY3RvclxyXG4gKiBAbW9kdWxlIHZlYzJcclxuICovXG5cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3LCBlbXB0eSB2ZWMyXHJcbiAqXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBhIG5ldyAyRCB2ZWN0b3JcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGUoKSB7XG4gIHZhciBvdXQgPSBuZXcgZ2xNYXRyaXguQVJSQVlfVFlQRSgyKTtcblxuICBpZiAoZ2xNYXRyaXguQVJSQVlfVFlQRSAhPSBGbG9hdDMyQXJyYXkpIHtcbiAgICBvdXRbMF0gPSAwO1xuICAgIG91dFsxXSA9IDA7XG4gIH1cblxuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgdmVjMiBpbml0aWFsaXplZCB3aXRoIHZhbHVlcyBmcm9tIGFuIGV4aXN0aW5nIHZlY3RvclxyXG4gKlxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjMn0gYSB2ZWN0b3IgdG8gY2xvbmVcclxuICogQHJldHVybnMge3ZlYzJ9IGEgbmV3IDJEIHZlY3RvclxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNsb25lKGEpIHtcbiAgdmFyIG91dCA9IG5ldyBnbE1hdHJpeC5BUlJBWV9UWVBFKDIpO1xuICBvdXRbMF0gPSBhWzBdO1xuICBvdXRbMV0gPSBhWzFdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgdmVjMiBpbml0aWFsaXplZCB3aXRoIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHtOdW1iZXJ9IHggWCBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHkgWSBjb21wb25lbnRcclxuICogQHJldHVybnMge3ZlYzJ9IGEgbmV3IDJEIHZlY3RvclxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21WYWx1ZXMoeCwgeSkge1xuICB2YXIgb3V0ID0gbmV3IGdsTWF0cml4LkFSUkFZX1RZUEUoMik7XG4gIG91dFswXSA9IHg7XG4gIG91dFsxXSA9IHk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ29weSB0aGUgdmFsdWVzIGZyb20gb25lIHZlYzIgdG8gYW5vdGhlclxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjMn0gYSB0aGUgc291cmNlIHZlY3RvclxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY29weShvdXQsIGEpIHtcbiAgb3V0WzBdID0gYVswXTtcbiAgb3V0WzFdID0gYVsxXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBTZXQgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWMyIHRvIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtOdW1iZXJ9IHggWCBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHkgWSBjb21wb25lbnRcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNldChvdXQsIHgsIHkpIHtcbiAgb3V0WzBdID0geDtcbiAgb3V0WzFdID0geTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBBZGRzIHR3byB2ZWMyJ3NcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBhZGQob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IGFbMF0gKyBiWzBdO1xuICBvdXRbMV0gPSBhWzFdICsgYlsxXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBTdWJ0cmFjdHMgdmVjdG9yIGIgZnJvbSB2ZWN0b3IgYVxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjMn0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnRyYWN0KG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdIC0gYlswXTtcbiAgb3V0WzFdID0gYVsxXSAtIGJbMV07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogTXVsdGlwbGllcyB0d28gdmVjMidzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbXVsdGlwbHkob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IGFbMF0gKiBiWzBdO1xuICBvdXRbMV0gPSBhWzFdICogYlsxXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBEaXZpZGVzIHR3byB2ZWMyJ3NcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBkaXZpZGUob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IGFbMF0gLyBiWzBdO1xuICBvdXRbMV0gPSBhWzFdIC8gYlsxXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBNYXRoLmNlaWwgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWMyXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMyfSBhIHZlY3RvciB0byBjZWlsXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjZWlsKG91dCwgYSkge1xuICBvdXRbMF0gPSBNYXRoLmNlaWwoYVswXSk7XG4gIG91dFsxXSA9IE1hdGguY2VpbChhWzFdKTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBNYXRoLmZsb29yIHRoZSBjb21wb25lbnRzIG9mIGEgdmVjMlxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjMn0gYSB2ZWN0b3IgdG8gZmxvb3JcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZsb29yKG91dCwgYSkge1xuICBvdXRbMF0gPSBNYXRoLmZsb29yKGFbMF0pO1xuICBvdXRbMV0gPSBNYXRoLmZsb29yKGFbMV0pO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJldHVybnMgdGhlIG1pbmltdW0gb2YgdHdvIHZlYzInc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjMn0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG1pbihvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gTWF0aC5taW4oYVswXSwgYlswXSk7XG4gIG91dFsxXSA9IE1hdGgubWluKGFbMV0sIGJbMV0pO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJldHVybnMgdGhlIG1heGltdW0gb2YgdHdvIHZlYzInc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjMn0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG1heChvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gTWF0aC5tYXgoYVswXSwgYlswXSk7XG4gIG91dFsxXSA9IE1hdGgubWF4KGFbMV0sIGJbMV0pO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIE1hdGgucm91bmQgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWMyXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMyfSBhIHZlY3RvciB0byByb3VuZFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcm91bmQob3V0LCBhKSB7XG4gIG91dFswXSA9IE1hdGgucm91bmQoYVswXSk7XG4gIG91dFsxXSA9IE1hdGgucm91bmQoYVsxXSk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU2NhbGVzIGEgdmVjMiBieSBhIHNjYWxhciBudW1iZXJcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzJ9IGEgdGhlIHZlY3RvciB0byBzY2FsZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gYiBhbW91bnQgdG8gc2NhbGUgdGhlIHZlY3RvciBieVxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc2NhbGUob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IGFbMF0gKiBiO1xuICBvdXRbMV0gPSBhWzFdICogYjtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBBZGRzIHR3byB2ZWMyJ3MgYWZ0ZXIgc2NhbGluZyB0aGUgc2Vjb25kIG9wZXJhbmQgYnkgYSBzY2FsYXIgdmFsdWVcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBzY2FsZSB0aGUgYW1vdW50IHRvIHNjYWxlIGIgYnkgYmVmb3JlIGFkZGluZ1xyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc2NhbGVBbmRBZGQob3V0LCBhLCBiLCBzY2FsZSkge1xuICBvdXRbMF0gPSBhWzBdICsgYlswXSAqIHNjYWxlO1xuICBvdXRbMV0gPSBhWzFdICsgYlsxXSAqIHNjYWxlO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGV1Y2xpZGlhbiBkaXN0YW5jZSBiZXR3ZWVuIHR3byB2ZWMyJ3NcclxuICpcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGRpc3RhbmNlIGJldHdlZW4gYSBhbmQgYlxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGRpc3RhbmNlKGEsIGIpIHtcbiAgdmFyIHggPSBiWzBdIC0gYVswXSxcbiAgICAgIHkgPSBiWzFdIC0gYVsxXTtcbiAgcmV0dXJuIE1hdGguaHlwb3QoeCwgeSk7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgc3F1YXJlZCBldWNsaWRpYW4gZGlzdGFuY2UgYmV0d2VlbiB0d28gdmVjMidzXHJcbiAqXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBzcXVhcmVkIGRpc3RhbmNlIGJldHdlZW4gYSBhbmQgYlxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNxdWFyZWREaXN0YW5jZShhLCBiKSB7XG4gIHZhciB4ID0gYlswXSAtIGFbMF0sXG4gICAgICB5ID0gYlsxXSAtIGFbMV07XG4gIHJldHVybiB4ICogeCArIHkgKiB5O1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGxlbmd0aCBvZiBhIHZlYzJcclxuICpcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzJ9IGEgdmVjdG9yIHRvIGNhbGN1bGF0ZSBsZW5ndGggb2ZcclxuICogQHJldHVybnMge051bWJlcn0gbGVuZ3RoIG9mIGFcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBsZW5ndGgoYSkge1xuICB2YXIgeCA9IGFbMF0sXG4gICAgICB5ID0gYVsxXTtcbiAgcmV0dXJuIE1hdGguaHlwb3QoeCwgeSk7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgc3F1YXJlZCBsZW5ndGggb2YgYSB2ZWMyXHJcbiAqXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMyfSBhIHZlY3RvciB0byBjYWxjdWxhdGUgc3F1YXJlZCBsZW5ndGggb2ZcclxuICogQHJldHVybnMge051bWJlcn0gc3F1YXJlZCBsZW5ndGggb2YgYVxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNxdWFyZWRMZW5ndGgoYSkge1xuICB2YXIgeCA9IGFbMF0sXG4gICAgICB5ID0gYVsxXTtcbiAgcmV0dXJuIHggKiB4ICsgeSAqIHk7XG59XG4vKipcclxuICogTmVnYXRlcyB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzJcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzJ9IGEgdmVjdG9yIHRvIG5lZ2F0ZVxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbmVnYXRlKG91dCwgYSkge1xuICBvdXRbMF0gPSAtYVswXTtcbiAgb3V0WzFdID0gLWFbMV07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUmV0dXJucyB0aGUgaW52ZXJzZSBvZiB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzJcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzJ9IGEgdmVjdG9yIHRvIGludmVydFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaW52ZXJzZShvdXQsIGEpIHtcbiAgb3V0WzBdID0gMS4wIC8gYVswXTtcbiAgb3V0WzFdID0gMS4wIC8gYVsxXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBOb3JtYWxpemUgYSB2ZWMyXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMyfSBhIHZlY3RvciB0byBub3JtYWxpemVcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZShvdXQsIGEpIHtcbiAgdmFyIHggPSBhWzBdLFxuICAgICAgeSA9IGFbMV07XG4gIHZhciBsZW4gPSB4ICogeCArIHkgKiB5O1xuXG4gIGlmIChsZW4gPiAwKSB7XG4gICAgLy9UT0RPOiBldmFsdWF0ZSB1c2Ugb2YgZ2xtX2ludnNxcnQgaGVyZT9cbiAgICBsZW4gPSAxIC8gTWF0aC5zcXJ0KGxlbik7XG4gIH1cblxuICBvdXRbMF0gPSBhWzBdICogbGVuO1xuICBvdXRbMV0gPSBhWzFdICogbGVuO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGRvdCBwcm9kdWN0IG9mIHR3byB2ZWMyJ3NcclxuICpcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGRvdCBwcm9kdWN0IG9mIGEgYW5kIGJcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBkb3QoYSwgYikge1xuICByZXR1cm4gYVswXSAqIGJbMF0gKyBhWzFdICogYlsxXTtcbn1cbi8qKlxyXG4gKiBDb21wdXRlcyB0aGUgY3Jvc3MgcHJvZHVjdCBvZiB0d28gdmVjMidzXHJcbiAqIE5vdGUgdGhhdCB0aGUgY3Jvc3MgcHJvZHVjdCBtdXN0IGJ5IGRlZmluaXRpb24gcHJvZHVjZSBhIDNEIHZlY3RvclxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjMn0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNyb3NzKG91dCwgYSwgYikge1xuICB2YXIgeiA9IGFbMF0gKiBiWzFdIC0gYVsxXSAqIGJbMF07XG4gIG91dFswXSA9IG91dFsxXSA9IDA7XG4gIG91dFsyXSA9IHo7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUGVyZm9ybXMgYSBsaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIHR3byB2ZWMyJ3NcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB0IGludGVycG9sYXRpb24gYW1vdW50LCBpbiB0aGUgcmFuZ2UgWzAtMV0sIGJldHdlZW4gdGhlIHR3byBpbnB1dHNcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGxlcnAob3V0LCBhLCBiLCB0KSB7XG4gIHZhciBheCA9IGFbMF0sXG4gICAgICBheSA9IGFbMV07XG4gIG91dFswXSA9IGF4ICsgdCAqIChiWzBdIC0gYXgpO1xuICBvdXRbMV0gPSBheSArIHQgKiAoYlsxXSAtIGF5KTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBHZW5lcmF0ZXMgYSByYW5kb20gdmVjdG9yIHdpdGggdGhlIGdpdmVuIHNjYWxlXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBbc2NhbGVdIExlbmd0aCBvZiB0aGUgcmVzdWx0aW5nIHZlY3Rvci4gSWYgb21taXR0ZWQsIGEgdW5pdCB2ZWN0b3Igd2lsbCBiZSByZXR1cm5lZFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcmFuZG9tKG91dCwgc2NhbGUpIHtcbiAgc2NhbGUgPSBzY2FsZSB8fCAxLjA7XG4gIHZhciByID0gZ2xNYXRyaXguUkFORE9NKCkgKiAyLjAgKiBNYXRoLlBJO1xuICBvdXRbMF0gPSBNYXRoLmNvcyhyKSAqIHNjYWxlO1xuICBvdXRbMV0gPSBNYXRoLnNpbihyKSAqIHNjYWxlO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFRyYW5zZm9ybXMgdGhlIHZlYzIgd2l0aCBhIG1hdDJcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzJ9IGEgdGhlIHZlY3RvciB0byB0cmFuc2Zvcm1cclxuICogQHBhcmFtIHtSZWFkb25seU1hdDJ9IG0gbWF0cml4IHRvIHRyYW5zZm9ybSB3aXRoXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2Zvcm1NYXQyKG91dCwgYSwgbSkge1xuICB2YXIgeCA9IGFbMF0sXG4gICAgICB5ID0gYVsxXTtcbiAgb3V0WzBdID0gbVswXSAqIHggKyBtWzJdICogeTtcbiAgb3V0WzFdID0gbVsxXSAqIHggKyBtWzNdICogeTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBUcmFuc2Zvcm1zIHRoZSB2ZWMyIHdpdGggYSBtYXQyZFxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjMn0gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5TWF0MmR9IG0gbWF0cml4IHRvIHRyYW5zZm9ybSB3aXRoXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2Zvcm1NYXQyZChvdXQsIGEsIG0pIHtcbiAgdmFyIHggPSBhWzBdLFxuICAgICAgeSA9IGFbMV07XG4gIG91dFswXSA9IG1bMF0gKiB4ICsgbVsyXSAqIHkgKyBtWzRdO1xuICBvdXRbMV0gPSBtWzFdICogeCArIG1bM10gKiB5ICsgbVs1XTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBUcmFuc2Zvcm1zIHRoZSB2ZWMyIHdpdGggYSBtYXQzXHJcbiAqIDNyZCB2ZWN0b3IgY29tcG9uZW50IGlzIGltcGxpY2l0bHkgJzEnXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMyfSBhIHRoZSB2ZWN0b3IgdG8gdHJhbnNmb3JtXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlNYXQzfSBtIG1hdHJpeCB0byB0cmFuc2Zvcm0gd2l0aFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtTWF0MyhvdXQsIGEsIG0pIHtcbiAgdmFyIHggPSBhWzBdLFxuICAgICAgeSA9IGFbMV07XG4gIG91dFswXSA9IG1bMF0gKiB4ICsgbVszXSAqIHkgKyBtWzZdO1xuICBvdXRbMV0gPSBtWzFdICogeCArIG1bNF0gKiB5ICsgbVs3XTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBUcmFuc2Zvcm1zIHRoZSB2ZWMyIHdpdGggYSBtYXQ0XHJcbiAqIDNyZCB2ZWN0b3IgY29tcG9uZW50IGlzIGltcGxpY2l0bHkgJzAnXHJcbiAqIDR0aCB2ZWN0b3IgY29tcG9uZW50IGlzIGltcGxpY2l0bHkgJzEnXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMyfSBhIHRoZSB2ZWN0b3IgdG8gdHJhbnNmb3JtXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlNYXQ0fSBtIG1hdHJpeCB0byB0cmFuc2Zvcm0gd2l0aFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtTWF0NChvdXQsIGEsIG0pIHtcbiAgdmFyIHggPSBhWzBdO1xuICB2YXIgeSA9IGFbMV07XG4gIG91dFswXSA9IG1bMF0gKiB4ICsgbVs0XSAqIHkgKyBtWzEyXTtcbiAgb3V0WzFdID0gbVsxXSAqIHggKyBtWzVdICogeSArIG1bMTNdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJvdGF0ZSBhIDJEIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCBUaGUgcmVjZWl2aW5nIHZlYzJcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzJ9IGEgVGhlIHZlYzIgcG9pbnQgdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMyfSBiIFRoZSBvcmlnaW4gb2YgdGhlIHJvdGF0aW9uXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgVGhlIGFuZ2xlIG9mIHJvdGF0aW9uIGluIHJhZGlhbnNcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHJvdGF0ZShvdXQsIGEsIGIsIHJhZCkge1xuICAvL1RyYW5zbGF0ZSBwb2ludCB0byB0aGUgb3JpZ2luXG4gIHZhciBwMCA9IGFbMF0gLSBiWzBdLFxuICAgICAgcDEgPSBhWzFdIC0gYlsxXSxcbiAgICAgIHNpbkMgPSBNYXRoLnNpbihyYWQpLFxuICAgICAgY29zQyA9IE1hdGguY29zKHJhZCk7IC8vcGVyZm9ybSByb3RhdGlvbiBhbmQgdHJhbnNsYXRlIHRvIGNvcnJlY3QgcG9zaXRpb25cblxuICBvdXRbMF0gPSBwMCAqIGNvc0MgLSBwMSAqIHNpbkMgKyBiWzBdO1xuICBvdXRbMV0gPSBwMCAqIHNpbkMgKyBwMSAqIGNvc0MgKyBiWzFdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIEdldCB0aGUgYW5nbGUgYmV0d2VlbiB0d28gMkQgdmVjdG9yc1xyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjMn0gYSBUaGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjMn0gYiBUaGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge051bWJlcn0gVGhlIGFuZ2xlIGluIHJhZGlhbnNcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBhbmdsZShhLCBiKSB7XG4gIHZhciB4MSA9IGFbMF0sXG4gICAgICB5MSA9IGFbMV0sXG4gICAgICB4MiA9IGJbMF0sXG4gICAgICB5MiA9IGJbMV0sXG4gICAgICAvLyBtYWcgaXMgdGhlIHByb2R1Y3Qgb2YgdGhlIG1hZ25pdHVkZXMgb2YgYSBhbmQgYlxuICBtYWcgPSBNYXRoLnNxcnQoeDEgKiB4MSArIHkxICogeTEpICogTWF0aC5zcXJ0KHgyICogeDIgKyB5MiAqIHkyKSxcbiAgICAgIC8vIG1hZyAmJi4uIHNob3J0IGNpcmN1aXRzIGlmIG1hZyA9PSAwXG4gIGNvc2luZSA9IG1hZyAmJiAoeDEgKiB4MiArIHkxICogeTIpIC8gbWFnOyAvLyBNYXRoLm1pbihNYXRoLm1heChjb3NpbmUsIC0xKSwgMSkgY2xhbXBzIHRoZSBjb3NpbmUgYmV0d2VlbiAtMSBhbmQgMVxuXG4gIHJldHVybiBNYXRoLmFjb3MoTWF0aC5taW4oTWF0aC5tYXgoY29zaW5lLCAtMSksIDEpKTtcbn1cbi8qKlxyXG4gKiBTZXQgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWMyIHRvIHplcm9cclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHplcm8ob3V0KSB7XG4gIG91dFswXSA9IDAuMDtcbiAgb3V0WzFdID0gMC4wO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSB2ZWN0b3JcclxuICpcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzJ9IGEgdmVjdG9yIHRvIHJlcHJlc2VudCBhcyBhIHN0cmluZ1xyXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZlY3RvclxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cihhKSB7XG4gIHJldHVybiBcInZlYzIoXCIgKyBhWzBdICsgXCIsIFwiICsgYVsxXSArIFwiKVwiO1xufVxuLyoqXHJcbiAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIHZlY3RvcnMgZXhhY3RseSBoYXZlIHRoZSBzYW1lIGVsZW1lbnRzIGluIHRoZSBzYW1lIHBvc2l0aW9uICh3aGVuIGNvbXBhcmVkIHdpdGggPT09KVxyXG4gKlxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjMn0gYSBUaGUgZmlyc3QgdmVjdG9yLlxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjMn0gYiBUaGUgc2Vjb25kIHZlY3Rvci5cclxuICogQHJldHVybnMge0Jvb2xlYW59IFRydWUgaWYgdGhlIHZlY3RvcnMgYXJlIGVxdWFsLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZXhhY3RFcXVhbHMoYSwgYikge1xuICByZXR1cm4gYVswXSA9PT0gYlswXSAmJiBhWzFdID09PSBiWzFdO1xufVxuLyoqXHJcbiAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIHZlY3RvcnMgaGF2ZSBhcHByb3hpbWF0ZWx5IHRoZSBzYW1lIGVsZW1lbnRzIGluIHRoZSBzYW1lIHBvc2l0aW9uLlxyXG4gKlxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjMn0gYSBUaGUgZmlyc3QgdmVjdG9yLlxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjMn0gYiBUaGUgc2Vjb25kIHZlY3Rvci5cclxuICogQHJldHVybnMge0Jvb2xlYW59IFRydWUgaWYgdGhlIHZlY3RvcnMgYXJlIGVxdWFsLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZXF1YWxzKGEsIGIpIHtcbiAgdmFyIGEwID0gYVswXSxcbiAgICAgIGExID0gYVsxXTtcbiAgdmFyIGIwID0gYlswXSxcbiAgICAgIGIxID0gYlsxXTtcbiAgcmV0dXJuIE1hdGguYWJzKGEwIC0gYjApIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGEwKSwgTWF0aC5hYnMoYjApKSAmJiBNYXRoLmFicyhhMSAtIGIxKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMSksIE1hdGguYWJzKGIxKSk7XG59XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMyLmxlbmd0aH1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIGxlbiA9IGxlbmd0aDtcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzIuc3VidHJhY3R9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBzdWIgPSBzdWJ0cmFjdDtcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzIubXVsdGlwbHl9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBtdWwgPSBtdWx0aXBseTtcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzIuZGl2aWRlfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgZGl2ID0gZGl2aWRlO1xuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjMi5kaXN0YW5jZX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIGRpc3QgPSBkaXN0YW5jZTtcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzIuc3F1YXJlZERpc3RhbmNlfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgc3FyRGlzdCA9IHNxdWFyZWREaXN0YW5jZTtcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzIuc3F1YXJlZExlbmd0aH1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIHNxckxlbiA9IHNxdWFyZWRMZW5ndGg7XG4vKipcclxuICogUGVyZm9ybSBzb21lIG9wZXJhdGlvbiBvdmVyIGFuIGFycmF5IG9mIHZlYzJzLlxyXG4gKlxyXG4gKiBAcGFyYW0ge0FycmF5fSBhIHRoZSBhcnJheSBvZiB2ZWN0b3JzIHRvIGl0ZXJhdGUgb3ZlclxyXG4gKiBAcGFyYW0ge051bWJlcn0gc3RyaWRlIE51bWJlciBvZiBlbGVtZW50cyBiZXR3ZWVuIHRoZSBzdGFydCBvZiBlYWNoIHZlYzIuIElmIDAgYXNzdW1lcyB0aWdodGx5IHBhY2tlZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gb2Zmc2V0IE51bWJlciBvZiBlbGVtZW50cyB0byBza2lwIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFycmF5XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBjb3VudCBOdW1iZXIgb2YgdmVjMnMgdG8gaXRlcmF0ZSBvdmVyLiBJZiAwIGl0ZXJhdGVzIG92ZXIgZW50aXJlIGFycmF5XHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIEZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggdmVjdG9yIGluIHRoZSBhcnJheVxyXG4gKiBAcGFyYW0ge09iamVjdH0gW2FyZ10gYWRkaXRpb25hbCBhcmd1bWVudCB0byBwYXNzIHRvIGZuXHJcbiAqIEByZXR1cm5zIHtBcnJheX0gYVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgZm9yRWFjaCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHZlYyA9IGNyZWF0ZSgpO1xuICByZXR1cm4gZnVuY3Rpb24gKGEsIHN0cmlkZSwgb2Zmc2V0LCBjb3VudCwgZm4sIGFyZykge1xuICAgIHZhciBpLCBsO1xuXG4gICAgaWYgKCFzdHJpZGUpIHtcbiAgICAgIHN0cmlkZSA9IDI7XG4gICAgfVxuXG4gICAgaWYgKCFvZmZzZXQpIHtcbiAgICAgIG9mZnNldCA9IDA7XG4gICAgfVxuXG4gICAgaWYgKGNvdW50KSB7XG4gICAgICBsID0gTWF0aC5taW4oY291bnQgKiBzdHJpZGUgKyBvZmZzZXQsIGEubGVuZ3RoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbCA9IGEubGVuZ3RoO1xuICAgIH1cblxuICAgIGZvciAoaSA9IG9mZnNldDsgaSA8IGw7IGkgKz0gc3RyaWRlKSB7XG4gICAgICB2ZWNbMF0gPSBhW2ldO1xuICAgICAgdmVjWzFdID0gYVtpICsgMV07XG4gICAgICBmbih2ZWMsIHZlYywgYXJnKTtcbiAgICAgIGFbaV0gPSB2ZWNbMF07XG4gICAgICBhW2kgKyAxXSA9IHZlY1sxXTtcbiAgICB9XG5cbiAgICByZXR1cm4gYTtcbiAgfTtcbn0oKTsiLCJpbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMubWF0aC5oeXBvdC5qc1wiO1xuaW1wb3J0ICogYXMgZ2xNYXRyaXggZnJvbSBcIi4vY29tbW9uLmpzXCI7XG4vKipcclxuICogMyBEaW1lbnNpb25hbCBWZWN0b3JcclxuICogQG1vZHVsZSB2ZWMzXHJcbiAqL1xuXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldywgZW1wdHkgdmVjM1xyXG4gKlxyXG4gKiBAcmV0dXJucyB7dmVjM30gYSBuZXcgM0QgdmVjdG9yXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlKCkge1xuICB2YXIgb3V0ID0gbmV3IGdsTWF0cml4LkFSUkFZX1RZUEUoMyk7XG5cbiAgaWYgKGdsTWF0cml4LkFSUkFZX1RZUEUgIT0gRmxvYXQzMkFycmF5KSB7XG4gICAgb3V0WzBdID0gMDtcbiAgICBvdXRbMV0gPSAwO1xuICAgIG91dFsyXSA9IDA7XG4gIH1cblxuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgdmVjMyBpbml0aWFsaXplZCB3aXRoIHZhbHVlcyBmcm9tIGFuIGV4aXN0aW5nIHZlY3RvclxyXG4gKlxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjM30gYSB2ZWN0b3IgdG8gY2xvbmVcclxuICogQHJldHVybnMge3ZlYzN9IGEgbmV3IDNEIHZlY3RvclxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNsb25lKGEpIHtcbiAgdmFyIG91dCA9IG5ldyBnbE1hdHJpeC5BUlJBWV9UWVBFKDMpO1xuICBvdXRbMF0gPSBhWzBdO1xuICBvdXRbMV0gPSBhWzFdO1xuICBvdXRbMl0gPSBhWzJdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGxlbmd0aCBvZiBhIHZlYzNcclxuICpcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzN9IGEgdmVjdG9yIHRvIGNhbGN1bGF0ZSBsZW5ndGggb2ZcclxuICogQHJldHVybnMge051bWJlcn0gbGVuZ3RoIG9mIGFcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBsZW5ndGgoYSkge1xuICB2YXIgeCA9IGFbMF07XG4gIHZhciB5ID0gYVsxXTtcbiAgdmFyIHogPSBhWzJdO1xuICByZXR1cm4gTWF0aC5oeXBvdCh4LCB5LCB6KTtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IHZlYzMgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgZ2l2ZW4gdmFsdWVzXHJcbiAqXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB4IFggY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB5IFkgY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB6IFogY29tcG9uZW50XHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBhIG5ldyAzRCB2ZWN0b3JcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tVmFsdWVzKHgsIHksIHopIHtcbiAgdmFyIG91dCA9IG5ldyBnbE1hdHJpeC5BUlJBWV9UWVBFKDMpO1xuICBvdXRbMF0gPSB4O1xuICBvdXRbMV0gPSB5O1xuICBvdXRbMl0gPSB6O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENvcHkgdGhlIHZhbHVlcyBmcm9tIG9uZSB2ZWMzIHRvIGFub3RoZXJcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzN9IGEgdGhlIHNvdXJjZSB2ZWN0b3JcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNvcHkob3V0LCBhKSB7XG4gIG91dFswXSA9IGFbMF07XG4gIG91dFsxXSA9IGFbMV07XG4gIG91dFsyXSA9IGFbMl07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU2V0IHRoZSBjb21wb25lbnRzIG9mIGEgdmVjMyB0byB0aGUgZ2l2ZW4gdmFsdWVzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB4IFggY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB5IFkgY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB6IFogY29tcG9uZW50XHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzZXQob3V0LCB4LCB5LCB6KSB7XG4gIG91dFswXSA9IHg7XG4gIG91dFsxXSA9IHk7XG4gIG91dFsyXSA9IHo7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQWRkcyB0d28gdmVjMydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMzfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gYWRkKG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdICsgYlswXTtcbiAgb3V0WzFdID0gYVsxXSArIGJbMV07XG4gIG91dFsyXSA9IGFbMl0gKyBiWzJdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFN1YnRyYWN0cyB2ZWN0b3IgYiBmcm9tIHZlY3RvciBhXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMzfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc3VidHJhY3Qob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IGFbMF0gLSBiWzBdO1xuICBvdXRbMV0gPSBhWzFdIC0gYlsxXTtcbiAgb3V0WzJdID0gYVsyXSAtIGJbMl07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogTXVsdGlwbGllcyB0d28gdmVjMydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMzfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbXVsdGlwbHkob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IGFbMF0gKiBiWzBdO1xuICBvdXRbMV0gPSBhWzFdICogYlsxXTtcbiAgb3V0WzJdID0gYVsyXSAqIGJbMl07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogRGl2aWRlcyB0d28gdmVjMydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMzfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZGl2aWRlKG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdIC8gYlswXTtcbiAgb3V0WzFdID0gYVsxXSAvIGJbMV07XG4gIG91dFsyXSA9IGFbMl0gLyBiWzJdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIE1hdGguY2VpbCB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzNcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzN9IGEgdmVjdG9yIHRvIGNlaWxcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNlaWwob3V0LCBhKSB7XG4gIG91dFswXSA9IE1hdGguY2VpbChhWzBdKTtcbiAgb3V0WzFdID0gTWF0aC5jZWlsKGFbMV0pO1xuICBvdXRbMl0gPSBNYXRoLmNlaWwoYVsyXSk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogTWF0aC5mbG9vciB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzNcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzN9IGEgdmVjdG9yIHRvIGZsb29yXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmbG9vcihvdXQsIGEpIHtcbiAgb3V0WzBdID0gTWF0aC5mbG9vcihhWzBdKTtcbiAgb3V0WzFdID0gTWF0aC5mbG9vcihhWzFdKTtcbiAgb3V0WzJdID0gTWF0aC5mbG9vcihhWzJdKTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSBtaW5pbXVtIG9mIHR3byB2ZWMzJ3NcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBtaW4ob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IE1hdGgubWluKGFbMF0sIGJbMF0pO1xuICBvdXRbMV0gPSBNYXRoLm1pbihhWzFdLCBiWzFdKTtcbiAgb3V0WzJdID0gTWF0aC5taW4oYVsyXSwgYlsyXSk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUmV0dXJucyB0aGUgbWF4aW11bSBvZiB0d28gdmVjMydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMzfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbWF4KG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBNYXRoLm1heChhWzBdLCBiWzBdKTtcbiAgb3V0WzFdID0gTWF0aC5tYXgoYVsxXSwgYlsxXSk7XG4gIG91dFsyXSA9IE1hdGgubWF4KGFbMl0sIGJbMl0pO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIE1hdGgucm91bmQgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWMzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMzfSBhIHZlY3RvciB0byByb3VuZFxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcm91bmQob3V0LCBhKSB7XG4gIG91dFswXSA9IE1hdGgucm91bmQoYVswXSk7XG4gIG91dFsxXSA9IE1hdGgucm91bmQoYVsxXSk7XG4gIG91dFsyXSA9IE1hdGgucm91bmQoYVsyXSk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU2NhbGVzIGEgdmVjMyBieSBhIHNjYWxhciBudW1iZXJcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzN9IGEgdGhlIHZlY3RvciB0byBzY2FsZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gYiBhbW91bnQgdG8gc2NhbGUgdGhlIHZlY3RvciBieVxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc2NhbGUob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IGFbMF0gKiBiO1xuICBvdXRbMV0gPSBhWzFdICogYjtcbiAgb3V0WzJdID0gYVsyXSAqIGI7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQWRkcyB0d28gdmVjMydzIGFmdGVyIHNjYWxpbmcgdGhlIHNlY29uZCBvcGVyYW5kIGJ5IGEgc2NhbGFyIHZhbHVlXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMzfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gc2NhbGUgdGhlIGFtb3VudCB0byBzY2FsZSBiIGJ5IGJlZm9yZSBhZGRpbmdcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNjYWxlQW5kQWRkKG91dCwgYSwgYiwgc2NhbGUpIHtcbiAgb3V0WzBdID0gYVswXSArIGJbMF0gKiBzY2FsZTtcbiAgb3V0WzFdID0gYVsxXSArIGJbMV0gKiBzY2FsZTtcbiAgb3V0WzJdID0gYVsyXSArIGJbMl0gKiBzY2FsZTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBldWNsaWRpYW4gZGlzdGFuY2UgYmV0d2VlbiB0d28gdmVjMydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMzfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBkaXN0YW5jZSBiZXR3ZWVuIGEgYW5kIGJcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBkaXN0YW5jZShhLCBiKSB7XG4gIHZhciB4ID0gYlswXSAtIGFbMF07XG4gIHZhciB5ID0gYlsxXSAtIGFbMV07XG4gIHZhciB6ID0gYlsyXSAtIGFbMl07XG4gIHJldHVybiBNYXRoLmh5cG90KHgsIHksIHopO1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIHNxdWFyZWQgZXVjbGlkaWFuIGRpc3RhbmNlIGJldHdlZW4gdHdvIHZlYzMnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjM30gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge051bWJlcn0gc3F1YXJlZCBkaXN0YW5jZSBiZXR3ZWVuIGEgYW5kIGJcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzcXVhcmVkRGlzdGFuY2UoYSwgYikge1xuICB2YXIgeCA9IGJbMF0gLSBhWzBdO1xuICB2YXIgeSA9IGJbMV0gLSBhWzFdO1xuICB2YXIgeiA9IGJbMl0gLSBhWzJdO1xuICByZXR1cm4geCAqIHggKyB5ICogeSArIHogKiB6O1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIHNxdWFyZWQgbGVuZ3RoIG9mIGEgdmVjM1xyXG4gKlxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjM30gYSB2ZWN0b3IgdG8gY2FsY3VsYXRlIHNxdWFyZWQgbGVuZ3RoIG9mXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IHNxdWFyZWQgbGVuZ3RoIG9mIGFcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzcXVhcmVkTGVuZ3RoKGEpIHtcbiAgdmFyIHggPSBhWzBdO1xuICB2YXIgeSA9IGFbMV07XG4gIHZhciB6ID0gYVsyXTtcbiAgcmV0dXJuIHggKiB4ICsgeSAqIHkgKyB6ICogejtcbn1cbi8qKlxyXG4gKiBOZWdhdGVzIHRoZSBjb21wb25lbnRzIG9mIGEgdmVjM1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjM30gYSB2ZWN0b3IgdG8gbmVnYXRlXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBuZWdhdGUob3V0LCBhKSB7XG4gIG91dFswXSA9IC1hWzBdO1xuICBvdXRbMV0gPSAtYVsxXTtcbiAgb3V0WzJdID0gLWFbMl07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUmV0dXJucyB0aGUgaW52ZXJzZSBvZiB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzNcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzN9IGEgdmVjdG9yIHRvIGludmVydFxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaW52ZXJzZShvdXQsIGEpIHtcbiAgb3V0WzBdID0gMS4wIC8gYVswXTtcbiAgb3V0WzFdID0gMS4wIC8gYVsxXTtcbiAgb3V0WzJdID0gMS4wIC8gYVsyXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBOb3JtYWxpemUgYSB2ZWMzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMzfSBhIHZlY3RvciB0byBub3JtYWxpemVcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZShvdXQsIGEpIHtcbiAgdmFyIHggPSBhWzBdO1xuICB2YXIgeSA9IGFbMV07XG4gIHZhciB6ID0gYVsyXTtcbiAgdmFyIGxlbiA9IHggKiB4ICsgeSAqIHkgKyB6ICogejtcblxuICBpZiAobGVuID4gMCkge1xuICAgIC8vVE9ETzogZXZhbHVhdGUgdXNlIG9mIGdsbV9pbnZzcXJ0IGhlcmU/XG4gICAgbGVuID0gMSAvIE1hdGguc3FydChsZW4pO1xuICB9XG5cbiAgb3V0WzBdID0gYVswXSAqIGxlbjtcbiAgb3V0WzFdID0gYVsxXSAqIGxlbjtcbiAgb3V0WzJdID0gYVsyXSAqIGxlbjtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBkb3QgcHJvZHVjdCBvZiB0d28gdmVjMydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMzfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBkb3QgcHJvZHVjdCBvZiBhIGFuZCBiXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZG90KGEsIGIpIHtcbiAgcmV0dXJuIGFbMF0gKiBiWzBdICsgYVsxXSAqIGJbMV0gKyBhWzJdICogYlsyXTtcbn1cbi8qKlxyXG4gKiBDb21wdXRlcyB0aGUgY3Jvc3MgcHJvZHVjdCBvZiB0d28gdmVjMydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMzfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY3Jvc3Mob3V0LCBhLCBiKSB7XG4gIHZhciBheCA9IGFbMF0sXG4gICAgICBheSA9IGFbMV0sXG4gICAgICBheiA9IGFbMl07XG4gIHZhciBieCA9IGJbMF0sXG4gICAgICBieSA9IGJbMV0sXG4gICAgICBieiA9IGJbMl07XG4gIG91dFswXSA9IGF5ICogYnogLSBheiAqIGJ5O1xuICBvdXRbMV0gPSBheiAqIGJ4IC0gYXggKiBiejtcbiAgb3V0WzJdID0gYXggKiBieSAtIGF5ICogYng7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUGVyZm9ybXMgYSBsaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIHR3byB2ZWMzJ3NcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB0IGludGVycG9sYXRpb24gYW1vdW50LCBpbiB0aGUgcmFuZ2UgWzAtMV0sIGJldHdlZW4gdGhlIHR3byBpbnB1dHNcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGxlcnAob3V0LCBhLCBiLCB0KSB7XG4gIHZhciBheCA9IGFbMF07XG4gIHZhciBheSA9IGFbMV07XG4gIHZhciBheiA9IGFbMl07XG4gIG91dFswXSA9IGF4ICsgdCAqIChiWzBdIC0gYXgpO1xuICBvdXRbMV0gPSBheSArIHQgKiAoYlsxXSAtIGF5KTtcbiAgb3V0WzJdID0gYXogKyB0ICogKGJbMl0gLSBheik7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUGVyZm9ybXMgYSBoZXJtaXRlIGludGVycG9sYXRpb24gd2l0aCB0d28gY29udHJvbCBwb2ludHNcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMzfSBjIHRoZSB0aGlyZCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMzfSBkIHRoZSBmb3VydGggb3BlcmFuZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gdCBpbnRlcnBvbGF0aW9uIGFtb3VudCwgaW4gdGhlIHJhbmdlIFswLTFdLCBiZXR3ZWVuIHRoZSB0d28gaW5wdXRzXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBoZXJtaXRlKG91dCwgYSwgYiwgYywgZCwgdCkge1xuICB2YXIgZmFjdG9yVGltZXMyID0gdCAqIHQ7XG4gIHZhciBmYWN0b3IxID0gZmFjdG9yVGltZXMyICogKDIgKiB0IC0gMykgKyAxO1xuICB2YXIgZmFjdG9yMiA9IGZhY3RvclRpbWVzMiAqICh0IC0gMikgKyB0O1xuICB2YXIgZmFjdG9yMyA9IGZhY3RvclRpbWVzMiAqICh0IC0gMSk7XG4gIHZhciBmYWN0b3I0ID0gZmFjdG9yVGltZXMyICogKDMgLSAyICogdCk7XG4gIG91dFswXSA9IGFbMF0gKiBmYWN0b3IxICsgYlswXSAqIGZhY3RvcjIgKyBjWzBdICogZmFjdG9yMyArIGRbMF0gKiBmYWN0b3I0O1xuICBvdXRbMV0gPSBhWzFdICogZmFjdG9yMSArIGJbMV0gKiBmYWN0b3IyICsgY1sxXSAqIGZhY3RvcjMgKyBkWzFdICogZmFjdG9yNDtcbiAgb3V0WzJdID0gYVsyXSAqIGZhY3RvcjEgKyBiWzJdICogZmFjdG9yMiArIGNbMl0gKiBmYWN0b3IzICsgZFsyXSAqIGZhY3RvcjQ7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUGVyZm9ybXMgYSBiZXppZXIgaW50ZXJwb2xhdGlvbiB3aXRoIHR3byBjb250cm9sIHBvaW50c1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjM30gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzN9IGMgdGhlIHRoaXJkIG9wZXJhbmRcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzN9IGQgdGhlIGZvdXJ0aCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB0IGludGVycG9sYXRpb24gYW1vdW50LCBpbiB0aGUgcmFuZ2UgWzAtMV0sIGJldHdlZW4gdGhlIHR3byBpbnB1dHNcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGJlemllcihvdXQsIGEsIGIsIGMsIGQsIHQpIHtcbiAgdmFyIGludmVyc2VGYWN0b3IgPSAxIC0gdDtcbiAgdmFyIGludmVyc2VGYWN0b3JUaW1lc1R3byA9IGludmVyc2VGYWN0b3IgKiBpbnZlcnNlRmFjdG9yO1xuICB2YXIgZmFjdG9yVGltZXMyID0gdCAqIHQ7XG4gIHZhciBmYWN0b3IxID0gaW52ZXJzZUZhY3RvclRpbWVzVHdvICogaW52ZXJzZUZhY3RvcjtcbiAgdmFyIGZhY3RvcjIgPSAzICogdCAqIGludmVyc2VGYWN0b3JUaW1lc1R3bztcbiAgdmFyIGZhY3RvcjMgPSAzICogZmFjdG9yVGltZXMyICogaW52ZXJzZUZhY3RvcjtcbiAgdmFyIGZhY3RvcjQgPSBmYWN0b3JUaW1lczIgKiB0O1xuICBvdXRbMF0gPSBhWzBdICogZmFjdG9yMSArIGJbMF0gKiBmYWN0b3IyICsgY1swXSAqIGZhY3RvcjMgKyBkWzBdICogZmFjdG9yNDtcbiAgb3V0WzFdID0gYVsxXSAqIGZhY3RvcjEgKyBiWzFdICogZmFjdG9yMiArIGNbMV0gKiBmYWN0b3IzICsgZFsxXSAqIGZhY3RvcjQ7XG4gIG91dFsyXSA9IGFbMl0gKiBmYWN0b3IxICsgYlsyXSAqIGZhY3RvcjIgKyBjWzJdICogZmFjdG9yMyArIGRbMl0gKiBmYWN0b3I0O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIEdlbmVyYXRlcyBhIHJhbmRvbSB2ZWN0b3Igd2l0aCB0aGUgZ2l2ZW4gc2NhbGVcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtOdW1iZXJ9IFtzY2FsZV0gTGVuZ3RoIG9mIHRoZSByZXN1bHRpbmcgdmVjdG9yLiBJZiBvbW1pdHRlZCwgYSB1bml0IHZlY3RvciB3aWxsIGJlIHJldHVybmVkXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiByYW5kb20ob3V0LCBzY2FsZSkge1xuICBzY2FsZSA9IHNjYWxlIHx8IDEuMDtcbiAgdmFyIHIgPSBnbE1hdHJpeC5SQU5ET00oKSAqIDIuMCAqIE1hdGguUEk7XG4gIHZhciB6ID0gZ2xNYXRyaXguUkFORE9NKCkgKiAyLjAgLSAxLjA7XG4gIHZhciB6U2NhbGUgPSBNYXRoLnNxcnQoMS4wIC0geiAqIHopICogc2NhbGU7XG4gIG91dFswXSA9IE1hdGguY29zKHIpICogelNjYWxlO1xuICBvdXRbMV0gPSBNYXRoLnNpbihyKSAqIHpTY2FsZTtcbiAgb3V0WzJdID0geiAqIHNjYWxlO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFRyYW5zZm9ybXMgdGhlIHZlYzMgd2l0aCBhIG1hdDQuXHJcbiAqIDR0aCB2ZWN0b3IgY29tcG9uZW50IGlzIGltcGxpY2l0bHkgJzEnXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMzfSBhIHRoZSB2ZWN0b3IgdG8gdHJhbnNmb3JtXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlNYXQ0fSBtIG1hdHJpeCB0byB0cmFuc2Zvcm0gd2l0aFxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtTWF0NChvdXQsIGEsIG0pIHtcbiAgdmFyIHggPSBhWzBdLFxuICAgICAgeSA9IGFbMV0sXG4gICAgICB6ID0gYVsyXTtcbiAgdmFyIHcgPSBtWzNdICogeCArIG1bN10gKiB5ICsgbVsxMV0gKiB6ICsgbVsxNV07XG4gIHcgPSB3IHx8IDEuMDtcbiAgb3V0WzBdID0gKG1bMF0gKiB4ICsgbVs0XSAqIHkgKyBtWzhdICogeiArIG1bMTJdKSAvIHc7XG4gIG91dFsxXSA9IChtWzFdICogeCArIG1bNV0gKiB5ICsgbVs5XSAqIHogKyBtWzEzXSkgLyB3O1xuICBvdXRbMl0gPSAobVsyXSAqIHggKyBtWzZdICogeSArIG1bMTBdICogeiArIG1bMTRdKSAvIHc7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogVHJhbnNmb3JtcyB0aGUgdmVjMyB3aXRoIGEgbWF0My5cclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzN9IGEgdGhlIHZlY3RvciB0byB0cmFuc2Zvcm1cclxuICogQHBhcmFtIHtSZWFkb25seU1hdDN9IG0gdGhlIDN4MyBtYXRyaXggdG8gdHJhbnNmb3JtIHdpdGhcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybU1hdDMob3V0LCBhLCBtKSB7XG4gIHZhciB4ID0gYVswXSxcbiAgICAgIHkgPSBhWzFdLFxuICAgICAgeiA9IGFbMl07XG4gIG91dFswXSA9IHggKiBtWzBdICsgeSAqIG1bM10gKyB6ICogbVs2XTtcbiAgb3V0WzFdID0geCAqIG1bMV0gKyB5ICogbVs0XSArIHogKiBtWzddO1xuICBvdXRbMl0gPSB4ICogbVsyXSArIHkgKiBtWzVdICsgeiAqIG1bOF07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogVHJhbnNmb3JtcyB0aGUgdmVjMyB3aXRoIGEgcXVhdFxyXG4gKiBDYW4gYWxzbyBiZSB1c2VkIGZvciBkdWFsIHF1YXRlcm5pb25zLiAoTXVsdGlwbHkgaXQgd2l0aCB0aGUgcmVhbCBwYXJ0KVxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjM30gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5UXVhdH0gcSBxdWF0ZXJuaW9uIHRvIHRyYW5zZm9ybSB3aXRoXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2Zvcm1RdWF0KG91dCwgYSwgcSkge1xuICAvLyBiZW5jaG1hcmtzOiBodHRwczovL2pzcGVyZi5jb20vcXVhdGVybmlvbi10cmFuc2Zvcm0tdmVjMy1pbXBsZW1lbnRhdGlvbnMtZml4ZWRcbiAgdmFyIHF4ID0gcVswXSxcbiAgICAgIHF5ID0gcVsxXSxcbiAgICAgIHF6ID0gcVsyXSxcbiAgICAgIHF3ID0gcVszXTtcbiAgdmFyIHggPSBhWzBdLFxuICAgICAgeSA9IGFbMV0sXG4gICAgICB6ID0gYVsyXTsgLy8gdmFyIHF2ZWMgPSBbcXgsIHF5LCBxel07XG4gIC8vIHZhciB1diA9IHZlYzMuY3Jvc3MoW10sIHF2ZWMsIGEpO1xuXG4gIHZhciB1dnggPSBxeSAqIHogLSBxeiAqIHksXG4gICAgICB1dnkgPSBxeiAqIHggLSBxeCAqIHosXG4gICAgICB1dnogPSBxeCAqIHkgLSBxeSAqIHg7IC8vIHZhciB1dXYgPSB2ZWMzLmNyb3NzKFtdLCBxdmVjLCB1dik7XG5cbiAgdmFyIHV1dnggPSBxeSAqIHV2eiAtIHF6ICogdXZ5LFxuICAgICAgdXV2eSA9IHF6ICogdXZ4IC0gcXggKiB1dnosXG4gICAgICB1dXZ6ID0gcXggKiB1dnkgLSBxeSAqIHV2eDsgLy8gdmVjMy5zY2FsZSh1diwgdXYsIDIgKiB3KTtcblxuICB2YXIgdzIgPSBxdyAqIDI7XG4gIHV2eCAqPSB3MjtcbiAgdXZ5ICo9IHcyO1xuICB1dnogKj0gdzI7IC8vIHZlYzMuc2NhbGUodXV2LCB1dXYsIDIpO1xuXG4gIHV1dnggKj0gMjtcbiAgdXV2eSAqPSAyO1xuICB1dXZ6ICo9IDI7IC8vIHJldHVybiB2ZWMzLmFkZChvdXQsIGEsIHZlYzMuYWRkKG91dCwgdXYsIHV1dikpO1xuXG4gIG91dFswXSA9IHggKyB1dnggKyB1dXZ4O1xuICBvdXRbMV0gPSB5ICsgdXZ5ICsgdXV2eTtcbiAgb3V0WzJdID0geiArIHV2eiArIHV1dno7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUm90YXRlIGEgM0QgdmVjdG9yIGFyb3VuZCB0aGUgeC1heGlzXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IFRoZSByZWNlaXZpbmcgdmVjM1xyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjM30gYSBUaGUgdmVjMyBwb2ludCB0byByb3RhdGVcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzN9IGIgVGhlIG9yaWdpbiBvZiB0aGUgcm90YXRpb25cclxuICogQHBhcmFtIHtOdW1iZXJ9IHJhZCBUaGUgYW5nbGUgb2Ygcm90YXRpb24gaW4gcmFkaWFuc1xyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcm90YXRlWChvdXQsIGEsIGIsIHJhZCkge1xuICB2YXIgcCA9IFtdLFxuICAgICAgciA9IFtdOyAvL1RyYW5zbGF0ZSBwb2ludCB0byB0aGUgb3JpZ2luXG5cbiAgcFswXSA9IGFbMF0gLSBiWzBdO1xuICBwWzFdID0gYVsxXSAtIGJbMV07XG4gIHBbMl0gPSBhWzJdIC0gYlsyXTsgLy9wZXJmb3JtIHJvdGF0aW9uXG5cbiAgclswXSA9IHBbMF07XG4gIHJbMV0gPSBwWzFdICogTWF0aC5jb3MocmFkKSAtIHBbMl0gKiBNYXRoLnNpbihyYWQpO1xuICByWzJdID0gcFsxXSAqIE1hdGguc2luKHJhZCkgKyBwWzJdICogTWF0aC5jb3MocmFkKTsgLy90cmFuc2xhdGUgdG8gY29ycmVjdCBwb3NpdGlvblxuXG4gIG91dFswXSA9IHJbMF0gKyBiWzBdO1xuICBvdXRbMV0gPSByWzFdICsgYlsxXTtcbiAgb3V0WzJdID0gclsyXSArIGJbMl07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUm90YXRlIGEgM0QgdmVjdG9yIGFyb3VuZCB0aGUgeS1heGlzXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IFRoZSByZWNlaXZpbmcgdmVjM1xyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjM30gYSBUaGUgdmVjMyBwb2ludCB0byByb3RhdGVcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzN9IGIgVGhlIG9yaWdpbiBvZiB0aGUgcm90YXRpb25cclxuICogQHBhcmFtIHtOdW1iZXJ9IHJhZCBUaGUgYW5nbGUgb2Ygcm90YXRpb24gaW4gcmFkaWFuc1xyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcm90YXRlWShvdXQsIGEsIGIsIHJhZCkge1xuICB2YXIgcCA9IFtdLFxuICAgICAgciA9IFtdOyAvL1RyYW5zbGF0ZSBwb2ludCB0byB0aGUgb3JpZ2luXG5cbiAgcFswXSA9IGFbMF0gLSBiWzBdO1xuICBwWzFdID0gYVsxXSAtIGJbMV07XG4gIHBbMl0gPSBhWzJdIC0gYlsyXTsgLy9wZXJmb3JtIHJvdGF0aW9uXG5cbiAgclswXSA9IHBbMl0gKiBNYXRoLnNpbihyYWQpICsgcFswXSAqIE1hdGguY29zKHJhZCk7XG4gIHJbMV0gPSBwWzFdO1xuICByWzJdID0gcFsyXSAqIE1hdGguY29zKHJhZCkgLSBwWzBdICogTWF0aC5zaW4ocmFkKTsgLy90cmFuc2xhdGUgdG8gY29ycmVjdCBwb3NpdGlvblxuXG4gIG91dFswXSA9IHJbMF0gKyBiWzBdO1xuICBvdXRbMV0gPSByWzFdICsgYlsxXTtcbiAgb3V0WzJdID0gclsyXSArIGJbMl07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUm90YXRlIGEgM0QgdmVjdG9yIGFyb3VuZCB0aGUgei1heGlzXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IFRoZSByZWNlaXZpbmcgdmVjM1xyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjM30gYSBUaGUgdmVjMyBwb2ludCB0byByb3RhdGVcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzN9IGIgVGhlIG9yaWdpbiBvZiB0aGUgcm90YXRpb25cclxuICogQHBhcmFtIHtOdW1iZXJ9IHJhZCBUaGUgYW5nbGUgb2Ygcm90YXRpb24gaW4gcmFkaWFuc1xyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcm90YXRlWihvdXQsIGEsIGIsIHJhZCkge1xuICB2YXIgcCA9IFtdLFxuICAgICAgciA9IFtdOyAvL1RyYW5zbGF0ZSBwb2ludCB0byB0aGUgb3JpZ2luXG5cbiAgcFswXSA9IGFbMF0gLSBiWzBdO1xuICBwWzFdID0gYVsxXSAtIGJbMV07XG4gIHBbMl0gPSBhWzJdIC0gYlsyXTsgLy9wZXJmb3JtIHJvdGF0aW9uXG5cbiAgclswXSA9IHBbMF0gKiBNYXRoLmNvcyhyYWQpIC0gcFsxXSAqIE1hdGguc2luKHJhZCk7XG4gIHJbMV0gPSBwWzBdICogTWF0aC5zaW4ocmFkKSArIHBbMV0gKiBNYXRoLmNvcyhyYWQpO1xuICByWzJdID0gcFsyXTsgLy90cmFuc2xhdGUgdG8gY29ycmVjdCBwb3NpdGlvblxuXG4gIG91dFswXSA9IHJbMF0gKyBiWzBdO1xuICBvdXRbMV0gPSByWzFdICsgYlsxXTtcbiAgb3V0WzJdID0gclsyXSArIGJbMl07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogR2V0IHRoZSBhbmdsZSBiZXR3ZWVuIHR3byAzRCB2ZWN0b3JzXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMzfSBhIFRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMzfSBiIFRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBUaGUgYW5nbGUgaW4gcmFkaWFuc1xyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGFuZ2xlKGEsIGIpIHtcbiAgdmFyIGF4ID0gYVswXSxcbiAgICAgIGF5ID0gYVsxXSxcbiAgICAgIGF6ID0gYVsyXSxcbiAgICAgIGJ4ID0gYlswXSxcbiAgICAgIGJ5ID0gYlsxXSxcbiAgICAgIGJ6ID0gYlsyXSxcbiAgICAgIG1hZzEgPSBNYXRoLnNxcnQoYXggKiBheCArIGF5ICogYXkgKyBheiAqIGF6KSxcbiAgICAgIG1hZzIgPSBNYXRoLnNxcnQoYnggKiBieCArIGJ5ICogYnkgKyBieiAqIGJ6KSxcbiAgICAgIG1hZyA9IG1hZzEgKiBtYWcyLFxuICAgICAgY29zaW5lID0gbWFnICYmIGRvdChhLCBiKSAvIG1hZztcbiAgcmV0dXJuIE1hdGguYWNvcyhNYXRoLm1pbihNYXRoLm1heChjb3NpbmUsIC0xKSwgMSkpO1xufVxuLyoqXHJcbiAqIFNldCB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzMgdG8gemVyb1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gemVybyhvdXQpIHtcbiAgb3V0WzBdID0gMC4wO1xuICBvdXRbMV0gPSAwLjA7XG4gIG91dFsyXSA9IDAuMDtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgdmVjdG9yXHJcbiAqXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMzfSBhIHZlY3RvciB0byByZXByZXNlbnQgYXMgYSBzdHJpbmdcclxuICogQHJldHVybnMge1N0cmluZ30gc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2ZWN0b3JcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzdHIoYSkge1xuICByZXR1cm4gXCJ2ZWMzKFwiICsgYVswXSArIFwiLCBcIiArIGFbMV0gKyBcIiwgXCIgKyBhWzJdICsgXCIpXCI7XG59XG4vKipcclxuICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgdmVjdG9ycyBoYXZlIGV4YWN0bHkgdGhlIHNhbWUgZWxlbWVudHMgaW4gdGhlIHNhbWUgcG9zaXRpb24gKHdoZW4gY29tcGFyZWQgd2l0aCA9PT0pXHJcbiAqXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMzfSBhIFRoZSBmaXJzdCB2ZWN0b3IuXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMzfSBiIFRoZSBzZWNvbmQgdmVjdG9yLlxyXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gVHJ1ZSBpZiB0aGUgdmVjdG9ycyBhcmUgZXF1YWwsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBleGFjdEVxdWFscyhhLCBiKSB7XG4gIHJldHVybiBhWzBdID09PSBiWzBdICYmIGFbMV0gPT09IGJbMV0gJiYgYVsyXSA9PT0gYlsyXTtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSB2ZWN0b3JzIGhhdmUgYXBwcm94aW1hdGVseSB0aGUgc2FtZSBlbGVtZW50cyBpbiB0aGUgc2FtZSBwb3NpdGlvbi5cclxuICpcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzN9IGEgVGhlIGZpcnN0IHZlY3Rvci5cclxuICogQHBhcmFtIHtSZWFkb25seVZlYzN9IGIgVGhlIHNlY29uZCB2ZWN0b3IuXHJcbiAqIEByZXR1cm5zIHtCb29sZWFufSBUcnVlIGlmIHRoZSB2ZWN0b3JzIGFyZSBlcXVhbCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWFscyhhLCBiKSB7XG4gIHZhciBhMCA9IGFbMF0sXG4gICAgICBhMSA9IGFbMV0sXG4gICAgICBhMiA9IGFbMl07XG4gIHZhciBiMCA9IGJbMF0sXG4gICAgICBiMSA9IGJbMV0sXG4gICAgICBiMiA9IGJbMl07XG4gIHJldHVybiBNYXRoLmFicyhhMCAtIGIwKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMCksIE1hdGguYWJzKGIwKSkgJiYgTWF0aC5hYnMoYTEgLSBiMSkgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTEpLCBNYXRoLmFicyhiMSkpICYmIE1hdGguYWJzKGEyIC0gYjIpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGEyKSwgTWF0aC5hYnMoYjIpKTtcbn1cbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzMuc3VidHJhY3R9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBzdWIgPSBzdWJ0cmFjdDtcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzMubXVsdGlwbHl9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBtdWwgPSBtdWx0aXBseTtcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzMuZGl2aWRlfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgZGl2ID0gZGl2aWRlO1xuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjMy5kaXN0YW5jZX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIGRpc3QgPSBkaXN0YW5jZTtcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzMuc3F1YXJlZERpc3RhbmNlfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgc3FyRGlzdCA9IHNxdWFyZWREaXN0YW5jZTtcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzMubGVuZ3RofVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgbGVuID0gbGVuZ3RoO1xuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjMy5zcXVhcmVkTGVuZ3RofVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgc3FyTGVuID0gc3F1YXJlZExlbmd0aDtcbi8qKlxyXG4gKiBQZXJmb3JtIHNvbWUgb3BlcmF0aW9uIG92ZXIgYW4gYXJyYXkgb2YgdmVjM3MuXHJcbiAqXHJcbiAqIEBwYXJhbSB7QXJyYXl9IGEgdGhlIGFycmF5IG9mIHZlY3RvcnMgdG8gaXRlcmF0ZSBvdmVyXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBzdHJpZGUgTnVtYmVyIG9mIGVsZW1lbnRzIGJldHdlZW4gdGhlIHN0YXJ0IG9mIGVhY2ggdmVjMy4gSWYgMCBhc3N1bWVzIHRpZ2h0bHkgcGFja2VkXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBvZmZzZXQgTnVtYmVyIG9mIGVsZW1lbnRzIHRvIHNraXAgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgYXJyYXlcclxuICogQHBhcmFtIHtOdW1iZXJ9IGNvdW50IE51bWJlciBvZiB2ZWMzcyB0byBpdGVyYXRlIG92ZXIuIElmIDAgaXRlcmF0ZXMgb3ZlciBlbnRpcmUgYXJyYXlcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gRnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCB2ZWN0b3IgaW4gdGhlIGFycmF5XHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbYXJnXSBhZGRpdGlvbmFsIGFyZ3VtZW50IHRvIHBhc3MgdG8gZm5cclxuICogQHJldHVybnMge0FycmF5fSBhXHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBmb3JFYWNoID0gZnVuY3Rpb24gKCkge1xuICB2YXIgdmVjID0gY3JlYXRlKCk7XG4gIHJldHVybiBmdW5jdGlvbiAoYSwgc3RyaWRlLCBvZmZzZXQsIGNvdW50LCBmbiwgYXJnKSB7XG4gICAgdmFyIGksIGw7XG5cbiAgICBpZiAoIXN0cmlkZSkge1xuICAgICAgc3RyaWRlID0gMztcbiAgICB9XG5cbiAgICBpZiAoIW9mZnNldCkge1xuICAgICAgb2Zmc2V0ID0gMDtcbiAgICB9XG5cbiAgICBpZiAoY291bnQpIHtcbiAgICAgIGwgPSBNYXRoLm1pbihjb3VudCAqIHN0cmlkZSArIG9mZnNldCwgYS5sZW5ndGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsID0gYS5sZW5ndGg7XG4gICAgfVxuXG4gICAgZm9yIChpID0gb2Zmc2V0OyBpIDwgbDsgaSArPSBzdHJpZGUpIHtcbiAgICAgIHZlY1swXSA9IGFbaV07XG4gICAgICB2ZWNbMV0gPSBhW2kgKyAxXTtcbiAgICAgIHZlY1syXSA9IGFbaSArIDJdO1xuICAgICAgZm4odmVjLCB2ZWMsIGFyZyk7XG4gICAgICBhW2ldID0gdmVjWzBdO1xuICAgICAgYVtpICsgMV0gPSB2ZWNbMV07XG4gICAgICBhW2kgKyAyXSA9IHZlY1syXTtcbiAgICB9XG5cbiAgICByZXR1cm4gYTtcbiAgfTtcbn0oKTsiLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhc3NlcnQoY29uZGl0aW9uLCBtZXNzYWdlKSB7XG4gIGlmICghY29uZGl0aW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UgfHwgJ0BtYXRoLmdsL3dlYi1tZXJjYXRvcjogYXNzZXJ0aW9uIGZhaWxlZC4nKTtcbiAgfVxufSIsImltcG9ydCBfc2xpY2VkVG9BcnJheSBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvanVzdGljZTQwLXRvb2wvanVzdGljZTQwLXRvb2wvY2xpZW50L25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zbGljZWRUb0FycmF5XCI7XG5pbXBvcnQgeyBjcmVhdGVNYXQ0LCB0cmFuc2Zvcm1WZWN0b3IsIGxvZzIgfSBmcm9tICcuL21hdGgtdXRpbHMnO1xuaW1wb3J0ICogYXMgbWF0NCBmcm9tICdnbC1tYXRyaXgvbWF0NCc7XG5pbXBvcnQgKiBhcyB2ZWMyIGZyb20gJ2dsLW1hdHJpeC92ZWMyJztcbmltcG9ydCAqIGFzIHZlYzMgZnJvbSAnZ2wtbWF0cml4L3ZlYzMnO1xuaW1wb3J0IGFzc2VydCBmcm9tICcuL2Fzc2VydCc7XG52YXIgUEkgPSBNYXRoLlBJO1xudmFyIFBJXzQgPSBQSSAvIDQ7XG52YXIgREVHUkVFU19UT19SQURJQU5TID0gUEkgLyAxODA7XG52YXIgUkFESUFOU19UT19ERUdSRUVTID0gMTgwIC8gUEk7XG52YXIgVElMRV9TSVpFID0gNTEyO1xudmFyIEVBUlRIX0NJUkNVTUZFUkVOQ0UgPSA0MC4wM2U2O1xuZXhwb3J0IHZhciBERUZBVUxUX0FMVElUVURFID0gMS41O1xuZXhwb3J0IGZ1bmN0aW9uIHpvb21Ub1NjYWxlKHpvb20pIHtcbiAgcmV0dXJuIE1hdGgucG93KDIsIHpvb20pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHNjYWxlVG9ab29tKHNjYWxlKSB7XG4gIHJldHVybiBsb2cyKHNjYWxlKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBsbmdMYXRUb1dvcmxkKF9yZWYpIHtcbiAgdmFyIF9yZWYyID0gX3NsaWNlZFRvQXJyYXkoX3JlZiwgMiksXG4gICAgICBsbmcgPSBfcmVmMlswXSxcbiAgICAgIGxhdCA9IF9yZWYyWzFdO1xuXG4gIGFzc2VydChOdW1iZXIuaXNGaW5pdGUobG5nKSk7XG4gIGFzc2VydChOdW1iZXIuaXNGaW5pdGUobGF0KSAmJiBsYXQgPj0gLTkwICYmIGxhdCA8PSA5MCwgJ2ludmFsaWQgbGF0aXR1ZGUnKTtcbiAgdmFyIGxhbWJkYTIgPSBsbmcgKiBERUdSRUVTX1RPX1JBRElBTlM7XG4gIHZhciBwaGkyID0gbGF0ICogREVHUkVFU19UT19SQURJQU5TO1xuICB2YXIgeCA9IFRJTEVfU0laRSAqIChsYW1iZGEyICsgUEkpIC8gKDIgKiBQSSk7XG4gIHZhciB5ID0gVElMRV9TSVpFICogKFBJICsgTWF0aC5sb2coTWF0aC50YW4oUElfNCArIHBoaTIgKiAwLjUpKSkgLyAoMiAqIFBJKTtcbiAgcmV0dXJuIFt4LCB5XTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB3b3JsZFRvTG5nTGF0KF9yZWYzKSB7XG4gIHZhciBfcmVmNCA9IF9zbGljZWRUb0FycmF5KF9yZWYzLCAyKSxcbiAgICAgIHggPSBfcmVmNFswXSxcbiAgICAgIHkgPSBfcmVmNFsxXTtcblxuICB2YXIgbGFtYmRhMiA9IHggLyBUSUxFX1NJWkUgKiAoMiAqIFBJKSAtIFBJO1xuICB2YXIgcGhpMiA9IDIgKiAoTWF0aC5hdGFuKE1hdGguZXhwKHkgLyBUSUxFX1NJWkUgKiAoMiAqIFBJKSAtIFBJKSkgLSBQSV80KTtcbiAgcmV0dXJuIFtsYW1iZGEyICogUkFESUFOU19UT19ERUdSRUVTLCBwaGkyICogUkFESUFOU19UT19ERUdSRUVTXTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRNZXRlclpvb20oX3JlZjUpIHtcbiAgdmFyIGxhdGl0dWRlID0gX3JlZjUubGF0aXR1ZGU7XG4gIGFzc2VydChOdW1iZXIuaXNGaW5pdGUobGF0aXR1ZGUpKTtcbiAgdmFyIGxhdENvc2luZSA9IE1hdGguY29zKGxhdGl0dWRlICogREVHUkVFU19UT19SQURJQU5TKTtcbiAgcmV0dXJuIHNjYWxlVG9ab29tKEVBUlRIX0NJUkNVTUZFUkVOQ0UgKiBsYXRDb3NpbmUpIC0gOTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXREaXN0YW5jZVNjYWxlcyhfcmVmNikge1xuICB2YXIgbGF0aXR1ZGUgPSBfcmVmNi5sYXRpdHVkZSxcbiAgICAgIGxvbmdpdHVkZSA9IF9yZWY2LmxvbmdpdHVkZSxcbiAgICAgIF9yZWY2JGhpZ2hQcmVjaXNpb24gPSBfcmVmNi5oaWdoUHJlY2lzaW9uLFxuICAgICAgaGlnaFByZWNpc2lvbiA9IF9yZWY2JGhpZ2hQcmVjaXNpb24gPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZjYkaGlnaFByZWNpc2lvbjtcbiAgYXNzZXJ0KE51bWJlci5pc0Zpbml0ZShsYXRpdHVkZSkgJiYgTnVtYmVyLmlzRmluaXRlKGxvbmdpdHVkZSkpO1xuICB2YXIgcmVzdWx0ID0ge307XG4gIHZhciB3b3JsZFNpemUgPSBUSUxFX1NJWkU7XG4gIHZhciBsYXRDb3NpbmUgPSBNYXRoLmNvcyhsYXRpdHVkZSAqIERFR1JFRVNfVE9fUkFESUFOUyk7XG4gIHZhciB1bml0c1BlckRlZ3JlZVggPSB3b3JsZFNpemUgLyAzNjA7XG4gIHZhciB1bml0c1BlckRlZ3JlZVkgPSB1bml0c1BlckRlZ3JlZVggLyBsYXRDb3NpbmU7XG4gIHZhciBhbHRVbml0c1Blck1ldGVyID0gd29ybGRTaXplIC8gRUFSVEhfQ0lSQ1VNRkVSRU5DRSAvIGxhdENvc2luZTtcbiAgcmVzdWx0LnVuaXRzUGVyTWV0ZXIgPSBbYWx0VW5pdHNQZXJNZXRlciwgYWx0VW5pdHNQZXJNZXRlciwgYWx0VW5pdHNQZXJNZXRlcl07XG4gIHJlc3VsdC5tZXRlcnNQZXJVbml0ID0gWzEgLyBhbHRVbml0c1Blck1ldGVyLCAxIC8gYWx0VW5pdHNQZXJNZXRlciwgMSAvIGFsdFVuaXRzUGVyTWV0ZXJdO1xuICByZXN1bHQudW5pdHNQZXJEZWdyZWUgPSBbdW5pdHNQZXJEZWdyZWVYLCB1bml0c1BlckRlZ3JlZVksIGFsdFVuaXRzUGVyTWV0ZXJdO1xuICByZXN1bHQuZGVncmVlc1BlclVuaXQgPSBbMSAvIHVuaXRzUGVyRGVncmVlWCwgMSAvIHVuaXRzUGVyRGVncmVlWSwgMSAvIGFsdFVuaXRzUGVyTWV0ZXJdO1xuXG4gIGlmIChoaWdoUHJlY2lzaW9uKSB7XG4gICAgdmFyIGxhdENvc2luZTIgPSBERUdSRUVTX1RPX1JBRElBTlMgKiBNYXRoLnRhbihsYXRpdHVkZSAqIERFR1JFRVNfVE9fUkFESUFOUykgLyBsYXRDb3NpbmU7XG4gICAgdmFyIHVuaXRzUGVyRGVncmVlWTIgPSB1bml0c1BlckRlZ3JlZVggKiBsYXRDb3NpbmUyIC8gMjtcbiAgICB2YXIgYWx0VW5pdHNQZXJEZWdyZWUyID0gd29ybGRTaXplIC8gRUFSVEhfQ0lSQ1VNRkVSRU5DRSAqIGxhdENvc2luZTI7XG4gICAgdmFyIGFsdFVuaXRzUGVyTWV0ZXIyID0gYWx0VW5pdHNQZXJEZWdyZWUyIC8gdW5pdHNQZXJEZWdyZWVZICogYWx0VW5pdHNQZXJNZXRlcjtcbiAgICByZXN1bHQudW5pdHNQZXJEZWdyZWUyID0gWzAsIHVuaXRzUGVyRGVncmVlWTIsIGFsdFVuaXRzUGVyRGVncmVlMl07XG4gICAgcmVzdWx0LnVuaXRzUGVyTWV0ZXIyID0gW2FsdFVuaXRzUGVyTWV0ZXIyLCAwLCBhbHRVbml0c1Blck1ldGVyMl07XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGFkZE1ldGVyc1RvTG5nTGF0KGxuZ0xhdFosIHh5eikge1xuICB2YXIgX2xuZ0xhdFogPSBfc2xpY2VkVG9BcnJheShsbmdMYXRaLCAzKSxcbiAgICAgIGxvbmdpdHVkZSA9IF9sbmdMYXRaWzBdLFxuICAgICAgbGF0aXR1ZGUgPSBfbG5nTGF0WlsxXSxcbiAgICAgIHowID0gX2xuZ0xhdFpbMl07XG5cbiAgdmFyIF94eXogPSBfc2xpY2VkVG9BcnJheSh4eXosIDMpLFxuICAgICAgeCA9IF94eXpbMF0sXG4gICAgICB5ID0gX3h5elsxXSxcbiAgICAgIHogPSBfeHl6WzJdO1xuXG4gIHZhciBfZ2V0RGlzdGFuY2VTY2FsZXMgPSBnZXREaXN0YW5jZVNjYWxlcyh7XG4gICAgbG9uZ2l0dWRlOiBsb25naXR1ZGUsXG4gICAgbGF0aXR1ZGU6IGxhdGl0dWRlLFxuICAgIGhpZ2hQcmVjaXNpb246IHRydWVcbiAgfSksXG4gICAgICB1bml0c1Blck1ldGVyID0gX2dldERpc3RhbmNlU2NhbGVzLnVuaXRzUGVyTWV0ZXIsXG4gICAgICB1bml0c1Blck1ldGVyMiA9IF9nZXREaXN0YW5jZVNjYWxlcy51bml0c1Blck1ldGVyMjtcblxuICB2YXIgd29ybGRzcGFjZSA9IGxuZ0xhdFRvV29ybGQobG5nTGF0Wik7XG4gIHdvcmxkc3BhY2VbMF0gKz0geCAqICh1bml0c1Blck1ldGVyWzBdICsgdW5pdHNQZXJNZXRlcjJbMF0gKiB5KTtcbiAgd29ybGRzcGFjZVsxXSArPSB5ICogKHVuaXRzUGVyTWV0ZXJbMV0gKyB1bml0c1Blck1ldGVyMlsxXSAqIHkpO1xuICB2YXIgbmV3TG5nTGF0ID0gd29ybGRUb0xuZ0xhdCh3b3JsZHNwYWNlKTtcbiAgdmFyIG5ld1ogPSAoejAgfHwgMCkgKyAoeiB8fCAwKTtcbiAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZSh6MCkgfHwgTnVtYmVyLmlzRmluaXRlKHopID8gW25ld0xuZ0xhdFswXSwgbmV3TG5nTGF0WzFdLCBuZXdaXSA6IG5ld0xuZ0xhdDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRWaWV3TWF0cml4KF9yZWY3KSB7XG4gIHZhciBoZWlnaHQgPSBfcmVmNy5oZWlnaHQsXG4gICAgICBwaXRjaCA9IF9yZWY3LnBpdGNoLFxuICAgICAgYmVhcmluZyA9IF9yZWY3LmJlYXJpbmcsXG4gICAgICBhbHRpdHVkZSA9IF9yZWY3LmFsdGl0dWRlLFxuICAgICAgc2NhbGUgPSBfcmVmNy5zY2FsZSxcbiAgICAgIF9yZWY3JGNlbnRlciA9IF9yZWY3LmNlbnRlcixcbiAgICAgIGNlbnRlciA9IF9yZWY3JGNlbnRlciA9PT0gdm9pZCAwID8gbnVsbCA6IF9yZWY3JGNlbnRlcjtcbiAgdmFyIHZtID0gY3JlYXRlTWF0NCgpO1xuICBtYXQ0LnRyYW5zbGF0ZSh2bSwgdm0sIFswLCAwLCAtYWx0aXR1ZGVdKTtcbiAgbWF0NC5yb3RhdGVYKHZtLCB2bSwgLXBpdGNoICogREVHUkVFU19UT19SQURJQU5TKTtcbiAgbWF0NC5yb3RhdGVaKHZtLCB2bSwgYmVhcmluZyAqIERFR1JFRVNfVE9fUkFESUFOUyk7XG4gIHNjYWxlIC89IGhlaWdodDtcbiAgbWF0NC5zY2FsZSh2bSwgdm0sIFtzY2FsZSwgc2NhbGUsIHNjYWxlXSk7XG5cbiAgaWYgKGNlbnRlcikge1xuICAgIG1hdDQudHJhbnNsYXRlKHZtLCB2bSwgdmVjMy5uZWdhdGUoW10sIGNlbnRlcikpO1xuICB9XG5cbiAgcmV0dXJuIHZtO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFByb2plY3Rpb25QYXJhbWV0ZXJzKF9yZWY4KSB7XG4gIHZhciB3aWR0aCA9IF9yZWY4LndpZHRoLFxuICAgICAgaGVpZ2h0ID0gX3JlZjguaGVpZ2h0LFxuICAgICAgX3JlZjgkZm92eSA9IF9yZWY4LmZvdnksXG4gICAgICBmb3Z5ID0gX3JlZjgkZm92eSA9PT0gdm9pZCAwID8gYWx0aXR1ZGVUb0ZvdnkoREVGQVVMVF9BTFRJVFVERSkgOiBfcmVmOCRmb3Z5LFxuICAgICAgYWx0aXR1ZGUgPSBfcmVmOC5hbHRpdHVkZSxcbiAgICAgIF9yZWY4JHBpdGNoID0gX3JlZjgucGl0Y2gsXG4gICAgICBwaXRjaCA9IF9yZWY4JHBpdGNoID09PSB2b2lkIDAgPyAwIDogX3JlZjgkcGl0Y2gsXG4gICAgICBfcmVmOCRuZWFyWk11bHRpcGxpZXIgPSBfcmVmOC5uZWFyWk11bHRpcGxpZXIsXG4gICAgICBuZWFyWk11bHRpcGxpZXIgPSBfcmVmOCRuZWFyWk11bHRpcGxpZXIgPT09IHZvaWQgMCA/IDEgOiBfcmVmOCRuZWFyWk11bHRpcGxpZXIsXG4gICAgICBfcmVmOCRmYXJaTXVsdGlwbGllciA9IF9yZWY4LmZhclpNdWx0aXBsaWVyLFxuICAgICAgZmFyWk11bHRpcGxpZXIgPSBfcmVmOCRmYXJaTXVsdGlwbGllciA9PT0gdm9pZCAwID8gMSA6IF9yZWY4JGZhclpNdWx0aXBsaWVyO1xuXG4gIGlmIChhbHRpdHVkZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgZm92eSA9IGFsdGl0dWRlVG9Gb3Z5KGFsdGl0dWRlKTtcbiAgfVxuXG4gIHZhciBoYWxmRm92ID0gMC41ICogZm92eSAqIERFR1JFRVNfVE9fUkFESUFOUztcbiAgdmFyIGZvY2FsRGlzdGFuY2UgPSBmb3Z5VG9BbHRpdHVkZShmb3Z5KTtcbiAgdmFyIHBpdGNoUmFkaWFucyA9IHBpdGNoICogREVHUkVFU19UT19SQURJQU5TO1xuICB2YXIgdG9wSGFsZlN1cmZhY2VEaXN0YW5jZSA9IE1hdGguc2luKGhhbGZGb3YpICogZm9jYWxEaXN0YW5jZSAvIE1hdGguc2luKE1hdGgubWluKE1hdGgubWF4KE1hdGguUEkgLyAyIC0gcGl0Y2hSYWRpYW5zIC0gaGFsZkZvdiwgMC4wMSksIE1hdGguUEkgLSAwLjAxKSk7XG4gIHZhciBmYXJaID0gTWF0aC5zaW4ocGl0Y2hSYWRpYW5zKSAqIHRvcEhhbGZTdXJmYWNlRGlzdGFuY2UgKyBmb2NhbERpc3RhbmNlO1xuICByZXR1cm4ge1xuICAgIGZvdjogMiAqIGhhbGZGb3YsXG4gICAgYXNwZWN0OiB3aWR0aCAvIGhlaWdodCxcbiAgICBmb2NhbERpc3RhbmNlOiBmb2NhbERpc3RhbmNlLFxuICAgIG5lYXI6IG5lYXJaTXVsdGlwbGllcixcbiAgICBmYXI6IGZhclogKiBmYXJaTXVsdGlwbGllclxuICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFByb2plY3Rpb25NYXRyaXgoX3JlZjkpIHtcbiAgdmFyIHdpZHRoID0gX3JlZjkud2lkdGgsXG4gICAgICBoZWlnaHQgPSBfcmVmOS5oZWlnaHQsXG4gICAgICBwaXRjaCA9IF9yZWY5LnBpdGNoLFxuICAgICAgYWx0aXR1ZGUgPSBfcmVmOS5hbHRpdHVkZSxcbiAgICAgIGZvdnkgPSBfcmVmOS5mb3Z5LFxuICAgICAgbmVhclpNdWx0aXBsaWVyID0gX3JlZjkubmVhclpNdWx0aXBsaWVyLFxuICAgICAgZmFyWk11bHRpcGxpZXIgPSBfcmVmOS5mYXJaTXVsdGlwbGllcjtcblxuICB2YXIgX2dldFByb2plY3Rpb25QYXJhbWV0ID0gZ2V0UHJvamVjdGlvblBhcmFtZXRlcnMoe1xuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICBhbHRpdHVkZTogYWx0aXR1ZGUsXG4gICAgZm92eTogZm92eSxcbiAgICBwaXRjaDogcGl0Y2gsXG4gICAgbmVhclpNdWx0aXBsaWVyOiBuZWFyWk11bHRpcGxpZXIsXG4gICAgZmFyWk11bHRpcGxpZXI6IGZhclpNdWx0aXBsaWVyXG4gIH0pLFxuICAgICAgZm92ID0gX2dldFByb2plY3Rpb25QYXJhbWV0LmZvdixcbiAgICAgIGFzcGVjdCA9IF9nZXRQcm9qZWN0aW9uUGFyYW1ldC5hc3BlY3QsXG4gICAgICBuZWFyID0gX2dldFByb2plY3Rpb25QYXJhbWV0Lm5lYXIsXG4gICAgICBmYXIgPSBfZ2V0UHJvamVjdGlvblBhcmFtZXQuZmFyO1xuXG4gIHZhciBwcm9qZWN0aW9uTWF0cml4ID0gbWF0NC5wZXJzcGVjdGl2ZShbXSwgZm92LCBhc3BlY3QsIG5lYXIsIGZhcik7XG4gIHJldHVybiBwcm9qZWN0aW9uTWF0cml4O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGFsdGl0dWRlVG9Gb3Z5KGFsdGl0dWRlKSB7XG4gIHJldHVybiAyICogTWF0aC5hdGFuKDAuNSAvIGFsdGl0dWRlKSAqIFJBRElBTlNfVE9fREVHUkVFUztcbn1cbmV4cG9ydCBmdW5jdGlvbiBmb3Z5VG9BbHRpdHVkZShmb3Z5KSB7XG4gIHJldHVybiAwLjUgLyBNYXRoLnRhbigwLjUgKiBmb3Z5ICogREVHUkVFU19UT19SQURJQU5TKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB3b3JsZFRvUGl4ZWxzKHh5eiwgcGl4ZWxQcm9qZWN0aW9uTWF0cml4KSB7XG4gIHZhciBfeHl6MiA9IF9zbGljZWRUb0FycmF5KHh5eiwgMyksXG4gICAgICB4ID0gX3h5ejJbMF0sXG4gICAgICB5ID0gX3h5ejJbMV0sXG4gICAgICBfeHl6MiQgPSBfeHl6MlsyXSxcbiAgICAgIHogPSBfeHl6MiQgPT09IHZvaWQgMCA/IDAgOiBfeHl6MiQ7XG5cbiAgYXNzZXJ0KE51bWJlci5pc0Zpbml0ZSh4KSAmJiBOdW1iZXIuaXNGaW5pdGUoeSkgJiYgTnVtYmVyLmlzRmluaXRlKHopKTtcbiAgcmV0dXJuIHRyYW5zZm9ybVZlY3RvcihwaXhlbFByb2plY3Rpb25NYXRyaXgsIFt4LCB5LCB6LCAxXSk7XG59XG5leHBvcnQgZnVuY3Rpb24gcGl4ZWxzVG9Xb3JsZCh4eXosIHBpeGVsVW5wcm9qZWN0aW9uTWF0cml4KSB7XG4gIHZhciB0YXJnZXRaID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiAwO1xuXG4gIHZhciBfeHl6MyA9IF9zbGljZWRUb0FycmF5KHh5eiwgMyksXG4gICAgICB4ID0gX3h5ejNbMF0sXG4gICAgICB5ID0gX3h5ejNbMV0sXG4gICAgICB6ID0gX3h5ejNbMl07XG5cbiAgYXNzZXJ0KE51bWJlci5pc0Zpbml0ZSh4KSAmJiBOdW1iZXIuaXNGaW5pdGUoeSksICdpbnZhbGlkIHBpeGVsIGNvb3JkaW5hdGUnKTtcblxuICBpZiAoTnVtYmVyLmlzRmluaXRlKHopKSB7XG4gICAgdmFyIGNvb3JkID0gdHJhbnNmb3JtVmVjdG9yKHBpeGVsVW5wcm9qZWN0aW9uTWF0cml4LCBbeCwgeSwgeiwgMV0pO1xuICAgIHJldHVybiBjb29yZDtcbiAgfVxuXG4gIHZhciBjb29yZDAgPSB0cmFuc2Zvcm1WZWN0b3IocGl4ZWxVbnByb2plY3Rpb25NYXRyaXgsIFt4LCB5LCAwLCAxXSk7XG4gIHZhciBjb29yZDEgPSB0cmFuc2Zvcm1WZWN0b3IocGl4ZWxVbnByb2plY3Rpb25NYXRyaXgsIFt4LCB5LCAxLCAxXSk7XG4gIHZhciB6MCA9IGNvb3JkMFsyXTtcbiAgdmFyIHoxID0gY29vcmQxWzJdO1xuICB2YXIgdCA9IHowID09PSB6MSA/IDAgOiAoKHRhcmdldFogfHwgMCkgLSB6MCkgLyAoejEgLSB6MCk7XG4gIHJldHVybiB2ZWMyLmxlcnAoW10sIGNvb3JkMCwgY29vcmQxLCB0KTtcbn0iLCJpbXBvcnQgX3NsaWNlZFRvQXJyYXkgZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL2p1c3RpY2U0MC10b29sL2p1c3RpY2U0MC10b29sL2NsaWVudC9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheVwiO1xuaW1wb3J0IFdlYk1lcmNhdG9yVmlld3BvcnQgZnJvbSAnLi93ZWItbWVyY2F0b3Itdmlld3BvcnQnO1xuaW1wb3J0IGFzc2VydCBmcm9tICcuL2Fzc2VydCc7XG5pbXBvcnQgeyBsb2cyIH0gZnJvbSAnLi9tYXRoLXV0aWxzJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZpdEJvdW5kcyhfcmVmKSB7XG4gIHZhciB3aWR0aCA9IF9yZWYud2lkdGgsXG4gICAgICBoZWlnaHQgPSBfcmVmLmhlaWdodCxcbiAgICAgIGJvdW5kcyA9IF9yZWYuYm91bmRzLFxuICAgICAgX3JlZiRtaW5FeHRlbnQgPSBfcmVmLm1pbkV4dGVudCxcbiAgICAgIG1pbkV4dGVudCA9IF9yZWYkbWluRXh0ZW50ID09PSB2b2lkIDAgPyAwIDogX3JlZiRtaW5FeHRlbnQsXG4gICAgICBfcmVmJG1heFpvb20gPSBfcmVmLm1heFpvb20sXG4gICAgICBtYXhab29tID0gX3JlZiRtYXhab29tID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkbWF4Wm9vbSxcbiAgICAgIF9yZWYkcGFkZGluZyA9IF9yZWYucGFkZGluZyxcbiAgICAgIHBhZGRpbmcgPSBfcmVmJHBhZGRpbmcgPT09IHZvaWQgMCA/IDAgOiBfcmVmJHBhZGRpbmcsXG4gICAgICBfcmVmJG9mZnNldCA9IF9yZWYub2Zmc2V0LFxuICAgICAgb2Zmc2V0ID0gX3JlZiRvZmZzZXQgPT09IHZvaWQgMCA/IFswLCAwXSA6IF9yZWYkb2Zmc2V0O1xuXG4gIHZhciBfYm91bmRzID0gX3NsaWNlZFRvQXJyYXkoYm91bmRzLCAyKSxcbiAgICAgIF9ib3VuZHMkID0gX3NsaWNlZFRvQXJyYXkoX2JvdW5kc1swXSwgMiksXG4gICAgICB3ZXN0ID0gX2JvdW5kcyRbMF0sXG4gICAgICBzb3V0aCA9IF9ib3VuZHMkWzFdLFxuICAgICAgX2JvdW5kcyQyID0gX3NsaWNlZFRvQXJyYXkoX2JvdW5kc1sxXSwgMiksXG4gICAgICBlYXN0ID0gX2JvdW5kcyQyWzBdLFxuICAgICAgbm9ydGggPSBfYm91bmRzJDJbMV07XG5cbiAgaWYgKE51bWJlci5pc0Zpbml0ZShwYWRkaW5nKSkge1xuICAgIHZhciBwID0gcGFkZGluZztcbiAgICBwYWRkaW5nID0ge1xuICAgICAgdG9wOiBwLFxuICAgICAgYm90dG9tOiBwLFxuICAgICAgbGVmdDogcCxcbiAgICAgIHJpZ2h0OiBwXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBhc3NlcnQoTnVtYmVyLmlzRmluaXRlKHBhZGRpbmcudG9wKSAmJiBOdW1iZXIuaXNGaW5pdGUocGFkZGluZy5ib3R0b20pICYmIE51bWJlci5pc0Zpbml0ZShwYWRkaW5nLmxlZnQpICYmIE51bWJlci5pc0Zpbml0ZShwYWRkaW5nLnJpZ2h0KSk7XG4gIH1cblxuICB2YXIgdmlld3BvcnQgPSBuZXcgV2ViTWVyY2F0b3JWaWV3cG9ydCh7XG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0LFxuICAgIGxvbmdpdHVkZTogMCxcbiAgICBsYXRpdHVkZTogMCxcbiAgICB6b29tOiAwXG4gIH0pO1xuICB2YXIgbncgPSB2aWV3cG9ydC5wcm9qZWN0KFt3ZXN0LCBub3J0aF0pO1xuICB2YXIgc2UgPSB2aWV3cG9ydC5wcm9qZWN0KFtlYXN0LCBzb3V0aF0pO1xuICB2YXIgc2l6ZSA9IFtNYXRoLm1heChNYXRoLmFicyhzZVswXSAtIG53WzBdKSwgbWluRXh0ZW50KSwgTWF0aC5tYXgoTWF0aC5hYnMoc2VbMV0gLSBud1sxXSksIG1pbkV4dGVudCldO1xuICB2YXIgdGFyZ2V0U2l6ZSA9IFt3aWR0aCAtIHBhZGRpbmcubGVmdCAtIHBhZGRpbmcucmlnaHQgLSBNYXRoLmFicyhvZmZzZXRbMF0pICogMiwgaGVpZ2h0IC0gcGFkZGluZy50b3AgLSBwYWRkaW5nLmJvdHRvbSAtIE1hdGguYWJzKG9mZnNldFsxXSkgKiAyXTtcbiAgYXNzZXJ0KHRhcmdldFNpemVbMF0gPiAwICYmIHRhcmdldFNpemVbMV0gPiAwKTtcbiAgdmFyIHNjYWxlWCA9IHRhcmdldFNpemVbMF0gLyBzaXplWzBdO1xuICB2YXIgc2NhbGVZID0gdGFyZ2V0U2l6ZVsxXSAvIHNpemVbMV07XG4gIHZhciBvZmZzZXRYID0gKHBhZGRpbmcucmlnaHQgLSBwYWRkaW5nLmxlZnQpIC8gMiAvIHNjYWxlWDtcbiAgdmFyIG9mZnNldFkgPSAocGFkZGluZy5ib3R0b20gLSBwYWRkaW5nLnRvcCkgLyAyIC8gc2NhbGVZO1xuICB2YXIgY2VudGVyID0gWyhzZVswXSArIG53WzBdKSAvIDIgKyBvZmZzZXRYLCAoc2VbMV0gKyBud1sxXSkgLyAyICsgb2Zmc2V0WV07XG4gIHZhciBjZW50ZXJMbmdMYXQgPSB2aWV3cG9ydC51bnByb2plY3QoY2VudGVyKTtcbiAgdmFyIHpvb20gPSBNYXRoLm1pbihtYXhab29tLCB2aWV3cG9ydC56b29tICsgbG9nMihNYXRoLmFicyhNYXRoLm1pbihzY2FsZVgsIHNjYWxlWSkpKSk7XG4gIGFzc2VydChOdW1iZXIuaXNGaW5pdGUoem9vbSkpO1xuICByZXR1cm4ge1xuICAgIGxvbmdpdHVkZTogY2VudGVyTG5nTGF0WzBdLFxuICAgIGxhdGl0dWRlOiBjZW50ZXJMbmdMYXRbMV0sXG4gICAgem9vbTogem9vbVxuICB9O1xufSIsImltcG9ydCB7IHdvcmxkVG9MbmdMYXQgfSBmcm9tICcuL3dlYi1tZXJjYXRvci11dGlscyc7XG5pbXBvcnQgKiBhcyB2ZWMyIGZyb20gJ2dsLW1hdHJpeC92ZWMyJztcbmltcG9ydCB7IHRyYW5zZm9ybVZlY3RvciB9IGZyb20gJy4vbWF0aC11dGlscyc7XG52YXIgREVHUkVFU19UT19SQURJQU5TID0gTWF0aC5QSSAvIDE4MDtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEJvdW5kcyh2aWV3cG9ydCkge1xuICB2YXIgeiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogMDtcbiAgdmFyIHdpZHRoID0gdmlld3BvcnQud2lkdGgsXG4gICAgICBoZWlnaHQgPSB2aWV3cG9ydC5oZWlnaHQsXG4gICAgICB1bnByb2plY3QgPSB2aWV3cG9ydC51bnByb2plY3Q7XG4gIHZhciB1bnByb2plY3RPcHMgPSB7XG4gICAgdGFyZ2V0WjogelxuICB9O1xuICB2YXIgYm90dG9tTGVmdCA9IHVucHJvamVjdChbMCwgaGVpZ2h0XSwgdW5wcm9qZWN0T3BzKTtcbiAgdmFyIGJvdHRvbVJpZ2h0ID0gdW5wcm9qZWN0KFt3aWR0aCwgaGVpZ2h0XSwgdW5wcm9qZWN0T3BzKTtcbiAgdmFyIHRvcExlZnQ7XG4gIHZhciB0b3BSaWdodDtcbiAgdmFyIGhhbGZGb3YgPSB2aWV3cG9ydC5mb3Z5ID8gMC41ICogdmlld3BvcnQuZm92eSAqIERFR1JFRVNfVE9fUkFESUFOUyA6IE1hdGguYXRhbigwLjUgLyB2aWV3cG9ydC5hbHRpdHVkZSk7XG4gIHZhciBhbmdsZVRvR3JvdW5kID0gKDkwIC0gdmlld3BvcnQucGl0Y2gpICogREVHUkVFU19UT19SQURJQU5TO1xuXG4gIGlmIChoYWxmRm92ID4gYW5nbGVUb0dyb3VuZCAtIDAuMDEpIHtcbiAgICB0b3BMZWZ0ID0gdW5wcm9qZWN0T25GYXJQbGFuZSh2aWV3cG9ydCwgMCwgeik7XG4gICAgdG9wUmlnaHQgPSB1bnByb2plY3RPbkZhclBsYW5lKHZpZXdwb3J0LCB3aWR0aCwgeik7XG4gIH0gZWxzZSB7XG4gICAgdG9wTGVmdCA9IHVucHJvamVjdChbMCwgMF0sIHVucHJvamVjdE9wcyk7XG4gICAgdG9wUmlnaHQgPSB1bnByb2plY3QoW3dpZHRoLCAwXSwgdW5wcm9qZWN0T3BzKTtcbiAgfVxuXG4gIHJldHVybiBbYm90dG9tTGVmdCwgYm90dG9tUmlnaHQsIHRvcFJpZ2h0LCB0b3BMZWZ0XTtcbn1cblxuZnVuY3Rpb24gdW5wcm9qZWN0T25GYXJQbGFuZSh2aWV3cG9ydCwgeCwgdGFyZ2V0Wikge1xuICB2YXIgcGl4ZWxVbnByb2plY3Rpb25NYXRyaXggPSB2aWV3cG9ydC5waXhlbFVucHJvamVjdGlvbk1hdHJpeDtcbiAgdmFyIGNvb3JkMCA9IHRyYW5zZm9ybVZlY3RvcihwaXhlbFVucHJvamVjdGlvbk1hdHJpeCwgW3gsIDAsIDEsIDFdKTtcbiAgdmFyIGNvb3JkMSA9IHRyYW5zZm9ybVZlY3RvcihwaXhlbFVucHJvamVjdGlvbk1hdHJpeCwgW3gsIHZpZXdwb3J0LmhlaWdodCwgMSwgMV0pO1xuICB2YXIgeiA9IHRhcmdldFogKiB2aWV3cG9ydC5kaXN0YW5jZVNjYWxlcy51bml0c1Blck1ldGVyWzJdO1xuICB2YXIgdCA9ICh6IC0gY29vcmQwWzJdKSAvIChjb29yZDFbMl0gLSBjb29yZDBbMl0pO1xuICB2YXIgY29vcmQgPSB2ZWMyLmxlcnAoW10sIGNvb3JkMCwgY29vcmQxLCB0KTtcbiAgdmFyIHJlc3VsdCA9IHdvcmxkVG9MbmdMYXQoY29vcmQpO1xuICByZXN1bHRbMl0gPSB0YXJnZXRaO1xuICByZXR1cm4gcmVzdWx0O1xufSIsImltcG9ydCBfdG9Db25zdW1hYmxlQXJyYXkgZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL2p1c3RpY2U0MC10b29sL2p1c3RpY2U0MC10b29sL2NsaWVudC9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Db25zdW1hYmxlQXJyYXlcIjtcbmltcG9ydCBfc2xpY2VkVG9BcnJheSBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvanVzdGljZTQwLXRvb2wvanVzdGljZTQwLXRvb2wvY2xpZW50L25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zbGljZWRUb0FycmF5XCI7XG5pbXBvcnQgX2NsYXNzQ2FsbENoZWNrIGZyb20gXCIvaG9tZS9ydW5uZXIvd29yay9qdXN0aWNlNDAtdG9vbC9qdXN0aWNlNDAtdG9vbC9jbGllbnQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NsYXNzQ2FsbENoZWNrXCI7XG5pbXBvcnQgX2NyZWF0ZUNsYXNzIGZyb20gXCIvaG9tZS9ydW5uZXIvd29yay9qdXN0aWNlNDAtdG9vbC9qdXN0aWNlNDAtdG9vbC9jbGllbnQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NyZWF0ZUNsYXNzXCI7XG5pbXBvcnQgeyBjcmVhdGVNYXQ0IH0gZnJvbSAnLi9tYXRoLXV0aWxzJztcbmltcG9ydCB7IHpvb21Ub1NjYWxlLCBwaXhlbHNUb1dvcmxkLCBsbmdMYXRUb1dvcmxkLCB3b3JsZFRvTG5nTGF0LCB3b3JsZFRvUGl4ZWxzLCBhbHRpdHVkZVRvRm92eSwgZm92eVRvQWx0aXR1ZGUsIERFRkFVTFRfQUxUSVRVREUsIGdldFByb2plY3Rpb25NYXRyaXgsIGdldERpc3RhbmNlU2NhbGVzLCBnZXRWaWV3TWF0cml4IH0gZnJvbSAnLi93ZWItbWVyY2F0b3ItdXRpbHMnO1xuaW1wb3J0IF9maXRCb3VuZHMgZnJvbSAnLi9maXQtYm91bmRzJztcbmltcG9ydCBnZXRCb3VuZHMgZnJvbSAnLi9nZXQtYm91bmRzJztcbmltcG9ydCAqIGFzIG1hdDQgZnJvbSAnZ2wtbWF0cml4L21hdDQnO1xuaW1wb3J0ICogYXMgdmVjMiBmcm9tICdnbC1tYXRyaXgvdmVjMic7XG5pbXBvcnQgKiBhcyB2ZWMzIGZyb20gJ2dsLW1hdHJpeC92ZWMzJztcblxudmFyIFdlYk1lcmNhdG9yVmlld3BvcnQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBXZWJNZXJjYXRvclZpZXdwb3J0KCkge1xuICAgIHZhciBfcmVmID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7XG4gICAgICB3aWR0aDogMSxcbiAgICAgIGhlaWdodDogMVxuICAgIH0sXG4gICAgICAgIHdpZHRoID0gX3JlZi53aWR0aCxcbiAgICAgICAgaGVpZ2h0ID0gX3JlZi5oZWlnaHQsXG4gICAgICAgIF9yZWYkbGF0aXR1ZGUgPSBfcmVmLmxhdGl0dWRlLFxuICAgICAgICBsYXRpdHVkZSA9IF9yZWYkbGF0aXR1ZGUgPT09IHZvaWQgMCA/IDAgOiBfcmVmJGxhdGl0dWRlLFxuICAgICAgICBfcmVmJGxvbmdpdHVkZSA9IF9yZWYubG9uZ2l0dWRlLFxuICAgICAgICBsb25naXR1ZGUgPSBfcmVmJGxvbmdpdHVkZSA9PT0gdm9pZCAwID8gMCA6IF9yZWYkbG9uZ2l0dWRlLFxuICAgICAgICBfcmVmJHpvb20gPSBfcmVmLnpvb20sXG4gICAgICAgIHpvb20gPSBfcmVmJHpvb20gPT09IHZvaWQgMCA/IDAgOiBfcmVmJHpvb20sXG4gICAgICAgIF9yZWYkcGl0Y2ggPSBfcmVmLnBpdGNoLFxuICAgICAgICBwaXRjaCA9IF9yZWYkcGl0Y2ggPT09IHZvaWQgMCA/IDAgOiBfcmVmJHBpdGNoLFxuICAgICAgICBfcmVmJGJlYXJpbmcgPSBfcmVmLmJlYXJpbmcsXG4gICAgICAgIGJlYXJpbmcgPSBfcmVmJGJlYXJpbmcgPT09IHZvaWQgMCA/IDAgOiBfcmVmJGJlYXJpbmcsXG4gICAgICAgIF9yZWYkYWx0aXR1ZGUgPSBfcmVmLmFsdGl0dWRlLFxuICAgICAgICBhbHRpdHVkZSA9IF9yZWYkYWx0aXR1ZGUgPT09IHZvaWQgMCA/IG51bGwgOiBfcmVmJGFsdGl0dWRlLFxuICAgICAgICBfcmVmJGZvdnkgPSBfcmVmLmZvdnksXG4gICAgICAgIGZvdnkgPSBfcmVmJGZvdnkgPT09IHZvaWQgMCA/IG51bGwgOiBfcmVmJGZvdnksXG4gICAgICAgIF9yZWYkcG9zaXRpb24gPSBfcmVmLnBvc2l0aW9uLFxuICAgICAgICBwb3NpdGlvbiA9IF9yZWYkcG9zaXRpb24gPT09IHZvaWQgMCA/IG51bGwgOiBfcmVmJHBvc2l0aW9uLFxuICAgICAgICBfcmVmJG5lYXJaTXVsdGlwbGllciA9IF9yZWYubmVhclpNdWx0aXBsaWVyLFxuICAgICAgICBuZWFyWk11bHRpcGxpZXIgPSBfcmVmJG5lYXJaTXVsdGlwbGllciA9PT0gdm9pZCAwID8gMC4wMiA6IF9yZWYkbmVhclpNdWx0aXBsaWVyLFxuICAgICAgICBfcmVmJGZhclpNdWx0aXBsaWVyID0gX3JlZi5mYXJaTXVsdGlwbGllcixcbiAgICAgICAgZmFyWk11bHRpcGxpZXIgPSBfcmVmJGZhclpNdWx0aXBsaWVyID09PSB2b2lkIDAgPyAxLjAxIDogX3JlZiRmYXJaTXVsdGlwbGllcjtcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBXZWJNZXJjYXRvclZpZXdwb3J0KTtcblxuICAgIHdpZHRoID0gd2lkdGggfHwgMTtcbiAgICBoZWlnaHQgPSBoZWlnaHQgfHwgMTtcblxuICAgIGlmIChmb3Z5ID09PSBudWxsICYmIGFsdGl0dWRlID09PSBudWxsKSB7XG4gICAgICBhbHRpdHVkZSA9IERFRkFVTFRfQUxUSVRVREU7XG4gICAgICBmb3Z5ID0gYWx0aXR1ZGVUb0ZvdnkoYWx0aXR1ZGUpO1xuICAgIH0gZWxzZSBpZiAoZm92eSA9PT0gbnVsbCkge1xuICAgICAgZm92eSA9IGFsdGl0dWRlVG9Gb3Z5KGFsdGl0dWRlKTtcbiAgICB9IGVsc2UgaWYgKGFsdGl0dWRlID09PSBudWxsKSB7XG4gICAgICBhbHRpdHVkZSA9IGZvdnlUb0FsdGl0dWRlKGZvdnkpO1xuICAgIH1cblxuICAgIHZhciBzY2FsZSA9IHpvb21Ub1NjYWxlKHpvb20pO1xuICAgIGFsdGl0dWRlID0gTWF0aC5tYXgoMC43NSwgYWx0aXR1ZGUpO1xuICAgIHZhciBkaXN0YW5jZVNjYWxlcyA9IGdldERpc3RhbmNlU2NhbGVzKHtcbiAgICAgIGxvbmdpdHVkZTogbG9uZ2l0dWRlLFxuICAgICAgbGF0aXR1ZGU6IGxhdGl0dWRlXG4gICAgfSk7XG4gICAgdmFyIGNlbnRlciA9IGxuZ0xhdFRvV29ybGQoW2xvbmdpdHVkZSwgbGF0aXR1ZGVdKTtcbiAgICBjZW50ZXJbMl0gPSAwO1xuXG4gICAgaWYgKHBvc2l0aW9uKSB7XG4gICAgICB2ZWMzLmFkZChjZW50ZXIsIGNlbnRlciwgdmVjMy5tdWwoW10sIHBvc2l0aW9uLCBkaXN0YW5jZVNjYWxlcy51bml0c1Blck1ldGVyKSk7XG4gICAgfVxuXG4gICAgdGhpcy5wcm9qZWN0aW9uTWF0cml4ID0gZ2V0UHJvamVjdGlvbk1hdHJpeCh7XG4gICAgICB3aWR0aDogd2lkdGgsXG4gICAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICAgIHBpdGNoOiBwaXRjaCxcbiAgICAgIGZvdnk6IGZvdnksXG4gICAgICBuZWFyWk11bHRpcGxpZXI6IG5lYXJaTXVsdGlwbGllcixcbiAgICAgIGZhclpNdWx0aXBsaWVyOiBmYXJaTXVsdGlwbGllclxuICAgIH0pO1xuICAgIHRoaXMudmlld01hdHJpeCA9IGdldFZpZXdNYXRyaXgoe1xuICAgICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgICBzY2FsZTogc2NhbGUsXG4gICAgICBjZW50ZXI6IGNlbnRlcixcbiAgICAgIHBpdGNoOiBwaXRjaCxcbiAgICAgIGJlYXJpbmc6IGJlYXJpbmcsXG4gICAgICBhbHRpdHVkZTogYWx0aXR1ZGVcbiAgICB9KTtcbiAgICB0aGlzLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgdGhpcy5zY2FsZSA9IHNjYWxlO1xuICAgIHRoaXMubGF0aXR1ZGUgPSBsYXRpdHVkZTtcbiAgICB0aGlzLmxvbmdpdHVkZSA9IGxvbmdpdHVkZTtcbiAgICB0aGlzLnpvb20gPSB6b29tO1xuICAgIHRoaXMucGl0Y2ggPSBwaXRjaDtcbiAgICB0aGlzLmJlYXJpbmcgPSBiZWFyaW5nO1xuICAgIHRoaXMuYWx0aXR1ZGUgPSBhbHRpdHVkZTtcbiAgICB0aGlzLmZvdnkgPSBmb3Z5O1xuICAgIHRoaXMuY2VudGVyID0gY2VudGVyO1xuICAgIHRoaXMubWV0ZXJPZmZzZXQgPSBwb3NpdGlvbiB8fCBbMCwgMCwgMF07XG4gICAgdGhpcy5kaXN0YW5jZVNjYWxlcyA9IGRpc3RhbmNlU2NhbGVzO1xuXG4gICAgdGhpcy5faW5pdE1hdHJpY2VzKCk7XG5cbiAgICB0aGlzLmVxdWFscyA9IHRoaXMuZXF1YWxzLmJpbmQodGhpcyk7XG4gICAgdGhpcy5wcm9qZWN0ID0gdGhpcy5wcm9qZWN0LmJpbmQodGhpcyk7XG4gICAgdGhpcy51bnByb2plY3QgPSB0aGlzLnVucHJvamVjdC5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvamVjdFBvc2l0aW9uID0gdGhpcy5wcm9qZWN0UG9zaXRpb24uYmluZCh0aGlzKTtcbiAgICB0aGlzLnVucHJvamVjdFBvc2l0aW9uID0gdGhpcy51bnByb2plY3RQb3NpdGlvbi5iaW5kKHRoaXMpO1xuICAgIE9iamVjdC5mcmVlemUodGhpcyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoV2ViTWVyY2F0b3JWaWV3cG9ydCwgW3tcbiAgICBrZXk6IFwiX2luaXRNYXRyaWNlc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfaW5pdE1hdHJpY2VzKCkge1xuICAgICAgdmFyIHdpZHRoID0gdGhpcy53aWR0aCxcbiAgICAgICAgICBoZWlnaHQgPSB0aGlzLmhlaWdodCxcbiAgICAgICAgICBwcm9qZWN0aW9uTWF0cml4ID0gdGhpcy5wcm9qZWN0aW9uTWF0cml4LFxuICAgICAgICAgIHZpZXdNYXRyaXggPSB0aGlzLnZpZXdNYXRyaXg7XG4gICAgICB2YXIgdnBtID0gY3JlYXRlTWF0NCgpO1xuICAgICAgbWF0NC5tdWx0aXBseSh2cG0sIHZwbSwgcHJvamVjdGlvbk1hdHJpeCk7XG4gICAgICBtYXQ0Lm11bHRpcGx5KHZwbSwgdnBtLCB2aWV3TWF0cml4KTtcbiAgICAgIHRoaXMudmlld1Byb2plY3Rpb25NYXRyaXggPSB2cG07XG4gICAgICB2YXIgbSA9IGNyZWF0ZU1hdDQoKTtcbiAgICAgIG1hdDQuc2NhbGUobSwgbSwgW3dpZHRoIC8gMiwgLWhlaWdodCAvIDIsIDFdKTtcbiAgICAgIG1hdDQudHJhbnNsYXRlKG0sIG0sIFsxLCAtMSwgMF0pO1xuICAgICAgbWF0NC5tdWx0aXBseShtLCBtLCB2cG0pO1xuICAgICAgdmFyIG1JbnZlcnNlID0gbWF0NC5pbnZlcnQoY3JlYXRlTWF0NCgpLCBtKTtcblxuICAgICAgaWYgKCFtSW52ZXJzZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BpeGVsIHByb2plY3QgbWF0cml4IG5vdCBpbnZlcnRpYmxlJyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucGl4ZWxQcm9qZWN0aW9uTWF0cml4ID0gbTtcbiAgICAgIHRoaXMucGl4ZWxVbnByb2plY3Rpb25NYXRyaXggPSBtSW52ZXJzZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZXF1YWxzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGVxdWFscyh2aWV3cG9ydCkge1xuICAgICAgaWYgKCEodmlld3BvcnQgaW5zdGFuY2VvZiBXZWJNZXJjYXRvclZpZXdwb3J0KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB2aWV3cG9ydC53aWR0aCA9PT0gdGhpcy53aWR0aCAmJiB2aWV3cG9ydC5oZWlnaHQgPT09IHRoaXMuaGVpZ2h0ICYmIG1hdDQuZXF1YWxzKHZpZXdwb3J0LnByb2plY3Rpb25NYXRyaXgsIHRoaXMucHJvamVjdGlvbk1hdHJpeCkgJiYgbWF0NC5lcXVhbHModmlld3BvcnQudmlld01hdHJpeCwgdGhpcy52aWV3TWF0cml4KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicHJvamVjdFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwcm9qZWN0KHh5eikge1xuICAgICAgdmFyIF9yZWYyID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSxcbiAgICAgICAgICBfcmVmMiR0b3BMZWZ0ID0gX3JlZjIudG9wTGVmdCxcbiAgICAgICAgICB0b3BMZWZ0ID0gX3JlZjIkdG9wTGVmdCA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYyJHRvcExlZnQ7XG5cbiAgICAgIHZhciB3b3JsZFBvc2l0aW9uID0gdGhpcy5wcm9qZWN0UG9zaXRpb24oeHl6KTtcbiAgICAgIHZhciBjb29yZCA9IHdvcmxkVG9QaXhlbHMod29ybGRQb3NpdGlvbiwgdGhpcy5waXhlbFByb2plY3Rpb25NYXRyaXgpO1xuXG4gICAgICB2YXIgX2Nvb3JkID0gX3NsaWNlZFRvQXJyYXkoY29vcmQsIDIpLFxuICAgICAgICAgIHggPSBfY29vcmRbMF0sXG4gICAgICAgICAgeSA9IF9jb29yZFsxXTtcblxuICAgICAgdmFyIHkyID0gdG9wTGVmdCA/IHkgOiB0aGlzLmhlaWdodCAtIHk7XG4gICAgICByZXR1cm4geHl6Lmxlbmd0aCA9PT0gMiA/IFt4LCB5Ml0gOiBbeCwgeTIsIGNvb3JkWzJdXTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwidW5wcm9qZWN0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHVucHJvamVjdCh4eXopIHtcbiAgICAgIHZhciBfcmVmMyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge30sXG4gICAgICAgICAgX3JlZjMkdG9wTGVmdCA9IF9yZWYzLnRvcExlZnQsXG4gICAgICAgICAgdG9wTGVmdCA9IF9yZWYzJHRvcExlZnQgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmMyR0b3BMZWZ0LFxuICAgICAgICAgIF9yZWYzJHRhcmdldFogPSBfcmVmMy50YXJnZXRaLFxuICAgICAgICAgIHRhcmdldFogPSBfcmVmMyR0YXJnZXRaID09PSB2b2lkIDAgPyB1bmRlZmluZWQgOiBfcmVmMyR0YXJnZXRaO1xuXG4gICAgICB2YXIgX3h5eiA9IF9zbGljZWRUb0FycmF5KHh5eiwgMyksXG4gICAgICAgICAgeCA9IF94eXpbMF0sXG4gICAgICAgICAgeSA9IF94eXpbMV0sXG4gICAgICAgICAgeiA9IF94eXpbMl07XG5cbiAgICAgIHZhciB5MiA9IHRvcExlZnQgPyB5IDogdGhpcy5oZWlnaHQgLSB5O1xuICAgICAgdmFyIHRhcmdldFpXb3JsZCA9IHRhcmdldFogJiYgdGFyZ2V0WiAqIHRoaXMuZGlzdGFuY2VTY2FsZXMudW5pdHNQZXJNZXRlclsyXTtcbiAgICAgIHZhciBjb29yZCA9IHBpeGVsc1RvV29ybGQoW3gsIHkyLCB6XSwgdGhpcy5waXhlbFVucHJvamVjdGlvbk1hdHJpeCwgdGFyZ2V0WldvcmxkKTtcblxuICAgICAgdmFyIF90aGlzJHVucHJvamVjdFBvc2l0aSA9IHRoaXMudW5wcm9qZWN0UG9zaXRpb24oY29vcmQpLFxuICAgICAgICAgIF90aGlzJHVucHJvamVjdFBvc2l0aTIgPSBfc2xpY2VkVG9BcnJheShfdGhpcyR1bnByb2plY3RQb3NpdGksIDMpLFxuICAgICAgICAgIFggPSBfdGhpcyR1bnByb2plY3RQb3NpdGkyWzBdLFxuICAgICAgICAgIFkgPSBfdGhpcyR1bnByb2plY3RQb3NpdGkyWzFdLFxuICAgICAgICAgIFogPSBfdGhpcyR1bnByb2plY3RQb3NpdGkyWzJdO1xuXG4gICAgICBpZiAoTnVtYmVyLmlzRmluaXRlKHopKSB7XG4gICAgICAgIHJldHVybiBbWCwgWSwgWl07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBOdW1iZXIuaXNGaW5pdGUodGFyZ2V0WikgPyBbWCwgWSwgdGFyZ2V0Wl0gOiBbWCwgWV07XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInByb2plY3RQb3NpdGlvblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwcm9qZWN0UG9zaXRpb24oeHl6KSB7XG4gICAgICB2YXIgX2xuZ0xhdFRvV29ybGQgPSBsbmdMYXRUb1dvcmxkKHh5eiksXG4gICAgICAgICAgX2xuZ0xhdFRvV29ybGQyID0gX3NsaWNlZFRvQXJyYXkoX2xuZ0xhdFRvV29ybGQsIDIpLFxuICAgICAgICAgIFggPSBfbG5nTGF0VG9Xb3JsZDJbMF0sXG4gICAgICAgICAgWSA9IF9sbmdMYXRUb1dvcmxkMlsxXTtcblxuICAgICAgdmFyIFogPSAoeHl6WzJdIHx8IDApICogdGhpcy5kaXN0YW5jZVNjYWxlcy51bml0c1Blck1ldGVyWzJdO1xuICAgICAgcmV0dXJuIFtYLCBZLCBaXTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwidW5wcm9qZWN0UG9zaXRpb25cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gdW5wcm9qZWN0UG9zaXRpb24oeHl6KSB7XG4gICAgICB2YXIgX3dvcmxkVG9MbmdMYXQgPSB3b3JsZFRvTG5nTGF0KHh5eiksXG4gICAgICAgICAgX3dvcmxkVG9MbmdMYXQyID0gX3NsaWNlZFRvQXJyYXkoX3dvcmxkVG9MbmdMYXQsIDIpLFxuICAgICAgICAgIFggPSBfd29ybGRUb0xuZ0xhdDJbMF0sXG4gICAgICAgICAgWSA9IF93b3JsZFRvTG5nTGF0MlsxXTtcblxuICAgICAgdmFyIFogPSAoeHl6WzJdIHx8IDApICogdGhpcy5kaXN0YW5jZVNjYWxlcy5tZXRlcnNQZXJVbml0WzJdO1xuICAgICAgcmV0dXJuIFtYLCBZLCBaXTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicHJvamVjdEZsYXRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcHJvamVjdEZsYXQobG5nTGF0KSB7XG4gICAgICByZXR1cm4gbG5nTGF0VG9Xb3JsZChsbmdMYXQpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ1bnByb2plY3RGbGF0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHVucHJvamVjdEZsYXQoeHkpIHtcbiAgICAgIHJldHVybiB3b3JsZFRvTG5nTGF0KHh5KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0TWFwQ2VudGVyQnlMbmdMYXRQb3NpdGlvblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRNYXBDZW50ZXJCeUxuZ0xhdFBvc2l0aW9uKF9yZWY0KSB7XG4gICAgICB2YXIgbG5nTGF0ID0gX3JlZjQubG5nTGF0LFxuICAgICAgICAgIHBvcyA9IF9yZWY0LnBvcztcbiAgICAgIHZhciBmcm9tTG9jYXRpb24gPSBwaXhlbHNUb1dvcmxkKHBvcywgdGhpcy5waXhlbFVucHJvamVjdGlvbk1hdHJpeCk7XG4gICAgICB2YXIgdG9Mb2NhdGlvbiA9IGxuZ0xhdFRvV29ybGQobG5nTGF0KTtcbiAgICAgIHZhciB0cmFuc2xhdGUgPSB2ZWMyLmFkZChbXSwgdG9Mb2NhdGlvbiwgdmVjMi5uZWdhdGUoW10sIGZyb21Mb2NhdGlvbikpO1xuICAgICAgdmFyIG5ld0NlbnRlciA9IHZlYzIuYWRkKFtdLCB0aGlzLmNlbnRlciwgdHJhbnNsYXRlKTtcbiAgICAgIHJldHVybiB3b3JsZFRvTG5nTGF0KG5ld0NlbnRlcik7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldExvY2F0aW9uQXRQb2ludFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRMb2NhdGlvbkF0UG9pbnQoX3JlZjUpIHtcbiAgICAgIHZhciBsbmdMYXQgPSBfcmVmNS5sbmdMYXQsXG4gICAgICAgICAgcG9zID0gX3JlZjUucG9zO1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0TWFwQ2VudGVyQnlMbmdMYXRQb3NpdGlvbih7XG4gICAgICAgIGxuZ0xhdDogbG5nTGF0LFxuICAgICAgICBwb3M6IHBvc1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImZpdEJvdW5kc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBmaXRCb3VuZHMoYm91bmRzKSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgICB2YXIgd2lkdGggPSB0aGlzLndpZHRoLFxuICAgICAgICAgIGhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuXG4gICAgICB2YXIgX2ZpdEJvdW5kczIgPSBfZml0Qm91bmRzKE9iamVjdC5hc3NpZ24oe1xuICAgICAgICB3aWR0aDogd2lkdGgsXG4gICAgICAgIGhlaWdodDogaGVpZ2h0LFxuICAgICAgICBib3VuZHM6IGJvdW5kc1xuICAgICAgfSwgb3B0aW9ucykpLFxuICAgICAgICAgIGxvbmdpdHVkZSA9IF9maXRCb3VuZHMyLmxvbmdpdHVkZSxcbiAgICAgICAgICBsYXRpdHVkZSA9IF9maXRCb3VuZHMyLmxhdGl0dWRlLFxuICAgICAgICAgIHpvb20gPSBfZml0Qm91bmRzMi56b29tO1xuXG4gICAgICByZXR1cm4gbmV3IFdlYk1lcmNhdG9yVmlld3BvcnQoe1xuICAgICAgICB3aWR0aDogd2lkdGgsXG4gICAgICAgIGhlaWdodDogaGVpZ2h0LFxuICAgICAgICBsb25naXR1ZGU6IGxvbmdpdHVkZSxcbiAgICAgICAgbGF0aXR1ZGU6IGxhdGl0dWRlLFxuICAgICAgICB6b29tOiB6b29tXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0Qm91bmRzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldEJvdW5kcyhvcHRpb25zKSB7XG4gICAgICB2YXIgY29ybmVycyA9IHRoaXMuZ2V0Qm91bmRpbmdSZWdpb24ob3B0aW9ucyk7XG4gICAgICB2YXIgd2VzdCA9IE1hdGgubWluLmFwcGx5KE1hdGgsIF90b0NvbnN1bWFibGVBcnJheShjb3JuZXJzLm1hcChmdW5jdGlvbiAocCkge1xuICAgICAgICByZXR1cm4gcFswXTtcbiAgICAgIH0pKSk7XG4gICAgICB2YXIgZWFzdCA9IE1hdGgubWF4LmFwcGx5KE1hdGgsIF90b0NvbnN1bWFibGVBcnJheShjb3JuZXJzLm1hcChmdW5jdGlvbiAocCkge1xuICAgICAgICByZXR1cm4gcFswXTtcbiAgICAgIH0pKSk7XG4gICAgICB2YXIgc291dGggPSBNYXRoLm1pbi5hcHBseShNYXRoLCBfdG9Db25zdW1hYmxlQXJyYXkoY29ybmVycy5tYXAoZnVuY3Rpb24gKHApIHtcbiAgICAgICAgcmV0dXJuIHBbMV07XG4gICAgICB9KSkpO1xuICAgICAgdmFyIG5vcnRoID0gTWF0aC5tYXguYXBwbHkoTWF0aCwgX3RvQ29uc3VtYWJsZUFycmF5KGNvcm5lcnMubWFwKGZ1bmN0aW9uIChwKSB7XG4gICAgICAgIHJldHVybiBwWzFdO1xuICAgICAgfSkpKTtcbiAgICAgIHJldHVybiBbW3dlc3QsIHNvdXRoXSwgW2Vhc3QsIG5vcnRoXV07XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldEJvdW5kaW5nUmVnaW9uXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldEJvdW5kaW5nUmVnaW9uKCkge1xuICAgICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuICAgICAgcmV0dXJuIGdldEJvdW5kcyh0aGlzLCBvcHRpb25zLnogfHwgMCk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFdlYk1lcmNhdG9yVmlld3BvcnQ7XG59KCk7XG5cbmV4cG9ydCB7IFdlYk1lcmNhdG9yVmlld3BvcnQgYXMgZGVmYXVsdCB9OyIsImltcG9ydCBXZWJNZXJjYXRvclZpZXdwb3J0IGZyb20gJy4vd2ViLW1lcmNhdG9yLXZpZXdwb3J0JztcbmltcG9ydCB7IG1vZCwgbG9nMiB9IGZyb20gJy4vbWF0aC11dGlscyc7XG52YXIgTUFYX0xBVElUVURFID0gODUuMDUxMTM7XG52YXIgTUlOX0xBVElUVURFID0gLTg1LjA1MTEzO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbm9ybWFsaXplVmlld3BvcnRQcm9wcyhfcmVmKSB7XG4gIHZhciB3aWR0aCA9IF9yZWYud2lkdGgsXG4gICAgICBoZWlnaHQgPSBfcmVmLmhlaWdodCxcbiAgICAgIGxvbmdpdHVkZSA9IF9yZWYubG9uZ2l0dWRlLFxuICAgICAgbGF0aXR1ZGUgPSBfcmVmLmxhdGl0dWRlLFxuICAgICAgem9vbSA9IF9yZWYuem9vbSxcbiAgICAgIF9yZWYkcGl0Y2ggPSBfcmVmLnBpdGNoLFxuICAgICAgcGl0Y2ggPSBfcmVmJHBpdGNoID09PSB2b2lkIDAgPyAwIDogX3JlZiRwaXRjaCxcbiAgICAgIF9yZWYkYmVhcmluZyA9IF9yZWYuYmVhcmluZyxcbiAgICAgIGJlYXJpbmcgPSBfcmVmJGJlYXJpbmcgPT09IHZvaWQgMCA/IDAgOiBfcmVmJGJlYXJpbmc7XG5cbiAgaWYgKGxvbmdpdHVkZSA8IC0xODAgfHwgbG9uZ2l0dWRlID4gMTgwKSB7XG4gICAgbG9uZ2l0dWRlID0gbW9kKGxvbmdpdHVkZSArIDE4MCwgMzYwKSAtIDE4MDtcbiAgfVxuXG4gIGlmIChiZWFyaW5nIDwgLTE4MCB8fCBiZWFyaW5nID4gMTgwKSB7XG4gICAgYmVhcmluZyA9IG1vZChiZWFyaW5nICsgMTgwLCAzNjApIC0gMTgwO1xuICB9XG5cbiAgdmFyIGZsYXRWaWV3cG9ydCA9IG5ldyBXZWJNZXJjYXRvclZpZXdwb3J0KHtcbiAgICB3aWR0aDogd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgbG9uZ2l0dWRlOiBsb25naXR1ZGUsXG4gICAgbGF0aXR1ZGU6IGxhdGl0dWRlLFxuICAgIHpvb206IHpvb21cbiAgfSk7XG4gIHZhciB0b3BZID0gZmxhdFZpZXdwb3J0LnByb2plY3QoW2xvbmdpdHVkZSwgTUFYX0xBVElUVURFXSlbMV07XG4gIHZhciBib3R0b21ZID0gZmxhdFZpZXdwb3J0LnByb2plY3QoW2xvbmdpdHVkZSwgTUlOX0xBVElUVURFXSlbMV07XG4gIHZhciBzaGlmdFkgPSAwO1xuXG4gIGlmIChib3R0b21ZIC0gdG9wWSA8IGhlaWdodCkge1xuICAgIHpvb20gKz0gbG9nMihoZWlnaHQgLyAoYm90dG9tWSAtIHRvcFkpKTtcbiAgICBmbGF0Vmlld3BvcnQgPSBuZXcgV2ViTWVyY2F0b3JWaWV3cG9ydCh7XG4gICAgICB3aWR0aDogd2lkdGgsXG4gICAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICAgIGxvbmdpdHVkZTogbG9uZ2l0dWRlLFxuICAgICAgbGF0aXR1ZGU6IGxhdGl0dWRlLFxuICAgICAgem9vbTogem9vbVxuICAgIH0pO1xuICAgIHRvcFkgPSBmbGF0Vmlld3BvcnQucHJvamVjdChbbG9uZ2l0dWRlLCBNQVhfTEFUSVRVREVdKVsxXTtcbiAgICBib3R0b21ZID0gZmxhdFZpZXdwb3J0LnByb2plY3QoW2xvbmdpdHVkZSwgTUlOX0xBVElUVURFXSlbMV07XG4gIH1cblxuICBpZiAodG9wWSA+IDApIHtcbiAgICBzaGlmdFkgPSB0b3BZO1xuICB9IGVsc2UgaWYgKGJvdHRvbVkgPCBoZWlnaHQpIHtcbiAgICBzaGlmdFkgPSBib3R0b21ZIC0gaGVpZ2h0O1xuICB9XG5cbiAgaWYgKHNoaWZ0WSkge1xuICAgIGxhdGl0dWRlID0gZmxhdFZpZXdwb3J0LnVucHJvamVjdChbd2lkdGggLyAyLCBoZWlnaHQgLyAyICsgc2hpZnRZXSlbMV07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICBsb25naXR1ZGU6IGxvbmdpdHVkZSxcbiAgICBsYXRpdHVkZTogbGF0aXR1ZGUsXG4gICAgem9vbTogem9vbSxcbiAgICBwaXRjaDogcGl0Y2gsXG4gICAgYmVhcmluZzogYmVhcmluZ1xuICB9O1xufSIsImZ1bmN0aW9uIF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKG8sIGFsbG93QXJyYXlMaWtlKSB7IHZhciBpdCA9IHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdIHx8IG9bXCJAQGl0ZXJhdG9yXCJdOyBpZiAoIWl0KSB7IGlmIChBcnJheS5pc0FycmF5KG8pIHx8IChpdCA9IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvKSkgfHwgYWxsb3dBcnJheUxpa2UgJiYgbyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHsgaWYgKGl0KSBvID0gaXQ7IHZhciBpID0gMDsgdmFyIEYgPSBmdW5jdGlvbiBGKCkge307IHJldHVybiB7IHM6IEYsIG46IGZ1bmN0aW9uIG4oKSB7IGlmIChpID49IG8ubGVuZ3RoKSByZXR1cm4geyBkb25lOiB0cnVlIH07IHJldHVybiB7IGRvbmU6IGZhbHNlLCB2YWx1ZTogb1tpKytdIH07IH0sIGU6IGZ1bmN0aW9uIGUoX2UpIHsgdGhyb3cgX2U7IH0sIGY6IEYgfTsgfSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH0gdmFyIG5vcm1hbENvbXBsZXRpb24gPSB0cnVlLCBkaWRFcnIgPSBmYWxzZSwgZXJyOyByZXR1cm4geyBzOiBmdW5jdGlvbiBzKCkgeyBpdCA9IGl0LmNhbGwobyk7IH0sIG46IGZ1bmN0aW9uIG4oKSB7IHZhciBzdGVwID0gaXQubmV4dCgpOyBub3JtYWxDb21wbGV0aW9uID0gc3RlcC5kb25lOyByZXR1cm4gc3RlcDsgfSwgZTogZnVuY3Rpb24gZShfZTIpIHsgZGlkRXJyID0gdHJ1ZTsgZXJyID0gX2UyOyB9LCBmOiBmdW5jdGlvbiBmKCkgeyB0cnkgeyBpZiAoIW5vcm1hbENvbXBsZXRpb24gJiYgaXQucmV0dXJuICE9IG51bGwpIGl0LnJldHVybigpOyB9IGZpbmFsbHkgeyBpZiAoZGlkRXJyKSB0aHJvdyBlcnI7IH0gfSB9OyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuaW1wb3J0IHsgbGVycCB9IGZyb20gJy4vbWF0aC11dGlscyc7XG5pbXBvcnQgeyBzY2FsZVRvWm9vbSwgem9vbVRvU2NhbGUsIGxuZ0xhdFRvV29ybGQsIHdvcmxkVG9MbmdMYXQgfSBmcm9tICcuL3dlYi1tZXJjYXRvci11dGlscyc7XG5pbXBvcnQgKiBhcyB2ZWMyIGZyb20gJ2dsLW1hdHJpeC92ZWMyJztcbnZhciBFUFNJTE9OID0gMC4wMTtcbnZhciBWSUVXUE9SVF9UUkFOU0lUSU9OX1BST1BTID0gWydsb25naXR1ZGUnLCAnbGF0aXR1ZGUnLCAnem9vbSddO1xudmFyIERFRkFVTFRfT1BUUyA9IHtcbiAgY3VydmU6IDEuNDE0LFxuICBzcGVlZDogMS4yXG59O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZmx5VG9WaWV3cG9ydChzdGFydFByb3BzLCBlbmRQcm9wcywgdCkge1xuICB2YXIgb3B0cyA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDoge307XG4gIHZhciB2aWV3cG9ydCA9IHt9O1xuXG4gIHZhciBfZ2V0Rmx5VG9UcmFuc2l0aW9uUGEgPSBnZXRGbHlUb1RyYW5zaXRpb25QYXJhbXMoc3RhcnRQcm9wcywgZW5kUHJvcHMsIG9wdHMpLFxuICAgICAgc3RhcnRab29tID0gX2dldEZseVRvVHJhbnNpdGlvblBhLnN0YXJ0Wm9vbSxcbiAgICAgIHN0YXJ0Q2VudGVyWFkgPSBfZ2V0Rmx5VG9UcmFuc2l0aW9uUGEuc3RhcnRDZW50ZXJYWSxcbiAgICAgIHVEZWx0YSA9IF9nZXRGbHlUb1RyYW5zaXRpb25QYS51RGVsdGEsXG4gICAgICB3MCA9IF9nZXRGbHlUb1RyYW5zaXRpb25QYS53MCxcbiAgICAgIHUxID0gX2dldEZseVRvVHJhbnNpdGlvblBhLnUxLFxuICAgICAgUyA9IF9nZXRGbHlUb1RyYW5zaXRpb25QYS5TLFxuICAgICAgcmhvID0gX2dldEZseVRvVHJhbnNpdGlvblBhLnJobyxcbiAgICAgIHJobzIgPSBfZ2V0Rmx5VG9UcmFuc2l0aW9uUGEucmhvMixcbiAgICAgIHIwID0gX2dldEZseVRvVHJhbnNpdGlvblBhLnIwO1xuXG4gIGlmICh1MSA8IEVQU0lMT04pIHtcbiAgICB2YXIgX2l0ZXJhdG9yID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIoVklFV1BPUlRfVFJBTlNJVElPTl9QUk9QUyksXG4gICAgICAgIF9zdGVwO1xuXG4gICAgdHJ5IHtcbiAgICAgIGZvciAoX2l0ZXJhdG9yLnMoKTsgIShfc3RlcCA9IF9pdGVyYXRvci5uKCkpLmRvbmU7KSB7XG4gICAgICAgIHZhciBrZXkgPSBfc3RlcC52YWx1ZTtcbiAgICAgICAgdmFyIHN0YXJ0VmFsdWUgPSBzdGFydFByb3BzW2tleV07XG4gICAgICAgIHZhciBlbmRWYWx1ZSA9IGVuZFByb3BzW2tleV07XG4gICAgICAgIHZpZXdwb3J0W2tleV0gPSBsZXJwKHN0YXJ0VmFsdWUsIGVuZFZhbHVlLCB0KTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIF9pdGVyYXRvci5lKGVycik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIF9pdGVyYXRvci5mKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZpZXdwb3J0O1xuICB9XG5cbiAgdmFyIHMgPSB0ICogUztcbiAgdmFyIHcgPSBNYXRoLmNvc2gocjApIC8gTWF0aC5jb3NoKHIwICsgcmhvICogcyk7XG4gIHZhciB1ID0gdzAgKiAoKE1hdGguY29zaChyMCkgKiBNYXRoLnRhbmgocjAgKyByaG8gKiBzKSAtIE1hdGguc2luaChyMCkpIC8gcmhvMikgLyB1MTtcbiAgdmFyIHNjYWxlSW5jcmVtZW50ID0gMSAvIHc7XG4gIHZhciBuZXdab29tID0gc3RhcnRab29tICsgc2NhbGVUb1pvb20oc2NhbGVJbmNyZW1lbnQpO1xuICB2YXIgbmV3Q2VudGVyV29ybGQgPSB2ZWMyLnNjYWxlKFtdLCB1RGVsdGEsIHUpO1xuICB2ZWMyLmFkZChuZXdDZW50ZXJXb3JsZCwgbmV3Q2VudGVyV29ybGQsIHN0YXJ0Q2VudGVyWFkpO1xuICB2YXIgbmV3Q2VudGVyID0gd29ybGRUb0xuZ0xhdChuZXdDZW50ZXJXb3JsZCk7XG4gIHZpZXdwb3J0LmxvbmdpdHVkZSA9IG5ld0NlbnRlclswXTtcbiAgdmlld3BvcnQubGF0aXR1ZGUgPSBuZXdDZW50ZXJbMV07XG4gIHZpZXdwb3J0Lnpvb20gPSBuZXdab29tO1xuICByZXR1cm4gdmlld3BvcnQ7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0Rmx5VG9EdXJhdGlvbihzdGFydFByb3BzLCBlbmRQcm9wcykge1xuICB2YXIgb3B0cyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDoge307XG4gIG9wdHMgPSBPYmplY3QuYXNzaWduKHt9LCBERUZBVUxUX09QVFMsIG9wdHMpO1xuICB2YXIgX29wdHMgPSBvcHRzLFxuICAgICAgc2NyZWVuU3BlZWQgPSBfb3B0cy5zY3JlZW5TcGVlZCxcbiAgICAgIHNwZWVkID0gX29wdHMuc3BlZWQsXG4gICAgICBtYXhEdXJhdGlvbiA9IF9vcHRzLm1heER1cmF0aW9uO1xuXG4gIHZhciBfZ2V0Rmx5VG9UcmFuc2l0aW9uUGEyID0gZ2V0Rmx5VG9UcmFuc2l0aW9uUGFyYW1zKHN0YXJ0UHJvcHMsIGVuZFByb3BzLCBvcHRzKSxcbiAgICAgIFMgPSBfZ2V0Rmx5VG9UcmFuc2l0aW9uUGEyLlMsXG4gICAgICByaG8gPSBfZ2V0Rmx5VG9UcmFuc2l0aW9uUGEyLnJobztcblxuICB2YXIgbGVuZ3RoID0gMTAwMCAqIFM7XG4gIHZhciBkdXJhdGlvbjtcblxuICBpZiAoTnVtYmVyLmlzRmluaXRlKHNjcmVlblNwZWVkKSkge1xuICAgIGR1cmF0aW9uID0gbGVuZ3RoIC8gKHNjcmVlblNwZWVkIC8gcmhvKTtcbiAgfSBlbHNlIHtcbiAgICBkdXJhdGlvbiA9IGxlbmd0aCAvIHNwZWVkO1xuICB9XG5cbiAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZShtYXhEdXJhdGlvbikgJiYgZHVyYXRpb24gPiBtYXhEdXJhdGlvbiA/IDAgOiBkdXJhdGlvbjtcbn1cblxuZnVuY3Rpb24gZ2V0Rmx5VG9UcmFuc2l0aW9uUGFyYW1zKHN0YXJ0UHJvcHMsIGVuZFByb3BzLCBvcHRzKSB7XG4gIG9wdHMgPSBPYmplY3QuYXNzaWduKHt9LCBERUZBVUxUX09QVFMsIG9wdHMpO1xuICB2YXIgcmhvID0gb3B0cy5jdXJ2ZTtcbiAgdmFyIHN0YXJ0Wm9vbSA9IHN0YXJ0UHJvcHMuem9vbTtcbiAgdmFyIHN0YXJ0Q2VudGVyID0gW3N0YXJ0UHJvcHMubG9uZ2l0dWRlLCBzdGFydFByb3BzLmxhdGl0dWRlXTtcbiAgdmFyIHN0YXJ0U2NhbGUgPSB6b29tVG9TY2FsZShzdGFydFpvb20pO1xuICB2YXIgZW5kWm9vbSA9IGVuZFByb3BzLnpvb207XG4gIHZhciBlbmRDZW50ZXIgPSBbZW5kUHJvcHMubG9uZ2l0dWRlLCBlbmRQcm9wcy5sYXRpdHVkZV07XG4gIHZhciBzY2FsZSA9IHpvb21Ub1NjYWxlKGVuZFpvb20gLSBzdGFydFpvb20pO1xuICB2YXIgc3RhcnRDZW50ZXJYWSA9IGxuZ0xhdFRvV29ybGQoc3RhcnRDZW50ZXIpO1xuICB2YXIgZW5kQ2VudGVyWFkgPSBsbmdMYXRUb1dvcmxkKGVuZENlbnRlcik7XG4gIHZhciB1RGVsdGEgPSB2ZWMyLnN1YihbXSwgZW5kQ2VudGVyWFksIHN0YXJ0Q2VudGVyWFkpO1xuICB2YXIgdzAgPSBNYXRoLm1heChzdGFydFByb3BzLndpZHRoLCBzdGFydFByb3BzLmhlaWdodCk7XG4gIHZhciB3MSA9IHcwIC8gc2NhbGU7XG4gIHZhciB1MSA9IHZlYzIubGVuZ3RoKHVEZWx0YSkgKiBzdGFydFNjYWxlO1xuXG4gIHZhciBfdTEgPSBNYXRoLm1heCh1MSwgRVBTSUxPTik7XG5cbiAgdmFyIHJobzIgPSByaG8gKiByaG87XG4gIHZhciBiMCA9ICh3MSAqIHcxIC0gdzAgKiB3MCArIHJobzIgKiByaG8yICogX3UxICogX3UxKSAvICgyICogdzAgKiByaG8yICogX3UxKTtcbiAgdmFyIGIxID0gKHcxICogdzEgLSB3MCAqIHcwIC0gcmhvMiAqIHJobzIgKiBfdTEgKiBfdTEpIC8gKDIgKiB3MSAqIHJobzIgKiBfdTEpO1xuICB2YXIgcjAgPSBNYXRoLmxvZyhNYXRoLnNxcnQoYjAgKiBiMCArIDEpIC0gYjApO1xuICB2YXIgcjEgPSBNYXRoLmxvZyhNYXRoLnNxcnQoYjEgKiBiMSArIDEpIC0gYjEpO1xuICB2YXIgUyA9IChyMSAtIHIwKSAvIHJobztcbiAgcmV0dXJuIHtcbiAgICBzdGFydFpvb206IHN0YXJ0Wm9vbSxcbiAgICBzdGFydENlbnRlclhZOiBzdGFydENlbnRlclhZLFxuICAgIHVEZWx0YTogdURlbHRhLFxuICAgIHcwOiB3MCxcbiAgICB1MTogdTEsXG4gICAgUzogUyxcbiAgICByaG86IHJobyxcbiAgICByaG8yOiByaG8yLFxuICAgIHIwOiByMCxcbiAgICByMTogcjFcbiAgfTtcbn0iLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSAnLi93ZWItbWVyY2F0b3Itdmlld3BvcnQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBXZWJNZXJjYXRvclZpZXdwb3J0IH0gZnJvbSAnLi93ZWItbWVyY2F0b3Itdmlld3BvcnQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBnZXRCb3VuZHMgfSBmcm9tICcuL2dldC1ib3VuZHMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBmaXRCb3VuZHMgfSBmcm9tICcuL2ZpdC1ib3VuZHMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBub3JtYWxpemVWaWV3cG9ydFByb3BzIH0gZnJvbSAnLi9ub3JtYWxpemUtdmlld3BvcnQtcHJvcHMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBmbHlUb1ZpZXdwb3J0LCBnZXRGbHlUb0R1cmF0aW9uIH0gZnJvbSAnLi9mbHktdG8tdmlld3BvcnQnO1xuZXhwb3J0IHsgbG5nTGF0VG9Xb3JsZCwgd29ybGRUb0xuZ0xhdCwgd29ybGRUb1BpeGVscywgcGl4ZWxzVG9Xb3JsZCwgem9vbVRvU2NhbGUsIHNjYWxlVG9ab29tLCBnZXRNZXRlclpvb20sIGdldERpc3RhbmNlU2NhbGVzLCBhZGRNZXRlcnNUb0xuZ0xhdCwgZ2V0Vmlld01hdHJpeCwgZ2V0UHJvamVjdGlvbk1hdHJpeCwgZ2V0UHJvamVjdGlvblBhcmFtZXRlcnMgfSBmcm9tICcuL3dlYi1tZXJjYXRvci11dGlscyc7IiwiZXhwb3J0IHsgV2ViTWVyY2F0b3JWaWV3cG9ydCBhcyBkZWZhdWx0IH0gZnJvbSAnQG1hdGguZ2wvd2ViLW1lcmNhdG9yJztcbmV4cG9ydCAqIGZyb20gJ0BtYXRoLmdsL3dlYi1tZXJjYXRvcic7IiwiLyoqXHJcbiAqIEEgY29sbGVjdGlvbiBvZiBzaGltcyB0aGF0IHByb3ZpZGUgbWluaW1hbCBmdW5jdGlvbmFsaXR5IG9mIHRoZSBFUzYgY29sbGVjdGlvbnMuXHJcbiAqXHJcbiAqIFRoZXNlIGltcGxlbWVudGF0aW9ucyBhcmUgbm90IG1lYW50IHRvIGJlIHVzZWQgb3V0c2lkZSBvZiB0aGUgUmVzaXplT2JzZXJ2ZXJcclxuICogbW9kdWxlcyBhcyB0aGV5IGNvdmVyIG9ubHkgYSBsaW1pdGVkIHJhbmdlIG9mIHVzZSBjYXNlcy5cclxuICovXG5cbi8qIGVzbGludC1kaXNhYmxlIHJlcXVpcmUtanNkb2MsIHZhbGlkLWpzZG9jICovXG52YXIgTWFwU2hpbSA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHR5cGVvZiBNYXAgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIE1hcDtcbiAgfVxuICAvKipcclxuICAgKiBSZXR1cm5zIGluZGV4IGluIHByb3ZpZGVkIGFycmF5IHRoYXQgbWF0Y2hlcyB0aGUgc3BlY2lmaWVkIGtleS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7QXJyYXk8QXJyYXk+fSBhcnJcclxuICAgKiBAcGFyYW0geyp9IGtleVxyXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XHJcbiAgICovXG5cblxuICBmdW5jdGlvbiBnZXRJbmRleChhcnIsIGtleSkge1xuICAgIHZhciByZXN1bHQgPSAtMTtcbiAgICBhcnIuc29tZShmdW5jdGlvbiAoZW50cnksIGluZGV4KSB7XG4gICAgICBpZiAoZW50cnlbMF0gPT09IGtleSkge1xuICAgICAgICByZXN1bHQgPSBpbmRleDtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICAvKiogQGNsYXNzICovXG4gICAgZnVuY3Rpb24gKCkge1xuICAgICAgZnVuY3Rpb24gY2xhc3NfMSgpIHtcbiAgICAgICAgdGhpcy5fX2VudHJpZXNfXyA9IFtdO1xuICAgICAgfVxuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY2xhc3NfMS5wcm90b3R5cGUsIFwic2l6ZVwiLCB7XG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fX2VudHJpZXNfXy5sZW5ndGg7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgfSk7XG4gICAgICAvKipcclxuICAgICAgICogQHBhcmFtIHsqfSBrZXlcclxuICAgICAgICogQHJldHVybnMgeyp9XHJcbiAgICAgICAqL1xuXG4gICAgICBjbGFzc18xLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHZhciBpbmRleCA9IGdldEluZGV4KHRoaXMuX19lbnRyaWVzX18sIGtleSk7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMuX19lbnRyaWVzX19baW5kZXhdO1xuICAgICAgICByZXR1cm4gZW50cnkgJiYgZW50cnlbMV07XG4gICAgICB9O1xuICAgICAgLyoqXHJcbiAgICAgICAqIEBwYXJhbSB7Kn0ga2V5XHJcbiAgICAgICAqIEBwYXJhbSB7Kn0gdmFsdWVcclxuICAgICAgICogQHJldHVybnMge3ZvaWR9XHJcbiAgICAgICAqL1xuXG5cbiAgICAgIGNsYXNzXzEucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICAgIHZhciBpbmRleCA9IGdldEluZGV4KHRoaXMuX19lbnRyaWVzX18sIGtleSk7XG5cbiAgICAgICAgaWYgKH5pbmRleCkge1xuICAgICAgICAgIHRoaXMuX19lbnRyaWVzX19baW5kZXhdWzFdID0gdmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5fX2VudHJpZXNfXy5wdXNoKFtrZXksIHZhbHVlXSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICAvKipcclxuICAgICAgICogQHBhcmFtIHsqfSBrZXlcclxuICAgICAgICogQHJldHVybnMge3ZvaWR9XHJcbiAgICAgICAqL1xuXG5cbiAgICAgIGNsYXNzXzEucHJvdG90eXBlLmRlbGV0ZSA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgdmFyIGVudHJpZXMgPSB0aGlzLl9fZW50cmllc19fO1xuICAgICAgICB2YXIgaW5kZXggPSBnZXRJbmRleChlbnRyaWVzLCBrZXkpO1xuXG4gICAgICAgIGlmICh+aW5kZXgpIHtcbiAgICAgICAgICBlbnRyaWVzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICAvKipcclxuICAgICAgICogQHBhcmFtIHsqfSBrZXlcclxuICAgICAgICogQHJldHVybnMge3ZvaWR9XHJcbiAgICAgICAqL1xuXG5cbiAgICAgIGNsYXNzXzEucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgcmV0dXJuICEhfmdldEluZGV4KHRoaXMuX19lbnRyaWVzX18sIGtleSk7XG4gICAgICB9O1xuICAgICAgLyoqXHJcbiAgICAgICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAgICAgKi9cblxuXG4gICAgICBjbGFzc18xLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5fX2VudHJpZXNfXy5zcGxpY2UoMCk7XG4gICAgICB9O1xuICAgICAgLyoqXHJcbiAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXHJcbiAgICAgICAqIEBwYXJhbSB7Kn0gW2N0eD1udWxsXVxyXG4gICAgICAgKiBAcmV0dXJucyB7dm9pZH1cclxuICAgICAgICovXG5cblxuICAgICAgY2xhc3NfMS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChjYWxsYmFjaywgY3R4KSB7XG4gICAgICAgIGlmIChjdHggPT09IHZvaWQgMCkge1xuICAgICAgICAgIGN0eCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0gdGhpcy5fX2VudHJpZXNfXzsgX2kgPCBfYS5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICB2YXIgZW50cnkgPSBfYVtfaV07XG4gICAgICAgICAgY2FsbGJhY2suY2FsbChjdHgsIGVudHJ5WzFdLCBlbnRyeVswXSk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBjbGFzc18xO1xuICAgIH0oKVxuICApO1xufSgpO1xuLyoqXHJcbiAqIERldGVjdHMgd2hldGhlciB3aW5kb3cgYW5kIGRvY3VtZW50IG9iamVjdHMgYXJlIGF2YWlsYWJsZSBpbiBjdXJyZW50IGVudmlyb25tZW50LlxyXG4gKi9cblxuXG52YXIgaXNCcm93c2VyID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuZG9jdW1lbnQgPT09IGRvY3VtZW50OyAvLyBSZXR1cm5zIGdsb2JhbCBvYmplY3Qgb2YgYSBjdXJyZW50IGVudmlyb25tZW50LlxuXG52YXIgZ2xvYmFsJDEgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJyAmJiBnbG9iYWwuTWF0aCA9PT0gTWF0aCkge1xuICAgIHJldHVybiBnbG9iYWw7XG4gIH1cblxuICBpZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnICYmIHNlbGYuTWF0aCA9PT0gTWF0aCkge1xuICAgIHJldHVybiBzZWxmO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5NYXRoID09PSBNYXRoKSB7XG4gICAgcmV0dXJuIHdpbmRvdztcbiAgfSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcblxuXG4gIHJldHVybiBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xufSgpO1xuLyoqXHJcbiAqIEEgc2hpbSBmb3IgdGhlIHJlcXVlc3RBbmltYXRpb25GcmFtZSB3aGljaCBmYWxscyBiYWNrIHRvIHRoZSBzZXRUaW1lb3V0IGlmXHJcbiAqIGZpcnN0IG9uZSBpcyBub3Qgc3VwcG9ydGVkLlxyXG4gKlxyXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXF1ZXN0cycgaWRlbnRpZmllci5cclxuICovXG5cblxudmFyIHJlcXVlc3RBbmltYXRpb25GcmFtZSQxID0gZnVuY3Rpb24gKCkge1xuICBpZiAodHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIEl0J3MgcmVxdWlyZWQgdG8gdXNlIGEgYm91bmRlZCBmdW5jdGlvbiBiZWNhdXNlIElFIHNvbWV0aW1lcyB0aHJvd3NcbiAgICAvLyBhbiBcIkludmFsaWQgY2FsbGluZyBvYmplY3RcIiBlcnJvciBpZiByQUYgaXMgaW52b2tlZCB3aXRob3V0IHRoZSBnbG9iYWxcbiAgICAvLyBvYmplY3Qgb24gdGhlIGxlZnQgaGFuZCBzaWRlLlxuICAgIHJldHVybiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZChnbG9iYWwkMSk7XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKERhdGUubm93KCkpO1xuICAgIH0sIDEwMDAgLyA2MCk7XG4gIH07XG59KCk7IC8vIERlZmluZXMgbWluaW11bSB0aW1lb3V0IGJlZm9yZSBhZGRpbmcgYSB0cmFpbGluZyBjYWxsLlxuXG5cbnZhciB0cmFpbGluZ1RpbWVvdXQgPSAyO1xuLyoqXHJcbiAqIENyZWF0ZXMgYSB3cmFwcGVyIGZ1bmN0aW9uIHdoaWNoIGVuc3VyZXMgdGhhdCBwcm92aWRlZCBjYWxsYmFjayB3aWxsIGJlXHJcbiAqIGludm9rZWQgb25seSBvbmNlIGR1cmluZyB0aGUgc3BlY2lmaWVkIGRlbGF5IHBlcmlvZC5cclxuICpcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgLSBGdW5jdGlvbiB0byBiZSBpbnZva2VkIGFmdGVyIHRoZSBkZWxheSBwZXJpb2QuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBkZWxheSAtIERlbGF5IGFmdGVyIHdoaWNoIHRvIGludm9rZSBjYWxsYmFjay5cclxuICogQHJldHVybnMge0Z1bmN0aW9ufVxyXG4gKi9cblxuZnVuY3Rpb24gdGhyb3R0bGUoY2FsbGJhY2ssIGRlbGF5KSB7XG4gIHZhciBsZWFkaW5nQ2FsbCA9IGZhbHNlLFxuICAgICAgdHJhaWxpbmdDYWxsID0gZmFsc2UsXG4gICAgICBsYXN0Q2FsbFRpbWUgPSAwO1xuICAvKipcclxuICAgKiBJbnZva2VzIHRoZSBvcmlnaW5hbCBjYWxsYmFjayBmdW5jdGlvbiBhbmQgc2NoZWR1bGVzIG5ldyBpbnZvY2F0aW9uIGlmXHJcbiAgICogdGhlIFwicHJveHlcIiB3YXMgY2FsbGVkIGR1cmluZyBjdXJyZW50IHJlcXVlc3QuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7dm9pZH1cclxuICAgKi9cblxuICBmdW5jdGlvbiByZXNvbHZlUGVuZGluZygpIHtcbiAgICBpZiAobGVhZGluZ0NhbGwpIHtcbiAgICAgIGxlYWRpbmdDYWxsID0gZmFsc2U7XG4gICAgICBjYWxsYmFjaygpO1xuICAgIH1cblxuICAgIGlmICh0cmFpbGluZ0NhbGwpIHtcbiAgICAgIHByb3h5KCk7XG4gICAgfVxuICB9XG4gIC8qKlxyXG4gICAqIENhbGxiYWNrIGludm9rZWQgYWZ0ZXIgdGhlIHNwZWNpZmllZCBkZWxheS4gSXQgd2lsbCBmdXJ0aGVyIHBvc3Rwb25lXHJcbiAgICogaW52b2NhdGlvbiBvZiB0aGUgb3JpZ2luYWwgZnVuY3Rpb24gZGVsZWdhdGluZyBpdCB0byB0aGVcclxuICAgKiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7dm9pZH1cclxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHRpbWVvdXRDYWxsYmFjaygpIHtcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUkMShyZXNvbHZlUGVuZGluZyk7XG4gIH1cbiAgLyoqXHJcbiAgICogU2NoZWR1bGVzIGludm9jYXRpb24gb2YgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge3ZvaWR9XHJcbiAgICovXG5cblxuICBmdW5jdGlvbiBwcm94eSgpIHtcbiAgICB2YXIgdGltZVN0YW1wID0gRGF0ZS5ub3coKTtcblxuICAgIGlmIChsZWFkaW5nQ2FsbCkge1xuICAgICAgLy8gUmVqZWN0IGltbWVkaWF0ZWx5IGZvbGxvd2luZyBjYWxscy5cbiAgICAgIGlmICh0aW1lU3RhbXAgLSBsYXN0Q2FsbFRpbWUgPCB0cmFpbGluZ1RpbWVvdXQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSAvLyBTY2hlZHVsZSBuZXcgY2FsbCB0byBiZSBpbiBpbnZva2VkIHdoZW4gdGhlIHBlbmRpbmcgb25lIGlzIHJlc29sdmVkLlxuICAgICAgLy8gVGhpcyBpcyBpbXBvcnRhbnQgZm9yIFwidHJhbnNpdGlvbnNcIiB3aGljaCBuZXZlciBhY3R1YWxseSBzdGFydFxuICAgICAgLy8gaW1tZWRpYXRlbHkgc28gdGhlcmUgaXMgYSBjaGFuY2UgdGhhdCB3ZSBtaWdodCBtaXNzIG9uZSBpZiBjaGFuZ2VcbiAgICAgIC8vIGhhcHBlbnMgYW1pZHMgdGhlIHBlbmRpbmcgaW52b2NhdGlvbi5cblxuXG4gICAgICB0cmFpbGluZ0NhbGwgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZWFkaW5nQ2FsbCA9IHRydWU7XG4gICAgICB0cmFpbGluZ0NhbGwgPSBmYWxzZTtcbiAgICAgIHNldFRpbWVvdXQodGltZW91dENhbGxiYWNrLCBkZWxheSk7XG4gICAgfVxuXG4gICAgbGFzdENhbGxUaW1lID0gdGltZVN0YW1wO1xuICB9XG5cbiAgcmV0dXJuIHByb3h5O1xufSAvLyBNaW5pbXVtIGRlbGF5IGJlZm9yZSBpbnZva2luZyB0aGUgdXBkYXRlIG9mIG9ic2VydmVycy5cblxuXG52YXIgUkVGUkVTSF9ERUxBWSA9IDIwOyAvLyBBIGxpc3Qgb2Ygc3Vic3RyaW5ncyBvZiBDU1MgcHJvcGVydGllcyB1c2VkIHRvIGZpbmQgdHJhbnNpdGlvbiBldmVudHMgdGhhdFxuLy8gbWlnaHQgYWZmZWN0IGRpbWVuc2lvbnMgb2Ygb2JzZXJ2ZWQgZWxlbWVudHMuXG5cbnZhciB0cmFuc2l0aW9uS2V5cyA9IFsndG9wJywgJ3JpZ2h0JywgJ2JvdHRvbScsICdsZWZ0JywgJ3dpZHRoJywgJ2hlaWdodCcsICdzaXplJywgJ3dlaWdodCddOyAvLyBDaGVjayBpZiBNdXRhdGlvbk9ic2VydmVyIGlzIGF2YWlsYWJsZS5cblxudmFyIG11dGF0aW9uT2JzZXJ2ZXJTdXBwb3J0ZWQgPSB0eXBlb2YgTXV0YXRpb25PYnNlcnZlciAhPT0gJ3VuZGVmaW5lZCc7XG4vKipcclxuICogU2luZ2xldG9uIGNvbnRyb2xsZXIgY2xhc3Mgd2hpY2ggaGFuZGxlcyB1cGRhdGVzIG9mIFJlc2l6ZU9ic2VydmVyIGluc3RhbmNlcy5cclxuICovXG5cbnZhciBSZXNpemVPYnNlcnZlckNvbnRyb2xsZXIgPVxuLyoqIEBjbGFzcyAqL1xuZnVuY3Rpb24gKCkge1xuICAvKipcclxuICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIFJlc2l6ZU9ic2VydmVyQ29udHJvbGxlci5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXG4gIGZ1bmN0aW9uIFJlc2l6ZU9ic2VydmVyQ29udHJvbGxlcigpIHtcbiAgICAvKipcclxuICAgICAqIEluZGljYXRlcyB3aGV0aGVyIERPTSBsaXN0ZW5lcnMgaGF2ZSBiZWVuIGFkZGVkLlxyXG4gICAgICpcclxuICAgICAqIEBwcml2YXRlIHtib29sZWFufVxyXG4gICAgICovXG4gICAgdGhpcy5jb25uZWN0ZWRfID0gZmFsc2U7XG4gICAgLyoqXHJcbiAgICAgKiBUZWxscyB0aGF0IGNvbnRyb2xsZXIgaGFzIHN1YnNjcmliZWQgZm9yIE11dGF0aW9uIEV2ZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBAcHJpdmF0ZSB7Ym9vbGVhbn1cclxuICAgICAqL1xuXG4gICAgdGhpcy5tdXRhdGlvbkV2ZW50c0FkZGVkXyA9IGZhbHNlO1xuICAgIC8qKlxyXG4gICAgICogS2VlcHMgcmVmZXJlbmNlIHRvIHRoZSBpbnN0YW5jZSBvZiBNdXRhdGlvbk9ic2VydmVyLlxyXG4gICAgICpcclxuICAgICAqIEBwcml2YXRlIHtNdXRhdGlvbk9ic2VydmVyfVxyXG4gICAgICovXG5cbiAgICB0aGlzLm11dGF0aW9uc09ic2VydmVyXyA9IG51bGw7XG4gICAgLyoqXHJcbiAgICAgKiBBIGxpc3Qgb2YgY29ubmVjdGVkIG9ic2VydmVycy5cclxuICAgICAqXHJcbiAgICAgKiBAcHJpdmF0ZSB7QXJyYXk8UmVzaXplT2JzZXJ2ZXJTUEk+fVxyXG4gICAgICovXG5cbiAgICB0aGlzLm9ic2VydmVyc18gPSBbXTtcbiAgICB0aGlzLm9uVHJhbnNpdGlvbkVuZF8gPSB0aGlzLm9uVHJhbnNpdGlvbkVuZF8uYmluZCh0aGlzKTtcbiAgICB0aGlzLnJlZnJlc2ggPSB0aHJvdHRsZSh0aGlzLnJlZnJlc2guYmluZCh0aGlzKSwgUkVGUkVTSF9ERUxBWSk7XG4gIH1cbiAgLyoqXHJcbiAgICogQWRkcyBvYnNlcnZlciB0byBvYnNlcnZlcnMgbGlzdC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7UmVzaXplT2JzZXJ2ZXJTUEl9IG9ic2VydmVyIC0gT2JzZXJ2ZXIgdG8gYmUgYWRkZWQuXHJcbiAgICogQHJldHVybnMge3ZvaWR9XHJcbiAgICovXG5cblxuICBSZXNpemVPYnNlcnZlckNvbnRyb2xsZXIucHJvdG90eXBlLmFkZE9ic2VydmVyID0gZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgaWYgKCF+dGhpcy5vYnNlcnZlcnNfLmluZGV4T2Yob2JzZXJ2ZXIpKSB7XG4gICAgICB0aGlzLm9ic2VydmVyc18ucHVzaChvYnNlcnZlcik7XG4gICAgfSAvLyBBZGQgbGlzdGVuZXJzIGlmIHRoZXkgaGF2ZW4ndCBiZWVuIGFkZGVkIHlldC5cblxuXG4gICAgaWYgKCF0aGlzLmNvbm5lY3RlZF8pIHtcbiAgICAgIHRoaXMuY29ubmVjdF8oKTtcbiAgICB9XG4gIH07XG4gIC8qKlxyXG4gICAqIFJlbW92ZXMgb2JzZXJ2ZXIgZnJvbSBvYnNlcnZlcnMgbGlzdC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7UmVzaXplT2JzZXJ2ZXJTUEl9IG9ic2VydmVyIC0gT2JzZXJ2ZXIgdG8gYmUgcmVtb3ZlZC5cclxuICAgKiBAcmV0dXJucyB7dm9pZH1cclxuICAgKi9cblxuXG4gIFJlc2l6ZU9ic2VydmVyQ29udHJvbGxlci5wcm90b3R5cGUucmVtb3ZlT2JzZXJ2ZXIgPSBmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICB2YXIgb2JzZXJ2ZXJzID0gdGhpcy5vYnNlcnZlcnNfO1xuICAgIHZhciBpbmRleCA9IG9ic2VydmVycy5pbmRleE9mKG9ic2VydmVyKTsgLy8gUmVtb3ZlIG9ic2VydmVyIGlmIGl0J3MgcHJlc2VudCBpbiByZWdpc3RyeS5cblxuICAgIGlmICh+aW5kZXgpIHtcbiAgICAgIG9ic2VydmVycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH0gLy8gUmVtb3ZlIGxpc3RlbmVycyBpZiBjb250cm9sbGVyIGhhcyBubyBjb25uZWN0ZWQgb2JzZXJ2ZXJzLlxuXG5cbiAgICBpZiAoIW9ic2VydmVycy5sZW5ndGggJiYgdGhpcy5jb25uZWN0ZWRfKSB7XG4gICAgICB0aGlzLmRpc2Nvbm5lY3RfKCk7XG4gICAgfVxuICB9O1xuICAvKipcclxuICAgKiBJbnZva2VzIHRoZSB1cGRhdGUgb2Ygb2JzZXJ2ZXJzLiBJdCB3aWxsIGNvbnRpbnVlIHJ1bm5pbmcgdXBkYXRlcyBpbnNvZmFyXHJcbiAgICogaXQgZGV0ZWN0cyBjaGFuZ2VzLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge3ZvaWR9XHJcbiAgICovXG5cblxuICBSZXNpemVPYnNlcnZlckNvbnRyb2xsZXIucHJvdG90eXBlLnJlZnJlc2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGNoYW5nZXNEZXRlY3RlZCA9IHRoaXMudXBkYXRlT2JzZXJ2ZXJzXygpOyAvLyBDb250aW51ZSBydW5uaW5nIHVwZGF0ZXMgaWYgY2hhbmdlcyBoYXZlIGJlZW4gZGV0ZWN0ZWQgYXMgdGhlcmUgbWlnaHRcbiAgICAvLyBiZSBmdXR1cmUgb25lcyBjYXVzZWQgYnkgQ1NTIHRyYW5zaXRpb25zLlxuXG4gICAgaWYgKGNoYW5nZXNEZXRlY3RlZCkge1xuICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgfVxuICB9O1xuICAvKipcclxuICAgKiBVcGRhdGVzIGV2ZXJ5IG9ic2VydmVyIGZyb20gb2JzZXJ2ZXJzIGxpc3QgYW5kIG5vdGlmaWVzIHRoZW0gb2YgcXVldWVkXHJcbiAgICogZW50cmllcy5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgXCJ0cnVlXCIgaWYgYW55IG9ic2VydmVyIGhhcyBkZXRlY3RlZCBjaGFuZ2VzIGluXHJcbiAgICogICAgICBkaW1lbnNpb25zIG9mIGl0J3MgZWxlbWVudHMuXHJcbiAgICovXG5cblxuICBSZXNpemVPYnNlcnZlckNvbnRyb2xsZXIucHJvdG90eXBlLnVwZGF0ZU9ic2VydmVyc18gPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gQ29sbGVjdCBvYnNlcnZlcnMgdGhhdCBoYXZlIGFjdGl2ZSBvYnNlcnZhdGlvbnMuXG4gICAgdmFyIGFjdGl2ZU9ic2VydmVycyA9IHRoaXMub2JzZXJ2ZXJzXy5maWx0ZXIoZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICByZXR1cm4gb2JzZXJ2ZXIuZ2F0aGVyQWN0aXZlKCksIG9ic2VydmVyLmhhc0FjdGl2ZSgpO1xuICAgIH0pOyAvLyBEZWxpdmVyIG5vdGlmaWNhdGlvbnMgaW4gYSBzZXBhcmF0ZSBjeWNsZSBpbiBvcmRlciB0byBhdm9pZCBhbnlcbiAgICAvLyBjb2xsaXNpb25zIGJldHdlZW4gb2JzZXJ2ZXJzLCBlLmcuIHdoZW4gbXVsdGlwbGUgaW5zdGFuY2VzIG9mXG4gICAgLy8gUmVzaXplT2JzZXJ2ZXIgYXJlIHRyYWNraW5nIHRoZSBzYW1lIGVsZW1lbnQgYW5kIHRoZSBjYWxsYmFjayBvZiBvbmVcbiAgICAvLyBvZiB0aGVtIGNoYW5nZXMgY29udGVudCBkaW1lbnNpb25zIG9mIHRoZSBvYnNlcnZlZCB0YXJnZXQuIFNvbWV0aW1lc1xuICAgIC8vIHRoaXMgbWF5IHJlc3VsdCBpbiBub3RpZmljYXRpb25zIGJlaW5nIGJsb2NrZWQgZm9yIHRoZSByZXN0IG9mIG9ic2VydmVycy5cblxuICAgIGFjdGl2ZU9ic2VydmVycy5mb3JFYWNoKGZ1bmN0aW9uIChvYnNlcnZlcikge1xuICAgICAgcmV0dXJuIG9ic2VydmVyLmJyb2FkY2FzdEFjdGl2ZSgpO1xuICAgIH0pO1xuICAgIHJldHVybiBhY3RpdmVPYnNlcnZlcnMubGVuZ3RoID4gMDtcbiAgfTtcbiAgLyoqXHJcbiAgICogSW5pdGlhbGl6ZXMgRE9NIGxpc3RlbmVycy5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICogQHJldHVybnMge3ZvaWR9XHJcbiAgICovXG5cblxuICBSZXNpemVPYnNlcnZlckNvbnRyb2xsZXIucHJvdG90eXBlLmNvbm5lY3RfID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIERvIG5vdGhpbmcgaWYgcnVubmluZyBpbiBhIG5vbi1icm93c2VyIGVudmlyb25tZW50IG9yIGlmIGxpc3RlbmVyc1xuICAgIC8vIGhhdmUgYmVlbiBhbHJlYWR5IGFkZGVkLlxuICAgIGlmICghaXNCcm93c2VyIHx8IHRoaXMuY29ubmVjdGVkXykge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gU3Vic2NyaXB0aW9uIHRvIHRoZSBcIlRyYW5zaXRpb25lbmRcIiBldmVudCBpcyB1c2VkIGFzIGEgd29ya2Fyb3VuZCBmb3JcbiAgICAvLyBkZWxheWVkIHRyYW5zaXRpb25zLiBUaGlzIHdheSBpdCdzIHBvc3NpYmxlIHRvIGNhcHR1cmUgYXQgbGVhc3QgdGhlXG4gICAgLy8gZmluYWwgc3RhdGUgb2YgYW4gZWxlbWVudC5cblxuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndHJhbnNpdGlvbmVuZCcsIHRoaXMub25UcmFuc2l0aW9uRW5kXyk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMucmVmcmVzaCk7XG5cbiAgICBpZiAobXV0YXRpb25PYnNlcnZlclN1cHBvcnRlZCkge1xuICAgICAgdGhpcy5tdXRhdGlvbnNPYnNlcnZlcl8gPSBuZXcgTXV0YXRpb25PYnNlcnZlcih0aGlzLnJlZnJlc2gpO1xuICAgICAgdGhpcy5tdXRhdGlvbnNPYnNlcnZlcl8ub2JzZXJ2ZShkb2N1bWVudCwge1xuICAgICAgICBhdHRyaWJ1dGVzOiB0cnVlLFxuICAgICAgICBjaGlsZExpc3Q6IHRydWUsXG4gICAgICAgIGNoYXJhY3RlckRhdGE6IHRydWUsXG4gICAgICAgIHN1YnRyZWU6IHRydWVcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01TdWJ0cmVlTW9kaWZpZWQnLCB0aGlzLnJlZnJlc2gpO1xuICAgICAgdGhpcy5tdXRhdGlvbkV2ZW50c0FkZGVkXyA9IHRydWU7XG4gICAgfVxuXG4gICAgdGhpcy5jb25uZWN0ZWRfID0gdHJ1ZTtcbiAgfTtcbiAgLyoqXHJcbiAgICogUmVtb3ZlcyBET00gbGlzdGVuZXJzLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKiBAcmV0dXJucyB7dm9pZH1cclxuICAgKi9cblxuXG4gIFJlc2l6ZU9ic2VydmVyQ29udHJvbGxlci5wcm90b3R5cGUuZGlzY29ubmVjdF8gPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gRG8gbm90aGluZyBpZiBydW5uaW5nIGluIGEgbm9uLWJyb3dzZXIgZW52aXJvbm1lbnQgb3IgaWYgbGlzdGVuZXJzXG4gICAgLy8gaGF2ZSBiZWVuIGFscmVhZHkgcmVtb3ZlZC5cbiAgICBpZiAoIWlzQnJvd3NlciB8fCAhdGhpcy5jb25uZWN0ZWRfKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndHJhbnNpdGlvbmVuZCcsIHRoaXMub25UcmFuc2l0aW9uRW5kXyk7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMucmVmcmVzaCk7XG5cbiAgICBpZiAodGhpcy5tdXRhdGlvbnNPYnNlcnZlcl8pIHtcbiAgICAgIHRoaXMubXV0YXRpb25zT2JzZXJ2ZXJfLmRpc2Nvbm5lY3QoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5tdXRhdGlvbkV2ZW50c0FkZGVkXykge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignRE9NU3VidHJlZU1vZGlmaWVkJywgdGhpcy5yZWZyZXNoKTtcbiAgICB9XG5cbiAgICB0aGlzLm11dGF0aW9uc09ic2VydmVyXyA9IG51bGw7XG4gICAgdGhpcy5tdXRhdGlvbkV2ZW50c0FkZGVkXyA9IGZhbHNlO1xuICAgIHRoaXMuY29ubmVjdGVkXyA9IGZhbHNlO1xuICB9O1xuICAvKipcclxuICAgKiBcIlRyYW5zaXRpb25lbmRcIiBldmVudCBoYW5kbGVyLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKiBAcGFyYW0ge1RyYW5zaXRpb25FdmVudH0gZXZlbnRcclxuICAgKiBAcmV0dXJucyB7dm9pZH1cclxuICAgKi9cblxuXG4gIFJlc2l6ZU9ic2VydmVyQ29udHJvbGxlci5wcm90b3R5cGUub25UcmFuc2l0aW9uRW5kXyA9IGZ1bmN0aW9uIChfYSkge1xuICAgIHZhciBfYiA9IF9hLnByb3BlcnR5TmFtZSxcbiAgICAgICAgcHJvcGVydHlOYW1lID0gX2IgPT09IHZvaWQgMCA/ICcnIDogX2I7IC8vIERldGVjdCB3aGV0aGVyIHRyYW5zaXRpb24gbWF5IGFmZmVjdCBkaW1lbnNpb25zIG9mIGFuIGVsZW1lbnQuXG5cbiAgICB2YXIgaXNSZWZsb3dQcm9wZXJ0eSA9IHRyYW5zaXRpb25LZXlzLnNvbWUoZnVuY3Rpb24gKGtleSkge1xuICAgICAgcmV0dXJuICEhfnByb3BlcnR5TmFtZS5pbmRleE9mKGtleSk7XG4gICAgfSk7XG5cbiAgICBpZiAoaXNSZWZsb3dQcm9wZXJ0eSkge1xuICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgfVxuICB9O1xuICAvKipcclxuICAgKiBSZXR1cm5zIGluc3RhbmNlIG9mIHRoZSBSZXNpemVPYnNlcnZlckNvbnRyb2xsZXIuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7UmVzaXplT2JzZXJ2ZXJDb250cm9sbGVyfVxyXG4gICAqL1xuXG5cbiAgUmVzaXplT2JzZXJ2ZXJDb250cm9sbGVyLmdldEluc3RhbmNlID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICghdGhpcy5pbnN0YW5jZV8pIHtcbiAgICAgIHRoaXMuaW5zdGFuY2VfID0gbmV3IFJlc2l6ZU9ic2VydmVyQ29udHJvbGxlcigpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmluc3RhbmNlXztcbiAgfTtcbiAgLyoqXHJcbiAgICogSG9sZHMgcmVmZXJlbmNlIHRvIHRoZSBjb250cm9sbGVyJ3MgaW5zdGFuY2UuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZSB7UmVzaXplT2JzZXJ2ZXJDb250cm9sbGVyfVxyXG4gICAqL1xuXG5cbiAgUmVzaXplT2JzZXJ2ZXJDb250cm9sbGVyLmluc3RhbmNlXyA9IG51bGw7XG4gIHJldHVybiBSZXNpemVPYnNlcnZlckNvbnRyb2xsZXI7XG59KCk7XG4vKipcclxuICogRGVmaW5lcyBub24td3JpdGFibGUvZW51bWVyYWJsZSBwcm9wZXJ0aWVzIG9mIHRoZSBwcm92aWRlZCB0YXJnZXQgb2JqZWN0LlxyXG4gKlxyXG4gKiBAcGFyYW0ge09iamVjdH0gdGFyZ2V0IC0gT2JqZWN0IGZvciB3aGljaCB0byBkZWZpbmUgcHJvcGVydGllcy5cclxuICogQHBhcmFtIHtPYmplY3R9IHByb3BzIC0gUHJvcGVydGllcyB0byBiZSBkZWZpbmVkLlxyXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUYXJnZXQgb2JqZWN0LlxyXG4gKi9cblxuXG52YXIgZGVmaW5lQ29uZmlndXJhYmxlID0gZnVuY3Rpb24gZGVmaW5lQ29uZmlndXJhYmxlKHRhcmdldCwgcHJvcHMpIHtcbiAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IE9iamVjdC5rZXlzKHByb3BzKTsgX2kgPCBfYS5sZW5ndGg7IF9pKyspIHtcbiAgICB2YXIga2V5ID0gX2FbX2ldO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwge1xuICAgICAgdmFsdWU6IHByb3BzW2tleV0sXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn07XG4vKipcclxuICogUmV0dXJucyB0aGUgZ2xvYmFsIG9iamVjdCBhc3NvY2lhdGVkIHdpdGggcHJvdmlkZWQgZWxlbWVudC5cclxuICpcclxuICogQHBhcmFtIHtPYmplY3R9IHRhcmdldFxyXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxyXG4gKi9cblxuXG52YXIgZ2V0V2luZG93T2YgPSBmdW5jdGlvbiBnZXRXaW5kb3dPZih0YXJnZXQpIHtcbiAgLy8gQXNzdW1lIHRoYXQgdGhlIGVsZW1lbnQgaXMgYW4gaW5zdGFuY2Ugb2YgTm9kZSwgd2hpY2ggbWVhbnMgdGhhdCBpdFxuICAvLyBoYXMgdGhlIFwib3duZXJEb2N1bWVudFwiIHByb3BlcnR5IGZyb20gd2hpY2ggd2UgY2FuIHJldHJpZXZlIGFcbiAgLy8gY29ycmVzcG9uZGluZyBnbG9iYWwgb2JqZWN0LlxuICB2YXIgb3duZXJHbG9iYWwgPSB0YXJnZXQgJiYgdGFyZ2V0Lm93bmVyRG9jdW1lbnQgJiYgdGFyZ2V0Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7IC8vIFJldHVybiB0aGUgbG9jYWwgZ2xvYmFsIG9iamVjdCBpZiBpdCdzIG5vdCBwb3NzaWJsZSBleHRyYWN0IG9uZSBmcm9tXG4gIC8vIHByb3ZpZGVkIGVsZW1lbnQuXG5cbiAgcmV0dXJuIG93bmVyR2xvYmFsIHx8IGdsb2JhbCQxO1xufTsgLy8gUGxhY2Vob2xkZXIgb2YgYW4gZW1wdHkgY29udGVudCByZWN0YW5nbGUuXG5cblxudmFyIGVtcHR5UmVjdCA9IGNyZWF0ZVJlY3RJbml0KDAsIDAsIDAsIDApO1xuLyoqXHJcbiAqIENvbnZlcnRzIHByb3ZpZGVkIHN0cmluZyB0byBhIG51bWJlci5cclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSB2YWx1ZVxyXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxyXG4gKi9cblxuZnVuY3Rpb24gdG9GbG9hdCh2YWx1ZSkge1xuICByZXR1cm4gcGFyc2VGbG9hdCh2YWx1ZSkgfHwgMDtcbn1cbi8qKlxyXG4gKiBFeHRyYWN0cyBib3JkZXJzIHNpemUgZnJvbSBwcm92aWRlZCBzdHlsZXMuXHJcbiAqXHJcbiAqIEBwYXJhbSB7Q1NTU3R5bGVEZWNsYXJhdGlvbn0gc3R5bGVzXHJcbiAqIEBwYXJhbSB7Li4uc3RyaW5nfSBwb3NpdGlvbnMgLSBCb3JkZXJzIHBvc2l0aW9ucyAodG9wLCByaWdodCwgLi4uKVxyXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxyXG4gKi9cblxuXG5mdW5jdGlvbiBnZXRCb3JkZXJzU2l6ZShzdHlsZXMpIHtcbiAgdmFyIHBvc2l0aW9ucyA9IFtdO1xuXG4gIGZvciAodmFyIF9pID0gMTsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgcG9zaXRpb25zW19pIC0gMV0gPSBhcmd1bWVudHNbX2ldO1xuICB9XG5cbiAgcmV0dXJuIHBvc2l0aW9ucy5yZWR1Y2UoZnVuY3Rpb24gKHNpemUsIHBvc2l0aW9uKSB7XG4gICAgdmFyIHZhbHVlID0gc3R5bGVzWydib3JkZXItJyArIHBvc2l0aW9uICsgJy13aWR0aCddO1xuICAgIHJldHVybiBzaXplICsgdG9GbG9hdCh2YWx1ZSk7XG4gIH0sIDApO1xufVxuLyoqXHJcbiAqIEV4dHJhY3RzIHBhZGRpbmdzIHNpemVzIGZyb20gcHJvdmlkZWQgc3R5bGVzLlxyXG4gKlxyXG4gKiBAcGFyYW0ge0NTU1N0eWxlRGVjbGFyYXRpb259IHN0eWxlc1xyXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBQYWRkaW5ncyBib3guXHJcbiAqL1xuXG5cbmZ1bmN0aW9uIGdldFBhZGRpbmdzKHN0eWxlcykge1xuICB2YXIgcG9zaXRpb25zID0gWyd0b3AnLCAncmlnaHQnLCAnYm90dG9tJywgJ2xlZnQnXTtcbiAgdmFyIHBhZGRpbmdzID0ge307XG5cbiAgZm9yICh2YXIgX2kgPSAwLCBwb3NpdGlvbnNfMSA9IHBvc2l0aW9uczsgX2kgPCBwb3NpdGlvbnNfMS5sZW5ndGg7IF9pKyspIHtcbiAgICB2YXIgcG9zaXRpb24gPSBwb3NpdGlvbnNfMVtfaV07XG4gICAgdmFyIHZhbHVlID0gc3R5bGVzWydwYWRkaW5nLScgKyBwb3NpdGlvbl07XG4gICAgcGFkZGluZ3NbcG9zaXRpb25dID0gdG9GbG9hdCh2YWx1ZSk7XG4gIH1cblxuICByZXR1cm4gcGFkZGluZ3M7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyBjb250ZW50IHJlY3RhbmdsZSBvZiBwcm92aWRlZCBTVkcgZWxlbWVudC5cclxuICpcclxuICogQHBhcmFtIHtTVkdHcmFwaGljc0VsZW1lbnR9IHRhcmdldCAtIEVsZW1lbnQgY29udGVudCByZWN0YW5nbGUgb2Ygd2hpY2ggbmVlZHNcclxuICogICAgICB0byBiZSBjYWxjdWxhdGVkLlxyXG4gKiBAcmV0dXJucyB7RE9NUmVjdEluaXR9XHJcbiAqL1xuXG5cbmZ1bmN0aW9uIGdldFNWR0NvbnRlbnRSZWN0KHRhcmdldCkge1xuICB2YXIgYmJveCA9IHRhcmdldC5nZXRCQm94KCk7XG4gIHJldHVybiBjcmVhdGVSZWN0SW5pdCgwLCAwLCBiYm94LndpZHRoLCBiYm94LmhlaWdodCk7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyBjb250ZW50IHJlY3RhbmdsZSBvZiBwcm92aWRlZCBIVE1MRWxlbWVudC5cclxuICpcclxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gdGFyZ2V0IC0gRWxlbWVudCBmb3Igd2hpY2ggdG8gY2FsY3VsYXRlIHRoZSBjb250ZW50IHJlY3RhbmdsZS5cclxuICogQHJldHVybnMge0RPTVJlY3RJbml0fVxyXG4gKi9cblxuXG5mdW5jdGlvbiBnZXRIVE1MRWxlbWVudENvbnRlbnRSZWN0KHRhcmdldCkge1xuICAvLyBDbGllbnQgd2lkdGggJiBoZWlnaHQgcHJvcGVydGllcyBjYW4ndCBiZVxuICAvLyB1c2VkIGV4Y2x1c2l2ZWx5IGFzIHRoZXkgcHJvdmlkZSByb3VuZGVkIHZhbHVlcy5cbiAgdmFyIGNsaWVudFdpZHRoID0gdGFyZ2V0LmNsaWVudFdpZHRoLFxuICAgICAgY2xpZW50SGVpZ2h0ID0gdGFyZ2V0LmNsaWVudEhlaWdodDsgLy8gQnkgdGhpcyBjb25kaXRpb24gd2UgY2FuIGNhdGNoIGFsbCBub24tcmVwbGFjZWQgaW5saW5lLCBoaWRkZW4gYW5kXG4gIC8vIGRldGFjaGVkIGVsZW1lbnRzLiBUaG91Z2ggZWxlbWVudHMgd2l0aCB3aWR0aCAmIGhlaWdodCBwcm9wZXJ0aWVzIGxlc3NcbiAgLy8gdGhhbiAwLjUgd2lsbCBiZSBkaXNjYXJkZWQgYXMgd2VsbC5cbiAgLy9cbiAgLy8gV2l0aG91dCBpdCB3ZSB3b3VsZCBuZWVkIHRvIGltcGxlbWVudCBzZXBhcmF0ZSBtZXRob2RzIGZvciBlYWNoIG9mXG4gIC8vIHRob3NlIGNhc2VzIGFuZCBpdCdzIG5vdCBwb3NzaWJsZSB0byBwZXJmb3JtIGEgcHJlY2lzZSBhbmQgcGVyZm9ybWFuY2VcbiAgLy8gZWZmZWN0aXZlIHRlc3QgZm9yIGhpZGRlbiBlbGVtZW50cy4gRS5nLiBldmVuIGpRdWVyeSdzICc6dmlzaWJsZScgZmlsdGVyXG4gIC8vIGdpdmVzIHdyb25nIHJlc3VsdHMgZm9yIGVsZW1lbnRzIHdpdGggd2lkdGggJiBoZWlnaHQgbGVzcyB0aGFuIDAuNS5cblxuICBpZiAoIWNsaWVudFdpZHRoICYmICFjbGllbnRIZWlnaHQpIHtcbiAgICByZXR1cm4gZW1wdHlSZWN0O1xuICB9XG5cbiAgdmFyIHN0eWxlcyA9IGdldFdpbmRvd09mKHRhcmdldCkuZ2V0Q29tcHV0ZWRTdHlsZSh0YXJnZXQpO1xuICB2YXIgcGFkZGluZ3MgPSBnZXRQYWRkaW5ncyhzdHlsZXMpO1xuICB2YXIgaG9yaXpQYWQgPSBwYWRkaW5ncy5sZWZ0ICsgcGFkZGluZ3MucmlnaHQ7XG4gIHZhciB2ZXJ0UGFkID0gcGFkZGluZ3MudG9wICsgcGFkZGluZ3MuYm90dG9tOyAvLyBDb21wdXRlZCBzdHlsZXMgb2Ygd2lkdGggJiBoZWlnaHQgYXJlIGJlaW5nIHVzZWQgYmVjYXVzZSB0aGV5IGFyZSB0aGVcbiAgLy8gb25seSBkaW1lbnNpb25zIGF2YWlsYWJsZSB0byBKUyB0aGF0IGNvbnRhaW4gbm9uLXJvdW5kZWQgdmFsdWVzLiBJdCBjb3VsZFxuICAvLyBiZSBwb3NzaWJsZSB0byB1dGlsaXplIHRoZSBnZXRCb3VuZGluZ0NsaWVudFJlY3QgaWYgb25seSBpdCdzIGRhdGEgd2Fzbid0XG4gIC8vIGFmZmVjdGVkIGJ5IENTUyB0cmFuc2Zvcm1hdGlvbnMgbGV0IGFsb25lIHBhZGRpbmdzLCBib3JkZXJzIGFuZCBzY3JvbGwgYmFycy5cblxuICB2YXIgd2lkdGggPSB0b0Zsb2F0KHN0eWxlcy53aWR0aCksXG4gICAgICBoZWlnaHQgPSB0b0Zsb2F0KHN0eWxlcy5oZWlnaHQpOyAvLyBXaWR0aCAmIGhlaWdodCBpbmNsdWRlIHBhZGRpbmdzIGFuZCBib3JkZXJzIHdoZW4gdGhlICdib3JkZXItYm94JyBib3hcbiAgLy8gbW9kZWwgaXMgYXBwbGllZCAoZXhjZXB0IGZvciBJRSkuXG5cbiAgaWYgKHN0eWxlcy5ib3hTaXppbmcgPT09ICdib3JkZXItYm94Jykge1xuICAgIC8vIEZvbGxvd2luZyBjb25kaXRpb25zIGFyZSByZXF1aXJlZCB0byBoYW5kbGUgSW50ZXJuZXQgRXhwbG9yZXIgd2hpY2hcbiAgICAvLyBkb2Vzbid0IGluY2x1ZGUgcGFkZGluZ3MgYW5kIGJvcmRlcnMgdG8gY29tcHV0ZWQgQ1NTIGRpbWVuc2lvbnMuXG4gICAgLy9cbiAgICAvLyBXZSBjYW4gc2F5IHRoYXQgaWYgQ1NTIGRpbWVuc2lvbnMgKyBwYWRkaW5ncyBhcmUgZXF1YWwgdG8gdGhlIFwiY2xpZW50XCJcbiAgICAvLyBwcm9wZXJ0aWVzIHRoZW4gaXQncyBlaXRoZXIgSUUsIGFuZCB0aHVzIHdlIGRvbid0IG5lZWQgdG8gc3VidHJhY3RcbiAgICAvLyBhbnl0aGluZywgb3IgYW4gZWxlbWVudCBtZXJlbHkgZG9lc24ndCBoYXZlIHBhZGRpbmdzL2JvcmRlcnMgc3R5bGVzLlxuICAgIGlmIChNYXRoLnJvdW5kKHdpZHRoICsgaG9yaXpQYWQpICE9PSBjbGllbnRXaWR0aCkge1xuICAgICAgd2lkdGggLT0gZ2V0Qm9yZGVyc1NpemUoc3R5bGVzLCAnbGVmdCcsICdyaWdodCcpICsgaG9yaXpQYWQ7XG4gICAgfVxuXG4gICAgaWYgKE1hdGgucm91bmQoaGVpZ2h0ICsgdmVydFBhZCkgIT09IGNsaWVudEhlaWdodCkge1xuICAgICAgaGVpZ2h0IC09IGdldEJvcmRlcnNTaXplKHN0eWxlcywgJ3RvcCcsICdib3R0b20nKSArIHZlcnRQYWQ7XG4gICAgfVxuICB9IC8vIEZvbGxvd2luZyBzdGVwcyBjYW4ndCBiZSBhcHBsaWVkIHRvIHRoZSBkb2N1bWVudCdzIHJvb3QgZWxlbWVudCBhcyBpdHNcbiAgLy8gY2xpZW50W1dpZHRoL0hlaWdodF0gcHJvcGVydGllcyByZXByZXNlbnQgdmlld3BvcnQgYXJlYSBvZiB0aGUgd2luZG93LlxuICAvLyBCZXNpZGVzLCBpdCdzIGFzIHdlbGwgbm90IG5lY2Vzc2FyeSBhcyB0aGUgPGh0bWw+IGl0c2VsZiBuZWl0aGVyIGhhc1xuICAvLyByZW5kZXJlZCBzY3JvbGwgYmFycyBub3IgaXQgY2FuIGJlIGNsaXBwZWQuXG5cblxuICBpZiAoIWlzRG9jdW1lbnRFbGVtZW50KHRhcmdldCkpIHtcbiAgICAvLyBJbiBzb21lIGJyb3dzZXJzIChvbmx5IGluIEZpcmVmb3gsIGFjdHVhbGx5KSBDU1Mgd2lkdGggJiBoZWlnaHRcbiAgICAvLyBpbmNsdWRlIHNjcm9sbCBiYXJzIHNpemUgd2hpY2ggY2FuIGJlIHJlbW92ZWQgYXQgdGhpcyBzdGVwIGFzIHNjcm9sbFxuICAgIC8vIGJhcnMgYXJlIHRoZSBvbmx5IGRpZmZlcmVuY2UgYmV0d2VlbiByb3VuZGVkIGRpbWVuc2lvbnMgKyBwYWRkaW5nc1xuICAgIC8vIGFuZCBcImNsaWVudFwiIHByb3BlcnRpZXMsIHRob3VnaCB0aGF0IGlzIG5vdCBhbHdheXMgdHJ1ZSBpbiBDaHJvbWUuXG4gICAgdmFyIHZlcnRTY3JvbGxiYXIgPSBNYXRoLnJvdW5kKHdpZHRoICsgaG9yaXpQYWQpIC0gY2xpZW50V2lkdGg7XG4gICAgdmFyIGhvcml6U2Nyb2xsYmFyID0gTWF0aC5yb3VuZChoZWlnaHQgKyB2ZXJ0UGFkKSAtIGNsaWVudEhlaWdodDsgLy8gQ2hyb21lIGhhcyBhIHJhdGhlciB3ZWlyZCByb3VuZGluZyBvZiBcImNsaWVudFwiIHByb3BlcnRpZXMuXG4gICAgLy8gRS5nLiBmb3IgYW4gZWxlbWVudCB3aXRoIGNvbnRlbnQgd2lkdGggb2YgMzE0LjJweCBpdCBzb21ldGltZXMgZ2l2ZXNcbiAgICAvLyB0aGUgY2xpZW50IHdpZHRoIG9mIDMxNXB4IGFuZCBmb3IgdGhlIHdpZHRoIG9mIDMxNC43cHggaXQgbWF5IGdpdmVcbiAgICAvLyAzMTRweC4gQW5kIGl0IGRvZXNuJ3QgaGFwcGVuIGFsbCB0aGUgdGltZS4gU28ganVzdCBpZ25vcmUgdGhpcyBkZWx0YVxuICAgIC8vIGFzIGEgbm9uLXJlbGV2YW50LlxuXG4gICAgaWYgKE1hdGguYWJzKHZlcnRTY3JvbGxiYXIpICE9PSAxKSB7XG4gICAgICB3aWR0aCAtPSB2ZXJ0U2Nyb2xsYmFyO1xuICAgIH1cblxuICAgIGlmIChNYXRoLmFicyhob3JpelNjcm9sbGJhcikgIT09IDEpIHtcbiAgICAgIGhlaWdodCAtPSBob3JpelNjcm9sbGJhcjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY3JlYXRlUmVjdEluaXQocGFkZGluZ3MubGVmdCwgcGFkZGluZ3MudG9wLCB3aWR0aCwgaGVpZ2h0KTtcbn1cbi8qKlxyXG4gKiBDaGVja3Mgd2hldGhlciBwcm92aWRlZCBlbGVtZW50IGlzIGFuIGluc3RhbmNlIG9mIHRoZSBTVkdHcmFwaGljc0VsZW1lbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7RWxlbWVudH0gdGFyZ2V0IC0gRWxlbWVudCB0byBiZSBjaGVja2VkLlxyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICovXG5cblxudmFyIGlzU1ZHR3JhcGhpY3NFbGVtZW50ID0gZnVuY3Rpb24gKCkge1xuICAvLyBTb21lIGJyb3dzZXJzLCBuYW1lbHkgSUUgYW5kIEVkZ2UsIGRvbid0IGhhdmUgdGhlIFNWR0dyYXBoaWNzRWxlbWVudFxuICAvLyBpbnRlcmZhY2UuXG4gIGlmICh0eXBlb2YgU1ZHR3JhcGhpY3NFbGVtZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgICByZXR1cm4gdGFyZ2V0IGluc3RhbmNlb2YgZ2V0V2luZG93T2YodGFyZ2V0KS5TVkdHcmFwaGljc0VsZW1lbnQ7XG4gICAgfTtcbiAgfSAvLyBJZiBpdCdzIHNvLCB0aGVuIGNoZWNrIHRoYXQgZWxlbWVudCBpcyBhdCBsZWFzdCBhbiBpbnN0YW5jZSBvZiB0aGVcbiAgLy8gU1ZHRWxlbWVudCBhbmQgdGhhdCBpdCBoYXMgdGhlIFwiZ2V0QkJveFwiIG1ldGhvZC5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWV4dHJhLXBhcmVuc1xuXG5cbiAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICByZXR1cm4gdGFyZ2V0IGluc3RhbmNlb2YgZ2V0V2luZG93T2YodGFyZ2V0KS5TVkdFbGVtZW50ICYmIHR5cGVvZiB0YXJnZXQuZ2V0QkJveCA9PT0gJ2Z1bmN0aW9uJztcbiAgfTtcbn0oKTtcbi8qKlxyXG4gKiBDaGVja3Mgd2hldGhlciBwcm92aWRlZCBlbGVtZW50IGlzIGEgZG9jdW1lbnQgZWxlbWVudCAoPGh0bWw+KS5cclxuICpcclxuICogQHBhcmFtIHtFbGVtZW50fSB0YXJnZXQgLSBFbGVtZW50IHRvIGJlIGNoZWNrZWQuXHJcbiAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gKi9cblxuXG5mdW5jdGlvbiBpc0RvY3VtZW50RWxlbWVudCh0YXJnZXQpIHtcbiAgcmV0dXJuIHRhcmdldCA9PT0gZ2V0V2luZG93T2YodGFyZ2V0KS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyBhbiBhcHByb3ByaWF0ZSBjb250ZW50IHJlY3RhbmdsZSBmb3IgcHJvdmlkZWQgaHRtbCBvciBzdmcgZWxlbWVudC5cclxuICpcclxuICogQHBhcmFtIHtFbGVtZW50fSB0YXJnZXQgLSBFbGVtZW50IGNvbnRlbnQgcmVjdGFuZ2xlIG9mIHdoaWNoIG5lZWRzIHRvIGJlIGNhbGN1bGF0ZWQuXHJcbiAqIEByZXR1cm5zIHtET01SZWN0SW5pdH1cclxuICovXG5cblxuZnVuY3Rpb24gZ2V0Q29udGVudFJlY3QodGFyZ2V0KSB7XG4gIGlmICghaXNCcm93c2VyKSB7XG4gICAgcmV0dXJuIGVtcHR5UmVjdDtcbiAgfVxuXG4gIGlmIChpc1NWR0dyYXBoaWNzRWxlbWVudCh0YXJnZXQpKSB7XG4gICAgcmV0dXJuIGdldFNWR0NvbnRlbnRSZWN0KHRhcmdldCk7XG4gIH1cblxuICByZXR1cm4gZ2V0SFRNTEVsZW1lbnRDb250ZW50UmVjdCh0YXJnZXQpO1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgcmVjdGFuZ2xlIHdpdGggYW4gaW50ZXJmYWNlIG9mIHRoZSBET01SZWN0UmVhZE9ubHkuXHJcbiAqIFNwZWM6IGh0dHBzOi8vZHJhZnRzLmZ4dGYub3JnL2dlb21ldHJ5LyNkb21yZWN0cmVhZG9ubHlcclxuICpcclxuICogQHBhcmFtIHtET01SZWN0SW5pdH0gcmVjdEluaXQgLSBPYmplY3Qgd2l0aCByZWN0YW5nbGUncyB4L3kgY29vcmRpbmF0ZXMgYW5kIGRpbWVuc2lvbnMuXHJcbiAqIEByZXR1cm5zIHtET01SZWN0UmVhZE9ubHl9XHJcbiAqL1xuXG5cbmZ1bmN0aW9uIGNyZWF0ZVJlYWRPbmx5UmVjdChfYSkge1xuICB2YXIgeCA9IF9hLngsXG4gICAgICB5ID0gX2EueSxcbiAgICAgIHdpZHRoID0gX2Eud2lkdGgsXG4gICAgICBoZWlnaHQgPSBfYS5oZWlnaHQ7IC8vIElmIERPTVJlY3RSZWFkT25seSBpcyBhdmFpbGFibGUgdXNlIGl0IGFzIGEgcHJvdG90eXBlIGZvciB0aGUgcmVjdGFuZ2xlLlxuXG4gIHZhciBDb25zdHIgPSB0eXBlb2YgRE9NUmVjdFJlYWRPbmx5ICE9PSAndW5kZWZpbmVkJyA/IERPTVJlY3RSZWFkT25seSA6IE9iamVjdDtcbiAgdmFyIHJlY3QgPSBPYmplY3QuY3JlYXRlKENvbnN0ci5wcm90b3R5cGUpOyAvLyBSZWN0YW5nbGUncyBwcm9wZXJ0aWVzIGFyZSBub3Qgd3JpdGFibGUgYW5kIG5vbi1lbnVtZXJhYmxlLlxuXG4gIGRlZmluZUNvbmZpZ3VyYWJsZShyZWN0LCB7XG4gICAgeDogeCxcbiAgICB5OiB5LFxuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICB0b3A6IHksXG4gICAgcmlnaHQ6IHggKyB3aWR0aCxcbiAgICBib3R0b206IGhlaWdodCArIHksXG4gICAgbGVmdDogeFxuICB9KTtcbiAgcmV0dXJuIHJlY3Q7XG59XG4vKipcclxuICogQ3JlYXRlcyBET01SZWN0SW5pdCBvYmplY3QgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGRpbWVuc2lvbnMgYW5kIHRoZSB4L3kgY29vcmRpbmF0ZXMuXHJcbiAqIFNwZWM6IGh0dHBzOi8vZHJhZnRzLmZ4dGYub3JnL2dlb21ldHJ5LyNkaWN0ZGVmLWRvbXJlY3Rpbml0XHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gWCBjb29yZGluYXRlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0geSAtIFkgY29vcmRpbmF0ZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoIC0gUmVjdGFuZ2xlJ3Mgd2lkdGguXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHQgLSBSZWN0YW5nbGUncyBoZWlnaHQuXHJcbiAqIEByZXR1cm5zIHtET01SZWN0SW5pdH1cclxuICovXG5cblxuZnVuY3Rpb24gY3JlYXRlUmVjdEluaXQoeCwgeSwgd2lkdGgsIGhlaWdodCkge1xuICByZXR1cm4ge1xuICAgIHg6IHgsXG4gICAgeTogeSxcbiAgICB3aWR0aDogd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHRcbiAgfTtcbn1cbi8qKlxyXG4gKiBDbGFzcyB0aGF0IGlzIHJlc3BvbnNpYmxlIGZvciBjb21wdXRhdGlvbnMgb2YgdGhlIGNvbnRlbnQgcmVjdGFuZ2xlIG9mXHJcbiAqIHByb3ZpZGVkIERPTSBlbGVtZW50IGFuZCBmb3Iga2VlcGluZyB0cmFjayBvZiBpdCdzIGNoYW5nZXMuXHJcbiAqL1xuXG5cbnZhciBSZXNpemVPYnNlcnZhdGlvbiA9XG4vKiogQGNsYXNzICovXG5mdW5jdGlvbiAoKSB7XG4gIC8qKlxyXG4gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgUmVzaXplT2JzZXJ2YXRpb24uXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHRhcmdldCAtIEVsZW1lbnQgdG8gYmUgb2JzZXJ2ZWQuXHJcbiAgICovXG4gIGZ1bmN0aW9uIFJlc2l6ZU9ic2VydmF0aW9uKHRhcmdldCkge1xuICAgIC8qKlxyXG4gICAgICogQnJvYWRjYXN0ZWQgd2lkdGggb2YgY29udGVudCByZWN0YW5nbGUuXHJcbiAgICAgKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xuICAgIHRoaXMuYnJvYWRjYXN0V2lkdGggPSAwO1xuICAgIC8qKlxyXG4gICAgICogQnJvYWRjYXN0ZWQgaGVpZ2h0IG9mIGNvbnRlbnQgcmVjdGFuZ2xlLlxyXG4gICAgICpcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cblxuICAgIHRoaXMuYnJvYWRjYXN0SGVpZ2h0ID0gMDtcbiAgICAvKipcclxuICAgICAqIFJlZmVyZW5jZSB0byB0aGUgbGFzdCBvYnNlcnZlZCBjb250ZW50IHJlY3RhbmdsZS5cclxuICAgICAqXHJcbiAgICAgKiBAcHJpdmF0ZSB7RE9NUmVjdEluaXR9XHJcbiAgICAgKi9cblxuICAgIHRoaXMuY29udGVudFJlY3RfID0gY3JlYXRlUmVjdEluaXQoMCwgMCwgMCwgMCk7XG4gICAgdGhpcy50YXJnZXQgPSB0YXJnZXQ7XG4gIH1cbiAgLyoqXHJcbiAgICogVXBkYXRlcyBjb250ZW50IHJlY3RhbmdsZSBhbmQgdGVsbHMgd2hldGhlciBpdCdzIHdpZHRoIG9yIGhlaWdodCBwcm9wZXJ0aWVzXHJcbiAgICogaGF2ZSBjaGFuZ2VkIHNpbmNlIHRoZSBsYXN0IGJyb2FkY2FzdC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gICAqL1xuXG5cbiAgUmVzaXplT2JzZXJ2YXRpb24ucHJvdG90eXBlLmlzQWN0aXZlID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciByZWN0ID0gZ2V0Q29udGVudFJlY3QodGhpcy50YXJnZXQpO1xuICAgIHRoaXMuY29udGVudFJlY3RfID0gcmVjdDtcbiAgICByZXR1cm4gcmVjdC53aWR0aCAhPT0gdGhpcy5icm9hZGNhc3RXaWR0aCB8fCByZWN0LmhlaWdodCAhPT0gdGhpcy5icm9hZGNhc3RIZWlnaHQ7XG4gIH07XG4gIC8qKlxyXG4gICAqIFVwZGF0ZXMgJ2Jyb2FkY2FzdFdpZHRoJyBhbmQgJ2Jyb2FkY2FzdEhlaWdodCcgcHJvcGVydGllcyB3aXRoIGEgZGF0YVxyXG4gICAqIGZyb20gdGhlIGNvcnJlc3BvbmRpbmcgcHJvcGVydGllcyBvZiB0aGUgbGFzdCBvYnNlcnZlZCBjb250ZW50IHJlY3RhbmdsZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtET01SZWN0SW5pdH0gTGFzdCBvYnNlcnZlZCBjb250ZW50IHJlY3RhbmdsZS5cclxuICAgKi9cblxuXG4gIFJlc2l6ZU9ic2VydmF0aW9uLnByb3RvdHlwZS5icm9hZGNhc3RSZWN0ID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciByZWN0ID0gdGhpcy5jb250ZW50UmVjdF87XG4gICAgdGhpcy5icm9hZGNhc3RXaWR0aCA9IHJlY3Qud2lkdGg7XG4gICAgdGhpcy5icm9hZGNhc3RIZWlnaHQgPSByZWN0LmhlaWdodDtcbiAgICByZXR1cm4gcmVjdDtcbiAgfTtcblxuICByZXR1cm4gUmVzaXplT2JzZXJ2YXRpb247XG59KCk7XG5cbnZhciBSZXNpemVPYnNlcnZlckVudHJ5ID1cbi8qKiBAY2xhc3MgKi9cbmZ1bmN0aW9uICgpIHtcbiAgLyoqXHJcbiAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBSZXNpemVPYnNlcnZlckVudHJ5LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtFbGVtZW50fSB0YXJnZXQgLSBFbGVtZW50IHRoYXQgaXMgYmVpbmcgb2JzZXJ2ZWQuXHJcbiAgICogQHBhcmFtIHtET01SZWN0SW5pdH0gcmVjdEluaXQgLSBEYXRhIG9mIHRoZSBlbGVtZW50J3MgY29udGVudCByZWN0YW5nbGUuXHJcbiAgICovXG4gIGZ1bmN0aW9uIFJlc2l6ZU9ic2VydmVyRW50cnkodGFyZ2V0LCByZWN0SW5pdCkge1xuICAgIHZhciBjb250ZW50UmVjdCA9IGNyZWF0ZVJlYWRPbmx5UmVjdChyZWN0SW5pdCk7IC8vIEFjY29yZGluZyB0byB0aGUgc3BlY2lmaWNhdGlvbiBmb2xsb3dpbmcgcHJvcGVydGllcyBhcmUgbm90IHdyaXRhYmxlXG4gICAgLy8gYW5kIGFyZSBhbHNvIG5vdCBlbnVtZXJhYmxlIGluIHRoZSBuYXRpdmUgaW1wbGVtZW50YXRpb24uXG4gICAgLy9cbiAgICAvLyBQcm9wZXJ0eSBhY2Nlc3NvcnMgYXJlIG5vdCBiZWluZyB1c2VkIGFzIHRoZXknZCByZXF1aXJlIHRvIGRlZmluZSBhXG4gICAgLy8gcHJpdmF0ZSBXZWFrTWFwIHN0b3JhZ2Ugd2hpY2ggbWF5IGNhdXNlIG1lbW9yeSBsZWFrcyBpbiBicm93c2VycyB0aGF0XG4gICAgLy8gZG9uJ3Qgc3VwcG9ydCB0aGlzIHR5cGUgb2YgY29sbGVjdGlvbnMuXG5cbiAgICBkZWZpbmVDb25maWd1cmFibGUodGhpcywge1xuICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICBjb250ZW50UmVjdDogY29udGVudFJlY3RcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBSZXNpemVPYnNlcnZlckVudHJ5O1xufSgpO1xuXG52YXIgUmVzaXplT2JzZXJ2ZXJTUEkgPVxuLyoqIEBjbGFzcyAqL1xuZnVuY3Rpb24gKCkge1xuICAvKipcclxuICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIFJlc2l6ZU9ic2VydmVyLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtSZXNpemVPYnNlcnZlckNhbGxiYWNrfSBjYWxsYmFjayAtIENhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgaW52b2tlZFxyXG4gICAqICAgICAgd2hlbiBvbmUgb2YgdGhlIG9ic2VydmVkIGVsZW1lbnRzIGNoYW5nZXMgaXQncyBjb250ZW50IGRpbWVuc2lvbnMuXHJcbiAgICogQHBhcmFtIHtSZXNpemVPYnNlcnZlckNvbnRyb2xsZXJ9IGNvbnRyb2xsZXIgLSBDb250cm9sbGVyIGluc3RhbmNlIHdoaWNoXHJcbiAgICogICAgICBpcyByZXNwb25zaWJsZSBmb3IgdGhlIHVwZGF0ZXMgb2Ygb2JzZXJ2ZXIuXHJcbiAgICogQHBhcmFtIHtSZXNpemVPYnNlcnZlcn0gY2FsbGJhY2tDdHggLSBSZWZlcmVuY2UgdG8gdGhlIHB1YmxpY1xyXG4gICAqICAgICAgUmVzaXplT2JzZXJ2ZXIgaW5zdGFuY2Ugd2hpY2ggd2lsbCBiZSBwYXNzZWQgdG8gY2FsbGJhY2sgZnVuY3Rpb24uXHJcbiAgICovXG4gIGZ1bmN0aW9uIFJlc2l6ZU9ic2VydmVyU1BJKGNhbGxiYWNrLCBjb250cm9sbGVyLCBjYWxsYmFja0N0eCkge1xuICAgIC8qKlxyXG4gICAgICogQ29sbGVjdGlvbiBvZiByZXNpemUgb2JzZXJ2YXRpb25zIHRoYXQgaGF2ZSBkZXRlY3RlZCBjaGFuZ2VzIGluIGRpbWVuc2lvbnNcclxuICAgICAqIG9mIGVsZW1lbnRzLlxyXG4gICAgICpcclxuICAgICAqIEBwcml2YXRlIHtBcnJheTxSZXNpemVPYnNlcnZhdGlvbj59XHJcbiAgICAgKi9cbiAgICB0aGlzLmFjdGl2ZU9ic2VydmF0aW9uc18gPSBbXTtcbiAgICAvKipcclxuICAgICAqIFJlZ2lzdHJ5IG9mIHRoZSBSZXNpemVPYnNlcnZhdGlvbiBpbnN0YW5jZXMuXHJcbiAgICAgKlxyXG4gICAgICogQHByaXZhdGUge01hcDxFbGVtZW50LCBSZXNpemVPYnNlcnZhdGlvbj59XHJcbiAgICAgKi9cblxuICAgIHRoaXMub2JzZXJ2YXRpb25zXyA9IG5ldyBNYXBTaGltKCk7XG5cbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgY2FsbGJhY2sgcHJvdmlkZWQgYXMgcGFyYW1ldGVyIDEgaXMgbm90IGEgZnVuY3Rpb24uJyk7XG4gICAgfVxuXG4gICAgdGhpcy5jYWxsYmFja18gPSBjYWxsYmFjaztcbiAgICB0aGlzLmNvbnRyb2xsZXJfID0gY29udHJvbGxlcjtcbiAgICB0aGlzLmNhbGxiYWNrQ3R4XyA9IGNhbGxiYWNrQ3R4O1xuICB9XG4gIC8qKlxyXG4gICAqIFN0YXJ0cyBvYnNlcnZpbmcgcHJvdmlkZWQgZWxlbWVudC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gdGFyZ2V0IC0gRWxlbWVudCB0byBiZSBvYnNlcnZlZC5cclxuICAgKiBAcmV0dXJucyB7dm9pZH1cclxuICAgKi9cblxuXG4gIFJlc2l6ZU9ic2VydmVyU1BJLnByb3RvdHlwZS5vYnNlcnZlID0gZnVuY3Rpb24gKHRhcmdldCkge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgMCBwcmVzZW50LicpO1xuICAgIH0gLy8gRG8gbm90aGluZyBpZiBjdXJyZW50IGVudmlyb25tZW50IGRvZXNuJ3QgaGF2ZSB0aGUgRWxlbWVudCBpbnRlcmZhY2UuXG5cblxuICAgIGlmICh0eXBlb2YgRWxlbWVudCA9PT0gJ3VuZGVmaW5lZCcgfHwgIShFbGVtZW50IGluc3RhbmNlb2YgT2JqZWN0KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghKHRhcmdldCBpbnN0YW5jZW9mIGdldFdpbmRvd09mKHRhcmdldCkuRWxlbWVudCkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3BhcmFtZXRlciAxIGlzIG5vdCBvZiB0eXBlIFwiRWxlbWVudFwiLicpO1xuICAgIH1cblxuICAgIHZhciBvYnNlcnZhdGlvbnMgPSB0aGlzLm9ic2VydmF0aW9uc187IC8vIERvIG5vdGhpbmcgaWYgZWxlbWVudCBpcyBhbHJlYWR5IGJlaW5nIG9ic2VydmVkLlxuXG4gICAgaWYgKG9ic2VydmF0aW9ucy5oYXModGFyZ2V0KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG9ic2VydmF0aW9ucy5zZXQodGFyZ2V0LCBuZXcgUmVzaXplT2JzZXJ2YXRpb24odGFyZ2V0KSk7XG4gICAgdGhpcy5jb250cm9sbGVyXy5hZGRPYnNlcnZlcih0aGlzKTsgLy8gRm9yY2UgdGhlIHVwZGF0ZSBvZiBvYnNlcnZhdGlvbnMuXG5cbiAgICB0aGlzLmNvbnRyb2xsZXJfLnJlZnJlc2goKTtcbiAgfTtcbiAgLyoqXHJcbiAgICogU3RvcHMgb2JzZXJ2aW5nIHByb3ZpZGVkIGVsZW1lbnQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHRhcmdldCAtIEVsZW1lbnQgdG8gc3RvcCBvYnNlcnZpbmcuXHJcbiAgICogQHJldHVybnMge3ZvaWR9XHJcbiAgICovXG5cblxuICBSZXNpemVPYnNlcnZlclNQSS5wcm90b3R5cGUudW5vYnNlcnZlID0gZnVuY3Rpb24gKHRhcmdldCkge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgMCBwcmVzZW50LicpO1xuICAgIH0gLy8gRG8gbm90aGluZyBpZiBjdXJyZW50IGVudmlyb25tZW50IGRvZXNuJ3QgaGF2ZSB0aGUgRWxlbWVudCBpbnRlcmZhY2UuXG5cblxuICAgIGlmICh0eXBlb2YgRWxlbWVudCA9PT0gJ3VuZGVmaW5lZCcgfHwgIShFbGVtZW50IGluc3RhbmNlb2YgT2JqZWN0KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghKHRhcmdldCBpbnN0YW5jZW9mIGdldFdpbmRvd09mKHRhcmdldCkuRWxlbWVudCkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3BhcmFtZXRlciAxIGlzIG5vdCBvZiB0eXBlIFwiRWxlbWVudFwiLicpO1xuICAgIH1cblxuICAgIHZhciBvYnNlcnZhdGlvbnMgPSB0aGlzLm9ic2VydmF0aW9uc187IC8vIERvIG5vdGhpbmcgaWYgZWxlbWVudCBpcyBub3QgYmVpbmcgb2JzZXJ2ZWQuXG5cbiAgICBpZiAoIW9ic2VydmF0aW9ucy5oYXModGFyZ2V0KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG9ic2VydmF0aW9ucy5kZWxldGUodGFyZ2V0KTtcblxuICAgIGlmICghb2JzZXJ2YXRpb25zLnNpemUpIHtcbiAgICAgIHRoaXMuY29udHJvbGxlcl8ucmVtb3ZlT2JzZXJ2ZXIodGhpcyk7XG4gICAgfVxuICB9O1xuICAvKipcclxuICAgKiBTdG9wcyBvYnNlcnZpbmcgYWxsIGVsZW1lbnRzLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge3ZvaWR9XHJcbiAgICovXG5cblxuICBSZXNpemVPYnNlcnZlclNQSS5wcm90b3R5cGUuZGlzY29ubmVjdCA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmNsZWFyQWN0aXZlKCk7XG4gICAgdGhpcy5vYnNlcnZhdGlvbnNfLmNsZWFyKCk7XG4gICAgdGhpcy5jb250cm9sbGVyXy5yZW1vdmVPYnNlcnZlcih0aGlzKTtcbiAgfTtcbiAgLyoqXHJcbiAgICogQ29sbGVjdHMgb2JzZXJ2YXRpb24gaW5zdGFuY2VzIHRoZSBhc3NvY2lhdGVkIGVsZW1lbnQgb2Ygd2hpY2ggaGFzIGNoYW5nZWRcclxuICAgKiBpdCdzIGNvbnRlbnQgcmVjdGFuZ2xlLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge3ZvaWR9XHJcbiAgICovXG5cblxuICBSZXNpemVPYnNlcnZlclNQSS5wcm90b3R5cGUuZ2F0aGVyQWN0aXZlID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB0aGlzLmNsZWFyQWN0aXZlKCk7XG4gICAgdGhpcy5vYnNlcnZhdGlvbnNfLmZvckVhY2goZnVuY3Rpb24gKG9ic2VydmF0aW9uKSB7XG4gICAgICBpZiAob2JzZXJ2YXRpb24uaXNBY3RpdmUoKSkge1xuICAgICAgICBfdGhpcy5hY3RpdmVPYnNlcnZhdGlvbnNfLnB1c2gob2JzZXJ2YXRpb24pO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICAvKipcclxuICAgKiBJbnZva2VzIGluaXRpYWwgY2FsbGJhY2sgZnVuY3Rpb24gd2l0aCBhIGxpc3Qgb2YgUmVzaXplT2JzZXJ2ZXJFbnRyeVxyXG4gICAqIGluc3RhbmNlcyBjb2xsZWN0ZWQgZnJvbSBhY3RpdmUgcmVzaXplIG9ic2VydmF0aW9ucy5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAqL1xuXG5cbiAgUmVzaXplT2JzZXJ2ZXJTUEkucHJvdG90eXBlLmJyb2FkY2FzdEFjdGl2ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBEbyBub3RoaW5nIGlmIG9ic2VydmVyIGRvZXNuJ3QgaGF2ZSBhY3RpdmUgb2JzZXJ2YXRpb25zLlxuICAgIGlmICghdGhpcy5oYXNBY3RpdmUoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBjdHggPSB0aGlzLmNhbGxiYWNrQ3R4XzsgLy8gQ3JlYXRlIFJlc2l6ZU9ic2VydmVyRW50cnkgaW5zdGFuY2UgZm9yIGV2ZXJ5IGFjdGl2ZSBvYnNlcnZhdGlvbi5cblxuICAgIHZhciBlbnRyaWVzID0gdGhpcy5hY3RpdmVPYnNlcnZhdGlvbnNfLm1hcChmdW5jdGlvbiAob2JzZXJ2YXRpb24pIHtcbiAgICAgIHJldHVybiBuZXcgUmVzaXplT2JzZXJ2ZXJFbnRyeShvYnNlcnZhdGlvbi50YXJnZXQsIG9ic2VydmF0aW9uLmJyb2FkY2FzdFJlY3QoKSk7XG4gICAgfSk7XG4gICAgdGhpcy5jYWxsYmFja18uY2FsbChjdHgsIGVudHJpZXMsIGN0eCk7XG4gICAgdGhpcy5jbGVhckFjdGl2ZSgpO1xuICB9O1xuICAvKipcclxuICAgKiBDbGVhcnMgdGhlIGNvbGxlY3Rpb24gb2YgYWN0aXZlIG9ic2VydmF0aW9ucy5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAqL1xuXG5cbiAgUmVzaXplT2JzZXJ2ZXJTUEkucHJvdG90eXBlLmNsZWFyQWN0aXZlID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuYWN0aXZlT2JzZXJ2YXRpb25zXy5zcGxpY2UoMCk7XG4gIH07XG4gIC8qKlxyXG4gICAqIFRlbGxzIHdoZXRoZXIgb2JzZXJ2ZXIgaGFzIGFjdGl2ZSBvYnNlcnZhdGlvbnMuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICAgKi9cblxuXG4gIFJlc2l6ZU9ic2VydmVyU1BJLnByb3RvdHlwZS5oYXNBY3RpdmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuYWN0aXZlT2JzZXJ2YXRpb25zXy5sZW5ndGggPiAwO1xuICB9O1xuXG4gIHJldHVybiBSZXNpemVPYnNlcnZlclNQSTtcbn0oKTsgLy8gUmVnaXN0cnkgb2YgaW50ZXJuYWwgb2JzZXJ2ZXJzLiBJZiBXZWFrTWFwIGlzIG5vdCBhdmFpbGFibGUgdXNlIGN1cnJlbnQgc2hpbVxuLy8gZm9yIHRoZSBNYXAgY29sbGVjdGlvbiBhcyBpdCBoYXMgYWxsIHJlcXVpcmVkIG1ldGhvZHMgYW5kIGJlY2F1c2UgV2Vha01hcFxuLy8gY2FuJ3QgYmUgZnVsbHkgcG9seWZpbGxlZCBhbnl3YXkuXG5cblxudmFyIG9ic2VydmVycyA9IHR5cGVvZiBXZWFrTWFwICE9PSAndW5kZWZpbmVkJyA/IG5ldyBXZWFrTWFwKCkgOiBuZXcgTWFwU2hpbSgpO1xuLyoqXHJcbiAqIFJlc2l6ZU9ic2VydmVyIEFQSS4gRW5jYXBzdWxhdGVzIHRoZSBSZXNpemVPYnNlcnZlciBTUEkgaW1wbGVtZW50YXRpb25cclxuICogZXhwb3Npbmcgb25seSB0aG9zZSBtZXRob2RzIGFuZCBwcm9wZXJ0aWVzIHRoYXQgYXJlIGRlZmluZWQgaW4gdGhlIHNwZWMuXHJcbiAqL1xuXG52YXIgUmVzaXplT2JzZXJ2ZXIgPVxuLyoqIEBjbGFzcyAqL1xuZnVuY3Rpb24gKCkge1xuICAvKipcclxuICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIFJlc2l6ZU9ic2VydmVyLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtSZXNpemVPYnNlcnZlckNhbGxiYWNrfSBjYWxsYmFjayAtIENhbGxiYWNrIHRoYXQgaXMgaW52b2tlZCB3aGVuXHJcbiAgICogICAgICBkaW1lbnNpb25zIG9mIHRoZSBvYnNlcnZlZCBlbGVtZW50cyBjaGFuZ2UuXHJcbiAgICovXG4gIGZ1bmN0aW9uIFJlc2l6ZU9ic2VydmVyKGNhbGxiYWNrKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJlc2l6ZU9ic2VydmVyKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uLicpO1xuICAgIH1cblxuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgMCBwcmVzZW50LicpO1xuICAgIH1cblxuICAgIHZhciBjb250cm9sbGVyID0gUmVzaXplT2JzZXJ2ZXJDb250cm9sbGVyLmdldEluc3RhbmNlKCk7XG4gICAgdmFyIG9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyU1BJKGNhbGxiYWNrLCBjb250cm9sbGVyLCB0aGlzKTtcbiAgICBvYnNlcnZlcnMuc2V0KHRoaXMsIG9ic2VydmVyKTtcbiAgfVxuXG4gIHJldHVybiBSZXNpemVPYnNlcnZlcjtcbn0oKTsgLy8gRXhwb3NlIHB1YmxpYyBtZXRob2RzIG9mIFJlc2l6ZU9ic2VydmVyLlxuXG5cblsnb2JzZXJ2ZScsICd1bm9ic2VydmUnLCAnZGlzY29ubmVjdCddLmZvckVhY2goZnVuY3Rpb24gKG1ldGhvZCkge1xuICBSZXNpemVPYnNlcnZlci5wcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgX2E7XG5cbiAgICByZXR1cm4gKF9hID0gb2JzZXJ2ZXJzLmdldCh0aGlzKSlbbWV0aG9kXS5hcHBseShfYSwgYXJndW1lbnRzKTtcbiAgfTtcbn0pO1xuXG52YXIgaW5kZXggPSBmdW5jdGlvbiAoKSB7XG4gIC8vIEV4cG9ydCBleGlzdGluZyBpbXBsZW1lbnRhdGlvbiBpZiBhdmFpbGFibGUuXG4gIGlmICh0eXBlb2YgZ2xvYmFsJDEuUmVzaXplT2JzZXJ2ZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIGdsb2JhbCQxLlJlc2l6ZU9ic2VydmVyO1xuICB9XG5cbiAgcmV0dXJuIFJlc2l6ZU9ic2VydmVyO1xufSgpO1xuXG5leHBvcnQgZGVmYXVsdCBpbmRleDsiLCJ2YXIgd2luZG93XyA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogZ2xvYmFsO1xudmFyIGdsb2JhbF8gPSB0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbCA6IHdpbmRvdztcbnZhciBkb2N1bWVudF8gPSB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnID8gZG9jdW1lbnQgOiB7fTtcbmV4cG9ydCB7IHdpbmRvd18gYXMgd2luZG93LCBnbG9iYWxfIGFzIGdsb2JhbCwgZG9jdW1lbnRfIGFzIGRvY3VtZW50IH07IiwiaW1wb3J0IF9kZWZpbmVQcm9wZXJ0eSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHlcIjtcblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7XG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTtcblxuICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICAgIHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpO1xuICAgIGlmIChlbnVtZXJhYmxlT25seSkgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHtcbiAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlO1xuICAgIH0pO1xuICAgIGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTtcbiAgfVxuXG4gIHJldHVybiBrZXlzO1xufVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkge1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9O1xuXG4gICAgaWYgKGkgJSAyKSB7XG4gICAgICBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5mdW5jdGlvbiBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcihvLCBhbGxvd0FycmF5TGlrZSkge1xuICB2YXIgaXQ7XG5cbiAgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwidW5kZWZpbmVkXCIgfHwgb1tTeW1ib2wuaXRlcmF0b3JdID09IG51bGwpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShvKSB8fCAoaXQgPSBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobykpIHx8IGFsbG93QXJyYXlMaWtlICYmIG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSB7XG4gICAgICBpZiAoaXQpIG8gPSBpdDtcbiAgICAgIHZhciBpID0gMDtcblxuICAgICAgdmFyIEYgPSBmdW5jdGlvbiBGKCkge307XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHM6IEYsXG4gICAgICAgIG46IGZ1bmN0aW9uIG4oKSB7XG4gICAgICAgICAgaWYgKGkgPj0gby5sZW5ndGgpIHJldHVybiB7XG4gICAgICAgICAgICBkb25lOiB0cnVlXG4gICAgICAgICAgfTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZG9uZTogZmFsc2UsXG4gICAgICAgICAgICB2YWx1ZTogb1tpKytdXG4gICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICAgZTogZnVuY3Rpb24gZShfZSkge1xuICAgICAgICAgIHRocm93IF9lO1xuICAgICAgICB9LFxuICAgICAgICBmOiBGXG4gICAgICB9O1xuICAgIH1cblxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbiAgfVxuXG4gIHZhciBub3JtYWxDb21wbGV0aW9uID0gdHJ1ZSxcbiAgICAgIGRpZEVyciA9IGZhbHNlLFxuICAgICAgZXJyO1xuICByZXR1cm4ge1xuICAgIHM6IGZ1bmN0aW9uIHMoKSB7XG4gICAgICBpdCA9IG9bU3ltYm9sLml0ZXJhdG9yXSgpO1xuICAgIH0sXG4gICAgbjogZnVuY3Rpb24gbigpIHtcbiAgICAgIHZhciBzdGVwID0gaXQubmV4dCgpO1xuICAgICAgbm9ybWFsQ29tcGxldGlvbiA9IHN0ZXAuZG9uZTtcbiAgICAgIHJldHVybiBzdGVwO1xuICAgIH0sXG4gICAgZTogZnVuY3Rpb24gZShfZTIpIHtcbiAgICAgIGRpZEVyciA9IHRydWU7XG4gICAgICBlcnIgPSBfZTI7XG4gICAgfSxcbiAgICBmOiBmdW5jdGlvbiBmKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKCFub3JtYWxDb21wbGV0aW9uICYmIGl0W1wicmV0dXJuXCJdICE9IG51bGwpIGl0W1wicmV0dXJuXCJdKCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAoZGlkRXJyKSB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7XG4gIGlmICghbykgcmV0dXJuO1xuICBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xuICB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7XG4gIGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7XG4gIGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pO1xuICBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG59XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7XG4gIGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoO1xuXG4gIGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykge1xuICAgIGFycjJbaV0gPSBhcnJbaV07XG4gIH1cblxuICByZXR1cm4gYXJyMjtcbn1cblxudmFyIHJlZlByb3BzID0gWyd0eXBlJywgJ3NvdXJjZScsICdzb3VyY2UtbGF5ZXInLCAnbWluem9vbScsICdtYXh6b29tJywgJ2ZpbHRlcicsICdsYXlvdXQnXTtcbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVTdHlsZShzdHlsZSkge1xuICBpZiAoIXN0eWxlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAodHlwZW9mIHN0eWxlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBzdHlsZTtcbiAgfVxuXG4gIGlmIChzdHlsZS50b0pTKSB7XG4gICAgc3R5bGUgPSBzdHlsZS50b0pTKCk7XG4gIH1cblxuICB2YXIgbGF5ZXJJbmRleCA9IHt9O1xuXG4gIHZhciBfaXRlcmF0b3IgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcihzdHlsZS5sYXllcnMpLFxuICAgICAgX3N0ZXA7XG5cbiAgdHJ5IHtcbiAgICBmb3IgKF9pdGVyYXRvci5zKCk7ICEoX3N0ZXAgPSBfaXRlcmF0b3IubigpKS5kb25lOykge1xuICAgICAgdmFyIGxheWVyID0gX3N0ZXAudmFsdWU7XG4gICAgICBsYXllckluZGV4W2xheWVyLmlkXSA9IGxheWVyO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgX2l0ZXJhdG9yLmUoZXJyKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBfaXRlcmF0b3IuZigpO1xuICB9XG5cbiAgdmFyIGxheWVycyA9IHN0eWxlLmxheWVycy5tYXAoZnVuY3Rpb24gKGxheWVyKSB7XG4gICAgdmFyIGxheWVyUmVmID0gbGF5ZXJJbmRleFtsYXllci5yZWZdO1xuICAgIHZhciBub3JtYWxpemVkTGF5ZXIgPSBudWxsO1xuXG4gICAgaWYgKCdpbnRlcmFjdGl2ZScgaW4gbGF5ZXIpIHtcbiAgICAgIG5vcm1hbGl6ZWRMYXllciA9IF9vYmplY3RTcHJlYWQoe30sIGxheWVyKTtcbiAgICAgIGRlbGV0ZSBub3JtYWxpemVkTGF5ZXIuaW50ZXJhY3RpdmU7XG4gICAgfVxuXG4gICAgaWYgKGxheWVyUmVmKSB7XG4gICAgICBub3JtYWxpemVkTGF5ZXIgPSBub3JtYWxpemVkTGF5ZXIgfHwgX29iamVjdFNwcmVhZCh7fSwgbGF5ZXIpO1xuICAgICAgZGVsZXRlIG5vcm1hbGl6ZWRMYXllci5yZWY7XG5cbiAgICAgIHZhciBfaXRlcmF0b3IyID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIocmVmUHJvcHMpLFxuICAgICAgICAgIF9zdGVwMjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgZm9yIChfaXRlcmF0b3IyLnMoKTsgIShfc3RlcDIgPSBfaXRlcmF0b3IyLm4oKSkuZG9uZTspIHtcbiAgICAgICAgICB2YXIgcHJvcE5hbWUgPSBfc3RlcDIudmFsdWU7XG5cbiAgICAgICAgICBpZiAocHJvcE5hbWUgaW4gbGF5ZXJSZWYpIHtcbiAgICAgICAgICAgIG5vcm1hbGl6ZWRMYXllcltwcm9wTmFtZV0gPSBsYXllclJlZltwcm9wTmFtZV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgX2l0ZXJhdG9yMi5lKGVycik7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBfaXRlcmF0b3IyLmYoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbm9ybWFsaXplZExheWVyIHx8IGxheWVyO1xuICB9KTtcbiAgcmV0dXJuIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgc3R5bGUpLCB7fSwge1xuICAgIGxheWVyczogbGF5ZXJzXG4gIH0pO1xufSIsImltcG9ydCBfY2xhc3NDYWxsQ2hlY2sgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NsYXNzQ2FsbENoZWNrXCI7XG5pbXBvcnQgX2NyZWF0ZUNsYXNzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jcmVhdGVDbGFzc1wiO1xuaW1wb3J0IF9kZWZpbmVQcm9wZXJ0eSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHlcIjtcbmltcG9ydCAqIGFzIFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IGRvY3VtZW50IH0gZnJvbSAnLi4vdXRpbHMvZ2xvYmFscyc7XG5pbXBvcnQgeyBub3JtYWxpemVTdHlsZSB9IGZyb20gJy4uL3V0aWxzL3N0eWxlLXV0aWxzJztcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbmZ1bmN0aW9uIGRlZmF1bHRPbkVycm9yKGV2ZW50KSB7XG4gIGlmIChldmVudCkge1xuICAgIGNvbnNvbGUuZXJyb3IoZXZlbnQuZXJyb3IpO1xuICB9XG59XG5cbnZhciBwcm9wVHlwZXMgPSB7XG4gIGNvbnRhaW5lcjogUHJvcFR5cGVzLm9iamVjdCxcbiAgZ2w6IFByb3BUeXBlcy5vYmplY3QsXG4gIG1hcGJveEFwaUFjY2Vzc1Rva2VuOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBtYXBib3hBcGlVcmw6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGF0dHJpYnV0aW9uQ29udHJvbDogUHJvcFR5cGVzLmJvb2wsXG4gIHByZXNlcnZlRHJhd2luZ0J1ZmZlcjogUHJvcFR5cGVzLmJvb2wsXG4gIHJldXNlTWFwczogUHJvcFR5cGVzLmJvb2wsXG4gIHRyYW5zZm9ybVJlcXVlc3Q6IFByb3BUeXBlcy5mdW5jLFxuICBtYXBPcHRpb25zOiBQcm9wVHlwZXMub2JqZWN0LFxuICBtYXBTdHlsZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICBwcmV2ZW50U3R5bGVEaWZmaW5nOiBQcm9wVHlwZXMuYm9vbCxcbiAgdmlzaWJsZTogUHJvcFR5cGVzLmJvb2wsXG4gIGFzeW5jUmVuZGVyOiBQcm9wVHlwZXMuYm9vbCxcbiAgb25Mb2FkOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25FcnJvcjogUHJvcFR5cGVzLmZ1bmMsXG4gIHdpZHRoOiBQcm9wVHlwZXMubnVtYmVyLFxuICBoZWlnaHQ6IFByb3BUeXBlcy5udW1iZXIsXG4gIHZpZXdTdGF0ZTogUHJvcFR5cGVzLm9iamVjdCxcbiAgbG9uZ2l0dWRlOiBQcm9wVHlwZXMubnVtYmVyLFxuICBsYXRpdHVkZTogUHJvcFR5cGVzLm51bWJlcixcbiAgem9vbTogUHJvcFR5cGVzLm51bWJlcixcbiAgYmVhcmluZzogUHJvcFR5cGVzLm51bWJlcixcbiAgcGl0Y2g6IFByb3BUeXBlcy5udW1iZXIsXG4gIGFsdGl0dWRlOiBQcm9wVHlwZXMubnVtYmVyXG59O1xudmFyIGRlZmF1bHRQcm9wcyA9IHtcbiAgY29udGFpbmVyOiBkb2N1bWVudC5ib2R5LFxuICBtYXBib3hBcGlBY2Nlc3NUb2tlbjogZ2V0QWNjZXNzVG9rZW4oKSxcbiAgbWFwYm94QXBpVXJsOiAnaHR0cHM6Ly9hcGkubWFwYm94LmNvbScsXG4gIHByZXNlcnZlRHJhd2luZ0J1ZmZlcjogZmFsc2UsXG4gIGF0dHJpYnV0aW9uQ29udHJvbDogdHJ1ZSxcbiAgcmV1c2VNYXBzOiBmYWxzZSxcbiAgbWFwT3B0aW9uczoge30sXG4gIG1hcFN0eWxlOiAnbWFwYm94Oi8vc3R5bGVzL21hcGJveC9saWdodC12OCcsXG4gIHByZXZlbnRTdHlsZURpZmZpbmc6IGZhbHNlLFxuICB2aXNpYmxlOiB0cnVlLFxuICBhc3luY1JlbmRlcjogZmFsc2UsXG4gIG9uTG9hZDogbm9vcCxcbiAgb25FcnJvcjogZGVmYXVsdE9uRXJyb3IsXG4gIHdpZHRoOiAwLFxuICBoZWlnaHQ6IDAsXG4gIGxvbmdpdHVkZTogMCxcbiAgbGF0aXR1ZGU6IDAsXG4gIHpvb206IDAsXG4gIGJlYXJpbmc6IDAsXG4gIHBpdGNoOiAwLFxuICBhbHRpdHVkZTogMS41XG59O1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFjY2Vzc1Rva2VuKCkge1xuICB2YXIgYWNjZXNzVG9rZW4gPSBudWxsO1xuXG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cubG9jYXRpb24pIHtcbiAgICB2YXIgbWF0Y2ggPSB3aW5kb3cubG9jYXRpb24uc2VhcmNoLm1hdGNoKC9hY2Nlc3NfdG9rZW49KFteJlxcL10qKS8pO1xuICAgIGFjY2Vzc1Rva2VuID0gbWF0Y2ggJiYgbWF0Y2hbMV07XG4gIH1cblxuICBpZiAoIWFjY2Vzc1Rva2VuICYmIHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJykge1xuICAgIGFjY2Vzc1Rva2VuID0gYWNjZXNzVG9rZW4gfHwgcHJvY2Vzcy5lbnYuTWFwYm94QWNjZXNzVG9rZW4gfHwgcHJvY2Vzcy5lbnYuUkVBQ1RfQVBQX01BUEJPWF9BQ0NFU1NfVE9LRU47XG4gIH1cblxuICByZXR1cm4gYWNjZXNzVG9rZW4gfHwgJ25vLXRva2VuJztcbn1cblxuZnVuY3Rpb24gY2hlY2tQcm9wVHlwZXMocHJvcHMpIHtcbiAgdmFyIGNvbXBvbmVudCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogJ2NvbXBvbmVudCc7XG5cbiAgaWYgKHByb3BzLmRlYnVnKSB7XG4gICAgUHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzKHByb3BUeXBlcywgcHJvcHMsICdwcm9wJywgY29tcG9uZW50KTtcbiAgfVxufVxuXG52YXIgTWFwYm94ID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBNYXBib3gocHJvcHMpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIE1hcGJveCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJwcm9wc1wiLCBkZWZhdWx0UHJvcHMpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwid2lkdGhcIiwgMCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJoZWlnaHRcIiwgMCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJfZmlyZUxvYWRFdmVudFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5wcm9wcy5vbkxvYWQoe1xuICAgICAgICB0eXBlOiAnbG9hZCcsXG4gICAgICAgIHRhcmdldDogX3RoaXMuX21hcFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpZiAoIXByb3BzLm1hcGJveGdsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01hcGJveCBub3QgYXZhaWxhYmxlJyk7XG4gICAgfVxuXG4gICAgdGhpcy5tYXBib3hnbCA9IHByb3BzLm1hcGJveGdsO1xuXG4gICAgaWYgKCFNYXBib3guaW5pdGlhbGl6ZWQpIHtcbiAgICAgIE1hcGJveC5pbml0aWFsaXplZCA9IHRydWU7XG5cbiAgICAgIHRoaXMuX2NoZWNrU3R5bGVTaGVldCh0aGlzLm1hcGJveGdsLnZlcnNpb24pO1xuICAgIH1cblxuICAgIHRoaXMuX2luaXRpYWxpemUocHJvcHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKE1hcGJveCwgW3tcbiAgICBrZXk6IFwiZmluYWxpemVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZmluYWxpemUoKSB7XG4gICAgICB0aGlzLl9kZXN0cm95KCk7XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJzZXRQcm9wc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzZXRQcm9wcyhwcm9wcykge1xuICAgICAgdGhpcy5fdXBkYXRlKHRoaXMucHJvcHMsIHByb3BzKTtcblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlZHJhd1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZWRyYXcoKSB7XG4gICAgICB2YXIgbWFwID0gdGhpcy5fbWFwO1xuXG4gICAgICBpZiAobWFwLnN0eWxlKSB7XG4gICAgICAgIGlmIChtYXAuX2ZyYW1lKSB7XG4gICAgICAgICAgbWFwLl9mcmFtZS5jYW5jZWwoKTtcblxuICAgICAgICAgIG1hcC5fZnJhbWUgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgbWFwLl9yZW5kZXIoKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0TWFwXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldE1hcCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9tYXA7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIl9yZXVzZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfcmV1c2UocHJvcHMpIHtcbiAgICAgIHRoaXMuX21hcCA9IE1hcGJveC5zYXZlZE1hcDtcblxuICAgICAgdmFyIG9sZENvbnRhaW5lciA9IHRoaXMuX21hcC5nZXRDb250YWluZXIoKTtcblxuICAgICAgdmFyIG5ld0NvbnRhaW5lciA9IHByb3BzLmNvbnRhaW5lcjtcbiAgICAgIG5ld0NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCdtYXBib3hnbC1tYXAnKTtcblxuICAgICAgd2hpbGUgKG9sZENvbnRhaW5lci5jaGlsZE5vZGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgbmV3Q29udGFpbmVyLmFwcGVuZENoaWxkKG9sZENvbnRhaW5lci5jaGlsZE5vZGVzWzBdKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fbWFwLl9jb250YWluZXIgPSBuZXdDb250YWluZXI7XG4gICAgICBNYXBib3guc2F2ZWRNYXAgPSBudWxsO1xuXG4gICAgICBpZiAocHJvcHMubWFwU3R5bGUpIHtcbiAgICAgICAgdGhpcy5fbWFwLnNldFN0eWxlKG5vcm1hbGl6ZVN0eWxlKHByb3BzLm1hcFN0eWxlKSwge1xuICAgICAgICAgIGRpZmY6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fbWFwLmlzU3R5bGVMb2FkZWQoKSkge1xuICAgICAgICB0aGlzLl9maXJlTG9hZEV2ZW50KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9tYXAub25jZSgnc3R5bGVkYXRhJywgdGhpcy5fZmlyZUxvYWRFdmVudCk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIl9jcmVhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2NyZWF0ZShwcm9wcykge1xuICAgICAgaWYgKHByb3BzLnJldXNlTWFwcyAmJiBNYXBib3guc2F2ZWRNYXApIHtcbiAgICAgICAgdGhpcy5fcmV1c2UocHJvcHMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHByb3BzLmdsKSB7XG4gICAgICAgICAgdmFyIGdldENvbnRleHQgPSBIVE1MQ2FudmFzRWxlbWVudC5wcm90b3R5cGUuZ2V0Q29udGV4dDtcblxuICAgICAgICAgIEhUTUxDYW52YXNFbGVtZW50LnByb3RvdHlwZS5nZXRDb250ZXh0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgSFRNTENhbnZhc0VsZW1lbnQucHJvdG90eXBlLmdldENvbnRleHQgPSBnZXRDb250ZXh0O1xuICAgICAgICAgICAgcmV0dXJuIHByb3BzLmdsO1xuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbWFwT3B0aW9ucyA9IHtcbiAgICAgICAgICBjb250YWluZXI6IHByb3BzLmNvbnRhaW5lcixcbiAgICAgICAgICBjZW50ZXI6IFswLCAwXSxcbiAgICAgICAgICB6b29tOiA4LFxuICAgICAgICAgIHBpdGNoOiAwLFxuICAgICAgICAgIGJlYXJpbmc6IDAsXG4gICAgICAgICAgbWF4Wm9vbTogMjQsXG4gICAgICAgICAgc3R5bGU6IG5vcm1hbGl6ZVN0eWxlKHByb3BzLm1hcFN0eWxlKSxcbiAgICAgICAgICBpbnRlcmFjdGl2ZTogZmFsc2UsXG4gICAgICAgICAgdHJhY2tSZXNpemU6IGZhbHNlLFxuICAgICAgICAgIGF0dHJpYnV0aW9uQ29udHJvbDogcHJvcHMuYXR0cmlidXRpb25Db250cm9sLFxuICAgICAgICAgIHByZXNlcnZlRHJhd2luZ0J1ZmZlcjogcHJvcHMucHJlc2VydmVEcmF3aW5nQnVmZmVyXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHByb3BzLnRyYW5zZm9ybVJlcXVlc3QpIHtcbiAgICAgICAgICBtYXBPcHRpb25zLnRyYW5zZm9ybVJlcXVlc3QgPSBwcm9wcy50cmFuc2Zvcm1SZXF1ZXN0O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbWFwID0gbmV3IHRoaXMubWFwYm94Z2wuTWFwKE9iamVjdC5hc3NpZ24oe30sIG1hcE9wdGlvbnMsIHByb3BzLm1hcE9wdGlvbnMpKTtcblxuICAgICAgICB0aGlzLl9tYXAub25jZSgnbG9hZCcsIHByb3BzLm9uTG9hZCk7XG5cbiAgICAgICAgdGhpcy5fbWFwLm9uKCdlcnJvcicsIHByb3BzLm9uRXJyb3IpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiX2Rlc3Ryb3lcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2Rlc3Ryb3koKSB7XG4gICAgICBpZiAoIXRoaXMuX21hcCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghTWFwYm94LnNhdmVkTWFwKSB7XG4gICAgICAgIE1hcGJveC5zYXZlZE1hcCA9IHRoaXMuX21hcDtcblxuICAgICAgICB0aGlzLl9tYXAub2ZmKCdsb2FkJywgdGhpcy5wcm9wcy5vbkxvYWQpO1xuXG4gICAgICAgIHRoaXMuX21hcC5vZmYoJ2Vycm9yJywgdGhpcy5wcm9wcy5vbkVycm9yKTtcblxuICAgICAgICB0aGlzLl9tYXAub2ZmKCdzdHlsZWRhdGEnLCB0aGlzLl9maXJlTG9hZEV2ZW50KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX21hcC5yZW1vdmUoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fbWFwID0gbnVsbDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiX2luaXRpYWxpemVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2luaXRpYWxpemUocHJvcHMpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICBwcm9wcyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRQcm9wcywgcHJvcHMpO1xuICAgICAgY2hlY2tQcm9wVHlwZXMocHJvcHMsICdNYXBib3gnKTtcbiAgICAgIHRoaXMubWFwYm94Z2wuYWNjZXNzVG9rZW4gPSBwcm9wcy5tYXBib3hBcGlBY2Nlc3NUb2tlbiB8fCBkZWZhdWx0UHJvcHMubWFwYm94QXBpQWNjZXNzVG9rZW47XG4gICAgICB0aGlzLm1hcGJveGdsLmJhc2VBcGlVcmwgPSBwcm9wcy5tYXBib3hBcGlVcmw7XG5cbiAgICAgIHRoaXMuX2NyZWF0ZShwcm9wcyk7XG5cbiAgICAgIHZhciBfcHJvcHMgPSBwcm9wcyxcbiAgICAgICAgICBjb250YWluZXIgPSBfcHJvcHMuY29udGFpbmVyO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbnRhaW5lciwgJ29mZnNldFdpZHRoJywge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXMyLndpZHRoO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb250YWluZXIsICdjbGllbnRXaWR0aCcsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgcmV0dXJuIF90aGlzMi53aWR0aDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29udGFpbmVyLCAnb2Zmc2V0SGVpZ2h0Jywge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXMyLmhlaWdodDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29udGFpbmVyLCAnY2xpZW50SGVpZ2h0Jywge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXMyLmhlaWdodDtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHZhciBjYW52YXMgPSB0aGlzLl9tYXAuZ2V0Q2FudmFzKCk7XG5cbiAgICAgIGlmIChjYW52YXMpIHtcbiAgICAgICAgY2FudmFzLnN0eWxlLm91dGxpbmUgPSAnbm9uZSc7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3VwZGF0ZU1hcFZpZXdwb3J0KHt9LCBwcm9wcyk7XG5cbiAgICAgIHRoaXMuX3VwZGF0ZU1hcFNpemUoe30sIHByb3BzKTtcblxuICAgICAgdGhpcy5wcm9wcyA9IHByb3BzO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJfdXBkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF91cGRhdGUob2xkUHJvcHMsIG5ld1Byb3BzKSB7XG4gICAgICBpZiAoIXRoaXMuX21hcCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIG5ld1Byb3BzID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5wcm9wcywgbmV3UHJvcHMpO1xuICAgICAgY2hlY2tQcm9wVHlwZXMobmV3UHJvcHMsICdNYXBib3gnKTtcblxuICAgICAgdmFyIHZpZXdwb3J0Q2hhbmdlZCA9IHRoaXMuX3VwZGF0ZU1hcFZpZXdwb3J0KG9sZFByb3BzLCBuZXdQcm9wcyk7XG5cbiAgICAgIHZhciBzaXplQ2hhbmdlZCA9IHRoaXMuX3VwZGF0ZU1hcFNpemUob2xkUHJvcHMsIG5ld1Byb3BzKTtcblxuICAgICAgdGhpcy5fdXBkYXRlTWFwU3R5bGUob2xkUHJvcHMsIG5ld1Byb3BzKTtcblxuICAgICAgaWYgKCFuZXdQcm9wcy5hc3luY1JlbmRlciAmJiAodmlld3BvcnRDaGFuZ2VkIHx8IHNpemVDaGFuZ2VkKSkge1xuICAgICAgICB0aGlzLnJlZHJhdygpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnByb3BzID0gbmV3UHJvcHM7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIl91cGRhdGVNYXBTdHlsZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfdXBkYXRlTWFwU3R5bGUob2xkUHJvcHMsIG5ld1Byb3BzKSB7XG4gICAgICB2YXIgc3R5bGVDaGFuZ2VkID0gb2xkUHJvcHMubWFwU3R5bGUgIT09IG5ld1Byb3BzLm1hcFN0eWxlO1xuXG4gICAgICBpZiAoc3R5bGVDaGFuZ2VkKSB7XG4gICAgICAgIHRoaXMuX21hcC5zZXRTdHlsZShub3JtYWxpemVTdHlsZShuZXdQcm9wcy5tYXBTdHlsZSksIHtcbiAgICAgICAgICBkaWZmOiAhbmV3UHJvcHMucHJldmVudFN0eWxlRGlmZmluZ1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiX3VwZGF0ZU1hcFNpemVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gX3VwZGF0ZU1hcFNpemUob2xkUHJvcHMsIG5ld1Byb3BzKSB7XG4gICAgICB2YXIgc2l6ZUNoYW5nZWQgPSBvbGRQcm9wcy53aWR0aCAhPT0gbmV3UHJvcHMud2lkdGggfHwgb2xkUHJvcHMuaGVpZ2h0ICE9PSBuZXdQcm9wcy5oZWlnaHQ7XG5cbiAgICAgIGlmIChzaXplQ2hhbmdlZCkge1xuICAgICAgICB0aGlzLndpZHRoID0gbmV3UHJvcHMud2lkdGg7XG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gbmV3UHJvcHMuaGVpZ2h0O1xuXG4gICAgICAgIHRoaXMuX21hcC5yZXNpemUoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNpemVDaGFuZ2VkO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJfdXBkYXRlTWFwVmlld3BvcnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gX3VwZGF0ZU1hcFZpZXdwb3J0KG9sZFByb3BzLCBuZXdQcm9wcykge1xuICAgICAgdmFyIG9sZFZpZXdTdGF0ZSA9IHRoaXMuX2dldFZpZXdTdGF0ZShvbGRQcm9wcyk7XG5cbiAgICAgIHZhciBuZXdWaWV3U3RhdGUgPSB0aGlzLl9nZXRWaWV3U3RhdGUobmV3UHJvcHMpO1xuXG4gICAgICB2YXIgdmlld3BvcnRDaGFuZ2VkID0gbmV3Vmlld1N0YXRlLmxhdGl0dWRlICE9PSBvbGRWaWV3U3RhdGUubGF0aXR1ZGUgfHwgbmV3Vmlld1N0YXRlLmxvbmdpdHVkZSAhPT0gb2xkVmlld1N0YXRlLmxvbmdpdHVkZSB8fCBuZXdWaWV3U3RhdGUuem9vbSAhPT0gb2xkVmlld1N0YXRlLnpvb20gfHwgbmV3Vmlld1N0YXRlLnBpdGNoICE9PSBvbGRWaWV3U3RhdGUucGl0Y2ggfHwgbmV3Vmlld1N0YXRlLmJlYXJpbmcgIT09IG9sZFZpZXdTdGF0ZS5iZWFyaW5nIHx8IG5ld1ZpZXdTdGF0ZS5hbHRpdHVkZSAhPT0gb2xkVmlld1N0YXRlLmFsdGl0dWRlO1xuXG4gICAgICBpZiAodmlld3BvcnRDaGFuZ2VkKSB7XG4gICAgICAgIHRoaXMuX21hcC5qdW1wVG8odGhpcy5fdmlld1N0YXRlVG9NYXBib3hQcm9wcyhuZXdWaWV3U3RhdGUpKTtcblxuICAgICAgICBpZiAobmV3Vmlld1N0YXRlLmFsdGl0dWRlICE9PSBvbGRWaWV3U3RhdGUuYWx0aXR1ZGUpIHtcbiAgICAgICAgICB0aGlzLl9tYXAudHJhbnNmb3JtLmFsdGl0dWRlID0gbmV3Vmlld1N0YXRlLmFsdGl0dWRlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB2aWV3cG9ydENoYW5nZWQ7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIl9nZXRWaWV3U3RhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2dldFZpZXdTdGF0ZShwcm9wcykge1xuICAgICAgdmFyIF9yZWYgPSBwcm9wcy52aWV3U3RhdGUgfHwgcHJvcHMsXG4gICAgICAgICAgbG9uZ2l0dWRlID0gX3JlZi5sb25naXR1ZGUsXG4gICAgICAgICAgbGF0aXR1ZGUgPSBfcmVmLmxhdGl0dWRlLFxuICAgICAgICAgIHpvb20gPSBfcmVmLnpvb20sXG4gICAgICAgICAgX3JlZiRwaXRjaCA9IF9yZWYucGl0Y2gsXG4gICAgICAgICAgcGl0Y2ggPSBfcmVmJHBpdGNoID09PSB2b2lkIDAgPyAwIDogX3JlZiRwaXRjaCxcbiAgICAgICAgICBfcmVmJGJlYXJpbmcgPSBfcmVmLmJlYXJpbmcsXG4gICAgICAgICAgYmVhcmluZyA9IF9yZWYkYmVhcmluZyA9PT0gdm9pZCAwID8gMCA6IF9yZWYkYmVhcmluZyxcbiAgICAgICAgICBfcmVmJGFsdGl0dWRlID0gX3JlZi5hbHRpdHVkZSxcbiAgICAgICAgICBhbHRpdHVkZSA9IF9yZWYkYWx0aXR1ZGUgPT09IHZvaWQgMCA/IDEuNSA6IF9yZWYkYWx0aXR1ZGU7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxvbmdpdHVkZTogbG9uZ2l0dWRlLFxuICAgICAgICBsYXRpdHVkZTogbGF0aXR1ZGUsXG4gICAgICAgIHpvb206IHpvb20sXG4gICAgICAgIHBpdGNoOiBwaXRjaCxcbiAgICAgICAgYmVhcmluZzogYmVhcmluZyxcbiAgICAgICAgYWx0aXR1ZGU6IGFsdGl0dWRlXG4gICAgICB9O1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJfY2hlY2tTdHlsZVNoZWV0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9jaGVja1N0eWxlU2hlZXQoKSB7XG4gICAgICB2YXIgbWFwYm94VmVyc2lvbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogJzAuNDcuMCc7XG5cbiAgICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIHRlc3RFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIHRlc3RFbGVtZW50LmNsYXNzTmFtZSA9ICdtYXBib3hnbC1tYXAnO1xuICAgICAgICB0ZXN0RWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRlc3RFbGVtZW50KTtcbiAgICAgICAgdmFyIGlzQ3NzTG9hZGVkID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUodGVzdEVsZW1lbnQpLnBvc2l0aW9uICE9PSAnc3RhdGljJztcblxuICAgICAgICBpZiAoIWlzQ3NzTG9hZGVkKSB7XG4gICAgICAgICAgdmFyIGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaW5rJyk7XG4gICAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ3JlbCcsICdzdHlsZXNoZWV0Jyk7XG4gICAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAndGV4dC9jc3MnKTtcbiAgICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZSgnaHJlZicsIFwiaHR0cHM6Ly9hcGkudGlsZXMubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvdlwiLmNvbmNhdChtYXBib3hWZXJzaW9uLCBcIi9tYXBib3gtZ2wuY3NzXCIpKTtcbiAgICAgICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGxpbmspO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge31cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiX3ZpZXdTdGF0ZVRvTWFwYm94UHJvcHNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gX3ZpZXdTdGF0ZVRvTWFwYm94UHJvcHModmlld1N0YXRlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjZW50ZXI6IFt2aWV3U3RhdGUubG9uZ2l0dWRlLCB2aWV3U3RhdGUubGF0aXR1ZGVdLFxuICAgICAgICB6b29tOiB2aWV3U3RhdGUuem9vbSxcbiAgICAgICAgYmVhcmluZzogdmlld1N0YXRlLmJlYXJpbmcsXG4gICAgICAgIHBpdGNoOiB2aWV3U3RhdGUucGl0Y2hcbiAgICAgIH07XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIE1hcGJveDtcbn0oKTtcblxuX2RlZmluZVByb3BlcnR5KE1hcGJveCwgXCJpbml0aWFsaXplZFwiLCBmYWxzZSk7XG5cbl9kZWZpbmVQcm9wZXJ0eShNYXBib3gsIFwicHJvcFR5cGVzXCIsIHByb3BUeXBlcyk7XG5cbl9kZWZpbmVQcm9wZXJ0eShNYXBib3gsIFwiZGVmYXVsdFByb3BzXCIsIGRlZmF1bHRQcm9wcyk7XG5cbl9kZWZpbmVQcm9wZXJ0eShNYXBib3gsIFwic2F2ZWRNYXBcIiwgbnVsbCk7XG5cbmV4cG9ydCB7IE1hcGJveCBhcyBkZWZhdWx0IH07IiwidmFyIEVQU0lMT04gPSAxZS03O1xuXG5mdW5jdGlvbiBpc0FycmF5KHZhbHVlKSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKSB8fCBBcnJheUJ1ZmZlci5pc1ZpZXcodmFsdWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXF1YWxzKGEsIGIpIHtcbiAgaWYgKGEgPT09IGIpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChpc0FycmF5KGEpICYmIGlzQXJyYXkoYikpIHtcbiAgICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhLmxlbmd0aDsgKytpKSB7XG4gICAgICBpZiAoIWVxdWFscyhhW2ldLCBiW2ldKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gTWF0aC5hYnMoYSAtIGIpIDw9IEVQU0lMT047XG59XG5leHBvcnQgZnVuY3Rpb24gY2xhbXAodmFsdWUsIG1pbiwgbWF4KSB7XG4gIHJldHVybiBNYXRoLm1heChtaW4sIE1hdGgubWluKG1heCwgdmFsdWUpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBsZXJwKGEsIGIsIHQpIHtcbiAgaWYgKGlzQXJyYXkoYSkpIHtcbiAgICByZXR1cm4gYS5tYXAoZnVuY3Rpb24gKGFpLCBpKSB7XG4gICAgICByZXR1cm4gbGVycChhaSwgYltpXSwgdCk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gdCAqIGIgKyAoMSAtIHQpICogYTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhc3NlcnQoY29uZGl0aW9uLCBtZXNzYWdlKSB7XG4gIGlmICghY29uZGl0aW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UgfHwgJ3JlYWN0LW1hcC1nbDogYXNzZXJ0aW9uIGZhaWxlZC4nKTtcbiAgfVxufSIsImltcG9ydCBfZGVmaW5lUHJvcGVydHkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5XCI7XG5pbXBvcnQgX3NsaWNlZFRvQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXlcIjtcbmltcG9ydCBfY2xhc3NDYWxsQ2hlY2sgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NsYXNzQ2FsbENoZWNrXCI7XG5pbXBvcnQgX2NyZWF0ZUNsYXNzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jcmVhdGVDbGFzc1wiO1xuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHtcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXG4gIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7XG4gICAgaWYgKGVudW1lcmFibGVPbmx5KSBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkge1xuICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7XG4gICAgfSk7XG4gICAga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpO1xuICB9XG5cbiAgcmV0dXJuIGtleXM7XG59XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307XG5cbiAgICBpZiAoaSAlIDIpIHtcbiAgICAgIG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbmltcG9ydCBXZWJNZXJjYXRvclZpZXdwb3J0LCB7IG5vcm1hbGl6ZVZpZXdwb3J0UHJvcHMgfSBmcm9tICd2aWV3cG9ydC1tZXJjYXRvci1wcm9qZWN0JztcbmltcG9ydCB7IGNsYW1wIH0gZnJvbSAnLi9tYXRoLXV0aWxzJztcbmltcG9ydCBhc3NlcnQgZnJvbSAnLi9hc3NlcnQnO1xuZXhwb3J0IHZhciBNQVBCT1hfTElNSVRTID0ge1xuICBtaW5ab29tOiAwLFxuICBtYXhab29tOiAyNCxcbiAgbWluUGl0Y2g6IDAsXG4gIG1heFBpdGNoOiA4NVxufTtcbnZhciBERUZBVUxUX1NUQVRFID0ge1xuICBwaXRjaDogMCxcbiAgYmVhcmluZzogMCxcbiAgYWx0aXR1ZGU6IDEuNVxufTtcbnZhciBQSVRDSF9NT1VTRV9USFJFU0hPTEQgPSA1O1xudmFyIFBJVENIX0FDQ0VMID0gMS4yO1xuXG52YXIgTWFwU3RhdGUgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIE1hcFN0YXRlKF9yZWYpIHtcbiAgICB2YXIgd2lkdGggPSBfcmVmLndpZHRoLFxuICAgICAgICBoZWlnaHQgPSBfcmVmLmhlaWdodCxcbiAgICAgICAgbGF0aXR1ZGUgPSBfcmVmLmxhdGl0dWRlLFxuICAgICAgICBsb25naXR1ZGUgPSBfcmVmLmxvbmdpdHVkZSxcbiAgICAgICAgem9vbSA9IF9yZWYuem9vbSxcbiAgICAgICAgX3JlZiRiZWFyaW5nID0gX3JlZi5iZWFyaW5nLFxuICAgICAgICBiZWFyaW5nID0gX3JlZiRiZWFyaW5nID09PSB2b2lkIDAgPyBERUZBVUxUX1NUQVRFLmJlYXJpbmcgOiBfcmVmJGJlYXJpbmcsXG4gICAgICAgIF9yZWYkcGl0Y2ggPSBfcmVmLnBpdGNoLFxuICAgICAgICBwaXRjaCA9IF9yZWYkcGl0Y2ggPT09IHZvaWQgMCA/IERFRkFVTFRfU1RBVEUucGl0Y2ggOiBfcmVmJHBpdGNoLFxuICAgICAgICBfcmVmJGFsdGl0dWRlID0gX3JlZi5hbHRpdHVkZSxcbiAgICAgICAgYWx0aXR1ZGUgPSBfcmVmJGFsdGl0dWRlID09PSB2b2lkIDAgPyBERUZBVUxUX1NUQVRFLmFsdGl0dWRlIDogX3JlZiRhbHRpdHVkZSxcbiAgICAgICAgX3JlZiRtYXhab29tID0gX3JlZi5tYXhab29tLFxuICAgICAgICBtYXhab29tID0gX3JlZiRtYXhab29tID09PSB2b2lkIDAgPyBNQVBCT1hfTElNSVRTLm1heFpvb20gOiBfcmVmJG1heFpvb20sXG4gICAgICAgIF9yZWYkbWluWm9vbSA9IF9yZWYubWluWm9vbSxcbiAgICAgICAgbWluWm9vbSA9IF9yZWYkbWluWm9vbSA9PT0gdm9pZCAwID8gTUFQQk9YX0xJTUlUUy5taW5ab29tIDogX3JlZiRtaW5ab29tLFxuICAgICAgICBfcmVmJG1heFBpdGNoID0gX3JlZi5tYXhQaXRjaCxcbiAgICAgICAgbWF4UGl0Y2ggPSBfcmVmJG1heFBpdGNoID09PSB2b2lkIDAgPyBNQVBCT1hfTElNSVRTLm1heFBpdGNoIDogX3JlZiRtYXhQaXRjaCxcbiAgICAgICAgX3JlZiRtaW5QaXRjaCA9IF9yZWYubWluUGl0Y2gsXG4gICAgICAgIG1pblBpdGNoID0gX3JlZiRtaW5QaXRjaCA9PT0gdm9pZCAwID8gTUFQQk9YX0xJTUlUUy5taW5QaXRjaCA6IF9yZWYkbWluUGl0Y2gsXG4gICAgICAgIHRyYW5zaXRpb25EdXJhdGlvbiA9IF9yZWYudHJhbnNpdGlvbkR1cmF0aW9uLFxuICAgICAgICB0cmFuc2l0aW9uRWFzaW5nID0gX3JlZi50cmFuc2l0aW9uRWFzaW5nLFxuICAgICAgICB0cmFuc2l0aW9uSW50ZXJwb2xhdG9yID0gX3JlZi50cmFuc2l0aW9uSW50ZXJwb2xhdG9yLFxuICAgICAgICB0cmFuc2l0aW9uSW50ZXJydXB0aW9uID0gX3JlZi50cmFuc2l0aW9uSW50ZXJydXB0aW9uLFxuICAgICAgICBzdGFydFBhbkxuZ0xhdCA9IF9yZWYuc3RhcnRQYW5MbmdMYXQsXG4gICAgICAgIHN0YXJ0Wm9vbUxuZ0xhdCA9IF9yZWYuc3RhcnRab29tTG5nTGF0LFxuICAgICAgICBzdGFydFJvdGF0ZVBvcyA9IF9yZWYuc3RhcnRSb3RhdGVQb3MsXG4gICAgICAgIHN0YXJ0QmVhcmluZyA9IF9yZWYuc3RhcnRCZWFyaW5nLFxuICAgICAgICBzdGFydFBpdGNoID0gX3JlZi5zdGFydFBpdGNoLFxuICAgICAgICBzdGFydFpvb20gPSBfcmVmLnN0YXJ0Wm9vbTtcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBNYXBTdGF0ZSk7XG5cbiAgICBhc3NlcnQoTnVtYmVyLmlzRmluaXRlKHdpZHRoKSwgJ2B3aWR0aGAgbXVzdCBiZSBzdXBwbGllZCcpO1xuICAgIGFzc2VydChOdW1iZXIuaXNGaW5pdGUoaGVpZ2h0KSwgJ2BoZWlnaHRgIG11c3QgYmUgc3VwcGxpZWQnKTtcbiAgICBhc3NlcnQoTnVtYmVyLmlzRmluaXRlKGxvbmdpdHVkZSksICdgbG9uZ2l0dWRlYCBtdXN0IGJlIHN1cHBsaWVkJyk7XG4gICAgYXNzZXJ0KE51bWJlci5pc0Zpbml0ZShsYXRpdHVkZSksICdgbGF0aXR1ZGVgIG11c3QgYmUgc3VwcGxpZWQnKTtcbiAgICBhc3NlcnQoTnVtYmVyLmlzRmluaXRlKHpvb20pLCAnYHpvb21gIG11c3QgYmUgc3VwcGxpZWQnKTtcbiAgICB0aGlzLl92aWV3cG9ydFByb3BzID0gdGhpcy5fYXBwbHlDb25zdHJhaW50cyh7XG4gICAgICB3aWR0aDogd2lkdGgsXG4gICAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICAgIGxhdGl0dWRlOiBsYXRpdHVkZSxcbiAgICAgIGxvbmdpdHVkZTogbG9uZ2l0dWRlLFxuICAgICAgem9vbTogem9vbSxcbiAgICAgIGJlYXJpbmc6IGJlYXJpbmcsXG4gICAgICBwaXRjaDogcGl0Y2gsXG4gICAgICBhbHRpdHVkZTogYWx0aXR1ZGUsXG4gICAgICBtYXhab29tOiBtYXhab29tLFxuICAgICAgbWluWm9vbTogbWluWm9vbSxcbiAgICAgIG1heFBpdGNoOiBtYXhQaXRjaCxcbiAgICAgIG1pblBpdGNoOiBtaW5QaXRjaCxcbiAgICAgIHRyYW5zaXRpb25EdXJhdGlvbjogdHJhbnNpdGlvbkR1cmF0aW9uLFxuICAgICAgdHJhbnNpdGlvbkVhc2luZzogdHJhbnNpdGlvbkVhc2luZyxcbiAgICAgIHRyYW5zaXRpb25JbnRlcnBvbGF0b3I6IHRyYW5zaXRpb25JbnRlcnBvbGF0b3IsXG4gICAgICB0cmFuc2l0aW9uSW50ZXJydXB0aW9uOiB0cmFuc2l0aW9uSW50ZXJydXB0aW9uXG4gICAgfSk7XG4gICAgdGhpcy5fc3RhdGUgPSB7XG4gICAgICBzdGFydFBhbkxuZ0xhdDogc3RhcnRQYW5MbmdMYXQsXG4gICAgICBzdGFydFpvb21MbmdMYXQ6IHN0YXJ0Wm9vbUxuZ0xhdCxcbiAgICAgIHN0YXJ0Um90YXRlUG9zOiBzdGFydFJvdGF0ZVBvcyxcbiAgICAgIHN0YXJ0QmVhcmluZzogc3RhcnRCZWFyaW5nLFxuICAgICAgc3RhcnRQaXRjaDogc3RhcnRQaXRjaCxcbiAgICAgIHN0YXJ0Wm9vbTogc3RhcnRab29tXG4gICAgfTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhNYXBTdGF0ZSwgW3tcbiAgICBrZXk6IFwiZ2V0Vmlld3BvcnRQcm9wc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRWaWV3cG9ydFByb3BzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3ZpZXdwb3J0UHJvcHM7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldFN0YXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFN0YXRlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJwYW5TdGFydFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwYW5TdGFydChfcmVmMikge1xuICAgICAgdmFyIHBvcyA9IF9yZWYyLnBvcztcbiAgICAgIHJldHVybiB0aGlzLl9nZXRVcGRhdGVkTWFwU3RhdGUoe1xuICAgICAgICBzdGFydFBhbkxuZ0xhdDogdGhpcy5fdW5wcm9qZWN0KHBvcylcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJwYW5cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcGFuKF9yZWYzKSB7XG4gICAgICB2YXIgcG9zID0gX3JlZjMucG9zLFxuICAgICAgICAgIHN0YXJ0UG9zID0gX3JlZjMuc3RhcnRQb3M7XG5cbiAgICAgIHZhciBzdGFydFBhbkxuZ0xhdCA9IHRoaXMuX3N0YXRlLnN0YXJ0UGFuTG5nTGF0IHx8IHRoaXMuX3VucHJvamVjdChzdGFydFBvcyk7XG5cbiAgICAgIGlmICghc3RhcnRQYW5MbmdMYXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG5cbiAgICAgIHZhciBfdGhpcyRfY2FsY3VsYXRlTmV3TG4gPSB0aGlzLl9jYWxjdWxhdGVOZXdMbmdMYXQoe1xuICAgICAgICBzdGFydFBhbkxuZ0xhdDogc3RhcnRQYW5MbmdMYXQsXG4gICAgICAgIHBvczogcG9zXG4gICAgICB9KSxcbiAgICAgICAgICBfdGhpcyRfY2FsY3VsYXRlTmV3TG4yID0gX3NsaWNlZFRvQXJyYXkoX3RoaXMkX2NhbGN1bGF0ZU5ld0xuLCAyKSxcbiAgICAgICAgICBsb25naXR1ZGUgPSBfdGhpcyRfY2FsY3VsYXRlTmV3TG4yWzBdLFxuICAgICAgICAgIGxhdGl0dWRlID0gX3RoaXMkX2NhbGN1bGF0ZU5ld0xuMlsxXTtcblxuICAgICAgcmV0dXJuIHRoaXMuX2dldFVwZGF0ZWRNYXBTdGF0ZSh7XG4gICAgICAgIGxvbmdpdHVkZTogbG9uZ2l0dWRlLFxuICAgICAgICBsYXRpdHVkZTogbGF0aXR1ZGVcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJwYW5FbmRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcGFuRW5kKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldFVwZGF0ZWRNYXBTdGF0ZSh7XG4gICAgICAgIHN0YXJ0UGFuTG5nTGF0OiBudWxsXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicm90YXRlU3RhcnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcm90YXRlU3RhcnQoX3JlZjQpIHtcbiAgICAgIHZhciBwb3MgPSBfcmVmNC5wb3M7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0VXBkYXRlZE1hcFN0YXRlKHtcbiAgICAgICAgc3RhcnRSb3RhdGVQb3M6IHBvcyxcbiAgICAgICAgc3RhcnRCZWFyaW5nOiB0aGlzLl92aWV3cG9ydFByb3BzLmJlYXJpbmcsXG4gICAgICAgIHN0YXJ0UGl0Y2g6IHRoaXMuX3ZpZXdwb3J0UHJvcHMucGl0Y2hcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyb3RhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcm90YXRlKF9yZWY1KSB7XG4gICAgICB2YXIgcG9zID0gX3JlZjUucG9zLFxuICAgICAgICAgIF9yZWY1JGRlbHRhQW5nbGVYID0gX3JlZjUuZGVsdGFBbmdsZVgsXG4gICAgICAgICAgZGVsdGFBbmdsZVggPSBfcmVmNSRkZWx0YUFuZ2xlWCA9PT0gdm9pZCAwID8gMCA6IF9yZWY1JGRlbHRhQW5nbGVYLFxuICAgICAgICAgIF9yZWY1JGRlbHRhQW5nbGVZID0gX3JlZjUuZGVsdGFBbmdsZVksXG4gICAgICAgICAgZGVsdGFBbmdsZVkgPSBfcmVmNSRkZWx0YUFuZ2xlWSA9PT0gdm9pZCAwID8gMCA6IF9yZWY1JGRlbHRhQW5nbGVZO1xuICAgICAgdmFyIF90aGlzJF9zdGF0ZSA9IHRoaXMuX3N0YXRlLFxuICAgICAgICAgIHN0YXJ0Um90YXRlUG9zID0gX3RoaXMkX3N0YXRlLnN0YXJ0Um90YXRlUG9zLFxuICAgICAgICAgIHN0YXJ0QmVhcmluZyA9IF90aGlzJF9zdGF0ZS5zdGFydEJlYXJpbmcsXG4gICAgICAgICAgc3RhcnRQaXRjaCA9IF90aGlzJF9zdGF0ZS5zdGFydFBpdGNoO1xuXG4gICAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShzdGFydEJlYXJpbmcpIHx8ICFOdW1iZXIuaXNGaW5pdGUoc3RhcnRQaXRjaCkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG5cbiAgICAgIHZhciBuZXdSb3RhdGlvbjtcblxuICAgICAgaWYgKHBvcykge1xuICAgICAgICBuZXdSb3RhdGlvbiA9IHRoaXMuX2NhbGN1bGF0ZU5ld1BpdGNoQW5kQmVhcmluZyhfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHRoaXMuX2dldFJvdGF0aW9uUGFyYW1zKHBvcywgc3RhcnRSb3RhdGVQb3MpKSwge30sIHtcbiAgICAgICAgICBzdGFydEJlYXJpbmc6IHN0YXJ0QmVhcmluZyxcbiAgICAgICAgICBzdGFydFBpdGNoOiBzdGFydFBpdGNoXG4gICAgICAgIH0pKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5ld1JvdGF0aW9uID0ge1xuICAgICAgICAgIGJlYXJpbmc6IHN0YXJ0QmVhcmluZyArIGRlbHRhQW5nbGVYLFxuICAgICAgICAgIHBpdGNoOiBzdGFydFBpdGNoICsgZGVsdGFBbmdsZVlcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuX2dldFVwZGF0ZWRNYXBTdGF0ZShuZXdSb3RhdGlvbik7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJvdGF0ZUVuZFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByb3RhdGVFbmQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0VXBkYXRlZE1hcFN0YXRlKHtcbiAgICAgICAgc3RhcnRCZWFyaW5nOiBudWxsLFxuICAgICAgICBzdGFydFBpdGNoOiBudWxsXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiem9vbVN0YXJ0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHpvb21TdGFydChfcmVmNikge1xuICAgICAgdmFyIHBvcyA9IF9yZWY2LnBvcztcbiAgICAgIHJldHVybiB0aGlzLl9nZXRVcGRhdGVkTWFwU3RhdGUoe1xuICAgICAgICBzdGFydFpvb21MbmdMYXQ6IHRoaXMuX3VucHJvamVjdChwb3MpLFxuICAgICAgICBzdGFydFpvb206IHRoaXMuX3ZpZXdwb3J0UHJvcHMuem9vbVxuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInpvb21cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gem9vbShfcmVmNykge1xuICAgICAgdmFyIHBvcyA9IF9yZWY3LnBvcyxcbiAgICAgICAgICBzdGFydFBvcyA9IF9yZWY3LnN0YXJ0UG9zLFxuICAgICAgICAgIHNjYWxlID0gX3JlZjcuc2NhbGU7XG4gICAgICBhc3NlcnQoc2NhbGUgPiAwLCAnYHNjYWxlYCBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJyk7XG4gICAgICB2YXIgX3RoaXMkX3N0YXRlMiA9IHRoaXMuX3N0YXRlLFxuICAgICAgICAgIHN0YXJ0Wm9vbSA9IF90aGlzJF9zdGF0ZTIuc3RhcnRab29tLFxuICAgICAgICAgIHN0YXJ0Wm9vbUxuZ0xhdCA9IF90aGlzJF9zdGF0ZTIuc3RhcnRab29tTG5nTGF0O1xuXG4gICAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShzdGFydFpvb20pKSB7XG4gICAgICAgIHN0YXJ0Wm9vbSA9IHRoaXMuX3ZpZXdwb3J0UHJvcHMuem9vbTtcbiAgICAgICAgc3RhcnRab29tTG5nTGF0ID0gdGhpcy5fdW5wcm9qZWN0KHN0YXJ0UG9zKSB8fCB0aGlzLl91bnByb2plY3QocG9zKTtcbiAgICAgIH1cblxuICAgICAgYXNzZXJ0KHN0YXJ0Wm9vbUxuZ0xhdCwgJ2BzdGFydFpvb21MbmdMYXRgIHByb3AgaXMgcmVxdWlyZWQgJyArICdmb3Igem9vbSBiZWhhdmlvciB0byBjYWxjdWxhdGUgd2hlcmUgdG8gcG9zaXRpb24gdGhlIG1hcC4nKTtcblxuICAgICAgdmFyIHpvb20gPSB0aGlzLl9jYWxjdWxhdGVOZXdab29tKHtcbiAgICAgICAgc2NhbGU6IHNjYWxlLFxuICAgICAgICBzdGFydFpvb206IHN0YXJ0Wm9vbSB8fCAwXG4gICAgICB9KTtcblxuICAgICAgdmFyIHpvb21lZFZpZXdwb3J0ID0gbmV3IFdlYk1lcmNhdG9yVmlld3BvcnQoT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fdmlld3BvcnRQcm9wcywge1xuICAgICAgICB6b29tOiB6b29tXG4gICAgICB9KSk7XG5cbiAgICAgIHZhciBfem9vbWVkVmlld3BvcnQkZ2V0TWEgPSB6b29tZWRWaWV3cG9ydC5nZXRNYXBDZW50ZXJCeUxuZ0xhdFBvc2l0aW9uKHtcbiAgICAgICAgbG5nTGF0OiBzdGFydFpvb21MbmdMYXQsXG4gICAgICAgIHBvczogcG9zXG4gICAgICB9KSxcbiAgICAgICAgICBfem9vbWVkVmlld3BvcnQkZ2V0TWEyID0gX3NsaWNlZFRvQXJyYXkoX3pvb21lZFZpZXdwb3J0JGdldE1hLCAyKSxcbiAgICAgICAgICBsb25naXR1ZGUgPSBfem9vbWVkVmlld3BvcnQkZ2V0TWEyWzBdLFxuICAgICAgICAgIGxhdGl0dWRlID0gX3pvb21lZFZpZXdwb3J0JGdldE1hMlsxXTtcblxuICAgICAgcmV0dXJuIHRoaXMuX2dldFVwZGF0ZWRNYXBTdGF0ZSh7XG4gICAgICAgIHpvb206IHpvb20sXG4gICAgICAgIGxvbmdpdHVkZTogbG9uZ2l0dWRlLFxuICAgICAgICBsYXRpdHVkZTogbGF0aXR1ZGVcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ6b29tRW5kXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHpvb21FbmQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0VXBkYXRlZE1hcFN0YXRlKHtcbiAgICAgICAgc3RhcnRab29tTG5nTGF0OiBudWxsLFxuICAgICAgICBzdGFydFpvb206IG51bGxcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJfZ2V0VXBkYXRlZE1hcFN0YXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9nZXRVcGRhdGVkTWFwU3RhdGUobmV3UHJvcHMpIHtcbiAgICAgIHJldHVybiBuZXcgTWFwU3RhdGUoT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fdmlld3BvcnRQcm9wcywgdGhpcy5fc3RhdGUsIG5ld1Byb3BzKSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIl9hcHBseUNvbnN0cmFpbnRzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9hcHBseUNvbnN0cmFpbnRzKHByb3BzKSB7XG4gICAgICB2YXIgbWF4Wm9vbSA9IHByb3BzLm1heFpvb20sXG4gICAgICAgICAgbWluWm9vbSA9IHByb3BzLm1pblpvb20sXG4gICAgICAgICAgem9vbSA9IHByb3BzLnpvb207XG4gICAgICBwcm9wcy56b29tID0gY2xhbXAoem9vbSwgbWluWm9vbSwgbWF4Wm9vbSk7XG4gICAgICB2YXIgbWF4UGl0Y2ggPSBwcm9wcy5tYXhQaXRjaCxcbiAgICAgICAgICBtaW5QaXRjaCA9IHByb3BzLm1pblBpdGNoLFxuICAgICAgICAgIHBpdGNoID0gcHJvcHMucGl0Y2g7XG4gICAgICBwcm9wcy5waXRjaCA9IGNsYW1wKHBpdGNoLCBtaW5QaXRjaCwgbWF4UGl0Y2gpO1xuICAgICAgT2JqZWN0LmFzc2lnbihwcm9wcywgbm9ybWFsaXplVmlld3BvcnRQcm9wcyhwcm9wcykpO1xuICAgICAgcmV0dXJuIHByb3BzO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJfdW5wcm9qZWN0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF91bnByb2plY3QocG9zKSB7XG4gICAgICB2YXIgdmlld3BvcnQgPSBuZXcgV2ViTWVyY2F0b3JWaWV3cG9ydCh0aGlzLl92aWV3cG9ydFByb3BzKTtcbiAgICAgIHJldHVybiBwb3MgJiYgdmlld3BvcnQudW5wcm9qZWN0KHBvcyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIl9jYWxjdWxhdGVOZXdMbmdMYXRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2NhbGN1bGF0ZU5ld0xuZ0xhdChfcmVmOCkge1xuICAgICAgdmFyIHN0YXJ0UGFuTG5nTGF0ID0gX3JlZjguc3RhcnRQYW5MbmdMYXQsXG4gICAgICAgICAgcG9zID0gX3JlZjgucG9zO1xuICAgICAgdmFyIHZpZXdwb3J0ID0gbmV3IFdlYk1lcmNhdG9yVmlld3BvcnQodGhpcy5fdmlld3BvcnRQcm9wcyk7XG4gICAgICByZXR1cm4gdmlld3BvcnQuZ2V0TWFwQ2VudGVyQnlMbmdMYXRQb3NpdGlvbih7XG4gICAgICAgIGxuZ0xhdDogc3RhcnRQYW5MbmdMYXQsXG4gICAgICAgIHBvczogcG9zXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiX2NhbGN1bGF0ZU5ld1pvb21cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2NhbGN1bGF0ZU5ld1pvb20oX3JlZjkpIHtcbiAgICAgIHZhciBzY2FsZSA9IF9yZWY5LnNjYWxlLFxuICAgICAgICAgIHN0YXJ0Wm9vbSA9IF9yZWY5LnN0YXJ0Wm9vbTtcbiAgICAgIHZhciBfdGhpcyRfdmlld3BvcnRQcm9wcyA9IHRoaXMuX3ZpZXdwb3J0UHJvcHMsXG4gICAgICAgICAgbWF4Wm9vbSA9IF90aGlzJF92aWV3cG9ydFByb3BzLm1heFpvb20sXG4gICAgICAgICAgbWluWm9vbSA9IF90aGlzJF92aWV3cG9ydFByb3BzLm1pblpvb207XG4gICAgICB2YXIgem9vbSA9IHN0YXJ0Wm9vbSArIE1hdGgubG9nMihzY2FsZSk7XG4gICAgICByZXR1cm4gY2xhbXAoem9vbSwgbWluWm9vbSwgbWF4Wm9vbSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIl9jYWxjdWxhdGVOZXdQaXRjaEFuZEJlYXJpbmdcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2NhbGN1bGF0ZU5ld1BpdGNoQW5kQmVhcmluZyhfcmVmMTApIHtcbiAgICAgIHZhciBkZWx0YVNjYWxlWCA9IF9yZWYxMC5kZWx0YVNjYWxlWCxcbiAgICAgICAgICBkZWx0YVNjYWxlWSA9IF9yZWYxMC5kZWx0YVNjYWxlWSxcbiAgICAgICAgICBzdGFydEJlYXJpbmcgPSBfcmVmMTAuc3RhcnRCZWFyaW5nLFxuICAgICAgICAgIHN0YXJ0UGl0Y2ggPSBfcmVmMTAuc3RhcnRQaXRjaDtcbiAgICAgIGRlbHRhU2NhbGVZID0gY2xhbXAoZGVsdGFTY2FsZVksIC0xLCAxKTtcbiAgICAgIHZhciBfdGhpcyRfdmlld3BvcnRQcm9wczIgPSB0aGlzLl92aWV3cG9ydFByb3BzLFxuICAgICAgICAgIG1pblBpdGNoID0gX3RoaXMkX3ZpZXdwb3J0UHJvcHMyLm1pblBpdGNoLFxuICAgICAgICAgIG1heFBpdGNoID0gX3RoaXMkX3ZpZXdwb3J0UHJvcHMyLm1heFBpdGNoO1xuICAgICAgdmFyIGJlYXJpbmcgPSBzdGFydEJlYXJpbmcgKyAxODAgKiBkZWx0YVNjYWxlWDtcbiAgICAgIHZhciBwaXRjaCA9IHN0YXJ0UGl0Y2g7XG5cbiAgICAgIGlmIChkZWx0YVNjYWxlWSA+IDApIHtcbiAgICAgICAgcGl0Y2ggPSBzdGFydFBpdGNoICsgZGVsdGFTY2FsZVkgKiAobWF4UGl0Y2ggLSBzdGFydFBpdGNoKTtcbiAgICAgIH0gZWxzZSBpZiAoZGVsdGFTY2FsZVkgPCAwKSB7XG4gICAgICAgIHBpdGNoID0gc3RhcnRQaXRjaCAtIGRlbHRhU2NhbGVZICogKG1pblBpdGNoIC0gc3RhcnRQaXRjaCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHBpdGNoOiBwaXRjaCxcbiAgICAgICAgYmVhcmluZzogYmVhcmluZ1xuICAgICAgfTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiX2dldFJvdGF0aW9uUGFyYW1zXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9nZXRSb3RhdGlvblBhcmFtcyhwb3MsIHN0YXJ0UG9zKSB7XG4gICAgICB2YXIgZGVsdGFYID0gcG9zWzBdIC0gc3RhcnRQb3NbMF07XG4gICAgICB2YXIgZGVsdGFZID0gcG9zWzFdIC0gc3RhcnRQb3NbMV07XG4gICAgICB2YXIgY2VudGVyWSA9IHBvc1sxXTtcbiAgICAgIHZhciBzdGFydFkgPSBzdGFydFBvc1sxXTtcbiAgICAgIHZhciBfdGhpcyRfdmlld3BvcnRQcm9wczMgPSB0aGlzLl92aWV3cG9ydFByb3BzLFxuICAgICAgICAgIHdpZHRoID0gX3RoaXMkX3ZpZXdwb3J0UHJvcHMzLndpZHRoLFxuICAgICAgICAgIGhlaWdodCA9IF90aGlzJF92aWV3cG9ydFByb3BzMy5oZWlnaHQ7XG4gICAgICB2YXIgZGVsdGFTY2FsZVggPSBkZWx0YVggLyB3aWR0aDtcbiAgICAgIHZhciBkZWx0YVNjYWxlWSA9IDA7XG5cbiAgICAgIGlmIChkZWx0YVkgPiAwKSB7XG4gICAgICAgIGlmIChNYXRoLmFicyhoZWlnaHQgLSBzdGFydFkpID4gUElUQ0hfTU9VU0VfVEhSRVNIT0xEKSB7XG4gICAgICAgICAgZGVsdGFTY2FsZVkgPSBkZWx0YVkgLyAoc3RhcnRZIC0gaGVpZ2h0KSAqIFBJVENIX0FDQ0VMO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGRlbHRhWSA8IDApIHtcbiAgICAgICAgaWYgKHN0YXJ0WSA+IFBJVENIX01PVVNFX1RIUkVTSE9MRCkge1xuICAgICAgICAgIGRlbHRhU2NhbGVZID0gMSAtIGNlbnRlclkgLyBzdGFydFk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZGVsdGFTY2FsZVkgPSBNYXRoLm1pbigxLCBNYXRoLm1heCgtMSwgZGVsdGFTY2FsZVkpKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRlbHRhU2NhbGVYOiBkZWx0YVNjYWxlWCxcbiAgICAgICAgZGVsdGFTY2FsZVk6IGRlbHRhU2NhbGVZXG4gICAgICB9O1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBNYXBTdGF0ZTtcbn0oKTtcblxuZXhwb3J0IHsgTWFwU3RhdGUgYXMgZGVmYXVsdCB9OyIsImltcG9ydCB7IE1BUEJPWF9MSU1JVFMgfSBmcm9tICcuL21hcC1zdGF0ZSc7XG5cbmZ1bmN0aW9uIGRlY2FwaXRhbGl6ZShzKSB7XG4gIHJldHVybiBzWzBdLnRvTG93ZXJDYXNlKCkgKyBzLnNsaWNlKDEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tWaXNpYmlsaXR5Q29uc3RyYWludHMocHJvcHMpIHtcbiAgdmFyIGNvbnN0cmFpbnRzID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBNQVBCT1hfTElNSVRTO1xuXG4gIGZvciAodmFyIGNvbnN0cmFpbnROYW1lIGluIGNvbnN0cmFpbnRzKSB7XG4gICAgdmFyIHR5cGUgPSBjb25zdHJhaW50TmFtZS5zbGljZSgwLCAzKTtcbiAgICB2YXIgcHJvcE5hbWUgPSBkZWNhcGl0YWxpemUoY29uc3RyYWludE5hbWUuc2xpY2UoMykpO1xuXG4gICAgaWYgKHR5cGUgPT09ICdtaW4nICYmIHByb3BzW3Byb3BOYW1lXSA8IGNvbnN0cmFpbnRzW2NvbnN0cmFpbnROYW1lXSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0eXBlID09PSAnbWF4JyAmJiBwcm9wc1twcm9wTmFtZV0gPiBjb25zdHJhaW50c1tjb25zdHJhaW50TmFtZV0pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn0iLCJpbXBvcnQgX2RlZmluZVByb3BlcnR5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eVwiO1xuaW1wb3J0IF9zbGljZWRUb0FycmF5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zbGljZWRUb0FycmF5XCI7XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkge1xuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7XG5cbiAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTtcbiAgICBpZiAoZW51bWVyYWJsZU9ubHkpIHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTtcbiAgICB9KTtcbiAgICBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7XG4gIH1cblxuICByZXR1cm4ga2V5cztcbn1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTtcblxuICAgIGlmIChpICUgMikge1xuICAgICAgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgY3JlYXRlQ29udGV4dCwgdXNlU3RhdGUsIHVzZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG52YXIgTWFwQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQoe1xuICB2aWV3cG9ydDogbnVsbCxcbiAgbWFwOiBudWxsLFxuICBjb250YWluZXI6IG51bGwsXG4gIG9uVmlld3BvcnRDaGFuZ2U6IG51bGwsXG4gIG9uVmlld1N0YXRlQ2hhbmdlOiBudWxsLFxuICBldmVudE1hbmFnZXI6IG51bGxcbn0pO1xuZXhwb3J0IHZhciBNYXBDb250ZXh0UHJvdmlkZXIgPSBNYXBDb250ZXh0LlByb3ZpZGVyO1xuXG5mdW5jdGlvbiBXcmFwcGVkUHJvdmlkZXIoX3JlZikge1xuICB2YXIgdmFsdWUgPSBfcmVmLnZhbHVlLFxuICAgICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuO1xuXG4gIHZhciBfdXNlU3RhdGUgPSB1c2VTdGF0ZShudWxsKSxcbiAgICAgIF91c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUsIDIpLFxuICAgICAgbWFwID0gX3VzZVN0YXRlMlswXSxcbiAgICAgIHNldE1hcCA9IF91c2VTdGF0ZTJbMV07XG5cbiAgdmFyIGNvbnRleHQgPSB1c2VDb250ZXh0KE1hcENvbnRleHQpO1xuICB2YWx1ZSA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7XG4gICAgc2V0TWFwOiBzZXRNYXBcbiAgfSwgY29udGV4dCksIHt9LCB7XG4gICAgbWFwOiBjb250ZXh0ICYmIGNvbnRleHQubWFwIHx8IG1hcFxuICB9LCB2YWx1ZSk7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KE1hcENvbnRleHRQcm92aWRlciwge1xuICAgIHZhbHVlOiB2YWx1ZVxuICB9LCBjaGlsZHJlbik7XG59XG5cbk1hcENvbnRleHQuUHJvdmlkZXIgPSBXcmFwcGVkUHJvdmlkZXI7XG5leHBvcnQgZGVmYXVsdCBNYXBDb250ZXh0OyIsImltcG9ydCB7IHVzZUVmZmVjdCwgdXNlTGF5b3V0RWZmZWN0IH0gZnJvbSAncmVhY3QnO1xudmFyIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHVzZUxheW91dEVmZmVjdCA6IHVzZUVmZmVjdDtcbmV4cG9ydCBkZWZhdWx0IHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3Q7IiwiZXhwb3J0IGZ1bmN0aW9uIGdldFRlcnJhaW5FbGV2YXRpb24obWFwLCBfcmVmKSB7XG4gIHZhciBsb25naXR1ZGUgPSBfcmVmLmxvbmdpdHVkZSxcbiAgICAgIGxhdGl0dWRlID0gX3JlZi5sYXRpdHVkZTtcblxuICBpZiAobWFwICYmIG1hcC5xdWVyeVRlcnJhaW5FbGV2YXRpb24pIHtcbiAgICByZXR1cm4gbWFwLnF1ZXJ5VGVycmFpbkVsZXZhdGlvbihbbG9uZ2l0dWRlLCBsYXRpdHVkZV0pIHx8IDA7XG4gIH1cblxuICByZXR1cm4gMDtcbn0iLCJpbXBvcnQgX3NsaWNlZFRvQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXlcIjtcbmltcG9ydCBfZGVmaW5lUHJvcGVydHkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5XCI7XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkge1xuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7XG5cbiAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTtcbiAgICBpZiAoZW51bWVyYWJsZU9ubHkpIHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTtcbiAgICB9KTtcbiAgICBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7XG4gIH1cblxuICByZXR1cm4ga2V5cztcbn1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTtcblxuICAgIGlmIChpICUgMikge1xuICAgICAgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlU3RhdGUsIHVzZVJlZiwgdXNlQ2FsbGJhY2ssIHVzZUNvbnRleHQsIHVzZUltcGVyYXRpdmVIYW5kbGUsIGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgV2ViTWVyY2F0b3JWaWV3cG9ydCBmcm9tICd2aWV3cG9ydC1tZXJjYXRvci1wcm9qZWN0JztcbmltcG9ydCBSZXNpemVPYnNlcnZlciBmcm9tICdyZXNpemUtb2JzZXJ2ZXItcG9seWZpbGwnO1xuaW1wb3J0IE1hcGJveCBmcm9tICcuLi9tYXBib3gvbWFwYm94JztcbmltcG9ydCBtYXBib3hnbCBmcm9tICcuLi91dGlscy9tYXBib3hnbCc7XG5pbXBvcnQgeyBjaGVja1Zpc2liaWxpdHlDb25zdHJhaW50cyB9IGZyb20gJy4uL3V0aWxzL21hcC1jb25zdHJhaW50cyc7XG5pbXBvcnQgeyBNQVBCT1hfTElNSVRTIH0gZnJvbSAnLi4vdXRpbHMvbWFwLXN0YXRlJztcbmltcG9ydCBNYXBDb250ZXh0LCB7IE1hcENvbnRleHRQcm92aWRlciB9IGZyb20gJy4vbWFwLWNvbnRleHQnO1xuaW1wb3J0IHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QgZnJvbSAnLi4vdXRpbHMvdXNlLWlzb21vcnBoaWMtbGF5b3V0LWVmZmVjdCc7XG5pbXBvcnQgeyBnZXRUZXJyYWluRWxldmF0aW9uIH0gZnJvbSAnLi4vdXRpbHMvdGVycmFpbic7XG52YXIgVE9LRU5fRE9DX1VSTCA9ICdodHRwczovL3Zpc2dsLmdpdGh1Yi5pby9yZWFjdC1tYXAtZ2wvZG9jcy9nZXQtc3RhcnRlZC9tYXBib3gtdG9rZW5zJztcbnZhciBOT19UT0tFTl9XQVJOSU5HID0gJ0EgdmFsaWQgQVBJIGFjY2VzcyB0b2tlbiBpcyByZXF1aXJlZCB0byB1c2UgTWFwYm94IGRhdGEnO1xuXG5mdW5jdGlvbiBub29wKCkge31cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZpZXdwb3J0KF9yZWYpIHtcbiAgdmFyIG1hcCA9IF9yZWYubWFwLFxuICAgICAgcHJvcHMgPSBfcmVmLnByb3BzLFxuICAgICAgd2lkdGggPSBfcmVmLndpZHRoLFxuICAgICAgaGVpZ2h0ID0gX3JlZi5oZWlnaHQ7XG5cbiAgdmFyIHZpZXdwb3J0UHJvcHMgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgcHJvcHMpLCBwcm9wcy52aWV3U3RhdGUpLCB7fSwge1xuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodFxuICB9KTtcblxuICB2aWV3cG9ydFByb3BzLnBvc2l0aW9uID0gWzAsIDAsIGdldFRlcnJhaW5FbGV2YXRpb24obWFwLCB2aWV3cG9ydFByb3BzKV07XG4gIHJldHVybiBuZXcgV2ViTWVyY2F0b3JWaWV3cG9ydCh2aWV3cG9ydFByb3BzKTtcbn1cbnZhciBVTkFVVEhPUklaRURfRVJST1JfQ09ERSA9IDQwMTtcbnZhciBDT05UQUlORVJfU1RZTEUgPSB7XG4gIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICB3aWR0aDogJzEwMCUnLFxuICBoZWlnaHQ6ICcxMDAlJyxcbiAgb3ZlcmZsb3c6ICdoaWRkZW4nXG59O1xudmFyIGRlZmF1bHRQcm9wcyA9IE9iamVjdC5hc3NpZ24oe30sIE1hcGJveC5kZWZhdWx0UHJvcHMsIHtcbiAgZGlzYWJsZVRva2VuV2FybmluZzogZmFsc2UsXG4gIHZpc2libGU6IHRydWUsXG4gIG9uUmVzaXplOiBub29wLFxuICBjbGFzc05hbWU6ICcnLFxuICBzdHlsZTogbnVsbCxcbiAgdmlzaWJpbGl0eUNvbnN0cmFpbnRzOiBNQVBCT1hfTElNSVRTXG59KTtcblxuZnVuY3Rpb24gTm9Ub2tlbldhcm5pbmcoKSB7XG4gIHZhciBzdHlsZSA9IHtcbiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICBsZWZ0OiAwLFxuICAgIHRvcDogMFxuICB9O1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAga2V5OiBcIndhcm5pbmdcIixcbiAgICBpZDogXCJuby10b2tlbi13YXJuaW5nXCIsXG4gICAgc3R5bGU6IHN0eWxlXG4gIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJoM1wiLCB7XG4gICAga2V5OiBcImhlYWRlclwiXG4gIH0sIE5PX1RPS0VOX1dBUk5JTkcpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICBrZXk6IFwidGV4dFwiXG4gIH0sIFwiRm9yIGluZm9ybWF0aW9uIG9uIHNldHRpbmcgdXAgeW91ciBiYXNlbWFwLCByZWFkXCIpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFwiYVwiLCB7XG4gICAga2V5OiBcImxpbmtcIixcbiAgICBocmVmOiBUT0tFTl9ET0NfVVJMXG4gIH0sIFwiTm90ZSBvbiBNYXAgVG9rZW5zXCIpKTtcbn1cblxuZnVuY3Rpb24gZ2V0UmVmSGFuZGxlcyhtYXBib3hSZWYpIHtcbiAgcmV0dXJuIHtcbiAgICBnZXRNYXA6IGZ1bmN0aW9uIGdldE1hcCgpIHtcbiAgICAgIHJldHVybiBtYXBib3hSZWYuY3VycmVudCAmJiBtYXBib3hSZWYuY3VycmVudC5nZXRNYXAoKTtcbiAgICB9LFxuICAgIHF1ZXJ5UmVuZGVyZWRGZWF0dXJlczogZnVuY3Rpb24gcXVlcnlSZW5kZXJlZEZlYXR1cmVzKGdlb21ldHJ5KSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgICB2YXIgbWFwID0gbWFwYm94UmVmLmN1cnJlbnQgJiYgbWFwYm94UmVmLmN1cnJlbnQuZ2V0TWFwKCk7XG4gICAgICByZXR1cm4gbWFwICYmIG1hcC5xdWVyeVJlbmRlcmVkRmVhdHVyZXMoZ2VvbWV0cnksIG9wdGlvbnMpO1xuICAgIH1cbiAgfTtcbn1cblxudmFyIFN0YXRpY01hcCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKHByb3BzLCByZWYpIHtcbiAgdmFyIF91c2VTdGF0ZSA9IHVzZVN0YXRlKHRydWUpLFxuICAgICAgX3VzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZSwgMiksXG4gICAgICBhY2Nlc3NUb2tlblZhbGlkID0gX3VzZVN0YXRlMlswXSxcbiAgICAgIHNldFRva2VuU3RhdGUgPSBfdXNlU3RhdGUyWzFdO1xuXG4gIHZhciBfdXNlU3RhdGUzID0gdXNlU3RhdGUoe1xuICAgIHdpZHRoOiAwLFxuICAgIGhlaWdodDogMFxuICB9KSxcbiAgICAgIF91c2VTdGF0ZTQgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUzLCAyKSxcbiAgICAgIHNpemUgPSBfdXNlU3RhdGU0WzBdLFxuICAgICAgc2V0U2l6ZSA9IF91c2VTdGF0ZTRbMV07XG5cbiAgdmFyIG1hcGJveFJlZiA9IHVzZVJlZihudWxsKTtcbiAgdmFyIG1hcERpdlJlZiA9IHVzZVJlZihudWxsKTtcbiAgdmFyIGNvbnRhaW5lclJlZiA9IHVzZVJlZihudWxsKTtcbiAgdmFyIG92ZXJsYXlSZWYgPSB1c2VSZWYobnVsbCk7XG4gIHZhciBjb250ZXh0ID0gdXNlQ29udGV4dChNYXBDb250ZXh0KTtcbiAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFTdGF0aWNNYXAuc3VwcG9ydGVkKCkpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgdmFyIG1hcGJveCA9IG5ldyBNYXBib3goX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHByb3BzKSwgc2l6ZSksIHt9LCB7XG4gICAgICBtYXBib3hnbDogbWFwYm94Z2wsXG4gICAgICBjb250YWluZXI6IG1hcERpdlJlZi5jdXJyZW50LFxuICAgICAgb25FcnJvcjogZnVuY3Rpb24gb25FcnJvcihldnQpIHtcbiAgICAgICAgdmFyIHN0YXR1c0NvZGUgPSBldnQuZXJyb3IgJiYgZXZ0LmVycm9yLnN0YXR1cyB8fCBldnQuc3RhdHVzO1xuXG4gICAgICAgIGlmIChzdGF0dXNDb2RlID09PSBVTkFVVEhPUklaRURfRVJST1JfQ09ERSAmJiBhY2Nlc3NUb2tlblZhbGlkKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihOT19UT0tFTl9XQVJOSU5HKTtcbiAgICAgICAgICBzZXRUb2tlblN0YXRlKGZhbHNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHByb3BzLm9uRXJyb3IoZXZ0KTtcbiAgICAgIH1cbiAgICB9KSk7XG4gICAgbWFwYm94UmVmLmN1cnJlbnQgPSBtYXBib3g7XG5cbiAgICBpZiAoY29udGV4dCAmJiBjb250ZXh0LnNldE1hcCkge1xuICAgICAgY29udGV4dC5zZXRNYXAobWFwYm94LmdldE1hcCgpKTtcbiAgICB9XG5cbiAgICB2YXIgcmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoZnVuY3Rpb24gKGVudHJpZXMpIHtcbiAgICAgIGlmIChlbnRyaWVzWzBdLmNvbnRlbnRSZWN0KSB7XG4gICAgICAgIHZhciBfZW50cmllcyQwJGNvbnRlbnRSZWMgPSBlbnRyaWVzWzBdLmNvbnRlbnRSZWN0LFxuICAgICAgICAgICAgX3dpZHRoID0gX2VudHJpZXMkMCRjb250ZW50UmVjLndpZHRoLFxuICAgICAgICAgICAgX2hlaWdodCA9IF9lbnRyaWVzJDAkY29udGVudFJlYy5oZWlnaHQ7XG4gICAgICAgIHNldFNpemUoe1xuICAgICAgICAgIHdpZHRoOiBfd2lkdGgsXG4gICAgICAgICAgaGVpZ2h0OiBfaGVpZ2h0XG4gICAgICAgIH0pO1xuICAgICAgICBwcm9wcy5vblJlc2l6ZSh7XG4gICAgICAgICAgd2lkdGg6IF93aWR0aCxcbiAgICAgICAgICBoZWlnaHQ6IF9oZWlnaHRcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShjb250YWluZXJSZWYuY3VycmVudCk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIG1hcGJveC5maW5hbGl6ZSgpO1xuICAgICAgbWFwYm94UmVmLmN1cnJlbnQgPSBudWxsO1xuICAgICAgcmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgIH07XG4gIH0sIFtdKTtcbiAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKG1hcGJveFJlZi5jdXJyZW50KSB7XG4gICAgICBtYXBib3hSZWYuY3VycmVudC5zZXRQcm9wcyhfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHByb3BzKSwgc2l6ZSkpO1xuICAgIH1cbiAgfSk7XG4gIHZhciBtYXAgPSBtYXBib3hSZWYuY3VycmVudCAmJiBtYXBib3hSZWYuY3VycmVudC5nZXRNYXAoKTtcbiAgdXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZ2V0UmVmSGFuZGxlcyhtYXBib3hSZWYpO1xuICB9LCBbXSk7XG4gIHZhciBwcmV2ZW50U2Nyb2xsID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKF9yZWYyKSB7XG4gICAgdmFyIHRhcmdldCA9IF9yZWYyLnRhcmdldDtcblxuICAgIGlmICh0YXJnZXQgPT09IG92ZXJsYXlSZWYuY3VycmVudCkge1xuICAgICAgdGFyZ2V0LnNjcm9sbFRvKDAsIDApO1xuICAgIH1cbiAgfSwgW10pO1xuICB2YXIgb3ZlcmxheXMgPSBtYXAgJiYgUmVhY3QuY3JlYXRlRWxlbWVudChNYXBDb250ZXh0UHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBjb250ZXh0KSwge30sIHtcbiAgICAgIHZpZXdwb3J0OiBjb250ZXh0LnZpZXdwb3J0IHx8IGdldFZpZXdwb3J0KF9vYmplY3RTcHJlYWQoe1xuICAgICAgICBtYXA6IG1hcCxcbiAgICAgICAgcHJvcHM6IHByb3BzXG4gICAgICB9LCBzaXplKSksXG4gICAgICBtYXA6IG1hcCxcbiAgICAgIGNvbnRhaW5lcjogY29udGV4dC5jb250YWluZXIgfHwgY29udGFpbmVyUmVmLmN1cnJlbnRcbiAgICB9KVxuICB9LCBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICBrZXk6IFwibWFwLW92ZXJsYXlzXCIsXG4gICAgY2xhc3NOYW1lOiBcIm92ZXJsYXlzXCIsXG4gICAgcmVmOiBvdmVybGF5UmVmLFxuICAgIHN0eWxlOiBDT05UQUlORVJfU1RZTEUsXG4gICAgb25TY3JvbGw6IHByZXZlbnRTY3JvbGxcbiAgfSwgcHJvcHMuY2hpbGRyZW4pKTtcbiAgdmFyIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSxcbiAgICAgIHdpZHRoID0gcHJvcHMud2lkdGgsXG4gICAgICBoZWlnaHQgPSBwcm9wcy5oZWlnaHQsXG4gICAgICBzdHlsZSA9IHByb3BzLnN0eWxlLFxuICAgICAgdmlzaWJpbGl0eUNvbnN0cmFpbnRzID0gcHJvcHMudmlzaWJpbGl0eUNvbnN0cmFpbnRzO1xuICB2YXIgbWFwQ29udGFpbmVyU3R5bGUgPSBPYmplY3QuYXNzaWduKHtcbiAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJ1xuICB9LCBzdHlsZSwge1xuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodFxuICB9KTtcbiAgdmFyIHZpc2libGUgPSBwcm9wcy52aXNpYmxlICYmIGNoZWNrVmlzaWJpbGl0eUNvbnN0cmFpbnRzKHByb3BzLnZpZXdTdGF0ZSB8fCBwcm9wcywgdmlzaWJpbGl0eUNvbnN0cmFpbnRzKTtcbiAgdmFyIG1hcFN0eWxlID0gT2JqZWN0LmFzc2lnbih7fSwgQ09OVEFJTkVSX1NUWUxFLCB7XG4gICAgdmlzaWJpbGl0eTogdmlzaWJsZSA/ICdpbmhlcml0JyA6ICdoaWRkZW4nXG4gIH0pO1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAga2V5OiBcIm1hcC1jb250YWluZXJcIixcbiAgICByZWY6IGNvbnRhaW5lclJlZixcbiAgICBzdHlsZTogbWFwQ29udGFpbmVyU3R5bGVcbiAgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAga2V5OiBcIm1hcC1tYXBib3hcIixcbiAgICByZWY6IG1hcERpdlJlZixcbiAgICBzdHlsZTogbWFwU3R5bGUsXG4gICAgY2xhc3NOYW1lOiBjbGFzc05hbWVcbiAgfSksIG92ZXJsYXlzLCAhYWNjZXNzVG9rZW5WYWxpZCAmJiAhcHJvcHMuZGlzYWJsZVRva2VuV2FybmluZyAmJiBSZWFjdC5jcmVhdGVFbGVtZW50KE5vVG9rZW5XYXJuaW5nLCBudWxsKSk7XG59KTtcblxuU3RhdGljTWFwLnN1cHBvcnRlZCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIG1hcGJveGdsICYmIG1hcGJveGdsLnN1cHBvcnRlZCgpO1xufTtcblxuU3RhdGljTWFwLmRlZmF1bHRQcm9wcyA9IGRlZmF1bHRQcm9wcztcbmV4cG9ydCBkZWZhdWx0IFN0YXRpY01hcDsiLCJpbXBvcnQgX2NsYXNzQ2FsbENoZWNrIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jbGFzc0NhbGxDaGVja1wiO1xuaW1wb3J0IF9jcmVhdGVDbGFzcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY3JlYXRlQ2xhc3NcIjtcbmltcG9ydCBfZGVmaW5lUHJvcGVydHkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5XCI7XG5cbmZ1bmN0aW9uIF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKG8sIGFsbG93QXJyYXlMaWtlKSB7XG4gIHZhciBpdDtcblxuICBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJ1bmRlZmluZWRcIiB8fCBvW1N5bWJvbC5pdGVyYXRvcl0gPT0gbnVsbCkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KG8pIHx8IChpdCA9IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvKSkgfHwgYWxsb3dBcnJheUxpa2UgJiYgbyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIGlmIChpdCkgbyA9IGl0O1xuICAgICAgdmFyIGkgPSAwO1xuXG4gICAgICB2YXIgRiA9IGZ1bmN0aW9uIEYoKSB7fTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgczogRixcbiAgICAgICAgbjogZnVuY3Rpb24gbigpIHtcbiAgICAgICAgICBpZiAoaSA+PSBvLmxlbmd0aCkgcmV0dXJuIHtcbiAgICAgICAgICAgIGRvbmU6IHRydWVcbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkb25lOiBmYWxzZSxcbiAgICAgICAgICAgIHZhbHVlOiBvW2krK11cbiAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgICAgICBlOiBmdW5jdGlvbiBlKF9lKSB7XG4gICAgICAgICAgdGhyb3cgX2U7XG4gICAgICAgIH0sXG4gICAgICAgIGY6IEZcbiAgICAgIH07XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xuICB9XG5cbiAgdmFyIG5vcm1hbENvbXBsZXRpb24gPSB0cnVlLFxuICAgICAgZGlkRXJyID0gZmFsc2UsXG4gICAgICBlcnI7XG4gIHJldHVybiB7XG4gICAgczogZnVuY3Rpb24gcygpIHtcbiAgICAgIGl0ID0gb1tTeW1ib2wuaXRlcmF0b3JdKCk7XG4gICAgfSxcbiAgICBuOiBmdW5jdGlvbiBuKCkge1xuICAgICAgdmFyIHN0ZXAgPSBpdC5uZXh0KCk7XG4gICAgICBub3JtYWxDb21wbGV0aW9uID0gc3RlcC5kb25lO1xuICAgICAgcmV0dXJuIHN0ZXA7XG4gICAgfSxcbiAgICBlOiBmdW5jdGlvbiBlKF9lMikge1xuICAgICAgZGlkRXJyID0gdHJ1ZTtcbiAgICAgIGVyciA9IF9lMjtcbiAgICB9LFxuICAgIGY6IGZ1bmN0aW9uIGYoKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoIW5vcm1hbENvbXBsZXRpb24gJiYgaXRbXCJyZXR1cm5cIl0gIT0gbnVsbCkgaXRbXCJyZXR1cm5cIl0oKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChkaWRFcnIpIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHtcbiAgaWYgKCFvKSByZXR1cm47XG4gIGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG4gIHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTtcbiAgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTtcbiAgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7XG4gIGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbn1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHtcbiAgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7XG5cbiAgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7XG4gICAgYXJyMltpXSA9IGFycltpXTtcbiAgfVxuXG4gIHJldHVybiBhcnIyO1xufVxuXG5pbXBvcnQgeyBlcXVhbHMgfSBmcm9tICcuLi9tYXRoLXV0aWxzJztcbmltcG9ydCBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0JztcblxudmFyIFRyYW5zaXRpb25JbnRlcnBvbGF0b3IgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFRyYW5zaXRpb25JbnRlcnBvbGF0b3IoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFRyYW5zaXRpb25JbnRlcnBvbGF0b3IpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwicHJvcE5hbWVzXCIsIFtdKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhUcmFuc2l0aW9uSW50ZXJwb2xhdG9yLCBbe1xuICAgIGtleTogXCJhcmVQcm9wc0VxdWFsXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGFyZVByb3BzRXF1YWwoY3VycmVudFByb3BzLCBuZXh0UHJvcHMpIHtcbiAgICAgIHZhciBfaXRlcmF0b3IgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcih0aGlzLnByb3BOYW1lcyB8fCBbXSksXG4gICAgICAgICAgX3N0ZXA7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGZvciAoX2l0ZXJhdG9yLnMoKTsgIShfc3RlcCA9IF9pdGVyYXRvci5uKCkpLmRvbmU7KSB7XG4gICAgICAgICAgdmFyIGtleSA9IF9zdGVwLnZhbHVlO1xuXG4gICAgICAgICAgaWYgKCFlcXVhbHMoY3VycmVudFByb3BzW2tleV0sIG5leHRQcm9wc1trZXldKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIF9pdGVyYXRvci5lKGVycik7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBfaXRlcmF0b3IuZigpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaW5pdGlhbGl6ZVByb3BzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGluaXRpYWxpemVQcm9wcyhzdGFydFByb3BzLCBlbmRQcm9wcykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhcnQ6IHN0YXJ0UHJvcHMsXG4gICAgICAgIGVuZDogZW5kUHJvcHNcbiAgICAgIH07XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImludGVycG9sYXRlUHJvcHNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaW50ZXJwb2xhdGVQcm9wcyhzdGFydFByb3BzLCBlbmRQcm9wcywgdCkge1xuICAgICAgYXNzZXJ0KGZhbHNlLCAnaW50ZXJwb2xhdGVQcm9wcyBpcyBub3QgaW1wbGVtZW50ZWQnKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0RHVyYXRpb25cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0RHVyYXRpb24oc3RhcnRQcm9wcywgZW5kUHJvcHMpIHtcbiAgICAgIHJldHVybiBlbmRQcm9wcy50cmFuc2l0aW9uRHVyYXRpb247XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFRyYW5zaXRpb25JbnRlcnBvbGF0b3I7XG59KCk7XG5cbmV4cG9ydCB7IFRyYW5zaXRpb25JbnRlcnBvbGF0b3IgYXMgZGVmYXVsdCB9OyIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikge1xuICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG5cbiAgcmV0dXJuIHNlbGY7XG59IiwiaW1wb3J0IHNldFByb3RvdHlwZU9mIGZyb20gXCIuL3NldFByb3RvdHlwZU9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTtcbiAgfVxuXG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwge1xuICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICB2YWx1ZTogc3ViQ2xhc3MsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH1cbiAgfSk7XG4gIGlmIChzdXBlckNsYXNzKSBzZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7XG59IiwiaW1wb3J0IF90eXBlb2YgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvdHlwZW9mXCI7XG5pbXBvcnQgYXNzZXJ0VGhpc0luaXRpYWxpemVkIGZyb20gXCIuL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkge1xuICBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkge1xuICAgIHJldHVybiBjYWxsO1xuICB9XG5cbiAgcmV0dXJuIGFzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICAgIHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7XG4gIH07XG4gIHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7XG59IiwidmFyIFdSQVBQRURfQU5HVUxBUl9QUk9QUyA9IHtcbiAgbG9uZ2l0dWRlOiAxLFxuICBiZWFyaW5nOiAxXG59O1xuZXhwb3J0IGZ1bmN0aW9uIG1vZCh2YWx1ZSwgZGl2aXNvcikge1xuICB2YXIgbW9kdWx1cyA9IHZhbHVlICUgZGl2aXNvcjtcbiAgcmV0dXJuIG1vZHVsdXMgPCAwID8gZGl2aXNvciArIG1vZHVsdXMgOiBtb2R1bHVzO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWQocHJvcCkge1xuICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKHByb3ApIHx8IEFycmF5LmlzQXJyYXkocHJvcCk7XG59XG5cbmZ1bmN0aW9uIGlzV3JhcHBlZEFuZ3VsYXJQcm9wKHByb3BOYW1lKSB7XG4gIHJldHVybiBwcm9wTmFtZSBpbiBXUkFQUEVEX0FOR1VMQVJfUFJPUFM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRFbmRWYWx1ZUJ5U2hvcnRlc3RQYXRoKHByb3BOYW1lLCBzdGFydFZhbHVlLCBlbmRWYWx1ZSkge1xuICBpZiAoaXNXcmFwcGVkQW5ndWxhclByb3AocHJvcE5hbWUpICYmIE1hdGguYWJzKGVuZFZhbHVlIC0gc3RhcnRWYWx1ZSkgPiAxODApIHtcbiAgICBlbmRWYWx1ZSA9IGVuZFZhbHVlIDwgMCA/IGVuZFZhbHVlICsgMzYwIDogZW5kVmFsdWUgLSAzNjA7XG4gIH1cblxuICByZXR1cm4gZW5kVmFsdWU7XG59IiwiaW1wb3J0IF9jbGFzc0NhbGxDaGVjayBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY2xhc3NDYWxsQ2hlY2tcIjtcbmltcG9ydCBfY3JlYXRlQ2xhc3MgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NyZWF0ZUNsYXNzXCI7XG5pbXBvcnQgX2Fzc2VydFRoaXNJbml0aWFsaXplZCBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXNzZXJ0VGhpc0luaXRpYWxpemVkXCI7XG5pbXBvcnQgX2luaGVyaXRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c1wiO1xuaW1wb3J0IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuXCI7XG5pbXBvcnQgX2dldFByb3RvdHlwZU9mIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9nZXRQcm90b3R5cGVPZlwiO1xuaW1wb3J0IF9kZWZpbmVQcm9wZXJ0eSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHlcIjtcblxuZnVuY3Rpb24gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIobywgYWxsb3dBcnJheUxpa2UpIHtcbiAgdmFyIGl0O1xuXG4gIGlmICh0eXBlb2YgU3ltYm9sID09PSBcInVuZGVmaW5lZFwiIHx8IG9bU3ltYm9sLml0ZXJhdG9yXSA9PSBudWxsKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkobykgfHwgKGl0ID0gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8pKSB8fCBhbGxvd0FycmF5TGlrZSAmJiBvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgaWYgKGl0KSBvID0gaXQ7XG4gICAgICB2YXIgaSA9IDA7XG5cbiAgICAgIHZhciBGID0gZnVuY3Rpb24gRigpIHt9O1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBzOiBGLFxuICAgICAgICBuOiBmdW5jdGlvbiBuKCkge1xuICAgICAgICAgIGlmIChpID49IG8ubGVuZ3RoKSByZXR1cm4ge1xuICAgICAgICAgICAgZG9uZTogdHJ1ZVxuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRvbmU6IGZhbHNlLFxuICAgICAgICAgICAgdmFsdWU6IG9baSsrXVxuICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICAgIGU6IGZ1bmN0aW9uIGUoX2UpIHtcbiAgICAgICAgICB0aHJvdyBfZTtcbiAgICAgICAgfSxcbiAgICAgICAgZjogRlxuICAgICAgfTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG4gIH1cblxuICB2YXIgbm9ybWFsQ29tcGxldGlvbiA9IHRydWUsXG4gICAgICBkaWRFcnIgPSBmYWxzZSxcbiAgICAgIGVycjtcbiAgcmV0dXJuIHtcbiAgICBzOiBmdW5jdGlvbiBzKCkge1xuICAgICAgaXQgPSBvW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgICB9LFxuICAgIG46IGZ1bmN0aW9uIG4oKSB7XG4gICAgICB2YXIgc3RlcCA9IGl0Lm5leHQoKTtcbiAgICAgIG5vcm1hbENvbXBsZXRpb24gPSBzdGVwLmRvbmU7XG4gICAgICByZXR1cm4gc3RlcDtcbiAgICB9LFxuICAgIGU6IGZ1bmN0aW9uIGUoX2UyKSB7XG4gICAgICBkaWRFcnIgPSB0cnVlO1xuICAgICAgZXJyID0gX2UyO1xuICAgIH0sXG4gICAgZjogZnVuY3Rpb24gZigpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghbm9ybWFsQ29tcGxldGlvbiAmJiBpdFtcInJldHVyblwiXSAhPSBudWxsKSBpdFtcInJldHVyblwiXSgpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKGRpZEVycikgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikge1xuICBpZiAoIW8pIHJldHVybjtcbiAgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbiAgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpO1xuICBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lO1xuICBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTtcbiAgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xufVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikge1xuICBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDtcblxuICBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHtcbiAgICBhcnIyW2ldID0gYXJyW2ldO1xuICB9XG5cbiAgcmV0dXJuIGFycjI7XG59XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7XG4gIHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpO1xuXG4gIHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHtcbiAgICB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksXG4gICAgICAgIHJlc3VsdDtcblxuICAgIGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7XG4gICAgICB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yO1xuXG4gICAgICByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH1cblxuICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkge1xuICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7XG4gIGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7XG4gIGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7XG5cbiAgdHJ5IHtcbiAgICBEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFJlZmxlY3QuY29uc3RydWN0KERhdGUsIFtdLCBmdW5jdGlvbiAoKSB7fSkpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmltcG9ydCBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0JztcbmltcG9ydCBUcmFuc2l0aW9uSW50ZXJwb2xhdG9yIGZyb20gJy4vdHJhbnNpdGlvbi1pbnRlcnBvbGF0b3InO1xuaW1wb3J0IHsgZmx5VG9WaWV3cG9ydCwgZ2V0Rmx5VG9EdXJhdGlvbiB9IGZyb20gJ3ZpZXdwb3J0LW1lcmNhdG9yLXByb2plY3QnO1xuaW1wb3J0IHsgaXNWYWxpZCwgZ2V0RW5kVmFsdWVCeVNob3J0ZXN0UGF0aCB9IGZyb20gJy4vdHJhbnNpdGlvbi11dGlscyc7XG5pbXBvcnQgeyBsZXJwIH0gZnJvbSAnLi4vbWF0aC11dGlscyc7XG52YXIgVklFV1BPUlRfVFJBTlNJVElPTl9QUk9QUyA9IFsnbG9uZ2l0dWRlJywgJ2xhdGl0dWRlJywgJ3pvb20nLCAnYmVhcmluZycsICdwaXRjaCddO1xudmFyIFJFUVVJUkVEX1BST1BTID0gWydsYXRpdHVkZScsICdsb25naXR1ZGUnLCAnem9vbScsICd3aWR0aCcsICdoZWlnaHQnXTtcbnZhciBMSU5FQVJMWV9JTlRFUlBPTEFURURfUFJPUFMgPSBbJ2JlYXJpbmcnLCAncGl0Y2gnXTtcbnZhciBERUZBVUxUX09QVFMgPSB7XG4gIHNwZWVkOiAxLjIsXG4gIGN1cnZlOiAxLjQxNFxufTtcblxudmFyIFZpZXdwb3J0Rmx5VG9JbnRlcnBvbGF0b3IgPSBmdW5jdGlvbiAoX1RyYW5zaXRpb25JbnRlcnBvbGF0KSB7XG4gIF9pbmhlcml0cyhWaWV3cG9ydEZseVRvSW50ZXJwb2xhdG9yLCBfVHJhbnNpdGlvbkludGVycG9sYXQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoVmlld3BvcnRGbHlUb0ludGVycG9sYXRvcik7XG5cbiAgZnVuY3Rpb24gVmlld3BvcnRGbHlUb0ludGVycG9sYXRvcigpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICB2YXIgcHJvcHMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFZpZXdwb3J0Rmx5VG9JbnRlcnBvbGF0b3IpO1xuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJwcm9wTmFtZXNcIiwgVklFV1BPUlRfVFJBTlNJVElPTl9QUk9QUyk7XG5cbiAgICBfdGhpcy5wcm9wcyA9IE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfT1BUUywgcHJvcHMpO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhWaWV3cG9ydEZseVRvSW50ZXJwb2xhdG9yLCBbe1xuICAgIGtleTogXCJpbml0aWFsaXplUHJvcHNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaW5pdGlhbGl6ZVByb3BzKHN0YXJ0UHJvcHMsIGVuZFByb3BzKSB7XG4gICAgICB2YXIgc3RhcnRWaWV3cG9ydFByb3BzID0ge307XG4gICAgICB2YXIgZW5kVmlld3BvcnRQcm9wcyA9IHt9O1xuXG4gICAgICB2YXIgX2l0ZXJhdG9yID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIoUkVRVUlSRURfUFJPUFMpLFxuICAgICAgICAgIF9zdGVwO1xuXG4gICAgICB0cnkge1xuICAgICAgICBmb3IgKF9pdGVyYXRvci5zKCk7ICEoX3N0ZXAgPSBfaXRlcmF0b3IubigpKS5kb25lOykge1xuICAgICAgICAgIHZhciBrZXkgPSBfc3RlcC52YWx1ZTtcbiAgICAgICAgICB2YXIgc3RhcnRWYWx1ZSA9IHN0YXJ0UHJvcHNba2V5XTtcbiAgICAgICAgICB2YXIgZW5kVmFsdWUgPSBlbmRQcm9wc1trZXldO1xuICAgICAgICAgIGFzc2VydChpc1ZhbGlkKHN0YXJ0VmFsdWUpICYmIGlzVmFsaWQoZW5kVmFsdWUpLCBcIlwiLmNvbmNhdChrZXksIFwiIG11c3QgYmUgc3VwcGxpZWQgZm9yIHRyYW5zaXRpb25cIikpO1xuICAgICAgICAgIHN0YXJ0Vmlld3BvcnRQcm9wc1trZXldID0gc3RhcnRWYWx1ZTtcbiAgICAgICAgICBlbmRWaWV3cG9ydFByb3BzW2tleV0gPSBnZXRFbmRWYWx1ZUJ5U2hvcnRlc3RQYXRoKGtleSwgc3RhcnRWYWx1ZSwgZW5kVmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgX2l0ZXJhdG9yLmUoZXJyKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIF9pdGVyYXRvci5mKCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBfaXRlcmF0b3IyID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIoTElORUFSTFlfSU5URVJQT0xBVEVEX1BST1BTKSxcbiAgICAgICAgICBfc3RlcDI7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGZvciAoX2l0ZXJhdG9yMi5zKCk7ICEoX3N0ZXAyID0gX2l0ZXJhdG9yMi5uKCkpLmRvbmU7KSB7XG4gICAgICAgICAgdmFyIF9rZXkgPSBfc3RlcDIudmFsdWU7XG5cbiAgICAgICAgICB2YXIgX3N0YXJ0VmFsdWUgPSBzdGFydFByb3BzW19rZXldIHx8IDA7XG5cbiAgICAgICAgICB2YXIgX2VuZFZhbHVlID0gZW5kUHJvcHNbX2tleV0gfHwgMDtcblxuICAgICAgICAgIHN0YXJ0Vmlld3BvcnRQcm9wc1tfa2V5XSA9IF9zdGFydFZhbHVlO1xuICAgICAgICAgIGVuZFZpZXdwb3J0UHJvcHNbX2tleV0gPSBnZXRFbmRWYWx1ZUJ5U2hvcnRlc3RQYXRoKF9rZXksIF9zdGFydFZhbHVlLCBfZW5kVmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgX2l0ZXJhdG9yMi5lKGVycik7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBfaXRlcmF0b3IyLmYoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhcnQ6IHN0YXJ0Vmlld3BvcnRQcm9wcyxcbiAgICAgICAgZW5kOiBlbmRWaWV3cG9ydFByb3BzXG4gICAgICB9O1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJpbnRlcnBvbGF0ZVByb3BzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGludGVycG9sYXRlUHJvcHMoc3RhcnRQcm9wcywgZW5kUHJvcHMsIHQpIHtcbiAgICAgIHZhciB2aWV3cG9ydCA9IGZseVRvVmlld3BvcnQoc3RhcnRQcm9wcywgZW5kUHJvcHMsIHQsIHRoaXMucHJvcHMpO1xuXG4gICAgICB2YXIgX2l0ZXJhdG9yMyA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKExJTkVBUkxZX0lOVEVSUE9MQVRFRF9QUk9QUyksXG4gICAgICAgICAgX3N0ZXAzO1xuXG4gICAgICB0cnkge1xuICAgICAgICBmb3IgKF9pdGVyYXRvcjMucygpOyAhKF9zdGVwMyA9IF9pdGVyYXRvcjMubigpKS5kb25lOykge1xuICAgICAgICAgIHZhciBrZXkgPSBfc3RlcDMudmFsdWU7XG4gICAgICAgICAgdmlld3BvcnRba2V5XSA9IGxlcnAoc3RhcnRQcm9wc1trZXldLCBlbmRQcm9wc1trZXldLCB0KTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIF9pdGVyYXRvcjMuZShlcnIpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgX2l0ZXJhdG9yMy5mKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB2aWV3cG9ydDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0RHVyYXRpb25cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0RHVyYXRpb24oc3RhcnRQcm9wcywgZW5kUHJvcHMpIHtcbiAgICAgIHZhciB0cmFuc2l0aW9uRHVyYXRpb24gPSBlbmRQcm9wcy50cmFuc2l0aW9uRHVyYXRpb247XG5cbiAgICAgIGlmICh0cmFuc2l0aW9uRHVyYXRpb24gPT09ICdhdXRvJykge1xuICAgICAgICB0cmFuc2l0aW9uRHVyYXRpb24gPSBnZXRGbHlUb0R1cmF0aW9uKHN0YXJ0UHJvcHMsIGVuZFByb3BzLCB0aGlzLnByb3BzKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRyYW5zaXRpb25EdXJhdGlvbjtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gVmlld3BvcnRGbHlUb0ludGVycG9sYXRvcjtcbn0oVHJhbnNpdGlvbkludGVycG9sYXRvcik7XG5cbmV4cG9ydCB7IFZpZXdwb3J0Rmx5VG9JbnRlcnBvbGF0b3IgYXMgZGVmYXVsdCB9OyIsImltcG9ydCBfc2xpY2VkVG9BcnJheSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheVwiO1xuaW1wb3J0IF9jbGFzc0NhbGxDaGVjayBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY2xhc3NDYWxsQ2hlY2tcIjtcbmltcG9ydCBfY3JlYXRlQ2xhc3MgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NyZWF0ZUNsYXNzXCI7XG5pbXBvcnQgX2luaGVyaXRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c1wiO1xuaW1wb3J0IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuXCI7XG5pbXBvcnQgX2dldFByb3RvdHlwZU9mIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9nZXRQcm90b3R5cGVPZlwiO1xuXG5mdW5jdGlvbiBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcihvLCBhbGxvd0FycmF5TGlrZSkge1xuICB2YXIgaXQ7XG5cbiAgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwidW5kZWZpbmVkXCIgfHwgb1tTeW1ib2wuaXRlcmF0b3JdID09IG51bGwpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShvKSB8fCAoaXQgPSBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobykpIHx8IGFsbG93QXJyYXlMaWtlICYmIG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSB7XG4gICAgICBpZiAoaXQpIG8gPSBpdDtcbiAgICAgIHZhciBpID0gMDtcblxuICAgICAgdmFyIEYgPSBmdW5jdGlvbiBGKCkge307XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHM6IEYsXG4gICAgICAgIG46IGZ1bmN0aW9uIG4oKSB7XG4gICAgICAgICAgaWYgKGkgPj0gby5sZW5ndGgpIHJldHVybiB7XG4gICAgICAgICAgICBkb25lOiB0cnVlXG4gICAgICAgICAgfTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZG9uZTogZmFsc2UsXG4gICAgICAgICAgICB2YWx1ZTogb1tpKytdXG4gICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICAgZTogZnVuY3Rpb24gZShfZSkge1xuICAgICAgICAgIHRocm93IF9lO1xuICAgICAgICB9LFxuICAgICAgICBmOiBGXG4gICAgICB9O1xuICAgIH1cblxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbiAgfVxuXG4gIHZhciBub3JtYWxDb21wbGV0aW9uID0gdHJ1ZSxcbiAgICAgIGRpZEVyciA9IGZhbHNlLFxuICAgICAgZXJyO1xuICByZXR1cm4ge1xuICAgIHM6IGZ1bmN0aW9uIHMoKSB7XG4gICAgICBpdCA9IG9bU3ltYm9sLml0ZXJhdG9yXSgpO1xuICAgIH0sXG4gICAgbjogZnVuY3Rpb24gbigpIHtcbiAgICAgIHZhciBzdGVwID0gaXQubmV4dCgpO1xuICAgICAgbm9ybWFsQ29tcGxldGlvbiA9IHN0ZXAuZG9uZTtcbiAgICAgIHJldHVybiBzdGVwO1xuICAgIH0sXG4gICAgZTogZnVuY3Rpb24gZShfZTIpIHtcbiAgICAgIGRpZEVyciA9IHRydWU7XG4gICAgICBlcnIgPSBfZTI7XG4gICAgfSxcbiAgICBmOiBmdW5jdGlvbiBmKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKCFub3JtYWxDb21wbGV0aW9uICYmIGl0W1wicmV0dXJuXCJdICE9IG51bGwpIGl0W1wicmV0dXJuXCJdKCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAoZGlkRXJyKSB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7XG4gIGlmICghbykgcmV0dXJuO1xuICBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xuICB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7XG4gIGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7XG4gIGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pO1xuICBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG59XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7XG4gIGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoO1xuXG4gIGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykge1xuICAgIGFycjJbaV0gPSBhcnJbaV07XG4gIH1cblxuICByZXR1cm4gYXJyMjtcbn1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHtcbiAgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkge1xuICAgIHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSxcbiAgICAgICAgcmVzdWx0O1xuXG4gICAgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHtcbiAgICAgIHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7XG5cbiAgICAgIHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7XG4gIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTtcbiAgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTtcbiAgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTtcblxuICB0cnkge1xuICAgIERhdGUucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoRGF0ZSwgW10sIGZ1bmN0aW9uICgpIHt9KSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuaW1wb3J0IFdlYk1lcmNhdG9yVmlld3BvcnQgZnJvbSAndmlld3BvcnQtbWVyY2F0b3ItcHJvamVjdCc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJy4uL2Fzc2VydCc7XG5pbXBvcnQgVHJhbnNpdGlvbkludGVycG9sYXRvciBmcm9tICcuL3RyYW5zaXRpb24taW50ZXJwb2xhdG9yJztcbmltcG9ydCB7IGlzVmFsaWQsIGdldEVuZFZhbHVlQnlTaG9ydGVzdFBhdGggfSBmcm9tICcuL3RyYW5zaXRpb24tdXRpbHMnO1xuaW1wb3J0IHsgbGVycCB9IGZyb20gJy4uL21hdGgtdXRpbHMnO1xudmFyIFZJRVdQT1JUX1RSQU5TSVRJT05fUFJPUFMgPSBbJ2xvbmdpdHVkZScsICdsYXRpdHVkZScsICd6b29tJywgJ2JlYXJpbmcnLCAncGl0Y2gnXTtcblxudmFyIExpbmVhckludGVycG9sYXRvciA9IGZ1bmN0aW9uIChfVHJhbnNpdGlvbkludGVycG9sYXQpIHtcbiAgX2luaGVyaXRzKExpbmVhckludGVycG9sYXRvciwgX1RyYW5zaXRpb25JbnRlcnBvbGF0KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKExpbmVhckludGVycG9sYXRvcik7XG5cbiAgZnVuY3Rpb24gTGluZWFySW50ZXJwb2xhdG9yKCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIHZhciBvcHRzID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBMaW5lYXJJbnRlcnBvbGF0b3IpO1xuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KG9wdHMpKSB7XG4gICAgICBvcHRzID0ge1xuICAgICAgICB0cmFuc2l0aW9uUHJvcHM6IG9wdHNcbiAgICAgIH07XG4gICAgfVxuXG4gICAgX3RoaXMucHJvcE5hbWVzID0gb3B0cy50cmFuc2l0aW9uUHJvcHMgfHwgVklFV1BPUlRfVFJBTlNJVElPTl9QUk9QUztcblxuICAgIGlmIChvcHRzLmFyb3VuZCkge1xuICAgICAgX3RoaXMuYXJvdW5kID0gb3B0cy5hcm91bmQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKExpbmVhckludGVycG9sYXRvciwgW3tcbiAgICBrZXk6IFwiaW5pdGlhbGl6ZVByb3BzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGluaXRpYWxpemVQcm9wcyhzdGFydFByb3BzLCBlbmRQcm9wcykge1xuICAgICAgdmFyIHN0YXJ0Vmlld3BvcnRQcm9wcyA9IHt9O1xuICAgICAgdmFyIGVuZFZpZXdwb3J0UHJvcHMgPSB7fTtcblxuICAgICAgaWYgKHRoaXMuYXJvdW5kKSB7XG4gICAgICAgIHN0YXJ0Vmlld3BvcnRQcm9wcy5hcm91bmQgPSB0aGlzLmFyb3VuZDtcbiAgICAgICAgdmFyIGFyb3VuZExuZ0xhdCA9IG5ldyBXZWJNZXJjYXRvclZpZXdwb3J0KHN0YXJ0UHJvcHMpLnVucHJvamVjdCh0aGlzLmFyb3VuZCk7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oZW5kVmlld3BvcnRQcm9wcywgZW5kUHJvcHMsIHtcbiAgICAgICAgICBhcm91bmQ6IG5ldyBXZWJNZXJjYXRvclZpZXdwb3J0KGVuZFByb3BzKS5wcm9qZWN0KGFyb3VuZExuZ0xhdCksXG4gICAgICAgICAgYXJvdW5kTG5nTGF0OiBhcm91bmRMbmdMYXRcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBfaXRlcmF0b3IgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcih0aGlzLnByb3BOYW1lcyksXG4gICAgICAgICAgX3N0ZXA7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGZvciAoX2l0ZXJhdG9yLnMoKTsgIShfc3RlcCA9IF9pdGVyYXRvci5uKCkpLmRvbmU7KSB7XG4gICAgICAgICAgdmFyIGtleSA9IF9zdGVwLnZhbHVlO1xuICAgICAgICAgIHZhciBzdGFydFZhbHVlID0gc3RhcnRQcm9wc1trZXldO1xuICAgICAgICAgIHZhciBlbmRWYWx1ZSA9IGVuZFByb3BzW2tleV07XG4gICAgICAgICAgYXNzZXJ0KGlzVmFsaWQoc3RhcnRWYWx1ZSkgJiYgaXNWYWxpZChlbmRWYWx1ZSksIFwiXCIuY29uY2F0KGtleSwgXCIgbXVzdCBiZSBzdXBwbGllZCBmb3IgdHJhbnNpdGlvblwiKSk7XG4gICAgICAgICAgc3RhcnRWaWV3cG9ydFByb3BzW2tleV0gPSBzdGFydFZhbHVlO1xuICAgICAgICAgIGVuZFZpZXdwb3J0UHJvcHNba2V5XSA9IGdldEVuZFZhbHVlQnlTaG9ydGVzdFBhdGgoa2V5LCBzdGFydFZhbHVlLCBlbmRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBfaXRlcmF0b3IuZShlcnIpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgX2l0ZXJhdG9yLmYoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhcnQ6IHN0YXJ0Vmlld3BvcnRQcm9wcyxcbiAgICAgICAgZW5kOiBlbmRWaWV3cG9ydFByb3BzXG4gICAgICB9O1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJpbnRlcnBvbGF0ZVByb3BzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGludGVycG9sYXRlUHJvcHMoc3RhcnRQcm9wcywgZW5kUHJvcHMsIHQpIHtcbiAgICAgIHZhciB2aWV3cG9ydCA9IHt9O1xuXG4gICAgICB2YXIgX2l0ZXJhdG9yMiA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKHRoaXMucHJvcE5hbWVzKSxcbiAgICAgICAgICBfc3RlcDI7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGZvciAoX2l0ZXJhdG9yMi5zKCk7ICEoX3N0ZXAyID0gX2l0ZXJhdG9yMi5uKCkpLmRvbmU7KSB7XG4gICAgICAgICAgdmFyIGtleSA9IF9zdGVwMi52YWx1ZTtcbiAgICAgICAgICB2aWV3cG9ydFtrZXldID0gbGVycChzdGFydFByb3BzW2tleV0sIGVuZFByb3BzW2tleV0sIHQpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgX2l0ZXJhdG9yMi5lKGVycik7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBfaXRlcmF0b3IyLmYoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGVuZFByb3BzLmFyb3VuZCkge1xuICAgICAgICB2YXIgX1dlYk1lcmNhdG9yVmlld3BvcnQkID0gbmV3IFdlYk1lcmNhdG9yVmlld3BvcnQoT2JqZWN0LmFzc2lnbih7fSwgZW5kUHJvcHMsIHZpZXdwb3J0KSkuZ2V0TWFwQ2VudGVyQnlMbmdMYXRQb3NpdGlvbih7XG4gICAgICAgICAgbG5nTGF0OiBlbmRQcm9wcy5hcm91bmRMbmdMYXQsXG4gICAgICAgICAgcG9zOiBsZXJwKHN0YXJ0UHJvcHMuYXJvdW5kLCBlbmRQcm9wcy5hcm91bmQsIHQpXG4gICAgICAgIH0pLFxuICAgICAgICAgICAgX1dlYk1lcmNhdG9yVmlld3BvcnQkMiA9IF9zbGljZWRUb0FycmF5KF9XZWJNZXJjYXRvclZpZXdwb3J0JCwgMiksXG4gICAgICAgICAgICBsb25naXR1ZGUgPSBfV2ViTWVyY2F0b3JWaWV3cG9ydCQyWzBdLFxuICAgICAgICAgICAgbGF0aXR1ZGUgPSBfV2ViTWVyY2F0b3JWaWV3cG9ydCQyWzFdO1xuXG4gICAgICAgIHZpZXdwb3J0LmxvbmdpdHVkZSA9IGxvbmdpdHVkZTtcbiAgICAgICAgdmlld3BvcnQubGF0aXR1ZGUgPSBsYXRpdHVkZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZpZXdwb3J0O1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBMaW5lYXJJbnRlcnBvbGF0b3I7XG59KFRyYW5zaXRpb25JbnRlcnBvbGF0b3IpO1xuXG5leHBvcnQgeyBMaW5lYXJJbnRlcnBvbGF0b3IgYXMgZGVmYXVsdCB9OyIsImV4cG9ydCB7IGRlZmF1bHQgYXMgVHJhbnNpdGlvbkludGVycG9sYXRvciB9IGZyb20gJy4vdHJhbnNpdGlvbi1pbnRlcnBvbGF0b3InO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBWaWV3cG9ydEZseVRvSW50ZXJwb2xhdG9yIH0gZnJvbSAnLi92aWV3cG9ydC1mbHktdG8taW50ZXJwb2xhdG9yJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTGluZWFySW50ZXJwb2xhdG9yIH0gZnJvbSAnLi9saW5lYXItaW50ZXJwb2xhdG9yJzsiLCJpbXBvcnQgX2NsYXNzQ2FsbENoZWNrIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jbGFzc0NhbGxDaGVja1wiO1xuaW1wb3J0IF9jcmVhdGVDbGFzcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY3JlYXRlQ2xhc3NcIjtcbmltcG9ydCBfZGVmaW5lUHJvcGVydHkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5XCI7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJy4vYXNzZXJ0JztcbmltcG9ydCB7IExpbmVhckludGVycG9sYXRvciB9IGZyb20gJy4vdHJhbnNpdGlvbic7XG5pbXBvcnQgTWFwU3RhdGUgZnJvbSAnLi9tYXAtc3RhdGUnO1xuXG52YXIgbm9vcCA9IGZ1bmN0aW9uIG5vb3AoKSB7fTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyb3BFYXNpbmdGdW5jdGlvbihlYXNpbmcsIHgwKSB7XG4gIHZhciB5MCA9IGVhc2luZyh4MCk7XG4gIHJldHVybiBmdW5jdGlvbiAodCkge1xuICAgIHJldHVybiAxIC8gKDEgLSB5MCkgKiAoZWFzaW5nKHQgKiAoMSAtIHgwKSArIHgwKSAtIHkwKTtcbiAgfTtcbn1cbmV4cG9ydCB2YXIgVFJBTlNJVElPTl9FVkVOVFMgPSB7XG4gIEJSRUFLOiAxLFxuICBTTkFQX1RPX0VORDogMixcbiAgSUdOT1JFOiAzLFxuICBVUERBVEU6IDRcbn07XG52YXIgREVGQVVMVF9QUk9QUyA9IHtcbiAgdHJhbnNpdGlvbkR1cmF0aW9uOiAwLFxuICB0cmFuc2l0aW9uRWFzaW5nOiBmdW5jdGlvbiB0cmFuc2l0aW9uRWFzaW5nKHQpIHtcbiAgICByZXR1cm4gdDtcbiAgfSxcbiAgdHJhbnNpdGlvbkludGVycG9sYXRvcjogbmV3IExpbmVhckludGVycG9sYXRvcigpLFxuICB0cmFuc2l0aW9uSW50ZXJydXB0aW9uOiBUUkFOU0lUSU9OX0VWRU5UUy5CUkVBSyxcbiAgb25UcmFuc2l0aW9uU3RhcnQ6IG5vb3AsXG4gIG9uVHJhbnNpdGlvbkludGVycnVwdDogbm9vcCxcbiAgb25UcmFuc2l0aW9uRW5kOiBub29wXG59O1xuXG52YXIgVHJhbnNpdGlvbk1hbmFnZXIgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFRyYW5zaXRpb25NYW5hZ2VyKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB2YXIgb3B0cyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgVHJhbnNpdGlvbk1hbmFnZXIpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiX2FuaW1hdGlvbkZyYW1lXCIsIG51bGwpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiX29uVHJhbnNpdGlvbkZyYW1lXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLl9hbmltYXRpb25GcmFtZSA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShfdGhpcy5fb25UcmFuc2l0aW9uRnJhbWUpO1xuXG4gICAgICBfdGhpcy5fdXBkYXRlVmlld3BvcnQoKTtcbiAgICB9KTtcblxuICAgIHRoaXMucHJvcHMgPSBudWxsO1xuICAgIHRoaXMub25WaWV3cG9ydENoYW5nZSA9IG9wdHMub25WaWV3cG9ydENoYW5nZSB8fCBub29wO1xuICAgIHRoaXMub25TdGF0ZUNoYW5nZSA9IG9wdHMub25TdGF0ZUNoYW5nZSB8fCBub29wO1xuICAgIHRoaXMudGltZSA9IG9wdHMuZ2V0VGltZSB8fCBEYXRlLm5vdztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhUcmFuc2l0aW9uTWFuYWdlciwgW3tcbiAgICBrZXk6IFwiZ2V0Vmlld3BvcnRJblRyYW5zaXRpb25cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0Vmlld3BvcnRJblRyYW5zaXRpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5fYW5pbWF0aW9uRnJhbWUgPyB0aGlzLnN0YXRlLnByb3BzSW5UcmFuc2l0aW9uIDogbnVsbDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicHJvY2Vzc1ZpZXdwb3J0Q2hhbmdlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHByb2Nlc3NWaWV3cG9ydENoYW5nZShuZXh0UHJvcHMpIHtcbiAgICAgIHZhciBjdXJyZW50UHJvcHMgPSB0aGlzLnByb3BzO1xuICAgICAgdGhpcy5wcm9wcyA9IG5leHRQcm9wcztcblxuICAgICAgaWYgKCFjdXJyZW50UHJvcHMgfHwgdGhpcy5fc2hvdWxkSWdub3JlVmlld3BvcnRDaGFuZ2UoY3VycmVudFByb3BzLCBuZXh0UHJvcHMpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX2lzVHJhbnNpdGlvbkVuYWJsZWQobmV4dFByb3BzKSkge1xuICAgICAgICB2YXIgc3RhcnRQcm9wcyA9IE9iamVjdC5hc3NpZ24oe30sIGN1cnJlbnRQcm9wcyk7XG4gICAgICAgIHZhciBlbmRQcm9wcyA9IE9iamVjdC5hc3NpZ24oe30sIG5leHRQcm9wcyk7XG5cbiAgICAgICAgaWYgKHRoaXMuX2lzVHJhbnNpdGlvbkluUHJvZ3Jlc3MoKSkge1xuICAgICAgICAgIGN1cnJlbnRQcm9wcy5vblRyYW5zaXRpb25JbnRlcnJ1cHQoKTtcblxuICAgICAgICAgIGlmICh0aGlzLnN0YXRlLmludGVycnVwdGlvbiA9PT0gVFJBTlNJVElPTl9FVkVOVFMuU05BUF9UT19FTkQpIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oc3RhcnRQcm9wcywgdGhpcy5zdGF0ZS5lbmRQcm9wcyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oc3RhcnRQcm9wcywgdGhpcy5zdGF0ZS5wcm9wc0luVHJhbnNpdGlvbik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRoaXMuc3RhdGUuaW50ZXJydXB0aW9uID09PSBUUkFOU0lUSU9OX0VWRU5UUy5VUERBVEUpIHtcbiAgICAgICAgICAgIHZhciBjdXJyZW50VGltZSA9IHRoaXMudGltZSgpO1xuICAgICAgICAgICAgdmFyIHgwID0gKGN1cnJlbnRUaW1lIC0gdGhpcy5zdGF0ZS5zdGFydFRpbWUpIC8gdGhpcy5zdGF0ZS5kdXJhdGlvbjtcbiAgICAgICAgICAgIGVuZFByb3BzLnRyYW5zaXRpb25EdXJhdGlvbiA9IHRoaXMuc3RhdGUuZHVyYXRpb24gLSAoY3VycmVudFRpbWUgLSB0aGlzLnN0YXRlLnN0YXJ0VGltZSk7XG4gICAgICAgICAgICBlbmRQcm9wcy50cmFuc2l0aW9uRWFzaW5nID0gY3JvcEVhc2luZ0Z1bmN0aW9uKHRoaXMuc3RhdGUuZWFzaW5nLCB4MCk7XG4gICAgICAgICAgICBlbmRQcm9wcy50cmFuc2l0aW9uSW50ZXJwb2xhdG9yID0gc3RhcnRQcm9wcy50cmFuc2l0aW9uSW50ZXJwb2xhdG9yO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGVuZFByb3BzLm9uVHJhbnNpdGlvblN0YXJ0KCk7XG5cbiAgICAgICAgdGhpcy5fdHJpZ2dlclRyYW5zaXRpb24oc3RhcnRQcm9wcywgZW5kUHJvcHMpO1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5faXNUcmFuc2l0aW9uSW5Qcm9ncmVzcygpKSB7XG4gICAgICAgIGN1cnJlbnRQcm9wcy5vblRyYW5zaXRpb25JbnRlcnJ1cHQoKTtcblxuICAgICAgICB0aGlzLl9lbmRUcmFuc2l0aW9uKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiX2lzVHJhbnNpdGlvbkluUHJvZ3Jlc3NcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2lzVHJhbnNpdGlvbkluUHJvZ3Jlc3MoKSB7XG4gICAgICByZXR1cm4gQm9vbGVhbih0aGlzLl9hbmltYXRpb25GcmFtZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIl9pc1RyYW5zaXRpb25FbmFibGVkXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9pc1RyYW5zaXRpb25FbmFibGVkKHByb3BzKSB7XG4gICAgICB2YXIgdHJhbnNpdGlvbkR1cmF0aW9uID0gcHJvcHMudHJhbnNpdGlvbkR1cmF0aW9uLFxuICAgICAgICAgIHRyYW5zaXRpb25JbnRlcnBvbGF0b3IgPSBwcm9wcy50cmFuc2l0aW9uSW50ZXJwb2xhdG9yO1xuICAgICAgcmV0dXJuICh0cmFuc2l0aW9uRHVyYXRpb24gPiAwIHx8IHRyYW5zaXRpb25EdXJhdGlvbiA9PT0gJ2F1dG8nKSAmJiBCb29sZWFuKHRyYW5zaXRpb25JbnRlcnBvbGF0b3IpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJfaXNVcGRhdGVEdWVUb0N1cnJlbnRUcmFuc2l0aW9uXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9pc1VwZGF0ZUR1ZVRvQ3VycmVudFRyYW5zaXRpb24ocHJvcHMpIHtcbiAgICAgIGlmICh0aGlzLnN0YXRlLnByb3BzSW5UcmFuc2l0aW9uKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlLmludGVycG9sYXRvci5hcmVQcm9wc0VxdWFsKHByb3BzLCB0aGlzLnN0YXRlLnByb3BzSW5UcmFuc2l0aW9uKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJfc2hvdWxkSWdub3JlVmlld3BvcnRDaGFuZ2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gX3Nob3VsZElnbm9yZVZpZXdwb3J0Q2hhbmdlKGN1cnJlbnRQcm9wcywgbmV4dFByb3BzKSB7XG4gICAgICBpZiAoIWN1cnJlbnRQcm9wcykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX2lzVHJhbnNpdGlvbkluUHJvZ3Jlc3MoKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZS5pbnRlcnJ1cHRpb24gPT09IFRSQU5TSVRJT05fRVZFTlRTLklHTk9SRSB8fCB0aGlzLl9pc1VwZGF0ZUR1ZVRvQ3VycmVudFRyYW5zaXRpb24obmV4dFByb3BzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX2lzVHJhbnNpdGlvbkVuYWJsZWQobmV4dFByb3BzKSkge1xuICAgICAgICByZXR1cm4gbmV4dFByb3BzLnRyYW5zaXRpb25JbnRlcnBvbGF0b3IuYXJlUHJvcHNFcXVhbChjdXJyZW50UHJvcHMsIG5leHRQcm9wcyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJfdHJpZ2dlclRyYW5zaXRpb25cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gX3RyaWdnZXJUcmFuc2l0aW9uKHN0YXJ0UHJvcHMsIGVuZFByb3BzKSB7XG4gICAgICBhc3NlcnQodGhpcy5faXNUcmFuc2l0aW9uRW5hYmxlZChlbmRQcm9wcykpO1xuXG4gICAgICBpZiAodGhpcy5fYW5pbWF0aW9uRnJhbWUpIHtcbiAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fYW5pbWF0aW9uRnJhbWUpO1xuICAgICAgfVxuXG4gICAgICB2YXIgdHJhbnNpdGlvbkludGVycG9sYXRvciA9IGVuZFByb3BzLnRyYW5zaXRpb25JbnRlcnBvbGF0b3I7XG4gICAgICB2YXIgZHVyYXRpb24gPSB0cmFuc2l0aW9uSW50ZXJwb2xhdG9yLmdldER1cmF0aW9uID8gdHJhbnNpdGlvbkludGVycG9sYXRvci5nZXREdXJhdGlvbihzdGFydFByb3BzLCBlbmRQcm9wcykgOiBlbmRQcm9wcy50cmFuc2l0aW9uRHVyYXRpb247XG5cbiAgICAgIGlmIChkdXJhdGlvbiA9PT0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBpbml0aWFsUHJvcHMgPSBlbmRQcm9wcy50cmFuc2l0aW9uSW50ZXJwb2xhdG9yLmluaXRpYWxpemVQcm9wcyhzdGFydFByb3BzLCBlbmRQcm9wcyk7XG4gICAgICB2YXIgaW50ZXJhY3Rpb25TdGF0ZSA9IHtcbiAgICAgICAgaW5UcmFuc2l0aW9uOiB0cnVlLFxuICAgICAgICBpc1pvb21pbmc6IHN0YXJ0UHJvcHMuem9vbSAhPT0gZW5kUHJvcHMuem9vbSxcbiAgICAgICAgaXNQYW5uaW5nOiBzdGFydFByb3BzLmxvbmdpdHVkZSAhPT0gZW5kUHJvcHMubG9uZ2l0dWRlIHx8IHN0YXJ0UHJvcHMubGF0aXR1ZGUgIT09IGVuZFByb3BzLmxhdGl0dWRlLFxuICAgICAgICBpc1JvdGF0aW5nOiBzdGFydFByb3BzLmJlYXJpbmcgIT09IGVuZFByb3BzLmJlYXJpbmcgfHwgc3RhcnRQcm9wcy5waXRjaCAhPT0gZW5kUHJvcHMucGl0Y2hcbiAgICAgIH07XG4gICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICBkdXJhdGlvbjogZHVyYXRpb24sXG4gICAgICAgIGVhc2luZzogZW5kUHJvcHMudHJhbnNpdGlvbkVhc2luZyxcbiAgICAgICAgaW50ZXJwb2xhdG9yOiBlbmRQcm9wcy50cmFuc2l0aW9uSW50ZXJwb2xhdG9yLFxuICAgICAgICBpbnRlcnJ1cHRpb246IGVuZFByb3BzLnRyYW5zaXRpb25JbnRlcnJ1cHRpb24sXG4gICAgICAgIHN0YXJ0VGltZTogdGhpcy50aW1lKCksXG4gICAgICAgIHN0YXJ0UHJvcHM6IGluaXRpYWxQcm9wcy5zdGFydCxcbiAgICAgICAgZW5kUHJvcHM6IGluaXRpYWxQcm9wcy5lbmQsXG4gICAgICAgIGFuaW1hdGlvbjogbnVsbCxcbiAgICAgICAgcHJvcHNJblRyYW5zaXRpb246IHt9XG4gICAgICB9O1xuXG4gICAgICB0aGlzLl9vblRyYW5zaXRpb25GcmFtZSgpO1xuXG4gICAgICB0aGlzLm9uU3RhdGVDaGFuZ2UoaW50ZXJhY3Rpb25TdGF0ZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIl9lbmRUcmFuc2l0aW9uXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9lbmRUcmFuc2l0aW9uKCkge1xuICAgICAgaWYgKHRoaXMuX2FuaW1hdGlvbkZyYW1lKSB7XG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX2FuaW1hdGlvbkZyYW1lKTtcbiAgICAgICAgdGhpcy5fYW5pbWF0aW9uRnJhbWUgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICB0aGlzLm9uU3RhdGVDaGFuZ2Uoe1xuICAgICAgICBpblRyYW5zaXRpb246IGZhbHNlLFxuICAgICAgICBpc1pvb21pbmc6IGZhbHNlLFxuICAgICAgICBpc1Bhbm5pbmc6IGZhbHNlLFxuICAgICAgICBpc1JvdGF0aW5nOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIl91cGRhdGVWaWV3cG9ydFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfdXBkYXRlVmlld3BvcnQoKSB7XG4gICAgICB2YXIgY3VycmVudFRpbWUgPSB0aGlzLnRpbWUoKTtcbiAgICAgIHZhciBfdGhpcyRzdGF0ZSA9IHRoaXMuc3RhdGUsXG4gICAgICAgICAgc3RhcnRUaW1lID0gX3RoaXMkc3RhdGUuc3RhcnRUaW1lLFxuICAgICAgICAgIGR1cmF0aW9uID0gX3RoaXMkc3RhdGUuZHVyYXRpb24sXG4gICAgICAgICAgZWFzaW5nID0gX3RoaXMkc3RhdGUuZWFzaW5nLFxuICAgICAgICAgIGludGVycG9sYXRvciA9IF90aGlzJHN0YXRlLmludGVycG9sYXRvcixcbiAgICAgICAgICBzdGFydFByb3BzID0gX3RoaXMkc3RhdGUuc3RhcnRQcm9wcyxcbiAgICAgICAgICBlbmRQcm9wcyA9IF90aGlzJHN0YXRlLmVuZFByb3BzO1xuICAgICAgdmFyIHNob3VsZEVuZCA9IGZhbHNlO1xuICAgICAgdmFyIHQgPSAoY3VycmVudFRpbWUgLSBzdGFydFRpbWUpIC8gZHVyYXRpb247XG5cbiAgICAgIGlmICh0ID49IDEpIHtcbiAgICAgICAgdCA9IDE7XG4gICAgICAgIHNob3VsZEVuZCA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIHQgPSBlYXNpbmcodCk7XG4gICAgICB2YXIgdmlld3BvcnQgPSBpbnRlcnBvbGF0b3IuaW50ZXJwb2xhdGVQcm9wcyhzdGFydFByb3BzLCBlbmRQcm9wcywgdCk7XG4gICAgICB2YXIgbWFwU3RhdGUgPSBuZXcgTWFwU3RhdGUoT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5wcm9wcywgdmlld3BvcnQpKTtcbiAgICAgIHRoaXMuc3RhdGUucHJvcHNJblRyYW5zaXRpb24gPSBtYXBTdGF0ZS5nZXRWaWV3cG9ydFByb3BzKCk7XG4gICAgICB0aGlzLm9uVmlld3BvcnRDaGFuZ2UodGhpcy5zdGF0ZS5wcm9wc0luVHJhbnNpdGlvbiwgdGhpcy5wcm9wcyk7XG5cbiAgICAgIGlmIChzaG91bGRFbmQpIHtcbiAgICAgICAgdGhpcy5fZW5kVHJhbnNpdGlvbigpO1xuXG4gICAgICAgIHRoaXMucHJvcHMub25UcmFuc2l0aW9uRW5kKCk7XG4gICAgICB9XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFRyYW5zaXRpb25NYW5hZ2VyO1xufSgpO1xuXG5fZGVmaW5lUHJvcGVydHkoVHJhbnNpdGlvbk1hbmFnZXIsIFwiZGVmYXVsdFByb3BzXCIsIERFRkFVTFRfUFJPUFMpO1xuXG5leHBvcnQgeyBUcmFuc2l0aW9uTWFuYWdlciBhcyBkZWZhdWx0IH07IiwidmFyIElOUFVUX1NUQVJUID0gMTtcbnZhciBJTlBVVF9NT1ZFID0gMjtcbnZhciBJTlBVVF9FTkQgPSA0O1xudmFyIE1PVVNFX0lOUFVUX01BUCA9IHtcbiAgbW91c2Vkb3duOiBJTlBVVF9TVEFSVCxcbiAgbW91c2Vtb3ZlOiBJTlBVVF9NT1ZFLFxuICBtb3VzZXVwOiBJTlBVVF9FTkRcbn07XG5cbmZ1bmN0aW9uIHNvbWUoYXJyYXksIHByZWRpY3QpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykge1xuICAgIGlmIChwcmVkaWN0KGFycmF5W2ldKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5oYW5jZVBvaW50ZXJFdmVudElucHV0KFBvaW50ZXJFdmVudElucHV0KSB7XG4gIHZhciBvbGRIYW5kbGVyID0gUG9pbnRlckV2ZW50SW5wdXQucHJvdG90eXBlLmhhbmRsZXI7XG5cbiAgUG9pbnRlckV2ZW50SW5wdXQucHJvdG90eXBlLmhhbmRsZXIgPSBmdW5jdGlvbiBoYW5kbGVyKGV2KSB7XG4gICAgdmFyIHN0b3JlID0gdGhpcy5zdG9yZTtcblxuICAgIGlmIChldi5idXR0b24gPiAwICYmIGV2LnR5cGUgPT09ICdwb2ludGVyZG93bicpIHtcbiAgICAgIGlmICghc29tZShzdG9yZSwgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgcmV0dXJuIGUucG9pbnRlcklkID09PSBldi5wb2ludGVySWQ7XG4gICAgICB9KSkge1xuICAgICAgICBzdG9yZS5wdXNoKGV2KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBvbGRIYW5kbGVyLmNhbGwodGhpcywgZXYpO1xuICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGVuaGFuY2VNb3VzZUlucHV0KE1vdXNlSW5wdXQpIHtcbiAgTW91c2VJbnB1dC5wcm90b3R5cGUuaGFuZGxlciA9IGZ1bmN0aW9uIGhhbmRsZXIoZXYpIHtcbiAgICB2YXIgZXZlbnRUeXBlID0gTU9VU0VfSU5QVVRfTUFQW2V2LnR5cGVdO1xuXG4gICAgaWYgKGV2ZW50VHlwZSAmIElOUFVUX1NUQVJUICYmIGV2LmJ1dHRvbiA+PSAwKSB7XG4gICAgICB0aGlzLnByZXNzZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChldmVudFR5cGUgJiBJTlBVVF9NT1ZFICYmIGV2LndoaWNoID09PSAwKSB7XG4gICAgICBldmVudFR5cGUgPSBJTlBVVF9FTkQ7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnByZXNzZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnRUeXBlICYgSU5QVVRfRU5EKSB7XG4gICAgICB0aGlzLnByZXNzZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmNhbGxiYWNrKHRoaXMubWFuYWdlciwgZXZlbnRUeXBlLCB7XG4gICAgICBwb2ludGVyczogW2V2XSxcbiAgICAgIGNoYW5nZWRQb2ludGVyczogW2V2XSxcbiAgICAgIHBvaW50ZXJUeXBlOiAnbW91c2UnLFxuICAgICAgc3JjRXZlbnQ6IGV2XG4gICAgfSk7XG4gIH07XG59IiwiaW1wb3J0IGhhbW1lcmpzIGZyb20gJ2hhbW1lcmpzJztcbmltcG9ydCB7IGVuaGFuY2VQb2ludGVyRXZlbnRJbnB1dCwgZW5oYW5jZU1vdXNlSW5wdXQgfSBmcm9tICcuL2hhbW1lci1vdmVycmlkZXMnO1xuZW5oYW5jZVBvaW50ZXJFdmVudElucHV0KGhhbW1lcmpzLlBvaW50ZXJFdmVudElucHV0KTtcbmVuaGFuY2VNb3VzZUlucHV0KGhhbW1lcmpzLk1vdXNlSW5wdXQpO1xuZXhwb3J0IHZhciBNYW5hZ2VyID0gaGFtbWVyanMuTWFuYWdlcjtcbmV4cG9ydCBkZWZhdWx0IGhhbW1lcmpzOyIsImltcG9ydCBIYW1tZXIgZnJvbSAnLi91dGlscy9oYW1tZXInO1xuZXhwb3J0IHZhciBSRUNPR05JWkVSUyA9IEhhbW1lciA/IFtbSGFtbWVyLlBhbiwge1xuICBldmVudDogJ3RyaXBhbicsXG4gIHBvaW50ZXJzOiAzLFxuICB0aHJlc2hvbGQ6IDAsXG4gIGVuYWJsZTogZmFsc2Vcbn1dLCBbSGFtbWVyLlJvdGF0ZSwge1xuICBlbmFibGU6IGZhbHNlXG59XSwgW0hhbW1lci5QaW5jaCwge1xuICBlbmFibGU6IGZhbHNlXG59XSwgW0hhbW1lci5Td2lwZSwge1xuICBlbmFibGU6IGZhbHNlXG59XSwgW0hhbW1lci5QYW4sIHtcbiAgdGhyZXNob2xkOiAwLFxuICBlbmFibGU6IGZhbHNlXG59XSwgW0hhbW1lci5QcmVzcywge1xuICBlbmFibGU6IGZhbHNlXG59XSwgW0hhbW1lci5UYXAsIHtcbiAgZXZlbnQ6ICdkb3VibGV0YXAnLFxuICB0YXBzOiAyLFxuICBlbmFibGU6IGZhbHNlXG59XSwgW0hhbW1lci5UYXAsIHtcbiAgZXZlbnQ6ICdhbnl0YXAnLFxuICBlbmFibGU6IGZhbHNlXG59XSwgW0hhbW1lci5UYXAsIHtcbiAgZW5hYmxlOiBmYWxzZVxufV1dIDogbnVsbDtcbmV4cG9ydCB2YXIgUkVDT0dOSVpFUl9DT01QQVRJQkxFX01BUCA9IHtcbiAgdHJpcGFuOiBbJ3JvdGF0ZScsICdwaW5jaCcsICdwYW4nXSxcbiAgcm90YXRlOiBbJ3BpbmNoJ10sXG4gIHBpbmNoOiBbJ3BhbiddLFxuICBwYW46IFsncHJlc3MnLCAnZG91YmxldGFwJywgJ2FueXRhcCcsICd0YXAnXSxcbiAgZG91YmxldGFwOiBbJ2FueXRhcCddLFxuICBhbnl0YXA6IFsndGFwJ11cbn07XG5leHBvcnQgdmFyIFJFQ09HTklaRVJfRkFMTEJBQ0tfTUFQID0ge1xuICBkb3VibGV0YXA6IFsndGFwJ11cbn07XG5leHBvcnQgdmFyIEJBU0lDX0VWRU5UX0FMSUFTRVMgPSB7XG4gIHBvaW50ZXJkb3duOiAncG9pbnRlcmRvd24nLFxuICBwb2ludGVybW92ZTogJ3BvaW50ZXJtb3ZlJyxcbiAgcG9pbnRlcnVwOiAncG9pbnRlcnVwJyxcbiAgdG91Y2hzdGFydDogJ3BvaW50ZXJkb3duJyxcbiAgdG91Y2htb3ZlOiAncG9pbnRlcm1vdmUnLFxuICB0b3VjaGVuZDogJ3BvaW50ZXJ1cCcsXG4gIG1vdXNlZG93bjogJ3BvaW50ZXJkb3duJyxcbiAgbW91c2Vtb3ZlOiAncG9pbnRlcm1vdmUnLFxuICBtb3VzZXVwOiAncG9pbnRlcnVwJ1xufTtcbmV4cG9ydCB2YXIgSU5QVVRfRVZFTlRfVFlQRVMgPSB7XG4gIEtFWV9FVkVOVFM6IFsna2V5ZG93bicsICdrZXl1cCddLFxuICBNT1VTRV9FVkVOVFM6IFsnbW91c2Vkb3duJywgJ21vdXNlbW92ZScsICdtb3VzZXVwJywgJ21vdXNlb3ZlcicsICdtb3VzZW91dCcsICdtb3VzZWxlYXZlJ10sXG4gIFdIRUVMX0VWRU5UUzogWyd3aGVlbCcsICdtb3VzZXdoZWVsJ11cbn07XG5leHBvcnQgdmFyIEVWRU5UX1JFQ09HTklaRVJfTUFQID0ge1xuICB0YXA6ICd0YXAnLFxuICBhbnl0YXA6ICdhbnl0YXAnLFxuICBkb3VibGV0YXA6ICdkb3VibGV0YXAnLFxuICBwcmVzczogJ3ByZXNzJyxcbiAgcGluY2g6ICdwaW5jaCcsXG4gIHBpbmNoaW46ICdwaW5jaCcsXG4gIHBpbmNob3V0OiAncGluY2gnLFxuICBwaW5jaHN0YXJ0OiAncGluY2gnLFxuICBwaW5jaG1vdmU6ICdwaW5jaCcsXG4gIHBpbmNoZW5kOiAncGluY2gnLFxuICBwaW5jaGNhbmNlbDogJ3BpbmNoJyxcbiAgcm90YXRlOiAncm90YXRlJyxcbiAgcm90YXRlc3RhcnQ6ICdyb3RhdGUnLFxuICByb3RhdGVtb3ZlOiAncm90YXRlJyxcbiAgcm90YXRlZW5kOiAncm90YXRlJyxcbiAgcm90YXRlY2FuY2VsOiAncm90YXRlJyxcbiAgdHJpcGFuOiAndHJpcGFuJyxcbiAgdHJpcGFuc3RhcnQ6ICd0cmlwYW4nLFxuICB0cmlwYW5tb3ZlOiAndHJpcGFuJyxcbiAgdHJpcGFudXA6ICd0cmlwYW4nLFxuICB0cmlwYW5kb3duOiAndHJpcGFuJyxcbiAgdHJpcGFubGVmdDogJ3RyaXBhbicsXG4gIHRyaXBhbnJpZ2h0OiAndHJpcGFuJyxcbiAgdHJpcGFuZW5kOiAndHJpcGFuJyxcbiAgdHJpcGFuY2FuY2VsOiAndHJpcGFuJyxcbiAgcGFuOiAncGFuJyxcbiAgcGFuc3RhcnQ6ICdwYW4nLFxuICBwYW5tb3ZlOiAncGFuJyxcbiAgcGFudXA6ICdwYW4nLFxuICBwYW5kb3duOiAncGFuJyxcbiAgcGFubGVmdDogJ3BhbicsXG4gIHBhbnJpZ2h0OiAncGFuJyxcbiAgcGFuZW5kOiAncGFuJyxcbiAgcGFuY2FuY2VsOiAncGFuJyxcbiAgc3dpcGU6ICdzd2lwZScsXG4gIHN3aXBlbGVmdDogJ3N3aXBlJyxcbiAgc3dpcGVyaWdodDogJ3N3aXBlJyxcbiAgc3dpcGV1cDogJ3N3aXBlJyxcbiAgc3dpcGVkb3duOiAnc3dpcGUnXG59O1xuZXhwb3J0IHZhciBHRVNUVVJFX0VWRU5UX0FMSUFTRVMgPSB7XG4gIGNsaWNrOiAndGFwJyxcbiAgYW55Y2xpY2s6ICdhbnl0YXAnLFxuICBkYmxjbGljazogJ2RvdWJsZXRhcCcsXG4gIG1vdXNlZG93bjogJ3BvaW50ZXJkb3duJyxcbiAgbW91c2Vtb3ZlOiAncG9pbnRlcm1vdmUnLFxuICBtb3VzZXVwOiAncG9pbnRlcnVwJyxcbiAgbW91c2VvdmVyOiAncG9pbnRlcm92ZXInLFxuICBtb3VzZW91dDogJ3BvaW50ZXJvdXQnLFxuICBtb3VzZWxlYXZlOiAncG9pbnRlcmxlYXZlJ1xufTsiLCJleHBvcnQgdmFyIHVzZXJBZ2VudCA9IHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci51c2VyQWdlbnQgPyBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkgOiAnJztcbnZhciB3aW5kb3dfID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cgOiBnbG9iYWw7XG52YXIgZ2xvYmFsXyA9IHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsIDogd2luZG93O1xudmFyIGRvY3VtZW50XyA9IHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgPyBkb2N1bWVudCA6IHt9O1xuZXhwb3J0IHsgd2luZG93XyBhcyB3aW5kb3csIGdsb2JhbF8gYXMgZ2xvYmFsLCBkb2N1bWVudF8gYXMgZG9jdW1lbnQgfTtcbnZhciBwYXNzaXZlU3VwcG9ydGVkID0gZmFsc2U7XG5cbnRyeSB7XG4gIHZhciBvcHRpb25zID0ge1xuICAgIGdldCBwYXNzaXZlKCkge1xuICAgICAgcGFzc2l2ZVN1cHBvcnRlZCA9IHRydWU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgfTtcbiAgd2luZG93Xy5hZGRFdmVudExpc3RlbmVyKCd0ZXN0Jywgb3B0aW9ucywgb3B0aW9ucyk7XG4gIHdpbmRvd18ucmVtb3ZlRXZlbnRMaXN0ZW5lcigndGVzdCcsIG9wdGlvbnMsIG9wdGlvbnMpO1xufSBjYXRjaCAoZXJyKSB7fVxuXG5leHBvcnQgeyBwYXNzaXZlU3VwcG9ydGVkIH07IiwiaW1wb3J0IF9jbGFzc0NhbGxDaGVjayBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvanVzdGljZTQwLXRvb2wvanVzdGljZTQwLXRvb2wvY2xpZW50L25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jbGFzc0NhbGxDaGVja1wiO1xuaW1wb3J0IF9jcmVhdGVDbGFzcyBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvanVzdGljZTQwLXRvb2wvanVzdGljZTQwLXRvb2wvY2xpZW50L25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jcmVhdGVDbGFzc1wiO1xuaW1wb3J0IHsgSU5QVVRfRVZFTlRfVFlQRVMgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgd2luZG93LCB1c2VyQWdlbnQsIHBhc3NpdmVTdXBwb3J0ZWQgfSBmcm9tICcuLi91dGlscy9nbG9iYWxzJztcbnZhciBmaXJlZm94ID0gdXNlckFnZW50LmluZGV4T2YoJ2ZpcmVmb3gnKSAhPT0gLTE7XG52YXIgV0hFRUxfRVZFTlRTID0gSU5QVVRfRVZFTlRfVFlQRVMuV0hFRUxfRVZFTlRTO1xudmFyIEVWRU5UX1RZUEUgPSAnd2hlZWwnO1xudmFyIFdIRUVMX0RFTFRBX01BR0lDX1NDQUxFUiA9IDQuMDAwMjQ0MTQwNjI1O1xudmFyIFdIRUVMX0RFTFRBX1BFUl9MSU5FID0gNDA7XG52YXIgU0hJRlRfTVVMVElQTElFUiA9IDAuMjU7XG5cbnZhciBXaGVlbElucHV0ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gV2hlZWxJbnB1dChlbGVtZW50LCBjYWxsYmFjaykge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDoge307XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgV2hlZWxJbnB1dCk7XG5cbiAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICB0aGlzLm9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHtcbiAgICAgIGVuYWJsZTogdHJ1ZVxuICAgIH0sIG9wdGlvbnMpO1xuICAgIHRoaXMuZXZlbnRzID0gV0hFRUxfRVZFTlRTLmNvbmNhdChvcHRpb25zLmV2ZW50cyB8fCBbXSk7XG4gICAgdGhpcy5oYW5kbGVFdmVudCA9IHRoaXMuaGFuZGxlRXZlbnQuYmluZCh0aGlzKTtcbiAgICB0aGlzLmV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgcmV0dXJuIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgX3RoaXMuaGFuZGxlRXZlbnQsIHBhc3NpdmVTdXBwb3J0ZWQgPyB7XG4gICAgICAgIHBhc3NpdmU6IGZhbHNlXG4gICAgICB9IDogZmFsc2UpO1xuICAgIH0pO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFdoZWVsSW5wdXQsIFt7XG4gICAga2V5OiBcImRlc3Ryb3lcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB0aGlzLmV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICByZXR1cm4gX3RoaXMyLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgX3RoaXMyLmhhbmRsZUV2ZW50KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJlbmFibGVFdmVudFR5cGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZW5hYmxlRXZlbnRUeXBlKGV2ZW50VHlwZSwgZW5hYmxlZCkge1xuICAgICAgaWYgKGV2ZW50VHlwZSA9PT0gRVZFTlRfVFlQRSkge1xuICAgICAgICB0aGlzLm9wdGlvbnMuZW5hYmxlID0gZW5hYmxlZDtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaGFuZGxlRXZlbnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlRXZlbnQoZXZlbnQpIHtcbiAgICAgIGlmICghdGhpcy5vcHRpb25zLmVuYWJsZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciB2YWx1ZSA9IGV2ZW50LmRlbHRhWTtcblxuICAgICAgaWYgKHdpbmRvdy5XaGVlbEV2ZW50KSB7XG4gICAgICAgIGlmIChmaXJlZm94ICYmIGV2ZW50LmRlbHRhTW9kZSA9PT0gd2luZG93LldoZWVsRXZlbnQuRE9NX0RFTFRBX1BJWEVMKSB7XG4gICAgICAgICAgdmFsdWUgLz0gd2luZG93LmRldmljZVBpeGVsUmF0aW87XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXZlbnQuZGVsdGFNb2RlID09PSB3aW5kb3cuV2hlZWxFdmVudC5ET01fREVMVEFfTElORSkge1xuICAgICAgICAgIHZhbHVlICo9IFdIRUVMX0RFTFRBX1BFUl9MSU5FO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciB3aGVlbFBvc2l0aW9uID0ge1xuICAgICAgICB4OiBldmVudC5jbGllbnRYLFxuICAgICAgICB5OiBldmVudC5jbGllbnRZXG4gICAgICB9O1xuXG4gICAgICBpZiAodmFsdWUgIT09IDAgJiYgdmFsdWUgJSBXSEVFTF9ERUxUQV9NQUdJQ19TQ0FMRVIgPT09IDApIHtcbiAgICAgICAgdmFsdWUgPSBNYXRoLmZsb29yKHZhbHVlIC8gV0hFRUxfREVMVEFfTUFHSUNfU0NBTEVSKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50LnNoaWZ0S2V5ICYmIHZhbHVlKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUgKiBTSElGVF9NVUxUSVBMSUVSO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9vbldoZWVsKGV2ZW50LCAtdmFsdWUsIHdoZWVsUG9zaXRpb24pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJfb25XaGVlbFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfb25XaGVlbChzcmNFdmVudCwgZGVsdGEsIHBvc2l0aW9uKSB7XG4gICAgICB0aGlzLmNhbGxiYWNrKHtcbiAgICAgICAgdHlwZTogRVZFTlRfVFlQRSxcbiAgICAgICAgY2VudGVyOiBwb3NpdGlvbixcbiAgICAgICAgZGVsdGE6IGRlbHRhLFxuICAgICAgICBzcmNFdmVudDogc3JjRXZlbnQsXG4gICAgICAgIHBvaW50ZXJUeXBlOiAnbW91c2UnLFxuICAgICAgICB0YXJnZXQ6IHNyY0V2ZW50LnRhcmdldFxuICAgICAgfSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFdoZWVsSW5wdXQ7XG59KCk7XG5cbmV4cG9ydCB7IFdoZWVsSW5wdXQgYXMgZGVmYXVsdCB9OyIsImltcG9ydCBfY2xhc3NDYWxsQ2hlY2sgZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL2p1c3RpY2U0MC10b29sL2p1c3RpY2U0MC10b29sL2NsaWVudC9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY2xhc3NDYWxsQ2hlY2tcIjtcbmltcG9ydCBfY3JlYXRlQ2xhc3MgZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL2p1c3RpY2U0MC10b29sL2p1c3RpY2U0MC10b29sL2NsaWVudC9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY3JlYXRlQ2xhc3NcIjtcbmltcG9ydCB7IElOUFVUX0VWRU5UX1RZUEVTIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbnZhciBNT1VTRV9FVkVOVFMgPSBJTlBVVF9FVkVOVF9UWVBFUy5NT1VTRV9FVkVOVFM7XG52YXIgTU9WRV9FVkVOVF9UWVBFID0gJ3BvaW50ZXJtb3ZlJztcbnZhciBPVkVSX0VWRU5UX1RZUEUgPSAncG9pbnRlcm92ZXInO1xudmFyIE9VVF9FVkVOVF9UWVBFID0gJ3BvaW50ZXJvdXQnO1xudmFyIExFQVZFX0VWRU5UX1RZUEUgPSAncG9pbnRlcmxlYXZlJztcblxudmFyIE1vdmVJbnB1dCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIE1vdmVJbnB1dChlbGVtZW50LCBjYWxsYmFjaykge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDoge307XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgTW92ZUlucHV0KTtcblxuICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgIHRoaXMucHJlc3NlZCA9IGZhbHNlO1xuICAgIHRoaXMub3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgZW5hYmxlOiB0cnVlXG4gICAgfSwgb3B0aW9ucyk7XG4gICAgdGhpcy5lbmFibGVNb3ZlRXZlbnQgPSB0aGlzLm9wdGlvbnMuZW5hYmxlO1xuICAgIHRoaXMuZW5hYmxlTGVhdmVFdmVudCA9IHRoaXMub3B0aW9ucy5lbmFibGU7XG4gICAgdGhpcy5lbmFibGVPdXRFdmVudCA9IHRoaXMub3B0aW9ucy5lbmFibGU7XG4gICAgdGhpcy5lbmFibGVPdmVyRXZlbnQgPSB0aGlzLm9wdGlvbnMuZW5hYmxlO1xuICAgIHRoaXMuZXZlbnRzID0gTU9VU0VfRVZFTlRTLmNvbmNhdChvcHRpb25zLmV2ZW50cyB8fCBbXSk7XG4gICAgdGhpcy5oYW5kbGVFdmVudCA9IHRoaXMuaGFuZGxlRXZlbnQuYmluZCh0aGlzKTtcbiAgICB0aGlzLmV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgcmV0dXJuIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgX3RoaXMuaGFuZGxlRXZlbnQpO1xuICAgIH0pO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKE1vdmVJbnB1dCwgW3tcbiAgICBrZXk6IFwiZGVzdHJveVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHRoaXMuZXZlbnRzLmZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHJldHVybiBfdGhpczIuZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50LCBfdGhpczIuaGFuZGxlRXZlbnQpO1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImVuYWJsZUV2ZW50VHlwZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBlbmFibGVFdmVudFR5cGUoZXZlbnRUeXBlLCBlbmFibGVkKSB7XG4gICAgICBpZiAoZXZlbnRUeXBlID09PSBNT1ZFX0VWRU5UX1RZUEUpIHtcbiAgICAgICAgdGhpcy5lbmFibGVNb3ZlRXZlbnQgPSBlbmFibGVkO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnRUeXBlID09PSBPVkVSX0VWRU5UX1RZUEUpIHtcbiAgICAgICAgdGhpcy5lbmFibGVPdmVyRXZlbnQgPSBlbmFibGVkO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnRUeXBlID09PSBPVVRfRVZFTlRfVFlQRSkge1xuICAgICAgICB0aGlzLmVuYWJsZU91dEV2ZW50ID0gZW5hYmxlZDtcbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50VHlwZSA9PT0gTEVBVkVfRVZFTlRfVFlQRSkge1xuICAgICAgICB0aGlzLmVuYWJsZUxlYXZlRXZlbnQgPSBlbmFibGVkO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJoYW5kbGVFdmVudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVFdmVudChldmVudCkge1xuICAgICAgdGhpcy5oYW5kbGVPdmVyRXZlbnQoZXZlbnQpO1xuICAgICAgdGhpcy5oYW5kbGVPdXRFdmVudChldmVudCk7XG4gICAgICB0aGlzLmhhbmRsZUxlYXZlRXZlbnQoZXZlbnQpO1xuICAgICAgdGhpcy5oYW5kbGVNb3ZlRXZlbnQoZXZlbnQpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJoYW5kbGVPdmVyRXZlbnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlT3ZlckV2ZW50KGV2ZW50KSB7XG4gICAgICBpZiAodGhpcy5lbmFibGVPdmVyRXZlbnQpIHtcbiAgICAgICAgaWYgKGV2ZW50LnR5cGUgPT09ICdtb3VzZW92ZXInKSB7XG4gICAgICAgICAgdGhpcy5jYWxsYmFjayh7XG4gICAgICAgICAgICB0eXBlOiBPVkVSX0VWRU5UX1RZUEUsXG4gICAgICAgICAgICBzcmNFdmVudDogZXZlbnQsXG4gICAgICAgICAgICBwb2ludGVyVHlwZTogJ21vdXNlJyxcbiAgICAgICAgICAgIHRhcmdldDogZXZlbnQudGFyZ2V0XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaGFuZGxlT3V0RXZlbnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlT3V0RXZlbnQoZXZlbnQpIHtcbiAgICAgIGlmICh0aGlzLmVuYWJsZU91dEV2ZW50KSB7XG4gICAgICAgIGlmIChldmVudC50eXBlID09PSAnbW91c2VvdXQnKSB7XG4gICAgICAgICAgdGhpcy5jYWxsYmFjayh7XG4gICAgICAgICAgICB0eXBlOiBPVVRfRVZFTlRfVFlQRSxcbiAgICAgICAgICAgIHNyY0V2ZW50OiBldmVudCxcbiAgICAgICAgICAgIHBvaW50ZXJUeXBlOiAnbW91c2UnLFxuICAgICAgICAgICAgdGFyZ2V0OiBldmVudC50YXJnZXRcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJoYW5kbGVMZWF2ZUV2ZW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGhhbmRsZUxlYXZlRXZlbnQoZXZlbnQpIHtcbiAgICAgIGlmICh0aGlzLmVuYWJsZUxlYXZlRXZlbnQpIHtcbiAgICAgICAgaWYgKGV2ZW50LnR5cGUgPT09ICdtb3VzZWxlYXZlJykge1xuICAgICAgICAgIHRoaXMuY2FsbGJhY2soe1xuICAgICAgICAgICAgdHlwZTogTEVBVkVfRVZFTlRfVFlQRSxcbiAgICAgICAgICAgIHNyY0V2ZW50OiBldmVudCxcbiAgICAgICAgICAgIHBvaW50ZXJUeXBlOiAnbW91c2UnLFxuICAgICAgICAgICAgdGFyZ2V0OiBldmVudC50YXJnZXRcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJoYW5kbGVNb3ZlRXZlbnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlTW92ZUV2ZW50KGV2ZW50KSB7XG4gICAgICBpZiAodGhpcy5lbmFibGVNb3ZlRXZlbnQpIHtcbiAgICAgICAgc3dpdGNoIChldmVudC50eXBlKSB7XG4gICAgICAgICAgY2FzZSAnbW91c2Vkb3duJzpcbiAgICAgICAgICAgIGlmIChldmVudC5idXR0b24gPj0gMCkge1xuICAgICAgICAgICAgICB0aGlzLnByZXNzZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ21vdXNlbW92ZSc6XG4gICAgICAgICAgICBpZiAoZXZlbnQud2hpY2ggPT09IDApIHtcbiAgICAgICAgICAgICAgdGhpcy5wcmVzc2VkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5wcmVzc2VkKSB7XG4gICAgICAgICAgICAgIHRoaXMuY2FsbGJhY2soe1xuICAgICAgICAgICAgICAgIHR5cGU6IE1PVkVfRVZFTlRfVFlQRSxcbiAgICAgICAgICAgICAgICBzcmNFdmVudDogZXZlbnQsXG4gICAgICAgICAgICAgICAgcG9pbnRlclR5cGU6ICdtb3VzZScsXG4gICAgICAgICAgICAgICAgdGFyZ2V0OiBldmVudC50YXJnZXRcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAnbW91c2V1cCc6XG4gICAgICAgICAgICB0aGlzLnByZXNzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBNb3ZlSW5wdXQ7XG59KCk7XG5cbmV4cG9ydCB7IE1vdmVJbnB1dCBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IF9jbGFzc0NhbGxDaGVjayBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvanVzdGljZTQwLXRvb2wvanVzdGljZTQwLXRvb2wvY2xpZW50L25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jbGFzc0NhbGxDaGVja1wiO1xuaW1wb3J0IF9jcmVhdGVDbGFzcyBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvanVzdGljZTQwLXRvb2wvanVzdGljZTQwLXRvb2wvY2xpZW50L25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jcmVhdGVDbGFzc1wiO1xuaW1wb3J0IHsgSU5QVVRfRVZFTlRfVFlQRVMgfSBmcm9tICcuLi9jb25zdGFudHMnO1xudmFyIEtFWV9FVkVOVFMgPSBJTlBVVF9FVkVOVF9UWVBFUy5LRVlfRVZFTlRTO1xudmFyIERPV05fRVZFTlRfVFlQRSA9ICdrZXlkb3duJztcbnZhciBVUF9FVkVOVF9UWVBFID0gJ2tleXVwJztcblxudmFyIEtleUlucHV0ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gS2V5SW5wdXQoZWxlbWVudCwgY2FsbGJhY2spIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHt9O1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEtleUlucHV0KTtcblxuICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgIHRoaXMub3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgZW5hYmxlOiB0cnVlXG4gICAgfSwgb3B0aW9ucyk7XG4gICAgdGhpcy5lbmFibGVEb3duRXZlbnQgPSB0aGlzLm9wdGlvbnMuZW5hYmxlO1xuICAgIHRoaXMuZW5hYmxlVXBFdmVudCA9IHRoaXMub3B0aW9ucy5lbmFibGU7XG4gICAgdGhpcy5ldmVudHMgPSBLRVlfRVZFTlRTLmNvbmNhdChvcHRpb25zLmV2ZW50cyB8fCBbXSk7XG4gICAgdGhpcy5oYW5kbGVFdmVudCA9IHRoaXMuaGFuZGxlRXZlbnQuYmluZCh0aGlzKTtcbiAgICBlbGVtZW50LnRhYkluZGV4ID0gb3B0aW9ucy50YWJJbmRleCB8fCAwO1xuICAgIGVsZW1lbnQuc3R5bGUub3V0bGluZSA9ICdub25lJztcbiAgICB0aGlzLmV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgcmV0dXJuIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgX3RoaXMuaGFuZGxlRXZlbnQpO1xuICAgIH0pO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEtleUlucHV0LCBbe1xuICAgIGtleTogXCJkZXN0cm95XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgdGhpcy5ldmVudHMuZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzMi5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQsIF90aGlzMi5oYW5kbGVFdmVudCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZW5hYmxlRXZlbnRUeXBlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGVuYWJsZUV2ZW50VHlwZShldmVudFR5cGUsIGVuYWJsZWQpIHtcbiAgICAgIGlmIChldmVudFR5cGUgPT09IERPV05fRVZFTlRfVFlQRSkge1xuICAgICAgICB0aGlzLmVuYWJsZURvd25FdmVudCA9IGVuYWJsZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudFR5cGUgPT09IFVQX0VWRU5UX1RZUEUpIHtcbiAgICAgICAgdGhpcy5lbmFibGVVcEV2ZW50ID0gZW5hYmxlZDtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaGFuZGxlRXZlbnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlRXZlbnQoZXZlbnQpIHtcbiAgICAgIHZhciB0YXJnZXRFbGVtZW50ID0gZXZlbnQudGFyZ2V0IHx8IGV2ZW50LnNyY0VsZW1lbnQ7XG5cbiAgICAgIGlmICh0YXJnZXRFbGVtZW50LnRhZ05hbWUgPT09ICdJTlBVVCcgJiYgdGFyZ2V0RWxlbWVudC50eXBlID09PSAndGV4dCcgfHwgdGFyZ2V0RWxlbWVudC50YWdOYW1lID09PSAnVEVYVEFSRUEnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuZW5hYmxlRG93bkV2ZW50ICYmIGV2ZW50LnR5cGUgPT09ICdrZXlkb3duJykge1xuICAgICAgICB0aGlzLmNhbGxiYWNrKHtcbiAgICAgICAgICB0eXBlOiBET1dOX0VWRU5UX1RZUEUsXG4gICAgICAgICAgc3JjRXZlbnQ6IGV2ZW50LFxuICAgICAgICAgIGtleTogZXZlbnQua2V5LFxuICAgICAgICAgIHRhcmdldDogZXZlbnQudGFyZ2V0XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5lbmFibGVVcEV2ZW50ICYmIGV2ZW50LnR5cGUgPT09ICdrZXl1cCcpIHtcbiAgICAgICAgdGhpcy5jYWxsYmFjayh7XG4gICAgICAgICAgdHlwZTogVVBfRVZFTlRfVFlQRSxcbiAgICAgICAgICBzcmNFdmVudDogZXZlbnQsXG4gICAgICAgICAga2V5OiBldmVudC5rZXksXG4gICAgICAgICAgdGFyZ2V0OiBldmVudC50YXJnZXRcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEtleUlucHV0O1xufSgpO1xuXG5leHBvcnQgeyBLZXlJbnB1dCBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IF9jbGFzc0NhbGxDaGVjayBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvanVzdGljZTQwLXRvb2wvanVzdGljZTQwLXRvb2wvY2xpZW50L25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jbGFzc0NhbGxDaGVja1wiO1xuaW1wb3J0IF9jcmVhdGVDbGFzcyBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvanVzdGljZTQwLXRvb2wvanVzdGljZTQwLXRvb2wvY2xpZW50L25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jcmVhdGVDbGFzc1wiO1xudmFyIEVWRU5UX1RZUEUgPSAnY29udGV4dG1lbnUnO1xuXG52YXIgQ29udGV4dG1lbnVJbnB1dCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIENvbnRleHRtZW51SW5wdXQoZWxlbWVudCwgY2FsbGJhY2spIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDoge307XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQ29udGV4dG1lbnVJbnB1dCk7XG5cbiAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICB0aGlzLm9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHtcbiAgICAgIGVuYWJsZTogdHJ1ZVxuICAgIH0sIG9wdGlvbnMpO1xuICAgIHRoaXMuaGFuZGxlRXZlbnQgPSB0aGlzLmhhbmRsZUV2ZW50LmJpbmQodGhpcyk7XG4gICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjb250ZXh0bWVudScsIHRoaXMuaGFuZGxlRXZlbnQpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKENvbnRleHRtZW51SW5wdXQsIFt7XG4gICAga2V5OiBcImRlc3Ryb3lcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgIHRoaXMuZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdjb250ZXh0bWVudScsIHRoaXMuaGFuZGxlRXZlbnQpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJlbmFibGVFdmVudFR5cGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZW5hYmxlRXZlbnRUeXBlKGV2ZW50VHlwZSwgZW5hYmxlZCkge1xuICAgICAgaWYgKGV2ZW50VHlwZSA9PT0gRVZFTlRfVFlQRSkge1xuICAgICAgICB0aGlzLm9wdGlvbnMuZW5hYmxlID0gZW5hYmxlZDtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaGFuZGxlRXZlbnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlRXZlbnQoZXZlbnQpIHtcbiAgICAgIGlmICghdGhpcy5vcHRpb25zLmVuYWJsZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY2FsbGJhY2soe1xuICAgICAgICB0eXBlOiBFVkVOVF9UWVBFLFxuICAgICAgICBjZW50ZXI6IHtcbiAgICAgICAgICB4OiBldmVudC5jbGllbnRYLFxuICAgICAgICAgIHk6IGV2ZW50LmNsaWVudFlcbiAgICAgICAgfSxcbiAgICAgICAgc3JjRXZlbnQ6IGV2ZW50LFxuICAgICAgICBwb2ludGVyVHlwZTogJ21vdXNlJyxcbiAgICAgICAgdGFyZ2V0OiBldmVudC50YXJnZXRcbiAgICAgIH0pO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBDb250ZXh0bWVudUlucHV0O1xufSgpO1xuXG5leHBvcnQgeyBDb250ZXh0bWVudUlucHV0IGFzIGRlZmF1bHQgfTsiLCJ2YXIgRE9XTl9FVkVOVCA9IDE7XG52YXIgTU9WRV9FVkVOVCA9IDI7XG52YXIgVVBfRVZFTlQgPSA0O1xudmFyIE1PVVNFX0VWRU5UUyA9IHtcbiAgcG9pbnRlcmRvd246IERPV05fRVZFTlQsXG4gIHBvaW50ZXJtb3ZlOiBNT1ZFX0VWRU5ULFxuICBwb2ludGVydXA6IFVQX0VWRU5ULFxuICBtb3VzZWRvd246IERPV05fRVZFTlQsXG4gIG1vdXNlbW92ZTogTU9WRV9FVkVOVCxcbiAgbW91c2V1cDogVVBfRVZFTlRcbn07XG52YXIgTU9VU0VfRVZFTlRfV0hJQ0hfTEVGVCA9IDE7XG52YXIgTU9VU0VfRVZFTlRfV0hJQ0hfTUlERExFID0gMjtcbnZhciBNT1VTRV9FVkVOVF9XSElDSF9SSUdIVCA9IDM7XG52YXIgTU9VU0VfRVZFTlRfQlVUVE9OX0xFRlQgPSAwO1xudmFyIE1PVVNFX0VWRU5UX0JVVFRPTl9NSURETEUgPSAxO1xudmFyIE1PVVNFX0VWRU5UX0JVVFRPTl9SSUdIVCA9IDI7XG52YXIgTU9VU0VfRVZFTlRfQlVUVE9OU19MRUZUX01BU0sgPSAxO1xudmFyIE1PVVNFX0VWRU5UX0JVVFRPTlNfUklHSFRfTUFTSyA9IDI7XG52YXIgTU9VU0VfRVZFTlRfQlVUVE9OU19NSURETEVfTUFTSyA9IDQ7XG5leHBvcnQgZnVuY3Rpb24gd2hpY2hCdXR0b25zKGV2ZW50KSB7XG4gIHZhciBldmVudFR5cGUgPSBNT1VTRV9FVkVOVFNbZXZlbnQuc3JjRXZlbnQudHlwZV07XG5cbiAgaWYgKCFldmVudFR5cGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBfZXZlbnQkc3JjRXZlbnQgPSBldmVudC5zcmNFdmVudCxcbiAgICAgIGJ1dHRvbnMgPSBfZXZlbnQkc3JjRXZlbnQuYnV0dG9ucyxcbiAgICAgIGJ1dHRvbiA9IF9ldmVudCRzcmNFdmVudC5idXR0b24sXG4gICAgICB3aGljaCA9IF9ldmVudCRzcmNFdmVudC53aGljaDtcbiAgdmFyIGxlZnRCdXR0b24gPSBmYWxzZTtcbiAgdmFyIG1pZGRsZUJ1dHRvbiA9IGZhbHNlO1xuICB2YXIgcmlnaHRCdXR0b24gPSBmYWxzZTtcblxuICBpZiAoZXZlbnRUeXBlID09PSBVUF9FVkVOVCB8fCBldmVudFR5cGUgPT09IE1PVkVfRVZFTlQgJiYgIU51bWJlci5pc0Zpbml0ZShidXR0b25zKSkge1xuICAgIGxlZnRCdXR0b24gPSB3aGljaCA9PT0gTU9VU0VfRVZFTlRfV0hJQ0hfTEVGVDtcbiAgICBtaWRkbGVCdXR0b24gPSB3aGljaCA9PT0gTU9VU0VfRVZFTlRfV0hJQ0hfTUlERExFO1xuICAgIHJpZ2h0QnV0dG9uID0gd2hpY2ggPT09IE1PVVNFX0VWRU5UX1dISUNIX1JJR0hUO1xuICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PT0gTU9WRV9FVkVOVCkge1xuICAgIGxlZnRCdXR0b24gPSBCb29sZWFuKGJ1dHRvbnMgJiBNT1VTRV9FVkVOVF9CVVRUT05TX0xFRlRfTUFTSyk7XG4gICAgbWlkZGxlQnV0dG9uID0gQm9vbGVhbihidXR0b25zICYgTU9VU0VfRVZFTlRfQlVUVE9OU19NSURETEVfTUFTSyk7XG4gICAgcmlnaHRCdXR0b24gPSBCb29sZWFuKGJ1dHRvbnMgJiBNT1VTRV9FVkVOVF9CVVRUT05TX1JJR0hUX01BU0spO1xuICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PT0gRE9XTl9FVkVOVCkge1xuICAgIGxlZnRCdXR0b24gPSBidXR0b24gPT09IE1PVVNFX0VWRU5UX0JVVFRPTl9MRUZUO1xuICAgIG1pZGRsZUJ1dHRvbiA9IGJ1dHRvbiA9PT0gTU9VU0VfRVZFTlRfQlVUVE9OX01JRERMRTtcbiAgICByaWdodEJ1dHRvbiA9IGJ1dHRvbiA9PT0gTU9VU0VfRVZFTlRfQlVUVE9OX1JJR0hUO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBsZWZ0QnV0dG9uOiBsZWZ0QnV0dG9uLFxuICAgIG1pZGRsZUJ1dHRvbjogbWlkZGxlQnV0dG9uLFxuICAgIHJpZ2h0QnV0dG9uOiByaWdodEJ1dHRvblxuICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldE9mZnNldFBvc2l0aW9uKGV2ZW50LCByb290RWxlbWVudCkge1xuICB2YXIgc3JjRXZlbnQgPSBldmVudC5zcmNFdmVudDtcblxuICBpZiAoIWV2ZW50LmNlbnRlciAmJiAhTnVtYmVyLmlzRmluaXRlKHNyY0V2ZW50LmNsaWVudFgpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgY2VudGVyID0gZXZlbnQuY2VudGVyIHx8IHtcbiAgICB4OiBzcmNFdmVudC5jbGllbnRYLFxuICAgIHk6IHNyY0V2ZW50LmNsaWVudFlcbiAgfTtcbiAgdmFyIHJlY3QgPSByb290RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgdmFyIHNjYWxlWCA9IHJlY3Qud2lkdGggLyByb290RWxlbWVudC5vZmZzZXRXaWR0aCB8fCAxO1xuICB2YXIgc2NhbGVZID0gcmVjdC5oZWlnaHQgLyByb290RWxlbWVudC5vZmZzZXRIZWlnaHQgfHwgMTtcbiAgdmFyIG9mZnNldENlbnRlciA9IHtcbiAgICB4OiAoY2VudGVyLnggLSByZWN0LmxlZnQgLSByb290RWxlbWVudC5jbGllbnRMZWZ0KSAvIHNjYWxlWCxcbiAgICB5OiAoY2VudGVyLnkgLSByZWN0LnRvcCAtIHJvb3RFbGVtZW50LmNsaWVudFRvcCkgLyBzY2FsZVlcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBjZW50ZXI6IGNlbnRlcixcbiAgICBvZmZzZXRDZW50ZXI6IG9mZnNldENlbnRlclxuICB9O1xufSIsImltcG9ydCBfY2xhc3NDYWxsQ2hlY2sgZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL2p1c3RpY2U0MC10b29sL2p1c3RpY2U0MC10b29sL2NsaWVudC9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY2xhc3NDYWxsQ2hlY2tcIjtcbmltcG9ydCBfY3JlYXRlQ2xhc3MgZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL2p1c3RpY2U0MC10b29sL2p1c3RpY2U0MC10b29sL2NsaWVudC9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY3JlYXRlQ2xhc3NcIjtcbmltcG9ydCB7IHdoaWNoQnV0dG9ucywgZ2V0T2Zmc2V0UG9zaXRpb24gfSBmcm9tICcuL2V2ZW50LXV0aWxzJztcbnZhciBERUZBVUxUX09QVElPTlMgPSB7XG4gIHNyY0VsZW1lbnQ6ICdyb290JyxcbiAgcHJpb3JpdHk6IDBcbn07XG5cbnZhciBFdmVudFJlZ2lzdHJhciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEV2ZW50UmVnaXN0cmFyKGV2ZW50TWFuYWdlcikge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdmVudFJlZ2lzdHJhcik7XG5cbiAgICB0aGlzLmV2ZW50TWFuYWdlciA9IGV2ZW50TWFuYWdlcjtcbiAgICB0aGlzLmhhbmRsZXJzID0gW107XG4gICAgdGhpcy5oYW5kbGVyc0J5RWxlbWVudCA9IG5ldyBNYXAoKTtcbiAgICB0aGlzLmhhbmRsZUV2ZW50ID0gdGhpcy5oYW5kbGVFdmVudC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2FjdGl2ZSA9IGZhbHNlO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEV2ZW50UmVnaXN0cmFyLCBbe1xuICAgIGtleTogXCJpc0VtcHR5XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGlzRW1wdHkoKSB7XG4gICAgICByZXR1cm4gIXRoaXMuX2FjdGl2ZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiYWRkXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGFkZCh0eXBlLCBoYW5kbGVyLCBvcHRzKSB7XG4gICAgICB2YXIgb25jZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDogZmFsc2U7XG4gICAgICB2YXIgcGFzc2l2ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiA0ICYmIGFyZ3VtZW50c1s0XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzRdIDogZmFsc2U7XG4gICAgICB2YXIgaGFuZGxlcnMgPSB0aGlzLmhhbmRsZXJzLFxuICAgICAgICAgIGhhbmRsZXJzQnlFbGVtZW50ID0gdGhpcy5oYW5kbGVyc0J5RWxlbWVudDtcblxuICAgICAgaWYgKG9wdHMgJiYgKHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0JyB8fCBvcHRzLmFkZEV2ZW50TGlzdGVuZXIpKSB7XG4gICAgICAgIG9wdHMgPSB7XG4gICAgICAgICAgc3JjRWxlbWVudDogb3B0c1xuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBvcHRzID0gb3B0cyA/IE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfT1BUSU9OUywgb3B0cykgOiBERUZBVUxUX09QVElPTlM7XG4gICAgICB2YXIgZW50cmllcyA9IGhhbmRsZXJzQnlFbGVtZW50LmdldChvcHRzLnNyY0VsZW1lbnQpO1xuXG4gICAgICBpZiAoIWVudHJpZXMpIHtcbiAgICAgICAgZW50cmllcyA9IFtdO1xuICAgICAgICBoYW5kbGVyc0J5RWxlbWVudC5zZXQob3B0cy5zcmNFbGVtZW50LCBlbnRyaWVzKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGVudHJ5ID0ge1xuICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICBoYW5kbGVyOiBoYW5kbGVyLFxuICAgICAgICBzcmNFbGVtZW50OiBvcHRzLnNyY0VsZW1lbnQsXG4gICAgICAgIHByaW9yaXR5OiBvcHRzLnByaW9yaXR5XG4gICAgICB9O1xuXG4gICAgICBpZiAob25jZSkge1xuICAgICAgICBlbnRyeS5vbmNlID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHBhc3NpdmUpIHtcbiAgICAgICAgZW50cnkucGFzc2l2ZSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGhhbmRsZXJzLnB1c2goZW50cnkpO1xuICAgICAgdGhpcy5fYWN0aXZlID0gdGhpcy5fYWN0aXZlIHx8ICFlbnRyeS5wYXNzaXZlO1xuICAgICAgdmFyIGluc2VydFBvc2l0aW9uID0gZW50cmllcy5sZW5ndGggLSAxO1xuXG4gICAgICB3aGlsZSAoaW5zZXJ0UG9zaXRpb24gPj0gMCkge1xuICAgICAgICBpZiAoZW50cmllc1tpbnNlcnRQb3NpdGlvbl0ucHJpb3JpdHkgPj0gZW50cnkucHJpb3JpdHkpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGluc2VydFBvc2l0aW9uLS07XG4gICAgICB9XG5cbiAgICAgIGVudHJpZXMuc3BsaWNlKGluc2VydFBvc2l0aW9uICsgMSwgMCwgZW50cnkpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW1vdmVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVtb3ZlKHR5cGUsIGhhbmRsZXIpIHtcbiAgICAgIHZhciBoYW5kbGVycyA9IHRoaXMuaGFuZGxlcnMsXG4gICAgICAgICAgaGFuZGxlcnNCeUVsZW1lbnQgPSB0aGlzLmhhbmRsZXJzQnlFbGVtZW50O1xuXG4gICAgICBmb3IgKHZhciBpID0gaGFuZGxlcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gaGFuZGxlcnNbaV07XG5cbiAgICAgICAgaWYgKGVudHJ5LnR5cGUgPT09IHR5cGUgJiYgZW50cnkuaGFuZGxlciA9PT0gaGFuZGxlcikge1xuICAgICAgICAgIGhhbmRsZXJzLnNwbGljZShpLCAxKTtcbiAgICAgICAgICB2YXIgZW50cmllcyA9IGhhbmRsZXJzQnlFbGVtZW50LmdldChlbnRyeS5zcmNFbGVtZW50KTtcbiAgICAgICAgICBlbnRyaWVzLnNwbGljZShlbnRyaWVzLmluZGV4T2YoZW50cnkpLCAxKTtcblxuICAgICAgICAgIGlmIChlbnRyaWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgaGFuZGxlcnNCeUVsZW1lbnQuZGVsZXRlKGVudHJ5LnNyY0VsZW1lbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLl9hY3RpdmUgPSBoYW5kbGVycy5zb21lKGZ1bmN0aW9uIChlbnRyeSkge1xuICAgICAgICByZXR1cm4gIWVudHJ5LnBhc3NpdmU7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaGFuZGxlRXZlbnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlRXZlbnQoZXZlbnQpIHtcbiAgICAgIGlmICh0aGlzLmlzRW1wdHkoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBtam9sbmlyRXZlbnQgPSB0aGlzLl9ub3JtYWxpemVFdmVudChldmVudCk7XG5cbiAgICAgIHZhciB0YXJnZXQgPSBldmVudC5zcmNFdmVudC50YXJnZXQ7XG5cbiAgICAgIHdoaWxlICh0YXJnZXQgJiYgdGFyZ2V0ICE9PSBtam9sbmlyRXZlbnQucm9vdEVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5fZW1pdChtam9sbmlyRXZlbnQsIHRhcmdldCk7XG5cbiAgICAgICAgaWYgKG1qb2xuaXJFdmVudC5oYW5kbGVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGU7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2VtaXQobWpvbG5pckV2ZW50LCAncm9vdCcpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJfZW1pdFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfZW1pdChldmVudCwgc3JjRWxlbWVudCkge1xuICAgICAgdmFyIGVudHJpZXMgPSB0aGlzLmhhbmRsZXJzQnlFbGVtZW50LmdldChzcmNFbGVtZW50KTtcblxuICAgICAgaWYgKGVudHJpZXMpIHtcbiAgICAgICAgdmFyIGltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgICAgIHZhciBzdG9wUHJvcGFnYXRpb24gPSBmdW5jdGlvbiBzdG9wUHJvcGFnYXRpb24oKSB7XG4gICAgICAgICAgZXZlbnQuaGFuZGxlZCA9IHRydWU7XG4gICAgICAgIH07XG5cbiAgICAgICAgdmFyIHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiA9IGZ1bmN0aW9uIHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpIHtcbiAgICAgICAgICBldmVudC5oYW5kbGVkID0gdHJ1ZTtcbiAgICAgICAgICBpbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQgPSB0cnVlO1xuICAgICAgICB9O1xuXG4gICAgICAgIHZhciBlbnRyaWVzVG9SZW1vdmUgPSBbXTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVudHJpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB2YXIgX2VudHJpZXMkaSA9IGVudHJpZXNbaV0sXG4gICAgICAgICAgICAgIHR5cGUgPSBfZW50cmllcyRpLnR5cGUsXG4gICAgICAgICAgICAgIGhhbmRsZXIgPSBfZW50cmllcyRpLmhhbmRsZXIsXG4gICAgICAgICAgICAgIG9uY2UgPSBfZW50cmllcyRpLm9uY2U7XG4gICAgICAgICAgaGFuZGxlcihPYmplY3QuYXNzaWduKHt9LCBldmVudCwge1xuICAgICAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgICAgIHN0b3BQcm9wYWdhdGlvbjogc3RvcFByb3BhZ2F0aW9uLFxuICAgICAgICAgICAgc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOiBzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb25cbiAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICBpZiAob25jZSkge1xuICAgICAgICAgICAgZW50cmllc1RvUmVtb3ZlLnB1c2goZW50cmllc1tpXSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGVudHJpZXNUb1JlbW92ZS5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICB2YXIgX2VudHJpZXNUb1JlbW92ZSRfaSA9IGVudHJpZXNUb1JlbW92ZVtfaV0sXG4gICAgICAgICAgICAgIF90eXBlID0gX2VudHJpZXNUb1JlbW92ZSRfaS50eXBlLFxuICAgICAgICAgICAgICBfaGFuZGxlciA9IF9lbnRyaWVzVG9SZW1vdmUkX2kuaGFuZGxlcjtcbiAgICAgICAgICB0aGlzLnJlbW92ZShfdHlwZSwgX2hhbmRsZXIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIl9ub3JtYWxpemVFdmVudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfbm9ybWFsaXplRXZlbnQoZXZlbnQpIHtcbiAgICAgIHZhciByb290RWxlbWVudCA9IHRoaXMuZXZlbnRNYW5hZ2VyLmVsZW1lbnQ7XG4gICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgZXZlbnQsIHdoaWNoQnV0dG9ucyhldmVudCksIGdldE9mZnNldFBvc2l0aW9uKGV2ZW50LCByb290RWxlbWVudCksIHtcbiAgICAgICAgaGFuZGxlZDogZmFsc2UsXG4gICAgICAgIHJvb3RFbGVtZW50OiByb290RWxlbWVudFxuICAgICAgfSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEV2ZW50UmVnaXN0cmFyO1xufSgpO1xuXG5leHBvcnQgeyBFdmVudFJlZ2lzdHJhciBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IF9zbGljZWRUb0FycmF5IGZyb20gXCIvaG9tZS9ydW5uZXIvd29yay9qdXN0aWNlNDAtdG9vbC9qdXN0aWNlNDAtdG9vbC9jbGllbnQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXlcIjtcbmltcG9ydCBfY2xhc3NDYWxsQ2hlY2sgZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL2p1c3RpY2U0MC10b29sL2p1c3RpY2U0MC10b29sL2NsaWVudC9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY2xhc3NDYWxsQ2hlY2tcIjtcbmltcG9ydCBfY3JlYXRlQ2xhc3MgZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL2p1c3RpY2U0MC10b29sL2p1c3RpY2U0MC10b29sL2NsaWVudC9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY3JlYXRlQ2xhc3NcIjtcblxuZnVuY3Rpb24gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIobywgYWxsb3dBcnJheUxpa2UpIHsgdmFyIGl0ID0gdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl0gfHwgb1tcIkBAaXRlcmF0b3JcIl07IGlmICghaXQpIHsgaWYgKEFycmF5LmlzQXJyYXkobykgfHwgKGl0ID0gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8pKSB8fCBhbGxvd0FycmF5TGlrZSAmJiBvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgeyBpZiAoaXQpIG8gPSBpdDsgdmFyIGkgPSAwOyB2YXIgRiA9IGZ1bmN0aW9uIEYoKSB7fTsgcmV0dXJuIHsgczogRiwgbjogZnVuY3Rpb24gbigpIHsgaWYgKGkgPj0gby5sZW5ndGgpIHJldHVybiB7IGRvbmU6IHRydWUgfTsgcmV0dXJuIHsgZG9uZTogZmFsc2UsIHZhbHVlOiBvW2krK10gfTsgfSwgZTogZnVuY3Rpb24gZShfZSkgeyB0aHJvdyBfZTsgfSwgZjogRiB9OyB9IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfSB2YXIgbm9ybWFsQ29tcGxldGlvbiA9IHRydWUsIGRpZEVyciA9IGZhbHNlLCBlcnI7IHJldHVybiB7IHM6IGZ1bmN0aW9uIHMoKSB7IGl0ID0gaXQuY2FsbChvKTsgfSwgbjogZnVuY3Rpb24gbigpIHsgdmFyIHN0ZXAgPSBpdC5uZXh0KCk7IG5vcm1hbENvbXBsZXRpb24gPSBzdGVwLmRvbmU7IHJldHVybiBzdGVwOyB9LCBlOiBmdW5jdGlvbiBlKF9lMikgeyBkaWRFcnIgPSB0cnVlOyBlcnIgPSBfZTI7IH0sIGY6IGZ1bmN0aW9uIGYoKSB7IHRyeSB7IGlmICghbm9ybWFsQ29tcGxldGlvbiAmJiBpdC5yZXR1cm4gIT0gbnVsbCkgaXQucmV0dXJuKCk7IH0gZmluYWxseSB7IGlmIChkaWRFcnIpIHRocm93IGVycjsgfSB9IH07IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG5pbXBvcnQgeyBNYW5hZ2VyIH0gZnJvbSAnLi91dGlscy9oYW1tZXInO1xuaW1wb3J0IFdoZWVsSW5wdXQgZnJvbSAnLi9pbnB1dHMvd2hlZWwtaW5wdXQnO1xuaW1wb3J0IE1vdmVJbnB1dCBmcm9tICcuL2lucHV0cy9tb3ZlLWlucHV0JztcbmltcG9ydCBLZXlJbnB1dCBmcm9tICcuL2lucHV0cy9rZXktaW5wdXQnO1xuaW1wb3J0IENvbnRleHRtZW51SW5wdXQgZnJvbSAnLi9pbnB1dHMvY29udGV4dG1lbnUtaW5wdXQnO1xuaW1wb3J0IEV2ZW50UmVnaXN0cmFyIGZyb20gJy4vdXRpbHMvZXZlbnQtcmVnaXN0cmFyJztcbmltcG9ydCB7IEJBU0lDX0VWRU5UX0FMSUFTRVMsIEVWRU5UX1JFQ09HTklaRVJfTUFQLCBHRVNUVVJFX0VWRU5UX0FMSUFTRVMsIFJFQ09HTklaRVJTLCBSRUNPR05JWkVSX0NPTVBBVElCTEVfTUFQLCBSRUNPR05JWkVSX0ZBTExCQUNLX01BUCB9IGZyb20gJy4vY29uc3RhbnRzJztcbnZhciBERUZBVUxUX09QVElPTlMgPSB7XG4gIGV2ZW50czogbnVsbCxcbiAgcmVjb2duaXplcnM6IG51bGwsXG4gIHJlY29nbml6ZXJPcHRpb25zOiB7fSxcbiAgTWFuYWdlcjogTWFuYWdlcixcbiAgdG91Y2hBY3Rpb246ICdub25lJyxcbiAgdGFiSW5kZXg6IDBcbn07XG5cbnZhciBFdmVudE1hbmFnZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBFdmVudE1hbmFnZXIoKSB7XG4gICAgdmFyIGVsZW1lbnQgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IG51bGw7XG4gICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV2ZW50TWFuYWdlcik7XG5cbiAgICB0aGlzLm9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBERUZBVUxUX09QVElPTlMsIG9wdGlvbnMpO1xuICAgIHRoaXMuZXZlbnRzID0gbmV3IE1hcCgpO1xuICAgIHRoaXMuX29uQmFzaWNJbnB1dCA9IHRoaXMuX29uQmFzaWNJbnB1dC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX29uT3RoZXJFdmVudCA9IHRoaXMuX29uT3RoZXJFdmVudC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuc2V0RWxlbWVudChlbGVtZW50KTtcbiAgICB2YXIgZXZlbnRzID0gb3B0aW9ucy5ldmVudHM7XG5cbiAgICBpZiAoZXZlbnRzKSB7XG4gICAgICB0aGlzLm9uKGV2ZW50cyk7XG4gICAgfVxuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEV2ZW50TWFuYWdlciwgW3tcbiAgICBrZXk6IFwic2V0RWxlbWVudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzZXRFbGVtZW50KGVsZW1lbnQpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIGlmICh0aGlzLmVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5kZXN0cm95KCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG5cbiAgICAgIGlmICghZWxlbWVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgdmFyIE1hbmFnZXJDbGFzcyA9IG9wdGlvbnMuTWFuYWdlcjtcbiAgICAgIHRoaXMubWFuYWdlciA9IG5ldyBNYW5hZ2VyQ2xhc3MoZWxlbWVudCwge1xuICAgICAgICB0b3VjaEFjdGlvbjogb3B0aW9ucy50b3VjaEFjdGlvbixcbiAgICAgICAgcmVjb2duaXplcnM6IG9wdGlvbnMucmVjb2duaXplcnMgfHwgUkVDT0dOSVpFUlNcbiAgICAgIH0pLm9uKCdoYW1tZXIuaW5wdXQnLCB0aGlzLl9vbkJhc2ljSW5wdXQpO1xuXG4gICAgICBpZiAoIW9wdGlvbnMucmVjb2duaXplcnMpIHtcbiAgICAgICAgT2JqZWN0LmtleXMoUkVDT0dOSVpFUl9DT01QQVRJQkxFX01BUCkuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICAgIHZhciByZWNvZ25pemVyID0gX3RoaXMubWFuYWdlci5nZXQobmFtZSk7XG5cbiAgICAgICAgICBpZiAocmVjb2duaXplcikge1xuICAgICAgICAgICAgUkVDT0dOSVpFUl9DT01QQVRJQkxFX01BUFtuYW1lXS5mb3JFYWNoKGZ1bmN0aW9uIChvdGhlck5hbWUpIHtcbiAgICAgICAgICAgICAgcmVjb2duaXplci5yZWNvZ25pemVXaXRoKG90aGVyTmFtZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciByZWNvZ25pemVyTmFtZSBpbiBvcHRpb25zLnJlY29nbml6ZXJPcHRpb25zKSB7XG4gICAgICAgIHZhciByZWNvZ25pemVyID0gdGhpcy5tYW5hZ2VyLmdldChyZWNvZ25pemVyTmFtZSk7XG5cbiAgICAgICAgaWYgKHJlY29nbml6ZXIpIHtcbiAgICAgICAgICB2YXIgcmVjb2duaXplck9wdGlvbiA9IG9wdGlvbnMucmVjb2duaXplck9wdGlvbnNbcmVjb2duaXplck5hbWVdO1xuICAgICAgICAgIGRlbGV0ZSByZWNvZ25pemVyT3B0aW9uLmVuYWJsZTtcbiAgICAgICAgICByZWNvZ25pemVyLnNldChyZWNvZ25pemVyT3B0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLndoZWVsSW5wdXQgPSBuZXcgV2hlZWxJbnB1dChlbGVtZW50LCB0aGlzLl9vbk90aGVyRXZlbnQsIHtcbiAgICAgICAgZW5hYmxlOiBmYWxzZVxuICAgICAgfSk7XG4gICAgICB0aGlzLm1vdmVJbnB1dCA9IG5ldyBNb3ZlSW5wdXQoZWxlbWVudCwgdGhpcy5fb25PdGhlckV2ZW50LCB7XG4gICAgICAgIGVuYWJsZTogZmFsc2VcbiAgICAgIH0pO1xuICAgICAgdGhpcy5rZXlJbnB1dCA9IG5ldyBLZXlJbnB1dChlbGVtZW50LCB0aGlzLl9vbk90aGVyRXZlbnQsIHtcbiAgICAgICAgZW5hYmxlOiBmYWxzZSxcbiAgICAgICAgdGFiSW5kZXg6IG9wdGlvbnMudGFiSW5kZXhcbiAgICAgIH0pO1xuICAgICAgdGhpcy5jb250ZXh0bWVudUlucHV0ID0gbmV3IENvbnRleHRtZW51SW5wdXQoZWxlbWVudCwgdGhpcy5fb25PdGhlckV2ZW50LCB7XG4gICAgICAgIGVuYWJsZTogZmFsc2VcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgX2l0ZXJhdG9yID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIodGhpcy5ldmVudHMpLFxuICAgICAgICAgIF9zdGVwO1xuXG4gICAgICB0cnkge1xuICAgICAgICBmb3IgKF9pdGVyYXRvci5zKCk7ICEoX3N0ZXAgPSBfaXRlcmF0b3IubigpKS5kb25lOykge1xuICAgICAgICAgIHZhciBfc3RlcCR2YWx1ZSA9IF9zbGljZWRUb0FycmF5KF9zdGVwLnZhbHVlLCAyKSxcbiAgICAgICAgICAgICAgZXZlbnRBbGlhcyA9IF9zdGVwJHZhbHVlWzBdLFxuICAgICAgICAgICAgICBldmVudFJlZ2lzdHJhciA9IF9zdGVwJHZhbHVlWzFdO1xuXG4gICAgICAgICAgaWYgKCFldmVudFJlZ2lzdHJhci5pc0VtcHR5KCkpIHtcbiAgICAgICAgICAgIHRoaXMuX3RvZ2dsZVJlY29nbml6ZXIoZXZlbnRSZWdpc3RyYXIucmVjb2duaXplck5hbWUsIHRydWUpO1xuXG4gICAgICAgICAgICB0aGlzLm1hbmFnZXIub24oZXZlbnRBbGlhcywgZXZlbnRSZWdpc3RyYXIuaGFuZGxlRXZlbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIF9pdGVyYXRvci5lKGVycik7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBfaXRlcmF0b3IuZigpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJkZXN0cm95XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICBpZiAodGhpcy5lbGVtZW50KSB7XG4gICAgICAgIHRoaXMud2hlZWxJbnB1dC5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMubW92ZUlucHV0LmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5rZXlJbnB1dC5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuY29udGV4dG1lbnVJbnB1dC5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMubWFuYWdlci5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMud2hlZWxJbnB1dCA9IG51bGw7XG4gICAgICAgIHRoaXMubW92ZUlucHV0ID0gbnVsbDtcbiAgICAgICAgdGhpcy5rZXlJbnB1dCA9IG51bGw7XG4gICAgICAgIHRoaXMuY29udGV4dG1lbnVJbnB1dCA9IG51bGw7XG4gICAgICAgIHRoaXMubWFuYWdlciA9IG51bGw7XG4gICAgICAgIHRoaXMuZWxlbWVudCA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIm9uXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uKGV2ZW50LCBoYW5kbGVyLCBvcHRzKSB7XG4gICAgICB0aGlzLl9hZGRFdmVudEhhbmRsZXIoZXZlbnQsIGhhbmRsZXIsIG9wdHMsIGZhbHNlKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwib25jZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvbmNlKGV2ZW50LCBoYW5kbGVyLCBvcHRzKSB7XG4gICAgICB0aGlzLl9hZGRFdmVudEhhbmRsZXIoZXZlbnQsIGhhbmRsZXIsIG9wdHMsIHRydWUpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ3YXRjaFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB3YXRjaChldmVudCwgaGFuZGxlciwgb3B0cykge1xuICAgICAgdGhpcy5fYWRkRXZlbnRIYW5kbGVyKGV2ZW50LCBoYW5kbGVyLCBvcHRzLCBmYWxzZSwgdHJ1ZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIm9mZlwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvZmYoZXZlbnQsIGhhbmRsZXIpIHtcbiAgICAgIHRoaXMuX3JlbW92ZUV2ZW50SGFuZGxlcihldmVudCwgaGFuZGxlcik7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIl90b2dnbGVSZWNvZ25pemVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF90b2dnbGVSZWNvZ25pemVyKG5hbWUsIGVuYWJsZWQpIHtcbiAgICAgIHZhciBtYW5hZ2VyID0gdGhpcy5tYW5hZ2VyO1xuXG4gICAgICBpZiAoIW1hbmFnZXIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVjb2duaXplciA9IG1hbmFnZXIuZ2V0KG5hbWUpO1xuXG4gICAgICBpZiAocmVjb2duaXplciAmJiByZWNvZ25pemVyLm9wdGlvbnMuZW5hYmxlICE9PSBlbmFibGVkKSB7XG4gICAgICAgIHJlY29nbml6ZXIuc2V0KHtcbiAgICAgICAgICBlbmFibGU6IGVuYWJsZWRcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBmYWxsYmFja1JlY29nbml6ZXJzID0gUkVDT0dOSVpFUl9GQUxMQkFDS19NQVBbbmFtZV07XG5cbiAgICAgICAgaWYgKGZhbGxiYWNrUmVjb2duaXplcnMgJiYgIXRoaXMub3B0aW9ucy5yZWNvZ25pemVycykge1xuICAgICAgICAgIGZhbGxiYWNrUmVjb2duaXplcnMuZm9yRWFjaChmdW5jdGlvbiAob3RoZXJOYW1lKSB7XG4gICAgICAgICAgICB2YXIgb3RoZXJSZWNvZ25pemVyID0gbWFuYWdlci5nZXQob3RoZXJOYW1lKTtcblxuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIHtcbiAgICAgICAgICAgICAgb3RoZXJSZWNvZ25pemVyLnJlcXVpcmVGYWlsdXJlKG5hbWUpO1xuICAgICAgICAgICAgICByZWNvZ25pemVyLmRyb3BSZXF1aXJlRmFpbHVyZShvdGhlck5hbWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgb3RoZXJSZWNvZ25pemVyLmRyb3BSZXF1aXJlRmFpbHVyZShuYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLndoZWVsSW5wdXQuZW5hYmxlRXZlbnRUeXBlKG5hbWUsIGVuYWJsZWQpO1xuICAgICAgdGhpcy5tb3ZlSW5wdXQuZW5hYmxlRXZlbnRUeXBlKG5hbWUsIGVuYWJsZWQpO1xuICAgICAgdGhpcy5rZXlJbnB1dC5lbmFibGVFdmVudFR5cGUobmFtZSwgZW5hYmxlZCk7XG4gICAgICB0aGlzLmNvbnRleHRtZW51SW5wdXQuZW5hYmxlRXZlbnRUeXBlKG5hbWUsIGVuYWJsZWQpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJfYWRkRXZlbnRIYW5kbGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9hZGRFdmVudEhhbmRsZXIoZXZlbnQsIGhhbmRsZXIsIG9wdHMsIG9uY2UsIHBhc3NpdmUpIHtcbiAgICAgIGlmICh0eXBlb2YgZXZlbnQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIG9wdHMgPSBoYW5kbGVyO1xuXG4gICAgICAgIGZvciAodmFyIGV2ZW50TmFtZSBpbiBldmVudCkge1xuICAgICAgICAgIHRoaXMuX2FkZEV2ZW50SGFuZGxlcihldmVudE5hbWUsIGV2ZW50W2V2ZW50TmFtZV0sIG9wdHMsIG9uY2UsIHBhc3NpdmUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgbWFuYWdlciA9IHRoaXMubWFuYWdlcixcbiAgICAgICAgICBldmVudHMgPSB0aGlzLmV2ZW50cztcbiAgICAgIHZhciBldmVudEFsaWFzID0gR0VTVFVSRV9FVkVOVF9BTElBU0VTW2V2ZW50XSB8fCBldmVudDtcbiAgICAgIHZhciBldmVudFJlZ2lzdHJhciA9IGV2ZW50cy5nZXQoZXZlbnRBbGlhcyk7XG5cbiAgICAgIGlmICghZXZlbnRSZWdpc3RyYXIpIHtcbiAgICAgICAgZXZlbnRSZWdpc3RyYXIgPSBuZXcgRXZlbnRSZWdpc3RyYXIodGhpcyk7XG4gICAgICAgIGV2ZW50cy5zZXQoZXZlbnRBbGlhcywgZXZlbnRSZWdpc3RyYXIpO1xuICAgICAgICBldmVudFJlZ2lzdHJhci5yZWNvZ25pemVyTmFtZSA9IEVWRU5UX1JFQ09HTklaRVJfTUFQW2V2ZW50QWxpYXNdIHx8IGV2ZW50QWxpYXM7XG5cbiAgICAgICAgaWYgKG1hbmFnZXIpIHtcbiAgICAgICAgICBtYW5hZ2VyLm9uKGV2ZW50QWxpYXMsIGV2ZW50UmVnaXN0cmFyLmhhbmRsZUV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBldmVudFJlZ2lzdHJhci5hZGQoZXZlbnQsIGhhbmRsZXIsIG9wdHMsIG9uY2UsIHBhc3NpdmUpO1xuXG4gICAgICBpZiAoIWV2ZW50UmVnaXN0cmFyLmlzRW1wdHkoKSkge1xuICAgICAgICB0aGlzLl90b2dnbGVSZWNvZ25pemVyKGV2ZW50UmVnaXN0cmFyLnJlY29nbml6ZXJOYW1lLCB0cnVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiX3JlbW92ZUV2ZW50SGFuZGxlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfcmVtb3ZlRXZlbnRIYW5kbGVyKGV2ZW50LCBoYW5kbGVyKSB7XG4gICAgICBpZiAodHlwZW9mIGV2ZW50ICE9PSAnc3RyaW5nJykge1xuICAgICAgICBmb3IgKHZhciBldmVudE5hbWUgaW4gZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLl9yZW1vdmVFdmVudEhhbmRsZXIoZXZlbnROYW1lLCBldmVudFtldmVudE5hbWVdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIGV2ZW50cyA9IHRoaXMuZXZlbnRzO1xuICAgICAgdmFyIGV2ZW50QWxpYXMgPSBHRVNUVVJFX0VWRU5UX0FMSUFTRVNbZXZlbnRdIHx8IGV2ZW50O1xuICAgICAgdmFyIGV2ZW50UmVnaXN0cmFyID0gZXZlbnRzLmdldChldmVudEFsaWFzKTtcblxuICAgICAgaWYgKCFldmVudFJlZ2lzdHJhcikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGV2ZW50UmVnaXN0cmFyLnJlbW92ZShldmVudCwgaGFuZGxlcik7XG5cbiAgICAgIGlmIChldmVudFJlZ2lzdHJhci5pc0VtcHR5KCkpIHtcbiAgICAgICAgdmFyIHJlY29nbml6ZXJOYW1lID0gZXZlbnRSZWdpc3RyYXIucmVjb2duaXplck5hbWU7XG4gICAgICAgIHZhciBpc1JlY29nbml6ZXJVc2VkID0gZmFsc2U7XG5cbiAgICAgICAgdmFyIF9pdGVyYXRvcjIgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcihldmVudHMudmFsdWVzKCkpLFxuICAgICAgICAgICAgX3N0ZXAyO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZm9yIChfaXRlcmF0b3IyLnMoKTsgIShfc3RlcDIgPSBfaXRlcmF0b3IyLm4oKSkuZG9uZTspIHtcbiAgICAgICAgICAgIHZhciBlaCA9IF9zdGVwMi52YWx1ZTtcblxuICAgICAgICAgICAgaWYgKGVoLnJlY29nbml6ZXJOYW1lID09PSByZWNvZ25pemVyTmFtZSAmJiAhZWguaXNFbXB0eSgpKSB7XG4gICAgICAgICAgICAgIGlzUmVjb2duaXplclVzZWQgPSB0cnVlO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIF9pdGVyYXRvcjIuZShlcnIpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIF9pdGVyYXRvcjIuZigpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc1JlY29nbml6ZXJVc2VkKSB7XG4gICAgICAgICAgdGhpcy5fdG9nZ2xlUmVjb2duaXplcihyZWNvZ25pemVyTmFtZSwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIl9vbkJhc2ljSW5wdXRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gX29uQmFzaWNJbnB1dChldmVudCkge1xuICAgICAgdmFyIHNyY0V2ZW50ID0gZXZlbnQuc3JjRXZlbnQ7XG4gICAgICB2YXIgYWxpYXMgPSBCQVNJQ19FVkVOVF9BTElBU0VTW3NyY0V2ZW50LnR5cGVdO1xuXG4gICAgICBpZiAoYWxpYXMpIHtcbiAgICAgICAgdGhpcy5tYW5hZ2VyLmVtaXQoYWxpYXMsIGV2ZW50KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiX29uT3RoZXJFdmVudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfb25PdGhlckV2ZW50KGV2ZW50KSB7XG4gICAgICB0aGlzLm1hbmFnZXIuZW1pdChldmVudC50eXBlLCBldmVudCk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEV2ZW50TWFuYWdlcjtcbn0oKTtcblxuZXhwb3J0IHsgRXZlbnRNYW5hZ2VyIGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgX2NsYXNzQ2FsbENoZWNrIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jbGFzc0NhbGxDaGVja1wiO1xuaW1wb3J0IF9jcmVhdGVDbGFzcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY3JlYXRlQ2xhc3NcIjtcbmltcG9ydCBfZGVmaW5lUHJvcGVydHkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5XCI7XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkge1xuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7XG5cbiAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTtcbiAgICBpZiAoZW51bWVyYWJsZU9ubHkpIHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTtcbiAgICB9KTtcbiAgICBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7XG4gIH1cblxuICByZXR1cm4ga2V5cztcbn1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTtcblxuICAgIGlmIChpICUgMikge1xuICAgICAgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuaW1wb3J0IE1hcFN0YXRlIGZyb20gJy4vbWFwLXN0YXRlJztcbmltcG9ydCB7IExpbmVhckludGVycG9sYXRvciB9IGZyb20gJy4vdHJhbnNpdGlvbic7XG5pbXBvcnQgVHJhbnNpdGlvbk1hbmFnZXIsIHsgVFJBTlNJVElPTl9FVkVOVFMgfSBmcm9tICcuL3RyYW5zaXRpb24tbWFuYWdlcic7XG52YXIgTk9fVFJBTlNJVElPTl9QUk9QUyA9IHtcbiAgdHJhbnNpdGlvbkR1cmF0aW9uOiAwXG59O1xuZXhwb3J0IHZhciBMSU5FQVJfVFJBTlNJVElPTl9QUk9QUyA9IHtcbiAgdHJhbnNpdGlvbkR1cmF0aW9uOiAzMDAsXG4gIHRyYW5zaXRpb25FYXNpbmc6IGZ1bmN0aW9uIHRyYW5zaXRpb25FYXNpbmcodCkge1xuICAgIHJldHVybiB0O1xuICB9LFxuICB0cmFuc2l0aW9uSW50ZXJwb2xhdG9yOiBuZXcgTGluZWFySW50ZXJwb2xhdG9yKCksXG4gIHRyYW5zaXRpb25JbnRlcnJ1cHRpb246IFRSQU5TSVRJT05fRVZFTlRTLkJSRUFLXG59O1xudmFyIERFRkFVTFRfSU5FUlRJQSA9IDMwMDtcblxudmFyIElORVJUSUFfRUFTSU5HID0gZnVuY3Rpb24gSU5FUlRJQV9FQVNJTkcodCkge1xuICByZXR1cm4gMSAtICgxIC0gdCkgKiAoMSAtIHQpO1xufTtcblxudmFyIEVWRU5UX1RZUEVTID0ge1xuICBXSEVFTDogWyd3aGVlbCddLFxuICBQQU46IFsncGFuc3RhcnQnLCAncGFubW92ZScsICdwYW5lbmQnXSxcbiAgUElOQ0g6IFsncGluY2hzdGFydCcsICdwaW5jaG1vdmUnLCAncGluY2hlbmQnXSxcbiAgVFJJUExFX1BBTjogWyd0cmlwYW5zdGFydCcsICd0cmlwYW5tb3ZlJywgJ3RyaXBhbmVuZCddLFxuICBET1VCTEVfVEFQOiBbJ2RvdWJsZXRhcCddLFxuICBLRVlCT0FSRDogWydrZXlkb3duJ11cbn07XG5cbnZhciBNYXBDb250cm9sbGVyID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBNYXBDb250cm9sbGVyKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgTWFwQ29udHJvbGxlcik7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJldmVudHNcIiwgW10pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwic2Nyb2xsWm9vbVwiLCB0cnVlKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImRyYWdQYW5cIiwgdHJ1ZSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJkcmFnUm90YXRlXCIsIHRydWUpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiZG91YmxlQ2xpY2tab29tXCIsIHRydWUpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwidG91Y2hab29tXCIsIHRydWUpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwidG91Y2hSb3RhdGVcIiwgZmFsc2UpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwia2V5Ym9hcmRcIiwgdHJ1ZSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJfaW50ZXJhY3Rpb25TdGF0ZVwiLCB7XG4gICAgICBpc0RyYWdnaW5nOiBmYWxzZVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiX2V2ZW50c1wiLCB7fSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJfc2V0SW50ZXJhY3Rpb25TdGF0ZVwiLCBmdW5jdGlvbiAobmV3U3RhdGUpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24oX3RoaXMuX2ludGVyYWN0aW9uU3RhdGUsIG5ld1N0YXRlKTtcblxuICAgICAgaWYgKF90aGlzLm9uU3RhdGVDaGFuZ2UpIHtcbiAgICAgICAgX3RoaXMub25TdGF0ZUNoYW5nZShfdGhpcy5faW50ZXJhY3Rpb25TdGF0ZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJfb25UcmFuc2l0aW9uXCIsIGZ1bmN0aW9uIChuZXdWaWV3cG9ydCwgb2xkVmlld3BvcnQpIHtcbiAgICAgIF90aGlzLm9uVmlld3BvcnRDaGFuZ2UobmV3Vmlld3BvcnQsIF90aGlzLl9pbnRlcmFjdGlvblN0YXRlLCBvbGRWaWV3cG9ydCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmhhbmRsZUV2ZW50ID0gdGhpcy5oYW5kbGVFdmVudC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX3RyYW5zaXRpb25NYW5hZ2VyID0gbmV3IFRyYW5zaXRpb25NYW5hZ2VyKHtcbiAgICAgIG9uVmlld3BvcnRDaGFuZ2U6IHRoaXMuX29uVHJhbnNpdGlvbixcbiAgICAgIG9uU3RhdGVDaGFuZ2U6IHRoaXMuX3NldEludGVyYWN0aW9uU3RhdGVcbiAgICB9KTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhNYXBDb250cm9sbGVyLCBbe1xuICAgIGtleTogXCJoYW5kbGVFdmVudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVFdmVudChldmVudCkge1xuICAgICAgdGhpcy5tYXBTdGF0ZSA9IHRoaXMuZ2V0TWFwU3RhdGUoKTtcbiAgICAgIHZhciBldmVudFN0YXJ0QmxvY2tlZCA9IHRoaXMuX2V2ZW50U3RhcnRCbG9ja2VkO1xuXG4gICAgICBzd2l0Y2ggKGV2ZW50LnR5cGUpIHtcbiAgICAgICAgY2FzZSAncGFuc3RhcnQnOlxuICAgICAgICAgIHJldHVybiBldmVudFN0YXJ0QmxvY2tlZCA/IGZhbHNlIDogdGhpcy5fb25QYW5TdGFydChldmVudCk7XG5cbiAgICAgICAgY2FzZSAncGFubW92ZSc6XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX29uUGFuKGV2ZW50KTtcblxuICAgICAgICBjYXNlICdwYW5lbmQnOlxuICAgICAgICAgIHJldHVybiB0aGlzLl9vblBhbkVuZChldmVudCk7XG5cbiAgICAgICAgY2FzZSAncGluY2hzdGFydCc6XG4gICAgICAgICAgcmV0dXJuIGV2ZW50U3RhcnRCbG9ja2VkID8gZmFsc2UgOiB0aGlzLl9vblBpbmNoU3RhcnQoZXZlbnQpO1xuXG4gICAgICAgIGNhc2UgJ3BpbmNobW92ZSc6XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX29uUGluY2goZXZlbnQpO1xuXG4gICAgICAgIGNhc2UgJ3BpbmNoZW5kJzpcbiAgICAgICAgICByZXR1cm4gdGhpcy5fb25QaW5jaEVuZChldmVudCk7XG5cbiAgICAgICAgY2FzZSAndHJpcGFuc3RhcnQnOlxuICAgICAgICAgIHJldHVybiBldmVudFN0YXJ0QmxvY2tlZCA/IGZhbHNlIDogdGhpcy5fb25UcmlwbGVQYW5TdGFydChldmVudCk7XG5cbiAgICAgICAgY2FzZSAndHJpcGFubW92ZSc6XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX29uVHJpcGxlUGFuKGV2ZW50KTtcblxuICAgICAgICBjYXNlICd0cmlwYW5lbmQnOlxuICAgICAgICAgIHJldHVybiB0aGlzLl9vblRyaXBsZVBhbkVuZChldmVudCk7XG5cbiAgICAgICAgY2FzZSAnZG91YmxldGFwJzpcbiAgICAgICAgICByZXR1cm4gdGhpcy5fb25Eb3VibGVUYXAoZXZlbnQpO1xuXG4gICAgICAgIGNhc2UgJ3doZWVsJzpcbiAgICAgICAgICByZXR1cm4gdGhpcy5fb25XaGVlbChldmVudCk7XG5cbiAgICAgICAgY2FzZSAna2V5ZG93bic6XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX29uS2V5RG93bihldmVudCk7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldENlbnRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRDZW50ZXIoZXZlbnQpIHtcbiAgICAgIHZhciBfZXZlbnQkb2Zmc2V0Q2VudGVyID0gZXZlbnQub2Zmc2V0Q2VudGVyLFxuICAgICAgICAgIHggPSBfZXZlbnQkb2Zmc2V0Q2VudGVyLngsXG4gICAgICAgICAgeSA9IF9ldmVudCRvZmZzZXRDZW50ZXIueTtcbiAgICAgIHJldHVybiBbeCwgeV07XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImlzRnVuY3Rpb25LZXlQcmVzc2VkXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGlzRnVuY3Rpb25LZXlQcmVzc2VkKGV2ZW50KSB7XG4gICAgICB2YXIgc3JjRXZlbnQgPSBldmVudC5zcmNFdmVudDtcbiAgICAgIHJldHVybiBCb29sZWFuKHNyY0V2ZW50Lm1ldGFLZXkgfHwgc3JjRXZlbnQuYWx0S2V5IHx8IHNyY0V2ZW50LmN0cmxLZXkgfHwgc3JjRXZlbnQuc2hpZnRLZXkpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJibG9ja0V2ZW50c1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBibG9ja0V2ZW50cyh0aW1lb3V0KSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgdmFyIHRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChfdGhpczIuX2V2ZW50U3RhcnRCbG9ja2VkID09PSB0aW1lcikge1xuICAgICAgICAgIF90aGlzMi5fZXZlbnRTdGFydEJsb2NrZWQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9LCB0aW1lb3V0KTtcbiAgICAgIHRoaXMuX2V2ZW50U3RhcnRCbG9ja2VkID0gdGltZXI7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInVwZGF0ZVZpZXdwb3J0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHVwZGF0ZVZpZXdwb3J0KG5ld01hcFN0YXRlLCBleHRyYVByb3BzLCBpbnRlcmFjdGlvblN0YXRlKSB7XG4gICAgICB2YXIgb2xkVmlld3BvcnQgPSB0aGlzLm1hcFN0YXRlIGluc3RhbmNlb2YgTWFwU3RhdGUgPyB0aGlzLm1hcFN0YXRlLmdldFZpZXdwb3J0UHJvcHMoKSA6IHRoaXMubWFwU3RhdGU7XG5cbiAgICAgIHZhciBuZXdWaWV3cG9ydCA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgbmV3TWFwU3RhdGUuZ2V0Vmlld3BvcnRQcm9wcygpKSwgZXh0cmFQcm9wcyk7XG5cbiAgICAgIHZhciB2aWV3U3RhdGVDaGFuZ2VkID0gT2JqZWN0LmtleXMobmV3Vmlld3BvcnQpLnNvbWUoZnVuY3Rpb24gKGtleSkge1xuICAgICAgICByZXR1cm4gb2xkVmlld3BvcnRba2V5XSAhPT0gbmV3Vmlld3BvcnRba2V5XTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5fc3RhdGUgPSBuZXdNYXBTdGF0ZS5nZXRTdGF0ZSgpO1xuXG4gICAgICB0aGlzLl9zZXRJbnRlcmFjdGlvblN0YXRlKGludGVyYWN0aW9uU3RhdGUpO1xuXG4gICAgICBpZiAodmlld1N0YXRlQ2hhbmdlZCkge1xuICAgICAgICB0aGlzLm9uVmlld3BvcnRDaGFuZ2UobmV3Vmlld3BvcnQsIHRoaXMuX2ludGVyYWN0aW9uU3RhdGUsIG9sZFZpZXdwb3J0KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0TWFwU3RhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0TWFwU3RhdGUob3ZlcnJpZGVzKSB7XG4gICAgICByZXR1cm4gbmV3IE1hcFN0YXRlKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCB0aGlzLm1hcFN0YXRlUHJvcHMpLCB0aGlzLl9zdGF0ZSksIG92ZXJyaWRlcykpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJpc0RyYWdnaW5nXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGlzRHJhZ2dpbmcoKSB7XG4gICAgICByZXR1cm4gdGhpcy5faW50ZXJhY3Rpb25TdGF0ZS5pc0RyYWdnaW5nO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJzZXRPcHRpb25zXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNldE9wdGlvbnMob3B0aW9ucykge1xuICAgICAgdmFyIG9uVmlld3BvcnRDaGFuZ2UgPSBvcHRpb25zLm9uVmlld3BvcnRDaGFuZ2UsXG4gICAgICAgICAgb25TdGF0ZUNoYW5nZSA9IG9wdGlvbnMub25TdGF0ZUNoYW5nZSxcbiAgICAgICAgICBfb3B0aW9ucyRldmVudE1hbmFnZXIgPSBvcHRpb25zLmV2ZW50TWFuYWdlcixcbiAgICAgICAgICBldmVudE1hbmFnZXIgPSBfb3B0aW9ucyRldmVudE1hbmFnZXIgPT09IHZvaWQgMCA/IHRoaXMuZXZlbnRNYW5hZ2VyIDogX29wdGlvbnMkZXZlbnRNYW5hZ2VyLFxuICAgICAgICAgIF9vcHRpb25zJGlzSW50ZXJhY3RpdiA9IG9wdGlvbnMuaXNJbnRlcmFjdGl2ZSxcbiAgICAgICAgICBpc0ludGVyYWN0aXZlID0gX29wdGlvbnMkaXNJbnRlcmFjdGl2ID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkaXNJbnRlcmFjdGl2LFxuICAgICAgICAgIF9vcHRpb25zJHNjcm9sbFpvb20gPSBvcHRpb25zLnNjcm9sbFpvb20sXG4gICAgICAgICAgc2Nyb2xsWm9vbSA9IF9vcHRpb25zJHNjcm9sbFpvb20gPT09IHZvaWQgMCA/IHRoaXMuc2Nyb2xsWm9vbSA6IF9vcHRpb25zJHNjcm9sbFpvb20sXG4gICAgICAgICAgX29wdGlvbnMkZHJhZ1BhbiA9IG9wdGlvbnMuZHJhZ1BhbixcbiAgICAgICAgICBkcmFnUGFuID0gX29wdGlvbnMkZHJhZ1BhbiA9PT0gdm9pZCAwID8gdGhpcy5kcmFnUGFuIDogX29wdGlvbnMkZHJhZ1BhbixcbiAgICAgICAgICBfb3B0aW9ucyRkcmFnUm90YXRlID0gb3B0aW9ucy5kcmFnUm90YXRlLFxuICAgICAgICAgIGRyYWdSb3RhdGUgPSBfb3B0aW9ucyRkcmFnUm90YXRlID09PSB2b2lkIDAgPyB0aGlzLmRyYWdSb3RhdGUgOiBfb3B0aW9ucyRkcmFnUm90YXRlLFxuICAgICAgICAgIF9vcHRpb25zJGRvdWJsZUNsaWNrWiA9IG9wdGlvbnMuZG91YmxlQ2xpY2tab29tLFxuICAgICAgICAgIGRvdWJsZUNsaWNrWm9vbSA9IF9vcHRpb25zJGRvdWJsZUNsaWNrWiA9PT0gdm9pZCAwID8gdGhpcy5kb3VibGVDbGlja1pvb20gOiBfb3B0aW9ucyRkb3VibGVDbGlja1osXG4gICAgICAgICAgX29wdGlvbnMkdG91Y2hab29tID0gb3B0aW9ucy50b3VjaFpvb20sXG4gICAgICAgICAgdG91Y2hab29tID0gX29wdGlvbnMkdG91Y2hab29tID09PSB2b2lkIDAgPyB0aGlzLnRvdWNoWm9vbSA6IF9vcHRpb25zJHRvdWNoWm9vbSxcbiAgICAgICAgICBfb3B0aW9ucyR0b3VjaFJvdGF0ZSA9IG9wdGlvbnMudG91Y2hSb3RhdGUsXG4gICAgICAgICAgdG91Y2hSb3RhdGUgPSBfb3B0aW9ucyR0b3VjaFJvdGF0ZSA9PT0gdm9pZCAwID8gdGhpcy50b3VjaFJvdGF0ZSA6IF9vcHRpb25zJHRvdWNoUm90YXRlLFxuICAgICAgICAgIF9vcHRpb25zJGtleWJvYXJkID0gb3B0aW9ucy5rZXlib2FyZCxcbiAgICAgICAgICBrZXlib2FyZCA9IF9vcHRpb25zJGtleWJvYXJkID09PSB2b2lkIDAgPyB0aGlzLmtleWJvYXJkIDogX29wdGlvbnMka2V5Ym9hcmQ7XG4gICAgICB0aGlzLm9uVmlld3BvcnRDaGFuZ2UgPSBvblZpZXdwb3J0Q2hhbmdlO1xuICAgICAgdGhpcy5vblN0YXRlQ2hhbmdlID0gb25TdGF0ZUNoYW5nZTtcbiAgICAgIHZhciBwcmV2T3B0aW9ucyA9IHRoaXMubWFwU3RhdGVQcm9wcyB8fCB7fTtcbiAgICAgIHZhciBkaW1lbnNpb25DaGFuZ2VkID0gcHJldk9wdGlvbnMuaGVpZ2h0ICE9PSBvcHRpb25zLmhlaWdodCB8fCBwcmV2T3B0aW9ucy53aWR0aCAhPT0gb3B0aW9ucy53aWR0aDtcbiAgICAgIHRoaXMubWFwU3RhdGVQcm9wcyA9IG9wdGlvbnM7XG5cbiAgICAgIGlmIChkaW1lbnNpb25DaGFuZ2VkKSB7XG4gICAgICAgIHRoaXMubWFwU3RhdGUgPSBwcmV2T3B0aW9ucztcbiAgICAgICAgdGhpcy51cGRhdGVWaWV3cG9ydChuZXcgTWFwU3RhdGUob3B0aW9ucykpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl90cmFuc2l0aW9uTWFuYWdlci5wcm9jZXNzVmlld3BvcnRDaGFuZ2Uob3B0aW9ucyk7XG5cbiAgICAgIGlmICh0aGlzLmV2ZW50TWFuYWdlciAhPT0gZXZlbnRNYW5hZ2VyKSB7XG4gICAgICAgIHRoaXMuZXZlbnRNYW5hZ2VyID0gZXZlbnRNYW5hZ2VyO1xuICAgICAgICB0aGlzLl9ldmVudHMgPSB7fTtcbiAgICAgICAgdGhpcy50b2dnbGVFdmVudHModGhpcy5ldmVudHMsIHRydWUpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnRvZ2dsZUV2ZW50cyhFVkVOVF9UWVBFUy5XSEVFTCwgaXNJbnRlcmFjdGl2ZSAmJiBCb29sZWFuKHNjcm9sbFpvb20pKTtcbiAgICAgIHRoaXMudG9nZ2xlRXZlbnRzKEVWRU5UX1RZUEVTLlBBTiwgaXNJbnRlcmFjdGl2ZSAmJiBCb29sZWFuKGRyYWdQYW4gfHwgZHJhZ1JvdGF0ZSkpO1xuICAgICAgdGhpcy50b2dnbGVFdmVudHMoRVZFTlRfVFlQRVMuUElOQ0gsIGlzSW50ZXJhY3RpdmUgJiYgQm9vbGVhbih0b3VjaFpvb20gfHwgdG91Y2hSb3RhdGUpKTtcbiAgICAgIHRoaXMudG9nZ2xlRXZlbnRzKEVWRU5UX1RZUEVTLlRSSVBMRV9QQU4sIGlzSW50ZXJhY3RpdmUgJiYgQm9vbGVhbih0b3VjaFJvdGF0ZSkpO1xuICAgICAgdGhpcy50b2dnbGVFdmVudHMoRVZFTlRfVFlQRVMuRE9VQkxFX1RBUCwgaXNJbnRlcmFjdGl2ZSAmJiBCb29sZWFuKGRvdWJsZUNsaWNrWm9vbSkpO1xuICAgICAgdGhpcy50b2dnbGVFdmVudHMoRVZFTlRfVFlQRVMuS0VZQk9BUkQsIGlzSW50ZXJhY3RpdmUgJiYgQm9vbGVhbihrZXlib2FyZCkpO1xuICAgICAgdGhpcy5zY3JvbGxab29tID0gc2Nyb2xsWm9vbTtcbiAgICAgIHRoaXMuZHJhZ1BhbiA9IGRyYWdQYW47XG4gICAgICB0aGlzLmRyYWdSb3RhdGUgPSBkcmFnUm90YXRlO1xuICAgICAgdGhpcy5kb3VibGVDbGlja1pvb20gPSBkb3VibGVDbGlja1pvb207XG4gICAgICB0aGlzLnRvdWNoWm9vbSA9IHRvdWNoWm9vbTtcbiAgICAgIHRoaXMudG91Y2hSb3RhdGUgPSB0b3VjaFJvdGF0ZTtcbiAgICAgIHRoaXMua2V5Ym9hcmQgPSBrZXlib2FyZDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwidG9nZ2xlRXZlbnRzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHRvZ2dsZUV2ZW50cyhldmVudE5hbWVzLCBlbmFibGVkKSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgICAgaWYgKHRoaXMuZXZlbnRNYW5hZ2VyKSB7XG4gICAgICAgIGV2ZW50TmFtZXMuZm9yRWFjaChmdW5jdGlvbiAoZXZlbnROYW1lKSB7XG4gICAgICAgICAgaWYgKF90aGlzMy5fZXZlbnRzW2V2ZW50TmFtZV0gIT09IGVuYWJsZWQpIHtcbiAgICAgICAgICAgIF90aGlzMy5fZXZlbnRzW2V2ZW50TmFtZV0gPSBlbmFibGVkO1xuXG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkge1xuICAgICAgICAgICAgICBfdGhpczMuZXZlbnRNYW5hZ2VyLm9uKGV2ZW50TmFtZSwgX3RoaXMzLmhhbmRsZUV2ZW50KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIF90aGlzMy5ldmVudE1hbmFnZXIub2ZmKGV2ZW50TmFtZSwgX3RoaXMzLmhhbmRsZUV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJfb25QYW5TdGFydFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfb25QYW5TdGFydChldmVudCkge1xuICAgICAgdmFyIHBvcyA9IHRoaXMuZ2V0Q2VudGVyKGV2ZW50KTtcbiAgICAgIHRoaXMuX3BhblJvdGF0ZSA9IHRoaXMuaXNGdW5jdGlvbktleVByZXNzZWQoZXZlbnQpIHx8IGV2ZW50LnJpZ2h0QnV0dG9uO1xuICAgICAgdmFyIG5ld01hcFN0YXRlID0gdGhpcy5fcGFuUm90YXRlID8gdGhpcy5tYXBTdGF0ZS5yb3RhdGVTdGFydCh7XG4gICAgICAgIHBvczogcG9zXG4gICAgICB9KSA6IHRoaXMubWFwU3RhdGUucGFuU3RhcnQoe1xuICAgICAgICBwb3M6IHBvc1xuICAgICAgfSk7XG4gICAgICB0aGlzLnVwZGF0ZVZpZXdwb3J0KG5ld01hcFN0YXRlLCBOT19UUkFOU0lUSU9OX1BST1BTLCB7XG4gICAgICAgIGlzRHJhZ2dpbmc6IHRydWVcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIl9vblBhblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfb25QYW4oZXZlbnQpIHtcbiAgICAgIGlmICghdGhpcy5pc0RyYWdnaW5nKCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5fcGFuUm90YXRlID8gdGhpcy5fb25QYW5Sb3RhdGUoZXZlbnQpIDogdGhpcy5fb25QYW5Nb3ZlKGV2ZW50KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiX29uUGFuRW5kXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9vblBhbkVuZChldmVudCkge1xuICAgICAgaWYgKCF0aGlzLmlzRHJhZ2dpbmcoKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLl9wYW5Sb3RhdGUgPyB0aGlzLl9vblBhblJvdGF0ZUVuZChldmVudCkgOiB0aGlzLl9vblBhbk1vdmVFbmQoZXZlbnQpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJfb25QYW5Nb3ZlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9vblBhbk1vdmUoZXZlbnQpIHtcbiAgICAgIGlmICghdGhpcy5kcmFnUGFuKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgdmFyIHBvcyA9IHRoaXMuZ2V0Q2VudGVyKGV2ZW50KTtcbiAgICAgIHZhciBuZXdNYXBTdGF0ZSA9IHRoaXMubWFwU3RhdGUucGFuKHtcbiAgICAgICAgcG9zOiBwb3NcbiAgICAgIH0pO1xuICAgICAgdGhpcy51cGRhdGVWaWV3cG9ydChuZXdNYXBTdGF0ZSwgTk9fVFJBTlNJVElPTl9QUk9QUywge1xuICAgICAgICBpc1Bhbm5pbmc6IHRydWVcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIl9vblBhbk1vdmVFbmRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gX29uUGFuTW92ZUVuZChldmVudCkge1xuICAgICAgaWYgKHRoaXMuZHJhZ1Bhbikge1xuICAgICAgICB2YXIgX3RoaXMkZHJhZ1BhbiRpbmVydGlhID0gdGhpcy5kcmFnUGFuLmluZXJ0aWEsXG4gICAgICAgICAgICBpbmVydGlhID0gX3RoaXMkZHJhZ1BhbiRpbmVydGlhID09PSB2b2lkIDAgPyBERUZBVUxUX0lORVJUSUEgOiBfdGhpcyRkcmFnUGFuJGluZXJ0aWE7XG5cbiAgICAgICAgaWYgKGluZXJ0aWEgJiYgZXZlbnQudmVsb2NpdHkpIHtcbiAgICAgICAgICB2YXIgcG9zID0gdGhpcy5nZXRDZW50ZXIoZXZlbnQpO1xuICAgICAgICAgIHZhciBlbmRQb3MgPSBbcG9zWzBdICsgZXZlbnQudmVsb2NpdHlYICogaW5lcnRpYSAvIDIsIHBvc1sxXSArIGV2ZW50LnZlbG9jaXR5WSAqIGluZXJ0aWEgLyAyXTtcbiAgICAgICAgICB2YXIgbmV3Q29udHJvbGxlclN0YXRlID0gdGhpcy5tYXBTdGF0ZS5wYW4oe1xuICAgICAgICAgICAgcG9zOiBlbmRQb3NcbiAgICAgICAgICB9KS5wYW5FbmQoKTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVZpZXdwb3J0KG5ld0NvbnRyb2xsZXJTdGF0ZSwgX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBMSU5FQVJfVFJBTlNJVElPTl9QUk9QUyksIHt9LCB7XG4gICAgICAgICAgICB0cmFuc2l0aW9uRHVyYXRpb246IGluZXJ0aWEsXG4gICAgICAgICAgICB0cmFuc2l0aW9uRWFzaW5nOiBJTkVSVElBX0VBU0lOR1xuICAgICAgICAgIH0pLCB7XG4gICAgICAgICAgICBpc0RyYWdnaW5nOiBmYWxzZSxcbiAgICAgICAgICAgIGlzUGFubmluZzogdHJ1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBuZXdNYXBTdGF0ZSA9IHRoaXMubWFwU3RhdGUucGFuRW5kKCk7XG4gICAgICB0aGlzLnVwZGF0ZVZpZXdwb3J0KG5ld01hcFN0YXRlLCBudWxsLCB7XG4gICAgICAgIGlzRHJhZ2dpbmc6IGZhbHNlLFxuICAgICAgICBpc1Bhbm5pbmc6IGZhbHNlXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJfb25QYW5Sb3RhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gX29uUGFuUm90YXRlKGV2ZW50KSB7XG4gICAgICBpZiAoIXRoaXMuZHJhZ1JvdGF0ZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHZhciBwb3MgPSB0aGlzLmdldENlbnRlcihldmVudCk7XG4gICAgICB2YXIgbmV3TWFwU3RhdGUgPSB0aGlzLm1hcFN0YXRlLnJvdGF0ZSh7XG4gICAgICAgIHBvczogcG9zXG4gICAgICB9KTtcbiAgICAgIHRoaXMudXBkYXRlVmlld3BvcnQobmV3TWFwU3RhdGUsIE5PX1RSQU5TSVRJT05fUFJPUFMsIHtcbiAgICAgICAgaXNSb3RhdGluZzogdHJ1ZVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiX29uUGFuUm90YXRlRW5kXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9vblBhblJvdGF0ZUVuZChldmVudCkge1xuICAgICAgaWYgKHRoaXMuZHJhZ1JvdGF0ZSkge1xuICAgICAgICB2YXIgX3RoaXMkZHJhZ1JvdGF0ZSRpbmVyID0gdGhpcy5kcmFnUm90YXRlLmluZXJ0aWEsXG4gICAgICAgICAgICBpbmVydGlhID0gX3RoaXMkZHJhZ1JvdGF0ZSRpbmVyID09PSB2b2lkIDAgPyBERUZBVUxUX0lORVJUSUEgOiBfdGhpcyRkcmFnUm90YXRlJGluZXI7XG5cbiAgICAgICAgaWYgKGluZXJ0aWEgJiYgZXZlbnQudmVsb2NpdHkpIHtcbiAgICAgICAgICB2YXIgcG9zID0gdGhpcy5nZXRDZW50ZXIoZXZlbnQpO1xuICAgICAgICAgIHZhciBlbmRQb3MgPSBbcG9zWzBdICsgZXZlbnQudmVsb2NpdHlYICogaW5lcnRpYSAvIDIsIHBvc1sxXSArIGV2ZW50LnZlbG9jaXR5WSAqIGluZXJ0aWEgLyAyXTtcbiAgICAgICAgICB2YXIgbmV3Q29udHJvbGxlclN0YXRlID0gdGhpcy5tYXBTdGF0ZS5yb3RhdGUoe1xuICAgICAgICAgICAgcG9zOiBlbmRQb3NcbiAgICAgICAgICB9KS5yb3RhdGVFbmQoKTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVZpZXdwb3J0KG5ld0NvbnRyb2xsZXJTdGF0ZSwgX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBMSU5FQVJfVFJBTlNJVElPTl9QUk9QUyksIHt9LCB7XG4gICAgICAgICAgICB0cmFuc2l0aW9uRHVyYXRpb246IGluZXJ0aWEsXG4gICAgICAgICAgICB0cmFuc2l0aW9uRWFzaW5nOiBJTkVSVElBX0VBU0lOR1xuICAgICAgICAgIH0pLCB7XG4gICAgICAgICAgICBpc0RyYWdnaW5nOiBmYWxzZSxcbiAgICAgICAgICAgIGlzUm90YXRpbmc6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgbmV3TWFwU3RhdGUgPSB0aGlzLm1hcFN0YXRlLnBhbkVuZCgpO1xuICAgICAgdGhpcy51cGRhdGVWaWV3cG9ydChuZXdNYXBTdGF0ZSwgbnVsbCwge1xuICAgICAgICBpc0RyYWdnaW5nOiBmYWxzZSxcbiAgICAgICAgaXNSb3RhdGluZzogZmFsc2VcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIl9vbldoZWVsXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9vbldoZWVsKGV2ZW50KSB7XG4gICAgICBpZiAoIXRoaXMuc2Nyb2xsWm9vbSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHZhciBfdGhpcyRzY3JvbGxab29tID0gdGhpcy5zY3JvbGxab29tLFxuICAgICAgICAgIF90aGlzJHNjcm9sbFpvb20kc3BlZSA9IF90aGlzJHNjcm9sbFpvb20uc3BlZWQsXG4gICAgICAgICAgc3BlZWQgPSBfdGhpcyRzY3JvbGxab29tJHNwZWUgPT09IHZvaWQgMCA/IDAuMDEgOiBfdGhpcyRzY3JvbGxab29tJHNwZWUsXG4gICAgICAgICAgX3RoaXMkc2Nyb2xsWm9vbSRzbW9vID0gX3RoaXMkc2Nyb2xsWm9vbS5zbW9vdGgsXG4gICAgICAgICAgc21vb3RoID0gX3RoaXMkc2Nyb2xsWm9vbSRzbW9vID09PSB2b2lkIDAgPyBmYWxzZSA6IF90aGlzJHNjcm9sbFpvb20kc21vbztcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB2YXIgcG9zID0gdGhpcy5nZXRDZW50ZXIoZXZlbnQpO1xuICAgICAgdmFyIGRlbHRhID0gZXZlbnQuZGVsdGE7XG4gICAgICB2YXIgc2NhbGUgPSAyIC8gKDEgKyBNYXRoLmV4cCgtTWF0aC5hYnMoZGVsdGEgKiBzcGVlZCkpKTtcblxuICAgICAgaWYgKGRlbHRhIDwgMCAmJiBzY2FsZSAhPT0gMCkge1xuICAgICAgICBzY2FsZSA9IDEgLyBzY2FsZTtcbiAgICAgIH1cblxuICAgICAgdmFyIG5ld01hcFN0YXRlID0gdGhpcy5tYXBTdGF0ZS56b29tKHtcbiAgICAgICAgcG9zOiBwb3MsXG4gICAgICAgIHNjYWxlOiBzY2FsZVxuICAgICAgfSk7XG4gICAgICB0aGlzLnVwZGF0ZVZpZXdwb3J0KG5ld01hcFN0YXRlLCBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIExJTkVBUl9UUkFOU0lUSU9OX1BST1BTKSwge30sIHtcbiAgICAgICAgdHJhbnNpdGlvbkludGVycG9sYXRvcjogbmV3IExpbmVhckludGVycG9sYXRvcih7XG4gICAgICAgICAgYXJvdW5kOiBwb3NcbiAgICAgICAgfSksXG4gICAgICAgIHRyYW5zaXRpb25EdXJhdGlvbjogc21vb3RoID8gMjUwIDogMVxuICAgICAgfSksIHtcbiAgICAgICAgaXNQYW5uaW5nOiB0cnVlLFxuICAgICAgICBpc1pvb21pbmc6IHRydWVcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIl9vblBpbmNoU3RhcnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gX29uUGluY2hTdGFydChldmVudCkge1xuICAgICAgdmFyIHBvcyA9IHRoaXMuZ2V0Q2VudGVyKGV2ZW50KTtcbiAgICAgIHZhciBuZXdNYXBTdGF0ZSA9IHRoaXMubWFwU3RhdGUuem9vbVN0YXJ0KHtcbiAgICAgICAgcG9zOiBwb3NcbiAgICAgIH0pLnJvdGF0ZVN0YXJ0KHtcbiAgICAgICAgcG9zOiBwb3NcbiAgICAgIH0pO1xuICAgICAgdGhpcy5fc3RhcnRQaW5jaFJvdGF0aW9uID0gZXZlbnQucm90YXRpb247XG4gICAgICB0aGlzLl9sYXN0UGluY2hFdmVudCA9IGV2ZW50O1xuICAgICAgdGhpcy51cGRhdGVWaWV3cG9ydChuZXdNYXBTdGF0ZSwgTk9fVFJBTlNJVElPTl9QUk9QUywge1xuICAgICAgICBpc0RyYWdnaW5nOiB0cnVlXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJfb25QaW5jaFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfb25QaW5jaChldmVudCkge1xuICAgICAgaWYgKCF0aGlzLmlzRHJhZ2dpbmcoKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy50b3VjaFpvb20gJiYgIXRoaXMudG91Y2hSb3RhdGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICB2YXIgbmV3TWFwU3RhdGUgPSB0aGlzLm1hcFN0YXRlO1xuXG4gICAgICBpZiAodGhpcy50b3VjaFpvb20pIHtcbiAgICAgICAgdmFyIHNjYWxlID0gZXZlbnQuc2NhbGU7XG4gICAgICAgIHZhciBwb3MgPSB0aGlzLmdldENlbnRlcihldmVudCk7XG4gICAgICAgIG5ld01hcFN0YXRlID0gbmV3TWFwU3RhdGUuem9vbSh7XG4gICAgICAgICAgcG9zOiBwb3MsXG4gICAgICAgICAgc2NhbGU6IHNjYWxlXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy50b3VjaFJvdGF0ZSkge1xuICAgICAgICB2YXIgcm90YXRpb24gPSBldmVudC5yb3RhdGlvbjtcbiAgICAgICAgbmV3TWFwU3RhdGUgPSBuZXdNYXBTdGF0ZS5yb3RhdGUoe1xuICAgICAgICAgIGRlbHRhQW5nbGVYOiB0aGlzLl9zdGFydFBpbmNoUm90YXRpb24gLSByb3RhdGlvblxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy51cGRhdGVWaWV3cG9ydChuZXdNYXBTdGF0ZSwgTk9fVFJBTlNJVElPTl9QUk9QUywge1xuICAgICAgICBpc0RyYWdnaW5nOiB0cnVlLFxuICAgICAgICBpc1Bhbm5pbmc6IEJvb2xlYW4odGhpcy50b3VjaFpvb20pLFxuICAgICAgICBpc1pvb21pbmc6IEJvb2xlYW4odGhpcy50b3VjaFpvb20pLFxuICAgICAgICBpc1JvdGF0aW5nOiBCb29sZWFuKHRoaXMudG91Y2hSb3RhdGUpXG4gICAgICB9KTtcbiAgICAgIHRoaXMuX2xhc3RQaW5jaEV2ZW50ID0gZXZlbnQ7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiX29uUGluY2hFbmRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gX29uUGluY2hFbmQoZXZlbnQpIHtcbiAgICAgIGlmICghdGhpcy5pc0RyYWdnaW5nKCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy50b3VjaFpvb20pIHtcbiAgICAgICAgdmFyIF90aGlzJHRvdWNoWm9vbSRpbmVydCA9IHRoaXMudG91Y2hab29tLmluZXJ0aWEsXG4gICAgICAgICAgICBpbmVydGlhID0gX3RoaXMkdG91Y2hab29tJGluZXJ0ID09PSB2b2lkIDAgPyBERUZBVUxUX0lORVJUSUEgOiBfdGhpcyR0b3VjaFpvb20kaW5lcnQ7XG4gICAgICAgIHZhciBfbGFzdFBpbmNoRXZlbnQgPSB0aGlzLl9sYXN0UGluY2hFdmVudDtcblxuICAgICAgICBpZiAoaW5lcnRpYSAmJiBfbGFzdFBpbmNoRXZlbnQgJiYgZXZlbnQuc2NhbGUgIT09IF9sYXN0UGluY2hFdmVudC5zY2FsZSkge1xuICAgICAgICAgIHZhciBwb3MgPSB0aGlzLmdldENlbnRlcihldmVudCk7XG5cbiAgICAgICAgICB2YXIgX25ld01hcFN0YXRlID0gdGhpcy5tYXBTdGF0ZS5yb3RhdGVFbmQoKTtcblxuICAgICAgICAgIHZhciB6ID0gTWF0aC5sb2cyKGV2ZW50LnNjYWxlKTtcblxuICAgICAgICAgIHZhciB2ZWxvY2l0eVogPSAoeiAtIE1hdGgubG9nMihfbGFzdFBpbmNoRXZlbnQuc2NhbGUpKSAvIChldmVudC5kZWx0YVRpbWUgLSBfbGFzdFBpbmNoRXZlbnQuZGVsdGFUaW1lKTtcblxuICAgICAgICAgIHZhciBlbmRTY2FsZSA9IE1hdGgucG93KDIsIHogKyB2ZWxvY2l0eVogKiBpbmVydGlhIC8gMik7XG4gICAgICAgICAgX25ld01hcFN0YXRlID0gX25ld01hcFN0YXRlLnpvb20oe1xuICAgICAgICAgICAgcG9zOiBwb3MsXG4gICAgICAgICAgICBzY2FsZTogZW5kU2NhbGVcbiAgICAgICAgICB9KS56b29tRW5kKCk7XG4gICAgICAgICAgdGhpcy51cGRhdGVWaWV3cG9ydChfbmV3TWFwU3RhdGUsIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgTElORUFSX1RSQU5TSVRJT05fUFJPUFMpLCB7fSwge1xuICAgICAgICAgICAgdHJhbnNpdGlvbkludGVycG9sYXRvcjogbmV3IExpbmVhckludGVycG9sYXRvcih7XG4gICAgICAgICAgICAgIGFyb3VuZDogcG9zXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHRyYW5zaXRpb25EdXJhdGlvbjogaW5lcnRpYSxcbiAgICAgICAgICAgIHRyYW5zaXRpb25FYXNpbmc6IElORVJUSUFfRUFTSU5HXG4gICAgICAgICAgfSksIHtcbiAgICAgICAgICAgIGlzRHJhZ2dpbmc6IGZhbHNlLFxuICAgICAgICAgICAgaXNQYW5uaW5nOiBCb29sZWFuKHRoaXMudG91Y2hab29tKSxcbiAgICAgICAgICAgIGlzWm9vbWluZzogQm9vbGVhbih0aGlzLnRvdWNoWm9vbSksXG4gICAgICAgICAgICBpc1JvdGF0aW5nOiBmYWxzZVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuYmxvY2tFdmVudHMoaW5lcnRpYSk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIG5ld01hcFN0YXRlID0gdGhpcy5tYXBTdGF0ZS56b29tRW5kKCkucm90YXRlRW5kKCk7XG4gICAgICB0aGlzLl9zdGF0ZS5zdGFydFBpbmNoUm90YXRpb24gPSAwO1xuICAgICAgdGhpcy51cGRhdGVWaWV3cG9ydChuZXdNYXBTdGF0ZSwgbnVsbCwge1xuICAgICAgICBpc0RyYWdnaW5nOiBmYWxzZSxcbiAgICAgICAgaXNQYW5uaW5nOiBmYWxzZSxcbiAgICAgICAgaXNab29taW5nOiBmYWxzZSxcbiAgICAgICAgaXNSb3RhdGluZzogZmFsc2VcbiAgICAgIH0pO1xuICAgICAgdGhpcy5fc3RhcnRQaW5jaFJvdGF0aW9uID0gbnVsbDtcbiAgICAgIHRoaXMuX2xhc3RQaW5jaEV2ZW50ID0gbnVsbDtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJfb25UcmlwbGVQYW5TdGFydFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfb25UcmlwbGVQYW5TdGFydChldmVudCkge1xuICAgICAgdmFyIHBvcyA9IHRoaXMuZ2V0Q2VudGVyKGV2ZW50KTtcbiAgICAgIHZhciBuZXdNYXBTdGF0ZSA9IHRoaXMubWFwU3RhdGUucm90YXRlU3RhcnQoe1xuICAgICAgICBwb3M6IHBvc1xuICAgICAgfSk7XG4gICAgICB0aGlzLnVwZGF0ZVZpZXdwb3J0KG5ld01hcFN0YXRlLCBOT19UUkFOU0lUSU9OX1BST1BTLCB7XG4gICAgICAgIGlzRHJhZ2dpbmc6IHRydWVcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIl9vblRyaXBsZVBhblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfb25UcmlwbGVQYW4oZXZlbnQpIHtcbiAgICAgIGlmICghdGhpcy5pc0RyYWdnaW5nKCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMudG91Y2hSb3RhdGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICB2YXIgcG9zID0gdGhpcy5nZXRDZW50ZXIoZXZlbnQpO1xuICAgICAgcG9zWzBdIC09IGV2ZW50LmRlbHRhWDtcbiAgICAgIHZhciBuZXdNYXBTdGF0ZSA9IHRoaXMubWFwU3RhdGUucm90YXRlKHtcbiAgICAgICAgcG9zOiBwb3NcbiAgICAgIH0pO1xuICAgICAgdGhpcy51cGRhdGVWaWV3cG9ydChuZXdNYXBTdGF0ZSwgTk9fVFJBTlNJVElPTl9QUk9QUywge1xuICAgICAgICBpc1JvdGF0aW5nOiB0cnVlXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJfb25UcmlwbGVQYW5FbmRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gX29uVHJpcGxlUGFuRW5kKGV2ZW50KSB7XG4gICAgICBpZiAoIXRoaXMuaXNEcmFnZ2luZygpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMudG91Y2hSb3RhdGUpIHtcbiAgICAgICAgdmFyIF90aGlzJHRvdWNoUm90YXRlJGluZSA9IHRoaXMudG91Y2hSb3RhdGUuaW5lcnRpYSxcbiAgICAgICAgICAgIGluZXJ0aWEgPSBfdGhpcyR0b3VjaFJvdGF0ZSRpbmUgPT09IHZvaWQgMCA/IERFRkFVTFRfSU5FUlRJQSA6IF90aGlzJHRvdWNoUm90YXRlJGluZTtcblxuICAgICAgICBpZiAoaW5lcnRpYSAmJiBldmVudC52ZWxvY2l0eVkpIHtcbiAgICAgICAgICB2YXIgcG9zID0gdGhpcy5nZXRDZW50ZXIoZXZlbnQpO1xuICAgICAgICAgIHZhciBlbmRQb3MgPSBbcG9zWzBdLCBwb3NbMV0gKz0gZXZlbnQudmVsb2NpdHlZICogaW5lcnRpYSAvIDJdO1xuXG4gICAgICAgICAgdmFyIF9uZXdNYXBTdGF0ZTIgPSB0aGlzLm1hcFN0YXRlLnJvdGF0ZSh7XG4gICAgICAgICAgICBwb3M6IGVuZFBvc1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgdGhpcy51cGRhdGVWaWV3cG9ydChfbmV3TWFwU3RhdGUyLCBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIExJTkVBUl9UUkFOU0lUSU9OX1BST1BTKSwge30sIHtcbiAgICAgICAgICAgIHRyYW5zaXRpb25EdXJhdGlvbjogaW5lcnRpYSxcbiAgICAgICAgICAgIHRyYW5zaXRpb25FYXNpbmc6IElORVJUSUFfRUFTSU5HXG4gICAgICAgICAgfSksIHtcbiAgICAgICAgICAgIGlzRHJhZ2dpbmc6IGZhbHNlLFxuICAgICAgICAgICAgaXNSb3RhdGluZzogdHJ1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuYmxvY2tFdmVudHMoaW5lcnRpYSk7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBuZXdNYXBTdGF0ZSA9IHRoaXMubWFwU3RhdGUucm90YXRlRW5kKCk7XG4gICAgICB0aGlzLnVwZGF0ZVZpZXdwb3J0KG5ld01hcFN0YXRlLCBudWxsLCB7XG4gICAgICAgIGlzRHJhZ2dpbmc6IGZhbHNlLFxuICAgICAgICBpc1JvdGF0aW5nOiBmYWxzZVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiX29uRG91YmxlVGFwXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9vbkRvdWJsZVRhcChldmVudCkge1xuICAgICAgaWYgKCF0aGlzLmRvdWJsZUNsaWNrWm9vbSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHZhciBwb3MgPSB0aGlzLmdldENlbnRlcihldmVudCk7XG4gICAgICB2YXIgaXNab29tT3V0ID0gdGhpcy5pc0Z1bmN0aW9uS2V5UHJlc3NlZChldmVudCk7XG4gICAgICB2YXIgbmV3TWFwU3RhdGUgPSB0aGlzLm1hcFN0YXRlLnpvb20oe1xuICAgICAgICBwb3M6IHBvcyxcbiAgICAgICAgc2NhbGU6IGlzWm9vbU91dCA/IDAuNSA6IDJcbiAgICAgIH0pO1xuICAgICAgdGhpcy51cGRhdGVWaWV3cG9ydChuZXdNYXBTdGF0ZSwgT2JqZWN0LmFzc2lnbih7fSwgTElORUFSX1RSQU5TSVRJT05fUFJPUFMsIHtcbiAgICAgICAgdHJhbnNpdGlvbkludGVycG9sYXRvcjogbmV3IExpbmVhckludGVycG9sYXRvcih7XG4gICAgICAgICAgYXJvdW5kOiBwb3NcbiAgICAgICAgfSlcbiAgICAgIH0pLCB7XG4gICAgICAgIGlzWm9vbWluZzogdHJ1ZVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiX29uS2V5RG93blwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfb25LZXlEb3duKGV2ZW50KSB7XG4gICAgICBpZiAoIXRoaXMua2V5Ym9hcmQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICB2YXIgZnVuY0tleSA9IHRoaXMuaXNGdW5jdGlvbktleVByZXNzZWQoZXZlbnQpO1xuICAgICAgdmFyIF90aGlzJGtleWJvYXJkID0gdGhpcy5rZXlib2FyZCxcbiAgICAgICAgICBfdGhpcyRrZXlib2FyZCR6b29tU3AgPSBfdGhpcyRrZXlib2FyZC56b29tU3BlZWQsXG4gICAgICAgICAgem9vbVNwZWVkID0gX3RoaXMka2V5Ym9hcmQkem9vbVNwID09PSB2b2lkIDAgPyAyIDogX3RoaXMka2V5Ym9hcmQkem9vbVNwLFxuICAgICAgICAgIF90aGlzJGtleWJvYXJkJG1vdmVTcCA9IF90aGlzJGtleWJvYXJkLm1vdmVTcGVlZCxcbiAgICAgICAgICBtb3ZlU3BlZWQgPSBfdGhpcyRrZXlib2FyZCRtb3ZlU3AgPT09IHZvaWQgMCA/IDEwMCA6IF90aGlzJGtleWJvYXJkJG1vdmVTcCxcbiAgICAgICAgICBfdGhpcyRrZXlib2FyZCRyb3RhdGUgPSBfdGhpcyRrZXlib2FyZC5yb3RhdGVTcGVlZFgsXG4gICAgICAgICAgcm90YXRlU3BlZWRYID0gX3RoaXMka2V5Ym9hcmQkcm90YXRlID09PSB2b2lkIDAgPyAxNSA6IF90aGlzJGtleWJvYXJkJHJvdGF0ZSxcbiAgICAgICAgICBfdGhpcyRrZXlib2FyZCRyb3RhdGUyID0gX3RoaXMka2V5Ym9hcmQucm90YXRlU3BlZWRZLFxuICAgICAgICAgIHJvdGF0ZVNwZWVkWSA9IF90aGlzJGtleWJvYXJkJHJvdGF0ZTIgPT09IHZvaWQgMCA/IDEwIDogX3RoaXMka2V5Ym9hcmQkcm90YXRlMjtcbiAgICAgIHZhciBtYXBTdGF0ZVByb3BzID0gdGhpcy5tYXBTdGF0ZVByb3BzO1xuICAgICAgdmFyIG5ld01hcFN0YXRlO1xuXG4gICAgICBzd2l0Y2ggKGV2ZW50LnNyY0V2ZW50LmtleUNvZGUpIHtcbiAgICAgICAgY2FzZSAxODk6XG4gICAgICAgICAgaWYgKGZ1bmNLZXkpIHtcbiAgICAgICAgICAgIG5ld01hcFN0YXRlID0gdGhpcy5nZXRNYXBTdGF0ZSh7XG4gICAgICAgICAgICAgIHpvb206IG1hcFN0YXRlUHJvcHMuem9vbSAtIE1hdGgubG9nMih6b29tU3BlZWQpIC0gMVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5ld01hcFN0YXRlID0gdGhpcy5nZXRNYXBTdGF0ZSh7XG4gICAgICAgICAgICAgIHpvb206IG1hcFN0YXRlUHJvcHMuem9vbSAtIE1hdGgubG9nMih6b29tU3BlZWQpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDE4NzpcbiAgICAgICAgICBpZiAoZnVuY0tleSkge1xuICAgICAgICAgICAgbmV3TWFwU3RhdGUgPSB0aGlzLmdldE1hcFN0YXRlKHtcbiAgICAgICAgICAgICAgem9vbTogbWFwU3RhdGVQcm9wcy56b29tICsgTWF0aC5sb2cyKHpvb21TcGVlZCkgKyAxXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3TWFwU3RhdGUgPSB0aGlzLmdldE1hcFN0YXRlKHtcbiAgICAgICAgICAgICAgem9vbTogbWFwU3RhdGVQcm9wcy56b29tICsgTWF0aC5sb2cyKHpvb21TcGVlZClcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMzc6XG4gICAgICAgICAgaWYgKGZ1bmNLZXkpIHtcbiAgICAgICAgICAgIG5ld01hcFN0YXRlID0gdGhpcy5nZXRNYXBTdGF0ZSh7XG4gICAgICAgICAgICAgIGJlYXJpbmc6IG1hcFN0YXRlUHJvcHMuYmVhcmluZyAtIHJvdGF0ZVNwZWVkWFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5ld01hcFN0YXRlID0gdGhpcy5tYXBTdGF0ZS5wYW4oe1xuICAgICAgICAgICAgICBwb3M6IFttb3ZlU3BlZWQsIDBdLFxuICAgICAgICAgICAgICBzdGFydFBvczogWzAsIDBdXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDM5OlxuICAgICAgICAgIGlmIChmdW5jS2V5KSB7XG4gICAgICAgICAgICBuZXdNYXBTdGF0ZSA9IHRoaXMuZ2V0TWFwU3RhdGUoe1xuICAgICAgICAgICAgICBiZWFyaW5nOiBtYXBTdGF0ZVByb3BzLmJlYXJpbmcgKyByb3RhdGVTcGVlZFhcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXdNYXBTdGF0ZSA9IHRoaXMubWFwU3RhdGUucGFuKHtcbiAgICAgICAgICAgICAgcG9zOiBbLW1vdmVTcGVlZCwgMF0sXG4gICAgICAgICAgICAgIHN0YXJ0UG9zOiBbMCwgMF1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMzg6XG4gICAgICAgICAgaWYgKGZ1bmNLZXkpIHtcbiAgICAgICAgICAgIG5ld01hcFN0YXRlID0gdGhpcy5nZXRNYXBTdGF0ZSh7XG4gICAgICAgICAgICAgIHBpdGNoOiBtYXBTdGF0ZVByb3BzLnBpdGNoICsgcm90YXRlU3BlZWRZXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3TWFwU3RhdGUgPSB0aGlzLm1hcFN0YXRlLnBhbih7XG4gICAgICAgICAgICAgIHBvczogWzAsIG1vdmVTcGVlZF0sXG4gICAgICAgICAgICAgIHN0YXJ0UG9zOiBbMCwgMF1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNDA6XG4gICAgICAgICAgaWYgKGZ1bmNLZXkpIHtcbiAgICAgICAgICAgIG5ld01hcFN0YXRlID0gdGhpcy5nZXRNYXBTdGF0ZSh7XG4gICAgICAgICAgICAgIHBpdGNoOiBtYXBTdGF0ZVByb3BzLnBpdGNoIC0gcm90YXRlU3BlZWRZXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3TWFwU3RhdGUgPSB0aGlzLm1hcFN0YXRlLnBhbih7XG4gICAgICAgICAgICAgIHBvczogWzAsIC1tb3ZlU3BlZWRdLFxuICAgICAgICAgICAgICBzdGFydFBvczogWzAsIDBdXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMudXBkYXRlVmlld3BvcnQobmV3TWFwU3RhdGUsIExJTkVBUl9UUkFOU0lUSU9OX1BST1BTKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gTWFwQ29udHJvbGxlcjtcbn0oKTtcblxuZXhwb3J0IHsgTWFwQ29udHJvbGxlciBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX3RvQ29uc3VtYWJsZUFycmF5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b0NvbnN1bWFibGVBcnJheVwiO1xuaW1wb3J0IF9kZWZpbmVQcm9wZXJ0eSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHlcIjtcblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7XG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTtcblxuICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICAgIHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpO1xuICAgIGlmIChlbnVtZXJhYmxlT25seSkgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHtcbiAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlO1xuICAgIH0pO1xuICAgIGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTtcbiAgfVxuXG4gIHJldHVybiBrZXlzO1xufVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkge1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9O1xuXG4gICAgaWYgKGkgJSAyKSB7XG4gICAgICBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VDb250ZXh0LCB1c2VSZWYsIHVzZU1lbW8sIHVzZUVmZmVjdCwgdXNlSW1wZXJhdGl2ZUhhbmRsZSwgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCAqIGFzIFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBTdGF0aWNNYXAsIHsgZ2V0Vmlld3BvcnQgfSBmcm9tICcuL3N0YXRpYy1tYXAnO1xuaW1wb3J0IHsgTUFQQk9YX0xJTUlUUyB9IGZyb20gJy4uL3V0aWxzL21hcC1zdGF0ZSc7XG5pbXBvcnQgVHJhbnNpdGlvbk1hbmFnZXIgZnJvbSAnLi4vdXRpbHMvdHJhbnNpdGlvbi1tYW5hZ2VyJztcbmltcG9ydCBNYXBDb250ZXh0LCB7IE1hcENvbnRleHRQcm92aWRlciB9IGZyb20gJy4vbWFwLWNvbnRleHQnO1xuaW1wb3J0IHsgRXZlbnRNYW5hZ2VyIH0gZnJvbSAnbWpvbG5pci5qcyc7XG5pbXBvcnQgTWFwQ29udHJvbGxlciBmcm9tICcuLi91dGlscy9tYXAtY29udHJvbGxlcic7XG5pbXBvcnQgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCBmcm9tICcuLi91dGlscy91c2UtaXNvbW9ycGhpYy1sYXlvdXQtZWZmZWN0JztcbmltcG9ydCB7IGdldFRlcnJhaW5FbGV2YXRpb24gfSBmcm9tICcuLi91dGlscy90ZXJyYWluJztcbnZhciBwcm9wVHlwZXMgPSBPYmplY3QuYXNzaWduKHt9LCBTdGF0aWNNYXAucHJvcFR5cGVzLCB7XG4gIG1heFpvb206IFByb3BUeXBlcy5udW1iZXIsXG4gIG1pblpvb206IFByb3BUeXBlcy5udW1iZXIsXG4gIG1heFBpdGNoOiBQcm9wVHlwZXMubnVtYmVyLFxuICBtaW5QaXRjaDogUHJvcFR5cGVzLm51bWJlcixcbiAgb25WaWV3U3RhdGVDaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICBvblZpZXdwb3J0Q2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25JbnRlcmFjdGlvblN0YXRlQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgdHJhbnNpdGlvbkR1cmF0aW9uOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIHRyYW5zaXRpb25JbnRlcnBvbGF0b3I6IFByb3BUeXBlcy5vYmplY3QsXG4gIHRyYW5zaXRpb25JbnRlcnJ1cHRpb246IFByb3BUeXBlcy5udW1iZXIsXG4gIHRyYW5zaXRpb25FYXNpbmc6IFByb3BUeXBlcy5mdW5jLFxuICBvblRyYW5zaXRpb25TdGFydDogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uVHJhbnNpdGlvbkludGVycnVwdDogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uVHJhbnNpdGlvbkVuZDogUHJvcFR5cGVzLmZ1bmMsXG4gIHNjcm9sbFpvb206IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ib29sLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIGRyYWdQYW46IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ib29sLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIGRyYWdSb3RhdGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ib29sLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIGRvdWJsZUNsaWNrWm9vbTogUHJvcFR5cGVzLmJvb2wsXG4gIHRvdWNoWm9vbTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmJvb2wsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgdG91Y2hSb3RhdGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ib29sLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIGtleWJvYXJkOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYm9vbCwgUHJvcFR5cGVzLm9iamVjdF0pLFxuICBvbkhvdmVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uRGJsQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICBvbkNvbnRleHRNZW51OiBQcm9wVHlwZXMuZnVuYyxcbiAgb25Nb3VzZURvd246IFByb3BUeXBlcy5mdW5jLFxuICBvbk1vdXNlTW92ZTogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uTW91c2VVcDogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uVG91Y2hTdGFydDogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uVG91Y2hNb3ZlOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25Ub3VjaEVuZDogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uTW91c2VFbnRlcjogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uTW91c2VMZWF2ZTogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uTW91c2VPdXQ6IFByb3BUeXBlcy5mdW5jLFxuICBvbldoZWVsOiBQcm9wVHlwZXMuZnVuYyxcbiAgdG91Y2hBY3Rpb246IFByb3BUeXBlcy5zdHJpbmcsXG4gIGV2ZW50UmVjb2duaXplck9wdGlvbnM6IFByb3BUeXBlcy5vYmplY3QsXG4gIGNsaWNrUmFkaXVzOiBQcm9wVHlwZXMubnVtYmVyLFxuICBpbnRlcmFjdGl2ZUxheWVySWRzOiBQcm9wVHlwZXMuYXJyYXksXG4gIGdldEN1cnNvcjogUHJvcFR5cGVzLmZ1bmMsXG4gIGNvbnRyb2xsZXI6IFByb3BUeXBlcy5pbnN0YW5jZU9mKE1hcENvbnRyb2xsZXIpXG59KTtcblxudmFyIGdldERlZmF1bHRDdXJzb3IgPSBmdW5jdGlvbiBnZXREZWZhdWx0Q3Vyc29yKF9yZWYpIHtcbiAgdmFyIGlzRHJhZ2dpbmcgPSBfcmVmLmlzRHJhZ2dpbmcsXG4gICAgICBpc0hvdmVyaW5nID0gX3JlZi5pc0hvdmVyaW5nO1xuICByZXR1cm4gaXNEcmFnZ2luZyA/ICdncmFiYmluZycgOiBpc0hvdmVyaW5nID8gJ3BvaW50ZXInIDogJ2dyYWInO1xufTtcblxudmFyIGRlZmF1bHRQcm9wcyA9IE9iamVjdC5hc3NpZ24oe30sIFN0YXRpY01hcC5kZWZhdWx0UHJvcHMsIE1BUEJPWF9MSU1JVFMsIFRyYW5zaXRpb25NYW5hZ2VyLmRlZmF1bHRQcm9wcywge1xuICBvblZpZXdTdGF0ZUNoYW5nZTogbnVsbCxcbiAgb25WaWV3cG9ydENoYW5nZTogbnVsbCxcbiAgb25DbGljazogbnVsbCxcbiAgb25OYXRpdmVDbGljazogbnVsbCxcbiAgb25Ib3ZlcjogbnVsbCxcbiAgb25Db250ZXh0TWVudTogZnVuY3Rpb24gb25Db250ZXh0TWVudShldmVudCkge1xuICAgIHJldHVybiBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9LFxuICBzY3JvbGxab29tOiB0cnVlLFxuICBkcmFnUGFuOiB0cnVlLFxuICBkcmFnUm90YXRlOiB0cnVlLFxuICBkb3VibGVDbGlja1pvb206IHRydWUsXG4gIHRvdWNoWm9vbTogdHJ1ZSxcbiAgdG91Y2hSb3RhdGU6IGZhbHNlLFxuICBrZXlib2FyZDogdHJ1ZSxcbiAgdG91Y2hBY3Rpb246ICdub25lJyxcbiAgZXZlbnRSZWNvZ25pemVyT3B0aW9uczoge30sXG4gIGNsaWNrUmFkaXVzOiAwLFxuICBnZXRDdXJzb3I6IGdldERlZmF1bHRDdXJzb3Jcbn0pO1xuXG5mdW5jdGlvbiBub3JtYWxpemVFdmVudChldmVudCkge1xuICBpZiAoZXZlbnQubG5nTGF0IHx8ICFldmVudC5vZmZzZXRDZW50ZXIpIHtcbiAgICByZXR1cm4gZXZlbnQ7XG4gIH1cblxuICB2YXIgX2V2ZW50JG9mZnNldENlbnRlciA9IGV2ZW50Lm9mZnNldENlbnRlcixcbiAgICAgIHggPSBfZXZlbnQkb2Zmc2V0Q2VudGVyLngsXG4gICAgICB5ID0gX2V2ZW50JG9mZnNldENlbnRlci55O1xuXG4gIGlmICghTnVtYmVyLmlzRmluaXRlKHgpIHx8ICFOdW1iZXIuaXNGaW5pdGUoeSkpIHtcbiAgICByZXR1cm4gZXZlbnQ7XG4gIH1cblxuICB2YXIgcG9zID0gW3gsIHldO1xuICBldmVudC5wb2ludCA9IHBvcztcbiAgdmFyIHZpZXdwb3J0ID0gdGhpcy52aWV3cG9ydDtcbiAgdmFyIGxvY2F0aW9uID0gdmlld3BvcnQudW5wcm9qZWN0KHBvcywge1xuICAgIHRhcmdldFo6IHZpZXdwb3J0Lm1ldGVyT2Zmc2V0WzJdXG4gIH0pO1xuICBldmVudC5sbmdMYXQgPSBbbG9jYXRpb25bMF0sIGxvY2F0aW9uWzFdXTtcbiAgcmV0dXJuIGV2ZW50O1xufVxuXG5mdW5jdGlvbiBnZXRGZWF0dXJlcyhwb3MpIHtcbiAgdmFyIG1hcCA9IHRoaXMubWFwO1xuXG4gIGlmICghbWFwIHx8ICFwb3MpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBxdWVyeVBhcmFtcyA9IHt9O1xuICB2YXIgc2l6ZSA9IHRoaXMucHJvcHMuY2xpY2tSYWRpdXM7XG5cbiAgaWYgKHRoaXMucHJvcHMuaW50ZXJhY3RpdmVMYXllcklkcykge1xuICAgIHF1ZXJ5UGFyYW1zLmxheWVycyA9IHRoaXMucHJvcHMuaW50ZXJhY3RpdmVMYXllcklkcztcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIG1hcC5xdWVyeVJlbmRlcmVkRmVhdHVyZXMoc2l6ZSA/IFtbcG9zWzBdIC0gc2l6ZSwgcG9zWzFdICsgc2l6ZV0sIFtwb3NbMF0gKyBzaXplLCBwb3NbMV0gLSBzaXplXV0gOiBwb3MsIHF1ZXJ5UGFyYW1zKTtcbiAgfSBjYXRjaCAoX3VudXNlZCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmZ1bmN0aW9uIG9uRXZlbnQoY2FsbGJhY2tOYW1lLCBldmVudCkge1xuICB2YXIgZnVuYyA9IHRoaXMucHJvcHNbY2FsbGJhY2tOYW1lXTtcblxuICBpZiAoZnVuYykge1xuICAgIGZ1bmMobm9ybWFsaXplRXZlbnQuY2FsbCh0aGlzLCBldmVudCkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIG9uUG9pbnRlckRvd24oZXZlbnQpIHtcbiAgb25FdmVudC5jYWxsKHRoaXMsIGV2ZW50LnBvaW50ZXJUeXBlID09PSAndG91Y2gnID8gJ29uVG91Y2hTdGFydCcgOiAnb25Nb3VzZURvd24nLCBldmVudCk7XG59XG5cbmZ1bmN0aW9uIG9uUG9pbnRlclVwKGV2ZW50KSB7XG4gIG9uRXZlbnQuY2FsbCh0aGlzLCBldmVudC5wb2ludGVyVHlwZSA9PT0gJ3RvdWNoJyA/ICdvblRvdWNoRW5kJyA6ICdvbk1vdXNlVXAnLCBldmVudCk7XG59XG5cbmZ1bmN0aW9uIG9uUG9pbnRlck1vdmUoZXZlbnQpIHtcbiAgb25FdmVudC5jYWxsKHRoaXMsIGV2ZW50LnBvaW50ZXJUeXBlID09PSAndG91Y2gnID8gJ29uVG91Y2hNb3ZlJyA6ICdvbk1vdXNlTW92ZScsIGV2ZW50KTtcblxuICBpZiAoIXRoaXMuc3RhdGUuaXNEcmFnZ2luZykge1xuICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgIG9uSG92ZXIgPSBfdGhpcyRwcm9wcy5vbkhvdmVyLFxuICAgICAgICBpbnRlcmFjdGl2ZUxheWVySWRzID0gX3RoaXMkcHJvcHMuaW50ZXJhY3RpdmVMYXllcklkcztcbiAgICB2YXIgZmVhdHVyZXM7XG4gICAgZXZlbnQgPSBub3JtYWxpemVFdmVudC5jYWxsKHRoaXMsIGV2ZW50KTtcblxuICAgIGlmIChpbnRlcmFjdGl2ZUxheWVySWRzIHx8IG9uSG92ZXIpIHtcbiAgICAgIGZlYXR1cmVzID0gZ2V0RmVhdHVyZXMuY2FsbCh0aGlzLCBldmVudC5wb2ludCk7XG4gICAgfVxuXG4gICAgdmFyIGlzSG92ZXJpbmcgPSBCb29sZWFuKGludGVyYWN0aXZlTGF5ZXJJZHMgJiYgZmVhdHVyZXMgJiYgZmVhdHVyZXMubGVuZ3RoID4gMCk7XG4gICAgdmFyIGlzRW50ZXJpbmcgPSBpc0hvdmVyaW5nICYmICF0aGlzLnN0YXRlLmlzSG92ZXJpbmc7XG4gICAgdmFyIGlzRXhpdGluZyA9ICFpc0hvdmVyaW5nICYmIHRoaXMuc3RhdGUuaXNIb3ZlcmluZztcblxuICAgIGlmIChvbkhvdmVyIHx8IGlzRW50ZXJpbmcpIHtcbiAgICAgIGV2ZW50LmZlYXR1cmVzID0gZmVhdHVyZXM7XG5cbiAgICAgIGlmIChvbkhvdmVyKSB7XG4gICAgICAgIG9uSG92ZXIoZXZlbnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc0VudGVyaW5nKSB7XG4gICAgICBvbkV2ZW50LmNhbGwodGhpcywgJ29uTW91c2VFbnRlcicsIGV2ZW50KTtcbiAgICB9XG5cbiAgICBpZiAoaXNFeGl0aW5nKSB7XG4gICAgICBvbkV2ZW50LmNhbGwodGhpcywgJ29uTW91c2VMZWF2ZScsIGV2ZW50KTtcbiAgICB9XG5cbiAgICBpZiAoaXNFbnRlcmluZyB8fCBpc0V4aXRpbmcpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBpc0hvdmVyaW5nOiBpc0hvdmVyaW5nXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gb25Qb2ludGVyQ2xpY2soZXZlbnQpIHtcbiAgdmFyIF90aGlzJHByb3BzMiA9IHRoaXMucHJvcHMsXG4gICAgICBvbkNsaWNrID0gX3RoaXMkcHJvcHMyLm9uQ2xpY2ssXG4gICAgICBvbk5hdGl2ZUNsaWNrID0gX3RoaXMkcHJvcHMyLm9uTmF0aXZlQ2xpY2ssXG4gICAgICBvbkRibENsaWNrID0gX3RoaXMkcHJvcHMyLm9uRGJsQ2xpY2ssXG4gICAgICBkb3VibGVDbGlja1pvb20gPSBfdGhpcyRwcm9wczIuZG91YmxlQ2xpY2tab29tO1xuICB2YXIgY2FsbGJhY2tzID0gW107XG4gIHZhciBpc0RvdWJsZUNsaWNrRW5hYmxlZCA9IG9uRGJsQ2xpY2sgfHwgZG91YmxlQ2xpY2tab29tO1xuXG4gIHN3aXRjaCAoZXZlbnQudHlwZSkge1xuICAgIGNhc2UgJ2FueWNsaWNrJzpcbiAgICAgIGNhbGxiYWNrcy5wdXNoKG9uTmF0aXZlQ2xpY2spO1xuXG4gICAgICBpZiAoIWlzRG91YmxlQ2xpY2tFbmFibGVkKSB7XG4gICAgICAgIGNhbGxiYWNrcy5wdXNoKG9uQ2xpY2spO1xuICAgICAgfVxuXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2NsaWNrJzpcbiAgICAgIGlmIChpc0RvdWJsZUNsaWNrRW5hYmxlZCkge1xuICAgICAgICBjYWxsYmFja3MucHVzaChvbkNsaWNrKTtcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG5cbiAgICBkZWZhdWx0OlxuICB9XG5cbiAgY2FsbGJhY2tzID0gY2FsbGJhY2tzLmZpbHRlcihCb29sZWFuKTtcblxuICBpZiAoY2FsbGJhY2tzLmxlbmd0aCkge1xuICAgIGV2ZW50ID0gbm9ybWFsaXplRXZlbnQuY2FsbCh0aGlzLCBldmVudCk7XG4gICAgZXZlbnQuZmVhdHVyZXMgPSBnZXRGZWF0dXJlcy5jYWxsKHRoaXMsIGV2ZW50LnBvaW50KTtcbiAgICBjYWxsYmFja3MuZm9yRWFjaChmdW5jdGlvbiAoY2IpIHtcbiAgICAgIHJldHVybiBjYihldmVudCk7XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0UmVmSGFuZGxlcyhzdGF0aWNNYXBSZWYpIHtcbiAgcmV0dXJuIHtcbiAgICBnZXRNYXA6IHN0YXRpY01hcFJlZi5jdXJyZW50ICYmIHN0YXRpY01hcFJlZi5jdXJyZW50LmdldE1hcCxcbiAgICBxdWVyeVJlbmRlcmVkRmVhdHVyZXM6IHN0YXRpY01hcFJlZi5jdXJyZW50ICYmIHN0YXRpY01hcFJlZi5jdXJyZW50LnF1ZXJ5UmVuZGVyZWRGZWF0dXJlc1xuICB9O1xufVxuXG52YXIgSW50ZXJhY3RpdmVNYXAgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChwcm9wcywgcmVmKSB7XG4gIHZhciBwYXJlbnRDb250ZXh0ID0gdXNlQ29udGV4dChNYXBDb250ZXh0KTtcbiAgdmFyIGNvbnRyb2xsZXIgPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gcHJvcHMuY29udHJvbGxlciB8fCBuZXcgTWFwQ29udHJvbGxlcigpO1xuICB9LCBbXSk7XG4gIHZhciBldmVudE1hbmFnZXIgPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbmV3IEV2ZW50TWFuYWdlcihudWxsLCB7XG4gICAgICB0b3VjaEFjdGlvbjogcHJvcHMudG91Y2hBY3Rpb24sXG4gICAgICByZWNvZ25pemVyT3B0aW9uczogcHJvcHMuZXZlbnRSZWNvZ25pemVyT3B0aW9uc1xuICAgIH0pO1xuICB9LCBbXSk7XG4gIHZhciBldmVudENhbnZhc1JlZiA9IHVzZVJlZihudWxsKTtcbiAgdmFyIHN0YXRpY01hcFJlZiA9IHVzZVJlZihudWxsKTtcblxuICB2YXIgX3RoaXNSZWYgPSB1c2VSZWYoe1xuICAgIHdpZHRoOiAwLFxuICAgIGhlaWdodDogMCxcbiAgICBzdGF0ZToge1xuICAgICAgaXNIb3ZlcmluZzogZmFsc2UsXG4gICAgICBpc0RyYWdnaW5nOiBmYWxzZVxuICAgIH1cbiAgfSk7XG5cbiAgdmFyIHRoaXNSZWYgPSBfdGhpc1JlZi5jdXJyZW50O1xuICB0aGlzUmVmLnByb3BzID0gcHJvcHM7XG4gIHRoaXNSZWYubWFwID0gc3RhdGljTWFwUmVmLmN1cnJlbnQgJiYgc3RhdGljTWFwUmVmLmN1cnJlbnQuZ2V0TWFwKCk7XG5cbiAgdGhpc1JlZi5zZXRTdGF0ZSA9IGZ1bmN0aW9uIChuZXdTdGF0ZSkge1xuICAgIHRoaXNSZWYuc3RhdGUgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHRoaXNSZWYuc3RhdGUpLCBuZXdTdGF0ZSk7XG4gICAgZXZlbnRDYW52YXNSZWYuY3VycmVudC5zdHlsZS5jdXJzb3IgPSBwcm9wcy5nZXRDdXJzb3IodGhpc1JlZi5zdGF0ZSk7XG4gIH07XG5cbiAgdmFyIGluUmVuZGVyID0gdHJ1ZTtcbiAgdmFyIHZpZXdwb3J0VXBkYXRlUmVxdWVzdGVkO1xuICB2YXIgc3RhdGVVcGRhdGVSZXF1ZXN0ZWQ7XG5cbiAgdmFyIGhhbmRsZVZpZXdwb3J0Q2hhbmdlID0gZnVuY3Rpb24gaGFuZGxlVmlld3BvcnRDaGFuZ2Uodmlld1N0YXRlLCBpbnRlcmFjdGlvblN0YXRlLCBvbGRWaWV3U3RhdGUpIHtcbiAgICBpZiAoaW5SZW5kZXIpIHtcbiAgICAgIHZpZXdwb3J0VXBkYXRlUmVxdWVzdGVkID0gW3ZpZXdTdGF0ZSwgaW50ZXJhY3Rpb25TdGF0ZSwgb2xkVmlld1N0YXRlXTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgX3RoaXNSZWYkcHJvcHMgPSB0aGlzUmVmLnByb3BzLFxuICAgICAgICBvblZpZXdTdGF0ZUNoYW5nZSA9IF90aGlzUmVmJHByb3BzLm9uVmlld1N0YXRlQ2hhbmdlLFxuICAgICAgICBvblZpZXdwb3J0Q2hhbmdlID0gX3RoaXNSZWYkcHJvcHMub25WaWV3cG9ydENoYW5nZTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodmlld1N0YXRlLCAncG9zaXRpb24nLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIFswLCAwLCBnZXRUZXJyYWluRWxldmF0aW9uKHRoaXNSZWYubWFwLCB2aWV3U3RhdGUpXTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChvblZpZXdTdGF0ZUNoYW5nZSkge1xuICAgICAgb25WaWV3U3RhdGVDaGFuZ2Uoe1xuICAgICAgICB2aWV3U3RhdGU6IHZpZXdTdGF0ZSxcbiAgICAgICAgaW50ZXJhY3Rpb25TdGF0ZTogaW50ZXJhY3Rpb25TdGF0ZSxcbiAgICAgICAgb2xkVmlld1N0YXRlOiBvbGRWaWV3U3RhdGVcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChvblZpZXdwb3J0Q2hhbmdlKSB7XG4gICAgICBvblZpZXdwb3J0Q2hhbmdlKHZpZXdTdGF0ZSwgaW50ZXJhY3Rpb25TdGF0ZSwgb2xkVmlld1N0YXRlKTtcbiAgICB9XG4gIH07XG5cbiAgdXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZ2V0UmVmSGFuZGxlcyhzdGF0aWNNYXBSZWYpO1xuICB9LCBbXSk7XG4gIHZhciBjb250ZXh0ID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgcGFyZW50Q29udGV4dCksIHt9LCB7XG4gICAgICBldmVudE1hbmFnZXI6IGV2ZW50TWFuYWdlcixcbiAgICAgIGNvbnRhaW5lcjogcGFyZW50Q29udGV4dC5jb250YWluZXIgfHwgZXZlbnRDYW52YXNSZWYuY3VycmVudFxuICAgIH0pO1xuICB9LCBbcGFyZW50Q29udGV4dCwgZXZlbnRDYW52YXNSZWYuY3VycmVudF0pO1xuICBjb250ZXh0Lm9uVmlld3BvcnRDaGFuZ2UgPSBoYW5kbGVWaWV3cG9ydENoYW5nZTtcbiAgY29udGV4dC52aWV3cG9ydCA9IHBhcmVudENvbnRleHQudmlld3BvcnQgfHwgZ2V0Vmlld3BvcnQodGhpc1JlZik7XG4gIHRoaXNSZWYudmlld3BvcnQgPSBjb250ZXh0LnZpZXdwb3J0O1xuXG4gIHZhciBoYW5kbGVJbnRlcmFjdGlvblN0YXRlQ2hhbmdlID0gZnVuY3Rpb24gaGFuZGxlSW50ZXJhY3Rpb25TdGF0ZUNoYW5nZShpbnRlcmFjdGlvblN0YXRlKSB7XG4gICAgdmFyIF9pbnRlcmFjdGlvblN0YXRlJGlzRCA9IGludGVyYWN0aW9uU3RhdGUuaXNEcmFnZ2luZyxcbiAgICAgICAgaXNEcmFnZ2luZyA9IF9pbnRlcmFjdGlvblN0YXRlJGlzRCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfaW50ZXJhY3Rpb25TdGF0ZSRpc0Q7XG5cbiAgICBpZiAoaXNEcmFnZ2luZyAhPT0gdGhpc1JlZi5zdGF0ZS5pc0RyYWdnaW5nKSB7XG4gICAgICB0aGlzUmVmLnNldFN0YXRlKHtcbiAgICAgICAgaXNEcmFnZ2luZzogaXNEcmFnZ2luZ1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGluUmVuZGVyKSB7XG4gICAgICBzdGF0ZVVwZGF0ZVJlcXVlc3RlZCA9IGludGVyYWN0aW9uU3RhdGU7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIG9uSW50ZXJhY3Rpb25TdGF0ZUNoYW5nZSA9IHRoaXNSZWYucHJvcHMub25JbnRlcmFjdGlvblN0YXRlQ2hhbmdlO1xuXG4gICAgaWYgKG9uSW50ZXJhY3Rpb25TdGF0ZUNoYW5nZSkge1xuICAgICAgb25JbnRlcmFjdGlvblN0YXRlQ2hhbmdlKGludGVyYWN0aW9uU3RhdGUpO1xuICAgIH1cbiAgfTtcblxuICB2YXIgdXBkYXRlQ29udHJvbGxlck9wdHMgPSBmdW5jdGlvbiB1cGRhdGVDb250cm9sbGVyT3B0cygpIHtcbiAgICBpZiAodGhpc1JlZi53aWR0aCAmJiB0aGlzUmVmLmhlaWdodCkge1xuICAgICAgY29udHJvbGxlci5zZXRPcHRpb25zKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCB0aGlzUmVmLnByb3BzKSwgdGhpc1JlZi5wcm9wcy52aWV3U3RhdGUpLCB7fSwge1xuICAgICAgICBpc0ludGVyYWN0aXZlOiBCb29sZWFuKHRoaXNSZWYucHJvcHMub25WaWV3U3RhdGVDaGFuZ2UgfHwgdGhpc1JlZi5wcm9wcy5vblZpZXdwb3J0Q2hhbmdlKSxcbiAgICAgICAgb25WaWV3cG9ydENoYW5nZTogaGFuZGxlVmlld3BvcnRDaGFuZ2UsXG4gICAgICAgIG9uU3RhdGVDaGFuZ2U6IGhhbmRsZUludGVyYWN0aW9uU3RhdGVDaGFuZ2UsXG4gICAgICAgIGV2ZW50TWFuYWdlcjogZXZlbnRNYW5hZ2VyLFxuICAgICAgICB3aWR0aDogdGhpc1JlZi53aWR0aCxcbiAgICAgICAgaGVpZ2h0OiB0aGlzUmVmLmhlaWdodFxuICAgICAgfSkpO1xuICAgIH1cbiAgfTtcblxuICB2YXIgb25SZXNpemUgPSBmdW5jdGlvbiBvblJlc2l6ZShfcmVmMikge1xuICAgIHZhciB3aWR0aCA9IF9yZWYyLndpZHRoLFxuICAgICAgICBoZWlnaHQgPSBfcmVmMi5oZWlnaHQ7XG4gICAgdGhpc1JlZi53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXNSZWYuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgIHVwZGF0ZUNvbnRyb2xsZXJPcHRzKCk7XG4gICAgdGhpc1JlZi5wcm9wcy5vblJlc2l6ZSh7XG4gICAgICB3aWR0aDogd2lkdGgsXG4gICAgICBoZWlnaHQ6IGhlaWdodFxuICAgIH0pO1xuICB9O1xuXG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgZXZlbnRNYW5hZ2VyLnNldEVsZW1lbnQoZXZlbnRDYW52YXNSZWYuY3VycmVudCk7XG4gICAgZXZlbnRNYW5hZ2VyLm9uKHtcbiAgICAgIHBvaW50ZXJkb3duOiBvblBvaW50ZXJEb3duLmJpbmQodGhpc1JlZiksXG4gICAgICBwb2ludGVybW92ZTogb25Qb2ludGVyTW92ZS5iaW5kKHRoaXNSZWYpLFxuICAgICAgcG9pbnRlcnVwOiBvblBvaW50ZXJVcC5iaW5kKHRoaXNSZWYpLFxuICAgICAgcG9pbnRlcmxlYXZlOiBvbkV2ZW50LmJpbmQodGhpc1JlZiwgJ29uTW91c2VPdXQnKSxcbiAgICAgIGNsaWNrOiBvblBvaW50ZXJDbGljay5iaW5kKHRoaXNSZWYpLFxuICAgICAgYW55Y2xpY2s6IG9uUG9pbnRlckNsaWNrLmJpbmQodGhpc1JlZiksXG4gICAgICBkYmxjbGljazogb25FdmVudC5iaW5kKHRoaXNSZWYsICdvbkRibENsaWNrJyksXG4gICAgICB3aGVlbDogb25FdmVudC5iaW5kKHRoaXNSZWYsICdvbldoZWVsJyksXG4gICAgICBjb250ZXh0bWVudTogb25FdmVudC5iaW5kKHRoaXNSZWYsICdvbkNvbnRleHRNZW51JylcbiAgICB9KTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgZXZlbnRNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB9O1xuICB9LCBbXSk7XG4gIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmICh2aWV3cG9ydFVwZGF0ZVJlcXVlc3RlZCkge1xuICAgICAgaGFuZGxlVmlld3BvcnRDaGFuZ2UuYXBwbHkodm9pZCAwLCBfdG9Db25zdW1hYmxlQXJyYXkodmlld3BvcnRVcGRhdGVSZXF1ZXN0ZWQpKTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGVVcGRhdGVSZXF1ZXN0ZWQpIHtcbiAgICAgIGhhbmRsZUludGVyYWN0aW9uU3RhdGVDaGFuZ2Uoc3RhdGVVcGRhdGVSZXF1ZXN0ZWQpO1xuICAgIH1cbiAgfSk7XG4gIHVwZGF0ZUNvbnRyb2xsZXJPcHRzKCk7XG4gIHZhciB3aWR0aCA9IHByb3BzLndpZHRoLFxuICAgICAgaGVpZ2h0ID0gcHJvcHMuaGVpZ2h0LFxuICAgICAgc3R5bGUgPSBwcm9wcy5zdHlsZSxcbiAgICAgIGdldEN1cnNvciA9IHByb3BzLmdldEN1cnNvcjtcbiAgdmFyIGV2ZW50Q2FudmFzU3R5bGUgPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHtcbiAgICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnXG4gICAgfSwgc3R5bGUpLCB7fSwge1xuICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgICBjdXJzb3I6IGdldEN1cnNvcih0aGlzUmVmLnN0YXRlKVxuICAgIH0pO1xuICB9LCBbc3R5bGUsIHdpZHRoLCBoZWlnaHQsIGdldEN1cnNvciwgdGhpc1JlZi5zdGF0ZV0pO1xuXG4gIGlmICghdmlld3BvcnRVcGRhdGVSZXF1ZXN0ZWQgfHwgIXRoaXNSZWYuX2NoaWxkKSB7XG4gICAgdGhpc1JlZi5fY2hpbGQgPSBSZWFjdC5jcmVhdGVFbGVtZW50KE1hcENvbnRleHRQcm92aWRlciwge1xuICAgICAgdmFsdWU6IGNvbnRleHRcbiAgICB9LCBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgIGtleTogXCJldmVudC1jYW52YXNcIixcbiAgICAgIHJlZjogZXZlbnRDYW52YXNSZWYsXG4gICAgICBzdHlsZTogZXZlbnRDYW52YXNTdHlsZVxuICAgIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3RhdGljTWFwLCBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICAgIGhlaWdodDogXCIxMDAlXCIsXG4gICAgICBzdHlsZTogbnVsbCxcbiAgICAgIG9uUmVzaXplOiBvblJlc2l6ZSxcbiAgICAgIHJlZjogc3RhdGljTWFwUmVmXG4gICAgfSkpKSk7XG4gIH1cblxuICBpblJlbmRlciA9IGZhbHNlO1xuICByZXR1cm4gdGhpc1JlZi5fY2hpbGQ7XG59KTtcbkludGVyYWN0aXZlTWFwLnN1cHBvcnRlZCA9IFN0YXRpY01hcC5zdXBwb3J0ZWQ7XG5JbnRlcmFjdGl2ZU1hcC5wcm9wVHlwZXMgPSBwcm9wVHlwZXM7XG5JbnRlcmFjdGl2ZU1hcC5kZWZhdWx0UHJvcHMgPSBkZWZhdWx0UHJvcHM7XG5leHBvcnQgZGVmYXVsdCBJbnRlcmFjdGl2ZU1hcDsiLCJpbXBvcnQgX3NsaWNlZFRvQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXlcIjtcbmltcG9ydCBfZGVmaW5lUHJvcGVydHkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5XCI7XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkge1xuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7XG5cbiAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTtcbiAgICBpZiAoZW51bWVyYWJsZU9ubHkpIHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTtcbiAgICB9KTtcbiAgICBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7XG4gIH1cblxuICByZXR1cm4ga2V5cztcbn1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTtcblxuICAgIGlmIChpICUgMikge1xuICAgICAgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlQ29udGV4dCwgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VTdGF0ZSwgdXNlUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgY2xvbmVFbGVtZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IE1hcENvbnRleHQgZnJvbSAnLi9tYXAtY29udGV4dCc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJy4uL3V0aWxzL2Fzc2VydCc7XG5pbXBvcnQgZGVlcEVxdWFsIGZyb20gJy4uL3V0aWxzL2RlZXAtZXF1YWwnO1xudmFyIHNvdXJjZUNvdW50ZXIgPSAwO1xuXG5mdW5jdGlvbiBjcmVhdGVTb3VyY2UobWFwLCBpZCwgcHJvcHMpIHtcbiAgaWYgKG1hcC5zdHlsZSAmJiBtYXAuc3R5bGUuX2xvYWRlZCkge1xuICAgIHZhciBvcHRpb25zID0gX29iamVjdFNwcmVhZCh7fSwgcHJvcHMpO1xuXG4gICAgZGVsZXRlIG9wdGlvbnMuaWQ7XG4gICAgZGVsZXRlIG9wdGlvbnMuY2hpbGRyZW47XG4gICAgbWFwLmFkZFNvdXJjZShpZCwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIG1hcC5nZXRTb3VyY2UoaWQpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVNvdXJjZShzb3VyY2UsIHByb3BzLCBwcmV2UHJvcHMpIHtcbiAgYXNzZXJ0KHByb3BzLmlkID09PSBwcmV2UHJvcHMuaWQsICdzb3VyY2UgaWQgY2hhbmdlZCcpO1xuICBhc3NlcnQocHJvcHMudHlwZSA9PT0gcHJldlByb3BzLnR5cGUsICdzb3VyY2UgdHlwZSBjaGFuZ2VkJyk7XG4gIHZhciBjaGFuZ2VkS2V5ID0gJyc7XG4gIHZhciBjaGFuZ2VkS2V5Q291bnQgPSAwO1xuXG4gIGZvciAodmFyIGtleSBpbiBwcm9wcykge1xuICAgIGlmIChrZXkgIT09ICdjaGlsZHJlbicgJiYga2V5ICE9PSAnaWQnICYmICFkZWVwRXF1YWwocHJldlByb3BzW2tleV0sIHByb3BzW2tleV0pKSB7XG4gICAgICBjaGFuZ2VkS2V5ID0ga2V5O1xuICAgICAgY2hhbmdlZEtleUNvdW50Kys7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFjaGFuZ2VkS2V5Q291bnQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgdHlwZSA9IHByb3BzLnR5cGU7XG5cbiAgaWYgKHR5cGUgPT09ICdnZW9qc29uJykge1xuICAgIHNvdXJjZS5zZXREYXRhKHByb3BzLmRhdGEpO1xuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdpbWFnZScpIHtcbiAgICBzb3VyY2UudXBkYXRlSW1hZ2Uoe1xuICAgICAgdXJsOiBwcm9wcy51cmwsXG4gICAgICBjb29yZGluYXRlczogcHJvcHMuY29vcmRpbmF0ZXNcbiAgICB9KTtcbiAgfSBlbHNlIGlmICgodHlwZSA9PT0gJ2NhbnZhcycgfHwgdHlwZSA9PT0gJ3ZpZGVvJykgJiYgY2hhbmdlZEtleUNvdW50ID09PSAxICYmIGNoYW5nZWRLZXkgPT09ICdjb29yZGluYXRlcycpIHtcbiAgICBzb3VyY2Uuc2V0Q29vcmRpbmF0ZXMocHJvcHMuY29vcmRpbmF0ZXMpO1xuICB9IGVsc2UgaWYgKHR5cGUgPT09ICd2ZWN0b3InICYmIHNvdXJjZS5zZXRVcmwpIHtcbiAgICBzd2l0Y2ggKGNoYW5nZWRLZXkpIHtcbiAgICAgIGNhc2UgJ3VybCc6XG4gICAgICAgIHNvdXJjZS5zZXRVcmwocHJvcHMudXJsKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ3RpbGVzJzpcbiAgICAgICAgc291cmNlLnNldFRpbGVzKHByb3BzLnRpbGVzKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNvbnNvbGUud2FybihcIlVuYWJsZSB0byB1cGRhdGUgPFNvdXJjZT4gcHJvcDogXCIuY29uY2F0KGNoYW5nZWRLZXkpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBTb3VyY2UocHJvcHMpIHtcbiAgdmFyIGNvbnRleHQgPSB1c2VDb250ZXh0KE1hcENvbnRleHQpO1xuICB2YXIgcHJvcHNSZWYgPSB1c2VSZWYoe1xuICAgIGlkOiBwcm9wcy5pZCxcbiAgICB0eXBlOiBwcm9wcy50eXBlXG4gIH0pO1xuXG4gIHZhciBfdXNlU3RhdGUgPSB1c2VTdGF0ZSgwKSxcbiAgICAgIF91c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUsIDIpLFxuICAgICAgc2V0U3R5bGVMb2FkZWQgPSBfdXNlU3RhdGUyWzFdO1xuXG4gIHZhciBpZCA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBwcm9wcy5pZCB8fCBcImpzeC1zb3VyY2UtXCIuY29uY2F0KHNvdXJjZUNvdW50ZXIrKyk7XG4gIH0sIFtdKTtcbiAgdmFyIG1hcCA9IGNvbnRleHQubWFwO1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmIChtYXApIHtcbiAgICAgIHZhciBmb3JjZVVwZGF0ZSA9IGZ1bmN0aW9uIGZvcmNlVXBkYXRlKCkge1xuICAgICAgICByZXR1cm4gc2V0U3R5bGVMb2FkZWQoZnVuY3Rpb24gKHZlcnNpb24pIHtcbiAgICAgICAgICByZXR1cm4gdmVyc2lvbiArIDE7XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgbWFwLm9uKCdzdHlsZWRhdGEnLCBmb3JjZVVwZGF0ZSk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICBtYXAub2ZmKCdzdHlsZWRhdGEnLCBmb3JjZVVwZGF0ZSk7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKG1hcC5zdHlsZSAmJiBtYXAuc3R5bGUuX2xvYWRlZCAmJiBtYXAuZ2V0U291cmNlKGlkKSkge1xuICAgICAgICAgICAgbWFwLnJlbW92ZVNvdXJjZShpZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfSwgW21hcCwgaWRdKTtcbiAgdmFyIHNvdXJjZSA9IG1hcCAmJiBtYXAuc3R5bGUgJiYgbWFwLmdldFNvdXJjZShpZCk7XG5cbiAgaWYgKHNvdXJjZSkge1xuICAgIHVwZGF0ZVNvdXJjZShzb3VyY2UsIHByb3BzLCBwcm9wc1JlZi5jdXJyZW50KTtcbiAgfSBlbHNlIHtcbiAgICBzb3VyY2UgPSBjcmVhdGVTb3VyY2UobWFwLCBpZCwgcHJvcHMpO1xuICB9XG5cbiAgcHJvcHNSZWYuY3VycmVudCA9IHByb3BzO1xuICByZXR1cm4gc291cmNlICYmIFJlYWN0LkNoaWxkcmVuLm1hcChwcm9wcy5jaGlsZHJlbiwgZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgcmV0dXJuIGNoaWxkICYmIGNsb25lRWxlbWVudChjaGlsZCwge1xuICAgICAgc291cmNlOiBpZFxuICAgIH0pO1xuICB9KSB8fCBudWxsO1xufVxuXG5leHBvcnQgZGVmYXVsdCBTb3VyY2U7IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkge1xuICBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTtcbiAgdmFyIHRhcmdldCA9IHt9O1xuICB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7XG4gIHZhciBrZXksIGk7XG5cbiAgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHtcbiAgICBrZXkgPSBzb3VyY2VLZXlzW2ldO1xuICAgIGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7XG4gICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59IiwiaW1wb3J0IG9iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIi4vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHtcbiAgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307XG4gIHZhciB0YXJnZXQgPSBvYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpO1xuICB2YXIga2V5LCBpO1xuXG4gIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTtcbiAgICAgIGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7XG4gICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlO1xuICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHtcbiAgICBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgICAgIHJldHVybiB0eXBlb2Ygb2JqO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gICAgICByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIF90eXBlb2Yob2JqKTtcbn0iLCJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdHlwZW9mXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkZWVwRXF1YWwoYSwgYikge1xuICBpZiAoYSA9PT0gYikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKCFhIHx8ICFiKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoYSkpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYikgfHwgYS5sZW5ndGggIT09IGIubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIWRlZXBFcXVhbChhW2ldLCBiW2ldKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShiKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChfdHlwZW9mKGEpID09PSAnb2JqZWN0JyAmJiBfdHlwZW9mKGIpID09PSAnb2JqZWN0Jykge1xuICAgIHZhciBhS2V5cyA9IE9iamVjdC5rZXlzKGEpO1xuICAgIHZhciBiS2V5cyA9IE9iamVjdC5rZXlzKGIpO1xuXG4gICAgaWYgKGFLZXlzLmxlbmd0aCAhPT0gYktleXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2kgPSAwLCBfYUtleXMgPSBhS2V5czsgX2kgPCBfYUtleXMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIga2V5ID0gX2FLZXlzW19pXTtcblxuICAgICAgaWYgKCFiLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWRlZXBFcXVhbChhW2tleV0sIGJba2V5XSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufSIsImltcG9ydCBfc2xpY2VkVG9BcnJheSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheVwiO1xuaW1wb3J0IF9kZWZpbmVQcm9wZXJ0eSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHlcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzXCI7XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkge1xuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7XG5cbiAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTtcbiAgICBpZiAoZW51bWVyYWJsZU9ubHkpIHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTtcbiAgICB9KTtcbiAgICBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7XG4gIH1cblxuICByZXR1cm4ga2V5cztcbn1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTtcblxuICAgIGlmIChpICUgMikge1xuICAgICAgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuaW1wb3J0IHsgdXNlQ29udGV4dCwgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VTdGF0ZSwgdXNlUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0ICogYXMgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IE1hcENvbnRleHQgZnJvbSAnLi9tYXAtY29udGV4dCc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJy4uL3V0aWxzL2Fzc2VydCc7XG5pbXBvcnQgZGVlcEVxdWFsIGZyb20gJy4uL3V0aWxzL2RlZXAtZXF1YWwnO1xudmFyIExBWUVSX1RZUEVTID0gWydmaWxsJywgJ2xpbmUnLCAnc3ltYm9sJywgJ2NpcmNsZScsICdmaWxsLWV4dHJ1c2lvbicsICdyYXN0ZXInLCAnYmFja2dyb3VuZCcsICdoZWF0bWFwJywgJ2hpbGxzaGFkZScsICdza3knXTtcbnZhciBwcm9wVHlwZXMgPSB7XG4gIHR5cGU6IFByb3BUeXBlcy5vbmVPZihMQVlFUl9UWVBFUykuaXNSZXF1aXJlZCxcbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNvdXJjZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgYmVmb3JlSWQ6IFByb3BUeXBlcy5zdHJpbmdcbn07XG5cbmZ1bmN0aW9uIGRpZmZMYXllclN0eWxlcyhtYXAsIGlkLCBwcm9wcywgcHJldlByb3BzKSB7XG4gIHZhciBfcHJvcHMkbGF5b3V0ID0gcHJvcHMubGF5b3V0LFxuICAgICAgbGF5b3V0ID0gX3Byb3BzJGxheW91dCA9PT0gdm9pZCAwID8ge30gOiBfcHJvcHMkbGF5b3V0LFxuICAgICAgX3Byb3BzJHBhaW50ID0gcHJvcHMucGFpbnQsXG4gICAgICBwYWludCA9IF9wcm9wcyRwYWludCA9PT0gdm9pZCAwID8ge30gOiBfcHJvcHMkcGFpbnQsXG4gICAgICBmaWx0ZXIgPSBwcm9wcy5maWx0ZXIsXG4gICAgICBtaW56b29tID0gcHJvcHMubWluem9vbSxcbiAgICAgIG1heHpvb20gPSBwcm9wcy5tYXh6b29tLFxuICAgICAgYmVmb3JlSWQgPSBwcm9wcy5iZWZvcmVJZCxcbiAgICAgIG90aGVyUHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMocHJvcHMsIFtcImxheW91dFwiLCBcInBhaW50XCIsIFwiZmlsdGVyXCIsIFwibWluem9vbVwiLCBcIm1heHpvb21cIiwgXCJiZWZvcmVJZFwiXSk7XG5cbiAgaWYgKGJlZm9yZUlkICE9PSBwcmV2UHJvcHMuYmVmb3JlSWQpIHtcbiAgICBtYXAubW92ZUxheWVyKGlkLCBiZWZvcmVJZCk7XG4gIH1cblxuICBpZiAobGF5b3V0ICE9PSBwcmV2UHJvcHMubGF5b3V0KSB7XG4gICAgdmFyIHByZXZMYXlvdXQgPSBwcmV2UHJvcHMubGF5b3V0IHx8IHt9O1xuXG4gICAgZm9yICh2YXIga2V5IGluIGxheW91dCkge1xuICAgICAgaWYgKCFkZWVwRXF1YWwobGF5b3V0W2tleV0sIHByZXZMYXlvdXRba2V5XSkpIHtcbiAgICAgICAgbWFwLnNldExheW91dFByb3BlcnR5KGlkLCBrZXksIGxheW91dFtrZXldKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKHZhciBfa2V5IGluIHByZXZMYXlvdXQpIHtcbiAgICAgIGlmICghbGF5b3V0Lmhhc093blByb3BlcnR5KF9rZXkpKSB7XG4gICAgICAgIG1hcC5zZXRMYXlvdXRQcm9wZXJ0eShpZCwgX2tleSwgdW5kZWZpbmVkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAocGFpbnQgIT09IHByZXZQcm9wcy5wYWludCkge1xuICAgIHZhciBwcmV2UGFpbnQgPSBwcmV2UHJvcHMucGFpbnQgfHwge307XG5cbiAgICBmb3IgKHZhciBfa2V5MiBpbiBwYWludCkge1xuICAgICAgaWYgKCFkZWVwRXF1YWwocGFpbnRbX2tleTJdLCBwcmV2UGFpbnRbX2tleTJdKSkge1xuICAgICAgICBtYXAuc2V0UGFpbnRQcm9wZXJ0eShpZCwgX2tleTIsIHBhaW50W19rZXkyXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2tleTMgaW4gcHJldlBhaW50KSB7XG4gICAgICBpZiAoIXBhaW50Lmhhc093blByb3BlcnR5KF9rZXkzKSkge1xuICAgICAgICBtYXAuc2V0UGFpbnRQcm9wZXJ0eShpZCwgX2tleTMsIHVuZGVmaW5lZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKCFkZWVwRXF1YWwoZmlsdGVyLCBwcmV2UHJvcHMuZmlsdGVyKSkge1xuICAgIG1hcC5zZXRGaWx0ZXIoaWQsIGZpbHRlcik7XG4gIH1cblxuICBpZiAobWluem9vbSAhPT0gcHJldlByb3BzLm1pbnpvb20gfHwgbWF4em9vbSAhPT0gcHJldlByb3BzLm1heHpvb20pIHtcbiAgICBtYXAuc2V0TGF5ZXJab29tUmFuZ2UoaWQsIG1pbnpvb20sIG1heHpvb20pO1xuICB9XG5cbiAgZm9yICh2YXIgX2tleTQgaW4gb3RoZXJQcm9wcykge1xuICAgIGlmICghZGVlcEVxdWFsKG90aGVyUHJvcHNbX2tleTRdLCBwcmV2UHJvcHNbX2tleTRdKSkge1xuICAgICAgbWFwLnNldExheWVyUHJvcGVydHkoaWQsIF9rZXk0LCBvdGhlclByb3BzW19rZXk0XSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUxheWVyKG1hcCwgaWQsIHByb3BzKSB7XG4gIGlmIChtYXAuc3R5bGUgJiYgbWFwLnN0eWxlLl9sb2FkZWQpIHtcbiAgICB2YXIgb3B0aW9ucyA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgcHJvcHMpLCB7fSwge1xuICAgICAgaWQ6IGlkXG4gICAgfSk7XG5cbiAgICBkZWxldGUgb3B0aW9ucy5iZWZvcmVJZDtcbiAgICBtYXAuYWRkTGF5ZXIob3B0aW9ucywgcHJvcHMuYmVmb3JlSWQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUxheWVyKG1hcCwgaWQsIHByb3BzLCBwcmV2UHJvcHMpIHtcbiAgYXNzZXJ0KHByb3BzLmlkID09PSBwcmV2UHJvcHMuaWQsICdsYXllciBpZCBjaGFuZ2VkJyk7XG4gIGFzc2VydChwcm9wcy50eXBlID09PSBwcmV2UHJvcHMudHlwZSwgJ2xheWVyIHR5cGUgY2hhbmdlZCcpO1xuXG4gIHRyeSB7XG4gICAgZGlmZkxheWVyU3R5bGVzKG1hcCwgaWQsIHByb3BzLCBwcmV2UHJvcHMpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUud2FybihlcnJvcik7XG4gIH1cbn1cblxudmFyIGxheWVyQ291bnRlciA9IDA7XG5cbmZ1bmN0aW9uIExheWVyKHByb3BzKSB7XG4gIHZhciBjb250ZXh0ID0gdXNlQ29udGV4dChNYXBDb250ZXh0KTtcbiAgdmFyIHByb3BzUmVmID0gdXNlUmVmKHtcbiAgICBpZDogcHJvcHMuaWQsXG4gICAgdHlwZTogcHJvcHMudHlwZVxuICB9KTtcblxuICB2YXIgX3VzZVN0YXRlID0gdXNlU3RhdGUoMCksXG4gICAgICBfdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlLCAyKSxcbiAgICAgIHNldFN0eWxlTG9hZGVkID0gX3VzZVN0YXRlMlsxXTtcblxuICB2YXIgaWQgPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gcHJvcHMuaWQgfHwgXCJqc3gtbGF5ZXItXCIuY29uY2F0KGxheWVyQ291bnRlcisrKTtcbiAgfSwgW10pO1xuICB2YXIgbWFwID0gY29udGV4dC5tYXA7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKG1hcCkge1xuICAgICAgdmFyIGZvcmNlVXBkYXRlID0gZnVuY3Rpb24gZm9yY2VVcGRhdGUoKSB7XG4gICAgICAgIHJldHVybiBzZXRTdHlsZUxvYWRlZChmdW5jdGlvbiAodmVyc2lvbikge1xuICAgICAgICAgIHJldHVybiB2ZXJzaW9uICsgMTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgICBtYXAub24oJ3N0eWxlZGF0YScsIGZvcmNlVXBkYXRlKTtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIG1hcC5vZmYoJ3N0eWxlZGF0YScsIGZvcmNlVXBkYXRlKTtcblxuICAgICAgICBpZiAobWFwLnN0eWxlICYmIG1hcC5zdHlsZS5fbG9hZGVkKSB7XG4gICAgICAgICAgbWFwLnJlbW92ZUxheWVyKGlkKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9LCBbbWFwXSk7XG4gIHZhciBsYXllciA9IG1hcCAmJiBtYXAuc3R5bGUgJiYgbWFwLmdldExheWVyKGlkKTtcblxuICBpZiAobGF5ZXIpIHtcbiAgICB1cGRhdGVMYXllcihtYXAsIGlkLCBwcm9wcywgcHJvcHNSZWYuY3VycmVudCk7XG4gIH0gZWxzZSB7XG4gICAgY3JlYXRlTGF5ZXIobWFwLCBpZCwgcHJvcHMpO1xuICB9XG5cbiAgcHJvcHNSZWYuY3VycmVudCA9IHByb3BzO1xuICByZXR1cm4gbnVsbDtcbn1cblxuTGF5ZXIucHJvcFR5cGVzID0gcHJvcFR5cGVzO1xuZXhwb3J0IGRlZmF1bHQgTGF5ZXI7IiwiaW1wb3J0IHsgdXNlQ29udGV4dCwgdXNlUmVmLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgKiBhcyBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgTWFwQ29udGV4dCBmcm9tICcuL21hcC1jb250ZXh0JztcbmV4cG9ydCB2YXIgbWFwQ29udHJvbERlZmF1bHRQcm9wcyA9IHtcbiAgY2FwdHVyZVNjcm9sbDogZmFsc2UsXG4gIGNhcHR1cmVEcmFnOiB0cnVlLFxuICBjYXB0dXJlQ2xpY2s6IHRydWUsXG4gIGNhcHR1cmVEb3VibGVDbGljazogdHJ1ZSxcbiAgY2FwdHVyZVBvaW50ZXJNb3ZlOiBmYWxzZVxufTtcbmV4cG9ydCB2YXIgbWFwQ29udHJvbFByb3BUeXBlcyA9IHtcbiAgY2FwdHVyZVNjcm9sbDogUHJvcFR5cGVzLmJvb2wsXG4gIGNhcHR1cmVEcmFnOiBQcm9wVHlwZXMuYm9vbCxcbiAgY2FwdHVyZUNsaWNrOiBQcm9wVHlwZXMuYm9vbCxcbiAgY2FwdHVyZURvdWJsZUNsaWNrOiBQcm9wVHlwZXMuYm9vbCxcbiAgY2FwdHVyZVBvaW50ZXJNb3ZlOiBQcm9wVHlwZXMuYm9vbFxufTtcblxuZnVuY3Rpb24gb25Nb3VudCh0aGlzUmVmKSB7XG4gIHZhciByZWYgPSB0aGlzUmVmLmNvbnRhaW5lclJlZi5jdXJyZW50O1xuICB2YXIgZXZlbnRNYW5hZ2VyID0gdGhpc1JlZi5jb250ZXh0LmV2ZW50TWFuYWdlcjtcblxuICBpZiAoIXJlZiB8fCAhZXZlbnRNYW5hZ2VyKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHZhciBldmVudHMgPSB7XG4gICAgd2hlZWw6IGZ1bmN0aW9uIHdoZWVsKGV2dCkge1xuICAgICAgdmFyIHByb3BzID0gdGhpc1JlZi5wcm9wcztcblxuICAgICAgaWYgKHByb3BzLmNhcHR1cmVTY3JvbGwpIHtcbiAgICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvcHMub25TY3JvbGwpIHtcbiAgICAgICAgcHJvcHMub25TY3JvbGwoZXZ0LCB0aGlzUmVmKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHBhbnN0YXJ0OiBmdW5jdGlvbiBwYW5zdGFydChldnQpIHtcbiAgICAgIHZhciBwcm9wcyA9IHRoaXNSZWYucHJvcHM7XG5cbiAgICAgIGlmIChwcm9wcy5jYXB0dXJlRHJhZykge1xuICAgICAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9wcy5vbkRyYWdTdGFydCkge1xuICAgICAgICBwcm9wcy5vbkRyYWdTdGFydChldnQsIHRoaXNSZWYpO1xuICAgICAgfVxuICAgIH0sXG4gICAgYW55Y2xpY2s6IGZ1bmN0aW9uIGFueWNsaWNrKGV2dCkge1xuICAgICAgdmFyIHByb3BzID0gdGhpc1JlZi5wcm9wcztcblxuICAgICAgaWYgKHByb3BzLmNhcHR1cmVDbGljaykge1xuICAgICAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9wcy5vbkNsaWNrKSB7XG4gICAgICAgIHByb3BzLm9uQ2xpY2soZXZ0LCB0aGlzUmVmKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGNsaWNrOiBmdW5jdGlvbiBjbGljayhldnQpIHtcbiAgICAgIHZhciBwcm9wcyA9IHRoaXNSZWYucHJvcHM7XG5cbiAgICAgIGlmIChwcm9wcy5jYXB0dXJlQ2xpY2spIHtcbiAgICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvcHMub25DbGljaykge1xuICAgICAgICBwcm9wcy5vbkNsaWNrKGV2dCwgdGhpc1JlZik7XG4gICAgICB9XG4gICAgfSxcbiAgICBkYmxjbGljazogZnVuY3Rpb24gZGJsY2xpY2soZXZ0KSB7XG4gICAgICB2YXIgcHJvcHMgPSB0aGlzUmVmLnByb3BzO1xuXG4gICAgICBpZiAocHJvcHMuY2FwdHVyZURvdWJsZUNsaWNrKSB7XG4gICAgICAgIGV2dC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByb3BzLm9uRG91YmxlQ2xpY2spIHtcbiAgICAgICAgcHJvcHMub25Eb3VibGVDbGljayhldnQsIHRoaXNSZWYpO1xuICAgICAgfVxuICAgIH0sXG4gICAgcG9pbnRlcm1vdmU6IGZ1bmN0aW9uIHBvaW50ZXJtb3ZlKGV2dCkge1xuICAgICAgdmFyIHByb3BzID0gdGhpc1JlZi5wcm9wcztcblxuICAgICAgaWYgKHByb3BzLmNhcHR1cmVQb2ludGVyTW92ZSkge1xuICAgICAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9wcy5vblBvaW50ZXJNb3ZlKSB7XG4gICAgICAgIHByb3BzLm9uUG9pbnRlck1vdmUoZXZ0LCB0aGlzUmVmKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIGV2ZW50TWFuYWdlci53YXRjaChldmVudHMsIHJlZik7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgZXZlbnRNYW5hZ2VyLm9mZihldmVudHMpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VNYXBDb250cm9sKCkge1xuICB2YXIgcHJvcHMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuICB2YXIgY29udGV4dCA9IHVzZUNvbnRleHQoTWFwQ29udGV4dCk7XG4gIHZhciBjb250YWluZXJSZWYgPSB1c2VSZWYobnVsbCk7XG5cbiAgdmFyIF90aGlzUmVmID0gdXNlUmVmKHtcbiAgICBwcm9wczogcHJvcHMsXG4gICAgc3RhdGU6IHt9LFxuICAgIGNvbnRleHQ6IGNvbnRleHQsXG4gICAgY29udGFpbmVyUmVmOiBjb250YWluZXJSZWZcbiAgfSk7XG5cbiAgdmFyIHRoaXNSZWYgPSBfdGhpc1JlZi5jdXJyZW50O1xuICB0aGlzUmVmLnByb3BzID0gcHJvcHM7XG4gIHRoaXNSZWYuY29udGV4dCA9IGNvbnRleHQ7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG9uTW91bnQodGhpc1JlZik7XG4gIH0sIFtjb250ZXh0LmV2ZW50TWFuYWdlcl0pO1xuICByZXR1cm4gdGhpc1JlZjtcbn0iLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfY2xhc3NDYWxsQ2hlY2sgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NsYXNzQ2FsbENoZWNrXCI7XG5pbXBvcnQgX2NyZWF0ZUNsYXNzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jcmVhdGVDbGFzc1wiO1xuaW1wb3J0IF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2Fzc2VydFRoaXNJbml0aWFsaXplZFwiO1xuaW1wb3J0IF9pbmhlcml0cyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNcIjtcbmltcG9ydCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vcG9zc2libGVDb25zdHJ1Y3RvclJldHVyblwiO1xuaW1wb3J0IF9nZXRQcm90b3R5cGVPZiBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZ2V0UHJvdG90eXBlT2ZcIjtcbmltcG9ydCBfZGVmaW5lUHJvcGVydHkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5XCI7XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7XG4gIHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpO1xuXG4gIHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHtcbiAgICB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksXG4gICAgICAgIHJlc3VsdDtcblxuICAgIGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7XG4gICAgICB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yO1xuXG4gICAgICByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH1cblxuICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkge1xuICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7XG4gIGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7XG4gIGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7XG5cbiAgdHJ5IHtcbiAgICBEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFJlZmxlY3QuY29uc3RydWN0KERhdGUsIFtdLCBmdW5jdGlvbiAoKSB7fSkpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFB1cmVDb21wb25lbnQsIGNyZWF0ZVJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB1c2VNYXBDb250cm9sLCB7IG1hcENvbnRyb2xEZWZhdWx0UHJvcHMsIG1hcENvbnRyb2xQcm9wVHlwZXMgfSBmcm9tICcuL3VzZS1tYXAtY29udHJvbCc7XG5cbmZ1bmN0aW9uIENvbnRyb2wocHJvcHMpIHtcbiAgdmFyIGluc3RhbmNlID0gcHJvcHMuaW5zdGFuY2U7XG5cbiAgdmFyIF91c2VNYXBDb250cm9sID0gdXNlTWFwQ29udHJvbChwcm9wcyksXG4gICAgICBjb250ZXh0ID0gX3VzZU1hcENvbnRyb2wuY29udGV4dCxcbiAgICAgIGNvbnRhaW5lclJlZiA9IF91c2VNYXBDb250cm9sLmNvbnRhaW5lclJlZjtcblxuICBpbnN0YW5jZS5fY29udGV4dCA9IGNvbnRleHQ7XG4gIGluc3RhbmNlLl9jb250YWluZXJSZWYgPSBjb250YWluZXJSZWY7XG4gIHJldHVybiBpbnN0YW5jZS5fcmVuZGVyKCk7XG59XG5cbnZhciBCYXNlQ29udHJvbCA9IGZ1bmN0aW9uIChfUHVyZUNvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoQmFzZUNvbnRyb2wsIF9QdXJlQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEJhc2VDb250cm9sKTtcblxuICBmdW5jdGlvbiBCYXNlQ29udHJvbCgpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQmFzZUNvbnRyb2wpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwuYXBwbHkoX3N1cGVyLCBbdGhpc10uY29uY2F0KGFyZ3MpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJfY29udGV4dFwiLCB7fSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiX2NvbnRhaW5lclJlZlwiLCBjcmVhdGVSZWYoKSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiX29uU2Nyb2xsXCIsIGZ1bmN0aW9uIChldnQpIHt9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJfb25EcmFnU3RhcnRcIiwgZnVuY3Rpb24gKGV2dCkge30pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIl9vbkRibENsaWNrXCIsIGZ1bmN0aW9uIChldnQpIHt9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJfb25DbGlja1wiLCBmdW5jdGlvbiAoZXZ0KSB7fSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiX29uUG9pbnRlck1vdmVcIiwgZnVuY3Rpb24gKGV2dCkge30pO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEJhc2VDb250cm9sLCBbe1xuICAgIGtleTogXCJfcmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9yZW5kZXIoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ19yZW5kZXIoKSBub3QgaW1wbGVtZW50ZWQnKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KENvbnRyb2wsIF9leHRlbmRzKHtcbiAgICAgICAgaW5zdGFuY2U6IHRoaXNcbiAgICAgIH0sIHRoaXMucHJvcHMsIHtcbiAgICAgICAgb25TY3JvbGw6IHRoaXMuX29uU2Nyb2xsLFxuICAgICAgICBvbkRyYWdTdGFydDogdGhpcy5fb25EcmFnU3RhcnQsXG4gICAgICAgIG9uRGJsQ2xpY2s6IHRoaXMuX29uRGJsQ2xpY2ssXG4gICAgICAgIG9uQ2xpY2s6IHRoaXMuX29uQ2xpY2ssXG4gICAgICAgIG9uUG9pbnRlck1vdmU6IHRoaXMuX29uUG9pbnRlck1vdmVcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gQmFzZUNvbnRyb2w7XG59KFB1cmVDb21wb25lbnQpO1xuXG5fZGVmaW5lUHJvcGVydHkoQmFzZUNvbnRyb2wsIFwicHJvcFR5cGVzXCIsIG1hcENvbnRyb2xQcm9wVHlwZXMpO1xuXG5fZGVmaW5lUHJvcGVydHkoQmFzZUNvbnRyb2wsIFwiZGVmYXVsdFByb3BzXCIsIG1hcENvbnRyb2xEZWZhdWx0UHJvcHMpO1xuXG5leHBvcnQgeyBCYXNlQ29udHJvbCBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IF9kZWZpbmVQcm9wZXJ0eSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHlcIjtcbmltcG9ydCBfc2xpY2VkVG9BcnJheSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheVwiO1xuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHtcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXG4gIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7XG4gICAgaWYgKGVudW1lcmFibGVPbmx5KSBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkge1xuICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7XG4gICAgfSk7XG4gICAga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpO1xuICB9XG5cbiAgcmV0dXJuIGtleXM7XG59XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307XG5cbiAgICBpZiAoaSAlIDIpIHtcbiAgICAgIG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbmltcG9ydCAqIGFzIFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdXNlTWFwQ29udHJvbCwgeyBtYXBDb250cm9sRGVmYXVsdFByb3BzLCBtYXBDb250cm9sUHJvcFR5cGVzIH0gZnJvbSAnLi91c2UtbWFwLWNvbnRyb2wnO1xuZXhwb3J0IHZhciBkcmFnZ2FibGVDb250cm9sUHJvcFR5cGVzID0gT2JqZWN0LmFzc2lnbih7fSwgbWFwQ29udHJvbFByb3BUeXBlcywge1xuICBkcmFnZ2FibGU6IFByb3BUeXBlcy5ib29sLFxuICBvbkRyYWc6IFByb3BUeXBlcy5mdW5jLFxuICBvbkRyYWdFbmQ6IFByb3BUeXBlcy5mdW5jLFxuICBvbkRyYWdTdGFydDogUHJvcFR5cGVzLmZ1bmMsXG4gIG9mZnNldExlZnQ6IFByb3BUeXBlcy5udW1iZXIsXG4gIG9mZnNldFRvcDogUHJvcFR5cGVzLm51bWJlclxufSk7XG5leHBvcnQgdmFyIGRyYWdnYWJsZUNvbnRyb2xEZWZhdWx0UHJvcHMgPSBPYmplY3QuYXNzaWduKHt9LCBtYXBDb250cm9sRGVmYXVsdFByb3BzLCB7XG4gIGRyYWdnYWJsZTogZmFsc2UsXG4gIG9mZnNldExlZnQ6IDAsXG4gIG9mZnNldFRvcDogMFxufSk7XG5cbmZ1bmN0aW9uIGdldERyYWdFdmVudFBvc2l0aW9uKGV2ZW50KSB7XG4gIHZhciBfZXZlbnQkb2Zmc2V0Q2VudGVyID0gZXZlbnQub2Zmc2V0Q2VudGVyLFxuICAgICAgeCA9IF9ldmVudCRvZmZzZXRDZW50ZXIueCxcbiAgICAgIHkgPSBfZXZlbnQkb2Zmc2V0Q2VudGVyLnk7XG4gIHJldHVybiBbeCwgeV07XG59XG5cbmZ1bmN0aW9uIGdldERyYWdFdmVudE9mZnNldChldmVudCwgY29udGFpbmVyKSB7XG4gIHZhciBfZXZlbnQkY2VudGVyID0gZXZlbnQuY2VudGVyLFxuICAgICAgeCA9IF9ldmVudCRjZW50ZXIueCxcbiAgICAgIHkgPSBfZXZlbnQkY2VudGVyLnk7XG5cbiAgaWYgKGNvbnRhaW5lcikge1xuICAgIHZhciByZWN0ID0gY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHJldHVybiBbcmVjdC5sZWZ0IC0geCwgcmVjdC50b3AgLSB5XTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBnZXREcmFnTG5nTGF0KGRyYWdQb3MsIGRyYWdPZmZzZXQsIHByb3BzLCBjb250ZXh0KSB7XG4gIHZhciB4ID0gZHJhZ1Bvc1swXSArIGRyYWdPZmZzZXRbMF0gLSBwcm9wcy5vZmZzZXRMZWZ0O1xuICB2YXIgeSA9IGRyYWdQb3NbMV0gKyBkcmFnT2Zmc2V0WzFdIC0gcHJvcHMub2Zmc2V0VG9wO1xuICByZXR1cm4gY29udGV4dC52aWV3cG9ydC51bnByb2plY3QoW3gsIHldKTtcbn1cblxuZnVuY3Rpb24gb25EcmFnU3RhcnQoZXZlbnQsIF9yZWYpIHtcbiAgdmFyIHByb3BzID0gX3JlZi5wcm9wcyxcbiAgICAgIGNhbGxiYWNrcyA9IF9yZWYuY2FsbGJhY2tzLFxuICAgICAgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgY29udGV4dCA9IF9yZWYuY29udGV4dCxcbiAgICAgIGNvbnRhaW5lclJlZiA9IF9yZWYuY29udGFpbmVyUmVmO1xuICB2YXIgZHJhZ2dhYmxlID0gcHJvcHMuZHJhZ2dhYmxlO1xuXG4gIGlmICghZHJhZ2dhYmxlKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIHZhciBkcmFnUG9zID0gZ2V0RHJhZ0V2ZW50UG9zaXRpb24oZXZlbnQpO1xuICB2YXIgZHJhZ09mZnNldCA9IGdldERyYWdFdmVudE9mZnNldChldmVudCwgY29udGFpbmVyUmVmLmN1cnJlbnQpO1xuICBzdGF0ZS5zZXREcmFnUG9zKGRyYWdQb3MpO1xuICBzdGF0ZS5zZXREcmFnT2Zmc2V0KGRyYWdPZmZzZXQpO1xuXG4gIGlmIChjYWxsYmFja3Mub25EcmFnU3RhcnQgJiYgZHJhZ09mZnNldCkge1xuICAgIHZhciBjYWxsYmFja0V2ZW50ID0gT2JqZWN0LmFzc2lnbih7fSwgZXZlbnQpO1xuICAgIGNhbGxiYWNrRXZlbnQubG5nTGF0ID0gZ2V0RHJhZ0xuZ0xhdChkcmFnUG9zLCBkcmFnT2Zmc2V0LCBwcm9wcywgY29udGV4dCk7XG4gICAgY2FsbGJhY2tzLm9uRHJhZ1N0YXJ0KGNhbGxiYWNrRXZlbnQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIG9uRHJhZyhldmVudCwgX3JlZjIpIHtcbiAgdmFyIHByb3BzID0gX3JlZjIucHJvcHMsXG4gICAgICBjYWxsYmFja3MgPSBfcmVmMi5jYWxsYmFja3MsXG4gICAgICBzdGF0ZSA9IF9yZWYyLnN0YXRlLFxuICAgICAgY29udGV4dCA9IF9yZWYyLmNvbnRleHQ7XG4gIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICB2YXIgZHJhZ1BvcyA9IGdldERyYWdFdmVudFBvc2l0aW9uKGV2ZW50KTtcbiAgc3RhdGUuc2V0RHJhZ1BvcyhkcmFnUG9zKTtcbiAgdmFyIGRyYWdPZmZzZXQgPSBzdGF0ZS5kcmFnT2Zmc2V0O1xuXG4gIGlmIChjYWxsYmFja3Mub25EcmFnICYmIGRyYWdPZmZzZXQpIHtcbiAgICB2YXIgY2FsbGJhY2tFdmVudCA9IE9iamVjdC5hc3NpZ24oe30sIGV2ZW50KTtcbiAgICBjYWxsYmFja0V2ZW50LmxuZ0xhdCA9IGdldERyYWdMbmdMYXQoZHJhZ1BvcywgZHJhZ09mZnNldCwgcHJvcHMsIGNvbnRleHQpO1xuICAgIGNhbGxiYWNrcy5vbkRyYWcoY2FsbGJhY2tFdmVudCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gb25EcmFnRW5kKGV2ZW50LCBfcmVmMykge1xuICB2YXIgcHJvcHMgPSBfcmVmMy5wcm9wcyxcbiAgICAgIGNhbGxiYWNrcyA9IF9yZWYzLmNhbGxiYWNrcyxcbiAgICAgIHN0YXRlID0gX3JlZjMuc3RhdGUsXG4gICAgICBjb250ZXh0ID0gX3JlZjMuY29udGV4dDtcbiAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIHZhciBkcmFnUG9zID0gc3RhdGUuZHJhZ1BvcyxcbiAgICAgIGRyYWdPZmZzZXQgPSBzdGF0ZS5kcmFnT2Zmc2V0O1xuICBzdGF0ZS5zZXREcmFnUG9zKG51bGwpO1xuICBzdGF0ZS5zZXREcmFnT2Zmc2V0KG51bGwpO1xuXG4gIGlmIChjYWxsYmFja3Mub25EcmFnRW5kICYmIGRyYWdQb3MgJiYgZHJhZ09mZnNldCkge1xuICAgIHZhciBjYWxsYmFja0V2ZW50ID0gT2JqZWN0LmFzc2lnbih7fSwgZXZlbnQpO1xuICAgIGNhbGxiYWNrRXZlbnQubG5nTGF0ID0gZ2V0RHJhZ0xuZ0xhdChkcmFnUG9zLCBkcmFnT2Zmc2V0LCBwcm9wcywgY29udGV4dCk7XG4gICAgY2FsbGJhY2tzLm9uRHJhZ0VuZChjYWxsYmFja0V2ZW50KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBvbkRyYWdDYW5jZWwoZXZlbnQsIF9yZWY0KSB7XG4gIHZhciBzdGF0ZSA9IF9yZWY0LnN0YXRlO1xuICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgc3RhdGUuc2V0RHJhZ1BvcyhudWxsKTtcbiAgc3RhdGUuc2V0RHJhZ09mZnNldChudWxsKTtcbn1cblxuZnVuY3Rpb24gcmVnaXN0ZXJFdmVudHModGhpc1JlZikge1xuICB2YXIgZXZlbnRNYW5hZ2VyID0gdGhpc1JlZi5jb250ZXh0LmV2ZW50TWFuYWdlcjtcblxuICBpZiAoIWV2ZW50TWFuYWdlciB8fCAhdGhpc1JlZi5zdGF0ZS5kcmFnUG9zKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHZhciBldmVudHMgPSB7XG4gICAgcGFubW92ZTogZnVuY3Rpb24gcGFubW92ZShldnQpIHtcbiAgICAgIHJldHVybiBvbkRyYWcoZXZ0LCB0aGlzUmVmKTtcbiAgICB9LFxuICAgIHBhbmVuZDogZnVuY3Rpb24gcGFuZW5kKGV2dCkge1xuICAgICAgcmV0dXJuIG9uRHJhZ0VuZChldnQsIHRoaXNSZWYpO1xuICAgIH0sXG4gICAgcGFuY2FuY2VsOiBmdW5jdGlvbiBwYW5jYW5jZWwoZXZ0KSB7XG4gICAgICByZXR1cm4gb25EcmFnQ2FuY2VsKGV2dCwgdGhpc1JlZik7XG4gICAgfVxuICB9O1xuICBldmVudE1hbmFnZXIud2F0Y2goZXZlbnRzKTtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBldmVudE1hbmFnZXIub2ZmKGV2ZW50cyk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZURyYWdnYWJsZUNvbnRyb2wocHJvcHMpIHtcbiAgdmFyIF91c2VTdGF0ZSA9IHVzZVN0YXRlKG51bGwpLFxuICAgICAgX3VzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZSwgMiksXG4gICAgICBkcmFnUG9zID0gX3VzZVN0YXRlMlswXSxcbiAgICAgIHNldERyYWdQb3MgPSBfdXNlU3RhdGUyWzFdO1xuXG4gIHZhciBfdXNlU3RhdGUzID0gdXNlU3RhdGUobnVsbCksXG4gICAgICBfdXNlU3RhdGU0ID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlMywgMiksXG4gICAgICBkcmFnT2Zmc2V0ID0gX3VzZVN0YXRlNFswXSxcbiAgICAgIHNldERyYWdPZmZzZXQgPSBfdXNlU3RhdGU0WzFdO1xuXG4gIHZhciB0aGlzUmVmID0gdXNlTWFwQ29udHJvbChfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHByb3BzKSwge30sIHtcbiAgICBvbkRyYWdTdGFydDogb25EcmFnU3RhcnRcbiAgfSkpO1xuICB0aGlzUmVmLmNhbGxiYWNrcyA9IHByb3BzO1xuICB0aGlzUmVmLnN0YXRlLmRyYWdQb3MgPSBkcmFnUG9zO1xuICB0aGlzUmVmLnN0YXRlLnNldERyYWdQb3MgPSBzZXREcmFnUG9zO1xuICB0aGlzUmVmLnN0YXRlLmRyYWdPZmZzZXQgPSBkcmFnT2Zmc2V0O1xuICB0aGlzUmVmLnN0YXRlLnNldERyYWdPZmZzZXQgPSBzZXREcmFnT2Zmc2V0O1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiByZWdpc3RlckV2ZW50cyh0aGlzUmVmKTtcbiAgfSwgW3RoaXNSZWYuY29udGV4dC5ldmVudE1hbmFnZXIsIEJvb2xlYW4oZHJhZ1BvcyldKTtcbiAgcmV0dXJuIHRoaXNSZWY7XG59IiwidmFyIHBpeGVsUmF0aW8gPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyB8fCAxO1xuZXhwb3J0IHZhciBjcmlzcFBpeGVsID0gZnVuY3Rpb24gY3Jpc3BQaXhlbChzaXplKSB7XG4gIHJldHVybiBNYXRoLnJvdW5kKHNpemUgKiBwaXhlbFJhdGlvKSAvIHBpeGVsUmF0aW87XG59O1xuZXhwb3J0IHZhciBjcmlzcFBlcmNlbnRhZ2UgPSBmdW5jdGlvbiBjcmlzcFBlcmNlbnRhZ2UoZWwsIHBlcmNlbnRhZ2UpIHtcbiAgdmFyIGRpbWVuc2lvbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogJ3gnO1xuXG4gIGlmIChlbCA9PT0gbnVsbCkge1xuICAgIHJldHVybiBwZXJjZW50YWdlO1xuICB9XG5cbiAgdmFyIG9yaWdTaXplID0gZGltZW5zaW9uID09PSAneCcgPyBlbC5vZmZzZXRXaWR0aCA6IGVsLm9mZnNldEhlaWdodDtcbiAgcmV0dXJuIGNyaXNwUGl4ZWwocGVyY2VudGFnZSAvIDEwMCAqIG9yaWdTaXplKSAvIG9yaWdTaXplICogMTAwO1xufTsiLCJpbXBvcnQgX3NsaWNlZFRvQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXlcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdXNlRHJhZ2dhYmxlQ29udHJvbCwgeyBkcmFnZ2FibGVDb250cm9sRGVmYXVsdFByb3BzLCBkcmFnZ2FibGVDb250cm9sUHJvcFR5cGVzIH0gZnJvbSAnLi9kcmFnZ2FibGUtY29udHJvbCc7XG5pbXBvcnQgeyBjcmlzcFBpeGVsIH0gZnJvbSAnLi4vdXRpbHMvY3Jpc3AtcGl4ZWwnO1xuaW1wb3J0IHsgZ2V0VGVycmFpbkVsZXZhdGlvbiB9IGZyb20gJy4uL3V0aWxzL3RlcnJhaW4nO1xudmFyIGRlZmF1bHRQcm9wcyA9IE9iamVjdC5hc3NpZ24oe30sIGRyYWdnYWJsZUNvbnRyb2xEZWZhdWx0UHJvcHMsIHtcbiAgY2xhc3NOYW1lOiAnJ1xufSk7XG5cbmZ1bmN0aW9uIGdldFBvc2l0aW9uKF9yZWYpIHtcbiAgdmFyIHByb3BzID0gX3JlZi5wcm9wcyxcbiAgICAgIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIGNvbnRleHQgPSBfcmVmLmNvbnRleHQ7XG4gIHZhciBsb25naXR1ZGUgPSBwcm9wcy5sb25naXR1ZGUsXG4gICAgICBsYXRpdHVkZSA9IHByb3BzLmxhdGl0dWRlLFxuICAgICAgb2Zmc2V0TGVmdCA9IHByb3BzLm9mZnNldExlZnQsXG4gICAgICBvZmZzZXRUb3AgPSBwcm9wcy5vZmZzZXRUb3A7XG4gIHZhciBkcmFnUG9zID0gc3RhdGUuZHJhZ1BvcyxcbiAgICAgIGRyYWdPZmZzZXQgPSBzdGF0ZS5kcmFnT2Zmc2V0O1xuICB2YXIgdmlld3BvcnQgPSBjb250ZXh0LnZpZXdwb3J0LFxuICAgICAgbWFwID0gY29udGV4dC5tYXA7XG5cbiAgaWYgKGRyYWdQb3MgJiYgZHJhZ09mZnNldCkge1xuICAgIHJldHVybiBbZHJhZ1Bvc1swXSArIGRyYWdPZmZzZXRbMF0sIGRyYWdQb3NbMV0gKyBkcmFnT2Zmc2V0WzFdXTtcbiAgfVxuXG4gIHZhciBhbHRpdHVkZSA9IGdldFRlcnJhaW5FbGV2YXRpb24obWFwLCB7XG4gICAgbG9uZ2l0dWRlOiBsb25naXR1ZGUsXG4gICAgbGF0aXR1ZGU6IGxhdGl0dWRlXG4gIH0pO1xuXG4gIHZhciBfdmlld3BvcnQkcHJvamVjdCA9IHZpZXdwb3J0LnByb2plY3QoW2xvbmdpdHVkZSwgbGF0aXR1ZGUsIGFsdGl0dWRlXSksXG4gICAgICBfdmlld3BvcnQkcHJvamVjdDIgPSBfc2xpY2VkVG9BcnJheShfdmlld3BvcnQkcHJvamVjdCwgMiksXG4gICAgICB4ID0gX3ZpZXdwb3J0JHByb2plY3QyWzBdLFxuICAgICAgeSA9IF92aWV3cG9ydCRwcm9qZWN0MlsxXTtcblxuICB4ICs9IG9mZnNldExlZnQ7XG4gIHkgKz0gb2Zmc2V0VG9wO1xuICByZXR1cm4gW3gsIHldO1xufVxuXG5mdW5jdGlvbiBNYXJrZXIocHJvcHMpIHtcbiAgdmFyIHRoaXNSZWYgPSB1c2VEcmFnZ2FibGVDb250cm9sKHByb3BzKTtcbiAgdmFyIHN0YXRlID0gdGhpc1JlZi5zdGF0ZSxcbiAgICAgIGNvbnRhaW5lclJlZiA9IHRoaXNSZWYuY29udGFpbmVyUmVmO1xuICB2YXIgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSxcbiAgICAgIGRyYWdnYWJsZSA9IHByb3BzLmRyYWdnYWJsZTtcbiAgdmFyIGRyYWdQb3MgPSBzdGF0ZS5kcmFnUG9zO1xuXG4gIHZhciBfZ2V0UG9zaXRpb24gPSBnZXRQb3NpdGlvbih0aGlzUmVmKSxcbiAgICAgIF9nZXRQb3NpdGlvbjIgPSBfc2xpY2VkVG9BcnJheShfZ2V0UG9zaXRpb24sIDIpLFxuICAgICAgeCA9IF9nZXRQb3NpdGlvbjJbMF0sXG4gICAgICB5ID0gX2dldFBvc2l0aW9uMlsxXTtcblxuICB2YXIgdHJhbnNmb3JtID0gXCJ0cmFuc2xhdGUoXCIuY29uY2F0KGNyaXNwUGl4ZWwoeCksIFwicHgsIFwiKS5jb25jYXQoY3Jpc3BQaXhlbCh5KSwgXCJweClcIik7XG4gIHZhciBjdXJzb3IgPSBkcmFnZ2FibGUgPyBkcmFnUG9zID8gJ2dyYWJiaW5nJyA6ICdncmFiJyA6ICdhdXRvJztcbiAgdmFyIGNvbnRyb2wgPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgY29udGFpbmVyU3R5bGUgPSB7XG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIGxlZnQ6IDAsXG4gICAgICB0b3A6IDAsXG4gICAgICB0cmFuc2Zvcm06IHRyYW5zZm9ybSxcbiAgICAgIGN1cnNvcjogY3Vyc29yXG4gICAgfTtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICBjbGFzc05hbWU6IFwibWFwYm94Z2wtbWFya2VyIFwiLmNvbmNhdChjbGFzc05hbWUpLFxuICAgICAgcmVmOiB0aGlzUmVmLmNvbnRhaW5lclJlZixcbiAgICAgIHN0eWxlOiBjb250YWluZXJTdHlsZVxuICAgIH0sIGNoaWxkcmVuKTtcbiAgfSwgW2NoaWxkcmVuLCBjbGFzc05hbWVdKTtcbiAgdmFyIGNvbnRhaW5lciA9IGNvbnRhaW5lclJlZi5jdXJyZW50O1xuXG4gIGlmIChjb250YWluZXIpIHtcbiAgICBjb250YWluZXIuc3R5bGUudHJhbnNmb3JtID0gdHJhbnNmb3JtO1xuICAgIGNvbnRhaW5lci5zdHlsZS5jdXJzb3IgPSBjdXJzb3I7XG4gIH1cblxuICByZXR1cm4gY29udHJvbDtcbn1cblxuTWFya2VyLmRlZmF1bHRQcm9wcyA9IGRlZmF1bHRQcm9wcztcbmV4cG9ydCBkZWZhdWx0IFJlYWN0Lm1lbW8oTWFya2VyKTsiLCJleHBvcnQgdmFyIEFOQ0hPUl9QT1NJVElPTiA9IHtcbiAgdG9wOiB7XG4gICAgeDogMC41LFxuICAgIHk6IDBcbiAgfSxcbiAgJ3RvcC1sZWZ0Jzoge1xuICAgIHg6IDAsXG4gICAgeTogMFxuICB9LFxuICAndG9wLXJpZ2h0Jzoge1xuICAgIHg6IDEsXG4gICAgeTogMFxuICB9LFxuICBib3R0b206IHtcbiAgICB4OiAwLjUsXG4gICAgeTogMVxuICB9LFxuICAnYm90dG9tLWxlZnQnOiB7XG4gICAgeDogMCxcbiAgICB5OiAxXG4gIH0sXG4gICdib3R0b20tcmlnaHQnOiB7XG4gICAgeDogMSxcbiAgICB5OiAxXG4gIH0sXG4gIGxlZnQ6IHtcbiAgICB4OiAwLFxuICAgIHk6IDAuNVxuICB9LFxuICByaWdodDoge1xuICAgIHg6IDEsXG4gICAgeTogMC41XG4gIH1cbn07XG52YXIgQU5DSE9SX1RZUEVTID0gT2JqZWN0LmtleXMoQU5DSE9SX1BPU0lUSU9OKTtcbmV4cG9ydCBmdW5jdGlvbiBnZXREeW5hbWljUG9zaXRpb24oX3JlZikge1xuICB2YXIgeCA9IF9yZWYueCxcbiAgICAgIHkgPSBfcmVmLnksXG4gICAgICB3aWR0aCA9IF9yZWYud2lkdGgsXG4gICAgICBoZWlnaHQgPSBfcmVmLmhlaWdodCxcbiAgICAgIHNlbGZXaWR0aCA9IF9yZWYuc2VsZldpZHRoLFxuICAgICAgc2VsZkhlaWdodCA9IF9yZWYuc2VsZkhlaWdodCxcbiAgICAgIGFuY2hvciA9IF9yZWYuYW5jaG9yLFxuICAgICAgX3JlZiRwYWRkaW5nID0gX3JlZi5wYWRkaW5nLFxuICAgICAgcGFkZGluZyA9IF9yZWYkcGFkZGluZyA9PT0gdm9pZCAwID8gMCA6IF9yZWYkcGFkZGluZztcbiAgdmFyIF9BTkNIT1JfUE9TSVRJT04kYW5jaCA9IEFOQ0hPUl9QT1NJVElPTlthbmNob3JdLFxuICAgICAgYW5jaG9yWCA9IF9BTkNIT1JfUE9TSVRJT04kYW5jaC54LFxuICAgICAgYW5jaG9yWSA9IF9BTkNIT1JfUE9TSVRJT04kYW5jaC55O1xuICB2YXIgdG9wID0geSAtIGFuY2hvclkgKiBzZWxmSGVpZ2h0O1xuICB2YXIgYm90dG9tID0gdG9wICsgc2VsZkhlaWdodDtcbiAgdmFyIGN1dG9mZlkgPSBNYXRoLm1heCgwLCBwYWRkaW5nIC0gdG9wKSArIE1hdGgubWF4KDAsIGJvdHRvbSAtIGhlaWdodCArIHBhZGRpbmcpO1xuXG4gIGlmIChjdXRvZmZZID4gMCkge1xuICAgIHZhciBiZXN0QW5jaG9yWSA9IGFuY2hvclk7XG4gICAgdmFyIG1pbkN1dG9mZiA9IGN1dG9mZlk7XG5cbiAgICBmb3IgKGFuY2hvclkgPSAwOyBhbmNob3JZIDw9IDE7IGFuY2hvclkgKz0gMC41KSB7XG4gICAgICB0b3AgPSB5IC0gYW5jaG9yWSAqIHNlbGZIZWlnaHQ7XG4gICAgICBib3R0b20gPSB0b3AgKyBzZWxmSGVpZ2h0O1xuICAgICAgY3V0b2ZmWSA9IE1hdGgubWF4KDAsIHBhZGRpbmcgLSB0b3ApICsgTWF0aC5tYXgoMCwgYm90dG9tIC0gaGVpZ2h0ICsgcGFkZGluZyk7XG5cbiAgICAgIGlmIChjdXRvZmZZIDwgbWluQ3V0b2ZmKSB7XG4gICAgICAgIG1pbkN1dG9mZiA9IGN1dG9mZlk7XG4gICAgICAgIGJlc3RBbmNob3JZID0gYW5jaG9yWTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBhbmNob3JZID0gYmVzdEFuY2hvclk7XG4gIH1cblxuICB2YXIgeFN0ZXAgPSAwLjU7XG5cbiAgaWYgKGFuY2hvclkgPT09IDAuNSkge1xuICAgIGFuY2hvclggPSBNYXRoLmZsb29yKGFuY2hvclgpO1xuICAgIHhTdGVwID0gMTtcbiAgfVxuXG4gIHZhciBsZWZ0ID0geCAtIGFuY2hvclggKiBzZWxmV2lkdGg7XG4gIHZhciByaWdodCA9IGxlZnQgKyBzZWxmV2lkdGg7XG4gIHZhciBjdXRvZmZYID0gTWF0aC5tYXgoMCwgcGFkZGluZyAtIGxlZnQpICsgTWF0aC5tYXgoMCwgcmlnaHQgLSB3aWR0aCArIHBhZGRpbmcpO1xuXG4gIGlmIChjdXRvZmZYID4gMCkge1xuICAgIHZhciBiZXN0QW5jaG9yWCA9IGFuY2hvclg7XG4gICAgdmFyIF9taW5DdXRvZmYgPSBjdXRvZmZYO1xuXG4gICAgZm9yIChhbmNob3JYID0gMDsgYW5jaG9yWCA8PSAxOyBhbmNob3JYICs9IHhTdGVwKSB7XG4gICAgICBsZWZ0ID0geCAtIGFuY2hvclggKiBzZWxmV2lkdGg7XG4gICAgICByaWdodCA9IGxlZnQgKyBzZWxmV2lkdGg7XG4gICAgICBjdXRvZmZYID0gTWF0aC5tYXgoMCwgcGFkZGluZyAtIGxlZnQpICsgTWF0aC5tYXgoMCwgcmlnaHQgLSB3aWR0aCArIHBhZGRpbmcpO1xuXG4gICAgICBpZiAoY3V0b2ZmWCA8IF9taW5DdXRvZmYpIHtcbiAgICAgICAgX21pbkN1dG9mZiA9IGN1dG9mZlg7XG4gICAgICAgIGJlc3RBbmNob3JYID0gYW5jaG9yWDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBhbmNob3JYID0gYmVzdEFuY2hvclg7XG4gIH1cblxuICByZXR1cm4gQU5DSE9SX1RZUEVTLmZpbmQoZnVuY3Rpb24gKHBvc2l0aW9uVHlwZSkge1xuICAgIHZhciBhbmNob3JQb3NpdGlvbiA9IEFOQ0hPUl9QT1NJVElPTltwb3NpdGlvblR5cGVdO1xuICAgIHJldHVybiBhbmNob3JQb3NpdGlvbi54ID09PSBhbmNob3JYICYmIGFuY2hvclBvc2l0aW9uLnkgPT09IGFuY2hvclk7XG4gIH0pIHx8IGFuY2hvcjtcbn0iLCJpbXBvcnQgX2RlZmluZVByb3BlcnR5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eVwiO1xuaW1wb3J0IF9zbGljZWRUb0FycmF5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zbGljZWRUb0FycmF5XCI7XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkge1xuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7XG5cbiAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTtcbiAgICBpZiAoZW51bWVyYWJsZU9ubHkpIHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTtcbiAgICB9KTtcbiAgICBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7XG4gIH1cblxuICByZXR1cm4ga2V5cztcbn1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTtcblxuICAgIGlmIChpICUgMikge1xuICAgICAgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlUmVmLCB1c2VTdGF0ZSwgdXNlRWZmZWN0LCB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB1c2VNYXBDb250cm9sLCB7IG1hcENvbnRyb2xEZWZhdWx0UHJvcHMsIG1hcENvbnRyb2xQcm9wVHlwZXMgfSBmcm9tICcuL3VzZS1tYXAtY29udHJvbCc7XG5pbXBvcnQgeyBnZXREeW5hbWljUG9zaXRpb24sIEFOQ0hPUl9QT1NJVElPTiB9IGZyb20gJy4uL3V0aWxzL2R5bmFtaWMtcG9zaXRpb24nO1xuaW1wb3J0IHsgZ2V0VGVycmFpbkVsZXZhdGlvbiB9IGZyb20gJy4uL3V0aWxzL3RlcnJhaW4nO1xuaW1wb3J0IHsgY3Jpc3BQZXJjZW50YWdlLCBjcmlzcFBpeGVsIH0gZnJvbSAnLi4vdXRpbHMvY3Jpc3AtcGl4ZWwnO1xudmFyIGRlZmF1bHRQcm9wcyA9IE9iamVjdC5hc3NpZ24oe30sIG1hcENvbnRyb2xEZWZhdWx0UHJvcHMsIHtcbiAgY2xhc3NOYW1lOiAnJyxcbiAgb2Zmc2V0TGVmdDogMCxcbiAgb2Zmc2V0VG9wOiAwLFxuICB0aXBTaXplOiAxMCxcbiAgYW5jaG9yOiAnYm90dG9tJyxcbiAgZHluYW1pY1Bvc2l0aW9uOiB0cnVlLFxuICBzb3J0QnlEZXB0aDogZmFsc2UsXG4gIGNsb3NlQnV0dG9uOiB0cnVlLFxuICBjbG9zZU9uQ2xpY2s6IHRydWUsXG4gIG9uQ2xvc2U6IGZ1bmN0aW9uIG9uQ2xvc2UoKSB7fVxufSk7XG5cbmZ1bmN0aW9uIGdldFBvc2l0aW9uKHByb3BzLCB2aWV3cG9ydCwgZWwsIF9yZWYpIHtcbiAgdmFyIF9yZWYyID0gX3NsaWNlZFRvQXJyYXkoX3JlZiwgMiksXG4gICAgICB4ID0gX3JlZjJbMF0sXG4gICAgICB5ID0gX3JlZjJbMV07XG5cbiAgdmFyIGFuY2hvciA9IHByb3BzLmFuY2hvcixcbiAgICAgIGR5bmFtaWNQb3NpdGlvbiA9IHByb3BzLmR5bmFtaWNQb3NpdGlvbixcbiAgICAgIHRpcFNpemUgPSBwcm9wcy50aXBTaXplO1xuXG4gIGlmIChlbCkge1xuICAgIHJldHVybiBkeW5hbWljUG9zaXRpb24gPyBnZXREeW5hbWljUG9zaXRpb24oe1xuICAgICAgeDogeCxcbiAgICAgIHk6IHksXG4gICAgICBhbmNob3I6IGFuY2hvcixcbiAgICAgIHBhZGRpbmc6IHRpcFNpemUsXG4gICAgICB3aWR0aDogdmlld3BvcnQud2lkdGgsXG4gICAgICBoZWlnaHQ6IHZpZXdwb3J0LmhlaWdodCxcbiAgICAgIHNlbGZXaWR0aDogZWwuY2xpZW50V2lkdGgsXG4gICAgICBzZWxmSGVpZ2h0OiBlbC5jbGllbnRIZWlnaHRcbiAgICB9KSA6IGFuY2hvcjtcbiAgfVxuXG4gIHJldHVybiBhbmNob3I7XG59XG5cbmZ1bmN0aW9uIGdldENvbnRhaW5lclN0eWxlKHByb3BzLCB2aWV3cG9ydCwgZWwsIF9yZWYzLCBwb3NpdGlvblR5cGUpIHtcbiAgdmFyIF9yZWY0ID0gX3NsaWNlZFRvQXJyYXkoX3JlZjMsIDMpLFxuICAgICAgeCA9IF9yZWY0WzBdLFxuICAgICAgeSA9IF9yZWY0WzFdLFxuICAgICAgeiA9IF9yZWY0WzJdO1xuXG4gIHZhciBvZmZzZXRMZWZ0ID0gcHJvcHMub2Zmc2V0TGVmdCxcbiAgICAgIG9mZnNldFRvcCA9IHByb3BzLm9mZnNldFRvcCxcbiAgICAgIHNvcnRCeURlcHRoID0gcHJvcHMuc29ydEJ5RGVwdGg7XG4gIHZhciBhbmNob3JQb3NpdGlvbiA9IEFOQ0hPUl9QT1NJVElPTltwb3NpdGlvblR5cGVdO1xuICB2YXIgbGVmdCA9IHggKyBvZmZzZXRMZWZ0O1xuICB2YXIgdG9wID0geSArIG9mZnNldFRvcDtcbiAgdmFyIHhQZXJjZW50YWdlID0gY3Jpc3BQZXJjZW50YWdlKGVsLCAtYW5jaG9yUG9zaXRpb24ueCAqIDEwMCk7XG4gIHZhciB5UGVyY2VudGFnZSA9IGNyaXNwUGVyY2VudGFnZShlbCwgLWFuY2hvclBvc2l0aW9uLnkgKiAxMDAsICd5Jyk7XG4gIHZhciBzdHlsZSA9IHtcbiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICB0cmFuc2Zvcm06IFwiXFxuICAgICAgdHJhbnNsYXRlKFwiLmNvbmNhdCh4UGVyY2VudGFnZSwgXCIlLCBcIikuY29uY2F0KHlQZXJjZW50YWdlLCBcIiUpXFxuICAgICAgdHJhbnNsYXRlKFwiKS5jb25jYXQoY3Jpc3BQaXhlbChsZWZ0KSwgXCJweCwgXCIpLmNvbmNhdChjcmlzcFBpeGVsKHRvcCksIFwicHgpXFxuICAgIFwiKSxcbiAgICBkaXNwbGF5OiB1bmRlZmluZWQsXG4gICAgekluZGV4OiB1bmRlZmluZWRcbiAgfTtcblxuICBpZiAoIXNvcnRCeURlcHRoKSB7XG4gICAgcmV0dXJuIHN0eWxlO1xuICB9XG5cbiAgaWYgKHogPiAxIHx8IHogPCAtMSB8fCB4IDwgMCB8fCB4ID4gdmlld3BvcnQud2lkdGggfHwgeSA8IDAgfHwgeSA+IHZpZXdwb3J0LmhlaWdodCkge1xuICAgIHN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIH0gZWxzZSB7XG4gICAgc3R5bGUuekluZGV4ID0gTWF0aC5mbG9vcigoMSAtIHopIC8gMiAqIDEwMDAwMCk7XG4gIH1cblxuICByZXR1cm4gc3R5bGU7XG59XG5cbmZ1bmN0aW9uIG9uQ2xpY2soZXZ0LCBfcmVmNSkge1xuICB2YXIgcHJvcHMgPSBfcmVmNS5wcm9wcyxcbiAgICAgIGNvbnRleHQgPSBfcmVmNS5jb250ZXh0O1xuXG4gIGlmIChwcm9wcy5jbG9zZU9uQ2xpY2sgfHwgZXZ0LnRhcmdldC5jbGFzc05hbWUgPT09ICdtYXBib3hnbC1wb3B1cC1jbG9zZS1idXR0b24nKSB7XG4gICAgcHJvcHMub25DbG9zZSgpO1xuXG4gICAgaWYgKGNvbnRleHQuZXZlbnRNYW5hZ2VyKSB7XG4gICAgICBjb250ZXh0LmV2ZW50TWFuYWdlci5vbmNlKCdjbGljaycsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHJldHVybiBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgfSwgZXZ0LnRhcmdldCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIFBvcHVwKHByb3BzKSB7XG4gIHZhciBjb250ZW50UmVmID0gdXNlUmVmKG51bGwpO1xuICB2YXIgdGhpc1JlZiA9IHVzZU1hcENvbnRyb2woX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBwcm9wcyksIHt9LCB7XG4gICAgb25DbGljazogb25DbGlja1xuICB9KSk7XG4gIHZhciBjb250ZXh0ID0gdGhpc1JlZi5jb250ZXh0LFxuICAgICAgY29udGFpbmVyUmVmID0gdGhpc1JlZi5jb250YWluZXJSZWY7XG5cbiAgdmFyIF91c2VTdGF0ZSA9IHVzZVN0YXRlKGZhbHNlKSxcbiAgICAgIF91c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUsIDIpLFxuICAgICAgc2V0TG9hZGVkID0gX3VzZVN0YXRlMlsxXTtcblxuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHNldExvYWRlZCh0cnVlKTtcbiAgfSwgW2NvbnRlbnRSZWYuY3VycmVudF0pO1xuICB2YXIgdmlld3BvcnQgPSBjb250ZXh0LnZpZXdwb3J0LFxuICAgICAgbWFwID0gY29udGV4dC5tYXA7XG4gIHZhciBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUsXG4gICAgICBsb25naXR1ZGUgPSBwcm9wcy5sb25naXR1ZGUsXG4gICAgICBsYXRpdHVkZSA9IHByb3BzLmxhdGl0dWRlLFxuICAgICAgdGlwU2l6ZSA9IHByb3BzLnRpcFNpemUsXG4gICAgICBjbG9zZUJ1dHRvbiA9IHByb3BzLmNsb3NlQnV0dG9uLFxuICAgICAgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbjtcbiAgdmFyIGFsdGl0dWRlID0gcHJvcHMuYWx0aXR1ZGU7XG5cbiAgaWYgKGFsdGl0dWRlID09PSB1bmRlZmluZWQpIHtcbiAgICBhbHRpdHVkZSA9IGdldFRlcnJhaW5FbGV2YXRpb24obWFwLCB7XG4gICAgICBsb25naXR1ZGU6IGxvbmdpdHVkZSxcbiAgICAgIGxhdGl0dWRlOiBsYXRpdHVkZVxuICAgIH0pO1xuICB9XG5cbiAgdmFyIHBvc2l0aW9uID0gdmlld3BvcnQucHJvamVjdChbbG9uZ2l0dWRlLCBsYXRpdHVkZSwgYWx0aXR1ZGVdKTtcbiAgdmFyIHBvc2l0aW9uVHlwZSA9IGdldFBvc2l0aW9uKHByb3BzLCB2aWV3cG9ydCwgY29udGVudFJlZi5jdXJyZW50LCBwb3NpdGlvbik7XG4gIHZhciBjb250YWluZXJTdHlsZSA9IGdldENvbnRhaW5lclN0eWxlKHByb3BzLCB2aWV3cG9ydCwgY29udGFpbmVyUmVmLmN1cnJlbnQsIHBvc2l0aW9uLCBwb3NpdGlvblR5cGUpO1xuICB2YXIgb25SZWFjdENsaWNrID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKGUpIHtcbiAgICByZXR1cm4gIWNvbnRleHQuZXZlbnRNYW5hZ2VyICYmIG9uQ2xpY2soZSwgdGhpc1JlZik7XG4gIH0sIFtjb250ZXh0LmV2ZW50TWFuYWdlcl0pO1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgY2xhc3NOYW1lOiBcIm1hcGJveGdsLXBvcHVwIG1hcGJveGdsLXBvcHVwLWFuY2hvci1cIi5jb25jYXQocG9zaXRpb25UeXBlLCBcIiBcIikuY29uY2F0KGNsYXNzTmFtZSksXG4gICAgc3R5bGU6IGNvbnRhaW5lclN0eWxlLFxuICAgIHJlZjogY29udGFpbmVyUmVmXG4gIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgIGtleTogXCJ0aXBcIixcbiAgICBjbGFzc05hbWU6IFwibWFwYm94Z2wtcG9wdXAtdGlwXCIsXG4gICAgc3R5bGU6IHtcbiAgICAgIGJvcmRlcldpZHRoOiB0aXBTaXplXG4gICAgfVxuICB9KSwgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAga2V5OiBcImNvbnRlbnRcIixcbiAgICByZWY6IGNvbnRlbnRSZWYsXG4gICAgY2xhc3NOYW1lOiBcIm1hcGJveGdsLXBvcHVwLWNvbnRlbnRcIixcbiAgICBvbkNsaWNrOiBvblJlYWN0Q2xpY2tcbiAgfSwgY2xvc2VCdXR0b24gJiYgUmVhY3QuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLCB7XG4gICAga2V5OiBcImNsb3NlLWJ1dHRvblwiLFxuICAgIGNsYXNzTmFtZTogXCJtYXBib3hnbC1wb3B1cC1jbG9zZS1idXR0b25cIixcbiAgICB0eXBlOiBcImJ1dHRvblwiXG4gIH0sIFwiXFx4RDdcIiksIGNoaWxkcmVuKSk7XG59XG5cblBvcHVwLmRlZmF1bHRQcm9wcyA9IGRlZmF1bHRQcm9wcztcbmV4cG9ydCBkZWZhdWx0IFJlYWN0Lm1lbW8oUG9wdXApOyIsImltcG9ydCBfZGVmaW5lUHJvcGVydHkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5XCI7XG5pbXBvcnQgX3NsaWNlZFRvQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXlcIjtcblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7XG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTtcblxuICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICAgIHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpO1xuICAgIGlmIChlbnVtZXJhYmxlT25seSkgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHtcbiAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlO1xuICAgIH0pO1xuICAgIGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTtcbiAgfVxuXG4gIHJldHVybiBrZXlzO1xufVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkge1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9O1xuXG4gICAgaWYgKGkgJSAyKSB7XG4gICAgICBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZUNhbGxiYWNrLCB1c2VTdGF0ZSwgdXNlUmVmLCB1c2VNZW1vIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IG1hcGJveGdsIGZyb20gJy4uL3V0aWxzL21hcGJveGdsJztcbmltcG9ydCB1c2VNYXBDb250cm9sLCB7IG1hcENvbnRyb2xEZWZhdWx0UHJvcHMsIG1hcENvbnRyb2xQcm9wVHlwZXMgfSBmcm9tICcuL3VzZS1tYXAtY29udHJvbCc7XG52YXIgZGVmYXVsdFByb3BzID0gT2JqZWN0LmFzc2lnbih7fSwgbWFwQ29udHJvbERlZmF1bHRQcm9wcywge1xuICBjbGFzc05hbWU6ICcnLFxuICB0b2dnbGVMYWJlbDogJ1RvZ2dsZSBBdHRyaWJ1dGlvbidcbn0pO1xuXG5mdW5jdGlvbiBzZXR1cEF0dHJpYnV0aW9uY29udHJvbChvcHRzLCBtYXAsIGNvbnRhaW5lciwgYXR0cmlidXRpb25Db250YWluZXIpIHtcbiAgdmFyIGNvbnRyb2wgPSBuZXcgbWFwYm94Z2wuQXR0cmlidXRpb25Db250cm9sKG9wdHMpO1xuICBjb250cm9sLl9tYXAgPSBtYXA7XG4gIGNvbnRyb2wuX2NvbnRhaW5lciA9IGNvbnRhaW5lcjtcbiAgY29udHJvbC5faW5uZXJDb250YWluZXIgPSBhdHRyaWJ1dGlvbkNvbnRhaW5lcjtcblxuICBjb250cm9sLl91cGRhdGVBdHRyaWJ1dGlvbnMoKTtcblxuICBjb250cm9sLl91cGRhdGVFZGl0TGluaygpO1xuXG4gIG1hcC5vbignc3R5bGVkYXRhJywgY29udHJvbC5fdXBkYXRlRGF0YSk7XG4gIG1hcC5vbignc291cmNlZGF0YScsIGNvbnRyb2wuX3VwZGF0ZURhdGEpO1xuICByZXR1cm4gY29udHJvbDtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlQXR0cmlidXRpb25Db250cm9sKGNvbnRyb2wpIHtcbiAgY29udHJvbC5fbWFwLm9mZignc3R5bGVkYXRhJywgY29udHJvbC5fdXBkYXRlRGF0YSk7XG5cbiAgY29udHJvbC5fbWFwLm9mZignc291cmNlZGF0YScsIGNvbnRyb2wuX3VwZGF0ZURhdGEpO1xufVxuXG5mdW5jdGlvbiBBdHRyaWJ1dGlvbkNvbnRyb2wocHJvcHMpIHtcbiAgdmFyIF91c2VNYXBDb250cm9sID0gdXNlTWFwQ29udHJvbChwcm9wcyksXG4gICAgICBjb250ZXh0ID0gX3VzZU1hcENvbnRyb2wuY29udGV4dCxcbiAgICAgIGNvbnRhaW5lclJlZiA9IF91c2VNYXBDb250cm9sLmNvbnRhaW5lclJlZjtcblxuICB2YXIgaW5uZXJDb250YWluZXJSZWYgPSB1c2VSZWYobnVsbCk7XG5cbiAgdmFyIF91c2VTdGF0ZSA9IHVzZVN0YXRlKGZhbHNlKSxcbiAgICAgIF91c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUsIDIpLFxuICAgICAgc2hvd0NvbXBhY3QgPSBfdXNlU3RhdGUyWzBdLFxuICAgICAgc2V0U2hvd0NvbXBhY3QgPSBfdXNlU3RhdGUyWzFdO1xuXG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGNvbnRyb2w7XG5cbiAgICBpZiAoY29udGV4dC5tYXApIHtcbiAgICAgIGNvbnRyb2wgPSBzZXR1cEF0dHJpYnV0aW9uY29udHJvbCh7XG4gICAgICAgIGN1c3RvbUF0dHJpYnV0aW9uOiBwcm9wcy5jdXN0b21BdHRyaWJ1dGlvblxuICAgICAgfSwgY29udGV4dC5tYXAsIGNvbnRhaW5lclJlZi5jdXJyZW50LCBpbm5lckNvbnRhaW5lclJlZi5jdXJyZW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGNvbnRyb2wgJiYgcmVtb3ZlQXR0cmlidXRpb25Db250cm9sKGNvbnRyb2wpO1xuICAgIH07XG4gIH0sIFtjb250ZXh0Lm1hcF0pO1xuICB2YXIgY29tcGFjdCA9IHByb3BzLmNvbXBhY3QgPT09IHVuZGVmaW5lZCA/IGNvbnRleHQudmlld3BvcnQud2lkdGggPD0gNjQwIDogcHJvcHMuY29tcGFjdDtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIWNvbXBhY3QgJiYgc2hvd0NvbXBhY3QpIHtcbiAgICAgIHNldFNob3dDb21wYWN0KGZhbHNlKTtcbiAgICB9XG4gIH0sIFtjb21wYWN0XSk7XG4gIHZhciB0b2dnbGVBdHRyaWJ1dGlvbiA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gc2V0U2hvd0NvbXBhY3QoZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICByZXR1cm4gIXZhbHVlO1xuICAgIH0pO1xuICB9LCBbXSk7XG4gIHZhciBzdHlsZSA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfb2JqZWN0U3ByZWFkKHtcbiAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnXG4gICAgfSwgcHJvcHMuc3R5bGUpO1xuICB9LCBbcHJvcHMuc3R5bGVdKTtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgIHN0eWxlOiBzdHlsZSxcbiAgICBjbGFzc05hbWU6IHByb3BzLmNsYXNzTmFtZVxuICB9LCBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICByZWY6IGNvbnRhaW5lclJlZixcbiAgICBcImFyaWEtcHJlc3NlZFwiOiBzaG93Q29tcGFjdCxcbiAgICBjbGFzc05hbWU6IFwibWFwYm94Z2wtY3RybCBtYXBib3hnbC1jdHJsLWF0dHJpYiBcIi5jb25jYXQoY29tcGFjdCA/ICdtYXBib3hnbC1jb21wYWN0JyA6ICcnLCBcIiBcIikuY29uY2F0KHNob3dDb21wYWN0ID8gJ21hcGJveGdsLWNvbXBhY3Qtc2hvdycgOiAnJylcbiAgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLCB7XG4gICAgdHlwZTogXCJidXR0b25cIixcbiAgICBjbGFzc05hbWU6IFwibWFwYm94Z2wtY3RybC1hdHRyaWItYnV0dG9uXCIsXG4gICAgdGl0bGU6IHByb3BzLnRvZ2dsZUxhYmVsLFxuICAgIG9uQ2xpY2s6IHRvZ2dsZUF0dHJpYnV0aW9uXG4gIH0pLCBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICByZWY6IGlubmVyQ29udGFpbmVyUmVmLFxuICAgIGNsYXNzTmFtZTogXCJtYXBib3hnbC1jdHJsLWF0dHJpYi1pbm5lclwiLFxuICAgIHJvbGU6IFwibGlzdFwiXG4gIH0pKSk7XG59XG5cbkF0dHJpYnV0aW9uQ29udHJvbC5kZWZhdWx0UHJvcHMgPSBkZWZhdWx0UHJvcHM7XG5leHBvcnQgZGVmYXVsdCBSZWFjdC5tZW1vKEF0dHJpYnV0aW9uQ29udHJvbCk7IiwiaW1wb3J0IF9kZWZpbmVQcm9wZXJ0eSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHlcIjtcbmltcG9ydCBfc2xpY2VkVG9BcnJheSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheVwiO1xuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHtcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXG4gIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7XG4gICAgaWYgKGVudW1lcmFibGVPbmx5KSBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkge1xuICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7XG4gICAgfSk7XG4gICAga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpO1xuICB9XG5cbiAgcmV0dXJuIGtleXM7XG59XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307XG5cbiAgICBpZiAoaSAlIDIpIHtcbiAgICAgIG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbmltcG9ydCB7IGRvY3VtZW50IH0gZnJvbSAnLi4vdXRpbHMvZ2xvYmFscyc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVN0YXRlLCB1c2VNZW1vIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IG1hcGJveGdsIGZyb20gJy4uL3V0aWxzL21hcGJveGdsJztcbmltcG9ydCB1c2VNYXBDb250cm9sLCB7IG1hcENvbnRyb2xEZWZhdWx0UHJvcHMsIG1hcENvbnRyb2xQcm9wVHlwZXMgfSBmcm9tICcuL3VzZS1tYXAtY29udHJvbCc7XG52YXIgZGVmYXVsdFByb3BzID0gT2JqZWN0LmFzc2lnbih7fSwgbWFwQ29udHJvbERlZmF1bHRQcm9wcywge1xuICBjbGFzc05hbWU6ICcnLFxuICBjb250YWluZXI6IG51bGwsXG4gIGxhYmVsOiAnVG9nZ2xlIGZ1bGxzY3JlZW4nXG59KTtcblxuZnVuY3Rpb24gRnVsbHNjcmVlbkNvbnRyb2wocHJvcHMpIHtcbiAgdmFyIF91c2VNYXBDb250cm9sID0gdXNlTWFwQ29udHJvbChwcm9wcyksXG4gICAgICBjb250ZXh0ID0gX3VzZU1hcENvbnRyb2wuY29udGV4dCxcbiAgICAgIGNvbnRhaW5lclJlZiA9IF91c2VNYXBDb250cm9sLmNvbnRhaW5lclJlZjtcblxuICB2YXIgX3VzZVN0YXRlID0gdXNlU3RhdGUoZmFsc2UpLFxuICAgICAgX3VzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZSwgMiksXG4gICAgICBpc0Z1bGxzY3JlZW4gPSBfdXNlU3RhdGUyWzBdLFxuICAgICAgc2V0SXNGdWxsc2NyZWVuID0gX3VzZVN0YXRlMlsxXTtcblxuICB2YXIgX3VzZVN0YXRlMyA9IHVzZVN0YXRlKGZhbHNlKSxcbiAgICAgIF91c2VTdGF0ZTQgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUzLCAyKSxcbiAgICAgIHNob3dCdXR0b24gPSBfdXNlU3RhdGU0WzBdLFxuICAgICAgc2V0U2hvd0J1dHRvbiA9IF91c2VTdGF0ZTRbMV07XG5cbiAgdmFyIF91c2VTdGF0ZTUgPSB1c2VTdGF0ZShudWxsKSxcbiAgICAgIF91c2VTdGF0ZTYgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGU1LCAyKSxcbiAgICAgIG1hcGJveEZ1bGxzY3JlZW5Db250cm9sID0gX3VzZVN0YXRlNlswXSxcbiAgICAgIGNyZWF0ZU1hcGJveEZ1bGxzY3JlZW5Db250cm9sID0gX3VzZVN0YXRlNlsxXTtcblxuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHZhciBjb250cm9sID0gbmV3IG1hcGJveGdsLkZ1bGxzY3JlZW5Db250cm9sKCk7XG4gICAgY3JlYXRlTWFwYm94RnVsbHNjcmVlbkNvbnRyb2woY29udHJvbCk7XG4gICAgc2V0U2hvd0J1dHRvbihjb250cm9sLl9jaGVja0Z1bGxzY3JlZW5TdXBwb3J0KCkpO1xuXG4gICAgdmFyIG9uRnVsbHNjcmVlbkNoYW5nZSA9IGZ1bmN0aW9uIG9uRnVsbHNjcmVlbkNoYW5nZSgpIHtcbiAgICAgIHZhciBuZXh0U3RhdGUgPSAhY29udHJvbC5fZnVsbHNjcmVlbjtcbiAgICAgIGNvbnRyb2wuX2Z1bGxzY3JlZW4gPSBuZXh0U3RhdGU7XG4gICAgICBzZXRJc0Z1bGxzY3JlZW4obmV4dFN0YXRlKTtcbiAgICB9O1xuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihjb250cm9sLl9mdWxsc2NyZWVuY2hhbmdlLCBvbkZ1bGxzY3JlZW5DaGFuZ2UpO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGNvbnRyb2wuX2Z1bGxzY3JlZW5jaGFuZ2UsIG9uRnVsbHNjcmVlbkNoYW5nZSk7XG4gICAgfTtcbiAgfSwgW10pO1xuXG4gIHZhciBvbkNsaWNrRnVsbHNjcmVlbiA9IGZ1bmN0aW9uIG9uQ2xpY2tGdWxsc2NyZWVuKCkge1xuICAgIGlmIChtYXBib3hGdWxsc2NyZWVuQ29udHJvbCkge1xuICAgICAgbWFwYm94RnVsbHNjcmVlbkNvbnRyb2wuX2NvbnRhaW5lciA9IHByb3BzLmNvbnRhaW5lciB8fCBjb250ZXh0LmNvbnRhaW5lcjtcblxuICAgICAgbWFwYm94RnVsbHNjcmVlbkNvbnRyb2wuX29uQ2xpY2tGdWxsc2NyZWVuKCk7XG4gICAgfVxuICB9O1xuXG4gIHZhciBzdHlsZSA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfb2JqZWN0U3ByZWFkKHtcbiAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnXG4gICAgfSwgcHJvcHMuc3R5bGUpO1xuICB9LCBbcHJvcHMuc3R5bGVdKTtcblxuICBpZiAoIXNob3dCdXR0b24pIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUsXG4gICAgICBsYWJlbCA9IHByb3BzLmxhYmVsO1xuICB2YXIgdHlwZSA9IGlzRnVsbHNjcmVlbiA/ICdzaHJpbmsnIDogJ2Z1bGxzY3JlZW4nO1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgc3R5bGU6IHN0eWxlLFxuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lXG4gIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgIGNsYXNzTmFtZTogXCJtYXBib3hnbC1jdHJsIG1hcGJveGdsLWN0cmwtZ3JvdXBcIixcbiAgICByZWY6IGNvbnRhaW5lclJlZlxuICB9LCBSZWFjdC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIsIHtcbiAgICBrZXk6IHR5cGUsXG4gICAgY2xhc3NOYW1lOiBcIm1hcGJveGdsLWN0cmwtaWNvbiBtYXBib3hnbC1jdHJsLVwiLmNvbmNhdCh0eXBlKSxcbiAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgIHRpdGxlOiBsYWJlbCxcbiAgICBvbkNsaWNrOiBvbkNsaWNrRnVsbHNjcmVlblxuICB9LCBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7XG4gICAgY2xhc3NOYW1lOiBcIm1hcGJveGdsLWN0cmwtaWNvblwiLFxuICAgIFwiYXJpYS1oaWRkZW5cIjogXCJ0cnVlXCJcbiAgfSkpKSk7XG59XG5cbkZ1bGxzY3JlZW5Db250cm9sLmRlZmF1bHRQcm9wcyA9IGRlZmF1bHRQcm9wcztcbmV4cG9ydCBkZWZhdWx0IFJlYWN0Lm1lbW8oRnVsbHNjcmVlbkNvbnRyb2wpOyIsInZhciBzdXBwb3J0ZWQ7XG5leHBvcnQgZnVuY3Rpb24gaXNHZW9sb2NhdGlvblN1cHBvcnRlZCgpIHtcbiAgaWYgKHN1cHBvcnRlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShzdXBwb3J0ZWQpO1xuICB9XG5cbiAgaWYgKHdpbmRvdy5uYXZpZ2F0b3IucGVybWlzc2lvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB3aW5kb3cubmF2aWdhdG9yLnBlcm1pc3Npb25zLnF1ZXJ5KHtcbiAgICAgIG5hbWU6ICdnZW9sb2NhdGlvbidcbiAgICB9KS50aGVuKGZ1bmN0aW9uIChwKSB7XG4gICAgICBzdXBwb3J0ZWQgPSBwLnN0YXRlICE9PSAnZGVuaWVkJztcbiAgICAgIHJldHVybiBzdXBwb3J0ZWQ7XG4gICAgfSk7XG4gIH1cblxuICBzdXBwb3J0ZWQgPSBCb29sZWFuKHdpbmRvdy5uYXZpZ2F0b3IuZ2VvbG9jYXRpb24pO1xuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHN1cHBvcnRlZCk7XG59IiwiaW1wb3J0IF9kZWZpbmVQcm9wZXJ0eSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHlcIjtcbmltcG9ydCBfc2xpY2VkVG9BcnJheSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheVwiO1xuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHtcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXG4gIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7XG4gICAgaWYgKGVudW1lcmFibGVPbmx5KSBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkge1xuICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7XG4gICAgfSk7XG4gICAga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpO1xuICB9XG5cbiAgcmV0dXJuIGtleXM7XG59XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307XG5cbiAgICBpZiAoaSAlIDIpIHtcbiAgICAgIG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZVJlZiwgdXNlRWZmZWN0LCB1c2VTdGF0ZSwgdXNlQ2FsbGJhY2ssIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBkb2N1bWVudCB9IGZyb20gJy4uL3V0aWxzL2dsb2JhbHMnO1xuaW1wb3J0IG1hcGJveGdsIGZyb20gJy4uL3V0aWxzL21hcGJveGdsJztcbmltcG9ydCBNYXBTdGF0ZSBmcm9tICcuLi91dGlscy9tYXAtc3RhdGUnO1xuaW1wb3J0IHsgTElORUFSX1RSQU5TSVRJT05fUFJPUFMgfSBmcm9tICcuLi91dGlscy9tYXAtY29udHJvbGxlcic7XG5pbXBvcnQgeyBpc0dlb2xvY2F0aW9uU3VwcG9ydGVkIH0gZnJvbSAnLi4vdXRpbHMvZ2VvbG9jYXRlLXV0aWxzJztcbmltcG9ydCB1c2VNYXBDb250cm9sLCB7IG1hcENvbnRyb2xEZWZhdWx0UHJvcHMsIG1hcENvbnRyb2xQcm9wVHlwZXMgfSBmcm9tICcuL3VzZS1tYXAtY29udHJvbCc7XG5cbnZhciBub29wID0gZnVuY3Rpb24gbm9vcCgpIHt9O1xuXG52YXIgZGVmYXVsdFByb3BzID0gT2JqZWN0LmFzc2lnbih7fSwgbWFwQ29udHJvbERlZmF1bHRQcm9wcywge1xuICBjbGFzc05hbWU6ICcnLFxuICBsYWJlbDogJ0ZpbmQgTXkgTG9jYXRpb24nLFxuICBkaXNhYmxlZExhYmVsOiAnTG9jYXRpb24gTm90IEF2YWlsYWJsZScsXG4gIGF1dG86IGZhbHNlLFxuICBwb3NpdGlvbk9wdGlvbnM6IHtcbiAgICBlbmFibGVIaWdoQWNjdXJhY3k6IGZhbHNlLFxuICAgIHRpbWVvdXQ6IDYwMDBcbiAgfSxcbiAgZml0Qm91bmRzT3B0aW9uczoge1xuICAgIG1heFpvb206IDE1XG4gIH0sXG4gIHRyYWNrVXNlckxvY2F0aW9uOiBmYWxzZSxcbiAgc2hvd1VzZXJMb2NhdGlvbjogdHJ1ZSxcbiAgc2hvd0FjY3VyYWN5Q2lyY2xlOiB0cnVlLFxuICBvbkdlb2xvY2F0ZTogZnVuY3Rpb24gb25HZW9sb2NhdGUoKSB7fVxufSk7XG5cbmZ1bmN0aW9uIGdldEJvdW5kcyhwb3NpdGlvbikge1xuICB2YXIgY2VudGVyID0gbmV3IG1hcGJveGdsLkxuZ0xhdChwb3NpdGlvbi5jb29yZHMubG9uZ2l0dWRlLCBwb3NpdGlvbi5jb29yZHMubGF0aXR1ZGUpO1xuICB2YXIgcmFkaXVzID0gcG9zaXRpb24uY29vcmRzLmFjY3VyYWN5O1xuICB2YXIgYm91bmRzID0gY2VudGVyLnRvQm91bmRzKHJhZGl1cyk7XG4gIHJldHVybiBbW2JvdW5kcy5fbmUubG5nLCBib3VuZHMuX25lLmxhdF0sIFtib3VuZHMuX3N3LmxuZywgYm91bmRzLl9zdy5sYXRdXTtcbn1cblxuZnVuY3Rpb24gc2V0dXBNYXBib3hHZW9sb2NhdGVDb250cm9sKGNvbnRleHQsIHByb3BzLCBnZW9sb2NhdGVCdXR0b24pIHtcbiAgdmFyIGNvbnRyb2wgPSBuZXcgbWFwYm94Z2wuR2VvbG9jYXRlQ29udHJvbChwcm9wcyk7XG4gIGNvbnRyb2wuX2NvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICBjb250cm9sLl9tYXAgPSB7XG4gICAgb246IGZ1bmN0aW9uIG9uKCkge30sXG4gICAgX2dldFVJU3RyaW5nOiBmdW5jdGlvbiBfZ2V0VUlTdHJpbmcoKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9O1xuXG4gIGNvbnRyb2wuX3NldHVwVUkodHJ1ZSk7XG5cbiAgY29udHJvbC5fbWFwID0gY29udGV4dC5tYXA7XG4gIGNvbnRyb2wuX2dlb2xvY2F0ZUJ1dHRvbiA9IGdlb2xvY2F0ZUJ1dHRvbjtcbiAgdmFyIGV2ZW50TWFuYWdlciA9IGNvbnRleHQuZXZlbnRNYW5hZ2VyO1xuXG4gIGlmIChjb250cm9sLm9wdGlvbnMudHJhY2tVc2VyTG9jYXRpb24gJiYgZXZlbnRNYW5hZ2VyKSB7XG4gICAgZXZlbnRNYW5hZ2VyLm9uKCdwYW5zdGFydCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChjb250cm9sLl93YXRjaFN0YXRlID09PSAnQUNUSVZFX0xPQ0snKSB7XG4gICAgICAgIGNvbnRyb2wuX3dhdGNoU3RhdGUgPSAnQkFDS0dST1VORCc7XG4gICAgICAgIGdlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCdtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1iYWNrZ3JvdW5kJyk7XG4gICAgICAgIGdlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCdtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUnKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGNvbnRyb2wub24oJ2dlb2xvY2F0ZScsIHByb3BzLm9uR2VvbG9jYXRlKTtcbiAgcmV0dXJuIGNvbnRyb2w7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUNhbWVyYShwb3NpdGlvbiwgX3JlZikge1xuICB2YXIgY29udGV4dCA9IF9yZWYuY29udGV4dCxcbiAgICAgIHByb3BzID0gX3JlZi5wcm9wcztcbiAgdmFyIGJvdW5kcyA9IGdldEJvdW5kcyhwb3NpdGlvbik7XG5cbiAgdmFyIF9jb250ZXh0JHZpZXdwb3J0JGZpdCA9IGNvbnRleHQudmlld3BvcnQuZml0Qm91bmRzKGJvdW5kcywgcHJvcHMuZml0Qm91bmRzT3B0aW9ucyksXG4gICAgICBsb25naXR1ZGUgPSBfY29udGV4dCR2aWV3cG9ydCRmaXQubG9uZ2l0dWRlLFxuICAgICAgbGF0aXR1ZGUgPSBfY29udGV4dCR2aWV3cG9ydCRmaXQubGF0aXR1ZGUsXG4gICAgICB6b29tID0gX2NvbnRleHQkdmlld3BvcnQkZml0Lnpvb207XG5cbiAgdmFyIG5ld1ZpZXdTdGF0ZSA9IE9iamVjdC5hc3NpZ24oe30sIGNvbnRleHQudmlld3BvcnQsIHtcbiAgICBsb25naXR1ZGU6IGxvbmdpdHVkZSxcbiAgICBsYXRpdHVkZTogbGF0aXR1ZGUsXG4gICAgem9vbTogem9vbVxuICB9KTtcbiAgdmFyIG1hcFN0YXRlID0gbmV3IE1hcFN0YXRlKG5ld1ZpZXdTdGF0ZSk7XG4gIHZhciB2aWV3U3RhdGUgPSBPYmplY3QuYXNzaWduKHt9LCBtYXBTdGF0ZS5nZXRWaWV3cG9ydFByb3BzKCksIExJTkVBUl9UUkFOU0lUSU9OX1BST1BTKTtcbiAgdmFyIG9uVmlld3BvcnRDaGFuZ2UgPSBwcm9wcy5vblZpZXdwb3J0Q2hhbmdlIHx8IGNvbnRleHQub25WaWV3cG9ydENoYW5nZSB8fCBub29wO1xuICB2YXIgb25WaWV3U3RhdGVDaGFuZ2UgPSBwcm9wcy5vblZpZXdTdGF0ZUNoYW5nZSB8fCBjb250ZXh0Lm9uVmlld1N0YXRlQ2hhbmdlIHx8IG5vb3A7XG4gIG9uVmlld1N0YXRlQ2hhbmdlKHtcbiAgICB2aWV3U3RhdGU6IHZpZXdTdGF0ZVxuICB9KTtcbiAgb25WaWV3cG9ydENoYW5nZSh2aWV3U3RhdGUpO1xufVxuXG5mdW5jdGlvbiBHZW9sb2NhdGVDb250cm9sKHByb3BzKSB7XG4gIHZhciB0aGlzUmVmID0gdXNlTWFwQ29udHJvbChwcm9wcyk7XG4gIHZhciBjb250ZXh0ID0gdGhpc1JlZi5jb250ZXh0LFxuICAgICAgY29udGFpbmVyUmVmID0gdGhpc1JlZi5jb250YWluZXJSZWY7XG4gIHZhciBnZW9sb2NhdGVCdXR0b25SZWYgPSB1c2VSZWYobnVsbCk7XG5cbiAgdmFyIF91c2VTdGF0ZSA9IHVzZVN0YXRlKG51bGwpLFxuICAgICAgX3VzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZSwgMiksXG4gICAgICBtYXBib3hHZW9sb2NhdGVDb250cm9sID0gX3VzZVN0YXRlMlswXSxcbiAgICAgIGNyZWF0ZU1hcGJveEdlb2xvY2F0ZUNvbnRyb2wgPSBfdXNlU3RhdGUyWzFdO1xuXG4gIHZhciBfdXNlU3RhdGUzID0gdXNlU3RhdGUoZmFsc2UpLFxuICAgICAgX3VzZVN0YXRlNCA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZTMsIDIpLFxuICAgICAgc3VwcG9ydHNHZW9sb2NhdGlvbiA9IF91c2VTdGF0ZTRbMF0sXG4gICAgICBzZXRTdXBwb3J0c0dlb2xvY2F0aW9uID0gX3VzZVN0YXRlNFsxXTtcblxuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHZhciBjb250cm9sO1xuXG4gICAgaWYgKGNvbnRleHQubWFwKSB7XG4gICAgICBpc0dlb2xvY2F0aW9uU3VwcG9ydGVkKCkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgIHNldFN1cHBvcnRzR2VvbG9jYXRpb24ocmVzdWx0KTtcblxuICAgICAgICBpZiAoZ2VvbG9jYXRlQnV0dG9uUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICBjb250cm9sID0gc2V0dXBNYXBib3hHZW9sb2NhdGVDb250cm9sKGNvbnRleHQsIHByb3BzLCBnZW9sb2NhdGVCdXR0b25SZWYuY3VycmVudCk7XG5cbiAgICAgICAgICBjb250cm9sLl91cGRhdGVDYW1lcmEgPSBmdW5jdGlvbiAocG9zaXRpb24pIHtcbiAgICAgICAgICAgIHJldHVybiB1cGRhdGVDYW1lcmEocG9zaXRpb24sIHRoaXNSZWYpO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICBjcmVhdGVNYXBib3hHZW9sb2NhdGVDb250cm9sKGNvbnRyb2wpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKGNvbnRyb2wpIHtcbiAgICAgICAgY29udHJvbC5fY2xlYXJXYXRjaCgpO1xuICAgICAgfVxuICAgIH07XG4gIH0sIFtjb250ZXh0Lm1hcF0pO1xuICB2YXIgdHJpZ2dlckdlb2xvY2F0ZSA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAobWFwYm94R2VvbG9jYXRlQ29udHJvbCkge1xuICAgICAgbWFwYm94R2VvbG9jYXRlQ29udHJvbC5vcHRpb25zID0gdGhpc1JlZi5wcm9wcztcbiAgICAgIG1hcGJveEdlb2xvY2F0ZUNvbnRyb2wudHJpZ2dlcigpO1xuICAgIH1cbiAgfSwgW21hcGJveEdlb2xvY2F0ZUNvbnRyb2xdKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAocHJvcHMuYXV0bykge1xuICAgICAgdHJpZ2dlckdlb2xvY2F0ZSgpO1xuICAgIH1cbiAgfSwgW21hcGJveEdlb2xvY2F0ZUNvbnRyb2wsIHByb3BzLmF1dG9dKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAobWFwYm94R2VvbG9jYXRlQ29udHJvbCkge1xuICAgICAgbWFwYm94R2VvbG9jYXRlQ29udHJvbC5fb25ab29tKCk7XG4gICAgfVxuICB9LCBbY29udGV4dC52aWV3cG9ydC56b29tXSk7XG4gIHZhciBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUsXG4gICAgICBsYWJlbCA9IHByb3BzLmxhYmVsLFxuICAgICAgZGlzYWJsZWRMYWJlbCA9IHByb3BzLmRpc2FibGVkTGFiZWwsXG4gICAgICB0cmFja1VzZXJMb2NhdGlvbiA9IHByb3BzLnRyYWNrVXNlckxvY2F0aW9uO1xuICB2YXIgc3R5bGUgPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX29iamVjdFNwcmVhZCh7XG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJ1xuICAgIH0sIHByb3BzLnN0eWxlKTtcbiAgfSwgW3Byb3BzLnN0eWxlXSk7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICBzdHlsZTogc3R5bGUsXG4gICAgY2xhc3NOYW1lOiBjbGFzc05hbWVcbiAgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAga2V5OiBcImdlb2xvY2F0ZS1jb250cm9sXCIsXG4gICAgY2xhc3NOYW1lOiBcIm1hcGJveGdsLWN0cmwgbWFwYm94Z2wtY3RybC1ncm91cFwiLFxuICAgIHJlZjogY29udGFpbmVyUmVmXG4gIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIiwge1xuICAgIGtleTogXCJnZW9sb2NhdGVcIixcbiAgICBjbGFzc05hbWU6IFwibWFwYm94Z2wtY3RybC1pY29uIG1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlXCIsXG4gICAgcmVmOiBnZW9sb2NhdGVCdXR0b25SZWYsXG4gICAgZGlzYWJsZWQ6ICFzdXBwb3J0c0dlb2xvY2F0aW9uLFxuICAgIFwiYXJpYS1wcmVzc2VkXCI6ICF0cmFja1VzZXJMb2NhdGlvbixcbiAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgIHRpdGxlOiBzdXBwb3J0c0dlb2xvY2F0aW9uID8gbGFiZWwgOiBkaXNhYmxlZExhYmVsLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBzdXBwb3J0c0dlb2xvY2F0aW9uID8gbGFiZWwgOiBkaXNhYmxlZExhYmVsLFxuICAgIG9uQ2xpY2s6IHRyaWdnZXJHZW9sb2NhdGVcbiAgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge1xuICAgIGNsYXNzTmFtZTogXCJtYXBib3hnbC1jdHJsLWljb25cIixcbiAgICBcImFyaWEtaGlkZGVuXCI6IFwidHJ1ZVwiXG4gIH0pKSkpO1xufVxuXG5HZW9sb2NhdGVDb250cm9sLmRlZmF1bHRQcm9wcyA9IGRlZmF1bHRQcm9wcztcbmV4cG9ydCBkZWZhdWx0IFJlYWN0Lm1lbW8oR2VvbG9jYXRlQ29udHJvbCk7IiwiZXhwb3J0IGZ1bmN0aW9uIGNvbXBhcmVWZXJzaW9ucyh2ZXJzaW9uMSwgdmVyc2lvbjIpIHtcbiAgdmFyIHYxID0gKHZlcnNpb24xIHx8ICcnKS5zcGxpdCgnLicpLm1hcChOdW1iZXIpO1xuICB2YXIgdjIgPSAodmVyc2lvbjIgfHwgJycpLnNwbGl0KCcuJykubWFwKE51bWJlcik7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCAzOyBpKyspIHtcbiAgICB2YXIgcGFydDEgPSB2MVtpXSB8fCAwO1xuICAgIHZhciBwYXJ0MiA9IHYyW2ldIHx8IDA7XG5cbiAgICBpZiAocGFydDEgPCBwYXJ0Mikge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIGlmIChwYXJ0MSA+IHBhcnQyKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gMDtcbn0iLCJpbXBvcnQgX2RlZmluZVByb3BlcnR5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eVwiO1xuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHtcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXG4gIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7XG4gICAgaWYgKGVudW1lcmFibGVPbmx5KSBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkge1xuICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7XG4gICAgfSk7XG4gICAga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpO1xuICB9XG5cbiAgcmV0dXJuIGtleXM7XG59XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307XG5cbiAgICBpZiAoaSAlIDIpIHtcbiAgICAgIG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgTWFwU3RhdGUgZnJvbSAnLi4vdXRpbHMvbWFwLXN0YXRlJztcbmltcG9ydCB7IExJTkVBUl9UUkFOU0lUSU9OX1BST1BTIH0gZnJvbSAnLi4vdXRpbHMvbWFwLWNvbnRyb2xsZXInO1xuaW1wb3J0IHsgY29tcGFyZVZlcnNpb25zIH0gZnJvbSAnLi4vdXRpbHMvdmVyc2lvbic7XG5pbXBvcnQgdXNlTWFwQ29udHJvbCwgeyBtYXBDb250cm9sRGVmYXVsdFByb3BzLCBtYXBDb250cm9sUHJvcFR5cGVzIH0gZnJvbSAnLi91c2UtbWFwLWNvbnRyb2wnO1xuXG52YXIgbm9vcCA9IGZ1bmN0aW9uIG5vb3AoKSB7fTtcblxudmFyIGRlZmF1bHRQcm9wcyA9IE9iamVjdC5hc3NpZ24oe30sIG1hcENvbnRyb2xEZWZhdWx0UHJvcHMsIHtcbiAgY2xhc3NOYW1lOiAnJyxcbiAgc2hvd0NvbXBhc3M6IHRydWUsXG4gIHNob3dab29tOiB0cnVlLFxuICB6b29tSW5MYWJlbDogJ1pvb20gSW4nLFxuICB6b29tT3V0TGFiZWw6ICdab29tIE91dCcsXG4gIGNvbXBhc3NMYWJlbDogJ1Jlc2V0IE5vcnRoJ1xufSk7XG52YXIgVkVSU0lPTl9MRUdBQ1kgPSAxO1xudmFyIFZFUlNJT05fMV82ID0gMjtcblxuZnVuY3Rpb24gZ2V0VUlWZXJzaW9uKG1hcGJveFZlcnNpb24pIHtcbiAgcmV0dXJuIGNvbXBhcmVWZXJzaW9ucyhtYXBib3hWZXJzaW9uLCAnMS42LjAnKSA+PSAwID8gVkVSU0lPTl8xXzYgOiBWRVJTSU9OX0xFR0FDWTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlVmlld3BvcnQoY29udGV4dCwgcHJvcHMsIG9wdHMpIHtcbiAgdmFyIHZpZXdwb3J0ID0gY29udGV4dC52aWV3cG9ydDtcbiAgdmFyIG1hcFN0YXRlID0gbmV3IE1hcFN0YXRlKE9iamVjdC5hc3NpZ24oe30sIHZpZXdwb3J0LCBvcHRzKSk7XG4gIHZhciB2aWV3U3RhdGUgPSBPYmplY3QuYXNzaWduKHt9LCBtYXBTdGF0ZS5nZXRWaWV3cG9ydFByb3BzKCksIExJTkVBUl9UUkFOU0lUSU9OX1BST1BTKTtcbiAgdmFyIG9uVmlld3BvcnRDaGFuZ2UgPSBwcm9wcy5vblZpZXdwb3J0Q2hhbmdlIHx8IGNvbnRleHQub25WaWV3cG9ydENoYW5nZSB8fCBub29wO1xuICB2YXIgb25WaWV3U3RhdGVDaGFuZ2UgPSBwcm9wcy5vblZpZXdTdGF0ZUNoYW5nZSB8fCBjb250ZXh0Lm9uVmlld1N0YXRlQ2hhbmdlIHx8IG5vb3A7XG4gIG9uVmlld1N0YXRlQ2hhbmdlKHtcbiAgICB2aWV3U3RhdGU6IHZpZXdTdGF0ZVxuICB9KTtcbiAgb25WaWV3cG9ydENoYW5nZSh2aWV3U3RhdGUpO1xufVxuXG5mdW5jdGlvbiByZW5kZXJCdXR0b24odHlwZSwgbGFiZWwsIGNhbGxiYWNrLCBjaGlsZHJlbikge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLCB7XG4gICAga2V5OiB0eXBlLFxuICAgIGNsYXNzTmFtZTogXCJtYXBib3hnbC1jdHJsLWljb24gbWFwYm94Z2wtY3RybC1cIi5jb25jYXQodHlwZSksXG4gICAgdHlwZTogXCJidXR0b25cIixcbiAgICB0aXRsZTogbGFiZWwsXG4gICAgb25DbGljazogY2FsbGJhY2tcbiAgfSwgY2hpbGRyZW4gfHwgUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge1xuICAgIGNsYXNzTmFtZTogXCJtYXBib3hnbC1jdHJsLWljb25cIixcbiAgICBcImFyaWEtaGlkZGVuXCI6IFwidHJ1ZVwiXG4gIH0pKTtcbn1cblxuZnVuY3Rpb24gcmVuZGVyQ29tcGFzcyhjb250ZXh0KSB7XG4gIHZhciB1aVZlcnNpb24gPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gY29udGV4dC5tYXAgPyBnZXRVSVZlcnNpb24oY29udGV4dC5tYXAudmVyc2lvbikgOiBWRVJTSU9OXzFfNjtcbiAgfSwgW2NvbnRleHQubWFwXSk7XG4gIHZhciBiZWFyaW5nID0gY29udGV4dC52aWV3cG9ydC5iZWFyaW5nO1xuICB2YXIgc3R5bGUgPSB7XG4gICAgdHJhbnNmb3JtOiBcInJvdGF0ZShcIi5jb25jYXQoLWJlYXJpbmcsIFwiZGVnKVwiKVxuICB9O1xuICByZXR1cm4gdWlWZXJzaW9uID09PSBWRVJTSU9OXzFfNiA/IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtcbiAgICBjbGFzc05hbWU6IFwibWFwYm94Z2wtY3RybC1pY29uXCIsXG4gICAgXCJhcmlhLWhpZGRlblwiOiBcInRydWVcIixcbiAgICBzdHlsZTogc3R5bGVcbiAgfSkgOiBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7XG4gICAgY2xhc3NOYW1lOiBcIm1hcGJveGdsLWN0cmwtY29tcGFzcy1hcnJvd1wiLFxuICAgIHN0eWxlOiBzdHlsZVxuICB9KTtcbn1cblxuZnVuY3Rpb24gTmF2aWdhdGlvbkNvbnRyb2wocHJvcHMpIHtcbiAgdmFyIF91c2VNYXBDb250cm9sID0gdXNlTWFwQ29udHJvbChwcm9wcyksXG4gICAgICBjb250ZXh0ID0gX3VzZU1hcENvbnRyb2wuY29udGV4dCxcbiAgICAgIGNvbnRhaW5lclJlZiA9IF91c2VNYXBDb250cm9sLmNvbnRhaW5lclJlZjtcblxuICB2YXIgb25ab29tSW4gPSBmdW5jdGlvbiBvblpvb21JbigpIHtcbiAgICB1cGRhdGVWaWV3cG9ydChjb250ZXh0LCBwcm9wcywge1xuICAgICAgem9vbTogY29udGV4dC52aWV3cG9ydC56b29tICsgMVxuICAgIH0pO1xuICB9O1xuXG4gIHZhciBvblpvb21PdXQgPSBmdW5jdGlvbiBvblpvb21PdXQoKSB7XG4gICAgdXBkYXRlVmlld3BvcnQoY29udGV4dCwgcHJvcHMsIHtcbiAgICAgIHpvb206IGNvbnRleHQudmlld3BvcnQuem9vbSAtIDFcbiAgICB9KTtcbiAgfTtcblxuICB2YXIgb25SZXNldE5vcnRoID0gZnVuY3Rpb24gb25SZXNldE5vcnRoKCkge1xuICAgIHVwZGF0ZVZpZXdwb3J0KGNvbnRleHQsIHByb3BzLCB7XG4gICAgICBiZWFyaW5nOiAwLFxuICAgICAgcGl0Y2g6IDBcbiAgICB9KTtcbiAgfTtcblxuICB2YXIgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lLFxuICAgICAgc2hvd0NvbXBhc3MgPSBwcm9wcy5zaG93Q29tcGFzcyxcbiAgICAgIHNob3dab29tID0gcHJvcHMuc2hvd1pvb20sXG4gICAgICB6b29tSW5MYWJlbCA9IHByb3BzLnpvb21JbkxhYmVsLFxuICAgICAgem9vbU91dExhYmVsID0gcHJvcHMuem9vbU91dExhYmVsLFxuICAgICAgY29tcGFzc0xhYmVsID0gcHJvcHMuY29tcGFzc0xhYmVsO1xuICB2YXIgc3R5bGUgPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX29iamVjdFNwcmVhZCh7XG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJ1xuICAgIH0sIHByb3BzLnN0eWxlKTtcbiAgfSwgW3Byb3BzLnN0eWxlXSk7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICBzdHlsZTogc3R5bGUsXG4gICAgY2xhc3NOYW1lOiBjbGFzc05hbWVcbiAgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgY2xhc3NOYW1lOiBcIm1hcGJveGdsLWN0cmwgbWFwYm94Z2wtY3RybC1ncm91cFwiLFxuICAgIHJlZjogY29udGFpbmVyUmVmXG4gIH0sIHNob3dab29tICYmIHJlbmRlckJ1dHRvbignem9vbS1pbicsIHpvb21JbkxhYmVsLCBvblpvb21JbiksIHNob3dab29tICYmIHJlbmRlckJ1dHRvbignem9vbS1vdXQnLCB6b29tT3V0TGFiZWwsIG9uWm9vbU91dCksIHNob3dDb21wYXNzICYmIHJlbmRlckJ1dHRvbignY29tcGFzcycsIGNvbXBhc3NMYWJlbCwgb25SZXNldE5vcnRoLCByZW5kZXJDb21wYXNzKGNvbnRleHQpKSkpO1xufVxuXG5OYXZpZ2F0aW9uQ29udHJvbC5kZWZhdWx0UHJvcHMgPSBkZWZhdWx0UHJvcHM7XG5leHBvcnQgZGVmYXVsdCBSZWFjdC5tZW1vKE5hdmlnYXRpb25Db250cm9sKTsiLCJpbXBvcnQgX2RlZmluZVByb3BlcnR5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eVwiO1xuaW1wb3J0IF9zbGljZWRUb0FycmF5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zbGljZWRUb0FycmF5XCI7XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkge1xuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7XG5cbiAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTtcbiAgICBpZiAoZW51bWVyYWJsZU9ubHkpIHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTtcbiAgICB9KTtcbiAgICBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7XG4gIH1cblxuICByZXR1cm4ga2V5cztcbn1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTtcblxuICAgIGlmIChpICUgMikge1xuICAgICAgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VTdGF0ZSwgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBtYXBib3hnbCBmcm9tICcuLi91dGlscy9tYXBib3hnbCc7XG5pbXBvcnQgdXNlTWFwQ29udHJvbCwgeyBtYXBDb250cm9sRGVmYXVsdFByb3BzLCBtYXBDb250cm9sUHJvcFR5cGVzIH0gZnJvbSAnLi91c2UtbWFwLWNvbnRyb2wnO1xudmFyIGRlZmF1bHRQcm9wcyA9IE9iamVjdC5hc3NpZ24oe30sIG1hcENvbnRyb2xEZWZhdWx0UHJvcHMsIHtcbiAgY2xhc3NOYW1lOiAnJyxcbiAgbWF4V2lkdGg6IDEwMCxcbiAgdW5pdDogJ21ldHJpYydcbn0pO1xuXG5mdW5jdGlvbiBTY2FsZUNvbnRyb2wocHJvcHMpIHtcbiAgdmFyIF91c2VNYXBDb250cm9sID0gdXNlTWFwQ29udHJvbChwcm9wcyksXG4gICAgICBjb250ZXh0ID0gX3VzZU1hcENvbnRyb2wuY29udGV4dCxcbiAgICAgIGNvbnRhaW5lclJlZiA9IF91c2VNYXBDb250cm9sLmNvbnRhaW5lclJlZjtcblxuICB2YXIgX3VzZVN0YXRlID0gdXNlU3RhdGUobnVsbCksXG4gICAgICBfdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlLCAyKSxcbiAgICAgIG1hcGJveFNjYWxlQ29udHJvbCA9IF91c2VTdGF0ZTJbMF0sXG4gICAgICBjcmVhdGVNYXBib3hTY2FsZUNvbnRyb2wgPSBfdXNlU3RhdGUyWzFdO1xuXG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGNvbnRleHQubWFwKSB7XG4gICAgICB2YXIgY29udHJvbCA9IG5ldyBtYXBib3hnbC5TY2FsZUNvbnRyb2woKTtcbiAgICAgIGNvbnRyb2wuX21hcCA9IGNvbnRleHQubWFwO1xuICAgICAgY29udHJvbC5fY29udGFpbmVyID0gY29udGFpbmVyUmVmLmN1cnJlbnQ7XG4gICAgICBjcmVhdGVNYXBib3hTY2FsZUNvbnRyb2woY29udHJvbCk7XG4gICAgfVxuICB9LCBbY29udGV4dC5tYXBdKTtcblxuICBpZiAobWFwYm94U2NhbGVDb250cm9sKSB7XG4gICAgbWFwYm94U2NhbGVDb250cm9sLm9wdGlvbnMgPSBwcm9wcztcblxuICAgIG1hcGJveFNjYWxlQ29udHJvbC5fb25Nb3ZlKCk7XG4gIH1cblxuICB2YXIgc3R5bGUgPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX29iamVjdFNwcmVhZCh7XG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJ1xuICAgIH0sIHByb3BzLnN0eWxlKTtcbiAgfSwgW3Byb3BzLnN0eWxlXSk7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICBzdHlsZTogc3R5bGUsXG4gICAgY2xhc3NOYW1lOiBwcm9wcy5jbGFzc05hbWVcbiAgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgcmVmOiBjb250YWluZXJSZWYsXG4gICAgY2xhc3NOYW1lOiBcIm1hcGJveGdsLWN0cmwgbWFwYm94Z2wtY3RybC1zY2FsZVwiXG4gIH0pKTtcbn1cblxuU2NhbGVDb250cm9sLmRlZmF1bHRQcm9wcyA9IGRlZmF1bHRQcm9wcztcbmV4cG9ydCBkZWZhdWx0IFJlYWN0Lm1lbW8oU2NhbGVDb250cm9sKTsiLCJpbXBvcnQgX3NsaWNlZFRvQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXlcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdXNlTWFwQ29udHJvbCwgeyBtYXBDb250cm9sUHJvcFR5cGVzIH0gZnJvbSAnLi4vY29tcG9uZW50cy91c2UtbWFwLWNvbnRyb2wnO1xudmFyIHBpeGVsUmF0aW8gPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyB8fCAxO1xudmFyIGRlZmF1bHRQcm9wcyA9IHtcbiAgY2FwdHVyZVNjcm9sbDogZmFsc2UsXG4gIGNhcHR1cmVEcmFnOiBmYWxzZSxcbiAgY2FwdHVyZUNsaWNrOiBmYWxzZSxcbiAgY2FwdHVyZURvdWJsZUNsaWNrOiBmYWxzZSxcbiAgY2FwdHVyZVBvaW50ZXJNb3ZlOiBmYWxzZVxufTtcblxuZnVuY3Rpb24gQ2FudmFzT3ZlcmxheShwcm9wcykge1xuICB2YXIgX3VzZU1hcENvbnRyb2wgPSB1c2VNYXBDb250cm9sKHByb3BzKSxcbiAgICAgIGNvbnRleHQgPSBfdXNlTWFwQ29udHJvbC5jb250ZXh0LFxuICAgICAgY29udGFpbmVyUmVmID0gX3VzZU1hcENvbnRyb2wuY29udGFpbmVyUmVmO1xuXG4gIHZhciBfdXNlU3RhdGUgPSB1c2VTdGF0ZShudWxsKSxcbiAgICAgIF91c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUsIDIpLFxuICAgICAgY3R4ID0gX3VzZVN0YXRlMlswXSxcbiAgICAgIHNldERyYXdpbmdDb250ZXh0ID0gX3VzZVN0YXRlMlsxXTtcblxuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHNldERyYXdpbmdDb250ZXh0KGNvbnRhaW5lclJlZi5jdXJyZW50LmdldENvbnRleHQoJzJkJykpO1xuICB9LCBbXSk7XG4gIHZhciB2aWV3cG9ydCA9IGNvbnRleHQudmlld3BvcnQsXG4gICAgICBpc0RyYWdnaW5nID0gY29udGV4dC5pc0RyYWdnaW5nO1xuXG4gIGlmIChjdHgpIHtcbiAgICBjdHguc2F2ZSgpO1xuICAgIGN0eC5zY2FsZShwaXhlbFJhdGlvLCBwaXhlbFJhdGlvKTtcbiAgICBwcm9wcy5yZWRyYXcoe1xuICAgICAgd2lkdGg6IHZpZXdwb3J0LndpZHRoLFxuICAgICAgaGVpZ2h0OiB2aWV3cG9ydC5oZWlnaHQsXG4gICAgICBjdHg6IGN0eCxcbiAgICAgIGlzRHJhZ2dpbmc6IGlzRHJhZ2dpbmcsXG4gICAgICBwcm9qZWN0OiB2aWV3cG9ydC5wcm9qZWN0LFxuICAgICAgdW5wcm9qZWN0OiB2aWV3cG9ydC51bnByb2plY3RcbiAgICB9KTtcbiAgICBjdHgucmVzdG9yZSgpO1xuICB9XG5cbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIiwge1xuICAgIHJlZjogY29udGFpbmVyUmVmLFxuICAgIHdpZHRoOiB2aWV3cG9ydC53aWR0aCAqIHBpeGVsUmF0aW8sXG4gICAgaGVpZ2h0OiB2aWV3cG9ydC5oZWlnaHQgKiBwaXhlbFJhdGlvLFxuICAgIHN0eWxlOiB7XG4gICAgICB3aWR0aDogXCJcIi5jb25jYXQodmlld3BvcnQud2lkdGgsIFwicHhcIiksXG4gICAgICBoZWlnaHQ6IFwiXCIuY29uY2F0KHZpZXdwb3J0LmhlaWdodCwgXCJweFwiKSxcbiAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgbGVmdDogMCxcbiAgICAgIHRvcDogMFxuICAgIH1cbiAgfSk7XG59XG5cbkNhbnZhc092ZXJsYXkuZGVmYXVsdFByb3BzID0gZGVmYXVsdFByb3BzO1xuZXhwb3J0IGRlZmF1bHQgQ2FudmFzT3ZlcmxheTsiLCJpbXBvcnQgX2RlZmluZVByb3BlcnR5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eVwiO1xuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHtcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXG4gIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7XG4gICAgaWYgKGVudW1lcmFibGVPbmx5KSBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkge1xuICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7XG4gICAgfSk7XG4gICAga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpO1xuICB9XG5cbiAgcmV0dXJuIGtleXM7XG59XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307XG5cbiAgICBpZiAoaSAlIDIpIHtcbiAgICAgIG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB1c2VNYXBDb250cm9sLCB7IG1hcENvbnRyb2xQcm9wVHlwZXMgfSBmcm9tICcuLi9jb21wb25lbnRzL3VzZS1tYXAtY29udHJvbCc7XG52YXIgZGVmYXVsdFByb3BzID0ge1xuICBjYXB0dXJlU2Nyb2xsOiBmYWxzZSxcbiAgY2FwdHVyZURyYWc6IGZhbHNlLFxuICBjYXB0dXJlQ2xpY2s6IGZhbHNlLFxuICBjYXB0dXJlRG91YmxlQ2xpY2s6IGZhbHNlLFxuICBjYXB0dXJlUG9pbnRlck1vdmU6IGZhbHNlXG59O1xuXG5mdW5jdGlvbiBIVE1MT3ZlcmxheShwcm9wcykge1xuICB2YXIgX3VzZU1hcENvbnRyb2wgPSB1c2VNYXBDb250cm9sKHByb3BzKSxcbiAgICAgIGNvbnRleHQgPSBfdXNlTWFwQ29udHJvbC5jb250ZXh0LFxuICAgICAgY29udGFpbmVyUmVmID0gX3VzZU1hcENvbnRyb2wuY29udGFpbmVyUmVmO1xuXG4gIHZhciB2aWV3cG9ydCA9IGNvbnRleHQudmlld3BvcnQsXG4gICAgICBpc0RyYWdnaW5nID0gY29udGV4dC5pc0RyYWdnaW5nO1xuXG4gIHZhciBzdHlsZSA9IF9vYmplY3RTcHJlYWQoe1xuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIGxlZnQ6IDAsXG4gICAgdG9wOiAwLFxuICAgIHdpZHRoOiB2aWV3cG9ydC53aWR0aCxcbiAgICBoZWlnaHQ6IHZpZXdwb3J0LmhlaWdodFxuICB9LCBwcm9wcy5zdHlsZSk7XG5cbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgIHJlZjogY29udGFpbmVyUmVmLFxuICAgIHN0eWxlOiBzdHlsZVxuICB9LCBwcm9wcy5yZWRyYXcoe1xuICAgIHdpZHRoOiB2aWV3cG9ydC53aWR0aCxcbiAgICBoZWlnaHQ6IHZpZXdwb3J0LmhlaWdodCxcbiAgICBpc0RyYWdnaW5nOiBpc0RyYWdnaW5nLFxuICAgIHByb2plY3Q6IHZpZXdwb3J0LnByb2plY3QsXG4gICAgdW5wcm9qZWN0OiB2aWV3cG9ydC51bnByb2plY3RcbiAgfSkpO1xufVxuXG5IVE1MT3ZlcmxheS5kZWZhdWx0UHJvcHMgPSBkZWZhdWx0UHJvcHM7XG5leHBvcnQgZGVmYXVsdCBIVE1MT3ZlcmxheTsiLCJpbXBvcnQgX2RlZmluZVByb3BlcnR5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eVwiO1xuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHtcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXG4gIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7XG4gICAgaWYgKGVudW1lcmFibGVPbmx5KSBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkge1xuICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7XG4gICAgfSk7XG4gICAga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpO1xuICB9XG5cbiAgcmV0dXJuIGtleXM7XG59XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307XG5cbiAgICBpZiAoaSAlIDIpIHtcbiAgICAgIG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB1c2VNYXBDb250cm9sLCB7IG1hcENvbnRyb2xQcm9wVHlwZXMgfSBmcm9tICcuLi9jb21wb25lbnRzL3VzZS1tYXAtY29udHJvbCc7XG52YXIgZGVmYXVsdFByb3BzID0ge1xuICBjYXB0dXJlU2Nyb2xsOiBmYWxzZSxcbiAgY2FwdHVyZURyYWc6IGZhbHNlLFxuICBjYXB0dXJlQ2xpY2s6IGZhbHNlLFxuICBjYXB0dXJlRG91YmxlQ2xpY2s6IGZhbHNlLFxuICBjYXB0dXJlUG9pbnRlck1vdmU6IGZhbHNlXG59O1xuXG5mdW5jdGlvbiBTVkdPdmVybGF5KHByb3BzKSB7XG4gIHZhciBfdXNlTWFwQ29udHJvbCA9IHVzZU1hcENvbnRyb2wocHJvcHMpLFxuICAgICAgY29udGV4dCA9IF91c2VNYXBDb250cm9sLmNvbnRleHQsXG4gICAgICBjb250YWluZXJSZWYgPSBfdXNlTWFwQ29udHJvbC5jb250YWluZXJSZWY7XG5cbiAgdmFyIHZpZXdwb3J0ID0gY29udGV4dC52aWV3cG9ydCxcbiAgICAgIGlzRHJhZ2dpbmcgPSBjb250ZXh0LmlzRHJhZ2dpbmc7XG5cbiAgdmFyIHN0eWxlID0gX29iamVjdFNwcmVhZCh7XG4gICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgbGVmdDogMCxcbiAgICB0b3A6IDBcbiAgfSwgcHJvcHMuc3R5bGUpO1xuXG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtcbiAgICB3aWR0aDogdmlld3BvcnQud2lkdGgsXG4gICAgaGVpZ2h0OiB2aWV3cG9ydC5oZWlnaHQsXG4gICAgcmVmOiBjb250YWluZXJSZWYsXG4gICAgc3R5bGU6IHN0eWxlXG4gIH0sIHByb3BzLnJlZHJhdyh7XG4gICAgd2lkdGg6IHZpZXdwb3J0LndpZHRoLFxuICAgIGhlaWdodDogdmlld3BvcnQuaGVpZ2h0LFxuICAgIGlzRHJhZ2dpbmc6IGlzRHJhZ2dpbmcsXG4gICAgcHJvamVjdDogdmlld3BvcnQucHJvamVjdCxcbiAgICB1bnByb2plY3Q6IHZpZXdwb3J0LnVucHJvamVjdFxuICB9KSk7XG59XG5cblNWR092ZXJsYXkuZGVmYXVsdFByb3BzID0gZGVmYXVsdFByb3BzO1xuZXhwb3J0IGRlZmF1bHQgU1ZHT3ZlcmxheTsiLCJpbXBvcnQgbWFwYm94Z2wgZnJvbSAnLi9tYXBib3hnbCc7XG52YXIgc2V0UlRMVGV4dFBsdWdpbiA9IG1hcGJveGdsID8gbWFwYm94Z2wuc2V0UlRMVGV4dFBsdWdpbiA6IGZ1bmN0aW9uICgpIHt9O1xuZXhwb3J0IGRlZmF1bHQgc2V0UlRMVGV4dFBsdWdpbjsiLCJleHBvcnQgeyBkZWZhdWx0IH0gZnJvbSAnLi9jb21wb25lbnRzL2ludGVyYWN0aXZlLW1hcCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEludGVyYWN0aXZlTWFwIH0gZnJvbSAnLi9jb21wb25lbnRzL2ludGVyYWN0aXZlLW1hcCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFN0YXRpY01hcCB9IGZyb20gJy4vY29tcG9uZW50cy9zdGF0aWMtbWFwJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU291cmNlIH0gZnJvbSAnLi9jb21wb25lbnRzL3NvdXJjZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIExheWVyIH0gZnJvbSAnLi9jb21wb25lbnRzL2xheWVyJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQmFzZUNvbnRyb2wgfSBmcm9tICcuL2NvbXBvbmVudHMvYmFzZS1jb250cm9sJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTWFya2VyIH0gZnJvbSAnLi9jb21wb25lbnRzL21hcmtlcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFBvcHVwIH0gZnJvbSAnLi9jb21wb25lbnRzL3BvcHVwJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQXR0cmlidXRpb25Db250cm9sIH0gZnJvbSAnLi9jb21wb25lbnRzL2F0dHJpYnV0aW9uLWNvbnRyb2wnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBGdWxsc2NyZWVuQ29udHJvbCB9IGZyb20gJy4vY29tcG9uZW50cy9mdWxsc2NyZWVuLWNvbnRyb2wnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBHZW9sb2NhdGVDb250cm9sIH0gZnJvbSAnLi9jb21wb25lbnRzL2dlb2xvY2F0ZS1jb250cm9sJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTmF2aWdhdGlvbkNvbnRyb2wgfSBmcm9tICcuL2NvbXBvbmVudHMvbmF2aWdhdGlvbi1jb250cm9sJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU2NhbGVDb250cm9sIH0gZnJvbSAnLi9jb21wb25lbnRzL3NjYWxlLWNvbnRyb2wnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDYW52YXNPdmVybGF5IH0gZnJvbSAnLi9vdmVybGF5cy9jYW52YXMtb3ZlcmxheSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEhUTUxPdmVybGF5IH0gZnJvbSAnLi9vdmVybGF5cy9odG1sLW92ZXJsYXknO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTVkdPdmVybGF5IH0gZnJvbSAnLi9vdmVybGF5cy9zdmctb3ZlcmxheSc7XG5leHBvcnQgeyBUUkFOU0lUSU9OX0VWRU5UUyB9IGZyb20gJy4vdXRpbHMvdHJhbnNpdGlvbi1tYW5hZ2VyJztcbmV4cG9ydCB7IFRyYW5zaXRpb25JbnRlcnBvbGF0b3IsIExpbmVhckludGVycG9sYXRvciwgVmlld3BvcnRGbHlUb0ludGVycG9sYXRvciBhcyBGbHlUb0ludGVycG9sYXRvciB9IGZyb20gJy4vdXRpbHMvdHJhbnNpdGlvbic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE1hcENvbnRyb2xsZXIgfSBmcm9tICcuL3V0aWxzL21hcC1jb250cm9sbGVyJztcbmV4cG9ydCB7IFdlYk1lcmNhdG9yVmlld3BvcnQgfSBmcm9tICd2aWV3cG9ydC1tZXJjYXRvci1wcm9qZWN0JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc2V0UlRMVGV4dFBsdWdpbiB9IGZyb20gJy4vdXRpbHMvc2V0LXJ0bC10ZXh0LXBsdWdpbic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE1hcENvbnRleHQgfSBmcm9tICcuL2NvbXBvbmVudHMvbWFwLWNvbnRleHQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBfdXNlTWFwQ29udHJvbCB9IGZyb20gJy4vY29tcG9uZW50cy91c2UtbWFwLWNvbnRyb2wnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBfTWFwQ29udGV4dCB9IGZyb20gJy4vY29tcG9uZW50cy9tYXAtY29udGV4dCc7IiwiLyoqXG4gKiBAbW9kdWxlIGhlbHBlcnNcbiAqL1xuXG4vKipcbiAqIEVhcnRoIFJhZGl1cyB1c2VkIHdpdGggdGhlIEhhcnZlc2luZSBmb3JtdWxhIGFuZCBhcHByb3hpbWF0ZXMgdXNpbmcgYSBzcGhlcmljYWwgKG5vbi1lbGxpcHNvaWQpIEVhcnRoLlxuICpcbiAqIEBtZW1iZXJvZiBoZWxwZXJzXG4gKiBAdHlwZSB7bnVtYmVyfVxuICovXG5leHBvcnQgdmFyIGVhcnRoUmFkaXVzID0gNjM3MTAwOC44O1xuLyoqXG4gKiBVbml0IG9mIG1lYXN1cmVtZW50IGZhY3RvcnMgdXNpbmcgYSBzcGhlcmljYWwgKG5vbi1lbGxpcHNvaWQpIGVhcnRoIHJhZGl1cy5cbiAqXG4gKiBAbWVtYmVyb2YgaGVscGVyc1xuICogQHR5cGUge09iamVjdH1cbiAqL1xuXG5leHBvcnQgdmFyIGZhY3RvcnMgPSB7XG4gIGNlbnRpbWV0ZXJzOiBlYXJ0aFJhZGl1cyAqIDEwMCxcbiAgY2VudGltZXRyZXM6IGVhcnRoUmFkaXVzICogMTAwLFxuICBkZWdyZWVzOiBlYXJ0aFJhZGl1cyAvIDExMTMyNSxcbiAgZmVldDogZWFydGhSYWRpdXMgKiAzLjI4MDg0LFxuICBpbmNoZXM6IGVhcnRoUmFkaXVzICogMzkuMzcsXG4gIGtpbG9tZXRlcnM6IGVhcnRoUmFkaXVzIC8gMTAwMCxcbiAga2lsb21ldHJlczogZWFydGhSYWRpdXMgLyAxMDAwLFxuICBtZXRlcnM6IGVhcnRoUmFkaXVzLFxuICBtZXRyZXM6IGVhcnRoUmFkaXVzLFxuICBtaWxlczogZWFydGhSYWRpdXMgLyAxNjA5LjM0NCxcbiAgbWlsbGltZXRlcnM6IGVhcnRoUmFkaXVzICogMTAwMCxcbiAgbWlsbGltZXRyZXM6IGVhcnRoUmFkaXVzICogMTAwMCxcbiAgbmF1dGljYWxtaWxlczogZWFydGhSYWRpdXMgLyAxODUyLFxuICByYWRpYW5zOiAxLFxuICB5YXJkczogZWFydGhSYWRpdXMgKiAxLjA5MzZcbn07XG4vKipcbiAqIFVuaXRzIG9mIG1lYXN1cmVtZW50IGZhY3RvcnMgYmFzZWQgb24gMSBtZXRlci5cbiAqXG4gKiBAbWVtYmVyb2YgaGVscGVyc1xuICogQHR5cGUge09iamVjdH1cbiAqL1xuXG5leHBvcnQgdmFyIHVuaXRzRmFjdG9ycyA9IHtcbiAgY2VudGltZXRlcnM6IDEwMCxcbiAgY2VudGltZXRyZXM6IDEwMCxcbiAgZGVncmVlczogMSAvIDExMTMyNSxcbiAgZmVldDogMy4yODA4NCxcbiAgaW5jaGVzOiAzOS4zNyxcbiAga2lsb21ldGVyczogMSAvIDEwMDAsXG4gIGtpbG9tZXRyZXM6IDEgLyAxMDAwLFxuICBtZXRlcnM6IDEsXG4gIG1ldHJlczogMSxcbiAgbWlsZXM6IDEgLyAxNjA5LjM0NCxcbiAgbWlsbGltZXRlcnM6IDEwMDAsXG4gIG1pbGxpbWV0cmVzOiAxMDAwLFxuICBuYXV0aWNhbG1pbGVzOiAxIC8gMTg1MixcbiAgcmFkaWFuczogMSAvIGVhcnRoUmFkaXVzLFxuICB5YXJkczogMS4wOTM2MTMzXG59O1xuLyoqXG4gKiBBcmVhIG9mIG1lYXN1cmVtZW50IGZhY3RvcnMgYmFzZWQgb24gMSBzcXVhcmUgbWV0ZXIuXG4gKlxuICogQG1lbWJlcm9mIGhlbHBlcnNcbiAqIEB0eXBlIHtPYmplY3R9XG4gKi9cblxuZXhwb3J0IHZhciBhcmVhRmFjdG9ycyA9IHtcbiAgYWNyZXM6IDAuMDAwMjQ3MTA1LFxuICBjZW50aW1ldGVyczogMTAwMDAsXG4gIGNlbnRpbWV0cmVzOiAxMDAwMCxcbiAgZmVldDogMTAuNzYzOTEwNDE3LFxuICBoZWN0YXJlczogMC4wMDAxLFxuICBpbmNoZXM6IDE1NTAuMDAzMTAwMDA2LFxuICBraWxvbWV0ZXJzOiAwLjAwMDAwMSxcbiAga2lsb21ldHJlczogMC4wMDAwMDEsXG4gIG1ldGVyczogMSxcbiAgbWV0cmVzOiAxLFxuICBtaWxlczogMy44NmUtNyxcbiAgbWlsbGltZXRlcnM6IDEwMDAwMDAsXG4gIG1pbGxpbWV0cmVzOiAxMDAwMDAwLFxuICB5YXJkczogMS4xOTU5OTAwNDZcbn07XG4vKipcbiAqIFdyYXBzIGEgR2VvSlNPTiB7QGxpbmsgR2VvbWV0cnl9IGluIGEgR2VvSlNPTiB7QGxpbmsgRmVhdHVyZX0uXG4gKlxuICogQG5hbWUgZmVhdHVyZVxuICogQHBhcmFtIHtHZW9tZXRyeX0gZ2VvbWV0cnkgaW5wdXQgZ2VvbWV0cnlcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcHJvcGVydGllcz17fV0gYW4gT2JqZWN0IG9mIGtleS12YWx1ZSBwYWlycyB0byBhZGQgYXMgcHJvcGVydGllc1xuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBPcHRpb25hbCBQYXJhbWV0ZXJzXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IFtvcHRpb25zLmJib3hdIEJvdW5kaW5nIEJveCBBcnJheSBbd2VzdCwgc291dGgsIGVhc3QsIG5vcnRoXSBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW29wdGlvbnMuaWRdIElkZW50aWZpZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlXG4gKiBAcmV0dXJucyB7RmVhdHVyZX0gYSBHZW9KU09OIEZlYXR1cmVcbiAqIEBleGFtcGxlXG4gKiB2YXIgZ2VvbWV0cnkgPSB7XG4gKiAgIFwidHlwZVwiOiBcIlBvaW50XCIsXG4gKiAgIFwiY29vcmRpbmF0ZXNcIjogWzExMCwgNTBdXG4gKiB9O1xuICpcbiAqIHZhciBmZWF0dXJlID0gdHVyZi5mZWF0dXJlKGdlb21ldHJ5KTtcbiAqXG4gKiAvLz1mZWF0dXJlXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZlYXR1cmUoZ2VvbSwgcHJvcGVydGllcywgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgdmFyIGZlYXQgPSB7XG4gICAgdHlwZTogXCJGZWF0dXJlXCJcbiAgfTtcblxuICBpZiAob3B0aW9ucy5pZCA9PT0gMCB8fCBvcHRpb25zLmlkKSB7XG4gICAgZmVhdC5pZCA9IG9wdGlvbnMuaWQ7XG4gIH1cblxuICBpZiAob3B0aW9ucy5iYm94KSB7XG4gICAgZmVhdC5iYm94ID0gb3B0aW9ucy5iYm94O1xuICB9XG5cbiAgZmVhdC5wcm9wZXJ0aWVzID0gcHJvcGVydGllcyB8fCB7fTtcbiAgZmVhdC5nZW9tZXRyeSA9IGdlb207XG4gIHJldHVybiBmZWF0O1xufVxuLyoqXG4gKiBDcmVhdGVzIGEgR2VvSlNPTiB7QGxpbmsgR2VvbWV0cnl9IGZyb20gYSBHZW9tZXRyeSBzdHJpbmcgdHlwZSAmIGNvb3JkaW5hdGVzLlxuICogRm9yIEdlb21ldHJ5Q29sbGVjdGlvbiB0eXBlIHVzZSBgaGVscGVycy5nZW9tZXRyeUNvbGxlY3Rpb25gXG4gKlxuICogQG5hbWUgZ2VvbWV0cnlcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIEdlb21ldHJ5IFR5cGVcbiAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gY29vcmRpbmF0ZXMgQ29vcmRpbmF0ZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gT3B0aW9uYWwgUGFyYW1ldGVyc1xuICogQHJldHVybnMge0dlb21ldHJ5fSBhIEdlb0pTT04gR2VvbWV0cnlcbiAqIEBleGFtcGxlXG4gKiB2YXIgdHlwZSA9IFwiUG9pbnRcIjtcbiAqIHZhciBjb29yZGluYXRlcyA9IFsxMTAsIDUwXTtcbiAqIHZhciBnZW9tZXRyeSA9IHR1cmYuZ2VvbWV0cnkodHlwZSwgY29vcmRpbmF0ZXMpO1xuICogLy8gPT4gZ2VvbWV0cnlcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZ2VvbWV0cnkodHlwZSwgY29vcmRpbmF0ZXMsIF9vcHRpb25zKSB7XG4gIGlmIChfb3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgX29wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgXCJQb2ludFwiOlxuICAgICAgcmV0dXJuIHBvaW50KGNvb3JkaW5hdGVzKS5nZW9tZXRyeTtcblxuICAgIGNhc2UgXCJMaW5lU3RyaW5nXCI6XG4gICAgICByZXR1cm4gbGluZVN0cmluZyhjb29yZGluYXRlcykuZ2VvbWV0cnk7XG5cbiAgICBjYXNlIFwiUG9seWdvblwiOlxuICAgICAgcmV0dXJuIHBvbHlnb24oY29vcmRpbmF0ZXMpLmdlb21ldHJ5O1xuXG4gICAgY2FzZSBcIk11bHRpUG9pbnRcIjpcbiAgICAgIHJldHVybiBtdWx0aVBvaW50KGNvb3JkaW5hdGVzKS5nZW9tZXRyeTtcblxuICAgIGNhc2UgXCJNdWx0aUxpbmVTdHJpbmdcIjpcbiAgICAgIHJldHVybiBtdWx0aUxpbmVTdHJpbmcoY29vcmRpbmF0ZXMpLmdlb21ldHJ5O1xuXG4gICAgY2FzZSBcIk11bHRpUG9seWdvblwiOlxuICAgICAgcmV0dXJuIG11bHRpUG9seWdvbihjb29yZGluYXRlcykuZ2VvbWV0cnk7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKHR5cGUgKyBcIiBpcyBpbnZhbGlkXCIpO1xuICB9XG59XG4vKipcbiAqIENyZWF0ZXMgYSB7QGxpbmsgUG9pbnR9IHtAbGluayBGZWF0dXJlfSBmcm9tIGEgUG9zaXRpb24uXG4gKlxuICogQG5hbWUgcG9pbnRcbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gY29vcmRpbmF0ZXMgbG9uZ2l0dWRlLCBsYXRpdHVkZSBwb3NpdGlvbiAoZWFjaCBpbiBkZWNpbWFsIGRlZ3JlZXMpXG4gKiBAcGFyYW0ge09iamVjdH0gW3Byb3BlcnRpZXM9e31dIGFuIE9iamVjdCBvZiBrZXktdmFsdWUgcGFpcnMgdG8gYWRkIGFzIHByb3BlcnRpZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gT3B0aW9uYWwgUGFyYW1ldGVyc1xuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBbb3B0aW9ucy5iYm94XSBCb3VuZGluZyBCb3ggQXJyYXkgW3dlc3QsIHNvdXRoLCBlYXN0LCBub3J0aF0gYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IFtvcHRpb25zLmlkXSBJZGVudGlmaWVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZVxuICogQHJldHVybnMge0ZlYXR1cmU8UG9pbnQ+fSBhIFBvaW50IGZlYXR1cmVcbiAqIEBleGFtcGxlXG4gKiB2YXIgcG9pbnQgPSB0dXJmLnBvaW50KFstNzUuMzQzLCAzOS45ODRdKTtcbiAqXG4gKiAvLz1wb2ludFxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBwb2ludChjb29yZGluYXRlcywgcHJvcGVydGllcywgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgaWYgKCFjb29yZGluYXRlcykge1xuICAgIHRocm93IG5ldyBFcnJvcihcImNvb3JkaW5hdGVzIGlzIHJlcXVpcmVkXCIpO1xuICB9XG5cbiAgaWYgKCFBcnJheS5pc0FycmF5KGNvb3JkaW5hdGVzKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcImNvb3JkaW5hdGVzIG11c3QgYmUgYW4gQXJyYXlcIik7XG4gIH1cblxuICBpZiAoY29vcmRpbmF0ZXMubGVuZ3RoIDwgMikge1xuICAgIHRocm93IG5ldyBFcnJvcihcImNvb3JkaW5hdGVzIG11c3QgYmUgYXQgbGVhc3QgMiBudW1iZXJzIGxvbmdcIik7XG4gIH1cblxuICBpZiAoIWlzTnVtYmVyKGNvb3JkaW5hdGVzWzBdKSB8fCAhaXNOdW1iZXIoY29vcmRpbmF0ZXNbMV0pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiY29vcmRpbmF0ZXMgbXVzdCBjb250YWluIG51bWJlcnNcIik7XG4gIH1cblxuICB2YXIgZ2VvbSA9IHtcbiAgICB0eXBlOiBcIlBvaW50XCIsXG4gICAgY29vcmRpbmF0ZXM6IGNvb3JkaW5hdGVzXG4gIH07XG4gIHJldHVybiBmZWF0dXJlKGdlb20sIHByb3BlcnRpZXMsIG9wdGlvbnMpO1xufVxuLyoqXG4gKiBDcmVhdGVzIGEge0BsaW5rIFBvaW50fSB7QGxpbmsgRmVhdHVyZUNvbGxlY3Rpb259IGZyb20gYW4gQXJyYXkgb2YgUG9pbnQgY29vcmRpbmF0ZXMuXG4gKlxuICogQG5hbWUgcG9pbnRzXG4gKiBAcGFyYW0ge0FycmF5PEFycmF5PG51bWJlcj4+fSBjb29yZGluYXRlcyBhbiBhcnJheSBvZiBQb2ludHNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcHJvcGVydGllcz17fV0gVHJhbnNsYXRlIHRoZXNlIHByb3BlcnRpZXMgdG8gZWFjaCBGZWF0dXJlXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIE9wdGlvbmFsIFBhcmFtZXRlcnNcbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gW29wdGlvbnMuYmJveF0gQm91bmRpbmcgQm94IEFycmF5IFt3ZXN0LCBzb3V0aCwgZWFzdCwgbm9ydGhdXG4gKiBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVDb2xsZWN0aW9uXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IFtvcHRpb25zLmlkXSBJZGVudGlmaWVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZUNvbGxlY3Rpb25cbiAqIEByZXR1cm5zIHtGZWF0dXJlQ29sbGVjdGlvbjxQb2ludD59IFBvaW50IEZlYXR1cmVcbiAqIEBleGFtcGxlXG4gKiB2YXIgcG9pbnRzID0gdHVyZi5wb2ludHMoW1xuICogICBbLTc1LCAzOV0sXG4gKiAgIFstODAsIDQ1XSxcbiAqICAgWy03OCwgNTBdXG4gKiBdKTtcbiAqXG4gKiAvLz1wb2ludHNcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcG9pbnRzKGNvb3JkaW5hdGVzLCBwcm9wZXJ0aWVzLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cblxuICByZXR1cm4gZmVhdHVyZUNvbGxlY3Rpb24oY29vcmRpbmF0ZXMubWFwKGZ1bmN0aW9uIChjb29yZHMpIHtcbiAgICByZXR1cm4gcG9pbnQoY29vcmRzLCBwcm9wZXJ0aWVzKTtcbiAgfSksIG9wdGlvbnMpO1xufVxuLyoqXG4gKiBDcmVhdGVzIGEge0BsaW5rIFBvbHlnb259IHtAbGluayBGZWF0dXJlfSBmcm9tIGFuIEFycmF5IG9mIExpbmVhclJpbmdzLlxuICpcbiAqIEBuYW1lIHBvbHlnb25cbiAqIEBwYXJhbSB7QXJyYXk8QXJyYXk8QXJyYXk8bnVtYmVyPj4+fSBjb29yZGluYXRlcyBhbiBhcnJheSBvZiBMaW5lYXJSaW5nc1xuICogQHBhcmFtIHtPYmplY3R9IFtwcm9wZXJ0aWVzPXt9XSBhbiBPYmplY3Qgb2Yga2V5LXZhbHVlIHBhaXJzIHRvIGFkZCBhcyBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIE9wdGlvbmFsIFBhcmFtZXRlcnNcbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gW29wdGlvbnMuYmJveF0gQm91bmRpbmcgQm94IEFycmF5IFt3ZXN0LCBzb3V0aCwgZWFzdCwgbm9ydGhdIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZVxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBbb3B0aW9ucy5pZF0gSWRlbnRpZmllciBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVcbiAqIEByZXR1cm5zIHtGZWF0dXJlPFBvbHlnb24+fSBQb2x5Z29uIEZlYXR1cmVcbiAqIEBleGFtcGxlXG4gKiB2YXIgcG9seWdvbiA9IHR1cmYucG9seWdvbihbW1stNSwgNTJdLCBbLTQsIDU2XSwgWy0yLCA1MV0sIFstNywgNTRdLCBbLTUsIDUyXV1dLCB7IG5hbWU6ICdwb2x5MScgfSk7XG4gKlxuICogLy89cG9seWdvblxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBwb2x5Z29uKGNvb3JkaW5hdGVzLCBwcm9wZXJ0aWVzLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cblxuICBmb3IgKHZhciBfaSA9IDAsIGNvb3JkaW5hdGVzXzEgPSBjb29yZGluYXRlczsgX2kgPCBjb29yZGluYXRlc18xLmxlbmd0aDsgX2krKykge1xuICAgIHZhciByaW5nID0gY29vcmRpbmF0ZXNfMVtfaV07XG5cbiAgICBpZiAocmluZy5sZW5ndGggPCA0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFYWNoIExpbmVhclJpbmcgb2YgYSBQb2x5Z29uIG11c3QgaGF2ZSA0IG9yIG1vcmUgUG9zaXRpb25zLlwiKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IHJpbmdbcmluZy5sZW5ndGggLSAxXS5sZW5ndGg7IGorKykge1xuICAgICAgLy8gQ2hlY2sgaWYgZmlyc3QgcG9pbnQgb2YgUG9seWdvbiBjb250YWlucyB0d28gbnVtYmVyc1xuICAgICAgaWYgKHJpbmdbcmluZy5sZW5ndGggLSAxXVtqXSAhPT0gcmluZ1swXVtqXSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJGaXJzdCBhbmQgbGFzdCBQb3NpdGlvbiBhcmUgbm90IGVxdWl2YWxlbnQuXCIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBnZW9tID0ge1xuICAgIHR5cGU6IFwiUG9seWdvblwiLFxuICAgIGNvb3JkaW5hdGVzOiBjb29yZGluYXRlc1xuICB9O1xuICByZXR1cm4gZmVhdHVyZShnZW9tLCBwcm9wZXJ0aWVzLCBvcHRpb25zKTtcbn1cbi8qKlxuICogQ3JlYXRlcyBhIHtAbGluayBQb2x5Z29ufSB7QGxpbmsgRmVhdHVyZUNvbGxlY3Rpb259IGZyb20gYW4gQXJyYXkgb2YgUG9seWdvbiBjb29yZGluYXRlcy5cbiAqXG4gKiBAbmFtZSBwb2x5Z29uc1xuICogQHBhcmFtIHtBcnJheTxBcnJheTxBcnJheTxBcnJheTxudW1iZXI+Pj4+fSBjb29yZGluYXRlcyBhbiBhcnJheSBvZiBQb2x5Z29uIGNvb3JkaW5hdGVzXG4gKiBAcGFyYW0ge09iamVjdH0gW3Byb3BlcnRpZXM9e31dIGFuIE9iamVjdCBvZiBrZXktdmFsdWUgcGFpcnMgdG8gYWRkIGFzIHByb3BlcnRpZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gT3B0aW9uYWwgUGFyYW1ldGVyc1xuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBbb3B0aW9ucy5iYm94XSBCb3VuZGluZyBCb3ggQXJyYXkgW3dlc3QsIHNvdXRoLCBlYXN0LCBub3J0aF0gYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IFtvcHRpb25zLmlkXSBJZGVudGlmaWVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZUNvbGxlY3Rpb25cbiAqIEByZXR1cm5zIHtGZWF0dXJlQ29sbGVjdGlvbjxQb2x5Z29uPn0gUG9seWdvbiBGZWF0dXJlQ29sbGVjdGlvblxuICogQGV4YW1wbGVcbiAqIHZhciBwb2x5Z29ucyA9IHR1cmYucG9seWdvbnMoW1xuICogICBbW1stNSwgNTJdLCBbLTQsIDU2XSwgWy0yLCA1MV0sIFstNywgNTRdLCBbLTUsIDUyXV1dLFxuICogICBbW1stMTUsIDQyXSwgWy0xNCwgNDZdLCBbLTEyLCA0MV0sIFstMTcsIDQ0XSwgWy0xNSwgNDJdXV0sXG4gKiBdKTtcbiAqXG4gKiAvLz1wb2x5Z29uc1xuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBwb2x5Z29ucyhjb29yZGluYXRlcywgcHJvcGVydGllcywgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgcmV0dXJuIGZlYXR1cmVDb2xsZWN0aW9uKGNvb3JkaW5hdGVzLm1hcChmdW5jdGlvbiAoY29vcmRzKSB7XG4gICAgcmV0dXJuIHBvbHlnb24oY29vcmRzLCBwcm9wZXJ0aWVzKTtcbiAgfSksIG9wdGlvbnMpO1xufVxuLyoqXG4gKiBDcmVhdGVzIGEge0BsaW5rIExpbmVTdHJpbmd9IHtAbGluayBGZWF0dXJlfSBmcm9tIGFuIEFycmF5IG9mIFBvc2l0aW9ucy5cbiAqXG4gKiBAbmFtZSBsaW5lU3RyaW5nXG4gKiBAcGFyYW0ge0FycmF5PEFycmF5PG51bWJlcj4+fSBjb29yZGluYXRlcyBhbiBhcnJheSBvZiBQb3NpdGlvbnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcHJvcGVydGllcz17fV0gYW4gT2JqZWN0IG9mIGtleS12YWx1ZSBwYWlycyB0byBhZGQgYXMgcHJvcGVydGllc1xuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBPcHRpb25hbCBQYXJhbWV0ZXJzXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IFtvcHRpb25zLmJib3hdIEJvdW5kaW5nIEJveCBBcnJheSBbd2VzdCwgc291dGgsIGVhc3QsIG5vcnRoXSBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW29wdGlvbnMuaWRdIElkZW50aWZpZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlXG4gKiBAcmV0dXJucyB7RmVhdHVyZTxMaW5lU3RyaW5nPn0gTGluZVN0cmluZyBGZWF0dXJlXG4gKiBAZXhhbXBsZVxuICogdmFyIGxpbmVzdHJpbmcxID0gdHVyZi5saW5lU3RyaW5nKFtbLTI0LCA2M10sIFstMjMsIDYwXSwgWy0yNSwgNjVdLCBbLTIwLCA2OV1dLCB7bmFtZTogJ2xpbmUgMSd9KTtcbiAqIHZhciBsaW5lc3RyaW5nMiA9IHR1cmYubGluZVN0cmluZyhbWy0xNCwgNDNdLCBbLTEzLCA0MF0sIFstMTUsIDQ1XSwgWy0xMCwgNDldXSwge25hbWU6ICdsaW5lIDInfSk7XG4gKlxuICogLy89bGluZXN0cmluZzFcbiAqIC8vPWxpbmVzdHJpbmcyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGxpbmVTdHJpbmcoY29vcmRpbmF0ZXMsIHByb3BlcnRpZXMsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIGlmIChjb29yZGluYXRlcy5sZW5ndGggPCAyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiY29vcmRpbmF0ZXMgbXVzdCBiZSBhbiBhcnJheSBvZiB0d28gb3IgbW9yZSBwb3NpdGlvbnNcIik7XG4gIH1cblxuICB2YXIgZ2VvbSA9IHtcbiAgICB0eXBlOiBcIkxpbmVTdHJpbmdcIixcbiAgICBjb29yZGluYXRlczogY29vcmRpbmF0ZXNcbiAgfTtcbiAgcmV0dXJuIGZlYXR1cmUoZ2VvbSwgcHJvcGVydGllcywgb3B0aW9ucyk7XG59XG4vKipcbiAqIENyZWF0ZXMgYSB7QGxpbmsgTGluZVN0cmluZ30ge0BsaW5rIEZlYXR1cmVDb2xsZWN0aW9ufSBmcm9tIGFuIEFycmF5IG9mIExpbmVTdHJpbmcgY29vcmRpbmF0ZXMuXG4gKlxuICogQG5hbWUgbGluZVN0cmluZ3NcbiAqIEBwYXJhbSB7QXJyYXk8QXJyYXk8QXJyYXk8bnVtYmVyPj4+fSBjb29yZGluYXRlcyBhbiBhcnJheSBvZiBMaW5lYXJSaW5nc1xuICogQHBhcmFtIHtPYmplY3R9IFtwcm9wZXJ0aWVzPXt9XSBhbiBPYmplY3Qgb2Yga2V5LXZhbHVlIHBhaXJzIHRvIGFkZCBhcyBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIE9wdGlvbmFsIFBhcmFtZXRlcnNcbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gW29wdGlvbnMuYmJveF0gQm91bmRpbmcgQm94IEFycmF5IFt3ZXN0LCBzb3V0aCwgZWFzdCwgbm9ydGhdXG4gKiBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVDb2xsZWN0aW9uXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IFtvcHRpb25zLmlkXSBJZGVudGlmaWVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZUNvbGxlY3Rpb25cbiAqIEByZXR1cm5zIHtGZWF0dXJlQ29sbGVjdGlvbjxMaW5lU3RyaW5nPn0gTGluZVN0cmluZyBGZWF0dXJlQ29sbGVjdGlvblxuICogQGV4YW1wbGVcbiAqIHZhciBsaW5lc3RyaW5ncyA9IHR1cmYubGluZVN0cmluZ3MoW1xuICogICBbWy0yNCwgNjNdLCBbLTIzLCA2MF0sIFstMjUsIDY1XSwgWy0yMCwgNjldXSxcbiAqICAgW1stMTQsIDQzXSwgWy0xMywgNDBdLCBbLTE1LCA0NV0sIFstMTAsIDQ5XV1cbiAqIF0pO1xuICpcbiAqIC8vPWxpbmVzdHJpbmdzXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGxpbmVTdHJpbmdzKGNvb3JkaW5hdGVzLCBwcm9wZXJ0aWVzLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cblxuICByZXR1cm4gZmVhdHVyZUNvbGxlY3Rpb24oY29vcmRpbmF0ZXMubWFwKGZ1bmN0aW9uIChjb29yZHMpIHtcbiAgICByZXR1cm4gbGluZVN0cmluZyhjb29yZHMsIHByb3BlcnRpZXMpO1xuICB9KSwgb3B0aW9ucyk7XG59XG4vKipcbiAqIFRha2VzIG9uZSBvciBtb3JlIHtAbGluayBGZWF0dXJlfEZlYXR1cmVzfSBhbmQgY3JlYXRlcyBhIHtAbGluayBGZWF0dXJlQ29sbGVjdGlvbn0uXG4gKlxuICogQG5hbWUgZmVhdHVyZUNvbGxlY3Rpb25cbiAqIEBwYXJhbSB7RmVhdHVyZVtdfSBmZWF0dXJlcyBpbnB1dCBmZWF0dXJlc1xuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBPcHRpb25hbCBQYXJhbWV0ZXJzXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IFtvcHRpb25zLmJib3hdIEJvdW5kaW5nIEJveCBBcnJheSBbd2VzdCwgc291dGgsIGVhc3QsIG5vcnRoXSBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW29wdGlvbnMuaWRdIElkZW50aWZpZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlXG4gKiBAcmV0dXJucyB7RmVhdHVyZUNvbGxlY3Rpb259IEZlYXR1cmVDb2xsZWN0aW9uIG9mIEZlYXR1cmVzXG4gKiBAZXhhbXBsZVxuICogdmFyIGxvY2F0aW9uQSA9IHR1cmYucG9pbnQoWy03NS4zNDMsIDM5Ljk4NF0sIHtuYW1lOiAnTG9jYXRpb24gQSd9KTtcbiAqIHZhciBsb2NhdGlvbkIgPSB0dXJmLnBvaW50KFstNzUuODMzLCAzOS4yODRdLCB7bmFtZTogJ0xvY2F0aW9uIEInfSk7XG4gKiB2YXIgbG9jYXRpb25DID0gdHVyZi5wb2ludChbLTc1LjUzNCwgMzkuMTIzXSwge25hbWU6ICdMb2NhdGlvbiBDJ30pO1xuICpcbiAqIHZhciBjb2xsZWN0aW9uID0gdHVyZi5mZWF0dXJlQ29sbGVjdGlvbihbXG4gKiAgIGxvY2F0aW9uQSxcbiAqICAgbG9jYXRpb25CLFxuICogICBsb2NhdGlvbkNcbiAqIF0pO1xuICpcbiAqIC8vPWNvbGxlY3Rpb25cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZmVhdHVyZUNvbGxlY3Rpb24oZmVhdHVyZXMsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIHZhciBmYyA9IHtcbiAgICB0eXBlOiBcIkZlYXR1cmVDb2xsZWN0aW9uXCJcbiAgfTtcblxuICBpZiAob3B0aW9ucy5pZCkge1xuICAgIGZjLmlkID0gb3B0aW9ucy5pZDtcbiAgfVxuXG4gIGlmIChvcHRpb25zLmJib3gpIHtcbiAgICBmYy5iYm94ID0gb3B0aW9ucy5iYm94O1xuICB9XG5cbiAgZmMuZmVhdHVyZXMgPSBmZWF0dXJlcztcbiAgcmV0dXJuIGZjO1xufVxuLyoqXG4gKiBDcmVhdGVzIGEge0BsaW5rIEZlYXR1cmU8TXVsdGlMaW5lU3RyaW5nPn0gYmFzZWQgb24gYVxuICogY29vcmRpbmF0ZSBhcnJheS4gUHJvcGVydGllcyBjYW4gYmUgYWRkZWQgb3B0aW9uYWxseS5cbiAqXG4gKiBAbmFtZSBtdWx0aUxpbmVTdHJpbmdcbiAqIEBwYXJhbSB7QXJyYXk8QXJyYXk8QXJyYXk8bnVtYmVyPj4+fSBjb29yZGluYXRlcyBhbiBhcnJheSBvZiBMaW5lU3RyaW5nc1xuICogQHBhcmFtIHtPYmplY3R9IFtwcm9wZXJ0aWVzPXt9XSBhbiBPYmplY3Qgb2Yga2V5LXZhbHVlIHBhaXJzIHRvIGFkZCBhcyBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIE9wdGlvbmFsIFBhcmFtZXRlcnNcbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gW29wdGlvbnMuYmJveF0gQm91bmRpbmcgQm94IEFycmF5IFt3ZXN0LCBzb3V0aCwgZWFzdCwgbm9ydGhdIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZVxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBbb3B0aW9ucy5pZF0gSWRlbnRpZmllciBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVcbiAqIEByZXR1cm5zIHtGZWF0dXJlPE11bHRpTGluZVN0cmluZz59IGEgTXVsdGlMaW5lU3RyaW5nIGZlYXR1cmVcbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiBubyBjb29yZGluYXRlcyBhcmUgcGFzc2VkXG4gKiBAZXhhbXBsZVxuICogdmFyIG11bHRpTGluZSA9IHR1cmYubXVsdGlMaW5lU3RyaW5nKFtbWzAsMF0sWzEwLDEwXV1dKTtcbiAqXG4gKiAvLz1tdWx0aUxpbmVcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbXVsdGlMaW5lU3RyaW5nKGNvb3JkaW5hdGVzLCBwcm9wZXJ0aWVzLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cblxuICB2YXIgZ2VvbSA9IHtcbiAgICB0eXBlOiBcIk11bHRpTGluZVN0cmluZ1wiLFxuICAgIGNvb3JkaW5hdGVzOiBjb29yZGluYXRlc1xuICB9O1xuICByZXR1cm4gZmVhdHVyZShnZW9tLCBwcm9wZXJ0aWVzLCBvcHRpb25zKTtcbn1cbi8qKlxuICogQ3JlYXRlcyBhIHtAbGluayBGZWF0dXJlPE11bHRpUG9pbnQ+fSBiYXNlZCBvbiBhXG4gKiBjb29yZGluYXRlIGFycmF5LiBQcm9wZXJ0aWVzIGNhbiBiZSBhZGRlZCBvcHRpb25hbGx5LlxuICpcbiAqIEBuYW1lIG11bHRpUG9pbnRcbiAqIEBwYXJhbSB7QXJyYXk8QXJyYXk8bnVtYmVyPj59IGNvb3JkaW5hdGVzIGFuIGFycmF5IG9mIFBvc2l0aW9uc1xuICogQHBhcmFtIHtPYmplY3R9IFtwcm9wZXJ0aWVzPXt9XSBhbiBPYmplY3Qgb2Yga2V5LXZhbHVlIHBhaXJzIHRvIGFkZCBhcyBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIE9wdGlvbmFsIFBhcmFtZXRlcnNcbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gW29wdGlvbnMuYmJveF0gQm91bmRpbmcgQm94IEFycmF5IFt3ZXN0LCBzb3V0aCwgZWFzdCwgbm9ydGhdIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZVxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBbb3B0aW9ucy5pZF0gSWRlbnRpZmllciBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVcbiAqIEByZXR1cm5zIHtGZWF0dXJlPE11bHRpUG9pbnQ+fSBhIE11bHRpUG9pbnQgZmVhdHVyZVxuICogQHRocm93cyB7RXJyb3J9IGlmIG5vIGNvb3JkaW5hdGVzIGFyZSBwYXNzZWRcbiAqIEBleGFtcGxlXG4gKiB2YXIgbXVsdGlQdCA9IHR1cmYubXVsdGlQb2ludChbWzAsMF0sWzEwLDEwXV0pO1xuICpcbiAqIC8vPW11bHRpUHRcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbXVsdGlQb2ludChjb29yZGluYXRlcywgcHJvcGVydGllcywgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgdmFyIGdlb20gPSB7XG4gICAgdHlwZTogXCJNdWx0aVBvaW50XCIsXG4gICAgY29vcmRpbmF0ZXM6IGNvb3JkaW5hdGVzXG4gIH07XG4gIHJldHVybiBmZWF0dXJlKGdlb20sIHByb3BlcnRpZXMsIG9wdGlvbnMpO1xufVxuLyoqXG4gKiBDcmVhdGVzIGEge0BsaW5rIEZlYXR1cmU8TXVsdGlQb2x5Z29uPn0gYmFzZWQgb24gYVxuICogY29vcmRpbmF0ZSBhcnJheS4gUHJvcGVydGllcyBjYW4gYmUgYWRkZWQgb3B0aW9uYWxseS5cbiAqXG4gKiBAbmFtZSBtdWx0aVBvbHlnb25cbiAqIEBwYXJhbSB7QXJyYXk8QXJyYXk8QXJyYXk8QXJyYXk8bnVtYmVyPj4+Pn0gY29vcmRpbmF0ZXMgYW4gYXJyYXkgb2YgUG9seWdvbnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcHJvcGVydGllcz17fV0gYW4gT2JqZWN0IG9mIGtleS12YWx1ZSBwYWlycyB0byBhZGQgYXMgcHJvcGVydGllc1xuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBPcHRpb25hbCBQYXJhbWV0ZXJzXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IFtvcHRpb25zLmJib3hdIEJvdW5kaW5nIEJveCBBcnJheSBbd2VzdCwgc291dGgsIGVhc3QsIG5vcnRoXSBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW29wdGlvbnMuaWRdIElkZW50aWZpZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlXG4gKiBAcmV0dXJucyB7RmVhdHVyZTxNdWx0aVBvbHlnb24+fSBhIG11bHRpcG9seWdvbiBmZWF0dXJlXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgbm8gY29vcmRpbmF0ZXMgYXJlIHBhc3NlZFxuICogQGV4YW1wbGVcbiAqIHZhciBtdWx0aVBvbHkgPSB0dXJmLm11bHRpUG9seWdvbihbW1tbMCwwXSxbMCwxMF0sWzEwLDEwXSxbMTAsMF0sWzAsMF1dXV0pO1xuICpcbiAqIC8vPW11bHRpUG9seVxuICpcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbXVsdGlQb2x5Z29uKGNvb3JkaW5hdGVzLCBwcm9wZXJ0aWVzLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cblxuICB2YXIgZ2VvbSA9IHtcbiAgICB0eXBlOiBcIk11bHRpUG9seWdvblwiLFxuICAgIGNvb3JkaW5hdGVzOiBjb29yZGluYXRlc1xuICB9O1xuICByZXR1cm4gZmVhdHVyZShnZW9tLCBwcm9wZXJ0aWVzLCBvcHRpb25zKTtcbn1cbi8qKlxuICogQ3JlYXRlcyBhIHtAbGluayBGZWF0dXJlPEdlb21ldHJ5Q29sbGVjdGlvbj59IGJhc2VkIG9uIGFcbiAqIGNvb3JkaW5hdGUgYXJyYXkuIFByb3BlcnRpZXMgY2FuIGJlIGFkZGVkIG9wdGlvbmFsbHkuXG4gKlxuICogQG5hbWUgZ2VvbWV0cnlDb2xsZWN0aW9uXG4gKiBAcGFyYW0ge0FycmF5PEdlb21ldHJ5Pn0gZ2VvbWV0cmllcyBhbiBhcnJheSBvZiBHZW9KU09OIEdlb21ldHJpZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcHJvcGVydGllcz17fV0gYW4gT2JqZWN0IG9mIGtleS12YWx1ZSBwYWlycyB0byBhZGQgYXMgcHJvcGVydGllc1xuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBPcHRpb25hbCBQYXJhbWV0ZXJzXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IFtvcHRpb25zLmJib3hdIEJvdW5kaW5nIEJveCBBcnJheSBbd2VzdCwgc291dGgsIGVhc3QsIG5vcnRoXSBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW29wdGlvbnMuaWRdIElkZW50aWZpZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlXG4gKiBAcmV0dXJucyB7RmVhdHVyZTxHZW9tZXRyeUNvbGxlY3Rpb24+fSBhIEdlb0pTT04gR2VvbWV0cnlDb2xsZWN0aW9uIEZlYXR1cmVcbiAqIEBleGFtcGxlXG4gKiB2YXIgcHQgPSB0dXJmLmdlb21ldHJ5KFwiUG9pbnRcIiwgWzEwMCwgMF0pO1xuICogdmFyIGxpbmUgPSB0dXJmLmdlb21ldHJ5KFwiTGluZVN0cmluZ1wiLCBbWzEwMSwgMF0sIFsxMDIsIDFdXSk7XG4gKiB2YXIgY29sbGVjdGlvbiA9IHR1cmYuZ2VvbWV0cnlDb2xsZWN0aW9uKFtwdCwgbGluZV0pO1xuICpcbiAqIC8vID0+IGNvbGxlY3Rpb25cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZ2VvbWV0cnlDb2xsZWN0aW9uKGdlb21ldHJpZXMsIHByb3BlcnRpZXMsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIHZhciBnZW9tID0ge1xuICAgIHR5cGU6IFwiR2VvbWV0cnlDb2xsZWN0aW9uXCIsXG4gICAgZ2VvbWV0cmllczogZ2VvbWV0cmllc1xuICB9O1xuICByZXR1cm4gZmVhdHVyZShnZW9tLCBwcm9wZXJ0aWVzLCBvcHRpb25zKTtcbn1cbi8qKlxuICogUm91bmQgbnVtYmVyIHRvIHByZWNpc2lvblxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBudW0gTnVtYmVyXG4gKiBAcGFyYW0ge251bWJlcn0gW3ByZWNpc2lvbj0wXSBQcmVjaXNpb25cbiAqIEByZXR1cm5zIHtudW1iZXJ9IHJvdW5kZWQgbnVtYmVyXG4gKiBAZXhhbXBsZVxuICogdHVyZi5yb3VuZCgxMjAuNDMyMSlcbiAqIC8vPTEyMFxuICpcbiAqIHR1cmYucm91bmQoMTIwLjQzMjEsIDIpXG4gKiAvLz0xMjAuNDNcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcm91bmQobnVtLCBwcmVjaXNpb24pIHtcbiAgaWYgKHByZWNpc2lvbiA9PT0gdm9pZCAwKSB7XG4gICAgcHJlY2lzaW9uID0gMDtcbiAgfVxuXG4gIGlmIChwcmVjaXNpb24gJiYgIShwcmVjaXNpb24gPj0gMCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJwcmVjaXNpb24gbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlclwiKTtcbiAgfVxuXG4gIHZhciBtdWx0aXBsaWVyID0gTWF0aC5wb3coMTAsIHByZWNpc2lvbiB8fCAwKTtcbiAgcmV0dXJuIE1hdGgucm91bmQobnVtICogbXVsdGlwbGllcikgLyBtdWx0aXBsaWVyO1xufVxuLyoqXG4gKiBDb252ZXJ0IGEgZGlzdGFuY2UgbWVhc3VyZW1lbnQgKGFzc3VtaW5nIGEgc3BoZXJpY2FsIEVhcnRoKSBmcm9tIHJhZGlhbnMgdG8gYSBtb3JlIGZyaWVuZGx5IHVuaXQuXG4gKiBWYWxpZCB1bml0czogbWlsZXMsIG5hdXRpY2FsbWlsZXMsIGluY2hlcywgeWFyZHMsIG1ldGVycywgbWV0cmVzLCBraWxvbWV0ZXJzLCBjZW50aW1ldGVycywgZmVldFxuICpcbiAqIEBuYW1lIHJhZGlhbnNUb0xlbmd0aFxuICogQHBhcmFtIHtudW1iZXJ9IHJhZGlhbnMgaW4gcmFkaWFucyBhY3Jvc3MgdGhlIHNwaGVyZVxuICogQHBhcmFtIHtzdHJpbmd9IFt1bml0cz1cImtpbG9tZXRlcnNcIl0gY2FuIGJlIGRlZ3JlZXMsIHJhZGlhbnMsIG1pbGVzLCBpbmNoZXMsIHlhcmRzLCBtZXRyZXMsXG4gKiBtZXRlcnMsIGtpbG9tZXRyZXMsIGtpbG9tZXRlcnMuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBkaXN0YW5jZVxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiByYWRpYW5zVG9MZW5ndGgocmFkaWFucywgdW5pdHMpIHtcbiAgaWYgKHVuaXRzID09PSB2b2lkIDApIHtcbiAgICB1bml0cyA9IFwia2lsb21ldGVyc1wiO1xuICB9XG5cbiAgdmFyIGZhY3RvciA9IGZhY3RvcnNbdW5pdHNdO1xuXG4gIGlmICghZmFjdG9yKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKHVuaXRzICsgXCIgdW5pdHMgaXMgaW52YWxpZFwiKTtcbiAgfVxuXG4gIHJldHVybiByYWRpYW5zICogZmFjdG9yO1xufVxuLyoqXG4gKiBDb252ZXJ0IGEgZGlzdGFuY2UgbWVhc3VyZW1lbnQgKGFzc3VtaW5nIGEgc3BoZXJpY2FsIEVhcnRoKSBmcm9tIGEgcmVhbC13b3JsZCB1bml0IGludG8gcmFkaWFuc1xuICogVmFsaWQgdW5pdHM6IG1pbGVzLCBuYXV0aWNhbG1pbGVzLCBpbmNoZXMsIHlhcmRzLCBtZXRlcnMsIG1ldHJlcywga2lsb21ldGVycywgY2VudGltZXRlcnMsIGZlZXRcbiAqXG4gKiBAbmFtZSBsZW5ndGhUb1JhZGlhbnNcbiAqIEBwYXJhbSB7bnVtYmVyfSBkaXN0YW5jZSBpbiByZWFsIHVuaXRzXG4gKiBAcGFyYW0ge3N0cmluZ30gW3VuaXRzPVwia2lsb21ldGVyc1wiXSBjYW4gYmUgZGVncmVlcywgcmFkaWFucywgbWlsZXMsIGluY2hlcywgeWFyZHMsIG1ldHJlcyxcbiAqIG1ldGVycywga2lsb21ldHJlcywga2lsb21ldGVycy5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IHJhZGlhbnNcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbGVuZ3RoVG9SYWRpYW5zKGRpc3RhbmNlLCB1bml0cykge1xuICBpZiAodW5pdHMgPT09IHZvaWQgMCkge1xuICAgIHVuaXRzID0gXCJraWxvbWV0ZXJzXCI7XG4gIH1cblxuICB2YXIgZmFjdG9yID0gZmFjdG9yc1t1bml0c107XG5cbiAgaWYgKCFmYWN0b3IpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IodW5pdHMgKyBcIiB1bml0cyBpcyBpbnZhbGlkXCIpO1xuICB9XG5cbiAgcmV0dXJuIGRpc3RhbmNlIC8gZmFjdG9yO1xufVxuLyoqXG4gKiBDb252ZXJ0IGEgZGlzdGFuY2UgbWVhc3VyZW1lbnQgKGFzc3VtaW5nIGEgc3BoZXJpY2FsIEVhcnRoKSBmcm9tIGEgcmVhbC13b3JsZCB1bml0IGludG8gZGVncmVlc1xuICogVmFsaWQgdW5pdHM6IG1pbGVzLCBuYXV0aWNhbG1pbGVzLCBpbmNoZXMsIHlhcmRzLCBtZXRlcnMsIG1ldHJlcywgY2VudGltZXRlcnMsIGtpbG9tZXRyZXMsIGZlZXRcbiAqXG4gKiBAbmFtZSBsZW5ndGhUb0RlZ3JlZXNcbiAqIEBwYXJhbSB7bnVtYmVyfSBkaXN0YW5jZSBpbiByZWFsIHVuaXRzXG4gKiBAcGFyYW0ge3N0cmluZ30gW3VuaXRzPVwia2lsb21ldGVyc1wiXSBjYW4gYmUgZGVncmVlcywgcmFkaWFucywgbWlsZXMsIGluY2hlcywgeWFyZHMsIG1ldHJlcyxcbiAqIG1ldGVycywga2lsb21ldHJlcywga2lsb21ldGVycy5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IGRlZ3JlZXNcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbGVuZ3RoVG9EZWdyZWVzKGRpc3RhbmNlLCB1bml0cykge1xuICByZXR1cm4gcmFkaWFuc1RvRGVncmVlcyhsZW5ndGhUb1JhZGlhbnMoZGlzdGFuY2UsIHVuaXRzKSk7XG59XG4vKipcbiAqIENvbnZlcnRzIGFueSBiZWFyaW5nIGFuZ2xlIGZyb20gdGhlIG5vcnRoIGxpbmUgZGlyZWN0aW9uIChwb3NpdGl2ZSBjbG9ja3dpc2UpXG4gKiBhbmQgcmV0dXJucyBhbiBhbmdsZSBiZXR3ZWVuIDAtMzYwIGRlZ3JlZXMgKHBvc2l0aXZlIGNsb2Nrd2lzZSksIDAgYmVpbmcgdGhlIG5vcnRoIGxpbmVcbiAqXG4gKiBAbmFtZSBiZWFyaW5nVG9BemltdXRoXG4gKiBAcGFyYW0ge251bWJlcn0gYmVhcmluZyBhbmdsZSwgYmV0d2VlbiAtMTgwIGFuZCArMTgwIGRlZ3JlZXNcbiAqIEByZXR1cm5zIHtudW1iZXJ9IGFuZ2xlIGJldHdlZW4gMCBhbmQgMzYwIGRlZ3JlZXNcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gYmVhcmluZ1RvQXppbXV0aChiZWFyaW5nKSB7XG4gIHZhciBhbmdsZSA9IGJlYXJpbmcgJSAzNjA7XG5cbiAgaWYgKGFuZ2xlIDwgMCkge1xuICAgIGFuZ2xlICs9IDM2MDtcbiAgfVxuXG4gIHJldHVybiBhbmdsZTtcbn1cbi8qKlxuICogQ29udmVydHMgYW4gYW5nbGUgaW4gcmFkaWFucyB0byBkZWdyZWVzXG4gKlxuICogQG5hbWUgcmFkaWFuc1RvRGVncmVlc1xuICogQHBhcmFtIHtudW1iZXJ9IHJhZGlhbnMgYW5nbGUgaW4gcmFkaWFuc1xuICogQHJldHVybnMge251bWJlcn0gZGVncmVlcyBiZXR3ZWVuIDAgYW5kIDM2MCBkZWdyZWVzXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHJhZGlhbnNUb0RlZ3JlZXMocmFkaWFucykge1xuICB2YXIgZGVncmVlcyA9IHJhZGlhbnMgJSAoMiAqIE1hdGguUEkpO1xuICByZXR1cm4gZGVncmVlcyAqIDE4MCAvIE1hdGguUEk7XG59XG4vKipcbiAqIENvbnZlcnRzIGFuIGFuZ2xlIGluIGRlZ3JlZXMgdG8gcmFkaWFuc1xuICpcbiAqIEBuYW1lIGRlZ3JlZXNUb1JhZGlhbnNcbiAqIEBwYXJhbSB7bnVtYmVyfSBkZWdyZWVzIGFuZ2xlIGJldHdlZW4gMCBhbmQgMzYwIGRlZ3JlZXNcbiAqIEByZXR1cm5zIHtudW1iZXJ9IGFuZ2xlIGluIHJhZGlhbnNcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZGVncmVlc1RvUmFkaWFucyhkZWdyZWVzKSB7XG4gIHZhciByYWRpYW5zID0gZGVncmVlcyAlIDM2MDtcbiAgcmV0dXJuIHJhZGlhbnMgKiBNYXRoLlBJIC8gMTgwO1xufVxuLyoqXG4gKiBDb252ZXJ0cyBhIGxlbmd0aCB0byB0aGUgcmVxdWVzdGVkIHVuaXQuXG4gKiBWYWxpZCB1bml0czogbWlsZXMsIG5hdXRpY2FsbWlsZXMsIGluY2hlcywgeWFyZHMsIG1ldGVycywgbWV0cmVzLCBraWxvbWV0ZXJzLCBjZW50aW1ldGVycywgZmVldFxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGggdG8gYmUgY29udmVydGVkXG4gKiBAcGFyYW0ge1VuaXRzfSBbb3JpZ2luYWxVbml0PVwia2lsb21ldGVyc1wiXSBvZiB0aGUgbGVuZ3RoXG4gKiBAcGFyYW0ge1VuaXRzfSBbZmluYWxVbml0PVwia2lsb21ldGVyc1wiXSByZXR1cm5lZCB1bml0XG4gKiBAcmV0dXJucyB7bnVtYmVyfSB0aGUgY29udmVydGVkIGxlbmd0aFxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0TGVuZ3RoKGxlbmd0aCwgb3JpZ2luYWxVbml0LCBmaW5hbFVuaXQpIHtcbiAgaWYgKG9yaWdpbmFsVW5pdCA9PT0gdm9pZCAwKSB7XG4gICAgb3JpZ2luYWxVbml0ID0gXCJraWxvbWV0ZXJzXCI7XG4gIH1cblxuICBpZiAoZmluYWxVbml0ID09PSB2b2lkIDApIHtcbiAgICBmaW5hbFVuaXQgPSBcImtpbG9tZXRlcnNcIjtcbiAgfVxuXG4gIGlmICghKGxlbmd0aCA+PSAwKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcImxlbmd0aCBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyXCIpO1xuICB9XG5cbiAgcmV0dXJuIHJhZGlhbnNUb0xlbmd0aChsZW5ndGhUb1JhZGlhbnMobGVuZ3RoLCBvcmlnaW5hbFVuaXQpLCBmaW5hbFVuaXQpO1xufVxuLyoqXG4gKiBDb252ZXJ0cyBhIGFyZWEgdG8gdGhlIHJlcXVlc3RlZCB1bml0LlxuICogVmFsaWQgdW5pdHM6IGtpbG9tZXRlcnMsIGtpbG9tZXRyZXMsIG1ldGVycywgbWV0cmVzLCBjZW50aW1ldHJlcywgbWlsbGltZXRlcnMsIGFjcmVzLCBtaWxlcywgeWFyZHMsIGZlZXQsIGluY2hlcywgaGVjdGFyZXNcbiAqIEBwYXJhbSB7bnVtYmVyfSBhcmVhIHRvIGJlIGNvbnZlcnRlZFxuICogQHBhcmFtIHtVbml0c30gW29yaWdpbmFsVW5pdD1cIm1ldGVyc1wiXSBvZiB0aGUgZGlzdGFuY2VcbiAqIEBwYXJhbSB7VW5pdHN9IFtmaW5hbFVuaXQ9XCJraWxvbWV0ZXJzXCJdIHJldHVybmVkIHVuaXRcbiAqIEByZXR1cm5zIHtudW1iZXJ9IHRoZSBjb252ZXJ0ZWQgYXJlYVxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0QXJlYShhcmVhLCBvcmlnaW5hbFVuaXQsIGZpbmFsVW5pdCkge1xuICBpZiAob3JpZ2luYWxVbml0ID09PSB2b2lkIDApIHtcbiAgICBvcmlnaW5hbFVuaXQgPSBcIm1ldGVyc1wiO1xuICB9XG5cbiAgaWYgKGZpbmFsVW5pdCA9PT0gdm9pZCAwKSB7XG4gICAgZmluYWxVbml0ID0gXCJraWxvbWV0ZXJzXCI7XG4gIH1cblxuICBpZiAoIShhcmVhID49IDApKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiYXJlYSBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyXCIpO1xuICB9XG5cbiAgdmFyIHN0YXJ0RmFjdG9yID0gYXJlYUZhY3RvcnNbb3JpZ2luYWxVbml0XTtcblxuICBpZiAoIXN0YXJ0RmFjdG9yKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBvcmlnaW5hbCB1bml0c1wiKTtcbiAgfVxuXG4gIHZhciBmaW5hbEZhY3RvciA9IGFyZWFGYWN0b3JzW2ZpbmFsVW5pdF07XG5cbiAgaWYgKCFmaW5hbEZhY3Rvcikge1xuICAgIHRocm93IG5ldyBFcnJvcihcImludmFsaWQgZmluYWwgdW5pdHNcIik7XG4gIH1cblxuICByZXR1cm4gYXJlYSAvIHN0YXJ0RmFjdG9yICogZmluYWxGYWN0b3I7XG59XG4vKipcbiAqIGlzTnVtYmVyXG4gKlxuICogQHBhcmFtIHsqfSBudW0gTnVtYmVyIHRvIHZhbGlkYXRlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZS9mYWxzZVxuICogQGV4YW1wbGVcbiAqIHR1cmYuaXNOdW1iZXIoMTIzKVxuICogLy89dHJ1ZVxuICogdHVyZi5pc051bWJlcignZm9vJylcbiAqIC8vPWZhbHNlXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTnVtYmVyKG51bSkge1xuICByZXR1cm4gIWlzTmFOKG51bSkgJiYgbnVtICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KG51bSk7XG59XG4vKipcbiAqIGlzT2JqZWN0XG4gKlxuICogQHBhcmFtIHsqfSBpbnB1dCB2YXJpYWJsZSB0byB2YWxpZGF0ZVxuICogQHJldHVybnMge2Jvb2xlYW59IHRydWUvZmFsc2VcbiAqIEBleGFtcGxlXG4gKiB0dXJmLmlzT2JqZWN0KHtlbGV2YXRpb246IDEwfSlcbiAqIC8vPXRydWVcbiAqIHR1cmYuaXNPYmplY3QoJ2ZvbycpXG4gKiAvLz1mYWxzZVxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBpc09iamVjdChpbnB1dCkge1xuICByZXR1cm4gISFpbnB1dCAmJiBpbnB1dC5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0O1xufVxuLyoqXG4gKiBWYWxpZGF0ZSBCQm94XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gYmJveCBCQm94IHRvIHZhbGlkYXRlXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqIEB0aHJvd3MgRXJyb3IgaWYgQkJveCBpcyBub3QgdmFsaWRcbiAqIEBleGFtcGxlXG4gKiB2YWxpZGF0ZUJCb3goWy0xODAsIC00MCwgMTEwLCA1MF0pXG4gKiAvLz1PS1xuICogdmFsaWRhdGVCQm94KFstMTgwLCAtNDBdKVxuICogLy89RXJyb3JcbiAqIHZhbGlkYXRlQkJveCgnRm9vJylcbiAqIC8vPUVycm9yXG4gKiB2YWxpZGF0ZUJCb3goNSlcbiAqIC8vPUVycm9yXG4gKiB2YWxpZGF0ZUJCb3gobnVsbClcbiAqIC8vPUVycm9yXG4gKiB2YWxpZGF0ZUJCb3godW5kZWZpbmVkKVxuICogLy89RXJyb3JcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVCQm94KGJib3gpIHtcbiAgaWYgKCFiYm94KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiYmJveCBpcyByZXF1aXJlZFwiKTtcbiAgfVxuXG4gIGlmICghQXJyYXkuaXNBcnJheShiYm94KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcImJib3ggbXVzdCBiZSBhbiBBcnJheVwiKTtcbiAgfVxuXG4gIGlmIChiYm94Lmxlbmd0aCAhPT0gNCAmJiBiYm94Lmxlbmd0aCAhPT0gNikge1xuICAgIHRocm93IG5ldyBFcnJvcihcImJib3ggbXVzdCBiZSBhbiBBcnJheSBvZiA0IG9yIDYgbnVtYmVyc1wiKTtcbiAgfVxuXG4gIGJib3guZm9yRWFjaChmdW5jdGlvbiAobnVtKSB7XG4gICAgaWYgKCFpc051bWJlcihudW0pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJiYm94IG11c3Qgb25seSBjb250YWluIG51bWJlcnNcIik7XG4gICAgfVxuICB9KTtcbn1cbi8qKlxuICogVmFsaWRhdGUgSWRcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBpZCBJZCB0byB2YWxpZGF0ZVxuICogQHJldHVybnMge3ZvaWR9XG4gKiBAdGhyb3dzIEVycm9yIGlmIElkIGlzIG5vdCB2YWxpZFxuICogQGV4YW1wbGVcbiAqIHZhbGlkYXRlSWQoWy0xODAsIC00MCwgMTEwLCA1MF0pXG4gKiAvLz1FcnJvclxuICogdmFsaWRhdGVJZChbLTE4MCwgLTQwXSlcbiAqIC8vPUVycm9yXG4gKiB2YWxpZGF0ZUlkKCdGb28nKVxuICogLy89T0tcbiAqIHZhbGlkYXRlSWQoNSlcbiAqIC8vPU9LXG4gKiB2YWxpZGF0ZUlkKG51bGwpXG4gKiAvLz1FcnJvclxuICogdmFsaWRhdGVJZCh1bmRlZmluZWQpXG4gKiAvLz1FcnJvclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUlkKGlkKSB7XG4gIGlmICghaWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJpZCBpcyByZXF1aXJlZFwiKTtcbiAgfVxuXG4gIGlmIChbXCJzdHJpbmdcIiwgXCJudW1iZXJcIl0uaW5kZXhPZih0eXBlb2YgaWQpID09PSAtMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcImlkIG11c3QgYmUgYSBudW1iZXIgb3IgYSBzdHJpbmdcIik7XG4gIH1cbn0iLCJpbXBvcnQgeyBmZWF0dXJlLCBsaW5lU3RyaW5nLCBpc09iamVjdCwgcG9pbnQgfSBmcm9tICdAdHVyZi9oZWxwZXJzJztcbi8qKlxuICogQ2FsbGJhY2sgZm9yIGNvb3JkRWFjaFxuICpcbiAqIEBjYWxsYmFjayBjb29yZEVhY2hDYWxsYmFja1xuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBjdXJyZW50Q29vcmQgVGhlIGN1cnJlbnQgY29vcmRpbmF0ZSBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gY29vcmRJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgY29vcmRpbmF0ZSBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gZmVhdHVyZUluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBGZWF0dXJlIGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBtdWx0aUZlYXR1cmVJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgTXVsdGktRmVhdHVyZSBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gZ2VvbWV0cnlJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgR2VvbWV0cnkgYmVpbmcgcHJvY2Vzc2VkLlxuICovXG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIGNvb3JkaW5hdGVzIGluIGFueSBHZW9KU09OIG9iamVjdCwgc2ltaWxhciB0byBBcnJheS5mb3JFYWNoKClcbiAqXG4gKiBAbmFtZSBjb29yZEVhY2hcbiAqIEBwYXJhbSB7RmVhdHVyZUNvbGxlY3Rpb258RmVhdHVyZXxHZW9tZXRyeX0gZ2VvanNvbiBhbnkgR2VvSlNPTiBvYmplY3RcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIGEgbWV0aG9kIHRoYXQgdGFrZXMgKGN1cnJlbnRDb29yZCwgY29vcmRJbmRleCwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleClcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2V4Y2x1ZGVXcmFwQ29vcmQ9ZmFsc2VdIHdoZXRoZXIgb3Igbm90IHRvIGluY2x1ZGUgdGhlIGZpbmFsIGNvb3JkaW5hdGUgb2YgTGluZWFyUmluZ3MgdGhhdCB3cmFwcyB0aGUgcmluZyBpbiBpdHMgaXRlcmF0aW9uLlxuICogQHJldHVybnMge3ZvaWR9XG4gKiBAZXhhbXBsZVxuICogdmFyIGZlYXR1cmVzID0gdHVyZi5mZWF0dXJlQ29sbGVjdGlvbihbXG4gKiAgIHR1cmYucG9pbnQoWzI2LCAzN10sIHtcImZvb1wiOiBcImJhclwifSksXG4gKiAgIHR1cmYucG9pbnQoWzM2LCA1M10sIHtcImhlbGxvXCI6IFwid29ybGRcIn0pXG4gKiBdKTtcbiAqXG4gKiB0dXJmLmNvb3JkRWFjaChmZWF0dXJlcywgZnVuY3Rpb24gKGN1cnJlbnRDb29yZCwgY29vcmRJbmRleCwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCwgZ2VvbWV0cnlJbmRleCkge1xuICogICAvLz1jdXJyZW50Q29vcmRcbiAqICAgLy89Y29vcmRJbmRleFxuICogICAvLz1mZWF0dXJlSW5kZXhcbiAqICAgLy89bXVsdGlGZWF0dXJlSW5kZXhcbiAqICAgLy89Z2VvbWV0cnlJbmRleFxuICogfSk7XG4gKi9cblxuZnVuY3Rpb24gY29vcmRFYWNoKGdlb2pzb24sIGNhbGxiYWNrLCBleGNsdWRlV3JhcENvb3JkKSB7XG4gIC8vIEhhbmRsZXMgbnVsbCBHZW9tZXRyeSAtLSBTa2lwcyB0aGlzIEdlb0pTT05cbiAgaWYgKGdlb2pzb24gPT09IG51bGwpIHJldHVybjtcbiAgdmFyIGosXG4gICAgICBrLFxuICAgICAgbCxcbiAgICAgIGdlb21ldHJ5LFxuICAgICAgc3RvcEcsXG4gICAgICBjb29yZHMsXG4gICAgICBnZW9tZXRyeU1heWJlQ29sbGVjdGlvbixcbiAgICAgIHdyYXBTaHJpbmsgPSAwLFxuICAgICAgY29vcmRJbmRleCA9IDAsXG4gICAgICBpc0dlb21ldHJ5Q29sbGVjdGlvbixcbiAgICAgIHR5cGUgPSBnZW9qc29uLnR5cGUsXG4gICAgICBpc0ZlYXR1cmVDb2xsZWN0aW9uID0gdHlwZSA9PT0gXCJGZWF0dXJlQ29sbGVjdGlvblwiLFxuICAgICAgaXNGZWF0dXJlID0gdHlwZSA9PT0gXCJGZWF0dXJlXCIsXG4gICAgICBzdG9wID0gaXNGZWF0dXJlQ29sbGVjdGlvbiA/IGdlb2pzb24uZmVhdHVyZXMubGVuZ3RoIDogMTsgLy8gVGhpcyBsb2dpYyBtYXkgbG9vayBhIGxpdHRsZSB3ZWlyZC4gVGhlIHJlYXNvbiB3aHkgaXQgaXMgdGhhdCB3YXlcbiAgLy8gaXMgYmVjYXVzZSBpdCdzIHRyeWluZyB0byBiZSBmYXN0LiBHZW9KU09OIHN1cHBvcnRzIG11bHRpcGxlIGtpbmRzXG4gIC8vIG9mIG9iamVjdHMgYXQgaXRzIHJvb3Q6IEZlYXR1cmVDb2xsZWN0aW9uLCBGZWF0dXJlcywgR2VvbWV0cmllcy5cbiAgLy8gVGhpcyBmdW5jdGlvbiBoYXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIGhhbmRsaW5nIGFsbCBvZiB0aGVtLCBhbmQgdGhhdFxuICAvLyBtZWFucyB0aGF0IHNvbWUgb2YgdGhlIGBmb3JgIGxvb3BzIHlvdSBzZWUgYmVsb3cgYWN0dWFsbHkganVzdCBkb24ndCBhcHBseVxuICAvLyB0byBjZXJ0YWluIGlucHV0cy4gRm9yIGluc3RhbmNlLCBpZiB5b3UgZ2l2ZSB0aGlzIGp1c3QgYVxuICAvLyBQb2ludCBnZW9tZXRyeSwgdGhlbiBib3RoIGxvb3BzIGFyZSBzaG9ydC1jaXJjdWl0ZWQgYW5kIGFsbCB3ZSBkb1xuICAvLyBpcyBncmFkdWFsbHkgcmVuYW1lIHRoZSBpbnB1dCB1bnRpbCBpdCdzIGNhbGxlZCAnZ2VvbWV0cnknLlxuICAvL1xuICAvLyBUaGlzIGFsc28gYWltcyB0byBhbGxvY2F0ZSBhcyBmZXcgcmVzb3VyY2VzIGFzIHBvc3NpYmxlOiBqdXN0IGFcbiAgLy8gZmV3IG51bWJlcnMgYW5kIGJvb2xlYW5zLCByYXRoZXIgdGhhbiBhbnkgdGVtcG9yYXJ5IGFycmF5cyBhcyB3b3VsZFxuICAvLyBiZSByZXF1aXJlZCB3aXRoIHRoZSBub3JtYWxpemF0aW9uIGFwcHJvYWNoLlxuXG4gIGZvciAodmFyIGZlYXR1cmVJbmRleCA9IDA7IGZlYXR1cmVJbmRleCA8IHN0b3A7IGZlYXR1cmVJbmRleCsrKSB7XG4gICAgZ2VvbWV0cnlNYXliZUNvbGxlY3Rpb24gPSBpc0ZlYXR1cmVDb2xsZWN0aW9uID8gZ2VvanNvbi5mZWF0dXJlc1tmZWF0dXJlSW5kZXhdLmdlb21ldHJ5IDogaXNGZWF0dXJlID8gZ2VvanNvbi5nZW9tZXRyeSA6IGdlb2pzb247XG4gICAgaXNHZW9tZXRyeUNvbGxlY3Rpb24gPSBnZW9tZXRyeU1heWJlQ29sbGVjdGlvbiA/IGdlb21ldHJ5TWF5YmVDb2xsZWN0aW9uLnR5cGUgPT09IFwiR2VvbWV0cnlDb2xsZWN0aW9uXCIgOiBmYWxzZTtcbiAgICBzdG9wRyA9IGlzR2VvbWV0cnlDb2xsZWN0aW9uID8gZ2VvbWV0cnlNYXliZUNvbGxlY3Rpb24uZ2VvbWV0cmllcy5sZW5ndGggOiAxO1xuXG4gICAgZm9yICh2YXIgZ2VvbUluZGV4ID0gMDsgZ2VvbUluZGV4IDwgc3RvcEc7IGdlb21JbmRleCsrKSB7XG4gICAgICB2YXIgbXVsdGlGZWF0dXJlSW5kZXggPSAwO1xuICAgICAgdmFyIGdlb21ldHJ5SW5kZXggPSAwO1xuICAgICAgZ2VvbWV0cnkgPSBpc0dlb21ldHJ5Q29sbGVjdGlvbiA/IGdlb21ldHJ5TWF5YmVDb2xsZWN0aW9uLmdlb21ldHJpZXNbZ2VvbUluZGV4XSA6IGdlb21ldHJ5TWF5YmVDb2xsZWN0aW9uOyAvLyBIYW5kbGVzIG51bGwgR2VvbWV0cnkgLS0gU2tpcHMgdGhpcyBnZW9tZXRyeVxuXG4gICAgICBpZiAoZ2VvbWV0cnkgPT09IG51bGwpIGNvbnRpbnVlO1xuICAgICAgY29vcmRzID0gZ2VvbWV0cnkuY29vcmRpbmF0ZXM7XG4gICAgICB2YXIgZ2VvbVR5cGUgPSBnZW9tZXRyeS50eXBlO1xuICAgICAgd3JhcFNocmluayA9IGV4Y2x1ZGVXcmFwQ29vcmQgJiYgKGdlb21UeXBlID09PSBcIlBvbHlnb25cIiB8fCBnZW9tVHlwZSA9PT0gXCJNdWx0aVBvbHlnb25cIikgPyAxIDogMDtcblxuICAgICAgc3dpdGNoIChnZW9tVHlwZSkge1xuICAgICAgICBjYXNlIG51bGw6XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcIlBvaW50XCI6XG4gICAgICAgICAgaWYgKGNhbGxiYWNrKGNvb3JkcywgY29vcmRJbmRleCwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCwgZ2VvbWV0cnlJbmRleCkgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgY29vcmRJbmRleCsrO1xuICAgICAgICAgIG11bHRpRmVhdHVyZUluZGV4Kys7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcIkxpbmVTdHJpbmdcIjpcbiAgICAgICAgY2FzZSBcIk11bHRpUG9pbnRcIjpcbiAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgY29vcmRzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2soY29vcmRzW2pdLCBjb29yZEluZGV4LCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4LCBnZW9tZXRyeUluZGV4KSA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGNvb3JkSW5kZXgrKztcbiAgICAgICAgICAgIGlmIChnZW9tVHlwZSA9PT0gXCJNdWx0aVBvaW50XCIpIG11bHRpRmVhdHVyZUluZGV4Kys7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGdlb21UeXBlID09PSBcIkxpbmVTdHJpbmdcIikgbXVsdGlGZWF0dXJlSW5kZXgrKztcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiUG9seWdvblwiOlxuICAgICAgICBjYXNlIFwiTXVsdGlMaW5lU3RyaW5nXCI6XG4gICAgICAgICAgZm9yIChqID0gMDsgaiA8IGNvb3Jkcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgZm9yIChrID0gMDsgayA8IGNvb3Jkc1tqXS5sZW5ndGggLSB3cmFwU2hyaW5rOyBrKyspIHtcbiAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKGNvb3Jkc1tqXVtrXSwgY29vcmRJbmRleCwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCwgZ2VvbWV0cnlJbmRleCkgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIGNvb3JkSW5kZXgrKztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGdlb21UeXBlID09PSBcIk11bHRpTGluZVN0cmluZ1wiKSBtdWx0aUZlYXR1cmVJbmRleCsrO1xuICAgICAgICAgICAgaWYgKGdlb21UeXBlID09PSBcIlBvbHlnb25cIikgZ2VvbWV0cnlJbmRleCsrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChnZW9tVHlwZSA9PT0gXCJQb2x5Z29uXCIpIG11bHRpRmVhdHVyZUluZGV4Kys7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcIk11bHRpUG9seWdvblwiOlxuICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBjb29yZHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGdlb21ldHJ5SW5kZXggPSAwO1xuXG4gICAgICAgICAgICBmb3IgKGsgPSAwOyBrIDwgY29vcmRzW2pdLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICAgIGZvciAobCA9IDA7IGwgPCBjb29yZHNbal1ba10ubGVuZ3RoIC0gd3JhcFNocmluazsgbCsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKGNvb3Jkc1tqXVtrXVtsXSwgY29vcmRJbmRleCwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCwgZ2VvbWV0cnlJbmRleCkgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgY29vcmRJbmRleCsrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZ2VvbWV0cnlJbmRleCsrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBtdWx0aUZlYXR1cmVJbmRleCsrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJHZW9tZXRyeUNvbGxlY3Rpb25cIjpcbiAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgZ2VvbWV0cnkuZ2VvbWV0cmllcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgaWYgKGNvb3JkRWFjaChnZW9tZXRyeS5nZW9tZXRyaWVzW2pdLCBjYWxsYmFjaywgZXhjbHVkZVdyYXBDb29yZCkgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIEdlb21ldHJ5IFR5cGVcIik7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4vKipcbiAqIENhbGxiYWNrIGZvciBjb29yZFJlZHVjZVxuICpcbiAqIFRoZSBmaXJzdCB0aW1lIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBjYWxsZWQsIHRoZSB2YWx1ZXMgcHJvdmlkZWQgYXMgYXJndW1lbnRzIGRlcGVuZFxuICogb24gd2hldGhlciB0aGUgcmVkdWNlIG1ldGhvZCBoYXMgYW4gaW5pdGlhbFZhbHVlIGFyZ3VtZW50LlxuICpcbiAqIElmIGFuIGluaXRpYWxWYWx1ZSBpcyBwcm92aWRlZCB0byB0aGUgcmVkdWNlIG1ldGhvZDpcbiAqICAtIFRoZSBwcmV2aW91c1ZhbHVlIGFyZ3VtZW50IGlzIGluaXRpYWxWYWx1ZS5cbiAqICAtIFRoZSBjdXJyZW50VmFsdWUgYXJndW1lbnQgaXMgdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBlbGVtZW50IHByZXNlbnQgaW4gdGhlIGFycmF5LlxuICpcbiAqIElmIGFuIGluaXRpYWxWYWx1ZSBpcyBub3QgcHJvdmlkZWQ6XG4gKiAgLSBUaGUgcHJldmlvdXNWYWx1ZSBhcmd1bWVudCBpcyB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0IGVsZW1lbnQgcHJlc2VudCBpbiB0aGUgYXJyYXkuXG4gKiAgLSBUaGUgY3VycmVudFZhbHVlIGFyZ3VtZW50IGlzIHRoZSB2YWx1ZSBvZiB0aGUgc2Vjb25kIGVsZW1lbnQgcHJlc2VudCBpbiB0aGUgYXJyYXkuXG4gKlxuICogQGNhbGxiYWNrIGNvb3JkUmVkdWNlQ2FsbGJhY2tcbiAqIEBwYXJhbSB7Kn0gcHJldmlvdXNWYWx1ZSBUaGUgYWNjdW11bGF0ZWQgdmFsdWUgcHJldmlvdXNseSByZXR1cm5lZCBpbiB0aGUgbGFzdCBpbnZvY2F0aW9uXG4gKiBvZiB0aGUgY2FsbGJhY2ssIG9yIGluaXRpYWxWYWx1ZSwgaWYgc3VwcGxpZWQuXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IGN1cnJlbnRDb29yZCBUaGUgY3VycmVudCBjb29yZGluYXRlIGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBjb29yZEluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBjb29yZGluYXRlIGJlaW5nIHByb2Nlc3NlZC5cbiAqIFN0YXJ0cyBhdCBpbmRleCAwLCBpZiBhbiBpbml0aWFsVmFsdWUgaXMgcHJvdmlkZWQsIGFuZCBhdCBpbmRleCAxIG90aGVyd2lzZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmZWF0dXJlSW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIEZlYXR1cmUgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtudW1iZXJ9IG11bHRpRmVhdHVyZUluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBNdWx0aS1GZWF0dXJlIGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBnZW9tZXRyeUluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBHZW9tZXRyeSBiZWluZyBwcm9jZXNzZWQuXG4gKi9cblxuLyoqXG4gKiBSZWR1Y2UgY29vcmRpbmF0ZXMgaW4gYW55IEdlb0pTT04gb2JqZWN0LCBzaW1pbGFyIHRvIEFycmF5LnJlZHVjZSgpXG4gKlxuICogQG5hbWUgY29vcmRSZWR1Y2VcbiAqIEBwYXJhbSB7RmVhdHVyZUNvbGxlY3Rpb258R2VvbWV0cnl8RmVhdHVyZX0gZ2VvanNvbiBhbnkgR2VvSlNPTiBvYmplY3RcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIGEgbWV0aG9kIHRoYXQgdGFrZXMgKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRDb29yZCwgY29vcmRJbmRleClcbiAqIEBwYXJhbSB7Kn0gW2luaXRpYWxWYWx1ZV0gVmFsdWUgdG8gdXNlIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgZmlyc3QgY2FsbCBvZiB0aGUgY2FsbGJhY2suXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtleGNsdWRlV3JhcENvb3JkPWZhbHNlXSB3aGV0aGVyIG9yIG5vdCB0byBpbmNsdWRlIHRoZSBmaW5hbCBjb29yZGluYXRlIG9mIExpbmVhclJpbmdzIHRoYXQgd3JhcHMgdGhlIHJpbmcgaW4gaXRzIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHsqfSBUaGUgdmFsdWUgdGhhdCByZXN1bHRzIGZyb20gdGhlIHJlZHVjdGlvbi5cbiAqIEBleGFtcGxlXG4gKiB2YXIgZmVhdHVyZXMgPSB0dXJmLmZlYXR1cmVDb2xsZWN0aW9uKFtcbiAqICAgdHVyZi5wb2ludChbMjYsIDM3XSwge1wiZm9vXCI6IFwiYmFyXCJ9KSxcbiAqICAgdHVyZi5wb2ludChbMzYsIDUzXSwge1wiaGVsbG9cIjogXCJ3b3JsZFwifSlcbiAqIF0pO1xuICpcbiAqIHR1cmYuY29vcmRSZWR1Y2UoZmVhdHVyZXMsIGZ1bmN0aW9uIChwcmV2aW91c1ZhbHVlLCBjdXJyZW50Q29vcmQsIGNvb3JkSW5kZXgsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgsIGdlb21ldHJ5SW5kZXgpIHtcbiAqICAgLy89cHJldmlvdXNWYWx1ZVxuICogICAvLz1jdXJyZW50Q29vcmRcbiAqICAgLy89Y29vcmRJbmRleFxuICogICAvLz1mZWF0dXJlSW5kZXhcbiAqICAgLy89bXVsdGlGZWF0dXJlSW5kZXhcbiAqICAgLy89Z2VvbWV0cnlJbmRleFxuICogICByZXR1cm4gY3VycmVudENvb3JkO1xuICogfSk7XG4gKi9cblxuXG5mdW5jdGlvbiBjb29yZFJlZHVjZShnZW9qc29uLCBjYWxsYmFjaywgaW5pdGlhbFZhbHVlLCBleGNsdWRlV3JhcENvb3JkKSB7XG4gIHZhciBwcmV2aW91c1ZhbHVlID0gaW5pdGlhbFZhbHVlO1xuICBjb29yZEVhY2goZ2VvanNvbiwgZnVuY3Rpb24gKGN1cnJlbnRDb29yZCwgY29vcmRJbmRleCwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCwgZ2VvbWV0cnlJbmRleCkge1xuICAgIGlmIChjb29yZEluZGV4ID09PSAwICYmIGluaXRpYWxWYWx1ZSA9PT0gdW5kZWZpbmVkKSBwcmV2aW91c1ZhbHVlID0gY3VycmVudENvb3JkO2Vsc2UgcHJldmlvdXNWYWx1ZSA9IGNhbGxiYWNrKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRDb29yZCwgY29vcmRJbmRleCwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCwgZ2VvbWV0cnlJbmRleCk7XG4gIH0sIGV4Y2x1ZGVXcmFwQ29vcmQpO1xuICByZXR1cm4gcHJldmlvdXNWYWx1ZTtcbn1cbi8qKlxuICogQ2FsbGJhY2sgZm9yIHByb3BFYWNoXG4gKlxuICogQGNhbGxiYWNrIHByb3BFYWNoQ2FsbGJhY2tcbiAqIEBwYXJhbSB7T2JqZWN0fSBjdXJyZW50UHJvcGVydGllcyBUaGUgY3VycmVudCBQcm9wZXJ0aWVzIGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmZWF0dXJlSW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIEZlYXR1cmUgYmVpbmcgcHJvY2Vzc2VkLlxuICovXG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIHByb3BlcnRpZXMgaW4gYW55IEdlb0pTT04gb2JqZWN0LCBzaW1pbGFyIHRvIEFycmF5LmZvckVhY2goKVxuICpcbiAqIEBuYW1lIHByb3BFYWNoXG4gKiBAcGFyYW0ge0ZlYXR1cmVDb2xsZWN0aW9ufEZlYXR1cmV9IGdlb2pzb24gYW55IEdlb0pTT04gb2JqZWN0XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBhIG1ldGhvZCB0aGF0IHRha2VzIChjdXJyZW50UHJvcGVydGllcywgZmVhdHVyZUluZGV4KVxuICogQHJldHVybnMge3ZvaWR9XG4gKiBAZXhhbXBsZVxuICogdmFyIGZlYXR1cmVzID0gdHVyZi5mZWF0dXJlQ29sbGVjdGlvbihbXG4gKiAgICAgdHVyZi5wb2ludChbMjYsIDM3XSwge2ZvbzogJ2Jhcid9KSxcbiAqICAgICB0dXJmLnBvaW50KFszNiwgNTNdLCB7aGVsbG86ICd3b3JsZCd9KVxuICogXSk7XG4gKlxuICogdHVyZi5wcm9wRWFjaChmZWF0dXJlcywgZnVuY3Rpb24gKGN1cnJlbnRQcm9wZXJ0aWVzLCBmZWF0dXJlSW5kZXgpIHtcbiAqICAgLy89Y3VycmVudFByb3BlcnRpZXNcbiAqICAgLy89ZmVhdHVyZUluZGV4XG4gKiB9KTtcbiAqL1xuXG5cbmZ1bmN0aW9uIHByb3BFYWNoKGdlb2pzb24sIGNhbGxiYWNrKSB7XG4gIHZhciBpO1xuXG4gIHN3aXRjaCAoZ2VvanNvbi50eXBlKSB7XG4gICAgY2FzZSBcIkZlYXR1cmVDb2xsZWN0aW9uXCI6XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgZ2VvanNvbi5mZWF0dXJlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoY2FsbGJhY2soZ2VvanNvbi5mZWF0dXJlc1tpXS5wcm9wZXJ0aWVzLCBpKSA9PT0gZmFsc2UpIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgXCJGZWF0dXJlXCI6XG4gICAgICBjYWxsYmFjayhnZW9qc29uLnByb3BlcnRpZXMsIDApO1xuICAgICAgYnJlYWs7XG4gIH1cbn1cbi8qKlxuICogQ2FsbGJhY2sgZm9yIHByb3BSZWR1Y2VcbiAqXG4gKiBUaGUgZmlyc3QgdGltZSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgY2FsbGVkLCB0aGUgdmFsdWVzIHByb3ZpZGVkIGFzIGFyZ3VtZW50cyBkZXBlbmRcbiAqIG9uIHdoZXRoZXIgdGhlIHJlZHVjZSBtZXRob2QgaGFzIGFuIGluaXRpYWxWYWx1ZSBhcmd1bWVudC5cbiAqXG4gKiBJZiBhbiBpbml0aWFsVmFsdWUgaXMgcHJvdmlkZWQgdG8gdGhlIHJlZHVjZSBtZXRob2Q6XG4gKiAgLSBUaGUgcHJldmlvdXNWYWx1ZSBhcmd1bWVudCBpcyBpbml0aWFsVmFsdWUuXG4gKiAgLSBUaGUgY3VycmVudFZhbHVlIGFyZ3VtZW50IGlzIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgZWxlbWVudCBwcmVzZW50IGluIHRoZSBhcnJheS5cbiAqXG4gKiBJZiBhbiBpbml0aWFsVmFsdWUgaXMgbm90IHByb3ZpZGVkOlxuICogIC0gVGhlIHByZXZpb3VzVmFsdWUgYXJndW1lbnQgaXMgdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBlbGVtZW50IHByZXNlbnQgaW4gdGhlIGFycmF5LlxuICogIC0gVGhlIGN1cnJlbnRWYWx1ZSBhcmd1bWVudCBpcyB0aGUgdmFsdWUgb2YgdGhlIHNlY29uZCBlbGVtZW50IHByZXNlbnQgaW4gdGhlIGFycmF5LlxuICpcbiAqIEBjYWxsYmFjayBwcm9wUmVkdWNlQ2FsbGJhY2tcbiAqIEBwYXJhbSB7Kn0gcHJldmlvdXNWYWx1ZSBUaGUgYWNjdW11bGF0ZWQgdmFsdWUgcHJldmlvdXNseSByZXR1cm5lZCBpbiB0aGUgbGFzdCBpbnZvY2F0aW9uXG4gKiBvZiB0aGUgY2FsbGJhY2ssIG9yIGluaXRpYWxWYWx1ZSwgaWYgc3VwcGxpZWQuXG4gKiBAcGFyYW0geyp9IGN1cnJlbnRQcm9wZXJ0aWVzIFRoZSBjdXJyZW50IFByb3BlcnRpZXMgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtudW1iZXJ9IGZlYXR1cmVJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgRmVhdHVyZSBiZWluZyBwcm9jZXNzZWQuXG4gKi9cblxuLyoqXG4gKiBSZWR1Y2UgcHJvcGVydGllcyBpbiBhbnkgR2VvSlNPTiBvYmplY3QgaW50byBhIHNpbmdsZSB2YWx1ZSxcbiAqIHNpbWlsYXIgdG8gaG93IEFycmF5LnJlZHVjZSB3b3Jrcy4gSG93ZXZlciwgaW4gdGhpcyBjYXNlIHdlIGxhemlseSBydW5cbiAqIHRoZSByZWR1Y3Rpb24sIHNvIGFuIGFycmF5IG9mIGFsbCBwcm9wZXJ0aWVzIGlzIHVubmVjZXNzYXJ5LlxuICpcbiAqIEBuYW1lIHByb3BSZWR1Y2VcbiAqIEBwYXJhbSB7RmVhdHVyZUNvbGxlY3Rpb258RmVhdHVyZX0gZ2VvanNvbiBhbnkgR2VvSlNPTiBvYmplY3RcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIGEgbWV0aG9kIHRoYXQgdGFrZXMgKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRQcm9wZXJ0aWVzLCBmZWF0dXJlSW5kZXgpXG4gKiBAcGFyYW0geyp9IFtpbml0aWFsVmFsdWVdIFZhbHVlIHRvIHVzZSBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIGZpcnN0IGNhbGwgb2YgdGhlIGNhbGxiYWNrLlxuICogQHJldHVybnMgeyp9IFRoZSB2YWx1ZSB0aGF0IHJlc3VsdHMgZnJvbSB0aGUgcmVkdWN0aW9uLlxuICogQGV4YW1wbGVcbiAqIHZhciBmZWF0dXJlcyA9IHR1cmYuZmVhdHVyZUNvbGxlY3Rpb24oW1xuICogICAgIHR1cmYucG9pbnQoWzI2LCAzN10sIHtmb286ICdiYXInfSksXG4gKiAgICAgdHVyZi5wb2ludChbMzYsIDUzXSwge2hlbGxvOiAnd29ybGQnfSlcbiAqIF0pO1xuICpcbiAqIHR1cmYucHJvcFJlZHVjZShmZWF0dXJlcywgZnVuY3Rpb24gKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRQcm9wZXJ0aWVzLCBmZWF0dXJlSW5kZXgpIHtcbiAqICAgLy89cHJldmlvdXNWYWx1ZVxuICogICAvLz1jdXJyZW50UHJvcGVydGllc1xuICogICAvLz1mZWF0dXJlSW5kZXhcbiAqICAgcmV0dXJuIGN1cnJlbnRQcm9wZXJ0aWVzXG4gKiB9KTtcbiAqL1xuXG5cbmZ1bmN0aW9uIHByb3BSZWR1Y2UoZ2VvanNvbiwgY2FsbGJhY2ssIGluaXRpYWxWYWx1ZSkge1xuICB2YXIgcHJldmlvdXNWYWx1ZSA9IGluaXRpYWxWYWx1ZTtcbiAgcHJvcEVhY2goZ2VvanNvbiwgZnVuY3Rpb24gKGN1cnJlbnRQcm9wZXJ0aWVzLCBmZWF0dXJlSW5kZXgpIHtcbiAgICBpZiAoZmVhdHVyZUluZGV4ID09PSAwICYmIGluaXRpYWxWYWx1ZSA9PT0gdW5kZWZpbmVkKSBwcmV2aW91c1ZhbHVlID0gY3VycmVudFByb3BlcnRpZXM7ZWxzZSBwcmV2aW91c1ZhbHVlID0gY2FsbGJhY2socHJldmlvdXNWYWx1ZSwgY3VycmVudFByb3BlcnRpZXMsIGZlYXR1cmVJbmRleCk7XG4gIH0pO1xuICByZXR1cm4gcHJldmlvdXNWYWx1ZTtcbn1cbi8qKlxuICogQ2FsbGJhY2sgZm9yIGZlYXR1cmVFYWNoXG4gKlxuICogQGNhbGxiYWNrIGZlYXR1cmVFYWNoQ2FsbGJhY2tcbiAqIEBwYXJhbSB7RmVhdHVyZTxhbnk+fSBjdXJyZW50RmVhdHVyZSBUaGUgY3VycmVudCBGZWF0dXJlIGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmZWF0dXJlSW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIEZlYXR1cmUgYmVpbmcgcHJvY2Vzc2VkLlxuICovXG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIGZlYXR1cmVzIGluIGFueSBHZW9KU09OIG9iamVjdCwgc2ltaWxhciB0b1xuICogQXJyYXkuZm9yRWFjaC5cbiAqXG4gKiBAbmFtZSBmZWF0dXJlRWFjaFxuICogQHBhcmFtIHtGZWF0dXJlQ29sbGVjdGlvbnxGZWF0dXJlfEdlb21ldHJ5fSBnZW9qc29uIGFueSBHZW9KU09OIG9iamVjdFxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgYSBtZXRob2QgdGhhdCB0YWtlcyAoY3VycmVudEZlYXR1cmUsIGZlYXR1cmVJbmRleClcbiAqIEByZXR1cm5zIHt2b2lkfVxuICogQGV4YW1wbGVcbiAqIHZhciBmZWF0dXJlcyA9IHR1cmYuZmVhdHVyZUNvbGxlY3Rpb24oW1xuICogICB0dXJmLnBvaW50KFsyNiwgMzddLCB7Zm9vOiAnYmFyJ30pLFxuICogICB0dXJmLnBvaW50KFszNiwgNTNdLCB7aGVsbG86ICd3b3JsZCd9KVxuICogXSk7XG4gKlxuICogdHVyZi5mZWF0dXJlRWFjaChmZWF0dXJlcywgZnVuY3Rpb24gKGN1cnJlbnRGZWF0dXJlLCBmZWF0dXJlSW5kZXgpIHtcbiAqICAgLy89Y3VycmVudEZlYXR1cmVcbiAqICAgLy89ZmVhdHVyZUluZGV4XG4gKiB9KTtcbiAqL1xuXG5cbmZ1bmN0aW9uIGZlYXR1cmVFYWNoKGdlb2pzb24sIGNhbGxiYWNrKSB7XG4gIGlmIChnZW9qc29uLnR5cGUgPT09IFwiRmVhdHVyZVwiKSB7XG4gICAgY2FsbGJhY2soZ2VvanNvbiwgMCk7XG4gIH0gZWxzZSBpZiAoZ2VvanNvbi50eXBlID09PSBcIkZlYXR1cmVDb2xsZWN0aW9uXCIpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdlb2pzb24uZmVhdHVyZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChjYWxsYmFjayhnZW9qc29uLmZlYXR1cmVzW2ldLCBpKSA9PT0gZmFsc2UpIGJyZWFrO1xuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBDYWxsYmFjayBmb3IgZmVhdHVyZVJlZHVjZVxuICpcbiAqIFRoZSBmaXJzdCB0aW1lIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBjYWxsZWQsIHRoZSB2YWx1ZXMgcHJvdmlkZWQgYXMgYXJndW1lbnRzIGRlcGVuZFxuICogb24gd2hldGhlciB0aGUgcmVkdWNlIG1ldGhvZCBoYXMgYW4gaW5pdGlhbFZhbHVlIGFyZ3VtZW50LlxuICpcbiAqIElmIGFuIGluaXRpYWxWYWx1ZSBpcyBwcm92aWRlZCB0byB0aGUgcmVkdWNlIG1ldGhvZDpcbiAqICAtIFRoZSBwcmV2aW91c1ZhbHVlIGFyZ3VtZW50IGlzIGluaXRpYWxWYWx1ZS5cbiAqICAtIFRoZSBjdXJyZW50VmFsdWUgYXJndW1lbnQgaXMgdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBlbGVtZW50IHByZXNlbnQgaW4gdGhlIGFycmF5LlxuICpcbiAqIElmIGFuIGluaXRpYWxWYWx1ZSBpcyBub3QgcHJvdmlkZWQ6XG4gKiAgLSBUaGUgcHJldmlvdXNWYWx1ZSBhcmd1bWVudCBpcyB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0IGVsZW1lbnQgcHJlc2VudCBpbiB0aGUgYXJyYXkuXG4gKiAgLSBUaGUgY3VycmVudFZhbHVlIGFyZ3VtZW50IGlzIHRoZSB2YWx1ZSBvZiB0aGUgc2Vjb25kIGVsZW1lbnQgcHJlc2VudCBpbiB0aGUgYXJyYXkuXG4gKlxuICogQGNhbGxiYWNrIGZlYXR1cmVSZWR1Y2VDYWxsYmFja1xuICogQHBhcmFtIHsqfSBwcmV2aW91c1ZhbHVlIFRoZSBhY2N1bXVsYXRlZCB2YWx1ZSBwcmV2aW91c2x5IHJldHVybmVkIGluIHRoZSBsYXN0IGludm9jYXRpb25cbiAqIG9mIHRoZSBjYWxsYmFjaywgb3IgaW5pdGlhbFZhbHVlLCBpZiBzdXBwbGllZC5cbiAqIEBwYXJhbSB7RmVhdHVyZX0gY3VycmVudEZlYXR1cmUgVGhlIGN1cnJlbnQgRmVhdHVyZSBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gZmVhdHVyZUluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBGZWF0dXJlIGJlaW5nIHByb2Nlc3NlZC5cbiAqL1xuXG4vKipcbiAqIFJlZHVjZSBmZWF0dXJlcyBpbiBhbnkgR2VvSlNPTiBvYmplY3QsIHNpbWlsYXIgdG8gQXJyYXkucmVkdWNlKCkuXG4gKlxuICogQG5hbWUgZmVhdHVyZVJlZHVjZVxuICogQHBhcmFtIHtGZWF0dXJlQ29sbGVjdGlvbnxGZWF0dXJlfEdlb21ldHJ5fSBnZW9qc29uIGFueSBHZW9KU09OIG9iamVjdFxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgYSBtZXRob2QgdGhhdCB0YWtlcyAocHJldmlvdXNWYWx1ZSwgY3VycmVudEZlYXR1cmUsIGZlYXR1cmVJbmRleClcbiAqIEBwYXJhbSB7Kn0gW2luaXRpYWxWYWx1ZV0gVmFsdWUgdG8gdXNlIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgZmlyc3QgY2FsbCBvZiB0aGUgY2FsbGJhY2suXG4gKiBAcmV0dXJucyB7Kn0gVGhlIHZhbHVlIHRoYXQgcmVzdWx0cyBmcm9tIHRoZSByZWR1Y3Rpb24uXG4gKiBAZXhhbXBsZVxuICogdmFyIGZlYXR1cmVzID0gdHVyZi5mZWF0dXJlQ29sbGVjdGlvbihbXG4gKiAgIHR1cmYucG9pbnQoWzI2LCAzN10sIHtcImZvb1wiOiBcImJhclwifSksXG4gKiAgIHR1cmYucG9pbnQoWzM2LCA1M10sIHtcImhlbGxvXCI6IFwid29ybGRcIn0pXG4gKiBdKTtcbiAqXG4gKiB0dXJmLmZlYXR1cmVSZWR1Y2UoZmVhdHVyZXMsIGZ1bmN0aW9uIChwcmV2aW91c1ZhbHVlLCBjdXJyZW50RmVhdHVyZSwgZmVhdHVyZUluZGV4KSB7XG4gKiAgIC8vPXByZXZpb3VzVmFsdWVcbiAqICAgLy89Y3VycmVudEZlYXR1cmVcbiAqICAgLy89ZmVhdHVyZUluZGV4XG4gKiAgIHJldHVybiBjdXJyZW50RmVhdHVyZVxuICogfSk7XG4gKi9cblxuXG5mdW5jdGlvbiBmZWF0dXJlUmVkdWNlKGdlb2pzb24sIGNhbGxiYWNrLCBpbml0aWFsVmFsdWUpIHtcbiAgdmFyIHByZXZpb3VzVmFsdWUgPSBpbml0aWFsVmFsdWU7XG4gIGZlYXR1cmVFYWNoKGdlb2pzb24sIGZ1bmN0aW9uIChjdXJyZW50RmVhdHVyZSwgZmVhdHVyZUluZGV4KSB7XG4gICAgaWYgKGZlYXR1cmVJbmRleCA9PT0gMCAmJiBpbml0aWFsVmFsdWUgPT09IHVuZGVmaW5lZCkgcHJldmlvdXNWYWx1ZSA9IGN1cnJlbnRGZWF0dXJlO2Vsc2UgcHJldmlvdXNWYWx1ZSA9IGNhbGxiYWNrKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRGZWF0dXJlLCBmZWF0dXJlSW5kZXgpO1xuICB9KTtcbiAgcmV0dXJuIHByZXZpb3VzVmFsdWU7XG59XG4vKipcbiAqIEdldCBhbGwgY29vcmRpbmF0ZXMgZnJvbSBhbnkgR2VvSlNPTiBvYmplY3QuXG4gKlxuICogQG5hbWUgY29vcmRBbGxcbiAqIEBwYXJhbSB7RmVhdHVyZUNvbGxlY3Rpb258RmVhdHVyZXxHZW9tZXRyeX0gZ2VvanNvbiBhbnkgR2VvSlNPTiBvYmplY3RcbiAqIEByZXR1cm5zIHtBcnJheTxBcnJheTxudW1iZXI+Pn0gY29vcmRpbmF0ZSBwb3NpdGlvbiBhcnJheVxuICogQGV4YW1wbGVcbiAqIHZhciBmZWF0dXJlcyA9IHR1cmYuZmVhdHVyZUNvbGxlY3Rpb24oW1xuICogICB0dXJmLnBvaW50KFsyNiwgMzddLCB7Zm9vOiAnYmFyJ30pLFxuICogICB0dXJmLnBvaW50KFszNiwgNTNdLCB7aGVsbG86ICd3b3JsZCd9KVxuICogXSk7XG4gKlxuICogdmFyIGNvb3JkcyA9IHR1cmYuY29vcmRBbGwoZmVhdHVyZXMpO1xuICogLy89IFtbMjYsIDM3XSwgWzM2LCA1M11dXG4gKi9cblxuXG5mdW5jdGlvbiBjb29yZEFsbChnZW9qc29uKSB7XG4gIHZhciBjb29yZHMgPSBbXTtcbiAgY29vcmRFYWNoKGdlb2pzb24sIGZ1bmN0aW9uIChjb29yZCkge1xuICAgIGNvb3Jkcy5wdXNoKGNvb3JkKTtcbiAgfSk7XG4gIHJldHVybiBjb29yZHM7XG59XG4vKipcbiAqIENhbGxiYWNrIGZvciBnZW9tRWFjaFxuICpcbiAqIEBjYWxsYmFjayBnZW9tRWFjaENhbGxiYWNrXG4gKiBAcGFyYW0ge0dlb21ldHJ5fSBjdXJyZW50R2VvbWV0cnkgVGhlIGN1cnJlbnQgR2VvbWV0cnkgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtudW1iZXJ9IGZlYXR1cmVJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgRmVhdHVyZSBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge09iamVjdH0gZmVhdHVyZVByb3BlcnRpZXMgVGhlIGN1cnJlbnQgRmVhdHVyZSBQcm9wZXJ0aWVzIGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gZmVhdHVyZUJCb3ggVGhlIGN1cnJlbnQgRmVhdHVyZSBCQm94IGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gZmVhdHVyZUlkIFRoZSBjdXJyZW50IEZlYXR1cmUgSWQgYmVpbmcgcHJvY2Vzc2VkLlxuICovXG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIGVhY2ggZ2VvbWV0cnkgaW4gYW55IEdlb0pTT04gb2JqZWN0LCBzaW1pbGFyIHRvIEFycmF5LmZvckVhY2goKVxuICpcbiAqIEBuYW1lIGdlb21FYWNoXG4gKiBAcGFyYW0ge0ZlYXR1cmVDb2xsZWN0aW9ufEZlYXR1cmV8R2VvbWV0cnl9IGdlb2pzb24gYW55IEdlb0pTT04gb2JqZWN0XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBhIG1ldGhvZCB0aGF0IHRha2VzIChjdXJyZW50R2VvbWV0cnksIGZlYXR1cmVJbmRleCwgZmVhdHVyZVByb3BlcnRpZXMsIGZlYXR1cmVCQm94LCBmZWF0dXJlSWQpXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqIEBleGFtcGxlXG4gKiB2YXIgZmVhdHVyZXMgPSB0dXJmLmZlYXR1cmVDb2xsZWN0aW9uKFtcbiAqICAgICB0dXJmLnBvaW50KFsyNiwgMzddLCB7Zm9vOiAnYmFyJ30pLFxuICogICAgIHR1cmYucG9pbnQoWzM2LCA1M10sIHtoZWxsbzogJ3dvcmxkJ30pXG4gKiBdKTtcbiAqXG4gKiB0dXJmLmdlb21FYWNoKGZlYXR1cmVzLCBmdW5jdGlvbiAoY3VycmVudEdlb21ldHJ5LCBmZWF0dXJlSW5kZXgsIGZlYXR1cmVQcm9wZXJ0aWVzLCBmZWF0dXJlQkJveCwgZmVhdHVyZUlkKSB7XG4gKiAgIC8vPWN1cnJlbnRHZW9tZXRyeVxuICogICAvLz1mZWF0dXJlSW5kZXhcbiAqICAgLy89ZmVhdHVyZVByb3BlcnRpZXNcbiAqICAgLy89ZmVhdHVyZUJCb3hcbiAqICAgLy89ZmVhdHVyZUlkXG4gKiB9KTtcbiAqL1xuXG5cbmZ1bmN0aW9uIGdlb21FYWNoKGdlb2pzb24sIGNhbGxiYWNrKSB7XG4gIHZhciBpLFxuICAgICAgaixcbiAgICAgIGcsXG4gICAgICBnZW9tZXRyeSxcbiAgICAgIHN0b3BHLFxuICAgICAgZ2VvbWV0cnlNYXliZUNvbGxlY3Rpb24sXG4gICAgICBpc0dlb21ldHJ5Q29sbGVjdGlvbixcbiAgICAgIGZlYXR1cmVQcm9wZXJ0aWVzLFxuICAgICAgZmVhdHVyZUJCb3gsXG4gICAgICBmZWF0dXJlSWQsXG4gICAgICBmZWF0dXJlSW5kZXggPSAwLFxuICAgICAgaXNGZWF0dXJlQ29sbGVjdGlvbiA9IGdlb2pzb24udHlwZSA9PT0gXCJGZWF0dXJlQ29sbGVjdGlvblwiLFxuICAgICAgaXNGZWF0dXJlID0gZ2VvanNvbi50eXBlID09PSBcIkZlYXR1cmVcIixcbiAgICAgIHN0b3AgPSBpc0ZlYXR1cmVDb2xsZWN0aW9uID8gZ2VvanNvbi5mZWF0dXJlcy5sZW5ndGggOiAxOyAvLyBUaGlzIGxvZ2ljIG1heSBsb29rIGEgbGl0dGxlIHdlaXJkLiBUaGUgcmVhc29uIHdoeSBpdCBpcyB0aGF0IHdheVxuICAvLyBpcyBiZWNhdXNlIGl0J3MgdHJ5aW5nIHRvIGJlIGZhc3QuIEdlb0pTT04gc3VwcG9ydHMgbXVsdGlwbGUga2luZHNcbiAgLy8gb2Ygb2JqZWN0cyBhdCBpdHMgcm9vdDogRmVhdHVyZUNvbGxlY3Rpb24sIEZlYXR1cmVzLCBHZW9tZXRyaWVzLlxuICAvLyBUaGlzIGZ1bmN0aW9uIGhhcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgaGFuZGxpbmcgYWxsIG9mIHRoZW0sIGFuZCB0aGF0XG4gIC8vIG1lYW5zIHRoYXQgc29tZSBvZiB0aGUgYGZvcmAgbG9vcHMgeW91IHNlZSBiZWxvdyBhY3R1YWxseSBqdXN0IGRvbid0IGFwcGx5XG4gIC8vIHRvIGNlcnRhaW4gaW5wdXRzLiBGb3IgaW5zdGFuY2UsIGlmIHlvdSBnaXZlIHRoaXMganVzdCBhXG4gIC8vIFBvaW50IGdlb21ldHJ5LCB0aGVuIGJvdGggbG9vcHMgYXJlIHNob3J0LWNpcmN1aXRlZCBhbmQgYWxsIHdlIGRvXG4gIC8vIGlzIGdyYWR1YWxseSByZW5hbWUgdGhlIGlucHV0IHVudGlsIGl0J3MgY2FsbGVkICdnZW9tZXRyeScuXG4gIC8vXG4gIC8vIFRoaXMgYWxzbyBhaW1zIHRvIGFsbG9jYXRlIGFzIGZldyByZXNvdXJjZXMgYXMgcG9zc2libGU6IGp1c3QgYVxuICAvLyBmZXcgbnVtYmVycyBhbmQgYm9vbGVhbnMsIHJhdGhlciB0aGFuIGFueSB0ZW1wb3JhcnkgYXJyYXlzIGFzIHdvdWxkXG4gIC8vIGJlIHJlcXVpcmVkIHdpdGggdGhlIG5vcm1hbGl6YXRpb24gYXBwcm9hY2guXG5cbiAgZm9yIChpID0gMDsgaSA8IHN0b3A7IGkrKykge1xuICAgIGdlb21ldHJ5TWF5YmVDb2xsZWN0aW9uID0gaXNGZWF0dXJlQ29sbGVjdGlvbiA/IGdlb2pzb24uZmVhdHVyZXNbaV0uZ2VvbWV0cnkgOiBpc0ZlYXR1cmUgPyBnZW9qc29uLmdlb21ldHJ5IDogZ2VvanNvbjtcbiAgICBmZWF0dXJlUHJvcGVydGllcyA9IGlzRmVhdHVyZUNvbGxlY3Rpb24gPyBnZW9qc29uLmZlYXR1cmVzW2ldLnByb3BlcnRpZXMgOiBpc0ZlYXR1cmUgPyBnZW9qc29uLnByb3BlcnRpZXMgOiB7fTtcbiAgICBmZWF0dXJlQkJveCA9IGlzRmVhdHVyZUNvbGxlY3Rpb24gPyBnZW9qc29uLmZlYXR1cmVzW2ldLmJib3ggOiBpc0ZlYXR1cmUgPyBnZW9qc29uLmJib3ggOiB1bmRlZmluZWQ7XG4gICAgZmVhdHVyZUlkID0gaXNGZWF0dXJlQ29sbGVjdGlvbiA/IGdlb2pzb24uZmVhdHVyZXNbaV0uaWQgOiBpc0ZlYXR1cmUgPyBnZW9qc29uLmlkIDogdW5kZWZpbmVkO1xuICAgIGlzR2VvbWV0cnlDb2xsZWN0aW9uID0gZ2VvbWV0cnlNYXliZUNvbGxlY3Rpb24gPyBnZW9tZXRyeU1heWJlQ29sbGVjdGlvbi50eXBlID09PSBcIkdlb21ldHJ5Q29sbGVjdGlvblwiIDogZmFsc2U7XG4gICAgc3RvcEcgPSBpc0dlb21ldHJ5Q29sbGVjdGlvbiA/IGdlb21ldHJ5TWF5YmVDb2xsZWN0aW9uLmdlb21ldHJpZXMubGVuZ3RoIDogMTtcblxuICAgIGZvciAoZyA9IDA7IGcgPCBzdG9wRzsgZysrKSB7XG4gICAgICBnZW9tZXRyeSA9IGlzR2VvbWV0cnlDb2xsZWN0aW9uID8gZ2VvbWV0cnlNYXliZUNvbGxlY3Rpb24uZ2VvbWV0cmllc1tnXSA6IGdlb21ldHJ5TWF5YmVDb2xsZWN0aW9uOyAvLyBIYW5kbGUgbnVsbCBHZW9tZXRyeVxuXG4gICAgICBpZiAoZ2VvbWV0cnkgPT09IG51bGwpIHtcbiAgICAgICAgaWYgKGNhbGxiYWNrKG51bGwsIGZlYXR1cmVJbmRleCwgZmVhdHVyZVByb3BlcnRpZXMsIGZlYXR1cmVCQm94LCBmZWF0dXJlSWQpID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgc3dpdGNoIChnZW9tZXRyeS50eXBlKSB7XG4gICAgICAgIGNhc2UgXCJQb2ludFwiOlxuICAgICAgICBjYXNlIFwiTGluZVN0cmluZ1wiOlxuICAgICAgICBjYXNlIFwiTXVsdGlQb2ludFwiOlxuICAgICAgICBjYXNlIFwiUG9seWdvblwiOlxuICAgICAgICBjYXNlIFwiTXVsdGlMaW5lU3RyaW5nXCI6XG4gICAgICAgIGNhc2UgXCJNdWx0aVBvbHlnb25cIjpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2soZ2VvbWV0cnksIGZlYXR1cmVJbmRleCwgZmVhdHVyZVByb3BlcnRpZXMsIGZlYXR1cmVCQm94LCBmZWF0dXJlSWQpID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgXCJHZW9tZXRyeUNvbGxlY3Rpb25cIjpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgZ2VvbWV0cnkuZ2VvbWV0cmllcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICBpZiAoY2FsbGJhY2soZ2VvbWV0cnkuZ2VvbWV0cmllc1tqXSwgZmVhdHVyZUluZGV4LCBmZWF0dXJlUHJvcGVydGllcywgZmVhdHVyZUJCb3gsIGZlYXR1cmVJZCkgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVua25vd24gR2VvbWV0cnkgVHlwZVwiKTtcbiAgICAgIH1cbiAgICB9IC8vIE9ubHkgaW5jcmVhc2UgYGZlYXR1cmVJbmRleGAgcGVyIGVhY2ggZmVhdHVyZVxuXG5cbiAgICBmZWF0dXJlSW5kZXgrKztcbiAgfVxufVxuLyoqXG4gKiBDYWxsYmFjayBmb3IgZ2VvbVJlZHVjZVxuICpcbiAqIFRoZSBmaXJzdCB0aW1lIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBjYWxsZWQsIHRoZSB2YWx1ZXMgcHJvdmlkZWQgYXMgYXJndW1lbnRzIGRlcGVuZFxuICogb24gd2hldGhlciB0aGUgcmVkdWNlIG1ldGhvZCBoYXMgYW4gaW5pdGlhbFZhbHVlIGFyZ3VtZW50LlxuICpcbiAqIElmIGFuIGluaXRpYWxWYWx1ZSBpcyBwcm92aWRlZCB0byB0aGUgcmVkdWNlIG1ldGhvZDpcbiAqICAtIFRoZSBwcmV2aW91c1ZhbHVlIGFyZ3VtZW50IGlzIGluaXRpYWxWYWx1ZS5cbiAqICAtIFRoZSBjdXJyZW50VmFsdWUgYXJndW1lbnQgaXMgdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBlbGVtZW50IHByZXNlbnQgaW4gdGhlIGFycmF5LlxuICpcbiAqIElmIGFuIGluaXRpYWxWYWx1ZSBpcyBub3QgcHJvdmlkZWQ6XG4gKiAgLSBUaGUgcHJldmlvdXNWYWx1ZSBhcmd1bWVudCBpcyB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0IGVsZW1lbnQgcHJlc2VudCBpbiB0aGUgYXJyYXkuXG4gKiAgLSBUaGUgY3VycmVudFZhbHVlIGFyZ3VtZW50IGlzIHRoZSB2YWx1ZSBvZiB0aGUgc2Vjb25kIGVsZW1lbnQgcHJlc2VudCBpbiB0aGUgYXJyYXkuXG4gKlxuICogQGNhbGxiYWNrIGdlb21SZWR1Y2VDYWxsYmFja1xuICogQHBhcmFtIHsqfSBwcmV2aW91c1ZhbHVlIFRoZSBhY2N1bXVsYXRlZCB2YWx1ZSBwcmV2aW91c2x5IHJldHVybmVkIGluIHRoZSBsYXN0IGludm9jYXRpb25cbiAqIG9mIHRoZSBjYWxsYmFjaywgb3IgaW5pdGlhbFZhbHVlLCBpZiBzdXBwbGllZC5cbiAqIEBwYXJhbSB7R2VvbWV0cnl9IGN1cnJlbnRHZW9tZXRyeSBUaGUgY3VycmVudCBHZW9tZXRyeSBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gZmVhdHVyZUluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBGZWF0dXJlIGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBmZWF0dXJlUHJvcGVydGllcyBUaGUgY3VycmVudCBGZWF0dXJlIFByb3BlcnRpZXMgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBmZWF0dXJlQkJveCBUaGUgY3VycmVudCBGZWF0dXJlIEJCb3ggYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSBmZWF0dXJlSWQgVGhlIGN1cnJlbnQgRmVhdHVyZSBJZCBiZWluZyBwcm9jZXNzZWQuXG4gKi9cblxuLyoqXG4gKiBSZWR1Y2UgZ2VvbWV0cnkgaW4gYW55IEdlb0pTT04gb2JqZWN0LCBzaW1pbGFyIHRvIEFycmF5LnJlZHVjZSgpLlxuICpcbiAqIEBuYW1lIGdlb21SZWR1Y2VcbiAqIEBwYXJhbSB7RmVhdHVyZUNvbGxlY3Rpb258RmVhdHVyZXxHZW9tZXRyeX0gZ2VvanNvbiBhbnkgR2VvSlNPTiBvYmplY3RcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIGEgbWV0aG9kIHRoYXQgdGFrZXMgKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRHZW9tZXRyeSwgZmVhdHVyZUluZGV4LCBmZWF0dXJlUHJvcGVydGllcywgZmVhdHVyZUJCb3gsIGZlYXR1cmVJZClcbiAqIEBwYXJhbSB7Kn0gW2luaXRpYWxWYWx1ZV0gVmFsdWUgdG8gdXNlIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgZmlyc3QgY2FsbCBvZiB0aGUgY2FsbGJhY2suXG4gKiBAcmV0dXJucyB7Kn0gVGhlIHZhbHVlIHRoYXQgcmVzdWx0cyBmcm9tIHRoZSByZWR1Y3Rpb24uXG4gKiBAZXhhbXBsZVxuICogdmFyIGZlYXR1cmVzID0gdHVyZi5mZWF0dXJlQ29sbGVjdGlvbihbXG4gKiAgICAgdHVyZi5wb2ludChbMjYsIDM3XSwge2ZvbzogJ2Jhcid9KSxcbiAqICAgICB0dXJmLnBvaW50KFszNiwgNTNdLCB7aGVsbG86ICd3b3JsZCd9KVxuICogXSk7XG4gKlxuICogdHVyZi5nZW9tUmVkdWNlKGZlYXR1cmVzLCBmdW5jdGlvbiAocHJldmlvdXNWYWx1ZSwgY3VycmVudEdlb21ldHJ5LCBmZWF0dXJlSW5kZXgsIGZlYXR1cmVQcm9wZXJ0aWVzLCBmZWF0dXJlQkJveCwgZmVhdHVyZUlkKSB7XG4gKiAgIC8vPXByZXZpb3VzVmFsdWVcbiAqICAgLy89Y3VycmVudEdlb21ldHJ5XG4gKiAgIC8vPWZlYXR1cmVJbmRleFxuICogICAvLz1mZWF0dXJlUHJvcGVydGllc1xuICogICAvLz1mZWF0dXJlQkJveFxuICogICAvLz1mZWF0dXJlSWRcbiAqICAgcmV0dXJuIGN1cnJlbnRHZW9tZXRyeVxuICogfSk7XG4gKi9cblxuXG5mdW5jdGlvbiBnZW9tUmVkdWNlKGdlb2pzb24sIGNhbGxiYWNrLCBpbml0aWFsVmFsdWUpIHtcbiAgdmFyIHByZXZpb3VzVmFsdWUgPSBpbml0aWFsVmFsdWU7XG4gIGdlb21FYWNoKGdlb2pzb24sIGZ1bmN0aW9uIChjdXJyZW50R2VvbWV0cnksIGZlYXR1cmVJbmRleCwgZmVhdHVyZVByb3BlcnRpZXMsIGZlYXR1cmVCQm94LCBmZWF0dXJlSWQpIHtcbiAgICBpZiAoZmVhdHVyZUluZGV4ID09PSAwICYmIGluaXRpYWxWYWx1ZSA9PT0gdW5kZWZpbmVkKSBwcmV2aW91c1ZhbHVlID0gY3VycmVudEdlb21ldHJ5O2Vsc2UgcHJldmlvdXNWYWx1ZSA9IGNhbGxiYWNrKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRHZW9tZXRyeSwgZmVhdHVyZUluZGV4LCBmZWF0dXJlUHJvcGVydGllcywgZmVhdHVyZUJCb3gsIGZlYXR1cmVJZCk7XG4gIH0pO1xuICByZXR1cm4gcHJldmlvdXNWYWx1ZTtcbn1cbi8qKlxuICogQ2FsbGJhY2sgZm9yIGZsYXR0ZW5FYWNoXG4gKlxuICogQGNhbGxiYWNrIGZsYXR0ZW5FYWNoQ2FsbGJhY2tcbiAqIEBwYXJhbSB7RmVhdHVyZX0gY3VycmVudEZlYXR1cmUgVGhlIGN1cnJlbnQgZmxhdHRlbmVkIGZlYXR1cmUgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtudW1iZXJ9IGZlYXR1cmVJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgRmVhdHVyZSBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gbXVsdGlGZWF0dXJlSW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIE11bHRpLUZlYXR1cmUgYmVpbmcgcHJvY2Vzc2VkLlxuICovXG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIGZsYXR0ZW5lZCBmZWF0dXJlcyBpbiBhbnkgR2VvSlNPTiBvYmplY3QsIHNpbWlsYXIgdG9cbiAqIEFycmF5LmZvckVhY2guXG4gKlxuICogQG5hbWUgZmxhdHRlbkVhY2hcbiAqIEBwYXJhbSB7RmVhdHVyZUNvbGxlY3Rpb258RmVhdHVyZXxHZW9tZXRyeX0gZ2VvanNvbiBhbnkgR2VvSlNPTiBvYmplY3RcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIGEgbWV0aG9kIHRoYXQgdGFrZXMgKGN1cnJlbnRGZWF0dXJlLCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4KVxuICogQGV4YW1wbGVcbiAqIHZhciBmZWF0dXJlcyA9IHR1cmYuZmVhdHVyZUNvbGxlY3Rpb24oW1xuICogICAgIHR1cmYucG9pbnQoWzI2LCAzN10sIHtmb286ICdiYXInfSksXG4gKiAgICAgdHVyZi5tdWx0aVBvaW50KFtbNDAsIDMwXSwgWzM2LCA1M11dLCB7aGVsbG86ICd3b3JsZCd9KVxuICogXSk7XG4gKlxuICogdHVyZi5mbGF0dGVuRWFjaChmZWF0dXJlcywgZnVuY3Rpb24gKGN1cnJlbnRGZWF0dXJlLCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4KSB7XG4gKiAgIC8vPWN1cnJlbnRGZWF0dXJlXG4gKiAgIC8vPWZlYXR1cmVJbmRleFxuICogICAvLz1tdWx0aUZlYXR1cmVJbmRleFxuICogfSk7XG4gKi9cblxuXG5mdW5jdGlvbiBmbGF0dGVuRWFjaChnZW9qc29uLCBjYWxsYmFjaykge1xuICBnZW9tRWFjaChnZW9qc29uLCBmdW5jdGlvbiAoZ2VvbWV0cnksIGZlYXR1cmVJbmRleCwgcHJvcGVydGllcywgYmJveCwgaWQpIHtcbiAgICAvLyBDYWxsYmFjayBmb3Igc2luZ2xlIGdlb21ldHJ5XG4gICAgdmFyIHR5cGUgPSBnZW9tZXRyeSA9PT0gbnVsbCA/IG51bGwgOiBnZW9tZXRyeS50eXBlO1xuXG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIG51bGw6XG4gICAgICBjYXNlIFwiUG9pbnRcIjpcbiAgICAgIGNhc2UgXCJMaW5lU3RyaW5nXCI6XG4gICAgICBjYXNlIFwiUG9seWdvblwiOlxuICAgICAgICBpZiAoY2FsbGJhY2soZmVhdHVyZShnZW9tZXRyeSwgcHJvcGVydGllcywge1xuICAgICAgICAgIGJib3g6IGJib3gsXG4gICAgICAgICAgaWQ6IGlkXG4gICAgICAgIH0pLCBmZWF0dXJlSW5kZXgsIDApID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGdlb21UeXBlOyAvLyBDYWxsYmFjayBmb3IgbXVsdGktZ2VvbWV0cnlcblxuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBcIk11bHRpUG9pbnRcIjpcbiAgICAgICAgZ2VvbVR5cGUgPSBcIlBvaW50XCI7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiTXVsdGlMaW5lU3RyaW5nXCI6XG4gICAgICAgIGdlb21UeXBlID0gXCJMaW5lU3RyaW5nXCI7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiTXVsdGlQb2x5Z29uXCI6XG4gICAgICAgIGdlb21UeXBlID0gXCJQb2x5Z29uXCI7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGZvciAodmFyIG11bHRpRmVhdHVyZUluZGV4ID0gMDsgbXVsdGlGZWF0dXJlSW5kZXggPCBnZW9tZXRyeS5jb29yZGluYXRlcy5sZW5ndGg7IG11bHRpRmVhdHVyZUluZGV4KyspIHtcbiAgICAgIHZhciBjb29yZGluYXRlID0gZ2VvbWV0cnkuY29vcmRpbmF0ZXNbbXVsdGlGZWF0dXJlSW5kZXhdO1xuICAgICAgdmFyIGdlb20gPSB7XG4gICAgICAgIHR5cGU6IGdlb21UeXBlLFxuICAgICAgICBjb29yZGluYXRlczogY29vcmRpbmF0ZVxuICAgICAgfTtcbiAgICAgIGlmIChjYWxsYmFjayhmZWF0dXJlKGdlb20sIHByb3BlcnRpZXMpLCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4KSA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0pO1xufVxuLyoqXG4gKiBDYWxsYmFjayBmb3IgZmxhdHRlblJlZHVjZVxuICpcbiAqIFRoZSBmaXJzdCB0aW1lIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBjYWxsZWQsIHRoZSB2YWx1ZXMgcHJvdmlkZWQgYXMgYXJndW1lbnRzIGRlcGVuZFxuICogb24gd2hldGhlciB0aGUgcmVkdWNlIG1ldGhvZCBoYXMgYW4gaW5pdGlhbFZhbHVlIGFyZ3VtZW50LlxuICpcbiAqIElmIGFuIGluaXRpYWxWYWx1ZSBpcyBwcm92aWRlZCB0byB0aGUgcmVkdWNlIG1ldGhvZDpcbiAqICAtIFRoZSBwcmV2aW91c1ZhbHVlIGFyZ3VtZW50IGlzIGluaXRpYWxWYWx1ZS5cbiAqICAtIFRoZSBjdXJyZW50VmFsdWUgYXJndW1lbnQgaXMgdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBlbGVtZW50IHByZXNlbnQgaW4gdGhlIGFycmF5LlxuICpcbiAqIElmIGFuIGluaXRpYWxWYWx1ZSBpcyBub3QgcHJvdmlkZWQ6XG4gKiAgLSBUaGUgcHJldmlvdXNWYWx1ZSBhcmd1bWVudCBpcyB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0IGVsZW1lbnQgcHJlc2VudCBpbiB0aGUgYXJyYXkuXG4gKiAgLSBUaGUgY3VycmVudFZhbHVlIGFyZ3VtZW50IGlzIHRoZSB2YWx1ZSBvZiB0aGUgc2Vjb25kIGVsZW1lbnQgcHJlc2VudCBpbiB0aGUgYXJyYXkuXG4gKlxuICogQGNhbGxiYWNrIGZsYXR0ZW5SZWR1Y2VDYWxsYmFja1xuICogQHBhcmFtIHsqfSBwcmV2aW91c1ZhbHVlIFRoZSBhY2N1bXVsYXRlZCB2YWx1ZSBwcmV2aW91c2x5IHJldHVybmVkIGluIHRoZSBsYXN0IGludm9jYXRpb25cbiAqIG9mIHRoZSBjYWxsYmFjaywgb3IgaW5pdGlhbFZhbHVlLCBpZiBzdXBwbGllZC5cbiAqIEBwYXJhbSB7RmVhdHVyZX0gY3VycmVudEZlYXR1cmUgVGhlIGN1cnJlbnQgRmVhdHVyZSBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gZmVhdHVyZUluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBGZWF0dXJlIGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBtdWx0aUZlYXR1cmVJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgTXVsdGktRmVhdHVyZSBiZWluZyBwcm9jZXNzZWQuXG4gKi9cblxuLyoqXG4gKiBSZWR1Y2UgZmxhdHRlbmVkIGZlYXR1cmVzIGluIGFueSBHZW9KU09OIG9iamVjdCwgc2ltaWxhciB0byBBcnJheS5yZWR1Y2UoKS5cbiAqXG4gKiBAbmFtZSBmbGF0dGVuUmVkdWNlXG4gKiBAcGFyYW0ge0ZlYXR1cmVDb2xsZWN0aW9ufEZlYXR1cmV8R2VvbWV0cnl9IGdlb2pzb24gYW55IEdlb0pTT04gb2JqZWN0XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBhIG1ldGhvZCB0aGF0IHRha2VzIChwcmV2aW91c1ZhbHVlLCBjdXJyZW50RmVhdHVyZSwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleClcbiAqIEBwYXJhbSB7Kn0gW2luaXRpYWxWYWx1ZV0gVmFsdWUgdG8gdXNlIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgZmlyc3QgY2FsbCBvZiB0aGUgY2FsbGJhY2suXG4gKiBAcmV0dXJucyB7Kn0gVGhlIHZhbHVlIHRoYXQgcmVzdWx0cyBmcm9tIHRoZSByZWR1Y3Rpb24uXG4gKiBAZXhhbXBsZVxuICogdmFyIGZlYXR1cmVzID0gdHVyZi5mZWF0dXJlQ29sbGVjdGlvbihbXG4gKiAgICAgdHVyZi5wb2ludChbMjYsIDM3XSwge2ZvbzogJ2Jhcid9KSxcbiAqICAgICB0dXJmLm11bHRpUG9pbnQoW1s0MCwgMzBdLCBbMzYsIDUzXV0sIHtoZWxsbzogJ3dvcmxkJ30pXG4gKiBdKTtcbiAqXG4gKiB0dXJmLmZsYXR0ZW5SZWR1Y2UoZmVhdHVyZXMsIGZ1bmN0aW9uIChwcmV2aW91c1ZhbHVlLCBjdXJyZW50RmVhdHVyZSwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCkge1xuICogICAvLz1wcmV2aW91c1ZhbHVlXG4gKiAgIC8vPWN1cnJlbnRGZWF0dXJlXG4gKiAgIC8vPWZlYXR1cmVJbmRleFxuICogICAvLz1tdWx0aUZlYXR1cmVJbmRleFxuICogICByZXR1cm4gY3VycmVudEZlYXR1cmVcbiAqIH0pO1xuICovXG5cblxuZnVuY3Rpb24gZmxhdHRlblJlZHVjZShnZW9qc29uLCBjYWxsYmFjaywgaW5pdGlhbFZhbHVlKSB7XG4gIHZhciBwcmV2aW91c1ZhbHVlID0gaW5pdGlhbFZhbHVlO1xuICBmbGF0dGVuRWFjaChnZW9qc29uLCBmdW5jdGlvbiAoY3VycmVudEZlYXR1cmUsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgpIHtcbiAgICBpZiAoZmVhdHVyZUluZGV4ID09PSAwICYmIG11bHRpRmVhdHVyZUluZGV4ID09PSAwICYmIGluaXRpYWxWYWx1ZSA9PT0gdW5kZWZpbmVkKSBwcmV2aW91c1ZhbHVlID0gY3VycmVudEZlYXR1cmU7ZWxzZSBwcmV2aW91c1ZhbHVlID0gY2FsbGJhY2socHJldmlvdXNWYWx1ZSwgY3VycmVudEZlYXR1cmUsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgpO1xuICB9KTtcbiAgcmV0dXJuIHByZXZpb3VzVmFsdWU7XG59XG4vKipcbiAqIENhbGxiYWNrIGZvciBzZWdtZW50RWFjaFxuICpcbiAqIEBjYWxsYmFjayBzZWdtZW50RWFjaENhbGxiYWNrXG4gKiBAcGFyYW0ge0ZlYXR1cmU8TGluZVN0cmluZz59IGN1cnJlbnRTZWdtZW50IFRoZSBjdXJyZW50IFNlZ21lbnQgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtudW1iZXJ9IGZlYXR1cmVJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgRmVhdHVyZSBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gbXVsdGlGZWF0dXJlSW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIE11bHRpLUZlYXR1cmUgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtudW1iZXJ9IGdlb21ldHJ5SW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIEdlb21ldHJ5IGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBzZWdtZW50SW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIFNlZ21lbnQgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgMi12ZXJ0ZXggbGluZSBzZWdtZW50IGluIGFueSBHZW9KU09OIG9iamVjdCwgc2ltaWxhciB0byBBcnJheS5mb3JFYWNoKClcbiAqIChNdWx0aSlQb2ludCBnZW9tZXRyaWVzIGRvIG5vdCBjb250YWluIHNlZ21lbnRzIHRoZXJlZm9yZSB0aGV5IGFyZSBpZ25vcmVkIGR1cmluZyB0aGlzIG9wZXJhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0ZlYXR1cmVDb2xsZWN0aW9ufEZlYXR1cmV8R2VvbWV0cnl9IGdlb2pzb24gYW55IEdlb0pTT05cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIGEgbWV0aG9kIHRoYXQgdGFrZXMgKGN1cnJlbnRTZWdtZW50LCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4LCBnZW9tZXRyeUluZGV4LCBzZWdtZW50SW5kZXgpXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqIEBleGFtcGxlXG4gKiB2YXIgcG9seWdvbiA9IHR1cmYucG9seWdvbihbW1stNTAsIDVdLCBbLTQwLCAtMTBdLCBbLTUwLCAtMTBdLCBbLTQwLCA1XSwgWy01MCwgNV1dXSk7XG4gKlxuICogLy8gSXRlcmF0ZSBvdmVyIEdlb0pTT04gYnkgMi12ZXJ0ZXggc2VnbWVudHNcbiAqIHR1cmYuc2VnbWVudEVhY2gocG9seWdvbiwgZnVuY3Rpb24gKGN1cnJlbnRTZWdtZW50LCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4LCBnZW9tZXRyeUluZGV4LCBzZWdtZW50SW5kZXgpIHtcbiAqICAgLy89Y3VycmVudFNlZ21lbnRcbiAqICAgLy89ZmVhdHVyZUluZGV4XG4gKiAgIC8vPW11bHRpRmVhdHVyZUluZGV4XG4gKiAgIC8vPWdlb21ldHJ5SW5kZXhcbiAqICAgLy89c2VnbWVudEluZGV4XG4gKiB9KTtcbiAqXG4gKiAvLyBDYWxjdWxhdGUgdGhlIHRvdGFsIG51bWJlciBvZiBzZWdtZW50c1xuICogdmFyIHRvdGFsID0gMDtcbiAqIHR1cmYuc2VnbWVudEVhY2gocG9seWdvbiwgZnVuY3Rpb24gKCkge1xuICogICAgIHRvdGFsKys7XG4gKiB9KTtcbiAqL1xuXG5cbmZ1bmN0aW9uIHNlZ21lbnRFYWNoKGdlb2pzb24sIGNhbGxiYWNrKSB7XG4gIGZsYXR0ZW5FYWNoKGdlb2pzb24sIGZ1bmN0aW9uIChmZWF0dXJlLCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4KSB7XG4gICAgdmFyIHNlZ21lbnRJbmRleCA9IDA7IC8vIEV4Y2x1ZGUgbnVsbCBHZW9tZXRyaWVzXG5cbiAgICBpZiAoIWZlYXR1cmUuZ2VvbWV0cnkpIHJldHVybjsgLy8gKE11bHRpKVBvaW50IGdlb21ldHJpZXMgZG8gbm90IGNvbnRhaW4gc2VnbWVudHMgdGhlcmVmb3JlIHRoZXkgYXJlIGlnbm9yZWQgZHVyaW5nIHRoaXMgb3BlcmF0aW9uLlxuXG4gICAgdmFyIHR5cGUgPSBmZWF0dXJlLmdlb21ldHJ5LnR5cGU7XG4gICAgaWYgKHR5cGUgPT09IFwiUG9pbnRcIiB8fCB0eXBlID09PSBcIk11bHRpUG9pbnRcIikgcmV0dXJuOyAvLyBHZW5lcmF0ZSAyLXZlcnRleCBsaW5lIHNlZ21lbnRzXG5cbiAgICB2YXIgcHJldmlvdXNDb29yZHM7XG4gICAgdmFyIHByZXZpb3VzRmVhdHVyZUluZGV4ID0gMDtcbiAgICB2YXIgcHJldmlvdXNNdWx0aUluZGV4ID0gMDtcbiAgICB2YXIgcHJldkdlb21JbmRleCA9IDA7XG4gICAgaWYgKGNvb3JkRWFjaChmZWF0dXJlLCBmdW5jdGlvbiAoY3VycmVudENvb3JkLCBjb29yZEluZGV4LCBmZWF0dXJlSW5kZXhDb29yZCwgbXVsdGlQYXJ0SW5kZXhDb29yZCwgZ2VvbWV0cnlJbmRleCkge1xuICAgICAgLy8gU2ltdWxhdGluZyBhIG1ldGEuY29vcmRSZWR1Y2UoKSBzaW5jZSBgcmVkdWNlYCBvcGVyYXRpb25zIGNhbm5vdCBiZSBzdG9wcGVkIGJ5IHJldHVybmluZyBgZmFsc2VgXG4gICAgICBpZiAocHJldmlvdXNDb29yZHMgPT09IHVuZGVmaW5lZCB8fCBmZWF0dXJlSW5kZXggPiBwcmV2aW91c0ZlYXR1cmVJbmRleCB8fCBtdWx0aVBhcnRJbmRleENvb3JkID4gcHJldmlvdXNNdWx0aUluZGV4IHx8IGdlb21ldHJ5SW5kZXggPiBwcmV2R2VvbUluZGV4KSB7XG4gICAgICAgIHByZXZpb3VzQ29vcmRzID0gY3VycmVudENvb3JkO1xuICAgICAgICBwcmV2aW91c0ZlYXR1cmVJbmRleCA9IGZlYXR1cmVJbmRleDtcbiAgICAgICAgcHJldmlvdXNNdWx0aUluZGV4ID0gbXVsdGlQYXJ0SW5kZXhDb29yZDtcbiAgICAgICAgcHJldkdlb21JbmRleCA9IGdlb21ldHJ5SW5kZXg7XG4gICAgICAgIHNlZ21lbnRJbmRleCA9IDA7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIGN1cnJlbnRTZWdtZW50ID0gbGluZVN0cmluZyhbcHJldmlvdXNDb29yZHMsIGN1cnJlbnRDb29yZF0sIGZlYXR1cmUucHJvcGVydGllcyk7XG4gICAgICBpZiAoY2FsbGJhY2soY3VycmVudFNlZ21lbnQsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgsIGdlb21ldHJ5SW5kZXgsIHNlZ21lbnRJbmRleCkgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG4gICAgICBzZWdtZW50SW5kZXgrKztcbiAgICAgIHByZXZpb3VzQ29vcmRzID0gY3VycmVudENvb3JkO1xuICAgIH0pID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuICB9KTtcbn1cbi8qKlxuICogQ2FsbGJhY2sgZm9yIHNlZ21lbnRSZWR1Y2VcbiAqXG4gKiBUaGUgZmlyc3QgdGltZSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgY2FsbGVkLCB0aGUgdmFsdWVzIHByb3ZpZGVkIGFzIGFyZ3VtZW50cyBkZXBlbmRcbiAqIG9uIHdoZXRoZXIgdGhlIHJlZHVjZSBtZXRob2QgaGFzIGFuIGluaXRpYWxWYWx1ZSBhcmd1bWVudC5cbiAqXG4gKiBJZiBhbiBpbml0aWFsVmFsdWUgaXMgcHJvdmlkZWQgdG8gdGhlIHJlZHVjZSBtZXRob2Q6XG4gKiAgLSBUaGUgcHJldmlvdXNWYWx1ZSBhcmd1bWVudCBpcyBpbml0aWFsVmFsdWUuXG4gKiAgLSBUaGUgY3VycmVudFZhbHVlIGFyZ3VtZW50IGlzIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgZWxlbWVudCBwcmVzZW50IGluIHRoZSBhcnJheS5cbiAqXG4gKiBJZiBhbiBpbml0aWFsVmFsdWUgaXMgbm90IHByb3ZpZGVkOlxuICogIC0gVGhlIHByZXZpb3VzVmFsdWUgYXJndW1lbnQgaXMgdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBlbGVtZW50IHByZXNlbnQgaW4gdGhlIGFycmF5LlxuICogIC0gVGhlIGN1cnJlbnRWYWx1ZSBhcmd1bWVudCBpcyB0aGUgdmFsdWUgb2YgdGhlIHNlY29uZCBlbGVtZW50IHByZXNlbnQgaW4gdGhlIGFycmF5LlxuICpcbiAqIEBjYWxsYmFjayBzZWdtZW50UmVkdWNlQ2FsbGJhY2tcbiAqIEBwYXJhbSB7Kn0gcHJldmlvdXNWYWx1ZSBUaGUgYWNjdW11bGF0ZWQgdmFsdWUgcHJldmlvdXNseSByZXR1cm5lZCBpbiB0aGUgbGFzdCBpbnZvY2F0aW9uXG4gKiBvZiB0aGUgY2FsbGJhY2ssIG9yIGluaXRpYWxWYWx1ZSwgaWYgc3VwcGxpZWQuXG4gKiBAcGFyYW0ge0ZlYXR1cmU8TGluZVN0cmluZz59IGN1cnJlbnRTZWdtZW50IFRoZSBjdXJyZW50IFNlZ21lbnQgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtudW1iZXJ9IGZlYXR1cmVJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgRmVhdHVyZSBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gbXVsdGlGZWF0dXJlSW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIE11bHRpLUZlYXR1cmUgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtudW1iZXJ9IGdlb21ldHJ5SW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIEdlb21ldHJ5IGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBzZWdtZW50SW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIFNlZ21lbnQgYmVpbmcgcHJvY2Vzc2VkLlxuICovXG5cbi8qKlxuICogUmVkdWNlIDItdmVydGV4IGxpbmUgc2VnbWVudCBpbiBhbnkgR2VvSlNPTiBvYmplY3QsIHNpbWlsYXIgdG8gQXJyYXkucmVkdWNlKClcbiAqIChNdWx0aSlQb2ludCBnZW9tZXRyaWVzIGRvIG5vdCBjb250YWluIHNlZ21lbnRzIHRoZXJlZm9yZSB0aGV5IGFyZSBpZ25vcmVkIGR1cmluZyB0aGlzIG9wZXJhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0ZlYXR1cmVDb2xsZWN0aW9ufEZlYXR1cmV8R2VvbWV0cnl9IGdlb2pzb24gYW55IEdlb0pTT05cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIGEgbWV0aG9kIHRoYXQgdGFrZXMgKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRTZWdtZW50LCBjdXJyZW50SW5kZXgpXG4gKiBAcGFyYW0geyp9IFtpbml0aWFsVmFsdWVdIFZhbHVlIHRvIHVzZSBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIGZpcnN0IGNhbGwgb2YgdGhlIGNhbGxiYWNrLlxuICogQHJldHVybnMge3ZvaWR9XG4gKiBAZXhhbXBsZVxuICogdmFyIHBvbHlnb24gPSB0dXJmLnBvbHlnb24oW1tbLTUwLCA1XSwgWy00MCwgLTEwXSwgWy01MCwgLTEwXSwgWy00MCwgNV0sIFstNTAsIDVdXV0pO1xuICpcbiAqIC8vIEl0ZXJhdGUgb3ZlciBHZW9KU09OIGJ5IDItdmVydGV4IHNlZ21lbnRzXG4gKiB0dXJmLnNlZ21lbnRSZWR1Y2UocG9seWdvbiwgZnVuY3Rpb24gKHByZXZpb3VzU2VnbWVudCwgY3VycmVudFNlZ21lbnQsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgsIGdlb21ldHJ5SW5kZXgsIHNlZ21lbnRJbmRleCkge1xuICogICAvLz0gcHJldmlvdXNTZWdtZW50XG4gKiAgIC8vPSBjdXJyZW50U2VnbWVudFxuICogICAvLz0gZmVhdHVyZUluZGV4XG4gKiAgIC8vPSBtdWx0aUZlYXR1cmVJbmRleFxuICogICAvLz0gZ2VvbWV0cnlJbmRleFxuICogICAvLz0gc2VnbWVudEluZGV4XG4gKiAgIHJldHVybiBjdXJyZW50U2VnbWVudFxuICogfSk7XG4gKlxuICogLy8gQ2FsY3VsYXRlIHRoZSB0b3RhbCBudW1iZXIgb2Ygc2VnbWVudHNcbiAqIHZhciBpbml0aWFsVmFsdWUgPSAwXG4gKiB2YXIgdG90YWwgPSB0dXJmLnNlZ21lbnRSZWR1Y2UocG9seWdvbiwgZnVuY3Rpb24gKHByZXZpb3VzVmFsdWUpIHtcbiAqICAgICBwcmV2aW91c1ZhbHVlKys7XG4gKiAgICAgcmV0dXJuIHByZXZpb3VzVmFsdWU7XG4gKiB9LCBpbml0aWFsVmFsdWUpO1xuICovXG5cblxuZnVuY3Rpb24gc2VnbWVudFJlZHVjZShnZW9qc29uLCBjYWxsYmFjaywgaW5pdGlhbFZhbHVlKSB7XG4gIHZhciBwcmV2aW91c1ZhbHVlID0gaW5pdGlhbFZhbHVlO1xuICB2YXIgc3RhcnRlZCA9IGZhbHNlO1xuICBzZWdtZW50RWFjaChnZW9qc29uLCBmdW5jdGlvbiAoY3VycmVudFNlZ21lbnQsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgsIGdlb21ldHJ5SW5kZXgsIHNlZ21lbnRJbmRleCkge1xuICAgIGlmIChzdGFydGVkID09PSBmYWxzZSAmJiBpbml0aWFsVmFsdWUgPT09IHVuZGVmaW5lZCkgcHJldmlvdXNWYWx1ZSA9IGN1cnJlbnRTZWdtZW50O2Vsc2UgcHJldmlvdXNWYWx1ZSA9IGNhbGxiYWNrKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRTZWdtZW50LCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4LCBnZW9tZXRyeUluZGV4LCBzZWdtZW50SW5kZXgpO1xuICAgIHN0YXJ0ZWQgPSB0cnVlO1xuICB9KTtcbiAgcmV0dXJuIHByZXZpb3VzVmFsdWU7XG59XG4vKipcbiAqIENhbGxiYWNrIGZvciBsaW5lRWFjaFxuICpcbiAqIEBjYWxsYmFjayBsaW5lRWFjaENhbGxiYWNrXG4gKiBAcGFyYW0ge0ZlYXR1cmU8TGluZVN0cmluZz59IGN1cnJlbnRMaW5lIFRoZSBjdXJyZW50IExpbmVTdHJpbmd8TGluZWFyUmluZyBiZWluZyBwcm9jZXNzZWRcbiAqIEBwYXJhbSB7bnVtYmVyfSBmZWF0dXJlSW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIEZlYXR1cmUgYmVpbmcgcHJvY2Vzc2VkXG4gKiBAcGFyYW0ge251bWJlcn0gbXVsdGlGZWF0dXJlSW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIE11bHRpLUZlYXR1cmUgYmVpbmcgcHJvY2Vzc2VkXG4gKiBAcGFyYW0ge251bWJlcn0gZ2VvbWV0cnlJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgR2VvbWV0cnkgYmVpbmcgcHJvY2Vzc2VkXG4gKi9cblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgbGluZSBvciByaW5nIGNvb3JkaW5hdGVzIGluIExpbmVTdHJpbmcsIFBvbHlnb24sIE11bHRpTGluZVN0cmluZywgTXVsdGlQb2x5Z29uIEZlYXR1cmVzIG9yIEdlb21ldHJpZXMsXG4gKiBzaW1pbGFyIHRvIEFycmF5LmZvckVhY2guXG4gKlxuICogQG5hbWUgbGluZUVhY2hcbiAqIEBwYXJhbSB7R2VvbWV0cnl8RmVhdHVyZTxMaW5lU3RyaW5nfFBvbHlnb258TXVsdGlMaW5lU3RyaW5nfE11bHRpUG9seWdvbj59IGdlb2pzb24gb2JqZWN0XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBhIG1ldGhvZCB0aGF0IHRha2VzIChjdXJyZW50TGluZSwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCwgZ2VvbWV0cnlJbmRleClcbiAqIEBleGFtcGxlXG4gKiB2YXIgbXVsdGlMaW5lID0gdHVyZi5tdWx0aUxpbmVTdHJpbmcoW1xuICogICBbWzI2LCAzN10sIFszNSwgNDVdXSxcbiAqICAgW1szNiwgNTNdLCBbMzgsIDUwXSwgWzQxLCA1NV1dXG4gKiBdKTtcbiAqXG4gKiB0dXJmLmxpbmVFYWNoKG11bHRpTGluZSwgZnVuY3Rpb24gKGN1cnJlbnRMaW5lLCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4LCBnZW9tZXRyeUluZGV4KSB7XG4gKiAgIC8vPWN1cnJlbnRMaW5lXG4gKiAgIC8vPWZlYXR1cmVJbmRleFxuICogICAvLz1tdWx0aUZlYXR1cmVJbmRleFxuICogICAvLz1nZW9tZXRyeUluZGV4XG4gKiB9KTtcbiAqL1xuXG5cbmZ1bmN0aW9uIGxpbmVFYWNoKGdlb2pzb24sIGNhbGxiYWNrKSB7XG4gIC8vIHZhbGlkYXRpb25cbiAgaWYgKCFnZW9qc29uKSB0aHJvdyBuZXcgRXJyb3IoXCJnZW9qc29uIGlzIHJlcXVpcmVkXCIpO1xuICBmbGF0dGVuRWFjaChnZW9qc29uLCBmdW5jdGlvbiAoZmVhdHVyZSwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCkge1xuICAgIGlmIChmZWF0dXJlLmdlb21ldHJ5ID09PSBudWxsKSByZXR1cm47XG4gICAgdmFyIHR5cGUgPSBmZWF0dXJlLmdlb21ldHJ5LnR5cGU7XG4gICAgdmFyIGNvb3JkcyA9IGZlYXR1cmUuZ2VvbWV0cnkuY29vcmRpbmF0ZXM7XG5cbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgXCJMaW5lU3RyaW5nXCI6XG4gICAgICAgIGlmIChjYWxsYmFjayhmZWF0dXJlLCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4LCAwLCAwKSA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJQb2x5Z29uXCI6XG4gICAgICAgIGZvciAodmFyIGdlb21ldHJ5SW5kZXggPSAwOyBnZW9tZXRyeUluZGV4IDwgY29vcmRzLmxlbmd0aDsgZ2VvbWV0cnlJbmRleCsrKSB7XG4gICAgICAgICAgaWYgKGNhbGxiYWNrKGxpbmVTdHJpbmcoY29vcmRzW2dlb21ldHJ5SW5kZXhdLCBmZWF0dXJlLnByb3BlcnRpZXMpLCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4LCBnZW9tZXRyeUluZGV4KSA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfSk7XG59XG4vKipcbiAqIENhbGxiYWNrIGZvciBsaW5lUmVkdWNlXG4gKlxuICogVGhlIGZpcnN0IHRpbWUgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZCwgdGhlIHZhbHVlcyBwcm92aWRlZCBhcyBhcmd1bWVudHMgZGVwZW5kXG4gKiBvbiB3aGV0aGVyIHRoZSByZWR1Y2UgbWV0aG9kIGhhcyBhbiBpbml0aWFsVmFsdWUgYXJndW1lbnQuXG4gKlxuICogSWYgYW4gaW5pdGlhbFZhbHVlIGlzIHByb3ZpZGVkIHRvIHRoZSByZWR1Y2UgbWV0aG9kOlxuICogIC0gVGhlIHByZXZpb3VzVmFsdWUgYXJndW1lbnQgaXMgaW5pdGlhbFZhbHVlLlxuICogIC0gVGhlIGN1cnJlbnRWYWx1ZSBhcmd1bWVudCBpcyB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0IGVsZW1lbnQgcHJlc2VudCBpbiB0aGUgYXJyYXkuXG4gKlxuICogSWYgYW4gaW5pdGlhbFZhbHVlIGlzIG5vdCBwcm92aWRlZDpcbiAqICAtIFRoZSBwcmV2aW91c1ZhbHVlIGFyZ3VtZW50IGlzIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgZWxlbWVudCBwcmVzZW50IGluIHRoZSBhcnJheS5cbiAqICAtIFRoZSBjdXJyZW50VmFsdWUgYXJndW1lbnQgaXMgdGhlIHZhbHVlIG9mIHRoZSBzZWNvbmQgZWxlbWVudCBwcmVzZW50IGluIHRoZSBhcnJheS5cbiAqXG4gKiBAY2FsbGJhY2sgbGluZVJlZHVjZUNhbGxiYWNrXG4gKiBAcGFyYW0geyp9IHByZXZpb3VzVmFsdWUgVGhlIGFjY3VtdWxhdGVkIHZhbHVlIHByZXZpb3VzbHkgcmV0dXJuZWQgaW4gdGhlIGxhc3QgaW52b2NhdGlvblxuICogb2YgdGhlIGNhbGxiYWNrLCBvciBpbml0aWFsVmFsdWUsIGlmIHN1cHBsaWVkLlxuICogQHBhcmFtIHtGZWF0dXJlPExpbmVTdHJpbmc+fSBjdXJyZW50TGluZSBUaGUgY3VycmVudCBMaW5lU3RyaW5nfExpbmVhclJpbmcgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtudW1iZXJ9IGZlYXR1cmVJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgRmVhdHVyZSBiZWluZyBwcm9jZXNzZWRcbiAqIEBwYXJhbSB7bnVtYmVyfSBtdWx0aUZlYXR1cmVJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgTXVsdGktRmVhdHVyZSBiZWluZyBwcm9jZXNzZWRcbiAqIEBwYXJhbSB7bnVtYmVyfSBnZW9tZXRyeUluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBHZW9tZXRyeSBiZWluZyBwcm9jZXNzZWRcbiAqL1xuXG4vKipcbiAqIFJlZHVjZSBmZWF0dXJlcyBpbiBhbnkgR2VvSlNPTiBvYmplY3QsIHNpbWlsYXIgdG8gQXJyYXkucmVkdWNlKCkuXG4gKlxuICogQG5hbWUgbGluZVJlZHVjZVxuICogQHBhcmFtIHtHZW9tZXRyeXxGZWF0dXJlPExpbmVTdHJpbmd8UG9seWdvbnxNdWx0aUxpbmVTdHJpbmd8TXVsdGlQb2x5Z29uPn0gZ2VvanNvbiBvYmplY3RcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIGEgbWV0aG9kIHRoYXQgdGFrZXMgKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRMaW5lLCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4LCBnZW9tZXRyeUluZGV4KVxuICogQHBhcmFtIHsqfSBbaW5pdGlhbFZhbHVlXSBWYWx1ZSB0byB1c2UgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBmaXJzdCBjYWxsIG9mIHRoZSBjYWxsYmFjay5cbiAqIEByZXR1cm5zIHsqfSBUaGUgdmFsdWUgdGhhdCByZXN1bHRzIGZyb20gdGhlIHJlZHVjdGlvbi5cbiAqIEBleGFtcGxlXG4gKiB2YXIgbXVsdGlQb2x5ID0gdHVyZi5tdWx0aVBvbHlnb24oW1xuICogICB0dXJmLnBvbHlnb24oW1tbMTIsNDhdLFsyLDQxXSxbMjQsMzhdLFsxMiw0OF1dLCBbWzksNDRdLFsxMyw0MV0sWzEzLDQ1XSxbOSw0NF1dXSksXG4gKiAgIHR1cmYucG9seWdvbihbW1s1LCA1XSwgWzAsIDBdLCBbMiwgMl0sIFs0LCA0XSwgWzUsIDVdXV0pXG4gKiBdKTtcbiAqXG4gKiB0dXJmLmxpbmVSZWR1Y2UobXVsdGlQb2x5LCBmdW5jdGlvbiAocHJldmlvdXNWYWx1ZSwgY3VycmVudExpbmUsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgsIGdlb21ldHJ5SW5kZXgpIHtcbiAqICAgLy89cHJldmlvdXNWYWx1ZVxuICogICAvLz1jdXJyZW50TGluZVxuICogICAvLz1mZWF0dXJlSW5kZXhcbiAqICAgLy89bXVsdGlGZWF0dXJlSW5kZXhcbiAqICAgLy89Z2VvbWV0cnlJbmRleFxuICogICByZXR1cm4gY3VycmVudExpbmVcbiAqIH0pO1xuICovXG5cblxuZnVuY3Rpb24gbGluZVJlZHVjZShnZW9qc29uLCBjYWxsYmFjaywgaW5pdGlhbFZhbHVlKSB7XG4gIHZhciBwcmV2aW91c1ZhbHVlID0gaW5pdGlhbFZhbHVlO1xuICBsaW5lRWFjaChnZW9qc29uLCBmdW5jdGlvbiAoY3VycmVudExpbmUsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgsIGdlb21ldHJ5SW5kZXgpIHtcbiAgICBpZiAoZmVhdHVyZUluZGV4ID09PSAwICYmIGluaXRpYWxWYWx1ZSA9PT0gdW5kZWZpbmVkKSBwcmV2aW91c1ZhbHVlID0gY3VycmVudExpbmU7ZWxzZSBwcmV2aW91c1ZhbHVlID0gY2FsbGJhY2socHJldmlvdXNWYWx1ZSwgY3VycmVudExpbmUsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgsIGdlb21ldHJ5SW5kZXgpO1xuICB9KTtcbiAgcmV0dXJuIHByZXZpb3VzVmFsdWU7XG59XG4vKipcbiAqIEZpbmRzIGEgcGFydGljdWxhciAyLXZlcnRleCBMaW5lU3RyaW5nIFNlZ21lbnQgZnJvbSBhIEdlb0pTT04gdXNpbmcgYEB0dXJmL21ldGFgIGluZGV4ZXMuXG4gKlxuICogTmVnYXRpdmUgaW5kZXhlcyBhcmUgcGVybWl0dGVkLlxuICogUG9pbnQgJiBNdWx0aVBvaW50IHdpbGwgYWx3YXlzIHJldHVybiBudWxsLlxuICpcbiAqIEBwYXJhbSB7RmVhdHVyZUNvbGxlY3Rpb258RmVhdHVyZXxHZW9tZXRyeX0gZ2VvanNvbiBBbnkgR2VvSlNPTiBGZWF0dXJlIG9yIEdlb21ldHJ5XG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIE9wdGlvbmFsIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5mZWF0dXJlSW5kZXg9MF0gRmVhdHVyZSBJbmRleFxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLm11bHRpRmVhdHVyZUluZGV4PTBdIE11bHRpLUZlYXR1cmUgSW5kZXhcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5nZW9tZXRyeUluZGV4PTBdIEdlb21ldHJ5IEluZGV4XG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuc2VnbWVudEluZGV4PTBdIFNlZ21lbnQgSW5kZXhcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucy5wcm9wZXJ0aWVzPXt9XSBUcmFuc2xhdGUgUHJvcGVydGllcyB0byBvdXRwdXQgTGluZVN0cmluZ1xuICogQHBhcmFtIHtCQm94fSBbb3B0aW9ucy5iYm94PXt9XSBUcmFuc2xhdGUgQkJveCB0byBvdXRwdXQgTGluZVN0cmluZ1xuICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSBbb3B0aW9ucy5pZD17fV0gVHJhbnNsYXRlIElkIHRvIG91dHB1dCBMaW5lU3RyaW5nXG4gKiBAcmV0dXJucyB7RmVhdHVyZTxMaW5lU3RyaW5nPn0gMi12ZXJ0ZXggR2VvSlNPTiBGZWF0dXJlIExpbmVTdHJpbmdcbiAqIEBleGFtcGxlXG4gKiB2YXIgbXVsdGlMaW5lID0gdHVyZi5tdWx0aUxpbmVTdHJpbmcoW1xuICogICAgIFtbMTAsIDEwXSwgWzUwLCAzMF0sIFszMCwgNDBdXSxcbiAqICAgICBbWy0xMCwgLTEwXSwgWy01MCwgLTMwXSwgWy0zMCwgLTQwXV1cbiAqIF0pO1xuICpcbiAqIC8vIEZpcnN0IFNlZ21lbnQgKGRlZmF1bHRzIGFyZSAwKVxuICogdHVyZi5maW5kU2VnbWVudChtdWx0aUxpbmUpO1xuICogLy8gPT4gRmVhdHVyZTxMaW5lU3RyaW5nPFtbMTAsIDEwXSwgWzUwLCAzMF1dPj5cbiAqXG4gKiAvLyBGaXJzdCBTZWdtZW50IG9mIDJuZCBNdWx0aSBGZWF0dXJlXG4gKiB0dXJmLmZpbmRTZWdtZW50KG11bHRpTGluZSwge211bHRpRmVhdHVyZUluZGV4OiAxfSk7XG4gKiAvLyA9PiBGZWF0dXJlPExpbmVTdHJpbmc8W1stMTAsIC0xMF0sIFstNTAsIC0zMF1dPj5cbiAqXG4gKiAvLyBMYXN0IFNlZ21lbnQgb2YgTGFzdCBNdWx0aSBGZWF0dXJlXG4gKiB0dXJmLmZpbmRTZWdtZW50KG11bHRpTGluZSwge211bHRpRmVhdHVyZUluZGV4OiAtMSwgc2VnbWVudEluZGV4OiAtMX0pO1xuICogLy8gPT4gRmVhdHVyZTxMaW5lU3RyaW5nPFtbLTUwLCAtMzBdLCBbLTMwLCAtNDBdXT4+XG4gKi9cblxuXG5mdW5jdGlvbiBmaW5kU2VnbWVudChnZW9qc29uLCBvcHRpb25zKSB7XG4gIC8vIE9wdGlvbmFsIFBhcmFtZXRlcnNcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIGlmICghaXNPYmplY3Qob3B0aW9ucykpIHRocm93IG5ldyBFcnJvcihcIm9wdGlvbnMgaXMgaW52YWxpZFwiKTtcbiAgdmFyIGZlYXR1cmVJbmRleCA9IG9wdGlvbnMuZmVhdHVyZUluZGV4IHx8IDA7XG4gIHZhciBtdWx0aUZlYXR1cmVJbmRleCA9IG9wdGlvbnMubXVsdGlGZWF0dXJlSW5kZXggfHwgMDtcbiAgdmFyIGdlb21ldHJ5SW5kZXggPSBvcHRpb25zLmdlb21ldHJ5SW5kZXggfHwgMDtcbiAgdmFyIHNlZ21lbnRJbmRleCA9IG9wdGlvbnMuc2VnbWVudEluZGV4IHx8IDA7IC8vIEZpbmQgRmVhdHVyZUluZGV4XG5cbiAgdmFyIHByb3BlcnRpZXMgPSBvcHRpb25zLnByb3BlcnRpZXM7XG4gIHZhciBnZW9tZXRyeTtcblxuICBzd2l0Y2ggKGdlb2pzb24udHlwZSkge1xuICAgIGNhc2UgXCJGZWF0dXJlQ29sbGVjdGlvblwiOlxuICAgICAgaWYgKGZlYXR1cmVJbmRleCA8IDApIGZlYXR1cmVJbmRleCA9IGdlb2pzb24uZmVhdHVyZXMubGVuZ3RoICsgZmVhdHVyZUluZGV4O1xuICAgICAgcHJvcGVydGllcyA9IHByb3BlcnRpZXMgfHwgZ2VvanNvbi5mZWF0dXJlc1tmZWF0dXJlSW5kZXhdLnByb3BlcnRpZXM7XG4gICAgICBnZW9tZXRyeSA9IGdlb2pzb24uZmVhdHVyZXNbZmVhdHVyZUluZGV4XS5nZW9tZXRyeTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcIkZlYXR1cmVcIjpcbiAgICAgIHByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzIHx8IGdlb2pzb24ucHJvcGVydGllcztcbiAgICAgIGdlb21ldHJ5ID0gZ2VvanNvbi5nZW9tZXRyeTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcIlBvaW50XCI6XG4gICAgY2FzZSBcIk11bHRpUG9pbnRcIjpcbiAgICAgIHJldHVybiBudWxsO1xuXG4gICAgY2FzZSBcIkxpbmVTdHJpbmdcIjpcbiAgICBjYXNlIFwiUG9seWdvblwiOlxuICAgIGNhc2UgXCJNdWx0aUxpbmVTdHJpbmdcIjpcbiAgICBjYXNlIFwiTXVsdGlQb2x5Z29uXCI6XG4gICAgICBnZW9tZXRyeSA9IGdlb2pzb247XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJnZW9qc29uIGlzIGludmFsaWRcIik7XG4gIH0gLy8gRmluZCBTZWdtZW50SW5kZXhcblxuXG4gIGlmIChnZW9tZXRyeSA9PT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gIHZhciBjb29yZHMgPSBnZW9tZXRyeS5jb29yZGluYXRlcztcblxuICBzd2l0Y2ggKGdlb21ldHJ5LnR5cGUpIHtcbiAgICBjYXNlIFwiUG9pbnRcIjpcbiAgICBjYXNlIFwiTXVsdGlQb2ludFwiOlxuICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICBjYXNlIFwiTGluZVN0cmluZ1wiOlxuICAgICAgaWYgKHNlZ21lbnRJbmRleCA8IDApIHNlZ21lbnRJbmRleCA9IGNvb3Jkcy5sZW5ndGggKyBzZWdtZW50SW5kZXggLSAxO1xuICAgICAgcmV0dXJuIGxpbmVTdHJpbmcoW2Nvb3Jkc1tzZWdtZW50SW5kZXhdLCBjb29yZHNbc2VnbWVudEluZGV4ICsgMV1dLCBwcm9wZXJ0aWVzLCBvcHRpb25zKTtcblxuICAgIGNhc2UgXCJQb2x5Z29uXCI6XG4gICAgICBpZiAoZ2VvbWV0cnlJbmRleCA8IDApIGdlb21ldHJ5SW5kZXggPSBjb29yZHMubGVuZ3RoICsgZ2VvbWV0cnlJbmRleDtcbiAgICAgIGlmIChzZWdtZW50SW5kZXggPCAwKSBzZWdtZW50SW5kZXggPSBjb29yZHNbZ2VvbWV0cnlJbmRleF0ubGVuZ3RoICsgc2VnbWVudEluZGV4IC0gMTtcbiAgICAgIHJldHVybiBsaW5lU3RyaW5nKFtjb29yZHNbZ2VvbWV0cnlJbmRleF1bc2VnbWVudEluZGV4XSwgY29vcmRzW2dlb21ldHJ5SW5kZXhdW3NlZ21lbnRJbmRleCArIDFdXSwgcHJvcGVydGllcywgb3B0aW9ucyk7XG5cbiAgICBjYXNlIFwiTXVsdGlMaW5lU3RyaW5nXCI6XG4gICAgICBpZiAobXVsdGlGZWF0dXJlSW5kZXggPCAwKSBtdWx0aUZlYXR1cmVJbmRleCA9IGNvb3Jkcy5sZW5ndGggKyBtdWx0aUZlYXR1cmVJbmRleDtcbiAgICAgIGlmIChzZWdtZW50SW5kZXggPCAwKSBzZWdtZW50SW5kZXggPSBjb29yZHNbbXVsdGlGZWF0dXJlSW5kZXhdLmxlbmd0aCArIHNlZ21lbnRJbmRleCAtIDE7XG4gICAgICByZXR1cm4gbGluZVN0cmluZyhbY29vcmRzW211bHRpRmVhdHVyZUluZGV4XVtzZWdtZW50SW5kZXhdLCBjb29yZHNbbXVsdGlGZWF0dXJlSW5kZXhdW3NlZ21lbnRJbmRleCArIDFdXSwgcHJvcGVydGllcywgb3B0aW9ucyk7XG5cbiAgICBjYXNlIFwiTXVsdGlQb2x5Z29uXCI6XG4gICAgICBpZiAobXVsdGlGZWF0dXJlSW5kZXggPCAwKSBtdWx0aUZlYXR1cmVJbmRleCA9IGNvb3Jkcy5sZW5ndGggKyBtdWx0aUZlYXR1cmVJbmRleDtcbiAgICAgIGlmIChnZW9tZXRyeUluZGV4IDwgMCkgZ2VvbWV0cnlJbmRleCA9IGNvb3Jkc1ttdWx0aUZlYXR1cmVJbmRleF0ubGVuZ3RoICsgZ2VvbWV0cnlJbmRleDtcbiAgICAgIGlmIChzZWdtZW50SW5kZXggPCAwKSBzZWdtZW50SW5kZXggPSBjb29yZHNbbXVsdGlGZWF0dXJlSW5kZXhdW2dlb21ldHJ5SW5kZXhdLmxlbmd0aCAtIHNlZ21lbnRJbmRleCAtIDE7XG4gICAgICByZXR1cm4gbGluZVN0cmluZyhbY29vcmRzW211bHRpRmVhdHVyZUluZGV4XVtnZW9tZXRyeUluZGV4XVtzZWdtZW50SW5kZXhdLCBjb29yZHNbbXVsdGlGZWF0dXJlSW5kZXhdW2dlb21ldHJ5SW5kZXhdW3NlZ21lbnRJbmRleCArIDFdXSwgcHJvcGVydGllcywgb3B0aW9ucyk7XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoXCJnZW9qc29uIGlzIGludmFsaWRcIik7XG59XG4vKipcbiAqIEZpbmRzIGEgcGFydGljdWxhciBQb2ludCBmcm9tIGEgR2VvSlNPTiB1c2luZyBgQHR1cmYvbWV0YWAgaW5kZXhlcy5cbiAqXG4gKiBOZWdhdGl2ZSBpbmRleGVzIGFyZSBwZXJtaXR0ZWQuXG4gKlxuICogQHBhcmFtIHtGZWF0dXJlQ29sbGVjdGlvbnxGZWF0dXJlfEdlb21ldHJ5fSBnZW9qc29uIEFueSBHZW9KU09OIEZlYXR1cmUgb3IgR2VvbWV0cnlcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gT3B0aW9uYWwgcGFyYW1ldGVyc1xuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmZlYXR1cmVJbmRleD0wXSBGZWF0dXJlIEluZGV4XG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubXVsdGlGZWF0dXJlSW5kZXg9MF0gTXVsdGktRmVhdHVyZSBJbmRleFxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmdlb21ldHJ5SW5kZXg9MF0gR2VvbWV0cnkgSW5kZXhcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5jb29yZEluZGV4PTBdIENvb3JkIEluZGV4XG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnMucHJvcGVydGllcz17fV0gVHJhbnNsYXRlIFByb3BlcnRpZXMgdG8gb3V0cHV0IFBvaW50XG4gKiBAcGFyYW0ge0JCb3h9IFtvcHRpb25zLmJib3g9e31dIFRyYW5zbGF0ZSBCQm94IHRvIG91dHB1dCBQb2ludFxuICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSBbb3B0aW9ucy5pZD17fV0gVHJhbnNsYXRlIElkIHRvIG91dHB1dCBQb2ludFxuICogQHJldHVybnMge0ZlYXR1cmU8UG9pbnQ+fSAyLXZlcnRleCBHZW9KU09OIEZlYXR1cmUgUG9pbnRcbiAqIEBleGFtcGxlXG4gKiB2YXIgbXVsdGlMaW5lID0gdHVyZi5tdWx0aUxpbmVTdHJpbmcoW1xuICogICAgIFtbMTAsIDEwXSwgWzUwLCAzMF0sIFszMCwgNDBdXSxcbiAqICAgICBbWy0xMCwgLTEwXSwgWy01MCwgLTMwXSwgWy0zMCwgLTQwXV1cbiAqIF0pO1xuICpcbiAqIC8vIEZpcnN0IFNlZ21lbnQgKGRlZmF1bHRzIGFyZSAwKVxuICogdHVyZi5maW5kUG9pbnQobXVsdGlMaW5lKTtcbiAqIC8vID0+IEZlYXR1cmU8UG9pbnQ8WzEwLCAxMF0+PlxuICpcbiAqIC8vIEZpcnN0IFNlZ21lbnQgb2YgdGhlIDJuZCBNdWx0aS1GZWF0dXJlXG4gKiB0dXJmLmZpbmRQb2ludChtdWx0aUxpbmUsIHttdWx0aUZlYXR1cmVJbmRleDogMX0pO1xuICogLy8gPT4gRmVhdHVyZTxQb2ludDxbLTEwLCAtMTBdPj5cbiAqXG4gKiAvLyBMYXN0IFNlZ21lbnQgb2YgbGFzdCBNdWx0aS1GZWF0dXJlXG4gKiB0dXJmLmZpbmRQb2ludChtdWx0aUxpbmUsIHttdWx0aUZlYXR1cmVJbmRleDogLTEsIGNvb3JkSW5kZXg6IC0xfSk7XG4gKiAvLyA9PiBGZWF0dXJlPFBvaW50PFstMzAsIC00MF0+PlxuICovXG5cblxuZnVuY3Rpb24gZmluZFBvaW50KGdlb2pzb24sIG9wdGlvbnMpIHtcbiAgLy8gT3B0aW9uYWwgUGFyYW1ldGVyc1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgaWYgKCFpc09iamVjdChvcHRpb25zKSkgdGhyb3cgbmV3IEVycm9yKFwib3B0aW9ucyBpcyBpbnZhbGlkXCIpO1xuICB2YXIgZmVhdHVyZUluZGV4ID0gb3B0aW9ucy5mZWF0dXJlSW5kZXggfHwgMDtcbiAgdmFyIG11bHRpRmVhdHVyZUluZGV4ID0gb3B0aW9ucy5tdWx0aUZlYXR1cmVJbmRleCB8fCAwO1xuICB2YXIgZ2VvbWV0cnlJbmRleCA9IG9wdGlvbnMuZ2VvbWV0cnlJbmRleCB8fCAwO1xuICB2YXIgY29vcmRJbmRleCA9IG9wdGlvbnMuY29vcmRJbmRleCB8fCAwOyAvLyBGaW5kIEZlYXR1cmVJbmRleFxuXG4gIHZhciBwcm9wZXJ0aWVzID0gb3B0aW9ucy5wcm9wZXJ0aWVzO1xuICB2YXIgZ2VvbWV0cnk7XG5cbiAgc3dpdGNoIChnZW9qc29uLnR5cGUpIHtcbiAgICBjYXNlIFwiRmVhdHVyZUNvbGxlY3Rpb25cIjpcbiAgICAgIGlmIChmZWF0dXJlSW5kZXggPCAwKSBmZWF0dXJlSW5kZXggPSBnZW9qc29uLmZlYXR1cmVzLmxlbmd0aCArIGZlYXR1cmVJbmRleDtcbiAgICAgIHByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzIHx8IGdlb2pzb24uZmVhdHVyZXNbZmVhdHVyZUluZGV4XS5wcm9wZXJ0aWVzO1xuICAgICAgZ2VvbWV0cnkgPSBnZW9qc29uLmZlYXR1cmVzW2ZlYXR1cmVJbmRleF0uZ2VvbWV0cnk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgXCJGZWF0dXJlXCI6XG4gICAgICBwcm9wZXJ0aWVzID0gcHJvcGVydGllcyB8fCBnZW9qc29uLnByb3BlcnRpZXM7XG4gICAgICBnZW9tZXRyeSA9IGdlb2pzb24uZ2VvbWV0cnk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgXCJQb2ludFwiOlxuICAgIGNhc2UgXCJNdWx0aVBvaW50XCI6XG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIGNhc2UgXCJMaW5lU3RyaW5nXCI6XG4gICAgY2FzZSBcIlBvbHlnb25cIjpcbiAgICBjYXNlIFwiTXVsdGlMaW5lU3RyaW5nXCI6XG4gICAgY2FzZSBcIk11bHRpUG9seWdvblwiOlxuICAgICAgZ2VvbWV0cnkgPSBnZW9qc29uO1xuICAgICAgYnJlYWs7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZ2VvanNvbiBpcyBpbnZhbGlkXCIpO1xuICB9IC8vIEZpbmQgQ29vcmQgSW5kZXhcblxuXG4gIGlmIChnZW9tZXRyeSA9PT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gIHZhciBjb29yZHMgPSBnZW9tZXRyeS5jb29yZGluYXRlcztcblxuICBzd2l0Y2ggKGdlb21ldHJ5LnR5cGUpIHtcbiAgICBjYXNlIFwiUG9pbnRcIjpcbiAgICAgIHJldHVybiBwb2ludChjb29yZHMsIHByb3BlcnRpZXMsIG9wdGlvbnMpO1xuXG4gICAgY2FzZSBcIk11bHRpUG9pbnRcIjpcbiAgICAgIGlmIChtdWx0aUZlYXR1cmVJbmRleCA8IDApIG11bHRpRmVhdHVyZUluZGV4ID0gY29vcmRzLmxlbmd0aCArIG11bHRpRmVhdHVyZUluZGV4O1xuICAgICAgcmV0dXJuIHBvaW50KGNvb3Jkc1ttdWx0aUZlYXR1cmVJbmRleF0sIHByb3BlcnRpZXMsIG9wdGlvbnMpO1xuXG4gICAgY2FzZSBcIkxpbmVTdHJpbmdcIjpcbiAgICAgIGlmIChjb29yZEluZGV4IDwgMCkgY29vcmRJbmRleCA9IGNvb3Jkcy5sZW5ndGggKyBjb29yZEluZGV4O1xuICAgICAgcmV0dXJuIHBvaW50KGNvb3Jkc1tjb29yZEluZGV4XSwgcHJvcGVydGllcywgb3B0aW9ucyk7XG5cbiAgICBjYXNlIFwiUG9seWdvblwiOlxuICAgICAgaWYgKGdlb21ldHJ5SW5kZXggPCAwKSBnZW9tZXRyeUluZGV4ID0gY29vcmRzLmxlbmd0aCArIGdlb21ldHJ5SW5kZXg7XG4gICAgICBpZiAoY29vcmRJbmRleCA8IDApIGNvb3JkSW5kZXggPSBjb29yZHNbZ2VvbWV0cnlJbmRleF0ubGVuZ3RoICsgY29vcmRJbmRleDtcbiAgICAgIHJldHVybiBwb2ludChjb29yZHNbZ2VvbWV0cnlJbmRleF1bY29vcmRJbmRleF0sIHByb3BlcnRpZXMsIG9wdGlvbnMpO1xuXG4gICAgY2FzZSBcIk11bHRpTGluZVN0cmluZ1wiOlxuICAgICAgaWYgKG11bHRpRmVhdHVyZUluZGV4IDwgMCkgbXVsdGlGZWF0dXJlSW5kZXggPSBjb29yZHMubGVuZ3RoICsgbXVsdGlGZWF0dXJlSW5kZXg7XG4gICAgICBpZiAoY29vcmRJbmRleCA8IDApIGNvb3JkSW5kZXggPSBjb29yZHNbbXVsdGlGZWF0dXJlSW5kZXhdLmxlbmd0aCArIGNvb3JkSW5kZXg7XG4gICAgICByZXR1cm4gcG9pbnQoY29vcmRzW211bHRpRmVhdHVyZUluZGV4XVtjb29yZEluZGV4XSwgcHJvcGVydGllcywgb3B0aW9ucyk7XG5cbiAgICBjYXNlIFwiTXVsdGlQb2x5Z29uXCI6XG4gICAgICBpZiAobXVsdGlGZWF0dXJlSW5kZXggPCAwKSBtdWx0aUZlYXR1cmVJbmRleCA9IGNvb3Jkcy5sZW5ndGggKyBtdWx0aUZlYXR1cmVJbmRleDtcbiAgICAgIGlmIChnZW9tZXRyeUluZGV4IDwgMCkgZ2VvbWV0cnlJbmRleCA9IGNvb3Jkc1ttdWx0aUZlYXR1cmVJbmRleF0ubGVuZ3RoICsgZ2VvbWV0cnlJbmRleDtcbiAgICAgIGlmIChjb29yZEluZGV4IDwgMCkgY29vcmRJbmRleCA9IGNvb3Jkc1ttdWx0aUZlYXR1cmVJbmRleF1bZ2VvbWV0cnlJbmRleF0ubGVuZ3RoIC0gY29vcmRJbmRleDtcbiAgICAgIHJldHVybiBwb2ludChjb29yZHNbbXVsdGlGZWF0dXJlSW5kZXhdW2dlb21ldHJ5SW5kZXhdW2Nvb3JkSW5kZXhdLCBwcm9wZXJ0aWVzLCBvcHRpb25zKTtcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcihcImdlb2pzb24gaXMgaW52YWxpZFwiKTtcbn1cblxuZXhwb3J0IHsgY29vcmRBbGwsIGNvb3JkRWFjaCwgY29vcmRSZWR1Y2UsIGZlYXR1cmVFYWNoLCBmZWF0dXJlUmVkdWNlLCBmaW5kUG9pbnQsIGZpbmRTZWdtZW50LCBmbGF0dGVuRWFjaCwgZmxhdHRlblJlZHVjZSwgZ2VvbUVhY2gsIGdlb21SZWR1Y2UsIGxpbmVFYWNoLCBsaW5lUmVkdWNlLCBwcm9wRWFjaCwgcHJvcFJlZHVjZSwgc2VnbWVudEVhY2gsIHNlZ21lbnRSZWR1Y2UgfTsiLCJpbXBvcnQgeyBjb29yZEVhY2ggfSBmcm9tIFwiQHR1cmYvbWV0YVwiO1xuLyoqXG4gKiBUYWtlcyBhIHNldCBvZiBmZWF0dXJlcywgY2FsY3VsYXRlcyB0aGUgYmJveCBvZiBhbGwgaW5wdXQgZmVhdHVyZXMsIGFuZCByZXR1cm5zIGEgYm91bmRpbmcgYm94LlxuICpcbiAqIEBuYW1lIGJib3hcbiAqIEBwYXJhbSB7R2VvSlNPTn0gZ2VvanNvbiBhbnkgR2VvSlNPTiBvYmplY3RcbiAqIEByZXR1cm5zIHtCQm94fSBiYm94IGV4dGVudCBpbiBbbWluWCwgbWluWSwgbWF4WCwgbWF4WV0gb3JkZXJcbiAqIEBleGFtcGxlXG4gKiB2YXIgbGluZSA9IHR1cmYubGluZVN0cmluZyhbWy03NCwgNDBdLCBbLTc4LCA0Ml0sIFstODIsIDM1XV0pO1xuICogdmFyIGJib3ggPSB0dXJmLmJib3gobGluZSk7XG4gKiB2YXIgYmJveFBvbHlnb24gPSB0dXJmLmJib3hQb2x5Z29uKGJib3gpO1xuICpcbiAqIC8vYWRkVG9NYXBcbiAqIHZhciBhZGRUb01hcCA9IFtsaW5lLCBiYm94UG9seWdvbl1cbiAqL1xuXG5mdW5jdGlvbiBiYm94KGdlb2pzb24pIHtcbiAgdmFyIHJlc3VsdCA9IFtJbmZpbml0eSwgSW5maW5pdHksIC1JbmZpbml0eSwgLUluZmluaXR5XTtcbiAgY29vcmRFYWNoKGdlb2pzb24sIGZ1bmN0aW9uIChjb29yZCkge1xuICAgIGlmIChyZXN1bHRbMF0gPiBjb29yZFswXSkge1xuICAgICAgcmVzdWx0WzBdID0gY29vcmRbMF07XG4gICAgfVxuXG4gICAgaWYgKHJlc3VsdFsxXSA+IGNvb3JkWzFdKSB7XG4gICAgICByZXN1bHRbMV0gPSBjb29yZFsxXTtcbiAgICB9XG5cbiAgICBpZiAocmVzdWx0WzJdIDwgY29vcmRbMF0pIHtcbiAgICAgIHJlc3VsdFsyXSA9IGNvb3JkWzBdO1xuICAgIH1cblxuICAgIGlmIChyZXN1bHRbM10gPCBjb29yZFsxXSkge1xuICAgICAgcmVzdWx0WzNdID0gY29vcmRbMV07XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuYmJveFtcImRlZmF1bHRcIl0gPSBiYm94O1xuZXhwb3J0IGRlZmF1bHQgYmJveDsiLCJleHBvcnQgZnVuY3Rpb24gY3ViaWNJbih0KSB7XG4gIHJldHVybiB0ICogdCAqIHQ7XG59XG5leHBvcnQgZnVuY3Rpb24gY3ViaWNPdXQodCkge1xuICByZXR1cm4gLS10ICogdCAqIHQgKyAxO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGN1YmljSW5PdXQodCkge1xuICByZXR1cm4gKCh0ICo9IDIpIDw9IDEgPyB0ICogdCAqIHQgOiAodCAtPSAyKSAqIHQgKiB0ICsgMikgLyAyO1xufSIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IHZhciB0ZXJyaXRvcnlGb2N1c0J1dHRvbiA9IFwidGVycml0b3J5Rm9jdXNDb250cm9sLW1vZHVsZS0tdGVycml0b3J5Rm9jdXNCdXR0b24tLTN3V29WXCI7XG5leHBvcnQgdmFyIHRlcnJpdG9yeUZvY3VzQ29udGFpbmVyID0gXCJ0ZXJyaXRvcnlGb2N1c0NvbnRyb2wtbW9kdWxlLS10ZXJyaXRvcnlGb2N1c0NvbnRhaW5lci0tM04wWE1cIjsiLCJpbXBvcnQge3VzZUludGx9IGZyb20gJ2dhdHNieS1wbHVnaW4taW50bCc7XG5pbXBvcnQgUmVhY3QsIHtNb3VzZUV2ZW50SGFuZGxlcn0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtfdXNlTWFwQ29udHJvbCBhcyB1c2VNYXBDb250cm9sfSBmcm9tICdyZWFjdC1tYXAtZ2wnO1xuaW1wb3J0ICogYXMgc3R5bGVzIGZyb20gJy4vdGVycml0b3J5Rm9jdXNDb250cm9sLm1vZHVsZS5zY3NzJztcblxuaW50ZXJmYWNlIElUZXJyaXRvcnlGb2N1c0NvbnRyb2wge1xuICBvbkNsaWNrVGVycml0b3J5Rm9jdXNCdXR0b24gOiBNb3VzZUV2ZW50SGFuZGxlcjxIVE1MQnV0dG9uRWxlbWVudD47XG59XG5cbmNvbnN0IFRlcnJpdG9yeUZvY3VzQ29udHJvbCA9ICh7b25DbGlja1RlcnJpdG9yeUZvY3VzQnV0dG9ufSA6IElUZXJyaXRvcnlGb2N1c0NvbnRyb2wpID0+IHtcbiAgY29uc3QgaW50bCA9IHVzZUludGwoKTtcblxuICBjb25zdCB7Y29udGFpbmVyUmVmfSA9IHVzZU1hcENvbnRyb2woe1xuICAgIC8vIEB0cy1pZ25vcmUgLy8gVHlwZXMgaGF2ZSBub3QgY2F1Z2h0IHVwIHlldCwgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS92aXNnbC9yZWFjdC1tYXAtZ2wvaXNzdWVzLzE0OTJcbiAgICBvbkNsaWNrOiBvbkNsaWNrVGVycml0b3J5Rm9jdXNCdXR0b24sXG4gIH0pO1xuXG4gIGNvbnN0IHRlcnJpdG9yaWVzID0gW1xuICAgIHtcbiAgICAgIHNob3J0OiBpbnRsLmZvcm1hdE1lc3NhZ2UoXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6ICdtYXAudGVycml0b3J5Rm9jdXMubG93ZXI0OC5zaG9ydCcsXG4gICAgICAgICAgICBkZWZhdWx0TWVzc2FnZTogJzQ4JyxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVGhlIGFiYnJldmlhdGVkIG5hbWUgaW5kaWNhdGluZyB0aGUgYm91bmRzIG9mIHRoZSBMb3dlciA0OCBzdGF0ZXMnLFxuICAgICAgICAgIH0sXG4gICAgICApLFxuICAgICAgbG9uZzogaW50bC5mb3JtYXRNZXNzYWdlKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiAnbWFwLnRlcnJpdG9yeUZvY3VzLmxvd2VyNDgubG9uZycsXG4gICAgICAgICAgICBkZWZhdWx0TWVzc2FnZTogJ0xvd2VyIDQ4JyxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVGhlIGxvbmdlciBuYW1lIGluZGljYXRpbmcgdGhlIGJvdW5kcyBvZiB0aGUgTG93ZXIgNDggc3RhdGVzJyxcbiAgICAgICAgICB9LFxuICAgICAgKSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHNob3J0OiBpbnRsLmZvcm1hdE1lc3NhZ2UoXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6ICdtYXAudGVycml0b3J5Rm9jdXMuYWxhc2thLnNob3J0JyxcbiAgICAgICAgICAgIGRlZmF1bHRNZXNzYWdlOiAnQUsnLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246ICdUaGUgYWJicmV2aWF0ZWQgaW5kaWNhdGluZyB0aGUgYm91bmRzIG9mIEFsYXNrYScsXG4gICAgICAgICAgfSxcbiAgICAgICksXG4gICAgICBsb25nOiBpbnRsLmZvcm1hdE1lc3NhZ2UoXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6ICdtYXAudGVycml0b3J5Rm9jdXMuYWxhc2thLmxvbmcnLFxuICAgICAgICAgICAgZGVmYXVsdE1lc3NhZ2U6ICdBbGFza2EnLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246ICdUaGUgZnVsbCBuYW1lIGluZGljYXRpbmcgdGhlIGJvdW5kcyBvZiBBbGFza2EnLFxuICAgICAgICAgIH0sXG4gICAgICApLFxuICAgIH0sXG4gICAge1xuICAgICAgc2hvcnQ6IGludGwuZm9ybWF0TWVzc2FnZShcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogJ21hcC50ZXJyaXRvcnlGb2N1cy5oYXdhaWkuc2hvcnQnLFxuICAgICAgICAgICAgZGVmYXVsdE1lc3NhZ2U6ICdISScsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1RoZSBhYmJyZXZpYXRlZCBuYW1lIGluZGljYXRpbmcgdGhlIGJvdW5kcyBvZiBIYXdhaWknLFxuICAgICAgICAgIH0sXG4gICAgICApLFxuICAgICAgbG9uZzogaW50bC5mb3JtYXRNZXNzYWdlKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiAnbWFwLnRlcnJpdG9yeUZvY3VzLmhhd2FpaS5sb25nJyxcbiAgICAgICAgICAgIGRlZmF1bHRNZXNzYWdlOiAnSGF3YWlpJyxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVGhlIGxvbmdlciBuYW1lIGluZGljYXRpbmcgdGhlIGJvdW5kcyBvZiBIYXdhaWknLFxuICAgICAgICAgIH0sXG4gICAgICApLFxuICAgIH0sXG4gICAge1xuICAgICAgc2hvcnQ6IGludGwuZm9ybWF0TWVzc2FnZShcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogJ21hcC50ZXJyaXRvcnlGb2N1cy5wdWVydG9fcmljby5zaG9ydCcsXG4gICAgICAgICAgICBkZWZhdWx0TWVzc2FnZTogJ1BSJyxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVGhlIGFiYnJldmlhdGVkIG5hbWUgaW5kaWNhdGluZyB0aGUgYm91bmRzIG9mIFB1ZXJ0byBSaWNvJyxcbiAgICAgICAgICB9LFxuICAgICAgKSxcbiAgICAgIGxvbmc6IGludGwuZm9ybWF0TWVzc2FnZShcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogJ21hcC50ZXJyaXRvcnlGb2N1cy5wdWVydG9fcmljby5sb25nJyxcbiAgICAgICAgICAgIGRlZmF1bHRNZXNzYWdlOiAnUHVlcnRvIFJpY28nLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246ICdUaGUgZnVsbCBuYW1lIGluZGljYXRpbmcgdGhlIGJvdW5kcyBvZiBQdWVydG8gUmljbycsXG4gICAgICAgICAgfSxcbiAgICAgICksXG4gICAgfSxcbiAgXTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgcmVmPXtjb250YWluZXJSZWZ9IGNsYXNzTmFtZT17c3R5bGVzLnRlcnJpdG9yeUZvY3VzQ29udGFpbmVyfT5cbiAgICAgIHt0ZXJyaXRvcmllcy5tYXAoKHRlcnJpdG9yeSkgPT5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGlkPXt0ZXJyaXRvcnkuc2hvcnR9XG4gICAgICAgICAga2V5PXt0ZXJyaXRvcnkuc2hvcnR9XG4gICAgICAgICAgb25DbGljaz17b25DbGlja1RlcnJpdG9yeUZvY3VzQnV0dG9ufVxuICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLnRlcnJpdG9yeUZvY3VzQnV0dG9ufVxuICAgICAgICAgIGFyaWEtbGFiZWw9e2ludGwuZm9ybWF0TWVzc2FnZShcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlkOiAnbWFwLnRlcnJpdG9yeUZvY3VzLmZvY3VzT24nLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRNZXNzYWdlOiAnRm9jdXMgb24ge3RlcnJpdG9yeX0nLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnRm9jdXMgb24gdGhlIGJvdW5kcyBvZiBhIHNwZWNpZmljIHRlcnJpdG9yeScsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0ZXJyaXRvcnk6IHRlcnJpdG9yeS5sb25nLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICl9PlxuICAgICAgICAgIHt0ZXJyaXRvcnkuc2hvcnR9XG4gICAgICAgIDwvYnV0dG9uPixcbiAgICAgICl9XG4gICAgPC9kaXY+XG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBUZXJyaXRvcnlGb2N1c0NvbnRyb2w7XG5cbiIsImV4cG9ydCBkZWZhdWx0IFwiZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlCNGJXeHVjejBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01DOXpkbWNpSUdWdVlXSnNaUzFpWVdOclozSnZkVzVrUFNKdVpYY2dNQ0F3SURJMElESTBJaUJvWldsbmFIUTlJakkwSWlCMmFXVjNRbTk0UFNJd0lEQWdNalFnTWpRaUlIZHBaSFJvUFNJeU5DSStQR2MrUEhKbFkzUWdabWxzYkQwaWJtOXVaU0lnYUdWcFoyaDBQU0l5TkNJZ2QybGtkR2c5SWpJMElpOCtQQzluUGp4blBqeG5QanhuUGp4d1lYUm9JR1E5SWswNUxESXhZekFzTUM0MU5Td3dMalExTERFc01Td3hhRFJqTUM0MU5Td3dMREV0TUM0ME5Td3hMVEYyTFRGSU9WWXlNWG9nVFRFeUxESkRPQzR4TkN3eUxEVXNOUzR4TkN3MUxEbGpNQ3d5TGpNNExERXVNVGtzTkM0ME55d3pMRFV1TnpSV01UY2dZekFzTUM0MU5Td3dMalExTERFc01Td3hhRFpqTUM0MU5Td3dMREV0TUM0ME5Td3hMVEYyTFRJdU1qWmpNUzQ0TVMweExqSTNMRE10TXk0ek5pd3pMVFV1TnpSRE1Ua3NOUzR4TkN3eE5TNDROaXd5TERFeUxESjZJRTB4TkN3eE15NDNWakUyYUMwMGRpMHlMak1nUXpndU5EZ3NNVEl1TmpNc055d3hNUzQxTXl3M0xEbGpNQzB5TGpjMkxESXVNalF0TlN3MUxUVnpOU3d5TGpJMExEVXNOVU14Tnl3eE1TNDBPU3d4TlM0ME9Td3hNaTQyTlN3eE5Dd3hNeTQzZWlJdlBqd3ZaejQ4TDJjK1BDOW5Qand2YzNablBnPT1cIiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IHZhciBtYXBJbnRyb0NvbnRhaW5lciA9IFwibWFwSW50cm9kdWN0aW9uLW1vZHVsZS0tbWFwSW50cm9Db250YWluZXItLTFLOGR1XCI7XG5leHBvcnQgdmFyIG1hcEludHJvSGVhZGVyID0gXCJtYXBJbnRyb2R1Y3Rpb24tbW9kdWxlLS1tYXBJbnRyb0hlYWRlci0tMzJMQnNcIjtcbmV4cG9ydCB2YXIgbWFwSW50cm9UZXh0ID0gXCJtYXBJbnRyb2R1Y3Rpb24tbW9kdWxlLS1tYXBJbnRyb1RleHQtLVRpYjhMXCI7XG5leHBvcnQgdmFyIG1hcEludHJvTGlnaHRidWxiID0gXCJtYXBJbnRyb2R1Y3Rpb24tbW9kdWxlLS1tYXBJbnRyb0xpZ2h0YnVsYi0tM0xCeDBcIjtcbmV4cG9ydCB2YXIgZGlkWW91S25vd0JveCA9IFwibWFwSW50cm9kdWN0aW9uLW1vZHVsZS0tZGlkWW91S25vd0JveC0tM3p0RXlcIjtcbmV4cG9ydCB2YXIgZGlkWW91S25vdyA9IFwibWFwSW50cm9kdWN0aW9uLW1vZHVsZS0tZGlkWW91S25vdy0tM192X2lcIjtcbmV4cG9ydCB2YXIgZGlkWW91S25vd1RleHQgPSBcIm1hcEludHJvZHVjdGlvbi1tb2R1bGUtLWRpZFlvdUtub3dUZXh0LS0zc2dIc1wiOyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge3VzZUludGx9IGZyb20gJ2dhdHNieS1wbHVnaW4taW50bCc7XG5pbXBvcnQge2RlZmluZU1lc3NhZ2VzfSBmcm9tICdyZWFjdC1pbnRsJztcblxuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IGxpZ2h0YnVsYkljb24gZnJvbSAnL25vZGVfbW9kdWxlcy91c3dkcy9kaXN0L2ltZy91c2EtaWNvbnMvbGlnaHRidWxiX291dGxpbmUuc3ZnJztcbmltcG9ydCAqIGFzIHN0eWxlcyBmcm9tICcuL21hcEludHJvZHVjdGlvbi5tb2R1bGUuc2Nzcyc7XG5cbmNvbnN0IE1hcEludHJvZHVjdGlvbiA9ICgpID0+IHtcbiAgY29uc3QgaW50bCA9IHVzZUludGwoKTtcbiAgY29uc3QgbWVzc2FnZXMgPSBkZWZpbmVNZXNzYWdlcyh7XG4gICAgbWFwSW50cm9IZWFkZXI6IHtcbiAgICAgIGlkOiAnbWFwSW50cm8ubWFwSW50cm9IZWFkZXInLFxuICAgICAgZGVmYXVsdE1lc3NhZ2U6ICdab29tIGFuZCBzZWxlY3QgYSBjZW5zdXMgYmxvY2sgZ3JvdXAgdG8gdmlldyBkYXRhJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnaW50cm9kdWN0b3J5IHRleHQgb2Ygd2F5cyB0byB1c2UgdGhlIG1hcCcsXG4gICAgfSxcbiAgICBkaWRZb3VLbm93OiB7XG4gICAgICBpZDogJ21hcEludHJvLmRpZFlvdUtub3cnLFxuICAgICAgZGVmYXVsdE1lc3NhZ2U6ICcgRGlkIHlvdSBrbm93PycsXG4gICAgICBkZXNjcmlwdGlvbjogJ3RleHQgcHJvbXB0aW5nIGEgY2l0ZSBwYXJhZ3JhcGgnLFxuICAgIH0sXG4gICAgY2Vuc3VzQmxvY2tHcm91cERlZmluaXRpb246IHtcbiAgICAgIGlkOiAnbWFwSW50cm8uY2Vuc3VzQmxvY2tHcm91cERlZmluaXRpb24nLFxuICAgICAgZGVmYXVsdE1lc3NhZ2U6ICdBIGNlbnN1cyBibG9jayBncm91cCBpcyBnZW5lcmFsbHkgYmV0d2VlbiA2MDAgYW5kIDMsMDAwIHBlb3BsZS4gJyArXG4gICAgICAnSXQgaXMgdGhlIHNtYWxsZXN0IGdlb2dyYXBoaWNhbCB1bml0IGZvciB3aGljaCB0aGUgVS5TLiBDZW5zdXMgJyArXG4gICAgICAnQnVyZWF1IHB1Ymxpc2hlcyBzYW1wbGUgZGF0YS4nLFxuICAgICAgZGVzY3JpcHRpb246ICdjaXRlcyB0aGUgZGVmaW5pdGlvbiBhbmQgaGVscGZ1bCBpbmZvcm1hdGlvbiBhYm91dCBjZW5zdXMgZ3JvdXBzJyxcbiAgICB9LFxuICB9KTtcblxuICByZXR1cm4gKFxuICAgIDxhc2lkZSBjbGFzc05hbWU9e3N0eWxlcy5tYXBJbnRyb0NvbnRhaW5lcn0+XG4gICAgICA8aGVhZGVyIGNsYXNzTmFtZT17c3R5bGVzLm1hcEludHJvSGVhZGVyfT57aW50bC5mb3JtYXRNZXNzYWdlKG1lc3NhZ2VzLm1hcEludHJvSGVhZGVyKX08L2hlYWRlcj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubWFwSW50cm9UZXh0fT5cbiAgICAgICAgPGltZyBjbGFzc05hbWU9e3N0eWxlcy5tYXBJbnRyb0xpZ2h0YnVsYn0gc3JjPXtsaWdodGJ1bGJJY29ufSAvPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmRpZFlvdUtub3dCb3h9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuZGlkWW91S25vd30+e2ludGwuZm9ybWF0TWVzc2FnZShtZXNzYWdlcy5kaWRZb3VLbm93KX08L2Rpdj5cbiAgICAgICAgICA8Y2l0ZSBjbGFzc05hbWU9e3N0eWxlcy5kaWRZb3VLbm93VGV4dH0+e2ludGwuZm9ybWF0TWVzc2FnZShtZXNzYWdlcy5jZW5zdXNCbG9ja0dyb3VwRGVmaW5pdGlvbil9PC9jaXRlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvYXNpZGU+XG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBNYXBJbnRyb2R1Y3Rpb247XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCB2YXIgYXJlYURldGFpbENvbnRhaW5lciA9IFwiYXJlYURldGFpbC1tb2R1bGUtLWFyZWFEZXRhaWxDb250YWluZXItLTE1YWU5XCI7XG5leHBvcnQgdmFyIHRvcFJvdyA9IFwiYXJlYURldGFpbC1tb2R1bGUtLXRvcFJvdy0tR0tmWWpcIjtcbmV4cG9ydCB2YXIgY3VtdWxhdGl2ZUluZGV4U2NvcmUgPSBcImFyZWFEZXRhaWwtbW9kdWxlLS1jdW11bGF0aXZlSW5kZXhTY29yZS0tNklqSjlcIjtcbmV4cG9ydCB2YXIgY2F0ZWdvcml6YXRpb24gPSBcImFyZWFEZXRhaWwtbW9kdWxlLS1jYXRlZ29yaXphdGlvbi0tM0hRM2dcIjtcbmV4cG9ydCB2YXIgdG9wUm93VGl0bGUgPSBcImFyZWFEZXRhaWwtbW9kdWxlLS10b3BSb3dUaXRsZS0tM3BEdGFcIjtcbmV4cG9ydCB2YXIgY2Vuc3VzTGFiZWwgPSBcImFyZWFEZXRhaWwtbW9kdWxlLS1jZW5zdXNMYWJlbC0tMmpESmxcIjtcbmV4cG9ydCB2YXIgdG9wUm93U3ViVGl0bGUgPSBcImFyZWFEZXRhaWwtbW9kdWxlLS10b3BSb3dTdWJUaXRsZS0tTjhfR1BcIjtcbmV4cG9ydCB2YXIgc2NvcmUgPSBcImFyZWFEZXRhaWwtbW9kdWxlLS1zY29yZS0tM2k4dzFcIjtcbmV4cG9ydCB2YXIgc2NvcmVTdXBlcnNjcmlwdCA9IFwiYXJlYURldGFpbC1tb2R1bGUtLXNjb3JlU3VwZXJzY3JpcHQtLXdtRUlnXCI7XG5leHBvcnQgdmFyIHByaW9yaXR5ID0gXCJhcmVhRGV0YWlsLW1vZHVsZS0tcHJpb3JpdHktLVBMTWNoXCI7XG5leHBvcnQgdmFyIHByaW9yaXRpemVkID0gXCJhcmVhRGV0YWlsLW1vZHVsZS0tcHJpb3JpdGl6ZWQtLTFmVnJRXCI7XG5leHBvcnQgdmFyIHRocmVzaG9sZCA9IFwiYXJlYURldGFpbC1tb2R1bGUtLXRocmVzaG9sZC0tMzRiSUxcIjtcbmV4cG9ydCB2YXIgbm9uUHJpb3JpdGl6ZWQgPSBcImFyZWFEZXRhaWwtbW9kdWxlLS1ub25Qcmlvcml0aXplZC0tMWRFZmtcIjtcbmV4cG9ydCB2YXIgcHJpb3JpdGl6YXRpb24gPSBcImFyZWFEZXRhaWwtbW9kdWxlLS1wcmlvcml0aXphdGlvbi0tMjgyZExcIjtcbmV4cG9ydCB2YXIgY2Vuc3VzUm93ID0gXCJhcmVhRGV0YWlsLW1vZHVsZS0tY2Vuc3VzUm93LS0xYjlybVwiO1xuZXhwb3J0IHZhciBjZW5zdXNUZXh0ID0gXCJhcmVhRGV0YWlsLW1vZHVsZS0tY2Vuc3VzVGV4dC0tNGhndnJcIjtcbmV4cG9ydCB2YXIgaW5kaWNhdG9yRGVzY3JpcHRpb24gPSBcImFyZWFEZXRhaWwtbW9kdWxlLS1pbmRpY2F0b3JEZXNjcmlwdGlvbi0tMkdBQmpcIjtcbmV4cG9ydCB2YXIgZGl2aWRlciA9IFwiYXJlYURldGFpbC1tb2R1bGUtLWRpdmlkZXItLTNwdF9hXCI7XG5leHBvcnQgdmFyIGluZGljYXRvckJveCA9IFwiYXJlYURldGFpbC1tb2R1bGUtLWluZGljYXRvckJveC0td1RFbGRcIjtcbmV4cG9ydCB2YXIgaW5kaWNhdG9yVGl0bGUgPSBcImFyZWFEZXRhaWwtbW9kdWxlLS1pbmRpY2F0b3JUaXRsZS0tMXRYTUFcIjtcbmV4cG9ydCB2YXIgaW5kaWNhdG9yVmFsdWUgPSBcImFyZWFEZXRhaWwtbW9kdWxlLS1pbmRpY2F0b3JWYWx1ZS0tM3BtT0lcIjsiLCJpbXBvcnQge0xuZ0xhdEJvdW5kc0xpa2V9IGZyb20gJ21hcGxpYnJlLWdsJztcbmltcG9ydCB7aXNNb2JpbGUgYXMgaXNNb2JpbGVSZWFjdERldmljZURldGVjdH0gZnJvbSAncmVhY3QtZGV2aWNlLWRldGVjdCc7XG5cbi8vIFVSTFNcbmV4cG9ydCBjb25zdCBGRUFUVVJFX1RJTEVfQkFTRV9VUkwgPSAnaHR0cHM6Ly9kMnpqaWQ2bjVqYTJwdC5jbG91ZGZyb250Lm5ldCc7XG5jb25zdCBYWVpfU1VGRklYID0gJ3t6fS97eH0ve3l9LnBiZic7XG5leHBvcnQgY29uc3QgZmVhdHVyZVVSTEZvclRpbGVzZXROYW1lID0gKHRpbGVzZXROYW1lIDpzdHJpbmcgKSA6IHN0cmluZyA9PiB7XG4gIHJldHVybiBgJHtGRUFUVVJFX1RJTEVfQkFTRV9VUkx9LyR7dGlsZXNldE5hbWV9LyR7WFlaX1NVRkZJWH1gO1xufTtcbmV4cG9ydCBjb25zdCBGRUFUVVJFX1RJTEVfSElHSF9aT09NX1VSTCA9IGZlYXR1cmVVUkxGb3JUaWxlc2V0TmFtZSgnMDcxNF9oaWdoJyk7XG5leHBvcnQgY29uc3QgRkVBVFVSRV9USUxFX0xPV19aT09NX1VSTCA9IGZlYXR1cmVVUkxGb3JUaWxlc2V0TmFtZSgndGlsZXNfbG93Jyk7XG5cblxuLy8gUGVyZm9ybWFuY2UgbWFya2Vyc1xuZXhwb3J0IGNvbnN0IFBFUkZPUk1BTkNFX01BUktFUl9NQVBfSURMRSA9ICdNQVBfSURMRSc7XG5cbi8vIFByb3BlcnRpZXNcbmV4cG9ydCBjb25zdCBTQ09SRV9QUk9QRVJUWV9ISUdIID0gJ1Njb3JlIEQgKHBlcmNlbnRpbGUpJztcbmV4cG9ydCBjb25zdCBTQ09SRV9QUk9QRVJUWV9MT1cgPSAnRF9TQ09SRSc7XG5leHBvcnQgY29uc3QgR0VPSURfUFJPUEVSVFkgPSAnR0VPSUQxMCc7XG5leHBvcnQgY29uc3QgSElHSF9TQ09SRV9TT1VSQ0VfTkFNRSA9ICdzY29yZS1oaWdoJztcbmV4cG9ydCBjb25zdCBISUdIX1NDT1JFX0xBWUVSX05BTUUgPSAnc2NvcmUtaGlnaC1sYXllcic7XG5leHBvcnQgY29uc3QgTE9XX1NDT1JFX1NPVVJDRV9OQU1FID0gJ3Njb3JlLWxvdyc7XG5leHBvcnQgY29uc3QgTE9XX1NDT1JFX0xBWUVSX05BTUUgPSAnc2NvcmUtbG93LWxheWVyJztcbmV4cG9ydCBjb25zdCBTRUxFQ1RFRF9QUk9QRVJUWSA9ICdzZWxlY3RlZCc7XG5leHBvcnQgY29uc3QgUE9WRVJUWV9QUk9QRVJUWV9QRVJDRU5USUxFID0gJ1BvdmVydHkgKExlc3MgdGhhbiAyMDAlIG9mIGZlZGVyYWwgcG92ZXJ0eSBsaW5lKSAocGVyY2VudGlsZSknO1xuZXhwb3J0IGNvbnN0IEhPVVNJTkdfQlVSREVOX1BST1BFUlRZX1BFUkNFTlRJTEUgPSAnSG91c2luZyBidXJkZW4gKHBlcmNlbnQpIChwZXJjZW50aWxlKSc7XG5leHBvcnQgY29uc3QgTElOR1VJU1RJQ19JU09MQVRJT05fUFJPUEVSVFlfUEVSQ0VOVElMRSA9ICdMaW5ndWlzdGljIGlzb2xhdGlvbiAocGVyY2VudCkgKHBlcmNlbnRpbGUpJztcbmV4cG9ydCBjb25zdCBVTkVNUExPWU1FTlRfUFJPUEVSVFlfUEVSQ0VOVElMRSA9ICdVbmVtcGxveWVkIGNpdmlsaWFucyAocGVyY2VudCkgKHBlcmNlbnRpbGUpJztcbmV4cG9ydCBjb25zdCBUT1RBTF9QT1BVTEFUSU9OID0gJ1RvdGFsIHBvcHVsYXRpb24nO1xuXG5leHBvcnQgY29uc3QgRURVQ0FUSU9OX1BST1BFUlRZX1BFUkNFTlRJTEUgPSAnUGVyY2VudCBpbmRpdmlkdWFscyBhZ2UgMjUgb3Igb3ZlciAnICtcbid3aXRoIGxlc3MgdGhhbiBoaWdoIHNjaG9vbCBkZWdyZWUgKHBlcmNlbnRpbGUpJztcblxuLy8gVGhlIG5hbWUgb2YgdGhlIGxheWVyIHdpdGhpbiB0aGUgdGlsZXMgdGhhdCBjb250YWlucyB0aGUgc2NvcmVcbmV4cG9ydCBjb25zdCBTQ09SRV9TT1VSQ0VfTEFZRVIgPSAnYmxvY2tzJztcblxuZXhwb3J0IHR5cGUgSjQwUHJvcGVydGllcyA9IHsgW2tleTogc3RyaW5nXTogYW55IH07XG5cbi8vIFpvb21cbmV4cG9ydCBjb25zdCBHTE9CQUxfTUlOX1pPT00gPSAzO1xuZXhwb3J0IGNvbnN0IEdMT0JBTF9NQVhfWk9PTSA9IDIyO1xuZXhwb3J0IGNvbnN0IEdMT0JBTF9NSU5fWk9PTV9MT1cgPSAzO1xuZXhwb3J0IGNvbnN0IEdMT0JBTF9NQVhfWk9PTV9MT1cgPSA3O1xuZXhwb3J0IGNvbnN0IEdMT0JBTF9NSU5fWk9PTV9ISUdITElHSFQgPSA5O1xuZXhwb3J0IGNvbnN0IEdMT0JBTF9NQVhfWk9PTV9ISUdITElHSFQgPSAyMjtcbmV4cG9ydCBjb25zdCBHTE9CQUxfTUlOX1pPT01fSElHSCA9IDc7XG5leHBvcnQgY29uc3QgR0xPQkFMX01BWF9aT09NX0hJR0ggPSAxMTtcblxuLy8gQm91bmRzXG5leHBvcnQgY29uc3QgR0xPQkFMX01BWF9CT1VORFMgOiBMbmdMYXRCb3VuZHNMaWtlID0gW1xuICBbLTE4MC4xMTgzMDYsIDUuNDk5NTUwXSxcbiAgWy02NS4wLCA4My4xNjIxMDJdLFxuXTtcblxuZXhwb3J0IGNvbnN0IExPV0VSXzQ4X0JPVU5EUyA6IExuZ0xhdEJvdW5kc0xpa2UgPSBbXG4gIFstMTI0Ljc4NDQwNzksIDI0Ljc0MzMxOTVdLFxuICBbLTY2Ljk1MTM4MTIsIDQ5LjM0NTc4NjhdLFxuXTtcblxuZXhwb3J0IGNvbnN0IEFMQVNLQV9CT1VORFMgOiBMbmdMYXRCb3VuZHNMaWtlID0gW1xuICBbLTE4My44NTY4ODgsIDUwLjg3NTMxMV0sXG4gIFstMTQwLjkzMjYxNywgNzEuOTU4Nzk3XSxcbl07XG5cbmV4cG9ydCBjb25zdCBIQVdBSUlfQk9VTkRTIDogTG5nTGF0Qm91bmRzTGlrZSA9IFtcbiAgWy0xNjguMTE4MzA2LCAxOC43NDgxMTVdLFxuICBbLTE1NC43NTc4ODEsIDIyLjM3ODQxM10sXG5dO1xuXG5leHBvcnQgY29uc3QgUFVFUlRPX1JJQ09fQk9VTkRTIDogTG5nTGF0Qm91bmRzTGlrZSA9IFtcbiAgWy02Ny45NDU0MDQsIDE3Ljg4MzI4XSxcbiAgWy02NS4yMjA3MDMsIDE4LjUxNTY4M10sXG5dO1xuXG5leHBvcnQgY29uc3QgR1VBTV9CT1VORFMgOiBMbmdMYXRCb3VuZHNMaWtlID0gW1xuICBbLTIxNS4zODk3MDksIDEzLjIyNTkwOV0sXG4gIFstMjE1LjA0MDg5NCwgMTMuNjYzMzM1XSxcbl07XG5cbmV4cG9ydCBjb25zdCBNQVJJQU5BX0lTTEFORF9CT1VORFMgOiBMbmdMYXRCb3VuZHNMaWtlID0gW1xuICBbLTIxNS4zMTM0NDksIDE0LjAwNzgwMV0sXG4gIFstMjEzLjc0MjQwNCwgMTkuNzUwMzI2XSxcbl07XG5cbmV4cG9ydCBjb25zdCBBTUVSSUNBTl9TQU1PQV9CT1VORFMgOiBMbmdMYXRCb3VuZHNMaWtlID0gW1xuICBbLTE3MS4wODk4NzQsIC0xNC41NDg2OTldLFxuICBbLTE2OC4xNDMzLCAtMTEuMDQ2OTM0XSxcbl07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0NFTlRFUiA9IFszMi40Njg3MTI2LCAtODYuNTAyMTM2XTtcblxuLy8gT3BhY2l0eVxuZXhwb3J0IGNvbnN0IERFRkFVTFRfTEFZRVJfT1BBQ0lUWSA9IDAuNjtcblxuLy8gQ29sb3JzXG5leHBvcnQgY29uc3QgREVGQVVMVF9PVVRMSU5FX0NPTE9SID0gJyM0RUE1Q0YnO1xuZXhwb3J0IGNvbnN0IE1JTl9DT0xPUiA9ICcjRkZGRkZGJztcbmV4cG9ydCBjb25zdCBNRURfQ09MT1IgPSAnI0QxREFFNic7XG5leHBvcnQgY29uc3QgTUFYX0NPTE9SID0gJyM3NjhGQjMnO1xuZXhwb3J0IGNvbnN0IEJPUkRFUl9ISUdITElHSFRfQ09MT1IgPSAnIzAwQkRFMyc7XG5cbi8vIFdpZHRoc1xuZXhwb3J0IGNvbnN0IEhJR0hMSUdIVF9CT1JERVJfV0lEVEggPSA1LjA7XG5cbi8vIFNjb3JlIGJvdW5kYXJpZXNcbmV4cG9ydCBjb25zdCBTQ09SRV9CT1VOREFSWV9MT1cgPSAwLjA7XG5leHBvcnQgY29uc3QgU0NPUkVfQk9VTkRBUllfVEhSRVNIT0xEID0gMC42O1xuZXhwb3J0IGNvbnN0IFNDT1JFX0JPVU5EQVJZX1BSSU9SSVRJWkVEID0gMC43NTtcblxuZXhwb3J0IGNvbnN0IGlzTW9iaWxlID0gaXNNb2JpbGVSZWFjdERldmljZURldGVjdDtcbiIsIi8vIEV4dGVybmFsIExpYnM6XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge3VzZUludGx9IGZyb20gJ2dhdHNieS1wbHVnaW4taW50bCc7XG5pbXBvcnQge2RlZmluZU1lc3NhZ2VzfSBmcm9tICdyZWFjdC1pbnRsJztcblxuLy8gQ29tcG9uZW50czpcblxuLy8gU3R5bGVzIGFuZCBjb25zdGFudHNcbmltcG9ydCAqIGFzIHN0eWxlcyBmcm9tICcuL2FyZWFEZXRhaWwubW9kdWxlLnNjc3MnO1xuaW1wb3J0ICogYXMgY29uc3RhbnRzIGZyb20gJy4uL2RhdGEvY29uc3RhbnRzJztcblxuZXhwb3J0IGNvbnN0IHJlYWRhYmxlUGVyY2VudCA9IChwZXJjZW50OiBudW1iZXIpID0+IHtcbiAgcmV0dXJuIGAkeyhwZXJjZW50ICogMTAwKS50b0ZpeGVkKDEpfWA7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q2F0ZWdvcml6YXRpb24gPSAocGVyY2VudGlsZTogbnVtYmVyKSA9PiB7XG4gIGxldCBjYXRlZ29yaXphdGlvbjtcbiAgbGV0IGNhdGVnb3J5Q2lyY2xlU3R5bGU7XG5cbiAgaWYgKHBlcmNlbnRpbGUgPj0gY29uc3RhbnRzLlNDT1JFX0JPVU5EQVJZX1BSSU9SSVRJWkVEICkge1xuICAgIGNhdGVnb3JpemF0aW9uID0gJ1ByaW9yaXRpemVkJztcbiAgICBjYXRlZ29yeUNpcmNsZVN0eWxlID0gc3R5bGVzLnByaW9yaXRpemVkO1xuICB9IGVsc2UgaWYgKGNvbnN0YW50cy5TQ09SRV9CT1VOREFSWV9USFJFU0hPTEQgPD0gcGVyY2VudGlsZSAmJiBwZXJjZW50aWxlIDwgY29uc3RhbnRzLlNDT1JFX0JPVU5EQVJZX1BSSU9SSVRJWkVEKSB7XG4gICAgY2F0ZWdvcml6YXRpb24gPSAnVGhyZXNob2xkJztcbiAgICBjYXRlZ29yeUNpcmNsZVN0eWxlID0gc3R5bGVzLnRocmVzaG9sZDtcbiAgfSBlbHNlIHtcbiAgICBjYXRlZ29yaXphdGlvbiA9ICdOb24tcHJpb3JpdGl6ZWQnO1xuICAgIGNhdGVnb3J5Q2lyY2xlU3R5bGUgPSBzdHlsZXMubm9uUHJpb3JpdGl6ZWQ7XG4gIH1cbiAgcmV0dXJuIFtjYXRlZ29yaXphdGlvbiwgY2F0ZWdvcnlDaXJjbGVTdHlsZV07XG59O1xuXG5pbnRlcmZhY2UgSUFyZWFEZXRhaWxQcm9wcyB7XG4gIHByb3BlcnRpZXM6IGNvbnN0YW50cy5KNDBQcm9wZXJ0aWVzLFxufVxuXG5jb25zdCBBcmVhRGV0YWlsID0gKHtwcm9wZXJ0aWVzfTpJQXJlYURldGFpbFByb3BzKSA9PiB7XG4gIGNvbnN0IGludGwgPSB1c2VJbnRsKCk7XG4gIGNvbnN0IG1lc3NhZ2VzID0gZGVmaW5lTWVzc2FnZXMoe1xuICAgIGN1bXVsYXRpdmVJbmRleFNjb3JlOiB7XG4gICAgICBpZDogJ2FyZWFEZXRhaWwucHJpb3JpdHlJbmZvLmN1bXVsYXRpdmVJbmRleFNjb3JlJyxcbiAgICAgIGRlZmF1bHRNZXNzYWdlOiAnQ3VtdWxhdGl2ZSBJbmRleCBTY29yZScsXG4gICAgICBkZXNjcmlwdGlvbjogJ3RoZSBjdW11bGF0aXZlIHNjb3JlIG9mIHRoZSBmZWF0dXJlIHNlbGVjdGVkJyxcbiAgICB9LFxuICAgIHBlcmNlbnRpbGU6IHtcbiAgICAgIGlkOiAnYXJlYURldGFpbC5wcmlvcml0eUluZm8ucGVyY2VudGlsZScsXG4gICAgICBkZWZhdWx0TWVzc2FnZTogJ3BlcmNlbnRpbGUnLFxuICAgICAgZGVzY3JpcHRpb246ICd0aGUgcGVyY2VudGlsIG9mIHRoZSBmZWF0dXJlIHNlbGVjdGVkJyxcbiAgICB9LFxuICAgIGNhdGVnb3JpemF0aW9uOiB7XG4gICAgICBpZDogJ2FyZWFEZXRhaWwucHJpb3JpdHlJbmZvLmNhdGVnb3JpemF0aW9uJyxcbiAgICAgIGRlZmF1bHRNZXNzYWdlOiAnQ2F0ZWdvcml6YXRpb24nLFxuICAgICAgZGVzY3JpcHRpb246ICd0aGUgY2F0ZWdvcml6YXRpb24gb2YgcHJpb3JpdGl6ZWQsIHRocmVzaG9sZCBvciBub24tcHJpb3JpdGl6ZWQnLFxuICAgIH0sXG4gICAgY2Vuc3VzQmxvY2tHcm91cDoge1xuICAgICAgaWQ6ICdhcmVhRGV0YWlsLmdlb2dyYXBoaWNJbmZvLmNlbnN1c0Jsb2NrR3JvdXAnLFxuICAgICAgZGVmYXVsdE1lc3NhZ2U6ICdDZW5zdXMgYmxvY2sgZ3JvdXA6JyxcbiAgICAgIGRlc2NyaXB0aW9uOiAndGhlIGNlbnN1cyBibG9jayBncm91cCBpZCBudW1iZXIgb2YgdGhlIGZlYXR1cmUgc2VsZWN0ZWQnLFxuICAgIH0sXG4gICAgY291bnR5OiB7XG4gICAgICBpZDogJ2FyZWFEZXRhaWwuZ2VvZ3JhcGhpY0luZm8uY291bnR5JyxcbiAgICAgIGRlZmF1bHRNZXNzYWdlOiAnQ291bnR5OicsXG4gICAgICBkZXNjcmlwdGlvbjogJ3RoZSBjb3VudHkgb2YgdGhlIGZlYXR1cmUgc2VsZWN0ZWQnLFxuICAgIH0sXG4gICAgc3RhdGU6IHtcbiAgICAgIGlkOiAnYXJlYURldGFpbC5nZW9ncmFwaGljSW5mby5zdGF0ZScsXG4gICAgICBkZWZhdWx0TWVzc2FnZTogJ1N0YXRlOiAnLFxuICAgICAgZGVzY3JpcHRpb246ICd0aGUgc3RhdGUgb2YgdGhlIGZlYXR1cmUgc2VsZWN0ZWQnLFxuICAgIH0sXG4gICAgcG9wdWxhdGlvbjoge1xuICAgICAgaWQ6ICdhcmVhRGV0YWlsLmdlb2dyYXBoaWNJbmZvLnBvcHVsYXRpb24nLFxuICAgICAgZGVmYXVsdE1lc3NhZ2U6ICdQb3B1bGF0aW9uOicsXG4gICAgICBkZXNjcmlwdGlvbjogJ3RoZSBwb3B1bGF0aW9uIG9mIHRoZSBmZWF0dXJlIHNlbGVjdGVkJyxcbiAgICB9LFxuICAgIGluZGljYXRvckNvbHVtbkhlYWRlcjoge1xuICAgICAgaWQ6ICdhcmVhRGV0YWlsLmluZGljYXRvcnMuaW5kaWNhdG9yQ29sdW1uSGVhZGVyJyxcbiAgICAgIGRlZmF1bHRNZXNzYWdlOiAnSU5ESUNBVE9SUycsXG4gICAgICBkZXNjcmlwdGlvbjogJ3RoZSBwb3B1bGF0aW9uIG9mIHRoZSBmZWF0dXJlIHNlbGVjdGVkJyxcbiAgICB9LFxuICAgIHBlcmNlbnRpbGVDb2x1bW5IZWFkZXI6IHtcbiAgICAgIGlkOiAnYXJlYURldGFpbC5pbmRpY2F0b3JzLnBlcmNlbnRpbGVDb2x1bW5IZWFkZXInLFxuICAgICAgZGVmYXVsdE1lc3NhZ2U6ICdQRVJDRU5USUxFICgwLTEwMCknLFxuICAgICAgZGVzY3JpcHRpb246ICd0aGUgcG9wdWxhdGlvbiBvZiB0aGUgZmVhdHVyZSBzZWxlY3RlZCcsXG4gICAgfSxcbiAgICBwb3ZlcnR5OiB7XG4gICAgICBpZDogJ2FyZWFEZXRhaWwuaW5kaWNhdG9yLnBvdmVydHknLFxuICAgICAgZGVmYXVsdE1lc3NhZ2U6ICdQb3ZlcnR5JyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnSG91c2Vob2xkIGluY29tZSBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdHdpY2UgdGhlIGZlZGVyYWwgXCJwb3ZlcnR5IGxldmVsXCInLFxuICAgIH0sXG4gICAgZWR1Y2F0aW9uOiB7XG4gICAgICBpZDogJ2FyZWFEZXRhaWwuaW5kaWNhdG9yLmVkdWNhdGlvbicsXG4gICAgICBkZWZhdWx0TWVzc2FnZTogJ0VkdWNhdGlvbicsXG4gICAgICBkZXNjcmlwdGlvbjogJ1BlcmNlbnQgb2YgcGVvcGxlIGFnZSAyNSBvciBvbGRlciB0aGF0IGRpZG7igJl0IGdldCBhIGhpZ2ggc2Nob29sIGRpcGxvbWEnLFxuICAgIH0sXG4gICAgbGluZ3Vpc3RpY0lzb2xhdGlvbjoge1xuICAgICAgaWQ6ICdhcmVhRGV0YWlsLmluZGljYXRvci5saW5ndWlzdGljSXNvbGF0aW9uJyxcbiAgICAgIGRlZmF1bHRNZXNzYWdlOiAnTGluZ3Vpc3RpYyBpc29sYXRpb24nLFxuICAgICAgZGVzY3JpcHRpb246ICdIb3VzZWhvbGRzIGluIHdoaWNoIGFsbCBtZW1iZXJzIHNwZWFrIGEgbm9uLUVuZ2xpc2ggbGFuZ3VhZ2UgYW5kICcgK1xuICAgICAgJ3NwZWFrIEVuZ2xpc2ggbGVzcyB0aGFuIFwidmVyeSB3ZWxsXCInLFxuICAgIH0sXG4gICAgdW5lbXBsb3ltZW50OiB7XG4gICAgICBpZDogJ2FyZWFEZXRhaWwuaW5kaWNhdG9yLnVuZW1wbG95bWVudCcsXG4gICAgICBkZWZhdWx0TWVzc2FnZTogJ1VuZW1wbG95bWVudCByYXRlJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnTnVtYmVyIG9mIHVuZW1wbG95ZWQgcGVvcGxlIGFzIGEgcGVyY2VudGFnZSBvZiB0aGUgbGFib3IgZm9yY2UnLFxuICAgIH0sXG4gICAgaG91c2VCdXJkZW46IHtcbiAgICAgIGlkOiAnYXJlYURldGFpbC5pbmRpY2F0b3IuaG91c2VCdXJkZW4nLFxuICAgICAgZGVmYXVsdE1lc3NhZ2U6ICdIb3VzaW5nIEJ1cmRlbicsXG4gICAgICBkZXNjcmlwdGlvbjogJ0hvdXNlaG9sZHMgdGhhdCBhcmUgbG93IGluY29tZSBhbmQgc3BlbmQgbW9yZSB0aGFuIDMwJSBvZiB0aGVpciBpbmNvbWUgdG8gaG91c2luZyBjb3N0cycsXG4gICAgfSxcbiAgfSk7XG5cbiAgY29uc3Qgc2NvcmUgPSBwcm9wZXJ0aWVzW2NvbnN0YW50cy5TQ09SRV9QUk9QRVJUWV9ISUdIXSBhcyBudW1iZXI7XG4gIGNvbnN0IGJsb2NrR3JvdXAgPSBwcm9wZXJ0aWVzW2NvbnN0YW50cy5HRU9JRF9QUk9QRVJUWV07XG4gIGNvbnN0IHBvcHVsYXRpb24gPSBwcm9wZXJ0aWVzW2NvbnN0YW50cy5UT1RBTF9QT1BVTEFUSU9OXTtcblxuICBpbnRlcmZhY2UgaW5kaWNhdG9ySW5mbyB7XG4gICAgbGFiZWw6IHN0cmluZyxcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nLFxuICAgIHZhbHVlOiBudW1iZXIsXG4gIH1cblxuICAvLyBUb2RvOiBUaWNrZXQgIzM2NyB3aWxsIGJlIHJlcGxhY2luZyBkZXNjcmlwdGlvbnMgd2l0aCBZQU1MIGZpbGVcbiAgY29uc3QgcG92ZXJ0eUluZm86aW5kaWNhdG9ySW5mbyA9IHtcbiAgICBsYWJlbDogaW50bC5mb3JtYXRNZXNzYWdlKG1lc3NhZ2VzLnBvdmVydHkpLFxuICAgIGRlc2NyaXB0aW9uOiAnSG91c2Vob2xkIGluY29tZSBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdHdpY2UgdGhlIGZlZGVyYWwgXCJwb3ZlcnR5IGxldmVsXCInLFxuICAgIHZhbHVlOiBwcm9wZXJ0aWVzW2NvbnN0YW50cy5QT1ZFUlRZX1BST1BFUlRZX1BFUkNFTlRJTEVdLFxuICB9O1xuICBjb25zdCBlZHVJbmZvOmluZGljYXRvckluZm8gPSB7XG4gICAgbGFiZWw6IGludGwuZm9ybWF0TWVzc2FnZShtZXNzYWdlcy5lZHVjYXRpb24pLFxuICAgIGRlc2NyaXB0aW9uOiAnUGVyY2VudCBvZiBwZW9wbGUgYWdlIDI1IG9yIG9sZGVyIHRoYXQgZGlkbuKAmXQgZ2V0IGEgaGlnaCBzY2hvb2wgZGlwbG9tYScsXG4gICAgdmFsdWU6IHByb3BlcnRpZXNbY29uc3RhbnRzLkVEVUNBVElPTl9QUk9QRVJUWV9QRVJDRU5USUxFXSxcbiAgfTtcbiAgY29uc3QgbGluSXNvSW5mbzppbmRpY2F0b3JJbmZvID0ge1xuICAgIGxhYmVsOiBpbnRsLmZvcm1hdE1lc3NhZ2UobWVzc2FnZXMubGluZ3Vpc3RpY0lzb2xhdGlvbiksXG4gICAgZGVzY3JpcHRpb246ICdIb3VzZWhvbGRzIGluIHdoaWNoIGFsbCBtZW1iZXJzIHNwZWFrIGEgbm9uLUVuZ2xpc2ggbGFuZ3VhZ2UgYW5kIHNwZWFrIEVuZ2xpc2ggbGVzcyB0aGFuIFwidmVyeSB3ZWxsXCInLFxuICAgIHZhbHVlOiBwcm9wZXJ0aWVzW2NvbnN0YW50cy5MSU5HVUlTVElDX0lTT0xBVElPTl9QUk9QRVJUWV9QRVJDRU5USUxFXSxcbiAgfTtcbiAgY29uc3QgdW1lbXBsb3lJbmZvOmluZGljYXRvckluZm8gPSB7XG4gICAgbGFiZWw6IGludGwuZm9ybWF0TWVzc2FnZShtZXNzYWdlcy51bmVtcGxveW1lbnQpLFxuICAgIGRlc2NyaXB0aW9uOiAnTnVtYmVyIG9mIHVuZW1wbG95ZWQgcGVvcGxlIGFzIGEgcGVyY2VudGFnZSBvZiB0aGUgbGFib3IgZm9yY2UnLFxuICAgIHZhbHVlOiBwcm9wZXJ0aWVzW2NvbnN0YW50cy5VTkVNUExPWU1FTlRfUFJPUEVSVFlfUEVSQ0VOVElMRV0sXG4gIH07XG4gIGNvbnN0IGhvdXNlQnVyZGVuOmluZGljYXRvckluZm8gPSB7XG4gICAgbGFiZWw6IGludGwuZm9ybWF0TWVzc2FnZShtZXNzYWdlcy5ob3VzZUJ1cmRlbiksXG4gICAgZGVzY3JpcHRpb246ICdIb3VzZWhvbGRzIHRoYXQgYXJlIGxvdyBpbmNvbWUgYW5kIHNwZW5kIG1vcmUgdGhhbiAzMCUgb2YgdGhlaXIgaW5jb21lIHRvIGhvdXNpbmcgY29zdHMnLFxuICAgIHZhbHVlOiBwcm9wZXJ0aWVzW2NvbnN0YW50cy5IT1VTSU5HX0JVUkRFTl9QUk9QRVJUWV9QRVJDRU5USUxFXSxcbiAgfTtcblxuICBjb25zdCBpbmRpY2F0b3JzID0gW3BvdmVydHlJbmZvLCBlZHVJbmZvLCBsaW5Jc29JbmZvLCB1bWVtcGxveUluZm8sIGhvdXNlQnVyZGVuXTtcblxuICBjb25zdCBbY2F0ZWdvcml6YXRpb24sIGNhdGVnb3J5Q2lyY2xlU3R5bGVdID0gZ2V0Q2F0ZWdvcml6YXRpb24oc2NvcmUpO1xuXG4gIHJldHVybiAoXG4gICAgPGFzaWRlIGNsYXNzTmFtZT17c3R5bGVzLmFyZWFEZXRhaWxDb250YWluZXJ9IGRhdGEtY3k9eydhc2lkZSd9PlxuICAgICAgPGhlYWRlciBjbGFzc05hbWU9e3N0eWxlcy50b3BSb3cgfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jdW11bGF0aXZlSW5kZXhTY29yZX0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50b3BSb3dUaXRsZX0+e2ludGwuZm9ybWF0TWVzc2FnZShtZXNzYWdlcy5jdW11bGF0aXZlSW5kZXhTY29yZSl9PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5zY29yZX0gZGF0YS1jeT17J3Njb3JlJ30+e2Ake3JlYWRhYmxlUGVyY2VudChzY29yZSl9YH1cbiAgICAgICAgICAgIDxzdXAgY2xhc3NOYW1lPXtzdHlsZXMuc2NvcmVTdXBlcnNjcmlwdH0+PHNwYW4+dGg8L3NwYW4+PC9zdXA+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50b3BSb3dTdWJUaXRsZX0+e2ludGwuZm9ybWF0TWVzc2FnZShtZXNzYWdlcy5wZXJjZW50aWxlKX08L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY2F0ZWdvcml6YXRpb259PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudG9wUm93VGl0bGV9PntpbnRsLmZvcm1hdE1lc3NhZ2UobWVzc2FnZXMuY2F0ZWdvcml6YXRpb24pfTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMucHJpb3JpdHl9PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2NhdGVnb3J5Q2lyY2xlU3R5bGV9IC8+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnByaW9yaXRpemF0aW9ufT57Y2F0ZWdvcml6YXRpb259PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9oZWFkZXI+XG4gICAgICA8dWwgY2xhc3NOYW1lPXtzdHlsZXMuY2Vuc3VzUm93fT5cbiAgICAgICAgPGxpPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzLmNlbnN1c0xhYmVsfT57aW50bC5mb3JtYXRNZXNzYWdlKG1lc3NhZ2VzLmNlbnN1c0Jsb2NrR3JvdXApfSA8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMuY2Vuc3VzVGV4dH0+e2Jsb2NrR3JvdXB9PC9zcGFuPlxuICAgICAgICA8L2xpPlxuICAgICAgICA8bGk+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMuY2Vuc3VzTGFiZWx9PntpbnRsLmZvcm1hdE1lc3NhZ2UobWVzc2FnZXMuY291bnR5KX0gPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzLmNlbnN1c1RleHR9PnsnV2FzaGluZ3RvbiBDb3VudHkqJ308L3NwYW4+XG4gICAgICAgIDwvbGk+XG4gICAgICAgIDxsaT5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5jZW5zdXNMYWJlbH0+e2ludGwuZm9ybWF0TWVzc2FnZShtZXNzYWdlcy5zdGF0ZSl9PC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzLmNlbnN1c1RleHR9PnsnRGlzdHJpY3Qgb2YgQ29sdW1iaWEqJ308L3NwYW4+XG4gICAgICAgIDwvbGk+XG4gICAgICAgIDxsaT5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5jZW5zdXNMYWJlbH0+e2ludGwuZm9ybWF0TWVzc2FnZShtZXNzYWdlcy5wb3B1bGF0aW9uKX0gPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzLmNlbnN1c1RleHR9Pntwb3B1bGF0aW9uLnRvTG9jYWxlU3RyaW5nKCl9PC9zcGFuPlxuICAgICAgICA8L2xpPlxuICAgICAgPC91bD5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuZGl2aWRlcn0+XG4gICAgICAgIDxkaXY+e2ludGwuZm9ybWF0TWVzc2FnZShtZXNzYWdlcy5pbmRpY2F0b3JDb2x1bW5IZWFkZXIpfTwvZGl2PlxuICAgICAgICA8ZGl2PntpbnRsLmZvcm1hdE1lc3NhZ2UobWVzc2FnZXMucGVyY2VudGlsZUNvbHVtbkhlYWRlcil9PC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAge2luZGljYXRvcnMubWFwKChpbmRpY2F0b3IsIGluZGV4KSA9PiAoXG4gICAgICAgIDxsaSBrZXk9e2luZGV4fSBjbGFzc05hbWU9e3N0eWxlcy5pbmRpY2F0b3JCb3h9IGRhdGEtY3k9eydpbmRpY2F0b3JCb3gnfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmluZGljYXRvckluZm99PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5pbmRpY2F0b3JUaXRsZX0+e2luZGljYXRvci5sYWJlbH08L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaW5kaWNhdG9yRGVzY3JpcHRpb259PlxuICAgICAgICAgICAgICB7aW5kaWNhdG9yLmRlc2NyaXB0aW9ufVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5pbmRpY2F0b3JWYWx1ZX0+e3JlYWRhYmxlUGVyY2VudChpbmRpY2F0b3IudmFsdWUpfTwvZGl2PlxuICAgICAgICA8L2xpPlxuICAgICAgKSl9XG5cbiAgICA8L2FzaWRlPlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgQXJlYURldGFpbDtcbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgTWFwSW50cm9kdWN0aW9uIGZyb20gJy4vbWFwSW50cm9kdWN0aW9uJztcbmltcG9ydCBBcmVhRGV0YWlsIGZyb20gJy4vYXJlYURldGFpbCc7XG5cbmludGVyZmFjZSBJTWFwSW5mb1BhbmVsUHJvcHMge1xuICAgIGNsYXNzTmFtZTogc3RyaW5nLFxuICAgIGZlYXR1cmVQcm9wZXJ0aWVzOiB7IFtrZXk6c3RyaW5nXTogc3RyaW5nIHwgbnVtYmVyIH0gfCB1bmRlZmluZWQsXG4gICAgc2VsZWN0ZWRGZWF0dXJlSWQ6IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZFxuICB9XG5cbmNvbnN0IE1hcEluZm9QYW5lbCA9ICh7Y2xhc3NOYW1lLCBmZWF0dXJlUHJvcGVydGllcywgc2VsZWN0ZWRGZWF0dXJlSWR9OklNYXBJbmZvUGFuZWxQcm9wcykgPT4ge1xuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWV9ID5cbiAgICAgIHsoZmVhdHVyZVByb3BlcnRpZXMgJiYgc2VsZWN0ZWRGZWF0dXJlSWQgKSA/XG4gICAgICAgICAgPEFyZWFEZXRhaWwgcHJvcGVydGllcz17ZmVhdHVyZVByb3BlcnRpZXN9IC8+IDpcbiAgICAgICAgICA8TWFwSW50cm9kdWN0aW9uIC8+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBNYXBJbmZvUGFuZWw7XG4iLCJpbXBvcnQge1N0eWxlLCBGaWxsUGFpbnR9IGZyb20gJ21hcGxpYnJlLWdsJztcbmltcG9ydCBjaHJvbWEgZnJvbSAnY2hyb21hLWpzJztcbmltcG9ydCAqIGFzIGNvbnN0YW50cyBmcm9tICcuLi9kYXRhL2NvbnN0YW50cyc7XG5pbXBvcnQge0ZsYWdDb250YWluZXJ9IGZyb20gJy4uL2NvbnRleHRzL0ZsYWdDb250ZXh0JztcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlcXVpcmUtanNkb2NcbmZ1bmN0aW9uIGhleFRvSFNMQShoZXg6c3RyaW5nLCBhbHBoYTpudW1iZXIpIHtcbiAgcmV0dXJuIGNocm9tYShoZXgpLmFscGhhKGFscGhhKS5jc3MoJ2hzbCcpO1xufVxuXG4vKipcbiAqIGBNYWtlUGFpbnRgIGdlbmVyYXRlcyBhIHpvb20tZmFkZWQgTWFwbGlicmUgc3R5bGUgZm9ybWF0dGVkIGxheWVyIGdpdmVuIGEgc2V0IG9mIHBhcmFtZXRlcnMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkIDogdGhlIGZpZWxkIHdpdGhpbiB0aGUgZGF0YSB0byBjb25zdWx0XG4gKiBAcGFyYW0ge251bWJlcn0gbWluUmFtcCA6IHRoZSBtaW5pbXVtIHZhbHVlIHRoaXMgY2FuIGFzc3VtZVxuICogQHBhcmFtIHtudW1iZXJ9IG1lZFJhbXAgOiB0aGUgbWVkaXVtIHZhbHVlIHRoaXMgY2FuIGFzc3VtZVxuICogQHBhcmFtIHtudW1iZXJ9IG1heFJhbXAgOiB0aGUgbWF4aW11bSB2YWx1ZSB0aGlzIGNhbiBhc3N1bWVcbiAqIEByZXR1cm4ge0ZpbGxQYWludH0gYSBtYXBsaWJyZWdsIGZpbGwgbGF5ZXJcbiAqKi9cbmZ1bmN0aW9uIG1ha2VQYWludCh7XG4gIGZpZWxkLFxuICBtaW5SYW1wLFxuICBtZWRSYW1wLFxuICBtYXhSYW1wLFxufToge1xuICAgIGZpZWxkOiBzdHJpbmc7XG4gICAgbWluUmFtcDogbnVtYmVyO1xuICAgIG1lZFJhbXA6IG51bWJlcjtcbiAgICBtYXhSYW1wOiBudW1iZXI7XG4gIH0pOiBGaWxsUGFpbnQge1xuICBjb25zdCBwYWludERlc2NyaXB0b3IgOiBGaWxsUGFpbnQgPSB7XG4gICAgJ2ZpbGwtY29sb3InOiBbXG4gICAgICAnc3RlcCcsXG4gICAgICBbJ2dldCcsIGZpZWxkXSxcbiAgICAgIGhleFRvSFNMQShjb25zdGFudHMuTUlOX0NPTE9SLCBjb25zdGFudHMuREVGQVVMVF9MQVlFUl9PUEFDSVRZICksXG4gICAgICBtaW5SYW1wLFxuICAgICAgaGV4VG9IU0xBKGNvbnN0YW50cy5NSU5fQ09MT1IsIGNvbnN0YW50cy5ERUZBVUxUX0xBWUVSX09QQUNJVFkgKSxcbiAgICAgIG1lZFJhbXAsXG4gICAgICBoZXhUb0hTTEEoY29uc3RhbnRzLk1FRF9DT0xPUiwgY29uc3RhbnRzLkRFRkFVTFRfTEFZRVJfT1BBQ0lUWSApLFxuICAgICAgbWF4UmFtcCxcbiAgICAgIGhleFRvSFNMQShjb25zdGFudHMuTUFYX0NPTE9SLCBjb25zdGFudHMuREVGQVVMVF9MQVlFUl9PUEFDSVRZICksXG4gICAgXSxcbiAgfTtcbiAgcmV0dXJuIHBhaW50RGVzY3JpcHRvcjtcbn1cblxuY29uc3QgaW1hZ2VTdWZmaXggPSBjb25zdGFudHMuaXNNb2JpbGUgPyAnJyA6ICdAMngnO1xuXG5leHBvcnQgY29uc3QgbWFrZU1hcFN0eWxlID0gKGZsYWdDb250YWluZXI6IEZsYWdDb250YWluZXIpIDogU3R5bGUgPT4ge1xuICByZXR1cm4ge1xuICAgICd2ZXJzaW9uJzogOCxcbiAgICAnc291cmNlcyc6IHtcbiAgICAgICdjYXJ0byc6IHtcbiAgICAgICAgJ3R5cGUnOiAncmFzdGVyJyxcbiAgICAgICAgJ3RpbGVzJzpcbiAgICAgIFtcbiAgICAgICAgYGh0dHBzOi8vYS5iYXNlbWFwcy5jYXJ0b2Nkbi5jb20vbGlnaHRfbm9sYWJlbHMve3p9L3t4fS97eX0ke2ltYWdlU3VmZml4fS5wbmdgLFxuICAgICAgICBgaHR0cHM6Ly9iLmJhc2VtYXBzLmNhcnRvY2RuLmNvbS9saWdodF9ub2xhYmVscy97en0ve3h9L3t5fSR7aW1hZ2VTdWZmaXh9LnBuZ2AsXG4gICAgICAgIGBodHRwczovL2MuYmFzZW1hcHMuY2FydG9jZG4uY29tL2xpZ2h0X25vbGFiZWxzL3t6fS97eH0ve3l9JHtpbWFnZVN1ZmZpeH0ucG5nYCxcbiAgICAgICAgYGh0dHBzOi8vZC5iYXNlbWFwcy5jYXJ0b2Nkbi5jb20vbGlnaHRfbm9sYWJlbHMve3p9L3t4fS97eX0ke2ltYWdlU3VmZml4fS5wbmdgLFxuICAgICAgXSxcbiAgICAgICAgJ21pbnpvb20nOiBjb25zdGFudHMuR0xPQkFMX01JTl9aT09NLFxuICAgICAgICAnbWF4em9vbSc6IGNvbnN0YW50cy5HTE9CQUxfTUFYX1pPT00sXG4gICAgICB9LFxuICAgICAgJ2dlbyc6IHtcbiAgICAgICAgJ3R5cGUnOiAncmFzdGVyJyxcbiAgICAgICAgJ3RpbGVzJzogW1xuICAgICAgICAgICdodHRwczovL210MC5nb29nbGUuY29tL3Z0L2x5cnM9cCZobD1lbiZ4PXt4fSZ5PXt5fSZ6PXt6fScsXG4gICAgICAgIF0sXG4gICAgICAgICdtaW56b29tJzogY29uc3RhbnRzLkdMT0JBTF9NSU5fWk9PTSxcbiAgICAgICAgJ21heHpvb20nOiBjb25zdGFudHMuR0xPQkFMX01BWF9aT09NLFxuICAgICAgfSxcbiAgICAgIFtjb25zdGFudHMuSElHSF9TQ09SRV9TT1VSQ0VfTkFNRV06IHtcbiAgICAgIC8vIFwiU2NvcmUtaGlnaFwiIHJlcHJlc2VudHMgdGhlIGZ1bGwgc2V0IG9mIGRhdGFcbiAgICAgIC8vIGF0IHRoZSBjZW5zdXMgYmxvY2sgZ3JvdXAgbGV2ZWwuIEl0IGlzIG9ubHkgc2hvd25cbiAgICAgIC8vIGF0IGhpZ2ggem9vbSBsZXZlbHMgdG8gYXZvaWQgcGVyZm9ybWFuY2UgaXNzdWVzIGF0IGxvd2VyIHpvb21zXG4gICAgICAgICd0eXBlJzogJ3ZlY3RvcicsXG4gICAgICAgIC8vIE91ciBjdXJyZW50IHRpcHBlY2Fub2UgY29tbWFuZCBkb2VzIG5vdCBzZXQgYW4gaWQuXG4gICAgICAgIC8vIFRoZSBiZWxvdyBsaW5lIHByb21vdGVzIHRoZSBHRU9JRDEwIHByb3BlcnR5IHRvIHRoZSBJRFxuICAgICAgICAncHJvbW90ZUlkJzogY29uc3RhbnRzLkdFT0lEX1BST1BFUlRZLFxuICAgICAgICAndGlsZXMnOiBbXG4gICAgICAgICAgJ2hpZ2hfdGlsZXMnIGluIGZsYWdDb250YWluZXIgP1xuICAgICAgICAgIGNvbnN0YW50cy5mZWF0dXJlVVJMRm9yVGlsZXNldE5hbWUoZmxhZ0NvbnRhaW5lclsnaGlnaF90aWxlcyddKSA6XG4gICAgICAgICAgY29uc3RhbnRzLkZFQVRVUkVfVElMRV9ISUdIX1pPT01fVVJMLFxuICAgICAgICBdLFxuICAgICAgICAvLyBTZWV0aW5nIG1heHpvb20gaGVyZSBlbmFibGVzICdvdmVyem9vbWluZydcbiAgICAgICAgLy8gZS5nLiBjb250aW51ZWQgem9vbWluZyBiZXlvbmQgdGhlIG1heCBib3VuZHMuXG4gICAgICAgIC8vIE1vcmUgaGVyZTogaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vaGVscC9nbG9zc2FyeS9vdmVyem9vbS9cbiAgICAgICAgJ21pbnpvb20nOiBjb25zdGFudHMuR0xPQkFMX01JTl9aT09NX0hJR0gsXG4gICAgICAgICdtYXh6b29tJzogY29uc3RhbnRzLkdMT0JBTF9NQVhfWk9PTV9ISUdILFxuICAgICAgfSxcbiAgICAgIFtjb25zdGFudHMuTE9XX1NDT1JFX1NPVVJDRV9OQU1FXToge1xuICAgICAgLy8gXCJTY29yZS1sb3dcIiByZXByZXNlbnRzIGEgdGlsZXNldCBhdCB0aGUgbGV2ZWwgb2YgYnVja2V0ZWQgdHJhY3RzLlxuICAgICAgLy8gY2Vuc3VzIGJsb2NrIGdyb3VwIGluZm9ybWF0aW9uIGlzIGBkaXNzb2x2ZWBkIGludG8gdHJhY3RzLCB0aGVuXG4gICAgICAvLyBlYWNoIHRyYWN0IGlzIGBkaXNzb2x2ZWBkIGludG8gb25lIG9mIHRlbiBidWNrZXRzLiBJdCBpcyBtZWFudFxuICAgICAgLy8gdG8gZ2l2ZSB1cyBhIGZhdm9yYWJsZSB0cmFkZW9mZiBiZXR3ZWVuIHBlcmZvcm1hbmNlIGFuZCBmaWRlbGl0eS5cbiAgICAgICAgJ3R5cGUnOiAndmVjdG9yJyxcbiAgICAgICAgJ3Byb21vdGVJZCc6IGNvbnN0YW50cy5HRU9JRF9QUk9QRVJUWSxcbiAgICAgICAgJ3RpbGVzJzogW1xuICAgICAgICAgICdsb3dfdGlsZXMnIGluIGZsYWdDb250YWluZXIgP1xuICAgICAgICAgIGNvbnN0YW50cy5mZWF0dXJlVVJMRm9yVGlsZXNldE5hbWUoZmxhZ0NvbnRhaW5lclsnbG93X3RpbGVzJ10pIDpcbiAgICAgICAgICBjb25zdGFudHMuRkVBVFVSRV9USUxFX0xPV19aT09NX1VSTCxcbiAgICAgICAgLy8gRm9yIGxvY2FsIGRldmVsb3BtZW50LCB1c2U6XG4gICAgICAgIC8vICdodHRwOi8vbG9jYWxob3N0OjgwODAvZGF0YS90bF8yMDEwX2JnX3dpdGhfZGF0YS97en0ve3h9L3t5fS5wYmYnLFxuICAgICAgICBdLFxuICAgICAgICAnbWluem9vbSc6IGNvbnN0YW50cy5HTE9CQUxfTUlOX1pPT01fTE9XLFxuICAgICAgICAnbWF4em9vbSc6IGNvbnN0YW50cy5HTE9CQUxfTUFYX1pPT01fTE9XLFxuICAgICAgfSxcbiAgICAgICdsYWJlbHMnOiB7XG4gICAgICAgICd0eXBlJzogJ3Jhc3RlcicsXG4gICAgICAgICd0aWxlcyc6IFtcbiAgICAgICAgICBgaHR0cHM6Ly9jYXJ0b2RiLWJhc2VtYXBzLWEuZ2xvYmFsLnNzbC5mYXN0bHkubmV0L2xpZ2h0X29ubHlfbGFiZWxzL3t6fS97eH0ve3l9JHtpbWFnZVN1ZmZpeH0ucG5nYCxcbiAgICAgICAgICBgaHR0cHM6Ly9jYXJ0b2RiLWJhc2VtYXBzLWIuZ2xvYmFsLnNzbC5mYXN0bHkubmV0L2xpZ2h0X29ubHlfbGFiZWxzL3t6fS97eH0ve3l9JHtpbWFnZVN1ZmZpeH0ucG5nYCxcbiAgICAgICAgICBgaHR0cHM6Ly9jYXJ0b2RiLWJhc2VtYXBzLWMuZ2xvYmFsLnNzbC5mYXN0bHkubmV0L2xpZ2h0X29ubHlfbGFiZWxzL3t6fS97eH0ve3l9JHtpbWFnZVN1ZmZpeH0ucG5nYCxcbiAgICAgICAgICBgaHR0cHM6Ly9jYXJ0b2RiLWJhc2VtYXBzLWQuZ2xvYmFsLnNzbC5mYXN0bHkubmV0L2xpZ2h0X29ubHlfbGFiZWxzL3t6fS97eH0ve3l9JHtpbWFnZVN1ZmZpeH0ucG5nYCxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICAnbGF5ZXJzJzogW1xuICAgICAge1xuICAgICAgICAnaWQnOiAnY2FydG8nLFxuICAgICAgICAnc291cmNlJzogJ2NhcnRvJyxcbiAgICAgICAgJ3R5cGUnOiAncmFzdGVyJyxcbiAgICAgICAgJ21pbnpvb20nOiBjb25zdGFudHMuR0xPQkFMX01JTl9aT09NLFxuICAgICAgICAnbWF4em9vbSc6IGNvbnN0YW50cy5HTE9CQUxfTUFYX1pPT00sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnaWQnOiAnZ2VvJyxcbiAgICAgICAgJ3NvdXJjZSc6ICdnZW8nLFxuICAgICAgICAndHlwZSc6ICdyYXN0ZXInLFxuICAgICAgICAnbGF5b3V0Jzoge1xuICAgICAgICAvLyBNYWtlIHRoZSBsYXllciBpbnZpc2libGUgYnkgZGVmYXVsdC5cbiAgICAgICAgICAndmlzaWJpbGl0eSc6ICdub25lJyxcbiAgICAgICAgfSxcbiAgICAgICAgJ21pbnpvb20nOiBjb25zdGFudHMuR0xPQkFMX01JTl9aT09NLFxuICAgICAgICAnbWF4em9vbSc6IGNvbnN0YW50cy5HTE9CQUxfTUFYX1pPT00sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnaWQnOiBjb25zdGFudHMuSElHSF9TQ09SRV9MQVlFUl9OQU1FLFxuICAgICAgICAnc291cmNlJzogY29uc3RhbnRzLkhJR0hfU0NPUkVfU09VUkNFX05BTUUsXG4gICAgICAgICdzb3VyY2UtbGF5ZXInOiBjb25zdGFudHMuU0NPUkVfU09VUkNFX0xBWUVSLFxuICAgICAgICAndHlwZSc6ICdmaWxsJyxcbiAgICAgICAgJ2ZpbHRlcic6IFsnYWxsJyxcbiAgICAgICAgICBbJz4nLCBjb25zdGFudHMuU0NPUkVfUFJPUEVSVFlfSElHSCwgY29uc3RhbnRzLlNDT1JFX0JPVU5EQVJZX1RIUkVTSE9MRF0sXG4gICAgICAgIF0sXG4gICAgICAgICdwYWludCc6IG1ha2VQYWludCh7XG4gICAgICAgICAgZmllbGQ6IGNvbnN0YW50cy5TQ09SRV9QUk9QRVJUWV9ISUdILFxuICAgICAgICAgIG1pblJhbXA6IGNvbnN0YW50cy5TQ09SRV9CT1VOREFSWV9MT1csXG4gICAgICAgICAgbWVkUmFtcDogY29uc3RhbnRzLlNDT1JFX0JPVU5EQVJZX1RIUkVTSE9MRCxcbiAgICAgICAgICBtYXhSYW1wOiBjb25zdGFudHMuU0NPUkVfQk9VTkRBUllfUFJJT1JJVElaRUQsXG4gICAgICAgIH0pLFxuICAgICAgICAnbWluem9vbSc6IGNvbnN0YW50cy5HTE9CQUxfTUlOX1pPT01fSElHSCxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICdpZCc6IGNvbnN0YW50cy5MT1dfU0NPUkVfTEFZRVJfTkFNRSxcbiAgICAgICAgJ3NvdXJjZSc6IGNvbnN0YW50cy5MT1dfU0NPUkVfU09VUkNFX05BTUUsXG4gICAgICAgICdzb3VyY2UtbGF5ZXInOiBjb25zdGFudHMuU0NPUkVfU09VUkNFX0xBWUVSLFxuICAgICAgICAndHlwZSc6ICdmaWxsJyxcbiAgICAgICAgJ2ZpbHRlcic6IFsnYWxsJyxcbiAgICAgICAgICBbJz4nLCBjb25zdGFudHMuU0NPUkVfUFJPUEVSVFlfTE9XLCBjb25zdGFudHMuU0NPUkVfQk9VTkRBUllfVEhSRVNIT0xEXSxcbiAgICAgICAgXSxcbiAgICAgICAgJ3BhaW50JzogbWFrZVBhaW50KHtcbiAgICAgICAgICBmaWVsZDogY29uc3RhbnRzLlNDT1JFX1BST1BFUlRZX0xPVyxcbiAgICAgICAgICBtaW5SYW1wOiBjb25zdGFudHMuU0NPUkVfQk9VTkRBUllfTE9XLFxuICAgICAgICAgIG1lZFJhbXA6IGNvbnN0YW50cy5TQ09SRV9CT1VOREFSWV9USFJFU0hPTEQsXG4gICAgICAgICAgbWF4UmFtcDogY29uc3RhbnRzLlNDT1JFX0JPVU5EQVJZX1BSSU9SSVRJWkVELFxuICAgICAgICB9KSxcbiAgICAgICAgJ21pbnpvb20nOiBjb25zdGFudHMuR0xPQkFMX01JTl9aT09NX0xPVyxcbiAgICAgICAgJ21heHpvb20nOiBjb25zdGFudHMuR0xPQkFMX01BWF9aT09NX0xPVyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAvLyBcIlNjb3JlLWhpZ2hsaWdodHNcIiByZXByZXNlbnRzIHRoZSBib3JkZXJcbiAgICAgIC8vIGFyb3VuZCBnaXZlbiB0aWxlcyB0aGF0IGFwcGVhcnMgYXQgaGlnaGVyIHpvb21zXG4gICAgICAgICdpZCc6ICdzY29yZS1oaWdobGlnaHRzLWxheWVyJyxcbiAgICAgICAgJ3NvdXJjZSc6IGNvbnN0YW50cy5ISUdIX1NDT1JFX1NPVVJDRV9OQU1FLFxuICAgICAgICAnc291cmNlLWxheWVyJzogY29uc3RhbnRzLlNDT1JFX1NPVVJDRV9MQVlFUixcbiAgICAgICAgJ3R5cGUnOiAnbGluZScsXG4gICAgICAgICdsYXlvdXQnOiB7XG4gICAgICAgICAgJ3Zpc2liaWxpdHknOiAndmlzaWJsZScsXG4gICAgICAgICAgJ2xpbmUtam9pbic6ICdyb3VuZCcsXG4gICAgICAgICAgJ2xpbmUtY2FwJzogJ3JvdW5kJyxcbiAgICAgICAgfSxcbiAgICAgICAgJ3BhaW50Jzoge1xuICAgICAgICAgICdsaW5lLWNvbG9yJzogY29uc3RhbnRzLkRFRkFVTFRfT1VUTElORV9DT0xPUixcbiAgICAgICAgICAnbGluZS13aWR0aCc6IDAuOCxcbiAgICAgICAgICAnbGluZS1vcGFjaXR5JzogMC41LFxuICAgICAgICB9LFxuICAgICAgICAnbWluem9vbSc6IGNvbnN0YW50cy5HTE9CQUxfTUlOX1pPT01fSElHSExJR0hULFxuICAgICAgICAnbWF4em9vbSc6IGNvbnN0YW50cy5HTE9CQUxfTUFYX1pPT01fSElHSExJR0hULFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgIC8vIFwic2NvcmUtYm9yZGVyLWhpZ2hsaWdodFwiIGlzIHVzZWQgdG8gaGlnaGxpZ2h0XG4gICAgICAvLyB0aGUgY3VycmVudGx5LXNlbGVjdGVkIGZlYXR1cmVcbiAgICAgICAgJ2lkJzogJ3Njb3JlLWJvcmRlci1oaWdobGlnaHQtbGF5ZXInLFxuICAgICAgICAndHlwZSc6ICdsaW5lJyxcbiAgICAgICAgJ3NvdXJjZSc6IGNvbnN0YW50cy5ISUdIX1NDT1JFX1NPVVJDRV9OQU1FLFxuICAgICAgICAnc291cmNlLWxheWVyJzogY29uc3RhbnRzLlNDT1JFX1NPVVJDRV9MQVlFUixcbiAgICAgICAgJ2xheW91dCc6IHt9LFxuICAgICAgICAncGFpbnQnOiB7XG4gICAgICAgICAgJ2xpbmUtY29sb3InOiBjb25zdGFudHMuQk9SREVSX0hJR0hMSUdIVF9DT0xPUixcbiAgICAgICAgICAnbGluZS13aWR0aCc6IFtcbiAgICAgICAgICAgICdjYXNlJyxcbiAgICAgICAgICAgIFsnYm9vbGVhbicsIFsnZmVhdHVyZS1zdGF0ZScsIGNvbnN0YW50cy5TRUxFQ1RFRF9QUk9QRVJUWV0sIGZhbHNlXSxcbiAgICAgICAgICAgIGNvbnN0YW50cy5ISUdITElHSFRfQk9SREVSX1dJRFRILFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICAnbWluem9vbSc6IGNvbnN0YW50cy5HTE9CQUxfTUlOX1pPT01fSElHSCxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAvLyBXZSBwdXQgbGFiZWxzIGxhc3QgdG8gZW5zdXJlIHByb21pbmVuY2VcbiAgICAgICAgJ2lkJzogJ2xhYmVscy1vbmx5LWxheWVyJyxcbiAgICAgICAgJ3R5cGUnOiAncmFzdGVyJyxcbiAgICAgICAgJ3NvdXJjZSc6ICdsYWJlbHMnLFxuICAgICAgICAnbWluem9vbSc6IGNvbnN0YW50cy5HTE9CQUxfTUlOX1pPT00sXG4gICAgICAgICdtYXh6b29tJzogY29uc3RhbnRzLkdMT0JBTF9NQVhfWk9PTSxcbiAgICAgIH0sXG4gICAgXSxcbiAgfTtcbn07XG5cbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IHZhciBtYXBBbmRJbmZvUGFuZWxDb250YWluZXIgPSBcIko0ME1hcC1tb2R1bGUtLW1hcEFuZEluZm9QYW5lbENvbnRhaW5lci0tcS1vZHlcIjtcbmV4cG9ydCB2YXIgajQwUG9wdXAgPSBcIko0ME1hcC1tb2R1bGUtLWo0MFBvcHVwLS0zeUpHclwiO1xuZXhwb3J0IHZhciBuYXZpZ2F0aW9uQ29udHJvbCA9IFwiSjQwTWFwLW1vZHVsZS0tbmF2aWdhdGlvbkNvbnRyb2wtLTJBeWJmXCI7XG5leHBvcnQgdmFyIGZ1bGxzY3JlZW5Db250cm9sID0gXCJKNDBNYXAtbW9kdWxlLS1mdWxsc2NyZWVuQ29udHJvbC0tMVVCS2VcIjtcbmV4cG9ydCB2YXIgZ2VvbG9jYXRlQ29udHJvbCA9IFwiSjQwTWFwLW1vZHVsZS0tZ2VvbG9jYXRlQ29udHJvbC0tM0tWQWtcIjtcbmV4cG9ydCB2YXIgbWFwSW5mb1BhbmVsID0gXCJKNDBNYXAtbW9kdWxlLS1tYXBJbmZvUGFuZWwtLUYzalI0XCI7IiwiLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbi8vIEV4dGVybmFsIExpYnM6XG5pbXBvcnQgUmVhY3QsIHtNb3VzZUV2ZW50LCB1c2VSZWYsIHVzZVN0YXRlfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge01hcCwgTWFwYm94R2VvSlNPTkZlYXR1cmUsIExuZ0xhdEJvdW5kc0xpa2V9IGZyb20gJ21hcGxpYnJlLWdsJztcbmltcG9ydCBSZWFjdE1hcEdMLCB7XG4gIE1hcEV2ZW50LFxuICBWaWV3cG9ydFByb3BzLFxuICBXZWJNZXJjYXRvclZpZXdwb3J0LFxuICBOYXZpZ2F0aW9uQ29udHJvbCxcbiAgR2VvbG9jYXRlQ29udHJvbCxcbiAgUG9wdXAsXG4gIEZseVRvSW50ZXJwb2xhdG9yLFxuICBGdWxsc2NyZWVuQ29udHJvbCxcbiAgTWFwUmVmfSBmcm9tICdyZWFjdC1tYXAtZ2wnO1xuaW1wb3J0IGJib3ggZnJvbSAnQHR1cmYvYmJveCc7XG5pbXBvcnQgKiBhcyBkMyBmcm9tICdkMy1lYXNlJztcbmltcG9ydCB7aXNNb2JpbGV9IGZyb20gJ3JlYWN0LWRldmljZS1kZXRlY3QnO1xuXG4vLyBDb250ZXh0czpcbmltcG9ydCB7dXNlRmxhZ3N9IGZyb20gJy4uL2NvbnRleHRzL0ZsYWdDb250ZXh0JztcblxuLy8gQ29tcG9uZW50czpcbmltcG9ydCBUZXJyaXRvcnlGb2N1c0NvbnRyb2wgZnJvbSAnLi90ZXJyaXRvcnlGb2N1c0NvbnRyb2wnO1xuaW1wb3J0IE1hcEluZm9QYW5lbCBmcm9tICcuL21hcEluZm9QYW5lbCc7XG5pbXBvcnQgQXJlYURldGFpbCBmcm9tICcuL2FyZWFEZXRhaWwnO1xuXG4vLyBTdHlsZXMgYW5kIGNvbnN0YW50c1xuaW1wb3J0IHttYWtlTWFwU3R5bGV9IGZyb20gJy4uL2RhdGEvbWFwU3R5bGUnO1xuaW1wb3J0ICdtYXBsaWJyZS1nbC9kaXN0L21hcGxpYnJlLWdsLmNzcyc7XG5pbXBvcnQgKiBhcyBjb25zdGFudHMgZnJvbSAnLi4vZGF0YS9jb25zdGFudHMnO1xuaW1wb3J0ICogYXMgc3R5bGVzIGZyb20gJy4vSjQwTWFwLm1vZHVsZS5zY3NzJztcblxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBXaW5kb3cge1xuICAgIEN5cHJlc3M/OiBvYmplY3Q7XG4gICAgdW5kZXJseWluZ01hcDogTWFwO1xuICB9XG59XG5cblxuZXhwb3J0IGludGVyZmFjZSBJRGV0YWlsVmlld0ludGVyZmFjZSB7XG4gIGxhdGl0dWRlOiBudW1iZXJcbiAgbG9uZ2l0dWRlOiBudW1iZXJcbiAgem9vbTogbnVtYmVyXG4gIHByb3BlcnRpZXM6IGNvbnN0YW50cy5KNDBQcm9wZXJ0aWVzLFxufTtcblxuXG5jb25zdCBKNDBNYXAgPSAoKSA9PiB7XG4gIGNvbnN0IFt2aWV3cG9ydCwgc2V0Vmlld3BvcnRdID0gdXNlU3RhdGU8Vmlld3BvcnRQcm9wcz4oe1xuICAgIGxhdGl0dWRlOiBjb25zdGFudHMuREVGQVVMVF9DRU5URVJbMF0sXG4gICAgbG9uZ2l0dWRlOiBjb25zdGFudHMuREVGQVVMVF9DRU5URVJbMV0sXG4gICAgem9vbTogY29uc3RhbnRzLkdMT0JBTF9NSU5fWk9PTSxcbiAgfSk7XG5cbiAgY29uc3QgW3NlbGVjdGVkRmVhdHVyZSwgc2V0U2VsZWN0ZWRGZWF0dXJlXSA9IHVzZVN0YXRlPE1hcGJveEdlb0pTT05GZWF0dXJlPigpO1xuICBjb25zdCBbZGV0YWlsVmlld0RhdGEsIHNldERldGFpbFZpZXdEYXRhXSA9IHVzZVN0YXRlPElEZXRhaWxWaWV3SW50ZXJmYWNlPigpO1xuICBjb25zdCBbdHJhbnNpdGlvbkluUHJvZ3Jlc3MsIHNldFRyYW5zaXRpb25JblByb2dyZXNzXSA9IHVzZVN0YXRlPGJvb2xlYW4+KGZhbHNlKTtcbiAgY29uc3QgW2dlb2xvY2F0aW9uSW5Qcm9ncmVzcywgc2V0R2VvbG9jYXRpb25JblByb2dyZXNzXSA9IHVzZVN0YXRlPGJvb2xlYW4+KGZhbHNlKTtcbiAgY29uc3QgW2lzTW9iaWxlTWFwU3RhdGUsIHNldElzTW9iaWxlTWFwU3RhdGVdID0gdXNlU3RhdGU8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIGNvbnN0IG1hcFJlZiA9IHVzZVJlZjxNYXBSZWY+KG51bGwpO1xuICBjb25zdCBmbGFncyA9IHVzZUZsYWdzKCk7XG5cbiAgY29uc3Qgb25DbGljayA9IChldmVudDogTWFwRXZlbnQpID0+IHtcbiAgICBjb25zdCBmZWF0dXJlID0gZXZlbnQuZmVhdHVyZXMgJiYgZXZlbnQuZmVhdHVyZXNbMF07XG4gICAgaWYgKGZlYXR1cmUpIHtcbiAgICAgIGNvbnN0IFttaW5MbmcsIG1pbkxhdCwgbWF4TG5nLCBtYXhMYXRdID0gYmJveChmZWF0dXJlKTtcbiAgICAgIGNvbnN0IG5ld1ZpZXdQb3J0ID0gbmV3IFdlYk1lcmNhdG9yVmlld3BvcnQoe2hlaWdodDogdmlld3BvcnQuaGVpZ2h0ISwgd2lkdGg6IHZpZXdwb3J0LndpZHRoIX0pO1xuICAgICAgY29uc3Qge2xvbmdpdHVkZSwgbGF0aXR1ZGUsIHpvb219ID0gbmV3Vmlld1BvcnQuZml0Qm91bmRzKFxuICAgICAgICAgIFtcbiAgICAgICAgICAgIFttaW5MbmcsIG1pbkxhdF0sXG4gICAgICAgICAgICBbbWF4TG5nLCBtYXhMYXRdLFxuICAgICAgICAgIF0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgcGFkZGluZzogNDAsXG4gICAgICAgICAgfSxcbiAgICAgICk7XG5cbiAgICAgIC8vIElmIHdlJ3ZlIHNlbGVjdGVkIGEgbmV3IGZlYXR1cmUsIHNldCAnc2VsZWN0ZWQnIHRvIGZhbHNlXG4gICAgICBpZiAoc2VsZWN0ZWRGZWF0dXJlICYmIGZlYXR1cmUuaWQgIT09IHNlbGVjdGVkRmVhdHVyZS5pZCkge1xuICAgICAgICBzZXRNYXBTZWxlY3RlZChzZWxlY3RlZEZlYXR1cmUsIGZhbHNlKTtcbiAgICAgIH1cbiAgICAgIHNldE1hcFNlbGVjdGVkKGZlYXR1cmUsIHRydWUpO1xuICAgICAgY29uc3QgcG9wdXBJbmZvID0ge1xuICAgICAgICBsb25naXR1ZGU6IGxvbmdpdHVkZSxcbiAgICAgICAgbGF0aXR1ZGU6IGxhdGl0dWRlLFxuICAgICAgICB6b29tOiB6b29tLFxuICAgICAgICBwcm9wZXJ0aWVzOiBmZWF0dXJlLnByb3BlcnRpZXMsXG4gICAgICB9O1xuICAgICAgZ29Ub1BsYWNlKFtcbiAgICAgICAgW21pbkxuZywgbWluTGF0XSxcbiAgICAgICAgW21heExuZywgbWF4TGF0XSxcbiAgICAgIF0pO1xuICAgICAgc2V0RGV0YWlsVmlld0RhdGEocG9wdXBJbmZvKTtcbiAgICB9XG4gIH07XG5cblxuICBjb25zdCBvbkxvYWQgPSAoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5DeXByZXNzICYmIG1hcFJlZi5jdXJyZW50KSB7XG4gICAgICB3aW5kb3cudW5kZXJseWluZ01hcCA9IG1hcFJlZi5jdXJyZW50LmdldE1hcCgpO1xuICAgIH1cblxuICAgIGlmIChpc01vYmlsZSkgc2V0SXNNb2JpbGVNYXBTdGF0ZSh0cnVlKTtcbiAgfTtcblxuXG4gIGNvbnN0IGdvVG9QbGFjZSA9IChib3VuZHM6IExuZ0xhdEJvdW5kc0xpa2UgKSA9PiB7XG4gICAgY29uc3Qge2xvbmdpdHVkZSwgbGF0aXR1ZGUsIHpvb219ID0gbmV3IFdlYk1lcmNhdG9yVmlld3BvcnQoe2hlaWdodDogdmlld3BvcnQuaGVpZ2h0ISwgd2lkdGg6IHZpZXdwb3J0LndpZHRoIX0pXG4gICAgICAgIC5maXRCb3VuZHMoYm91bmRzIGFzIFtbbnVtYmVyLCBudW1iZXJdLCBbbnVtYmVyLCBudW1iZXJdXSwge1xuICAgICAgICAgIHBhZGRpbmc6IDIwLFxuICAgICAgICAgIG9mZnNldDogWzAsIC0xMDBdLFxuICAgICAgICB9KTtcbiAgICBzZXRWaWV3cG9ydCh7XG4gICAgICAuLi52aWV3cG9ydCxcbiAgICAgIGxvbmdpdHVkZSxcbiAgICAgIGxhdGl0dWRlLFxuICAgICAgem9vbSxcbiAgICAgIHRyYW5zaXRpb25EdXJhdGlvbjogMTAwMCxcbiAgICAgIHRyYW5zaXRpb25JbnRlcnBvbGF0b3I6IG5ldyBGbHlUb0ludGVycG9sYXRvcigpLFxuICAgICAgdHJhbnNpdGlvbkVhc2luZzogZDMuZWFzZUN1YmljLFxuICAgIH0pO1xuICB9O1xuXG5cbiAgY29uc3Qgc2V0TWFwU2VsZWN0ZWQgPSAoZmVhdHVyZTpNYXBib3hHZW9KU09ORmVhdHVyZSwgaXNTZWxlY3RlZDpib29sZWFuKSA6IHZvaWQgPT4ge1xuICAgIC8vIFRoZSBiZWxvdyBjYW4gYmUgY29uZmlybWVkIGR1cmluZyBkZWJ1ZyB3aXRoOlxuICAgIC8vIG1hcFJlZi5jdXJyZW50LmdldEZlYXR1cmVTdGF0ZSh7XCJpZFwiOmZlYXR1cmUuaWQsIFwic291cmNlXCI6ZmVhdHVyZS5zb3VyY2UsIFwic291cmNlTGF5ZXJcIjpmZWF0dXJlLnNvdXJjZUxheWVyfSlcbiAgICBtYXBSZWYuY3VycmVudCAmJiBtYXBSZWYuY3VycmVudC5nZXRNYXAoKS5zZXRGZWF0dXJlU3RhdGUoe1xuICAgICAgc291cmNlOiBmZWF0dXJlLnNvdXJjZSxcbiAgICAgIHNvdXJjZUxheWVyOiBmZWF0dXJlLnNvdXJjZUxheWVyLFxuICAgICAgaWQ6IGZlYXR1cmUuaWQsXG4gICAgfSwge1tjb25zdGFudHMuU0VMRUNURURfUFJPUEVSVFldOiBpc1NlbGVjdGVkfSk7XG4gICAgaWYgKGlzU2VsZWN0ZWQpIHtcbiAgICAgIHNldFNlbGVjdGVkRmVhdHVyZShmZWF0dXJlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0U2VsZWN0ZWRGZWF0dXJlKHVuZGVmaW5lZCk7XG4gICAgfVxuICB9O1xuXG5cbiAgY29uc3Qgb25DbGlja1RlcnJpdG9yeUZvY3VzQnV0dG9uID0gKGV2ZW50OiBNb3VzZUV2ZW50PEhUTUxCdXR0b25FbGVtZW50PikgPT4ge1xuICAgIGNvbnN0IGJ1dHRvbklEID0gZXZlbnQudGFyZ2V0ICYmIChldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLmlkO1xuXG4gICAgc3dpdGNoIChidXR0b25JRCkge1xuICAgICAgY2FzZSAnNDgnOlxuICAgICAgICBnb1RvUGxhY2UoY29uc3RhbnRzLkxPV0VSXzQ4X0JPVU5EUyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnQUsnOlxuICAgICAgICBnb1RvUGxhY2UoY29uc3RhbnRzLkFMQVNLQV9CT1VORFMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0hJJzpcbiAgICAgICAgZ29Ub1BsYWNlKGNvbnN0YW50cy5IQVdBSUlfQk9VTkRTKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdQUic6XG4gICAgICAgIGdvVG9QbGFjZShjb25zdGFudHMuUFVFUlRPX1JJQ09fQk9VTkRTKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBvblRyYW5zaXRpb25TdGFydCA9ICgpID0+IHtcbiAgICBzZXRUcmFuc2l0aW9uSW5Qcm9ncmVzcyh0cnVlKTtcbiAgfTtcblxuICBjb25zdCBvblRyYW5zaXRpb25FbmQgPSAoKSA9PiB7XG4gICAgc2V0VHJhbnNpdGlvbkluUHJvZ3Jlc3MoZmFsc2UpO1xuICB9O1xuXG4gIGNvbnN0IG9uR2VvbG9jYXRlID0gKCkgPT4ge1xuICAgIHNldEdlb2xvY2F0aW9uSW5Qcm9ncmVzcyhmYWxzZSk7XG4gIH07XG5cbiAgY29uc3Qgb25DbGlja0dlb2xvY2F0ZSA9ICgpID0+IHtcbiAgICBzZXRHZW9sb2NhdGlvbkluUHJvZ3Jlc3ModHJ1ZSk7XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm1hcEFuZEluZm9QYW5lbENvbnRhaW5lcn0+XG4gICAgICA8UmVhY3RNYXBHTFxuICAgICAgICB7Li4udmlld3BvcnR9XG4gICAgICAgIG1hcFN0eWxlPXttYWtlTWFwU3R5bGUoZmxhZ3MpfVxuICAgICAgICBtaW5ab29tPXtjb25zdGFudHMuR0xPQkFMX01JTl9aT09NfVxuICAgICAgICBtYXhab29tPXtjb25zdGFudHMuR0xPQkFMX01BWF9aT09NfVxuICAgICAgICBtYXBPcHRpb25zPXt7aGFzaDogdHJ1ZX19XG4gICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgIGhlaWdodD17aXNNb2JpbGVNYXBTdGF0ZSA/ICc0NHZoJyA6ICcxMDAlJ31cbiAgICAgICAgZHJhZ1JvdGF0ZT17ZmFsc2V9XG4gICAgICAgIHRvdWNoUm90YXRlPXtmYWxzZX1cbiAgICAgICAgaW50ZXJhY3RpdmVMYXllcklkcz17W2NvbnN0YW50cy5ISUdIX1NDT1JFX0xBWUVSX05BTUVdfVxuICAgICAgICBvblZpZXdwb3J0Q2hhbmdlPXtzZXRWaWV3cG9ydH1cbiAgICAgICAgb25DbGljaz17b25DbGlja31cbiAgICAgICAgb25Mb2FkPXtvbkxvYWR9XG4gICAgICAgIG9uVHJhbnNpdGlvblN0YXJ0PXtvblRyYW5zaXRpb25TdGFydH1cbiAgICAgICAgb25UcmFuc2l0aW9uRW5kPXtvblRyYW5zaXRpb25FbmR9XG4gICAgICAgIHJlZj17bWFwUmVmfVxuICAgICAgICBkYXRhLWN5PXsncmVhY3RNYXBHTCd9XG4gICAgICA+XG4gICAgICAgIHsoJ2ZzJyBpbiBmbGFncyAmJiBkZXRhaWxWaWV3RGF0YSAmJiAhdHJhbnNpdGlvbkluUHJvZ3Jlc3MpICYmIChcbiAgICAgICAgICA8UG9wdXBcbiAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLmo0MFBvcHVwfVxuICAgICAgICAgICAgdGlwU2l6ZT17NX1cbiAgICAgICAgICAgIGFuY2hvcj1cInRvcFwiXG4gICAgICAgICAgICBsb25naXR1ZGU9e2RldGFpbFZpZXdEYXRhLmxvbmdpdHVkZSF9XG4gICAgICAgICAgICBsYXRpdHVkZT17ZGV0YWlsVmlld0RhdGEubGF0aXR1ZGUhfVxuICAgICAgICAgICAgY2xvc2VPbkNsaWNrPXt0cnVlfVxuICAgICAgICAgICAgb25DbG9zZT17c2V0RGV0YWlsVmlld0RhdGF9XG4gICAgICAgICAgICBjYXB0dXJlU2Nyb2xsPXt0cnVlfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxBcmVhRGV0YWlsIHByb3BlcnRpZXM9e2RldGFpbFZpZXdEYXRhLnByb3BlcnRpZXN9IC8+XG4gICAgICAgICAgPC9Qb3B1cD5cbiAgICAgICAgKX1cbiAgICAgICAgPE5hdmlnYXRpb25Db250cm9sXG4gICAgICAgICAgc2hvd0NvbXBhc3M9e2ZhbHNlfVxuICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLm5hdmlnYXRpb25Db250cm9sfVxuICAgICAgICAvPlxuICAgICAgICB7J2dsJyBpbiBmbGFncyA/IDxHZW9sb2NhdGVDb250cm9sXG4gICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMuZ2VvbG9jYXRlQ29udHJvbH1cbiAgICAgICAgICBwb3NpdGlvbk9wdGlvbnM9e3tlbmFibGVIaWdoQWNjdXJhY3k6IHRydWV9fVxuICAgICAgICAgIG9uR2VvbG9jYXRlPXtvbkdlb2xvY2F0ZX1cbiAgICAgICAgICAvLyBAdHMtaWdub3JlIC8vIFR5cGVzIGhhdmUgbm90IGNhdWdodCB1cCB5ZXQsIHNlZSBodHRwczovL2dpdGh1Yi5jb20vdmlzZ2wvcmVhY3QtbWFwLWdsL2lzc3Vlcy8xNDkyXG4gICAgICAgICAgb25DbGljaz17b25DbGlja0dlb2xvY2F0ZX1cbiAgICAgICAgLz4gOiAnJ31cbiAgICAgICAge2dlb2xvY2F0aW9uSW5Qcm9ncmVzcyA/IDxkaXY+R2VvbG9jYXRpb24gaW4gcHJvZ3Jlc3MuLi48L2Rpdj4gOiAnJ31cbiAgICAgICAgPFRlcnJpdG9yeUZvY3VzQ29udHJvbCBvbkNsaWNrVGVycml0b3J5Rm9jdXNCdXR0b249e29uQ2xpY2tUZXJyaXRvcnlGb2N1c0J1dHRvbn0vPlxuICAgICAgICB7J2ZzJyBpbiBmbGFncyA/IDxGdWxsc2NyZWVuQ29udHJvbCBjbGFzc05hbWU9e3N0eWxlcy5mdWxsc2NyZWVuQ29udHJvbH0vPiA6JycgfVxuICAgICAgPC9SZWFjdE1hcEdMPlxuICAgICAgPE1hcEluZm9QYW5lbFxuICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5tYXBJbmZvUGFuZWx9XG4gICAgICAgIGZlYXR1cmVQcm9wZXJ0aWVzPXtkZXRhaWxWaWV3RGF0YT8ucHJvcGVydGllc31cbiAgICAgICAgc2VsZWN0ZWRGZWF0dXJlSWQ9e3NlbGVjdGVkRmVhdHVyZT8uaWR9XG4gICAgICAvPlxuICAgIDwvZGl2PlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgSjQwTWFwO1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgdmFyIGxlZ2VuZENvbnRhaW5lciA9IFwibWFwTGVnZW5kLW1vZHVsZS0tbGVnZW5kQ29udGFpbmVyLS0yTjFGQ1wiO1xuZXhwb3J0IHZhciBzd2F0Y2hDb250YWluZXIgPSBcIm1hcExlZ2VuZC1tb2R1bGUtLXN3YXRjaENvbnRhaW5lci0tMXlaWDFcIjtcbmV4cG9ydCB2YXIgbGVnZW5kSXRlbSA9IFwibWFwTGVnZW5kLW1vZHVsZS0tbGVnZW5kSXRlbS0tV2V6VWZcIjtcbmV4cG9ydCB2YXIgY29sb3JTd2F0Y2ggPSBcIm1hcExlZ2VuZC1tb2R1bGUtLWNvbG9yU3dhdGNoLS1vQlVOMlwiO1xuZXhwb3J0IHZhciBwcmlvcml0aXplZCA9IFwibWFwTGVnZW5kLW1vZHVsZS0tcHJpb3JpdGl6ZWQtLTFJNTM0XCI7XG5leHBvcnQgdmFyIHRocmVzaG9sZCA9IFwibWFwTGVnZW5kLW1vZHVsZS0tdGhyZXNob2xkLS0xemFsaVwiO1xuZXhwb3J0IHZhciBub25Qcmlvcml0aXplZCA9IFwibWFwTGVnZW5kLW1vZHVsZS0tbm9uUHJpb3JpdGl6ZWQtLTJ5MFZtXCI7IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCAqIGFzIHN0eWxlcyBmcm9tICcuL21hcExlZ2VuZC5tb2R1bGUuc2Nzcyc7XG5cbmNvbnN0IE1hcExlZ2VuZCA9ICgpID0+IHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxlZ2VuZENvbnRhaW5lcn0+XG4gICAgICA8aDMgY2xhc3NOYW1lPXtzdHlsZXMubGVnZW5kSGVhZGVyfT5DT0xPUiBLRVk8L2gzPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5zd2F0Y2hDb250YWluZXJ9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxlZ2VuZEl0ZW19PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY29sb3JTd2F0Y2h9IGlkPXtzdHlsZXMucHJpb3JpdGl6ZWR9IC8+XG4gICAgICAgICAgPHNwYW4+UHJpb3JpdGl6ZWQgQ29tbXVuaXR5PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sZWdlbmRJdGVtfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNvbG9yU3dhdGNofSBpZD17c3R5bGVzLnRocmVzaG9sZH0gLz5cbiAgICAgICAgICA8c3Bhbj5UaHJlc2hvbGQgQ29tbXVuaXR5PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sZWdlbmRJdGVtfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNvbG9yU3dhdGNofSBpZD17c3R5bGVzLm5vblByaW9yaXRpemVkfSAvPlxuICAgICAgICAgIDxzcGFuPk5vbi1Qcmlvcml0aXplZCBDb21tdW5pdHk8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBNYXBMZWdlbmQ7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgSjQwTWFwIGZyb20gJy4vSjQwTWFwJztcbmltcG9ydCBNYXBMZWdlbmQgZnJvbSAnLi4vY29tcG9uZW50cy9tYXBMZWdlbmQnO1xuXG5jb25zdCBNYXBXcmFwcGVyID0gKCkgPT4ge1xuICByZXR1cm4gKFxuICAgIDxzZWN0aW9uPlxuICAgICAgPGgyPkV4cGxvcmUgdGhlIFRvb2w8L2gyPlxuICAgICAgPEo0ME1hcCAvPlxuICAgICAgPE1hcExlZ2VuZCAvPlxuICAgIDwvc2VjdGlvbj5cbiAgKTtcbn07XG5cblxuZXhwb3J0IGRlZmF1bHQgTWFwV3JhcHBlcjtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IHZhciBob3dZb3VDYW5IZWxwQ29udGFpbmVyID0gXCJIb3dZb3VDYW5IZWxwLW1vZHVsZS0taG93WW91Q2FuSGVscENvbnRhaW5lci0tMmtxQmFcIjsiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0ICogYXMgc3R5bGVzIGZyb20gJy4vSG93WW91Q2FuSGVscC5tb2R1bGUuc2Nzcyc7XG5cbmNvbnN0IEhvd1lvdUNhbkhlbHAgPSAoKSA9PiB7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5ob3dZb3VDYW5IZWxwQ29udGFpbmVyfT5cbiAgICAgIDxoMj5Ib3cgWW91IENhbiBIZWxwIEltcHJvdmUgdGhlIFRvb2w8L2gyPlxuICAgICAgPHVsIGNsYXNzTmFtZT17J3VzYS1saXN0J30+XG4gICAgICAgIDxsaT5JZiB5b3UgaGF2ZSBpbmZvcm1hdGlvbiB0aGF0IGNvdWxkIGhlbHAsIHdl4oCZZCBsb3ZlIHRvIGhlYXIgZnJvbSB5b3UuPC9saT5cbiAgICAgICAgPGxpPlZpZXcgb3VyIGZ1bGwgc2V0IG9mIGRhdGEgc291cmNlcyBhbmQgbWV0aG9kb2xvZ3lcbiAgICAgICAgICAgIHdoZXJlIHlvdSBjYW4gYWRkIG9yIGRvd25sb2FkIHNvdXJjZXMgYW5kIGNoZWNrIHN0YXR1c2VzIG9uIG91ciBkYXRhIHJvYWRtYXAuPC9saT5cbiAgICAgICAgPGxpPkNoZWNrIG91dCBvdXIgdGltZWxpbmUgYW5kIHNlbmQgZmVlZGJhY2sgb3IgYXR0ZW5kIHJlbGV2YW50IGV2ZW50cy48L2xpPlxuICAgICAgICA8bGk+Q29udGFjdCB1cyBhbmQgc2hhcmUgdGhlIHN0b3JpZXMgb2YgeW91ciBjb21tdW5pdHkuPC9saT5cbiAgICAgIDwvdWw+XG4gICAgPC9kaXY+XG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBIb3dZb3VDYW5IZWxwO1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgdmFyIGRvd25sb2FkQm94Q29udGFpbmVyID0gXCJkb3dubG9hZFBhY2tldC1tb2R1bGUtLWRvd25sb2FkQm94Q29udGFpbmVyLS1JZllTSVwiO1xuZXhwb3J0IHZhciBkb3dubG9hZEJveCA9IFwiZG93bmxvYWRQYWNrZXQtbW9kdWxlLS1kb3dubG9hZEJveC0tMjNxQUdcIjtcbmV4cG9ydCB2YXIgZG93bmxvYWRCb3hUZXh0Qm94ID0gXCJkb3dubG9hZFBhY2tldC1tb2R1bGUtLWRvd25sb2FkQm94VGV4dEJveC0tMkMwOElcIjtcbmV4cG9ydCB2YXIgZG93bmxvYWRCb3hUaXRsZSA9IFwiZG93bmxvYWRQYWNrZXQtbW9kdWxlLS1kb3dubG9hZEJveFRpdGxlLS0yb1FzUlwiO1xuZXhwb3J0IHZhciBkb3dubG9hZEJveFRleHQgPSBcImRvd25sb2FkUGFja2V0LW1vZHVsZS0tZG93bmxvYWRCb3hUZXh0LS1zMDlIOFwiO1xuZXhwb3J0IHZhciBkb3dubG9hZEJveEJ1dHRvbkNvbnRhaW5lciA9IFwiZG93bmxvYWRQYWNrZXQtbW9kdWxlLS1kb3dubG9hZEJveEJ1dHRvbkNvbnRhaW5lci0tRUJXVWZcIjtcbmV4cG9ydCB2YXIgZG93bmxvYWRCb3hCdXR0b24gPSBcImRvd25sb2FkUGFja2V0LW1vZHVsZS0tZG93bmxvYWRCb3hCdXR0b24tLTN3LW9rXCI7XG5leHBvcnQgdmFyIGRvd25sb2FkUGFja2V0VGV4dCA9IFwiZG93bmxvYWRQYWNrZXQtbW9kdWxlLS1kb3dubG9hZFBhY2tldFRleHQtLTJNeUVWXCI7IiwiZXhwb3J0IGRlZmF1bHQgXCJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUI0Yld4dWN6MGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TUM5emRtY2lJR2hsYVdkb2REMGlNalFpSUhacFpYZENiM2c5SWpBZ01DQXlOQ0F5TkNJZ2QybGtkR2c5SWpJMElqNDhjR0YwYUNCa1BTSk5NQ0F3YURJMGRqSTBTREI2SWlCbWFXeHNQU0p1YjI1bElpOCtQSEJoZEdnZ1pEMGlUVEU1SURsb0xUUldNMGc1ZGpaSU5XdzNJRGNnTnkwM2VrMDFJREU0ZGpKb01UUjJMVEpJTlhvaUx6NDhMM04yWno0PVwiIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7QnV0dG9ufSBmcm9tICdAdHJ1c3N3b3Jrcy9yZWFjdC11c3dkcyc7XG5pbXBvcnQgKiBhcyBzdHlsZXMgZnJvbSAnLi9kb3dubG9hZFBhY2tldC5tb2R1bGUuc2Nzcyc7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgZG93bmxvYWRJY29uIGZyb20gJy9ub2RlX21vZHVsZXMvdXN3ZHMvZGlzdC9pbWcvdXNhLWljb25zL2ZpbGVfZG93bmxvYWQuc3ZnJztcblxuZXhwb3J0IGNvbnN0IGNiZ0ZpbGVVUkwgPSAnaHR0cHM6Ly9qdXN0aWNlNDAtZGF0YS5zMy5hbWF6b25hd3MuY29tL1Njb3JlL3VzYS56aXAnO1xuXG5jb25zdCBEb3dubG9hZFBhY2tldCA9ICgpID0+IHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmRvd25sb2FkQm94Q29udGFpbmVyfT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuZG93bmxvYWRCb3h9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmRvd25sb2FkQm94VGV4dEJveH0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5kb3dubG9hZEJveFRpdGxlfT5KdXN0IFByb2dyZXNzIFBhY2tldDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuZG93bmxvYWRCb3hUZXh0fT5UaGlzIGRvd25sb2FkYWJsZSBwYWNrZXQgaW5jbHVkZXMgdGhlIGxpc3Qgb2YgSnVzdCBQcm9ncmVzc1xuICAgICAgICAgIHByaW9yaXRpemVkIGNvbW11bml0aWVzICgzMCwwMjEgY2Vuc3VzIGJsb2NrIGdyb3VwcykgYW5kIDE4IGRhdGFzZXRzLlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuZG93bmxvYWRCb3hCdXR0b25Db250YWluZXJ9PlxuICAgICAgICAgICAgPGEgaWQ9eydkb3dubG9hZC1saW5rJ30gaHJlZj17Y2JnRmlsZVVSTH0+XG4gICAgICAgICAgICAgIDxCdXR0b24gY2xhc3NOYW1lPXtzdHlsZXMuZG93bmxvYWRCb3hCdXR0b259IHR5cGU9XCJidXR0b25cIj5cbiAgICAgICAgICAgICAgICA8ZGl2PjxpbWcgc3JjPXtkb3dubG9hZEljb259IC8+IDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuZG93bmxvYWRQYWNrZXRUZXh0fT5Eb3dubG9hZCBwYWNrZXQ8L2Rpdj5cbiAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICA8L2E+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBEb3dubG9hZFBhY2tldDtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IHZhciBkaXNjbGFpbWVyID0gXCJjZWpzdC1tb2R1bGUtLWRpc2NsYWltZXItLTNMQzF5XCI7XG5leHBvcnQgdmFyIHRleHRCb3ggPSBcImNlanN0LW1vZHVsZS0tdGV4dEJveC0tOXd1RHdcIjsiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IExheW91dCBmcm9tICcuLi9jb21wb25lbnRzL2xheW91dCc7XG5pbXBvcnQgTWFwV3JhcHBlciBmcm9tICcuLi9jb21wb25lbnRzL21hcFdyYXBwZXInO1xuaW1wb3J0IEhvd1lvdUNhbkhlbHAgZnJvbSAnLi4vY29tcG9uZW50cy9Ib3dZb3VDYW5IZWxwJztcbmltcG9ydCBEb3dubG9hZFBhY2tldCBmcm9tICcuLi9jb21wb25lbnRzL2Rvd25sb2FkUGFja2V0JztcbmltcG9ydCAqIGFzIHN0eWxlcyBmcm9tICcuL2NlanN0Lm1vZHVsZS5zY3NzJztcblxuaW50ZXJmYWNlIElNYXBQYWdlUHJvcHMge1xuICBsb2NhdGlvbjogTG9jYXRpb247XG59XG5cblxuY29uc3QgQ0VKU1RQYWdlID0gKHtsb2NhdGlvbn06IElNYXBQYWdlUHJvcHMpID0+IHtcbiAgLy8gV2UgdGVtcG9yYXJpbHkgcmVtb3ZlZCBNYXBDb250cm9scywgd2hpY2ggd291bGQgZW5hYmxlIHlvdSB0byBgc2V0RmVhdHVyZXNgIGFsc28sIGZvciBub3dcbiAgLy8gICBXZSB3aWxsIGJyaW5nIGJhY2sgbGF0ZXIgd2hlbiB3ZSBoYXZlIGludGVyYWN0aXZlIGNvbnRyb2xzLlxuICByZXR1cm4gKFxuICAgIDxMYXlvdXQgbG9jYXRpb249e2xvY2F0aW9ufT5cbiAgICAgIDxtYWluIGlkPVwibWFpbi1jb250ZW50XCIgcm9sZT1cIm1haW5cIj5cblxuICAgICAgICA8c2VjdGlvbj5cbiAgICAgICAgICA8aDI+SnVzdCBQcm9ncmVzcyBjb21tdW5pdGllczwvaDI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5kaXNjbGFpbWVyfT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGV4dEJveH0+XG4gICAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICAgIEp1c3QgUHJvZ3Jlc3MgaGVscHMgaWRlbnRpZnkgYW5kIHByaW9yaXRpemUgY29tbXVuaXRpZXMgYWNyb3NzIHRoZSBVbml0ZWQgU3RhdGVzIGFuZCBVLlMuIHRlcnJpdG9yaWVzXG4gICAgICAgICAgICAgICAgdGhhdCBoYXZlIGJlZW4gaGlzdG9yaWNhbGx5IG92ZXJidXJkZW5lZCBhbmQgdW5kZXJzZXJ2ZWQuIFRoZXNlIGNvbW11bml0aWVzIHdpbGwgcmVjZWl2ZSA0MCUgb2ZcbiAgICAgICAgICAgICAgICB0aGUgYmVuZWZpdHMgZnJvbSBpbnZlc3RtZW50cyBpbiBrZXkgYXJlYXMgb3V0bGluZWQgYnkgdGhlXG4gICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgIGhyZWY9eydodHRwczovL3d3dy53aGl0ZWhvdXNlLmdvdi9icmllZmluZy1yb29tLycgK1xuICAgICAgICAgICAgICAgICAgICAncHJlc2lkZW50aWFsLWFjdGlvbnMvMjAyMS8wMS8yNy8nICtcbiAgICAgICAgICAgICAgICAgICAgJ2V4ZWN1dGl2ZS1vcmRlci1vbi10YWNrbGluZy10aGUtY2xpbWF0ZS0nICtcbiAgICAgICAgICAgICAgICAgICAgJ2NyaXNpcy1hdC1ob21lLWFuZC1hYnJvYWQvJ31cbiAgICAgICAgICAgICAgICAgIHRhcmdldD17J19ibGFuayd9XG4gICAgICAgICAgICAgICAgICByZWw9eydub3JlZmVycmVyJ30+XG4gICAgICAgICAgICAgICAgICBFeGVjdXRpdmUgT3JkZXIgb24gVGFja2xpbmcgdGhlIENsaW1hdGUgQ3Jpc2lzIGF0IEhvbWUgYW5kIEFicm9hZFxuICAgICAgICAgICAgICAgIDwvYT4uXG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgICAgRG93bmxvYWQgdGhlIEp1c3QgUHJvZ3Jlc3MgcGFja2V0IG9yIGV4cGxvcmUgdGhlIG1hcCBiZWxvdyB0byBzZWUgdGhlIGxpc3Qgb2YgcHJpb3JpdGl6ZWQgY29tbXVuaXRlcy4gVG9cbiAgICAgICAgICAgICAgICBsZWFybiBtb3JlIGFib3V0IGhvdyB0aGVzZSBjb21tdW5pdGllcyB3ZXJlIHByaW9yaXRpemVkIGNoZWNrIG91dCB0aGVcbiAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgaHJlZj17Jy4vbWV0aG9kb2xvZ3knfT5cbiAgICAgICAgICAgICAgICAgIE1ldGhvZG9sb2d5XG4gICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgIHBhZ2UuXG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPERvd25sb2FkUGFja2V0IC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgPE1hcFdyYXBwZXIgLz5cbiAgICAgICAgPEhvd1lvdUNhbkhlbHAgLz5cbiAgICAgIDwvbWFpbj5cbiAgICA8L0xheW91dD5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IENFSlNUUGFnZTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///9338\n')}}]); \ No newline at end of file diff --git a/main/component---src-pages-cejst-tsx-9a5d0d7c1c3d9bda33e2.js b/main/component---src-pages-cejst-tsx-9a5d0d7c1c3d9bda33e2.js new file mode 100644 index 00000000..9462f2b8 --- /dev/null +++ b/main/component---src-pages-cejst-tsx-9a5d0d7c1c3d9bda33e2.js @@ -0,0 +1 @@ +(self.webpackChunkjustice40_tool=self.webpackChunkjustice40_tool||[]).push([[281],{3873:function(module){eval("/**\n * chroma.js - JavaScript library for color conversions\n *\n * Copyright (c) 2011-2019, Gregor Aisch\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n *\n * 3. The name Gregor Aisch may not be used to endorse or promote products\n * derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL GREGOR AISCH OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY\n * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\n * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * -------------------------------------------------------\n *\n * chroma.js includes colors from colorbrewer2.org, which are released under\n * the following license:\n *\n * Copyright (c) 2002 Cynthia Brewer, Mark Harrower,\n * and The Pennsylvania State University.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\n * either express or implied. See the License for the specific\n * language governing permissions and limitations under the License.\n *\n * ------------------------------------------------------\n *\n * Named colors are taken from X11 Color Names.\n * http://www.w3.org/TR/css3-color/#svg-color\n *\n * @preserve\n */\n(function (global, factory) {\n true ? module.exports = factory() : 0;\n})(this, function () {\n 'use strict';\n\n var limit = function limit(x, min, max) {\n if (min === void 0) min = 0;\n if (max === void 0) max = 1;\n return x < min ? min : x > max ? max : x;\n };\n\n var clip_rgb = function clip_rgb(rgb) {\n rgb._clipped = false;\n rgb._unclipped = rgb.slice(0);\n\n for (var i = 0; i <= 3; i++) {\n if (i < 3) {\n if (rgb[i] < 0 || rgb[i] > 255) {\n rgb._clipped = true;\n }\n\n rgb[i] = limit(rgb[i], 0, 255);\n } else if (i === 3) {\n rgb[i] = limit(rgb[i], 0, 1);\n }\n }\n\n return rgb;\n }; // ported from jQuery's $.type\n\n\n var classToType = {};\n\n for (var i = 0, list = ['Boolean', 'Number', 'String', 'Function', 'Array', 'Date', 'RegExp', 'Undefined', 'Null']; i < list.length; i += 1) {\n var name = list[i];\n classToType[\"[object \" + name + \"]\"] = name.toLowerCase();\n }\n\n var type = function type(obj) {\n return classToType[Object.prototype.toString.call(obj)] || \"object\";\n };\n\n var unpack = function unpack(args, keyOrder) {\n if (keyOrder === void 0) keyOrder = null; // if called with more than 3 arguments, we return the arguments\n\n if (args.length >= 3) {\n return Array.prototype.slice.call(args);\n } // with less than 3 args we check if first arg is object\n // and use the keyOrder string to extract and sort properties\n\n\n if (type(args[0]) == 'object' && keyOrder) {\n return keyOrder.split('').filter(function (k) {\n return args[0][k] !== undefined;\n }).map(function (k) {\n return args[0][k];\n });\n } // otherwise we just return the first argument\n // (which we suppose is an array of args)\n\n\n return args[0];\n };\n\n var last = function last(args) {\n if (args.length < 2) {\n return null;\n }\n\n var l = args.length - 1;\n\n if (type(args[l]) == 'string') {\n return args[l].toLowerCase();\n }\n\n return null;\n };\n\n var PI = Math.PI;\n var utils = {\n clip_rgb: clip_rgb,\n limit: limit,\n type: type,\n unpack: unpack,\n last: last,\n PI: PI,\n TWOPI: PI * 2,\n PITHIRD: PI / 3,\n DEG2RAD: PI / 180,\n RAD2DEG: 180 / PI\n };\n var input = {\n format: {},\n autodetect: []\n };\n var last$1 = utils.last;\n var clip_rgb$1 = utils.clip_rgb;\n var type$1 = utils.type;\n\n var Color = function Color() {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n var me = this;\n\n if (type$1(args[0]) === 'object' && args[0].constructor && args[0].constructor === this.constructor) {\n // the argument is already a Color instance\n return args[0];\n } // last argument could be the mode\n\n\n var mode = last$1(args);\n var autodetect = false;\n\n if (!mode) {\n autodetect = true;\n\n if (!input.sorted) {\n input.autodetect = input.autodetect.sort(function (a, b) {\n return b.p - a.p;\n });\n input.sorted = true;\n } // auto-detect format\n\n\n for (var i = 0, list = input.autodetect; i < list.length; i += 1) {\n var chk = list[i];\n mode = chk.test.apply(chk, args);\n\n if (mode) {\n break;\n }\n }\n }\n\n if (input.format[mode]) {\n var rgb = input.format[mode].apply(null, autodetect ? args : args.slice(0, -1));\n me._rgb = clip_rgb$1(rgb);\n } else {\n throw new Error('unknown format: ' + args);\n } // add alpha channel\n\n\n if (me._rgb.length === 3) {\n me._rgb.push(1);\n }\n };\n\n Color.prototype.toString = function toString() {\n if (type$1(this.hex) == 'function') {\n return this.hex();\n }\n\n return \"[\" + this._rgb.join(',') + \"]\";\n };\n\n var Color_1 = Color;\n\n var chroma = function chroma() {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n return new (Function.prototype.bind.apply(chroma.Color, [null].concat(args)))();\n };\n\n chroma.Color = Color_1;\n chroma.version = '2.1.2';\n var chroma_1 = chroma;\n var unpack$1 = utils.unpack;\n var max = Math.max;\n\n var rgb2cmyk = function rgb2cmyk() {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n var ref = unpack$1(args, 'rgb');\n var r = ref[0];\n var g = ref[1];\n var b = ref[2];\n r = r / 255;\n g = g / 255;\n b = b / 255;\n var k = 1 - max(r, max(g, b));\n var f = k < 1 ? 1 / (1 - k) : 0;\n var c = (1 - r - k) * f;\n var m = (1 - g - k) * f;\n var y = (1 - b - k) * f;\n return [c, m, y, k];\n };\n\n var rgb2cmyk_1 = rgb2cmyk;\n var unpack$2 = utils.unpack;\n\n var cmyk2rgb = function cmyk2rgb() {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n args = unpack$2(args, 'cmyk');\n var c = args[0];\n var m = args[1];\n var y = args[2];\n var k = args[3];\n var alpha = args.length > 4 ? args[4] : 1;\n\n if (k === 1) {\n return [0, 0, 0, alpha];\n }\n\n return [c >= 1 ? 0 : 255 * (1 - c) * (1 - k), // r\n m >= 1 ? 0 : 255 * (1 - m) * (1 - k), // g\n y >= 1 ? 0 : 255 * (1 - y) * (1 - k), // b\n alpha];\n };\n\n var cmyk2rgb_1 = cmyk2rgb;\n var unpack$3 = utils.unpack;\n var type$2 = utils.type;\n\n Color_1.prototype.cmyk = function () {\n return rgb2cmyk_1(this._rgb);\n };\n\n chroma_1.cmyk = function () {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n return new (Function.prototype.bind.apply(Color_1, [null].concat(args, ['cmyk'])))();\n };\n\n input.format.cmyk = cmyk2rgb_1;\n input.autodetect.push({\n p: 2,\n test: function test() {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n args = unpack$3(args, 'cmyk');\n\n if (type$2(args) === 'array' && args.length === 4) {\n return 'cmyk';\n }\n }\n });\n var unpack$4 = utils.unpack;\n var last$2 = utils.last;\n\n var rnd = function rnd(a) {\n return Math.round(a * 100) / 100;\n };\n /*\n * supported arguments:\n * - hsl2css(h,s,l)\n * - hsl2css(h,s,l,a)\n * - hsl2css([h,s,l], mode)\n * - hsl2css([h,s,l,a], mode)\n * - hsl2css({h,s,l,a}, mode)\n */\n\n\n var hsl2css = function hsl2css() {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n var hsla = unpack$4(args, 'hsla');\n var mode = last$2(args) || 'lsa';\n hsla[0] = rnd(hsla[0] || 0);\n hsla[1] = rnd(hsla[1] * 100) + '%';\n hsla[2] = rnd(hsla[2] * 100) + '%';\n\n if (mode === 'hsla' || hsla.length > 3 && hsla[3] < 1) {\n hsla[3] = hsla.length > 3 ? hsla[3] : 1;\n mode = 'hsla';\n } else {\n hsla.length = 3;\n }\n\n return mode + \"(\" + hsla.join(',') + \")\";\n };\n\n var hsl2css_1 = hsl2css;\n var unpack$5 = utils.unpack;\n /*\n * supported arguments:\n * - rgb2hsl(r,g,b)\n * - rgb2hsl(r,g,b,a)\n * - rgb2hsl([r,g,b])\n * - rgb2hsl([r,g,b,a])\n * - rgb2hsl({r,g,b,a})\n */\n\n var rgb2hsl = function rgb2hsl() {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n args = unpack$5(args, 'rgba');\n var r = args[0];\n var g = args[1];\n var b = args[2];\n r /= 255;\n g /= 255;\n b /= 255;\n var min = Math.min(r, g, b);\n var max = Math.max(r, g, b);\n var l = (max + min) / 2;\n var s, h;\n\n if (max === min) {\n s = 0;\n h = Number.NaN;\n } else {\n s = l < 0.5 ? (max - min) / (max + min) : (max - min) / (2 - max - min);\n }\n\n if (r == max) {\n h = (g - b) / (max - min);\n } else if (g == max) {\n h = 2 + (b - r) / (max - min);\n } else if (b == max) {\n h = 4 + (r - g) / (max - min);\n }\n\n h *= 60;\n\n if (h < 0) {\n h += 360;\n }\n\n if (args.length > 3 && args[3] !== undefined) {\n return [h, s, l, args[3]];\n }\n\n return [h, s, l];\n };\n\n var rgb2hsl_1 = rgb2hsl;\n var unpack$6 = utils.unpack;\n var last$3 = utils.last;\n var round = Math.round;\n /*\n * supported arguments:\n * - rgb2css(r,g,b)\n * - rgb2css(r,g,b,a)\n * - rgb2css([r,g,b], mode)\n * - rgb2css([r,g,b,a], mode)\n * - rgb2css({r,g,b,a}, mode)\n */\n\n var rgb2css = function rgb2css() {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n var rgba = unpack$6(args, 'rgba');\n var mode = last$3(args) || 'rgb';\n\n if (mode.substr(0, 3) == 'hsl') {\n return hsl2css_1(rgb2hsl_1(rgba), mode);\n }\n\n rgba[0] = round(rgba[0]);\n rgba[1] = round(rgba[1]);\n rgba[2] = round(rgba[2]);\n\n if (mode === 'rgba' || rgba.length > 3 && rgba[3] < 1) {\n rgba[3] = rgba.length > 3 ? rgba[3] : 1;\n mode = 'rgba';\n }\n\n return mode + \"(\" + rgba.slice(0, mode === 'rgb' ? 3 : 4).join(',') + \")\";\n };\n\n var rgb2css_1 = rgb2css;\n var unpack$7 = utils.unpack;\n var round$1 = Math.round;\n\n var hsl2rgb = function hsl2rgb() {\n var assign;\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n args = unpack$7(args, 'hsl');\n var h = args[0];\n var s = args[1];\n var l = args[2];\n var r, g, b;\n\n if (s === 0) {\n r = g = b = l * 255;\n } else {\n var t3 = [0, 0, 0];\n var c = [0, 0, 0];\n var t2 = l < 0.5 ? l * (1 + s) : l + s - l * s;\n var t1 = 2 * l - t2;\n var h_ = h / 360;\n t3[0] = h_ + 1 / 3;\n t3[1] = h_;\n t3[2] = h_ - 1 / 3;\n\n for (var i = 0; i < 3; i++) {\n if (t3[i] < 0) {\n t3[i] += 1;\n }\n\n if (t3[i] > 1) {\n t3[i] -= 1;\n }\n\n if (6 * t3[i] < 1) {\n c[i] = t1 + (t2 - t1) * 6 * t3[i];\n } else if (2 * t3[i] < 1) {\n c[i] = t2;\n } else if (3 * t3[i] < 2) {\n c[i] = t1 + (t2 - t1) * (2 / 3 - t3[i]) * 6;\n } else {\n c[i] = t1;\n }\n }\n\n assign = [round$1(c[0] * 255), round$1(c[1] * 255), round$1(c[2] * 255)], r = assign[0], g = assign[1], b = assign[2];\n }\n\n if (args.length > 3) {\n // keep alpha channel\n return [r, g, b, args[3]];\n }\n\n return [r, g, b, 1];\n };\n\n var hsl2rgb_1 = hsl2rgb;\n var RE_RGB = /^rgb\\(\\s*(-?\\d+),\\s*(-?\\d+)\\s*,\\s*(-?\\d+)\\s*\\)$/;\n var RE_RGBA = /^rgba\\(\\s*(-?\\d+),\\s*(-?\\d+)\\s*,\\s*(-?\\d+)\\s*,\\s*([01]|[01]?\\.\\d+)\\)$/;\n var RE_RGB_PCT = /^rgb\\(\\s*(-?\\d+(?:\\.\\d+)?)%,\\s*(-?\\d+(?:\\.\\d+)?)%\\s*,\\s*(-?\\d+(?:\\.\\d+)?)%\\s*\\)$/;\n var RE_RGBA_PCT = /^rgba\\(\\s*(-?\\d+(?:\\.\\d+)?)%,\\s*(-?\\d+(?:\\.\\d+)?)%\\s*,\\s*(-?\\d+(?:\\.\\d+)?)%\\s*,\\s*([01]|[01]?\\.\\d+)\\)$/;\n var RE_HSL = /^hsl\\(\\s*(-?\\d+(?:\\.\\d+)?),\\s*(-?\\d+(?:\\.\\d+)?)%\\s*,\\s*(-?\\d+(?:\\.\\d+)?)%\\s*\\)$/;\n var RE_HSLA = /^hsla\\(\\s*(-?\\d+(?:\\.\\d+)?),\\s*(-?\\d+(?:\\.\\d+)?)%\\s*,\\s*(-?\\d+(?:\\.\\d+)?)%\\s*,\\s*([01]|[01]?\\.\\d+)\\)$/;\n var round$2 = Math.round;\n\n var css2rgb = function css2rgb(css) {\n css = css.toLowerCase().trim();\n var m;\n\n if (input.format.named) {\n try {\n return input.format.named(css);\n } catch (e) {// eslint-disable-next-line\n }\n } // rgb(250,20,0)\n\n\n if (m = css.match(RE_RGB)) {\n var rgb = m.slice(1, 4);\n\n for (var i = 0; i < 3; i++) {\n rgb[i] = +rgb[i];\n }\n\n rgb[3] = 1; // default alpha\n\n return rgb;\n } // rgba(250,20,0,0.4)\n\n\n if (m = css.match(RE_RGBA)) {\n var rgb$1 = m.slice(1, 5);\n\n for (var i$1 = 0; i$1 < 4; i$1++) {\n rgb$1[i$1] = +rgb$1[i$1];\n }\n\n return rgb$1;\n } // rgb(100%,0%,0%)\n\n\n if (m = css.match(RE_RGB_PCT)) {\n var rgb$2 = m.slice(1, 4);\n\n for (var i$2 = 0; i$2 < 3; i$2++) {\n rgb$2[i$2] = round$2(rgb$2[i$2] * 2.55);\n }\n\n rgb$2[3] = 1; // default alpha\n\n return rgb$2;\n } // rgba(100%,0%,0%,0.4)\n\n\n if (m = css.match(RE_RGBA_PCT)) {\n var rgb$3 = m.slice(1, 5);\n\n for (var i$3 = 0; i$3 < 3; i$3++) {\n rgb$3[i$3] = round$2(rgb$3[i$3] * 2.55);\n }\n\n rgb$3[3] = +rgb$3[3];\n return rgb$3;\n } // hsl(0,100%,50%)\n\n\n if (m = css.match(RE_HSL)) {\n var hsl = m.slice(1, 4);\n hsl[1] *= 0.01;\n hsl[2] *= 0.01;\n var rgb$4 = hsl2rgb_1(hsl);\n rgb$4[3] = 1;\n return rgb$4;\n } // hsla(0,100%,50%,0.5)\n\n\n if (m = css.match(RE_HSLA)) {\n var hsl$1 = m.slice(1, 4);\n hsl$1[1] *= 0.01;\n hsl$1[2] *= 0.01;\n var rgb$5 = hsl2rgb_1(hsl$1);\n rgb$5[3] = +m[4]; // default alpha = 1\n\n return rgb$5;\n }\n };\n\n css2rgb.test = function (s) {\n return RE_RGB.test(s) || RE_RGBA.test(s) || RE_RGB_PCT.test(s) || RE_RGBA_PCT.test(s) || RE_HSL.test(s) || RE_HSLA.test(s);\n };\n\n var css2rgb_1 = css2rgb;\n var type$3 = utils.type;\n\n Color_1.prototype.css = function (mode) {\n return rgb2css_1(this._rgb, mode);\n };\n\n chroma_1.css = function () {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n return new (Function.prototype.bind.apply(Color_1, [null].concat(args, ['css'])))();\n };\n\n input.format.css = css2rgb_1;\n input.autodetect.push({\n p: 5,\n test: function test(h) {\n var rest = [],\n len = arguments.length - 1;\n\n while (len-- > 0) {\n rest[len] = arguments[len + 1];\n }\n\n if (!rest.length && type$3(h) === 'string' && css2rgb_1.test(h)) {\n return 'css';\n }\n }\n });\n var unpack$8 = utils.unpack;\n\n input.format.gl = function () {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n var rgb = unpack$8(args, 'rgba');\n rgb[0] *= 255;\n rgb[1] *= 255;\n rgb[2] *= 255;\n return rgb;\n };\n\n chroma_1.gl = function () {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n return new (Function.prototype.bind.apply(Color_1, [null].concat(args, ['gl'])))();\n };\n\n Color_1.prototype.gl = function () {\n var rgb = this._rgb;\n return [rgb[0] / 255, rgb[1] / 255, rgb[2] / 255, rgb[3]];\n };\n\n var unpack$9 = utils.unpack;\n\n var rgb2hcg = function rgb2hcg() {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n var ref = unpack$9(args, 'rgb');\n var r = ref[0];\n var g = ref[1];\n var b = ref[2];\n var min = Math.min(r, g, b);\n var max = Math.max(r, g, b);\n var delta = max - min;\n var c = delta * 100 / 255;\n\n var _g = min / (255 - delta) * 100;\n\n var h;\n\n if (delta === 0) {\n h = Number.NaN;\n } else {\n if (r === max) {\n h = (g - b) / delta;\n }\n\n if (g === max) {\n h = 2 + (b - r) / delta;\n }\n\n if (b === max) {\n h = 4 + (r - g) / delta;\n }\n\n h *= 60;\n\n if (h < 0) {\n h += 360;\n }\n }\n\n return [h, c, _g];\n };\n\n var rgb2hcg_1 = rgb2hcg;\n var unpack$a = utils.unpack;\n var floor = Math.floor;\n /*\n * this is basically just HSV with some minor tweaks\n *\n * hue.. [0..360]\n * chroma .. [0..1]\n * grayness .. [0..1]\n */\n\n var hcg2rgb = function hcg2rgb() {\n var assign, assign$1, assign$2, assign$3, assign$4, assign$5;\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n args = unpack$a(args, 'hcg');\n var h = args[0];\n var c = args[1];\n var _g = args[2];\n var r, g, b;\n _g = _g * 255;\n\n var _c = c * 255;\n\n if (c === 0) {\n r = g = b = _g;\n } else {\n if (h === 360) {\n h = 0;\n }\n\n if (h > 360) {\n h -= 360;\n }\n\n if (h < 0) {\n h += 360;\n }\n\n h /= 60;\n var i = floor(h);\n var f = h - i;\n var p = _g * (1 - c);\n var q = p + _c * (1 - f);\n var t = p + _c * f;\n var v = p + _c;\n\n switch (i) {\n case 0:\n assign = [v, t, p], r = assign[0], g = assign[1], b = assign[2];\n break;\n\n case 1:\n assign$1 = [q, v, p], r = assign$1[0], g = assign$1[1], b = assign$1[2];\n break;\n\n case 2:\n assign$2 = [p, v, t], r = assign$2[0], g = assign$2[1], b = assign$2[2];\n break;\n\n case 3:\n assign$3 = [p, q, v], r = assign$3[0], g = assign$3[1], b = assign$3[2];\n break;\n\n case 4:\n assign$4 = [t, p, v], r = assign$4[0], g = assign$4[1], b = assign$4[2];\n break;\n\n case 5:\n assign$5 = [v, p, q], r = assign$5[0], g = assign$5[1], b = assign$5[2];\n break;\n }\n }\n\n return [r, g, b, args.length > 3 ? args[3] : 1];\n };\n\n var hcg2rgb_1 = hcg2rgb;\n var unpack$b = utils.unpack;\n var type$4 = utils.type;\n\n Color_1.prototype.hcg = function () {\n return rgb2hcg_1(this._rgb);\n };\n\n chroma_1.hcg = function () {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n return new (Function.prototype.bind.apply(Color_1, [null].concat(args, ['hcg'])))();\n };\n\n input.format.hcg = hcg2rgb_1;\n input.autodetect.push({\n p: 1,\n test: function test() {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n args = unpack$b(args, 'hcg');\n\n if (type$4(args) === 'array' && args.length === 3) {\n return 'hcg';\n }\n }\n });\n var unpack$c = utils.unpack;\n var last$4 = utils.last;\n var round$3 = Math.round;\n\n var rgb2hex = function rgb2hex() {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n var ref = unpack$c(args, 'rgba');\n var r = ref[0];\n var g = ref[1];\n var b = ref[2];\n var a = ref[3];\n var mode = last$4(args) || 'auto';\n\n if (a === undefined) {\n a = 1;\n }\n\n if (mode === 'auto') {\n mode = a < 1 ? 'rgba' : 'rgb';\n }\n\n r = round$3(r);\n g = round$3(g);\n b = round$3(b);\n var u = r << 16 | g << 8 | b;\n var str = \"000000\" + u.toString(16); //#.toUpperCase();\n\n str = str.substr(str.length - 6);\n var hxa = '0' + round$3(a * 255).toString(16);\n hxa = hxa.substr(hxa.length - 2);\n\n switch (mode.toLowerCase()) {\n case 'rgba':\n return \"#\" + str + hxa;\n\n case 'argb':\n return \"#\" + hxa + str;\n\n default:\n return \"#\" + str;\n }\n };\n\n var rgb2hex_1 = rgb2hex;\n var RE_HEX = /^#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/;\n var RE_HEXA = /^#?([A-Fa-f0-9]{8}|[A-Fa-f0-9]{4})$/;\n\n var hex2rgb = function hex2rgb(hex) {\n if (hex.match(RE_HEX)) {\n // remove optional leading #\n if (hex.length === 4 || hex.length === 7) {\n hex = hex.substr(1);\n } // expand short-notation to full six-digit\n\n\n if (hex.length === 3) {\n hex = hex.split('');\n hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];\n }\n\n var u = parseInt(hex, 16);\n var r = u >> 16;\n var g = u >> 8 & 0xFF;\n var b = u & 0xFF;\n return [r, g, b, 1];\n } // match rgba hex format, eg #FF000077\n\n\n if (hex.match(RE_HEXA)) {\n if (hex.length === 5 || hex.length === 9) {\n // remove optional leading #\n hex = hex.substr(1);\n } // expand short-notation to full eight-digit\n\n\n if (hex.length === 4) {\n hex = hex.split('');\n hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2] + hex[3] + hex[3];\n }\n\n var u$1 = parseInt(hex, 16);\n var r$1 = u$1 >> 24 & 0xFF;\n var g$1 = u$1 >> 16 & 0xFF;\n var b$1 = u$1 >> 8 & 0xFF;\n var a = Math.round((u$1 & 0xFF) / 0xFF * 100) / 100;\n return [r$1, g$1, b$1, a];\n } // we used to check for css colors here\n // if _input.css? and rgb = _input.css hex\n // return rgb\n\n\n throw new Error(\"unknown hex color: \" + hex);\n };\n\n var hex2rgb_1 = hex2rgb;\n var type$5 = utils.type;\n\n Color_1.prototype.hex = function (mode) {\n return rgb2hex_1(this._rgb, mode);\n };\n\n chroma_1.hex = function () {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n return new (Function.prototype.bind.apply(Color_1, [null].concat(args, ['hex'])))();\n };\n\n input.format.hex = hex2rgb_1;\n input.autodetect.push({\n p: 4,\n test: function test(h) {\n var rest = [],\n len = arguments.length - 1;\n\n while (len-- > 0) {\n rest[len] = arguments[len + 1];\n }\n\n if (!rest.length && type$5(h) === 'string' && [3, 4, 5, 6, 7, 8, 9].indexOf(h.length) >= 0) {\n return 'hex';\n }\n }\n });\n var unpack$d = utils.unpack;\n var TWOPI = utils.TWOPI;\n var min = Math.min;\n var sqrt = Math.sqrt;\n var acos = Math.acos;\n\n var rgb2hsi = function rgb2hsi() {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n /*\n borrowed from here:\n http://hummer.stanford.edu/museinfo/doc/examples/humdrum/keyscape2/rgb2hsi.cpp\n */\n\n\n var ref = unpack$d(args, 'rgb');\n var r = ref[0];\n var g = ref[1];\n var b = ref[2];\n r /= 255;\n g /= 255;\n b /= 255;\n var h;\n var min_ = min(r, g, b);\n var i = (r + g + b) / 3;\n var s = i > 0 ? 1 - min_ / i : 0;\n\n if (s === 0) {\n h = NaN;\n } else {\n h = (r - g + (r - b)) / 2;\n h /= sqrt((r - g) * (r - g) + (r - b) * (g - b));\n h = acos(h);\n\n if (b > g) {\n h = TWOPI - h;\n }\n\n h /= TWOPI;\n }\n\n return [h * 360, s, i];\n };\n\n var rgb2hsi_1 = rgb2hsi;\n var unpack$e = utils.unpack;\n var limit$1 = utils.limit;\n var TWOPI$1 = utils.TWOPI;\n var PITHIRD = utils.PITHIRD;\n var cos = Math.cos;\n /*\n * hue [0..360]\n * saturation [0..1]\n * intensity [0..1]\n */\n\n var hsi2rgb = function hsi2rgb() {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n /*\n borrowed from here:\n http://hummer.stanford.edu/museinfo/doc/examples/humdrum/keyscape2/hsi2rgb.cpp\n */\n\n\n args = unpack$e(args, 'hsi');\n var h = args[0];\n var s = args[1];\n var i = args[2];\n var r, g, b;\n\n if (isNaN(h)) {\n h = 0;\n }\n\n if (isNaN(s)) {\n s = 0;\n } // normalize hue\n\n\n if (h > 360) {\n h -= 360;\n }\n\n if (h < 0) {\n h += 360;\n }\n\n h /= 360;\n\n if (h < 1 / 3) {\n b = (1 - s) / 3;\n r = (1 + s * cos(TWOPI$1 * h) / cos(PITHIRD - TWOPI$1 * h)) / 3;\n g = 1 - (b + r);\n } else if (h < 2 / 3) {\n h -= 1 / 3;\n r = (1 - s) / 3;\n g = (1 + s * cos(TWOPI$1 * h) / cos(PITHIRD - TWOPI$1 * h)) / 3;\n b = 1 - (r + g);\n } else {\n h -= 2 / 3;\n g = (1 - s) / 3;\n b = (1 + s * cos(TWOPI$1 * h) / cos(PITHIRD - TWOPI$1 * h)) / 3;\n r = 1 - (g + b);\n }\n\n r = limit$1(i * r * 3);\n g = limit$1(i * g * 3);\n b = limit$1(i * b * 3);\n return [r * 255, g * 255, b * 255, args.length > 3 ? args[3] : 1];\n };\n\n var hsi2rgb_1 = hsi2rgb;\n var unpack$f = utils.unpack;\n var type$6 = utils.type;\n\n Color_1.prototype.hsi = function () {\n return rgb2hsi_1(this._rgb);\n };\n\n chroma_1.hsi = function () {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n return new (Function.prototype.bind.apply(Color_1, [null].concat(args, ['hsi'])))();\n };\n\n input.format.hsi = hsi2rgb_1;\n input.autodetect.push({\n p: 2,\n test: function test() {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n args = unpack$f(args, 'hsi');\n\n if (type$6(args) === 'array' && args.length === 3) {\n return 'hsi';\n }\n }\n });\n var unpack$g = utils.unpack;\n var type$7 = utils.type;\n\n Color_1.prototype.hsl = function () {\n return rgb2hsl_1(this._rgb);\n };\n\n chroma_1.hsl = function () {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n return new (Function.prototype.bind.apply(Color_1, [null].concat(args, ['hsl'])))();\n };\n\n input.format.hsl = hsl2rgb_1;\n input.autodetect.push({\n p: 2,\n test: function test() {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n args = unpack$g(args, 'hsl');\n\n if (type$7(args) === 'array' && args.length === 3) {\n return 'hsl';\n }\n }\n });\n var unpack$h = utils.unpack;\n var min$1 = Math.min;\n var max$1 = Math.max;\n /*\n * supported arguments:\n * - rgb2hsv(r,g,b)\n * - rgb2hsv([r,g,b])\n * - rgb2hsv({r,g,b})\n */\n\n var rgb2hsl$1 = function rgb2hsl$1() {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n args = unpack$h(args, 'rgb');\n var r = args[0];\n var g = args[1];\n var b = args[2];\n var min_ = min$1(r, g, b);\n var max_ = max$1(r, g, b);\n var delta = max_ - min_;\n var h, s, v;\n v = max_ / 255.0;\n\n if (max_ === 0) {\n h = Number.NaN;\n s = 0;\n } else {\n s = delta / max_;\n\n if (r === max_) {\n h = (g - b) / delta;\n }\n\n if (g === max_) {\n h = 2 + (b - r) / delta;\n }\n\n if (b === max_) {\n h = 4 + (r - g) / delta;\n }\n\n h *= 60;\n\n if (h < 0) {\n h += 360;\n }\n }\n\n return [h, s, v];\n };\n\n var rgb2hsv = rgb2hsl$1;\n var unpack$i = utils.unpack;\n var floor$1 = Math.floor;\n\n var hsv2rgb = function hsv2rgb() {\n var assign, assign$1, assign$2, assign$3, assign$4, assign$5;\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n args = unpack$i(args, 'hsv');\n var h = args[0];\n var s = args[1];\n var v = args[2];\n var r, g, b;\n v *= 255;\n\n if (s === 0) {\n r = g = b = v;\n } else {\n if (h === 360) {\n h = 0;\n }\n\n if (h > 360) {\n h -= 360;\n }\n\n if (h < 0) {\n h += 360;\n }\n\n h /= 60;\n var i = floor$1(h);\n var f = h - i;\n var p = v * (1 - s);\n var q = v * (1 - s * f);\n var t = v * (1 - s * (1 - f));\n\n switch (i) {\n case 0:\n assign = [v, t, p], r = assign[0], g = assign[1], b = assign[2];\n break;\n\n case 1:\n assign$1 = [q, v, p], r = assign$1[0], g = assign$1[1], b = assign$1[2];\n break;\n\n case 2:\n assign$2 = [p, v, t], r = assign$2[0], g = assign$2[1], b = assign$2[2];\n break;\n\n case 3:\n assign$3 = [p, q, v], r = assign$3[0], g = assign$3[1], b = assign$3[2];\n break;\n\n case 4:\n assign$4 = [t, p, v], r = assign$4[0], g = assign$4[1], b = assign$4[2];\n break;\n\n case 5:\n assign$5 = [v, p, q], r = assign$5[0], g = assign$5[1], b = assign$5[2];\n break;\n }\n }\n\n return [r, g, b, args.length > 3 ? args[3] : 1];\n };\n\n var hsv2rgb_1 = hsv2rgb;\n var unpack$j = utils.unpack;\n var type$8 = utils.type;\n\n Color_1.prototype.hsv = function () {\n return rgb2hsv(this._rgb);\n };\n\n chroma_1.hsv = function () {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n return new (Function.prototype.bind.apply(Color_1, [null].concat(args, ['hsv'])))();\n };\n\n input.format.hsv = hsv2rgb_1;\n input.autodetect.push({\n p: 2,\n test: function test() {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n args = unpack$j(args, 'hsv');\n\n if (type$8(args) === 'array' && args.length === 3) {\n return 'hsv';\n }\n }\n });\n var labConstants = {\n // Corresponds roughly to RGB brighter/darker\n Kn: 18,\n // D65 standard referent\n Xn: 0.950470,\n Yn: 1,\n Zn: 1.088830,\n t0: 0.137931034,\n // 4 / 29\n t1: 0.206896552,\n // 6 / 29\n t2: 0.12841855,\n // 3 * t1 * t1\n t3: 0.008856452 // t1 * t1 * t1\n\n };\n var unpack$k = utils.unpack;\n var pow = Math.pow;\n\n var rgb2lab = function rgb2lab() {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n var ref = unpack$k(args, 'rgb');\n var r = ref[0];\n var g = ref[1];\n var b = ref[2];\n var ref$1 = rgb2xyz(r, g, b);\n var x = ref$1[0];\n var y = ref$1[1];\n var z = ref$1[2];\n var l = 116 * y - 16;\n return [l < 0 ? 0 : l, 500 * (x - y), 200 * (y - z)];\n };\n\n var rgb_xyz = function rgb_xyz(r) {\n if ((r /= 255) <= 0.04045) {\n return r / 12.92;\n }\n\n return pow((r + 0.055) / 1.055, 2.4);\n };\n\n var xyz_lab = function xyz_lab(t) {\n if (t > labConstants.t3) {\n return pow(t, 1 / 3);\n }\n\n return t / labConstants.t2 + labConstants.t0;\n };\n\n var rgb2xyz = function rgb2xyz(r, g, b) {\n r = rgb_xyz(r);\n g = rgb_xyz(g);\n b = rgb_xyz(b);\n var x = xyz_lab((0.4124564 * r + 0.3575761 * g + 0.1804375 * b) / labConstants.Xn);\n var y = xyz_lab((0.2126729 * r + 0.7151522 * g + 0.0721750 * b) / labConstants.Yn);\n var z = xyz_lab((0.0193339 * r + 0.1191920 * g + 0.9503041 * b) / labConstants.Zn);\n return [x, y, z];\n };\n\n var rgb2lab_1 = rgb2lab;\n var unpack$l = utils.unpack;\n var pow$1 = Math.pow;\n /*\n * L* [0..100]\n * a [-100..100]\n * b [-100..100]\n */\n\n var lab2rgb = function lab2rgb() {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n args = unpack$l(args, 'lab');\n var l = args[0];\n var a = args[1];\n var b = args[2];\n var x, y, z, r, g, b_;\n y = (l + 16) / 116;\n x = isNaN(a) ? y : y + a / 500;\n z = isNaN(b) ? y : y - b / 200;\n y = labConstants.Yn * lab_xyz(y);\n x = labConstants.Xn * lab_xyz(x);\n z = labConstants.Zn * lab_xyz(z);\n r = xyz_rgb(3.2404542 * x - 1.5371385 * y - 0.4985314 * z); // D65 -> sRGB\n\n g = xyz_rgb(-0.9692660 * x + 1.8760108 * y + 0.0415560 * z);\n b_ = xyz_rgb(0.0556434 * x - 0.2040259 * y + 1.0572252 * z);\n return [r, g, b_, args.length > 3 ? args[3] : 1];\n };\n\n var xyz_rgb = function xyz_rgb(r) {\n return 255 * (r <= 0.00304 ? 12.92 * r : 1.055 * pow$1(r, 1 / 2.4) - 0.055);\n };\n\n var lab_xyz = function lab_xyz(t) {\n return t > labConstants.t1 ? t * t * t : labConstants.t2 * (t - labConstants.t0);\n };\n\n var lab2rgb_1 = lab2rgb;\n var unpack$m = utils.unpack;\n var type$9 = utils.type;\n\n Color_1.prototype.lab = function () {\n return rgb2lab_1(this._rgb);\n };\n\n chroma_1.lab = function () {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n return new (Function.prototype.bind.apply(Color_1, [null].concat(args, ['lab'])))();\n };\n\n input.format.lab = lab2rgb_1;\n input.autodetect.push({\n p: 2,\n test: function test() {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n args = unpack$m(args, 'lab');\n\n if (type$9(args) === 'array' && args.length === 3) {\n return 'lab';\n }\n }\n });\n var unpack$n = utils.unpack;\n var RAD2DEG = utils.RAD2DEG;\n var sqrt$1 = Math.sqrt;\n var atan2 = Math.atan2;\n var round$4 = Math.round;\n\n var lab2lch = function lab2lch() {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n var ref = unpack$n(args, 'lab');\n var l = ref[0];\n var a = ref[1];\n var b = ref[2];\n var c = sqrt$1(a * a + b * b);\n var h = (atan2(b, a) * RAD2DEG + 360) % 360;\n\n if (round$4(c * 10000) === 0) {\n h = Number.NaN;\n }\n\n return [l, c, h];\n };\n\n var lab2lch_1 = lab2lch;\n var unpack$o = utils.unpack;\n\n var rgb2lch = function rgb2lch() {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n var ref = unpack$o(args, 'rgb');\n var r = ref[0];\n var g = ref[1];\n var b = ref[2];\n var ref$1 = rgb2lab_1(r, g, b);\n var l = ref$1[0];\n var a = ref$1[1];\n var b_ = ref$1[2];\n return lab2lch_1(l, a, b_);\n };\n\n var rgb2lch_1 = rgb2lch;\n var unpack$p = utils.unpack;\n var DEG2RAD = utils.DEG2RAD;\n var sin = Math.sin;\n var cos$1 = Math.cos;\n\n var lch2lab = function lch2lab() {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n /*\n Convert from a qualitative parameter h and a quantitative parameter l to a 24-bit pixel.\n These formulas were invented by David Dalrymple to obtain maximum contrast without going\n out of gamut if the parameters are in the range 0-1.\n A saturation multiplier was added by Gregor Aisch\n */\n\n\n var ref = unpack$p(args, 'lch');\n var l = ref[0];\n var c = ref[1];\n var h = ref[2];\n\n if (isNaN(h)) {\n h = 0;\n }\n\n h = h * DEG2RAD;\n return [l, cos$1(h) * c, sin(h) * c];\n };\n\n var lch2lab_1 = lch2lab;\n var unpack$q = utils.unpack;\n\n var lch2rgb = function lch2rgb() {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n args = unpack$q(args, 'lch');\n var l = args[0];\n var c = args[1];\n var h = args[2];\n var ref = lch2lab_1(l, c, h);\n var L = ref[0];\n var a = ref[1];\n var b_ = ref[2];\n var ref$1 = lab2rgb_1(L, a, b_);\n var r = ref$1[0];\n var g = ref$1[1];\n var b = ref$1[2];\n return [r, g, b, args.length > 3 ? args[3] : 1];\n };\n\n var lch2rgb_1 = lch2rgb;\n var unpack$r = utils.unpack;\n\n var hcl2rgb = function hcl2rgb() {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n var hcl = unpack$r(args, 'hcl').reverse();\n return lch2rgb_1.apply(void 0, hcl);\n };\n\n var hcl2rgb_1 = hcl2rgb;\n var unpack$s = utils.unpack;\n var type$a = utils.type;\n\n Color_1.prototype.lch = function () {\n return rgb2lch_1(this._rgb);\n };\n\n Color_1.prototype.hcl = function () {\n return rgb2lch_1(this._rgb).reverse();\n };\n\n chroma_1.lch = function () {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n return new (Function.prototype.bind.apply(Color_1, [null].concat(args, ['lch'])))();\n };\n\n chroma_1.hcl = function () {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n return new (Function.prototype.bind.apply(Color_1, [null].concat(args, ['hcl'])))();\n };\n\n input.format.lch = lch2rgb_1;\n input.format.hcl = hcl2rgb_1;\n ['lch', 'hcl'].forEach(function (m) {\n return input.autodetect.push({\n p: 2,\n test: function test() {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n args = unpack$s(args, m);\n\n if (type$a(args) === 'array' && args.length === 3) {\n return m;\n }\n }\n });\n });\n /**\n \tX11 color names\n \thttp://www.w3.org/TR/css3-color/#svg-color\n */\n\n var w3cx11 = {\n aliceblue: '#f0f8ff',\n antiquewhite: '#faebd7',\n aqua: '#00ffff',\n aquamarine: '#7fffd4',\n azure: '#f0ffff',\n beige: '#f5f5dc',\n bisque: '#ffe4c4',\n black: '#000000',\n blanchedalmond: '#ffebcd',\n blue: '#0000ff',\n blueviolet: '#8a2be2',\n brown: '#a52a2a',\n burlywood: '#deb887',\n cadetblue: '#5f9ea0',\n chartreuse: '#7fff00',\n chocolate: '#d2691e',\n coral: '#ff7f50',\n cornflower: '#6495ed',\n cornflowerblue: '#6495ed',\n cornsilk: '#fff8dc',\n crimson: '#dc143c',\n cyan: '#00ffff',\n darkblue: '#00008b',\n darkcyan: '#008b8b',\n darkgoldenrod: '#b8860b',\n darkgray: '#a9a9a9',\n darkgreen: '#006400',\n darkgrey: '#a9a9a9',\n darkkhaki: '#bdb76b',\n darkmagenta: '#8b008b',\n darkolivegreen: '#556b2f',\n darkorange: '#ff8c00',\n darkorchid: '#9932cc',\n darkred: '#8b0000',\n darksalmon: '#e9967a',\n darkseagreen: '#8fbc8f',\n darkslateblue: '#483d8b',\n darkslategray: '#2f4f4f',\n darkslategrey: '#2f4f4f',\n darkturquoise: '#00ced1',\n darkviolet: '#9400d3',\n deeppink: '#ff1493',\n deepskyblue: '#00bfff',\n dimgray: '#696969',\n dimgrey: '#696969',\n dodgerblue: '#1e90ff',\n firebrick: '#b22222',\n floralwhite: '#fffaf0',\n forestgreen: '#228b22',\n fuchsia: '#ff00ff',\n gainsboro: '#dcdcdc',\n ghostwhite: '#f8f8ff',\n gold: '#ffd700',\n goldenrod: '#daa520',\n gray: '#808080',\n green: '#008000',\n greenyellow: '#adff2f',\n grey: '#808080',\n honeydew: '#f0fff0',\n hotpink: '#ff69b4',\n indianred: '#cd5c5c',\n indigo: '#4b0082',\n ivory: '#fffff0',\n khaki: '#f0e68c',\n laserlemon: '#ffff54',\n lavender: '#e6e6fa',\n lavenderblush: '#fff0f5',\n lawngreen: '#7cfc00',\n lemonchiffon: '#fffacd',\n lightblue: '#add8e6',\n lightcoral: '#f08080',\n lightcyan: '#e0ffff',\n lightgoldenrod: '#fafad2',\n lightgoldenrodyellow: '#fafad2',\n lightgray: '#d3d3d3',\n lightgreen: '#90ee90',\n lightgrey: '#d3d3d3',\n lightpink: '#ffb6c1',\n lightsalmon: '#ffa07a',\n lightseagreen: '#20b2aa',\n lightskyblue: '#87cefa',\n lightslategray: '#778899',\n lightslategrey: '#778899',\n lightsteelblue: '#b0c4de',\n lightyellow: '#ffffe0',\n lime: '#00ff00',\n limegreen: '#32cd32',\n linen: '#faf0e6',\n magenta: '#ff00ff',\n maroon: '#800000',\n maroon2: '#7f0000',\n maroon3: '#b03060',\n mediumaquamarine: '#66cdaa',\n mediumblue: '#0000cd',\n mediumorchid: '#ba55d3',\n mediumpurple: '#9370db',\n mediumseagreen: '#3cb371',\n mediumslateblue: '#7b68ee',\n mediumspringgreen: '#00fa9a',\n mediumturquoise: '#48d1cc',\n mediumvioletred: '#c71585',\n midnightblue: '#191970',\n mintcream: '#f5fffa',\n mistyrose: '#ffe4e1',\n moccasin: '#ffe4b5',\n navajowhite: '#ffdead',\n navy: '#000080',\n oldlace: '#fdf5e6',\n olive: '#808000',\n olivedrab: '#6b8e23',\n orange: '#ffa500',\n orangered: '#ff4500',\n orchid: '#da70d6',\n palegoldenrod: '#eee8aa',\n palegreen: '#98fb98',\n paleturquoise: '#afeeee',\n palevioletred: '#db7093',\n papayawhip: '#ffefd5',\n peachpuff: '#ffdab9',\n peru: '#cd853f',\n pink: '#ffc0cb',\n plum: '#dda0dd',\n powderblue: '#b0e0e6',\n purple: '#800080',\n purple2: '#7f007f',\n purple3: '#a020f0',\n rebeccapurple: '#663399',\n red: '#ff0000',\n rosybrown: '#bc8f8f',\n royalblue: '#4169e1',\n saddlebrown: '#8b4513',\n salmon: '#fa8072',\n sandybrown: '#f4a460',\n seagreen: '#2e8b57',\n seashell: '#fff5ee',\n sienna: '#a0522d',\n silver: '#c0c0c0',\n skyblue: '#87ceeb',\n slateblue: '#6a5acd',\n slategray: '#708090',\n slategrey: '#708090',\n snow: '#fffafa',\n springgreen: '#00ff7f',\n steelblue: '#4682b4',\n tan: '#d2b48c',\n teal: '#008080',\n thistle: '#d8bfd8',\n tomato: '#ff6347',\n turquoise: '#40e0d0',\n violet: '#ee82ee',\n wheat: '#f5deb3',\n white: '#ffffff',\n whitesmoke: '#f5f5f5',\n yellow: '#ffff00',\n yellowgreen: '#9acd32'\n };\n var w3cx11_1 = w3cx11;\n var type$b = utils.type;\n\n Color_1.prototype.name = function () {\n var hex = rgb2hex_1(this._rgb, 'rgb');\n\n for (var i = 0, list = Object.keys(w3cx11_1); i < list.length; i += 1) {\n var n = list[i];\n\n if (w3cx11_1[n] === hex) {\n return n.toLowerCase();\n }\n }\n\n return hex;\n };\n\n input.format.named = function (name) {\n name = name.toLowerCase();\n\n if (w3cx11_1[name]) {\n return hex2rgb_1(w3cx11_1[name]);\n }\n\n throw new Error('unknown color name: ' + name);\n };\n\n input.autodetect.push({\n p: 5,\n test: function test(h) {\n var rest = [],\n len = arguments.length - 1;\n\n while (len-- > 0) {\n rest[len] = arguments[len + 1];\n }\n\n if (!rest.length && type$b(h) === 'string' && w3cx11_1[h.toLowerCase()]) {\n return 'named';\n }\n }\n });\n var unpack$t = utils.unpack;\n\n var rgb2num = function rgb2num() {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n var ref = unpack$t(args, 'rgb');\n var r = ref[0];\n var g = ref[1];\n var b = ref[2];\n return (r << 16) + (g << 8) + b;\n };\n\n var rgb2num_1 = rgb2num;\n var type$c = utils.type;\n\n var num2rgb = function num2rgb(num) {\n if (type$c(num) == \"number\" && num >= 0 && num <= 0xFFFFFF) {\n var r = num >> 16;\n var g = num >> 8 & 0xFF;\n var b = num & 0xFF;\n return [r, g, b, 1];\n }\n\n throw new Error(\"unknown num color: \" + num);\n };\n\n var num2rgb_1 = num2rgb;\n var type$d = utils.type;\n\n Color_1.prototype.num = function () {\n return rgb2num_1(this._rgb);\n };\n\n chroma_1.num = function () {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n return new (Function.prototype.bind.apply(Color_1, [null].concat(args, ['num'])))();\n };\n\n input.format.num = num2rgb_1;\n input.autodetect.push({\n p: 5,\n test: function test() {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n if (args.length === 1 && type$d(args[0]) === 'number' && args[0] >= 0 && args[0] <= 0xFFFFFF) {\n return 'num';\n }\n }\n });\n var unpack$u = utils.unpack;\n var type$e = utils.type;\n var round$5 = Math.round;\n\n Color_1.prototype.rgb = function (rnd) {\n if (rnd === void 0) rnd = true;\n\n if (rnd === false) {\n return this._rgb.slice(0, 3);\n }\n\n return this._rgb.slice(0, 3).map(round$5);\n };\n\n Color_1.prototype.rgba = function (rnd) {\n if (rnd === void 0) rnd = true;\n return this._rgb.slice(0, 4).map(function (v, i) {\n return i < 3 ? rnd === false ? v : round$5(v) : v;\n });\n };\n\n chroma_1.rgb = function () {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n return new (Function.prototype.bind.apply(Color_1, [null].concat(args, ['rgb'])))();\n };\n\n input.format.rgb = function () {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n var rgba = unpack$u(args, 'rgba');\n\n if (rgba[3] === undefined) {\n rgba[3] = 1;\n }\n\n return rgba;\n };\n\n input.autodetect.push({\n p: 3,\n test: function test() {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n args = unpack$u(args, 'rgba');\n\n if (type$e(args) === 'array' && (args.length === 3 || args.length === 4 && type$e(args[3]) == 'number' && args[3] >= 0 && args[3] <= 1)) {\n return 'rgb';\n }\n }\n });\n /*\n * Based on implementation by Neil Bartlett\n * https://github.com/neilbartlett/color-temperature\n */\n\n var log = Math.log;\n\n var temperature2rgb = function temperature2rgb(kelvin) {\n var temp = kelvin / 100;\n var r, g, b;\n\n if (temp < 66) {\n r = 255;\n g = -155.25485562709179 - 0.44596950469579133 * (g = temp - 2) + 104.49216199393888 * log(g);\n b = temp < 20 ? 0 : -254.76935184120902 + 0.8274096064007395 * (b = temp - 10) + 115.67994401066147 * log(b);\n } else {\n r = 351.97690566805693 + 0.114206453784165 * (r = temp - 55) - 40.25366309332127 * log(r);\n g = 325.4494125711974 + 0.07943456536662342 * (g = temp - 50) - 28.0852963507957 * log(g);\n b = 255;\n }\n\n return [r, g, b, 1];\n };\n\n var temperature2rgb_1 = temperature2rgb;\n /*\n * Based on implementation by Neil Bartlett\n * https://github.com/neilbartlett/color-temperature\n **/\n\n var unpack$v = utils.unpack;\n var round$6 = Math.round;\n\n var rgb2temperature = function rgb2temperature() {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n var rgb = unpack$v(args, 'rgb');\n var r = rgb[0],\n b = rgb[2];\n var minTemp = 1000;\n var maxTemp = 40000;\n var eps = 0.4;\n var temp;\n\n while (maxTemp - minTemp > eps) {\n temp = (maxTemp + minTemp) * 0.5;\n var rgb$1 = temperature2rgb_1(temp);\n\n if (rgb$1[2] / rgb$1[0] >= b / r) {\n maxTemp = temp;\n } else {\n minTemp = temp;\n }\n }\n\n return round$6(temp);\n };\n\n var rgb2temperature_1 = rgb2temperature;\n\n Color_1.prototype.temp = Color_1.prototype.kelvin = Color_1.prototype.temperature = function () {\n return rgb2temperature_1(this._rgb);\n };\n\n chroma_1.temp = chroma_1.kelvin = chroma_1.temperature = function () {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n return new (Function.prototype.bind.apply(Color_1, [null].concat(args, ['temp'])))();\n };\n\n input.format.temp = input.format.kelvin = input.format.temperature = temperature2rgb_1;\n var type$f = utils.type;\n\n Color_1.prototype.alpha = function (a, mutate) {\n if (mutate === void 0) mutate = false;\n\n if (a !== undefined && type$f(a) === 'number') {\n if (mutate) {\n this._rgb[3] = a;\n return this;\n }\n\n return new Color_1([this._rgb[0], this._rgb[1], this._rgb[2], a], 'rgb');\n }\n\n return this._rgb[3];\n };\n\n Color_1.prototype.clipped = function () {\n return this._rgb._clipped || false;\n };\n\n Color_1.prototype.darken = function (amount) {\n if (amount === void 0) amount = 1;\n var me = this;\n var lab = me.lab();\n lab[0] -= labConstants.Kn * amount;\n return new Color_1(lab, 'lab').alpha(me.alpha(), true);\n };\n\n Color_1.prototype.brighten = function (amount) {\n if (amount === void 0) amount = 1;\n return this.darken(-amount);\n };\n\n Color_1.prototype.darker = Color_1.prototype.darken;\n Color_1.prototype.brighter = Color_1.prototype.brighten;\n\n Color_1.prototype.get = function (mc) {\n var ref = mc.split('.');\n var mode = ref[0];\n var channel = ref[1];\n var src = this[mode]();\n\n if (channel) {\n var i = mode.indexOf(channel);\n\n if (i > -1) {\n return src[i];\n }\n\n throw new Error(\"unknown channel \" + channel + \" in mode \" + mode);\n } else {\n return src;\n }\n };\n\n var type$g = utils.type;\n var pow$2 = Math.pow;\n var EPS = 1e-7;\n var MAX_ITER = 20;\n\n Color_1.prototype.luminance = function (lum) {\n if (lum !== undefined && type$g(lum) === 'number') {\n if (lum === 0) {\n // return pure black\n return new Color_1([0, 0, 0, this._rgb[3]], 'rgb');\n }\n\n if (lum === 1) {\n // return pure white\n return new Color_1([255, 255, 255, this._rgb[3]], 'rgb');\n } // compute new color using...\n\n\n var cur_lum = this.luminance();\n var mode = 'rgb';\n var max_iter = MAX_ITER;\n\n var test = function test(low, high) {\n var mid = low.interpolate(high, 0.5, mode);\n var lm = mid.luminance();\n\n if (Math.abs(lum - lm) < EPS || !max_iter--) {\n // close enough\n return mid;\n }\n\n return lm > lum ? test(low, mid) : test(mid, high);\n };\n\n var rgb = (cur_lum > lum ? test(new Color_1([0, 0, 0]), this) : test(this, new Color_1([255, 255, 255]))).rgb();\n return new Color_1(rgb.concat([this._rgb[3]]));\n }\n\n return rgb2luminance.apply(void 0, this._rgb.slice(0, 3));\n };\n\n var rgb2luminance = function rgb2luminance(r, g, b) {\n // relative luminance\n // see http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef\n r = luminance_x(r);\n g = luminance_x(g);\n b = luminance_x(b);\n return 0.2126 * r + 0.7152 * g + 0.0722 * b;\n };\n\n var luminance_x = function luminance_x(x) {\n x /= 255;\n return x <= 0.03928 ? x / 12.92 : pow$2((x + 0.055) / 1.055, 2.4);\n };\n\n var interpolator = {};\n var type$h = utils.type;\n\n var mix = function mix(col1, col2, f) {\n if (f === void 0) f = 0.5;\n var rest = [],\n len = arguments.length - 3;\n\n while (len-- > 0) {\n rest[len] = arguments[len + 3];\n }\n\n var mode = rest[0] || 'lrgb';\n\n if (!interpolator[mode] && !rest.length) {\n // fall back to the first supported mode\n mode = Object.keys(interpolator)[0];\n }\n\n if (!interpolator[mode]) {\n throw new Error(\"interpolation mode \" + mode + \" is not defined\");\n }\n\n if (type$h(col1) !== 'object') {\n col1 = new Color_1(col1);\n }\n\n if (type$h(col2) !== 'object') {\n col2 = new Color_1(col2);\n }\n\n return interpolator[mode](col1, col2, f).alpha(col1.alpha() + f * (col2.alpha() - col1.alpha()));\n };\n\n Color_1.prototype.mix = Color_1.prototype.interpolate = function (col2, f) {\n if (f === void 0) f = 0.5;\n var rest = [],\n len = arguments.length - 2;\n\n while (len-- > 0) {\n rest[len] = arguments[len + 2];\n }\n\n return mix.apply(void 0, [this, col2, f].concat(rest));\n };\n\n Color_1.prototype.premultiply = function (mutate) {\n if (mutate === void 0) mutate = false;\n var rgb = this._rgb;\n var a = rgb[3];\n\n if (mutate) {\n this._rgb = [rgb[0] * a, rgb[1] * a, rgb[2] * a, a];\n return this;\n } else {\n return new Color_1([rgb[0] * a, rgb[1] * a, rgb[2] * a, a], 'rgb');\n }\n };\n\n Color_1.prototype.saturate = function (amount) {\n if (amount === void 0) amount = 1;\n var me = this;\n var lch = me.lch();\n lch[1] += labConstants.Kn * amount;\n\n if (lch[1] < 0) {\n lch[1] = 0;\n }\n\n return new Color_1(lch, 'lch').alpha(me.alpha(), true);\n };\n\n Color_1.prototype.desaturate = function (amount) {\n if (amount === void 0) amount = 1;\n return this.saturate(-amount);\n };\n\n var type$i = utils.type;\n\n Color_1.prototype.set = function (mc, value, mutate) {\n if (mutate === void 0) mutate = false;\n var ref = mc.split('.');\n var mode = ref[0];\n var channel = ref[1];\n var src = this[mode]();\n\n if (channel) {\n var i = mode.indexOf(channel);\n\n if (i > -1) {\n if (type$i(value) == 'string') {\n switch (value.charAt(0)) {\n case '+':\n src[i] += +value;\n break;\n\n case '-':\n src[i] += +value;\n break;\n\n case '*':\n src[i] *= +value.substr(1);\n break;\n\n case '/':\n src[i] /= +value.substr(1);\n break;\n\n default:\n src[i] = +value;\n }\n } else if (type$i(value) === 'number') {\n src[i] = value;\n } else {\n throw new Error(\"unsupported value for Color.set\");\n }\n\n var out = new Color_1(src, mode);\n\n if (mutate) {\n this._rgb = out._rgb;\n return this;\n }\n\n return out;\n }\n\n throw new Error(\"unknown channel \" + channel + \" in mode \" + mode);\n } else {\n return src;\n }\n };\n\n var rgb$1 = function rgb$1(col1, col2, f) {\n var xyz0 = col1._rgb;\n var xyz1 = col2._rgb;\n return new Color_1(xyz0[0] + f * (xyz1[0] - xyz0[0]), xyz0[1] + f * (xyz1[1] - xyz0[1]), xyz0[2] + f * (xyz1[2] - xyz0[2]), 'rgb');\n }; // register interpolator\n\n\n interpolator.rgb = rgb$1;\n var sqrt$2 = Math.sqrt;\n var pow$3 = Math.pow;\n\n var lrgb = function lrgb(col1, col2, f) {\n var ref = col1._rgb;\n var x1 = ref[0];\n var y1 = ref[1];\n var z1 = ref[2];\n var ref$1 = col2._rgb;\n var x2 = ref$1[0];\n var y2 = ref$1[1];\n var z2 = ref$1[2];\n return new Color_1(sqrt$2(pow$3(x1, 2) * (1 - f) + pow$3(x2, 2) * f), sqrt$2(pow$3(y1, 2) * (1 - f) + pow$3(y2, 2) * f), sqrt$2(pow$3(z1, 2) * (1 - f) + pow$3(z2, 2) * f), 'rgb');\n }; // register interpolator\n\n\n interpolator.lrgb = lrgb;\n\n var lab$1 = function lab$1(col1, col2, f) {\n var xyz0 = col1.lab();\n var xyz1 = col2.lab();\n return new Color_1(xyz0[0] + f * (xyz1[0] - xyz0[0]), xyz0[1] + f * (xyz1[1] - xyz0[1]), xyz0[2] + f * (xyz1[2] - xyz0[2]), 'lab');\n }; // register interpolator\n\n\n interpolator.lab = lab$1;\n\n var _hsx = function _hsx(col1, col2, f, m) {\n var assign, assign$1;\n var xyz0, xyz1;\n\n if (m === 'hsl') {\n xyz0 = col1.hsl();\n xyz1 = col2.hsl();\n } else if (m === 'hsv') {\n xyz0 = col1.hsv();\n xyz1 = col2.hsv();\n } else if (m === 'hcg') {\n xyz0 = col1.hcg();\n xyz1 = col2.hcg();\n } else if (m === 'hsi') {\n xyz0 = col1.hsi();\n xyz1 = col2.hsi();\n } else if (m === 'lch' || m === 'hcl') {\n m = 'hcl';\n xyz0 = col1.hcl();\n xyz1 = col2.hcl();\n }\n\n var hue0, hue1, sat0, sat1, lbv0, lbv1;\n\n if (m.substr(0, 1) === 'h') {\n assign = xyz0, hue0 = assign[0], sat0 = assign[1], lbv0 = assign[2];\n assign$1 = xyz1, hue1 = assign$1[0], sat1 = assign$1[1], lbv1 = assign$1[2];\n }\n\n var sat, hue, lbv, dh;\n\n if (!isNaN(hue0) && !isNaN(hue1)) {\n // both colors have hue\n if (hue1 > hue0 && hue1 - hue0 > 180) {\n dh = hue1 - (hue0 + 360);\n } else if (hue1 < hue0 && hue0 - hue1 > 180) {\n dh = hue1 + 360 - hue0;\n } else {\n dh = hue1 - hue0;\n }\n\n hue = hue0 + f * dh;\n } else if (!isNaN(hue0)) {\n hue = hue0;\n\n if ((lbv1 == 1 || lbv1 == 0) && m != 'hsv') {\n sat = sat0;\n }\n } else if (!isNaN(hue1)) {\n hue = hue1;\n\n if ((lbv0 == 1 || lbv0 == 0) && m != 'hsv') {\n sat = sat1;\n }\n } else {\n hue = Number.NaN;\n }\n\n if (sat === undefined) {\n sat = sat0 + f * (sat1 - sat0);\n }\n\n lbv = lbv0 + f * (lbv1 - lbv0);\n return new Color_1([hue, sat, lbv], m);\n };\n\n var lch$1 = function lch$1(col1, col2, f) {\n return _hsx(col1, col2, f, 'lch');\n }; // register interpolator\n\n\n interpolator.lch = lch$1;\n interpolator.hcl = lch$1;\n\n var num$1 = function num$1(col1, col2, f) {\n var c1 = col1.num();\n var c2 = col2.num();\n return new Color_1(c1 + f * (c2 - c1), 'num');\n }; // register interpolator\n\n\n interpolator.num = num$1;\n\n var hcg$1 = function hcg$1(col1, col2, f) {\n return _hsx(col1, col2, f, 'hcg');\n }; // register interpolator\n\n\n interpolator.hcg = hcg$1;\n\n var hsi$1 = function hsi$1(col1, col2, f) {\n return _hsx(col1, col2, f, 'hsi');\n }; // register interpolator\n\n\n interpolator.hsi = hsi$1;\n\n var hsl$1 = function hsl$1(col1, col2, f) {\n return _hsx(col1, col2, f, 'hsl');\n }; // register interpolator\n\n\n interpolator.hsl = hsl$1;\n\n var hsv$1 = function hsv$1(col1, col2, f) {\n return _hsx(col1, col2, f, 'hsv');\n }; // register interpolator\n\n\n interpolator.hsv = hsv$1;\n var clip_rgb$2 = utils.clip_rgb;\n var pow$4 = Math.pow;\n var sqrt$3 = Math.sqrt;\n var PI$1 = Math.PI;\n var cos$2 = Math.cos;\n var sin$1 = Math.sin;\n var atan2$1 = Math.atan2;\n\n var average = function average(colors, mode, weights) {\n if (mode === void 0) mode = 'lrgb';\n if (weights === void 0) weights = null;\n var l = colors.length;\n\n if (!weights) {\n weights = Array.from(new Array(l)).map(function () {\n return 1;\n });\n } // normalize weights\n\n\n var k = l / weights.reduce(function (a, b) {\n return a + b;\n });\n weights.forEach(function (w, i) {\n weights[i] *= k;\n }); // convert colors to Color objects\n\n colors = colors.map(function (c) {\n return new Color_1(c);\n });\n\n if (mode === 'lrgb') {\n return _average_lrgb(colors, weights);\n }\n\n var first = colors.shift();\n var xyz = first.get(mode);\n var cnt = [];\n var dx = 0;\n var dy = 0; // initial color\n\n for (var i = 0; i < xyz.length; i++) {\n xyz[i] = (xyz[i] || 0) * weights[0];\n cnt.push(isNaN(xyz[i]) ? 0 : weights[0]);\n\n if (mode.charAt(i) === 'h' && !isNaN(xyz[i])) {\n var A = xyz[i] / 180 * PI$1;\n dx += cos$2(A) * weights[0];\n dy += sin$1(A) * weights[0];\n }\n }\n\n var alpha = first.alpha() * weights[0];\n colors.forEach(function (c, ci) {\n var xyz2 = c.get(mode);\n alpha += c.alpha() * weights[ci + 1];\n\n for (var i = 0; i < xyz.length; i++) {\n if (!isNaN(xyz2[i])) {\n cnt[i] += weights[ci + 1];\n\n if (mode.charAt(i) === 'h') {\n var A = xyz2[i] / 180 * PI$1;\n dx += cos$2(A) * weights[ci + 1];\n dy += sin$1(A) * weights[ci + 1];\n } else {\n xyz[i] += xyz2[i] * weights[ci + 1];\n }\n }\n }\n });\n\n for (var i$1 = 0; i$1 < xyz.length; i$1++) {\n if (mode.charAt(i$1) === 'h') {\n var A$1 = atan2$1(dy / cnt[i$1], dx / cnt[i$1]) / PI$1 * 180;\n\n while (A$1 < 0) {\n A$1 += 360;\n }\n\n while (A$1 >= 360) {\n A$1 -= 360;\n }\n\n xyz[i$1] = A$1;\n } else {\n xyz[i$1] = xyz[i$1] / cnt[i$1];\n }\n }\n\n alpha /= l;\n return new Color_1(xyz, mode).alpha(alpha > 0.99999 ? 1 : alpha, true);\n };\n\n var _average_lrgb = function _average_lrgb(colors, weights) {\n var l = colors.length;\n var xyz = [0, 0, 0, 0];\n\n for (var i = 0; i < colors.length; i++) {\n var col = colors[i];\n var f = weights[i] / l;\n var rgb = col._rgb;\n xyz[0] += pow$4(rgb[0], 2) * f;\n xyz[1] += pow$4(rgb[1], 2) * f;\n xyz[2] += pow$4(rgb[2], 2) * f;\n xyz[3] += rgb[3] * f;\n }\n\n xyz[0] = sqrt$3(xyz[0]);\n xyz[1] = sqrt$3(xyz[1]);\n xyz[2] = sqrt$3(xyz[2]);\n\n if (xyz[3] > 0.9999999) {\n xyz[3] = 1;\n }\n\n return new Color_1(clip_rgb$2(xyz));\n }; // minimal multi-purpose interface\n // @requires utils color analyze\n\n\n var type$j = utils.type;\n var pow$5 = Math.pow;\n\n var scale = function scale(colors) {\n // constructor\n var _mode = 'rgb';\n\n var _nacol = chroma_1('#ccc');\n\n var _spread = 0; // const _fixed = false;\n\n var _domain = [0, 1];\n var _pos = [];\n var _padding = [0, 0];\n var _classes = false;\n var _colors = [];\n var _out = false;\n var _min = 0;\n var _max = 1;\n var _correctLightness = false;\n var _colorCache = {};\n var _useCache = true;\n var _gamma = 1; // private methods\n\n var setColors = function setColors(colors) {\n colors = colors || ['#fff', '#000'];\n\n if (colors && type$j(colors) === 'string' && chroma_1.brewer && chroma_1.brewer[colors.toLowerCase()]) {\n colors = chroma_1.brewer[colors.toLowerCase()];\n }\n\n if (type$j(colors) === 'array') {\n // handle single color\n if (colors.length === 1) {\n colors = [colors[0], colors[0]];\n } // make a copy of the colors\n\n\n colors = colors.slice(0); // convert to chroma classes\n\n for (var c = 0; c < colors.length; c++) {\n colors[c] = chroma_1(colors[c]);\n } // auto-fill color position\n\n\n _pos.length = 0;\n\n for (var c$1 = 0; c$1 < colors.length; c$1++) {\n _pos.push(c$1 / (colors.length - 1));\n }\n }\n\n resetCache();\n return _colors = colors;\n };\n\n var getClass = function getClass(value) {\n if (_classes != null) {\n var n = _classes.length - 1;\n var i = 0;\n\n while (i < n && value >= _classes[i]) {\n i++;\n }\n\n return i - 1;\n }\n\n return 0;\n };\n\n var tMapLightness = function tMapLightness(t) {\n return t;\n };\n\n var tMapDomain = function tMapDomain(t) {\n return t;\n }; // const classifyValue = function(value) {\n // let val = value;\n // if (_classes.length > 2) {\n // const n = _classes.length-1;\n // const i = getClass(value);\n // const minc = _classes[0] + ((_classes[1]-_classes[0]) * (0 + (_spread * 0.5))); // center of 1st class\n // const maxc = _classes[n-1] + ((_classes[n]-_classes[n-1]) * (1 - (_spread * 0.5))); // center of last class\n // val = _min + ((((_classes[i] + ((_classes[i+1] - _classes[i]) * 0.5)) - minc) / (maxc-minc)) * (_max - _min));\n // }\n // return val;\n // };\n\n\n var getColor = function getColor(val, bypassMap) {\n var col, t;\n\n if (bypassMap == null) {\n bypassMap = false;\n }\n\n if (isNaN(val) || val === null) {\n return _nacol;\n }\n\n if (!bypassMap) {\n if (_classes && _classes.length > 2) {\n // find the class\n var c = getClass(val);\n t = c / (_classes.length - 2);\n } else if (_max !== _min) {\n // just interpolate between min/max\n t = (val - _min) / (_max - _min);\n } else {\n t = 1;\n }\n } else {\n t = val;\n } // domain map\n\n\n t = tMapDomain(t);\n\n if (!bypassMap) {\n t = tMapLightness(t); // lightness correction\n }\n\n if (_gamma !== 1) {\n t = pow$5(t, _gamma);\n }\n\n t = _padding[0] + t * (1 - _padding[0] - _padding[1]);\n t = Math.min(1, Math.max(0, t));\n var k = Math.floor(t * 10000);\n\n if (_useCache && _colorCache[k]) {\n col = _colorCache[k];\n } else {\n if (type$j(_colors) === 'array') {\n //for i in [0.._pos.length-1]\n for (var i = 0; i < _pos.length; i++) {\n var p = _pos[i];\n\n if (t <= p) {\n col = _colors[i];\n break;\n }\n\n if (t >= p && i === _pos.length - 1) {\n col = _colors[i];\n break;\n }\n\n if (t > p && t < _pos[i + 1]) {\n t = (t - p) / (_pos[i + 1] - p);\n col = chroma_1.interpolate(_colors[i], _colors[i + 1], t, _mode);\n break;\n }\n }\n } else if (type$j(_colors) === 'function') {\n col = _colors(t);\n }\n\n if (_useCache) {\n _colorCache[k] = col;\n }\n }\n\n return col;\n };\n\n var resetCache = function resetCache() {\n return _colorCache = {};\n };\n\n setColors(colors); // public interface\n\n var f = function f(v) {\n var c = chroma_1(getColor(v));\n\n if (_out && c[_out]) {\n return c[_out]();\n } else {\n return c;\n }\n };\n\n f.classes = function (classes) {\n if (classes != null) {\n if (type$j(classes) === 'array') {\n _classes = classes;\n _domain = [classes[0], classes[classes.length - 1]];\n } else {\n var d = chroma_1.analyze(_domain);\n\n if (classes === 0) {\n _classes = [d.min, d.max];\n } else {\n _classes = chroma_1.limits(d, 'e', classes);\n }\n }\n\n return f;\n }\n\n return _classes;\n };\n\n f.domain = function (domain) {\n if (!arguments.length) {\n return _domain;\n }\n\n _min = domain[0];\n _max = domain[domain.length - 1];\n _pos = [];\n var k = _colors.length;\n\n if (domain.length === k && _min !== _max) {\n // update positions\n for (var i = 0, list = Array.from(domain); i < list.length; i += 1) {\n var d = list[i];\n\n _pos.push((d - _min) / (_max - _min));\n }\n } else {\n for (var c = 0; c < k; c++) {\n _pos.push(c / (k - 1));\n }\n\n if (domain.length > 2) {\n // set domain map\n var tOut = domain.map(function (d, i) {\n return i / (domain.length - 1);\n });\n var tBreaks = domain.map(function (d) {\n return (d - _min) / (_max - _min);\n });\n\n if (!tBreaks.every(function (val, i) {\n return tOut[i] === val;\n })) {\n tMapDomain = function tMapDomain(t) {\n if (t <= 0 || t >= 1) {\n return t;\n }\n\n var i = 0;\n\n while (t >= tBreaks[i + 1]) {\n i++;\n }\n\n var f = (t - tBreaks[i]) / (tBreaks[i + 1] - tBreaks[i]);\n var out = tOut[i] + f * (tOut[i + 1] - tOut[i]);\n return out;\n };\n }\n }\n }\n\n _domain = [_min, _max];\n return f;\n };\n\n f.mode = function (_m) {\n if (!arguments.length) {\n return _mode;\n }\n\n _mode = _m;\n resetCache();\n return f;\n };\n\n f.range = function (colors, _pos) {\n setColors(colors, _pos);\n return f;\n };\n\n f.out = function (_o) {\n _out = _o;\n return f;\n };\n\n f.spread = function (val) {\n if (!arguments.length) {\n return _spread;\n }\n\n _spread = val;\n return f;\n };\n\n f.correctLightness = function (v) {\n if (v == null) {\n v = true;\n }\n\n _correctLightness = v;\n resetCache();\n\n if (_correctLightness) {\n tMapLightness = function tMapLightness(t) {\n var L0 = getColor(0, true).lab()[0];\n var L1 = getColor(1, true).lab()[0];\n var pol = L0 > L1;\n var L_actual = getColor(t, true).lab()[0];\n var L_ideal = L0 + (L1 - L0) * t;\n var L_diff = L_actual - L_ideal;\n var t0 = 0;\n var t1 = 1;\n var max_iter = 20;\n\n while (Math.abs(L_diff) > 1e-2 && max_iter-- > 0) {\n (function () {\n if (pol) {\n L_diff *= -1;\n }\n\n if (L_diff < 0) {\n t0 = t;\n t += (t1 - t) * 0.5;\n } else {\n t1 = t;\n t += (t0 - t) * 0.5;\n }\n\n L_actual = getColor(t, true).lab()[0];\n return L_diff = L_actual - L_ideal;\n })();\n }\n\n return t;\n };\n } else {\n tMapLightness = function tMapLightness(t) {\n return t;\n };\n }\n\n return f;\n };\n\n f.padding = function (p) {\n if (p != null) {\n if (type$j(p) === 'number') {\n p = [p, p];\n }\n\n _padding = p;\n return f;\n } else {\n return _padding;\n }\n };\n\n f.colors = function (numColors, out) {\n // If no arguments are given, return the original colors that were provided\n if (arguments.length < 2) {\n out = 'hex';\n }\n\n var result = [];\n\n if (arguments.length === 0) {\n result = _colors.slice(0);\n } else if (numColors === 1) {\n result = [f(0.5)];\n } else if (numColors > 1) {\n var dm = _domain[0];\n var dd = _domain[1] - dm;\n result = __range__(0, numColors, false).map(function (i) {\n return f(dm + i / (numColors - 1) * dd);\n });\n } else {\n // returns all colors based on the defined classes\n colors = [];\n var samples = [];\n\n if (_classes && _classes.length > 2) {\n for (var i = 1, end = _classes.length, asc = 1 <= end; asc ? i < end : i > end; asc ? i++ : i--) {\n samples.push((_classes[i - 1] + _classes[i]) * 0.5);\n }\n } else {\n samples = _domain;\n }\n\n result = samples.map(function (v) {\n return f(v);\n });\n }\n\n if (chroma_1[out]) {\n result = result.map(function (c) {\n return c[out]();\n });\n }\n\n return result;\n };\n\n f.cache = function (c) {\n if (c != null) {\n _useCache = c;\n return f;\n } else {\n return _useCache;\n }\n };\n\n f.gamma = function (g) {\n if (g != null) {\n _gamma = g;\n return f;\n } else {\n return _gamma;\n }\n };\n\n f.nodata = function (d) {\n if (d != null) {\n _nacol = chroma_1(d);\n return f;\n } else {\n return _nacol;\n }\n };\n\n return f;\n };\n\n function __range__(left, right, inclusive) {\n var range = [];\n var ascending = left < right;\n var end = !inclusive ? right : ascending ? right + 1 : right - 1;\n\n for (var i = left; ascending ? i < end : i > end; ascending ? i++ : i--) {\n range.push(i);\n }\n\n return range;\n } //\n // interpolates between a set of colors uzing a bezier spline\n //\n // @requires utils lab\n\n\n var bezier = function bezier(colors) {\n var assign, assign$1, assign$2;\n var I, lab0, lab1, lab2;\n colors = colors.map(function (c) {\n return new Color_1(c);\n });\n\n if (colors.length === 2) {\n // linear interpolation\n assign = colors.map(function (c) {\n return c.lab();\n }), lab0 = assign[0], lab1 = assign[1];\n\n I = function I(t) {\n var lab = [0, 1, 2].map(function (i) {\n return lab0[i] + t * (lab1[i] - lab0[i]);\n });\n return new Color_1(lab, 'lab');\n };\n } else if (colors.length === 3) {\n // quadratic bezier interpolation\n assign$1 = colors.map(function (c) {\n return c.lab();\n }), lab0 = assign$1[0], lab1 = assign$1[1], lab2 = assign$1[2];\n\n I = function I(t) {\n var lab = [0, 1, 2].map(function (i) {\n return (1 - t) * (1 - t) * lab0[i] + 2 * (1 - t) * t * lab1[i] + t * t * lab2[i];\n });\n return new Color_1(lab, 'lab');\n };\n } else if (colors.length === 4) {\n // cubic bezier interpolation\n var lab3;\n assign$2 = colors.map(function (c) {\n return c.lab();\n }), lab0 = assign$2[0], lab1 = assign$2[1], lab2 = assign$2[2], lab3 = assign$2[3];\n\n I = function I(t) {\n var lab = [0, 1, 2].map(function (i) {\n return (1 - t) * (1 - t) * (1 - t) * lab0[i] + 3 * (1 - t) * (1 - t) * t * lab1[i] + 3 * (1 - t) * t * t * lab2[i] + t * t * t * lab3[i];\n });\n return new Color_1(lab, 'lab');\n };\n } else if (colors.length === 5) {\n var I0 = bezier(colors.slice(0, 3));\n var I1 = bezier(colors.slice(2, 5));\n\n I = function I(t) {\n if (t < 0.5) {\n return I0(t * 2);\n } else {\n return I1((t - 0.5) * 2);\n }\n };\n }\n\n return I;\n };\n\n var bezier_1 = function bezier_1(colors) {\n var f = bezier(colors);\n\n f.scale = function () {\n return scale(f);\n };\n\n return f;\n };\n /*\n * interpolates between a set of colors uzing a bezier spline\n * blend mode formulas taken from http://www.venture-ware.com/kevin/coding/lets-learn-math-photoshop-blend-modes/\n */\n\n\n var blend = function blend(bottom, top, mode) {\n if (!blend[mode]) {\n throw new Error('unknown blend mode ' + mode);\n }\n\n return blend[mode](bottom, top);\n };\n\n var blend_f = function blend_f(f) {\n return function (bottom, top) {\n var c0 = chroma_1(top).rgb();\n var c1 = chroma_1(bottom).rgb();\n return chroma_1.rgb(f(c0, c1));\n };\n };\n\n var each = function each(f) {\n return function (c0, c1) {\n var out = [];\n out[0] = f(c0[0], c1[0]);\n out[1] = f(c0[1], c1[1]);\n out[2] = f(c0[2], c1[2]);\n return out;\n };\n };\n\n var normal = function normal(a) {\n return a;\n };\n\n var multiply = function multiply(a, b) {\n return a * b / 255;\n };\n\n var darken$1 = function darken$1(a, b) {\n return a > b ? b : a;\n };\n\n var lighten = function lighten(a, b) {\n return a > b ? a : b;\n };\n\n var screen = function screen(a, b) {\n return 255 * (1 - (1 - a / 255) * (1 - b / 255));\n };\n\n var overlay = function overlay(a, b) {\n return b < 128 ? 2 * a * b / 255 : 255 * (1 - 2 * (1 - a / 255) * (1 - b / 255));\n };\n\n var burn = function burn(a, b) {\n return 255 * (1 - (1 - b / 255) / (a / 255));\n };\n\n var dodge = function dodge(a, b) {\n if (a === 255) {\n return 255;\n }\n\n a = 255 * (b / 255) / (1 - a / 255);\n return a > 255 ? 255 : a;\n }; // # add = (a,b) ->\n // # if (a + b > 255) then 255 else a + b\n\n\n blend.normal = blend_f(each(normal));\n blend.multiply = blend_f(each(multiply));\n blend.screen = blend_f(each(screen));\n blend.overlay = blend_f(each(overlay));\n blend.darken = blend_f(each(darken$1));\n blend.lighten = blend_f(each(lighten));\n blend.dodge = blend_f(each(dodge));\n blend.burn = blend_f(each(burn)); // blend.add = blend_f(each(add));\n\n var blend_1 = blend; // cubehelix interpolation\n // based on D.A. Green \"A colour scheme for the display of astronomical intensity images\"\n // http://astron-soc.in/bulletin/11June/289392011.pdf\n\n var type$k = utils.type;\n var clip_rgb$3 = utils.clip_rgb;\n var TWOPI$2 = utils.TWOPI;\n var pow$6 = Math.pow;\n var sin$2 = Math.sin;\n var cos$3 = Math.cos;\n\n var cubehelix = function cubehelix(start, rotations, hue, gamma, lightness) {\n if (start === void 0) start = 300;\n if (rotations === void 0) rotations = -1.5;\n if (hue === void 0) hue = 1;\n if (gamma === void 0) gamma = 1;\n if (lightness === void 0) lightness = [0, 1];\n var dh = 0,\n dl;\n\n if (type$k(lightness) === 'array') {\n dl = lightness[1] - lightness[0];\n } else {\n dl = 0;\n lightness = [lightness, lightness];\n }\n\n var f = function f(fract) {\n var a = TWOPI$2 * ((start + 120) / 360 + rotations * fract);\n var l = pow$6(lightness[0] + dl * fract, gamma);\n var h = dh !== 0 ? hue[0] + fract * dh : hue;\n var amp = h * l * (1 - l) / 2;\n var cos_a = cos$3(a);\n var sin_a = sin$2(a);\n var r = l + amp * (-0.14861 * cos_a + 1.78277 * sin_a);\n var g = l + amp * (-0.29227 * cos_a - 0.90649 * sin_a);\n var b = l + amp * (+1.97294 * cos_a);\n return chroma_1(clip_rgb$3([r * 255, g * 255, b * 255, 1]));\n };\n\n f.start = function (s) {\n if (s == null) {\n return start;\n }\n\n start = s;\n return f;\n };\n\n f.rotations = function (r) {\n if (r == null) {\n return rotations;\n }\n\n rotations = r;\n return f;\n };\n\n f.gamma = function (g) {\n if (g == null) {\n return gamma;\n }\n\n gamma = g;\n return f;\n };\n\n f.hue = function (h) {\n if (h == null) {\n return hue;\n }\n\n hue = h;\n\n if (type$k(hue) === 'array') {\n dh = hue[1] - hue[0];\n\n if (dh === 0) {\n hue = hue[1];\n }\n } else {\n dh = 0;\n }\n\n return f;\n };\n\n f.lightness = function (h) {\n if (h == null) {\n return lightness;\n }\n\n if (type$k(h) === 'array') {\n lightness = h;\n dl = h[1] - h[0];\n } else {\n lightness = [h, h];\n dl = 0;\n }\n\n return f;\n };\n\n f.scale = function () {\n return chroma_1.scale(f);\n };\n\n f.hue(hue);\n return f;\n };\n\n var digits = '0123456789abcdef';\n var floor$2 = Math.floor;\n var random = Math.random;\n\n var random_1 = function random_1() {\n var code = '#';\n\n for (var i = 0; i < 6; i++) {\n code += digits.charAt(floor$2(random() * 16));\n }\n\n return new Color_1(code, 'hex');\n };\n\n var log$1 = Math.log;\n var pow$7 = Math.pow;\n var floor$3 = Math.floor;\n var abs = Math.abs;\n\n var analyze = function analyze(data, key) {\n if (key === void 0) key = null;\n var r = {\n min: Number.MAX_VALUE,\n max: Number.MAX_VALUE * -1,\n sum: 0,\n values: [],\n count: 0\n };\n\n if (type(data) === 'object') {\n data = Object.values(data);\n }\n\n data.forEach(function (val) {\n if (key && type(val) === 'object') {\n val = val[key];\n }\n\n if (val !== undefined && val !== null && !isNaN(val)) {\n r.values.push(val);\n r.sum += val;\n\n if (val < r.min) {\n r.min = val;\n }\n\n if (val > r.max) {\n r.max = val;\n }\n\n r.count += 1;\n }\n });\n r.domain = [r.min, r.max];\n\n r.limits = function (mode, num) {\n return limits(r, mode, num);\n };\n\n return r;\n };\n\n var limits = function limits(data, mode, num) {\n if (mode === void 0) mode = 'equal';\n if (num === void 0) num = 7;\n\n if (type(data) == 'array') {\n data = analyze(data);\n }\n\n var min = data.min;\n var max = data.max;\n var values = data.values.sort(function (a, b) {\n return a - b;\n });\n\n if (num === 1) {\n return [min, max];\n }\n\n var limits = [];\n\n if (mode.substr(0, 1) === 'c') {\n // continuous\n limits.push(min);\n limits.push(max);\n }\n\n if (mode.substr(0, 1) === 'e') {\n // equal interval\n limits.push(min);\n\n for (var i = 1; i < num; i++) {\n limits.push(min + i / num * (max - min));\n }\n\n limits.push(max);\n } else if (mode.substr(0, 1) === 'l') {\n // log scale\n if (min <= 0) {\n throw new Error('Logarithmic scales are only possible for values > 0');\n }\n\n var min_log = Math.LOG10E * log$1(min);\n var max_log = Math.LOG10E * log$1(max);\n limits.push(min);\n\n for (var i$1 = 1; i$1 < num; i$1++) {\n limits.push(pow$7(10, min_log + i$1 / num * (max_log - min_log)));\n }\n\n limits.push(max);\n } else if (mode.substr(0, 1) === 'q') {\n // quantile scale\n limits.push(min);\n\n for (var i$2 = 1; i$2 < num; i$2++) {\n var p = (values.length - 1) * i$2 / num;\n var pb = floor$3(p);\n\n if (pb === p) {\n limits.push(values[pb]);\n } else {\n // p > pb\n var pr = p - pb;\n limits.push(values[pb] * (1 - pr) + values[pb + 1] * pr);\n }\n }\n\n limits.push(max);\n } else if (mode.substr(0, 1) === 'k') {\n // k-means clustering\n\n /*\n implementation based on\n http://code.google.com/p/figue/source/browse/trunk/figue.js#336\n simplified for 1-d input values\n */\n var cluster;\n var n = values.length;\n var assignments = new Array(n);\n var clusterSizes = new Array(num);\n var repeat = true;\n var nb_iters = 0;\n var centroids = null; // get seed values\n\n centroids = [];\n centroids.push(min);\n\n for (var i$3 = 1; i$3 < num; i$3++) {\n centroids.push(min + i$3 / num * (max - min));\n }\n\n centroids.push(max);\n\n while (repeat) {\n // assignment step\n for (var j = 0; j < num; j++) {\n clusterSizes[j] = 0;\n }\n\n for (var i$4 = 0; i$4 < n; i$4++) {\n var value = values[i$4];\n var mindist = Number.MAX_VALUE;\n var best = void 0;\n\n for (var j$1 = 0; j$1 < num; j$1++) {\n var dist = abs(centroids[j$1] - value);\n\n if (dist < mindist) {\n mindist = dist;\n best = j$1;\n }\n\n clusterSizes[best]++;\n assignments[i$4] = best;\n }\n } // update centroids step\n\n\n var newCentroids = new Array(num);\n\n for (var j$2 = 0; j$2 < num; j$2++) {\n newCentroids[j$2] = null;\n }\n\n for (var i$5 = 0; i$5 < n; i$5++) {\n cluster = assignments[i$5];\n\n if (newCentroids[cluster] === null) {\n newCentroids[cluster] = values[i$5];\n } else {\n newCentroids[cluster] += values[i$5];\n }\n }\n\n for (var j$3 = 0; j$3 < num; j$3++) {\n newCentroids[j$3] *= 1 / clusterSizes[j$3];\n } // check convergence\n\n\n repeat = false;\n\n for (var j$4 = 0; j$4 < num; j$4++) {\n if (newCentroids[j$4] !== centroids[j$4]) {\n repeat = true;\n break;\n }\n }\n\n centroids = newCentroids;\n nb_iters++;\n\n if (nb_iters > 200) {\n repeat = false;\n }\n } // finished k-means clustering\n // the next part is borrowed from gabrielflor.it\n\n\n var kClusters = {};\n\n for (var j$5 = 0; j$5 < num; j$5++) {\n kClusters[j$5] = [];\n }\n\n for (var i$6 = 0; i$6 < n; i$6++) {\n cluster = assignments[i$6];\n kClusters[cluster].push(values[i$6]);\n }\n\n var tmpKMeansBreaks = [];\n\n for (var j$6 = 0; j$6 < num; j$6++) {\n tmpKMeansBreaks.push(kClusters[j$6][0]);\n tmpKMeansBreaks.push(kClusters[j$6][kClusters[j$6].length - 1]);\n }\n\n tmpKMeansBreaks = tmpKMeansBreaks.sort(function (a, b) {\n return a - b;\n });\n limits.push(tmpKMeansBreaks[0]);\n\n for (var i$7 = 1; i$7 < tmpKMeansBreaks.length; i$7 += 2) {\n var v = tmpKMeansBreaks[i$7];\n\n if (!isNaN(v) && limits.indexOf(v) === -1) {\n limits.push(v);\n }\n }\n }\n\n return limits;\n };\n\n var analyze_1 = {\n analyze: analyze,\n limits: limits\n };\n\n var contrast = function contrast(a, b) {\n // WCAG contrast ratio\n // see http://www.w3.org/TR/2008/REC-WCAG20-20081211/#contrast-ratiodef\n a = new Color_1(a);\n b = new Color_1(b);\n var l1 = a.luminance();\n var l2 = b.luminance();\n return l1 > l2 ? (l1 + 0.05) / (l2 + 0.05) : (l2 + 0.05) / (l1 + 0.05);\n };\n\n var sqrt$4 = Math.sqrt;\n var atan2$2 = Math.atan2;\n var abs$1 = Math.abs;\n var cos$4 = Math.cos;\n var PI$2 = Math.PI;\n\n var deltaE = function deltaE(a, b, L, C) {\n if (L === void 0) L = 1;\n if (C === void 0) C = 1; // Delta E (CMC)\n // see http://www.brucelindbloom.com/index.html?Eqn_DeltaE_CMC.html\n\n a = new Color_1(a);\n b = new Color_1(b);\n var ref = Array.from(a.lab());\n var L1 = ref[0];\n var a1 = ref[1];\n var b1 = ref[2];\n var ref$1 = Array.from(b.lab());\n var L2 = ref$1[0];\n var a2 = ref$1[1];\n var b2 = ref$1[2];\n var c1 = sqrt$4(a1 * a1 + b1 * b1);\n var c2 = sqrt$4(a2 * a2 + b2 * b2);\n var sl = L1 < 16.0 ? 0.511 : 0.040975 * L1 / (1.0 + 0.01765 * L1);\n var sc = 0.0638 * c1 / (1.0 + 0.0131 * c1) + 0.638;\n var h1 = c1 < 0.000001 ? 0.0 : atan2$2(b1, a1) * 180.0 / PI$2;\n\n while (h1 < 0) {\n h1 += 360;\n }\n\n while (h1 >= 360) {\n h1 -= 360;\n }\n\n var t = h1 >= 164.0 && h1 <= 345.0 ? 0.56 + abs$1(0.2 * cos$4(PI$2 * (h1 + 168.0) / 180.0)) : 0.36 + abs$1(0.4 * cos$4(PI$2 * (h1 + 35.0) / 180.0));\n var c4 = c1 * c1 * c1 * c1;\n var f = sqrt$4(c4 / (c4 + 1900.0));\n var sh = sc * (f * t + 1.0 - f);\n var delL = L1 - L2;\n var delC = c1 - c2;\n var delA = a1 - a2;\n var delB = b1 - b2;\n var dH2 = delA * delA + delB * delB - delC * delC;\n var v1 = delL / (L * sl);\n var v2 = delC / (C * sc);\n var v3 = sh;\n return sqrt$4(v1 * v1 + v2 * v2 + dH2 / (v3 * v3));\n }; // simple Euclidean distance\n\n\n var distance = function distance(a, b, mode) {\n if (mode === void 0) mode = 'lab'; // Delta E (CIE 1976)\n // see http://www.brucelindbloom.com/index.html?Equations.html\n\n a = new Color_1(a);\n b = new Color_1(b);\n var l1 = a.get(mode);\n var l2 = b.get(mode);\n var sum_sq = 0;\n\n for (var i in l1) {\n var d = (l1[i] || 0) - (l2[i] || 0);\n sum_sq += d * d;\n }\n\n return Math.sqrt(sum_sq);\n };\n\n var valid = function valid() {\n var args = [],\n len = arguments.length;\n\n while (len--) {\n args[len] = arguments[len];\n }\n\n try {\n new (Function.prototype.bind.apply(Color_1, [null].concat(args)))();\n return true;\n } catch (e) {\n return false;\n }\n }; // some pre-defined color scales:\n\n\n var scales = {\n cool: function cool() {\n return scale([chroma_1.hsl(180, 1, .9), chroma_1.hsl(250, .7, .4)]);\n },\n hot: function hot() {\n return scale(['#000', '#f00', '#ff0', '#fff'], [0, .25, .75, 1]).mode('rgb');\n }\n };\n /**\n ColorBrewer colors for chroma.js\n Copyright (c) 2002 Cynthia Brewer, Mark Harrower, and The\n Pennsylvania State University.\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n http://www.apache.org/licenses/LICENSE-2.0\n Unless required by applicable law or agreed to in writing, software distributed\n under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n CONDITIONS OF ANY KIND, either express or implied. See the License for the\n specific language governing permissions and limitations under the License.\n */\n\n var colorbrewer = {\n // sequential\n OrRd: ['#fff7ec', '#fee8c8', '#fdd49e', '#fdbb84', '#fc8d59', '#ef6548', '#d7301f', '#b30000', '#7f0000'],\n PuBu: ['#fff7fb', '#ece7f2', '#d0d1e6', '#a6bddb', '#74a9cf', '#3690c0', '#0570b0', '#045a8d', '#023858'],\n BuPu: ['#f7fcfd', '#e0ecf4', '#bfd3e6', '#9ebcda', '#8c96c6', '#8c6bb1', '#88419d', '#810f7c', '#4d004b'],\n Oranges: ['#fff5eb', '#fee6ce', '#fdd0a2', '#fdae6b', '#fd8d3c', '#f16913', '#d94801', '#a63603', '#7f2704'],\n BuGn: ['#f7fcfd', '#e5f5f9', '#ccece6', '#99d8c9', '#66c2a4', '#41ae76', '#238b45', '#006d2c', '#00441b'],\n YlOrBr: ['#ffffe5', '#fff7bc', '#fee391', '#fec44f', '#fe9929', '#ec7014', '#cc4c02', '#993404', '#662506'],\n YlGn: ['#ffffe5', '#f7fcb9', '#d9f0a3', '#addd8e', '#78c679', '#41ab5d', '#238443', '#006837', '#004529'],\n Reds: ['#fff5f0', '#fee0d2', '#fcbba1', '#fc9272', '#fb6a4a', '#ef3b2c', '#cb181d', '#a50f15', '#67000d'],\n RdPu: ['#fff7f3', '#fde0dd', '#fcc5c0', '#fa9fb5', '#f768a1', '#dd3497', '#ae017e', '#7a0177', '#49006a'],\n Greens: ['#f7fcf5', '#e5f5e0', '#c7e9c0', '#a1d99b', '#74c476', '#41ab5d', '#238b45', '#006d2c', '#00441b'],\n YlGnBu: ['#ffffd9', '#edf8b1', '#c7e9b4', '#7fcdbb', '#41b6c4', '#1d91c0', '#225ea8', '#253494', '#081d58'],\n Purples: ['#fcfbfd', '#efedf5', '#dadaeb', '#bcbddc', '#9e9ac8', '#807dba', '#6a51a3', '#54278f', '#3f007d'],\n GnBu: ['#f7fcf0', '#e0f3db', '#ccebc5', '#a8ddb5', '#7bccc4', '#4eb3d3', '#2b8cbe', '#0868ac', '#084081'],\n Greys: ['#ffffff', '#f0f0f0', '#d9d9d9', '#bdbdbd', '#969696', '#737373', '#525252', '#252525', '#000000'],\n YlOrRd: ['#ffffcc', '#ffeda0', '#fed976', '#feb24c', '#fd8d3c', '#fc4e2a', '#e31a1c', '#bd0026', '#800026'],\n PuRd: ['#f7f4f9', '#e7e1ef', '#d4b9da', '#c994c7', '#df65b0', '#e7298a', '#ce1256', '#980043', '#67001f'],\n Blues: ['#f7fbff', '#deebf7', '#c6dbef', '#9ecae1', '#6baed6', '#4292c6', '#2171b5', '#08519c', '#08306b'],\n PuBuGn: ['#fff7fb', '#ece2f0', '#d0d1e6', '#a6bddb', '#67a9cf', '#3690c0', '#02818a', '#016c59', '#014636'],\n Viridis: ['#440154', '#482777', '#3f4a8a', '#31678e', '#26838f', '#1f9d8a', '#6cce5a', '#b6de2b', '#fee825'],\n // diverging\n Spectral: ['#9e0142', '#d53e4f', '#f46d43', '#fdae61', '#fee08b', '#ffffbf', '#e6f598', '#abdda4', '#66c2a5', '#3288bd', '#5e4fa2'],\n RdYlGn: ['#a50026', '#d73027', '#f46d43', '#fdae61', '#fee08b', '#ffffbf', '#d9ef8b', '#a6d96a', '#66bd63', '#1a9850', '#006837'],\n RdBu: ['#67001f', '#b2182b', '#d6604d', '#f4a582', '#fddbc7', '#f7f7f7', '#d1e5f0', '#92c5de', '#4393c3', '#2166ac', '#053061'],\n PiYG: ['#8e0152', '#c51b7d', '#de77ae', '#f1b6da', '#fde0ef', '#f7f7f7', '#e6f5d0', '#b8e186', '#7fbc41', '#4d9221', '#276419'],\n PRGn: ['#40004b', '#762a83', '#9970ab', '#c2a5cf', '#e7d4e8', '#f7f7f7', '#d9f0d3', '#a6dba0', '#5aae61', '#1b7837', '#00441b'],\n RdYlBu: ['#a50026', '#d73027', '#f46d43', '#fdae61', '#fee090', '#ffffbf', '#e0f3f8', '#abd9e9', '#74add1', '#4575b4', '#313695'],\n BrBG: ['#543005', '#8c510a', '#bf812d', '#dfc27d', '#f6e8c3', '#f5f5f5', '#c7eae5', '#80cdc1', '#35978f', '#01665e', '#003c30'],\n RdGy: ['#67001f', '#b2182b', '#d6604d', '#f4a582', '#fddbc7', '#ffffff', '#e0e0e0', '#bababa', '#878787', '#4d4d4d', '#1a1a1a'],\n PuOr: ['#7f3b08', '#b35806', '#e08214', '#fdb863', '#fee0b6', '#f7f7f7', '#d8daeb', '#b2abd2', '#8073ac', '#542788', '#2d004b'],\n // qualitative\n Set2: ['#66c2a5', '#fc8d62', '#8da0cb', '#e78ac3', '#a6d854', '#ffd92f', '#e5c494', '#b3b3b3'],\n Accent: ['#7fc97f', '#beaed4', '#fdc086', '#ffff99', '#386cb0', '#f0027f', '#bf5b17', '#666666'],\n Set1: ['#e41a1c', '#377eb8', '#4daf4a', '#984ea3', '#ff7f00', '#ffff33', '#a65628', '#f781bf', '#999999'],\n Set3: ['#8dd3c7', '#ffffb3', '#bebada', '#fb8072', '#80b1d3', '#fdb462', '#b3de69', '#fccde5', '#d9d9d9', '#bc80bd', '#ccebc5', '#ffed6f'],\n Dark2: ['#1b9e77', '#d95f02', '#7570b3', '#e7298a', '#66a61e', '#e6ab02', '#a6761d', '#666666'],\n Paired: ['#a6cee3', '#1f78b4', '#b2df8a', '#33a02c', '#fb9a99', '#e31a1c', '#fdbf6f', '#ff7f00', '#cab2d6', '#6a3d9a', '#ffff99', '#b15928'],\n Pastel2: ['#b3e2cd', '#fdcdac', '#cbd5e8', '#f4cae4', '#e6f5c9', '#fff2ae', '#f1e2cc', '#cccccc'],\n Pastel1: ['#fbb4ae', '#b3cde3', '#ccebc5', '#decbe4', '#fed9a6', '#ffffcc', '#e5d8bd', '#fddaec', '#f2f2f2']\n }; // add lowercase aliases for case-insensitive matches\n\n for (var i$1 = 0, list$1 = Object.keys(colorbrewer); i$1 < list$1.length; i$1 += 1) {\n var key = list$1[i$1];\n colorbrewer[key.toLowerCase()] = colorbrewer[key];\n }\n\n var colorbrewer_1 = colorbrewer; // feel free to comment out anything to rollup\n // a smaller chroma.js built\n // io --\x3e convert colors\n // operators --\x3e modify existing Colors\n // interpolators\n // generators -- > create new colors\n\n chroma_1.average = average;\n chroma_1.bezier = bezier_1;\n chroma_1.blend = blend_1;\n chroma_1.cubehelix = cubehelix;\n chroma_1.mix = chroma_1.interpolate = mix;\n chroma_1.random = random_1;\n chroma_1.scale = scale; // other utility methods\n\n chroma_1.analyze = analyze_1.analyze;\n chroma_1.contrast = contrast;\n chroma_1.deltaE = deltaE;\n chroma_1.distance = distance;\n chroma_1.limits = analyze_1.limits;\n chroma_1.valid = valid; // scale\n\n chroma_1.scales = scales; // colors\n\n chroma_1.colors = w3cx11_1;\n chroma_1.brewer = colorbrewer_1;\n var chroma_js = chroma_1;\n return chroma_js;\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvY2hyb21hLmpzP2JmNDQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUVBQW1FO0FBQ25FLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsS0FBNEQsZ0NBQWdDLENBQXdGO0FBQ3RMLENBQUM7QUFDRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsUUFBUTtBQUMzQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJOzs7QUFHSjs7QUFFQSxxSEFBcUgsaUJBQWlCO0FBQ3RJO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw2Q0FBNkM7O0FBRTdDO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7OztBQUdBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLE9BQU87OztBQUdQLDhDQUE4QyxpQkFBaUI7QUFDL0Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7OztBQUdMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFFBQVE7QUFDeEI7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4Qjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEscUJBQXFCLE9BQU87QUFDNUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTyxZQUFZO0FBQ25CO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQTs7QUFFQSxxQkFBcUIsT0FBTztBQUM1QjtBQUNBOztBQUVBLGlCQUFpQjs7QUFFakI7QUFDQSxLQUFLOzs7QUFHTDtBQUNBOztBQUVBLHVCQUF1QixTQUFTO0FBQ2hDO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOzs7QUFHTDtBQUNBOztBQUVBLHVCQUF1QixTQUFTO0FBQ2hDO0FBQ0E7O0FBRUEsbUJBQW1COztBQUVuQjtBQUNBLEtBQUs7OztBQUdMO0FBQ0E7O0FBRUEsdUJBQXVCLFNBQVM7QUFDaEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCOztBQUV2QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0M7O0FBRXhDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGdDQUFnQyxFQUFFLGFBQWEsRUFBRTtBQUNqRCxpQ0FBaUMsRUFBRSxhQUFhLEVBQUU7O0FBRWxEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOzs7QUFHUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOzs7QUFHUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixNQUFNO0FBQ3RCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtEQUErRDs7QUFFL0Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGlEQUFpRCxpQkFBaUI7QUFDbEU7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7O0FBR1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7O0FBR0o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOzs7QUFHSjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FB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OztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQzs7QUFFbkMsc0JBQXNCO0FBQ3RCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxtQkFBbUIsT0FBTztBQUMxQjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxxQkFBcUIsU0FBUztBQUM5QjtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIsV0FBVztBQUNsQztBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUEsdUJBQXVCLFdBQVc7QUFDbEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQjs7QUFFM0I7QUFDQTs7QUFFQSx1QkFBdUIsV0FBVztBQUNsQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSx1QkFBdUIsU0FBUztBQUNoQztBQUNBOztBQUVBLHlCQUF5QixTQUFTO0FBQ2xDO0FBQ0E7QUFDQTs7QUFFQSwyQkFBMkIsV0FBVztBQUN0Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOzs7QUFHVDs7QUFFQSx5QkFBeUIsV0FBVztBQUNwQztBQUNBOztBQUVBLHlCQUF5QixTQUFTO0FBQ2xDOztBQUVBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBOztBQUVBLHlCQUF5QixXQUFXO0FBQ3BDO0FBQ0EsU0FBUzs7O0FBR1Q7O0FBRUEseUJBQXlCLFdBQVc7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7O0FBR0E7O0FBRUEsdUJBQXVCLFdBQVc7QUFDbEM7QUFDQTs7QUFFQSx1QkFBdUIsU0FBUztBQUNoQztBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsdUJBQXVCLFdBQVc7QUFDbEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUEsdUJBQXVCLDhCQUE4QjtBQUNyRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDRCQUE0QjtBQUM1Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0Esc0NBQXNDO0FBQ3RDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKLHNEQUFzRCxxQkFBcUI7QUFDM0U7QUFDQTtBQUNBOztBQUVBLGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5Qjs7QUFFekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5Qjs7QUFFekIsMkJBQTJCOztBQUUzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMzg3My5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogY2hyb21hLmpzIC0gSmF2YVNjcmlwdCBsaWJyYXJ5IGZvciBjb2xvciBjb252ZXJzaW9uc1xuICpcbiAqIENvcHlyaWdodCAoYykgMjAxMS0yMDE5LCBHcmVnb3IgQWlzY2hcbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcbiAqXG4gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAqIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICpcbiAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSxcbiAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb25cbiAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuICpcbiAqIDMuIFRoZSBuYW1lIEdyZWdvciBBaXNjaCBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzXG4gKiBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cbiAqXG4gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIlxuICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRVxuICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG4gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBHUkVHT1IgQUlTQ0ggT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCxcbiAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLFxuICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSxcbiAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUllcbiAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HXG4gKiBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsXG4gKiBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICpcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqXG4gKiBjaHJvbWEuanMgaW5jbHVkZXMgY29sb3JzIGZyb20gY29sb3JicmV3ZXIyLm9yZywgd2hpY2ggYXJlIHJlbGVhc2VkIHVuZGVyXG4gKiB0aGUgZm9sbG93aW5nIGxpY2Vuc2U6XG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDAyIEN5bnRoaWEgQnJld2VyLCBNYXJrIEhhcnJvd2VyLFxuICogYW5kIFRoZSBQZW5uc3lsdmFuaWEgU3RhdGUgVW5pdmVyc2l0eS5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsXG4gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhblxuICogXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCxcbiAqIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljXG4gKiBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICpcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICpcbiAqIE5hbWVkIGNvbG9ycyBhcmUgdGFrZW4gZnJvbSBYMTEgQ29sb3IgTmFtZXMuXG4gKiBodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLWNvbG9yLyNzdmctY29sb3JcbiAqXG4gKiBAcHJlc2VydmVcbiAqL1xuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCkgOiB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoZmFjdG9yeSkgOiBnbG9iYWwuY2hyb21hID0gZmFjdG9yeSgpO1xufSkodGhpcywgZnVuY3Rpb24gKCkge1xuICAndXNlIHN0cmljdCc7XG5cbiAgdmFyIGxpbWl0ID0gZnVuY3Rpb24gbGltaXQoeCwgbWluLCBtYXgpIHtcbiAgICBpZiAobWluID09PSB2b2lkIDApIG1pbiA9IDA7XG4gICAgaWYgKG1heCA9PT0gdm9pZCAwKSBtYXggPSAxO1xuICAgIHJldHVybiB4IDwgbWluID8gbWluIDogeCA+IG1heCA/IG1heCA6IHg7XG4gIH07XG5cbiAgdmFyIGNsaXBfcmdiID0gZnVuY3Rpb24gY2xpcF9yZ2IocmdiKSB7XG4gICAgcmdiLl9jbGlwcGVkID0gZmFsc2U7XG4gICAgcmdiLl91bmNsaXBwZWQgPSByZ2Iuc2xpY2UoMCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8PSAzOyBpKyspIHtcbiAgICAgIGlmIChpIDwgMykge1xuICAgICAgICBpZiAocmdiW2ldIDwgMCB8fCByZ2JbaV0gPiAyNTUpIHtcbiAgICAgICAgICByZ2IuX2NsaXBwZWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmdiW2ldID0gbGltaXQocmdiW2ldLCAwLCAyNTUpO1xuICAgICAgfSBlbHNlIGlmIChpID09PSAzKSB7XG4gICAgICAgIHJnYltpXSA9IGxpbWl0KHJnYltpXSwgMCwgMSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJnYjtcbiAgfTsgLy8gcG9ydGVkIGZyb20galF1ZXJ5J3MgJC50eXBlXG5cblxuICB2YXIgY2xhc3NUb1R5cGUgPSB7fTtcblxuICBmb3IgKHZhciBpID0gMCwgbGlzdCA9IFsnQm9vbGVhbicsICdOdW1iZXInLCAnU3RyaW5nJywgJ0Z1bmN0aW9uJywgJ0FycmF5JywgJ0RhdGUnLCAnUmVnRXhwJywgJ1VuZGVmaW5lZCcsICdOdWxsJ107IGkgPCBsaXN0Lmxlbmd0aDsgaSArPSAxKSB7XG4gICAgdmFyIG5hbWUgPSBsaXN0W2ldO1xuICAgIGNsYXNzVG9UeXBlW1wiW29iamVjdCBcIiArIG5hbWUgKyBcIl1cIl0gPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gIH1cblxuICB2YXIgdHlwZSA9IGZ1bmN0aW9uIHR5cGUob2JqKSB7XG4gICAgcmV0dXJuIGNsYXNzVG9UeXBlW09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopXSB8fCBcIm9iamVjdFwiO1xuICB9O1xuXG4gIHZhciB1bnBhY2sgPSBmdW5jdGlvbiB1bnBhY2soYXJncywga2V5T3JkZXIpIHtcbiAgICBpZiAoa2V5T3JkZXIgPT09IHZvaWQgMCkga2V5T3JkZXIgPSBudWxsOyAvLyBpZiBjYWxsZWQgd2l0aCBtb3JlIHRoYW4gMyBhcmd1bWVudHMsIHdlIHJldHVybiB0aGUgYXJndW1lbnRzXG5cbiAgICBpZiAoYXJncy5sZW5ndGggPj0gMykge1xuICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3MpO1xuICAgIH0gLy8gd2l0aCBsZXNzIHRoYW4gMyBhcmdzIHdlIGNoZWNrIGlmIGZpcnN0IGFyZyBpcyBvYmplY3RcbiAgICAvLyBhbmQgdXNlIHRoZSBrZXlPcmRlciBzdHJpbmcgdG8gZXh0cmFjdCBhbmQgc29ydCBwcm9wZXJ0aWVzXG5cblxuICAgIGlmICh0eXBlKGFyZ3NbMF0pID09ICdvYmplY3QnICYmIGtleU9yZGVyKSB7XG4gICAgICByZXR1cm4ga2V5T3JkZXIuc3BsaXQoJycpLmZpbHRlcihmdW5jdGlvbiAoaykge1xuICAgICAgICByZXR1cm4gYXJnc1swXVtrXSAhPT0gdW5kZWZpbmVkO1xuICAgICAgfSkubWFwKGZ1bmN0aW9uIChrKSB7XG4gICAgICAgIHJldHVybiBhcmdzWzBdW2tdO1xuICAgICAgfSk7XG4gICAgfSAvLyBvdGhlcndpc2Ugd2UganVzdCByZXR1cm4gdGhlIGZpcnN0IGFyZ3VtZW50XG4gICAgLy8gKHdoaWNoIHdlIHN1cHBvc2UgaXMgYW4gYXJyYXkgb2YgYXJncylcblxuXG4gICAgcmV0dXJuIGFyZ3NbMF07XG4gIH07XG5cbiAgdmFyIGxhc3QgPSBmdW5jdGlvbiBsYXN0KGFyZ3MpIHtcbiAgICBpZiAoYXJncy5sZW5ndGggPCAyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgbCA9IGFyZ3MubGVuZ3RoIC0gMTtcblxuICAgIGlmICh0eXBlKGFyZ3NbbF0pID09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gYXJnc1tsXS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9O1xuXG4gIHZhciBQSSA9IE1hdGguUEk7XG4gIHZhciB1dGlscyA9IHtcbiAgICBjbGlwX3JnYjogY2xpcF9yZ2IsXG4gICAgbGltaXQ6IGxpbWl0LFxuICAgIHR5cGU6IHR5cGUsXG4gICAgdW5wYWNrOiB1bnBhY2ssXG4gICAgbGFzdDogbGFzdCxcbiAgICBQSTogUEksXG4gICAgVFdPUEk6IFBJICogMixcbiAgICBQSVRISVJEOiBQSSAvIDMsXG4gICAgREVHMlJBRDogUEkgLyAxODAsXG4gICAgUkFEMkRFRzogMTgwIC8gUElcbiAgfTtcbiAgdmFyIGlucHV0ID0ge1xuICAgIGZvcm1hdDoge30sXG4gICAgYXV0b2RldGVjdDogW11cbiAgfTtcbiAgdmFyIGxhc3QkMSA9IHV0aWxzLmxhc3Q7XG4gIHZhciBjbGlwX3JnYiQxID0gdXRpbHMuY2xpcF9yZ2I7XG4gIHZhciB0eXBlJDEgPSB1dGlscy50eXBlO1xuXG4gIHZhciBDb2xvciA9IGZ1bmN0aW9uIENvbG9yKCkge1xuICAgIHZhciBhcmdzID0gW10sXG4gICAgICAgIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cbiAgICB3aGlsZSAobGVuLS0pIHtcbiAgICAgIGFyZ3NbbGVuXSA9IGFyZ3VtZW50c1tsZW5dO1xuICAgIH1cblxuICAgIHZhciBtZSA9IHRoaXM7XG5cbiAgICBpZiAodHlwZSQxKGFyZ3NbMF0pID09PSAnb2JqZWN0JyAmJiBhcmdzWzBdLmNvbnN0cnVjdG9yICYmIGFyZ3NbMF0uY29uc3RydWN0b3IgPT09IHRoaXMuY29uc3RydWN0b3IpIHtcbiAgICAgIC8vIHRoZSBhcmd1bWVudCBpcyBhbHJlYWR5IGEgQ29sb3IgaW5zdGFuY2VcbiAgICAgIHJldHVybiBhcmdzWzBdO1xuICAgIH0gLy8gbGFzdCBhcmd1bWVudCBjb3VsZCBiZSB0aGUgbW9kZVxuXG5cbiAgICB2YXIgbW9kZSA9IGxhc3QkMShhcmdzKTtcbiAgICB2YXIgYXV0b2RldGVjdCA9IGZhbHNlO1xuXG4gICAgaWYgKCFtb2RlKSB7XG4gICAgICBhdXRvZGV0ZWN0ID0gdHJ1ZTtcblxuICAgICAgaWYgKCFpbnB1dC5zb3J0ZWQpIHtcbiAgICAgICAgaW5wdXQuYXV0b2RldGVjdCA9IGlucHV0LmF1dG9kZXRlY3Quc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgIHJldHVybiBiLnAgLSBhLnA7XG4gICAgICAgIH0pO1xuICAgICAgICBpbnB1dC5zb3J0ZWQgPSB0cnVlO1xuICAgICAgfSAvLyBhdXRvLWRldGVjdCBmb3JtYXRcblxuXG4gICAgICBmb3IgKHZhciBpID0gMCwgbGlzdCA9IGlucHV0LmF1dG9kZXRlY3Q7IGkgPCBsaXN0Lmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIHZhciBjaGsgPSBsaXN0W2ldO1xuICAgICAgICBtb2RlID0gY2hrLnRlc3QuYXBwbHkoY2hrLCBhcmdzKTtcblxuICAgICAgICBpZiAobW9kZSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlucHV0LmZvcm1hdFttb2RlXSkge1xuICAgICAgdmFyIHJnYiA9IGlucHV0LmZvcm1hdFttb2RlXS5hcHBseShudWxsLCBhdXRvZGV0ZWN0ID8gYXJncyA6IGFyZ3Muc2xpY2UoMCwgLTEpKTtcbiAgICAgIG1lLl9yZ2IgPSBjbGlwX3JnYiQxKHJnYik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndW5rbm93biBmb3JtYXQ6ICcgKyBhcmdzKTtcbiAgICB9IC8vIGFkZCBhbHBoYSBjaGFubmVsXG5cblxuICAgIGlmIChtZS5fcmdiLmxlbmd0aCA9PT0gMykge1xuICAgICAgbWUuX3JnYi5wdXNoKDEpO1xuICAgIH1cbiAgfTtcblxuICBDb2xvci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICBpZiAodHlwZSQxKHRoaXMuaGV4KSA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gdGhpcy5oZXgoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gXCJbXCIgKyB0aGlzLl9yZ2Iuam9pbignLCcpICsgXCJdXCI7XG4gIH07XG5cbiAgdmFyIENvbG9yXzEgPSBDb2xvcjtcblxuICB2YXIgY2hyb21hID0gZnVuY3Rpb24gY2hyb21hKCkge1xuICAgIHZhciBhcmdzID0gW10sXG4gICAgICAgIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cbiAgICB3aGlsZSAobGVuLS0pIHtcbiAgICAgIGFyZ3NbbGVuXSA9IGFyZ3VtZW50c1tsZW5dO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KGNocm9tYS5Db2xvciwgW251bGxdLmNvbmNhdChhcmdzKSkpKCk7XG4gIH07XG5cbiAgY2hyb21hLkNvbG9yID0gQ29sb3JfMTtcbiAgY2hyb21hLnZlcnNpb24gPSAnMi4xLjInO1xuICB2YXIgY2hyb21hXzEgPSBjaHJvbWE7XG4gIHZhciB1bnBhY2skMSA9IHV0aWxzLnVucGFjaztcbiAgdmFyIG1heCA9IE1hdGgubWF4O1xuXG4gIHZhciByZ2IyY215ayA9IGZ1bmN0aW9uIHJnYjJjbXlrKCkge1xuICAgIHZhciBhcmdzID0gW10sXG4gICAgICAgIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cbiAgICB3aGlsZSAobGVuLS0pIHtcbiAgICAgIGFyZ3NbbGVuXSA9IGFyZ3VtZW50c1tsZW5dO1xuICAgIH1cblxuICAgIHZhciByZWYgPSB1bnBhY2skMShhcmdzLCAncmdiJyk7XG4gICAgdmFyIHIgPSByZWZbMF07XG4gICAgdmFyIGcgPSByZWZbMV07XG4gICAgdmFyIGIgPSByZWZbMl07XG4gICAgciA9IHIgLyAyNTU7XG4gICAgZyA9IGcgLyAyNTU7XG4gICAgYiA9IGIgLyAyNTU7XG4gICAgdmFyIGsgPSAxIC0gbWF4KHIsIG1heChnLCBiKSk7XG4gICAgdmFyIGYgPSBrIDwgMSA/IDEgLyAoMSAtIGspIDogMDtcbiAgICB2YXIgYyA9ICgxIC0gciAtIGspICogZjtcbiAgICB2YXIgbSA9ICgxIC0gZyAtIGspICogZjtcbiAgICB2YXIgeSA9ICgxIC0gYiAtIGspICogZjtcbiAgICByZXR1cm4gW2MsIG0sIHksIGtdO1xuICB9O1xuXG4gIHZhciByZ2IyY215a18xID0gcmdiMmNteWs7XG4gIHZhciB1bnBhY2skMiA9IHV0aWxzLnVucGFjaztcblxuICB2YXIgY215azJyZ2IgPSBmdW5jdGlvbiBjbXlrMnJnYigpIHtcbiAgICB2YXIgYXJncyA9IFtdLFxuICAgICAgICBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGxlbi0tKSB7XG4gICAgICBhcmdzW2xlbl0gPSBhcmd1bWVudHNbbGVuXTtcbiAgICB9XG5cbiAgICBhcmdzID0gdW5wYWNrJDIoYXJncywgJ2NteWsnKTtcbiAgICB2YXIgYyA9IGFyZ3NbMF07XG4gICAgdmFyIG0gPSBhcmdzWzFdO1xuICAgIHZhciB5ID0gYXJnc1syXTtcbiAgICB2YXIgayA9IGFyZ3NbM107XG4gICAgdmFyIGFscGhhID0gYXJncy5sZW5ndGggPiA0ID8gYXJnc1s0XSA6IDE7XG5cbiAgICBpZiAoayA9PT0gMSkge1xuICAgICAgcmV0dXJuIFswLCAwLCAwLCBhbHBoYV07XG4gICAgfVxuXG4gICAgcmV0dXJuIFtjID49IDEgPyAwIDogMjU1ICogKDEgLSBjKSAqICgxIC0gayksIC8vIHJcbiAgICBtID49IDEgPyAwIDogMjU1ICogKDEgLSBtKSAqICgxIC0gayksIC8vIGdcbiAgICB5ID49IDEgPyAwIDogMjU1ICogKDEgLSB5KSAqICgxIC0gayksIC8vIGJcbiAgICBhbHBoYV07XG4gIH07XG5cbiAgdmFyIGNteWsycmdiXzEgPSBjbXlrMnJnYjtcbiAgdmFyIHVucGFjayQzID0gdXRpbHMudW5wYWNrO1xuICB2YXIgdHlwZSQyID0gdXRpbHMudHlwZTtcblxuICBDb2xvcl8xLnByb3RvdHlwZS5jbXlrID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiByZ2IyY215a18xKHRoaXMuX3JnYik7XG4gIH07XG5cbiAgY2hyb21hXzEuY215ayA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYXJncyA9IFtdLFxuICAgICAgICBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGxlbi0tKSB7XG4gICAgICBhcmdzW2xlbl0gPSBhcmd1bWVudHNbbGVuXTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IChGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5hcHBseShDb2xvcl8xLCBbbnVsbF0uY29uY2F0KGFyZ3MsIFsnY215ayddKSkpKCk7XG4gIH07XG5cbiAgaW5wdXQuZm9ybWF0LmNteWsgPSBjbXlrMnJnYl8xO1xuICBpbnB1dC5hdXRvZGV0ZWN0LnB1c2goe1xuICAgIHA6IDIsXG4gICAgdGVzdDogZnVuY3Rpb24gdGVzdCgpIHtcbiAgICAgIHZhciBhcmdzID0gW10sXG4gICAgICAgICAgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcblxuICAgICAgd2hpbGUgKGxlbi0tKSB7XG4gICAgICAgIGFyZ3NbbGVuXSA9IGFyZ3VtZW50c1tsZW5dO1xuICAgICAgfVxuXG4gICAgICBhcmdzID0gdW5wYWNrJDMoYXJncywgJ2NteWsnKTtcblxuICAgICAgaWYgKHR5cGUkMihhcmdzKSA9PT0gJ2FycmF5JyAmJiBhcmdzLmxlbmd0aCA9PT0gNCkge1xuICAgICAgICByZXR1cm4gJ2NteWsnO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHZhciB1bnBhY2skNCA9IHV0aWxzLnVucGFjaztcbiAgdmFyIGxhc3QkMiA9IHV0aWxzLmxhc3Q7XG5cbiAgdmFyIHJuZCA9IGZ1bmN0aW9uIHJuZChhKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQoYSAqIDEwMCkgLyAxMDA7XG4gIH07XG4gIC8qXG4gICAqIHN1cHBvcnRlZCBhcmd1bWVudHM6XG4gICAqIC0gaHNsMmNzcyhoLHMsbClcbiAgICogLSBoc2wyY3NzKGgscyxsLGEpXG4gICAqIC0gaHNsMmNzcyhbaCxzLGxdLCBtb2RlKVxuICAgKiAtIGhzbDJjc3MoW2gscyxsLGFdLCBtb2RlKVxuICAgKiAtIGhzbDJjc3Moe2gscyxsLGF9LCBtb2RlKVxuICAgKi9cblxuXG4gIHZhciBoc2wyY3NzID0gZnVuY3Rpb24gaHNsMmNzcygpIHtcbiAgICB2YXIgYXJncyA9IFtdLFxuICAgICAgICBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGxlbi0tKSB7XG4gICAgICBhcmdzW2xlbl0gPSBhcmd1bWVudHNbbGVuXTtcbiAgICB9XG5cbiAgICB2YXIgaHNsYSA9IHVucGFjayQ0KGFyZ3MsICdoc2xhJyk7XG4gICAgdmFyIG1vZGUgPSBsYXN0JDIoYXJncykgfHwgJ2xzYSc7XG4gICAgaHNsYVswXSA9IHJuZChoc2xhWzBdIHx8IDApO1xuICAgIGhzbGFbMV0gPSBybmQoaHNsYVsxXSAqIDEwMCkgKyAnJSc7XG4gICAgaHNsYVsyXSA9IHJuZChoc2xhWzJdICogMTAwKSArICclJztcblxuICAgIGlmIChtb2RlID09PSAnaHNsYScgfHwgaHNsYS5sZW5ndGggPiAzICYmIGhzbGFbM10gPCAxKSB7XG4gICAgICBoc2xhWzNdID0gaHNsYS5sZW5ndGggPiAzID8gaHNsYVszXSA6IDE7XG4gICAgICBtb2RlID0gJ2hzbGEnO1xuICAgIH0gZWxzZSB7XG4gICAgICBoc2xhLmxlbmd0aCA9IDM7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1vZGUgKyBcIihcIiArIGhzbGEuam9pbignLCcpICsgXCIpXCI7XG4gIH07XG5cbiAgdmFyIGhzbDJjc3NfMSA9IGhzbDJjc3M7XG4gIHZhciB1bnBhY2skNSA9IHV0aWxzLnVucGFjaztcbiAgLypcbiAgICogc3VwcG9ydGVkIGFyZ3VtZW50czpcbiAgICogLSByZ2IyaHNsKHIsZyxiKVxuICAgKiAtIHJnYjJoc2wocixnLGIsYSlcbiAgICogLSByZ2IyaHNsKFtyLGcsYl0pXG4gICAqIC0gcmdiMmhzbChbcixnLGIsYV0pXG4gICAqIC0gcmdiMmhzbCh7cixnLGIsYX0pXG4gICAqL1xuXG4gIHZhciByZ2IyaHNsID0gZnVuY3Rpb24gcmdiMmhzbCgpIHtcbiAgICB2YXIgYXJncyA9IFtdLFxuICAgICAgICBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGxlbi0tKSB7XG4gICAgICBhcmdzW2xlbl0gPSBhcmd1bWVudHNbbGVuXTtcbiAgICB9XG5cbiAgICBhcmdzID0gdW5wYWNrJDUoYXJncywgJ3JnYmEnKTtcbiAgICB2YXIgciA9IGFyZ3NbMF07XG4gICAgdmFyIGcgPSBhcmdzWzFdO1xuICAgIHZhciBiID0gYXJnc1syXTtcbiAgICByIC89IDI1NTtcbiAgICBnIC89IDI1NTtcbiAgICBiIC89IDI1NTtcbiAgICB2YXIgbWluID0gTWF0aC5taW4ociwgZywgYik7XG4gICAgdmFyIG1heCA9IE1hdGgubWF4KHIsIGcsIGIpO1xuICAgIHZhciBsID0gKG1heCArIG1pbikgLyAyO1xuICAgIHZhciBzLCBoO1xuXG4gICAgaWYgKG1heCA9PT0gbWluKSB7XG4gICAgICBzID0gMDtcbiAgICAgIGggPSBOdW1iZXIuTmFOO1xuICAgIH0gZWxzZSB7XG4gICAgICBzID0gbCA8IDAuNSA/IChtYXggLSBtaW4pIC8gKG1heCArIG1pbikgOiAobWF4IC0gbWluKSAvICgyIC0gbWF4IC0gbWluKTtcbiAgICB9XG5cbiAgICBpZiAociA9PSBtYXgpIHtcbiAgICAgIGggPSAoZyAtIGIpIC8gKG1heCAtIG1pbik7XG4gICAgfSBlbHNlIGlmIChnID09IG1heCkge1xuICAgICAgaCA9IDIgKyAoYiAtIHIpIC8gKG1heCAtIG1pbik7XG4gICAgfSBlbHNlIGlmIChiID09IG1heCkge1xuICAgICAgaCA9IDQgKyAociAtIGcpIC8gKG1heCAtIG1pbik7XG4gICAgfVxuXG4gICAgaCAqPSA2MDtcblxuICAgIGlmIChoIDwgMCkge1xuICAgICAgaCArPSAzNjA7XG4gICAgfVxuXG4gICAgaWYgKGFyZ3MubGVuZ3RoID4gMyAmJiBhcmdzWzNdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBbaCwgcywgbCwgYXJnc1szXV07XG4gICAgfVxuXG4gICAgcmV0dXJuIFtoLCBzLCBsXTtcbiAgfTtcblxuICB2YXIgcmdiMmhzbF8xID0gcmdiMmhzbDtcbiAgdmFyIHVucGFjayQ2ID0gdXRpbHMudW5wYWNrO1xuICB2YXIgbGFzdCQzID0gdXRpbHMubGFzdDtcbiAgdmFyIHJvdW5kID0gTWF0aC5yb3VuZDtcbiAgLypcbiAgICogc3VwcG9ydGVkIGFyZ3VtZW50czpcbiAgICogLSByZ2IyY3NzKHIsZyxiKVxuICAgKiAtIHJnYjJjc3MocixnLGIsYSlcbiAgICogLSByZ2IyY3NzKFtyLGcsYl0sIG1vZGUpXG4gICAqIC0gcmdiMmNzcyhbcixnLGIsYV0sIG1vZGUpXG4gICAqIC0gcmdiMmNzcyh7cixnLGIsYX0sIG1vZGUpXG4gICAqL1xuXG4gIHZhciByZ2IyY3NzID0gZnVuY3Rpb24gcmdiMmNzcygpIHtcbiAgICB2YXIgYXJncyA9IFtdLFxuICAgICAgICBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGxlbi0tKSB7XG4gICAgICBhcmdzW2xlbl0gPSBhcmd1bWVudHNbbGVuXTtcbiAgICB9XG5cbiAgICB2YXIgcmdiYSA9IHVucGFjayQ2KGFyZ3MsICdyZ2JhJyk7XG4gICAgdmFyIG1vZGUgPSBsYXN0JDMoYXJncykgfHwgJ3JnYic7XG5cbiAgICBpZiAobW9kZS5zdWJzdHIoMCwgMykgPT0gJ2hzbCcpIHtcbiAgICAgIHJldHVybiBoc2wyY3NzXzEocmdiMmhzbF8xKHJnYmEpLCBtb2RlKTtcbiAgICB9XG5cbiAgICByZ2JhWzBdID0gcm91bmQocmdiYVswXSk7XG4gICAgcmdiYVsxXSA9IHJvdW5kKHJnYmFbMV0pO1xuICAgIHJnYmFbMl0gPSByb3VuZChyZ2JhWzJdKTtcblxuICAgIGlmIChtb2RlID09PSAncmdiYScgfHwgcmdiYS5sZW5ndGggPiAzICYmIHJnYmFbM10gPCAxKSB7XG4gICAgICByZ2JhWzNdID0gcmdiYS5sZW5ndGggPiAzID8gcmdiYVszXSA6IDE7XG4gICAgICBtb2RlID0gJ3JnYmEnO1xuICAgIH1cblxuICAgIHJldHVybiBtb2RlICsgXCIoXCIgKyByZ2JhLnNsaWNlKDAsIG1vZGUgPT09ICdyZ2InID8gMyA6IDQpLmpvaW4oJywnKSArIFwiKVwiO1xuICB9O1xuXG4gIHZhciByZ2IyY3NzXzEgPSByZ2IyY3NzO1xuICB2YXIgdW5wYWNrJDcgPSB1dGlscy51bnBhY2s7XG4gIHZhciByb3VuZCQxID0gTWF0aC5yb3VuZDtcblxuICB2YXIgaHNsMnJnYiA9IGZ1bmN0aW9uIGhzbDJyZ2IoKSB7XG4gICAgdmFyIGFzc2lnbjtcbiAgICB2YXIgYXJncyA9IFtdLFxuICAgICAgICBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGxlbi0tKSB7XG4gICAgICBhcmdzW2xlbl0gPSBhcmd1bWVudHNbbGVuXTtcbiAgICB9XG5cbiAgICBhcmdzID0gdW5wYWNrJDcoYXJncywgJ2hzbCcpO1xuICAgIHZhciBoID0gYXJnc1swXTtcbiAgICB2YXIgcyA9IGFyZ3NbMV07XG4gICAgdmFyIGwgPSBhcmdzWzJdO1xuICAgIHZhciByLCBnLCBiO1xuXG4gICAgaWYgKHMgPT09IDApIHtcbiAgICAgIHIgPSBnID0gYiA9IGwgKiAyNTU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciB0MyA9IFswLCAwLCAwXTtcbiAgICAgIHZhciBjID0gWzAsIDAsIDBdO1xuICAgICAgdmFyIHQyID0gbCA8IDAuNSA/IGwgKiAoMSArIHMpIDogbCArIHMgLSBsICogcztcbiAgICAgIHZhciB0MSA9IDIgKiBsIC0gdDI7XG4gICAgICB2YXIgaF8gPSBoIC8gMzYwO1xuICAgICAgdDNbMF0gPSBoXyArIDEgLyAzO1xuICAgICAgdDNbMV0gPSBoXztcbiAgICAgIHQzWzJdID0gaF8gLSAxIC8gMztcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAzOyBpKyspIHtcbiAgICAgICAgaWYgKHQzW2ldIDwgMCkge1xuICAgICAgICAgIHQzW2ldICs9IDE7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodDNbaV0gPiAxKSB7XG4gICAgICAgICAgdDNbaV0gLT0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICg2ICogdDNbaV0gPCAxKSB7XG4gICAgICAgICAgY1tpXSA9IHQxICsgKHQyIC0gdDEpICogNiAqIHQzW2ldO1xuICAgICAgICB9IGVsc2UgaWYgKDIgKiB0M1tpXSA8IDEpIHtcbiAgICAgICAgICBjW2ldID0gdDI7XG4gICAgICAgIH0gZWxzZSBpZiAoMyAqIHQzW2ldIDwgMikge1xuICAgICAgICAgIGNbaV0gPSB0MSArICh0MiAtIHQxKSAqICgyIC8gMyAtIHQzW2ldKSAqIDY7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY1tpXSA9IHQxO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGFzc2lnbiA9IFtyb3VuZCQxKGNbMF0gKiAyNTUpLCByb3VuZCQxKGNbMV0gKiAyNTUpLCByb3VuZCQxKGNbMl0gKiAyNTUpXSwgciA9IGFzc2lnblswXSwgZyA9IGFzc2lnblsxXSwgYiA9IGFzc2lnblsyXTtcbiAgICB9XG5cbiAgICBpZiAoYXJncy5sZW5ndGggPiAzKSB7XG4gICAgICAvLyBrZWVwIGFscGhhIGNoYW5uZWxcbiAgICAgIHJldHVybiBbciwgZywgYiwgYXJnc1szXV07XG4gICAgfVxuXG4gICAgcmV0dXJuIFtyLCBnLCBiLCAxXTtcbiAgfTtcblxuICB2YXIgaHNsMnJnYl8xID0gaHNsMnJnYjtcbiAgdmFyIFJFX1JHQiA9IC9ecmdiXFwoXFxzKigtP1xcZCspLFxccyooLT9cXGQrKVxccyosXFxzKigtP1xcZCspXFxzKlxcKSQvO1xuICB2YXIgUkVfUkdCQSA9IC9ecmdiYVxcKFxccyooLT9cXGQrKSxcXHMqKC0/XFxkKylcXHMqLFxccyooLT9cXGQrKVxccyosXFxzKihbMDFdfFswMV0/XFwuXFxkKylcXCkkLztcbiAgdmFyIFJFX1JHQl9QQ1QgPSAvXnJnYlxcKFxccyooLT9cXGQrKD86XFwuXFxkKyk/KSUsXFxzKigtP1xcZCsoPzpcXC5cXGQrKT8pJVxccyosXFxzKigtP1xcZCsoPzpcXC5cXGQrKT8pJVxccypcXCkkLztcbiAgdmFyIFJFX1JHQkFfUENUID0gL15yZ2JhXFwoXFxzKigtP1xcZCsoPzpcXC5cXGQrKT8pJSxcXHMqKC0/XFxkKyg/OlxcLlxcZCspPyklXFxzKixcXHMqKC0/XFxkKyg/OlxcLlxcZCspPyklXFxzKixcXHMqKFswMV18WzAxXT9cXC5cXGQrKVxcKSQvO1xuICB2YXIgUkVfSFNMID0gL15oc2xcXChcXHMqKC0/XFxkKyg/OlxcLlxcZCspPyksXFxzKigtP1xcZCsoPzpcXC5cXGQrKT8pJVxccyosXFxzKigtP1xcZCsoPzpcXC5cXGQrKT8pJVxccypcXCkkLztcbiAgdmFyIFJFX0hTTEEgPSAvXmhzbGFcXChcXHMqKC0/XFxkKyg/OlxcLlxcZCspPyksXFxzKigtP1xcZCsoPzpcXC5cXGQrKT8pJVxccyosXFxzKigtP1xcZCsoPzpcXC5cXGQrKT8pJVxccyosXFxzKihbMDFdfFswMV0/XFwuXFxkKylcXCkkLztcbiAgdmFyIHJvdW5kJDIgPSBNYXRoLnJvdW5kO1xuXG4gIHZhciBjc3MycmdiID0gZnVuY3Rpb24gY3NzMnJnYihjc3MpIHtcbiAgICBjc3MgPSBjc3MudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gICAgdmFyIG07XG5cbiAgICBpZiAoaW5wdXQuZm9ybWF0Lm5hbWVkKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gaW5wdXQuZm9ybWF0Lm5hbWVkKGNzcyk7XG4gICAgICB9IGNhdGNoIChlKSB7Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICB9XG4gICAgfSAvLyByZ2IoMjUwLDIwLDApXG5cblxuICAgIGlmIChtID0gY3NzLm1hdGNoKFJFX1JHQikpIHtcbiAgICAgIHZhciByZ2IgPSBtLnNsaWNlKDEsIDQpO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDM7IGkrKykge1xuICAgICAgICByZ2JbaV0gPSArcmdiW2ldO1xuICAgICAgfVxuXG4gICAgICByZ2JbM10gPSAxOyAvLyBkZWZhdWx0IGFscGhhXG5cbiAgICAgIHJldHVybiByZ2I7XG4gICAgfSAvLyByZ2JhKDI1MCwyMCwwLDAuNClcblxuXG4gICAgaWYgKG0gPSBjc3MubWF0Y2goUkVfUkdCQSkpIHtcbiAgICAgIHZhciByZ2IkMSA9IG0uc2xpY2UoMSwgNSk7XG5cbiAgICAgIGZvciAodmFyIGkkMSA9IDA7IGkkMSA8IDQ7IGkkMSsrKSB7XG4gICAgICAgIHJnYiQxW2kkMV0gPSArcmdiJDFbaSQxXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJnYiQxO1xuICAgIH0gLy8gcmdiKDEwMCUsMCUsMCUpXG5cblxuICAgIGlmIChtID0gY3NzLm1hdGNoKFJFX1JHQl9QQ1QpKSB7XG4gICAgICB2YXIgcmdiJDIgPSBtLnNsaWNlKDEsIDQpO1xuXG4gICAgICBmb3IgKHZhciBpJDIgPSAwOyBpJDIgPCAzOyBpJDIrKykge1xuICAgICAgICByZ2IkMltpJDJdID0gcm91bmQkMihyZ2IkMltpJDJdICogMi41NSk7XG4gICAgICB9XG5cbiAgICAgIHJnYiQyWzNdID0gMTsgLy8gZGVmYXVsdCBhbHBoYVxuXG4gICAgICByZXR1cm4gcmdiJDI7XG4gICAgfSAvLyByZ2JhKDEwMCUsMCUsMCUsMC40KVxuXG5cbiAgICBpZiAobSA9IGNzcy5tYXRjaChSRV9SR0JBX1BDVCkpIHtcbiAgICAgIHZhciByZ2IkMyA9IG0uc2xpY2UoMSwgNSk7XG5cbiAgICAgIGZvciAodmFyIGkkMyA9IDA7IGkkMyA8IDM7IGkkMysrKSB7XG4gICAgICAgIHJnYiQzW2kkM10gPSByb3VuZCQyKHJnYiQzW2kkM10gKiAyLjU1KTtcbiAgICAgIH1cblxuICAgICAgcmdiJDNbM10gPSArcmdiJDNbM107XG4gICAgICByZXR1cm4gcmdiJDM7XG4gICAgfSAvLyBoc2woMCwxMDAlLDUwJSlcblxuXG4gICAgaWYgKG0gPSBjc3MubWF0Y2goUkVfSFNMKSkge1xuICAgICAgdmFyIGhzbCA9IG0uc2xpY2UoMSwgNCk7XG4gICAgICBoc2xbMV0gKj0gMC4wMTtcbiAgICAgIGhzbFsyXSAqPSAwLjAxO1xuICAgICAgdmFyIHJnYiQ0ID0gaHNsMnJnYl8xKGhzbCk7XG4gICAgICByZ2IkNFszXSA9IDE7XG4gICAgICByZXR1cm4gcmdiJDQ7XG4gICAgfSAvLyBoc2xhKDAsMTAwJSw1MCUsMC41KVxuXG5cbiAgICBpZiAobSA9IGNzcy5tYXRjaChSRV9IU0xBKSkge1xuICAgICAgdmFyIGhzbCQxID0gbS5zbGljZSgxLCA0KTtcbiAgICAgIGhzbCQxWzFdICo9IDAuMDE7XG4gICAgICBoc2wkMVsyXSAqPSAwLjAxO1xuICAgICAgdmFyIHJnYiQ1ID0gaHNsMnJnYl8xKGhzbCQxKTtcbiAgICAgIHJnYiQ1WzNdID0gK21bNF07IC8vIGRlZmF1bHQgYWxwaGEgPSAxXG5cbiAgICAgIHJldHVybiByZ2IkNTtcbiAgICB9XG4gIH07XG5cbiAgY3NzMnJnYi50ZXN0ID0gZnVuY3Rpb24gKHMpIHtcbiAgICByZXR1cm4gUkVfUkdCLnRlc3QocykgfHwgUkVfUkdCQS50ZXN0KHMpIHx8IFJFX1JHQl9QQ1QudGVzdChzKSB8fCBSRV9SR0JBX1BDVC50ZXN0KHMpIHx8IFJFX0hTTC50ZXN0KHMpIHx8IFJFX0hTTEEudGVzdChzKTtcbiAgfTtcblxuICB2YXIgY3NzMnJnYl8xID0gY3NzMnJnYjtcbiAgdmFyIHR5cGUkMyA9IHV0aWxzLnR5cGU7XG5cbiAgQ29sb3JfMS5wcm90b3R5cGUuY3NzID0gZnVuY3Rpb24gKG1vZGUpIHtcbiAgICByZXR1cm4gcmdiMmNzc18xKHRoaXMuX3JnYiwgbW9kZSk7XG4gIH07XG5cbiAgY2hyb21hXzEuY3NzID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBhcmdzID0gW10sXG4gICAgICAgIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cbiAgICB3aGlsZSAobGVuLS0pIHtcbiAgICAgIGFyZ3NbbGVuXSA9IGFyZ3VtZW50c1tsZW5dO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KENvbG9yXzEsIFtudWxsXS5jb25jYXQoYXJncywgWydjc3MnXSkpKSgpO1xuICB9O1xuXG4gIGlucHV0LmZvcm1hdC5jc3MgPSBjc3MycmdiXzE7XG4gIGlucHV0LmF1dG9kZXRlY3QucHVzaCh7XG4gICAgcDogNSxcbiAgICB0ZXN0OiBmdW5jdGlvbiB0ZXN0KGgpIHtcbiAgICAgIHZhciByZXN0ID0gW10sXG4gICAgICAgICAgbGVuID0gYXJndW1lbnRzLmxlbmd0aCAtIDE7XG5cbiAgICAgIHdoaWxlIChsZW4tLSA+IDApIHtcbiAgICAgICAgcmVzdFtsZW5dID0gYXJndW1lbnRzW2xlbiArIDFdO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXJlc3QubGVuZ3RoICYmIHR5cGUkMyhoKSA9PT0gJ3N0cmluZycgJiYgY3NzMnJnYl8xLnRlc3QoaCkpIHtcbiAgICAgICAgcmV0dXJuICdjc3MnO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHZhciB1bnBhY2skOCA9IHV0aWxzLnVucGFjaztcblxuICBpbnB1dC5mb3JtYXQuZ2wgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGFyZ3MgPSBbXSxcbiAgICAgICAgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcblxuICAgIHdoaWxlIChsZW4tLSkge1xuICAgICAgYXJnc1tsZW5dID0gYXJndW1lbnRzW2xlbl07XG4gICAgfVxuXG4gICAgdmFyIHJnYiA9IHVucGFjayQ4KGFyZ3MsICdyZ2JhJyk7XG4gICAgcmdiWzBdICo9IDI1NTtcbiAgICByZ2JbMV0gKj0gMjU1O1xuICAgIHJnYlsyXSAqPSAyNTU7XG4gICAgcmV0dXJuIHJnYjtcbiAgfTtcblxuICBjaHJvbWFfMS5nbCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYXJncyA9IFtdLFxuICAgICAgICBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGxlbi0tKSB7XG4gICAgICBhcmdzW2xlbl0gPSBhcmd1bWVudHNbbGVuXTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IChGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5hcHBseShDb2xvcl8xLCBbbnVsbF0uY29uY2F0KGFyZ3MsIFsnZ2wnXSkpKSgpO1xuICB9O1xuXG4gIENvbG9yXzEucHJvdG90eXBlLmdsID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciByZ2IgPSB0aGlzLl9yZ2I7XG4gICAgcmV0dXJuIFtyZ2JbMF0gLyAyNTUsIHJnYlsxXSAvIDI1NSwgcmdiWzJdIC8gMjU1LCByZ2JbM11dO1xuICB9O1xuXG4gIHZhciB1bnBhY2skOSA9IHV0aWxzLnVucGFjaztcblxuICB2YXIgcmdiMmhjZyA9IGZ1bmN0aW9uIHJnYjJoY2coKSB7XG4gICAgdmFyIGFyZ3MgPSBbXSxcbiAgICAgICAgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcblxuICAgIHdoaWxlIChsZW4tLSkge1xuICAgICAgYXJnc1tsZW5dID0gYXJndW1lbnRzW2xlbl07XG4gICAgfVxuXG4gICAgdmFyIHJlZiA9IHVucGFjayQ5KGFyZ3MsICdyZ2InKTtcbiAgICB2YXIgciA9IHJlZlswXTtcbiAgICB2YXIgZyA9IHJlZlsxXTtcbiAgICB2YXIgYiA9IHJlZlsyXTtcbiAgICB2YXIgbWluID0gTWF0aC5taW4ociwgZywgYik7XG4gICAgdmFyIG1heCA9IE1hdGgubWF4KHIsIGcsIGIpO1xuICAgIHZhciBkZWx0YSA9IG1heCAtIG1pbjtcbiAgICB2YXIgYyA9IGRlbHRhICogMTAwIC8gMjU1O1xuXG4gICAgdmFyIF9nID0gbWluIC8gKDI1NSAtIGRlbHRhKSAqIDEwMDtcblxuICAgIHZhciBoO1xuXG4gICAgaWYgKGRlbHRhID09PSAwKSB7XG4gICAgICBoID0gTnVtYmVyLk5hTjtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHIgPT09IG1heCkge1xuICAgICAgICBoID0gKGcgLSBiKSAvIGRlbHRhO1xuICAgICAgfVxuXG4gICAgICBpZiAoZyA9PT0gbWF4KSB7XG4gICAgICAgIGggPSAyICsgKGIgLSByKSAvIGRlbHRhO1xuICAgICAgfVxuXG4gICAgICBpZiAoYiA9PT0gbWF4KSB7XG4gICAgICAgIGggPSA0ICsgKHIgLSBnKSAvIGRlbHRhO1xuICAgICAgfVxuXG4gICAgICBoICo9IDYwO1xuXG4gICAgICBpZiAoaCA8IDApIHtcbiAgICAgICAgaCArPSAzNjA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFtoLCBjLCBfZ107XG4gIH07XG5cbiAgdmFyIHJnYjJoY2dfMSA9IHJnYjJoY2c7XG4gIHZhciB1bnBhY2skYSA9IHV0aWxzLnVucGFjaztcbiAgdmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbiAgLypcbiAgICogdGhpcyBpcyBiYXNpY2FsbHkganVzdCBIU1Ygd2l0aCBzb21lIG1pbm9yIHR3ZWFrc1xuICAgKlxuICAgKiBodWUuLiBbMC4uMzYwXVxuICAgKiBjaHJvbWEgLi4gWzAuLjFdXG4gICAqIGdyYXluZXNzIC4uIFswLi4xXVxuICAgKi9cblxuICB2YXIgaGNnMnJnYiA9IGZ1bmN0aW9uIGhjZzJyZ2IoKSB7XG4gICAgdmFyIGFzc2lnbiwgYXNzaWduJDEsIGFzc2lnbiQyLCBhc3NpZ24kMywgYXNzaWduJDQsIGFzc2lnbiQ1O1xuICAgIHZhciBhcmdzID0gW10sXG4gICAgICAgIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cbiAgICB3aGlsZSAobGVuLS0pIHtcbiAgICAgIGFyZ3NbbGVuXSA9IGFyZ3VtZW50c1tsZW5dO1xuICAgIH1cblxuICAgIGFyZ3MgPSB1bnBhY2skYShhcmdzLCAnaGNnJyk7XG4gICAgdmFyIGggPSBhcmdzWzBdO1xuICAgIHZhciBjID0gYXJnc1sxXTtcbiAgICB2YXIgX2cgPSBhcmdzWzJdO1xuICAgIHZhciByLCBnLCBiO1xuICAgIF9nID0gX2cgKiAyNTU7XG5cbiAgICB2YXIgX2MgPSBjICogMjU1O1xuXG4gICAgaWYgKGMgPT09IDApIHtcbiAgICAgIHIgPSBnID0gYiA9IF9nO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaCA9PT0gMzYwKSB7XG4gICAgICAgIGggPSAwO1xuICAgICAgfVxuXG4gICAgICBpZiAoaCA+IDM2MCkge1xuICAgICAgICBoIC09IDM2MDtcbiAgICAgIH1cblxuICAgICAgaWYgKGggPCAwKSB7XG4gICAgICAgIGggKz0gMzYwO1xuICAgICAgfVxuXG4gICAgICBoIC89IDYwO1xuICAgICAgdmFyIGkgPSBmbG9vcihoKTtcbiAgICAgIHZhciBmID0gaCAtIGk7XG4gICAgICB2YXIgcCA9IF9nICogKDEgLSBjKTtcbiAgICAgIHZhciBxID0gcCArIF9jICogKDEgLSBmKTtcbiAgICAgIHZhciB0ID0gcCArIF9jICogZjtcbiAgICAgIHZhciB2ID0gcCArIF9jO1xuXG4gICAgICBzd2l0Y2ggKGkpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgIGFzc2lnbiA9IFt2LCB0LCBwXSwgciA9IGFzc2lnblswXSwgZyA9IGFzc2lnblsxXSwgYiA9IGFzc2lnblsyXTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgYXNzaWduJDEgPSBbcSwgdiwgcF0sIHIgPSBhc3NpZ24kMVswXSwgZyA9IGFzc2lnbiQxWzFdLCBiID0gYXNzaWduJDFbMl07XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIGFzc2lnbiQyID0gW3AsIHYsIHRdLCByID0gYXNzaWduJDJbMF0sIGcgPSBhc3NpZ24kMlsxXSwgYiA9IGFzc2lnbiQyWzJdO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBhc3NpZ24kMyA9IFtwLCBxLCB2XSwgciA9IGFzc2lnbiQzWzBdLCBnID0gYXNzaWduJDNbMV0sIGIgPSBhc3NpZ24kM1syXTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgYXNzaWduJDQgPSBbdCwgcCwgdl0sIHIgPSBhc3NpZ24kNFswXSwgZyA9IGFzc2lnbiQ0WzFdLCBiID0gYXNzaWduJDRbMl07XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIGFzc2lnbiQ1ID0gW3YsIHAsIHFdLCByID0gYXNzaWduJDVbMF0sIGcgPSBhc3NpZ24kNVsxXSwgYiA9IGFzc2lnbiQ1WzJdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBbciwgZywgYiwgYXJncy5sZW5ndGggPiAzID8gYXJnc1szXSA6IDFdO1xuICB9O1xuXG4gIHZhciBoY2cycmdiXzEgPSBoY2cycmdiO1xuICB2YXIgdW5wYWNrJGIgPSB1dGlscy51bnBhY2s7XG4gIHZhciB0eXBlJDQgPSB1dGlscy50eXBlO1xuXG4gIENvbG9yXzEucHJvdG90eXBlLmhjZyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gcmdiMmhjZ18xKHRoaXMuX3JnYik7XG4gIH07XG5cbiAgY2hyb21hXzEuaGNnID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBhcmdzID0gW10sXG4gICAgICAgIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cbiAgICB3aGlsZSAobGVuLS0pIHtcbiAgICAgIGFyZ3NbbGVuXSA9IGFyZ3VtZW50c1tsZW5dO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KENvbG9yXzEsIFtudWxsXS5jb25jYXQoYXJncywgWydoY2cnXSkpKSgpO1xuICB9O1xuXG4gIGlucHV0LmZvcm1hdC5oY2cgPSBoY2cycmdiXzE7XG4gIGlucHV0LmF1dG9kZXRlY3QucHVzaCh7XG4gICAgcDogMSxcbiAgICB0ZXN0OiBmdW5jdGlvbiB0ZXN0KCkge1xuICAgICAgdmFyIGFyZ3MgPSBbXSxcbiAgICAgICAgICBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgICB3aGlsZSAobGVuLS0pIHtcbiAgICAgICAgYXJnc1tsZW5dID0gYXJndW1lbnRzW2xlbl07XG4gICAgICB9XG5cbiAgICAgIGFyZ3MgPSB1bnBhY2skYihhcmdzLCAnaGNnJyk7XG5cbiAgICAgIGlmICh0eXBlJDQoYXJncykgPT09ICdhcnJheScgJiYgYXJncy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgcmV0dXJuICdoY2cnO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHZhciB1bnBhY2skYyA9IHV0aWxzLnVucGFjaztcbiAgdmFyIGxhc3QkNCA9IHV0aWxzLmxhc3Q7XG4gIHZhciByb3VuZCQzID0gTWF0aC5yb3VuZDtcblxuICB2YXIgcmdiMmhleCA9IGZ1bmN0aW9uIHJnYjJoZXgoKSB7XG4gICAgdmFyIGFyZ3MgPSBbXSxcbiAgICAgICAgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcblxuICAgIHdoaWxlIChsZW4tLSkge1xuICAgICAgYXJnc1tsZW5dID0gYXJndW1lbnRzW2xlbl07XG4gICAgfVxuXG4gICAgdmFyIHJlZiA9IHVucGFjayRjKGFyZ3MsICdyZ2JhJyk7XG4gICAgdmFyIHIgPSByZWZbMF07XG4gICAgdmFyIGcgPSByZWZbMV07XG4gICAgdmFyIGIgPSByZWZbMl07XG4gICAgdmFyIGEgPSByZWZbM107XG4gICAgdmFyIG1vZGUgPSBsYXN0JDQoYXJncykgfHwgJ2F1dG8nO1xuXG4gICAgaWYgKGEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgYSA9IDE7XG4gICAgfVxuXG4gICAgaWYgKG1vZGUgPT09ICdhdXRvJykge1xuICAgICAgbW9kZSA9IGEgPCAxID8gJ3JnYmEnIDogJ3JnYic7XG4gICAgfVxuXG4gICAgciA9IHJvdW5kJDMocik7XG4gICAgZyA9IHJvdW5kJDMoZyk7XG4gICAgYiA9IHJvdW5kJDMoYik7XG4gICAgdmFyIHUgPSByIDw8IDE2IHwgZyA8PCA4IHwgYjtcbiAgICB2YXIgc3RyID0gXCIwMDAwMDBcIiArIHUudG9TdHJpbmcoMTYpOyAvLyMudG9VcHBlckNhc2UoKTtcblxuICAgIHN0ciA9IHN0ci5zdWJzdHIoc3RyLmxlbmd0aCAtIDYpO1xuICAgIHZhciBoeGEgPSAnMCcgKyByb3VuZCQzKGEgKiAyNTUpLnRvU3RyaW5nKDE2KTtcbiAgICBoeGEgPSBoeGEuc3Vic3RyKGh4YS5sZW5ndGggLSAyKTtcblxuICAgIHN3aXRjaCAobW9kZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICBjYXNlICdyZ2JhJzpcbiAgICAgICAgcmV0dXJuIFwiI1wiICsgc3RyICsgaHhhO1xuXG4gICAgICBjYXNlICdhcmdiJzpcbiAgICAgICAgcmV0dXJuIFwiI1wiICsgaHhhICsgc3RyO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gXCIjXCIgKyBzdHI7XG4gICAgfVxuICB9O1xuXG4gIHZhciByZ2IyaGV4XzEgPSByZ2IyaGV4O1xuICB2YXIgUkVfSEVYID0gL14jPyhbQS1GYS1mMC05XXs2fXxbQS1GYS1mMC05XXszfSkkLztcbiAgdmFyIFJFX0hFWEEgPSAvXiM/KFtBLUZhLWYwLTldezh9fFtBLUZhLWYwLTldezR9KSQvO1xuXG4gIHZhciBoZXgycmdiID0gZnVuY3Rpb24gaGV4MnJnYihoZXgpIHtcbiAgICBpZiAoaGV4Lm1hdGNoKFJFX0hFWCkpIHtcbiAgICAgIC8vIHJlbW92ZSBvcHRpb25hbCBsZWFkaW5nICNcbiAgICAgIGlmIChoZXgubGVuZ3RoID09PSA0IHx8IGhleC5sZW5ndGggPT09IDcpIHtcbiAgICAgICAgaGV4ID0gaGV4LnN1YnN0cigxKTtcbiAgICAgIH0gLy8gZXhwYW5kIHNob3J0LW5vdGF0aW9uIHRvIGZ1bGwgc2l4LWRpZ2l0XG5cblxuICAgICAgaWYgKGhleC5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgaGV4ID0gaGV4LnNwbGl0KCcnKTtcbiAgICAgICAgaGV4ID0gaGV4WzBdICsgaGV4WzBdICsgaGV4WzFdICsgaGV4WzFdICsgaGV4WzJdICsgaGV4WzJdO1xuICAgICAgfVxuXG4gICAgICB2YXIgdSA9IHBhcnNlSW50KGhleCwgMTYpO1xuICAgICAgdmFyIHIgPSB1ID4+IDE2O1xuICAgICAgdmFyIGcgPSB1ID4+IDggJiAweEZGO1xuICAgICAgdmFyIGIgPSB1ICYgMHhGRjtcbiAgICAgIHJldHVybiBbciwgZywgYiwgMV07XG4gICAgfSAvLyBtYXRjaCByZ2JhIGhleCBmb3JtYXQsIGVnICNGRjAwMDA3N1xuXG5cbiAgICBpZiAoaGV4Lm1hdGNoKFJFX0hFWEEpKSB7XG4gICAgICBpZiAoaGV4Lmxlbmd0aCA9PT0gNSB8fCBoZXgubGVuZ3RoID09PSA5KSB7XG4gICAgICAgIC8vIHJlbW92ZSBvcHRpb25hbCBsZWFkaW5nICNcbiAgICAgICAgaGV4ID0gaGV4LnN1YnN0cigxKTtcbiAgICAgIH0gLy8gZXhwYW5kIHNob3J0LW5vdGF0aW9uIHRvIGZ1bGwgZWlnaHQtZGlnaXRcblxuXG4gICAgICBpZiAoaGV4Lmxlbmd0aCA9PT0gNCkge1xuICAgICAgICBoZXggPSBoZXguc3BsaXQoJycpO1xuICAgICAgICBoZXggPSBoZXhbMF0gKyBoZXhbMF0gKyBoZXhbMV0gKyBoZXhbMV0gKyBoZXhbMl0gKyBoZXhbMl0gKyBoZXhbM10gKyBoZXhbM107XG4gICAgICB9XG5cbiAgICAgIHZhciB1JDEgPSBwYXJzZUludChoZXgsIDE2KTtcbiAgICAgIHZhciByJDEgPSB1JDEgPj4gMjQgJiAweEZGO1xuICAgICAgdmFyIGckMSA9IHUkMSA+PiAxNiAmIDB4RkY7XG4gICAgICB2YXIgYiQxID0gdSQxID4+IDggJiAweEZGO1xuICAgICAgdmFyIGEgPSBNYXRoLnJvdW5kKCh1JDEgJiAweEZGKSAvIDB4RkYgKiAxMDApIC8gMTAwO1xuICAgICAgcmV0dXJuIFtyJDEsIGckMSwgYiQxLCBhXTtcbiAgICB9IC8vIHdlIHVzZWQgdG8gY2hlY2sgZm9yIGNzcyBjb2xvcnMgaGVyZVxuICAgIC8vIGlmIF9pbnB1dC5jc3M/IGFuZCByZ2IgPSBfaW5wdXQuY3NzIGhleFxuICAgIC8vICAgICByZXR1cm4gcmdiXG5cblxuICAgIHRocm93IG5ldyBFcnJvcihcInVua25vd24gaGV4IGNvbG9yOiBcIiArIGhleCk7XG4gIH07XG5cbiAgdmFyIGhleDJyZ2JfMSA9IGhleDJyZ2I7XG4gIHZhciB0eXBlJDUgPSB1dGlscy50eXBlO1xuXG4gIENvbG9yXzEucHJvdG90eXBlLmhleCA9IGZ1bmN0aW9uIChtb2RlKSB7XG4gICAgcmV0dXJuIHJnYjJoZXhfMSh0aGlzLl9yZ2IsIG1vZGUpO1xuICB9O1xuXG4gIGNocm9tYV8xLmhleCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYXJncyA9IFtdLFxuICAgICAgICBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGxlbi0tKSB7XG4gICAgICBhcmdzW2xlbl0gPSBhcmd1bWVudHNbbGVuXTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IChGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5hcHBseShDb2xvcl8xLCBbbnVsbF0uY29uY2F0KGFyZ3MsIFsnaGV4J10pKSkoKTtcbiAgfTtcblxuICBpbnB1dC5mb3JtYXQuaGV4ID0gaGV4MnJnYl8xO1xuICBpbnB1dC5hdXRvZGV0ZWN0LnB1c2goe1xuICAgIHA6IDQsXG4gICAgdGVzdDogZnVuY3Rpb24gdGVzdChoKSB7XG4gICAgICB2YXIgcmVzdCA9IFtdLFxuICAgICAgICAgIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGggLSAxO1xuXG4gICAgICB3aGlsZSAobGVuLS0gPiAwKSB7XG4gICAgICAgIHJlc3RbbGVuXSA9IGFyZ3VtZW50c1tsZW4gKyAxXTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFyZXN0Lmxlbmd0aCAmJiB0eXBlJDUoaCkgPT09ICdzdHJpbmcnICYmIFszLCA0LCA1LCA2LCA3LCA4LCA5XS5pbmRleE9mKGgubGVuZ3RoKSA+PSAwKSB7XG4gICAgICAgIHJldHVybiAnaGV4JztcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICB2YXIgdW5wYWNrJGQgPSB1dGlscy51bnBhY2s7XG4gIHZhciBUV09QSSA9IHV0aWxzLlRXT1BJO1xuICB2YXIgbWluID0gTWF0aC5taW47XG4gIHZhciBzcXJ0ID0gTWF0aC5zcXJ0O1xuICB2YXIgYWNvcyA9IE1hdGguYWNvcztcblxuICB2YXIgcmdiMmhzaSA9IGZ1bmN0aW9uIHJnYjJoc2koKSB7XG4gICAgdmFyIGFyZ3MgPSBbXSxcbiAgICAgICAgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcblxuICAgIHdoaWxlIChsZW4tLSkge1xuICAgICAgYXJnc1tsZW5dID0gYXJndW1lbnRzW2xlbl07XG4gICAgfVxuICAgIC8qXG4gICAgYm9ycm93ZWQgZnJvbSBoZXJlOlxuICAgIGh0dHA6Ly9odW1tZXIuc3RhbmZvcmQuZWR1L211c2VpbmZvL2RvYy9leGFtcGxlcy9odW1kcnVtL2tleXNjYXBlMi9yZ2IyaHNpLmNwcFxuICAgICovXG5cblxuICAgIHZhciByZWYgPSB1bnBhY2skZChhcmdzLCAncmdiJyk7XG4gICAgdmFyIHIgPSByZWZbMF07XG4gICAgdmFyIGcgPSByZWZbMV07XG4gICAgdmFyIGIgPSByZWZbMl07XG4gICAgciAvPSAyNTU7XG4gICAgZyAvPSAyNTU7XG4gICAgYiAvPSAyNTU7XG4gICAgdmFyIGg7XG4gICAgdmFyIG1pbl8gPSBtaW4ociwgZywgYik7XG4gICAgdmFyIGkgPSAociArIGcgKyBiKSAvIDM7XG4gICAgdmFyIHMgPSBpID4gMCA/IDEgLSBtaW5fIC8gaSA6IDA7XG5cbiAgICBpZiAocyA9PT0gMCkge1xuICAgICAgaCA9IE5hTjtcbiAgICB9IGVsc2Uge1xuICAgICAgaCA9IChyIC0gZyArIChyIC0gYikpIC8gMjtcbiAgICAgIGggLz0gc3FydCgociAtIGcpICogKHIgLSBnKSArIChyIC0gYikgKiAoZyAtIGIpKTtcbiAgICAgIGggPSBhY29zKGgpO1xuXG4gICAgICBpZiAoYiA+IGcpIHtcbiAgICAgICAgaCA9IFRXT1BJIC0gaDtcbiAgICAgIH1cblxuICAgICAgaCAvPSBUV09QSTtcbiAgICB9XG5cbiAgICByZXR1cm4gW2ggKiAzNjAsIHMsIGldO1xuICB9O1xuXG4gIHZhciByZ2IyaHNpXzEgPSByZ2IyaHNpO1xuICB2YXIgdW5wYWNrJGUgPSB1dGlscy51bnBhY2s7XG4gIHZhciBsaW1pdCQxID0gdXRpbHMubGltaXQ7XG4gIHZhciBUV09QSSQxID0gdXRpbHMuVFdPUEk7XG4gIHZhciBQSVRISVJEID0gdXRpbHMuUElUSElSRDtcbiAgdmFyIGNvcyA9IE1hdGguY29zO1xuICAvKlxuICAgKiBodWUgWzAuLjM2MF1cbiAgICogc2F0dXJhdGlvbiBbMC4uMV1cbiAgICogaW50ZW5zaXR5IFswLi4xXVxuICAgKi9cblxuICB2YXIgaHNpMnJnYiA9IGZ1bmN0aW9uIGhzaTJyZ2IoKSB7XG4gICAgdmFyIGFyZ3MgPSBbXSxcbiAgICAgICAgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcblxuICAgIHdoaWxlIChsZW4tLSkge1xuICAgICAgYXJnc1tsZW5dID0gYXJndW1lbnRzW2xlbl07XG4gICAgfVxuICAgIC8qXG4gICAgYm9ycm93ZWQgZnJvbSBoZXJlOlxuICAgIGh0dHA6Ly9odW1tZXIuc3RhbmZvcmQuZWR1L211c2VpbmZvL2RvYy9leGFtcGxlcy9odW1kcnVtL2tleXNjYXBlMi9oc2kycmdiLmNwcFxuICAgICovXG5cblxuICAgIGFyZ3MgPSB1bnBhY2skZShhcmdzLCAnaHNpJyk7XG4gICAgdmFyIGggPSBhcmdzWzBdO1xuICAgIHZhciBzID0gYXJnc1sxXTtcbiAgICB2YXIgaSA9IGFyZ3NbMl07XG4gICAgdmFyIHIsIGcsIGI7XG5cbiAgICBpZiAoaXNOYU4oaCkpIHtcbiAgICAgIGggPSAwO1xuICAgIH1cblxuICAgIGlmIChpc05hTihzKSkge1xuICAgICAgcyA9IDA7XG4gICAgfSAvLyBub3JtYWxpemUgaHVlXG5cblxuICAgIGlmIChoID4gMzYwKSB7XG4gICAgICBoIC09IDM2MDtcbiAgICB9XG5cbiAgICBpZiAoaCA8IDApIHtcbiAgICAgIGggKz0gMzYwO1xuICAgIH1cblxuICAgIGggLz0gMzYwO1xuXG4gICAgaWYgKGggPCAxIC8gMykge1xuICAgICAgYiA9ICgxIC0gcykgLyAzO1xuICAgICAgciA9ICgxICsgcyAqIGNvcyhUV09QSSQxICogaCkgLyBjb3MoUElUSElSRCAtIFRXT1BJJDEgKiBoKSkgLyAzO1xuICAgICAgZyA9IDEgLSAoYiArIHIpO1xuICAgIH0gZWxzZSBpZiAoaCA8IDIgLyAzKSB7XG4gICAgICBoIC09IDEgLyAzO1xuICAgICAgciA9ICgxIC0gcykgLyAzO1xuICAgICAgZyA9ICgxICsgcyAqIGNvcyhUV09QSSQxICogaCkgLyBjb3MoUElUSElSRCAtIFRXT1BJJDEgKiBoKSkgLyAzO1xuICAgICAgYiA9IDEgLSAociArIGcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBoIC09IDIgLyAzO1xuICAgICAgZyA9ICgxIC0gcykgLyAzO1xuICAgICAgYiA9ICgxICsgcyAqIGNvcyhUV09QSSQxICogaCkgLyBjb3MoUElUSElSRCAtIFRXT1BJJDEgKiBoKSkgLyAzO1xuICAgICAgciA9IDEgLSAoZyArIGIpO1xuICAgIH1cblxuICAgIHIgPSBsaW1pdCQxKGkgKiByICogMyk7XG4gICAgZyA9IGxpbWl0JDEoaSAqIGcgKiAzKTtcbiAgICBiID0gbGltaXQkMShpICogYiAqIDMpO1xuICAgIHJldHVybiBbciAqIDI1NSwgZyAqIDI1NSwgYiAqIDI1NSwgYXJncy5sZW5ndGggPiAzID8gYXJnc1szXSA6IDFdO1xuICB9O1xuXG4gIHZhciBoc2kycmdiXzEgPSBoc2kycmdiO1xuICB2YXIgdW5wYWNrJGYgPSB1dGlscy51bnBhY2s7XG4gIHZhciB0eXBlJDYgPSB1dGlscy50eXBlO1xuXG4gIENvbG9yXzEucHJvdG90eXBlLmhzaSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gcmdiMmhzaV8xKHRoaXMuX3JnYik7XG4gIH07XG5cbiAgY2hyb21hXzEuaHNpID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBhcmdzID0gW10sXG4gICAgICAgIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cbiAgICB3aGlsZSAobGVuLS0pIHtcbiAgICAgIGFyZ3NbbGVuXSA9IGFyZ3VtZW50c1tsZW5dO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KENvbG9yXzEsIFtudWxsXS5jb25jYXQoYXJncywgWydoc2knXSkpKSgpO1xuICB9O1xuXG4gIGlucHV0LmZvcm1hdC5oc2kgPSBoc2kycmdiXzE7XG4gIGlucHV0LmF1dG9kZXRlY3QucHVzaCh7XG4gICAgcDogMixcbiAgICB0ZXN0OiBmdW5jdGlvbiB0ZXN0KCkge1xuICAgICAgdmFyIGFyZ3MgPSBbXSxcbiAgICAgICAgICBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgICB3aGlsZSAobGVuLS0pIHtcbiAgICAgICAgYXJnc1tsZW5dID0gYXJndW1lbnRzW2xlbl07XG4gICAgICB9XG5cbiAgICAgIGFyZ3MgPSB1bnBhY2skZihhcmdzLCAnaHNpJyk7XG5cbiAgICAgIGlmICh0eXBlJDYoYXJncykgPT09ICdhcnJheScgJiYgYXJncy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgcmV0dXJuICdoc2knO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHZhciB1bnBhY2skZyA9IHV0aWxzLnVucGFjaztcbiAgdmFyIHR5cGUkNyA9IHV0aWxzLnR5cGU7XG5cbiAgQ29sb3JfMS5wcm90b3R5cGUuaHNsID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiByZ2IyaHNsXzEodGhpcy5fcmdiKTtcbiAgfTtcblxuICBjaHJvbWFfMS5oc2wgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGFyZ3MgPSBbXSxcbiAgICAgICAgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcblxuICAgIHdoaWxlIChsZW4tLSkge1xuICAgICAgYXJnc1tsZW5dID0gYXJndW1lbnRzW2xlbl07XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuYXBwbHkoQ29sb3JfMSwgW251bGxdLmNvbmNhdChhcmdzLCBbJ2hzbCddKSkpKCk7XG4gIH07XG5cbiAgaW5wdXQuZm9ybWF0LmhzbCA9IGhzbDJyZ2JfMTtcbiAgaW5wdXQuYXV0b2RldGVjdC5wdXNoKHtcbiAgICBwOiAyLFxuICAgIHRlc3Q6IGZ1bmN0aW9uIHRlc3QoKSB7XG4gICAgICB2YXIgYXJncyA9IFtdLFxuICAgICAgICAgIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cbiAgICAgIHdoaWxlIChsZW4tLSkge1xuICAgICAgICBhcmdzW2xlbl0gPSBhcmd1bWVudHNbbGVuXTtcbiAgICAgIH1cblxuICAgICAgYXJncyA9IHVucGFjayRnKGFyZ3MsICdoc2wnKTtcblxuICAgICAgaWYgKHR5cGUkNyhhcmdzKSA9PT0gJ2FycmF5JyAmJiBhcmdzLmxlbmd0aCA9PT0gMykge1xuICAgICAgICByZXR1cm4gJ2hzbCc7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgdmFyIHVucGFjayRoID0gdXRpbHMudW5wYWNrO1xuICB2YXIgbWluJDEgPSBNYXRoLm1pbjtcbiAgdmFyIG1heCQxID0gTWF0aC5tYXg7XG4gIC8qXG4gICAqIHN1cHBvcnRlZCBhcmd1bWVudHM6XG4gICAqIC0gcmdiMmhzdihyLGcsYilcbiAgICogLSByZ2IyaHN2KFtyLGcsYl0pXG4gICAqIC0gcmdiMmhzdih7cixnLGJ9KVxuICAgKi9cblxuICB2YXIgcmdiMmhzbCQxID0gZnVuY3Rpb24gcmdiMmhzbCQxKCkge1xuICAgIHZhciBhcmdzID0gW10sXG4gICAgICAgIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cbiAgICB3aGlsZSAobGVuLS0pIHtcbiAgICAgIGFyZ3NbbGVuXSA9IGFyZ3VtZW50c1tsZW5dO1xuICAgIH1cblxuICAgIGFyZ3MgPSB1bnBhY2skaChhcmdzLCAncmdiJyk7XG4gICAgdmFyIHIgPSBhcmdzWzBdO1xuICAgIHZhciBnID0gYXJnc1sxXTtcbiAgICB2YXIgYiA9IGFyZ3NbMl07XG4gICAgdmFyIG1pbl8gPSBtaW4kMShyLCBnLCBiKTtcbiAgICB2YXIgbWF4XyA9IG1heCQxKHIsIGcsIGIpO1xuICAgIHZhciBkZWx0YSA9IG1heF8gLSBtaW5fO1xuICAgIHZhciBoLCBzLCB2O1xuICAgIHYgPSBtYXhfIC8gMjU1LjA7XG5cbiAgICBpZiAobWF4XyA9PT0gMCkge1xuICAgICAgaCA9IE51bWJlci5OYU47XG4gICAgICBzID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgcyA9IGRlbHRhIC8gbWF4XztcblxuICAgICAgaWYgKHIgPT09IG1heF8pIHtcbiAgICAgICAgaCA9IChnIC0gYikgLyBkZWx0YTtcbiAgICAgIH1cblxuICAgICAgaWYgKGcgPT09IG1heF8pIHtcbiAgICAgICAgaCA9IDIgKyAoYiAtIHIpIC8gZGVsdGE7XG4gICAgICB9XG5cbiAgICAgIGlmIChiID09PSBtYXhfKSB7XG4gICAgICAgIGggPSA0ICsgKHIgLSBnKSAvIGRlbHRhO1xuICAgICAgfVxuXG4gICAgICBoICo9IDYwO1xuXG4gICAgICBpZiAoaCA8IDApIHtcbiAgICAgICAgaCArPSAzNjA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFtoLCBzLCB2XTtcbiAgfTtcblxuICB2YXIgcmdiMmhzdiA9IHJnYjJoc2wkMTtcbiAgdmFyIHVucGFjayRpID0gdXRpbHMudW5wYWNrO1xuICB2YXIgZmxvb3IkMSA9IE1hdGguZmxvb3I7XG5cbiAgdmFyIGhzdjJyZ2IgPSBmdW5jdGlvbiBoc3YycmdiKCkge1xuICAgIHZhciBhc3NpZ24sIGFzc2lnbiQxLCBhc3NpZ24kMiwgYXNzaWduJDMsIGFzc2lnbiQ0LCBhc3NpZ24kNTtcbiAgICB2YXIgYXJncyA9IFtdLFxuICAgICAgICBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGxlbi0tKSB7XG4gICAgICBhcmdzW2xlbl0gPSBhcmd1bWVudHNbbGVuXTtcbiAgICB9XG5cbiAgICBhcmdzID0gdW5wYWNrJGkoYXJncywgJ2hzdicpO1xuICAgIHZhciBoID0gYXJnc1swXTtcbiAgICB2YXIgcyA9IGFyZ3NbMV07XG4gICAgdmFyIHYgPSBhcmdzWzJdO1xuICAgIHZhciByLCBnLCBiO1xuICAgIHYgKj0gMjU1O1xuXG4gICAgaWYgKHMgPT09IDApIHtcbiAgICAgIHIgPSBnID0gYiA9IHY7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChoID09PSAzNjApIHtcbiAgICAgICAgaCA9IDA7XG4gICAgICB9XG5cbiAgICAgIGlmIChoID4gMzYwKSB7XG4gICAgICAgIGggLT0gMzYwO1xuICAgICAgfVxuXG4gICAgICBpZiAoaCA8IDApIHtcbiAgICAgICAgaCArPSAzNjA7XG4gICAgICB9XG5cbiAgICAgIGggLz0gNjA7XG4gICAgICB2YXIgaSA9IGZsb29yJDEoaCk7XG4gICAgICB2YXIgZiA9IGggLSBpO1xuICAgICAgdmFyIHAgPSB2ICogKDEgLSBzKTtcbiAgICAgIHZhciBxID0gdiAqICgxIC0gcyAqIGYpO1xuICAgICAgdmFyIHQgPSB2ICogKDEgLSBzICogKDEgLSBmKSk7XG5cbiAgICAgIHN3aXRjaCAoaSkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgYXNzaWduID0gW3YsIHQsIHBdLCByID0gYXNzaWduWzBdLCBnID0gYXNzaWduWzFdLCBiID0gYXNzaWduWzJdO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBhc3NpZ24kMSA9IFtxLCB2LCBwXSwgciA9IGFzc2lnbiQxWzBdLCBnID0gYXNzaWduJDFbMV0sIGIgPSBhc3NpZ24kMVsyXTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgYXNzaWduJDIgPSBbcCwgdiwgdF0sIHIgPSBhc3NpZ24kMlswXSwgZyA9IGFzc2lnbiQyWzFdLCBiID0gYXNzaWduJDJbMl07XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIGFzc2lnbiQzID0gW3AsIHEsIHZdLCByID0gYXNzaWduJDNbMF0sIGcgPSBhc3NpZ24kM1sxXSwgYiA9IGFzc2lnbiQzWzJdO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBhc3NpZ24kNCA9IFt0LCBwLCB2XSwgciA9IGFzc2lnbiQ0WzBdLCBnID0gYXNzaWduJDRbMV0sIGIgPSBhc3NpZ24kNFsyXTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgYXNzaWduJDUgPSBbdiwgcCwgcV0sIHIgPSBhc3NpZ24kNVswXSwgZyA9IGFzc2lnbiQ1WzFdLCBiID0gYXNzaWduJDVbMl07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFtyLCBnLCBiLCBhcmdzLmxlbmd0aCA+IDMgPyBhcmdzWzNdIDogMV07XG4gIH07XG5cbiAgdmFyIGhzdjJyZ2JfMSA9IGhzdjJyZ2I7XG4gIHZhciB1bnBhY2skaiA9IHV0aWxzLnVucGFjaztcbiAgdmFyIHR5cGUkOCA9IHV0aWxzLnR5cGU7XG5cbiAgQ29sb3JfMS5wcm90b3R5cGUuaHN2ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiByZ2IyaHN2KHRoaXMuX3JnYik7XG4gIH07XG5cbiAgY2hyb21hXzEuaHN2ID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBhcmdzID0gW10sXG4gICAgICAgIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cbiAgICB3aGlsZSAobGVuLS0pIHtcbiAgICAgIGFyZ3NbbGVuXSA9IGFyZ3VtZW50c1tsZW5dO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KENvbG9yXzEsIFtudWxsXS5jb25jYXQoYXJncywgWydoc3YnXSkpKSgpO1xuICB9O1xuXG4gIGlucHV0LmZvcm1hdC5oc3YgPSBoc3YycmdiXzE7XG4gIGlucHV0LmF1dG9kZXRlY3QucHVzaCh7XG4gICAgcDogMixcbiAgICB0ZXN0OiBmdW5jdGlvbiB0ZXN0KCkge1xuICAgICAgdmFyIGFyZ3MgPSBbXSxcbiAgICAgICAgICBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgICB3aGlsZSAobGVuLS0pIHtcbiAgICAgICAgYXJnc1tsZW5dID0gYXJndW1lbnRzW2xlbl07XG4gICAgICB9XG5cbiAgICAgIGFyZ3MgPSB1bnBhY2skaihhcmdzLCAnaHN2Jyk7XG5cbiAgICAgIGlmICh0eXBlJDgoYXJncykgPT09ICdhcnJheScgJiYgYXJncy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgcmV0dXJuICdoc3YnO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHZhciBsYWJDb25zdGFudHMgPSB7XG4gICAgLy8gQ29ycmVzcG9uZHMgcm91Z2hseSB0byBSR0IgYnJpZ2h0ZXIvZGFya2VyXG4gICAgS246IDE4LFxuICAgIC8vIEQ2NSBzdGFuZGFyZCByZWZlcmVudFxuICAgIFhuOiAwLjk1MDQ3MCxcbiAgICBZbjogMSxcbiAgICBabjogMS4wODg4MzAsXG4gICAgdDA6IDAuMTM3OTMxMDM0LFxuICAgIC8vIDQgLyAyOVxuICAgIHQxOiAwLjIwNjg5NjU1MixcbiAgICAvLyA2IC8gMjlcbiAgICB0MjogMC4xMjg0MTg1NSxcbiAgICAvLyAzICogdDEgKiB0MVxuICAgIHQzOiAwLjAwODg1NjQ1MiAvLyB0MSAqIHQxICogdDFcblxuICB9O1xuICB2YXIgdW5wYWNrJGsgPSB1dGlscy51bnBhY2s7XG4gIHZhciBwb3cgPSBNYXRoLnBvdztcblxuICB2YXIgcmdiMmxhYiA9IGZ1bmN0aW9uIHJnYjJsYWIoKSB7XG4gICAgdmFyIGFyZ3MgPSBbXSxcbiAgICAgICAgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcblxuICAgIHdoaWxlIChsZW4tLSkge1xuICAgICAgYXJnc1tsZW5dID0gYXJndW1lbnRzW2xlbl07XG4gICAgfVxuXG4gICAgdmFyIHJlZiA9IHVucGFjayRrKGFyZ3MsICdyZ2InKTtcbiAgICB2YXIgciA9IHJlZlswXTtcbiAgICB2YXIgZyA9IHJlZlsxXTtcbiAgICB2YXIgYiA9IHJlZlsyXTtcbiAgICB2YXIgcmVmJDEgPSByZ2IyeHl6KHIsIGcsIGIpO1xuICAgIHZhciB4ID0gcmVmJDFbMF07XG4gICAgdmFyIHkgPSByZWYkMVsxXTtcbiAgICB2YXIgeiA9IHJlZiQxWzJdO1xuICAgIHZhciBsID0gMTE2ICogeSAtIDE2O1xuICAgIHJldHVybiBbbCA8IDAgPyAwIDogbCwgNTAwICogKHggLSB5KSwgMjAwICogKHkgLSB6KV07XG4gIH07XG5cbiAgdmFyIHJnYl94eXogPSBmdW5jdGlvbiByZ2JfeHl6KHIpIHtcbiAgICBpZiAoKHIgLz0gMjU1KSA8PSAwLjA0MDQ1KSB7XG4gICAgICByZXR1cm4gciAvIDEyLjkyO1xuICAgIH1cblxuICAgIHJldHVybiBwb3coKHIgKyAwLjA1NSkgLyAxLjA1NSwgMi40KTtcbiAgfTtcblxuICB2YXIgeHl6X2xhYiA9IGZ1bmN0aW9uIHh5el9sYWIodCkge1xuICAgIGlmICh0ID4gbGFiQ29uc3RhbnRzLnQzKSB7XG4gICAgICByZXR1cm4gcG93KHQsIDEgLyAzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdCAvIGxhYkNvbnN0YW50cy50MiArIGxhYkNvbnN0YW50cy50MDtcbiAgfTtcblxuICB2YXIgcmdiMnh5eiA9IGZ1bmN0aW9uIHJnYjJ4eXoociwgZywgYikge1xuICAgIHIgPSByZ2JfeHl6KHIpO1xuICAgIGcgPSByZ2JfeHl6KGcpO1xuICAgIGIgPSByZ2JfeHl6KGIpO1xuICAgIHZhciB4ID0geHl6X2xhYigoMC40MTI0NTY0ICogciArIDAuMzU3NTc2MSAqIGcgKyAwLjE4MDQzNzUgKiBiKSAvIGxhYkNvbnN0YW50cy5Ybik7XG4gICAgdmFyIHkgPSB4eXpfbGFiKCgwLjIxMjY3MjkgKiByICsgMC43MTUxNTIyICogZyArIDAuMDcyMTc1MCAqIGIpIC8gbGFiQ29uc3RhbnRzLlluKTtcbiAgICB2YXIgeiA9IHh5el9sYWIoKDAuMDE5MzMzOSAqIHIgKyAwLjExOTE5MjAgKiBnICsgMC45NTAzMDQxICogYikgLyBsYWJDb25zdGFudHMuWm4pO1xuICAgIHJldHVybiBbeCwgeSwgel07XG4gIH07XG5cbiAgdmFyIHJnYjJsYWJfMSA9IHJnYjJsYWI7XG4gIHZhciB1bnBhY2skbCA9IHV0aWxzLnVucGFjaztcbiAgdmFyIHBvdyQxID0gTWF0aC5wb3c7XG4gIC8qXG4gICAqIEwqIFswLi4xMDBdXG4gICAqIGEgWy0xMDAuLjEwMF1cbiAgICogYiBbLTEwMC4uMTAwXVxuICAgKi9cblxuICB2YXIgbGFiMnJnYiA9IGZ1bmN0aW9uIGxhYjJyZ2IoKSB7XG4gICAgdmFyIGFyZ3MgPSBbXSxcbiAgICAgICAgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcblxuICAgIHdoaWxlIChsZW4tLSkge1xuICAgICAgYXJnc1tsZW5dID0gYXJndW1lbnRzW2xlbl07XG4gICAgfVxuXG4gICAgYXJncyA9IHVucGFjayRsKGFyZ3MsICdsYWInKTtcbiAgICB2YXIgbCA9IGFyZ3NbMF07XG4gICAgdmFyIGEgPSBhcmdzWzFdO1xuICAgIHZhciBiID0gYXJnc1syXTtcbiAgICB2YXIgeCwgeSwgeiwgciwgZywgYl87XG4gICAgeSA9IChsICsgMTYpIC8gMTE2O1xuICAgIHggPSBpc05hTihhKSA/IHkgOiB5ICsgYSAvIDUwMDtcbiAgICB6ID0gaXNOYU4oYikgPyB5IDogeSAtIGIgLyAyMDA7XG4gICAgeSA9IGxhYkNvbnN0YW50cy5ZbiAqIGxhYl94eXooeSk7XG4gICAgeCA9IGxhYkNvbnN0YW50cy5YbiAqIGxhYl94eXooeCk7XG4gICAgeiA9IGxhYkNvbnN0YW50cy5abiAqIGxhYl94eXooeik7XG4gICAgciA9IHh5el9yZ2IoMy4yNDA0NTQyICogeCAtIDEuNTM3MTM4NSAqIHkgLSAwLjQ5ODUzMTQgKiB6KTsgLy8gRDY1IC0+IHNSR0JcblxuICAgIGcgPSB4eXpfcmdiKC0wLjk2OTI2NjAgKiB4ICsgMS44NzYwMTA4ICogeSArIDAuMDQxNTU2MCAqIHopO1xuICAgIGJfID0geHl6X3JnYigwLjA1NTY0MzQgKiB4IC0gMC4yMDQwMjU5ICogeSArIDEuMDU3MjI1MiAqIHopO1xuICAgIHJldHVybiBbciwgZywgYl8sIGFyZ3MubGVuZ3RoID4gMyA/IGFyZ3NbM10gOiAxXTtcbiAgfTtcblxuICB2YXIgeHl6X3JnYiA9IGZ1bmN0aW9uIHh5el9yZ2Iocikge1xuICAgIHJldHVybiAyNTUgKiAociA8PSAwLjAwMzA0ID8gMTIuOTIgKiByIDogMS4wNTUgKiBwb3ckMShyLCAxIC8gMi40KSAtIDAuMDU1KTtcbiAgfTtcblxuICB2YXIgbGFiX3h5eiA9IGZ1bmN0aW9uIGxhYl94eXoodCkge1xuICAgIHJldHVybiB0ID4gbGFiQ29uc3RhbnRzLnQxID8gdCAqIHQgKiB0IDogbGFiQ29uc3RhbnRzLnQyICogKHQgLSBsYWJDb25zdGFudHMudDApO1xuICB9O1xuXG4gIHZhciBsYWIycmdiXzEgPSBsYWIycmdiO1xuICB2YXIgdW5wYWNrJG0gPSB1dGlscy51bnBhY2s7XG4gIHZhciB0eXBlJDkgPSB1dGlscy50eXBlO1xuXG4gIENvbG9yXzEucHJvdG90eXBlLmxhYiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gcmdiMmxhYl8xKHRoaXMuX3JnYik7XG4gIH07XG5cbiAgY2hyb21hXzEubGFiID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBhcmdzID0gW10sXG4gICAgICAgIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cbiAgICB3aGlsZSAobGVuLS0pIHtcbiAgICAgIGFyZ3NbbGVuXSA9IGFyZ3VtZW50c1tsZW5dO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KENvbG9yXzEsIFtudWxsXS5jb25jYXQoYXJncywgWydsYWInXSkpKSgpO1xuICB9O1xuXG4gIGlucHV0LmZvcm1hdC5sYWIgPSBsYWIycmdiXzE7XG4gIGlucHV0LmF1dG9kZXRlY3QucHVzaCh7XG4gICAgcDogMixcbiAgICB0ZXN0OiBmdW5jdGlvbiB0ZXN0KCkge1xuICAgICAgdmFyIGFyZ3MgPSBbXSxcbiAgICAgICAgICBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgICB3aGlsZSAobGVuLS0pIHtcbiAgICAgICAgYXJnc1tsZW5dID0gYXJndW1lbnRzW2xlbl07XG4gICAgICB9XG5cbiAgICAgIGFyZ3MgPSB1bnBhY2skbShhcmdzLCAnbGFiJyk7XG5cbiAgICAgIGlmICh0eXBlJDkoYXJncykgPT09ICdhcnJheScgJiYgYXJncy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgcmV0dXJuICdsYWInO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHZhciB1bnBhY2skbiA9IHV0aWxzLnVucGFjaztcbiAgdmFyIFJBRDJERUcgPSB1dGlscy5SQUQyREVHO1xuICB2YXIgc3FydCQxID0gTWF0aC5zcXJ0O1xuICB2YXIgYXRhbjIgPSBNYXRoLmF0YW4yO1xuICB2YXIgcm91bmQkNCA9IE1hdGgucm91bmQ7XG5cbiAgdmFyIGxhYjJsY2ggPSBmdW5jdGlvbiBsYWIybGNoKCkge1xuICAgIHZhciBhcmdzID0gW10sXG4gICAgICAgIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cbiAgICB3aGlsZSAobGVuLS0pIHtcbiAgICAgIGFyZ3NbbGVuXSA9IGFyZ3VtZW50c1tsZW5dO1xuICAgIH1cblxuICAgIHZhciByZWYgPSB1bnBhY2skbihhcmdzLCAnbGFiJyk7XG4gICAgdmFyIGwgPSByZWZbMF07XG4gICAgdmFyIGEgPSByZWZbMV07XG4gICAgdmFyIGIgPSByZWZbMl07XG4gICAgdmFyIGMgPSBzcXJ0JDEoYSAqIGEgKyBiICogYik7XG4gICAgdmFyIGggPSAoYXRhbjIoYiwgYSkgKiBSQUQyREVHICsgMzYwKSAlIDM2MDtcblxuICAgIGlmIChyb3VuZCQ0KGMgKiAxMDAwMCkgPT09IDApIHtcbiAgICAgIGggPSBOdW1iZXIuTmFOO1xuICAgIH1cblxuICAgIHJldHVybiBbbCwgYywgaF07XG4gIH07XG5cbiAgdmFyIGxhYjJsY2hfMSA9IGxhYjJsY2g7XG4gIHZhciB1bnBhY2skbyA9IHV0aWxzLnVucGFjaztcblxuICB2YXIgcmdiMmxjaCA9IGZ1bmN0aW9uIHJnYjJsY2goKSB7XG4gICAgdmFyIGFyZ3MgPSBbXSxcbiAgICAgICAgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcblxuICAgIHdoaWxlIChsZW4tLSkge1xuICAgICAgYXJnc1tsZW5dID0gYXJndW1lbnRzW2xlbl07XG4gICAgfVxuXG4gICAgdmFyIHJlZiA9IHVucGFjayRvKGFyZ3MsICdyZ2InKTtcbiAgICB2YXIgciA9IHJlZlswXTtcbiAgICB2YXIgZyA9IHJlZlsxXTtcbiAgICB2YXIgYiA9IHJlZlsyXTtcbiAgICB2YXIgcmVmJDEgPSByZ2IybGFiXzEociwgZywgYik7XG4gICAgdmFyIGwgPSByZWYkMVswXTtcbiAgICB2YXIgYSA9IHJlZiQxWzFdO1xuICAgIHZhciBiXyA9IHJlZiQxWzJdO1xuICAgIHJldHVybiBsYWIybGNoXzEobCwgYSwgYl8pO1xuICB9O1xuXG4gIHZhciByZ2IybGNoXzEgPSByZ2IybGNoO1xuICB2YXIgdW5wYWNrJHAgPSB1dGlscy51bnBhY2s7XG4gIHZhciBERUcyUkFEID0gdXRpbHMuREVHMlJBRDtcbiAgdmFyIHNpbiA9IE1hdGguc2luO1xuICB2YXIgY29zJDEgPSBNYXRoLmNvcztcblxuICB2YXIgbGNoMmxhYiA9IGZ1bmN0aW9uIGxjaDJsYWIoKSB7XG4gICAgdmFyIGFyZ3MgPSBbXSxcbiAgICAgICAgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcblxuICAgIHdoaWxlIChsZW4tLSkge1xuICAgICAgYXJnc1tsZW5dID0gYXJndW1lbnRzW2xlbl07XG4gICAgfVxuICAgIC8qXG4gICAgQ29udmVydCBmcm9tIGEgcXVhbGl0YXRpdmUgcGFyYW1ldGVyIGggYW5kIGEgcXVhbnRpdGF0aXZlIHBhcmFtZXRlciBsIHRvIGEgMjQtYml0IHBpeGVsLlxuICAgIFRoZXNlIGZvcm11bGFzIHdlcmUgaW52ZW50ZWQgYnkgRGF2aWQgRGFscnltcGxlIHRvIG9idGFpbiBtYXhpbXVtIGNvbnRyYXN0IHdpdGhvdXQgZ29pbmdcbiAgICBvdXQgb2YgZ2FtdXQgaWYgdGhlIHBhcmFtZXRlcnMgYXJlIGluIHRoZSByYW5nZSAwLTEuXG4gICAgIEEgc2F0dXJhdGlvbiBtdWx0aXBsaWVyIHdhcyBhZGRlZCBieSBHcmVnb3IgQWlzY2hcbiAgICAqL1xuXG5cbiAgICB2YXIgcmVmID0gdW5wYWNrJHAoYXJncywgJ2xjaCcpO1xuICAgIHZhciBsID0gcmVmWzBdO1xuICAgIHZhciBjID0gcmVmWzFdO1xuICAgIHZhciBoID0gcmVmWzJdO1xuXG4gICAgaWYgKGlzTmFOKGgpKSB7XG4gICAgICBoID0gMDtcbiAgICB9XG5cbiAgICBoID0gaCAqIERFRzJSQUQ7XG4gICAgcmV0dXJuIFtsLCBjb3MkMShoKSAqIGMsIHNpbihoKSAqIGNdO1xuICB9O1xuXG4gIHZhciBsY2gybGFiXzEgPSBsY2gybGFiO1xuICB2YXIgdW5wYWNrJHEgPSB1dGlscy51bnBhY2s7XG5cbiAgdmFyIGxjaDJyZ2IgPSBmdW5jdGlvbiBsY2gycmdiKCkge1xuICAgIHZhciBhcmdzID0gW10sXG4gICAgICAgIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cbiAgICB3aGlsZSAobGVuLS0pIHtcbiAgICAgIGFyZ3NbbGVuXSA9IGFyZ3VtZW50c1tsZW5dO1xuICAgIH1cblxuICAgIGFyZ3MgPSB1bnBhY2skcShhcmdzLCAnbGNoJyk7XG4gICAgdmFyIGwgPSBhcmdzWzBdO1xuICAgIHZhciBjID0gYXJnc1sxXTtcbiAgICB2YXIgaCA9IGFyZ3NbMl07XG4gICAgdmFyIHJlZiA9IGxjaDJsYWJfMShsLCBjLCBoKTtcbiAgICB2YXIgTCA9IHJlZlswXTtcbiAgICB2YXIgYSA9IHJlZlsxXTtcbiAgICB2YXIgYl8gPSByZWZbMl07XG4gICAgdmFyIHJlZiQxID0gbGFiMnJnYl8xKEwsIGEsIGJfKTtcbiAgICB2YXIgciA9IHJlZiQxWzBdO1xuICAgIHZhciBnID0gcmVmJDFbMV07XG4gICAgdmFyIGIgPSByZWYkMVsyXTtcbiAgICByZXR1cm4gW3IsIGcsIGIsIGFyZ3MubGVuZ3RoID4gMyA/IGFyZ3NbM10gOiAxXTtcbiAgfTtcblxuICB2YXIgbGNoMnJnYl8xID0gbGNoMnJnYjtcbiAgdmFyIHVucGFjayRyID0gdXRpbHMudW5wYWNrO1xuXG4gIHZhciBoY2wycmdiID0gZnVuY3Rpb24gaGNsMnJnYigpIHtcbiAgICB2YXIgYXJncyA9IFtdLFxuICAgICAgICBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGxlbi0tKSB7XG4gICAgICBhcmdzW2xlbl0gPSBhcmd1bWVudHNbbGVuXTtcbiAgICB9XG5cbiAgICB2YXIgaGNsID0gdW5wYWNrJHIoYXJncywgJ2hjbCcpLnJldmVyc2UoKTtcbiAgICByZXR1cm4gbGNoMnJnYl8xLmFwcGx5KHZvaWQgMCwgaGNsKTtcbiAgfTtcblxuICB2YXIgaGNsMnJnYl8xID0gaGNsMnJnYjtcbiAgdmFyIHVucGFjayRzID0gdXRpbHMudW5wYWNrO1xuICB2YXIgdHlwZSRhID0gdXRpbHMudHlwZTtcblxuICBDb2xvcl8xLnByb3RvdHlwZS5sY2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHJnYjJsY2hfMSh0aGlzLl9yZ2IpO1xuICB9O1xuXG4gIENvbG9yXzEucHJvdG90eXBlLmhjbCA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gcmdiMmxjaF8xKHRoaXMuX3JnYikucmV2ZXJzZSgpO1xuICB9O1xuXG4gIGNocm9tYV8xLmxjaCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYXJncyA9IFtdLFxuICAgICAgICBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGxlbi0tKSB7XG4gICAgICBhcmdzW2xlbl0gPSBhcmd1bWVudHNbbGVuXTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IChGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5hcHBseShDb2xvcl8xLCBbbnVsbF0uY29uY2F0KGFyZ3MsIFsnbGNoJ10pKSkoKTtcbiAgfTtcblxuICBjaHJvbWFfMS5oY2wgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGFyZ3MgPSBbXSxcbiAgICAgICAgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcblxuICAgIHdoaWxlIChsZW4tLSkge1xuICAgICAgYXJnc1tsZW5dID0gYXJndW1lbnRzW2xlbl07XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuYXBwbHkoQ29sb3JfMSwgW251bGxdLmNvbmNhdChhcmdzLCBbJ2hjbCddKSkpKCk7XG4gIH07XG5cbiAgaW5wdXQuZm9ybWF0LmxjaCA9IGxjaDJyZ2JfMTtcbiAgaW5wdXQuZm9ybWF0LmhjbCA9IGhjbDJyZ2JfMTtcbiAgWydsY2gnLCAnaGNsJ10uZm9yRWFjaChmdW5jdGlvbiAobSkge1xuICAgIHJldHVybiBpbnB1dC5hdXRvZGV0ZWN0LnB1c2goe1xuICAgICAgcDogMixcbiAgICAgIHRlc3Q6IGZ1bmN0aW9uIHRlc3QoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sXG4gICAgICAgICAgICBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgICAgIHdoaWxlIChsZW4tLSkge1xuICAgICAgICAgIGFyZ3NbbGVuXSA9IGFyZ3VtZW50c1tsZW5dO1xuICAgICAgICB9XG5cbiAgICAgICAgYXJncyA9IHVucGFjayRzKGFyZ3MsIG0pO1xuXG4gICAgICAgIGlmICh0eXBlJGEoYXJncykgPT09ICdhcnJheScgJiYgYXJncy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICByZXR1cm4gbTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbiAgLyoqXG4gIFx0WDExIGNvbG9yIG5hbWVzXG4gICBcdGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtY29sb3IvI3N2Zy1jb2xvclxuICAqL1xuXG4gIHZhciB3M2N4MTEgPSB7XG4gICAgYWxpY2VibHVlOiAnI2YwZjhmZicsXG4gICAgYW50aXF1ZXdoaXRlOiAnI2ZhZWJkNycsXG4gICAgYXF1YTogJyMwMGZmZmYnLFxuICAgIGFxdWFtYXJpbmU6ICcjN2ZmZmQ0JyxcbiAgICBhenVyZTogJyNmMGZmZmYnLFxuICAgIGJlaWdlOiAnI2Y1ZjVkYycsXG4gICAgYmlzcXVlOiAnI2ZmZTRjNCcsXG4gICAgYmxhY2s6ICcjMDAwMDAwJyxcbiAgICBibGFuY2hlZGFsbW9uZDogJyNmZmViY2QnLFxuICAgIGJsdWU6ICcjMDAwMGZmJyxcbiAgICBibHVldmlvbGV0OiAnIzhhMmJlMicsXG4gICAgYnJvd246ICcjYTUyYTJhJyxcbiAgICBidXJseXdvb2Q6ICcjZGViODg3JyxcbiAgICBjYWRldGJsdWU6ICcjNWY5ZWEwJyxcbiAgICBjaGFydHJldXNlOiAnIzdmZmYwMCcsXG4gICAgY2hvY29sYXRlOiAnI2QyNjkxZScsXG4gICAgY29yYWw6ICcjZmY3ZjUwJyxcbiAgICBjb3JuZmxvd2VyOiAnIzY0OTVlZCcsXG4gICAgY29ybmZsb3dlcmJsdWU6ICcjNjQ5NWVkJyxcbiAgICBjb3Juc2lsazogJyNmZmY4ZGMnLFxuICAgIGNyaW1zb246ICcjZGMxNDNjJyxcbiAgICBjeWFuOiAnIzAwZmZmZicsXG4gICAgZGFya2JsdWU6ICcjMDAwMDhiJyxcbiAgICBkYXJrY3lhbjogJyMwMDhiOGInLFxuICAgIGRhcmtnb2xkZW5yb2Q6ICcjYjg4NjBiJyxcbiAgICBkYXJrZ3JheTogJyNhOWE5YTknLFxuICAgIGRhcmtncmVlbjogJyMwMDY0MDAnLFxuICAgIGRhcmtncmV5OiAnI2E5YTlhOScsXG4gICAgZGFya2toYWtpOiAnI2JkYjc2YicsXG4gICAgZGFya21hZ2VudGE6ICcjOGIwMDhiJyxcbiAgICBkYXJrb2xpdmVncmVlbjogJyM1NTZiMmYnLFxuICAgIGRhcmtvcmFuZ2U6ICcjZmY4YzAwJyxcbiAgICBkYXJrb3JjaGlkOiAnIzk5MzJjYycsXG4gICAgZGFya3JlZDogJyM4YjAwMDAnLFxuICAgIGRhcmtzYWxtb246ICcjZTk5NjdhJyxcbiAgICBkYXJrc2VhZ3JlZW46ICcjOGZiYzhmJyxcbiAgICBkYXJrc2xhdGVibHVlOiAnIzQ4M2Q4YicsXG4gICAgZGFya3NsYXRlZ3JheTogJyMyZjRmNGYnLFxuICAgIGRhcmtzbGF0ZWdyZXk6ICcjMmY0ZjRmJyxcbiAgICBkYXJrdHVycXVvaXNlOiAnIzAwY2VkMScsXG4gICAgZGFya3Zpb2xldDogJyM5NDAwZDMnLFxuICAgIGRlZXBwaW5rOiAnI2ZmMTQ5MycsXG4gICAgZGVlcHNreWJsdWU6ICcjMDBiZmZmJyxcbiAgICBkaW1ncmF5OiAnIzY5Njk2OScsXG4gICAgZGltZ3JleTogJyM2OTY5NjknLFxuICAgIGRvZGdlcmJsdWU6ICcjMWU5MGZmJyxcbiAgICBmaXJlYnJpY2s6ICcjYjIyMjIyJyxcbiAgICBmbG9yYWx3aGl0ZTogJyNmZmZhZjAnLFxuICAgIGZvcmVzdGdyZWVuOiAnIzIyOGIyMicsXG4gICAgZnVjaHNpYTogJyNmZjAwZmYnLFxuICAgIGdhaW5zYm9ybzogJyNkY2RjZGMnLFxuICAgIGdob3N0d2hpdGU6ICcjZjhmOGZmJyxcbiAgICBnb2xkOiAnI2ZmZDcwMCcsXG4gICAgZ29sZGVucm9kOiAnI2RhYTUyMCcsXG4gICAgZ3JheTogJyM4MDgwODAnLFxuICAgIGdyZWVuOiAnIzAwODAwMCcsXG4gICAgZ3JlZW55ZWxsb3c6ICcjYWRmZjJmJyxcbiAgICBncmV5OiAnIzgwODA4MCcsXG4gICAgaG9uZXlkZXc6ICcjZjBmZmYwJyxcbiAgICBob3RwaW5rOiAnI2ZmNjliNCcsXG4gICAgaW5kaWFucmVkOiAnI2NkNWM1YycsXG4gICAgaW5kaWdvOiAnIzRiMDA4MicsXG4gICAgaXZvcnk6ICcjZmZmZmYwJyxcbiAgICBraGFraTogJyNmMGU2OGMnLFxuICAgIGxhc2VybGVtb246ICcjZmZmZjU0JyxcbiAgICBsYXZlbmRlcjogJyNlNmU2ZmEnLFxuICAgIGxhdmVuZGVyYmx1c2g6ICcjZmZmMGY1JyxcbiAgICBsYXduZ3JlZW46ICcjN2NmYzAwJyxcbiAgICBsZW1vbmNoaWZmb246ICcjZmZmYWNkJyxcbiAgICBsaWdodGJsdWU6ICcjYWRkOGU2JyxcbiAgICBsaWdodGNvcmFsOiAnI2YwODA4MCcsXG4gICAgbGlnaHRjeWFuOiAnI2UwZmZmZicsXG4gICAgbGlnaHRnb2xkZW5yb2Q6ICcjZmFmYWQyJyxcbiAgICBsaWdodGdvbGRlbnJvZHllbGxvdzogJyNmYWZhZDInLFxuICAgIGxpZ2h0Z3JheTogJyNkM2QzZDMnLFxuICAgIGxpZ2h0Z3JlZW46ICcjOTBlZTkwJyxcbiAgICBsaWdodGdyZXk6ICcjZDNkM2QzJyxcbiAgICBsaWdodHBpbms6ICcjZmZiNmMxJyxcbiAgICBsaWdodHNhbG1vbjogJyNmZmEwN2EnLFxuICAgIGxpZ2h0c2VhZ3JlZW46ICcjMjBiMmFhJyxcbiAgICBsaWdodHNreWJsdWU6ICcjODdjZWZhJyxcbiAgICBsaWdodHNsYXRlZ3JheTogJyM3Nzg4OTknLFxuICAgIGxpZ2h0c2xhdGVncmV5OiAnIzc3ODg5OScsXG4gICAgbGlnaHRzdGVlbGJsdWU6ICcjYjBjNGRlJyxcbiAgICBsaWdodHllbGxvdzogJyNmZmZmZTAnLFxuICAgIGxpbWU6ICcjMDBmZjAwJyxcbiAgICBsaW1lZ3JlZW46ICcjMzJjZDMyJyxcbiAgICBsaW5lbjogJyNmYWYwZTYnLFxuICAgIG1hZ2VudGE6ICcjZmYwMGZmJyxcbiAgICBtYXJvb246ICcjODAwMDAwJyxcbiAgICBtYXJvb24yOiAnIzdmMDAwMCcsXG4gICAgbWFyb29uMzogJyNiMDMwNjAnLFxuICAgIG1lZGl1bWFxdWFtYXJpbmU6ICcjNjZjZGFhJyxcbiAgICBtZWRpdW1ibHVlOiAnIzAwMDBjZCcsXG4gICAgbWVkaXVtb3JjaGlkOiAnI2JhNTVkMycsXG4gICAgbWVkaXVtcHVycGxlOiAnIzkzNzBkYicsXG4gICAgbWVkaXVtc2VhZ3JlZW46ICcjM2NiMzcxJyxcbiAgICBtZWRpdW1zbGF0ZWJsdWU6ICcjN2I2OGVlJyxcbiAgICBtZWRpdW1zcHJpbmdncmVlbjogJyMwMGZhOWEnLFxuICAgIG1lZGl1bXR1cnF1b2lzZTogJyM0OGQxY2MnLFxuICAgIG1lZGl1bXZpb2xldHJlZDogJyNjNzE1ODUnLFxuICAgIG1pZG5pZ2h0Ymx1ZTogJyMxOTE5NzAnLFxuICAgIG1pbnRjcmVhbTogJyNmNWZmZmEnLFxuICAgIG1pc3R5cm9zZTogJyNmZmU0ZTEnLFxuICAgIG1vY2Nhc2luOiAnI2ZmZTRiNScsXG4gICAgbmF2YWpvd2hpdGU6ICcjZmZkZWFkJyxcbiAgICBuYXZ5OiAnIzAwMDA4MCcsXG4gICAgb2xkbGFjZTogJyNmZGY1ZTYnLFxuICAgIG9saXZlOiAnIzgwODAwMCcsXG4gICAgb2xpdmVkcmFiOiAnIzZiOGUyMycsXG4gICAgb3JhbmdlOiAnI2ZmYTUwMCcsXG4gICAgb3JhbmdlcmVkOiAnI2ZmNDUwMCcsXG4gICAgb3JjaGlkOiAnI2RhNzBkNicsXG4gICAgcGFsZWdvbGRlbnJvZDogJyNlZWU4YWEnLFxuICAgIHBhbGVncmVlbjogJyM5OGZiOTgnLFxuICAgIHBhbGV0dXJxdW9pc2U6ICcjYWZlZWVlJyxcbiAgICBwYWxldmlvbGV0cmVkOiAnI2RiNzA5MycsXG4gICAgcGFwYXlhd2hpcDogJyNmZmVmZDUnLFxuICAgIHBlYWNocHVmZjogJyNmZmRhYjknLFxuICAgIHBlcnU6ICcjY2Q4NTNmJyxcbiAgICBwaW5rOiAnI2ZmYzBjYicsXG4gICAgcGx1bTogJyNkZGEwZGQnLFxuICAgIHBvd2RlcmJsdWU6ICcjYjBlMGU2JyxcbiAgICBwdXJwbGU6ICcjODAwMDgwJyxcbiAgICBwdXJwbGUyOiAnIzdmMDA3ZicsXG4gICAgcHVycGxlMzogJyNhMDIwZjAnLFxuICAgIHJlYmVjY2FwdXJwbGU6ICcjNjYzMzk5JyxcbiAgICByZWQ6ICcjZmYwMDAwJyxcbiAgICByb3N5YnJvd246ICcjYmM4ZjhmJyxcbiAgICByb3lhbGJsdWU6ICcjNDE2OWUxJyxcbiAgICBzYWRkbGVicm93bjogJyM4YjQ1MTMnLFxuICAgIHNhbG1vbjogJyNmYTgwNzInLFxuICAgIHNhbmR5YnJvd246ICcjZjRhNDYwJyxcbiAgICBzZWFncmVlbjogJyMyZThiNTcnLFxuICAgIHNlYXNoZWxsOiAnI2ZmZjVlZScsXG4gICAgc2llbm5hOiAnI2EwNTIyZCcsXG4gICAgc2lsdmVyOiAnI2MwYzBjMCcsXG4gICAgc2t5Ymx1ZTogJyM4N2NlZWInLFxuICAgIHNsYXRlYmx1ZTogJyM2YTVhY2QnLFxuICAgIHNsYXRlZ3JheTogJyM3MDgwOTAnLFxuICAgIHNsYXRlZ3JleTogJyM3MDgwOTAnLFxuICAgIHNub3c6ICcjZmZmYWZhJyxcbiAgICBzcHJpbmdncmVlbjogJyMwMGZmN2YnLFxuICAgIHN0ZWVsYmx1ZTogJyM0NjgyYjQnLFxuICAgIHRhbjogJyNkMmI0OGMnLFxuICAgIHRlYWw6ICcjMDA4MDgwJyxcbiAgICB0aGlzdGxlOiAnI2Q4YmZkOCcsXG4gICAgdG9tYXRvOiAnI2ZmNjM0NycsXG4gICAgdHVycXVvaXNlOiAnIzQwZTBkMCcsXG4gICAgdmlvbGV0OiAnI2VlODJlZScsXG4gICAgd2hlYXQ6ICcjZjVkZWIzJyxcbiAgICB3aGl0ZTogJyNmZmZmZmYnLFxuICAgIHdoaXRlc21va2U6ICcjZjVmNWY1JyxcbiAgICB5ZWxsb3c6ICcjZmZmZjAwJyxcbiAgICB5ZWxsb3dncmVlbjogJyM5YWNkMzInXG4gIH07XG4gIHZhciB3M2N4MTFfMSA9IHczY3gxMTtcbiAgdmFyIHR5cGUkYiA9IHV0aWxzLnR5cGU7XG5cbiAgQ29sb3JfMS5wcm90b3R5cGUubmFtZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaGV4ID0gcmdiMmhleF8xKHRoaXMuX3JnYiwgJ3JnYicpO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGxpc3QgPSBPYmplY3Qua2V5cyh3M2N4MTFfMSk7IGkgPCBsaXN0Lmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICB2YXIgbiA9IGxpc3RbaV07XG5cbiAgICAgIGlmICh3M2N4MTFfMVtuXSA9PT0gaGV4KSB7XG4gICAgICAgIHJldHVybiBuLnRvTG93ZXJDYXNlKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGhleDtcbiAgfTtcblxuICBpbnB1dC5mb3JtYXQubmFtZWQgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgICBpZiAodzNjeDExXzFbbmFtZV0pIHtcbiAgICAgIHJldHVybiBoZXgycmdiXzEodzNjeDExXzFbbmFtZV0pO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcigndW5rbm93biBjb2xvciBuYW1lOiAnICsgbmFtZSk7XG4gIH07XG5cbiAgaW5wdXQuYXV0b2RldGVjdC5wdXNoKHtcbiAgICBwOiA1LFxuICAgIHRlc3Q6IGZ1bmN0aW9uIHRlc3QoaCkge1xuICAgICAgdmFyIHJlc3QgPSBbXSxcbiAgICAgICAgICBsZW4gPSBhcmd1bWVudHMubGVuZ3RoIC0gMTtcblxuICAgICAgd2hpbGUgKGxlbi0tID4gMCkge1xuICAgICAgICByZXN0W2xlbl0gPSBhcmd1bWVudHNbbGVuICsgMV07XG4gICAgICB9XG5cbiAgICAgIGlmICghcmVzdC5sZW5ndGggJiYgdHlwZSRiKGgpID09PSAnc3RyaW5nJyAmJiB3M2N4MTFfMVtoLnRvTG93ZXJDYXNlKCldKSB7XG4gICAgICAgIHJldHVybiAnbmFtZWQnO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHZhciB1bnBhY2skdCA9IHV0aWxzLnVucGFjaztcblxuICB2YXIgcmdiMm51bSA9IGZ1bmN0aW9uIHJnYjJudW0oKSB7XG4gICAgdmFyIGFyZ3MgPSBbXSxcbiAgICAgICAgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcblxuICAgIHdoaWxlIChsZW4tLSkge1xuICAgICAgYXJnc1tsZW5dID0gYXJndW1lbnRzW2xlbl07XG4gICAgfVxuXG4gICAgdmFyIHJlZiA9IHVucGFjayR0KGFyZ3MsICdyZ2InKTtcbiAgICB2YXIgciA9IHJlZlswXTtcbiAgICB2YXIgZyA9IHJlZlsxXTtcbiAgICB2YXIgYiA9IHJlZlsyXTtcbiAgICByZXR1cm4gKHIgPDwgMTYpICsgKGcgPDwgOCkgKyBiO1xuICB9O1xuXG4gIHZhciByZ2IybnVtXzEgPSByZ2IybnVtO1xuICB2YXIgdHlwZSRjID0gdXRpbHMudHlwZTtcblxuICB2YXIgbnVtMnJnYiA9IGZ1bmN0aW9uIG51bTJyZ2IobnVtKSB7XG4gICAgaWYgKHR5cGUkYyhudW0pID09IFwibnVtYmVyXCIgJiYgbnVtID49IDAgJiYgbnVtIDw9IDB4RkZGRkZGKSB7XG4gICAgICB2YXIgciA9IG51bSA+PiAxNjtcbiAgICAgIHZhciBnID0gbnVtID4+IDggJiAweEZGO1xuICAgICAgdmFyIGIgPSBudW0gJiAweEZGO1xuICAgICAgcmV0dXJuIFtyLCBnLCBiLCAxXTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIG51bSBjb2xvcjogXCIgKyBudW0pO1xuICB9O1xuXG4gIHZhciBudW0ycmdiXzEgPSBudW0ycmdiO1xuICB2YXIgdHlwZSRkID0gdXRpbHMudHlwZTtcblxuICBDb2xvcl8xLnByb3RvdHlwZS5udW0gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHJnYjJudW1fMSh0aGlzLl9yZ2IpO1xuICB9O1xuXG4gIGNocm9tYV8xLm51bSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYXJncyA9IFtdLFxuICAgICAgICBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGxlbi0tKSB7XG4gICAgICBhcmdzW2xlbl0gPSBhcmd1bWVudHNbbGVuXTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IChGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5hcHBseShDb2xvcl8xLCBbbnVsbF0uY29uY2F0KGFyZ3MsIFsnbnVtJ10pKSkoKTtcbiAgfTtcblxuICBpbnB1dC5mb3JtYXQubnVtID0gbnVtMnJnYl8xO1xuICBpbnB1dC5hdXRvZGV0ZWN0LnB1c2goe1xuICAgIHA6IDUsXG4gICAgdGVzdDogZnVuY3Rpb24gdGVzdCgpIHtcbiAgICAgIHZhciBhcmdzID0gW10sXG4gICAgICAgICAgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcblxuICAgICAgd2hpbGUgKGxlbi0tKSB7XG4gICAgICAgIGFyZ3NbbGVuXSA9IGFyZ3VtZW50c1tsZW5dO1xuICAgICAgfVxuXG4gICAgICBpZiAoYXJncy5sZW5ndGggPT09IDEgJiYgdHlwZSRkKGFyZ3NbMF0pID09PSAnbnVtYmVyJyAmJiBhcmdzWzBdID49IDAgJiYgYXJnc1swXSA8PSAweEZGRkZGRikge1xuICAgICAgICByZXR1cm4gJ251bSc7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgdmFyIHVucGFjayR1ID0gdXRpbHMudW5wYWNrO1xuICB2YXIgdHlwZSRlID0gdXRpbHMudHlwZTtcbiAgdmFyIHJvdW5kJDUgPSBNYXRoLnJvdW5kO1xuXG4gIENvbG9yXzEucHJvdG90eXBlLnJnYiA9IGZ1bmN0aW9uIChybmQpIHtcbiAgICBpZiAocm5kID09PSB2b2lkIDApIHJuZCA9IHRydWU7XG5cbiAgICBpZiAocm5kID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3JnYi5zbGljZSgwLCAzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcmdiLnNsaWNlKDAsIDMpLm1hcChyb3VuZCQ1KTtcbiAgfTtcblxuICBDb2xvcl8xLnByb3RvdHlwZS5yZ2JhID0gZnVuY3Rpb24gKHJuZCkge1xuICAgIGlmIChybmQgPT09IHZvaWQgMCkgcm5kID0gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcy5fcmdiLnNsaWNlKDAsIDQpLm1hcChmdW5jdGlvbiAodiwgaSkge1xuICAgICAgcmV0dXJuIGkgPCAzID8gcm5kID09PSBmYWxzZSA/IHYgOiByb3VuZCQ1KHYpIDogdjtcbiAgICB9KTtcbiAgfTtcblxuICBjaHJvbWFfMS5yZ2IgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGFyZ3MgPSBbXSxcbiAgICAgICAgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcblxuICAgIHdoaWxlIChsZW4tLSkge1xuICAgICAgYXJnc1tsZW5dID0gYXJndW1lbnRzW2xlbl07XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuYXBwbHkoQ29sb3JfMSwgW251bGxdLmNvbmNhdChhcmdzLCBbJ3JnYiddKSkpKCk7XG4gIH07XG5cbiAgaW5wdXQuZm9ybWF0LnJnYiA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYXJncyA9IFtdLFxuICAgICAgICBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGxlbi0tKSB7XG4gICAgICBhcmdzW2xlbl0gPSBhcmd1bWVudHNbbGVuXTtcbiAgICB9XG5cbiAgICB2YXIgcmdiYSA9IHVucGFjayR1KGFyZ3MsICdyZ2JhJyk7XG5cbiAgICBpZiAocmdiYVszXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZ2JhWzNdID0gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmdiYTtcbiAgfTtcblxuICBpbnB1dC5hdXRvZGV0ZWN0LnB1c2goe1xuICAgIHA6IDMsXG4gICAgdGVzdDogZnVuY3Rpb24gdGVzdCgpIHtcbiAgICAgIHZhciBhcmdzID0gW10sXG4gICAgICAgICAgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcblxuICAgICAgd2hpbGUgKGxlbi0tKSB7XG4gICAgICAgIGFyZ3NbbGVuXSA9IGFyZ3VtZW50c1tsZW5dO1xuICAgICAgfVxuXG4gICAgICBhcmdzID0gdW5wYWNrJHUoYXJncywgJ3JnYmEnKTtcblxuICAgICAgaWYgKHR5cGUkZShhcmdzKSA9PT0gJ2FycmF5JyAmJiAoYXJncy5sZW5ndGggPT09IDMgfHwgYXJncy5sZW5ndGggPT09IDQgJiYgdHlwZSRlKGFyZ3NbM10pID09ICdudW1iZXInICYmIGFyZ3NbM10gPj0gMCAmJiBhcmdzWzNdIDw9IDEpKSB7XG4gICAgICAgIHJldHVybiAncmdiJztcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICAvKlxuICAgKiBCYXNlZCBvbiBpbXBsZW1lbnRhdGlvbiBieSBOZWlsIEJhcnRsZXR0XG4gICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9uZWlsYmFydGxldHQvY29sb3ItdGVtcGVyYXR1cmVcbiAgICovXG5cbiAgdmFyIGxvZyA9IE1hdGgubG9nO1xuXG4gIHZhciB0ZW1wZXJhdHVyZTJyZ2IgPSBmdW5jdGlvbiB0ZW1wZXJhdHVyZTJyZ2Ioa2VsdmluKSB7XG4gICAgdmFyIHRlbXAgPSBrZWx2aW4gLyAxMDA7XG4gICAgdmFyIHIsIGcsIGI7XG5cbiAgICBpZiAodGVtcCA8IDY2KSB7XG4gICAgICByID0gMjU1O1xuICAgICAgZyA9IC0xNTUuMjU0ODU1NjI3MDkxNzkgLSAwLjQ0NTk2OTUwNDY5NTc5MTMzICogKGcgPSB0ZW1wIC0gMikgKyAxMDQuNDkyMTYxOTkzOTM4ODggKiBsb2coZyk7XG4gICAgICBiID0gdGVtcCA8IDIwID8gMCA6IC0yNTQuNzY5MzUxODQxMjA5MDIgKyAwLjgyNzQwOTYwNjQwMDczOTUgKiAoYiA9IHRlbXAgLSAxMCkgKyAxMTUuNjc5OTQ0MDEwNjYxNDcgKiBsb2coYik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHIgPSAzNTEuOTc2OTA1NjY4MDU2OTMgKyAwLjExNDIwNjQ1Mzc4NDE2NSAqIChyID0gdGVtcCAtIDU1KSAtIDQwLjI1MzY2MzA5MzMyMTI3ICogbG9nKHIpO1xuICAgICAgZyA9IDMyNS40NDk0MTI1NzExOTc0ICsgMC4wNzk0MzQ1NjUzNjY2MjM0MiAqIChnID0gdGVtcCAtIDUwKSAtIDI4LjA4NTI5NjM1MDc5NTcgKiBsb2coZyk7XG4gICAgICBiID0gMjU1O1xuICAgIH1cblxuICAgIHJldHVybiBbciwgZywgYiwgMV07XG4gIH07XG5cbiAgdmFyIHRlbXBlcmF0dXJlMnJnYl8xID0gdGVtcGVyYXR1cmUycmdiO1xuICAvKlxuICAgKiBCYXNlZCBvbiBpbXBsZW1lbnRhdGlvbiBieSBOZWlsIEJhcnRsZXR0XG4gICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9uZWlsYmFydGxldHQvY29sb3ItdGVtcGVyYXR1cmVcbiAgICoqL1xuXG4gIHZhciB1bnBhY2skdiA9IHV0aWxzLnVucGFjaztcbiAgdmFyIHJvdW5kJDYgPSBNYXRoLnJvdW5kO1xuXG4gIHZhciByZ2IydGVtcGVyYXR1cmUgPSBmdW5jdGlvbiByZ2IydGVtcGVyYXR1cmUoKSB7XG4gICAgdmFyIGFyZ3MgPSBbXSxcbiAgICAgICAgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcblxuICAgIHdoaWxlIChsZW4tLSkge1xuICAgICAgYXJnc1tsZW5dID0gYXJndW1lbnRzW2xlbl07XG4gICAgfVxuXG4gICAgdmFyIHJnYiA9IHVucGFjayR2KGFyZ3MsICdyZ2InKTtcbiAgICB2YXIgciA9IHJnYlswXSxcbiAgICAgICAgYiA9IHJnYlsyXTtcbiAgICB2YXIgbWluVGVtcCA9IDEwMDA7XG4gICAgdmFyIG1heFRlbXAgPSA0MDAwMDtcbiAgICB2YXIgZXBzID0gMC40O1xuICAgIHZhciB0ZW1wO1xuXG4gICAgd2hpbGUgKG1heFRlbXAgLSBtaW5UZW1wID4gZXBzKSB7XG4gICAgICB0ZW1wID0gKG1heFRlbXAgKyBtaW5UZW1wKSAqIDAuNTtcbiAgICAgIHZhciByZ2IkMSA9IHRlbXBlcmF0dXJlMnJnYl8xKHRlbXApO1xuXG4gICAgICBpZiAocmdiJDFbMl0gLyByZ2IkMVswXSA+PSBiIC8gcikge1xuICAgICAgICBtYXhUZW1wID0gdGVtcDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1pblRlbXAgPSB0ZW1wO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByb3VuZCQ2KHRlbXApO1xuICB9O1xuXG4gIHZhciByZ2IydGVtcGVyYXR1cmVfMSA9IHJnYjJ0ZW1wZXJhdHVyZTtcblxuICBDb2xvcl8xLnByb3RvdHlwZS50ZW1wID0gQ29sb3JfMS5wcm90b3R5cGUua2VsdmluID0gQ29sb3JfMS5wcm90b3R5cGUudGVtcGVyYXR1cmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHJnYjJ0ZW1wZXJhdHVyZV8xKHRoaXMuX3JnYik7XG4gIH07XG5cbiAgY2hyb21hXzEudGVtcCA9IGNocm9tYV8xLmtlbHZpbiA9IGNocm9tYV8xLnRlbXBlcmF0dXJlID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBhcmdzID0gW10sXG4gICAgICAgIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cbiAgICB3aGlsZSAobGVuLS0pIHtcbiAgICAgIGFyZ3NbbGVuXSA9IGFyZ3VtZW50c1tsZW5dO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KENvbG9yXzEsIFtudWxsXS5jb25jYXQoYXJncywgWyd0ZW1wJ10pKSkoKTtcbiAgfTtcblxuICBpbnB1dC5mb3JtYXQudGVtcCA9IGlucHV0LmZvcm1hdC5rZWx2aW4gPSBpbnB1dC5mb3JtYXQudGVtcGVyYXR1cmUgPSB0ZW1wZXJhdHVyZTJyZ2JfMTtcbiAgdmFyIHR5cGUkZiA9IHV0aWxzLnR5cGU7XG5cbiAgQ29sb3JfMS5wcm90b3R5cGUuYWxwaGEgPSBmdW5jdGlvbiAoYSwgbXV0YXRlKSB7XG4gICAgaWYgKG11dGF0ZSA9PT0gdm9pZCAwKSBtdXRhdGUgPSBmYWxzZTtcblxuICAgIGlmIChhICE9PSB1bmRlZmluZWQgJiYgdHlwZSRmKGEpID09PSAnbnVtYmVyJykge1xuICAgICAgaWYgKG11dGF0ZSkge1xuICAgICAgICB0aGlzLl9yZ2JbM10gPSBhO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBDb2xvcl8xKFt0aGlzLl9yZ2JbMF0sIHRoaXMuX3JnYlsxXSwgdGhpcy5fcmdiWzJdLCBhXSwgJ3JnYicpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9yZ2JbM107XG4gIH07XG5cbiAgQ29sb3JfMS5wcm90b3R5cGUuY2xpcHBlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmdiLl9jbGlwcGVkIHx8IGZhbHNlO1xuICB9O1xuXG4gIENvbG9yXzEucHJvdG90eXBlLmRhcmtlbiA9IGZ1bmN0aW9uIChhbW91bnQpIHtcbiAgICBpZiAoYW1vdW50ID09PSB2b2lkIDApIGFtb3VudCA9IDE7XG4gICAgdmFyIG1lID0gdGhpcztcbiAgICB2YXIgbGFiID0gbWUubGFiKCk7XG4gICAgbGFiWzBdIC09IGxhYkNvbnN0YW50cy5LbiAqIGFtb3VudDtcbiAgICByZXR1cm4gbmV3IENvbG9yXzEobGFiLCAnbGFiJykuYWxwaGEobWUuYWxwaGEoKSwgdHJ1ZSk7XG4gIH07XG5cbiAgQ29sb3JfMS5wcm90b3R5cGUuYnJpZ2h0ZW4gPSBmdW5jdGlvbiAoYW1vdW50KSB7XG4gICAgaWYgKGFtb3VudCA9PT0gdm9pZCAwKSBhbW91bnQgPSAxO1xuICAgIHJldHVybiB0aGlzLmRhcmtlbigtYW1vdW50KTtcbiAgfTtcblxuICBDb2xvcl8xLnByb3RvdHlwZS5kYXJrZXIgPSBDb2xvcl8xLnByb3RvdHlwZS5kYXJrZW47XG4gIENvbG9yXzEucHJvdG90eXBlLmJyaWdodGVyID0gQ29sb3JfMS5wcm90b3R5cGUuYnJpZ2h0ZW47XG5cbiAgQ29sb3JfMS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKG1jKSB7XG4gICAgdmFyIHJlZiA9IG1jLnNwbGl0KCcuJyk7XG4gICAgdmFyIG1vZGUgPSByZWZbMF07XG4gICAgdmFyIGNoYW5uZWwgPSByZWZbMV07XG4gICAgdmFyIHNyYyA9IHRoaXNbbW9kZV0oKTtcblxuICAgIGlmIChjaGFubmVsKSB7XG4gICAgICB2YXIgaSA9IG1vZGUuaW5kZXhPZihjaGFubmVsKTtcblxuICAgICAgaWYgKGkgPiAtMSkge1xuICAgICAgICByZXR1cm4gc3JjW2ldO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIGNoYW5uZWwgXCIgKyBjaGFubmVsICsgXCIgaW4gbW9kZSBcIiArIG1vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gc3JjO1xuICAgIH1cbiAgfTtcblxuICB2YXIgdHlwZSRnID0gdXRpbHMudHlwZTtcbiAgdmFyIHBvdyQyID0gTWF0aC5wb3c7XG4gIHZhciBFUFMgPSAxZS03O1xuICB2YXIgTUFYX0lURVIgPSAyMDtcblxuICBDb2xvcl8xLnByb3RvdHlwZS5sdW1pbmFuY2UgPSBmdW5jdGlvbiAobHVtKSB7XG4gICAgaWYgKGx1bSAhPT0gdW5kZWZpbmVkICYmIHR5cGUkZyhsdW0pID09PSAnbnVtYmVyJykge1xuICAgICAgaWYgKGx1bSA9PT0gMCkge1xuICAgICAgICAvLyByZXR1cm4gcHVyZSBibGFja1xuICAgICAgICByZXR1cm4gbmV3IENvbG9yXzEoWzAsIDAsIDAsIHRoaXMuX3JnYlszXV0sICdyZ2InKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGx1bSA9PT0gMSkge1xuICAgICAgICAvLyByZXR1cm4gcHVyZSB3aGl0ZVxuICAgICAgICByZXR1cm4gbmV3IENvbG9yXzEoWzI1NSwgMjU1LCAyNTUsIHRoaXMuX3JnYlszXV0sICdyZ2InKTtcbiAgICAgIH0gLy8gY29tcHV0ZSBuZXcgY29sb3IgdXNpbmcuLi5cblxuXG4gICAgICB2YXIgY3VyX2x1bSA9IHRoaXMubHVtaW5hbmNlKCk7XG4gICAgICB2YXIgbW9kZSA9ICdyZ2InO1xuICAgICAgdmFyIG1heF9pdGVyID0gTUFYX0lURVI7XG5cbiAgICAgIHZhciB0ZXN0ID0gZnVuY3Rpb24gdGVzdChsb3csIGhpZ2gpIHtcbiAgICAgICAgdmFyIG1pZCA9IGxvdy5pbnRlcnBvbGF0ZShoaWdoLCAwLjUsIG1vZGUpO1xuICAgICAgICB2YXIgbG0gPSBtaWQubHVtaW5hbmNlKCk7XG5cbiAgICAgICAgaWYgKE1hdGguYWJzKGx1bSAtIGxtKSA8IEVQUyB8fCAhbWF4X2l0ZXItLSkge1xuICAgICAgICAgIC8vIGNsb3NlIGVub3VnaFxuICAgICAgICAgIHJldHVybiBtaWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbG0gPiBsdW0gPyB0ZXN0KGxvdywgbWlkKSA6IHRlc3QobWlkLCBoaWdoKTtcbiAgICAgIH07XG5cbiAgICAgIHZhciByZ2IgPSAoY3VyX2x1bSA+IGx1bSA/IHRlc3QobmV3IENvbG9yXzEoWzAsIDAsIDBdKSwgdGhpcykgOiB0ZXN0KHRoaXMsIG5ldyBDb2xvcl8xKFsyNTUsIDI1NSwgMjU1XSkpKS5yZ2IoKTtcbiAgICAgIHJldHVybiBuZXcgQ29sb3JfMShyZ2IuY29uY2F0KFt0aGlzLl9yZ2JbM11dKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJnYjJsdW1pbmFuY2UuYXBwbHkodm9pZCAwLCB0aGlzLl9yZ2Iuc2xpY2UoMCwgMykpO1xuICB9O1xuXG4gIHZhciByZ2IybHVtaW5hbmNlID0gZnVuY3Rpb24gcmdiMmx1bWluYW5jZShyLCBnLCBiKSB7XG4gICAgLy8gcmVsYXRpdmUgbHVtaW5hbmNlXG4gICAgLy8gc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDgvUkVDLVdDQUcyMC0yMDA4MTIxMS8jcmVsYXRpdmVsdW1pbmFuY2VkZWZcbiAgICByID0gbHVtaW5hbmNlX3gocik7XG4gICAgZyA9IGx1bWluYW5jZV94KGcpO1xuICAgIGIgPSBsdW1pbmFuY2VfeChiKTtcbiAgICByZXR1cm4gMC4yMTI2ICogciArIDAuNzE1MiAqIGcgKyAwLjA3MjIgKiBiO1xuICB9O1xuXG4gIHZhciBsdW1pbmFuY2VfeCA9IGZ1bmN0aW9uIGx1bWluYW5jZV94KHgpIHtcbiAgICB4IC89IDI1NTtcbiAgICByZXR1cm4geCA8PSAwLjAzOTI4ID8geCAvIDEyLjkyIDogcG93JDIoKHggKyAwLjA1NSkgLyAxLjA1NSwgMi40KTtcbiAgfTtcblxuICB2YXIgaW50ZXJwb2xhdG9yID0ge307XG4gIHZhciB0eXBlJGggPSB1dGlscy50eXBlO1xuXG4gIHZhciBtaXggPSBmdW5jdGlvbiBtaXgoY29sMSwgY29sMiwgZikge1xuICAgIGlmIChmID09PSB2b2lkIDApIGYgPSAwLjU7XG4gICAgdmFyIHJlc3QgPSBbXSxcbiAgICAgICAgbGVuID0gYXJndW1lbnRzLmxlbmd0aCAtIDM7XG5cbiAgICB3aGlsZSAobGVuLS0gPiAwKSB7XG4gICAgICByZXN0W2xlbl0gPSBhcmd1bWVudHNbbGVuICsgM107XG4gICAgfVxuXG4gICAgdmFyIG1vZGUgPSByZXN0WzBdIHx8ICdscmdiJztcblxuICAgIGlmICghaW50ZXJwb2xhdG9yW21vZGVdICYmICFyZXN0Lmxlbmd0aCkge1xuICAgICAgLy8gZmFsbCBiYWNrIHRvIHRoZSBmaXJzdCBzdXBwb3J0ZWQgbW9kZVxuICAgICAgbW9kZSA9IE9iamVjdC5rZXlzKGludGVycG9sYXRvcilbMF07XG4gICAgfVxuXG4gICAgaWYgKCFpbnRlcnBvbGF0b3JbbW9kZV0pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImludGVycG9sYXRpb24gbW9kZSBcIiArIG1vZGUgKyBcIiBpcyBub3QgZGVmaW5lZFwiKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZSRoKGNvbDEpICE9PSAnb2JqZWN0Jykge1xuICAgICAgY29sMSA9IG5ldyBDb2xvcl8xKGNvbDEpO1xuICAgIH1cblxuICAgIGlmICh0eXBlJGgoY29sMikgIT09ICdvYmplY3QnKSB7XG4gICAgICBjb2wyID0gbmV3IENvbG9yXzEoY29sMik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGludGVycG9sYXRvclttb2RlXShjb2wxLCBjb2wyLCBmKS5hbHBoYShjb2wxLmFscGhhKCkgKyBmICogKGNvbDIuYWxwaGEoKSAtIGNvbDEuYWxwaGEoKSkpO1xuICB9O1xuXG4gIENvbG9yXzEucHJvdG90eXBlLm1peCA9IENvbG9yXzEucHJvdG90eXBlLmludGVycG9sYXRlID0gZnVuY3Rpb24gKGNvbDIsIGYpIHtcbiAgICBpZiAoZiA9PT0gdm9pZCAwKSBmID0gMC41O1xuICAgIHZhciByZXN0ID0gW10sXG4gICAgICAgIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGggLSAyO1xuXG4gICAgd2hpbGUgKGxlbi0tID4gMCkge1xuICAgICAgcmVzdFtsZW5dID0gYXJndW1lbnRzW2xlbiArIDJdO1xuICAgIH1cblxuICAgIHJldHVybiBtaXguYXBwbHkodm9pZCAwLCBbdGhpcywgY29sMiwgZl0uY29uY2F0KHJlc3QpKTtcbiAgfTtcblxuICBDb2xvcl8xLnByb3RvdHlwZS5wcmVtdWx0aXBseSA9IGZ1bmN0aW9uIChtdXRhdGUpIHtcbiAgICBpZiAobXV0YXRlID09PSB2b2lkIDApIG11dGF0ZSA9IGZhbHNlO1xuICAgIHZhciByZ2IgPSB0aGlzLl9yZ2I7XG4gICAgdmFyIGEgPSByZ2JbM107XG5cbiAgICBpZiAobXV0YXRlKSB7XG4gICAgICB0aGlzLl9yZ2IgPSBbcmdiWzBdICogYSwgcmdiWzFdICogYSwgcmdiWzJdICogYSwgYV07XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBDb2xvcl8xKFtyZ2JbMF0gKiBhLCByZ2JbMV0gKiBhLCByZ2JbMl0gKiBhLCBhXSwgJ3JnYicpO1xuICAgIH1cbiAgfTtcblxuICBDb2xvcl8xLnByb3RvdHlwZS5zYXR1cmF0ZSA9IGZ1bmN0aW9uIChhbW91bnQpIHtcbiAgICBpZiAoYW1vdW50ID09PSB2b2lkIDApIGFtb3VudCA9IDE7XG4gICAgdmFyIG1lID0gdGhpcztcbiAgICB2YXIgbGNoID0gbWUubGNoKCk7XG4gICAgbGNoWzFdICs9IGxhYkNvbnN0YW50cy5LbiAqIGFtb3VudDtcblxuICAgIGlmIChsY2hbMV0gPCAwKSB7XG4gICAgICBsY2hbMV0gPSAwO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgQ29sb3JfMShsY2gsICdsY2gnKS5hbHBoYShtZS5hbHBoYSgpLCB0cnVlKTtcbiAgfTtcblxuICBDb2xvcl8xLnByb3RvdHlwZS5kZXNhdHVyYXRlID0gZnVuY3Rpb24gKGFtb3VudCkge1xuICAgIGlmIChhbW91bnQgPT09IHZvaWQgMCkgYW1vdW50ID0gMTtcbiAgICByZXR1cm4gdGhpcy5zYXR1cmF0ZSgtYW1vdW50KTtcbiAgfTtcblxuICB2YXIgdHlwZSRpID0gdXRpbHMudHlwZTtcblxuICBDb2xvcl8xLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAobWMsIHZhbHVlLCBtdXRhdGUpIHtcbiAgICBpZiAobXV0YXRlID09PSB2b2lkIDApIG11dGF0ZSA9IGZhbHNlO1xuICAgIHZhciByZWYgPSBtYy5zcGxpdCgnLicpO1xuICAgIHZhciBtb2RlID0gcmVmWzBdO1xuICAgIHZhciBjaGFubmVsID0gcmVmWzFdO1xuICAgIHZhciBzcmMgPSB0aGlzW21vZGVdKCk7XG5cbiAgICBpZiAoY2hhbm5lbCkge1xuICAgICAgdmFyIGkgPSBtb2RlLmluZGV4T2YoY2hhbm5lbCk7XG5cbiAgICAgIGlmIChpID4gLTEpIHtcbiAgICAgICAgaWYgKHR5cGUkaSh2YWx1ZSkgPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBzd2l0Y2ggKHZhbHVlLmNoYXJBdCgwKSkge1xuICAgICAgICAgICAgY2FzZSAnKyc6XG4gICAgICAgICAgICAgIHNyY1tpXSArPSArdmFsdWU7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICctJzpcbiAgICAgICAgICAgICAgc3JjW2ldICs9ICt2YWx1ZTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJyonOlxuICAgICAgICAgICAgICBzcmNbaV0gKj0gK3ZhbHVlLnN1YnN0cigxKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJy8nOlxuICAgICAgICAgICAgICBzcmNbaV0gLz0gK3ZhbHVlLnN1YnN0cigxKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHNyY1tpXSA9ICt2YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSRpKHZhbHVlKSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBzcmNbaV0gPSB2YWx1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1bnN1cHBvcnRlZCB2YWx1ZSBmb3IgQ29sb3Iuc2V0XCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG91dCA9IG5ldyBDb2xvcl8xKHNyYywgbW9kZSk7XG5cbiAgICAgICAgaWYgKG11dGF0ZSkge1xuICAgICAgICAgIHRoaXMuX3JnYiA9IG91dC5fcmdiO1xuICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwidW5rbm93biBjaGFubmVsIFwiICsgY2hhbm5lbCArIFwiIGluIG1vZGUgXCIgKyBtb2RlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHNyYztcbiAgICB9XG4gIH07XG5cbiAgdmFyIHJnYiQxID0gZnVuY3Rpb24gcmdiJDEoY29sMSwgY29sMiwgZikge1xuICAgIHZhciB4eXowID0gY29sMS5fcmdiO1xuICAgIHZhciB4eXoxID0gY29sMi5fcmdiO1xuICAgIHJldHVybiBuZXcgQ29sb3JfMSh4eXowWzBdICsgZiAqICh4eXoxWzBdIC0geHl6MFswXSksIHh5ejBbMV0gKyBmICogKHh5ejFbMV0gLSB4eXowWzFdKSwgeHl6MFsyXSArIGYgKiAoeHl6MVsyXSAtIHh5ejBbMl0pLCAncmdiJyk7XG4gIH07IC8vIHJlZ2lzdGVyIGludGVycG9sYXRvclxuXG5cbiAgaW50ZXJwb2xhdG9yLnJnYiA9IHJnYiQxO1xuICB2YXIgc3FydCQyID0gTWF0aC5zcXJ0O1xuICB2YXIgcG93JDMgPSBNYXRoLnBvdztcblxuICB2YXIgbHJnYiA9IGZ1bmN0aW9uIGxyZ2IoY29sMSwgY29sMiwgZikge1xuICAgIHZhciByZWYgPSBjb2wxLl9yZ2I7XG4gICAgdmFyIHgxID0gcmVmWzBdO1xuICAgIHZhciB5MSA9IHJlZlsxXTtcbiAgICB2YXIgejEgPSByZWZbMl07XG4gICAgdmFyIHJlZiQxID0gY29sMi5fcmdiO1xuICAgIHZhciB4MiA9IHJlZiQxWzBdO1xuICAgIHZhciB5MiA9IHJlZiQxWzFdO1xuICAgIHZhciB6MiA9IHJlZiQxWzJdO1xuICAgIHJldHVybiBuZXcgQ29sb3JfMShzcXJ0JDIocG93JDMoeDEsIDIpICogKDEgLSBmKSArIHBvdyQzKHgyLCAyKSAqIGYpLCBzcXJ0JDIocG93JDMoeTEsIDIpICogKDEgLSBmKSArIHBvdyQzKHkyLCAyKSAqIGYpLCBzcXJ0JDIocG93JDMoejEsIDIpICogKDEgLSBmKSArIHBvdyQzKHoyLCAyKSAqIGYpLCAncmdiJyk7XG4gIH07IC8vIHJlZ2lzdGVyIGludGVycG9sYXRvclxuXG5cbiAgaW50ZXJwb2xhdG9yLmxyZ2IgPSBscmdiO1xuXG4gIHZhciBsYWIkMSA9IGZ1bmN0aW9uIGxhYiQxKGNvbDEsIGNvbDIsIGYpIHtcbiAgICB2YXIgeHl6MCA9IGNvbDEubGFiKCk7XG4gICAgdmFyIHh5ejEgPSBjb2wyLmxhYigpO1xuICAgIHJldHVybiBuZXcgQ29sb3JfMSh4eXowWzBdICsgZiAqICh4eXoxWzBdIC0geHl6MFswXSksIHh5ejBbMV0gKyBmICogKHh5ejFbMV0gLSB4eXowWzFdKSwgeHl6MFsyXSArIGYgKiAoeHl6MVsyXSAtIHh5ejBbMl0pLCAnbGFiJyk7XG4gIH07IC8vIHJlZ2lzdGVyIGludGVycG9sYXRvclxuXG5cbiAgaW50ZXJwb2xhdG9yLmxhYiA9IGxhYiQxO1xuXG4gIHZhciBfaHN4ID0gZnVuY3Rpb24gX2hzeChjb2wxLCBjb2wyLCBmLCBtKSB7XG4gICAgdmFyIGFzc2lnbiwgYXNzaWduJDE7XG4gICAgdmFyIHh5ejAsIHh5ejE7XG5cbiAgICBpZiAobSA9PT0gJ2hzbCcpIHtcbiAgICAgIHh5ejAgPSBjb2wxLmhzbCgpO1xuICAgICAgeHl6MSA9IGNvbDIuaHNsKCk7XG4gICAgfSBlbHNlIGlmIChtID09PSAnaHN2Jykge1xuICAgICAgeHl6MCA9IGNvbDEuaHN2KCk7XG4gICAgICB4eXoxID0gY29sMi5oc3YoKTtcbiAgICB9IGVsc2UgaWYgKG0gPT09ICdoY2cnKSB7XG4gICAgICB4eXowID0gY29sMS5oY2coKTtcbiAgICAgIHh5ejEgPSBjb2wyLmhjZygpO1xuICAgIH0gZWxzZSBpZiAobSA9PT0gJ2hzaScpIHtcbiAgICAgIHh5ejAgPSBjb2wxLmhzaSgpO1xuICAgICAgeHl6MSA9IGNvbDIuaHNpKCk7XG4gICAgfSBlbHNlIGlmIChtID09PSAnbGNoJyB8fCBtID09PSAnaGNsJykge1xuICAgICAgbSA9ICdoY2wnO1xuICAgICAgeHl6MCA9IGNvbDEuaGNsKCk7XG4gICAgICB4eXoxID0gY29sMi5oY2woKTtcbiAgICB9XG5cbiAgICB2YXIgaHVlMCwgaHVlMSwgc2F0MCwgc2F0MSwgbGJ2MCwgbGJ2MTtcblxuICAgIGlmIChtLnN1YnN0cigwLCAxKSA9PT0gJ2gnKSB7XG4gICAgICBhc3NpZ24gPSB4eXowLCBodWUwID0gYXNzaWduWzBdLCBzYXQwID0gYXNzaWduWzFdLCBsYnYwID0gYXNzaWduWzJdO1xuICAgICAgYXNzaWduJDEgPSB4eXoxLCBodWUxID0gYXNzaWduJDFbMF0sIHNhdDEgPSBhc3NpZ24kMVsxXSwgbGJ2MSA9IGFzc2lnbiQxWzJdO1xuICAgIH1cblxuICAgIHZhciBzYXQsIGh1ZSwgbGJ2LCBkaDtcblxuICAgIGlmICghaXNOYU4oaHVlMCkgJiYgIWlzTmFOKGh1ZTEpKSB7XG4gICAgICAvLyBib3RoIGNvbG9ycyBoYXZlIGh1ZVxuICAgICAgaWYgKGh1ZTEgPiBodWUwICYmIGh1ZTEgLSBodWUwID4gMTgwKSB7XG4gICAgICAgIGRoID0gaHVlMSAtIChodWUwICsgMzYwKTtcbiAgICAgIH0gZWxzZSBpZiAoaHVlMSA8IGh1ZTAgJiYgaHVlMCAtIGh1ZTEgPiAxODApIHtcbiAgICAgICAgZGggPSBodWUxICsgMzYwIC0gaHVlMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRoID0gaHVlMSAtIGh1ZTA7XG4gICAgICB9XG5cbiAgICAgIGh1ZSA9IGh1ZTAgKyBmICogZGg7XG4gICAgfSBlbHNlIGlmICghaXNOYU4oaHVlMCkpIHtcbiAgICAgIGh1ZSA9IGh1ZTA7XG5cbiAgICAgIGlmICgobGJ2MSA9PSAxIHx8IGxidjEgPT0gMCkgJiYgbSAhPSAnaHN2Jykge1xuICAgICAgICBzYXQgPSBzYXQwO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIWlzTmFOKGh1ZTEpKSB7XG4gICAgICBodWUgPSBodWUxO1xuXG4gICAgICBpZiAoKGxidjAgPT0gMSB8fCBsYnYwID09IDApICYmIG0gIT0gJ2hzdicpIHtcbiAgICAgICAgc2F0ID0gc2F0MTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaHVlID0gTnVtYmVyLk5hTjtcbiAgICB9XG5cbiAgICBpZiAoc2F0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHNhdCA9IHNhdDAgKyBmICogKHNhdDEgLSBzYXQwKTtcbiAgICB9XG5cbiAgICBsYnYgPSBsYnYwICsgZiAqIChsYnYxIC0gbGJ2MCk7XG4gICAgcmV0dXJuIG5ldyBDb2xvcl8xKFtodWUsIHNhdCwgbGJ2XSwgbSk7XG4gIH07XG5cbiAgdmFyIGxjaCQxID0gZnVuY3Rpb24gbGNoJDEoY29sMSwgY29sMiwgZikge1xuICAgIHJldHVybiBfaHN4KGNvbDEsIGNvbDIsIGYsICdsY2gnKTtcbiAgfTsgLy8gcmVnaXN0ZXIgaW50ZXJwb2xhdG9yXG5cblxuICBpbnRlcnBvbGF0b3IubGNoID0gbGNoJDE7XG4gIGludGVycG9sYXRvci5oY2wgPSBsY2gkMTtcblxuICB2YXIgbnVtJDEgPSBmdW5jdGlvbiBudW0kMShjb2wxLCBjb2wyLCBmKSB7XG4gICAgdmFyIGMxID0gY29sMS5udW0oKTtcbiAgICB2YXIgYzIgPSBjb2wyLm51bSgpO1xuICAgIHJldHVybiBuZXcgQ29sb3JfMShjMSArIGYgKiAoYzIgLSBjMSksICdudW0nKTtcbiAgfTsgLy8gcmVnaXN0ZXIgaW50ZXJwb2xhdG9yXG5cblxuICBpbnRlcnBvbGF0b3IubnVtID0gbnVtJDE7XG5cbiAgdmFyIGhjZyQxID0gZnVuY3Rpb24gaGNnJDEoY29sMSwgY29sMiwgZikge1xuICAgIHJldHVybiBfaHN4KGNvbDEsIGNvbDIsIGYsICdoY2cnKTtcbiAgfTsgLy8gcmVnaXN0ZXIgaW50ZXJwb2xhdG9yXG5cblxuICBpbnRlcnBvbGF0b3IuaGNnID0gaGNnJDE7XG5cbiAgdmFyIGhzaSQxID0gZnVuY3Rpb24gaHNpJDEoY29sMSwgY29sMiwgZikge1xuICAgIHJldHVybiBfaHN4KGNvbDEsIGNvbDIsIGYsICdoc2knKTtcbiAgfTsgLy8gcmVnaXN0ZXIgaW50ZXJwb2xhdG9yXG5cblxuICBpbnRlcnBvbGF0b3IuaHNpID0gaHNpJDE7XG5cbiAgdmFyIGhzbCQxID0gZnVuY3Rpb24gaHNsJDEoY29sMSwgY29sMiwgZikge1xuICAgIHJldHVybiBfaHN4KGNvbDEsIGNvbDIsIGYsICdoc2wnKTtcbiAgfTsgLy8gcmVnaXN0ZXIgaW50ZXJwb2xhdG9yXG5cblxuICBpbnRlcnBvbGF0b3IuaHNsID0gaHNsJDE7XG5cbiAgdmFyIGhzdiQxID0gZnVuY3Rpb24gaHN2JDEoY29sMSwgY29sMiwgZikge1xuICAgIHJldHVybiBfaHN4KGNvbDEsIGNvbDIsIGYsICdoc3YnKTtcbiAgfTsgLy8gcmVnaXN0ZXIgaW50ZXJwb2xhdG9yXG5cblxuICBpbnRlcnBvbGF0b3IuaHN2ID0gaHN2JDE7XG4gIHZhciBjbGlwX3JnYiQyID0gdXRpbHMuY2xpcF9yZ2I7XG4gIHZhciBwb3ckNCA9IE1hdGgucG93O1xuICB2YXIgc3FydCQzID0gTWF0aC5zcXJ0O1xuICB2YXIgUEkkMSA9IE1hdGguUEk7XG4gIHZhciBjb3MkMiA9IE1hdGguY29zO1xuICB2YXIgc2luJDEgPSBNYXRoLnNpbjtcbiAgdmFyIGF0YW4yJDEgPSBNYXRoLmF0YW4yO1xuXG4gIHZhciBhdmVyYWdlID0gZnVuY3Rpb24gYXZlcmFnZShjb2xvcnMsIG1vZGUsIHdlaWdodHMpIHtcbiAgICBpZiAobW9kZSA9PT0gdm9pZCAwKSBtb2RlID0gJ2xyZ2InO1xuICAgIGlmICh3ZWlnaHRzID09PSB2b2lkIDApIHdlaWdodHMgPSBudWxsO1xuICAgIHZhciBsID0gY29sb3JzLmxlbmd0aDtcblxuICAgIGlmICghd2VpZ2h0cykge1xuICAgICAgd2VpZ2h0cyA9IEFycmF5LmZyb20obmV3IEFycmF5KGwpKS5tYXAoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gMTtcbiAgICAgIH0pO1xuICAgIH0gLy8gbm9ybWFsaXplIHdlaWdodHNcblxuXG4gICAgdmFyIGsgPSBsIC8gd2VpZ2h0cy5yZWR1Y2UoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIHJldHVybiBhICsgYjtcbiAgICB9KTtcbiAgICB3ZWlnaHRzLmZvckVhY2goZnVuY3Rpb24gKHcsIGkpIHtcbiAgICAgIHdlaWdodHNbaV0gKj0gaztcbiAgICB9KTsgLy8gY29udmVydCBjb2xvcnMgdG8gQ29sb3Igb2JqZWN0c1xuXG4gICAgY29sb3JzID0gY29sb3JzLm1hcChmdW5jdGlvbiAoYykge1xuICAgICAgcmV0dXJuIG5ldyBDb2xvcl8xKGMpO1xuICAgIH0pO1xuXG4gICAgaWYgKG1vZGUgPT09ICdscmdiJykge1xuICAgICAgcmV0dXJuIF9hdmVyYWdlX2xyZ2IoY29sb3JzLCB3ZWlnaHRzKTtcbiAgICB9XG5cbiAgICB2YXIgZmlyc3QgPSBjb2xvcnMuc2hpZnQoKTtcbiAgICB2YXIgeHl6ID0gZmlyc3QuZ2V0KG1vZGUpO1xuICAgIHZhciBjbnQgPSBbXTtcbiAgICB2YXIgZHggPSAwO1xuICAgIHZhciBkeSA9IDA7IC8vIGluaXRpYWwgY29sb3JcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeHl6Lmxlbmd0aDsgaSsrKSB7XG4gICAgICB4eXpbaV0gPSAoeHl6W2ldIHx8IDApICogd2VpZ2h0c1swXTtcbiAgICAgIGNudC5wdXNoKGlzTmFOKHh5eltpXSkgPyAwIDogd2VpZ2h0c1swXSk7XG5cbiAgICAgIGlmIChtb2RlLmNoYXJBdChpKSA9PT0gJ2gnICYmICFpc05hTih4eXpbaV0pKSB7XG4gICAgICAgIHZhciBBID0geHl6W2ldIC8gMTgwICogUEkkMTtcbiAgICAgICAgZHggKz0gY29zJDIoQSkgKiB3ZWlnaHRzWzBdO1xuICAgICAgICBkeSArPSBzaW4kMShBKSAqIHdlaWdodHNbMF07XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGFscGhhID0gZmlyc3QuYWxwaGEoKSAqIHdlaWdodHNbMF07XG4gICAgY29sb3JzLmZvckVhY2goZnVuY3Rpb24gKGMsIGNpKSB7XG4gICAgICB2YXIgeHl6MiA9IGMuZ2V0KG1vZGUpO1xuICAgICAgYWxwaGEgKz0gYy5hbHBoYSgpICogd2VpZ2h0c1tjaSArIDFdO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHh5ei5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoIWlzTmFOKHh5ejJbaV0pKSB7XG4gICAgICAgICAgY250W2ldICs9IHdlaWdodHNbY2kgKyAxXTtcblxuICAgICAgICAgIGlmIChtb2RlLmNoYXJBdChpKSA9PT0gJ2gnKSB7XG4gICAgICAgICAgICB2YXIgQSA9IHh5ejJbaV0gLyAxODAgKiBQSSQxO1xuICAgICAgICAgICAgZHggKz0gY29zJDIoQSkgKiB3ZWlnaHRzW2NpICsgMV07XG4gICAgICAgICAgICBkeSArPSBzaW4kMShBKSAqIHdlaWdodHNbY2kgKyAxXTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgeHl6W2ldICs9IHh5ejJbaV0gKiB3ZWlnaHRzW2NpICsgMV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBmb3IgKHZhciBpJDEgPSAwOyBpJDEgPCB4eXoubGVuZ3RoOyBpJDErKykge1xuICAgICAgaWYgKG1vZGUuY2hhckF0KGkkMSkgPT09ICdoJykge1xuICAgICAgICB2YXIgQSQxID0gYXRhbjIkMShkeSAvIGNudFtpJDFdLCBkeCAvIGNudFtpJDFdKSAvIFBJJDEgKiAxODA7XG5cbiAgICAgICAgd2hpbGUgKEEkMSA8IDApIHtcbiAgICAgICAgICBBJDEgKz0gMzYwO1xuICAgICAgICB9XG5cbiAgICAgICAgd2hpbGUgKEEkMSA+PSAzNjApIHtcbiAgICAgICAgICBBJDEgLT0gMzYwO1xuICAgICAgICB9XG5cbiAgICAgICAgeHl6W2kkMV0gPSBBJDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB4eXpbaSQxXSA9IHh5eltpJDFdIC8gY250W2kkMV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgYWxwaGEgLz0gbDtcbiAgICByZXR1cm4gbmV3IENvbG9yXzEoeHl6LCBtb2RlKS5hbHBoYShhbHBoYSA+IDAuOTk5OTkgPyAxIDogYWxwaGEsIHRydWUpO1xuICB9O1xuXG4gIHZhciBfYXZlcmFnZV9scmdiID0gZnVuY3Rpb24gX2F2ZXJhZ2VfbHJnYihjb2xvcnMsIHdlaWdodHMpIHtcbiAgICB2YXIgbCA9IGNvbG9ycy5sZW5ndGg7XG4gICAgdmFyIHh5eiA9IFswLCAwLCAwLCAwXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29sb3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY29sID0gY29sb3JzW2ldO1xuICAgICAgdmFyIGYgPSB3ZWlnaHRzW2ldIC8gbDtcbiAgICAgIHZhciByZ2IgPSBjb2wuX3JnYjtcbiAgICAgIHh5elswXSArPSBwb3ckNChyZ2JbMF0sIDIpICogZjtcbiAgICAgIHh5elsxXSArPSBwb3ckNChyZ2JbMV0sIDIpICogZjtcbiAgICAgIHh5elsyXSArPSBwb3ckNChyZ2JbMl0sIDIpICogZjtcbiAgICAgIHh5elszXSArPSByZ2JbM10gKiBmO1xuICAgIH1cblxuICAgIHh5elswXSA9IHNxcnQkMyh4eXpbMF0pO1xuICAgIHh5elsxXSA9IHNxcnQkMyh4eXpbMV0pO1xuICAgIHh5elsyXSA9IHNxcnQkMyh4eXpbMl0pO1xuXG4gICAgaWYgKHh5elszXSA+IDAuOTk5OTk5OSkge1xuICAgICAgeHl6WzNdID0gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IENvbG9yXzEoY2xpcF9yZ2IkMih4eXopKTtcbiAgfTsgLy8gbWluaW1hbCBtdWx0aS1wdXJwb3NlIGludGVyZmFjZVxuICAvLyBAcmVxdWlyZXMgdXRpbHMgY29sb3IgYW5hbHl6ZVxuXG5cbiAgdmFyIHR5cGUkaiA9IHV0aWxzLnR5cGU7XG4gIHZhciBwb3ckNSA9IE1hdGgucG93O1xuXG4gIHZhciBzY2FsZSA9IGZ1bmN0aW9uIHNjYWxlKGNvbG9ycykge1xuICAgIC8vIGNvbnN0cnVjdG9yXG4gICAgdmFyIF9tb2RlID0gJ3JnYic7XG5cbiAgICB2YXIgX25hY29sID0gY2hyb21hXzEoJyNjY2MnKTtcblxuICAgIHZhciBfc3ByZWFkID0gMDsgLy8gY29uc3QgX2ZpeGVkID0gZmFsc2U7XG5cbiAgICB2YXIgX2RvbWFpbiA9IFswLCAxXTtcbiAgICB2YXIgX3BvcyA9IFtdO1xuICAgIHZhciBfcGFkZGluZyA9IFswLCAwXTtcbiAgICB2YXIgX2NsYXNzZXMgPSBmYWxzZTtcbiAgICB2YXIgX2NvbG9ycyA9IFtdO1xuICAgIHZhciBfb3V0ID0gZmFsc2U7XG4gICAgdmFyIF9taW4gPSAwO1xuICAgIHZhciBfbWF4ID0gMTtcbiAgICB2YXIgX2NvcnJlY3RMaWdodG5lc3MgPSBmYWxzZTtcbiAgICB2YXIgX2NvbG9yQ2FjaGUgPSB7fTtcbiAgICB2YXIgX3VzZUNhY2hlID0gdHJ1ZTtcbiAgICB2YXIgX2dhbW1hID0gMTsgLy8gcHJpdmF0ZSBtZXRob2RzXG5cbiAgICB2YXIgc2V0Q29sb3JzID0gZnVuY3Rpb24gc2V0Q29sb3JzKGNvbG9ycykge1xuICAgICAgY29sb3JzID0gY29sb3JzIHx8IFsnI2ZmZicsICcjMDAwJ107XG5cbiAgICAgIGlmIChjb2xvcnMgJiYgdHlwZSRqKGNvbG9ycykgPT09ICdzdHJpbmcnICYmIGNocm9tYV8xLmJyZXdlciAmJiBjaHJvbWFfMS5icmV3ZXJbY29sb3JzLnRvTG93ZXJDYXNlKCldKSB7XG4gICAgICAgIGNvbG9ycyA9IGNocm9tYV8xLmJyZXdlcltjb2xvcnMudG9Mb3dlckNhc2UoKV07XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlJGooY29sb3JzKSA9PT0gJ2FycmF5Jykge1xuICAgICAgICAvLyBoYW5kbGUgc2luZ2xlIGNvbG9yXG4gICAgICAgIGlmIChjb2xvcnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgY29sb3JzID0gW2NvbG9yc1swXSwgY29sb3JzWzBdXTtcbiAgICAgICAgfSAvLyBtYWtlIGEgY29weSBvZiB0aGUgY29sb3JzXG5cblxuICAgICAgICBjb2xvcnMgPSBjb2xvcnMuc2xpY2UoMCk7IC8vIGNvbnZlcnQgdG8gY2hyb21hIGNsYXNzZXNcblxuICAgICAgICBmb3IgKHZhciBjID0gMDsgYyA8IGNvbG9ycy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgIGNvbG9yc1tjXSA9IGNocm9tYV8xKGNvbG9yc1tjXSk7XG4gICAgICAgIH0gLy8gYXV0by1maWxsIGNvbG9yIHBvc2l0aW9uXG5cblxuICAgICAgICBfcG9zLmxlbmd0aCA9IDA7XG5cbiAgICAgICAgZm9yICh2YXIgYyQxID0gMDsgYyQxIDwgY29sb3JzLmxlbmd0aDsgYyQxKyspIHtcbiAgICAgICAgICBfcG9zLnB1c2goYyQxIC8gKGNvbG9ycy5sZW5ndGggLSAxKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmVzZXRDYWNoZSgpO1xuICAgICAgcmV0dXJuIF9jb2xvcnMgPSBjb2xvcnM7XG4gICAgfTtcblxuICAgIHZhciBnZXRDbGFzcyA9IGZ1bmN0aW9uIGdldENsYXNzKHZhbHVlKSB7XG4gICAgICBpZiAoX2NsYXNzZXMgIT0gbnVsbCkge1xuICAgICAgICB2YXIgbiA9IF9jbGFzc2VzLmxlbmd0aCAtIDE7XG4gICAgICAgIHZhciBpID0gMDtcblxuICAgICAgICB3aGlsZSAoaSA8IG4gJiYgdmFsdWUgPj0gX2NsYXNzZXNbaV0pIHtcbiAgICAgICAgICBpKys7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaSAtIDE7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAwO1xuICAgIH07XG5cbiAgICB2YXIgdE1hcExpZ2h0bmVzcyA9IGZ1bmN0aW9uIHRNYXBMaWdodG5lc3ModCkge1xuICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcblxuICAgIHZhciB0TWFwRG9tYWluID0gZnVuY3Rpb24gdE1hcERvbWFpbih0KSB7XG4gICAgICByZXR1cm4gdDtcbiAgICB9OyAvLyBjb25zdCBjbGFzc2lmeVZhbHVlID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAvLyAgICAgbGV0IHZhbCA9IHZhbHVlO1xuICAgIC8vICAgICBpZiAoX2NsYXNzZXMubGVuZ3RoID4gMikge1xuICAgIC8vICAgICAgICAgY29uc3QgbiA9IF9jbGFzc2VzLmxlbmd0aC0xO1xuICAgIC8vICAgICAgICAgY29uc3QgaSA9IGdldENsYXNzKHZhbHVlKTtcbiAgICAvLyAgICAgICAgIGNvbnN0IG1pbmMgPSBfY2xhc3Nlc1swXSArICgoX2NsYXNzZXNbMV0tX2NsYXNzZXNbMF0pICogKDAgKyAoX3NwcmVhZCAqIDAuNSkpKTsgIC8vIGNlbnRlciBvZiAxc3QgY2xhc3NcbiAgICAvLyAgICAgICAgIGNvbnN0IG1heGMgPSBfY2xhc3Nlc1tuLTFdICsgKChfY2xhc3Nlc1tuXS1fY2xhc3Nlc1tuLTFdKSAqICgxIC0gKF9zcHJlYWQgKiAwLjUpKSk7ICAvLyBjZW50ZXIgb2YgbGFzdCBjbGFzc1xuICAgIC8vICAgICAgICAgdmFsID0gX21pbiArICgoKChfY2xhc3Nlc1tpXSArICgoX2NsYXNzZXNbaSsxXSAtIF9jbGFzc2VzW2ldKSAqIDAuNSkpIC0gbWluYykgLyAobWF4Yy1taW5jKSkgKiAoX21heCAtIF9taW4pKTtcbiAgICAvLyAgICAgfVxuICAgIC8vICAgICByZXR1cm4gdmFsO1xuICAgIC8vIH07XG5cblxuICAgIHZhciBnZXRDb2xvciA9IGZ1bmN0aW9uIGdldENvbG9yKHZhbCwgYnlwYXNzTWFwKSB7XG4gICAgICB2YXIgY29sLCB0O1xuXG4gICAgICBpZiAoYnlwYXNzTWFwID09IG51bGwpIHtcbiAgICAgICAgYnlwYXNzTWFwID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc05hTih2YWwpIHx8IHZhbCA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gX25hY29sO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWJ5cGFzc01hcCkge1xuICAgICAgICBpZiAoX2NsYXNzZXMgJiYgX2NsYXNzZXMubGVuZ3RoID4gMikge1xuICAgICAgICAgIC8vIGZpbmQgdGhlIGNsYXNzXG4gICAgICAgICAgdmFyIGMgPSBnZXRDbGFzcyh2YWwpO1xuICAgICAgICAgIHQgPSBjIC8gKF9jbGFzc2VzLmxlbmd0aCAtIDIpO1xuICAgICAgICB9IGVsc2UgaWYgKF9tYXggIT09IF9taW4pIHtcbiAgICAgICAgICAvLyBqdXN0IGludGVycG9sYXRlIGJldHdlZW4gbWluL21heFxuICAgICAgICAgIHQgPSAodmFsIC0gX21pbikgLyAoX21heCAtIF9taW4pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHQgPSAxO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0ID0gdmFsO1xuICAgICAgfSAvLyBkb21haW4gbWFwXG5cblxuICAgICAgdCA9IHRNYXBEb21haW4odCk7XG5cbiAgICAgIGlmICghYnlwYXNzTWFwKSB7XG4gICAgICAgIHQgPSB0TWFwTGlnaHRuZXNzKHQpOyAvLyBsaWdodG5lc3MgY29ycmVjdGlvblxuICAgICAgfVxuXG4gICAgICBpZiAoX2dhbW1hICE9PSAxKSB7XG4gICAgICAgIHQgPSBwb3ckNSh0LCBfZ2FtbWEpO1xuICAgICAgfVxuXG4gICAgICB0ID0gX3BhZGRpbmdbMF0gKyB0ICogKDEgLSBfcGFkZGluZ1swXSAtIF9wYWRkaW5nWzFdKTtcbiAgICAgIHQgPSBNYXRoLm1pbigxLCBNYXRoLm1heCgwLCB0KSk7XG4gICAgICB2YXIgayA9IE1hdGguZmxvb3IodCAqIDEwMDAwKTtcblxuICAgICAgaWYgKF91c2VDYWNoZSAmJiBfY29sb3JDYWNoZVtrXSkge1xuICAgICAgICBjb2wgPSBfY29sb3JDYWNoZVtrXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0eXBlJGooX2NvbG9ycykgPT09ICdhcnJheScpIHtcbiAgICAgICAgICAvL2ZvciBpIGluIFswLi5fcG9zLmxlbmd0aC0xXVxuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgX3Bvcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIHAgPSBfcG9zW2ldO1xuXG4gICAgICAgICAgICBpZiAodCA8PSBwKSB7XG4gICAgICAgICAgICAgIGNvbCA9IF9jb2xvcnNbaV07XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodCA+PSBwICYmIGkgPT09IF9wb3MubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICBjb2wgPSBfY29sb3JzW2ldO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHQgPiBwICYmIHQgPCBfcG9zW2kgKyAxXSkge1xuICAgICAgICAgICAgICB0ID0gKHQgLSBwKSAvIChfcG9zW2kgKyAxXSAtIHApO1xuICAgICAgICAgICAgICBjb2wgPSBjaHJvbWFfMS5pbnRlcnBvbGF0ZShfY29sb3JzW2ldLCBfY29sb3JzW2kgKyAxXSwgdCwgX21vZGUpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSRqKF9jb2xvcnMpID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgY29sID0gX2NvbG9ycyh0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChfdXNlQ2FjaGUpIHtcbiAgICAgICAgICBfY29sb3JDYWNoZVtrXSA9IGNvbDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29sO1xuICAgIH07XG5cbiAgICB2YXIgcmVzZXRDYWNoZSA9IGZ1bmN0aW9uIHJlc2V0Q2FjaGUoKSB7XG4gICAgICByZXR1cm4gX2NvbG9yQ2FjaGUgPSB7fTtcbiAgICB9O1xuXG4gICAgc2V0Q29sb3JzKGNvbG9ycyk7IC8vIHB1YmxpYyBpbnRlcmZhY2VcblxuICAgIHZhciBmID0gZnVuY3Rpb24gZih2KSB7XG4gICAgICB2YXIgYyA9IGNocm9tYV8xKGdldENvbG9yKHYpKTtcblxuICAgICAgaWYgKF9vdXQgJiYgY1tfb3V0XSkge1xuICAgICAgICByZXR1cm4gY1tfb3V0XSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGM7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGYuY2xhc3NlcyA9IGZ1bmN0aW9uIChjbGFzc2VzKSB7XG4gICAgICBpZiAoY2xhc3NlcyAhPSBudWxsKSB7XG4gICAgICAgIGlmICh0eXBlJGooY2xhc3NlcykgPT09ICdhcnJheScpIHtcbiAgICAgICAgICBfY2xhc3NlcyA9IGNsYXNzZXM7XG4gICAgICAgICAgX2RvbWFpbiA9IFtjbGFzc2VzWzBdLCBjbGFzc2VzW2NsYXNzZXMubGVuZ3RoIC0gMV1dO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBkID0gY2hyb21hXzEuYW5hbHl6ZShfZG9tYWluKTtcblxuICAgICAgICAgIGlmIChjbGFzc2VzID09PSAwKSB7XG4gICAgICAgICAgICBfY2xhc3NlcyA9IFtkLm1pbiwgZC5tYXhdO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBfY2xhc3NlcyA9IGNocm9tYV8xLmxpbWl0cyhkLCAnZScsIGNsYXNzZXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX2NsYXNzZXM7XG4gICAgfTtcblxuICAgIGYuZG9tYWluID0gZnVuY3Rpb24gKGRvbWFpbikge1xuICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBfZG9tYWluO1xuICAgICAgfVxuXG4gICAgICBfbWluID0gZG9tYWluWzBdO1xuICAgICAgX21heCA9IGRvbWFpbltkb21haW4ubGVuZ3RoIC0gMV07XG4gICAgICBfcG9zID0gW107XG4gICAgICB2YXIgayA9IF9jb2xvcnMubGVuZ3RoO1xuXG4gICAgICBpZiAoZG9tYWluLmxlbmd0aCA9PT0gayAmJiBfbWluICE9PSBfbWF4KSB7XG4gICAgICAgIC8vIHVwZGF0ZSBwb3NpdGlvbnNcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxpc3QgPSBBcnJheS5mcm9tKGRvbWFpbik7IGkgPCBsaXN0Lmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgdmFyIGQgPSBsaXN0W2ldO1xuXG4gICAgICAgICAgX3Bvcy5wdXNoKChkIC0gX21pbikgLyAoX21heCAtIF9taW4pKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yICh2YXIgYyA9IDA7IGMgPCBrOyBjKyspIHtcbiAgICAgICAgICBfcG9zLnB1c2goYyAvIChrIC0gMSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRvbWFpbi5sZW5ndGggPiAyKSB7XG4gICAgICAgICAgLy8gc2V0IGRvbWFpbiBtYXBcbiAgICAgICAgICB2YXIgdE91dCA9IGRvbWFpbi5tYXAoZnVuY3Rpb24gKGQsIGkpIHtcbiAgICAgICAgICAgIHJldHVybiBpIC8gKGRvbWFpbi5sZW5ndGggLSAxKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB2YXIgdEJyZWFrcyA9IGRvbWFpbi5tYXAoZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgICAgIHJldHVybiAoZCAtIF9taW4pIC8gKF9tYXggLSBfbWluKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGlmICghdEJyZWFrcy5ldmVyeShmdW5jdGlvbiAodmFsLCBpKSB7XG4gICAgICAgICAgICByZXR1cm4gdE91dFtpXSA9PT0gdmFsO1xuICAgICAgICAgIH0pKSB7XG4gICAgICAgICAgICB0TWFwRG9tYWluID0gZnVuY3Rpb24gdE1hcERvbWFpbih0KSB7XG4gICAgICAgICAgICAgIGlmICh0IDw9IDAgfHwgdCA+PSAxKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHQ7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB2YXIgaSA9IDA7XG5cbiAgICAgICAgICAgICAgd2hpbGUgKHQgPj0gdEJyZWFrc1tpICsgMV0pIHtcbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB2YXIgZiA9ICh0IC0gdEJyZWFrc1tpXSkgLyAodEJyZWFrc1tpICsgMV0gLSB0QnJlYWtzW2ldKTtcbiAgICAgICAgICAgICAgdmFyIG91dCA9IHRPdXRbaV0gKyBmICogKHRPdXRbaSArIDFdIC0gdE91dFtpXSk7XG4gICAgICAgICAgICAgIHJldHVybiBvdXQ7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBfZG9tYWluID0gW19taW4sIF9tYXhdO1xuICAgICAgcmV0dXJuIGY7XG4gICAgfTtcblxuICAgIGYubW9kZSA9IGZ1bmN0aW9uIChfbSkge1xuICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBfbW9kZTtcbiAgICAgIH1cblxuICAgICAgX21vZGUgPSBfbTtcbiAgICAgIHJlc2V0Q2FjaGUoKTtcbiAgICAgIHJldHVybiBmO1xuICAgIH07XG5cbiAgICBmLnJhbmdlID0gZnVuY3Rpb24gKGNvbG9ycywgX3Bvcykge1xuICAgICAgc2V0Q29sb3JzKGNvbG9ycywgX3Bvcyk7XG4gICAgICByZXR1cm4gZjtcbiAgICB9O1xuXG4gICAgZi5vdXQgPSBmdW5jdGlvbiAoX28pIHtcbiAgICAgIF9vdXQgPSBfbztcbiAgICAgIHJldHVybiBmO1xuICAgIH07XG5cbiAgICBmLnNwcmVhZCA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gX3NwcmVhZDtcbiAgICAgIH1cblxuICAgICAgX3NwcmVhZCA9IHZhbDtcbiAgICAgIHJldHVybiBmO1xuICAgIH07XG5cbiAgICBmLmNvcnJlY3RMaWdodG5lc3MgPSBmdW5jdGlvbiAodikge1xuICAgICAgaWYgKHYgPT0gbnVsbCkge1xuICAgICAgICB2ID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgX2NvcnJlY3RMaWdodG5lc3MgPSB2O1xuICAgICAgcmVzZXRDYWNoZSgpO1xuXG4gICAgICBpZiAoX2NvcnJlY3RMaWdodG5lc3MpIHtcbiAgICAgICAgdE1hcExpZ2h0bmVzcyA9IGZ1bmN0aW9uIHRNYXBMaWdodG5lc3ModCkge1xuICAgICAgICAgIHZhciBMMCA9IGdldENvbG9yKDAsIHRydWUpLmxhYigpWzBdO1xuICAgICAgICAgIHZhciBMMSA9IGdldENvbG9yKDEsIHRydWUpLmxhYigpWzBdO1xuICAgICAgICAgIHZhciBwb2wgPSBMMCA+IEwxO1xuICAgICAgICAgIHZhciBMX2FjdHVhbCA9IGdldENvbG9yKHQsIHRydWUpLmxhYigpWzBdO1xuICAgICAgICAgIHZhciBMX2lkZWFsID0gTDAgKyAoTDEgLSBMMCkgKiB0O1xuICAgICAgICAgIHZhciBMX2RpZmYgPSBMX2FjdHVhbCAtIExfaWRlYWw7XG4gICAgICAgICAgdmFyIHQwID0gMDtcbiAgICAgICAgICB2YXIgdDEgPSAxO1xuICAgICAgICAgIHZhciBtYXhfaXRlciA9IDIwO1xuXG4gICAgICAgICAgd2hpbGUgKE1hdGguYWJzKExfZGlmZikgPiAxZS0yICYmIG1heF9pdGVyLS0gPiAwKSB7XG4gICAgICAgICAgICAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICBpZiAocG9sKSB7XG4gICAgICAgICAgICAgICAgTF9kaWZmICo9IC0xO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKExfZGlmZiA8IDApIHtcbiAgICAgICAgICAgICAgICB0MCA9IHQ7XG4gICAgICAgICAgICAgICAgdCArPSAodDEgLSB0KSAqIDAuNTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0MSA9IHQ7XG4gICAgICAgICAgICAgICAgdCArPSAodDAgLSB0KSAqIDAuNTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIExfYWN0dWFsID0gZ2V0Q29sb3IodCwgdHJ1ZSkubGFiKClbMF07XG4gICAgICAgICAgICAgIHJldHVybiBMX2RpZmYgPSBMX2FjdHVhbCAtIExfaWRlYWw7XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB0O1xuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdE1hcExpZ2h0bmVzcyA9IGZ1bmN0aW9uIHRNYXBMaWdodG5lc3ModCkge1xuICAgICAgICAgIHJldHVybiB0O1xuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZjtcbiAgICB9O1xuXG4gICAgZi5wYWRkaW5nID0gZnVuY3Rpb24gKHApIHtcbiAgICAgIGlmIChwICE9IG51bGwpIHtcbiAgICAgICAgaWYgKHR5cGUkaihwKSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBwID0gW3AsIHBdO1xuICAgICAgICB9XG5cbiAgICAgICAgX3BhZGRpbmcgPSBwO1xuICAgICAgICByZXR1cm4gZjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBfcGFkZGluZztcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZi5jb2xvcnMgPSBmdW5jdGlvbiAobnVtQ29sb3JzLCBvdXQpIHtcbiAgICAgIC8vIElmIG5vIGFyZ3VtZW50cyBhcmUgZ2l2ZW4sIHJldHVybiB0aGUgb3JpZ2luYWwgY29sb3JzIHRoYXQgd2VyZSBwcm92aWRlZFxuICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgICAgIG91dCA9ICdoZXgnO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVzdWx0ID0gW107XG5cbiAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJlc3VsdCA9IF9jb2xvcnMuc2xpY2UoMCk7XG4gICAgICB9IGVsc2UgaWYgKG51bUNvbG9ycyA9PT0gMSkge1xuICAgICAgICByZXN1bHQgPSBbZigwLjUpXTtcbiAgICAgIH0gZWxzZSBpZiAobnVtQ29sb3JzID4gMSkge1xuICAgICAgICB2YXIgZG0gPSBfZG9tYWluWzBdO1xuICAgICAgICB2YXIgZGQgPSBfZG9tYWluWzFdIC0gZG07XG4gICAgICAgIHJlc3VsdCA9IF9fcmFuZ2VfXygwLCBudW1Db2xvcnMsIGZhbHNlKS5tYXAoZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgICByZXR1cm4gZihkbSArIGkgLyAobnVtQ29sb3JzIC0gMSkgKiBkZCk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gcmV0dXJucyBhbGwgY29sb3JzIGJhc2VkIG9uIHRoZSBkZWZpbmVkIGNsYXNzZXNcbiAgICAgICAgY29sb3JzID0gW107XG4gICAgICAgIHZhciBzYW1wbGVzID0gW107XG5cbiAgICAgICAgaWYgKF9jbGFzc2VzICYmIF9jbGFzc2VzLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMSwgZW5kID0gX2NsYXNzZXMubGVuZ3RoLCBhc2MgPSAxIDw9IGVuZDsgYXNjID8gaSA8IGVuZCA6IGkgPiBlbmQ7IGFzYyA/IGkrKyA6IGktLSkge1xuICAgICAgICAgICAgc2FtcGxlcy5wdXNoKChfY2xhc3Nlc1tpIC0gMV0gKyBfY2xhc3Nlc1tpXSkgKiAwLjUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzYW1wbGVzID0gX2RvbWFpbjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlc3VsdCA9IHNhbXBsZXMubWFwKGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgcmV0dXJuIGYodik7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2hyb21hXzFbb3V0XSkge1xuICAgICAgICByZXN1bHQgPSByZXN1bHQubWFwKGZ1bmN0aW9uIChjKSB7XG4gICAgICAgICAgcmV0dXJuIGNbb3V0XSgpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgZi5jYWNoZSA9IGZ1bmN0aW9uIChjKSB7XG4gICAgICBpZiAoYyAhPSBudWxsKSB7XG4gICAgICAgIF91c2VDYWNoZSA9IGM7XG4gICAgICAgIHJldHVybiBmO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIF91c2VDYWNoZTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZi5nYW1tYSA9IGZ1bmN0aW9uIChnKSB7XG4gICAgICBpZiAoZyAhPSBudWxsKSB7XG4gICAgICAgIF9nYW1tYSA9IGc7XG4gICAgICAgIHJldHVybiBmO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIF9nYW1tYTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZi5ub2RhdGEgPSBmdW5jdGlvbiAoZCkge1xuICAgICAgaWYgKGQgIT0gbnVsbCkge1xuICAgICAgICBfbmFjb2wgPSBjaHJvbWFfMShkKTtcbiAgICAgICAgcmV0dXJuIGY7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gX25hY29sO1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gZjtcbiAgfTtcblxuICBmdW5jdGlvbiBfX3JhbmdlX18obGVmdCwgcmlnaHQsIGluY2x1c2l2ZSkge1xuICAgIHZhciByYW5nZSA9IFtdO1xuICAgIHZhciBhc2NlbmRpbmcgPSBsZWZ0IDwgcmlnaHQ7XG4gICAgdmFyIGVuZCA9ICFpbmNsdXNpdmUgPyByaWdodCA6IGFzY2VuZGluZyA/IHJpZ2h0ICsgMSA6IHJpZ2h0IC0gMTtcblxuICAgIGZvciAodmFyIGkgPSBsZWZ0OyBhc2NlbmRpbmcgPyBpIDwgZW5kIDogaSA+IGVuZDsgYXNjZW5kaW5nID8gaSsrIDogaS0tKSB7XG4gICAgICByYW5nZS5wdXNoKGkpO1xuICAgIH1cblxuICAgIHJldHVybiByYW5nZTtcbiAgfSAvL1xuICAvLyBpbnRlcnBvbGF0ZXMgYmV0d2VlbiBhIHNldCBvZiBjb2xvcnMgdXppbmcgYSBiZXppZXIgc3BsaW5lXG4gIC8vXG4gIC8vIEByZXF1aXJlcyB1dGlscyBsYWJcblxuXG4gIHZhciBiZXppZXIgPSBmdW5jdGlvbiBiZXppZXIoY29sb3JzKSB7XG4gICAgdmFyIGFzc2lnbiwgYXNzaWduJDEsIGFzc2lnbiQyO1xuICAgIHZhciBJLCBsYWIwLCBsYWIxLCBsYWIyO1xuICAgIGNvbG9ycyA9IGNvbG9ycy5tYXAoZnVuY3Rpb24gKGMpIHtcbiAgICAgIHJldHVybiBuZXcgQ29sb3JfMShjKTtcbiAgICB9KTtcblxuICAgIGlmIChjb2xvcnMubGVuZ3RoID09PSAyKSB7XG4gICAgICAvLyBsaW5lYXIgaW50ZXJwb2xhdGlvblxuICAgICAgYXNzaWduID0gY29sb3JzLm1hcChmdW5jdGlvbiAoYykge1xuICAgICAgICByZXR1cm4gYy5sYWIoKTtcbiAgICAgIH0pLCBsYWIwID0gYXNzaWduWzBdLCBsYWIxID0gYXNzaWduWzFdO1xuXG4gICAgICBJID0gZnVuY3Rpb24gSSh0KSB7XG4gICAgICAgIHZhciBsYWIgPSBbMCwgMSwgMl0ubWFwKGZ1bmN0aW9uIChpKSB7XG4gICAgICAgICAgcmV0dXJuIGxhYjBbaV0gKyB0ICogKGxhYjFbaV0gLSBsYWIwW2ldKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBuZXcgQ29sb3JfMShsYWIsICdsYWInKTtcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChjb2xvcnMubGVuZ3RoID09PSAzKSB7XG4gICAgICAvLyBxdWFkcmF0aWMgYmV6aWVyIGludGVycG9sYXRpb25cbiAgICAgIGFzc2lnbiQxID0gY29sb3JzLm1hcChmdW5jdGlvbiAoYykge1xuICAgICAgICByZXR1cm4gYy5sYWIoKTtcbiAgICAgIH0pLCBsYWIwID0gYXNzaWduJDFbMF0sIGxhYjEgPSBhc3NpZ24kMVsxXSwgbGFiMiA9IGFzc2lnbiQxWzJdO1xuXG4gICAgICBJID0gZnVuY3Rpb24gSSh0KSB7XG4gICAgICAgIHZhciBsYWIgPSBbMCwgMSwgMl0ubWFwKGZ1bmN0aW9uIChpKSB7XG4gICAgICAgICAgcmV0dXJuICgxIC0gdCkgKiAoMSAtIHQpICogbGFiMFtpXSArIDIgKiAoMSAtIHQpICogdCAqIGxhYjFbaV0gKyB0ICogdCAqIGxhYjJbaV07XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbmV3IENvbG9yXzEobGFiLCAnbGFiJyk7XG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAoY29sb3JzLmxlbmd0aCA9PT0gNCkge1xuICAgICAgLy8gY3ViaWMgYmV6aWVyIGludGVycG9sYXRpb25cbiAgICAgIHZhciBsYWIzO1xuICAgICAgYXNzaWduJDIgPSBjb2xvcnMubWFwKGZ1bmN0aW9uIChjKSB7XG4gICAgICAgIHJldHVybiBjLmxhYigpO1xuICAgICAgfSksIGxhYjAgPSBhc3NpZ24kMlswXSwgbGFiMSA9IGFzc2lnbiQyWzFdLCBsYWIyID0gYXNzaWduJDJbMl0sIGxhYjMgPSBhc3NpZ24kMlszXTtcblxuICAgICAgSSA9IGZ1bmN0aW9uIEkodCkge1xuICAgICAgICB2YXIgbGFiID0gWzAsIDEsIDJdLm1hcChmdW5jdGlvbiAoaSkge1xuICAgICAgICAgIHJldHVybiAoMSAtIHQpICogKDEgLSB0KSAqICgxIC0gdCkgKiBsYWIwW2ldICsgMyAqICgxIC0gdCkgKiAoMSAtIHQpICogdCAqIGxhYjFbaV0gKyAzICogKDEgLSB0KSAqIHQgKiB0ICogbGFiMltpXSArIHQgKiB0ICogdCAqIGxhYjNbaV07XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbmV3IENvbG9yXzEobGFiLCAnbGFiJyk7XG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAoY29sb3JzLmxlbmd0aCA9PT0gNSkge1xuICAgICAgdmFyIEkwID0gYmV6aWVyKGNvbG9ycy5zbGljZSgwLCAzKSk7XG4gICAgICB2YXIgSTEgPSBiZXppZXIoY29sb3JzLnNsaWNlKDIsIDUpKTtcblxuICAgICAgSSA9IGZ1bmN0aW9uIEkodCkge1xuICAgICAgICBpZiAodCA8IDAuNSkge1xuICAgICAgICAgIHJldHVybiBJMCh0ICogMik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIEkxKCh0IC0gMC41KSAqIDIpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBJO1xuICB9O1xuXG4gIHZhciBiZXppZXJfMSA9IGZ1bmN0aW9uIGJlemllcl8xKGNvbG9ycykge1xuICAgIHZhciBmID0gYmV6aWVyKGNvbG9ycyk7XG5cbiAgICBmLnNjYWxlID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHNjYWxlKGYpO1xuICAgIH07XG5cbiAgICByZXR1cm4gZjtcbiAgfTtcbiAgLypcbiAgICogaW50ZXJwb2xhdGVzIGJldHdlZW4gYSBzZXQgb2YgY29sb3JzIHV6aW5nIGEgYmV6aWVyIHNwbGluZVxuICAgKiBibGVuZCBtb2RlIGZvcm11bGFzIHRha2VuIGZyb20gaHR0cDovL3d3dy52ZW50dXJlLXdhcmUuY29tL2tldmluL2NvZGluZy9sZXRzLWxlYXJuLW1hdGgtcGhvdG9zaG9wLWJsZW5kLW1vZGVzL1xuICAgKi9cblxuXG4gIHZhciBibGVuZCA9IGZ1bmN0aW9uIGJsZW5kKGJvdHRvbSwgdG9wLCBtb2RlKSB7XG4gICAgaWYgKCFibGVuZFttb2RlXSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmtub3duIGJsZW5kIG1vZGUgJyArIG1vZGUpO1xuICAgIH1cblxuICAgIHJldHVybiBibGVuZFttb2RlXShib3R0b20sIHRvcCk7XG4gIH07XG5cbiAgdmFyIGJsZW5kX2YgPSBmdW5jdGlvbiBibGVuZF9mKGYpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGJvdHRvbSwgdG9wKSB7XG4gICAgICB2YXIgYzAgPSBjaHJvbWFfMSh0b3ApLnJnYigpO1xuICAgICAgdmFyIGMxID0gY2hyb21hXzEoYm90dG9tKS5yZ2IoKTtcbiAgICAgIHJldHVybiBjaHJvbWFfMS5yZ2IoZihjMCwgYzEpKTtcbiAgICB9O1xuICB9O1xuXG4gIHZhciBlYWNoID0gZnVuY3Rpb24gZWFjaChmKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChjMCwgYzEpIHtcbiAgICAgIHZhciBvdXQgPSBbXTtcbiAgICAgIG91dFswXSA9IGYoYzBbMF0sIGMxWzBdKTtcbiAgICAgIG91dFsxXSA9IGYoYzBbMV0sIGMxWzFdKTtcbiAgICAgIG91dFsyXSA9IGYoYzBbMl0sIGMxWzJdKTtcbiAgICAgIHJldHVybiBvdXQ7XG4gICAgfTtcbiAgfTtcblxuICB2YXIgbm9ybWFsID0gZnVuY3Rpb24gbm9ybWFsKGEpIHtcbiAgICByZXR1cm4gYTtcbiAgfTtcblxuICB2YXIgbXVsdGlwbHkgPSBmdW5jdGlvbiBtdWx0aXBseShhLCBiKSB7XG4gICAgcmV0dXJuIGEgKiBiIC8gMjU1O1xuICB9O1xuXG4gIHZhciBkYXJrZW4kMSA9IGZ1bmN0aW9uIGRhcmtlbiQxKGEsIGIpIHtcbiAgICByZXR1cm4gYSA+IGIgPyBiIDogYTtcbiAgfTtcblxuICB2YXIgbGlnaHRlbiA9IGZ1bmN0aW9uIGxpZ2h0ZW4oYSwgYikge1xuICAgIHJldHVybiBhID4gYiA/IGEgOiBiO1xuICB9O1xuXG4gIHZhciBzY3JlZW4gPSBmdW5jdGlvbiBzY3JlZW4oYSwgYikge1xuICAgIHJldHVybiAyNTUgKiAoMSAtICgxIC0gYSAvIDI1NSkgKiAoMSAtIGIgLyAyNTUpKTtcbiAgfTtcblxuICB2YXIgb3ZlcmxheSA9IGZ1bmN0aW9uIG92ZXJsYXkoYSwgYikge1xuICAgIHJldHVybiBiIDwgMTI4ID8gMiAqIGEgKiBiIC8gMjU1IDogMjU1ICogKDEgLSAyICogKDEgLSBhIC8gMjU1KSAqICgxIC0gYiAvIDI1NSkpO1xuICB9O1xuXG4gIHZhciBidXJuID0gZnVuY3Rpb24gYnVybihhLCBiKSB7XG4gICAgcmV0dXJuIDI1NSAqICgxIC0gKDEgLSBiIC8gMjU1KSAvIChhIC8gMjU1KSk7XG4gIH07XG5cbiAgdmFyIGRvZGdlID0gZnVuY3Rpb24gZG9kZ2UoYSwgYikge1xuICAgIGlmIChhID09PSAyNTUpIHtcbiAgICAgIHJldHVybiAyNTU7XG4gICAgfVxuXG4gICAgYSA9IDI1NSAqIChiIC8gMjU1KSAvICgxIC0gYSAvIDI1NSk7XG4gICAgcmV0dXJuIGEgPiAyNTUgPyAyNTUgOiBhO1xuICB9OyAvLyAjIGFkZCA9IChhLGIpIC0+XG4gIC8vICMgICAgIGlmIChhICsgYiA+IDI1NSkgdGhlbiAyNTUgZWxzZSBhICsgYlxuXG5cbiAgYmxlbmQubm9ybWFsID0gYmxlbmRfZihlYWNoKG5vcm1hbCkpO1xuICBibGVuZC5tdWx0aXBseSA9IGJsZW5kX2YoZWFjaChtdWx0aXBseSkpO1xuICBibGVuZC5zY3JlZW4gPSBibGVuZF9mKGVhY2goc2NyZWVuKSk7XG4gIGJsZW5kLm92ZXJsYXkgPSBibGVuZF9mKGVhY2gob3ZlcmxheSkpO1xuICBibGVuZC5kYXJrZW4gPSBibGVuZF9mKGVhY2goZGFya2VuJDEpKTtcbiAgYmxlbmQubGlnaHRlbiA9IGJsZW5kX2YoZWFjaChsaWdodGVuKSk7XG4gIGJsZW5kLmRvZGdlID0gYmxlbmRfZihlYWNoKGRvZGdlKSk7XG4gIGJsZW5kLmJ1cm4gPSBibGVuZF9mKGVhY2goYnVybikpOyAvLyBibGVuZC5hZGQgPSBibGVuZF9mKGVhY2goYWRkKSk7XG5cbiAgdmFyIGJsZW5kXzEgPSBibGVuZDsgLy8gY3ViZWhlbGl4IGludGVycG9sYXRpb25cbiAgLy8gYmFzZWQgb24gRC5BLiBHcmVlbiBcIkEgY29sb3VyIHNjaGVtZSBmb3IgdGhlIGRpc3BsYXkgb2YgYXN0cm9ub21pY2FsIGludGVuc2l0eSBpbWFnZXNcIlxuICAvLyBodHRwOi8vYXN0cm9uLXNvYy5pbi9idWxsZXRpbi8xMUp1bmUvMjg5MzkyMDExLnBkZlxuXG4gIHZhciB0eXBlJGsgPSB1dGlscy50eXBlO1xuICB2YXIgY2xpcF9yZ2IkMyA9IHV0aWxzLmNsaXBfcmdiO1xuICB2YXIgVFdPUEkkMiA9IHV0aWxzLlRXT1BJO1xuICB2YXIgcG93JDYgPSBNYXRoLnBvdztcbiAgdmFyIHNpbiQyID0gTWF0aC5zaW47XG4gIHZhciBjb3MkMyA9IE1hdGguY29zO1xuXG4gIHZhciBjdWJlaGVsaXggPSBmdW5jdGlvbiBjdWJlaGVsaXgoc3RhcnQsIHJvdGF0aW9ucywgaHVlLCBnYW1tYSwgbGlnaHRuZXNzKSB7XG4gICAgaWYgKHN0YXJ0ID09PSB2b2lkIDApIHN0YXJ0ID0gMzAwO1xuICAgIGlmIChyb3RhdGlvbnMgPT09IHZvaWQgMCkgcm90YXRpb25zID0gLTEuNTtcbiAgICBpZiAoaHVlID09PSB2b2lkIDApIGh1ZSA9IDE7XG4gICAgaWYgKGdhbW1hID09PSB2b2lkIDApIGdhbW1hID0gMTtcbiAgICBpZiAobGlnaHRuZXNzID09PSB2b2lkIDApIGxpZ2h0bmVzcyA9IFswLCAxXTtcbiAgICB2YXIgZGggPSAwLFxuICAgICAgICBkbDtcblxuICAgIGlmICh0eXBlJGsobGlnaHRuZXNzKSA9PT0gJ2FycmF5Jykge1xuICAgICAgZGwgPSBsaWdodG5lc3NbMV0gLSBsaWdodG5lc3NbMF07XG4gICAgfSBlbHNlIHtcbiAgICAgIGRsID0gMDtcbiAgICAgIGxpZ2h0bmVzcyA9IFtsaWdodG5lc3MsIGxpZ2h0bmVzc107XG4gICAgfVxuXG4gICAgdmFyIGYgPSBmdW5jdGlvbiBmKGZyYWN0KSB7XG4gICAgICB2YXIgYSA9IFRXT1BJJDIgKiAoKHN0YXJ0ICsgMTIwKSAvIDM2MCArIHJvdGF0aW9ucyAqIGZyYWN0KTtcbiAgICAgIHZhciBsID0gcG93JDYobGlnaHRuZXNzWzBdICsgZGwgKiBmcmFjdCwgZ2FtbWEpO1xuICAgICAgdmFyIGggPSBkaCAhPT0gMCA/IGh1ZVswXSArIGZyYWN0ICogZGggOiBodWU7XG4gICAgICB2YXIgYW1wID0gaCAqIGwgKiAoMSAtIGwpIC8gMjtcbiAgICAgIHZhciBjb3NfYSA9IGNvcyQzKGEpO1xuICAgICAgdmFyIHNpbl9hID0gc2luJDIoYSk7XG4gICAgICB2YXIgciA9IGwgKyBhbXAgKiAoLTAuMTQ4NjEgKiBjb3NfYSArIDEuNzgyNzcgKiBzaW5fYSk7XG4gICAgICB2YXIgZyA9IGwgKyBhbXAgKiAoLTAuMjkyMjcgKiBjb3NfYSAtIDAuOTA2NDkgKiBzaW5fYSk7XG4gICAgICB2YXIgYiA9IGwgKyBhbXAgKiAoKzEuOTcyOTQgKiBjb3NfYSk7XG4gICAgICByZXR1cm4gY2hyb21hXzEoY2xpcF9yZ2IkMyhbciAqIDI1NSwgZyAqIDI1NSwgYiAqIDI1NSwgMV0pKTtcbiAgICB9O1xuXG4gICAgZi5zdGFydCA9IGZ1bmN0aW9uIChzKSB7XG4gICAgICBpZiAocyA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBzdGFydDtcbiAgICAgIH1cblxuICAgICAgc3RhcnQgPSBzO1xuICAgICAgcmV0dXJuIGY7XG4gICAgfTtcblxuICAgIGYucm90YXRpb25zID0gZnVuY3Rpb24gKHIpIHtcbiAgICAgIGlmIChyID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHJvdGF0aW9ucztcbiAgICAgIH1cblxuICAgICAgcm90YXRpb25zID0gcjtcbiAgICAgIHJldHVybiBmO1xuICAgIH07XG5cbiAgICBmLmdhbW1hID0gZnVuY3Rpb24gKGcpIHtcbiAgICAgIGlmIChnID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGdhbW1hO1xuICAgICAgfVxuXG4gICAgICBnYW1tYSA9IGc7XG4gICAgICByZXR1cm4gZjtcbiAgICB9O1xuXG4gICAgZi5odWUgPSBmdW5jdGlvbiAoaCkge1xuICAgICAgaWYgKGggPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gaHVlO1xuICAgICAgfVxuXG4gICAgICBodWUgPSBoO1xuXG4gICAgICBpZiAodHlwZSRrKGh1ZSkgPT09ICdhcnJheScpIHtcbiAgICAgICAgZGggPSBodWVbMV0gLSBodWVbMF07XG5cbiAgICAgICAgaWYgKGRoID09PSAwKSB7XG4gICAgICAgICAgaHVlID0gaHVlWzFdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkaCA9IDA7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmO1xuICAgIH07XG5cbiAgICBmLmxpZ2h0bmVzcyA9IGZ1bmN0aW9uIChoKSB7XG4gICAgICBpZiAoaCA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBsaWdodG5lc3M7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlJGsoaCkgPT09ICdhcnJheScpIHtcbiAgICAgICAgbGlnaHRuZXNzID0gaDtcbiAgICAgICAgZGwgPSBoWzFdIC0gaFswXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxpZ2h0bmVzcyA9IFtoLCBoXTtcbiAgICAgICAgZGwgPSAwO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZjtcbiAgICB9O1xuXG4gICAgZi5zY2FsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBjaHJvbWFfMS5zY2FsZShmKTtcbiAgICB9O1xuXG4gICAgZi5odWUoaHVlKTtcbiAgICByZXR1cm4gZjtcbiAgfTtcblxuICB2YXIgZGlnaXRzID0gJzAxMjM0NTY3ODlhYmNkZWYnO1xuICB2YXIgZmxvb3IkMiA9IE1hdGguZmxvb3I7XG4gIHZhciByYW5kb20gPSBNYXRoLnJhbmRvbTtcblxuICB2YXIgcmFuZG9tXzEgPSBmdW5jdGlvbiByYW5kb21fMSgpIHtcbiAgICB2YXIgY29kZSA9ICcjJztcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNjsgaSsrKSB7XG4gICAgICBjb2RlICs9IGRpZ2l0cy5jaGFyQXQoZmxvb3IkMihyYW5kb20oKSAqIDE2KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBDb2xvcl8xKGNvZGUsICdoZXgnKTtcbiAgfTtcblxuICB2YXIgbG9nJDEgPSBNYXRoLmxvZztcbiAgdmFyIHBvdyQ3ID0gTWF0aC5wb3c7XG4gIHZhciBmbG9vciQzID0gTWF0aC5mbG9vcjtcbiAgdmFyIGFicyA9IE1hdGguYWJzO1xuXG4gIHZhciBhbmFseXplID0gZnVuY3Rpb24gYW5hbHl6ZShkYXRhLCBrZXkpIHtcbiAgICBpZiAoa2V5ID09PSB2b2lkIDApIGtleSA9IG51bGw7XG4gICAgdmFyIHIgPSB7XG4gICAgICBtaW46IE51bWJlci5NQVhfVkFMVUUsXG4gICAgICBtYXg6IE51bWJlci5NQVhfVkFMVUUgKiAtMSxcbiAgICAgIHN1bTogMCxcbiAgICAgIHZhbHVlczogW10sXG4gICAgICBjb3VudDogMFxuICAgIH07XG5cbiAgICBpZiAodHlwZShkYXRhKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGRhdGEgPSBPYmplY3QudmFsdWVzKGRhdGEpO1xuICAgIH1cblxuICAgIGRhdGEuZm9yRWFjaChmdW5jdGlvbiAodmFsKSB7XG4gICAgICBpZiAoa2V5ICYmIHR5cGUodmFsKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgdmFsID0gdmFsW2tleV07XG4gICAgICB9XG5cbiAgICAgIGlmICh2YWwgIT09IHVuZGVmaW5lZCAmJiB2YWwgIT09IG51bGwgJiYgIWlzTmFOKHZhbCkpIHtcbiAgICAgICAgci52YWx1ZXMucHVzaCh2YWwpO1xuICAgICAgICByLnN1bSArPSB2YWw7XG5cbiAgICAgICAgaWYgKHZhbCA8IHIubWluKSB7XG4gICAgICAgICAgci5taW4gPSB2YWw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsID4gci5tYXgpIHtcbiAgICAgICAgICByLm1heCA9IHZhbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHIuY291bnQgKz0gMTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByLmRvbWFpbiA9IFtyLm1pbiwgci5tYXhdO1xuXG4gICAgci5saW1pdHMgPSBmdW5jdGlvbiAobW9kZSwgbnVtKSB7XG4gICAgICByZXR1cm4gbGltaXRzKHIsIG1vZGUsIG51bSk7XG4gICAgfTtcblxuICAgIHJldHVybiByO1xuICB9O1xuXG4gIHZhciBsaW1pdHMgPSBmdW5jdGlvbiBsaW1pdHMoZGF0YSwgbW9kZSwgbnVtKSB7XG4gICAgaWYgKG1vZGUgPT09IHZvaWQgMCkgbW9kZSA9ICdlcXVhbCc7XG4gICAgaWYgKG51bSA9PT0gdm9pZCAwKSBudW0gPSA3O1xuXG4gICAgaWYgKHR5cGUoZGF0YSkgPT0gJ2FycmF5Jykge1xuICAgICAgZGF0YSA9IGFuYWx5emUoZGF0YSk7XG4gICAgfVxuXG4gICAgdmFyIG1pbiA9IGRhdGEubWluO1xuICAgIHZhciBtYXggPSBkYXRhLm1heDtcbiAgICB2YXIgdmFsdWVzID0gZGF0YS52YWx1ZXMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgcmV0dXJuIGEgLSBiO1xuICAgIH0pO1xuXG4gICAgaWYgKG51bSA9PT0gMSkge1xuICAgICAgcmV0dXJuIFttaW4sIG1heF07XG4gICAgfVxuXG4gICAgdmFyIGxpbWl0cyA9IFtdO1xuXG4gICAgaWYgKG1vZGUuc3Vic3RyKDAsIDEpID09PSAnYycpIHtcbiAgICAgIC8vIGNvbnRpbnVvdXNcbiAgICAgIGxpbWl0cy5wdXNoKG1pbik7XG4gICAgICBsaW1pdHMucHVzaChtYXgpO1xuICAgIH1cblxuICAgIGlmIChtb2RlLnN1YnN0cigwLCAxKSA9PT0gJ2UnKSB7XG4gICAgICAvLyBlcXVhbCBpbnRlcnZhbFxuICAgICAgbGltaXRzLnB1c2gobWluKTtcblxuICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBudW07IGkrKykge1xuICAgICAgICBsaW1pdHMucHVzaChtaW4gKyBpIC8gbnVtICogKG1heCAtIG1pbikpO1xuICAgICAgfVxuXG4gICAgICBsaW1pdHMucHVzaChtYXgpO1xuICAgIH0gZWxzZSBpZiAobW9kZS5zdWJzdHIoMCwgMSkgPT09ICdsJykge1xuICAgICAgLy8gbG9nIHNjYWxlXG4gICAgICBpZiAobWluIDw9IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdMb2dhcml0aG1pYyBzY2FsZXMgYXJlIG9ubHkgcG9zc2libGUgZm9yIHZhbHVlcyA+IDAnKTtcbiAgICAgIH1cblxuICAgICAgdmFyIG1pbl9sb2cgPSBNYXRoLkxPRzEwRSAqIGxvZyQxKG1pbik7XG4gICAgICB2YXIgbWF4X2xvZyA9IE1hdGguTE9HMTBFICogbG9nJDEobWF4KTtcbiAgICAgIGxpbWl0cy5wdXNoKG1pbik7XG5cbiAgICAgIGZvciAodmFyIGkkMSA9IDE7IGkkMSA8IG51bTsgaSQxKyspIHtcbiAgICAgICAgbGltaXRzLnB1c2gocG93JDcoMTAsIG1pbl9sb2cgKyBpJDEgLyBudW0gKiAobWF4X2xvZyAtIG1pbl9sb2cpKSk7XG4gICAgICB9XG5cbiAgICAgIGxpbWl0cy5wdXNoKG1heCk7XG4gICAgfSBlbHNlIGlmIChtb2RlLnN1YnN0cigwLCAxKSA9PT0gJ3EnKSB7XG4gICAgICAvLyBxdWFudGlsZSBzY2FsZVxuICAgICAgbGltaXRzLnB1c2gobWluKTtcblxuICAgICAgZm9yICh2YXIgaSQyID0gMTsgaSQyIDwgbnVtOyBpJDIrKykge1xuICAgICAgICB2YXIgcCA9ICh2YWx1ZXMubGVuZ3RoIC0gMSkgKiBpJDIgLyBudW07XG4gICAgICAgIHZhciBwYiA9IGZsb29yJDMocCk7XG5cbiAgICAgICAgaWYgKHBiID09PSBwKSB7XG4gICAgICAgICAgbGltaXRzLnB1c2godmFsdWVzW3BiXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gcCA+IHBiXG4gICAgICAgICAgdmFyIHByID0gcCAtIHBiO1xuICAgICAgICAgIGxpbWl0cy5wdXNoKHZhbHVlc1twYl0gKiAoMSAtIHByKSArIHZhbHVlc1twYiArIDFdICogcHIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxpbWl0cy5wdXNoKG1heCk7XG4gICAgfSBlbHNlIGlmIChtb2RlLnN1YnN0cigwLCAxKSA9PT0gJ2snKSB7XG4gICAgICAvLyBrLW1lYW5zIGNsdXN0ZXJpbmdcblxuICAgICAgLypcbiAgICAgIGltcGxlbWVudGF0aW9uIGJhc2VkIG9uXG4gICAgICBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvZmlndWUvc291cmNlL2Jyb3dzZS90cnVuay9maWd1ZS5qcyMzMzZcbiAgICAgIHNpbXBsaWZpZWQgZm9yIDEtZCBpbnB1dCB2YWx1ZXNcbiAgICAgICovXG4gICAgICB2YXIgY2x1c3RlcjtcbiAgICAgIHZhciBuID0gdmFsdWVzLmxlbmd0aDtcbiAgICAgIHZhciBhc3NpZ25tZW50cyA9IG5ldyBBcnJheShuKTtcbiAgICAgIHZhciBjbHVzdGVyU2l6ZXMgPSBuZXcgQXJyYXkobnVtKTtcbiAgICAgIHZhciByZXBlYXQgPSB0cnVlO1xuICAgICAgdmFyIG5iX2l0ZXJzID0gMDtcbiAgICAgIHZhciBjZW50cm9pZHMgPSBudWxsOyAvLyBnZXQgc2VlZCB2YWx1ZXNcblxuICAgICAgY2VudHJvaWRzID0gW107XG4gICAgICBjZW50cm9pZHMucHVzaChtaW4pO1xuXG4gICAgICBmb3IgKHZhciBpJDMgPSAxOyBpJDMgPCBudW07IGkkMysrKSB7XG4gICAgICAgIGNlbnRyb2lkcy5wdXNoKG1pbiArIGkkMyAvIG51bSAqIChtYXggLSBtaW4pKTtcbiAgICAgIH1cblxuICAgICAgY2VudHJvaWRzLnB1c2gobWF4KTtcblxuICAgICAgd2hpbGUgKHJlcGVhdCkge1xuICAgICAgICAvLyBhc3NpZ25tZW50IHN0ZXBcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBudW07IGorKykge1xuICAgICAgICAgIGNsdXN0ZXJTaXplc1tqXSA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKHZhciBpJDQgPSAwOyBpJDQgPCBuOyBpJDQrKykge1xuICAgICAgICAgIHZhciB2YWx1ZSA9IHZhbHVlc1tpJDRdO1xuICAgICAgICAgIHZhciBtaW5kaXN0ID0gTnVtYmVyLk1BWF9WQUxVRTtcbiAgICAgICAgICB2YXIgYmVzdCA9IHZvaWQgMDtcblxuICAgICAgICAgIGZvciAodmFyIGokMSA9IDA7IGokMSA8IG51bTsgaiQxKyspIHtcbiAgICAgICAgICAgIHZhciBkaXN0ID0gYWJzKGNlbnRyb2lkc1tqJDFdIC0gdmFsdWUpO1xuXG4gICAgICAgICAgICBpZiAoZGlzdCA8IG1pbmRpc3QpIHtcbiAgICAgICAgICAgICAgbWluZGlzdCA9IGRpc3Q7XG4gICAgICAgICAgICAgIGJlc3QgPSBqJDE7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNsdXN0ZXJTaXplc1tiZXN0XSsrO1xuICAgICAgICAgICAgYXNzaWdubWVudHNbaSQ0XSA9IGJlc3Q7XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIHVwZGF0ZSBjZW50cm9pZHMgc3RlcFxuXG5cbiAgICAgICAgdmFyIG5ld0NlbnRyb2lkcyA9IG5ldyBBcnJheShudW0pO1xuXG4gICAgICAgIGZvciAodmFyIGokMiA9IDA7IGokMiA8IG51bTsgaiQyKyspIHtcbiAgICAgICAgICBuZXdDZW50cm9pZHNbaiQyXSA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKHZhciBpJDUgPSAwOyBpJDUgPCBuOyBpJDUrKykge1xuICAgICAgICAgIGNsdXN0ZXIgPSBhc3NpZ25tZW50c1tpJDVdO1xuXG4gICAgICAgICAgaWYgKG5ld0NlbnRyb2lkc1tjbHVzdGVyXSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgbmV3Q2VudHJvaWRzW2NsdXN0ZXJdID0gdmFsdWVzW2kkNV07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5ld0NlbnRyb2lkc1tjbHVzdGVyXSArPSB2YWx1ZXNbaSQ1XTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKHZhciBqJDMgPSAwOyBqJDMgPCBudW07IGokMysrKSB7XG4gICAgICAgICAgbmV3Q2VudHJvaWRzW2okM10gKj0gMSAvIGNsdXN0ZXJTaXplc1tqJDNdO1xuICAgICAgICB9IC8vIGNoZWNrIGNvbnZlcmdlbmNlXG5cblxuICAgICAgICByZXBlYXQgPSBmYWxzZTtcblxuICAgICAgICBmb3IgKHZhciBqJDQgPSAwOyBqJDQgPCBudW07IGokNCsrKSB7XG4gICAgICAgICAgaWYgKG5ld0NlbnRyb2lkc1tqJDRdICE9PSBjZW50cm9pZHNbaiQ0XSkge1xuICAgICAgICAgICAgcmVwZWF0ID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNlbnRyb2lkcyA9IG5ld0NlbnRyb2lkcztcbiAgICAgICAgbmJfaXRlcnMrKztcblxuICAgICAgICBpZiAobmJfaXRlcnMgPiAyMDApIHtcbiAgICAgICAgICByZXBlYXQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBmaW5pc2hlZCBrLW1lYW5zIGNsdXN0ZXJpbmdcbiAgICAgIC8vIHRoZSBuZXh0IHBhcnQgaXMgYm9ycm93ZWQgZnJvbSBnYWJyaWVsZmxvci5pdFxuXG5cbiAgICAgIHZhciBrQ2x1c3RlcnMgPSB7fTtcblxuICAgICAgZm9yICh2YXIgaiQ1ID0gMDsgaiQ1IDwgbnVtOyBqJDUrKykge1xuICAgICAgICBrQ2x1c3RlcnNbaiQ1XSA9IFtdO1xuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBpJDYgPSAwOyBpJDYgPCBuOyBpJDYrKykge1xuICAgICAgICBjbHVzdGVyID0gYXNzaWdubWVudHNbaSQ2XTtcbiAgICAgICAga0NsdXN0ZXJzW2NsdXN0ZXJdLnB1c2godmFsdWVzW2kkNl0pO1xuICAgICAgfVxuXG4gICAgICB2YXIgdG1wS01lYW5zQnJlYWtzID0gW107XG5cbiAgICAgIGZvciAodmFyIGokNiA9IDA7IGokNiA8IG51bTsgaiQ2KyspIHtcbiAgICAgICAgdG1wS01lYW5zQnJlYWtzLnB1c2goa0NsdXN0ZXJzW2okNl1bMF0pO1xuICAgICAgICB0bXBLTWVhbnNCcmVha3MucHVzaChrQ2x1c3RlcnNbaiQ2XVtrQ2x1c3RlcnNbaiQ2XS5sZW5ndGggLSAxXSk7XG4gICAgICB9XG5cbiAgICAgIHRtcEtNZWFuc0JyZWFrcyA9IHRtcEtNZWFuc0JyZWFrcy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgIHJldHVybiBhIC0gYjtcbiAgICAgIH0pO1xuICAgICAgbGltaXRzLnB1c2godG1wS01lYW5zQnJlYWtzWzBdKTtcblxuICAgICAgZm9yICh2YXIgaSQ3ID0gMTsgaSQ3IDwgdG1wS01lYW5zQnJlYWtzLmxlbmd0aDsgaSQ3ICs9IDIpIHtcbiAgICAgICAgdmFyIHYgPSB0bXBLTWVhbnNCcmVha3NbaSQ3XTtcblxuICAgICAgICBpZiAoIWlzTmFOKHYpICYmIGxpbWl0cy5pbmRleE9mKHYpID09PSAtMSkge1xuICAgICAgICAgIGxpbWl0cy5wdXNoKHYpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGxpbWl0cztcbiAgfTtcblxuICB2YXIgYW5hbHl6ZV8xID0ge1xuICAgIGFuYWx5emU6IGFuYWx5emUsXG4gICAgbGltaXRzOiBsaW1pdHNcbiAgfTtcblxuICB2YXIgY29udHJhc3QgPSBmdW5jdGlvbiBjb250cmFzdChhLCBiKSB7XG4gICAgLy8gV0NBRyBjb250cmFzdCByYXRpb1xuICAgIC8vIHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDA4L1JFQy1XQ0FHMjAtMjAwODEyMTEvI2NvbnRyYXN0LXJhdGlvZGVmXG4gICAgYSA9IG5ldyBDb2xvcl8xKGEpO1xuICAgIGIgPSBuZXcgQ29sb3JfMShiKTtcbiAgICB2YXIgbDEgPSBhLmx1bWluYW5jZSgpO1xuICAgIHZhciBsMiA9IGIubHVtaW5hbmNlKCk7XG4gICAgcmV0dXJuIGwxID4gbDIgPyAobDEgKyAwLjA1KSAvIChsMiArIDAuMDUpIDogKGwyICsgMC4wNSkgLyAobDEgKyAwLjA1KTtcbiAgfTtcblxuICB2YXIgc3FydCQ0ID0gTWF0aC5zcXJ0O1xuICB2YXIgYXRhbjIkMiA9IE1hdGguYXRhbjI7XG4gIHZhciBhYnMkMSA9IE1hdGguYWJzO1xuICB2YXIgY29zJDQgPSBNYXRoLmNvcztcbiAgdmFyIFBJJDIgPSBNYXRoLlBJO1xuXG4gIHZhciBkZWx0YUUgPSBmdW5jdGlvbiBkZWx0YUUoYSwgYiwgTCwgQykge1xuICAgIGlmIChMID09PSB2b2lkIDApIEwgPSAxO1xuICAgIGlmIChDID09PSB2b2lkIDApIEMgPSAxOyAvLyBEZWx0YSBFIChDTUMpXG4gICAgLy8gc2VlIGh0dHA6Ly93d3cuYnJ1Y2VsaW5kYmxvb20uY29tL2luZGV4Lmh0bWw/RXFuX0RlbHRhRV9DTUMuaHRtbFxuXG4gICAgYSA9IG5ldyBDb2xvcl8xKGEpO1xuICAgIGIgPSBuZXcgQ29sb3JfMShiKTtcbiAgICB2YXIgcmVmID0gQXJyYXkuZnJvbShhLmxhYigpKTtcbiAgICB2YXIgTDEgPSByZWZbMF07XG4gICAgdmFyIGExID0gcmVmWzFdO1xuICAgIHZhciBiMSA9IHJlZlsyXTtcbiAgICB2YXIgcmVmJDEgPSBBcnJheS5mcm9tKGIubGFiKCkpO1xuICAgIHZhciBMMiA9IHJlZiQxWzBdO1xuICAgIHZhciBhMiA9IHJlZiQxWzFdO1xuICAgIHZhciBiMiA9IHJlZiQxWzJdO1xuICAgIHZhciBjMSA9IHNxcnQkNChhMSAqIGExICsgYjEgKiBiMSk7XG4gICAgdmFyIGMyID0gc3FydCQ0KGEyICogYTIgKyBiMiAqIGIyKTtcbiAgICB2YXIgc2wgPSBMMSA8IDE2LjAgPyAwLjUxMSA6IDAuMDQwOTc1ICogTDEgLyAoMS4wICsgMC4wMTc2NSAqIEwxKTtcbiAgICB2YXIgc2MgPSAwLjA2MzggKiBjMSAvICgxLjAgKyAwLjAxMzEgKiBjMSkgKyAwLjYzODtcbiAgICB2YXIgaDEgPSBjMSA8IDAuMDAwMDAxID8gMC4wIDogYXRhbjIkMihiMSwgYTEpICogMTgwLjAgLyBQSSQyO1xuXG4gICAgd2hpbGUgKGgxIDwgMCkge1xuICAgICAgaDEgKz0gMzYwO1xuICAgIH1cblxuICAgIHdoaWxlIChoMSA+PSAzNjApIHtcbiAgICAgIGgxIC09IDM2MDtcbiAgICB9XG5cbiAgICB2YXIgdCA9IGgxID49IDE2NC4wICYmIGgxIDw9IDM0NS4wID8gMC41NiArIGFicyQxKDAuMiAqIGNvcyQ0KFBJJDIgKiAoaDEgKyAxNjguMCkgLyAxODAuMCkpIDogMC4zNiArIGFicyQxKDAuNCAqIGNvcyQ0KFBJJDIgKiAoaDEgKyAzNS4wKSAvIDE4MC4wKSk7XG4gICAgdmFyIGM0ID0gYzEgKiBjMSAqIGMxICogYzE7XG4gICAgdmFyIGYgPSBzcXJ0JDQoYzQgLyAoYzQgKyAxOTAwLjApKTtcbiAgICB2YXIgc2ggPSBzYyAqIChmICogdCArIDEuMCAtIGYpO1xuICAgIHZhciBkZWxMID0gTDEgLSBMMjtcbiAgICB2YXIgZGVsQyA9IGMxIC0gYzI7XG4gICAgdmFyIGRlbEEgPSBhMSAtIGEyO1xuICAgIHZhciBkZWxCID0gYjEgLSBiMjtcbiAgICB2YXIgZEgyID0gZGVsQSAqIGRlbEEgKyBkZWxCICogZGVsQiAtIGRlbEMgKiBkZWxDO1xuICAgIHZhciB2MSA9IGRlbEwgLyAoTCAqIHNsKTtcbiAgICB2YXIgdjIgPSBkZWxDIC8gKEMgKiBzYyk7XG4gICAgdmFyIHYzID0gc2g7XG4gICAgcmV0dXJuIHNxcnQkNCh2MSAqIHYxICsgdjIgKiB2MiArIGRIMiAvICh2MyAqIHYzKSk7XG4gIH07IC8vIHNpbXBsZSBFdWNsaWRlYW4gZGlzdGFuY2VcblxuXG4gIHZhciBkaXN0YW5jZSA9IGZ1bmN0aW9uIGRpc3RhbmNlKGEsIGIsIG1vZGUpIHtcbiAgICBpZiAobW9kZSA9PT0gdm9pZCAwKSBtb2RlID0gJ2xhYic7IC8vIERlbHRhIEUgKENJRSAxOTc2KVxuICAgIC8vIHNlZSBodHRwOi8vd3d3LmJydWNlbGluZGJsb29tLmNvbS9pbmRleC5odG1sP0VxdWF0aW9ucy5odG1sXG5cbiAgICBhID0gbmV3IENvbG9yXzEoYSk7XG4gICAgYiA9IG5ldyBDb2xvcl8xKGIpO1xuICAgIHZhciBsMSA9IGEuZ2V0KG1vZGUpO1xuICAgIHZhciBsMiA9IGIuZ2V0KG1vZGUpO1xuICAgIHZhciBzdW1fc3EgPSAwO1xuXG4gICAgZm9yICh2YXIgaSBpbiBsMSkge1xuICAgICAgdmFyIGQgPSAobDFbaV0gfHwgMCkgLSAobDJbaV0gfHwgMCk7XG4gICAgICBzdW1fc3EgKz0gZCAqIGQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIE1hdGguc3FydChzdW1fc3EpO1xuICB9O1xuXG4gIHZhciB2YWxpZCA9IGZ1bmN0aW9uIHZhbGlkKCkge1xuICAgIHZhciBhcmdzID0gW10sXG4gICAgICAgIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cbiAgICB3aGlsZSAobGVuLS0pIHtcbiAgICAgIGFyZ3NbbGVuXSA9IGFyZ3VtZW50c1tsZW5dO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KENvbG9yXzEsIFtudWxsXS5jb25jYXQoYXJncykpKSgpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfTsgLy8gc29tZSBwcmUtZGVmaW5lZCBjb2xvciBzY2FsZXM6XG5cblxuICB2YXIgc2NhbGVzID0ge1xuICAgIGNvb2w6IGZ1bmN0aW9uIGNvb2woKSB7XG4gICAgICByZXR1cm4gc2NhbGUoW2Nocm9tYV8xLmhzbCgxODAsIDEsIC45KSwgY2hyb21hXzEuaHNsKDI1MCwgLjcsIC40KV0pO1xuICAgIH0sXG4gICAgaG90OiBmdW5jdGlvbiBob3QoKSB7XG4gICAgICByZXR1cm4gc2NhbGUoWycjMDAwJywgJyNmMDAnLCAnI2ZmMCcsICcjZmZmJ10sIFswLCAuMjUsIC43NSwgMV0pLm1vZGUoJ3JnYicpO1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAgICBDb2xvckJyZXdlciBjb2xvcnMgZm9yIGNocm9tYS5qc1xuICAgICAgIENvcHlyaWdodCAoYykgMjAwMiBDeW50aGlhIEJyZXdlciwgTWFyayBIYXJyb3dlciwgYW5kIFRoZVxuICAgICAgUGVubnN5bHZhbmlhIFN0YXRlIFVuaXZlcnNpdHkuXG4gICAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gICAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSBkaXN0cmlidXRlZFxuICAgICAgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1JcbiAgICAgIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlXG4gICAgICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICAqL1xuXG4gIHZhciBjb2xvcmJyZXdlciA9IHtcbiAgICAvLyBzZXF1ZW50aWFsXG4gICAgT3JSZDogWycjZmZmN2VjJywgJyNmZWU4YzgnLCAnI2ZkZDQ5ZScsICcjZmRiYjg0JywgJyNmYzhkNTknLCAnI2VmNjU0OCcsICcjZDczMDFmJywgJyNiMzAwMDAnLCAnIzdmMDAwMCddLFxuICAgIFB1QnU6IFsnI2ZmZjdmYicsICcjZWNlN2YyJywgJyNkMGQxZTYnLCAnI2E2YmRkYicsICcjNzRhOWNmJywgJyMzNjkwYzAnLCAnIzA1NzBiMCcsICcjMDQ1YThkJywgJyMwMjM4NTgnXSxcbiAgICBCdVB1OiBbJyNmN2ZjZmQnLCAnI2UwZWNmNCcsICcjYmZkM2U2JywgJyM5ZWJjZGEnLCAnIzhjOTZjNicsICcjOGM2YmIxJywgJyM4ODQxOWQnLCAnIzgxMGY3YycsICcjNGQwMDRiJ10sXG4gICAgT3JhbmdlczogWycjZmZmNWViJywgJyNmZWU2Y2UnLCAnI2ZkZDBhMicsICcjZmRhZTZiJywgJyNmZDhkM2MnLCAnI2YxNjkxMycsICcjZDk0ODAxJywgJyNhNjM2MDMnLCAnIzdmMjcwNCddLFxuICAgIEJ1R246IFsnI2Y3ZmNmZCcsICcjZTVmNWY5JywgJyNjY2VjZTYnLCAnIzk5ZDhjOScsICcjNjZjMmE0JywgJyM0MWFlNzYnLCAnIzIzOGI0NScsICcjMDA2ZDJjJywgJyMwMDQ0MWInXSxcbiAgICBZbE9yQnI6IFsnI2ZmZmZlNScsICcjZmZmN2JjJywgJyNmZWUzOTEnLCAnI2ZlYzQ0ZicsICcjZmU5OTI5JywgJyNlYzcwMTQnLCAnI2NjNGMwMicsICcjOTkzNDA0JywgJyM2NjI1MDYnXSxcbiAgICBZbEduOiBbJyNmZmZmZTUnLCAnI2Y3ZmNiOScsICcjZDlmMGEzJywgJyNhZGRkOGUnLCAnIzc4YzY3OScsICcjNDFhYjVkJywgJyMyMzg0NDMnLCAnIzAwNjgzNycsICcjMDA0NTI5J10sXG4gICAgUmVkczogWycjZmZmNWYwJywgJyNmZWUwZDInLCAnI2ZjYmJhMScsICcjZmM5MjcyJywgJyNmYjZhNGEnLCAnI2VmM2IyYycsICcjY2IxODFkJywgJyNhNTBmMTUnLCAnIzY3MDAwZCddLFxuICAgIFJkUHU6IFsnI2ZmZjdmMycsICcjZmRlMGRkJywgJyNmY2M1YzAnLCAnI2ZhOWZiNScsICcjZjc2OGExJywgJyNkZDM0OTcnLCAnI2FlMDE3ZScsICcjN2EwMTc3JywgJyM0OTAwNmEnXSxcbiAgICBHcmVlbnM6IFsnI2Y3ZmNmNScsICcjZTVmNWUwJywgJyNjN2U5YzAnLCAnI2ExZDk5YicsICcjNzRjNDc2JywgJyM0MWFiNWQnLCAnIzIzOGI0NScsICcjMDA2ZDJjJywgJyMwMDQ0MWInXSxcbiAgICBZbEduQnU6IFsnI2ZmZmZkOScsICcjZWRmOGIxJywgJyNjN2U5YjQnLCAnIzdmY2RiYicsICcjNDFiNmM0JywgJyMxZDkxYzAnLCAnIzIyNWVhOCcsICcjMjUzNDk0JywgJyMwODFkNTgnXSxcbiAgICBQdXJwbGVzOiBbJyNmY2ZiZmQnLCAnI2VmZWRmNScsICcjZGFkYWViJywgJyNiY2JkZGMnLCAnIzllOWFjOCcsICcjODA3ZGJhJywgJyM2YTUxYTMnLCAnIzU0Mjc4ZicsICcjM2YwMDdkJ10sXG4gICAgR25CdTogWycjZjdmY2YwJywgJyNlMGYzZGInLCAnI2NjZWJjNScsICcjYThkZGI1JywgJyM3YmNjYzQnLCAnIzRlYjNkMycsICcjMmI4Y2JlJywgJyMwODY4YWMnLCAnIzA4NDA4MSddLFxuICAgIEdyZXlzOiBbJyNmZmZmZmYnLCAnI2YwZjBmMCcsICcjZDlkOWQ5JywgJyNiZGJkYmQnLCAnIzk2OTY5NicsICcjNzM3MzczJywgJyM1MjUyNTInLCAnIzI1MjUyNScsICcjMDAwMDAwJ10sXG4gICAgWWxPclJkOiBbJyNmZmZmY2MnLCAnI2ZmZWRhMCcsICcjZmVkOTc2JywgJyNmZWIyNGMnLCAnI2ZkOGQzYycsICcjZmM0ZTJhJywgJyNlMzFhMWMnLCAnI2JkMDAyNicsICcjODAwMDI2J10sXG4gICAgUHVSZDogWycjZjdmNGY5JywgJyNlN2UxZWYnLCAnI2Q0YjlkYScsICcjYzk5NGM3JywgJyNkZjY1YjAnLCAnI2U3Mjk4YScsICcjY2UxMjU2JywgJyM5ODAwNDMnLCAnIzY3MDAxZiddLFxuICAgIEJsdWVzOiBbJyNmN2ZiZmYnLCAnI2RlZWJmNycsICcjYzZkYmVmJywgJyM5ZWNhZTEnLCAnIzZiYWVkNicsICcjNDI5MmM2JywgJyMyMTcxYjUnLCAnIzA4NTE5YycsICcjMDgzMDZiJ10sXG4gICAgUHVCdUduOiBbJyNmZmY3ZmInLCAnI2VjZTJmMCcsICcjZDBkMWU2JywgJyNhNmJkZGInLCAnIzY3YTljZicsICcjMzY5MGMwJywgJyMwMjgxOGEnLCAnIzAxNmM1OScsICcjMDE0NjM2J10sXG4gICAgVmlyaWRpczogWycjNDQwMTU0JywgJyM0ODI3NzcnLCAnIzNmNGE4YScsICcjMzE2NzhlJywgJyMyNjgzOGYnLCAnIzFmOWQ4YScsICcjNmNjZTVhJywgJyNiNmRlMmInLCAnI2ZlZTgyNSddLFxuICAgIC8vIGRpdmVyZ2luZ1xuICAgIFNwZWN0cmFsOiBbJyM5ZTAxNDInLCAnI2Q1M2U0ZicsICcjZjQ2ZDQzJywgJyNmZGFlNjEnLCAnI2ZlZTA4YicsICcjZmZmZmJmJywgJyNlNmY1OTgnLCAnI2FiZGRhNCcsICcjNjZjMmE1JywgJyMzMjg4YmQnLCAnIzVlNGZhMiddLFxuICAgIFJkWWxHbjogWycjYTUwMDI2JywgJyNkNzMwMjcnLCAnI2Y0NmQ0MycsICcjZmRhZTYxJywgJyNmZWUwOGInLCAnI2ZmZmZiZicsICcjZDllZjhiJywgJyNhNmQ5NmEnLCAnIzY2YmQ2MycsICcjMWE5ODUwJywgJyMwMDY4MzcnXSxcbiAgICBSZEJ1OiBbJyM2NzAwMWYnLCAnI2IyMTgyYicsICcjZDY2MDRkJywgJyNmNGE1ODInLCAnI2ZkZGJjNycsICcjZjdmN2Y3JywgJyNkMWU1ZjAnLCAnIzkyYzVkZScsICcjNDM5M2MzJywgJyMyMTY2YWMnLCAnIzA1MzA2MSddLFxuICAgIFBpWUc6IFsnIzhlMDE1MicsICcjYzUxYjdkJywgJyNkZTc3YWUnLCAnI2YxYjZkYScsICcjZmRlMGVmJywgJyNmN2Y3ZjcnLCAnI2U2ZjVkMCcsICcjYjhlMTg2JywgJyM3ZmJjNDEnLCAnIzRkOTIyMScsICcjMjc2NDE5J10sXG4gICAgUFJHbjogWycjNDAwMDRiJywgJyM3NjJhODMnLCAnIzk5NzBhYicsICcjYzJhNWNmJywgJyNlN2Q0ZTgnLCAnI2Y3ZjdmNycsICcjZDlmMGQzJywgJyNhNmRiYTAnLCAnIzVhYWU2MScsICcjMWI3ODM3JywgJyMwMDQ0MWInXSxcbiAgICBSZFlsQnU6IFsnI2E1MDAyNicsICcjZDczMDI3JywgJyNmNDZkNDMnLCAnI2ZkYWU2MScsICcjZmVlMDkwJywgJyNmZmZmYmYnLCAnI2UwZjNmOCcsICcjYWJkOWU5JywgJyM3NGFkZDEnLCAnIzQ1NzViNCcsICcjMzEzNjk1J10sXG4gICAgQnJCRzogWycjNTQzMDA1JywgJyM4YzUxMGEnLCAnI2JmODEyZCcsICcjZGZjMjdkJywgJyNmNmU4YzMnLCAnI2Y1ZjVmNScsICcjYzdlYWU1JywgJyM4MGNkYzEnLCAnIzM1OTc4ZicsICcjMDE2NjVlJywgJyMwMDNjMzAnXSxcbiAgICBSZEd5OiBbJyM2NzAwMWYnLCAnI2IyMTgyYicsICcjZDY2MDRkJywgJyNmNGE1ODInLCAnI2ZkZGJjNycsICcjZmZmZmZmJywgJyNlMGUwZTAnLCAnI2JhYmFiYScsICcjODc4Nzg3JywgJyM0ZDRkNGQnLCAnIzFhMWExYSddLFxuICAgIFB1T3I6IFsnIzdmM2IwOCcsICcjYjM1ODA2JywgJyNlMDgyMTQnLCAnI2ZkYjg2MycsICcjZmVlMGI2JywgJyNmN2Y3ZjcnLCAnI2Q4ZGFlYicsICcjYjJhYmQyJywgJyM4MDczYWMnLCAnIzU0Mjc4OCcsICcjMmQwMDRiJ10sXG4gICAgLy8gcXVhbGl0YXRpdmVcbiAgICBTZXQyOiBbJyM2NmMyYTUnLCAnI2ZjOGQ2MicsICcjOGRhMGNiJywgJyNlNzhhYzMnLCAnI2E2ZDg1NCcsICcjZmZkOTJmJywgJyNlNWM0OTQnLCAnI2IzYjNiMyddLFxuICAgIEFjY2VudDogWycjN2ZjOTdmJywgJyNiZWFlZDQnLCAnI2ZkYzA4NicsICcjZmZmZjk5JywgJyMzODZjYjAnLCAnI2YwMDI3ZicsICcjYmY1YjE3JywgJyM2NjY2NjYnXSxcbiAgICBTZXQxOiBbJyNlNDFhMWMnLCAnIzM3N2ViOCcsICcjNGRhZjRhJywgJyM5ODRlYTMnLCAnI2ZmN2YwMCcsICcjZmZmZjMzJywgJyNhNjU2MjgnLCAnI2Y3ODFiZicsICcjOTk5OTk5J10sXG4gICAgU2V0MzogWycjOGRkM2M3JywgJyNmZmZmYjMnLCAnI2JlYmFkYScsICcjZmI4MDcyJywgJyM4MGIxZDMnLCAnI2ZkYjQ2MicsICcjYjNkZTY5JywgJyNmY2NkZTUnLCAnI2Q5ZDlkOScsICcjYmM4MGJkJywgJyNjY2ViYzUnLCAnI2ZmZWQ2ZiddLFxuICAgIERhcmsyOiBbJyMxYjllNzcnLCAnI2Q5NWYwMicsICcjNzU3MGIzJywgJyNlNzI5OGEnLCAnIzY2YTYxZScsICcjZTZhYjAyJywgJyNhNjc2MWQnLCAnIzY2NjY2NiddLFxuICAgIFBhaXJlZDogWycjYTZjZWUzJywgJyMxZjc4YjQnLCAnI2IyZGY4YScsICcjMzNhMDJjJywgJyNmYjlhOTknLCAnI2UzMWExYycsICcjZmRiZjZmJywgJyNmZjdmMDAnLCAnI2NhYjJkNicsICcjNmEzZDlhJywgJyNmZmZmOTknLCAnI2IxNTkyOCddLFxuICAgIFBhc3RlbDI6IFsnI2IzZTJjZCcsICcjZmRjZGFjJywgJyNjYmQ1ZTgnLCAnI2Y0Y2FlNCcsICcjZTZmNWM5JywgJyNmZmYyYWUnLCAnI2YxZTJjYycsICcjY2NjY2NjJ10sXG4gICAgUGFzdGVsMTogWycjZmJiNGFlJywgJyNiM2NkZTMnLCAnI2NjZWJjNScsICcjZGVjYmU0JywgJyNmZWQ5YTYnLCAnI2ZmZmZjYycsICcjZTVkOGJkJywgJyNmZGRhZWMnLCAnI2YyZjJmMiddXG4gIH07IC8vIGFkZCBsb3dlcmNhc2UgYWxpYXNlcyBmb3IgY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaGVzXG5cbiAgZm9yICh2YXIgaSQxID0gMCwgbGlzdCQxID0gT2JqZWN0LmtleXMoY29sb3JicmV3ZXIpOyBpJDEgPCBsaXN0JDEubGVuZ3RoOyBpJDEgKz0gMSkge1xuICAgIHZhciBrZXkgPSBsaXN0JDFbaSQxXTtcbiAgICBjb2xvcmJyZXdlcltrZXkudG9Mb3dlckNhc2UoKV0gPSBjb2xvcmJyZXdlcltrZXldO1xuICB9XG5cbiAgdmFyIGNvbG9yYnJld2VyXzEgPSBjb2xvcmJyZXdlcjsgLy8gZmVlbCBmcmVlIHRvIGNvbW1lbnQgb3V0IGFueXRoaW5nIHRvIHJvbGx1cFxuICAvLyBhIHNtYWxsZXIgY2hyb21hLmpzIGJ1aWx0XG4gIC8vIGlvIC0tPiBjb252ZXJ0IGNvbG9yc1xuICAvLyBvcGVyYXRvcnMgLS0+IG1vZGlmeSBleGlzdGluZyBDb2xvcnNcbiAgLy8gaW50ZXJwb2xhdG9yc1xuICAvLyBnZW5lcmF0b3JzIC0tID4gY3JlYXRlIG5ldyBjb2xvcnNcblxuICBjaHJvbWFfMS5hdmVyYWdlID0gYXZlcmFnZTtcbiAgY2hyb21hXzEuYmV6aWVyID0gYmV6aWVyXzE7XG4gIGNocm9tYV8xLmJsZW5kID0gYmxlbmRfMTtcbiAgY2hyb21hXzEuY3ViZWhlbGl4ID0gY3ViZWhlbGl4O1xuICBjaHJvbWFfMS5taXggPSBjaHJvbWFfMS5pbnRlcnBvbGF0ZSA9IG1peDtcbiAgY2hyb21hXzEucmFuZG9tID0gcmFuZG9tXzE7XG4gIGNocm9tYV8xLnNjYWxlID0gc2NhbGU7IC8vIG90aGVyIHV0aWxpdHkgbWV0aG9kc1xuXG4gIGNocm9tYV8xLmFuYWx5emUgPSBhbmFseXplXzEuYW5hbHl6ZTtcbiAgY2hyb21hXzEuY29udHJhc3QgPSBjb250cmFzdDtcbiAgY2hyb21hXzEuZGVsdGFFID0gZGVsdGFFO1xuICBjaHJvbWFfMS5kaXN0YW5jZSA9IGRpc3RhbmNlO1xuICBjaHJvbWFfMS5saW1pdHMgPSBhbmFseXplXzEubGltaXRzO1xuICBjaHJvbWFfMS52YWxpZCA9IHZhbGlkOyAvLyBzY2FsZVxuXG4gIGNocm9tYV8xLnNjYWxlcyA9IHNjYWxlczsgLy8gY29sb3JzXG5cbiAgY2hyb21hXzEuY29sb3JzID0gdzNjeDExXzE7XG4gIGNocm9tYV8xLmJyZXdlciA9IGNvbG9yYnJld2VyXzE7XG4gIHZhciBjaHJvbWFfanMgPSBjaHJvbWFfMTtcbiAgcmV0dXJuIGNocm9tYV9qcztcbn0pOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3873\n")},5087:function(module,exports,__webpack_require__){eval("var __WEBPACK_AMD_DEFINE_RESULT__;/*! Hammer.JS - v2.0.7 - 2016-04-22\n * http://hammerjs.github.io/\n *\n * Copyright (c) 2016 Jorik Tangelder;\n * Licensed under the MIT license */\n(function (window, document, exportName, undefined) {\n 'use strict';\n\n var VENDOR_PREFIXES = ['', 'webkit', 'Moz', 'MS', 'ms', 'o'];\n var TEST_ELEMENT = document.createElement('div');\n var TYPE_FUNCTION = 'function';\n var round = Math.round;\n var abs = Math.abs;\n var now = Date.now;\n /**\n * set a timeout with a given scope\n * @param {Function} fn\n * @param {Number} timeout\n * @param {Object} context\n * @returns {number}\n */\n\n function setTimeoutContext(fn, timeout, context) {\n return setTimeout(bindFn(fn, context), timeout);\n }\n /**\n * if the argument is an array, we want to execute the fn on each entry\n * if it aint an array we don't want to do a thing.\n * this is used by all the methods that accept a single and array argument.\n * @param {*|Array} arg\n * @param {String} fn\n * @param {Object} [context]\n * @returns {Boolean}\n */\n\n\n function invokeArrayArg(arg, fn, context) {\n if (Array.isArray(arg)) {\n each(arg, context[fn], context);\n return true;\n }\n\n return false;\n }\n /**\n * walk objects and arrays\n * @param {Object} obj\n * @param {Function} iterator\n * @param {Object} context\n */\n\n\n function each(obj, iterator, context) {\n var i;\n\n if (!obj) {\n return;\n }\n\n if (obj.forEach) {\n obj.forEach(iterator, context);\n } else if (obj.length !== undefined) {\n i = 0;\n\n while (i < obj.length) {\n iterator.call(context, obj[i], i, obj);\n i++;\n }\n } else {\n for (i in obj) {\n obj.hasOwnProperty(i) && iterator.call(context, obj[i], i, obj);\n }\n }\n }\n /**\n * wrap a method with a deprecation warning and stack trace\n * @param {Function} method\n * @param {String} name\n * @param {String} message\n * @returns {Function} A new function wrapping the supplied method.\n */\n\n\n function deprecate(method, name, message) {\n var deprecationMessage = 'DEPRECATED METHOD: ' + name + '\\n' + message + ' AT \\n';\n return function () {\n var e = new Error('get-stack-trace');\n var stack = e && e.stack ? e.stack.replace(/^[^\\(]+?[\\n$]/gm, '').replace(/^\\s+at\\s+/gm, '').replace(/^Object.\\s*\\(/gm, '{anonymous}()@') : 'Unknown Stack Trace';\n var log = window.console && (window.console.warn || window.console.log);\n\n if (log) {\n log.call(window.console, deprecationMessage, stack);\n }\n\n return method.apply(this, arguments);\n };\n }\n /**\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} target\n * @param {...Object} objects_to_assign\n * @returns {Object} target\n */\n\n\n var assign;\n\n if (typeof Object.assign !== 'function') {\n assign = function assign(target) {\n if (target === undefined || target === null) {\n throw new TypeError('Cannot convert undefined or null to object');\n }\n\n var output = Object(target);\n\n for (var index = 1; index < arguments.length; index++) {\n var source = arguments[index];\n\n if (source !== undefined && source !== null) {\n for (var nextKey in source) {\n if (source.hasOwnProperty(nextKey)) {\n output[nextKey] = source[nextKey];\n }\n }\n }\n }\n\n return output;\n };\n } else {\n assign = Object.assign;\n }\n /**\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} dest\n * @param {Object} src\n * @param {Boolean} [merge=false]\n * @returns {Object} dest\n */\n\n\n var extend = deprecate(function extend(dest, src, merge) {\n var keys = Object.keys(src);\n var i = 0;\n\n while (i < keys.length) {\n if (!merge || merge && dest[keys[i]] === undefined) {\n dest[keys[i]] = src[keys[i]];\n }\n\n i++;\n }\n\n return dest;\n }, 'extend', 'Use `assign`.');\n /**\n * merge the values from src in the dest.\n * means that properties that exist in dest will not be overwritten by src\n * @param {Object} dest\n * @param {Object} src\n * @returns {Object} dest\n */\n\n var merge = deprecate(function merge(dest, src) {\n return extend(dest, src, true);\n }, 'merge', 'Use `assign`.');\n /**\n * simple class inheritance\n * @param {Function} child\n * @param {Function} base\n * @param {Object} [properties]\n */\n\n function inherit(child, base, properties) {\n var baseP = base.prototype,\n childP;\n childP = child.prototype = Object.create(baseP);\n childP.constructor = child;\n childP._super = baseP;\n\n if (properties) {\n assign(childP, properties);\n }\n }\n /**\n * simple function bind\n * @param {Function} fn\n * @param {Object} context\n * @returns {Function}\n */\n\n\n function bindFn(fn, context) {\n return function boundFn() {\n return fn.apply(context, arguments);\n };\n }\n /**\n * let a boolean value also be a function that must return a boolean\n * this first item in args will be used as the context\n * @param {Boolean|Function} val\n * @param {Array} [args]\n * @returns {Boolean}\n */\n\n\n function boolOrFn(val, args) {\n if (typeof val == TYPE_FUNCTION) {\n return val.apply(args ? args[0] || undefined : undefined, args);\n }\n\n return val;\n }\n /**\n * use the val2 when val1 is undefined\n * @param {*} val1\n * @param {*} val2\n * @returns {*}\n */\n\n\n function ifUndefined(val1, val2) {\n return val1 === undefined ? val2 : val1;\n }\n /**\n * addEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\n\n\n function addEventListeners(target, types, handler) {\n each(splitStr(types), function (type) {\n target.addEventListener(type, handler, false);\n });\n }\n /**\n * removeEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\n\n\n function removeEventListeners(target, types, handler) {\n each(splitStr(types), function (type) {\n target.removeEventListener(type, handler, false);\n });\n }\n /**\n * find if a node is in the given parent\n * @method hasParent\n * @param {HTMLElement} node\n * @param {HTMLElement} parent\n * @return {Boolean} found\n */\n\n\n function hasParent(node, parent) {\n while (node) {\n if (node == parent) {\n return true;\n }\n\n node = node.parentNode;\n }\n\n return false;\n }\n /**\n * small indexOf wrapper\n * @param {String} str\n * @param {String} find\n * @returns {Boolean} found\n */\n\n\n function inStr(str, find) {\n return str.indexOf(find) > -1;\n }\n /**\n * split string on whitespace\n * @param {String} str\n * @returns {Array} words\n */\n\n\n function splitStr(str) {\n return str.trim().split(/\\s+/g);\n }\n /**\n * find if a array contains the object using indexOf or a simple polyFill\n * @param {Array} src\n * @param {String} find\n * @param {String} [findByKey]\n * @return {Boolean|Number} false when not found, or the index\n */\n\n\n function inArray(src, find, findByKey) {\n if (src.indexOf && !findByKey) {\n return src.indexOf(find);\n } else {\n var i = 0;\n\n while (i < src.length) {\n if (findByKey && src[i][findByKey] == find || !findByKey && src[i] === find) {\n return i;\n }\n\n i++;\n }\n\n return -1;\n }\n }\n /**\n * convert array-like objects to real arrays\n * @param {Object} obj\n * @returns {Array}\n */\n\n\n function toArray(obj) {\n return Array.prototype.slice.call(obj, 0);\n }\n /**\n * unique array with objects based on a key (like 'id') or just by the array's value\n * @param {Array} src [{id:1},{id:2},{id:1}]\n * @param {String} [key]\n * @param {Boolean} [sort=False]\n * @returns {Array} [{id:1},{id:2}]\n */\n\n\n function uniqueArray(src, key, sort) {\n var results = [];\n var values = [];\n var i = 0;\n\n while (i < src.length) {\n var val = key ? src[i][key] : src[i];\n\n if (inArray(values, val) < 0) {\n results.push(src[i]);\n }\n\n values[i] = val;\n i++;\n }\n\n if (sort) {\n if (!key) {\n results = results.sort();\n } else {\n results = results.sort(function sortUniqueArray(a, b) {\n return a[key] > b[key];\n });\n }\n }\n\n return results;\n }\n /**\n * get the prefixed property\n * @param {Object} obj\n * @param {String} property\n * @returns {String|Undefined} prefixed\n */\n\n\n function prefixed(obj, property) {\n var prefix, prop;\n var camelProp = property[0].toUpperCase() + property.slice(1);\n var i = 0;\n\n while (i < VENDOR_PREFIXES.length) {\n prefix = VENDOR_PREFIXES[i];\n prop = prefix ? prefix + camelProp : property;\n\n if (prop in obj) {\n return prop;\n }\n\n i++;\n }\n\n return undefined;\n }\n /**\n * get a unique id\n * @returns {number} uniqueId\n */\n\n\n var _uniqueId = 1;\n\n function uniqueId() {\n return _uniqueId++;\n }\n /**\n * get the window object of an element\n * @param {HTMLElement} element\n * @returns {DocumentView|Window}\n */\n\n\n function getWindowForElement(element) {\n var doc = element.ownerDocument || element;\n return doc.defaultView || doc.parentWindow || window;\n }\n\n var MOBILE_REGEX = /mobile|tablet|ip(ad|hone|od)|android/i;\n var SUPPORT_TOUCH = ('ontouchstart' in window);\n var SUPPORT_POINTER_EVENTS = prefixed(window, 'PointerEvent') !== undefined;\n var SUPPORT_ONLY_TOUCH = SUPPORT_TOUCH && MOBILE_REGEX.test(navigator.userAgent);\n var INPUT_TYPE_TOUCH = 'touch';\n var INPUT_TYPE_PEN = 'pen';\n var INPUT_TYPE_MOUSE = 'mouse';\n var INPUT_TYPE_KINECT = 'kinect';\n var COMPUTE_INTERVAL = 25;\n var INPUT_START = 1;\n var INPUT_MOVE = 2;\n var INPUT_END = 4;\n var INPUT_CANCEL = 8;\n var DIRECTION_NONE = 1;\n var DIRECTION_LEFT = 2;\n var DIRECTION_RIGHT = 4;\n var DIRECTION_UP = 8;\n var DIRECTION_DOWN = 16;\n var DIRECTION_HORIZONTAL = DIRECTION_LEFT | DIRECTION_RIGHT;\n var DIRECTION_VERTICAL = DIRECTION_UP | DIRECTION_DOWN;\n var DIRECTION_ALL = DIRECTION_HORIZONTAL | DIRECTION_VERTICAL;\n var PROPS_XY = ['x', 'y'];\n var PROPS_CLIENT_XY = ['clientX', 'clientY'];\n /**\n * create new input type manager\n * @param {Manager} manager\n * @param {Function} callback\n * @returns {Input}\n * @constructor\n */\n\n function Input(manager, callback) {\n var self = this;\n this.manager = manager;\n this.callback = callback;\n this.element = manager.element;\n this.target = manager.options.inputTarget; // smaller wrapper around the handler, for the scope and the enabled state of the manager,\n // so when disabled the input events are completely bypassed.\n\n this.domHandler = function (ev) {\n if (boolOrFn(manager.options.enable, [manager])) {\n self.handler(ev);\n }\n };\n\n this.init();\n }\n\n Input.prototype = {\n /**\n * should handle the inputEvent data and trigger the callback\n * @virtual\n */\n handler: function handler() {},\n\n /**\n * bind the events\n */\n init: function init() {\n this.evEl && addEventListeners(this.element, this.evEl, this.domHandler);\n this.evTarget && addEventListeners(this.target, this.evTarget, this.domHandler);\n this.evWin && addEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n },\n\n /**\n * unbind the events\n */\n destroy: function destroy() {\n this.evEl && removeEventListeners(this.element, this.evEl, this.domHandler);\n this.evTarget && removeEventListeners(this.target, this.evTarget, this.domHandler);\n this.evWin && removeEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n }\n };\n /**\n * create new input type manager\n * called by the Manager constructor\n * @param {Hammer} manager\n * @returns {Input}\n */\n\n function createInputInstance(manager) {\n var Type;\n var inputClass = manager.options.inputClass;\n\n if (inputClass) {\n Type = inputClass;\n } else if (SUPPORT_POINTER_EVENTS) {\n Type = PointerEventInput;\n } else if (SUPPORT_ONLY_TOUCH) {\n Type = TouchInput;\n } else if (!SUPPORT_TOUCH) {\n Type = MouseInput;\n } else {\n Type = TouchMouseInput;\n }\n\n return new Type(manager, inputHandler);\n }\n /**\n * handle input events\n * @param {Manager} manager\n * @param {String} eventType\n * @param {Object} input\n */\n\n\n function inputHandler(manager, eventType, input) {\n var pointersLen = input.pointers.length;\n var changedPointersLen = input.changedPointers.length;\n var isFirst = eventType & INPUT_START && pointersLen - changedPointersLen === 0;\n var isFinal = eventType & (INPUT_END | INPUT_CANCEL) && pointersLen - changedPointersLen === 0;\n input.isFirst = !!isFirst;\n input.isFinal = !!isFinal;\n\n if (isFirst) {\n manager.session = {};\n } // source event is the normalized value of the domEvents\n // like 'touchstart, mouseup, pointerdown'\n\n\n input.eventType = eventType; // compute scale, rotation etc\n\n computeInputData(manager, input); // emit secret event\n\n manager.emit('hammer.input', input);\n manager.recognize(input);\n manager.session.prevInput = input;\n }\n /**\n * extend the data with some usable properties like scale, rotate, velocity etc\n * @param {Object} manager\n * @param {Object} input\n */\n\n\n function computeInputData(manager, input) {\n var session = manager.session;\n var pointers = input.pointers;\n var pointersLength = pointers.length; // store the first input to calculate the distance and direction\n\n if (!session.firstInput) {\n session.firstInput = simpleCloneInputData(input);\n } // to compute scale and rotation we need to store the multiple touches\n\n\n if (pointersLength > 1 && !session.firstMultiple) {\n session.firstMultiple = simpleCloneInputData(input);\n } else if (pointersLength === 1) {\n session.firstMultiple = false;\n }\n\n var firstInput = session.firstInput;\n var firstMultiple = session.firstMultiple;\n var offsetCenter = firstMultiple ? firstMultiple.center : firstInput.center;\n var center = input.center = getCenter(pointers);\n input.timeStamp = now();\n input.deltaTime = input.timeStamp - firstInput.timeStamp;\n input.angle = getAngle(offsetCenter, center);\n input.distance = getDistance(offsetCenter, center);\n computeDeltaXY(session, input);\n input.offsetDirection = getDirection(input.deltaX, input.deltaY);\n var overallVelocity = getVelocity(input.deltaTime, input.deltaX, input.deltaY);\n input.overallVelocityX = overallVelocity.x;\n input.overallVelocityY = overallVelocity.y;\n input.overallVelocity = abs(overallVelocity.x) > abs(overallVelocity.y) ? overallVelocity.x : overallVelocity.y;\n input.scale = firstMultiple ? getScale(firstMultiple.pointers, pointers) : 1;\n input.rotation = firstMultiple ? getRotation(firstMultiple.pointers, pointers) : 0;\n input.maxPointers = !session.prevInput ? input.pointers.length : input.pointers.length > session.prevInput.maxPointers ? input.pointers.length : session.prevInput.maxPointers;\n computeIntervalInputData(session, input); // find the correct target\n\n var target = manager.element;\n\n if (hasParent(input.srcEvent.target, target)) {\n target = input.srcEvent.target;\n }\n\n input.target = target;\n }\n\n function computeDeltaXY(session, input) {\n var center = input.center;\n var offset = session.offsetDelta || {};\n var prevDelta = session.prevDelta || {};\n var prevInput = session.prevInput || {};\n\n if (input.eventType === INPUT_START || prevInput.eventType === INPUT_END) {\n prevDelta = session.prevDelta = {\n x: prevInput.deltaX || 0,\n y: prevInput.deltaY || 0\n };\n offset = session.offsetDelta = {\n x: center.x,\n y: center.y\n };\n }\n\n input.deltaX = prevDelta.x + (center.x - offset.x);\n input.deltaY = prevDelta.y + (center.y - offset.y);\n }\n /**\n * velocity is calculated every x ms\n * @param {Object} session\n * @param {Object} input\n */\n\n\n function computeIntervalInputData(session, input) {\n var last = session.lastInterval || input,\n deltaTime = input.timeStamp - last.timeStamp,\n velocity,\n velocityX,\n velocityY,\n direction;\n\n if (input.eventType != INPUT_CANCEL && (deltaTime > COMPUTE_INTERVAL || last.velocity === undefined)) {\n var deltaX = input.deltaX - last.deltaX;\n var deltaY = input.deltaY - last.deltaY;\n var v = getVelocity(deltaTime, deltaX, deltaY);\n velocityX = v.x;\n velocityY = v.y;\n velocity = abs(v.x) > abs(v.y) ? v.x : v.y;\n direction = getDirection(deltaX, deltaY);\n session.lastInterval = input;\n } else {\n // use latest velocity info if it doesn't overtake a minimum period\n velocity = last.velocity;\n velocityX = last.velocityX;\n velocityY = last.velocityY;\n direction = last.direction;\n }\n\n input.velocity = velocity;\n input.velocityX = velocityX;\n input.velocityY = velocityY;\n input.direction = direction;\n }\n /**\n * create a simple clone from the input used for storage of firstInput and firstMultiple\n * @param {Object} input\n * @returns {Object} clonedInputData\n */\n\n\n function simpleCloneInputData(input) {\n // make a simple copy of the pointers because we will get a reference if we don't\n // we only need clientXY for the calculations\n var pointers = [];\n var i = 0;\n\n while (i < input.pointers.length) {\n pointers[i] = {\n clientX: round(input.pointers[i].clientX),\n clientY: round(input.pointers[i].clientY)\n };\n i++;\n }\n\n return {\n timeStamp: now(),\n pointers: pointers,\n center: getCenter(pointers),\n deltaX: input.deltaX,\n deltaY: input.deltaY\n };\n }\n /**\n * get the center of all the pointers\n * @param {Array} pointers\n * @return {Object} center contains `x` and `y` properties\n */\n\n\n function getCenter(pointers) {\n var pointersLength = pointers.length; // no need to loop when only one touch\n\n if (pointersLength === 1) {\n return {\n x: round(pointers[0].clientX),\n y: round(pointers[0].clientY)\n };\n }\n\n var x = 0,\n y = 0,\n i = 0;\n\n while (i < pointersLength) {\n x += pointers[i].clientX;\n y += pointers[i].clientY;\n i++;\n }\n\n return {\n x: round(x / pointersLength),\n y: round(y / pointersLength)\n };\n }\n /**\n * calculate the velocity between two points. unit is in px per ms.\n * @param {Number} deltaTime\n * @param {Number} x\n * @param {Number} y\n * @return {Object} velocity `x` and `y`\n */\n\n\n function getVelocity(deltaTime, x, y) {\n return {\n x: x / deltaTime || 0,\n y: y / deltaTime || 0\n };\n }\n /**\n * get the direction between two points\n * @param {Number} x\n * @param {Number} y\n * @return {Number} direction\n */\n\n\n function getDirection(x, y) {\n if (x === y) {\n return DIRECTION_NONE;\n }\n\n if (abs(x) >= abs(y)) {\n return x < 0 ? DIRECTION_LEFT : DIRECTION_RIGHT;\n }\n\n return y < 0 ? DIRECTION_UP : DIRECTION_DOWN;\n }\n /**\n * calculate the absolute distance between two points\n * @param {Object} p1 {x, y}\n * @param {Object} p2 {x, y}\n * @param {Array} [props] containing x and y keys\n * @return {Number} distance\n */\n\n\n function getDistance(p1, p2, props) {\n if (!props) {\n props = PROPS_XY;\n }\n\n var x = p2[props[0]] - p1[props[0]],\n y = p2[props[1]] - p1[props[1]];\n return Math.sqrt(x * x + y * y);\n }\n /**\n * calculate the angle between two coordinates\n * @param {Object} p1\n * @param {Object} p2\n * @param {Array} [props] containing x and y keys\n * @return {Number} angle\n */\n\n\n function getAngle(p1, p2, props) {\n if (!props) {\n props = PROPS_XY;\n }\n\n var x = p2[props[0]] - p1[props[0]],\n y = p2[props[1]] - p1[props[1]];\n return Math.atan2(y, x) * 180 / Math.PI;\n }\n /**\n * calculate the rotation degrees between two pointersets\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} rotation\n */\n\n\n function getRotation(start, end) {\n return getAngle(end[1], end[0], PROPS_CLIENT_XY) + getAngle(start[1], start[0], PROPS_CLIENT_XY);\n }\n /**\n * calculate the scale factor between two pointersets\n * no scale is 1, and goes down to 0 when pinched together, and bigger when pinched out\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} scale\n */\n\n\n function getScale(start, end) {\n return getDistance(end[0], end[1], PROPS_CLIENT_XY) / getDistance(start[0], start[1], PROPS_CLIENT_XY);\n }\n\n var MOUSE_INPUT_MAP = {\n mousedown: INPUT_START,\n mousemove: INPUT_MOVE,\n mouseup: INPUT_END\n };\n var MOUSE_ELEMENT_EVENTS = 'mousedown';\n var MOUSE_WINDOW_EVENTS = 'mousemove mouseup';\n /**\n * Mouse events input\n * @constructor\n * @extends Input\n */\n\n function MouseInput() {\n this.evEl = MOUSE_ELEMENT_EVENTS;\n this.evWin = MOUSE_WINDOW_EVENTS;\n this.pressed = false; // mousedown state\n\n Input.apply(this, arguments);\n }\n\n inherit(MouseInput, Input, {\n /**\n * handle mouse events\n * @param {Object} ev\n */\n handler: function MEhandler(ev) {\n var eventType = MOUSE_INPUT_MAP[ev.type]; // on start we want to have the left mouse button down\n\n if (eventType & INPUT_START && ev.button === 0) {\n this.pressed = true;\n }\n\n if (eventType & INPUT_MOVE && ev.which !== 1) {\n eventType = INPUT_END;\n } // mouse must be down\n\n\n if (!this.pressed) {\n return;\n }\n\n if (eventType & INPUT_END) {\n this.pressed = false;\n }\n\n this.callback(this.manager, eventType, {\n pointers: [ev],\n changedPointers: [ev],\n pointerType: INPUT_TYPE_MOUSE,\n srcEvent: ev\n });\n }\n });\n var POINTER_INPUT_MAP = {\n pointerdown: INPUT_START,\n pointermove: INPUT_MOVE,\n pointerup: INPUT_END,\n pointercancel: INPUT_CANCEL,\n pointerout: INPUT_CANCEL\n }; // in IE10 the pointer types is defined as an enum\n\n var IE10_POINTER_TYPE_ENUM = {\n 2: INPUT_TYPE_TOUCH,\n 3: INPUT_TYPE_PEN,\n 4: INPUT_TYPE_MOUSE,\n 5: INPUT_TYPE_KINECT // see https://twitter.com/jacobrossi/status/480596438489890816\n\n };\n var POINTER_ELEMENT_EVENTS = 'pointerdown';\n var POINTER_WINDOW_EVENTS = 'pointermove pointerup pointercancel'; // IE10 has prefixed support, and case-sensitive\n\n if (window.MSPointerEvent && !window.PointerEvent) {\n POINTER_ELEMENT_EVENTS = 'MSPointerDown';\n POINTER_WINDOW_EVENTS = 'MSPointerMove MSPointerUp MSPointerCancel';\n }\n /**\n * Pointer events input\n * @constructor\n * @extends Input\n */\n\n\n function PointerEventInput() {\n this.evEl = POINTER_ELEMENT_EVENTS;\n this.evWin = POINTER_WINDOW_EVENTS;\n Input.apply(this, arguments);\n this.store = this.manager.session.pointerEvents = [];\n }\n\n inherit(PointerEventInput, Input, {\n /**\n * handle mouse events\n * @param {Object} ev\n */\n handler: function PEhandler(ev) {\n var store = this.store;\n var removePointer = false;\n var eventTypeNormalized = ev.type.toLowerCase().replace('ms', '');\n var eventType = POINTER_INPUT_MAP[eventTypeNormalized];\n var pointerType = IE10_POINTER_TYPE_ENUM[ev.pointerType] || ev.pointerType;\n var isTouch = pointerType == INPUT_TYPE_TOUCH; // get index of the event in the store\n\n var storeIndex = inArray(store, ev.pointerId, 'pointerId'); // start and mouse must be down\n\n if (eventType & INPUT_START && (ev.button === 0 || isTouch)) {\n if (storeIndex < 0) {\n store.push(ev);\n storeIndex = store.length - 1;\n }\n } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n removePointer = true;\n } // it not found, so the pointer hasn't been down (so it's probably a hover)\n\n\n if (storeIndex < 0) {\n return;\n } // update the event in the store\n\n\n store[storeIndex] = ev;\n this.callback(this.manager, eventType, {\n pointers: store,\n changedPointers: [ev],\n pointerType: pointerType,\n srcEvent: ev\n });\n\n if (removePointer) {\n // remove from the store\n store.splice(storeIndex, 1);\n }\n }\n });\n var SINGLE_TOUCH_INPUT_MAP = {\n touchstart: INPUT_START,\n touchmove: INPUT_MOVE,\n touchend: INPUT_END,\n touchcancel: INPUT_CANCEL\n };\n var SINGLE_TOUCH_TARGET_EVENTS = 'touchstart';\n var SINGLE_TOUCH_WINDOW_EVENTS = 'touchstart touchmove touchend touchcancel';\n /**\n * Touch events input\n * @constructor\n * @extends Input\n */\n\n function SingleTouchInput() {\n this.evTarget = SINGLE_TOUCH_TARGET_EVENTS;\n this.evWin = SINGLE_TOUCH_WINDOW_EVENTS;\n this.started = false;\n Input.apply(this, arguments);\n }\n\n inherit(SingleTouchInput, Input, {\n handler: function TEhandler(ev) {\n var type = SINGLE_TOUCH_INPUT_MAP[ev.type]; // should we handle the touch events?\n\n if (type === INPUT_START) {\n this.started = true;\n }\n\n if (!this.started) {\n return;\n }\n\n var touches = normalizeSingleTouches.call(this, ev, type); // when done, reset the started state\n\n if (type & (INPUT_END | INPUT_CANCEL) && touches[0].length - touches[1].length === 0) {\n this.started = false;\n }\n\n this.callback(this.manager, type, {\n pointers: touches[0],\n changedPointers: touches[1],\n pointerType: INPUT_TYPE_TOUCH,\n srcEvent: ev\n });\n }\n });\n /**\n * @this {TouchInput}\n * @param {Object} ev\n * @param {Number} type flag\n * @returns {undefined|Array} [all, changed]\n */\n\n function normalizeSingleTouches(ev, type) {\n var all = toArray(ev.touches);\n var changed = toArray(ev.changedTouches);\n\n if (type & (INPUT_END | INPUT_CANCEL)) {\n all = uniqueArray(all.concat(changed), 'identifier', true);\n }\n\n return [all, changed];\n }\n\n var TOUCH_INPUT_MAP = {\n touchstart: INPUT_START,\n touchmove: INPUT_MOVE,\n touchend: INPUT_END,\n touchcancel: INPUT_CANCEL\n };\n var TOUCH_TARGET_EVENTS = 'touchstart touchmove touchend touchcancel';\n /**\n * Multi-user touch events input\n * @constructor\n * @extends Input\n */\n\n function TouchInput() {\n this.evTarget = TOUCH_TARGET_EVENTS;\n this.targetIds = {};\n Input.apply(this, arguments);\n }\n\n inherit(TouchInput, Input, {\n handler: function MTEhandler(ev) {\n var type = TOUCH_INPUT_MAP[ev.type];\n var touches = getTouches.call(this, ev, type);\n\n if (!touches) {\n return;\n }\n\n this.callback(this.manager, type, {\n pointers: touches[0],\n changedPointers: touches[1],\n pointerType: INPUT_TYPE_TOUCH,\n srcEvent: ev\n });\n }\n });\n /**\n * @this {TouchInput}\n * @param {Object} ev\n * @param {Number} type flag\n * @returns {undefined|Array} [all, changed]\n */\n\n function getTouches(ev, type) {\n var allTouches = toArray(ev.touches);\n var targetIds = this.targetIds; // when there is only one touch, the process can be simplified\n\n if (type & (INPUT_START | INPUT_MOVE) && allTouches.length === 1) {\n targetIds[allTouches[0].identifier] = true;\n return [allTouches, allTouches];\n }\n\n var i,\n targetTouches,\n changedTouches = toArray(ev.changedTouches),\n changedTargetTouches = [],\n target = this.target; // get target touches from touches\n\n targetTouches = allTouches.filter(function (touch) {\n return hasParent(touch.target, target);\n }); // collect touches\n\n if (type === INPUT_START) {\n i = 0;\n\n while (i < targetTouches.length) {\n targetIds[targetTouches[i].identifier] = true;\n i++;\n }\n } // filter changed touches to only contain touches that exist in the collected target ids\n\n\n i = 0;\n\n while (i < changedTouches.length) {\n if (targetIds[changedTouches[i].identifier]) {\n changedTargetTouches.push(changedTouches[i]);\n } // cleanup removed touches\n\n\n if (type & (INPUT_END | INPUT_CANCEL)) {\n delete targetIds[changedTouches[i].identifier];\n }\n\n i++;\n }\n\n if (!changedTargetTouches.length) {\n return;\n }\n\n return [// merge targetTouches with changedTargetTouches so it contains ALL touches, including 'end' and 'cancel'\n uniqueArray(targetTouches.concat(changedTargetTouches), 'identifier', true), changedTargetTouches];\n }\n /**\n * Combined touch and mouse input\n *\n * Touch has a higher priority then mouse, and while touching no mouse events are allowed.\n * This because touch devices also emit mouse events while doing a touch.\n *\n * @constructor\n * @extends Input\n */\n\n\n var DEDUP_TIMEOUT = 2500;\n var DEDUP_DISTANCE = 25;\n\n function TouchMouseInput() {\n Input.apply(this, arguments);\n var handler = bindFn(this.handler, this);\n this.touch = new TouchInput(this.manager, handler);\n this.mouse = new MouseInput(this.manager, handler);\n this.primaryTouch = null;\n this.lastTouches = [];\n }\n\n inherit(TouchMouseInput, Input, {\n /**\n * handle mouse and touch events\n * @param {Hammer} manager\n * @param {String} inputEvent\n * @param {Object} inputData\n */\n handler: function TMEhandler(manager, inputEvent, inputData) {\n var isTouch = inputData.pointerType == INPUT_TYPE_TOUCH,\n isMouse = inputData.pointerType == INPUT_TYPE_MOUSE;\n\n if (isMouse && inputData.sourceCapabilities && inputData.sourceCapabilities.firesTouchEvents) {\n return;\n } // when we're in a touch event, record touches to de-dupe synthetic mouse event\n\n\n if (isTouch) {\n recordTouches.call(this, inputEvent, inputData);\n } else if (isMouse && isSyntheticEvent.call(this, inputData)) {\n return;\n }\n\n this.callback(manager, inputEvent, inputData);\n },\n\n /**\n * remove the event listeners\n */\n destroy: function destroy() {\n this.touch.destroy();\n this.mouse.destroy();\n }\n });\n\n function recordTouches(eventType, eventData) {\n if (eventType & INPUT_START) {\n this.primaryTouch = eventData.changedPointers[0].identifier;\n setLastTouch.call(this, eventData);\n } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n setLastTouch.call(this, eventData);\n }\n }\n\n function setLastTouch(eventData) {\n var touch = eventData.changedPointers[0];\n\n if (touch.identifier === this.primaryTouch) {\n var lastTouch = {\n x: touch.clientX,\n y: touch.clientY\n };\n this.lastTouches.push(lastTouch);\n var lts = this.lastTouches;\n\n var removeLastTouch = function removeLastTouch() {\n var i = lts.indexOf(lastTouch);\n\n if (i > -1) {\n lts.splice(i, 1);\n }\n };\n\n setTimeout(removeLastTouch, DEDUP_TIMEOUT);\n }\n }\n\n function isSyntheticEvent(eventData) {\n var x = eventData.srcEvent.clientX,\n y = eventData.srcEvent.clientY;\n\n for (var i = 0; i < this.lastTouches.length; i++) {\n var t = this.lastTouches[i];\n var dx = Math.abs(x - t.x),\n dy = Math.abs(y - t.y);\n\n if (dx <= DEDUP_DISTANCE && dy <= DEDUP_DISTANCE) {\n return true;\n }\n }\n\n return false;\n }\n\n var PREFIXED_TOUCH_ACTION = prefixed(TEST_ELEMENT.style, 'touchAction');\n var NATIVE_TOUCH_ACTION = PREFIXED_TOUCH_ACTION !== undefined; // magical touchAction value\n\n var TOUCH_ACTION_COMPUTE = 'compute';\n var TOUCH_ACTION_AUTO = 'auto';\n var TOUCH_ACTION_MANIPULATION = 'manipulation'; // not implemented\n\n var TOUCH_ACTION_NONE = 'none';\n var TOUCH_ACTION_PAN_X = 'pan-x';\n var TOUCH_ACTION_PAN_Y = 'pan-y';\n var TOUCH_ACTION_MAP = getTouchActionProps();\n /**\n * Touch Action\n * sets the touchAction property or uses the js alternative\n * @param {Manager} manager\n * @param {String} value\n * @constructor\n */\n\n function TouchAction(manager, value) {\n this.manager = manager;\n this.set(value);\n }\n\n TouchAction.prototype = {\n /**\n * set the touchAction value on the element or enable the polyfill\n * @param {String} value\n */\n set: function set(value) {\n // find out the touch-action by the event handlers\n if (value == TOUCH_ACTION_COMPUTE) {\n value = this.compute();\n }\n\n if (NATIVE_TOUCH_ACTION && this.manager.element.style && TOUCH_ACTION_MAP[value]) {\n this.manager.element.style[PREFIXED_TOUCH_ACTION] = value;\n }\n\n this.actions = value.toLowerCase().trim();\n },\n\n /**\n * just re-set the touchAction value\n */\n update: function update() {\n this.set(this.manager.options.touchAction);\n },\n\n /**\n * compute the value for the touchAction property based on the recognizer's settings\n * @returns {String} value\n */\n compute: function compute() {\n var actions = [];\n each(this.manager.recognizers, function (recognizer) {\n if (boolOrFn(recognizer.options.enable, [recognizer])) {\n actions = actions.concat(recognizer.getTouchAction());\n }\n });\n return cleanTouchActions(actions.join(' '));\n },\n\n /**\n * this method is called on each input cycle and provides the preventing of the browser behavior\n * @param {Object} input\n */\n preventDefaults: function preventDefaults(input) {\n var srcEvent = input.srcEvent;\n var direction = input.offsetDirection; // if the touch action did prevented once this session\n\n if (this.manager.session.prevented) {\n srcEvent.preventDefault();\n return;\n }\n\n var actions = this.actions;\n var hasNone = inStr(actions, TOUCH_ACTION_NONE) && !TOUCH_ACTION_MAP[TOUCH_ACTION_NONE];\n var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_Y];\n var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_X];\n\n if (hasNone) {\n //do not prevent defaults if this is a tap gesture\n var isTapPointer = input.pointers.length === 1;\n var isTapMovement = input.distance < 2;\n var isTapTouchTime = input.deltaTime < 250;\n\n if (isTapPointer && isTapMovement && isTapTouchTime) {\n return;\n }\n }\n\n if (hasPanX && hasPanY) {\n // `pan-x pan-y` means browser handles all scrolling/panning, do not prevent\n return;\n }\n\n if (hasNone || hasPanY && direction & DIRECTION_HORIZONTAL || hasPanX && direction & DIRECTION_VERTICAL) {\n return this.preventSrc(srcEvent);\n }\n },\n\n /**\n * call preventDefault to prevent the browser's default behavior (scrolling in most cases)\n * @param {Object} srcEvent\n */\n preventSrc: function preventSrc(srcEvent) {\n this.manager.session.prevented = true;\n srcEvent.preventDefault();\n }\n };\n /**\n * when the touchActions are collected they are not a valid value, so we need to clean things up. *\n * @param {String} actions\n * @returns {*}\n */\n\n function cleanTouchActions(actions) {\n // none\n if (inStr(actions, TOUCH_ACTION_NONE)) {\n return TOUCH_ACTION_NONE;\n }\n\n var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X);\n var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y); // if both pan-x and pan-y are set (different recognizers\n // for different directions, e.g. horizontal pan but vertical swipe?)\n // we need none (as otherwise with pan-x pan-y combined none of these\n // recognizers will work, since the browser would handle all panning\n\n if (hasPanX && hasPanY) {\n return TOUCH_ACTION_NONE;\n } // pan-x OR pan-y\n\n\n if (hasPanX || hasPanY) {\n return hasPanX ? TOUCH_ACTION_PAN_X : TOUCH_ACTION_PAN_Y;\n } // manipulation\n\n\n if (inStr(actions, TOUCH_ACTION_MANIPULATION)) {\n return TOUCH_ACTION_MANIPULATION;\n }\n\n return TOUCH_ACTION_AUTO;\n }\n\n function getTouchActionProps() {\n if (!NATIVE_TOUCH_ACTION) {\n return false;\n }\n\n var touchMap = {};\n var cssSupports = window.CSS && window.CSS.supports;\n ['auto', 'manipulation', 'pan-y', 'pan-x', 'pan-x pan-y', 'none'].forEach(function (val) {\n // If css.supports is not supported but there is native touch-action assume it supports\n // all values. This is the case for IE 10 and 11.\n touchMap[val] = cssSupports ? window.CSS.supports('touch-action', val) : true;\n });\n return touchMap;\n }\n /**\n * Recognizer flow explained; *\n * All recognizers have the initial state of POSSIBLE when a input session starts.\n * The definition of a input session is from the first input until the last input, with all it's movement in it. *\n * Example session for mouse-input: mousedown -> mousemove -> mouseup\n *\n * On each recognizing cycle (see Manager.recognize) the .recognize() method is executed\n * which determines with state it should be.\n *\n * If the recognizer has the state FAILED, CANCELLED or RECOGNIZED (equals ENDED), it is reset to\n * POSSIBLE to give it another change on the next cycle.\n *\n * Possible\n * |\n * +-----+---------------+\n * | |\n * +-----+-----+ |\n * | | |\n * Failed Cancelled |\n * +-------+------+\n * | |\n * Recognized Began\n * |\n * Changed\n * |\n * Ended/Recognized\n */\n\n\n var STATE_POSSIBLE = 1;\n var STATE_BEGAN = 2;\n var STATE_CHANGED = 4;\n var STATE_ENDED = 8;\n var STATE_RECOGNIZED = STATE_ENDED;\n var STATE_CANCELLED = 16;\n var STATE_FAILED = 32;\n /**\n * Recognizer\n * Every recognizer needs to extend from this class.\n * @constructor\n * @param {Object} options\n */\n\n function Recognizer(options) {\n this.options = assign({}, this.defaults, options || {});\n this.id = uniqueId();\n this.manager = null; // default is enable true\n\n this.options.enable = ifUndefined(this.options.enable, true);\n this.state = STATE_POSSIBLE;\n this.simultaneous = {};\n this.requireFail = [];\n }\n\n Recognizer.prototype = {\n /**\n * @virtual\n * @type {Object}\n */\n defaults: {},\n\n /**\n * set options\n * @param {Object} options\n * @return {Recognizer}\n */\n set: function set(options) {\n assign(this.options, options); // also update the touchAction, in case something changed about the directions/enabled state\n\n this.manager && this.manager.touchAction.update();\n return this;\n },\n\n /**\n * recognize simultaneous with an other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n recognizeWith: function recognizeWith(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'recognizeWith', this)) {\n return this;\n }\n\n var simultaneous = this.simultaneous;\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n\n if (!simultaneous[otherRecognizer.id]) {\n simultaneous[otherRecognizer.id] = otherRecognizer;\n otherRecognizer.recognizeWith(this);\n }\n\n return this;\n },\n\n /**\n * drop the simultaneous link. it doesnt remove the link on the other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n dropRecognizeWith: function dropRecognizeWith(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'dropRecognizeWith', this)) {\n return this;\n }\n\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n delete this.simultaneous[otherRecognizer.id];\n return this;\n },\n\n /**\n * recognizer can only run when an other is failing\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n requireFailure: function requireFailure(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'requireFailure', this)) {\n return this;\n }\n\n var requireFail = this.requireFail;\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n\n if (inArray(requireFail, otherRecognizer) === -1) {\n requireFail.push(otherRecognizer);\n otherRecognizer.requireFailure(this);\n }\n\n return this;\n },\n\n /**\n * drop the requireFailure link. it does not remove the link on the other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n dropRequireFailure: function dropRequireFailure(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'dropRequireFailure', this)) {\n return this;\n }\n\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n var index = inArray(this.requireFail, otherRecognizer);\n\n if (index > -1) {\n this.requireFail.splice(index, 1);\n }\n\n return this;\n },\n\n /**\n * has require failures boolean\n * @returns {boolean}\n */\n hasRequireFailures: function hasRequireFailures() {\n return this.requireFail.length > 0;\n },\n\n /**\n * if the recognizer can recognize simultaneous with an other recognizer\n * @param {Recognizer} otherRecognizer\n * @returns {Boolean}\n */\n canRecognizeWith: function canRecognizeWith(otherRecognizer) {\n return !!this.simultaneous[otherRecognizer.id];\n },\n\n /**\n * You should use `tryEmit` instead of `emit` directly to check\n * that all the needed recognizers has failed before emitting.\n * @param {Object} input\n */\n emit: function emit(input) {\n var self = this;\n var state = this.state;\n\n function emit(event) {\n self.manager.emit(event, input);\n } // 'panstart' and 'panmove'\n\n\n if (state < STATE_ENDED) {\n emit(self.options.event + stateStr(state));\n }\n\n emit(self.options.event); // simple 'eventName' events\n\n if (input.additionalEvent) {\n // additional event(panleft, panright, pinchin, pinchout...)\n emit(input.additionalEvent);\n } // panend and pancancel\n\n\n if (state >= STATE_ENDED) {\n emit(self.options.event + stateStr(state));\n }\n },\n\n /**\n * Check that all the require failure recognizers has failed,\n * if true, it emits a gesture event,\n * otherwise, setup the state to FAILED.\n * @param {Object} input\n */\n tryEmit: function tryEmit(input) {\n if (this.canEmit()) {\n return this.emit(input);\n } // it's failing anyway\n\n\n this.state = STATE_FAILED;\n },\n\n /**\n * can we emit?\n * @returns {boolean}\n */\n canEmit: function canEmit() {\n var i = 0;\n\n while (i < this.requireFail.length) {\n if (!(this.requireFail[i].state & (STATE_FAILED | STATE_POSSIBLE))) {\n return false;\n }\n\n i++;\n }\n\n return true;\n },\n\n /**\n * update the recognizer\n * @param {Object} inputData\n */\n recognize: function recognize(inputData) {\n // make a new copy of the inputData\n // so we can change the inputData without messing up the other recognizers\n var inputDataClone = assign({}, inputData); // is is enabled and allow recognizing?\n\n if (!boolOrFn(this.options.enable, [this, inputDataClone])) {\n this.reset();\n this.state = STATE_FAILED;\n return;\n } // reset when we've reached the end\n\n\n if (this.state & (STATE_RECOGNIZED | STATE_CANCELLED | STATE_FAILED)) {\n this.state = STATE_POSSIBLE;\n }\n\n this.state = this.process(inputDataClone); // the recognizer has recognized a gesture\n // so trigger an event\n\n if (this.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED | STATE_CANCELLED)) {\n this.tryEmit(inputDataClone);\n }\n },\n\n /**\n * return the state of the recognizer\n * the actual recognizing happens in this method\n * @virtual\n * @param {Object} inputData\n * @returns {Const} STATE\n */\n process: function process(inputData) {},\n // jshint ignore:line\n\n /**\n * return the preferred touch-action\n * @virtual\n * @returns {Array}\n */\n getTouchAction: function getTouchAction() {},\n\n /**\n * called when the gesture isn't allowed to recognize\n * like when another is being recognized or it is disabled\n * @virtual\n */\n reset: function reset() {}\n };\n /**\n * get a usable string, used as event postfix\n * @param {Const} state\n * @returns {String} state\n */\n\n function stateStr(state) {\n if (state & STATE_CANCELLED) {\n return 'cancel';\n } else if (state & STATE_ENDED) {\n return 'end';\n } else if (state & STATE_CHANGED) {\n return 'move';\n } else if (state & STATE_BEGAN) {\n return 'start';\n }\n\n return '';\n }\n /**\n * direction cons to string\n * @param {Const} direction\n * @returns {String}\n */\n\n\n function directionStr(direction) {\n if (direction == DIRECTION_DOWN) {\n return 'down';\n } else if (direction == DIRECTION_UP) {\n return 'up';\n } else if (direction == DIRECTION_LEFT) {\n return 'left';\n } else if (direction == DIRECTION_RIGHT) {\n return 'right';\n }\n\n return '';\n }\n /**\n * get a recognizer by name if it is bound to a manager\n * @param {Recognizer|String} otherRecognizer\n * @param {Recognizer} recognizer\n * @returns {Recognizer}\n */\n\n\n function getRecognizerByNameIfManager(otherRecognizer, recognizer) {\n var manager = recognizer.manager;\n\n if (manager) {\n return manager.get(otherRecognizer);\n }\n\n return otherRecognizer;\n }\n /**\n * This recognizer is just used as a base for the simple attribute recognizers.\n * @constructor\n * @extends Recognizer\n */\n\n\n function AttrRecognizer() {\n Recognizer.apply(this, arguments);\n }\n\n inherit(AttrRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof AttrRecognizer\n */\n defaults: {\n /**\n * @type {Number}\n * @default 1\n */\n pointers: 1\n },\n\n /**\n * Used to check if it the recognizer receives valid input, like input.distance > 10.\n * @memberof AttrRecognizer\n * @param {Object} input\n * @returns {Boolean} recognized\n */\n attrTest: function attrTest(input) {\n var optionPointers = this.options.pointers;\n return optionPointers === 0 || input.pointers.length === optionPointers;\n },\n\n /**\n * Process the input and return the state for the recognizer\n * @memberof AttrRecognizer\n * @param {Object} input\n * @returns {*} State\n */\n process: function process(input) {\n var state = this.state;\n var eventType = input.eventType;\n var isRecognized = state & (STATE_BEGAN | STATE_CHANGED);\n var isValid = this.attrTest(input); // on cancel input and we've recognized before, return STATE_CANCELLED\n\n if (isRecognized && (eventType & INPUT_CANCEL || !isValid)) {\n return state | STATE_CANCELLED;\n } else if (isRecognized || isValid) {\n if (eventType & INPUT_END) {\n return state | STATE_ENDED;\n } else if (!(state & STATE_BEGAN)) {\n return STATE_BEGAN;\n }\n\n return state | STATE_CHANGED;\n }\n\n return STATE_FAILED;\n }\n });\n /**\n * Pan\n * Recognized when the pointer is down and moved in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\n\n function PanRecognizer() {\n AttrRecognizer.apply(this, arguments);\n this.pX = null;\n this.pY = null;\n }\n\n inherit(PanRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof PanRecognizer\n */\n defaults: {\n event: 'pan',\n threshold: 10,\n pointers: 1,\n direction: DIRECTION_ALL\n },\n getTouchAction: function getTouchAction() {\n var direction = this.options.direction;\n var actions = [];\n\n if (direction & DIRECTION_HORIZONTAL) {\n actions.push(TOUCH_ACTION_PAN_Y);\n }\n\n if (direction & DIRECTION_VERTICAL) {\n actions.push(TOUCH_ACTION_PAN_X);\n }\n\n return actions;\n },\n directionTest: function directionTest(input) {\n var options = this.options;\n var hasMoved = true;\n var distance = input.distance;\n var direction = input.direction;\n var x = input.deltaX;\n var y = input.deltaY; // lock to axis?\n\n if (!(direction & options.direction)) {\n if (options.direction & DIRECTION_HORIZONTAL) {\n direction = x === 0 ? DIRECTION_NONE : x < 0 ? DIRECTION_LEFT : DIRECTION_RIGHT;\n hasMoved = x != this.pX;\n distance = Math.abs(input.deltaX);\n } else {\n direction = y === 0 ? DIRECTION_NONE : y < 0 ? DIRECTION_UP : DIRECTION_DOWN;\n hasMoved = y != this.pY;\n distance = Math.abs(input.deltaY);\n }\n }\n\n input.direction = direction;\n return hasMoved && distance > options.threshold && direction & options.direction;\n },\n attrTest: function attrTest(input) {\n return AttrRecognizer.prototype.attrTest.call(this, input) && (this.state & STATE_BEGAN || !(this.state & STATE_BEGAN) && this.directionTest(input));\n },\n emit: function emit(input) {\n this.pX = input.deltaX;\n this.pY = input.deltaY;\n var direction = directionStr(input.direction);\n\n if (direction) {\n input.additionalEvent = this.options.event + direction;\n }\n\n this._super.emit.call(this, input);\n }\n });\n /**\n * Pinch\n * Recognized when two or more pointers are moving toward (zoom-in) or away from each other (zoom-out).\n * @constructor\n * @extends AttrRecognizer\n */\n\n function PinchRecognizer() {\n AttrRecognizer.apply(this, arguments);\n }\n\n inherit(PinchRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof PinchRecognizer\n */\n defaults: {\n event: 'pinch',\n threshold: 0,\n pointers: 2\n },\n getTouchAction: function getTouchAction() {\n return [TOUCH_ACTION_NONE];\n },\n attrTest: function attrTest(input) {\n return this._super.attrTest.call(this, input) && (Math.abs(input.scale - 1) > this.options.threshold || this.state & STATE_BEGAN);\n },\n emit: function emit(input) {\n if (input.scale !== 1) {\n var inOut = input.scale < 1 ? 'in' : 'out';\n input.additionalEvent = this.options.event + inOut;\n }\n\n this._super.emit.call(this, input);\n }\n });\n /**\n * Press\n * Recognized when the pointer is down for x ms without any movement.\n * @constructor\n * @extends Recognizer\n */\n\n function PressRecognizer() {\n Recognizer.apply(this, arguments);\n this._timer = null;\n this._input = null;\n }\n\n inherit(PressRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof PressRecognizer\n */\n defaults: {\n event: 'press',\n pointers: 1,\n time: 251,\n // minimal time of the pointer to be pressed\n threshold: 9 // a minimal movement is ok, but keep it low\n\n },\n getTouchAction: function getTouchAction() {\n return [TOUCH_ACTION_AUTO];\n },\n process: function process(input) {\n var options = this.options;\n var validPointers = input.pointers.length === options.pointers;\n var validMovement = input.distance < options.threshold;\n var validTime = input.deltaTime > options.time;\n this._input = input; // we only allow little movement\n // and we've reached an end event, so a tap is possible\n\n if (!validMovement || !validPointers || input.eventType & (INPUT_END | INPUT_CANCEL) && !validTime) {\n this.reset();\n } else if (input.eventType & INPUT_START) {\n this.reset();\n this._timer = setTimeoutContext(function () {\n this.state = STATE_RECOGNIZED;\n this.tryEmit();\n }, options.time, this);\n } else if (input.eventType & INPUT_END) {\n return STATE_RECOGNIZED;\n }\n\n return STATE_FAILED;\n },\n reset: function reset() {\n clearTimeout(this._timer);\n },\n emit: function emit(input) {\n if (this.state !== STATE_RECOGNIZED) {\n return;\n }\n\n if (input && input.eventType & INPUT_END) {\n this.manager.emit(this.options.event + 'up', input);\n } else {\n this._input.timeStamp = now();\n this.manager.emit(this.options.event, this._input);\n }\n }\n });\n /**\n * Rotate\n * Recognized when two or more pointer are moving in a circular motion.\n * @constructor\n * @extends AttrRecognizer\n */\n\n function RotateRecognizer() {\n AttrRecognizer.apply(this, arguments);\n }\n\n inherit(RotateRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof RotateRecognizer\n */\n defaults: {\n event: 'rotate',\n threshold: 0,\n pointers: 2\n },\n getTouchAction: function getTouchAction() {\n return [TOUCH_ACTION_NONE];\n },\n attrTest: function attrTest(input) {\n return this._super.attrTest.call(this, input) && (Math.abs(input.rotation) > this.options.threshold || this.state & STATE_BEGAN);\n }\n });\n /**\n * Swipe\n * Recognized when the pointer is moving fast (velocity), with enough distance in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\n\n function SwipeRecognizer() {\n AttrRecognizer.apply(this, arguments);\n }\n\n inherit(SwipeRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof SwipeRecognizer\n */\n defaults: {\n event: 'swipe',\n threshold: 10,\n velocity: 0.3,\n direction: DIRECTION_HORIZONTAL | DIRECTION_VERTICAL,\n pointers: 1\n },\n getTouchAction: function getTouchAction() {\n return PanRecognizer.prototype.getTouchAction.call(this);\n },\n attrTest: function attrTest(input) {\n var direction = this.options.direction;\n var velocity;\n\n if (direction & (DIRECTION_HORIZONTAL | DIRECTION_VERTICAL)) {\n velocity = input.overallVelocity;\n } else if (direction & DIRECTION_HORIZONTAL) {\n velocity = input.overallVelocityX;\n } else if (direction & DIRECTION_VERTICAL) {\n velocity = input.overallVelocityY;\n }\n\n return this._super.attrTest.call(this, input) && direction & input.offsetDirection && input.distance > this.options.threshold && input.maxPointers == this.options.pointers && abs(velocity) > this.options.velocity && input.eventType & INPUT_END;\n },\n emit: function emit(input) {\n var direction = directionStr(input.offsetDirection);\n\n if (direction) {\n this.manager.emit(this.options.event + direction, input);\n }\n\n this.manager.emit(this.options.event, input);\n }\n });\n /**\n * A tap is ecognized when the pointer is doing a small tap/click. Multiple taps are recognized if they occur\n * between the given interval and position. The delay option can be used to recognize multi-taps without firing\n * a single tap.\n *\n * The eventData from the emitted event contains the property `tapCount`, which contains the amount of\n * multi-taps being recognized.\n * @constructor\n * @extends Recognizer\n */\n\n function TapRecognizer() {\n Recognizer.apply(this, arguments); // previous time and center,\n // used for tap counting\n\n this.pTime = false;\n this.pCenter = false;\n this._timer = null;\n this._input = null;\n this.count = 0;\n }\n\n inherit(TapRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof PinchRecognizer\n */\n defaults: {\n event: 'tap',\n pointers: 1,\n taps: 1,\n interval: 300,\n // max time between the multi-tap taps\n time: 250,\n // max time of the pointer to be down (like finger on the screen)\n threshold: 9,\n // a minimal movement is ok, but keep it low\n posThreshold: 10 // a multi-tap can be a bit off the initial position\n\n },\n getTouchAction: function getTouchAction() {\n return [TOUCH_ACTION_MANIPULATION];\n },\n process: function process(input) {\n var options = this.options;\n var validPointers = input.pointers.length === options.pointers;\n var validMovement = input.distance < options.threshold;\n var validTouchTime = input.deltaTime < options.time;\n this.reset();\n\n if (input.eventType & INPUT_START && this.count === 0) {\n return this.failTimeout();\n } // we only allow little movement\n // and we've reached an end event, so a tap is possible\n\n\n if (validMovement && validTouchTime && validPointers) {\n if (input.eventType != INPUT_END) {\n return this.failTimeout();\n }\n\n var validInterval = this.pTime ? input.timeStamp - this.pTime < options.interval : true;\n var validMultiTap = !this.pCenter || getDistance(this.pCenter, input.center) < options.posThreshold;\n this.pTime = input.timeStamp;\n this.pCenter = input.center;\n\n if (!validMultiTap || !validInterval) {\n this.count = 1;\n } else {\n this.count += 1;\n }\n\n this._input = input; // if tap count matches we have recognized it,\n // else it has began recognizing...\n\n var tapCount = this.count % options.taps;\n\n if (tapCount === 0) {\n // no failing requirements, immediately trigger the tap event\n // or wait as long as the multitap interval to trigger\n if (!this.hasRequireFailures()) {\n return STATE_RECOGNIZED;\n } else {\n this._timer = setTimeoutContext(function () {\n this.state = STATE_RECOGNIZED;\n this.tryEmit();\n }, options.interval, this);\n return STATE_BEGAN;\n }\n }\n }\n\n return STATE_FAILED;\n },\n failTimeout: function failTimeout() {\n this._timer = setTimeoutContext(function () {\n this.state = STATE_FAILED;\n }, this.options.interval, this);\n return STATE_FAILED;\n },\n reset: function reset() {\n clearTimeout(this._timer);\n },\n emit: function emit() {\n if (this.state == STATE_RECOGNIZED) {\n this._input.tapCount = this.count;\n this.manager.emit(this.options.event, this._input);\n }\n }\n });\n /**\n * Simple way to create a manager with a default set of recognizers.\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\n\n function Hammer(element, options) {\n options = options || {};\n options.recognizers = ifUndefined(options.recognizers, Hammer.defaults.preset);\n return new Manager(element, options);\n }\n /**\n * @const {string}\n */\n\n\n Hammer.VERSION = '2.0.7';\n /**\n * default settings\n * @namespace\n */\n\n Hammer.defaults = {\n /**\n * set if DOM events are being triggered.\n * But this is slower and unused by simple implementations, so disabled by default.\n * @type {Boolean}\n * @default false\n */\n domEvents: false,\n\n /**\n * The value for the touchAction property/fallback.\n * When set to `compute` it will magically set the correct value based on the added recognizers.\n * @type {String}\n * @default compute\n */\n touchAction: TOUCH_ACTION_COMPUTE,\n\n /**\n * @type {Boolean}\n * @default true\n */\n enable: true,\n\n /**\n * EXPERIMENTAL FEATURE -- can be removed/changed\n * Change the parent input target element.\n * If Null, then it is being set the to main element.\n * @type {Null|EventTarget}\n * @default null\n */\n inputTarget: null,\n\n /**\n * force an input class\n * @type {Null|Function}\n * @default null\n */\n inputClass: null,\n\n /**\n * Default recognizer setup when calling `Hammer()`\n * When creating a new Manager these will be skipped.\n * @type {Array}\n */\n preset: [// RecognizerClass, options, [recognizeWith, ...], [requireFailure, ...]\n [RotateRecognizer, {\n enable: false\n }], [PinchRecognizer, {\n enable: false\n }, ['rotate']], [SwipeRecognizer, {\n direction: DIRECTION_HORIZONTAL\n }], [PanRecognizer, {\n direction: DIRECTION_HORIZONTAL\n }, ['swipe']], [TapRecognizer], [TapRecognizer, {\n event: 'doubletap',\n taps: 2\n }, ['tap']], [PressRecognizer]],\n\n /**\n * Some CSS properties can be used to improve the working of Hammer.\n * Add them to this method and they will be set when creating a new Manager.\n * @namespace\n */\n cssProps: {\n /**\n * Disables text selection to improve the dragging gesture. Mainly for desktop browsers.\n * @type {String}\n * @default 'none'\n */\n userSelect: 'none',\n\n /**\n * Disable the Windows Phone grippers when pressing an element.\n * @type {String}\n * @default 'none'\n */\n touchSelect: 'none',\n\n /**\n * Disables the default callout shown when you touch and hold a touch target.\n * On iOS, when you touch and hold a touch target such as a link, Safari displays\n * a callout containing information about the link. This property allows you to disable that callout.\n * @type {String}\n * @default 'none'\n */\n touchCallout: 'none',\n\n /**\n * Specifies whether zooming is enabled. Used by IE10>\n * @type {String}\n * @default 'none'\n */\n contentZooming: 'none',\n\n /**\n * Specifies that an entire element should be draggable instead of its contents. Mainly for desktop browsers.\n * @type {String}\n * @default 'none'\n */\n userDrag: 'none',\n\n /**\n * Overrides the highlight color shown when the user taps a link or a JavaScript\n * clickable element in iOS. This property obeys the alpha value, if specified.\n * @type {String}\n * @default 'rgba(0,0,0,0)'\n */\n tapHighlightColor: 'rgba(0,0,0,0)'\n }\n };\n var STOP = 1;\n var FORCED_STOP = 2;\n /**\n * Manager\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\n\n function Manager(element, options) {\n this.options = assign({}, Hammer.defaults, options || {});\n this.options.inputTarget = this.options.inputTarget || element;\n this.handlers = {};\n this.session = {};\n this.recognizers = [];\n this.oldCssProps = {};\n this.element = element;\n this.input = createInputInstance(this);\n this.touchAction = new TouchAction(this, this.options.touchAction);\n toggleCssProps(this, true);\n each(this.options.recognizers, function (item) {\n var recognizer = this.add(new item[0](item[1]));\n item[2] && recognizer.recognizeWith(item[2]);\n item[3] && recognizer.requireFailure(item[3]);\n }, this);\n }\n\n Manager.prototype = {\n /**\n * set options\n * @param {Object} options\n * @returns {Manager}\n */\n set: function set(options) {\n assign(this.options, options); // Options that need a little more setup\n\n if (options.touchAction) {\n this.touchAction.update();\n }\n\n if (options.inputTarget) {\n // Clean up existing event listeners and reinitialize\n this.input.destroy();\n this.input.target = options.inputTarget;\n this.input.init();\n }\n\n return this;\n },\n\n /**\n * stop recognizing for this session.\n * This session will be discarded, when a new [input]start event is fired.\n * When forced, the recognizer cycle is stopped immediately.\n * @param {Boolean} [force]\n */\n stop: function stop(force) {\n this.session.stopped = force ? FORCED_STOP : STOP;\n },\n\n /**\n * run the recognizers!\n * called by the inputHandler function on every movement of the pointers (touches)\n * it walks through all the recognizers and tries to detect the gesture that is being made\n * @param {Object} inputData\n */\n recognize: function recognize(inputData) {\n var session = this.session;\n\n if (session.stopped) {\n return;\n } // run the touch-action polyfill\n\n\n this.touchAction.preventDefaults(inputData);\n var recognizer;\n var recognizers = this.recognizers; // this holds the recognizer that is being recognized.\n // so the recognizer's state needs to be BEGAN, CHANGED, ENDED or RECOGNIZED\n // if no recognizer is detecting a thing, it is set to `null`\n\n var curRecognizer = session.curRecognizer; // reset when the last recognizer is recognized\n // or when we're in a new session\n\n if (!curRecognizer || curRecognizer && curRecognizer.state & STATE_RECOGNIZED) {\n curRecognizer = session.curRecognizer = null;\n }\n\n var i = 0;\n\n while (i < recognizers.length) {\n recognizer = recognizers[i]; // find out if we are allowed try to recognize the input for this one.\n // 1. allow if the session is NOT forced stopped (see the .stop() method)\n // 2. allow if we still haven't recognized a gesture in this session, or the this recognizer is the one\n // that is being recognized.\n // 3. allow if the recognizer is allowed to run simultaneous with the current recognized recognizer.\n // this can be setup with the `recognizeWith()` method on the recognizer.\n\n if (session.stopped !== FORCED_STOP && ( // 1\n !curRecognizer || recognizer == curRecognizer || // 2\n recognizer.canRecognizeWith(curRecognizer))) {\n // 3\n recognizer.recognize(inputData);\n } else {\n recognizer.reset();\n } // if the recognizer has been recognizing the input as a valid gesture, we want to store this one as the\n // current active recognizer. but only if we don't already have an active recognizer\n\n\n if (!curRecognizer && recognizer.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED)) {\n curRecognizer = session.curRecognizer = recognizer;\n }\n\n i++;\n }\n },\n\n /**\n * get a recognizer by its event name.\n * @param {Recognizer|String} recognizer\n * @returns {Recognizer|Null}\n */\n get: function get(recognizer) {\n if (recognizer instanceof Recognizer) {\n return recognizer;\n }\n\n var recognizers = this.recognizers;\n\n for (var i = 0; i < recognizers.length; i++) {\n if (recognizers[i].options.event == recognizer) {\n return recognizers[i];\n }\n }\n\n return null;\n },\n\n /**\n * add a recognizer to the manager\n * existing recognizers with the same event name will be removed\n * @param {Recognizer} recognizer\n * @returns {Recognizer|Manager}\n */\n add: function add(recognizer) {\n if (invokeArrayArg(recognizer, 'add', this)) {\n return this;\n } // remove existing\n\n\n var existing = this.get(recognizer.options.event);\n\n if (existing) {\n this.remove(existing);\n }\n\n this.recognizers.push(recognizer);\n recognizer.manager = this;\n this.touchAction.update();\n return recognizer;\n },\n\n /**\n * remove a recognizer by name or instance\n * @param {Recognizer|String} recognizer\n * @returns {Manager}\n */\n remove: function remove(recognizer) {\n if (invokeArrayArg(recognizer, 'remove', this)) {\n return this;\n }\n\n recognizer = this.get(recognizer); // let's make sure this recognizer exists\n\n if (recognizer) {\n var recognizers = this.recognizers;\n var index = inArray(recognizers, recognizer);\n\n if (index !== -1) {\n recognizers.splice(index, 1);\n this.touchAction.update();\n }\n }\n\n return this;\n },\n\n /**\n * bind event\n * @param {String} events\n * @param {Function} handler\n * @returns {EventEmitter} this\n */\n on: function on(events, handler) {\n if (events === undefined) {\n return;\n }\n\n if (handler === undefined) {\n return;\n }\n\n var handlers = this.handlers;\n each(splitStr(events), function (event) {\n handlers[event] = handlers[event] || [];\n handlers[event].push(handler);\n });\n return this;\n },\n\n /**\n * unbind event, leave emit blank to remove all handlers\n * @param {String} events\n * @param {Function} [handler]\n * @returns {EventEmitter} this\n */\n off: function off(events, handler) {\n if (events === undefined) {\n return;\n }\n\n var handlers = this.handlers;\n each(splitStr(events), function (event) {\n if (!handler) {\n delete handlers[event];\n } else {\n handlers[event] && handlers[event].splice(inArray(handlers[event], handler), 1);\n }\n });\n return this;\n },\n\n /**\n * emit event to the listeners\n * @param {String} event\n * @param {Object} data\n */\n emit: function emit(event, data) {\n // we also want to trigger dom events\n if (this.options.domEvents) {\n triggerDomEvent(event, data);\n } // no handlers, so skip it all\n\n\n var handlers = this.handlers[event] && this.handlers[event].slice();\n\n if (!handlers || !handlers.length) {\n return;\n }\n\n data.type = event;\n\n data.preventDefault = function () {\n data.srcEvent.preventDefault();\n };\n\n var i = 0;\n\n while (i < handlers.length) {\n handlers[i](data);\n i++;\n }\n },\n\n /**\n * destroy the manager and unbinds all events\n * it doesn't unbind dom events, that is the user own responsibility\n */\n destroy: function destroy() {\n this.element && toggleCssProps(this, false);\n this.handlers = {};\n this.session = {};\n this.input.destroy();\n this.element = null;\n }\n };\n /**\n * add/remove the css properties as defined in manager.options.cssProps\n * @param {Manager} manager\n * @param {Boolean} add\n */\n\n function toggleCssProps(manager, add) {\n var element = manager.element;\n\n if (!element.style) {\n return;\n }\n\n var prop;\n each(manager.options.cssProps, function (value, name) {\n prop = prefixed(element.style, name);\n\n if (add) {\n manager.oldCssProps[prop] = element.style[prop];\n element.style[prop] = value;\n } else {\n element.style[prop] = manager.oldCssProps[prop] || '';\n }\n });\n\n if (!add) {\n manager.oldCssProps = {};\n }\n }\n /**\n * trigger dom event\n * @param {String} event\n * @param {Object} data\n */\n\n\n function triggerDomEvent(event, data) {\n var gestureEvent = document.createEvent('Event');\n gestureEvent.initEvent(event, true, true);\n gestureEvent.gesture = data;\n data.target.dispatchEvent(gestureEvent);\n }\n\n assign(Hammer, {\n INPUT_START: INPUT_START,\n INPUT_MOVE: INPUT_MOVE,\n INPUT_END: INPUT_END,\n INPUT_CANCEL: INPUT_CANCEL,\n STATE_POSSIBLE: STATE_POSSIBLE,\n STATE_BEGAN: STATE_BEGAN,\n STATE_CHANGED: STATE_CHANGED,\n STATE_ENDED: STATE_ENDED,\n STATE_RECOGNIZED: STATE_RECOGNIZED,\n STATE_CANCELLED: STATE_CANCELLED,\n STATE_FAILED: STATE_FAILED,\n DIRECTION_NONE: DIRECTION_NONE,\n DIRECTION_LEFT: DIRECTION_LEFT,\n DIRECTION_RIGHT: DIRECTION_RIGHT,\n DIRECTION_UP: DIRECTION_UP,\n DIRECTION_DOWN: DIRECTION_DOWN,\n DIRECTION_HORIZONTAL: DIRECTION_HORIZONTAL,\n DIRECTION_VERTICAL: DIRECTION_VERTICAL,\n DIRECTION_ALL: DIRECTION_ALL,\n Manager: Manager,\n Input: Input,\n TouchAction: TouchAction,\n TouchInput: TouchInput,\n MouseInput: MouseInput,\n PointerEventInput: PointerEventInput,\n TouchMouseInput: TouchMouseInput,\n SingleTouchInput: SingleTouchInput,\n Recognizer: Recognizer,\n AttrRecognizer: AttrRecognizer,\n Tap: TapRecognizer,\n Pan: PanRecognizer,\n Swipe: SwipeRecognizer,\n Pinch: PinchRecognizer,\n Rotate: RotateRecognizer,\n Press: PressRecognizer,\n on: addEventListeners,\n off: removeEventListeners,\n each: each,\n merge: merge,\n extend: extend,\n assign: assign,\n inherit: inherit,\n bindFn: bindFn,\n prefixed: prefixed\n }); // this prevents errors when Hammer is loaded in the presence of an AMD\n // style loader but by script tag, not by the loader.\n\n var freeGlobal = typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}; // jshint ignore:line\n\n freeGlobal.Hammer = Hammer;\n\n if (true) {\n !(__WEBPACK_AMD_DEFINE_RESULT__ = (function () {\n return Hammer;\n }).call(exports, __webpack_require__, exports, module),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else {}\n})(window, document, 'Hammer');//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9oYW1tZXJqcy9oYW1tZXIuanM/ZWJmYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxTQUFTO0FBQ3RCLGFBQWEsT0FBTztBQUNwQixhQUFhLE9BQU87QUFDcEIsZUFBZTtBQUNmOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCLGFBQWEsT0FBTztBQUNwQixhQUFhLE9BQU87QUFDcEIsZUFBZTtBQUNmOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxPQUFPO0FBQ3BCLGFBQWEsU0FBUztBQUN0QixhQUFhLE9BQU87QUFDcEI7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLFNBQVM7QUFDdEIsYUFBYSxPQUFPO0FBQ3BCLGFBQWEsT0FBTztBQUNwQixlQUFlLFNBQVM7QUFDeEI7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMklBQTJJLFVBQVU7QUFDcko7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsT0FBTztBQUNwQixhQUFhLFVBQVU7QUFDdkIsZUFBZSxPQUFPO0FBQ3RCOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLHlCQUF5QiwwQkFBMEI7QUFDbkQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLE9BQU87QUFDcEIsYUFBYSxPQUFPO0FBQ3BCLGFBQWEsUUFBUTtBQUNyQixlQUFlLE9BQU87QUFDdEI7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLGFBQWEsT0FBTztBQUNwQixhQUFhLE9BQU87QUFDcEIsZUFBZSxPQUFPO0FBQ3RCOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLGFBQWEsU0FBUztBQUN0QixhQUFhLFNBQVM7QUFDdEIsYUFBYSxPQUFPO0FBQ3BCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLFNBQVM7QUFDdEIsYUFBYSxPQUFPO0FBQ3BCLGVBQWU7QUFDZjs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsaUJBQWlCO0FBQzlCLGFBQWEsTUFBTTtBQUNuQixlQUFlO0FBQ2Y7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxFQUFFO0FBQ2YsYUFBYSxFQUFFO0FBQ2YsZUFBZTtBQUNmOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxZQUFZO0FBQ3pCLGFBQWEsT0FBTztBQUNwQixhQUFhLFNBQVM7QUFDdEI7OztBQUdBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxhQUFhLFlBQVk7QUFDekIsYUFBYSxPQUFPO0FBQ3BCLGFBQWEsU0FBUztBQUN0Qjs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxZQUFZO0FBQ3pCLGFBQWEsWUFBWTtBQUN6QixjQUFjLFFBQVE7QUFDdEI7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsT0FBTztBQUNwQixhQUFhLE9BQU87QUFDcEIsZUFBZSxRQUFRO0FBQ3ZCOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxPQUFPO0FBQ3BCLGVBQWUsTUFBTTtBQUNyQjs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsTUFBTTtBQUNuQixhQUFhLE9BQU87QUFDcEIsYUFBYSxPQUFPO0FBQ3BCLGNBQWMsZUFBZTtBQUM3Qjs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsT0FBTztBQUNwQixlQUFlO0FBQ2Y7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLE1BQU0sT0FBTyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUs7QUFDN0MsYUFBYSxPQUFPO0FBQ3BCLGFBQWEsUUFBUTtBQUNyQixlQUFlLE1BQU0sR0FBRyxLQUFLLEVBQUUsS0FBSztBQUNwQzs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLE9BQU87QUFDcEIsYUFBYSxPQUFPO0FBQ3BCLGVBQWUsaUJBQWlCO0FBQ2hDOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLFlBQVk7QUFDekIsZUFBZTtBQUNmOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsUUFBUTtBQUNyQixhQUFhLFNBQVM7QUFDdEIsZUFBZTtBQUNmO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QztBQUM5Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQzs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsT0FBTztBQUNwQixlQUFlO0FBQ2Y7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsUUFBUTtBQUNyQixhQUFhLE9BQU87QUFDcEIsYUFBYSxPQUFPO0FBQ3BCOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMOzs7QUFHQSxnQ0FBZ0M7O0FBRWhDLHFDQUFxQzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxPQUFPO0FBQ3BCLGFBQWEsT0FBTztBQUNwQjs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDOztBQUV6QztBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkM7O0FBRTdDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsT0FBTztBQUNwQixhQUFhLE9BQU87QUFDcEI7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLE9BQU87QUFDcEIsZUFBZSxPQUFPO0FBQ3RCOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxNQUFNO0FBQ25CLGNBQWMsT0FBTztBQUNyQjs7O0FBR0E7QUFDQSx5Q0FBeUM7O0FBRXpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsT0FBTztBQUNwQixhQUFhLE9BQU87QUFDcEIsYUFBYSxPQUFPO0FBQ3BCLGNBQWMsT0FBTztBQUNyQjs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsT0FBTztBQUNwQixhQUFhLE9BQU87QUFDcEIsY0FBYyxPQUFPO0FBQ3JCOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLE9BQU8sS0FBSztBQUN6QixhQUFhLE9BQU8sS0FBSztBQUN6QixhQUFhLE1BQU07QUFDbkIsY0FBYyxPQUFPO0FBQ3JCOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLE9BQU87QUFDcEIsYUFBYSxPQUFPO0FBQ3BCLGFBQWEsTUFBTTtBQUNuQixjQUFjLE9BQU87QUFDckI7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsTUFBTTtBQUNuQixhQUFhLE1BQU07QUFDbkIsY0FBYyxPQUFPO0FBQ3JCOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLE1BQU07QUFDbkIsYUFBYSxNQUFNO0FBQ25CLGNBQWMsT0FBTztBQUNyQjs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7O0FBRXpCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQSwrQ0FBK0M7O0FBRS9DO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTzs7O0FBR1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esb0VBQW9FOztBQUVwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvREFBb0Q7O0FBRXBELGlFQUFpRTs7QUFFakU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLE9BQU87OztBQUdQO0FBQ0E7QUFDQSxPQUFPOzs7QUFHUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxpREFBaUQ7O0FBRWpEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsZ0VBQWdFOztBQUVoRTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLEdBQUc7QUFDSDtBQUNBLFlBQVk7QUFDWixhQUFhLE9BQU87QUFDcEIsYUFBYSxPQUFPO0FBQ3BCLGVBQWUsZ0JBQWdCO0FBQy9COztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLEdBQUc7QUFDSDtBQUNBLFlBQVk7QUFDWixhQUFhLE9BQU87QUFDcEIsYUFBYSxPQUFPO0FBQ3BCLGVBQWUsZ0JBQWdCO0FBQy9COztBQUVBO0FBQ0E7QUFDQSxtQ0FBbUM7O0FBRW5DO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCOztBQUU3QjtBQUNBO0FBQ0EsS0FBSyxFQUFFOztBQUVQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOzs7QUFHUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87OztBQUdQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsNkJBQTZCO0FBQ2hEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsZ0VBQWdFOztBQUVoRTtBQUNBO0FBQ0EsaURBQWlEOztBQUVqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsUUFBUTtBQUNyQixhQUFhLE9BQU87QUFDcEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLGlCQUFpQixPQUFPO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBLDRDQUE0Qzs7QUFFNUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsT0FBTztBQUNwQixlQUFlO0FBQ2Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHFEQUFxRDtBQUNyRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7OztBQUdMO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsK0JBQStCO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxPQUFPO0FBQ3BCOztBQUVBO0FBQ0EsNEJBQTRCLDhCQUE4QjtBQUMxRDtBQUNBLHdCQUF3Qjs7QUFFeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxnQkFBZ0I7O0FBRWhCO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQSxvQ0FBb0M7O0FBRXBDO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxlQUFlLFdBQVc7QUFDMUIsaUJBQWlCLFdBQVc7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsZUFBZSxXQUFXO0FBQzFCLGlCQUFpQixXQUFXO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsZUFBZSxXQUFXO0FBQzFCLGlCQUFpQixXQUFXO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLGVBQWUsV0FBVztBQUMxQixpQkFBaUIsV0FBVztBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLGVBQWUsV0FBVztBQUMxQixpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87OztBQUdQO0FBQ0E7QUFDQTs7QUFFQSwrQkFBK0I7O0FBRS9CO0FBQ0E7QUFDQTtBQUNBLE9BQU87OztBQUdQO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOzs7QUFHUDtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQyxhQUFhOztBQUVqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87OztBQUdQO0FBQ0E7QUFDQTs7QUFFQSxnREFBZ0Q7QUFDaEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixpQkFBaUIsTUFBTTtBQUN2QjtBQUNBLDJDQUEyQztBQUMzQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQSxnREFBZ0Q7O0FBRWhEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsTUFBTTtBQUNuQixlQUFlLE9BQU87QUFDdEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLE1BQU07QUFDbkIsZUFBZTtBQUNmOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsa0JBQWtCO0FBQy9CLGFBQWEsV0FBVztBQUN4QixlQUFlO0FBQ2Y7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsaUJBQWlCLFFBQVE7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QixpQkFBaUIsRUFBRTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDOztBQUV6QztBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCOztBQUUzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCO0FBQzFCOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHNDQUFzQztBQUN0Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQSw0QkFBNEI7QUFDNUI7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxhQUFhLFlBQVk7QUFDekIsYUFBYSxPQUFPO0FBQ3BCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxZQUFZO0FBQ3pCLGFBQWEsT0FBTztBQUNwQjtBQUNBOztBQUVBO0FBQ0EsNEJBQTRCLGdDQUFnQztBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQSxvQ0FBb0M7O0FBRXBDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPOzs7QUFHUDtBQUNBO0FBQ0EseUNBQXlDO0FBQ3pDO0FBQ0E7O0FBRUEsZ0RBQWdEO0FBQ2hEOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLG9DQUFvQztBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsZUFBZSxrQkFBa0I7QUFDakMsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEscUJBQXFCLHdCQUF3QjtBQUM3QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0EsZUFBZSxXQUFXO0FBQzFCLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87OztBQUdQOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLGVBQWUsa0JBQWtCO0FBQ2pDLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHdDQUF3Qzs7QUFFeEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxTQUFTO0FBQ3hCLGlCQUFpQixhQUFhO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsU0FBUztBQUN4QixpQkFBaUIsYUFBYTtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOzs7QUFHUDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCLGFBQWEsUUFBUTtBQUNyQjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsT0FBTztBQUNwQixhQUFhLE9BQU87QUFDcEI7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHLEVBQUU7QUFDTDs7QUFFQSxvR0FBb0c7O0FBRXBHOztBQUVBLE1BQU0sSUFBMEM7QUFDaEQsSUFBSSxtQ0FBTztBQUNYO0FBQ0EsS0FBSztBQUFBLGtHQUFDO0FBQ04sR0FBRyxNQUFNLEVBSU47QUFDSCxDQUFDIiwiZmlsZSI6IjUwODcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiEgSGFtbWVyLkpTIC0gdjIuMC43IC0gMjAxNi0wNC0yMlxuICogaHR0cDovL2hhbW1lcmpzLmdpdGh1Yi5pby9cbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTYgSm9yaWsgVGFuZ2VsZGVyO1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlICovXG4oZnVuY3Rpb24gKHdpbmRvdywgZG9jdW1lbnQsIGV4cG9ydE5hbWUsIHVuZGVmaW5lZCkge1xuICAndXNlIHN0cmljdCc7XG5cbiAgdmFyIFZFTkRPUl9QUkVGSVhFUyA9IFsnJywgJ3dlYmtpdCcsICdNb3onLCAnTVMnLCAnbXMnLCAnbyddO1xuICB2YXIgVEVTVF9FTEVNRU5UID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIHZhciBUWVBFX0ZVTkNUSU9OID0gJ2Z1bmN0aW9uJztcbiAgdmFyIHJvdW5kID0gTWF0aC5yb3VuZDtcbiAgdmFyIGFicyA9IE1hdGguYWJzO1xuICB2YXIgbm93ID0gRGF0ZS5ub3c7XG4gIC8qKlxuICAgKiBzZXQgYSB0aW1lb3V0IHdpdGggYSBnaXZlbiBzY29wZVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICAgKiBAcGFyYW0ge051bWJlcn0gdGltZW91dFxuICAgKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cblxuICBmdW5jdGlvbiBzZXRUaW1lb3V0Q29udGV4dChmbiwgdGltZW91dCwgY29udGV4dCkge1xuICAgIHJldHVybiBzZXRUaW1lb3V0KGJpbmRGbihmbiwgY29udGV4dCksIHRpbWVvdXQpO1xuICB9XG4gIC8qKlxuICAgKiBpZiB0aGUgYXJndW1lbnQgaXMgYW4gYXJyYXksIHdlIHdhbnQgdG8gZXhlY3V0ZSB0aGUgZm4gb24gZWFjaCBlbnRyeVxuICAgKiBpZiBpdCBhaW50IGFuIGFycmF5IHdlIGRvbid0IHdhbnQgdG8gZG8gYSB0aGluZy5cbiAgICogdGhpcyBpcyB1c2VkIGJ5IGFsbCB0aGUgbWV0aG9kcyB0aGF0IGFjY2VwdCBhIHNpbmdsZSBhbmQgYXJyYXkgYXJndW1lbnQuXG4gICAqIEBwYXJhbSB7KnxBcnJheX0gYXJnXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBmblxuICAgKiBAcGFyYW0ge09iamVjdH0gW2NvbnRleHRdXG4gICAqIEByZXR1cm5zIHtCb29sZWFufVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGludm9rZUFycmF5QXJnKGFyZywgZm4sIGNvbnRleHQpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7XG4gICAgICBlYWNoKGFyZywgY29udGV4dFtmbl0sIGNvbnRleHQpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8qKlxuICAgKiB3YWxrIG9iamVjdHMgYW5kIGFycmF5c1xuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdG9yXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0XG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gZWFjaChvYmosIGl0ZXJhdG9yLCBjb250ZXh0KSB7XG4gICAgdmFyIGk7XG5cbiAgICBpZiAoIW9iaikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChvYmouZm9yRWFjaCkge1xuICAgICAgb2JqLmZvckVhY2goaXRlcmF0b3IsIGNvbnRleHQpO1xuICAgIH0gZWxzZSBpZiAob2JqLmxlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpID0gMDtcblxuICAgICAgd2hpbGUgKGkgPCBvYmoubGVuZ3RoKSB7XG4gICAgICAgIGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgb2JqW2ldLCBpLCBvYmopO1xuICAgICAgICBpKys7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAoaSBpbiBvYmopIHtcbiAgICAgICAgb2JqLmhhc093blByb3BlcnR5KGkpICYmIGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgb2JqW2ldLCBpLCBvYmopO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvKipcbiAgICogd3JhcCBhIG1ldGhvZCB3aXRoIGEgZGVwcmVjYXRpb24gd2FybmluZyBhbmQgc3RhY2sgdHJhY2VcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gbWV0aG9kXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gQSBuZXcgZnVuY3Rpb24gd3JhcHBpbmcgdGhlIHN1cHBsaWVkIG1ldGhvZC5cbiAgICovXG5cblxuICBmdW5jdGlvbiBkZXByZWNhdGUobWV0aG9kLCBuYW1lLCBtZXNzYWdlKSB7XG4gICAgdmFyIGRlcHJlY2F0aW9uTWVzc2FnZSA9ICdERVBSRUNBVEVEIE1FVEhPRDogJyArIG5hbWUgKyAnXFxuJyArIG1lc3NhZ2UgKyAnIEFUIFxcbic7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBlID0gbmV3IEVycm9yKCdnZXQtc3RhY2stdHJhY2UnKTtcbiAgICAgIHZhciBzdGFjayA9IGUgJiYgZS5zdGFjayA/IGUuc3RhY2sucmVwbGFjZSgvXlteXFwoXSs/W1xcbiRdL2dtLCAnJykucmVwbGFjZSgvXlxccythdFxccysvZ20sICcnKS5yZXBsYWNlKC9eT2JqZWN0Ljxhbm9ueW1vdXM+XFxzKlxcKC9nbSwgJ3thbm9ueW1vdXN9KClAJykgOiAnVW5rbm93biBTdGFjayBUcmFjZSc7XG4gICAgICB2YXIgbG9nID0gd2luZG93LmNvbnNvbGUgJiYgKHdpbmRvdy5jb25zb2xlLndhcm4gfHwgd2luZG93LmNvbnNvbGUubG9nKTtcblxuICAgICAgaWYgKGxvZykge1xuICAgICAgICBsb2cuY2FsbCh3aW5kb3cuY29uc29sZSwgZGVwcmVjYXRpb25NZXNzYWdlLCBzdGFjayk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBtZXRob2QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9O1xuICB9XG4gIC8qKlxuICAgKiBleHRlbmQgb2JqZWN0LlxuICAgKiBtZWFucyB0aGF0IHByb3BlcnRpZXMgaW4gZGVzdCB3aWxsIGJlIG92ZXJ3cml0dGVuIGJ5IHRoZSBvbmVzIGluIHNyYy5cbiAgICogQHBhcmFtIHtPYmplY3R9IHRhcmdldFxuICAgKiBAcGFyYW0gey4uLk9iamVjdH0gb2JqZWN0c190b19hc3NpZ25cbiAgICogQHJldHVybnMge09iamVjdH0gdGFyZ2V0XG4gICAqL1xuXG5cbiAgdmFyIGFzc2lnbjtcblxuICBpZiAodHlwZW9mIE9iamVjdC5hc3NpZ24gIT09ICdmdW5jdGlvbicpIHtcbiAgICBhc3NpZ24gPSBmdW5jdGlvbiBhc3NpZ24odGFyZ2V0KSB7XG4gICAgICBpZiAodGFyZ2V0ID09PSB1bmRlZmluZWQgfHwgdGFyZ2V0ID09PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IHVuZGVmaW5lZCBvciBudWxsIHRvIG9iamVjdCcpO1xuICAgICAgfVxuXG4gICAgICB2YXIgb3V0cHV0ID0gT2JqZWN0KHRhcmdldCk7XG5cbiAgICAgIGZvciAodmFyIGluZGV4ID0gMTsgaW5kZXggPCBhcmd1bWVudHMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaW5kZXhdO1xuXG4gICAgICAgIGlmIChzb3VyY2UgIT09IHVuZGVmaW5lZCAmJiBzb3VyY2UgIT09IG51bGwpIHtcbiAgICAgICAgICBmb3IgKHZhciBuZXh0S2V5IGluIHNvdXJjZSkge1xuICAgICAgICAgICAgaWYgKHNvdXJjZS5oYXNPd25Qcm9wZXJ0eShuZXh0S2V5KSkge1xuICAgICAgICAgICAgICBvdXRwdXRbbmV4dEtleV0gPSBzb3VyY2VbbmV4dEtleV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBhc3NpZ24gPSBPYmplY3QuYXNzaWduO1xuICB9XG4gIC8qKlxuICAgKiBleHRlbmQgb2JqZWN0LlxuICAgKiBtZWFucyB0aGF0IHByb3BlcnRpZXMgaW4gZGVzdCB3aWxsIGJlIG92ZXJ3cml0dGVuIGJ5IHRoZSBvbmVzIGluIHNyYy5cbiAgICogQHBhcmFtIHtPYmplY3R9IGRlc3RcbiAgICogQHBhcmFtIHtPYmplY3R9IHNyY1xuICAgKiBAcGFyYW0ge0Jvb2xlYW59IFttZXJnZT1mYWxzZV1cbiAgICogQHJldHVybnMge09iamVjdH0gZGVzdFxuICAgKi9cblxuXG4gIHZhciBleHRlbmQgPSBkZXByZWNhdGUoZnVuY3Rpb24gZXh0ZW5kKGRlc3QsIHNyYywgbWVyZ2UpIHtcbiAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHNyYyk7XG4gICAgdmFyIGkgPSAwO1xuXG4gICAgd2hpbGUgKGkgPCBrZXlzLmxlbmd0aCkge1xuICAgICAgaWYgKCFtZXJnZSB8fCBtZXJnZSAmJiBkZXN0W2tleXNbaV1dID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZGVzdFtrZXlzW2ldXSA9IHNyY1trZXlzW2ldXTtcbiAgICAgIH1cblxuICAgICAgaSsrO1xuICAgIH1cblxuICAgIHJldHVybiBkZXN0O1xuICB9LCAnZXh0ZW5kJywgJ1VzZSBgYXNzaWduYC4nKTtcbiAgLyoqXG4gICAqIG1lcmdlIHRoZSB2YWx1ZXMgZnJvbSBzcmMgaW4gdGhlIGRlc3QuXG4gICAqIG1lYW5zIHRoYXQgcHJvcGVydGllcyB0aGF0IGV4aXN0IGluIGRlc3Qgd2lsbCBub3QgYmUgb3ZlcndyaXR0ZW4gYnkgc3JjXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBkZXN0XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBzcmNcbiAgICogQHJldHVybnMge09iamVjdH0gZGVzdFxuICAgKi9cblxuICB2YXIgbWVyZ2UgPSBkZXByZWNhdGUoZnVuY3Rpb24gbWVyZ2UoZGVzdCwgc3JjKSB7XG4gICAgcmV0dXJuIGV4dGVuZChkZXN0LCBzcmMsIHRydWUpO1xuICB9LCAnbWVyZ2UnLCAnVXNlIGBhc3NpZ25gLicpO1xuICAvKipcbiAgICogc2ltcGxlIGNsYXNzIGluaGVyaXRhbmNlXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNoaWxkXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGJhc2VcbiAgICogQHBhcmFtIHtPYmplY3R9IFtwcm9wZXJ0aWVzXVxuICAgKi9cblxuICBmdW5jdGlvbiBpbmhlcml0KGNoaWxkLCBiYXNlLCBwcm9wZXJ0aWVzKSB7XG4gICAgdmFyIGJhc2VQID0gYmFzZS5wcm90b3R5cGUsXG4gICAgICAgIGNoaWxkUDtcbiAgICBjaGlsZFAgPSBjaGlsZC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGJhc2VQKTtcbiAgICBjaGlsZFAuY29uc3RydWN0b3IgPSBjaGlsZDtcbiAgICBjaGlsZFAuX3N1cGVyID0gYmFzZVA7XG5cbiAgICBpZiAocHJvcGVydGllcykge1xuICAgICAgYXNzaWduKGNoaWxkUCwgcHJvcGVydGllcyk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBzaW1wbGUgZnVuY3Rpb24gYmluZFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICAgKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFxuICAgKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gYmluZEZuKGZuLCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGJvdW5kRm4oKSB7XG4gICAgICByZXR1cm4gZm4uYXBwbHkoY29udGV4dCwgYXJndW1lbnRzKTtcbiAgICB9O1xuICB9XG4gIC8qKlxuICAgKiBsZXQgYSBib29sZWFuIHZhbHVlIGFsc28gYmUgYSBmdW5jdGlvbiB0aGF0IG11c3QgcmV0dXJuIGEgYm9vbGVhblxuICAgKiB0aGlzIGZpcnN0IGl0ZW0gaW4gYXJncyB3aWxsIGJlIHVzZWQgYXMgdGhlIGNvbnRleHRcbiAgICogQHBhcmFtIHtCb29sZWFufEZ1bmN0aW9ufSB2YWxcbiAgICogQHBhcmFtIHtBcnJheX0gW2FyZ3NdXG4gICAqIEByZXR1cm5zIHtCb29sZWFufVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGJvb2xPckZuKHZhbCwgYXJncykge1xuICAgIGlmICh0eXBlb2YgdmFsID09IFRZUEVfRlVOQ1RJT04pIHtcbiAgICAgIHJldHVybiB2YWwuYXBwbHkoYXJncyA/IGFyZ3NbMF0gfHwgdW5kZWZpbmVkIDogdW5kZWZpbmVkLCBhcmdzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsO1xuICB9XG4gIC8qKlxuICAgKiB1c2UgdGhlIHZhbDIgd2hlbiB2YWwxIGlzIHVuZGVmaW5lZFxuICAgKiBAcGFyYW0geyp9IHZhbDFcbiAgICogQHBhcmFtIHsqfSB2YWwyXG4gICAqIEByZXR1cm5zIHsqfVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGlmVW5kZWZpbmVkKHZhbDEsIHZhbDIpIHtcbiAgICByZXR1cm4gdmFsMSA9PT0gdW5kZWZpbmVkID8gdmFsMiA6IHZhbDE7XG4gIH1cbiAgLyoqXG4gICAqIGFkZEV2ZW50TGlzdGVuZXIgd2l0aCBtdWx0aXBsZSBldmVudHMgYXQgb25jZVxuICAgKiBAcGFyYW0ge0V2ZW50VGFyZ2V0fSB0YXJnZXRcbiAgICogQHBhcmFtIHtTdHJpbmd9IHR5cGVzXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXJcbiAgICovXG5cblxuICBmdW5jdGlvbiBhZGRFdmVudExpc3RlbmVycyh0YXJnZXQsIHR5cGVzLCBoYW5kbGVyKSB7XG4gICAgZWFjaChzcGxpdFN0cih0eXBlcyksIGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBoYW5kbGVyLCBmYWxzZSk7XG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIHJlbW92ZUV2ZW50TGlzdGVuZXIgd2l0aCBtdWx0aXBsZSBldmVudHMgYXQgb25jZVxuICAgKiBAcGFyYW0ge0V2ZW50VGFyZ2V0fSB0YXJnZXRcbiAgICogQHBhcmFtIHtTdHJpbmd9IHR5cGVzXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXJcbiAgICovXG5cblxuICBmdW5jdGlvbiByZW1vdmVFdmVudExpc3RlbmVycyh0YXJnZXQsIHR5cGVzLCBoYW5kbGVyKSB7XG4gICAgZWFjaChzcGxpdFN0cih0eXBlcyksIGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgICB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBoYW5kbGVyLCBmYWxzZSk7XG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIGZpbmQgaWYgYSBub2RlIGlzIGluIHRoZSBnaXZlbiBwYXJlbnRcbiAgICogQG1ldGhvZCBoYXNQYXJlbnRcbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gbm9kZVxuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBwYXJlbnRcbiAgICogQHJldHVybiB7Qm9vbGVhbn0gZm91bmRcbiAgICovXG5cblxuICBmdW5jdGlvbiBoYXNQYXJlbnQobm9kZSwgcGFyZW50KSB7XG4gICAgd2hpbGUgKG5vZGUpIHtcbiAgICAgIGlmIChub2RlID09IHBhcmVudCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLyoqXG4gICAqIHNtYWxsIGluZGV4T2Ygd3JhcHBlclxuICAgKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBmaW5kXG4gICAqIEByZXR1cm5zIHtCb29sZWFufSBmb3VuZFxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGluU3RyKHN0ciwgZmluZCkge1xuICAgIHJldHVybiBzdHIuaW5kZXhPZihmaW5kKSA+IC0xO1xuICB9XG4gIC8qKlxuICAgKiBzcGxpdCBzdHJpbmcgb24gd2hpdGVzcGFjZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gICAqIEByZXR1cm5zIHtBcnJheX0gd29yZHNcbiAgICovXG5cblxuICBmdW5jdGlvbiBzcGxpdFN0cihzdHIpIHtcbiAgICByZXR1cm4gc3RyLnRyaW0oKS5zcGxpdCgvXFxzKy9nKTtcbiAgfVxuICAvKipcbiAgICogZmluZCBpZiBhIGFycmF5IGNvbnRhaW5zIHRoZSBvYmplY3QgdXNpbmcgaW5kZXhPZiBvciBhIHNpbXBsZSBwb2x5RmlsbFxuICAgKiBAcGFyYW0ge0FycmF5fSBzcmNcbiAgICogQHBhcmFtIHtTdHJpbmd9IGZpbmRcbiAgICogQHBhcmFtIHtTdHJpbmd9IFtmaW5kQnlLZXldXG4gICAqIEByZXR1cm4ge0Jvb2xlYW58TnVtYmVyfSBmYWxzZSB3aGVuIG5vdCBmb3VuZCwgb3IgdGhlIGluZGV4XG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gaW5BcnJheShzcmMsIGZpbmQsIGZpbmRCeUtleSkge1xuICAgIGlmIChzcmMuaW5kZXhPZiAmJiAhZmluZEJ5S2V5KSB7XG4gICAgICByZXR1cm4gc3JjLmluZGV4T2YoZmluZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBpID0gMDtcblxuICAgICAgd2hpbGUgKGkgPCBzcmMubGVuZ3RoKSB7XG4gICAgICAgIGlmIChmaW5kQnlLZXkgJiYgc3JjW2ldW2ZpbmRCeUtleV0gPT0gZmluZCB8fCAhZmluZEJ5S2V5ICYmIHNyY1tpXSA9PT0gZmluZCkge1xuICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICB9XG5cbiAgICAgICAgaSsrO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBjb252ZXJ0IGFycmF5LWxpa2Ugb2JqZWN0cyB0byByZWFsIGFycmF5c1xuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gICAqIEByZXR1cm5zIHtBcnJheX1cbiAgICovXG5cblxuICBmdW5jdGlvbiB0b0FycmF5KG9iaikge1xuICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChvYmosIDApO1xuICB9XG4gIC8qKlxuICAgKiB1bmlxdWUgYXJyYXkgd2l0aCBvYmplY3RzIGJhc2VkIG9uIGEga2V5IChsaWtlICdpZCcpIG9yIGp1c3QgYnkgdGhlIGFycmF5J3MgdmFsdWVcbiAgICogQHBhcmFtIHtBcnJheX0gc3JjIFt7aWQ6MX0se2lkOjJ9LHtpZDoxfV1cbiAgICogQHBhcmFtIHtTdHJpbmd9IFtrZXldXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gW3NvcnQ9RmFsc2VdXG4gICAqIEByZXR1cm5zIHtBcnJheX0gW3tpZDoxfSx7aWQ6Mn1dXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gdW5pcXVlQXJyYXkoc3JjLCBrZXksIHNvcnQpIHtcbiAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgIHZhciB2YWx1ZXMgPSBbXTtcbiAgICB2YXIgaSA9IDA7XG5cbiAgICB3aGlsZSAoaSA8IHNyYy5sZW5ndGgpIHtcbiAgICAgIHZhciB2YWwgPSBrZXkgPyBzcmNbaV1ba2V5XSA6IHNyY1tpXTtcblxuICAgICAgaWYgKGluQXJyYXkodmFsdWVzLCB2YWwpIDwgMCkge1xuICAgICAgICByZXN1bHRzLnB1c2goc3JjW2ldKTtcbiAgICAgIH1cblxuICAgICAgdmFsdWVzW2ldID0gdmFsO1xuICAgICAgaSsrO1xuICAgIH1cblxuICAgIGlmIChzb3J0KSB7XG4gICAgICBpZiAoIWtleSkge1xuICAgICAgICByZXN1bHRzID0gcmVzdWx0cy5zb3J0KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHRzID0gcmVzdWx0cy5zb3J0KGZ1bmN0aW9uIHNvcnRVbmlxdWVBcnJheShhLCBiKSB7XG4gICAgICAgICAgcmV0dXJuIGFba2V5XSA+IGJba2V5XTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH1cbiAgLyoqXG4gICAqIGdldCB0aGUgcHJlZml4ZWQgcHJvcGVydHlcbiAgICogQHBhcmFtIHtPYmplY3R9IG9ialxuICAgKiBAcGFyYW0ge1N0cmluZ30gcHJvcGVydHlcbiAgICogQHJldHVybnMge1N0cmluZ3xVbmRlZmluZWR9IHByZWZpeGVkXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcHJlZml4ZWQob2JqLCBwcm9wZXJ0eSkge1xuICAgIHZhciBwcmVmaXgsIHByb3A7XG4gICAgdmFyIGNhbWVsUHJvcCA9IHByb3BlcnR5WzBdLnRvVXBwZXJDYXNlKCkgKyBwcm9wZXJ0eS5zbGljZSgxKTtcbiAgICB2YXIgaSA9IDA7XG5cbiAgICB3aGlsZSAoaSA8IFZFTkRPUl9QUkVGSVhFUy5sZW5ndGgpIHtcbiAgICAgIHByZWZpeCA9IFZFTkRPUl9QUkVGSVhFU1tpXTtcbiAgICAgIHByb3AgPSBwcmVmaXggPyBwcmVmaXggKyBjYW1lbFByb3AgOiBwcm9wZXJ0eTtcblxuICAgICAgaWYgKHByb3AgaW4gb2JqKSB7XG4gICAgICAgIHJldHVybiBwcm9wO1xuICAgICAgfVxuXG4gICAgICBpKys7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICAvKipcbiAgICogZ2V0IGEgdW5pcXVlIGlkXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IHVuaXF1ZUlkXG4gICAqL1xuXG5cbiAgdmFyIF91bmlxdWVJZCA9IDE7XG5cbiAgZnVuY3Rpb24gdW5pcXVlSWQoKSB7XG4gICAgcmV0dXJuIF91bmlxdWVJZCsrO1xuICB9XG4gIC8qKlxuICAgKiBnZXQgdGhlIHdpbmRvdyBvYmplY3Qgb2YgYW4gZWxlbWVudFxuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gICAqIEByZXR1cm5zIHtEb2N1bWVudFZpZXd8V2luZG93fVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGdldFdpbmRvd0ZvckVsZW1lbnQoZWxlbWVudCkge1xuICAgIHZhciBkb2MgPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQgfHwgZWxlbWVudDtcbiAgICByZXR1cm4gZG9jLmRlZmF1bHRWaWV3IHx8IGRvYy5wYXJlbnRXaW5kb3cgfHwgd2luZG93O1xuICB9XG5cbiAgdmFyIE1PQklMRV9SRUdFWCA9IC9tb2JpbGV8dGFibGV0fGlwKGFkfGhvbmV8b2QpfGFuZHJvaWQvaTtcbiAgdmFyIFNVUFBPUlRfVE9VQ0ggPSAoJ29udG91Y2hzdGFydCcgaW4gd2luZG93KTtcbiAgdmFyIFNVUFBPUlRfUE9JTlRFUl9FVkVOVFMgPSBwcmVmaXhlZCh3aW5kb3csICdQb2ludGVyRXZlbnQnKSAhPT0gdW5kZWZpbmVkO1xuICB2YXIgU1VQUE9SVF9PTkxZX1RPVUNIID0gU1VQUE9SVF9UT1VDSCAmJiBNT0JJTEVfUkVHRVgudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbiAgdmFyIElOUFVUX1RZUEVfVE9VQ0ggPSAndG91Y2gnO1xuICB2YXIgSU5QVVRfVFlQRV9QRU4gPSAncGVuJztcbiAgdmFyIElOUFVUX1RZUEVfTU9VU0UgPSAnbW91c2UnO1xuICB2YXIgSU5QVVRfVFlQRV9LSU5FQ1QgPSAna2luZWN0JztcbiAgdmFyIENPTVBVVEVfSU5URVJWQUwgPSAyNTtcbiAgdmFyIElOUFVUX1NUQVJUID0gMTtcbiAgdmFyIElOUFVUX01PVkUgPSAyO1xuICB2YXIgSU5QVVRfRU5EID0gNDtcbiAgdmFyIElOUFVUX0NBTkNFTCA9IDg7XG4gIHZhciBESVJFQ1RJT05fTk9ORSA9IDE7XG4gIHZhciBESVJFQ1RJT05fTEVGVCA9IDI7XG4gIHZhciBESVJFQ1RJT05fUklHSFQgPSA0O1xuICB2YXIgRElSRUNUSU9OX1VQID0gODtcbiAgdmFyIERJUkVDVElPTl9ET1dOID0gMTY7XG4gIHZhciBESVJFQ1RJT05fSE9SSVpPTlRBTCA9IERJUkVDVElPTl9MRUZUIHwgRElSRUNUSU9OX1JJR0hUO1xuICB2YXIgRElSRUNUSU9OX1ZFUlRJQ0FMID0gRElSRUNUSU9OX1VQIHwgRElSRUNUSU9OX0RPV047XG4gIHZhciBESVJFQ1RJT05fQUxMID0gRElSRUNUSU9OX0hPUklaT05UQUwgfCBESVJFQ1RJT05fVkVSVElDQUw7XG4gIHZhciBQUk9QU19YWSA9IFsneCcsICd5J107XG4gIHZhciBQUk9QU19DTElFTlRfWFkgPSBbJ2NsaWVudFgnLCAnY2xpZW50WSddO1xuICAvKipcbiAgICogY3JlYXRlIG5ldyBpbnB1dCB0eXBlIG1hbmFnZXJcbiAgICogQHBhcmFtIHtNYW5hZ2VyfSBtYW5hZ2VyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gICAqIEByZXR1cm5zIHtJbnB1dH1cbiAgICogQGNvbnN0cnVjdG9yXG4gICAqL1xuXG4gIGZ1bmN0aW9uIElucHV0KG1hbmFnZXIsIGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMubWFuYWdlciA9IG1hbmFnZXI7XG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgIHRoaXMuZWxlbWVudCA9IG1hbmFnZXIuZWxlbWVudDtcbiAgICB0aGlzLnRhcmdldCA9IG1hbmFnZXIub3B0aW9ucy5pbnB1dFRhcmdldDsgLy8gc21hbGxlciB3cmFwcGVyIGFyb3VuZCB0aGUgaGFuZGxlciwgZm9yIHRoZSBzY29wZSBhbmQgdGhlIGVuYWJsZWQgc3RhdGUgb2YgdGhlIG1hbmFnZXIsXG4gICAgLy8gc28gd2hlbiBkaXNhYmxlZCB0aGUgaW5wdXQgZXZlbnRzIGFyZSBjb21wbGV0ZWx5IGJ5cGFzc2VkLlxuXG4gICAgdGhpcy5kb21IYW5kbGVyID0gZnVuY3Rpb24gKGV2KSB7XG4gICAgICBpZiAoYm9vbE9yRm4obWFuYWdlci5vcHRpb25zLmVuYWJsZSwgW21hbmFnZXJdKSkge1xuICAgICAgICBzZWxmLmhhbmRsZXIoZXYpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLmluaXQoKTtcbiAgfVxuXG4gIElucHV0LnByb3RvdHlwZSA9IHtcbiAgICAvKipcbiAgICAgKiBzaG91bGQgaGFuZGxlIHRoZSBpbnB1dEV2ZW50IGRhdGEgYW5kIHRyaWdnZXIgdGhlIGNhbGxiYWNrXG4gICAgICogQHZpcnR1YWxcbiAgICAgKi9cbiAgICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKCkge30sXG5cbiAgICAvKipcbiAgICAgKiBiaW5kIHRoZSBldmVudHNcbiAgICAgKi9cbiAgICBpbml0OiBmdW5jdGlvbiBpbml0KCkge1xuICAgICAgdGhpcy5ldkVsICYmIGFkZEV2ZW50TGlzdGVuZXJzKHRoaXMuZWxlbWVudCwgdGhpcy5ldkVsLCB0aGlzLmRvbUhhbmRsZXIpO1xuICAgICAgdGhpcy5ldlRhcmdldCAmJiBhZGRFdmVudExpc3RlbmVycyh0aGlzLnRhcmdldCwgdGhpcy5ldlRhcmdldCwgdGhpcy5kb21IYW5kbGVyKTtcbiAgICAgIHRoaXMuZXZXaW4gJiYgYWRkRXZlbnRMaXN0ZW5lcnMoZ2V0V2luZG93Rm9yRWxlbWVudCh0aGlzLmVsZW1lbnQpLCB0aGlzLmV2V2luLCB0aGlzLmRvbUhhbmRsZXIpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiB1bmJpbmQgdGhlIGV2ZW50c1xuICAgICAqL1xuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICB0aGlzLmV2RWwgJiYgcmVtb3ZlRXZlbnRMaXN0ZW5lcnModGhpcy5lbGVtZW50LCB0aGlzLmV2RWwsIHRoaXMuZG9tSGFuZGxlcik7XG4gICAgICB0aGlzLmV2VGFyZ2V0ICYmIHJlbW92ZUV2ZW50TGlzdGVuZXJzKHRoaXMudGFyZ2V0LCB0aGlzLmV2VGFyZ2V0LCB0aGlzLmRvbUhhbmRsZXIpO1xuICAgICAgdGhpcy5ldldpbiAmJiByZW1vdmVFdmVudExpc3RlbmVycyhnZXRXaW5kb3dGb3JFbGVtZW50KHRoaXMuZWxlbWVudCksIHRoaXMuZXZXaW4sIHRoaXMuZG9tSGFuZGxlcik7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogY3JlYXRlIG5ldyBpbnB1dCB0eXBlIG1hbmFnZXJcbiAgICogY2FsbGVkIGJ5IHRoZSBNYW5hZ2VyIGNvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSB7SGFtbWVyfSBtYW5hZ2VyXG4gICAqIEByZXR1cm5zIHtJbnB1dH1cbiAgICovXG5cbiAgZnVuY3Rpb24gY3JlYXRlSW5wdXRJbnN0YW5jZShtYW5hZ2VyKSB7XG4gICAgdmFyIFR5cGU7XG4gICAgdmFyIGlucHV0Q2xhc3MgPSBtYW5hZ2VyLm9wdGlvbnMuaW5wdXRDbGFzcztcblxuICAgIGlmIChpbnB1dENsYXNzKSB7XG4gICAgICBUeXBlID0gaW5wdXRDbGFzcztcbiAgICB9IGVsc2UgaWYgKFNVUFBPUlRfUE9JTlRFUl9FVkVOVFMpIHtcbiAgICAgIFR5cGUgPSBQb2ludGVyRXZlbnRJbnB1dDtcbiAgICB9IGVsc2UgaWYgKFNVUFBPUlRfT05MWV9UT1VDSCkge1xuICAgICAgVHlwZSA9IFRvdWNoSW5wdXQ7XG4gICAgfSBlbHNlIGlmICghU1VQUE9SVF9UT1VDSCkge1xuICAgICAgVHlwZSA9IE1vdXNlSW5wdXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIFR5cGUgPSBUb3VjaE1vdXNlSW5wdXQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBUeXBlKG1hbmFnZXIsIGlucHV0SGFuZGxlcik7XG4gIH1cbiAgLyoqXG4gICAqIGhhbmRsZSBpbnB1dCBldmVudHNcbiAgICogQHBhcmFtIHtNYW5hZ2VyfSBtYW5hZ2VyXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBldmVudFR5cGVcbiAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gaW5wdXRIYW5kbGVyKG1hbmFnZXIsIGV2ZW50VHlwZSwgaW5wdXQpIHtcbiAgICB2YXIgcG9pbnRlcnNMZW4gPSBpbnB1dC5wb2ludGVycy5sZW5ndGg7XG4gICAgdmFyIGNoYW5nZWRQb2ludGVyc0xlbiA9IGlucHV0LmNoYW5nZWRQb2ludGVycy5sZW5ndGg7XG4gICAgdmFyIGlzRmlyc3QgPSBldmVudFR5cGUgJiBJTlBVVF9TVEFSVCAmJiBwb2ludGVyc0xlbiAtIGNoYW5nZWRQb2ludGVyc0xlbiA9PT0gMDtcbiAgICB2YXIgaXNGaW5hbCA9IGV2ZW50VHlwZSAmIChJTlBVVF9FTkQgfCBJTlBVVF9DQU5DRUwpICYmIHBvaW50ZXJzTGVuIC0gY2hhbmdlZFBvaW50ZXJzTGVuID09PSAwO1xuICAgIGlucHV0LmlzRmlyc3QgPSAhIWlzRmlyc3Q7XG4gICAgaW5wdXQuaXNGaW5hbCA9ICEhaXNGaW5hbDtcblxuICAgIGlmIChpc0ZpcnN0KSB7XG4gICAgICBtYW5hZ2VyLnNlc3Npb24gPSB7fTtcbiAgICB9IC8vIHNvdXJjZSBldmVudCBpcyB0aGUgbm9ybWFsaXplZCB2YWx1ZSBvZiB0aGUgZG9tRXZlbnRzXG4gICAgLy8gbGlrZSAndG91Y2hzdGFydCwgbW91c2V1cCwgcG9pbnRlcmRvd24nXG5cblxuICAgIGlucHV0LmV2ZW50VHlwZSA9IGV2ZW50VHlwZTsgLy8gY29tcHV0ZSBzY2FsZSwgcm90YXRpb24gZXRjXG5cbiAgICBjb21wdXRlSW5wdXREYXRhKG1hbmFnZXIsIGlucHV0KTsgLy8gZW1pdCBzZWNyZXQgZXZlbnRcblxuICAgIG1hbmFnZXIuZW1pdCgnaGFtbWVyLmlucHV0JywgaW5wdXQpO1xuICAgIG1hbmFnZXIucmVjb2duaXplKGlucHV0KTtcbiAgICBtYW5hZ2VyLnNlc3Npb24ucHJldklucHV0ID0gaW5wdXQ7XG4gIH1cbiAgLyoqXG4gICAqIGV4dGVuZCB0aGUgZGF0YSB3aXRoIHNvbWUgdXNhYmxlIHByb3BlcnRpZXMgbGlrZSBzY2FsZSwgcm90YXRlLCB2ZWxvY2l0eSBldGNcbiAgICogQHBhcmFtIHtPYmplY3R9IG1hbmFnZXJcbiAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gY29tcHV0ZUlucHV0RGF0YShtYW5hZ2VyLCBpbnB1dCkge1xuICAgIHZhciBzZXNzaW9uID0gbWFuYWdlci5zZXNzaW9uO1xuICAgIHZhciBwb2ludGVycyA9IGlucHV0LnBvaW50ZXJzO1xuICAgIHZhciBwb2ludGVyc0xlbmd0aCA9IHBvaW50ZXJzLmxlbmd0aDsgLy8gc3RvcmUgdGhlIGZpcnN0IGlucHV0IHRvIGNhbGN1bGF0ZSB0aGUgZGlzdGFuY2UgYW5kIGRpcmVjdGlvblxuXG4gICAgaWYgKCFzZXNzaW9uLmZpcnN0SW5wdXQpIHtcbiAgICAgIHNlc3Npb24uZmlyc3RJbnB1dCA9IHNpbXBsZUNsb25lSW5wdXREYXRhKGlucHV0KTtcbiAgICB9IC8vIHRvIGNvbXB1dGUgc2NhbGUgYW5kIHJvdGF0aW9uIHdlIG5lZWQgdG8gc3RvcmUgdGhlIG11bHRpcGxlIHRvdWNoZXNcblxuXG4gICAgaWYgKHBvaW50ZXJzTGVuZ3RoID4gMSAmJiAhc2Vzc2lvbi5maXJzdE11bHRpcGxlKSB7XG4gICAgICBzZXNzaW9uLmZpcnN0TXVsdGlwbGUgPSBzaW1wbGVDbG9uZUlucHV0RGF0YShpbnB1dCk7XG4gICAgfSBlbHNlIGlmIChwb2ludGVyc0xlbmd0aCA9PT0gMSkge1xuICAgICAgc2Vzc2lvbi5maXJzdE11bHRpcGxlID0gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIGZpcnN0SW5wdXQgPSBzZXNzaW9uLmZpcnN0SW5wdXQ7XG4gICAgdmFyIGZpcnN0TXVsdGlwbGUgPSBzZXNzaW9uLmZpcnN0TXVsdGlwbGU7XG4gICAgdmFyIG9mZnNldENlbnRlciA9IGZpcnN0TXVsdGlwbGUgPyBmaXJzdE11bHRpcGxlLmNlbnRlciA6IGZpcnN0SW5wdXQuY2VudGVyO1xuICAgIHZhciBjZW50ZXIgPSBpbnB1dC5jZW50ZXIgPSBnZXRDZW50ZXIocG9pbnRlcnMpO1xuICAgIGlucHV0LnRpbWVTdGFtcCA9IG5vdygpO1xuICAgIGlucHV0LmRlbHRhVGltZSA9IGlucHV0LnRpbWVTdGFtcCAtIGZpcnN0SW5wdXQudGltZVN0YW1wO1xuICAgIGlucHV0LmFuZ2xlID0gZ2V0QW5nbGUob2Zmc2V0Q2VudGVyLCBjZW50ZXIpO1xuICAgIGlucHV0LmRpc3RhbmNlID0gZ2V0RGlzdGFuY2Uob2Zmc2V0Q2VudGVyLCBjZW50ZXIpO1xuICAgIGNvbXB1dGVEZWx0YVhZKHNlc3Npb24sIGlucHV0KTtcbiAgICBpbnB1dC5vZmZzZXREaXJlY3Rpb24gPSBnZXREaXJlY3Rpb24oaW5wdXQuZGVsdGFYLCBpbnB1dC5kZWx0YVkpO1xuICAgIHZhciBvdmVyYWxsVmVsb2NpdHkgPSBnZXRWZWxvY2l0eShpbnB1dC5kZWx0YVRpbWUsIGlucHV0LmRlbHRhWCwgaW5wdXQuZGVsdGFZKTtcbiAgICBpbnB1dC5vdmVyYWxsVmVsb2NpdHlYID0gb3ZlcmFsbFZlbG9jaXR5Lng7XG4gICAgaW5wdXQub3ZlcmFsbFZlbG9jaXR5WSA9IG92ZXJhbGxWZWxvY2l0eS55O1xuICAgIGlucHV0Lm92ZXJhbGxWZWxvY2l0eSA9IGFicyhvdmVyYWxsVmVsb2NpdHkueCkgPiBhYnMob3ZlcmFsbFZlbG9jaXR5LnkpID8gb3ZlcmFsbFZlbG9jaXR5LnggOiBvdmVyYWxsVmVsb2NpdHkueTtcbiAgICBpbnB1dC5zY2FsZSA9IGZpcnN0TXVsdGlwbGUgPyBnZXRTY2FsZShmaXJzdE11bHRpcGxlLnBvaW50ZXJzLCBwb2ludGVycykgOiAxO1xuICAgIGlucHV0LnJvdGF0aW9uID0gZmlyc3RNdWx0aXBsZSA/IGdldFJvdGF0aW9uKGZpcnN0TXVsdGlwbGUucG9pbnRlcnMsIHBvaW50ZXJzKSA6IDA7XG4gICAgaW5wdXQubWF4UG9pbnRlcnMgPSAhc2Vzc2lvbi5wcmV2SW5wdXQgPyBpbnB1dC5wb2ludGVycy5sZW5ndGggOiBpbnB1dC5wb2ludGVycy5sZW5ndGggPiBzZXNzaW9uLnByZXZJbnB1dC5tYXhQb2ludGVycyA/IGlucHV0LnBvaW50ZXJzLmxlbmd0aCA6IHNlc3Npb24ucHJldklucHV0Lm1heFBvaW50ZXJzO1xuICAgIGNvbXB1dGVJbnRlcnZhbElucHV0RGF0YShzZXNzaW9uLCBpbnB1dCk7IC8vIGZpbmQgdGhlIGNvcnJlY3QgdGFyZ2V0XG5cbiAgICB2YXIgdGFyZ2V0ID0gbWFuYWdlci5lbGVtZW50O1xuXG4gICAgaWYgKGhhc1BhcmVudChpbnB1dC5zcmNFdmVudC50YXJnZXQsIHRhcmdldCkpIHtcbiAgICAgIHRhcmdldCA9IGlucHV0LnNyY0V2ZW50LnRhcmdldDtcbiAgICB9XG5cbiAgICBpbnB1dC50YXJnZXQgPSB0YXJnZXQ7XG4gIH1cblxuICBmdW5jdGlvbiBjb21wdXRlRGVsdGFYWShzZXNzaW9uLCBpbnB1dCkge1xuICAgIHZhciBjZW50ZXIgPSBpbnB1dC5jZW50ZXI7XG4gICAgdmFyIG9mZnNldCA9IHNlc3Npb24ub2Zmc2V0RGVsdGEgfHwge307XG4gICAgdmFyIHByZXZEZWx0YSA9IHNlc3Npb24ucHJldkRlbHRhIHx8IHt9O1xuICAgIHZhciBwcmV2SW5wdXQgPSBzZXNzaW9uLnByZXZJbnB1dCB8fCB7fTtcblxuICAgIGlmIChpbnB1dC5ldmVudFR5cGUgPT09IElOUFVUX1NUQVJUIHx8IHByZXZJbnB1dC5ldmVudFR5cGUgPT09IElOUFVUX0VORCkge1xuICAgICAgcHJldkRlbHRhID0gc2Vzc2lvbi5wcmV2RGVsdGEgPSB7XG4gICAgICAgIHg6IHByZXZJbnB1dC5kZWx0YVggfHwgMCxcbiAgICAgICAgeTogcHJldklucHV0LmRlbHRhWSB8fCAwXG4gICAgICB9O1xuICAgICAgb2Zmc2V0ID0gc2Vzc2lvbi5vZmZzZXREZWx0YSA9IHtcbiAgICAgICAgeDogY2VudGVyLngsXG4gICAgICAgIHk6IGNlbnRlci55XG4gICAgICB9O1xuICAgIH1cblxuICAgIGlucHV0LmRlbHRhWCA9IHByZXZEZWx0YS54ICsgKGNlbnRlci54IC0gb2Zmc2V0LngpO1xuICAgIGlucHV0LmRlbHRhWSA9IHByZXZEZWx0YS55ICsgKGNlbnRlci55IC0gb2Zmc2V0LnkpO1xuICB9XG4gIC8qKlxuICAgKiB2ZWxvY2l0eSBpcyBjYWxjdWxhdGVkIGV2ZXJ5IHggbXNcbiAgICogQHBhcmFtIHtPYmplY3R9IHNlc3Npb25cbiAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gY29tcHV0ZUludGVydmFsSW5wdXREYXRhKHNlc3Npb24sIGlucHV0KSB7XG4gICAgdmFyIGxhc3QgPSBzZXNzaW9uLmxhc3RJbnRlcnZhbCB8fCBpbnB1dCxcbiAgICAgICAgZGVsdGFUaW1lID0gaW5wdXQudGltZVN0YW1wIC0gbGFzdC50aW1lU3RhbXAsXG4gICAgICAgIHZlbG9jaXR5LFxuICAgICAgICB2ZWxvY2l0eVgsXG4gICAgICAgIHZlbG9jaXR5WSxcbiAgICAgICAgZGlyZWN0aW9uO1xuXG4gICAgaWYgKGlucHV0LmV2ZW50VHlwZSAhPSBJTlBVVF9DQU5DRUwgJiYgKGRlbHRhVGltZSA+IENPTVBVVEVfSU5URVJWQUwgfHwgbGFzdC52ZWxvY2l0eSA9PT0gdW5kZWZpbmVkKSkge1xuICAgICAgdmFyIGRlbHRhWCA9IGlucHV0LmRlbHRhWCAtIGxhc3QuZGVsdGFYO1xuICAgICAgdmFyIGRlbHRhWSA9IGlucHV0LmRlbHRhWSAtIGxhc3QuZGVsdGFZO1xuICAgICAgdmFyIHYgPSBnZXRWZWxvY2l0eShkZWx0YVRpbWUsIGRlbHRhWCwgZGVsdGFZKTtcbiAgICAgIHZlbG9jaXR5WCA9IHYueDtcbiAgICAgIHZlbG9jaXR5WSA9IHYueTtcbiAgICAgIHZlbG9jaXR5ID0gYWJzKHYueCkgPiBhYnModi55KSA/IHYueCA6IHYueTtcbiAgICAgIGRpcmVjdGlvbiA9IGdldERpcmVjdGlvbihkZWx0YVgsIGRlbHRhWSk7XG4gICAgICBzZXNzaW9uLmxhc3RJbnRlcnZhbCA9IGlucHV0O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB1c2UgbGF0ZXN0IHZlbG9jaXR5IGluZm8gaWYgaXQgZG9lc24ndCBvdmVydGFrZSBhIG1pbmltdW0gcGVyaW9kXG4gICAgICB2ZWxvY2l0eSA9IGxhc3QudmVsb2NpdHk7XG4gICAgICB2ZWxvY2l0eVggPSBsYXN0LnZlbG9jaXR5WDtcbiAgICAgIHZlbG9jaXR5WSA9IGxhc3QudmVsb2NpdHlZO1xuICAgICAgZGlyZWN0aW9uID0gbGFzdC5kaXJlY3Rpb247XG4gICAgfVxuXG4gICAgaW5wdXQudmVsb2NpdHkgPSB2ZWxvY2l0eTtcbiAgICBpbnB1dC52ZWxvY2l0eVggPSB2ZWxvY2l0eVg7XG4gICAgaW5wdXQudmVsb2NpdHlZID0gdmVsb2NpdHlZO1xuICAgIGlucHV0LmRpcmVjdGlvbiA9IGRpcmVjdGlvbjtcbiAgfVxuICAvKipcbiAgICogY3JlYXRlIGEgc2ltcGxlIGNsb25lIGZyb20gdGhlIGlucHV0IHVzZWQgZm9yIHN0b3JhZ2Ugb2YgZmlyc3RJbnB1dCBhbmQgZmlyc3RNdWx0aXBsZVxuICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXRcbiAgICogQHJldHVybnMge09iamVjdH0gY2xvbmVkSW5wdXREYXRhXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gc2ltcGxlQ2xvbmVJbnB1dERhdGEoaW5wdXQpIHtcbiAgICAvLyBtYWtlIGEgc2ltcGxlIGNvcHkgb2YgdGhlIHBvaW50ZXJzIGJlY2F1c2Ugd2Ugd2lsbCBnZXQgYSByZWZlcmVuY2UgaWYgd2UgZG9uJ3RcbiAgICAvLyB3ZSBvbmx5IG5lZWQgY2xpZW50WFkgZm9yIHRoZSBjYWxjdWxhdGlvbnNcbiAgICB2YXIgcG9pbnRlcnMgPSBbXTtcbiAgICB2YXIgaSA9IDA7XG5cbiAgICB3aGlsZSAoaSA8IGlucHV0LnBvaW50ZXJzLmxlbmd0aCkge1xuICAgICAgcG9pbnRlcnNbaV0gPSB7XG4gICAgICAgIGNsaWVudFg6IHJvdW5kKGlucHV0LnBvaW50ZXJzW2ldLmNsaWVudFgpLFxuICAgICAgICBjbGllbnRZOiByb3VuZChpbnB1dC5wb2ludGVyc1tpXS5jbGllbnRZKVxuICAgICAgfTtcbiAgICAgIGkrKztcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdGltZVN0YW1wOiBub3coKSxcbiAgICAgIHBvaW50ZXJzOiBwb2ludGVycyxcbiAgICAgIGNlbnRlcjogZ2V0Q2VudGVyKHBvaW50ZXJzKSxcbiAgICAgIGRlbHRhWDogaW5wdXQuZGVsdGFYLFxuICAgICAgZGVsdGFZOiBpbnB1dC5kZWx0YVlcbiAgICB9O1xuICB9XG4gIC8qKlxuICAgKiBnZXQgdGhlIGNlbnRlciBvZiBhbGwgdGhlIHBvaW50ZXJzXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBvaW50ZXJzXG4gICAqIEByZXR1cm4ge09iamVjdH0gY2VudGVyIGNvbnRhaW5zIGB4YCBhbmQgYHlgIHByb3BlcnRpZXNcbiAgICovXG5cblxuICBmdW5jdGlvbiBnZXRDZW50ZXIocG9pbnRlcnMpIHtcbiAgICB2YXIgcG9pbnRlcnNMZW5ndGggPSBwb2ludGVycy5sZW5ndGg7IC8vIG5vIG5lZWQgdG8gbG9vcCB3aGVuIG9ubHkgb25lIHRvdWNoXG5cbiAgICBpZiAocG9pbnRlcnNMZW5ndGggPT09IDEpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHg6IHJvdW5kKHBvaW50ZXJzWzBdLmNsaWVudFgpLFxuICAgICAgICB5OiByb3VuZChwb2ludGVyc1swXS5jbGllbnRZKVxuICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgeCA9IDAsXG4gICAgICAgIHkgPSAwLFxuICAgICAgICBpID0gMDtcblxuICAgIHdoaWxlIChpIDwgcG9pbnRlcnNMZW5ndGgpIHtcbiAgICAgIHggKz0gcG9pbnRlcnNbaV0uY2xpZW50WDtcbiAgICAgIHkgKz0gcG9pbnRlcnNbaV0uY2xpZW50WTtcbiAgICAgIGkrKztcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgeDogcm91bmQoeCAvIHBvaW50ZXJzTGVuZ3RoKSxcbiAgICAgIHk6IHJvdW5kKHkgLyBwb2ludGVyc0xlbmd0aClcbiAgICB9O1xuICB9XG4gIC8qKlxuICAgKiBjYWxjdWxhdGUgdGhlIHZlbG9jaXR5IGJldHdlZW4gdHdvIHBvaW50cy4gdW5pdCBpcyBpbiBweCBwZXIgbXMuXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBkZWx0YVRpbWVcbiAgICogQHBhcmFtIHtOdW1iZXJ9IHhcbiAgICogQHBhcmFtIHtOdW1iZXJ9IHlcbiAgICogQHJldHVybiB7T2JqZWN0fSB2ZWxvY2l0eSBgeGAgYW5kIGB5YFxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGdldFZlbG9jaXR5KGRlbHRhVGltZSwgeCwgeSkge1xuICAgIHJldHVybiB7XG4gICAgICB4OiB4IC8gZGVsdGFUaW1lIHx8IDAsXG4gICAgICB5OiB5IC8gZGVsdGFUaW1lIHx8IDBcbiAgICB9O1xuICB9XG4gIC8qKlxuICAgKiBnZXQgdGhlIGRpcmVjdGlvbiBiZXR3ZWVuIHR3byBwb2ludHNcbiAgICogQHBhcmFtIHtOdW1iZXJ9IHhcbiAgICogQHBhcmFtIHtOdW1iZXJ9IHlcbiAgICogQHJldHVybiB7TnVtYmVyfSBkaXJlY3Rpb25cbiAgICovXG5cblxuICBmdW5jdGlvbiBnZXREaXJlY3Rpb24oeCwgeSkge1xuICAgIGlmICh4ID09PSB5KSB7XG4gICAgICByZXR1cm4gRElSRUNUSU9OX05PTkU7XG4gICAgfVxuXG4gICAgaWYgKGFicyh4KSA+PSBhYnMoeSkpIHtcbiAgICAgIHJldHVybiB4IDwgMCA/IERJUkVDVElPTl9MRUZUIDogRElSRUNUSU9OX1JJR0hUO1xuICAgIH1cblxuICAgIHJldHVybiB5IDwgMCA/IERJUkVDVElPTl9VUCA6IERJUkVDVElPTl9ET1dOO1xuICB9XG4gIC8qKlxuICAgKiBjYWxjdWxhdGUgdGhlIGFic29sdXRlIGRpc3RhbmNlIGJldHdlZW4gdHdvIHBvaW50c1xuICAgKiBAcGFyYW0ge09iamVjdH0gcDEge3gsIHl9XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwMiB7eCwgeX1cbiAgICogQHBhcmFtIHtBcnJheX0gW3Byb3BzXSBjb250YWluaW5nIHggYW5kIHkga2V5c1xuICAgKiBAcmV0dXJuIHtOdW1iZXJ9IGRpc3RhbmNlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gZ2V0RGlzdGFuY2UocDEsIHAyLCBwcm9wcykge1xuICAgIGlmICghcHJvcHMpIHtcbiAgICAgIHByb3BzID0gUFJPUFNfWFk7XG4gICAgfVxuXG4gICAgdmFyIHggPSBwMltwcm9wc1swXV0gLSBwMVtwcm9wc1swXV0sXG4gICAgICAgIHkgPSBwMltwcm9wc1sxXV0gLSBwMVtwcm9wc1sxXV07XG4gICAgcmV0dXJuIE1hdGguc3FydCh4ICogeCArIHkgKiB5KTtcbiAgfVxuICAvKipcbiAgICogY2FsY3VsYXRlIHRoZSBhbmdsZSBiZXR3ZWVuIHR3byBjb29yZGluYXRlc1xuICAgKiBAcGFyYW0ge09iamVjdH0gcDFcbiAgICogQHBhcmFtIHtPYmplY3R9IHAyXG4gICAqIEBwYXJhbSB7QXJyYXl9IFtwcm9wc10gY29udGFpbmluZyB4IGFuZCB5IGtleXNcbiAgICogQHJldHVybiB7TnVtYmVyfSBhbmdsZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGdldEFuZ2xlKHAxLCBwMiwgcHJvcHMpIHtcbiAgICBpZiAoIXByb3BzKSB7XG4gICAgICBwcm9wcyA9IFBST1BTX1hZO1xuICAgIH1cblxuICAgIHZhciB4ID0gcDJbcHJvcHNbMF1dIC0gcDFbcHJvcHNbMF1dLFxuICAgICAgICB5ID0gcDJbcHJvcHNbMV1dIC0gcDFbcHJvcHNbMV1dO1xuICAgIHJldHVybiBNYXRoLmF0YW4yKHksIHgpICogMTgwIC8gTWF0aC5QSTtcbiAgfVxuICAvKipcbiAgICogY2FsY3VsYXRlIHRoZSByb3RhdGlvbiBkZWdyZWVzIGJldHdlZW4gdHdvIHBvaW50ZXJzZXRzXG4gICAqIEBwYXJhbSB7QXJyYXl9IHN0YXJ0IGFycmF5IG9mIHBvaW50ZXJzXG4gICAqIEBwYXJhbSB7QXJyYXl9IGVuZCBhcnJheSBvZiBwb2ludGVyc1xuICAgKiBAcmV0dXJuIHtOdW1iZXJ9IHJvdGF0aW9uXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gZ2V0Um90YXRpb24oc3RhcnQsIGVuZCkge1xuICAgIHJldHVybiBnZXRBbmdsZShlbmRbMV0sIGVuZFswXSwgUFJPUFNfQ0xJRU5UX1hZKSArIGdldEFuZ2xlKHN0YXJ0WzFdLCBzdGFydFswXSwgUFJPUFNfQ0xJRU5UX1hZKTtcbiAgfVxuICAvKipcbiAgICogY2FsY3VsYXRlIHRoZSBzY2FsZSBmYWN0b3IgYmV0d2VlbiB0d28gcG9pbnRlcnNldHNcbiAgICogbm8gc2NhbGUgaXMgMSwgYW5kIGdvZXMgZG93biB0byAwIHdoZW4gcGluY2hlZCB0b2dldGhlciwgYW5kIGJpZ2dlciB3aGVuIHBpbmNoZWQgb3V0XG4gICAqIEBwYXJhbSB7QXJyYXl9IHN0YXJ0IGFycmF5IG9mIHBvaW50ZXJzXG4gICAqIEBwYXJhbSB7QXJyYXl9IGVuZCBhcnJheSBvZiBwb2ludGVyc1xuICAgKiBAcmV0dXJuIHtOdW1iZXJ9IHNjYWxlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gZ2V0U2NhbGUoc3RhcnQsIGVuZCkge1xuICAgIHJldHVybiBnZXREaXN0YW5jZShlbmRbMF0sIGVuZFsxXSwgUFJPUFNfQ0xJRU5UX1hZKSAvIGdldERpc3RhbmNlKHN0YXJ0WzBdLCBzdGFydFsxXSwgUFJPUFNfQ0xJRU5UX1hZKTtcbiAgfVxuXG4gIHZhciBNT1VTRV9JTlBVVF9NQVAgPSB7XG4gICAgbW91c2Vkb3duOiBJTlBVVF9TVEFSVCxcbiAgICBtb3VzZW1vdmU6IElOUFVUX01PVkUsXG4gICAgbW91c2V1cDogSU5QVVRfRU5EXG4gIH07XG4gIHZhciBNT1VTRV9FTEVNRU5UX0VWRU5UUyA9ICdtb3VzZWRvd24nO1xuICB2YXIgTU9VU0VfV0lORE9XX0VWRU5UUyA9ICdtb3VzZW1vdmUgbW91c2V1cCc7XG4gIC8qKlxuICAgKiBNb3VzZSBldmVudHMgaW5wdXRcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBleHRlbmRzIElucHV0XG4gICAqL1xuXG4gIGZ1bmN0aW9uIE1vdXNlSW5wdXQoKSB7XG4gICAgdGhpcy5ldkVsID0gTU9VU0VfRUxFTUVOVF9FVkVOVFM7XG4gICAgdGhpcy5ldldpbiA9IE1PVVNFX1dJTkRPV19FVkVOVFM7XG4gICAgdGhpcy5wcmVzc2VkID0gZmFsc2U7IC8vIG1vdXNlZG93biBzdGF0ZVxuXG4gICAgSW5wdXQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIGluaGVyaXQoTW91c2VJbnB1dCwgSW5wdXQsIHtcbiAgICAvKipcbiAgICAgKiBoYW5kbGUgbW91c2UgZXZlbnRzXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGV2XG4gICAgICovXG4gICAgaGFuZGxlcjogZnVuY3Rpb24gTUVoYW5kbGVyKGV2KSB7XG4gICAgICB2YXIgZXZlbnRUeXBlID0gTU9VU0VfSU5QVVRfTUFQW2V2LnR5cGVdOyAvLyBvbiBzdGFydCB3ZSB3YW50IHRvIGhhdmUgdGhlIGxlZnQgbW91c2UgYnV0dG9uIGRvd25cblxuICAgICAgaWYgKGV2ZW50VHlwZSAmIElOUFVUX1NUQVJUICYmIGV2LmJ1dHRvbiA9PT0gMCkge1xuICAgICAgICB0aGlzLnByZXNzZWQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnRUeXBlICYgSU5QVVRfTU9WRSAmJiBldi53aGljaCAhPT0gMSkge1xuICAgICAgICBldmVudFR5cGUgPSBJTlBVVF9FTkQ7XG4gICAgICB9IC8vIG1vdXNlIG11c3QgYmUgZG93blxuXG5cbiAgICAgIGlmICghdGhpcy5wcmVzc2VkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50VHlwZSAmIElOUFVUX0VORCkge1xuICAgICAgICB0aGlzLnByZXNzZWQgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5jYWxsYmFjayh0aGlzLm1hbmFnZXIsIGV2ZW50VHlwZSwge1xuICAgICAgICBwb2ludGVyczogW2V2XSxcbiAgICAgICAgY2hhbmdlZFBvaW50ZXJzOiBbZXZdLFxuICAgICAgICBwb2ludGVyVHlwZTogSU5QVVRfVFlQRV9NT1VTRSxcbiAgICAgICAgc3JjRXZlbnQ6IGV2XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuICB2YXIgUE9JTlRFUl9JTlBVVF9NQVAgPSB7XG4gICAgcG9pbnRlcmRvd246IElOUFVUX1NUQVJULFxuICAgIHBvaW50ZXJtb3ZlOiBJTlBVVF9NT1ZFLFxuICAgIHBvaW50ZXJ1cDogSU5QVVRfRU5ELFxuICAgIHBvaW50ZXJjYW5jZWw6IElOUFVUX0NBTkNFTCxcbiAgICBwb2ludGVyb3V0OiBJTlBVVF9DQU5DRUxcbiAgfTsgLy8gaW4gSUUxMCB0aGUgcG9pbnRlciB0eXBlcyBpcyBkZWZpbmVkIGFzIGFuIGVudW1cblxuICB2YXIgSUUxMF9QT0lOVEVSX1RZUEVfRU5VTSA9IHtcbiAgICAyOiBJTlBVVF9UWVBFX1RPVUNILFxuICAgIDM6IElOUFVUX1RZUEVfUEVOLFxuICAgIDQ6IElOUFVUX1RZUEVfTU9VU0UsXG4gICAgNTogSU5QVVRfVFlQRV9LSU5FQ1QgLy8gc2VlIGh0dHBzOi8vdHdpdHRlci5jb20vamFjb2Jyb3NzaS9zdGF0dXMvNDgwNTk2NDM4NDg5ODkwODE2XG5cbiAgfTtcbiAgdmFyIFBPSU5URVJfRUxFTUVOVF9FVkVOVFMgPSAncG9pbnRlcmRvd24nO1xuICB2YXIgUE9JTlRFUl9XSU5ET1dfRVZFTlRTID0gJ3BvaW50ZXJtb3ZlIHBvaW50ZXJ1cCBwb2ludGVyY2FuY2VsJzsgLy8gSUUxMCBoYXMgcHJlZml4ZWQgc3VwcG9ydCwgYW5kIGNhc2Utc2Vuc2l0aXZlXG5cbiAgaWYgKHdpbmRvdy5NU1BvaW50ZXJFdmVudCAmJiAhd2luZG93LlBvaW50ZXJFdmVudCkge1xuICAgIFBPSU5URVJfRUxFTUVOVF9FVkVOVFMgPSAnTVNQb2ludGVyRG93bic7XG4gICAgUE9JTlRFUl9XSU5ET1dfRVZFTlRTID0gJ01TUG9pbnRlck1vdmUgTVNQb2ludGVyVXAgTVNQb2ludGVyQ2FuY2VsJztcbiAgfVxuICAvKipcbiAgICogUG9pbnRlciBldmVudHMgaW5wdXRcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBleHRlbmRzIElucHV0XG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gUG9pbnRlckV2ZW50SW5wdXQoKSB7XG4gICAgdGhpcy5ldkVsID0gUE9JTlRFUl9FTEVNRU5UX0VWRU5UUztcbiAgICB0aGlzLmV2V2luID0gUE9JTlRFUl9XSU5ET1dfRVZFTlRTO1xuICAgIElucHV0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgdGhpcy5zdG9yZSA9IHRoaXMubWFuYWdlci5zZXNzaW9uLnBvaW50ZXJFdmVudHMgPSBbXTtcbiAgfVxuXG4gIGluaGVyaXQoUG9pbnRlckV2ZW50SW5wdXQsIElucHV0LCB7XG4gICAgLyoqXG4gICAgICogaGFuZGxlIG1vdXNlIGV2ZW50c1xuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBldlxuICAgICAqL1xuICAgIGhhbmRsZXI6IGZ1bmN0aW9uIFBFaGFuZGxlcihldikge1xuICAgICAgdmFyIHN0b3JlID0gdGhpcy5zdG9yZTtcbiAgICAgIHZhciByZW1vdmVQb2ludGVyID0gZmFsc2U7XG4gICAgICB2YXIgZXZlbnRUeXBlTm9ybWFsaXplZCA9IGV2LnR5cGUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKCdtcycsICcnKTtcbiAgICAgIHZhciBldmVudFR5cGUgPSBQT0lOVEVSX0lOUFVUX01BUFtldmVudFR5cGVOb3JtYWxpemVkXTtcbiAgICAgIHZhciBwb2ludGVyVHlwZSA9IElFMTBfUE9JTlRFUl9UWVBFX0VOVU1bZXYucG9pbnRlclR5cGVdIHx8IGV2LnBvaW50ZXJUeXBlO1xuICAgICAgdmFyIGlzVG91Y2ggPSBwb2ludGVyVHlwZSA9PSBJTlBVVF9UWVBFX1RPVUNIOyAvLyBnZXQgaW5kZXggb2YgdGhlIGV2ZW50IGluIHRoZSBzdG9yZVxuXG4gICAgICB2YXIgc3RvcmVJbmRleCA9IGluQXJyYXkoc3RvcmUsIGV2LnBvaW50ZXJJZCwgJ3BvaW50ZXJJZCcpOyAvLyBzdGFydCBhbmQgbW91c2UgbXVzdCBiZSBkb3duXG5cbiAgICAgIGlmIChldmVudFR5cGUgJiBJTlBVVF9TVEFSVCAmJiAoZXYuYnV0dG9uID09PSAwIHx8IGlzVG91Y2gpKSB7XG4gICAgICAgIGlmIChzdG9yZUluZGV4IDwgMCkge1xuICAgICAgICAgIHN0b3JlLnB1c2goZXYpO1xuICAgICAgICAgIHN0b3JlSW5kZXggPSBzdG9yZS5sZW5ndGggLSAxO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSAmIChJTlBVVF9FTkQgfCBJTlBVVF9DQU5DRUwpKSB7XG4gICAgICAgIHJlbW92ZVBvaW50ZXIgPSB0cnVlO1xuICAgICAgfSAvLyBpdCBub3QgZm91bmQsIHNvIHRoZSBwb2ludGVyIGhhc24ndCBiZWVuIGRvd24gKHNvIGl0J3MgcHJvYmFibHkgYSBob3ZlcilcblxuXG4gICAgICBpZiAoc3RvcmVJbmRleCA8IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSAvLyB1cGRhdGUgdGhlIGV2ZW50IGluIHRoZSBzdG9yZVxuXG5cbiAgICAgIHN0b3JlW3N0b3JlSW5kZXhdID0gZXY7XG4gICAgICB0aGlzLmNhbGxiYWNrKHRoaXMubWFuYWdlciwgZXZlbnRUeXBlLCB7XG4gICAgICAgIHBvaW50ZXJzOiBzdG9yZSxcbiAgICAgICAgY2hhbmdlZFBvaW50ZXJzOiBbZXZdLFxuICAgICAgICBwb2ludGVyVHlwZTogcG9pbnRlclR5cGUsXG4gICAgICAgIHNyY0V2ZW50OiBldlxuICAgICAgfSk7XG5cbiAgICAgIGlmIChyZW1vdmVQb2ludGVyKSB7XG4gICAgICAgIC8vIHJlbW92ZSBmcm9tIHRoZSBzdG9yZVxuICAgICAgICBzdG9yZS5zcGxpY2Uoc3RvcmVJbmRleCwgMSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgdmFyIFNJTkdMRV9UT1VDSF9JTlBVVF9NQVAgPSB7XG4gICAgdG91Y2hzdGFydDogSU5QVVRfU1RBUlQsXG4gICAgdG91Y2htb3ZlOiBJTlBVVF9NT1ZFLFxuICAgIHRvdWNoZW5kOiBJTlBVVF9FTkQsXG4gICAgdG91Y2hjYW5jZWw6IElOUFVUX0NBTkNFTFxuICB9O1xuICB2YXIgU0lOR0xFX1RPVUNIX1RBUkdFVF9FVkVOVFMgPSAndG91Y2hzdGFydCc7XG4gIHZhciBTSU5HTEVfVE9VQ0hfV0lORE9XX0VWRU5UUyA9ICd0b3VjaHN0YXJ0IHRvdWNobW92ZSB0b3VjaGVuZCB0b3VjaGNhbmNlbCc7XG4gIC8qKlxuICAgKiBUb3VjaCBldmVudHMgaW5wdXRcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBleHRlbmRzIElucHV0XG4gICAqL1xuXG4gIGZ1bmN0aW9uIFNpbmdsZVRvdWNoSW5wdXQoKSB7XG4gICAgdGhpcy5ldlRhcmdldCA9IFNJTkdMRV9UT1VDSF9UQVJHRVRfRVZFTlRTO1xuICAgIHRoaXMuZXZXaW4gPSBTSU5HTEVfVE9VQ0hfV0lORE9XX0VWRU5UUztcbiAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcbiAgICBJbnB1dC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgaW5oZXJpdChTaW5nbGVUb3VjaElucHV0LCBJbnB1dCwge1xuICAgIGhhbmRsZXI6IGZ1bmN0aW9uIFRFaGFuZGxlcihldikge1xuICAgICAgdmFyIHR5cGUgPSBTSU5HTEVfVE9VQ0hfSU5QVVRfTUFQW2V2LnR5cGVdOyAvLyBzaG91bGQgd2UgaGFuZGxlIHRoZSB0b3VjaCBldmVudHM/XG5cbiAgICAgIGlmICh0eXBlID09PSBJTlBVVF9TVEFSVCkge1xuICAgICAgICB0aGlzLnN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMuc3RhcnRlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciB0b3VjaGVzID0gbm9ybWFsaXplU2luZ2xlVG91Y2hlcy5jYWxsKHRoaXMsIGV2LCB0eXBlKTsgLy8gd2hlbiBkb25lLCByZXNldCB0aGUgc3RhcnRlZCBzdGF0ZVxuXG4gICAgICBpZiAodHlwZSAmIChJTlBVVF9FTkQgfCBJTlBVVF9DQU5DRUwpICYmIHRvdWNoZXNbMF0ubGVuZ3RoIC0gdG91Y2hlc1sxXS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhpcy5zdGFydGVkID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY2FsbGJhY2sodGhpcy5tYW5hZ2VyLCB0eXBlLCB7XG4gICAgICAgIHBvaW50ZXJzOiB0b3VjaGVzWzBdLFxuICAgICAgICBjaGFuZ2VkUG9pbnRlcnM6IHRvdWNoZXNbMV0sXG4gICAgICAgIHBvaW50ZXJUeXBlOiBJTlBVVF9UWVBFX1RPVUNILFxuICAgICAgICBzcmNFdmVudDogZXZcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG4gIC8qKlxuICAgKiBAdGhpcyB7VG91Y2hJbnB1dH1cbiAgICogQHBhcmFtIHtPYmplY3R9IGV2XG4gICAqIEBwYXJhbSB7TnVtYmVyfSB0eXBlIGZsYWdcbiAgICogQHJldHVybnMge3VuZGVmaW5lZHxBcnJheX0gW2FsbCwgY2hhbmdlZF1cbiAgICovXG5cbiAgZnVuY3Rpb24gbm9ybWFsaXplU2luZ2xlVG91Y2hlcyhldiwgdHlwZSkge1xuICAgIHZhciBhbGwgPSB0b0FycmF5KGV2LnRvdWNoZXMpO1xuICAgIHZhciBjaGFuZ2VkID0gdG9BcnJheShldi5jaGFuZ2VkVG91Y2hlcyk7XG5cbiAgICBpZiAodHlwZSAmIChJTlBVVF9FTkQgfCBJTlBVVF9DQU5DRUwpKSB7XG4gICAgICBhbGwgPSB1bmlxdWVBcnJheShhbGwuY29uY2F0KGNoYW5nZWQpLCAnaWRlbnRpZmllcicsIHRydWUpO1xuICAgIH1cblxuICAgIHJldHVybiBbYWxsLCBjaGFuZ2VkXTtcbiAgfVxuXG4gIHZhciBUT1VDSF9JTlBVVF9NQVAgPSB7XG4gICAgdG91Y2hzdGFydDogSU5QVVRfU1RBUlQsXG4gICAgdG91Y2htb3ZlOiBJTlBVVF9NT1ZFLFxuICAgIHRvdWNoZW5kOiBJTlBVVF9FTkQsXG4gICAgdG91Y2hjYW5jZWw6IElOUFVUX0NBTkNFTFxuICB9O1xuICB2YXIgVE9VQ0hfVEFSR0VUX0VWRU5UUyA9ICd0b3VjaHN0YXJ0IHRvdWNobW92ZSB0b3VjaGVuZCB0b3VjaGNhbmNlbCc7XG4gIC8qKlxuICAgKiBNdWx0aS11c2VyIHRvdWNoIGV2ZW50cyBpbnB1dFxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQGV4dGVuZHMgSW5wdXRcbiAgICovXG5cbiAgZnVuY3Rpb24gVG91Y2hJbnB1dCgpIHtcbiAgICB0aGlzLmV2VGFyZ2V0ID0gVE9VQ0hfVEFSR0VUX0VWRU5UUztcbiAgICB0aGlzLnRhcmdldElkcyA9IHt9O1xuICAgIElucHV0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBpbmhlcml0KFRvdWNoSW5wdXQsIElucHV0LCB7XG4gICAgaGFuZGxlcjogZnVuY3Rpb24gTVRFaGFuZGxlcihldikge1xuICAgICAgdmFyIHR5cGUgPSBUT1VDSF9JTlBVVF9NQVBbZXYudHlwZV07XG4gICAgICB2YXIgdG91Y2hlcyA9IGdldFRvdWNoZXMuY2FsbCh0aGlzLCBldiwgdHlwZSk7XG5cbiAgICAgIGlmICghdG91Y2hlcykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY2FsbGJhY2sodGhpcy5tYW5hZ2VyLCB0eXBlLCB7XG4gICAgICAgIHBvaW50ZXJzOiB0b3VjaGVzWzBdLFxuICAgICAgICBjaGFuZ2VkUG9pbnRlcnM6IHRvdWNoZXNbMV0sXG4gICAgICAgIHBvaW50ZXJUeXBlOiBJTlBVVF9UWVBFX1RPVUNILFxuICAgICAgICBzcmNFdmVudDogZXZcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG4gIC8qKlxuICAgKiBAdGhpcyB7VG91Y2hJbnB1dH1cbiAgICogQHBhcmFtIHtPYmplY3R9IGV2XG4gICAqIEBwYXJhbSB7TnVtYmVyfSB0eXBlIGZsYWdcbiAgICogQHJldHVybnMge3VuZGVmaW5lZHxBcnJheX0gW2FsbCwgY2hhbmdlZF1cbiAgICovXG5cbiAgZnVuY3Rpb24gZ2V0VG91Y2hlcyhldiwgdHlwZSkge1xuICAgIHZhciBhbGxUb3VjaGVzID0gdG9BcnJheShldi50b3VjaGVzKTtcbiAgICB2YXIgdGFyZ2V0SWRzID0gdGhpcy50YXJnZXRJZHM7IC8vIHdoZW4gdGhlcmUgaXMgb25seSBvbmUgdG91Y2gsIHRoZSBwcm9jZXNzIGNhbiBiZSBzaW1wbGlmaWVkXG5cbiAgICBpZiAodHlwZSAmIChJTlBVVF9TVEFSVCB8IElOUFVUX01PVkUpICYmIGFsbFRvdWNoZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICB0YXJnZXRJZHNbYWxsVG91Y2hlc1swXS5pZGVudGlmaWVyXSA9IHRydWU7XG4gICAgICByZXR1cm4gW2FsbFRvdWNoZXMsIGFsbFRvdWNoZXNdO1xuICAgIH1cblxuICAgIHZhciBpLFxuICAgICAgICB0YXJnZXRUb3VjaGVzLFxuICAgICAgICBjaGFuZ2VkVG91Y2hlcyA9IHRvQXJyYXkoZXYuY2hhbmdlZFRvdWNoZXMpLFxuICAgICAgICBjaGFuZ2VkVGFyZ2V0VG91Y2hlcyA9IFtdLFxuICAgICAgICB0YXJnZXQgPSB0aGlzLnRhcmdldDsgLy8gZ2V0IHRhcmdldCB0b3VjaGVzIGZyb20gdG91Y2hlc1xuXG4gICAgdGFyZ2V0VG91Y2hlcyA9IGFsbFRvdWNoZXMuZmlsdGVyKGZ1bmN0aW9uICh0b3VjaCkge1xuICAgICAgcmV0dXJuIGhhc1BhcmVudCh0b3VjaC50YXJnZXQsIHRhcmdldCk7XG4gICAgfSk7IC8vIGNvbGxlY3QgdG91Y2hlc1xuXG4gICAgaWYgKHR5cGUgPT09IElOUFVUX1NUQVJUKSB7XG4gICAgICBpID0gMDtcblxuICAgICAgd2hpbGUgKGkgPCB0YXJnZXRUb3VjaGVzLmxlbmd0aCkge1xuICAgICAgICB0YXJnZXRJZHNbdGFyZ2V0VG91Y2hlc1tpXS5pZGVudGlmaWVyXSA9IHRydWU7XG4gICAgICAgIGkrKztcbiAgICAgIH1cbiAgICB9IC8vIGZpbHRlciBjaGFuZ2VkIHRvdWNoZXMgdG8gb25seSBjb250YWluIHRvdWNoZXMgdGhhdCBleGlzdCBpbiB0aGUgY29sbGVjdGVkIHRhcmdldCBpZHNcblxuXG4gICAgaSA9IDA7XG5cbiAgICB3aGlsZSAoaSA8IGNoYW5nZWRUb3VjaGVzLmxlbmd0aCkge1xuICAgICAgaWYgKHRhcmdldElkc1tjaGFuZ2VkVG91Y2hlc1tpXS5pZGVudGlmaWVyXSkge1xuICAgICAgICBjaGFuZ2VkVGFyZ2V0VG91Y2hlcy5wdXNoKGNoYW5nZWRUb3VjaGVzW2ldKTtcbiAgICAgIH0gLy8gY2xlYW51cCByZW1vdmVkIHRvdWNoZXNcblxuXG4gICAgICBpZiAodHlwZSAmIChJTlBVVF9FTkQgfCBJTlBVVF9DQU5DRUwpKSB7XG4gICAgICAgIGRlbGV0ZSB0YXJnZXRJZHNbY2hhbmdlZFRvdWNoZXNbaV0uaWRlbnRpZmllcl07XG4gICAgICB9XG5cbiAgICAgIGkrKztcbiAgICB9XG5cbiAgICBpZiAoIWNoYW5nZWRUYXJnZXRUb3VjaGVzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiBbLy8gbWVyZ2UgdGFyZ2V0VG91Y2hlcyB3aXRoIGNoYW5nZWRUYXJnZXRUb3VjaGVzIHNvIGl0IGNvbnRhaW5zIEFMTCB0b3VjaGVzLCBpbmNsdWRpbmcgJ2VuZCcgYW5kICdjYW5jZWwnXG4gICAgdW5pcXVlQXJyYXkodGFyZ2V0VG91Y2hlcy5jb25jYXQoY2hhbmdlZFRhcmdldFRvdWNoZXMpLCAnaWRlbnRpZmllcicsIHRydWUpLCBjaGFuZ2VkVGFyZ2V0VG91Y2hlc107XG4gIH1cbiAgLyoqXG4gICAqIENvbWJpbmVkIHRvdWNoIGFuZCBtb3VzZSBpbnB1dFxuICAgKlxuICAgKiBUb3VjaCBoYXMgYSBoaWdoZXIgcHJpb3JpdHkgdGhlbiBtb3VzZSwgYW5kIHdoaWxlIHRvdWNoaW5nIG5vIG1vdXNlIGV2ZW50cyBhcmUgYWxsb3dlZC5cbiAgICogVGhpcyBiZWNhdXNlIHRvdWNoIGRldmljZXMgYWxzbyBlbWl0IG1vdXNlIGV2ZW50cyB3aGlsZSBkb2luZyBhIHRvdWNoLlxuICAgKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQGV4dGVuZHMgSW5wdXRcbiAgICovXG5cblxuICB2YXIgREVEVVBfVElNRU9VVCA9IDI1MDA7XG4gIHZhciBERURVUF9ESVNUQU5DRSA9IDI1O1xuXG4gIGZ1bmN0aW9uIFRvdWNoTW91c2VJbnB1dCgpIHtcbiAgICBJbnB1dC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIHZhciBoYW5kbGVyID0gYmluZEZuKHRoaXMuaGFuZGxlciwgdGhpcyk7XG4gICAgdGhpcy50b3VjaCA9IG5ldyBUb3VjaElucHV0KHRoaXMubWFuYWdlciwgaGFuZGxlcik7XG4gICAgdGhpcy5tb3VzZSA9IG5ldyBNb3VzZUlucHV0KHRoaXMubWFuYWdlciwgaGFuZGxlcik7XG4gICAgdGhpcy5wcmltYXJ5VG91Y2ggPSBudWxsO1xuICAgIHRoaXMubGFzdFRvdWNoZXMgPSBbXTtcbiAgfVxuXG4gIGluaGVyaXQoVG91Y2hNb3VzZUlucHV0LCBJbnB1dCwge1xuICAgIC8qKlxuICAgICAqIGhhbmRsZSBtb3VzZSBhbmQgdG91Y2ggZXZlbnRzXG4gICAgICogQHBhcmFtIHtIYW1tZXJ9IG1hbmFnZXJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXRFdmVudFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dERhdGFcbiAgICAgKi9cbiAgICBoYW5kbGVyOiBmdW5jdGlvbiBUTUVoYW5kbGVyKG1hbmFnZXIsIGlucHV0RXZlbnQsIGlucHV0RGF0YSkge1xuICAgICAgdmFyIGlzVG91Y2ggPSBpbnB1dERhdGEucG9pbnRlclR5cGUgPT0gSU5QVVRfVFlQRV9UT1VDSCxcbiAgICAgICAgICBpc01vdXNlID0gaW5wdXREYXRhLnBvaW50ZXJUeXBlID09IElOUFVUX1RZUEVfTU9VU0U7XG5cbiAgICAgIGlmIChpc01vdXNlICYmIGlucHV0RGF0YS5zb3VyY2VDYXBhYmlsaXRpZXMgJiYgaW5wdXREYXRhLnNvdXJjZUNhcGFiaWxpdGllcy5maXJlc1RvdWNoRXZlbnRzKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gLy8gd2hlbiB3ZSdyZSBpbiBhIHRvdWNoIGV2ZW50LCByZWNvcmQgdG91Y2hlcyB0byAgZGUtZHVwZSBzeW50aGV0aWMgbW91c2UgZXZlbnRcblxuXG4gICAgICBpZiAoaXNUb3VjaCkge1xuICAgICAgICByZWNvcmRUb3VjaGVzLmNhbGwodGhpcywgaW5wdXRFdmVudCwgaW5wdXREYXRhKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNNb3VzZSAmJiBpc1N5bnRoZXRpY0V2ZW50LmNhbGwodGhpcywgaW5wdXREYXRhKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY2FsbGJhY2sobWFuYWdlciwgaW5wdXRFdmVudCwgaW5wdXREYXRhKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogcmVtb3ZlIHRoZSBldmVudCBsaXN0ZW5lcnNcbiAgICAgKi9cbiAgICBkZXN0cm95OiBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgICAgdGhpcy50b3VjaC5kZXN0cm95KCk7XG4gICAgICB0aGlzLm1vdXNlLmRlc3Ryb3koKTtcbiAgICB9XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIHJlY29yZFRvdWNoZXMoZXZlbnRUeXBlLCBldmVudERhdGEpIHtcbiAgICBpZiAoZXZlbnRUeXBlICYgSU5QVVRfU1RBUlQpIHtcbiAgICAgIHRoaXMucHJpbWFyeVRvdWNoID0gZXZlbnREYXRhLmNoYW5nZWRQb2ludGVyc1swXS5pZGVudGlmaWVyO1xuICAgICAgc2V0TGFzdFRvdWNoLmNhbGwodGhpcywgZXZlbnREYXRhKTtcbiAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSAmIChJTlBVVF9FTkQgfCBJTlBVVF9DQU5DRUwpKSB7XG4gICAgICBzZXRMYXN0VG91Y2guY2FsbCh0aGlzLCBldmVudERhdGEpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNldExhc3RUb3VjaChldmVudERhdGEpIHtcbiAgICB2YXIgdG91Y2ggPSBldmVudERhdGEuY2hhbmdlZFBvaW50ZXJzWzBdO1xuXG4gICAgaWYgKHRvdWNoLmlkZW50aWZpZXIgPT09IHRoaXMucHJpbWFyeVRvdWNoKSB7XG4gICAgICB2YXIgbGFzdFRvdWNoID0ge1xuICAgICAgICB4OiB0b3VjaC5jbGllbnRYLFxuICAgICAgICB5OiB0b3VjaC5jbGllbnRZXG4gICAgICB9O1xuICAgICAgdGhpcy5sYXN0VG91Y2hlcy5wdXNoKGxhc3RUb3VjaCk7XG4gICAgICB2YXIgbHRzID0gdGhpcy5sYXN0VG91Y2hlcztcblxuICAgICAgdmFyIHJlbW92ZUxhc3RUb3VjaCA9IGZ1bmN0aW9uIHJlbW92ZUxhc3RUb3VjaCgpIHtcbiAgICAgICAgdmFyIGkgPSBsdHMuaW5kZXhPZihsYXN0VG91Y2gpO1xuXG4gICAgICAgIGlmIChpID4gLTEpIHtcbiAgICAgICAgICBsdHMuc3BsaWNlKGksIDEpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBzZXRUaW1lb3V0KHJlbW92ZUxhc3RUb3VjaCwgREVEVVBfVElNRU9VVCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaXNTeW50aGV0aWNFdmVudChldmVudERhdGEpIHtcbiAgICB2YXIgeCA9IGV2ZW50RGF0YS5zcmNFdmVudC5jbGllbnRYLFxuICAgICAgICB5ID0gZXZlbnREYXRhLnNyY0V2ZW50LmNsaWVudFk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGFzdFRvdWNoZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB0ID0gdGhpcy5sYXN0VG91Y2hlc1tpXTtcbiAgICAgIHZhciBkeCA9IE1hdGguYWJzKHggLSB0LngpLFxuICAgICAgICAgIGR5ID0gTWF0aC5hYnMoeSAtIHQueSk7XG5cbiAgICAgIGlmIChkeCA8PSBERURVUF9ESVNUQU5DRSAmJiBkeSA8PSBERURVUF9ESVNUQU5DRSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgUFJFRklYRURfVE9VQ0hfQUNUSU9OID0gcHJlZml4ZWQoVEVTVF9FTEVNRU5ULnN0eWxlLCAndG91Y2hBY3Rpb24nKTtcbiAgdmFyIE5BVElWRV9UT1VDSF9BQ1RJT04gPSBQUkVGSVhFRF9UT1VDSF9BQ1RJT04gIT09IHVuZGVmaW5lZDsgLy8gbWFnaWNhbCB0b3VjaEFjdGlvbiB2YWx1ZVxuXG4gIHZhciBUT1VDSF9BQ1RJT05fQ09NUFVURSA9ICdjb21wdXRlJztcbiAgdmFyIFRPVUNIX0FDVElPTl9BVVRPID0gJ2F1dG8nO1xuICB2YXIgVE9VQ0hfQUNUSU9OX01BTklQVUxBVElPTiA9ICdtYW5pcHVsYXRpb24nOyAvLyBub3QgaW1wbGVtZW50ZWRcblxuICB2YXIgVE9VQ0hfQUNUSU9OX05PTkUgPSAnbm9uZSc7XG4gIHZhciBUT1VDSF9BQ1RJT05fUEFOX1ggPSAncGFuLXgnO1xuICB2YXIgVE9VQ0hfQUNUSU9OX1BBTl9ZID0gJ3Bhbi15JztcbiAgdmFyIFRPVUNIX0FDVElPTl9NQVAgPSBnZXRUb3VjaEFjdGlvblByb3BzKCk7XG4gIC8qKlxuICAgKiBUb3VjaCBBY3Rpb25cbiAgICogc2V0cyB0aGUgdG91Y2hBY3Rpb24gcHJvcGVydHkgb3IgdXNlcyB0aGUganMgYWx0ZXJuYXRpdmVcbiAgICogQHBhcmFtIHtNYW5hZ2VyfSBtYW5hZ2VyXG4gICAqIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZVxuICAgKiBAY29uc3RydWN0b3JcbiAgICovXG5cbiAgZnVuY3Rpb24gVG91Y2hBY3Rpb24obWFuYWdlciwgdmFsdWUpIHtcbiAgICB0aGlzLm1hbmFnZXIgPSBtYW5hZ2VyO1xuICAgIHRoaXMuc2V0KHZhbHVlKTtcbiAgfVxuXG4gIFRvdWNoQWN0aW9uLnByb3RvdHlwZSA9IHtcbiAgICAvKipcbiAgICAgKiBzZXQgdGhlIHRvdWNoQWN0aW9uIHZhbHVlIG9uIHRoZSBlbGVtZW50IG9yIGVuYWJsZSB0aGUgcG9seWZpbGxcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gdmFsdWVcbiAgICAgKi9cbiAgICBzZXQ6IGZ1bmN0aW9uIHNldCh2YWx1ZSkge1xuICAgICAgLy8gZmluZCBvdXQgdGhlIHRvdWNoLWFjdGlvbiBieSB0aGUgZXZlbnQgaGFuZGxlcnNcbiAgICAgIGlmICh2YWx1ZSA9PSBUT1VDSF9BQ1RJT05fQ09NUFVURSkge1xuICAgICAgICB2YWx1ZSA9IHRoaXMuY29tcHV0ZSgpO1xuICAgICAgfVxuXG4gICAgICBpZiAoTkFUSVZFX1RPVUNIX0FDVElPTiAmJiB0aGlzLm1hbmFnZXIuZWxlbWVudC5zdHlsZSAmJiBUT1VDSF9BQ1RJT05fTUFQW3ZhbHVlXSkge1xuICAgICAgICB0aGlzLm1hbmFnZXIuZWxlbWVudC5zdHlsZVtQUkVGSVhFRF9UT1VDSF9BQ1RJT05dID0gdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuYWN0aW9ucyA9IHZhbHVlLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBqdXN0IHJlLXNldCB0aGUgdG91Y2hBY3Rpb24gdmFsdWVcbiAgICAgKi9cbiAgICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZSgpIHtcbiAgICAgIHRoaXMuc2V0KHRoaXMubWFuYWdlci5vcHRpb25zLnRvdWNoQWN0aW9uKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogY29tcHV0ZSB0aGUgdmFsdWUgZm9yIHRoZSB0b3VjaEFjdGlvbiBwcm9wZXJ0eSBiYXNlZCBvbiB0aGUgcmVjb2duaXplcidzIHNldHRpbmdzXG4gICAgICogQHJldHVybnMge1N0cmluZ30gdmFsdWVcbiAgICAgKi9cbiAgICBjb21wdXRlOiBmdW5jdGlvbiBjb21wdXRlKCkge1xuICAgICAgdmFyIGFjdGlvbnMgPSBbXTtcbiAgICAgIGVhY2godGhpcy5tYW5hZ2VyLnJlY29nbml6ZXJzLCBmdW5jdGlvbiAocmVjb2duaXplcikge1xuICAgICAgICBpZiAoYm9vbE9yRm4ocmVjb2duaXplci5vcHRpb25zLmVuYWJsZSwgW3JlY29nbml6ZXJdKSkge1xuICAgICAgICAgIGFjdGlvbnMgPSBhY3Rpb25zLmNvbmNhdChyZWNvZ25pemVyLmdldFRvdWNoQWN0aW9uKCkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBjbGVhblRvdWNoQWN0aW9ucyhhY3Rpb25zLmpvaW4oJyAnKSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbiBlYWNoIGlucHV0IGN5Y2xlIGFuZCBwcm92aWRlcyB0aGUgcHJldmVudGluZyBvZiB0aGUgYnJvd3NlciBiZWhhdmlvclxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICAgICAqL1xuICAgIHByZXZlbnREZWZhdWx0czogZnVuY3Rpb24gcHJldmVudERlZmF1bHRzKGlucHV0KSB7XG4gICAgICB2YXIgc3JjRXZlbnQgPSBpbnB1dC5zcmNFdmVudDtcbiAgICAgIHZhciBkaXJlY3Rpb24gPSBpbnB1dC5vZmZzZXREaXJlY3Rpb247IC8vIGlmIHRoZSB0b3VjaCBhY3Rpb24gZGlkIHByZXZlbnRlZCBvbmNlIHRoaXMgc2Vzc2lvblxuXG4gICAgICBpZiAodGhpcy5tYW5hZ2VyLnNlc3Npb24ucHJldmVudGVkKSB7XG4gICAgICAgIHNyY0V2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIGFjdGlvbnMgPSB0aGlzLmFjdGlvbnM7XG4gICAgICB2YXIgaGFzTm9uZSA9IGluU3RyKGFjdGlvbnMsIFRPVUNIX0FDVElPTl9OT05FKSAmJiAhVE9VQ0hfQUNUSU9OX01BUFtUT1VDSF9BQ1RJT05fTk9ORV07XG4gICAgICB2YXIgaGFzUGFuWSA9IGluU3RyKGFjdGlvbnMsIFRPVUNIX0FDVElPTl9QQU5fWSkgJiYgIVRPVUNIX0FDVElPTl9NQVBbVE9VQ0hfQUNUSU9OX1BBTl9ZXTtcbiAgICAgIHZhciBoYXNQYW5YID0gaW5TdHIoYWN0aW9ucywgVE9VQ0hfQUNUSU9OX1BBTl9YKSAmJiAhVE9VQ0hfQUNUSU9OX01BUFtUT1VDSF9BQ1RJT05fUEFOX1hdO1xuXG4gICAgICBpZiAoaGFzTm9uZSkge1xuICAgICAgICAvL2RvIG5vdCBwcmV2ZW50IGRlZmF1bHRzIGlmIHRoaXMgaXMgYSB0YXAgZ2VzdHVyZVxuICAgICAgICB2YXIgaXNUYXBQb2ludGVyID0gaW5wdXQucG9pbnRlcnMubGVuZ3RoID09PSAxO1xuICAgICAgICB2YXIgaXNUYXBNb3ZlbWVudCA9IGlucHV0LmRpc3RhbmNlIDwgMjtcbiAgICAgICAgdmFyIGlzVGFwVG91Y2hUaW1lID0gaW5wdXQuZGVsdGFUaW1lIDwgMjUwO1xuXG4gICAgICAgIGlmIChpc1RhcFBvaW50ZXIgJiYgaXNUYXBNb3ZlbWVudCAmJiBpc1RhcFRvdWNoVGltZSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaGFzUGFuWCAmJiBoYXNQYW5ZKSB7XG4gICAgICAgIC8vIGBwYW4teCBwYW4teWAgbWVhbnMgYnJvd3NlciBoYW5kbGVzIGFsbCBzY3JvbGxpbmcvcGFubmluZywgZG8gbm90IHByZXZlbnRcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoaGFzTm9uZSB8fCBoYXNQYW5ZICYmIGRpcmVjdGlvbiAmIERJUkVDVElPTl9IT1JJWk9OVEFMIHx8IGhhc1BhblggJiYgZGlyZWN0aW9uICYgRElSRUNUSU9OX1ZFUlRJQ0FMKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByZXZlbnRTcmMoc3JjRXZlbnQpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBjYWxsIHByZXZlbnREZWZhdWx0IHRvIHByZXZlbnQgdGhlIGJyb3dzZXIncyBkZWZhdWx0IGJlaGF2aW9yIChzY3JvbGxpbmcgaW4gbW9zdCBjYXNlcylcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc3JjRXZlbnRcbiAgICAgKi9cbiAgICBwcmV2ZW50U3JjOiBmdW5jdGlvbiBwcmV2ZW50U3JjKHNyY0V2ZW50KSB7XG4gICAgICB0aGlzLm1hbmFnZXIuc2Vzc2lvbi5wcmV2ZW50ZWQgPSB0cnVlO1xuICAgICAgc3JjRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiB3aGVuIHRoZSB0b3VjaEFjdGlvbnMgYXJlIGNvbGxlY3RlZCB0aGV5IGFyZSBub3QgYSB2YWxpZCB2YWx1ZSwgc28gd2UgbmVlZCB0byBjbGVhbiB0aGluZ3MgdXAuICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IGFjdGlvbnNcbiAgICogQHJldHVybnMgeyp9XG4gICAqL1xuXG4gIGZ1bmN0aW9uIGNsZWFuVG91Y2hBY3Rpb25zKGFjdGlvbnMpIHtcbiAgICAvLyBub25lXG4gICAgaWYgKGluU3RyKGFjdGlvbnMsIFRPVUNIX0FDVElPTl9OT05FKSkge1xuICAgICAgcmV0dXJuIFRPVUNIX0FDVElPTl9OT05FO1xuICAgIH1cblxuICAgIHZhciBoYXNQYW5YID0gaW5TdHIoYWN0aW9ucywgVE9VQ0hfQUNUSU9OX1BBTl9YKTtcbiAgICB2YXIgaGFzUGFuWSA9IGluU3RyKGFjdGlvbnMsIFRPVUNIX0FDVElPTl9QQU5fWSk7IC8vIGlmIGJvdGggcGFuLXggYW5kIHBhbi15IGFyZSBzZXQgKGRpZmZlcmVudCByZWNvZ25pemVyc1xuICAgIC8vIGZvciBkaWZmZXJlbnQgZGlyZWN0aW9ucywgZS5nLiBob3Jpem9udGFsIHBhbiBidXQgdmVydGljYWwgc3dpcGU/KVxuICAgIC8vIHdlIG5lZWQgbm9uZSAoYXMgb3RoZXJ3aXNlIHdpdGggcGFuLXggcGFuLXkgY29tYmluZWQgbm9uZSBvZiB0aGVzZVxuICAgIC8vIHJlY29nbml6ZXJzIHdpbGwgd29yaywgc2luY2UgdGhlIGJyb3dzZXIgd291bGQgaGFuZGxlIGFsbCBwYW5uaW5nXG5cbiAgICBpZiAoaGFzUGFuWCAmJiBoYXNQYW5ZKSB7XG4gICAgICByZXR1cm4gVE9VQ0hfQUNUSU9OX05PTkU7XG4gICAgfSAvLyBwYW4teCBPUiBwYW4teVxuXG5cbiAgICBpZiAoaGFzUGFuWCB8fCBoYXNQYW5ZKSB7XG4gICAgICByZXR1cm4gaGFzUGFuWCA/IFRPVUNIX0FDVElPTl9QQU5fWCA6IFRPVUNIX0FDVElPTl9QQU5fWTtcbiAgICB9IC8vIG1hbmlwdWxhdGlvblxuXG5cbiAgICBpZiAoaW5TdHIoYWN0aW9ucywgVE9VQ0hfQUNUSU9OX01BTklQVUxBVElPTikpIHtcbiAgICAgIHJldHVybiBUT1VDSF9BQ1RJT05fTUFOSVBVTEFUSU9OO1xuICAgIH1cblxuICAgIHJldHVybiBUT1VDSF9BQ1RJT05fQVVUTztcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFRvdWNoQWN0aW9uUHJvcHMoKSB7XG4gICAgaWYgKCFOQVRJVkVfVE9VQ0hfQUNUSU9OKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIHRvdWNoTWFwID0ge307XG4gICAgdmFyIGNzc1N1cHBvcnRzID0gd2luZG93LkNTUyAmJiB3aW5kb3cuQ1NTLnN1cHBvcnRzO1xuICAgIFsnYXV0bycsICdtYW5pcHVsYXRpb24nLCAncGFuLXknLCAncGFuLXgnLCAncGFuLXggcGFuLXknLCAnbm9uZSddLmZvckVhY2goZnVuY3Rpb24gKHZhbCkge1xuICAgICAgLy8gSWYgY3NzLnN1cHBvcnRzIGlzIG5vdCBzdXBwb3J0ZWQgYnV0IHRoZXJlIGlzIG5hdGl2ZSB0b3VjaC1hY3Rpb24gYXNzdW1lIGl0IHN1cHBvcnRzXG4gICAgICAvLyBhbGwgdmFsdWVzLiBUaGlzIGlzIHRoZSBjYXNlIGZvciBJRSAxMCBhbmQgMTEuXG4gICAgICB0b3VjaE1hcFt2YWxdID0gY3NzU3VwcG9ydHMgPyB3aW5kb3cuQ1NTLnN1cHBvcnRzKCd0b3VjaC1hY3Rpb24nLCB2YWwpIDogdHJ1ZTtcbiAgICB9KTtcbiAgICByZXR1cm4gdG91Y2hNYXA7XG4gIH1cbiAgLyoqXG4gICAqIFJlY29nbml6ZXIgZmxvdyBleHBsYWluZWQ7ICpcbiAgICogQWxsIHJlY29nbml6ZXJzIGhhdmUgdGhlIGluaXRpYWwgc3RhdGUgb2YgUE9TU0lCTEUgd2hlbiBhIGlucHV0IHNlc3Npb24gc3RhcnRzLlxuICAgKiBUaGUgZGVmaW5pdGlvbiBvZiBhIGlucHV0IHNlc3Npb24gaXMgZnJvbSB0aGUgZmlyc3QgaW5wdXQgdW50aWwgdGhlIGxhc3QgaW5wdXQsIHdpdGggYWxsIGl0J3MgbW92ZW1lbnQgaW4gaXQuICpcbiAgICogRXhhbXBsZSBzZXNzaW9uIGZvciBtb3VzZS1pbnB1dDogbW91c2Vkb3duIC0+IG1vdXNlbW92ZSAtPiBtb3VzZXVwXG4gICAqXG4gICAqIE9uIGVhY2ggcmVjb2duaXppbmcgY3ljbGUgKHNlZSBNYW5hZ2VyLnJlY29nbml6ZSkgdGhlIC5yZWNvZ25pemUoKSBtZXRob2QgaXMgZXhlY3V0ZWRcbiAgICogd2hpY2ggZGV0ZXJtaW5lcyB3aXRoIHN0YXRlIGl0IHNob3VsZCBiZS5cbiAgICpcbiAgICogSWYgdGhlIHJlY29nbml6ZXIgaGFzIHRoZSBzdGF0ZSBGQUlMRUQsIENBTkNFTExFRCBvciBSRUNPR05JWkVEIChlcXVhbHMgRU5ERUQpLCBpdCBpcyByZXNldCB0b1xuICAgKiBQT1NTSUJMRSB0byBnaXZlIGl0IGFub3RoZXIgY2hhbmdlIG9uIHRoZSBuZXh0IGN5Y2xlLlxuICAgKlxuICAgKiAgICAgICAgICAgICAgIFBvc3NpYmxlXG4gICAqICAgICAgICAgICAgICAgICAgfFxuICAgKiAgICAgICAgICAgICstLS0tLSstLS0tLS0tLS0tLS0tLS0rXG4gICAqICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHxcbiAgICogICAgICArLS0tLS0rLS0tLS0rICAgICAgICAgICAgICAgfFxuICAgKiAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICB8XG4gICAqICAgRmFpbGVkICAgICAgQ2FuY2VsbGVkICAgICAgICAgIHxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tKy0tLS0tLStcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIHxcbiAgICogICAgICAgICAgICAgICAgICAgICAgUmVjb2duaXplZCAgICAgICBCZWdhblxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlZFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbmRlZC9SZWNvZ25pemVkXG4gICAqL1xuXG5cbiAgdmFyIFNUQVRFX1BPU1NJQkxFID0gMTtcbiAgdmFyIFNUQVRFX0JFR0FOID0gMjtcbiAgdmFyIFNUQVRFX0NIQU5HRUQgPSA0O1xuICB2YXIgU1RBVEVfRU5ERUQgPSA4O1xuICB2YXIgU1RBVEVfUkVDT0dOSVpFRCA9IFNUQVRFX0VOREVEO1xuICB2YXIgU1RBVEVfQ0FOQ0VMTEVEID0gMTY7XG4gIHZhciBTVEFURV9GQUlMRUQgPSAzMjtcbiAgLyoqXG4gICAqIFJlY29nbml6ZXJcbiAgICogRXZlcnkgcmVjb2duaXplciBuZWVkcyB0byBleHRlbmQgZnJvbSB0aGlzIGNsYXNzLlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICovXG5cbiAgZnVuY3Rpb24gUmVjb2duaXplcihvcHRpb25zKSB7XG4gICAgdGhpcy5vcHRpb25zID0gYXNzaWduKHt9LCB0aGlzLmRlZmF1bHRzLCBvcHRpb25zIHx8IHt9KTtcbiAgICB0aGlzLmlkID0gdW5pcXVlSWQoKTtcbiAgICB0aGlzLm1hbmFnZXIgPSBudWxsOyAvLyBkZWZhdWx0IGlzIGVuYWJsZSB0cnVlXG5cbiAgICB0aGlzLm9wdGlvbnMuZW5hYmxlID0gaWZVbmRlZmluZWQodGhpcy5vcHRpb25zLmVuYWJsZSwgdHJ1ZSk7XG4gICAgdGhpcy5zdGF0ZSA9IFNUQVRFX1BPU1NJQkxFO1xuICAgIHRoaXMuc2ltdWx0YW5lb3VzID0ge307XG4gICAgdGhpcy5yZXF1aXJlRmFpbCA9IFtdO1xuICB9XG5cbiAgUmVjb2duaXplci5wcm90b3R5cGUgPSB7XG4gICAgLyoqXG4gICAgICogQHZpcnR1YWxcbiAgICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgICAqL1xuICAgIGRlZmF1bHRzOiB7fSxcblxuICAgIC8qKlxuICAgICAqIHNldCBvcHRpb25zXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICAgKiBAcmV0dXJuIHtSZWNvZ25pemVyfVxuICAgICAqL1xuICAgIHNldDogZnVuY3Rpb24gc2V0KG9wdGlvbnMpIHtcbiAgICAgIGFzc2lnbih0aGlzLm9wdGlvbnMsIG9wdGlvbnMpOyAvLyBhbHNvIHVwZGF0ZSB0aGUgdG91Y2hBY3Rpb24sIGluIGNhc2Ugc29tZXRoaW5nIGNoYW5nZWQgYWJvdXQgdGhlIGRpcmVjdGlvbnMvZW5hYmxlZCBzdGF0ZVxuXG4gICAgICB0aGlzLm1hbmFnZXIgJiYgdGhpcy5tYW5hZ2VyLnRvdWNoQWN0aW9uLnVwZGF0ZSgpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIHJlY29nbml6ZSBzaW11bHRhbmVvdXMgd2l0aCBhbiBvdGhlciByZWNvZ25pemVyLlxuICAgICAqIEBwYXJhbSB7UmVjb2duaXplcn0gb3RoZXJSZWNvZ25pemVyXG4gICAgICogQHJldHVybnMge1JlY29nbml6ZXJ9IHRoaXNcbiAgICAgKi9cbiAgICByZWNvZ25pemVXaXRoOiBmdW5jdGlvbiByZWNvZ25pemVXaXRoKG90aGVyUmVjb2duaXplcikge1xuICAgICAgaWYgKGludm9rZUFycmF5QXJnKG90aGVyUmVjb2duaXplciwgJ3JlY29nbml6ZVdpdGgnLCB0aGlzKSkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cblxuICAgICAgdmFyIHNpbXVsdGFuZW91cyA9IHRoaXMuc2ltdWx0YW5lb3VzO1xuICAgICAgb3RoZXJSZWNvZ25pemVyID0gZ2V0UmVjb2duaXplckJ5TmFtZUlmTWFuYWdlcihvdGhlclJlY29nbml6ZXIsIHRoaXMpO1xuXG4gICAgICBpZiAoIXNpbXVsdGFuZW91c1tvdGhlclJlY29nbml6ZXIuaWRdKSB7XG4gICAgICAgIHNpbXVsdGFuZW91c1tvdGhlclJlY29nbml6ZXIuaWRdID0gb3RoZXJSZWNvZ25pemVyO1xuICAgICAgICBvdGhlclJlY29nbml6ZXIucmVjb2duaXplV2l0aCh0aGlzKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIGRyb3AgdGhlIHNpbXVsdGFuZW91cyBsaW5rLiBpdCBkb2VzbnQgcmVtb3ZlIHRoZSBsaW5rIG9uIHRoZSBvdGhlciByZWNvZ25pemVyLlxuICAgICAqIEBwYXJhbSB7UmVjb2duaXplcn0gb3RoZXJSZWNvZ25pemVyXG4gICAgICogQHJldHVybnMge1JlY29nbml6ZXJ9IHRoaXNcbiAgICAgKi9cbiAgICBkcm9wUmVjb2duaXplV2l0aDogZnVuY3Rpb24gZHJvcFJlY29nbml6ZVdpdGgob3RoZXJSZWNvZ25pemVyKSB7XG4gICAgICBpZiAoaW52b2tlQXJyYXlBcmcob3RoZXJSZWNvZ25pemVyLCAnZHJvcFJlY29nbml6ZVdpdGgnLCB0aGlzKSkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cblxuICAgICAgb3RoZXJSZWNvZ25pemVyID0gZ2V0UmVjb2duaXplckJ5TmFtZUlmTWFuYWdlcihvdGhlclJlY29nbml6ZXIsIHRoaXMpO1xuICAgICAgZGVsZXRlIHRoaXMuc2ltdWx0YW5lb3VzW290aGVyUmVjb2duaXplci5pZF07XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogcmVjb2duaXplciBjYW4gb25seSBydW4gd2hlbiBhbiBvdGhlciBpcyBmYWlsaW5nXG4gICAgICogQHBhcmFtIHtSZWNvZ25pemVyfSBvdGhlclJlY29nbml6ZXJcbiAgICAgKiBAcmV0dXJucyB7UmVjb2duaXplcn0gdGhpc1xuICAgICAqL1xuICAgIHJlcXVpcmVGYWlsdXJlOiBmdW5jdGlvbiByZXF1aXJlRmFpbHVyZShvdGhlclJlY29nbml6ZXIpIHtcbiAgICAgIGlmIChpbnZva2VBcnJheUFyZyhvdGhlclJlY29nbml6ZXIsICdyZXF1aXJlRmFpbHVyZScsIHRoaXMpKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVxdWlyZUZhaWwgPSB0aGlzLnJlcXVpcmVGYWlsO1xuICAgICAgb3RoZXJSZWNvZ25pemVyID0gZ2V0UmVjb2duaXplckJ5TmFtZUlmTWFuYWdlcihvdGhlclJlY29nbml6ZXIsIHRoaXMpO1xuXG4gICAgICBpZiAoaW5BcnJheShyZXF1aXJlRmFpbCwgb3RoZXJSZWNvZ25pemVyKSA9PT0gLTEpIHtcbiAgICAgICAgcmVxdWlyZUZhaWwucHVzaChvdGhlclJlY29nbml6ZXIpO1xuICAgICAgICBvdGhlclJlY29nbml6ZXIucmVxdWlyZUZhaWx1cmUodGhpcyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBkcm9wIHRoZSByZXF1aXJlRmFpbHVyZSBsaW5rLiBpdCBkb2VzIG5vdCByZW1vdmUgdGhlIGxpbmsgb24gdGhlIG90aGVyIHJlY29nbml6ZXIuXG4gICAgICogQHBhcmFtIHtSZWNvZ25pemVyfSBvdGhlclJlY29nbml6ZXJcbiAgICAgKiBAcmV0dXJucyB7UmVjb2duaXplcn0gdGhpc1xuICAgICAqL1xuICAgIGRyb3BSZXF1aXJlRmFpbHVyZTogZnVuY3Rpb24gZHJvcFJlcXVpcmVGYWlsdXJlKG90aGVyUmVjb2duaXplcikge1xuICAgICAgaWYgKGludm9rZUFycmF5QXJnKG90aGVyUmVjb2duaXplciwgJ2Ryb3BSZXF1aXJlRmFpbHVyZScsIHRoaXMpKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuXG4gICAgICBvdGhlclJlY29nbml6ZXIgPSBnZXRSZWNvZ25pemVyQnlOYW1lSWZNYW5hZ2VyKG90aGVyUmVjb2duaXplciwgdGhpcyk7XG4gICAgICB2YXIgaW5kZXggPSBpbkFycmF5KHRoaXMucmVxdWlyZUZhaWwsIG90aGVyUmVjb2duaXplcik7XG5cbiAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgIHRoaXMucmVxdWlyZUZhaWwuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIGhhcyByZXF1aXJlIGZhaWx1cmVzIGJvb2xlYW5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBoYXNSZXF1aXJlRmFpbHVyZXM6IGZ1bmN0aW9uIGhhc1JlcXVpcmVGYWlsdXJlcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlcXVpcmVGYWlsLmxlbmd0aCA+IDA7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIGlmIHRoZSByZWNvZ25pemVyIGNhbiByZWNvZ25pemUgc2ltdWx0YW5lb3VzIHdpdGggYW4gb3RoZXIgcmVjb2duaXplclxuICAgICAqIEBwYXJhbSB7UmVjb2duaXplcn0gb3RoZXJSZWNvZ25pemVyXG4gICAgICogQHJldHVybnMge0Jvb2xlYW59XG4gICAgICovXG4gICAgY2FuUmVjb2duaXplV2l0aDogZnVuY3Rpb24gY2FuUmVjb2duaXplV2l0aChvdGhlclJlY29nbml6ZXIpIHtcbiAgICAgIHJldHVybiAhIXRoaXMuc2ltdWx0YW5lb3VzW290aGVyUmVjb2duaXplci5pZF07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFlvdSBzaG91bGQgdXNlIGB0cnlFbWl0YCBpbnN0ZWFkIG9mIGBlbWl0YCBkaXJlY3RseSB0byBjaGVja1xuICAgICAqIHRoYXQgYWxsIHRoZSBuZWVkZWQgcmVjb2duaXplcnMgaGFzIGZhaWxlZCBiZWZvcmUgZW1pdHRpbmcuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gICAgICovXG4gICAgZW1pdDogZnVuY3Rpb24gZW1pdChpbnB1dCkge1xuICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgdmFyIHN0YXRlID0gdGhpcy5zdGF0ZTtcblxuICAgICAgZnVuY3Rpb24gZW1pdChldmVudCkge1xuICAgICAgICBzZWxmLm1hbmFnZXIuZW1pdChldmVudCwgaW5wdXQpO1xuICAgICAgfSAvLyAncGFuc3RhcnQnIGFuZCAncGFubW92ZSdcblxuXG4gICAgICBpZiAoc3RhdGUgPCBTVEFURV9FTkRFRCkge1xuICAgICAgICBlbWl0KHNlbGYub3B0aW9ucy5ldmVudCArIHN0YXRlU3RyKHN0YXRlKSk7XG4gICAgICB9XG5cbiAgICAgIGVtaXQoc2VsZi5vcHRpb25zLmV2ZW50KTsgLy8gc2ltcGxlICdldmVudE5hbWUnIGV2ZW50c1xuXG4gICAgICBpZiAoaW5wdXQuYWRkaXRpb25hbEV2ZW50KSB7XG4gICAgICAgIC8vIGFkZGl0aW9uYWwgZXZlbnQocGFubGVmdCwgcGFucmlnaHQsIHBpbmNoaW4sIHBpbmNob3V0Li4uKVxuICAgICAgICBlbWl0KGlucHV0LmFkZGl0aW9uYWxFdmVudCk7XG4gICAgICB9IC8vIHBhbmVuZCBhbmQgcGFuY2FuY2VsXG5cblxuICAgICAgaWYgKHN0YXRlID49IFNUQVRFX0VOREVEKSB7XG4gICAgICAgIGVtaXQoc2VsZi5vcHRpb25zLmV2ZW50ICsgc3RhdGVTdHIoc3RhdGUpKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgdGhhdCBhbGwgdGhlIHJlcXVpcmUgZmFpbHVyZSByZWNvZ25pemVycyBoYXMgZmFpbGVkLFxuICAgICAqIGlmIHRydWUsIGl0IGVtaXRzIGEgZ2VzdHVyZSBldmVudCxcbiAgICAgKiBvdGhlcndpc2UsIHNldHVwIHRoZSBzdGF0ZSB0byBGQUlMRUQuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gICAgICovXG4gICAgdHJ5RW1pdDogZnVuY3Rpb24gdHJ5RW1pdChpbnB1dCkge1xuICAgICAgaWYgKHRoaXMuY2FuRW1pdCgpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVtaXQoaW5wdXQpO1xuICAgICAgfSAvLyBpdCdzIGZhaWxpbmcgYW55d2F5XG5cblxuICAgICAgdGhpcy5zdGF0ZSA9IFNUQVRFX0ZBSUxFRDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogY2FuIHdlIGVtaXQ/XG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICovXG4gICAgY2FuRW1pdDogZnVuY3Rpb24gY2FuRW1pdCgpIHtcbiAgICAgIHZhciBpID0gMDtcblxuICAgICAgd2hpbGUgKGkgPCB0aGlzLnJlcXVpcmVGYWlsLmxlbmd0aCkge1xuICAgICAgICBpZiAoISh0aGlzLnJlcXVpcmVGYWlsW2ldLnN0YXRlICYgKFNUQVRFX0ZBSUxFRCB8IFNUQVRFX1BPU1NJQkxFKSkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpKys7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiB1cGRhdGUgdGhlIHJlY29nbml6ZXJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXREYXRhXG4gICAgICovXG4gICAgcmVjb2duaXplOiBmdW5jdGlvbiByZWNvZ25pemUoaW5wdXREYXRhKSB7XG4gICAgICAvLyBtYWtlIGEgbmV3IGNvcHkgb2YgdGhlIGlucHV0RGF0YVxuICAgICAgLy8gc28gd2UgY2FuIGNoYW5nZSB0aGUgaW5wdXREYXRhIHdpdGhvdXQgbWVzc2luZyB1cCB0aGUgb3RoZXIgcmVjb2duaXplcnNcbiAgICAgIHZhciBpbnB1dERhdGFDbG9uZSA9IGFzc2lnbih7fSwgaW5wdXREYXRhKTsgLy8gaXMgaXMgZW5hYmxlZCBhbmQgYWxsb3cgcmVjb2duaXppbmc/XG5cbiAgICAgIGlmICghYm9vbE9yRm4odGhpcy5vcHRpb25zLmVuYWJsZSwgW3RoaXMsIGlucHV0RGF0YUNsb25lXSkpIHtcbiAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgICAgICB0aGlzLnN0YXRlID0gU1RBVEVfRkFJTEVEO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IC8vIHJlc2V0IHdoZW4gd2UndmUgcmVhY2hlZCB0aGUgZW5kXG5cblxuICAgICAgaWYgKHRoaXMuc3RhdGUgJiAoU1RBVEVfUkVDT0dOSVpFRCB8IFNUQVRFX0NBTkNFTExFRCB8IFNUQVRFX0ZBSUxFRCkpIHtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNUQVRFX1BPU1NJQkxFO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnN0YXRlID0gdGhpcy5wcm9jZXNzKGlucHV0RGF0YUNsb25lKTsgLy8gdGhlIHJlY29nbml6ZXIgaGFzIHJlY29nbml6ZWQgYSBnZXN0dXJlXG4gICAgICAvLyBzbyB0cmlnZ2VyIGFuIGV2ZW50XG5cbiAgICAgIGlmICh0aGlzLnN0YXRlICYgKFNUQVRFX0JFR0FOIHwgU1RBVEVfQ0hBTkdFRCB8IFNUQVRFX0VOREVEIHwgU1RBVEVfQ0FOQ0VMTEVEKSkge1xuICAgICAgICB0aGlzLnRyeUVtaXQoaW5wdXREYXRhQ2xvbmUpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiByZXR1cm4gdGhlIHN0YXRlIG9mIHRoZSByZWNvZ25pemVyXG4gICAgICogdGhlIGFjdHVhbCByZWNvZ25pemluZyBoYXBwZW5zIGluIHRoaXMgbWV0aG9kXG4gICAgICogQHZpcnR1YWxcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXREYXRhXG4gICAgICogQHJldHVybnMge0NvbnN0fSBTVEFURVxuICAgICAqL1xuICAgIHByb2Nlc3M6IGZ1bmN0aW9uIHByb2Nlc3MoaW5wdXREYXRhKSB7fSxcbiAgICAvLyBqc2hpbnQgaWdub3JlOmxpbmVcblxuICAgIC8qKlxuICAgICAqIHJldHVybiB0aGUgcHJlZmVycmVkIHRvdWNoLWFjdGlvblxuICAgICAqIEB2aXJ0dWFsXG4gICAgICogQHJldHVybnMge0FycmF5fVxuICAgICAqL1xuICAgIGdldFRvdWNoQWN0aW9uOiBmdW5jdGlvbiBnZXRUb3VjaEFjdGlvbigpIHt9LFxuXG4gICAgLyoqXG4gICAgICogY2FsbGVkIHdoZW4gdGhlIGdlc3R1cmUgaXNuJ3QgYWxsb3dlZCB0byByZWNvZ25pemVcbiAgICAgKiBsaWtlIHdoZW4gYW5vdGhlciBpcyBiZWluZyByZWNvZ25pemVkIG9yIGl0IGlzIGRpc2FibGVkXG4gICAgICogQHZpcnR1YWxcbiAgICAgKi9cbiAgICByZXNldDogZnVuY3Rpb24gcmVzZXQoKSB7fVxuICB9O1xuICAvKipcbiAgICogZ2V0IGEgdXNhYmxlIHN0cmluZywgdXNlZCBhcyBldmVudCBwb3N0Zml4XG4gICAqIEBwYXJhbSB7Q29uc3R9IHN0YXRlXG4gICAqIEByZXR1cm5zIHtTdHJpbmd9IHN0YXRlXG4gICAqL1xuXG4gIGZ1bmN0aW9uIHN0YXRlU3RyKHN0YXRlKSB7XG4gICAgaWYgKHN0YXRlICYgU1RBVEVfQ0FOQ0VMTEVEKSB7XG4gICAgICByZXR1cm4gJ2NhbmNlbCc7XG4gICAgfSBlbHNlIGlmIChzdGF0ZSAmIFNUQVRFX0VOREVEKSB7XG4gICAgICByZXR1cm4gJ2VuZCc7XG4gICAgfSBlbHNlIGlmIChzdGF0ZSAmIFNUQVRFX0NIQU5HRUQpIHtcbiAgICAgIHJldHVybiAnbW92ZSc7XG4gICAgfSBlbHNlIGlmIChzdGF0ZSAmIFNUQVRFX0JFR0FOKSB7XG4gICAgICByZXR1cm4gJ3N0YXJ0JztcbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgLyoqXG4gICAqIGRpcmVjdGlvbiBjb25zIHRvIHN0cmluZ1xuICAgKiBAcGFyYW0ge0NvbnN0fSBkaXJlY3Rpb25cbiAgICogQHJldHVybnMge1N0cmluZ31cbiAgICovXG5cblxuICBmdW5jdGlvbiBkaXJlY3Rpb25TdHIoZGlyZWN0aW9uKSB7XG4gICAgaWYgKGRpcmVjdGlvbiA9PSBESVJFQ1RJT05fRE9XTikge1xuICAgICAgcmV0dXJuICdkb3duJztcbiAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PSBESVJFQ1RJT05fVVApIHtcbiAgICAgIHJldHVybiAndXAnO1xuICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09IERJUkVDVElPTl9MRUZUKSB7XG4gICAgICByZXR1cm4gJ2xlZnQnO1xuICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09IERJUkVDVElPTl9SSUdIVCkge1xuICAgICAgcmV0dXJuICdyaWdodCc7XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xuICB9XG4gIC8qKlxuICAgKiBnZXQgYSByZWNvZ25pemVyIGJ5IG5hbWUgaWYgaXQgaXMgYm91bmQgdG8gYSBtYW5hZ2VyXG4gICAqIEBwYXJhbSB7UmVjb2duaXplcnxTdHJpbmd9IG90aGVyUmVjb2duaXplclxuICAgKiBAcGFyYW0ge1JlY29nbml6ZXJ9IHJlY29nbml6ZXJcbiAgICogQHJldHVybnMge1JlY29nbml6ZXJ9XG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gZ2V0UmVjb2duaXplckJ5TmFtZUlmTWFuYWdlcihvdGhlclJlY29nbml6ZXIsIHJlY29nbml6ZXIpIHtcbiAgICB2YXIgbWFuYWdlciA9IHJlY29nbml6ZXIubWFuYWdlcjtcblxuICAgIGlmIChtYW5hZ2VyKSB7XG4gICAgICByZXR1cm4gbWFuYWdlci5nZXQob3RoZXJSZWNvZ25pemVyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3RoZXJSZWNvZ25pemVyO1xuICB9XG4gIC8qKlxuICAgKiBUaGlzIHJlY29nbml6ZXIgaXMganVzdCB1c2VkIGFzIGEgYmFzZSBmb3IgdGhlIHNpbXBsZSBhdHRyaWJ1dGUgcmVjb2duaXplcnMuXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAZXh0ZW5kcyBSZWNvZ25pemVyXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gQXR0clJlY29nbml6ZXIoKSB7XG4gICAgUmVjb2duaXplci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgaW5oZXJpdChBdHRyUmVjb2duaXplciwgUmVjb2duaXplciwge1xuICAgIC8qKlxuICAgICAqIEBuYW1lc3BhY2VcbiAgICAgKiBAbWVtYmVyb2YgQXR0clJlY29nbml6ZXJcbiAgICAgKi9cbiAgICBkZWZhdWx0czoge1xuICAgICAgLyoqXG4gICAgICAgKiBAdHlwZSB7TnVtYmVyfVxuICAgICAgICogQGRlZmF1bHQgMVxuICAgICAgICovXG4gICAgICBwb2ludGVyczogMVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGNoZWNrIGlmIGl0IHRoZSByZWNvZ25pemVyIHJlY2VpdmVzIHZhbGlkIGlucHV0LCBsaWtlIGlucHV0LmRpc3RhbmNlID4gMTAuXG4gICAgICogQG1lbWJlcm9mIEF0dHJSZWNvZ25pemVyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gICAgICogQHJldHVybnMge0Jvb2xlYW59IHJlY29nbml6ZWRcbiAgICAgKi9cbiAgICBhdHRyVGVzdDogZnVuY3Rpb24gYXR0clRlc3QoaW5wdXQpIHtcbiAgICAgIHZhciBvcHRpb25Qb2ludGVycyA9IHRoaXMub3B0aW9ucy5wb2ludGVycztcbiAgICAgIHJldHVybiBvcHRpb25Qb2ludGVycyA9PT0gMCB8fCBpbnB1dC5wb2ludGVycy5sZW5ndGggPT09IG9wdGlvblBvaW50ZXJzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBQcm9jZXNzIHRoZSBpbnB1dCBhbmQgcmV0dXJuIHRoZSBzdGF0ZSBmb3IgdGhlIHJlY29nbml6ZXJcbiAgICAgKiBAbWVtYmVyb2YgQXR0clJlY29nbml6ZXJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXRcbiAgICAgKiBAcmV0dXJucyB7Kn0gU3RhdGVcbiAgICAgKi9cbiAgICBwcm9jZXNzOiBmdW5jdGlvbiBwcm9jZXNzKGlucHV0KSB7XG4gICAgICB2YXIgc3RhdGUgPSB0aGlzLnN0YXRlO1xuICAgICAgdmFyIGV2ZW50VHlwZSA9IGlucHV0LmV2ZW50VHlwZTtcbiAgICAgIHZhciBpc1JlY29nbml6ZWQgPSBzdGF0ZSAmIChTVEFURV9CRUdBTiB8IFNUQVRFX0NIQU5HRUQpO1xuICAgICAgdmFyIGlzVmFsaWQgPSB0aGlzLmF0dHJUZXN0KGlucHV0KTsgLy8gb24gY2FuY2VsIGlucHV0IGFuZCB3ZSd2ZSByZWNvZ25pemVkIGJlZm9yZSwgcmV0dXJuIFNUQVRFX0NBTkNFTExFRFxuXG4gICAgICBpZiAoaXNSZWNvZ25pemVkICYmIChldmVudFR5cGUgJiBJTlBVVF9DQU5DRUwgfHwgIWlzVmFsaWQpKSB7XG4gICAgICAgIHJldHVybiBzdGF0ZSB8IFNUQVRFX0NBTkNFTExFRDtcbiAgICAgIH0gZWxzZSBpZiAoaXNSZWNvZ25pemVkIHx8IGlzVmFsaWQpIHtcbiAgICAgICAgaWYgKGV2ZW50VHlwZSAmIElOUFVUX0VORCkge1xuICAgICAgICAgIHJldHVybiBzdGF0ZSB8IFNUQVRFX0VOREVEO1xuICAgICAgICB9IGVsc2UgaWYgKCEoc3RhdGUgJiBTVEFURV9CRUdBTikpIHtcbiAgICAgICAgICByZXR1cm4gU1RBVEVfQkVHQU47XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3RhdGUgfCBTVEFURV9DSEFOR0VEO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gU1RBVEVfRkFJTEVEO1xuICAgIH1cbiAgfSk7XG4gIC8qKlxuICAgKiBQYW5cbiAgICogUmVjb2duaXplZCB3aGVuIHRoZSBwb2ludGVyIGlzIGRvd24gYW5kIG1vdmVkIGluIHRoZSBhbGxvd2VkIGRpcmVjdGlvbi5cbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBleHRlbmRzIEF0dHJSZWNvZ25pemVyXG4gICAqL1xuXG4gIGZ1bmN0aW9uIFBhblJlY29nbml6ZXIoKSB7XG4gICAgQXR0clJlY29nbml6ZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB0aGlzLnBYID0gbnVsbDtcbiAgICB0aGlzLnBZID0gbnVsbDtcbiAgfVxuXG4gIGluaGVyaXQoUGFuUmVjb2duaXplciwgQXR0clJlY29nbml6ZXIsIHtcbiAgICAvKipcbiAgICAgKiBAbmFtZXNwYWNlXG4gICAgICogQG1lbWJlcm9mIFBhblJlY29nbml6ZXJcbiAgICAgKi9cbiAgICBkZWZhdWx0czoge1xuICAgICAgZXZlbnQ6ICdwYW4nLFxuICAgICAgdGhyZXNob2xkOiAxMCxcbiAgICAgIHBvaW50ZXJzOiAxLFxuICAgICAgZGlyZWN0aW9uOiBESVJFQ1RJT05fQUxMXG4gICAgfSxcbiAgICBnZXRUb3VjaEFjdGlvbjogZnVuY3Rpb24gZ2V0VG91Y2hBY3Rpb24oKSB7XG4gICAgICB2YXIgZGlyZWN0aW9uID0gdGhpcy5vcHRpb25zLmRpcmVjdGlvbjtcbiAgICAgIHZhciBhY3Rpb25zID0gW107XG5cbiAgICAgIGlmIChkaXJlY3Rpb24gJiBESVJFQ1RJT05fSE9SSVpPTlRBTCkge1xuICAgICAgICBhY3Rpb25zLnB1c2goVE9VQ0hfQUNUSU9OX1BBTl9ZKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRpcmVjdGlvbiAmIERJUkVDVElPTl9WRVJUSUNBTCkge1xuICAgICAgICBhY3Rpb25zLnB1c2goVE9VQ0hfQUNUSU9OX1BBTl9YKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFjdGlvbnM7XG4gICAgfSxcbiAgICBkaXJlY3Rpb25UZXN0OiBmdW5jdGlvbiBkaXJlY3Rpb25UZXN0KGlucHV0KSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICAgIHZhciBoYXNNb3ZlZCA9IHRydWU7XG4gICAgICB2YXIgZGlzdGFuY2UgPSBpbnB1dC5kaXN0YW5jZTtcbiAgICAgIHZhciBkaXJlY3Rpb24gPSBpbnB1dC5kaXJlY3Rpb247XG4gICAgICB2YXIgeCA9IGlucHV0LmRlbHRhWDtcbiAgICAgIHZhciB5ID0gaW5wdXQuZGVsdGFZOyAvLyBsb2NrIHRvIGF4aXM/XG5cbiAgICAgIGlmICghKGRpcmVjdGlvbiAmIG9wdGlvbnMuZGlyZWN0aW9uKSkge1xuICAgICAgICBpZiAob3B0aW9ucy5kaXJlY3Rpb24gJiBESVJFQ1RJT05fSE9SSVpPTlRBTCkge1xuICAgICAgICAgIGRpcmVjdGlvbiA9IHggPT09IDAgPyBESVJFQ1RJT05fTk9ORSA6IHggPCAwID8gRElSRUNUSU9OX0xFRlQgOiBESVJFQ1RJT05fUklHSFQ7XG4gICAgICAgICAgaGFzTW92ZWQgPSB4ICE9IHRoaXMucFg7XG4gICAgICAgICAgZGlzdGFuY2UgPSBNYXRoLmFicyhpbnB1dC5kZWx0YVgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRpcmVjdGlvbiA9IHkgPT09IDAgPyBESVJFQ1RJT05fTk9ORSA6IHkgPCAwID8gRElSRUNUSU9OX1VQIDogRElSRUNUSU9OX0RPV047XG4gICAgICAgICAgaGFzTW92ZWQgPSB5ICE9IHRoaXMucFk7XG4gICAgICAgICAgZGlzdGFuY2UgPSBNYXRoLmFicyhpbnB1dC5kZWx0YVkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlucHV0LmRpcmVjdGlvbiA9IGRpcmVjdGlvbjtcbiAgICAgIHJldHVybiBoYXNNb3ZlZCAmJiBkaXN0YW5jZSA+IG9wdGlvbnMudGhyZXNob2xkICYmIGRpcmVjdGlvbiAmIG9wdGlvbnMuZGlyZWN0aW9uO1xuICAgIH0sXG4gICAgYXR0clRlc3Q6IGZ1bmN0aW9uIGF0dHJUZXN0KGlucHV0KSB7XG4gICAgICByZXR1cm4gQXR0clJlY29nbml6ZXIucHJvdG90eXBlLmF0dHJUZXN0LmNhbGwodGhpcywgaW5wdXQpICYmICh0aGlzLnN0YXRlICYgU1RBVEVfQkVHQU4gfHwgISh0aGlzLnN0YXRlICYgU1RBVEVfQkVHQU4pICYmIHRoaXMuZGlyZWN0aW9uVGVzdChpbnB1dCkpO1xuICAgIH0sXG4gICAgZW1pdDogZnVuY3Rpb24gZW1pdChpbnB1dCkge1xuICAgICAgdGhpcy5wWCA9IGlucHV0LmRlbHRhWDtcbiAgICAgIHRoaXMucFkgPSBpbnB1dC5kZWx0YVk7XG4gICAgICB2YXIgZGlyZWN0aW9uID0gZGlyZWN0aW9uU3RyKGlucHV0LmRpcmVjdGlvbik7XG5cbiAgICAgIGlmIChkaXJlY3Rpb24pIHtcbiAgICAgICAgaW5wdXQuYWRkaXRpb25hbEV2ZW50ID0gdGhpcy5vcHRpb25zLmV2ZW50ICsgZGlyZWN0aW9uO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9zdXBlci5lbWl0LmNhbGwodGhpcywgaW5wdXQpO1xuICAgIH1cbiAgfSk7XG4gIC8qKlxuICAgKiBQaW5jaFxuICAgKiBSZWNvZ25pemVkIHdoZW4gdHdvIG9yIG1vcmUgcG9pbnRlcnMgYXJlIG1vdmluZyB0b3dhcmQgKHpvb20taW4pIG9yIGF3YXkgZnJvbSBlYWNoIG90aGVyICh6b29tLW91dCkuXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAZXh0ZW5kcyBBdHRyUmVjb2duaXplclxuICAgKi9cblxuICBmdW5jdGlvbiBQaW5jaFJlY29nbml6ZXIoKSB7XG4gICAgQXR0clJlY29nbml6ZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIGluaGVyaXQoUGluY2hSZWNvZ25pemVyLCBBdHRyUmVjb2duaXplciwge1xuICAgIC8qKlxuICAgICAqIEBuYW1lc3BhY2VcbiAgICAgKiBAbWVtYmVyb2YgUGluY2hSZWNvZ25pemVyXG4gICAgICovXG4gICAgZGVmYXVsdHM6IHtcbiAgICAgIGV2ZW50OiAncGluY2gnLFxuICAgICAgdGhyZXNob2xkOiAwLFxuICAgICAgcG9pbnRlcnM6IDJcbiAgICB9LFxuICAgIGdldFRvdWNoQWN0aW9uOiBmdW5jdGlvbiBnZXRUb3VjaEFjdGlvbigpIHtcbiAgICAgIHJldHVybiBbVE9VQ0hfQUNUSU9OX05PTkVdO1xuICAgIH0sXG4gICAgYXR0clRlc3Q6IGZ1bmN0aW9uIGF0dHJUZXN0KGlucHV0KSB7XG4gICAgICByZXR1cm4gdGhpcy5fc3VwZXIuYXR0clRlc3QuY2FsbCh0aGlzLCBpbnB1dCkgJiYgKE1hdGguYWJzKGlucHV0LnNjYWxlIC0gMSkgPiB0aGlzLm9wdGlvbnMudGhyZXNob2xkIHx8IHRoaXMuc3RhdGUgJiBTVEFURV9CRUdBTik7XG4gICAgfSxcbiAgICBlbWl0OiBmdW5jdGlvbiBlbWl0KGlucHV0KSB7XG4gICAgICBpZiAoaW5wdXQuc2NhbGUgIT09IDEpIHtcbiAgICAgICAgdmFyIGluT3V0ID0gaW5wdXQuc2NhbGUgPCAxID8gJ2luJyA6ICdvdXQnO1xuICAgICAgICBpbnB1dC5hZGRpdGlvbmFsRXZlbnQgPSB0aGlzLm9wdGlvbnMuZXZlbnQgKyBpbk91dDtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fc3VwZXIuZW1pdC5jYWxsKHRoaXMsIGlucHV0KTtcbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogUHJlc3NcbiAgICogUmVjb2duaXplZCB3aGVuIHRoZSBwb2ludGVyIGlzIGRvd24gZm9yIHggbXMgd2l0aG91dCBhbnkgbW92ZW1lbnQuXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAZXh0ZW5kcyBSZWNvZ25pemVyXG4gICAqL1xuXG4gIGZ1bmN0aW9uIFByZXNzUmVjb2duaXplcigpIHtcbiAgICBSZWNvZ25pemVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgdGhpcy5fdGltZXIgPSBudWxsO1xuICAgIHRoaXMuX2lucHV0ID0gbnVsbDtcbiAgfVxuXG4gIGluaGVyaXQoUHJlc3NSZWNvZ25pemVyLCBSZWNvZ25pemVyLCB7XG4gICAgLyoqXG4gICAgICogQG5hbWVzcGFjZVxuICAgICAqIEBtZW1iZXJvZiBQcmVzc1JlY29nbml6ZXJcbiAgICAgKi9cbiAgICBkZWZhdWx0czoge1xuICAgICAgZXZlbnQ6ICdwcmVzcycsXG4gICAgICBwb2ludGVyczogMSxcbiAgICAgIHRpbWU6IDI1MSxcbiAgICAgIC8vIG1pbmltYWwgdGltZSBvZiB0aGUgcG9pbnRlciB0byBiZSBwcmVzc2VkXG4gICAgICB0aHJlc2hvbGQ6IDkgLy8gYSBtaW5pbWFsIG1vdmVtZW50IGlzIG9rLCBidXQga2VlcCBpdCBsb3dcblxuICAgIH0sXG4gICAgZ2V0VG91Y2hBY3Rpb246IGZ1bmN0aW9uIGdldFRvdWNoQWN0aW9uKCkge1xuICAgICAgcmV0dXJuIFtUT1VDSF9BQ1RJT05fQVVUT107XG4gICAgfSxcbiAgICBwcm9jZXNzOiBmdW5jdGlvbiBwcm9jZXNzKGlucHV0KSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICAgIHZhciB2YWxpZFBvaW50ZXJzID0gaW5wdXQucG9pbnRlcnMubGVuZ3RoID09PSBvcHRpb25zLnBvaW50ZXJzO1xuICAgICAgdmFyIHZhbGlkTW92ZW1lbnQgPSBpbnB1dC5kaXN0YW5jZSA8IG9wdGlvbnMudGhyZXNob2xkO1xuICAgICAgdmFyIHZhbGlkVGltZSA9IGlucHV0LmRlbHRhVGltZSA+IG9wdGlvbnMudGltZTtcbiAgICAgIHRoaXMuX2lucHV0ID0gaW5wdXQ7IC8vIHdlIG9ubHkgYWxsb3cgbGl0dGxlIG1vdmVtZW50XG4gICAgICAvLyBhbmQgd2UndmUgcmVhY2hlZCBhbiBlbmQgZXZlbnQsIHNvIGEgdGFwIGlzIHBvc3NpYmxlXG5cbiAgICAgIGlmICghdmFsaWRNb3ZlbWVudCB8fCAhdmFsaWRQb2ludGVycyB8fCBpbnB1dC5ldmVudFR5cGUgJiAoSU5QVVRfRU5EIHwgSU5QVVRfQ0FOQ0VMKSAmJiAhdmFsaWRUaW1lKSB7XG4gICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgIH0gZWxzZSBpZiAoaW5wdXQuZXZlbnRUeXBlICYgSU5QVVRfU1RBUlQpIHtcbiAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgICAgICB0aGlzLl90aW1lciA9IHNldFRpbWVvdXRDb250ZXh0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB0aGlzLnN0YXRlID0gU1RBVEVfUkVDT0dOSVpFRDtcbiAgICAgICAgICB0aGlzLnRyeUVtaXQoKTtcbiAgICAgICAgfSwgb3B0aW9ucy50aW1lLCB0aGlzKTtcbiAgICAgIH0gZWxzZSBpZiAoaW5wdXQuZXZlbnRUeXBlICYgSU5QVVRfRU5EKSB7XG4gICAgICAgIHJldHVybiBTVEFURV9SRUNPR05JWkVEO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gU1RBVEVfRkFJTEVEO1xuICAgIH0sXG4gICAgcmVzZXQ6IGZ1bmN0aW9uIHJlc2V0KCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyKTtcbiAgICB9LFxuICAgIGVtaXQ6IGZ1bmN0aW9uIGVtaXQoaW5wdXQpIHtcbiAgICAgIGlmICh0aGlzLnN0YXRlICE9PSBTVEFURV9SRUNPR05JWkVEKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGlucHV0ICYmIGlucHV0LmV2ZW50VHlwZSAmIElOUFVUX0VORCkge1xuICAgICAgICB0aGlzLm1hbmFnZXIuZW1pdCh0aGlzLm9wdGlvbnMuZXZlbnQgKyAndXAnLCBpbnB1dCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9pbnB1dC50aW1lU3RhbXAgPSBub3coKTtcbiAgICAgICAgdGhpcy5tYW5hZ2VyLmVtaXQodGhpcy5vcHRpb25zLmV2ZW50LCB0aGlzLl9pbnB1dCk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgLyoqXG4gICAqIFJvdGF0ZVxuICAgKiBSZWNvZ25pemVkIHdoZW4gdHdvIG9yIG1vcmUgcG9pbnRlciBhcmUgbW92aW5nIGluIGEgY2lyY3VsYXIgbW90aW9uLlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQGV4dGVuZHMgQXR0clJlY29nbml6ZXJcbiAgICovXG5cbiAgZnVuY3Rpb24gUm90YXRlUmVjb2duaXplcigpIHtcbiAgICBBdHRyUmVjb2duaXplci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgaW5oZXJpdChSb3RhdGVSZWNvZ25pemVyLCBBdHRyUmVjb2duaXplciwge1xuICAgIC8qKlxuICAgICAqIEBuYW1lc3BhY2VcbiAgICAgKiBAbWVtYmVyb2YgUm90YXRlUmVjb2duaXplclxuICAgICAqL1xuICAgIGRlZmF1bHRzOiB7XG4gICAgICBldmVudDogJ3JvdGF0ZScsXG4gICAgICB0aHJlc2hvbGQ6IDAsXG4gICAgICBwb2ludGVyczogMlxuICAgIH0sXG4gICAgZ2V0VG91Y2hBY3Rpb246IGZ1bmN0aW9uIGdldFRvdWNoQWN0aW9uKCkge1xuICAgICAgcmV0dXJuIFtUT1VDSF9BQ1RJT05fTk9ORV07XG4gICAgfSxcbiAgICBhdHRyVGVzdDogZnVuY3Rpb24gYXR0clRlc3QoaW5wdXQpIHtcbiAgICAgIHJldHVybiB0aGlzLl9zdXBlci5hdHRyVGVzdC5jYWxsKHRoaXMsIGlucHV0KSAmJiAoTWF0aC5hYnMoaW5wdXQucm90YXRpb24pID4gdGhpcy5vcHRpb25zLnRocmVzaG9sZCB8fCB0aGlzLnN0YXRlICYgU1RBVEVfQkVHQU4pO1xuICAgIH1cbiAgfSk7XG4gIC8qKlxuICAgKiBTd2lwZVxuICAgKiBSZWNvZ25pemVkIHdoZW4gdGhlIHBvaW50ZXIgaXMgbW92aW5nIGZhc3QgKHZlbG9jaXR5KSwgd2l0aCBlbm91Z2ggZGlzdGFuY2UgaW4gdGhlIGFsbG93ZWQgZGlyZWN0aW9uLlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQGV4dGVuZHMgQXR0clJlY29nbml6ZXJcbiAgICovXG5cbiAgZnVuY3Rpb24gU3dpcGVSZWNvZ25pemVyKCkge1xuICAgIEF0dHJSZWNvZ25pemVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBpbmhlcml0KFN3aXBlUmVjb2duaXplciwgQXR0clJlY29nbml6ZXIsIHtcbiAgICAvKipcbiAgICAgKiBAbmFtZXNwYWNlXG4gICAgICogQG1lbWJlcm9mIFN3aXBlUmVjb2duaXplclxuICAgICAqL1xuICAgIGRlZmF1bHRzOiB7XG4gICAgICBldmVudDogJ3N3aXBlJyxcbiAgICAgIHRocmVzaG9sZDogMTAsXG4gICAgICB2ZWxvY2l0eTogMC4zLFxuICAgICAgZGlyZWN0aW9uOiBESVJFQ1RJT05fSE9SSVpPTlRBTCB8IERJUkVDVElPTl9WRVJUSUNBTCxcbiAgICAgIHBvaW50ZXJzOiAxXG4gICAgfSxcbiAgICBnZXRUb3VjaEFjdGlvbjogZnVuY3Rpb24gZ2V0VG91Y2hBY3Rpb24oKSB7XG4gICAgICByZXR1cm4gUGFuUmVjb2duaXplci5wcm90b3R5cGUuZ2V0VG91Y2hBY3Rpb24uY2FsbCh0aGlzKTtcbiAgICB9LFxuICAgIGF0dHJUZXN0OiBmdW5jdGlvbiBhdHRyVGVzdChpbnB1dCkge1xuICAgICAgdmFyIGRpcmVjdGlvbiA9IHRoaXMub3B0aW9ucy5kaXJlY3Rpb247XG4gICAgICB2YXIgdmVsb2NpdHk7XG5cbiAgICAgIGlmIChkaXJlY3Rpb24gJiAoRElSRUNUSU9OX0hPUklaT05UQUwgfCBESVJFQ1RJT05fVkVSVElDQUwpKSB7XG4gICAgICAgIHZlbG9jaXR5ID0gaW5wdXQub3ZlcmFsbFZlbG9jaXR5O1xuICAgICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gJiBESVJFQ1RJT05fSE9SSVpPTlRBTCkge1xuICAgICAgICB2ZWxvY2l0eSA9IGlucHV0Lm92ZXJhbGxWZWxvY2l0eVg7XG4gICAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiAmIERJUkVDVElPTl9WRVJUSUNBTCkge1xuICAgICAgICB2ZWxvY2l0eSA9IGlucHV0Lm92ZXJhbGxWZWxvY2l0eVk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLl9zdXBlci5hdHRyVGVzdC5jYWxsKHRoaXMsIGlucHV0KSAmJiBkaXJlY3Rpb24gJiBpbnB1dC5vZmZzZXREaXJlY3Rpb24gJiYgaW5wdXQuZGlzdGFuY2UgPiB0aGlzLm9wdGlvbnMudGhyZXNob2xkICYmIGlucHV0Lm1heFBvaW50ZXJzID09IHRoaXMub3B0aW9ucy5wb2ludGVycyAmJiBhYnModmVsb2NpdHkpID4gdGhpcy5vcHRpb25zLnZlbG9jaXR5ICYmIGlucHV0LmV2ZW50VHlwZSAmIElOUFVUX0VORDtcbiAgICB9LFxuICAgIGVtaXQ6IGZ1bmN0aW9uIGVtaXQoaW5wdXQpIHtcbiAgICAgIHZhciBkaXJlY3Rpb24gPSBkaXJlY3Rpb25TdHIoaW5wdXQub2Zmc2V0RGlyZWN0aW9uKTtcblxuICAgICAgaWYgKGRpcmVjdGlvbikge1xuICAgICAgICB0aGlzLm1hbmFnZXIuZW1pdCh0aGlzLm9wdGlvbnMuZXZlbnQgKyBkaXJlY3Rpb24sIGlucHV0KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5tYW5hZ2VyLmVtaXQodGhpcy5vcHRpb25zLmV2ZW50LCBpbnB1dCk7XG4gICAgfVxuICB9KTtcbiAgLyoqXG4gICAqIEEgdGFwIGlzIGVjb2duaXplZCB3aGVuIHRoZSBwb2ludGVyIGlzIGRvaW5nIGEgc21hbGwgdGFwL2NsaWNrLiBNdWx0aXBsZSB0YXBzIGFyZSByZWNvZ25pemVkIGlmIHRoZXkgb2NjdXJcbiAgICogYmV0d2VlbiB0aGUgZ2l2ZW4gaW50ZXJ2YWwgYW5kIHBvc2l0aW9uLiBUaGUgZGVsYXkgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHJlY29nbml6ZSBtdWx0aS10YXBzIHdpdGhvdXQgZmlyaW5nXG4gICAqIGEgc2luZ2xlIHRhcC5cbiAgICpcbiAgICogVGhlIGV2ZW50RGF0YSBmcm9tIHRoZSBlbWl0dGVkIGV2ZW50IGNvbnRhaW5zIHRoZSBwcm9wZXJ0eSBgdGFwQ291bnRgLCB3aGljaCBjb250YWlucyB0aGUgYW1vdW50IG9mXG4gICAqIG11bHRpLXRhcHMgYmVpbmcgcmVjb2duaXplZC5cbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBleHRlbmRzIFJlY29nbml6ZXJcbiAgICovXG5cbiAgZnVuY3Rpb24gVGFwUmVjb2duaXplcigpIHtcbiAgICBSZWNvZ25pemVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IC8vIHByZXZpb3VzIHRpbWUgYW5kIGNlbnRlcixcbiAgICAvLyB1c2VkIGZvciB0YXAgY291bnRpbmdcblxuICAgIHRoaXMucFRpbWUgPSBmYWxzZTtcbiAgICB0aGlzLnBDZW50ZXIgPSBmYWxzZTtcbiAgICB0aGlzLl90aW1lciA9IG51bGw7XG4gICAgdGhpcy5faW5wdXQgPSBudWxsO1xuICAgIHRoaXMuY291bnQgPSAwO1xuICB9XG5cbiAgaW5oZXJpdChUYXBSZWNvZ25pemVyLCBSZWNvZ25pemVyLCB7XG4gICAgLyoqXG4gICAgICogQG5hbWVzcGFjZVxuICAgICAqIEBtZW1iZXJvZiBQaW5jaFJlY29nbml6ZXJcbiAgICAgKi9cbiAgICBkZWZhdWx0czoge1xuICAgICAgZXZlbnQ6ICd0YXAnLFxuICAgICAgcG9pbnRlcnM6IDEsXG4gICAgICB0YXBzOiAxLFxuICAgICAgaW50ZXJ2YWw6IDMwMCxcbiAgICAgIC8vIG1heCB0aW1lIGJldHdlZW4gdGhlIG11bHRpLXRhcCB0YXBzXG4gICAgICB0aW1lOiAyNTAsXG4gICAgICAvLyBtYXggdGltZSBvZiB0aGUgcG9pbnRlciB0byBiZSBkb3duIChsaWtlIGZpbmdlciBvbiB0aGUgc2NyZWVuKVxuICAgICAgdGhyZXNob2xkOiA5LFxuICAgICAgLy8gYSBtaW5pbWFsIG1vdmVtZW50IGlzIG9rLCBidXQga2VlcCBpdCBsb3dcbiAgICAgIHBvc1RocmVzaG9sZDogMTAgLy8gYSBtdWx0aS10YXAgY2FuIGJlIGEgYml0IG9mZiB0aGUgaW5pdGlhbCBwb3NpdGlvblxuXG4gICAgfSxcbiAgICBnZXRUb3VjaEFjdGlvbjogZnVuY3Rpb24gZ2V0VG91Y2hBY3Rpb24oKSB7XG4gICAgICByZXR1cm4gW1RPVUNIX0FDVElPTl9NQU5JUFVMQVRJT05dO1xuICAgIH0sXG4gICAgcHJvY2VzczogZnVuY3Rpb24gcHJvY2VzcyhpbnB1dCkge1xuICAgICAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICB2YXIgdmFsaWRQb2ludGVycyA9IGlucHV0LnBvaW50ZXJzLmxlbmd0aCA9PT0gb3B0aW9ucy5wb2ludGVycztcbiAgICAgIHZhciB2YWxpZE1vdmVtZW50ID0gaW5wdXQuZGlzdGFuY2UgPCBvcHRpb25zLnRocmVzaG9sZDtcbiAgICAgIHZhciB2YWxpZFRvdWNoVGltZSA9IGlucHV0LmRlbHRhVGltZSA8IG9wdGlvbnMudGltZTtcbiAgICAgIHRoaXMucmVzZXQoKTtcblxuICAgICAgaWYgKGlucHV0LmV2ZW50VHlwZSAmIElOUFVUX1NUQVJUICYmIHRoaXMuY291bnQgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmFpbFRpbWVvdXQoKTtcbiAgICAgIH0gLy8gd2Ugb25seSBhbGxvdyBsaXR0bGUgbW92ZW1lbnRcbiAgICAgIC8vIGFuZCB3ZSd2ZSByZWFjaGVkIGFuIGVuZCBldmVudCwgc28gYSB0YXAgaXMgcG9zc2libGVcblxuXG4gICAgICBpZiAodmFsaWRNb3ZlbWVudCAmJiB2YWxpZFRvdWNoVGltZSAmJiB2YWxpZFBvaW50ZXJzKSB7XG4gICAgICAgIGlmIChpbnB1dC5ldmVudFR5cGUgIT0gSU5QVVRfRU5EKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZmFpbFRpbWVvdXQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB2YWxpZEludGVydmFsID0gdGhpcy5wVGltZSA/IGlucHV0LnRpbWVTdGFtcCAtIHRoaXMucFRpbWUgPCBvcHRpb25zLmludGVydmFsIDogdHJ1ZTtcbiAgICAgICAgdmFyIHZhbGlkTXVsdGlUYXAgPSAhdGhpcy5wQ2VudGVyIHx8IGdldERpc3RhbmNlKHRoaXMucENlbnRlciwgaW5wdXQuY2VudGVyKSA8IG9wdGlvbnMucG9zVGhyZXNob2xkO1xuICAgICAgICB0aGlzLnBUaW1lID0gaW5wdXQudGltZVN0YW1wO1xuICAgICAgICB0aGlzLnBDZW50ZXIgPSBpbnB1dC5jZW50ZXI7XG5cbiAgICAgICAgaWYgKCF2YWxpZE11bHRpVGFwIHx8ICF2YWxpZEludGVydmFsKSB7XG4gICAgICAgICAgdGhpcy5jb3VudCA9IDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jb3VudCArPSAxO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5faW5wdXQgPSBpbnB1dDsgLy8gaWYgdGFwIGNvdW50IG1hdGNoZXMgd2UgaGF2ZSByZWNvZ25pemVkIGl0LFxuICAgICAgICAvLyBlbHNlIGl0IGhhcyBiZWdhbiByZWNvZ25pemluZy4uLlxuXG4gICAgICAgIHZhciB0YXBDb3VudCA9IHRoaXMuY291bnQgJSBvcHRpb25zLnRhcHM7XG5cbiAgICAgICAgaWYgKHRhcENvdW50ID09PSAwKSB7XG4gICAgICAgICAgLy8gbm8gZmFpbGluZyByZXF1aXJlbWVudHMsIGltbWVkaWF0ZWx5IHRyaWdnZXIgdGhlIHRhcCBldmVudFxuICAgICAgICAgIC8vIG9yIHdhaXQgYXMgbG9uZyBhcyB0aGUgbXVsdGl0YXAgaW50ZXJ2YWwgdG8gdHJpZ2dlclxuICAgICAgICAgIGlmICghdGhpcy5oYXNSZXF1aXJlRmFpbHVyZXMoKSkge1xuICAgICAgICAgICAgcmV0dXJuIFNUQVRFX1JFQ09HTklaRUQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3RpbWVyID0gc2V0VGltZW91dENvbnRleHQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU1RBVEVfUkVDT0dOSVpFRDtcbiAgICAgICAgICAgICAgdGhpcy50cnlFbWl0KCk7XG4gICAgICAgICAgICB9LCBvcHRpb25zLmludGVydmFsLCB0aGlzKTtcbiAgICAgICAgICAgIHJldHVybiBTVEFURV9CRUdBTjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFNUQVRFX0ZBSUxFRDtcbiAgICB9LFxuICAgIGZhaWxUaW1lb3V0OiBmdW5jdGlvbiBmYWlsVGltZW91dCgpIHtcbiAgICAgIHRoaXMuX3RpbWVyID0gc2V0VGltZW91dENvbnRleHQoZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnN0YXRlID0gU1RBVEVfRkFJTEVEO1xuICAgICAgfSwgdGhpcy5vcHRpb25zLmludGVydmFsLCB0aGlzKTtcbiAgICAgIHJldHVybiBTVEFURV9GQUlMRUQ7XG4gICAgfSxcbiAgICByZXNldDogZnVuY3Rpb24gcmVzZXQoKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZXIpO1xuICAgIH0sXG4gICAgZW1pdDogZnVuY3Rpb24gZW1pdCgpIHtcbiAgICAgIGlmICh0aGlzLnN0YXRlID09IFNUQVRFX1JFQ09HTklaRUQpIHtcbiAgICAgICAgdGhpcy5faW5wdXQudGFwQ291bnQgPSB0aGlzLmNvdW50O1xuICAgICAgICB0aGlzLm1hbmFnZXIuZW1pdCh0aGlzLm9wdGlvbnMuZXZlbnQsIHRoaXMuX2lucHV0KTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogU2ltcGxlIHdheSB0byBjcmVhdGUgYSBtYW5hZ2VyIHdpdGggYSBkZWZhdWx0IHNldCBvZiByZWNvZ25pemVycy5cbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKi9cblxuICBmdW5jdGlvbiBIYW1tZXIoZWxlbWVudCwgb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIG9wdGlvbnMucmVjb2duaXplcnMgPSBpZlVuZGVmaW5lZChvcHRpb25zLnJlY29nbml6ZXJzLCBIYW1tZXIuZGVmYXVsdHMucHJlc2V0KTtcbiAgICByZXR1cm4gbmV3IE1hbmFnZXIoZWxlbWVudCwgb3B0aW9ucyk7XG4gIH1cbiAgLyoqXG4gICAqIEBjb25zdCB7c3RyaW5nfVxuICAgKi9cblxuXG4gIEhhbW1lci5WRVJTSU9OID0gJzIuMC43JztcbiAgLyoqXG4gICAqIGRlZmF1bHQgc2V0dGluZ3NcbiAgICogQG5hbWVzcGFjZVxuICAgKi9cblxuICBIYW1tZXIuZGVmYXVsdHMgPSB7XG4gICAgLyoqXG4gICAgICogc2V0IGlmIERPTSBldmVudHMgYXJlIGJlaW5nIHRyaWdnZXJlZC5cbiAgICAgKiBCdXQgdGhpcyBpcyBzbG93ZXIgYW5kIHVudXNlZCBieSBzaW1wbGUgaW1wbGVtZW50YXRpb25zLCBzbyBkaXNhYmxlZCBieSBkZWZhdWx0LlxuICAgICAqIEB0eXBlIHtCb29sZWFufVxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgZG9tRXZlbnRzOiBmYWxzZSxcblxuICAgIC8qKlxuICAgICAqIFRoZSB2YWx1ZSBmb3IgdGhlIHRvdWNoQWN0aW9uIHByb3BlcnR5L2ZhbGxiYWNrLlxuICAgICAqIFdoZW4gc2V0IHRvIGBjb21wdXRlYCBpdCB3aWxsIG1hZ2ljYWxseSBzZXQgdGhlIGNvcnJlY3QgdmFsdWUgYmFzZWQgb24gdGhlIGFkZGVkIHJlY29nbml6ZXJzLlxuICAgICAqIEB0eXBlIHtTdHJpbmd9XG4gICAgICogQGRlZmF1bHQgY29tcHV0ZVxuICAgICAqL1xuICAgIHRvdWNoQWN0aW9uOiBUT1VDSF9BQ1RJT05fQ09NUFVURSxcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtCb29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICBlbmFibGU6IHRydWUsXG5cbiAgICAvKipcbiAgICAgKiBFWFBFUklNRU5UQUwgRkVBVFVSRSAtLSBjYW4gYmUgcmVtb3ZlZC9jaGFuZ2VkXG4gICAgICogQ2hhbmdlIHRoZSBwYXJlbnQgaW5wdXQgdGFyZ2V0IGVsZW1lbnQuXG4gICAgICogSWYgTnVsbCwgdGhlbiBpdCBpcyBiZWluZyBzZXQgdGhlIHRvIG1haW4gZWxlbWVudC5cbiAgICAgKiBAdHlwZSB7TnVsbHxFdmVudFRhcmdldH1cbiAgICAgKiBAZGVmYXVsdCBudWxsXG4gICAgICovXG4gICAgaW5wdXRUYXJnZXQ6IG51bGwsXG5cbiAgICAvKipcbiAgICAgKiBmb3JjZSBhbiBpbnB1dCBjbGFzc1xuICAgICAqIEB0eXBlIHtOdWxsfEZ1bmN0aW9ufVxuICAgICAqIEBkZWZhdWx0IG51bGxcbiAgICAgKi9cbiAgICBpbnB1dENsYXNzOiBudWxsLFxuXG4gICAgLyoqXG4gICAgICogRGVmYXVsdCByZWNvZ25pemVyIHNldHVwIHdoZW4gY2FsbGluZyBgSGFtbWVyKClgXG4gICAgICogV2hlbiBjcmVhdGluZyBhIG5ldyBNYW5hZ2VyIHRoZXNlIHdpbGwgYmUgc2tpcHBlZC5cbiAgICAgKiBAdHlwZSB7QXJyYXl9XG4gICAgICovXG4gICAgcHJlc2V0OiBbLy8gUmVjb2duaXplckNsYXNzLCBvcHRpb25zLCBbcmVjb2duaXplV2l0aCwgLi4uXSwgW3JlcXVpcmVGYWlsdXJlLCAuLi5dXG4gICAgW1JvdGF0ZVJlY29nbml6ZXIsIHtcbiAgICAgIGVuYWJsZTogZmFsc2VcbiAgICB9XSwgW1BpbmNoUmVjb2duaXplciwge1xuICAgICAgZW5hYmxlOiBmYWxzZVxuICAgIH0sIFsncm90YXRlJ11dLCBbU3dpcGVSZWNvZ25pemVyLCB7XG4gICAgICBkaXJlY3Rpb246IERJUkVDVElPTl9IT1JJWk9OVEFMXG4gICAgfV0sIFtQYW5SZWNvZ25pemVyLCB7XG4gICAgICBkaXJlY3Rpb246IERJUkVDVElPTl9IT1JJWk9OVEFMXG4gICAgfSwgWydzd2lwZSddXSwgW1RhcFJlY29nbml6ZXJdLCBbVGFwUmVjb2duaXplciwge1xuICAgICAgZXZlbnQ6ICdkb3VibGV0YXAnLFxuICAgICAgdGFwczogMlxuICAgIH0sIFsndGFwJ11dLCBbUHJlc3NSZWNvZ25pemVyXV0sXG5cbiAgICAvKipcbiAgICAgKiBTb21lIENTUyBwcm9wZXJ0aWVzIGNhbiBiZSB1c2VkIHRvIGltcHJvdmUgdGhlIHdvcmtpbmcgb2YgSGFtbWVyLlxuICAgICAqIEFkZCB0aGVtIHRvIHRoaXMgbWV0aG9kIGFuZCB0aGV5IHdpbGwgYmUgc2V0IHdoZW4gY3JlYXRpbmcgYSBuZXcgTWFuYWdlci5cbiAgICAgKiBAbmFtZXNwYWNlXG4gICAgICovXG4gICAgY3NzUHJvcHM6IHtcbiAgICAgIC8qKlxuICAgICAgICogRGlzYWJsZXMgdGV4dCBzZWxlY3Rpb24gdG8gaW1wcm92ZSB0aGUgZHJhZ2dpbmcgZ2VzdHVyZS4gTWFpbmx5IGZvciBkZXNrdG9wIGJyb3dzZXJzLlxuICAgICAgICogQHR5cGUge1N0cmluZ31cbiAgICAgICAqIEBkZWZhdWx0ICdub25lJ1xuICAgICAgICovXG4gICAgICB1c2VyU2VsZWN0OiAnbm9uZScsXG5cbiAgICAgIC8qKlxuICAgICAgICogRGlzYWJsZSB0aGUgV2luZG93cyBQaG9uZSBncmlwcGVycyB3aGVuIHByZXNzaW5nIGFuIGVsZW1lbnQuXG4gICAgICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgICAgICogQGRlZmF1bHQgJ25vbmUnXG4gICAgICAgKi9cbiAgICAgIHRvdWNoU2VsZWN0OiAnbm9uZScsXG5cbiAgICAgIC8qKlxuICAgICAgICogRGlzYWJsZXMgdGhlIGRlZmF1bHQgY2FsbG91dCBzaG93biB3aGVuIHlvdSB0b3VjaCBhbmQgaG9sZCBhIHRvdWNoIHRhcmdldC5cbiAgICAgICAqIE9uIGlPUywgd2hlbiB5b3UgdG91Y2ggYW5kIGhvbGQgYSB0b3VjaCB0YXJnZXQgc3VjaCBhcyBhIGxpbmssIFNhZmFyaSBkaXNwbGF5c1xuICAgICAgICogYSBjYWxsb3V0IGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGxpbmsuIFRoaXMgcHJvcGVydHkgYWxsb3dzIHlvdSB0byBkaXNhYmxlIHRoYXQgY2FsbG91dC5cbiAgICAgICAqIEB0eXBlIHtTdHJpbmd9XG4gICAgICAgKiBAZGVmYXVsdCAnbm9uZSdcbiAgICAgICAqL1xuICAgICAgdG91Y2hDYWxsb3V0OiAnbm9uZScsXG5cbiAgICAgIC8qKlxuICAgICAgICogU3BlY2lmaWVzIHdoZXRoZXIgem9vbWluZyBpcyBlbmFibGVkLiBVc2VkIGJ5IElFMTA+XG4gICAgICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgICAgICogQGRlZmF1bHQgJ25vbmUnXG4gICAgICAgKi9cbiAgICAgIGNvbnRlbnRab29taW5nOiAnbm9uZScsXG5cbiAgICAgIC8qKlxuICAgICAgICogU3BlY2lmaWVzIHRoYXQgYW4gZW50aXJlIGVsZW1lbnQgc2hvdWxkIGJlIGRyYWdnYWJsZSBpbnN0ZWFkIG9mIGl0cyBjb250ZW50cy4gTWFpbmx5IGZvciBkZXNrdG9wIGJyb3dzZXJzLlxuICAgICAgICogQHR5cGUge1N0cmluZ31cbiAgICAgICAqIEBkZWZhdWx0ICdub25lJ1xuICAgICAgICovXG4gICAgICB1c2VyRHJhZzogJ25vbmUnLFxuXG4gICAgICAvKipcbiAgICAgICAqIE92ZXJyaWRlcyB0aGUgaGlnaGxpZ2h0IGNvbG9yIHNob3duIHdoZW4gdGhlIHVzZXIgdGFwcyBhIGxpbmsgb3IgYSBKYXZhU2NyaXB0XG4gICAgICAgKiBjbGlja2FibGUgZWxlbWVudCBpbiBpT1MuIFRoaXMgcHJvcGVydHkgb2JleXMgdGhlIGFscGhhIHZhbHVlLCBpZiBzcGVjaWZpZWQuXG4gICAgICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgICAgICogQGRlZmF1bHQgJ3JnYmEoMCwwLDAsMCknXG4gICAgICAgKi9cbiAgICAgIHRhcEhpZ2hsaWdodENvbG9yOiAncmdiYSgwLDAsMCwwKSdcbiAgICB9XG4gIH07XG4gIHZhciBTVE9QID0gMTtcbiAgdmFyIEZPUkNFRF9TVE9QID0gMjtcbiAgLyoqXG4gICAqIE1hbmFnZXJcbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKi9cblxuICBmdW5jdGlvbiBNYW5hZ2VyKGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBhc3NpZ24oe30sIEhhbW1lci5kZWZhdWx0cywgb3B0aW9ucyB8fCB7fSk7XG4gICAgdGhpcy5vcHRpb25zLmlucHV0VGFyZ2V0ID0gdGhpcy5vcHRpb25zLmlucHV0VGFyZ2V0IHx8IGVsZW1lbnQ7XG4gICAgdGhpcy5oYW5kbGVycyA9IHt9O1xuICAgIHRoaXMuc2Vzc2lvbiA9IHt9O1xuICAgIHRoaXMucmVjb2duaXplcnMgPSBbXTtcbiAgICB0aGlzLm9sZENzc1Byb3BzID0ge307XG4gICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcbiAgICB0aGlzLmlucHV0ID0gY3JlYXRlSW5wdXRJbnN0YW5jZSh0aGlzKTtcbiAgICB0aGlzLnRvdWNoQWN0aW9uID0gbmV3IFRvdWNoQWN0aW9uKHRoaXMsIHRoaXMub3B0aW9ucy50b3VjaEFjdGlvbik7XG4gICAgdG9nZ2xlQ3NzUHJvcHModGhpcywgdHJ1ZSk7XG4gICAgZWFjaCh0aGlzLm9wdGlvbnMucmVjb2duaXplcnMsIGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICB2YXIgcmVjb2duaXplciA9IHRoaXMuYWRkKG5ldyBpdGVtWzBdKGl0ZW1bMV0pKTtcbiAgICAgIGl0ZW1bMl0gJiYgcmVjb2duaXplci5yZWNvZ25pemVXaXRoKGl0ZW1bMl0pO1xuICAgICAgaXRlbVszXSAmJiByZWNvZ25pemVyLnJlcXVpcmVGYWlsdXJlKGl0ZW1bM10pO1xuICAgIH0sIHRoaXMpO1xuICB9XG5cbiAgTWFuYWdlci5wcm90b3R5cGUgPSB7XG4gICAgLyoqXG4gICAgICogc2V0IG9wdGlvbnNcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgICAqIEByZXR1cm5zIHtNYW5hZ2VyfVxuICAgICAqL1xuICAgIHNldDogZnVuY3Rpb24gc2V0KG9wdGlvbnMpIHtcbiAgICAgIGFzc2lnbih0aGlzLm9wdGlvbnMsIG9wdGlvbnMpOyAvLyBPcHRpb25zIHRoYXQgbmVlZCBhIGxpdHRsZSBtb3JlIHNldHVwXG5cbiAgICAgIGlmIChvcHRpb25zLnRvdWNoQWN0aW9uKSB7XG4gICAgICAgIHRoaXMudG91Y2hBY3Rpb24udXBkYXRlKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmlucHV0VGFyZ2V0KSB7XG4gICAgICAgIC8vIENsZWFuIHVwIGV4aXN0aW5nIGV2ZW50IGxpc3RlbmVycyBhbmQgcmVpbml0aWFsaXplXG4gICAgICAgIHRoaXMuaW5wdXQuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLmlucHV0LnRhcmdldCA9IG9wdGlvbnMuaW5wdXRUYXJnZXQ7XG4gICAgICAgIHRoaXMuaW5wdXQuaW5pdCgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogc3RvcCByZWNvZ25pemluZyBmb3IgdGhpcyBzZXNzaW9uLlxuICAgICAqIFRoaXMgc2Vzc2lvbiB3aWxsIGJlIGRpc2NhcmRlZCwgd2hlbiBhIG5ldyBbaW5wdXRdc3RhcnQgZXZlbnQgaXMgZmlyZWQuXG4gICAgICogV2hlbiBmb3JjZWQsIHRoZSByZWNvZ25pemVyIGN5Y2xlIGlzIHN0b3BwZWQgaW1tZWRpYXRlbHkuXG4gICAgICogQHBhcmFtIHtCb29sZWFufSBbZm9yY2VdXG4gICAgICovXG4gICAgc3RvcDogZnVuY3Rpb24gc3RvcChmb3JjZSkge1xuICAgICAgdGhpcy5zZXNzaW9uLnN0b3BwZWQgPSBmb3JjZSA/IEZPUkNFRF9TVE9QIDogU1RPUDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogcnVuIHRoZSByZWNvZ25pemVycyFcbiAgICAgKiBjYWxsZWQgYnkgdGhlIGlucHV0SGFuZGxlciBmdW5jdGlvbiBvbiBldmVyeSBtb3ZlbWVudCBvZiB0aGUgcG9pbnRlcnMgKHRvdWNoZXMpXG4gICAgICogaXQgd2Fsa3MgdGhyb3VnaCBhbGwgdGhlIHJlY29nbml6ZXJzIGFuZCB0cmllcyB0byBkZXRlY3QgdGhlIGdlc3R1cmUgdGhhdCBpcyBiZWluZyBtYWRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0RGF0YVxuICAgICAqL1xuICAgIHJlY29nbml6ZTogZnVuY3Rpb24gcmVjb2duaXplKGlucHV0RGF0YSkge1xuICAgICAgdmFyIHNlc3Npb24gPSB0aGlzLnNlc3Npb247XG5cbiAgICAgIGlmIChzZXNzaW9uLnN0b3BwZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSAvLyBydW4gdGhlIHRvdWNoLWFjdGlvbiBwb2x5ZmlsbFxuXG5cbiAgICAgIHRoaXMudG91Y2hBY3Rpb24ucHJldmVudERlZmF1bHRzKGlucHV0RGF0YSk7XG4gICAgICB2YXIgcmVjb2duaXplcjtcbiAgICAgIHZhciByZWNvZ25pemVycyA9IHRoaXMucmVjb2duaXplcnM7IC8vIHRoaXMgaG9sZHMgdGhlIHJlY29nbml6ZXIgdGhhdCBpcyBiZWluZyByZWNvZ25pemVkLlxuICAgICAgLy8gc28gdGhlIHJlY29nbml6ZXIncyBzdGF0ZSBuZWVkcyB0byBiZSBCRUdBTiwgQ0hBTkdFRCwgRU5ERUQgb3IgUkVDT0dOSVpFRFxuICAgICAgLy8gaWYgbm8gcmVjb2duaXplciBpcyBkZXRlY3RpbmcgYSB0aGluZywgaXQgaXMgc2V0IHRvIGBudWxsYFxuXG4gICAgICB2YXIgY3VyUmVjb2duaXplciA9IHNlc3Npb24uY3VyUmVjb2duaXplcjsgLy8gcmVzZXQgd2hlbiB0aGUgbGFzdCByZWNvZ25pemVyIGlzIHJlY29nbml6ZWRcbiAgICAgIC8vIG9yIHdoZW4gd2UncmUgaW4gYSBuZXcgc2Vzc2lvblxuXG4gICAgICBpZiAoIWN1clJlY29nbml6ZXIgfHwgY3VyUmVjb2duaXplciAmJiBjdXJSZWNvZ25pemVyLnN0YXRlICYgU1RBVEVfUkVDT0dOSVpFRCkge1xuICAgICAgICBjdXJSZWNvZ25pemVyID0gc2Vzc2lvbi5jdXJSZWNvZ25pemVyID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgdmFyIGkgPSAwO1xuXG4gICAgICB3aGlsZSAoaSA8IHJlY29nbml6ZXJzLmxlbmd0aCkge1xuICAgICAgICByZWNvZ25pemVyID0gcmVjb2duaXplcnNbaV07IC8vIGZpbmQgb3V0IGlmIHdlIGFyZSBhbGxvd2VkIHRyeSB0byByZWNvZ25pemUgdGhlIGlucHV0IGZvciB0aGlzIG9uZS5cbiAgICAgICAgLy8gMS4gICBhbGxvdyBpZiB0aGUgc2Vzc2lvbiBpcyBOT1QgZm9yY2VkIHN0b3BwZWQgKHNlZSB0aGUgLnN0b3AoKSBtZXRob2QpXG4gICAgICAgIC8vIDIuICAgYWxsb3cgaWYgd2Ugc3RpbGwgaGF2ZW4ndCByZWNvZ25pemVkIGEgZ2VzdHVyZSBpbiB0aGlzIHNlc3Npb24sIG9yIHRoZSB0aGlzIHJlY29nbml6ZXIgaXMgdGhlIG9uZVxuICAgICAgICAvLyAgICAgIHRoYXQgaXMgYmVpbmcgcmVjb2duaXplZC5cbiAgICAgICAgLy8gMy4gICBhbGxvdyBpZiB0aGUgcmVjb2duaXplciBpcyBhbGxvd2VkIHRvIHJ1biBzaW11bHRhbmVvdXMgd2l0aCB0aGUgY3VycmVudCByZWNvZ25pemVkIHJlY29nbml6ZXIuXG4gICAgICAgIC8vICAgICAgdGhpcyBjYW4gYmUgc2V0dXAgd2l0aCB0aGUgYHJlY29nbml6ZVdpdGgoKWAgbWV0aG9kIG9uIHRoZSByZWNvZ25pemVyLlxuXG4gICAgICAgIGlmIChzZXNzaW9uLnN0b3BwZWQgIT09IEZPUkNFRF9TVE9QICYmICggLy8gMVxuICAgICAgICAhY3VyUmVjb2duaXplciB8fCByZWNvZ25pemVyID09IGN1clJlY29nbml6ZXIgfHwgLy8gMlxuICAgICAgICByZWNvZ25pemVyLmNhblJlY29nbml6ZVdpdGgoY3VyUmVjb2duaXplcikpKSB7XG4gICAgICAgICAgLy8gM1xuICAgICAgICAgIHJlY29nbml6ZXIucmVjb2duaXplKGlucHV0RGF0YSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVjb2duaXplci5yZXNldCgpO1xuICAgICAgICB9IC8vIGlmIHRoZSByZWNvZ25pemVyIGhhcyBiZWVuIHJlY29nbml6aW5nIHRoZSBpbnB1dCBhcyBhIHZhbGlkIGdlc3R1cmUsIHdlIHdhbnQgdG8gc3RvcmUgdGhpcyBvbmUgYXMgdGhlXG4gICAgICAgIC8vIGN1cnJlbnQgYWN0aXZlIHJlY29nbml6ZXIuIGJ1dCBvbmx5IGlmIHdlIGRvbid0IGFscmVhZHkgaGF2ZSBhbiBhY3RpdmUgcmVjb2duaXplclxuXG5cbiAgICAgICAgaWYgKCFjdXJSZWNvZ25pemVyICYmIHJlY29nbml6ZXIuc3RhdGUgJiAoU1RBVEVfQkVHQU4gfCBTVEFURV9DSEFOR0VEIHwgU1RBVEVfRU5ERUQpKSB7XG4gICAgICAgICAgY3VyUmVjb2duaXplciA9IHNlc3Npb24uY3VyUmVjb2duaXplciA9IHJlY29nbml6ZXI7XG4gICAgICAgIH1cblxuICAgICAgICBpKys7XG4gICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIGdldCBhIHJlY29nbml6ZXIgYnkgaXRzIGV2ZW50IG5hbWUuXG4gICAgICogQHBhcmFtIHtSZWNvZ25pemVyfFN0cmluZ30gcmVjb2duaXplclxuICAgICAqIEByZXR1cm5zIHtSZWNvZ25pemVyfE51bGx9XG4gICAgICovXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQocmVjb2duaXplcikge1xuICAgICAgaWYgKHJlY29nbml6ZXIgaW5zdGFuY2VvZiBSZWNvZ25pemVyKSB7XG4gICAgICAgIHJldHVybiByZWNvZ25pemVyO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVjb2duaXplcnMgPSB0aGlzLnJlY29nbml6ZXJzO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlY29nbml6ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChyZWNvZ25pemVyc1tpXS5vcHRpb25zLmV2ZW50ID09IHJlY29nbml6ZXIpIHtcbiAgICAgICAgICByZXR1cm4gcmVjb2duaXplcnNbaV07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIGFkZCBhIHJlY29nbml6ZXIgdG8gdGhlIG1hbmFnZXJcbiAgICAgKiBleGlzdGluZyByZWNvZ25pemVycyB3aXRoIHRoZSBzYW1lIGV2ZW50IG5hbWUgd2lsbCBiZSByZW1vdmVkXG4gICAgICogQHBhcmFtIHtSZWNvZ25pemVyfSByZWNvZ25pemVyXG4gICAgICogQHJldHVybnMge1JlY29nbml6ZXJ8TWFuYWdlcn1cbiAgICAgKi9cbiAgICBhZGQ6IGZ1bmN0aW9uIGFkZChyZWNvZ25pemVyKSB7XG4gICAgICBpZiAoaW52b2tlQXJyYXlBcmcocmVjb2duaXplciwgJ2FkZCcsIHRoaXMpKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSAvLyByZW1vdmUgZXhpc3RpbmdcblxuXG4gICAgICB2YXIgZXhpc3RpbmcgPSB0aGlzLmdldChyZWNvZ25pemVyLm9wdGlvbnMuZXZlbnQpO1xuXG4gICAgICBpZiAoZXhpc3RpbmcpIHtcbiAgICAgICAgdGhpcy5yZW1vdmUoZXhpc3RpbmcpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnJlY29nbml6ZXJzLnB1c2gocmVjb2duaXplcik7XG4gICAgICByZWNvZ25pemVyLm1hbmFnZXIgPSB0aGlzO1xuICAgICAgdGhpcy50b3VjaEFjdGlvbi51cGRhdGUoKTtcbiAgICAgIHJldHVybiByZWNvZ25pemVyO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiByZW1vdmUgYSByZWNvZ25pemVyIGJ5IG5hbWUgb3IgaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge1JlY29nbml6ZXJ8U3RyaW5nfSByZWNvZ25pemVyXG4gICAgICogQHJldHVybnMge01hbmFnZXJ9XG4gICAgICovXG4gICAgcmVtb3ZlOiBmdW5jdGlvbiByZW1vdmUocmVjb2duaXplcikge1xuICAgICAgaWYgKGludm9rZUFycmF5QXJnKHJlY29nbml6ZXIsICdyZW1vdmUnLCB0aGlzKSkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cblxuICAgICAgcmVjb2duaXplciA9IHRoaXMuZ2V0KHJlY29nbml6ZXIpOyAvLyBsZXQncyBtYWtlIHN1cmUgdGhpcyByZWNvZ25pemVyIGV4aXN0c1xuXG4gICAgICBpZiAocmVjb2duaXplcikge1xuICAgICAgICB2YXIgcmVjb2duaXplcnMgPSB0aGlzLnJlY29nbml6ZXJzO1xuICAgICAgICB2YXIgaW5kZXggPSBpbkFycmF5KHJlY29nbml6ZXJzLCByZWNvZ25pemVyKTtcblxuICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgcmVjb2duaXplcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICB0aGlzLnRvdWNoQWN0aW9uLnVwZGF0ZSgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBiaW5kIGV2ZW50XG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50c1xuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXJcbiAgICAgKiBAcmV0dXJucyB7RXZlbnRFbWl0dGVyfSB0aGlzXG4gICAgICovXG4gICAgb246IGZ1bmN0aW9uIG9uKGV2ZW50cywgaGFuZGxlcikge1xuICAgICAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGhhbmRsZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBoYW5kbGVycyA9IHRoaXMuaGFuZGxlcnM7XG4gICAgICBlYWNoKHNwbGl0U3RyKGV2ZW50cyksIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICBoYW5kbGVyc1tldmVudF0gPSBoYW5kbGVyc1tldmVudF0gfHwgW107XG4gICAgICAgIGhhbmRsZXJzW2V2ZW50XS5wdXNoKGhhbmRsZXIpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogdW5iaW5kIGV2ZW50LCBsZWF2ZSBlbWl0IGJsYW5rIHRvIHJlbW92ZSBhbGwgaGFuZGxlcnNcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gZXZlbnRzXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2hhbmRsZXJdXG4gICAgICogQHJldHVybnMge0V2ZW50RW1pdHRlcn0gdGhpc1xuICAgICAqL1xuICAgIG9mZjogZnVuY3Rpb24gb2ZmKGV2ZW50cywgaGFuZGxlcikge1xuICAgICAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIGhhbmRsZXJzID0gdGhpcy5oYW5kbGVycztcbiAgICAgIGVhY2goc3BsaXRTdHIoZXZlbnRzKSwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIGlmICghaGFuZGxlcikge1xuICAgICAgICAgIGRlbGV0ZSBoYW5kbGVyc1tldmVudF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaGFuZGxlcnNbZXZlbnRdICYmIGhhbmRsZXJzW2V2ZW50XS5zcGxpY2UoaW5BcnJheShoYW5kbGVyc1tldmVudF0sIGhhbmRsZXIpLCAxKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogZW1pdCBldmVudCB0byB0aGUgbGlzdGVuZXJzXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50XG4gICAgICogQHBhcmFtIHtPYmplY3R9IGRhdGFcbiAgICAgKi9cbiAgICBlbWl0OiBmdW5jdGlvbiBlbWl0KGV2ZW50LCBkYXRhKSB7XG4gICAgICAvLyB3ZSBhbHNvIHdhbnQgdG8gdHJpZ2dlciBkb20gZXZlbnRzXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmRvbUV2ZW50cykge1xuICAgICAgICB0cmlnZ2VyRG9tRXZlbnQoZXZlbnQsIGRhdGEpO1xuICAgICAgfSAvLyBubyBoYW5kbGVycywgc28gc2tpcCBpdCBhbGxcblxuXG4gICAgICB2YXIgaGFuZGxlcnMgPSB0aGlzLmhhbmRsZXJzW2V2ZW50XSAmJiB0aGlzLmhhbmRsZXJzW2V2ZW50XS5zbGljZSgpO1xuXG4gICAgICBpZiAoIWhhbmRsZXJzIHx8ICFoYW5kbGVycy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBkYXRhLnR5cGUgPSBldmVudDtcblxuICAgICAgZGF0YS5wcmV2ZW50RGVmYXVsdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZGF0YS5zcmNFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfTtcblxuICAgICAgdmFyIGkgPSAwO1xuXG4gICAgICB3aGlsZSAoaSA8IGhhbmRsZXJzLmxlbmd0aCkge1xuICAgICAgICBoYW5kbGVyc1tpXShkYXRhKTtcbiAgICAgICAgaSsrO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBkZXN0cm95IHRoZSBtYW5hZ2VyIGFuZCB1bmJpbmRzIGFsbCBldmVudHNcbiAgICAgKiBpdCBkb2Vzbid0IHVuYmluZCBkb20gZXZlbnRzLCB0aGF0IGlzIHRoZSB1c2VyIG93biByZXNwb25zaWJpbGl0eVxuICAgICAqL1xuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICB0aGlzLmVsZW1lbnQgJiYgdG9nZ2xlQ3NzUHJvcHModGhpcywgZmFsc2UpO1xuICAgICAgdGhpcy5oYW5kbGVycyA9IHt9O1xuICAgICAgdGhpcy5zZXNzaW9uID0ge307XG4gICAgICB0aGlzLmlucHV0LmRlc3Ryb3koKTtcbiAgICAgIHRoaXMuZWxlbWVudCA9IG51bGw7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogYWRkL3JlbW92ZSB0aGUgY3NzIHByb3BlcnRpZXMgYXMgZGVmaW5lZCBpbiBtYW5hZ2VyLm9wdGlvbnMuY3NzUHJvcHNcbiAgICogQHBhcmFtIHtNYW5hZ2VyfSBtYW5hZ2VyXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gYWRkXG4gICAqL1xuXG4gIGZ1bmN0aW9uIHRvZ2dsZUNzc1Byb3BzKG1hbmFnZXIsIGFkZCkge1xuICAgIHZhciBlbGVtZW50ID0gbWFuYWdlci5lbGVtZW50O1xuXG4gICAgaWYgKCFlbGVtZW50LnN0eWxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHByb3A7XG4gICAgZWFjaChtYW5hZ2VyLm9wdGlvbnMuY3NzUHJvcHMsIGZ1bmN0aW9uICh2YWx1ZSwgbmFtZSkge1xuICAgICAgcHJvcCA9IHByZWZpeGVkKGVsZW1lbnQuc3R5bGUsIG5hbWUpO1xuXG4gICAgICBpZiAoYWRkKSB7XG4gICAgICAgIG1hbmFnZXIub2xkQ3NzUHJvcHNbcHJvcF0gPSBlbGVtZW50LnN0eWxlW3Byb3BdO1xuICAgICAgICBlbGVtZW50LnN0eWxlW3Byb3BdID0gdmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbGVtZW50LnN0eWxlW3Byb3BdID0gbWFuYWdlci5vbGRDc3NQcm9wc1twcm9wXSB8fCAnJztcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICghYWRkKSB7XG4gICAgICBtYW5hZ2VyLm9sZENzc1Byb3BzID0ge307XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiB0cmlnZ2VyIGRvbSBldmVudFxuICAgKiBAcGFyYW0ge1N0cmluZ30gZXZlbnRcbiAgICogQHBhcmFtIHtPYmplY3R9IGRhdGFcbiAgICovXG5cblxuICBmdW5jdGlvbiB0cmlnZ2VyRG9tRXZlbnQoZXZlbnQsIGRhdGEpIHtcbiAgICB2YXIgZ2VzdHVyZUV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0V2ZW50Jyk7XG4gICAgZ2VzdHVyZUV2ZW50LmluaXRFdmVudChldmVudCwgdHJ1ZSwgdHJ1ZSk7XG4gICAgZ2VzdHVyZUV2ZW50Lmdlc3R1cmUgPSBkYXRhO1xuICAgIGRhdGEudGFyZ2V0LmRpc3BhdGNoRXZlbnQoZ2VzdHVyZUV2ZW50KTtcbiAgfVxuXG4gIGFzc2lnbihIYW1tZXIsIHtcbiAgICBJTlBVVF9TVEFSVDogSU5QVVRfU1RBUlQsXG4gICAgSU5QVVRfTU9WRTogSU5QVVRfTU9WRSxcbiAgICBJTlBVVF9FTkQ6IElOUFVUX0VORCxcbiAgICBJTlBVVF9DQU5DRUw6IElOUFVUX0NBTkNFTCxcbiAgICBTVEFURV9QT1NTSUJMRTogU1RBVEVfUE9TU0lCTEUsXG4gICAgU1RBVEVfQkVHQU46IFNUQVRFX0JFR0FOLFxuICAgIFNUQVRFX0NIQU5HRUQ6IFNUQVRFX0NIQU5HRUQsXG4gICAgU1RBVEVfRU5ERUQ6IFNUQVRFX0VOREVELFxuICAgIFNUQVRFX1JFQ09HTklaRUQ6IFNUQVRFX1JFQ09HTklaRUQsXG4gICAgU1RBVEVfQ0FOQ0VMTEVEOiBTVEFURV9DQU5DRUxMRUQsXG4gICAgU1RBVEVfRkFJTEVEOiBTVEFURV9GQUlMRUQsXG4gICAgRElSRUNUSU9OX05PTkU6IERJUkVDVElPTl9OT05FLFxuICAgIERJUkVDVElPTl9MRUZUOiBESVJFQ1RJT05fTEVGVCxcbiAgICBESVJFQ1RJT05fUklHSFQ6IERJUkVDVElPTl9SSUdIVCxcbiAgICBESVJFQ1RJT05fVVA6IERJUkVDVElPTl9VUCxcbiAgICBESVJFQ1RJT05fRE9XTjogRElSRUNUSU9OX0RPV04sXG4gICAgRElSRUNUSU9OX0hPUklaT05UQUw6IERJUkVDVElPTl9IT1JJWk9OVEFMLFxuICAgIERJUkVDVElPTl9WRVJUSUNBTDogRElSRUNUSU9OX1ZFUlRJQ0FMLFxuICAgIERJUkVDVElPTl9BTEw6IERJUkVDVElPTl9BTEwsXG4gICAgTWFuYWdlcjogTWFuYWdlcixcbiAgICBJbnB1dDogSW5wdXQsXG4gICAgVG91Y2hBY3Rpb246IFRvdWNoQWN0aW9uLFxuICAgIFRvdWNoSW5wdXQ6IFRvdWNoSW5wdXQsXG4gICAgTW91c2VJbnB1dDogTW91c2VJbnB1dCxcbiAgICBQb2ludGVyRXZlbnRJbnB1dDogUG9pbnRlckV2ZW50SW5wdXQsXG4gICAgVG91Y2hNb3VzZUlucHV0OiBUb3VjaE1vdXNlSW5wdXQsXG4gICAgU2luZ2xlVG91Y2hJbnB1dDogU2luZ2xlVG91Y2hJbnB1dCxcbiAgICBSZWNvZ25pemVyOiBSZWNvZ25pemVyLFxuICAgIEF0dHJSZWNvZ25pemVyOiBBdHRyUmVjb2duaXplcixcbiAgICBUYXA6IFRhcFJlY29nbml6ZXIsXG4gICAgUGFuOiBQYW5SZWNvZ25pemVyLFxuICAgIFN3aXBlOiBTd2lwZVJlY29nbml6ZXIsXG4gICAgUGluY2g6IFBpbmNoUmVjb2duaXplcixcbiAgICBSb3RhdGU6IFJvdGF0ZVJlY29nbml6ZXIsXG4gICAgUHJlc3M6IFByZXNzUmVjb2duaXplcixcbiAgICBvbjogYWRkRXZlbnRMaXN0ZW5lcnMsXG4gICAgb2ZmOiByZW1vdmVFdmVudExpc3RlbmVycyxcbiAgICBlYWNoOiBlYWNoLFxuICAgIG1lcmdlOiBtZXJnZSxcbiAgICBleHRlbmQ6IGV4dGVuZCxcbiAgICBhc3NpZ246IGFzc2lnbixcbiAgICBpbmhlcml0OiBpbmhlcml0LFxuICAgIGJpbmRGbjogYmluZEZuLFxuICAgIHByZWZpeGVkOiBwcmVmaXhlZFxuICB9KTsgLy8gdGhpcyBwcmV2ZW50cyBlcnJvcnMgd2hlbiBIYW1tZXIgaXMgbG9hZGVkIGluIHRoZSBwcmVzZW5jZSBvZiBhbiBBTURcbiAgLy8gIHN0eWxlIGxvYWRlciBidXQgYnkgc2NyaXB0IHRhZywgbm90IGJ5IHRoZSBsb2FkZXIuXG5cbiAgdmFyIGZyZWVHbG9iYWwgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyA/IHNlbGYgOiB7fTsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5cbiAgZnJlZUdsb2JhbC5IYW1tZXIgPSBIYW1tZXI7XG5cbiAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgIGRlZmluZShmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gSGFtbWVyO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBtb2R1bGUgIT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IEhhbW1lcjtcbiAgfSBlbHNlIHtcbiAgICB3aW5kb3dbZXhwb3J0TmFtZV0gPSBIYW1tZXI7XG4gIH1cbn0pKHdpbmRvdywgZG9jdW1lbnQsICdIYW1tZXInKTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5087\n")},1677:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval('var __webpack_unused_export__;\n\n\n__webpack_unused_export__ = ({\n value: true\n});\n\nfunction _interopDefault(ex) {\n return ex && typeof ex === \'object\' && \'default\' in ex ? ex[\'default\'] : ex;\n}\n\nvar React = __webpack_require__(7294);\n\nvar React__default = _interopDefault(React);\n\nvar UAParser = __webpack_require__(4889);\n\nvar UA = new UAParser();\nvar browser = UA.getBrowser();\nvar cpu = UA.getCPU();\nvar device = UA.getDevice();\nvar engine = UA.getEngine();\nvar os = UA.getOS();\nvar ua = UA.getUA();\n\nvar setDefaults = function setDefaults(p) {\n var d = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \'none\';\n return p ? p : d;\n};\n\nvar getNavigatorInstance = function getNavigatorInstance() {\n if (typeof window !== \'undefined\') {\n if (window.navigator || navigator) {\n return window.navigator || navigator;\n }\n }\n\n return false;\n};\n\nvar isIOS13Check = function isIOS13Check(type) {\n var nav = getNavigatorInstance();\n return nav && nav.platform && (nav.platform.indexOf(type) !== -1 || nav.platform === \'MacIntel\' && nav.maxTouchPoints > 1 && !window.MSStream);\n};\n\nfunction _typeof(obj) {\n if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError("Cannot call a class as a function");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ("value" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(source, true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(source).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== "function" && superClass !== null) {\n throw new TypeError("Super expression must either be null or a function");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called");\n }\n\n return self;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (typeof call === "object" || typeof call === "function")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nvar DeviceTypes = {\n Mobile: \'mobile\',\n Tablet: \'tablet\',\n SmartTv: \'smarttv\',\n Console: \'console\',\n Wearable: \'wearable\',\n Browser: undefined\n};\nvar BrowserTypes = {\n Chrome: \'Chrome\',\n Firefox: "Firefox",\n Opera: "Opera",\n Yandex: "Yandex",\n Safari: "Safari",\n InternetExplorer: "Internet Explorer",\n Edge: "Edge",\n Chromium: "Chromium",\n Ie: \'IE\',\n MobileSafari: "Mobile Safari",\n EdgeChromium: "Edge Chromium",\n MIUI: "MIUI Browser",\n SamsungBrowser: \'Samsung Browser\'\n};\nvar OsTypes = {\n IOS: \'iOS\',\n Android: "Android",\n WindowsPhone: "Windows Phone",\n Windows: \'Windows\',\n MAC_OS: \'Mac OS\'\n};\nvar initialData = {\n isMobile: false,\n isTablet: false,\n isBrowser: false,\n isSmartTV: false,\n isConsole: false,\n isWearable: false\n};\n\nvar checkType = function checkType(type) {\n switch (type) {\n case DeviceTypes.Mobile:\n return {\n isMobile: true\n };\n\n case DeviceTypes.Tablet:\n return {\n isTablet: true\n };\n\n case DeviceTypes.SmartTv:\n return {\n isSmartTV: true\n };\n\n case DeviceTypes.Console:\n return {\n isConsole: true\n };\n\n case DeviceTypes.Wearable:\n return {\n isWearable: true\n };\n\n case DeviceTypes.Browser:\n return {\n isBrowser: true\n };\n\n default:\n return initialData;\n }\n};\n\nvar broPayload = function broPayload(isBrowser, browser, engine, os, ua) {\n return {\n isBrowser: isBrowser,\n browserMajorVersion: setDefaults(browser.major),\n browserFullVersion: setDefaults(browser.version),\n browserName: setDefaults(browser.name),\n engineName: setDefaults(engine.name),\n engineVersion: setDefaults(engine.version),\n osName: setDefaults(os.name),\n osVersion: setDefaults(os.version),\n userAgent: setDefaults(ua)\n };\n};\n\nvar mobilePayload = function mobilePayload(type, device, os, ua) {\n return _objectSpread2({}, type, {\n vendor: setDefaults(device.vendor),\n model: setDefaults(device.model),\n os: setDefaults(os.name),\n osVersion: setDefaults(os.version),\n ua: setDefaults(ua)\n });\n};\n\nvar stvPayload = function stvPayload(isSmartTV, engine, os, ua) {\n return {\n isSmartTV: isSmartTV,\n engineName: setDefaults(engine.name),\n engineVersion: setDefaults(engine.version),\n osName: setDefaults(os.name),\n osVersion: setDefaults(os.version),\n userAgent: setDefaults(ua)\n };\n};\n\nvar consolePayload = function consolePayload(isConsole, engine, os, ua) {\n return {\n isConsole: isConsole,\n engineName: setDefaults(engine.name),\n engineVersion: setDefaults(engine.version),\n osName: setDefaults(os.name),\n osVersion: setDefaults(os.version),\n userAgent: setDefaults(ua)\n };\n};\n\nvar wearPayload = function wearPayload(isWearable, engine, os, ua) {\n return {\n isWearable: isWearable,\n engineName: setDefaults(engine.name),\n engineVersion: setDefaults(engine.version),\n osName: setDefaults(os.name),\n osVersion: setDefaults(os.version),\n userAgent: setDefaults(ua)\n };\n};\n\nvar type = checkType(device.type);\n\nfunction deviceDetect() {\n var isBrowser = type.isBrowser,\n isMobile = type.isMobile,\n isTablet = type.isTablet,\n isSmartTV = type.isSmartTV,\n isConsole = type.isConsole,\n isWearable = type.isWearable;\n\n if (isBrowser) {\n return broPayload(isBrowser, browser, engine, os, ua);\n }\n\n if (isSmartTV) {\n return stvPayload(isSmartTV, engine, os, ua);\n }\n\n if (isConsole) {\n return consolePayload(isConsole, engine, os, ua);\n }\n\n if (isMobile) {\n return mobilePayload(type, device, os, ua);\n }\n\n if (isTablet) {\n return mobilePayload(type, device, os, ua);\n }\n\n if (isWearable) {\n return wearPayload(isWearable, engine, os, ua);\n }\n}\n\nvar isMobileType = function isMobileType() {\n return device.type === DeviceTypes.Mobile;\n};\n\nvar isTabletType = function isTabletType() {\n return device.type === DeviceTypes.Tablet;\n};\n\nvar isMobileAndTabletType = function isMobileAndTabletType() {\n switch (device.type) {\n case DeviceTypes.Mobile:\n case DeviceTypes.Tablet:\n return true;\n\n default:\n return false;\n }\n};\n\nvar isEdgeChromiumType = function isEdgeChromiumType() {\n return typeof ua === \'string\' && ua.indexOf(\'Edg/\') !== -1;\n};\n\nvar isSmartTVType = function isSmartTVType() {\n return device.type === DeviceTypes.SmartTv;\n};\n\nvar isBrowserType = function isBrowserType() {\n return device.type === DeviceTypes.Browser;\n};\n\nvar isWearableType = function isWearableType() {\n return device.type === DeviceTypes.Wearable;\n};\n\nvar isConsoleType = function isConsoleType() {\n return device.type === DeviceTypes.Console;\n};\n\nvar isAndroidType = function isAndroidType() {\n return os.name === OsTypes.Android;\n};\n\nvar isWindowsType = function isWindowsType() {\n return os.name === OsTypes.Windows;\n};\n\nvar isMacOsType = function isMacOsType() {\n return os.name === OsTypes.MAC_OS;\n};\n\nvar isWinPhoneType = function isWinPhoneType() {\n return os.name === OsTypes.WindowsPhone;\n};\n\nvar isIOSType = function isIOSType() {\n return os.name === OsTypes.IOS;\n};\n\nvar isChromeType = function isChromeType() {\n return browser.name === BrowserTypes.Chrome;\n};\n\nvar isFirefoxType = function isFirefoxType() {\n return browser.name === BrowserTypes.Firefox;\n};\n\nvar isChromiumType = function isChromiumType() {\n return browser.name === BrowserTypes.Chromium;\n};\n\nvar isEdgeType = function isEdgeType() {\n return browser.name === BrowserTypes.Edge;\n};\n\nvar isYandexType = function isYandexType() {\n return browser.name === BrowserTypes.Yandex;\n};\n\nvar isSafariType = function isSafariType() {\n return browser.name === BrowserTypes.Safari || browser.name === BrowserTypes.MobileSafari;\n};\n\nvar isMobileSafariType = function isMobileSafariType() {\n return browser.name === BrowserTypes.MobileSafari;\n};\n\nvar isOperaType = function isOperaType() {\n return browser.name === BrowserTypes.Opera;\n};\n\nvar isIEType = function isIEType() {\n return browser.name === BrowserTypes.InternetExplorer || browser.name === BrowserTypes.Ie;\n};\n\nvar isMIUIType = function isMIUIType() {\n return browser.name === BrowserTypes.MIUI;\n};\n\nvar isSamsungBrowserType = function isSamsungBrowserType() {\n return browser.name === BrowserTypes.SamsungBrowser;\n};\n\nvar isElectronType = function isElectronType() {\n var nav = getNavigatorInstance();\n var ua = nav && nav.userAgent && nav.userAgent.toLowerCase();\n return typeof ua === \'string\' ? /electron/.test(ua) : false;\n};\n\nvar getIOS13 = function getIOS13() {\n var nav = getNavigatorInstance();\n return nav && (/iPad|iPhone|iPod/.test(nav.platform) || nav.platform === \'MacIntel\' && nav.maxTouchPoints > 1) && !window.MSStream;\n};\n\nvar getIPad13 = function getIPad13() {\n return isIOS13Check(\'iPad\');\n};\n\nvar getIphone13 = function getIphone13() {\n return isIOS13Check(\'iPhone\');\n};\n\nvar getIPod13 = function getIPod13() {\n return isIOS13Check(\'iPod\');\n};\n\nvar getBrowserFullVersion = function getBrowserFullVersion() {\n return setDefaults(browser.version);\n};\n\nvar getBrowserVersion = function getBrowserVersion() {\n return setDefaults(browser.major);\n};\n\nvar getOsVersion = function getOsVersion() {\n return setDefaults(os.version);\n};\n\nvar getOsName = function getOsName() {\n return setDefaults(os.name);\n};\n\nvar getBrowserName = function getBrowserName() {\n return setDefaults(browser.name);\n};\n\nvar getMobileVendor = function getMobileVendor() {\n return setDefaults(device.vendor);\n};\n\nvar getMobileModel = function getMobileModel() {\n return setDefaults(device.model);\n};\n\nvar getEngineName = function getEngineName() {\n return setDefaults(engine.name);\n};\n\nvar getEngineVersion = function getEngineVersion() {\n return setDefaults(engine.version);\n};\n\nvar getUseragent = function getUseragent() {\n return setDefaults(ua);\n};\n\nvar getDeviceType = function getDeviceType() {\n return setDefaults(device.type, \'browser\');\n};\n\nvar isSmartTV = isSmartTVType();\nvar isConsole = isConsoleType();\nvar isWearable = isWearableType();\nvar isMobileSafari = isMobileSafariType() || getIPad13();\nvar isChromium = isChromiumType();\nvar isMobile = isMobileAndTabletType() || getIPad13();\nvar isMobileOnly = isMobileType();\nvar isTablet = isTabletType() || getIPad13();\nvar isBrowser = isBrowserType();\nvar isDesktop = isBrowserType();\nvar isAndroid = isAndroidType();\nvar isWinPhone = isWinPhoneType();\nvar isIOS = isIOSType() || getIPad13();\nvar isChrome = isChromeType();\nvar isFirefox = isFirefoxType();\nvar isSafari = isSafariType();\nvar isOpera = isOperaType();\nvar isIE = isIEType();\nvar osVersion = getOsVersion();\nvar osName = getOsName();\nvar fullBrowserVersion = getBrowserFullVersion();\nvar browserVersion = getBrowserVersion();\nvar browserName = getBrowserName();\nvar mobileVendor = getMobileVendor();\nvar mobileModel = getMobileModel();\nvar engineName = getEngineName();\nvar engineVersion = getEngineVersion();\nvar getUA = getUseragent();\nvar isEdge = isEdgeType() || isEdgeChromiumType();\nvar isYandex = isYandexType();\nvar deviceType = getDeviceType();\nvar isIOS13 = getIOS13();\nvar isIPad13 = getIPad13();\nvar isIPhone13 = getIphone13();\nvar isIPod13 = getIPod13();\nvar isElectron = isElectronType();\nvar isEdgeChromium = isEdgeChromiumType();\nvar isLegacyEdge = isEdgeType() && !isEdgeChromiumType();\nvar isWindows = isWindowsType();\nvar isMacOs = isMacOsType();\nvar isMIUI = isMIUIType();\nvar isSamsungBrowser = isSamsungBrowserType();\n\nvar AndroidView = function AndroidView(_ref) {\n var renderWithFragment = _ref.renderWithFragment,\n children = _ref.children,\n viewClassName = _ref.viewClassName,\n style = _ref.style,\n props = _objectWithoutProperties(_ref, ["renderWithFragment", "children", "viewClassName", "style"]);\n\n return isAndroid ? renderWithFragment ? React__default.createElement(React.Fragment, null, children) : React__default.createElement("div", _extends({\n className: viewClassName,\n style: style\n }, props), children) : null;\n};\n\nvar BrowserView = function BrowserView(_ref2) {\n var renderWithFragment = _ref2.renderWithFragment,\n children = _ref2.children,\n viewClassName = _ref2.viewClassName,\n style = _ref2.style,\n props = _objectWithoutProperties(_ref2, ["renderWithFragment", "children", "viewClassName", "style"]);\n\n return isBrowser ? renderWithFragment ? React__default.createElement(React.Fragment, null, children) : React__default.createElement("div", _extends({\n className: viewClassName,\n style: style\n }, props), children) : null;\n};\n\nvar IEView = function IEView(_ref3) {\n var renderWithFragment = _ref3.renderWithFragment,\n children = _ref3.children,\n viewClassName = _ref3.viewClassName,\n style = _ref3.style,\n props = _objectWithoutProperties(_ref3, ["renderWithFragment", "children", "viewClassName", "style"]);\n\n return isIE ? renderWithFragment ? React__default.createElement(React.Fragment, null, children) : React__default.createElement("div", _extends({\n className: viewClassName,\n style: style\n }, props), children) : null;\n};\n\nvar IOSView = function IOSView(_ref4) {\n var renderWithFragment = _ref4.renderWithFragment,\n children = _ref4.children,\n viewClassName = _ref4.viewClassName,\n style = _ref4.style,\n props = _objectWithoutProperties(_ref4, ["renderWithFragment", "children", "viewClassName", "style"]);\n\n return isIOS ? renderWithFragment ? React__default.createElement(React.Fragment, null, children) : React__default.createElement("div", _extends({\n className: viewClassName,\n style: style\n }, props), children) : null;\n};\n\nvar MobileView = function MobileView(_ref5) {\n var renderWithFragment = _ref5.renderWithFragment,\n children = _ref5.children,\n viewClassName = _ref5.viewClassName,\n style = _ref5.style,\n props = _objectWithoutProperties(_ref5, ["renderWithFragment", "children", "viewClassName", "style"]);\n\n return isMobile ? renderWithFragment ? React__default.createElement(React.Fragment, null, children) : React__default.createElement("div", _extends({\n className: viewClassName,\n style: style\n }, props), children) : null;\n};\n\nvar TabletView = function TabletView(_ref6) {\n var renderWithFragment = _ref6.renderWithFragment,\n children = _ref6.children,\n viewClassName = _ref6.viewClassName,\n style = _ref6.style,\n props = _objectWithoutProperties(_ref6, ["renderWithFragment", "children", "viewClassName", "style"]);\n\n return isTablet ? renderWithFragment ? React__default.createElement(React.Fragment, null, children) : React__default.createElement("div", _extends({\n className: viewClassName,\n style: style\n }, props), children) : null;\n};\n\nvar WinPhoneView = function WinPhoneView(_ref7) {\n var renderWithFragment = _ref7.renderWithFragment,\n children = _ref7.children,\n viewClassName = _ref7.viewClassName,\n style = _ref7.style,\n props = _objectWithoutProperties(_ref7, ["renderWithFragment", "children", "viewClassName", "style"]);\n\n return isWinPhone ? renderWithFragment ? React__default.createElement(React.Fragment, null, children) : React__default.createElement("div", _extends({\n className: viewClassName,\n style: style\n }, props), children) : null;\n};\n\nvar MobileOnlyView = function MobileOnlyView(_ref8) {\n var renderWithFragment = _ref8.renderWithFragment,\n children = _ref8.children,\n viewClassName = _ref8.viewClassName,\n style = _ref8.style,\n props = _objectWithoutProperties(_ref8, ["renderWithFragment", "children", "viewClassName", "style"]);\n\n return isMobileOnly ? renderWithFragment ? React__default.createElement(React.Fragment, null, children) : React__default.createElement("div", _extends({\n className: viewClassName,\n style: style\n }, props), children) : null;\n};\n\nvar SmartTVView = function SmartTVView(_ref9) {\n var renderWithFragment = _ref9.renderWithFragment,\n children = _ref9.children,\n viewClassName = _ref9.viewClassName,\n style = _ref9.style,\n props = _objectWithoutProperties(_ref9, ["renderWithFragment", "children", "viewClassName", "style"]);\n\n return isSmartTV ? renderWithFragment ? React__default.createElement(React.Fragment, null, children) : React__default.createElement("div", _extends({\n className: viewClassName,\n style: style\n }, props), children) : null;\n};\n\nvar ConsoleView = function ConsoleView(_ref10) {\n var renderWithFragment = _ref10.renderWithFragment,\n children = _ref10.children,\n viewClassName = _ref10.viewClassName,\n style = _ref10.style,\n props = _objectWithoutProperties(_ref10, ["renderWithFragment", "children", "viewClassName", "style"]);\n\n return isConsole ? renderWithFragment ? React__default.createElement(React.Fragment, null, children) : React__default.createElement("div", _extends({\n className: viewClassName,\n style: style\n }, props), children) : null;\n};\n\nvar WearableView = function WearableView(_ref11) {\n var renderWithFragment = _ref11.renderWithFragment,\n children = _ref11.children,\n viewClassName = _ref11.viewClassName,\n style = _ref11.style,\n props = _objectWithoutProperties(_ref11, ["renderWithFragment", "children", "viewClassName", "style"]);\n\n return isWearable ? renderWithFragment ? React__default.createElement(React.Fragment, null, children) : React__default.createElement("div", _extends({\n className: viewClassName,\n style: style\n }, props), children) : null;\n};\n\nvar CustomView = function CustomView(_ref12) {\n var renderWithFragment = _ref12.renderWithFragment,\n children = _ref12.children,\n viewClassName = _ref12.viewClassName,\n style = _ref12.style,\n condition = _ref12.condition,\n props = _objectWithoutProperties(_ref12, ["renderWithFragment", "children", "viewClassName", "style", "condition"]);\n\n return condition ? renderWithFragment ? React__default.createElement(React.Fragment, null, children) : React__default.createElement("div", _extends({\n className: viewClassName,\n style: style\n }, props), children) : null;\n};\n\nfunction withOrientationChange(WrappedComponent) {\n return /*#__PURE__*/function (_React$Component) {\n _inherits(_class, _React$Component);\n\n function _class(props) {\n var _this;\n\n _classCallCheck(this, _class);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(_class).call(this, props));\n _this.isEventListenerAdded = false;\n _this.handleOrientationChange = _this.handleOrientationChange.bind(_assertThisInitialized(_this));\n _this.onOrientationChange = _this.onOrientationChange.bind(_assertThisInitialized(_this));\n _this.onPageLoad = _this.onPageLoad.bind(_assertThisInitialized(_this));\n _this.state = {\n isLandscape: false,\n isPortrait: false\n };\n return _this;\n }\n\n _createClass(_class, [{\n key: "handleOrientationChange",\n value: function handleOrientationChange() {\n if (!this.isEventListenerAdded) {\n this.isEventListenerAdded = true;\n }\n\n var orientation = window.innerWidth > window.innerHeight ? 90 : 0;\n this.setState({\n isPortrait: orientation === 0,\n isLandscape: orientation === 90\n });\n }\n }, {\n key: "onOrientationChange",\n value: function onOrientationChange() {\n this.handleOrientationChange();\n }\n }, {\n key: "onPageLoad",\n value: function onPageLoad() {\n this.handleOrientationChange();\n }\n }, {\n key: "componentDidMount",\n value: function componentDidMount() {\n if ((typeof window === "undefined" ? "undefined" : _typeof(window)) !== undefined && isMobile) {\n if (!this.isEventListenerAdded) {\n this.handleOrientationChange();\n window.addEventListener("load", this.onPageLoad, false);\n } else {\n window.removeEventListener("load", this.onPageLoad, false);\n }\n\n window.addEventListener("resize", this.onOrientationChange, false);\n }\n }\n }, {\n key: "componentWillUnmount",\n value: function componentWillUnmount() {\n window.removeEventListener("resize", this.onOrientationChange, false);\n }\n }, {\n key: "render",\n value: function render() {\n return React__default.createElement(WrappedComponent, _extends({}, this.props, {\n isLandscape: this.state.isLandscape,\n isPortrait: this.state.isPortrait\n }));\n }\n }]);\n\n return _class;\n }(React__default.Component);\n}\n\n__webpack_unused_export__ = AndroidView;\n__webpack_unused_export__ = BrowserTypes;\n__webpack_unused_export__ = BrowserView;\n__webpack_unused_export__ = ConsoleView;\n__webpack_unused_export__ = CustomView;\n__webpack_unused_export__ = IEView;\n__webpack_unused_export__ = IOSView;\n__webpack_unused_export__ = MobileOnlyView;\n__webpack_unused_export__ = MobileView;\n__webpack_unused_export__ = OsTypes;\n__webpack_unused_export__ = SmartTVView;\n__webpack_unused_export__ = TabletView;\n__webpack_unused_export__ = WearableView;\n__webpack_unused_export__ = WinPhoneView;\n__webpack_unused_export__ = browserName;\n__webpack_unused_export__ = browserVersion;\n__webpack_unused_export__ = deviceDetect;\n__webpack_unused_export__ = deviceType;\n__webpack_unused_export__ = engineName;\n__webpack_unused_export__ = engineVersion;\n__webpack_unused_export__ = fullBrowserVersion;\n__webpack_unused_export__ = getUA;\n__webpack_unused_export__ = isAndroid;\n__webpack_unused_export__ = isBrowser;\n__webpack_unused_export__ = isChrome;\n__webpack_unused_export__ = isChromium;\n__webpack_unused_export__ = isConsole;\n__webpack_unused_export__ = isDesktop;\n__webpack_unused_export__ = isEdge;\n__webpack_unused_export__ = isEdgeChromium;\n__webpack_unused_export__ = isElectron;\n__webpack_unused_export__ = isFirefox;\n__webpack_unused_export__ = isIE;\n__webpack_unused_export__ = isIOS;\n__webpack_unused_export__ = isIOS13;\n__webpack_unused_export__ = isIPad13;\n__webpack_unused_export__ = isIPhone13;\n__webpack_unused_export__ = isIPod13;\n__webpack_unused_export__ = isLegacyEdge;\n__webpack_unused_export__ = isMIUI;\n__webpack_unused_export__ = isMacOs;\nexports.tq = isMobile;\n__webpack_unused_export__ = isMobileOnly;\n__webpack_unused_export__ = isMobileSafari;\n__webpack_unused_export__ = isOpera;\n__webpack_unused_export__ = isSafari;\n__webpack_unused_export__ = isSamsungBrowser;\n__webpack_unused_export__ = isSmartTV;\n__webpack_unused_export__ = isTablet;\n__webpack_unused_export__ = isWearable;\n__webpack_unused_export__ = isWinPhone;\n__webpack_unused_export__ = isWindows;\n__webpack_unused_export__ = isYandex;\n__webpack_unused_export__ = mobileModel;\n__webpack_unused_export__ = mobileVendor;\n__webpack_unused_export__ = osName;\n__webpack_unused_export__ = osVersion;\n__webpack_unused_export__ = withOrientationChange;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9yZWFjdC1kZXZpY2UtZGV0ZWN0L21haW4uanM/N2I2OSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQWE7O0FBRWIsNkJBQTZDO0FBQzdDO0FBQ0EsQ0FBQyxDQUFDOztBQUVGO0FBQ0E7QUFDQTs7QUFFQSxZQUFZLG1CQUFPLENBQUMsSUFBTzs7QUFFM0I7O0FBRUEsZUFBZSxtQkFBTyxDQUFDLElBQWlDOztBQUV4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGlCQUFpQixrQkFBa0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUIsc0JBQXNCO0FBQ3pDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxpQkFBaUIsc0JBQXNCO0FBQ3ZDOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGFBQWEsdUJBQXVCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLGVBQWUsNkJBQTZCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLHlFQUF5RTtBQUN6RTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLEdBQUc7QUFDSDs7QUFFQSx5QkFBbUI7QUFDbkIseUJBQW9CO0FBQ3BCLHlCQUFtQjtBQUNuQix5QkFBbUI7QUFDbkIseUJBQWtCO0FBQ2xCLHlCQUFjO0FBQ2QseUJBQWU7QUFDZix5QkFBc0I7QUFDdEIseUJBQWtCO0FBQ2xCLHlCQUFlO0FBQ2YseUJBQW1CO0FBQ25CLHlCQUFrQjtBQUNsQix5QkFBb0I7QUFDcEIseUJBQW9CO0FBQ3BCLHlCQUFtQjtBQUNuQix5QkFBc0I7QUFDdEIseUJBQW9CO0FBQ3BCLHlCQUFrQjtBQUNsQix5QkFBa0I7QUFDbEIseUJBQXFCO0FBQ3JCLHlCQUEwQjtBQUMxQix5QkFBYTtBQUNiLHlCQUFpQjtBQUNqQix5QkFBaUI7QUFDakIseUJBQWdCO0FBQ2hCLHlCQUFrQjtBQUNsQix5QkFBaUI7QUFDakIseUJBQWlCO0FBQ2pCLHlCQUFjO0FBQ2QseUJBQXNCO0FBQ3RCLHlCQUFrQjtBQUNsQix5QkFBaUI7QUFDakIseUJBQVk7QUFDWix5QkFBYTtBQUNiLHlCQUFlO0FBQ2YseUJBQWdCO0FBQ2hCLHlCQUFrQjtBQUNsQix5QkFBZ0I7QUFDaEIseUJBQW9CO0FBQ3BCLHlCQUFjO0FBQ2QseUJBQWU7QUFDZixVQUFnQjtBQUNoQix5QkFBb0I7QUFDcEIseUJBQXNCO0FBQ3RCLHlCQUFlO0FBQ2YseUJBQWdCO0FBQ2hCLHlCQUF3QjtBQUN4Qix5QkFBaUI7QUFDakIseUJBQWdCO0FBQ2hCLHlCQUFrQjtBQUNsQix5QkFBa0I7QUFDbEIseUJBQWlCO0FBQ2pCLHlCQUFnQjtBQUNoQix5QkFBbUI7QUFDbkIseUJBQW9CO0FBQ3BCLHlCQUFjO0FBQ2QseUJBQWlCO0FBQ2pCLHlCQUE2QiIsImZpbGUiOiIxNjc3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxuZnVuY3Rpb24gX2ludGVyb3BEZWZhdWx0KGV4KSB7XG4gIHJldHVybiBleCAmJiB0eXBlb2YgZXggPT09ICdvYmplY3QnICYmICdkZWZhdWx0JyBpbiBleCA/IGV4WydkZWZhdWx0J10gOiBleDtcbn1cblxudmFyIFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcblxudmFyIFJlYWN0X19kZWZhdWx0ID0gX2ludGVyb3BEZWZhdWx0KFJlYWN0KTtcblxudmFyIFVBUGFyc2VyID0gcmVxdWlyZSgndWEtcGFyc2VyLWpzL2Rpc3QvdWEtcGFyc2VyLm1pbicpO1xuXG52YXIgVUEgPSBuZXcgVUFQYXJzZXIoKTtcbnZhciBicm93c2VyID0gVUEuZ2V0QnJvd3NlcigpO1xudmFyIGNwdSA9IFVBLmdldENQVSgpO1xudmFyIGRldmljZSA9IFVBLmdldERldmljZSgpO1xudmFyIGVuZ2luZSA9IFVBLmdldEVuZ2luZSgpO1xudmFyIG9zID0gVUEuZ2V0T1MoKTtcbnZhciB1YSA9IFVBLmdldFVBKCk7XG5cbnZhciBzZXREZWZhdWx0cyA9IGZ1bmN0aW9uIHNldERlZmF1bHRzKHApIHtcbiAgdmFyIGQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6ICdub25lJztcbiAgcmV0dXJuIHAgPyBwIDogZDtcbn07XG5cbnZhciBnZXROYXZpZ2F0b3JJbnN0YW5jZSA9IGZ1bmN0aW9uIGdldE5hdmlnYXRvckluc3RhbmNlKCkge1xuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBpZiAod2luZG93Lm5hdmlnYXRvciB8fCBuYXZpZ2F0b3IpIHtcbiAgICAgIHJldHVybiB3aW5kb3cubmF2aWdhdG9yIHx8IG5hdmlnYXRvcjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59O1xuXG52YXIgaXNJT1MxM0NoZWNrID0gZnVuY3Rpb24gaXNJT1MxM0NoZWNrKHR5cGUpIHtcbiAgdmFyIG5hdiA9IGdldE5hdmlnYXRvckluc3RhbmNlKCk7XG4gIHJldHVybiBuYXYgJiYgbmF2LnBsYXRmb3JtICYmIChuYXYucGxhdGZvcm0uaW5kZXhPZih0eXBlKSAhPT0gLTEgfHwgbmF2LnBsYXRmb3JtID09PSAnTWFjSW50ZWwnICYmIG5hdi5tYXhUb3VjaFBvaW50cyA+IDEgJiYgIXdpbmRvdy5NU1N0cmVhbSk7XG59O1xuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHtcbiAgICBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgICAgIHJldHVybiB0eXBlb2Ygb2JqO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gICAgICByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIF90eXBlb2Yob2JqKTtcbn1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgcmV0dXJuIENvbnN0cnVjdG9yO1xufVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIG9iajtcbn1cblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7XG4gIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07XG5cbiAgICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHtcbiAgICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfTtcblxuICByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn1cblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7XG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTtcblxuICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICAgIHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpO1xuICAgIGlmIChlbnVtZXJhYmxlT25seSkgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHtcbiAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlO1xuICAgIH0pO1xuICAgIGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTtcbiAgfVxuXG4gIHJldHVybiBrZXlzO1xufVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkMih0YXJnZXQpIHtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTtcblxuICAgIGlmIChpICUgMikge1xuICAgICAgb3duS2V5cyhzb3VyY2UsIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG93bktleXMoc291cmNlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTtcbiAgfVxuXG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwge1xuICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICB2YWx1ZTogc3ViQ2xhc3MsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH1cbiAgfSk7XG4gIGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICAgIHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7XG4gIH07XG4gIHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7XG59XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgIG8uX19wcm90b19fID0gcDtcbiAgICByZXR1cm4gbztcbiAgfTtcblxuICByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApO1xufVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7XG4gIGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9O1xuICB2YXIgdGFyZ2V0ID0ge307XG4gIHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTtcbiAgdmFyIGtleSwgaTtcblxuICBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGtleSA9IHNvdXJjZUtleXNbaV07XG4gICAgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTtcbiAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHtcbiAgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307XG5cbiAgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpO1xuXG4gIHZhciBrZXksIGk7XG5cbiAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldO1xuICAgICAgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTtcbiAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7XG4gICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikge1xuICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG5cbiAgcmV0dXJuIHNlbGY7XG59XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHtcbiAgaWYgKGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7XG4gICAgcmV0dXJuIGNhbGw7XG4gIH1cblxuICByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTtcbn1cblxudmFyIERldmljZVR5cGVzID0ge1xuICBNb2JpbGU6ICdtb2JpbGUnLFxuICBUYWJsZXQ6ICd0YWJsZXQnLFxuICBTbWFydFR2OiAnc21hcnR0dicsXG4gIENvbnNvbGU6ICdjb25zb2xlJyxcbiAgV2VhcmFibGU6ICd3ZWFyYWJsZScsXG4gIEJyb3dzZXI6IHVuZGVmaW5lZFxufTtcbnZhciBCcm93c2VyVHlwZXMgPSB7XG4gIENocm9tZTogJ0Nocm9tZScsXG4gIEZpcmVmb3g6IFwiRmlyZWZveFwiLFxuICBPcGVyYTogXCJPcGVyYVwiLFxuICBZYW5kZXg6IFwiWWFuZGV4XCIsXG4gIFNhZmFyaTogXCJTYWZhcmlcIixcbiAgSW50ZXJuZXRFeHBsb3JlcjogXCJJbnRlcm5ldCBFeHBsb3JlclwiLFxuICBFZGdlOiBcIkVkZ2VcIixcbiAgQ2hyb21pdW06IFwiQ2hyb21pdW1cIixcbiAgSWU6ICdJRScsXG4gIE1vYmlsZVNhZmFyaTogXCJNb2JpbGUgU2FmYXJpXCIsXG4gIEVkZ2VDaHJvbWl1bTogXCJFZGdlIENocm9taXVtXCIsXG4gIE1JVUk6IFwiTUlVSSBCcm93c2VyXCIsXG4gIFNhbXN1bmdCcm93c2VyOiAnU2Ftc3VuZyBCcm93c2VyJ1xufTtcbnZhciBPc1R5cGVzID0ge1xuICBJT1M6ICdpT1MnLFxuICBBbmRyb2lkOiBcIkFuZHJvaWRcIixcbiAgV2luZG93c1Bob25lOiBcIldpbmRvd3MgUGhvbmVcIixcbiAgV2luZG93czogJ1dpbmRvd3MnLFxuICBNQUNfT1M6ICdNYWMgT1MnXG59O1xudmFyIGluaXRpYWxEYXRhID0ge1xuICBpc01vYmlsZTogZmFsc2UsXG4gIGlzVGFibGV0OiBmYWxzZSxcbiAgaXNCcm93c2VyOiBmYWxzZSxcbiAgaXNTbWFydFRWOiBmYWxzZSxcbiAgaXNDb25zb2xlOiBmYWxzZSxcbiAgaXNXZWFyYWJsZTogZmFsc2Vcbn07XG5cbnZhciBjaGVja1R5cGUgPSBmdW5jdGlvbiBjaGVja1R5cGUodHlwZSkge1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIERldmljZVR5cGVzLk1vYmlsZTpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlzTW9iaWxlOiB0cnVlXG4gICAgICB9O1xuXG4gICAgY2FzZSBEZXZpY2VUeXBlcy5UYWJsZXQ6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpc1RhYmxldDogdHJ1ZVxuICAgICAgfTtcblxuICAgIGNhc2UgRGV2aWNlVHlwZXMuU21hcnRUdjpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlzU21hcnRUVjogdHJ1ZVxuICAgICAgfTtcblxuICAgIGNhc2UgRGV2aWNlVHlwZXMuQ29uc29sZTpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlzQ29uc29sZTogdHJ1ZVxuICAgICAgfTtcblxuICAgIGNhc2UgRGV2aWNlVHlwZXMuV2VhcmFibGU6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpc1dlYXJhYmxlOiB0cnVlXG4gICAgICB9O1xuXG4gICAgY2FzZSBEZXZpY2VUeXBlcy5Ccm93c2VyOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaXNCcm93c2VyOiB0cnVlXG4gICAgICB9O1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBpbml0aWFsRGF0YTtcbiAgfVxufTtcblxudmFyIGJyb1BheWxvYWQgPSBmdW5jdGlvbiBicm9QYXlsb2FkKGlzQnJvd3NlciwgYnJvd3NlciwgZW5naW5lLCBvcywgdWEpIHtcbiAgcmV0dXJuIHtcbiAgICBpc0Jyb3dzZXI6IGlzQnJvd3NlcixcbiAgICBicm93c2VyTWFqb3JWZXJzaW9uOiBzZXREZWZhdWx0cyhicm93c2VyLm1ham9yKSxcbiAgICBicm93c2VyRnVsbFZlcnNpb246IHNldERlZmF1bHRzKGJyb3dzZXIudmVyc2lvbiksXG4gICAgYnJvd3Nlck5hbWU6IHNldERlZmF1bHRzKGJyb3dzZXIubmFtZSksXG4gICAgZW5naW5lTmFtZTogc2V0RGVmYXVsdHMoZW5naW5lLm5hbWUpLFxuICAgIGVuZ2luZVZlcnNpb246IHNldERlZmF1bHRzKGVuZ2luZS52ZXJzaW9uKSxcbiAgICBvc05hbWU6IHNldERlZmF1bHRzKG9zLm5hbWUpLFxuICAgIG9zVmVyc2lvbjogc2V0RGVmYXVsdHMob3MudmVyc2lvbiksXG4gICAgdXNlckFnZW50OiBzZXREZWZhdWx0cyh1YSlcbiAgfTtcbn07XG5cbnZhciBtb2JpbGVQYXlsb2FkID0gZnVuY3Rpb24gbW9iaWxlUGF5bG9hZCh0eXBlLCBkZXZpY2UsIG9zLCB1YSkge1xuICByZXR1cm4gX29iamVjdFNwcmVhZDIoe30sIHR5cGUsIHtcbiAgICB2ZW5kb3I6IHNldERlZmF1bHRzKGRldmljZS52ZW5kb3IpLFxuICAgIG1vZGVsOiBzZXREZWZhdWx0cyhkZXZpY2UubW9kZWwpLFxuICAgIG9zOiBzZXREZWZhdWx0cyhvcy5uYW1lKSxcbiAgICBvc1ZlcnNpb246IHNldERlZmF1bHRzKG9zLnZlcnNpb24pLFxuICAgIHVhOiBzZXREZWZhdWx0cyh1YSlcbiAgfSk7XG59O1xuXG52YXIgc3R2UGF5bG9hZCA9IGZ1bmN0aW9uIHN0dlBheWxvYWQoaXNTbWFydFRWLCBlbmdpbmUsIG9zLCB1YSkge1xuICByZXR1cm4ge1xuICAgIGlzU21hcnRUVjogaXNTbWFydFRWLFxuICAgIGVuZ2luZU5hbWU6IHNldERlZmF1bHRzKGVuZ2luZS5uYW1lKSxcbiAgICBlbmdpbmVWZXJzaW9uOiBzZXREZWZhdWx0cyhlbmdpbmUudmVyc2lvbiksXG4gICAgb3NOYW1lOiBzZXREZWZhdWx0cyhvcy5uYW1lKSxcbiAgICBvc1ZlcnNpb246IHNldERlZmF1bHRzKG9zLnZlcnNpb24pLFxuICAgIHVzZXJBZ2VudDogc2V0RGVmYXVsdHModWEpXG4gIH07XG59O1xuXG52YXIgY29uc29sZVBheWxvYWQgPSBmdW5jdGlvbiBjb25zb2xlUGF5bG9hZChpc0NvbnNvbGUsIGVuZ2luZSwgb3MsIHVhKSB7XG4gIHJldHVybiB7XG4gICAgaXNDb25zb2xlOiBpc0NvbnNvbGUsXG4gICAgZW5naW5lTmFtZTogc2V0RGVmYXVsdHMoZW5naW5lLm5hbWUpLFxuICAgIGVuZ2luZVZlcnNpb246IHNldERlZmF1bHRzKGVuZ2luZS52ZXJzaW9uKSxcbiAgICBvc05hbWU6IHNldERlZmF1bHRzKG9zLm5hbWUpLFxuICAgIG9zVmVyc2lvbjogc2V0RGVmYXVsdHMob3MudmVyc2lvbiksXG4gICAgdXNlckFnZW50OiBzZXREZWZhdWx0cyh1YSlcbiAgfTtcbn07XG5cbnZhciB3ZWFyUGF5bG9hZCA9IGZ1bmN0aW9uIHdlYXJQYXlsb2FkKGlzV2VhcmFibGUsIGVuZ2luZSwgb3MsIHVhKSB7XG4gIHJldHVybiB7XG4gICAgaXNXZWFyYWJsZTogaXNXZWFyYWJsZSxcbiAgICBlbmdpbmVOYW1lOiBzZXREZWZhdWx0cyhlbmdpbmUubmFtZSksXG4gICAgZW5naW5lVmVyc2lvbjogc2V0RGVmYXVsdHMoZW5naW5lLnZlcnNpb24pLFxuICAgIG9zTmFtZTogc2V0RGVmYXVsdHMob3MubmFtZSksXG4gICAgb3NWZXJzaW9uOiBzZXREZWZhdWx0cyhvcy52ZXJzaW9uKSxcbiAgICB1c2VyQWdlbnQ6IHNldERlZmF1bHRzKHVhKVxuICB9O1xufTtcblxudmFyIHR5cGUgPSBjaGVja1R5cGUoZGV2aWNlLnR5cGUpO1xuXG5mdW5jdGlvbiBkZXZpY2VEZXRlY3QoKSB7XG4gIHZhciBpc0Jyb3dzZXIgPSB0eXBlLmlzQnJvd3NlcixcbiAgICAgIGlzTW9iaWxlID0gdHlwZS5pc01vYmlsZSxcbiAgICAgIGlzVGFibGV0ID0gdHlwZS5pc1RhYmxldCxcbiAgICAgIGlzU21hcnRUViA9IHR5cGUuaXNTbWFydFRWLFxuICAgICAgaXNDb25zb2xlID0gdHlwZS5pc0NvbnNvbGUsXG4gICAgICBpc1dlYXJhYmxlID0gdHlwZS5pc1dlYXJhYmxlO1xuXG4gIGlmIChpc0Jyb3dzZXIpIHtcbiAgICByZXR1cm4gYnJvUGF5bG9hZChpc0Jyb3dzZXIsIGJyb3dzZXIsIGVuZ2luZSwgb3MsIHVhKTtcbiAgfVxuXG4gIGlmIChpc1NtYXJ0VFYpIHtcbiAgICByZXR1cm4gc3R2UGF5bG9hZChpc1NtYXJ0VFYsIGVuZ2luZSwgb3MsIHVhKTtcbiAgfVxuXG4gIGlmIChpc0NvbnNvbGUpIHtcbiAgICByZXR1cm4gY29uc29sZVBheWxvYWQoaXNDb25zb2xlLCBlbmdpbmUsIG9zLCB1YSk7XG4gIH1cblxuICBpZiAoaXNNb2JpbGUpIHtcbiAgICByZXR1cm4gbW9iaWxlUGF5bG9hZCh0eXBlLCBkZXZpY2UsIG9zLCB1YSk7XG4gIH1cblxuICBpZiAoaXNUYWJsZXQpIHtcbiAgICByZXR1cm4gbW9iaWxlUGF5bG9hZCh0eXBlLCBkZXZpY2UsIG9zLCB1YSk7XG4gIH1cblxuICBpZiAoaXNXZWFyYWJsZSkge1xuICAgIHJldHVybiB3ZWFyUGF5bG9hZChpc1dlYXJhYmxlLCBlbmdpbmUsIG9zLCB1YSk7XG4gIH1cbn1cblxudmFyIGlzTW9iaWxlVHlwZSA9IGZ1bmN0aW9uIGlzTW9iaWxlVHlwZSgpIHtcbiAgcmV0dXJuIGRldmljZS50eXBlID09PSBEZXZpY2VUeXBlcy5Nb2JpbGU7XG59O1xuXG52YXIgaXNUYWJsZXRUeXBlID0gZnVuY3Rpb24gaXNUYWJsZXRUeXBlKCkge1xuICByZXR1cm4gZGV2aWNlLnR5cGUgPT09IERldmljZVR5cGVzLlRhYmxldDtcbn07XG5cbnZhciBpc01vYmlsZUFuZFRhYmxldFR5cGUgPSBmdW5jdGlvbiBpc01vYmlsZUFuZFRhYmxldFR5cGUoKSB7XG4gIHN3aXRjaCAoZGV2aWNlLnR5cGUpIHtcbiAgICBjYXNlIERldmljZVR5cGVzLk1vYmlsZTpcbiAgICBjYXNlIERldmljZVR5cGVzLlRhYmxldDpcbiAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxudmFyIGlzRWRnZUNocm9taXVtVHlwZSA9IGZ1bmN0aW9uIGlzRWRnZUNocm9taXVtVHlwZSgpIHtcbiAgcmV0dXJuIHR5cGVvZiB1YSA9PT0gJ3N0cmluZycgJiYgdWEuaW5kZXhPZignRWRnLycpICE9PSAtMTtcbn07XG5cbnZhciBpc1NtYXJ0VFZUeXBlID0gZnVuY3Rpb24gaXNTbWFydFRWVHlwZSgpIHtcbiAgcmV0dXJuIGRldmljZS50eXBlID09PSBEZXZpY2VUeXBlcy5TbWFydFR2O1xufTtcblxudmFyIGlzQnJvd3NlclR5cGUgPSBmdW5jdGlvbiBpc0Jyb3dzZXJUeXBlKCkge1xuICByZXR1cm4gZGV2aWNlLnR5cGUgPT09IERldmljZVR5cGVzLkJyb3dzZXI7XG59O1xuXG52YXIgaXNXZWFyYWJsZVR5cGUgPSBmdW5jdGlvbiBpc1dlYXJhYmxlVHlwZSgpIHtcbiAgcmV0dXJuIGRldmljZS50eXBlID09PSBEZXZpY2VUeXBlcy5XZWFyYWJsZTtcbn07XG5cbnZhciBpc0NvbnNvbGVUeXBlID0gZnVuY3Rpb24gaXNDb25zb2xlVHlwZSgpIHtcbiAgcmV0dXJuIGRldmljZS50eXBlID09PSBEZXZpY2VUeXBlcy5Db25zb2xlO1xufTtcblxudmFyIGlzQW5kcm9pZFR5cGUgPSBmdW5jdGlvbiBpc0FuZHJvaWRUeXBlKCkge1xuICByZXR1cm4gb3MubmFtZSA9PT0gT3NUeXBlcy5BbmRyb2lkO1xufTtcblxudmFyIGlzV2luZG93c1R5cGUgPSBmdW5jdGlvbiBpc1dpbmRvd3NUeXBlKCkge1xuICByZXR1cm4gb3MubmFtZSA9PT0gT3NUeXBlcy5XaW5kb3dzO1xufTtcblxudmFyIGlzTWFjT3NUeXBlID0gZnVuY3Rpb24gaXNNYWNPc1R5cGUoKSB7XG4gIHJldHVybiBvcy5uYW1lID09PSBPc1R5cGVzLk1BQ19PUztcbn07XG5cbnZhciBpc1dpblBob25lVHlwZSA9IGZ1bmN0aW9uIGlzV2luUGhvbmVUeXBlKCkge1xuICByZXR1cm4gb3MubmFtZSA9PT0gT3NUeXBlcy5XaW5kb3dzUGhvbmU7XG59O1xuXG52YXIgaXNJT1NUeXBlID0gZnVuY3Rpb24gaXNJT1NUeXBlKCkge1xuICByZXR1cm4gb3MubmFtZSA9PT0gT3NUeXBlcy5JT1M7XG59O1xuXG52YXIgaXNDaHJvbWVUeXBlID0gZnVuY3Rpb24gaXNDaHJvbWVUeXBlKCkge1xuICByZXR1cm4gYnJvd3Nlci5uYW1lID09PSBCcm93c2VyVHlwZXMuQ2hyb21lO1xufTtcblxudmFyIGlzRmlyZWZveFR5cGUgPSBmdW5jdGlvbiBpc0ZpcmVmb3hUeXBlKCkge1xuICByZXR1cm4gYnJvd3Nlci5uYW1lID09PSBCcm93c2VyVHlwZXMuRmlyZWZveDtcbn07XG5cbnZhciBpc0Nocm9taXVtVHlwZSA9IGZ1bmN0aW9uIGlzQ2hyb21pdW1UeXBlKCkge1xuICByZXR1cm4gYnJvd3Nlci5uYW1lID09PSBCcm93c2VyVHlwZXMuQ2hyb21pdW07XG59O1xuXG52YXIgaXNFZGdlVHlwZSA9IGZ1bmN0aW9uIGlzRWRnZVR5cGUoKSB7XG4gIHJldHVybiBicm93c2VyLm5hbWUgPT09IEJyb3dzZXJUeXBlcy5FZGdlO1xufTtcblxudmFyIGlzWWFuZGV4VHlwZSA9IGZ1bmN0aW9uIGlzWWFuZGV4VHlwZSgpIHtcbiAgcmV0dXJuIGJyb3dzZXIubmFtZSA9PT0gQnJvd3NlclR5cGVzLllhbmRleDtcbn07XG5cbnZhciBpc1NhZmFyaVR5cGUgPSBmdW5jdGlvbiBpc1NhZmFyaVR5cGUoKSB7XG4gIHJldHVybiBicm93c2VyLm5hbWUgPT09IEJyb3dzZXJUeXBlcy5TYWZhcmkgfHwgYnJvd3Nlci5uYW1lID09PSBCcm93c2VyVHlwZXMuTW9iaWxlU2FmYXJpO1xufTtcblxudmFyIGlzTW9iaWxlU2FmYXJpVHlwZSA9IGZ1bmN0aW9uIGlzTW9iaWxlU2FmYXJpVHlwZSgpIHtcbiAgcmV0dXJuIGJyb3dzZXIubmFtZSA9PT0gQnJvd3NlclR5cGVzLk1vYmlsZVNhZmFyaTtcbn07XG5cbnZhciBpc09wZXJhVHlwZSA9IGZ1bmN0aW9uIGlzT3BlcmFUeXBlKCkge1xuICByZXR1cm4gYnJvd3Nlci5uYW1lID09PSBCcm93c2VyVHlwZXMuT3BlcmE7XG59O1xuXG52YXIgaXNJRVR5cGUgPSBmdW5jdGlvbiBpc0lFVHlwZSgpIHtcbiAgcmV0dXJuIGJyb3dzZXIubmFtZSA9PT0gQnJvd3NlclR5cGVzLkludGVybmV0RXhwbG9yZXIgfHwgYnJvd3Nlci5uYW1lID09PSBCcm93c2VyVHlwZXMuSWU7XG59O1xuXG52YXIgaXNNSVVJVHlwZSA9IGZ1bmN0aW9uIGlzTUlVSVR5cGUoKSB7XG4gIHJldHVybiBicm93c2VyLm5hbWUgPT09IEJyb3dzZXJUeXBlcy5NSVVJO1xufTtcblxudmFyIGlzU2Ftc3VuZ0Jyb3dzZXJUeXBlID0gZnVuY3Rpb24gaXNTYW1zdW5nQnJvd3NlclR5cGUoKSB7XG4gIHJldHVybiBicm93c2VyLm5hbWUgPT09IEJyb3dzZXJUeXBlcy5TYW1zdW5nQnJvd3Nlcjtcbn07XG5cbnZhciBpc0VsZWN0cm9uVHlwZSA9IGZ1bmN0aW9uIGlzRWxlY3Ryb25UeXBlKCkge1xuICB2YXIgbmF2ID0gZ2V0TmF2aWdhdG9ySW5zdGFuY2UoKTtcbiAgdmFyIHVhID0gbmF2ICYmIG5hdi51c2VyQWdlbnQgJiYgbmF2LnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gdHlwZW9mIHVhID09PSAnc3RyaW5nJyA/IC9lbGVjdHJvbi8udGVzdCh1YSkgOiBmYWxzZTtcbn07XG5cbnZhciBnZXRJT1MxMyA9IGZ1bmN0aW9uIGdldElPUzEzKCkge1xuICB2YXIgbmF2ID0gZ2V0TmF2aWdhdG9ySW5zdGFuY2UoKTtcbiAgcmV0dXJuIG5hdiAmJiAoL2lQYWR8aVBob25lfGlQb2QvLnRlc3QobmF2LnBsYXRmb3JtKSB8fCBuYXYucGxhdGZvcm0gPT09ICdNYWNJbnRlbCcgJiYgbmF2Lm1heFRvdWNoUG9pbnRzID4gMSkgJiYgIXdpbmRvdy5NU1N0cmVhbTtcbn07XG5cbnZhciBnZXRJUGFkMTMgPSBmdW5jdGlvbiBnZXRJUGFkMTMoKSB7XG4gIHJldHVybiBpc0lPUzEzQ2hlY2soJ2lQYWQnKTtcbn07XG5cbnZhciBnZXRJcGhvbmUxMyA9IGZ1bmN0aW9uIGdldElwaG9uZTEzKCkge1xuICByZXR1cm4gaXNJT1MxM0NoZWNrKCdpUGhvbmUnKTtcbn07XG5cbnZhciBnZXRJUG9kMTMgPSBmdW5jdGlvbiBnZXRJUG9kMTMoKSB7XG4gIHJldHVybiBpc0lPUzEzQ2hlY2soJ2lQb2QnKTtcbn07XG5cbnZhciBnZXRCcm93c2VyRnVsbFZlcnNpb24gPSBmdW5jdGlvbiBnZXRCcm93c2VyRnVsbFZlcnNpb24oKSB7XG4gIHJldHVybiBzZXREZWZhdWx0cyhicm93c2VyLnZlcnNpb24pO1xufTtcblxudmFyIGdldEJyb3dzZXJWZXJzaW9uID0gZnVuY3Rpb24gZ2V0QnJvd3NlclZlcnNpb24oKSB7XG4gIHJldHVybiBzZXREZWZhdWx0cyhicm93c2VyLm1ham9yKTtcbn07XG5cbnZhciBnZXRPc1ZlcnNpb24gPSBmdW5jdGlvbiBnZXRPc1ZlcnNpb24oKSB7XG4gIHJldHVybiBzZXREZWZhdWx0cyhvcy52ZXJzaW9uKTtcbn07XG5cbnZhciBnZXRPc05hbWUgPSBmdW5jdGlvbiBnZXRPc05hbWUoKSB7XG4gIHJldHVybiBzZXREZWZhdWx0cyhvcy5uYW1lKTtcbn07XG5cbnZhciBnZXRCcm93c2VyTmFtZSA9IGZ1bmN0aW9uIGdldEJyb3dzZXJOYW1lKCkge1xuICByZXR1cm4gc2V0RGVmYXVsdHMoYnJvd3Nlci5uYW1lKTtcbn07XG5cbnZhciBnZXRNb2JpbGVWZW5kb3IgPSBmdW5jdGlvbiBnZXRNb2JpbGVWZW5kb3IoKSB7XG4gIHJldHVybiBzZXREZWZhdWx0cyhkZXZpY2UudmVuZG9yKTtcbn07XG5cbnZhciBnZXRNb2JpbGVNb2RlbCA9IGZ1bmN0aW9uIGdldE1vYmlsZU1vZGVsKCkge1xuICByZXR1cm4gc2V0RGVmYXVsdHMoZGV2aWNlLm1vZGVsKTtcbn07XG5cbnZhciBnZXRFbmdpbmVOYW1lID0gZnVuY3Rpb24gZ2V0RW5naW5lTmFtZSgpIHtcbiAgcmV0dXJuIHNldERlZmF1bHRzKGVuZ2luZS5uYW1lKTtcbn07XG5cbnZhciBnZXRFbmdpbmVWZXJzaW9uID0gZnVuY3Rpb24gZ2V0RW5naW5lVmVyc2lvbigpIHtcbiAgcmV0dXJuIHNldERlZmF1bHRzKGVuZ2luZS52ZXJzaW9uKTtcbn07XG5cbnZhciBnZXRVc2VyYWdlbnQgPSBmdW5jdGlvbiBnZXRVc2VyYWdlbnQoKSB7XG4gIHJldHVybiBzZXREZWZhdWx0cyh1YSk7XG59O1xuXG52YXIgZ2V0RGV2aWNlVHlwZSA9IGZ1bmN0aW9uIGdldERldmljZVR5cGUoKSB7XG4gIHJldHVybiBzZXREZWZhdWx0cyhkZXZpY2UudHlwZSwgJ2Jyb3dzZXInKTtcbn07XG5cbnZhciBpc1NtYXJ0VFYgPSBpc1NtYXJ0VFZUeXBlKCk7XG52YXIgaXNDb25zb2xlID0gaXNDb25zb2xlVHlwZSgpO1xudmFyIGlzV2VhcmFibGUgPSBpc1dlYXJhYmxlVHlwZSgpO1xudmFyIGlzTW9iaWxlU2FmYXJpID0gaXNNb2JpbGVTYWZhcmlUeXBlKCkgfHwgZ2V0SVBhZDEzKCk7XG52YXIgaXNDaHJvbWl1bSA9IGlzQ2hyb21pdW1UeXBlKCk7XG52YXIgaXNNb2JpbGUgPSBpc01vYmlsZUFuZFRhYmxldFR5cGUoKSB8fCBnZXRJUGFkMTMoKTtcbnZhciBpc01vYmlsZU9ubHkgPSBpc01vYmlsZVR5cGUoKTtcbnZhciBpc1RhYmxldCA9IGlzVGFibGV0VHlwZSgpIHx8IGdldElQYWQxMygpO1xudmFyIGlzQnJvd3NlciA9IGlzQnJvd3NlclR5cGUoKTtcbnZhciBpc0Rlc2t0b3AgPSBpc0Jyb3dzZXJUeXBlKCk7XG52YXIgaXNBbmRyb2lkID0gaXNBbmRyb2lkVHlwZSgpO1xudmFyIGlzV2luUGhvbmUgPSBpc1dpblBob25lVHlwZSgpO1xudmFyIGlzSU9TID0gaXNJT1NUeXBlKCkgfHwgZ2V0SVBhZDEzKCk7XG52YXIgaXNDaHJvbWUgPSBpc0Nocm9tZVR5cGUoKTtcbnZhciBpc0ZpcmVmb3ggPSBpc0ZpcmVmb3hUeXBlKCk7XG52YXIgaXNTYWZhcmkgPSBpc1NhZmFyaVR5cGUoKTtcbnZhciBpc09wZXJhID0gaXNPcGVyYVR5cGUoKTtcbnZhciBpc0lFID0gaXNJRVR5cGUoKTtcbnZhciBvc1ZlcnNpb24gPSBnZXRPc1ZlcnNpb24oKTtcbnZhciBvc05hbWUgPSBnZXRPc05hbWUoKTtcbnZhciBmdWxsQnJvd3NlclZlcnNpb24gPSBnZXRCcm93c2VyRnVsbFZlcnNpb24oKTtcbnZhciBicm93c2VyVmVyc2lvbiA9IGdldEJyb3dzZXJWZXJzaW9uKCk7XG52YXIgYnJvd3Nlck5hbWUgPSBnZXRCcm93c2VyTmFtZSgpO1xudmFyIG1vYmlsZVZlbmRvciA9IGdldE1vYmlsZVZlbmRvcigpO1xudmFyIG1vYmlsZU1vZGVsID0gZ2V0TW9iaWxlTW9kZWwoKTtcbnZhciBlbmdpbmVOYW1lID0gZ2V0RW5naW5lTmFtZSgpO1xudmFyIGVuZ2luZVZlcnNpb24gPSBnZXRFbmdpbmVWZXJzaW9uKCk7XG52YXIgZ2V0VUEgPSBnZXRVc2VyYWdlbnQoKTtcbnZhciBpc0VkZ2UgPSBpc0VkZ2VUeXBlKCkgfHwgaXNFZGdlQ2hyb21pdW1UeXBlKCk7XG52YXIgaXNZYW5kZXggPSBpc1lhbmRleFR5cGUoKTtcbnZhciBkZXZpY2VUeXBlID0gZ2V0RGV2aWNlVHlwZSgpO1xudmFyIGlzSU9TMTMgPSBnZXRJT1MxMygpO1xudmFyIGlzSVBhZDEzID0gZ2V0SVBhZDEzKCk7XG52YXIgaXNJUGhvbmUxMyA9IGdldElwaG9uZTEzKCk7XG52YXIgaXNJUG9kMTMgPSBnZXRJUG9kMTMoKTtcbnZhciBpc0VsZWN0cm9uID0gaXNFbGVjdHJvblR5cGUoKTtcbnZhciBpc0VkZ2VDaHJvbWl1bSA9IGlzRWRnZUNocm9taXVtVHlwZSgpO1xudmFyIGlzTGVnYWN5RWRnZSA9IGlzRWRnZVR5cGUoKSAmJiAhaXNFZGdlQ2hyb21pdW1UeXBlKCk7XG52YXIgaXNXaW5kb3dzID0gaXNXaW5kb3dzVHlwZSgpO1xudmFyIGlzTWFjT3MgPSBpc01hY09zVHlwZSgpO1xudmFyIGlzTUlVSSA9IGlzTUlVSVR5cGUoKTtcbnZhciBpc1NhbXN1bmdCcm93c2VyID0gaXNTYW1zdW5nQnJvd3NlclR5cGUoKTtcblxudmFyIEFuZHJvaWRWaWV3ID0gZnVuY3Rpb24gQW5kcm9pZFZpZXcoX3JlZikge1xuICB2YXIgcmVuZGVyV2l0aEZyYWdtZW50ID0gX3JlZi5yZW5kZXJXaXRoRnJhZ21lbnQsXG4gICAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICB2aWV3Q2xhc3NOYW1lID0gX3JlZi52aWV3Q2xhc3NOYW1lLFxuICAgICAgc3R5bGUgPSBfcmVmLnN0eWxlLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wicmVuZGVyV2l0aEZyYWdtZW50XCIsIFwiY2hpbGRyZW5cIiwgXCJ2aWV3Q2xhc3NOYW1lXCIsIFwic3R5bGVcIl0pO1xuXG4gIHJldHVybiBpc0FuZHJvaWQgPyByZW5kZXJXaXRoRnJhZ21lbnQgPyBSZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLCBjaGlsZHJlbikgOiBSZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IHZpZXdDbGFzc05hbWUsXG4gICAgc3R5bGU6IHN0eWxlXG4gIH0sIHByb3BzKSwgY2hpbGRyZW4pIDogbnVsbDtcbn07XG5cbnZhciBCcm93c2VyVmlldyA9IGZ1bmN0aW9uIEJyb3dzZXJWaWV3KF9yZWYyKSB7XG4gIHZhciByZW5kZXJXaXRoRnJhZ21lbnQgPSBfcmVmMi5yZW5kZXJXaXRoRnJhZ21lbnQsXG4gICAgICBjaGlsZHJlbiA9IF9yZWYyLmNoaWxkcmVuLFxuICAgICAgdmlld0NsYXNzTmFtZSA9IF9yZWYyLnZpZXdDbGFzc05hbWUsXG4gICAgICBzdHlsZSA9IF9yZWYyLnN0eWxlLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZjIsIFtcInJlbmRlcldpdGhGcmFnbWVudFwiLCBcImNoaWxkcmVuXCIsIFwidmlld0NsYXNzTmFtZVwiLCBcInN0eWxlXCJdKTtcblxuICByZXR1cm4gaXNCcm93c2VyID8gcmVuZGVyV2l0aEZyYWdtZW50ID8gUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCwgY2hpbGRyZW4pIDogUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiB2aWV3Q2xhc3NOYW1lLFxuICAgIHN0eWxlOiBzdHlsZVxuICB9LCBwcm9wcyksIGNoaWxkcmVuKSA6IG51bGw7XG59O1xuXG52YXIgSUVWaWV3ID0gZnVuY3Rpb24gSUVWaWV3KF9yZWYzKSB7XG4gIHZhciByZW5kZXJXaXRoRnJhZ21lbnQgPSBfcmVmMy5yZW5kZXJXaXRoRnJhZ21lbnQsXG4gICAgICBjaGlsZHJlbiA9IF9yZWYzLmNoaWxkcmVuLFxuICAgICAgdmlld0NsYXNzTmFtZSA9IF9yZWYzLnZpZXdDbGFzc05hbWUsXG4gICAgICBzdHlsZSA9IF9yZWYzLnN0eWxlLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZjMsIFtcInJlbmRlcldpdGhGcmFnbWVudFwiLCBcImNoaWxkcmVuXCIsIFwidmlld0NsYXNzTmFtZVwiLCBcInN0eWxlXCJdKTtcblxuICByZXR1cm4gaXNJRSA/IHJlbmRlcldpdGhGcmFnbWVudCA/IFJlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsIGNoaWxkcmVuKSA6IFJlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogdmlld0NsYXNzTmFtZSxcbiAgICBzdHlsZTogc3R5bGVcbiAgfSwgcHJvcHMpLCBjaGlsZHJlbikgOiBudWxsO1xufTtcblxudmFyIElPU1ZpZXcgPSBmdW5jdGlvbiBJT1NWaWV3KF9yZWY0KSB7XG4gIHZhciByZW5kZXJXaXRoRnJhZ21lbnQgPSBfcmVmNC5yZW5kZXJXaXRoRnJhZ21lbnQsXG4gICAgICBjaGlsZHJlbiA9IF9yZWY0LmNoaWxkcmVuLFxuICAgICAgdmlld0NsYXNzTmFtZSA9IF9yZWY0LnZpZXdDbGFzc05hbWUsXG4gICAgICBzdHlsZSA9IF9yZWY0LnN0eWxlLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZjQsIFtcInJlbmRlcldpdGhGcmFnbWVudFwiLCBcImNoaWxkcmVuXCIsIFwidmlld0NsYXNzTmFtZVwiLCBcInN0eWxlXCJdKTtcblxuICByZXR1cm4gaXNJT1MgPyByZW5kZXJXaXRoRnJhZ21lbnQgPyBSZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLCBjaGlsZHJlbikgOiBSZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IHZpZXdDbGFzc05hbWUsXG4gICAgc3R5bGU6IHN0eWxlXG4gIH0sIHByb3BzKSwgY2hpbGRyZW4pIDogbnVsbDtcbn07XG5cbnZhciBNb2JpbGVWaWV3ID0gZnVuY3Rpb24gTW9iaWxlVmlldyhfcmVmNSkge1xuICB2YXIgcmVuZGVyV2l0aEZyYWdtZW50ID0gX3JlZjUucmVuZGVyV2l0aEZyYWdtZW50LFxuICAgICAgY2hpbGRyZW4gPSBfcmVmNS5jaGlsZHJlbixcbiAgICAgIHZpZXdDbGFzc05hbWUgPSBfcmVmNS52aWV3Q2xhc3NOYW1lLFxuICAgICAgc3R5bGUgPSBfcmVmNS5zdHlsZSxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWY1LCBbXCJyZW5kZXJXaXRoRnJhZ21lbnRcIiwgXCJjaGlsZHJlblwiLCBcInZpZXdDbGFzc05hbWVcIiwgXCJzdHlsZVwiXSk7XG5cbiAgcmV0dXJuIGlzTW9iaWxlID8gcmVuZGVyV2l0aEZyYWdtZW50ID8gUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCwgY2hpbGRyZW4pIDogUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiB2aWV3Q2xhc3NOYW1lLFxuICAgIHN0eWxlOiBzdHlsZVxuICB9LCBwcm9wcyksIGNoaWxkcmVuKSA6IG51bGw7XG59O1xuXG52YXIgVGFibGV0VmlldyA9IGZ1bmN0aW9uIFRhYmxldFZpZXcoX3JlZjYpIHtcbiAgdmFyIHJlbmRlcldpdGhGcmFnbWVudCA9IF9yZWY2LnJlbmRlcldpdGhGcmFnbWVudCxcbiAgICAgIGNoaWxkcmVuID0gX3JlZjYuY2hpbGRyZW4sXG4gICAgICB2aWV3Q2xhc3NOYW1lID0gX3JlZjYudmlld0NsYXNzTmFtZSxcbiAgICAgIHN0eWxlID0gX3JlZjYuc3R5bGUsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmNiwgW1wicmVuZGVyV2l0aEZyYWdtZW50XCIsIFwiY2hpbGRyZW5cIiwgXCJ2aWV3Q2xhc3NOYW1lXCIsIFwic3R5bGVcIl0pO1xuXG4gIHJldHVybiBpc1RhYmxldCA/IHJlbmRlcldpdGhGcmFnbWVudCA/IFJlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsIGNoaWxkcmVuKSA6IFJlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogdmlld0NsYXNzTmFtZSxcbiAgICBzdHlsZTogc3R5bGVcbiAgfSwgcHJvcHMpLCBjaGlsZHJlbikgOiBudWxsO1xufTtcblxudmFyIFdpblBob25lVmlldyA9IGZ1bmN0aW9uIFdpblBob25lVmlldyhfcmVmNykge1xuICB2YXIgcmVuZGVyV2l0aEZyYWdtZW50ID0gX3JlZjcucmVuZGVyV2l0aEZyYWdtZW50LFxuICAgICAgY2hpbGRyZW4gPSBfcmVmNy5jaGlsZHJlbixcbiAgICAgIHZpZXdDbGFzc05hbWUgPSBfcmVmNy52aWV3Q2xhc3NOYW1lLFxuICAgICAgc3R5bGUgPSBfcmVmNy5zdHlsZSxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWY3LCBbXCJyZW5kZXJXaXRoRnJhZ21lbnRcIiwgXCJjaGlsZHJlblwiLCBcInZpZXdDbGFzc05hbWVcIiwgXCJzdHlsZVwiXSk7XG5cbiAgcmV0dXJuIGlzV2luUGhvbmUgPyByZW5kZXJXaXRoRnJhZ21lbnQgPyBSZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLCBjaGlsZHJlbikgOiBSZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IHZpZXdDbGFzc05hbWUsXG4gICAgc3R5bGU6IHN0eWxlXG4gIH0sIHByb3BzKSwgY2hpbGRyZW4pIDogbnVsbDtcbn07XG5cbnZhciBNb2JpbGVPbmx5VmlldyA9IGZ1bmN0aW9uIE1vYmlsZU9ubHlWaWV3KF9yZWY4KSB7XG4gIHZhciByZW5kZXJXaXRoRnJhZ21lbnQgPSBfcmVmOC5yZW5kZXJXaXRoRnJhZ21lbnQsXG4gICAgICBjaGlsZHJlbiA9IF9yZWY4LmNoaWxkcmVuLFxuICAgICAgdmlld0NsYXNzTmFtZSA9IF9yZWY4LnZpZXdDbGFzc05hbWUsXG4gICAgICBzdHlsZSA9IF9yZWY4LnN0eWxlLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZjgsIFtcInJlbmRlcldpdGhGcmFnbWVudFwiLCBcImNoaWxkcmVuXCIsIFwidmlld0NsYXNzTmFtZVwiLCBcInN0eWxlXCJdKTtcblxuICByZXR1cm4gaXNNb2JpbGVPbmx5ID8gcmVuZGVyV2l0aEZyYWdtZW50ID8gUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCwgY2hpbGRyZW4pIDogUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiB2aWV3Q2xhc3NOYW1lLFxuICAgIHN0eWxlOiBzdHlsZVxuICB9LCBwcm9wcyksIGNoaWxkcmVuKSA6IG51bGw7XG59O1xuXG52YXIgU21hcnRUVlZpZXcgPSBmdW5jdGlvbiBTbWFydFRWVmlldyhfcmVmOSkge1xuICB2YXIgcmVuZGVyV2l0aEZyYWdtZW50ID0gX3JlZjkucmVuZGVyV2l0aEZyYWdtZW50LFxuICAgICAgY2hpbGRyZW4gPSBfcmVmOS5jaGlsZHJlbixcbiAgICAgIHZpZXdDbGFzc05hbWUgPSBfcmVmOS52aWV3Q2xhc3NOYW1lLFxuICAgICAgc3R5bGUgPSBfcmVmOS5zdHlsZSxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWY5LCBbXCJyZW5kZXJXaXRoRnJhZ21lbnRcIiwgXCJjaGlsZHJlblwiLCBcInZpZXdDbGFzc05hbWVcIiwgXCJzdHlsZVwiXSk7XG5cbiAgcmV0dXJuIGlzU21hcnRUViA/IHJlbmRlcldpdGhGcmFnbWVudCA/IFJlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsIGNoaWxkcmVuKSA6IFJlYWN0X19kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogdmlld0NsYXNzTmFtZSxcbiAgICBzdHlsZTogc3R5bGVcbiAgfSwgcHJvcHMpLCBjaGlsZHJlbikgOiBudWxsO1xufTtcblxudmFyIENvbnNvbGVWaWV3ID0gZnVuY3Rpb24gQ29uc29sZVZpZXcoX3JlZjEwKSB7XG4gIHZhciByZW5kZXJXaXRoRnJhZ21lbnQgPSBfcmVmMTAucmVuZGVyV2l0aEZyYWdtZW50LFxuICAgICAgY2hpbGRyZW4gPSBfcmVmMTAuY2hpbGRyZW4sXG4gICAgICB2aWV3Q2xhc3NOYW1lID0gX3JlZjEwLnZpZXdDbGFzc05hbWUsXG4gICAgICBzdHlsZSA9IF9yZWYxMC5zdHlsZSxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYxMCwgW1wicmVuZGVyV2l0aEZyYWdtZW50XCIsIFwiY2hpbGRyZW5cIiwgXCJ2aWV3Q2xhc3NOYW1lXCIsIFwic3R5bGVcIl0pO1xuXG4gIHJldHVybiBpc0NvbnNvbGUgPyByZW5kZXJXaXRoRnJhZ21lbnQgPyBSZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLCBjaGlsZHJlbikgOiBSZWFjdF9fZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IHZpZXdDbGFzc05hbWUsXG4gICAgc3R5bGU6IHN0eWxlXG4gIH0sIHByb3BzKSwgY2hpbGRyZW4pIDogbnVsbDtcbn07XG5cbnZhciBXZWFyYWJsZVZpZXcgPSBmdW5jdGlvbiBXZWFyYWJsZVZpZXcoX3JlZjExKSB7XG4gIHZhciByZW5kZXJXaXRoRnJhZ21lbnQgPSBfcmVmMTEucmVuZGVyV2l0aEZyYWdtZW50LFxuICAgICAgY2hpbGRyZW4gPSBfcmVmMTEuY2hpbGRyZW4sXG4gICAgICB2aWV3Q2xhc3NOYW1lID0gX3JlZjExLnZpZXdDbGFzc05hbWUsXG4gICAgICBzdHlsZSA9IF9yZWYxMS5zdHlsZSxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYxMSwgW1wicmVuZGVyV2l0aEZyYWdtZW50XCIsIFwiY2hpbGRyZW5cIiwgXCJ2aWV3Q2xhc3NOYW1lXCIsIFwic3R5bGVcIl0pO1xuXG4gIHJldHVybiBpc1dlYXJhYmxlID8gcmVuZGVyV2l0aEZyYWdtZW50ID8gUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCwgY2hpbGRyZW4pIDogUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiB2aWV3Q2xhc3NOYW1lLFxuICAgIHN0eWxlOiBzdHlsZVxuICB9LCBwcm9wcyksIGNoaWxkcmVuKSA6IG51bGw7XG59O1xuXG52YXIgQ3VzdG9tVmlldyA9IGZ1bmN0aW9uIEN1c3RvbVZpZXcoX3JlZjEyKSB7XG4gIHZhciByZW5kZXJXaXRoRnJhZ21lbnQgPSBfcmVmMTIucmVuZGVyV2l0aEZyYWdtZW50LFxuICAgICAgY2hpbGRyZW4gPSBfcmVmMTIuY2hpbGRyZW4sXG4gICAgICB2aWV3Q2xhc3NOYW1lID0gX3JlZjEyLnZpZXdDbGFzc05hbWUsXG4gICAgICBzdHlsZSA9IF9yZWYxMi5zdHlsZSxcbiAgICAgIGNvbmRpdGlvbiA9IF9yZWYxMi5jb25kaXRpb24sXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmMTIsIFtcInJlbmRlcldpdGhGcmFnbWVudFwiLCBcImNoaWxkcmVuXCIsIFwidmlld0NsYXNzTmFtZVwiLCBcInN0eWxlXCIsIFwiY29uZGl0aW9uXCJdKTtcblxuICByZXR1cm4gY29uZGl0aW9uID8gcmVuZGVyV2l0aEZyYWdtZW50ID8gUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCwgY2hpbGRyZW4pIDogUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiB2aWV3Q2xhc3NOYW1lLFxuICAgIHN0eWxlOiBzdHlsZVxuICB9LCBwcm9wcyksIGNoaWxkcmVuKSA6IG51bGw7XG59O1xuXG5mdW5jdGlvbiB3aXRoT3JpZW50YXRpb25DaGFuZ2UoV3JhcHBlZENvbXBvbmVudCkge1xuICByZXR1cm4gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gICAgX2luaGVyaXRzKF9jbGFzcywgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgICBmdW5jdGlvbiBfY2xhc3MocHJvcHMpIHtcbiAgICAgIHZhciBfdGhpcztcblxuICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIF9jbGFzcyk7XG5cbiAgICAgIF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX2dldFByb3RvdHlwZU9mKF9jbGFzcykuY2FsbCh0aGlzLCBwcm9wcykpO1xuICAgICAgX3RoaXMuaXNFdmVudExpc3RlbmVyQWRkZWQgPSBmYWxzZTtcbiAgICAgIF90aGlzLmhhbmRsZU9yaWVudGF0aW9uQ2hhbmdlID0gX3RoaXMuaGFuZGxlT3JpZW50YXRpb25DaGFuZ2UuYmluZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSk7XG4gICAgICBfdGhpcy5vbk9yaWVudGF0aW9uQ2hhbmdlID0gX3RoaXMub25PcmllbnRhdGlvbkNoYW5nZS5iaW5kKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKTtcbiAgICAgIF90aGlzLm9uUGFnZUxvYWQgPSBfdGhpcy5vblBhZ2VMb2FkLmJpbmQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpO1xuICAgICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICAgIGlzTGFuZHNjYXBlOiBmYWxzZSxcbiAgICAgICAgaXNQb3J0cmFpdDogZmFsc2VcbiAgICAgIH07XG4gICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuXG4gICAgX2NyZWF0ZUNsYXNzKF9jbGFzcywgW3tcbiAgICAgIGtleTogXCJoYW5kbGVPcmllbnRhdGlvbkNoYW5nZVwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGhhbmRsZU9yaWVudGF0aW9uQ2hhbmdlKCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNFdmVudExpc3RlbmVyQWRkZWQpIHtcbiAgICAgICAgICB0aGlzLmlzRXZlbnRMaXN0ZW5lckFkZGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBvcmllbnRhdGlvbiA9IHdpbmRvdy5pbm5lcldpZHRoID4gd2luZG93LmlubmVySGVpZ2h0ID8gOTAgOiAwO1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBpc1BvcnRyYWl0OiBvcmllbnRhdGlvbiA9PT0gMCxcbiAgICAgICAgICBpc0xhbmRzY2FwZTogb3JpZW50YXRpb24gPT09IDkwXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJvbk9yaWVudGF0aW9uQ2hhbmdlXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gb25PcmllbnRhdGlvbkNoYW5nZSgpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVPcmllbnRhdGlvbkNoYW5nZSgpO1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJvblBhZ2VMb2FkXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gb25QYWdlTG9hZCgpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVPcmllbnRhdGlvbkNoYW5nZSgpO1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgICBpZiAoKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIgPyBcInVuZGVmaW5lZFwiIDogX3R5cGVvZih3aW5kb3cpKSAhPT0gdW5kZWZpbmVkICYmIGlzTW9iaWxlKSB7XG4gICAgICAgICAgaWYgKCF0aGlzLmlzRXZlbnRMaXN0ZW5lckFkZGVkKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZU9yaWVudGF0aW9uQ2hhbmdlKCk7XG4gICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIiwgdGhpcy5vblBhZ2VMb2FkLCBmYWxzZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwibG9hZFwiLCB0aGlzLm9uUGFnZUxvYWQsIGZhbHNlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCB0aGlzLm9uT3JpZW50YXRpb25DaGFuZ2UsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJjb21wb25lbnRXaWxsVW5tb3VudFwiLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCB0aGlzLm9uT3JpZW50YXRpb25DaGFuZ2UsIGZhbHNlKTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgICByZXR1cm4gUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChXcmFwcGVkQ29tcG9uZW50LCBfZXh0ZW5kcyh7fSwgdGhpcy5wcm9wcywge1xuICAgICAgICAgIGlzTGFuZHNjYXBlOiB0aGlzLnN0YXRlLmlzTGFuZHNjYXBlLFxuICAgICAgICAgIGlzUG9ydHJhaXQ6IHRoaXMuc3RhdGUuaXNQb3J0cmFpdFxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfV0pO1xuXG4gICAgcmV0dXJuIF9jbGFzcztcbiAgfShSZWFjdF9fZGVmYXVsdC5Db21wb25lbnQpO1xufVxuXG5leHBvcnRzLkFuZHJvaWRWaWV3ID0gQW5kcm9pZFZpZXc7XG5leHBvcnRzLkJyb3dzZXJUeXBlcyA9IEJyb3dzZXJUeXBlcztcbmV4cG9ydHMuQnJvd3NlclZpZXcgPSBCcm93c2VyVmlldztcbmV4cG9ydHMuQ29uc29sZVZpZXcgPSBDb25zb2xlVmlldztcbmV4cG9ydHMuQ3VzdG9tVmlldyA9IEN1c3RvbVZpZXc7XG5leHBvcnRzLklFVmlldyA9IElFVmlldztcbmV4cG9ydHMuSU9TVmlldyA9IElPU1ZpZXc7XG5leHBvcnRzLk1vYmlsZU9ubHlWaWV3ID0gTW9iaWxlT25seVZpZXc7XG5leHBvcnRzLk1vYmlsZVZpZXcgPSBNb2JpbGVWaWV3O1xuZXhwb3J0cy5Pc1R5cGVzID0gT3NUeXBlcztcbmV4cG9ydHMuU21hcnRUVlZpZXcgPSBTbWFydFRWVmlldztcbmV4cG9ydHMuVGFibGV0VmlldyA9IFRhYmxldFZpZXc7XG5leHBvcnRzLldlYXJhYmxlVmlldyA9IFdlYXJhYmxlVmlldztcbmV4cG9ydHMuV2luUGhvbmVWaWV3ID0gV2luUGhvbmVWaWV3O1xuZXhwb3J0cy5icm93c2VyTmFtZSA9IGJyb3dzZXJOYW1lO1xuZXhwb3J0cy5icm93c2VyVmVyc2lvbiA9IGJyb3dzZXJWZXJzaW9uO1xuZXhwb3J0cy5kZXZpY2VEZXRlY3QgPSBkZXZpY2VEZXRlY3Q7XG5leHBvcnRzLmRldmljZVR5cGUgPSBkZXZpY2VUeXBlO1xuZXhwb3J0cy5lbmdpbmVOYW1lID0gZW5naW5lTmFtZTtcbmV4cG9ydHMuZW5naW5lVmVyc2lvbiA9IGVuZ2luZVZlcnNpb247XG5leHBvcnRzLmZ1bGxCcm93c2VyVmVyc2lvbiA9IGZ1bGxCcm93c2VyVmVyc2lvbjtcbmV4cG9ydHMuZ2V0VUEgPSBnZXRVQTtcbmV4cG9ydHMuaXNBbmRyb2lkID0gaXNBbmRyb2lkO1xuZXhwb3J0cy5pc0Jyb3dzZXIgPSBpc0Jyb3dzZXI7XG5leHBvcnRzLmlzQ2hyb21lID0gaXNDaHJvbWU7XG5leHBvcnRzLmlzQ2hyb21pdW0gPSBpc0Nocm9taXVtO1xuZXhwb3J0cy5pc0NvbnNvbGUgPSBpc0NvbnNvbGU7XG5leHBvcnRzLmlzRGVza3RvcCA9IGlzRGVza3RvcDtcbmV4cG9ydHMuaXNFZGdlID0gaXNFZGdlO1xuZXhwb3J0cy5pc0VkZ2VDaHJvbWl1bSA9IGlzRWRnZUNocm9taXVtO1xuZXhwb3J0cy5pc0VsZWN0cm9uID0gaXNFbGVjdHJvbjtcbmV4cG9ydHMuaXNGaXJlZm94ID0gaXNGaXJlZm94O1xuZXhwb3J0cy5pc0lFID0gaXNJRTtcbmV4cG9ydHMuaXNJT1MgPSBpc0lPUztcbmV4cG9ydHMuaXNJT1MxMyA9IGlzSU9TMTM7XG5leHBvcnRzLmlzSVBhZDEzID0gaXNJUGFkMTM7XG5leHBvcnRzLmlzSVBob25lMTMgPSBpc0lQaG9uZTEzO1xuZXhwb3J0cy5pc0lQb2QxMyA9IGlzSVBvZDEzO1xuZXhwb3J0cy5pc0xlZ2FjeUVkZ2UgPSBpc0xlZ2FjeUVkZ2U7XG5leHBvcnRzLmlzTUlVSSA9IGlzTUlVSTtcbmV4cG9ydHMuaXNNYWNPcyA9IGlzTWFjT3M7XG5leHBvcnRzLmlzTW9iaWxlID0gaXNNb2JpbGU7XG5leHBvcnRzLmlzTW9iaWxlT25seSA9IGlzTW9iaWxlT25seTtcbmV4cG9ydHMuaXNNb2JpbGVTYWZhcmkgPSBpc01vYmlsZVNhZmFyaTtcbmV4cG9ydHMuaXNPcGVyYSA9IGlzT3BlcmE7XG5leHBvcnRzLmlzU2FmYXJpID0gaXNTYWZhcmk7XG5leHBvcnRzLmlzU2Ftc3VuZ0Jyb3dzZXIgPSBpc1NhbXN1bmdCcm93c2VyO1xuZXhwb3J0cy5pc1NtYXJ0VFYgPSBpc1NtYXJ0VFY7XG5leHBvcnRzLmlzVGFibGV0ID0gaXNUYWJsZXQ7XG5leHBvcnRzLmlzV2VhcmFibGUgPSBpc1dlYXJhYmxlO1xuZXhwb3J0cy5pc1dpblBob25lID0gaXNXaW5QaG9uZTtcbmV4cG9ydHMuaXNXaW5kb3dzID0gaXNXaW5kb3dzO1xuZXhwb3J0cy5pc1lhbmRleCA9IGlzWWFuZGV4O1xuZXhwb3J0cy5tb2JpbGVNb2RlbCA9IG1vYmlsZU1vZGVsO1xuZXhwb3J0cy5tb2JpbGVWZW5kb3IgPSBtb2JpbGVWZW5kb3I7XG5leHBvcnRzLm9zTmFtZSA9IG9zTmFtZTtcbmV4cG9ydHMub3NWZXJzaW9uID0gb3NWZXJzaW9uO1xuZXhwb3J0cy53aXRoT3JpZW50YXRpb25DaGFuZ2UgPSB3aXRoT3JpZW50YXRpb25DaGFuZ2U7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1677\n')},4889:function(module,exports,__webpack_require__){eval('var __WEBPACK_AMD_DEFINE_RESULT__;/*!@license\n * UAParser.js v0.7.28\n * Lightweight JavaScript-based User-Agent string parser\n * https://github.com/faisalman/ua-parser-js\n *\n * Copyright © 2012-2021 Faisal Salman \n * Licensed under MIT License\n */\n(function (window, undefined) {\n "use strict";\n\n var LIBVERSION = "0.7.28",\n EMPTY = "",\n UNKNOWN = "?",\n FUNC_TYPE = "function",\n UNDEF_TYPE = "undefined",\n OBJ_TYPE = "object",\n STR_TYPE = "string",\n MAJOR = "major",\n MODEL = "model",\n NAME = "name",\n TYPE = "type",\n VENDOR = "vendor",\n VERSION = "version",\n ARCHITECTURE = "architecture",\n CONSOLE = "console",\n MOBILE = "mobile",\n TABLET = "tablet",\n SMARTTV = "smarttv",\n WEARABLE = "wearable",\n EMBEDDED = "embedded",\n UA_MAX_LENGTH = 255;\n var util = {\n extend: function extend(regexes, extensions) {\n var mergedRegexes = {};\n\n for (var i in regexes) {\n if (extensions[i] && extensions[i].length % 2 === 0) {\n mergedRegexes[i] = extensions[i].concat(regexes[i]);\n } else {\n mergedRegexes[i] = regexes[i];\n }\n }\n\n return mergedRegexes;\n },\n has: function has(str1, str2) {\n return typeof str1 === STR_TYPE ? str2.toLowerCase().indexOf(str1.toLowerCase()) !== -1 : false;\n },\n lowerize: function lowerize(str) {\n return str.toLowerCase();\n },\n major: function major(version) {\n return typeof version === STR_TYPE ? version.replace(/[^\\d\\.]/g, "").split(".")[0] : undefined;\n },\n trim: function trim(str, len) {\n str = str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, "");\n return typeof len === UNDEF_TYPE ? str : str.substring(0, UA_MAX_LENGTH);\n }\n };\n var mapper = {\n rgx: function rgx(ua, arrays) {\n var i = 0,\n j,\n k,\n p,\n q,\n matches,\n match;\n\n while (i < arrays.length && !matches) {\n var regex = arrays[i],\n props = arrays[i + 1];\n j = k = 0;\n\n while (j < regex.length && !matches) {\n matches = regex[j++].exec(ua);\n\n if (!!matches) {\n for (p = 0; p < props.length; p++) {\n match = matches[++k];\n q = props[p];\n\n if (typeof q === OBJ_TYPE && q.length > 0) {\n if (q.length == 2) {\n if (typeof q[1] == FUNC_TYPE) {\n this[q[0]] = q[1].call(this, match);\n } else {\n this[q[0]] = q[1];\n }\n } else if (q.length == 3) {\n if (typeof q[1] === FUNC_TYPE && !(q[1].exec && q[1].test)) {\n this[q[0]] = match ? q[1].call(this, match, q[2]) : undefined;\n } else {\n this[q[0]] = match ? match.replace(q[1], q[2]) : undefined;\n }\n } else if (q.length == 4) {\n this[q[0]] = match ? q[3].call(this, match.replace(q[1], q[2])) : undefined;\n }\n } else {\n this[q] = match ? match : undefined;\n }\n }\n }\n }\n\n i += 2;\n }\n },\n str: function str(_str, map) {\n for (var i in map) {\n if (typeof map[i] === OBJ_TYPE && map[i].length > 0) {\n for (var j = 0; j < map[i].length; j++) {\n if (util.has(map[i][j], _str)) {\n return i === UNKNOWN ? undefined : i;\n }\n }\n } else if (util.has(map[i], _str)) {\n return i === UNKNOWN ? undefined : i;\n }\n }\n\n return _str;\n }\n };\n var maps = {\n browser: {\n oldSafari: {\n version: {\n "1.0": "/8",\n 1.2: "/1",\n 1.3: "/3",\n "2.0": "/412",\n "2.0.2": "/416",\n "2.0.3": "/417",\n "2.0.4": "/419",\n "?": "/"\n }\n },\n oldEdge: {\n version: {\n .1: "12.",\n 21: "13.",\n 31: "14.",\n 39: "15.",\n 41: "16.",\n 42: "17.",\n 44: "18."\n }\n }\n },\n os: {\n windows: {\n version: {\n ME: "4.90",\n "NT 3.11": "NT3.51",\n "NT 4.0": "NT4.0",\n 2e3: "NT 5.0",\n XP: ["NT 5.1", "NT 5.2"],\n Vista: "NT 6.0",\n 7: "NT 6.1",\n 8: "NT 6.2",\n 8.1: "NT 6.3",\n 10: ["NT 6.4", "NT 10.0"],\n RT: "ARM"\n }\n }\n }\n };\n var regexes = {\n browser: [[/\\b(?:crmo|crios)\\/([\\w\\.]+)/i], [VERSION, [NAME, "Chrome"]], [/(?:edge|edgios|edga|edg)\\/([\\w\\.]+)/i], [VERSION, [NAME, "Edge"]], [/(opera\\smini)\\/([\\w\\.-]+)/i, /(opera\\s[mobiletab]{3,6})\\b.+version\\/([\\w\\.-]+)/i, /(opera)(?:.+version\\/|[\\/\\s]+)([\\w\\.]+)/i], [NAME, VERSION], [/opios[\\/\\s]+([\\w\\.]+)/i], [VERSION, [NAME, "Opera Mini"]], [/\\sopr\\/([\\w\\.]+)/i], [VERSION, [NAME, "Opera"]], [/(kindle)\\/([\\w\\.]+)/i, /(lunascape|maxthon|netfront|jasmine|blazer)[\\/\\s]?([\\w\\.]*)/i, /(avant\\s|iemobile|slim)(?:browser)?[\\/\\s]?([\\w\\.]*)/i, /(ba?idubrowser)[\\/\\s]?([\\w\\.]+)/i, /(?:ms|\\()(ie)\\s([\\w\\.]+)/i, /(flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon)\\/([\\w\\.-]+)/i, /(rekonq|puffin|brave|whale|qqbrowserlite|qq)\\/([\\w\\.]+)/i, /(weibo)__([\\d\\.]+)/i], [NAME, VERSION], [/(?:[\\s\\/]uc?\\s?browser|(?:juc.+)ucweb)[\\/\\s]?([\\w\\.]+)/i], [VERSION, [NAME, "UCBrowser"]], [/(?:windowswechat)?\\sqbcore\\/([\\w\\.]+)\\b.*(?:windowswechat)?/i], [VERSION, [NAME, "WeChat(Win) Desktop"]], [/micromessenger\\/([\\w\\.]+)/i], [VERSION, [NAME, "WeChat"]], [/konqueror\\/([\\w\\.]+)/i], [VERSION, [NAME, "Konqueror"]], [/trident.+rv[:\\s]([\\w\\.]{1,9})\\b.+like\\sgecko/i], [VERSION, [NAME, "IE"]], [/yabrowser\\/([\\w\\.]+)/i], [VERSION, [NAME, "Yandex"]], [/(avast|avg)\\/([\\w\\.]+)/i], [[NAME, /(.+)/, "$1 Secure Browser"], VERSION], [/focus\\/([\\w\\.]+)/i], [VERSION, [NAME, "Firefox Focus"]], [/opt\\/([\\w\\.]+)/i], [VERSION, [NAME, "Opera Touch"]], [/coc_coc_browser\\/([\\w\\.]+)/i], [VERSION, [NAME, "Coc Coc"]], [/dolfin\\/([\\w\\.]+)/i], [VERSION, [NAME, "Dolphin"]], [/coast\\/([\\w\\.]+)/i], [VERSION, [NAME, "Opera Coast"]], [/xiaomi\\/miuibrowser\\/([\\w\\.]+)/i], [VERSION, [NAME, "MIUI Browser"]], [/fxios\\/([\\w\\.-]+)/i], [VERSION, [NAME, "Firefox"]], [/(qihu|qhbrowser|qihoobrowser|360browser)/i], [[NAME, "360 Browser"]], [/(oculus|samsung|sailfish)browser\\/([\\w\\.]+)/i], [[NAME, /(.+)/, "$1 Browser"], VERSION], [/(comodo_dragon)\\/([\\w\\.]+)/i], [[NAME, /_/g, " "], VERSION], [/\\s(electron)\\/([\\w\\.]+)\\ssafari/i, /(tesla)(?:\\sqtcarbrowser|\\/(20[12]\\d\\.[\\w\\.-]+))/i, /m?(qqbrowser|baiduboxapp|2345Explorer)[\\/\\s]?([\\w\\.]+)/i], [NAME, VERSION], [/(MetaSr)[\\/\\s]?([\\w\\.]+)/i, /(LBBROWSER)/i], [NAME], [/;fbav\\/([\\w\\.]+);/i], [VERSION, [NAME, "Facebook"]], [/FBAN\\/FBIOS|FB_IAB\\/FB4A/i], [[NAME, "Facebook"]], [/safari\\s(line)\\/([\\w\\.]+)/i, /\\b(line)\\/([\\w\\.]+)\\/iab/i, /(chromium|instagram)[\\/\\s]([\\w\\.-]+)/i], [NAME, VERSION], [/\\bgsa\\/([\\w\\.]+)\\s.*safari\\//i], [VERSION, [NAME, "GSA"]], [/headlesschrome(?:\\/([\\w\\.]+)|\\s)/i], [VERSION, [NAME, "Chrome Headless"]], [/\\swv\\).+(chrome)\\/([\\w\\.]+)/i], [[NAME, "Chrome WebView"], VERSION], [/droid.+\\sversion\\/([\\w\\.]+)\\b.+(?:mobile\\ssafari|safari)/i], [VERSION, [NAME, "Android Browser"]], [/(chrome|omniweb|arora|[tizenoka]{5}\\s?browser)\\/v?([\\w\\.]+)/i], [NAME, VERSION], [/version\\/([\\w\\.]+)\\s.*mobile\\/\\w+\\s(safari)/i], [VERSION, [NAME, "Mobile Safari"]], [/version\\/([\\w\\.]+)\\s.*(mobile\\s?safari|safari)/i], [VERSION, NAME], [/webkit.+?(mobile\\s?safari|safari)(\\/[\\w\\.]+)/i], [NAME, [VERSION, mapper.str, maps.browser.oldSafari.version]], [/(webkit|khtml)\\/([\\w\\.]+)/i], [NAME, VERSION], [/(navigator|netscape)\\/([\\w\\.-]+)/i], [[NAME, "Netscape"], VERSION], [/ile\\svr;\\srv:([\\w\\.]+)\\).+firefox/i], [VERSION, [NAME, "Firefox Reality"]], [/ekiohf.+(flow)\\/([\\w\\.]+)/i, /(swiftfox)/i, /(icedragon|iceweasel|camino|chimera|fennec|maemo\\sbrowser|minimo|conkeror)[\\/\\s]?([\\w\\.\\+]+)/i, /(firefox|seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\\/([\\w\\.-]+)$/i, /(firefox)\\/([\\w\\.]+)\\s[\\w\\s\\-]+\\/[\\w\\.]+$/i, /(mozilla)\\/([\\w\\.]+)\\s.+rv\\:.+gecko\\/\\d+/i, /(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir)[\\/\\s]?([\\w\\.]+)/i, /(links)\\s\\(([\\w\\.]+)/i, /(gobrowser)\\/?([\\w\\.]*)/i, /(ice\\s?browser)\\/v?([\\w\\._]+)/i, /(mosaic)[\\/\\s]([\\w\\.]+)/i], [NAME, VERSION]],\n cpu: [[/(?:(amd|x(?:(?:86|64)[_-])?|wow|win)64)[;\\)]/i], [[ARCHITECTURE, "amd64"]], [/(ia32(?=;))/i], [[ARCHITECTURE, util.lowerize]], [/((?:i[346]|x)86)[;\\)]/i], [[ARCHITECTURE, "ia32"]], [/\\b(aarch64|armv?8e?l?)\\b/i], [[ARCHITECTURE, "arm64"]], [/\\b(arm(?:v[67])?ht?n?[fl]p?)\\b/i], [[ARCHITECTURE, "armhf"]], [/windows\\s(ce|mobile);\\sppc;/i], [[ARCHITECTURE, "arm"]], [/((?:ppc|powerpc)(?:64)?)(?:\\smac|;|\\))/i], [[ARCHITECTURE, /ower/, "", util.lowerize]], [/(sun4\\w)[;\\)]/i], [[ARCHITECTURE, "sparc"]], [/((?:avr32|ia64(?=;))|68k(?=\\))|\\barm(?:64|(?=v(?:[1-7]|[5-7]1)l?|;|eabi))|(?=atmel\\s)avr|(?:irix|mips|sparc)(?:64)?\\b|pa-risc)/i], [[ARCHITECTURE, util.lowerize]]],\n device: [[/\\b(sch-i[89]0\\d|shw-m380s|sm-[pt]\\w{2,4}|gt-[pn]\\d{2,4}|sgh-t8[56]9|nexus\\s10)/i], [MODEL, [VENDOR, "Samsung"], [TYPE, TABLET]], [/\\b((?:s[cgp]h|gt|sm)-\\w+|galaxy\\snexus)/i, /\\ssamsung[\\s-]([\\w-]+)/i, /sec-(sgh\\w+)/i], [MODEL, [VENDOR, "Samsung"], [TYPE, MOBILE]], [/\\((ip(?:hone|od)[\\s\\w]*);/i], [MODEL, [VENDOR, "Apple"], [TYPE, MOBILE]], [/\\((ipad);[\\w\\s\\),;-]+apple/i, /applecoremedia\\/[\\w\\.]+\\s\\((ipad)/i, /\\b(ipad)\\d\\d?,\\d\\d?[;\\]].+ios/i], [MODEL, [VENDOR, "Apple"], [TYPE, TABLET]], [/\\b((?:agr|ags[23]|bah2?|sht?)-a?[lw]\\d{2})/i], [MODEL, [VENDOR, "Huawei"], [TYPE, TABLET]], [/d\\/huawei([\\w\\s-]+)[;\\)]/i, /\\b(nexus\\s6p|vog-[at]?l\\d\\d|ane-[at]?l[x\\d]\\d|eml-a?l\\d\\da?|lya-[at]?l\\d[\\dc]|clt-a?l\\d\\di?|ele-l\\d\\d)/i, /\\b(\\w{2,4}-[atu][ln][01259][019])[;\\)\\s]/i], [MODEL, [VENDOR, "Huawei"], [TYPE, MOBILE]], [/\\b(poco[\\s\\w]+)(?:\\sbuild|\\))/i, /\\b;\\s(\\w+)\\sbuild\\/hm\\1/i, /\\b(hm[\\s\\-_]?note?[\\s_]?(?:\\d\\w)?)\\sbuild/i, /\\b(redmi[\\s\\-_]?(?:note|k)?[\\w\\s_]+)(?:\\sbuild|\\))/i, /\\b(mi[\\s\\-_]?(?:a\\d|one|one[\\s_]plus|note lte)?[\\s_]?(?:\\d?\\w?)[\\s_]?(?:plus)?)\\sbuild/i], [[MODEL, /_/g, " "], [VENDOR, "Xiaomi"], [TYPE, MOBILE]], [/\\b(mi[\\s\\-_]?(?:pad)(?:[\\w\\s_]+))(?:\\sbuild|\\))/i], [[MODEL, /_/g, " "], [VENDOR, "Xiaomi"], [TYPE, TABLET]], [/;\\s(\\w+)\\sbuild.+\\soppo/i, /\\s(cph[12]\\d{3}|p(?:af|c[al]|d\\w|e[ar])[mt]\\d0|x9007)\\b/i], [MODEL, [VENDOR, "OPPO"], [TYPE, MOBILE]], [/\\svivo\\s(\\w+)(?:\\sbuild|\\))/i, /\\s(v[12]\\d{3}\\w?[at])(?:\\sbuild|;)/i], [MODEL, [VENDOR, "Vivo"], [TYPE, MOBILE]], [/\\s(rmx[12]\\d{3})(?:\\sbuild|;)/i], [MODEL, [VENDOR, "Realme"], [TYPE, MOBILE]], [/\\s(milestone|droid(?:[2-4x]|\\s(?:bionic|x2|pro|razr))?:?(\\s4g)?)\\b[\\w\\s]+build\\//i, /\\smot(?:orola)?[\\s-](\\w*)/i, /((?:moto[\\s\\w\\(\\)]+|xt\\d{3,4}|nexus\\s6)(?=\\sbuild|\\)))/i], [MODEL, [VENDOR, "Motorola"], [TYPE, MOBILE]], [/\\s(mz60\\d|xoom[\\s2]{0,2})\\sbuild\\//i], [MODEL, [VENDOR, "Motorola"], [TYPE, TABLET]], [/((?=lg)?[vl]k\\-?\\d{3})\\sbuild|\\s3\\.[\\s\\w;-]{10}lg?-([06cv9]{3,4})/i], [MODEL, [VENDOR, "LG"], [TYPE, TABLET]], [/(lm-?f100[nv]?|nexus\\s[45])/i, /lg[e;\\s\\/-]+((?!browser|netcast)\\w+)/i, /\\blg(\\-?[\\d\\w]+)\\sbuild/i], [MODEL, [VENDOR, "LG"], [TYPE, MOBILE]], [/(ideatab[\\w\\-\\s]+)/i, /lenovo\\s?(s(?:5000|6000)(?:[\\w-]+)|tab(?:[\\s\\w]+)|yt[\\d\\w-]{6}|tb[\\d\\w-]{6})/i], [MODEL, [VENDOR, "Lenovo"], [TYPE, TABLET]], [/(?:maemo|nokia).*(n900|lumia\\s\\d+)/i, /nokia[\\s_-]?([\\w\\.-]*)/i], [[MODEL, /_/g, " "], [VENDOR, "Nokia"], [TYPE, MOBILE]], [/droid.+;\\s(pixel\\sc)[\\s)]/i], [MODEL, [VENDOR, "Google"], [TYPE, TABLET]], [/droid.+;\\s(pixel[\\s\\daxl]{0,6})(?:\\sbuild|\\))/i], [MODEL, [VENDOR, "Google"], [TYPE, MOBILE]], [/droid.+\\s([c-g]\\d{4}|so[-l]\\w+|xq-a\\w[4-7][12])(?=\\sbuild\\/|\\).+chrome\\/(?![1-6]{0,1}\\d\\.))/i], [MODEL, [VENDOR, "Sony"], [TYPE, MOBILE]], [/sony\\stablet\\s[ps]\\sbuild\\//i, /(?:sony)?sgp\\w+(?:\\sbuild\\/|\\))/i], [[MODEL, "Xperia Tablet"], [VENDOR, "Sony"], [TYPE, TABLET]], [/\\s(kb2005|in20[12]5|be20[12][59])\\b/i, /\\ba000(1)\\sbuild/i, /\\boneplus\\s(a\\d{4})[\\s)]/i], [MODEL, [VENDOR, "OnePlus"], [TYPE, MOBILE]], [/(alexa)webm/i, /(kf[a-z]{2}wi)(\\sbuild\\/|\\))/i, /(kf[a-z]+)(\\sbuild\\/|\\)).+silk\\//i], [MODEL, [VENDOR, "Amazon"], [TYPE, TABLET]], [/(sd|kf)[0349hijorstuw]+(\\sbuild\\/|\\)).+silk\\//i], [[MODEL, "Fire Phone"], [VENDOR, "Amazon"], [TYPE, MOBILE]], [/\\((playbook);[\\w\\s\\),;-]+(rim)/i], [MODEL, VENDOR, [TYPE, TABLET]], [/((?:bb[a-f]|st[hv])100-\\d)/i, /\\(bb10;\\s(\\w+)/i], [MODEL, [VENDOR, "BlackBerry"], [TYPE, MOBILE]], [/(?:\\b|asus_)(transfo[prime\\s]{4,10}\\s\\w+|eeepc|slider\\s\\w+|nexus\\s7|padfone|p00[cj])/i], [MODEL, [VENDOR, "ASUS"], [TYPE, TABLET]], [/\\s(z[es]6[027][01][km][ls]|zenfone\\s\\d\\w?)\\b/i], [MODEL, [VENDOR, "ASUS"], [TYPE, MOBILE]], [/(nexus\\s9)/i], [MODEL, [VENDOR, "HTC"], [TYPE, TABLET]], [/(htc)[;_\\s-]{1,2}([\\w\\s]+(?=\\)|\\sbuild)|\\w+)/i, /(zte)-(\\w*)/i, /(alcatel|geeksphone|nexian|panasonic|(?=;\\s)sony)[_\\s-]?([\\w-]*)/i], [VENDOR, [MODEL, /_/g, " "], [TYPE, MOBILE]], [/droid[x\\d\\.\\s;]+\\s([ab][1-7]\\-?[0178a]\\d\\d?)/i], [MODEL, [VENDOR, "Acer"], [TYPE, TABLET]], [/droid.+;\\s(m[1-5]\\snote)\\sbuild/i, /\\bmz-([\\w-]{2,})/i], [MODEL, [VENDOR, "Meizu"], [TYPE, MOBILE]], [/(blackberry|benq|palm(?=\\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron)[\\s_-]?([\\w-]*)/i, /(hp)\\s([\\w\\s]+\\w)/i, /(asus)-?(\\w+)/i, /(microsoft);\\s(lumia[\\s\\w]+)/i, /(lenovo)[_\\s-]?([\\w-]+)/i, /linux;.+(jolla);/i, /droid.+;\\s(oppo)\\s?([\\w\\s]+)\\sbuild/i], [VENDOR, MODEL, [TYPE, MOBILE]], [/(archos)\\s(gamepad2?)/i, /(hp).+(touchpad(?!.+tablet)|tablet)/i, /(kindle)\\/([\\w\\.]+)/i, /\\s(nook)[\\w\\s]+build\\/(\\w+)/i, /(dell)\\s(strea[kpr\\s\\d]*[\\dko])/i, /[;\\/]\\s?(le[\\s\\-]+pan)[\\s\\-]+(\\w{1,9})\\sbuild/i, /[;\\/]\\s?(trinity)[\\-\\s]*(t\\d{3})\\sbuild/i, /\\b(gigaset)[\\s\\-]+(q\\w{1,9})\\sbuild/i, /\\b(vodafone)\\s([\\w\\s]+)(?:\\)|\\sbuild)/i], [VENDOR, MODEL, [TYPE, TABLET]], [/\\s(surface\\sduo)\\s/i], [MODEL, [VENDOR, "Microsoft"], [TYPE, TABLET]], [/droid\\s[\\d\\.]+;\\s(fp\\du?)\\sbuild/i], [MODEL, [VENDOR, "Fairphone"], [TYPE, MOBILE]], [/\\s(u304aa)\\sbuild/i], [MODEL, [VENDOR, "AT&T"], [TYPE, MOBILE]], [/sie-(\\w*)/i], [MODEL, [VENDOR, "Siemens"], [TYPE, MOBILE]], [/[;\\/]\\s?(rct\\w+)\\sbuild/i], [MODEL, [VENDOR, "RCA"], [TYPE, TABLET]], [/[;\\/\\s](venue[\\d\\s]{2,7})\\sbuild/i], [MODEL, [VENDOR, "Dell"], [TYPE, TABLET]], [/[;\\/]\\s?(q(?:mv|ta)\\w+)\\sbuild/i], [MODEL, [VENDOR, "Verizon"], [TYPE, TABLET]], [/[;\\/]\\s(?:barnes[&\\s]+noble\\s|bn[rt])([\\w\\s\\+]*)\\sbuild/i], [MODEL, [VENDOR, "Barnes & Noble"], [TYPE, TABLET]], [/[;\\/]\\s(tm\\d{3}\\w+)\\sbuild/i], [MODEL, [VENDOR, "NuVision"], [TYPE, TABLET]], [/;\\s(k88)\\sbuild/i], [MODEL, [VENDOR, "ZTE"], [TYPE, TABLET]], [/;\\s(nx\\d{3}j)\\sbuild/i], [MODEL, [VENDOR, "ZTE"], [TYPE, MOBILE]], [/[;\\/]\\s?(gen\\d{3})\\sbuild.*49h/i], [MODEL, [VENDOR, "Swiss"], [TYPE, MOBILE]], [/[;\\/]\\s?(zur\\d{3})\\sbuild/i], [MODEL, [VENDOR, "Swiss"], [TYPE, TABLET]], [/[;\\/]\\s?((zeki)?tb.*\\b)\\sbuild/i], [MODEL, [VENDOR, "Zeki"], [TYPE, TABLET]], [/[;\\/]\\s([yr]\\d{2})\\sbuild/i, /[;\\/]\\s(dragon[\\-\\s]+touch\\s|dt)(\\w{5})\\sbuild/i], [[VENDOR, "Dragon Touch"], MODEL, [TYPE, TABLET]], [/[;\\/]\\s?(ns-?\\w{0,9})\\sbuild/i], [MODEL, [VENDOR, "Insignia"], [TYPE, TABLET]], [/[;\\/]\\s?((nxa|Next)-?\\w{0,9})\\sbuild/i], [MODEL, [VENDOR, "NextBook"], [TYPE, TABLET]], [/[;\\/]\\s?(xtreme\\_)?(v(1[045]|2[015]|[3469]0|7[05]))\\sbuild/i], [[VENDOR, "Voice"], MODEL, [TYPE, MOBILE]], [/[;\\/]\\s?(lvtel\\-)?(v1[12])\\sbuild/i], [[VENDOR, "LvTel"], MODEL, [TYPE, MOBILE]], [/;\\s(ph-1)\\s/i], [MODEL, [VENDOR, "Essential"], [TYPE, MOBILE]], [/[;\\/]\\s?(v(100md|700na|7011|917g).*\\b)\\sbuild/i], [MODEL, [VENDOR, "Envizen"], [TYPE, TABLET]], [/[;\\/]\\s?(trio[\\s\\w\\-\\.]+)\\sbuild/i], [MODEL, [VENDOR, "MachSpeed"], [TYPE, TABLET]], [/[;\\/]\\s?tu_(1491)\\sbuild/i], [MODEL, [VENDOR, "Rotor"], [TYPE, TABLET]], [/(shield[\\w\\s]+)\\sbuild/i], [MODEL, [VENDOR, "Nvidia"], [TYPE, TABLET]], [/(sprint)\\s(\\w+)/i], [VENDOR, MODEL, [TYPE, MOBILE]], [/(kin\\.[onetw]{3})/i], [[MODEL, /\\./g, " "], [VENDOR, "Microsoft"], [TYPE, MOBILE]], [/droid\\s[\\d\\.]+;\\s(cc6666?|et5[16]|mc[239][23]x?|vc8[03]x?)\\)/i], [MODEL, [VENDOR, "Zebra"], [TYPE, TABLET]], [/droid\\s[\\d\\.]+;\\s(ec30|ps20|tc[2-8]\\d[kx])\\)/i], [MODEL, [VENDOR, "Zebra"], [TYPE, MOBILE]], [/\\s(ouya)\\s/i, /(nintendo)\\s([wids3utch]+)/i], [VENDOR, MODEL, [TYPE, CONSOLE]], [/droid.+;\\s(shield)\\sbuild/i], [MODEL, [VENDOR, "Nvidia"], [TYPE, CONSOLE]], [/(playstation\\s[345portablevi]+)/i], [MODEL, [VENDOR, "Sony"], [TYPE, CONSOLE]], [/[\\s\\(;](xbox(?:\\sone)?(?!;\\sxbox))[\\s\\);]/i], [MODEL, [VENDOR, "Microsoft"], [TYPE, CONSOLE]], [/smart-tv.+(samsung)/i], [VENDOR, [TYPE, SMARTTV]], [/hbbtv.+maple;(\\d+)/i], [[MODEL, /^/, "SmartTV"], [VENDOR, "Samsung"], [TYPE, SMARTTV]], [/(?:linux;\\snetcast.+smarttv|lg\\snetcast\\.tv-201\\d)/i], [[VENDOR, "LG"], [TYPE, SMARTTV]], [/(apple)\\s?tv/i], [VENDOR, [MODEL, "Apple TV"], [TYPE, SMARTTV]], [/crkey/i], [[MODEL, "Chromecast"], [VENDOR, "Google"], [TYPE, SMARTTV]], [/droid.+aft([\\w])(\\sbuild\\/|\\))/i], [MODEL, [VENDOR, "Amazon"], [TYPE, SMARTTV]], [/\\(dtv[\\);].+(aquos)/i], [MODEL, [VENDOR, "Sharp"], [TYPE, SMARTTV]], [/hbbtv\\/\\d+\\.\\d+\\.\\d+\\s+\\([\\w\\s]*;\\s*(\\w[^;]*);([^;]*)/i], [[VENDOR, util.trim], [MODEL, util.trim], [TYPE, SMARTTV]], [/[\\s\\/\\(](android\\s|smart[-\\s]?|opera\\s)tv[;\\)\\s]/i], [[TYPE, SMARTTV]], [/((pebble))app\\/[\\d\\.]+\\s/i], [VENDOR, MODEL, [TYPE, WEARABLE]], [/droid.+;\\s(glass)\\s\\d/i], [MODEL, [VENDOR, "Google"], [TYPE, WEARABLE]], [/droid\\s[\\d\\.]+;\\s(wt63?0{2,3})\\)/i], [MODEL, [VENDOR, "Zebra"], [TYPE, WEARABLE]], [/(tesla)(?:\\sqtcarbrowser|\\/20[12]\\d\\.[\\w\\.-]+)/i], [VENDOR, [TYPE, EMBEDDED]], [/droid .+?; ([^;]+?)(?: build|\\) applewebkit).+? mobile safari/i], [MODEL, [TYPE, MOBILE]], [/droid .+?;\\s([^;]+?)(?: build|\\) applewebkit).+?(?! mobile) safari/i], [MODEL, [TYPE, TABLET]], [/\\s(tablet|tab)[;\\/]/i, /\\s(mobile)(?:[;\\/]|\\ssafari)/i], [[TYPE, util.lowerize]], [/(android[\\w\\.\\s\\-]{0,9});.+build/i], [MODEL, [VENDOR, "Generic"]], [/(phone)/i], [[TYPE, MOBILE]]],\n engine: [[/windows.+\\sedge\\/([\\w\\.]+)/i], [VERSION, [NAME, "EdgeHTML"]], [/webkit\\/537\\.36.+chrome\\/(?!27)([\\w\\.]+)/i], [VERSION, [NAME, "Blink"]], [/(presto)\\/([\\w\\.]+)/i, /(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\\/([\\w\\.]+)/i, /ekioh(flow)\\/([\\w\\.]+)/i, /(khtml|tasman|links)[\\/\\s]\\(?([\\w\\.]+)/i, /(icab)[\\/\\s]([23]\\.[\\d\\.]+)/i], [NAME, VERSION], [/rv\\:([\\w\\.]{1,9})\\b.+(gecko)/i], [VERSION, NAME]],\n os: [[/microsoft\\s(windows)\\s(vista|xp)/i], [NAME, VERSION], [/(windows)\\snt\\s6\\.2;\\s(arm)/i, /(windows\\sphone(?:\\sos)*)[\\s\\/]?([\\d\\.\\s\\w]*)/i, /(windows\\smobile|windows)[\\s\\/]?([ntce\\d\\.\\s]+\\w)(?!.+xbox)/i], [NAME, [VERSION, mapper.str, maps.os.windows.version]], [/(win(?=3|9|n)|win\\s9x\\s)([nt\\d\\.]+)/i], [[NAME, "Windows"], [VERSION, mapper.str, maps.os.windows.version]], [/ip[honead]{2,4}\\b(?:.*os\\s([\\w]+)\\slike\\smac|;\\sopera)/i, /cfnetwork\\/.+darwin/i], [[VERSION, /_/g, "."], [NAME, "iOS"]], [/(mac\\sos\\sx)\\s?([\\w\\s\\.]*)/i, /(macintosh|mac(?=_powerpc)\\s)(?!.+haiku)/i], [[NAME, "Mac OS"], [VERSION, /_/g, "."]], [/(android|webos|palm\\sos|qnx|bada|rim\\stablet\\sos|meego|sailfish|contiki)[\\/\\s-]?([\\w\\.]*)/i, /(blackberry)\\w*\\/([\\w\\.]*)/i, /(tizen|kaios)[\\/\\s]([\\w\\.]+)/i, /\\((series40);/i], [NAME, VERSION], [/\\(bb(10);/i], [VERSION, [NAME, "BlackBerry"]], [/(?:symbian\\s?os|symbos|s60(?=;)|series60)[\\/\\s-]?([\\w\\.]*)/i], [VERSION, [NAME, "Symbian"]], [/mozilla.+\\(mobile;.+gecko.+firefox/i], [[NAME, "Firefox OS"]], [/web0s;.+rt(tv)/i, /\\b(?:hp)?wos(?:browser)?\\/([\\w\\.]+)/i], [VERSION, [NAME, "webOS"]], [/crkey\\/([\\d\\.]+)/i], [VERSION, [NAME, "Chromecast"]], [/(cros)\\s[\\w]+\\s([\\w\\.]+\\w)/i], [[NAME, "Chromium OS"], VERSION], [/(nintendo|playstation)\\s([wids345portablevuch]+)/i, /(xbox);\\s+xbox\\s([^\\);]+)/i, /(mint)[\\/\\s\\(\\)]?(\\w*)/i, /(mageia|vectorlinux)[;\\s]/i, /(joli|[kxln]?ubuntu|debian|suse|opensuse|gentoo|arch(?=\\slinux)|slackware|fedora|mandriva|centos|pclinuxos|redhat|zenwalk|linpus|raspbian)(?:\\sgnu\\/linux)?(?:\\slinux)?[\\/\\s-]?(?!chrom|package)([\\w\\.-]*)/i, /(hurd|linux)\\s?([\\w\\.]*)/i, /(gnu)\\s?([\\w\\.]*)/i, /\\s([frentopc-]{0,4}bsd|dragonfly)\\s?(?!amd|[ix346]{1,2}86)([\\w\\.]*)/i, /(haiku)\\s(\\w+)/i], [NAME, VERSION], [/(sunos)\\s?([\\w\\.\\d]*)/i], [[NAME, "Solaris"], VERSION], [/((?:open)?solaris)[\\/\\s-]?([\\w\\.]*)/i, /(aix)\\s((\\d)(?=\\.|\\)|\\s)[\\w\\.])*/i, /(plan\\s9|minix|beos|os\\/2|amigaos|morphos|risc\\sos|openvms|fuchsia)/i, /(unix)\\s?([\\w\\.]*)/i], [NAME, VERSION]]\n };\n\n var UAParser = function UAParser(ua, extensions) {\n if (typeof ua === "object") {\n extensions = ua;\n ua = undefined;\n }\n\n if (!(this instanceof UAParser)) {\n return new UAParser(ua, extensions).getResult();\n }\n\n var _ua = ua || (typeof window !== "undefined" && window.navigator && window.navigator.userAgent ? window.navigator.userAgent : EMPTY);\n\n var _rgxmap = extensions ? util.extend(regexes, extensions) : regexes;\n\n this.getBrowser = function () {\n var _browser = {\n name: undefined,\n version: undefined\n };\n mapper.rgx.call(_browser, _ua, _rgxmap.browser);\n _browser.major = util.major(_browser.version);\n return _browser;\n };\n\n this.getCPU = function () {\n var _cpu = {\n architecture: undefined\n };\n mapper.rgx.call(_cpu, _ua, _rgxmap.cpu);\n return _cpu;\n };\n\n this.getDevice = function () {\n var _device = {\n vendor: undefined,\n model: undefined,\n type: undefined\n };\n mapper.rgx.call(_device, _ua, _rgxmap.device);\n return _device;\n };\n\n this.getEngine = function () {\n var _engine = {\n name: undefined,\n version: undefined\n };\n mapper.rgx.call(_engine, _ua, _rgxmap.engine);\n return _engine;\n };\n\n this.getOS = function () {\n var _os = {\n name: undefined,\n version: undefined\n };\n mapper.rgx.call(_os, _ua, _rgxmap.os);\n return _os;\n };\n\n this.getResult = function () {\n return {\n ua: this.getUA(),\n browser: this.getBrowser(),\n engine: this.getEngine(),\n os: this.getOS(),\n device: this.getDevice(),\n cpu: this.getCPU()\n };\n };\n\n this.getUA = function () {\n return _ua;\n };\n\n this.setUA = function (ua) {\n _ua = typeof ua === STR_TYPE && ua.length > UA_MAX_LENGTH ? util.trim(ua, UA_MAX_LENGTH) : ua;\n return this;\n };\n\n this.setUA(_ua);\n return this;\n };\n\n UAParser.VERSION = LIBVERSION;\n UAParser.BROWSER = {\n NAME: NAME,\n MAJOR: MAJOR,\n VERSION: VERSION\n };\n UAParser.CPU = {\n ARCHITECTURE: ARCHITECTURE\n };\n UAParser.DEVICE = {\n MODEL: MODEL,\n VENDOR: VENDOR,\n TYPE: TYPE,\n CONSOLE: CONSOLE,\n MOBILE: MOBILE,\n SMARTTV: SMARTTV,\n TABLET: TABLET,\n WEARABLE: WEARABLE,\n EMBEDDED: EMBEDDED\n };\n UAParser.ENGINE = {\n NAME: NAME,\n VERSION: VERSION\n };\n UAParser.OS = {\n NAME: NAME,\n VERSION: VERSION\n };\n\n if (typeof exports !== UNDEF_TYPE) {\n if ("object" !== UNDEF_TYPE && module.exports) {\n exports = module.exports = UAParser;\n }\n\n exports.UAParser = UAParser;\n } else {\n if (true) {\n !(__WEBPACK_AMD_DEFINE_RESULT__ = (function () {\n return UAParser;\n }).call(exports, __webpack_require__, exports, module),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else {}\n }\n\n var $ = typeof window !== "undefined" && (window.jQuery || window.Zepto);\n\n if ($ && !$.ua) {\n var parser = new UAParser();\n $.ua = parser.getResult();\n\n $.ua.get = function () {\n return parser.getUA();\n };\n\n $.ua.set = function (uastring) {\n parser.setUA(uastring);\n var result = parser.getResult();\n\n for (var prop in result) {\n $.ua[prop] = result[prop];\n }\n };\n }\n})(typeof window === "object" ? window : this);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy91YS1wYXJzZXItanMvZGlzdC91YS1wYXJzZXIubWluLmpzP2QxMjMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsdUJBQXVCLGtCQUFrQjtBQUN6QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQjtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QixtQkFBbUI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQ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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxRQUFRLFFBQWE7QUFDckI7QUFDQTs7QUFFQSxJQUFJLGdCQUFnQjtBQUNwQixHQUFHO0FBQ0gsUUFBUSxJQUEwQztBQUNsRCxNQUFNLG1DQUFPO0FBQ2I7QUFDQSxPQUFPO0FBQUEsa0dBQUM7QUFDUixLQUFLLE1BQU0sRUFFTjtBQUNMOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjQ4ODkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFAbGljZW5zZVxuICogVUFQYXJzZXIuanMgdjAuNy4yOFxuICogTGlnaHR3ZWlnaHQgSmF2YVNjcmlwdC1iYXNlZCBVc2VyLUFnZW50IHN0cmluZyBwYXJzZXJcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWlzYWxtYW4vdWEtcGFyc2VyLWpzXG4gKlxuICogQ29weXJpZ2h0IMKpIDIwMTItMjAyMSBGYWlzYWwgU2FsbWFuIDxmQGZhaXNhbG1hbi5jb20+XG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgTGljZW5zZVxuICovXG4oZnVuY3Rpb24gKHdpbmRvdywgdW5kZWZpbmVkKSB7XG4gIFwidXNlIHN0cmljdFwiO1xuXG4gIHZhciBMSUJWRVJTSU9OID0gXCIwLjcuMjhcIixcbiAgICAgIEVNUFRZID0gXCJcIixcbiAgICAgIFVOS05PV04gPSBcIj9cIixcbiAgICAgIEZVTkNfVFlQRSA9IFwiZnVuY3Rpb25cIixcbiAgICAgIFVOREVGX1RZUEUgPSBcInVuZGVmaW5lZFwiLFxuICAgICAgT0JKX1RZUEUgPSBcIm9iamVjdFwiLFxuICAgICAgU1RSX1RZUEUgPSBcInN0cmluZ1wiLFxuICAgICAgTUFKT1IgPSBcIm1ham9yXCIsXG4gICAgICBNT0RFTCA9IFwibW9kZWxcIixcbiAgICAgIE5BTUUgPSBcIm5hbWVcIixcbiAgICAgIFRZUEUgPSBcInR5cGVcIixcbiAgICAgIFZFTkRPUiA9IFwidmVuZG9yXCIsXG4gICAgICBWRVJTSU9OID0gXCJ2ZXJzaW9uXCIsXG4gICAgICBBUkNISVRFQ1RVUkUgPSBcImFyY2hpdGVjdHVyZVwiLFxuICAgICAgQ09OU09MRSA9IFwiY29uc29sZVwiLFxuICAgICAgTU9CSUxFID0gXCJtb2JpbGVcIixcbiAgICAgIFRBQkxFVCA9IFwidGFibGV0XCIsXG4gICAgICBTTUFSVFRWID0gXCJzbWFydHR2XCIsXG4gICAgICBXRUFSQUJMRSA9IFwid2VhcmFibGVcIixcbiAgICAgIEVNQkVEREVEID0gXCJlbWJlZGRlZFwiLFxuICAgICAgVUFfTUFYX0xFTkdUSCA9IDI1NTtcbiAgdmFyIHV0aWwgPSB7XG4gICAgZXh0ZW5kOiBmdW5jdGlvbiBleHRlbmQocmVnZXhlcywgZXh0ZW5zaW9ucykge1xuICAgICAgdmFyIG1lcmdlZFJlZ2V4ZXMgPSB7fTtcblxuICAgICAgZm9yICh2YXIgaSBpbiByZWdleGVzKSB7XG4gICAgICAgIGlmIChleHRlbnNpb25zW2ldICYmIGV4dGVuc2lvbnNbaV0ubGVuZ3RoICUgMiA9PT0gMCkge1xuICAgICAgICAgIG1lcmdlZFJlZ2V4ZXNbaV0gPSBleHRlbnNpb25zW2ldLmNvbmNhdChyZWdleGVzW2ldKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBtZXJnZWRSZWdleGVzW2ldID0gcmVnZXhlc1tpXTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbWVyZ2VkUmVnZXhlcztcbiAgICB9LFxuICAgIGhhczogZnVuY3Rpb24gaGFzKHN0cjEsIHN0cjIpIHtcbiAgICAgIHJldHVybiB0eXBlb2Ygc3RyMSA9PT0gU1RSX1RZUEUgPyBzdHIyLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihzdHIxLnRvTG93ZXJDYXNlKCkpICE9PSAtMSA6IGZhbHNlO1xuICAgIH0sXG4gICAgbG93ZXJpemU6IGZ1bmN0aW9uIGxvd2VyaXplKHN0cikge1xuICAgICAgcmV0dXJuIHN0ci50b0xvd2VyQ2FzZSgpO1xuICAgIH0sXG4gICAgbWFqb3I6IGZ1bmN0aW9uIG1ham9yKHZlcnNpb24pIHtcbiAgICAgIHJldHVybiB0eXBlb2YgdmVyc2lvbiA9PT0gU1RSX1RZUEUgPyB2ZXJzaW9uLnJlcGxhY2UoL1teXFxkXFwuXS9nLCBcIlwiKS5zcGxpdChcIi5cIilbMF0gOiB1bmRlZmluZWQ7XG4gICAgfSxcbiAgICB0cmltOiBmdW5jdGlvbiB0cmltKHN0ciwgbGVuKSB7XG4gICAgICBzdHIgPSBzdHIucmVwbGFjZSgvXltcXHNcXHVGRUZGXFx4QTBdK3xbXFxzXFx1RkVGRlxceEEwXSskL2csIFwiXCIpO1xuICAgICAgcmV0dXJuIHR5cGVvZiBsZW4gPT09IFVOREVGX1RZUEUgPyBzdHIgOiBzdHIuc3Vic3RyaW5nKDAsIFVBX01BWF9MRU5HVEgpO1xuICAgIH1cbiAgfTtcbiAgdmFyIG1hcHBlciA9IHtcbiAgICByZ3g6IGZ1bmN0aW9uIHJneCh1YSwgYXJyYXlzKSB7XG4gICAgICB2YXIgaSA9IDAsXG4gICAgICAgICAgaixcbiAgICAgICAgICBrLFxuICAgICAgICAgIHAsXG4gICAgICAgICAgcSxcbiAgICAgICAgICBtYXRjaGVzLFxuICAgICAgICAgIG1hdGNoO1xuXG4gICAgICB3aGlsZSAoaSA8IGFycmF5cy5sZW5ndGggJiYgIW1hdGNoZXMpIHtcbiAgICAgICAgdmFyIHJlZ2V4ID0gYXJyYXlzW2ldLFxuICAgICAgICAgICAgcHJvcHMgPSBhcnJheXNbaSArIDFdO1xuICAgICAgICBqID0gayA9IDA7XG5cbiAgICAgICAgd2hpbGUgKGogPCByZWdleC5sZW5ndGggJiYgIW1hdGNoZXMpIHtcbiAgICAgICAgICBtYXRjaGVzID0gcmVnZXhbaisrXS5leGVjKHVhKTtcblxuICAgICAgICAgIGlmICghIW1hdGNoZXMpIHtcbiAgICAgICAgICAgIGZvciAocCA9IDA7IHAgPCBwcm9wcy5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgICBtYXRjaCA9IG1hdGNoZXNbKytrXTtcbiAgICAgICAgICAgICAgcSA9IHByb3BzW3BdO1xuXG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgcSA9PT0gT0JKX1RZUEUgJiYgcS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKHEubGVuZ3RoID09IDIpIHtcbiAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcVsxXSA9PSBGVU5DX1RZUEUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpc1txWzBdXSA9IHFbMV0uY2FsbCh0aGlzLCBtYXRjaCk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzW3FbMF1dID0gcVsxXTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHEubGVuZ3RoID09IDMpIHtcbiAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcVsxXSA9PT0gRlVOQ19UWVBFICYmICEocVsxXS5leGVjICYmIHFbMV0udGVzdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpc1txWzBdXSA9IG1hdGNoID8gcVsxXS5jYWxsKHRoaXMsIG1hdGNoLCBxWzJdKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXNbcVswXV0gPSBtYXRjaCA/IG1hdGNoLnJlcGxhY2UocVsxXSwgcVsyXSkgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChxLmxlbmd0aCA9PSA0KSB7XG4gICAgICAgICAgICAgICAgICB0aGlzW3FbMF1dID0gbWF0Y2ggPyBxWzNdLmNhbGwodGhpcywgbWF0Y2gucmVwbGFjZShxWzFdLCBxWzJdKSkgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXNbcV0gPSBtYXRjaCA/IG1hdGNoIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaSArPSAyO1xuICAgICAgfVxuICAgIH0sXG4gICAgc3RyOiBmdW5jdGlvbiBzdHIoX3N0ciwgbWFwKSB7XG4gICAgICBmb3IgKHZhciBpIGluIG1hcCkge1xuICAgICAgICBpZiAodHlwZW9mIG1hcFtpXSA9PT0gT0JKX1RZUEUgJiYgbWFwW2ldLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG1hcFtpXS5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgaWYgKHV0aWwuaGFzKG1hcFtpXVtqXSwgX3N0cikpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGkgPT09IFVOS05PV04gPyB1bmRlZmluZWQgOiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh1dGlsLmhhcyhtYXBbaV0sIF9zdHIpKSB7XG4gICAgICAgICAgcmV0dXJuIGkgPT09IFVOS05PV04gPyB1bmRlZmluZWQgOiBpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfc3RyO1xuICAgIH1cbiAgfTtcbiAgdmFyIG1hcHMgPSB7XG4gICAgYnJvd3Nlcjoge1xuICAgICAgb2xkU2FmYXJpOiB7XG4gICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICBcIjEuMFwiOiBcIi84XCIsXG4gICAgICAgICAgMS4yOiBcIi8xXCIsXG4gICAgICAgICAgMS4zOiBcIi8zXCIsXG4gICAgICAgICAgXCIyLjBcIjogXCIvNDEyXCIsXG4gICAgICAgICAgXCIyLjAuMlwiOiBcIi80MTZcIixcbiAgICAgICAgICBcIjIuMC4zXCI6IFwiLzQxN1wiLFxuICAgICAgICAgIFwiMi4wLjRcIjogXCIvNDE5XCIsXG4gICAgICAgICAgXCI/XCI6IFwiL1wiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBvbGRFZGdlOiB7XG4gICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAuMTogXCIxMi5cIixcbiAgICAgICAgICAyMTogXCIxMy5cIixcbiAgICAgICAgICAzMTogXCIxNC5cIixcbiAgICAgICAgICAzOTogXCIxNS5cIixcbiAgICAgICAgICA0MTogXCIxNi5cIixcbiAgICAgICAgICA0MjogXCIxNy5cIixcbiAgICAgICAgICA0NDogXCIxOC5cIlxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBvczoge1xuICAgICAgd2luZG93czoge1xuICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgTUU6IFwiNC45MFwiLFxuICAgICAgICAgIFwiTlQgMy4xMVwiOiBcIk5UMy41MVwiLFxuICAgICAgICAgIFwiTlQgNC4wXCI6IFwiTlQ0LjBcIixcbiAgICAgICAgICAyZTM6IFwiTlQgNS4wXCIsXG4gICAgICAgICAgWFA6IFtcIk5UIDUuMVwiLCBcIk5UIDUuMlwiXSxcbiAgICAgICAgICBWaXN0YTogXCJOVCA2LjBcIixcbiAgICAgICAgICA3OiBcIk5UIDYuMVwiLFxuICAgICAgICAgIDg6IFwiTlQgNi4yXCIsXG4gICAgICAgICAgOC4xOiBcIk5UIDYuM1wiLFxuICAgICAgICAgIDEwOiBbXCJOVCA2LjRcIiwgXCJOVCAxMC4wXCJdLFxuICAgICAgICAgIFJUOiBcIkFSTVwiXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIHZhciByZWdleGVzID0ge1xuICAgIGJyb3dzZXI6IFtbL1xcYig/OmNybW98Y3Jpb3MpXFwvKFtcXHdcXC5dKykvaV0sIFtWRVJTSU9OLCBbTkFNRSwgXCJDaHJvbWVcIl1dLCBbLyg/OmVkZ2V8ZWRnaW9zfGVkZ2F8ZWRnKVxcLyhbXFx3XFwuXSspL2ldLCBbVkVSU0lPTiwgW05BTUUsIFwiRWRnZVwiXV0sIFsvKG9wZXJhXFxzbWluaSlcXC8oW1xcd1xcLi1dKykvaSwgLyhvcGVyYVxcc1ttb2JpbGV0YWJdezMsNn0pXFxiLit2ZXJzaW9uXFwvKFtcXHdcXC4tXSspL2ksIC8ob3BlcmEpKD86Lit2ZXJzaW9uXFwvfFtcXC9cXHNdKykoW1xcd1xcLl0rKS9pXSwgW05BTUUsIFZFUlNJT05dLCBbL29waW9zW1xcL1xcc10rKFtcXHdcXC5dKykvaV0sIFtWRVJTSU9OLCBbTkFNRSwgXCJPcGVyYSBNaW5pXCJdXSwgWy9cXHNvcHJcXC8oW1xcd1xcLl0rKS9pXSwgW1ZFUlNJT04sIFtOQU1FLCBcIk9wZXJhXCJdXSwgWy8oa2luZGxlKVxcLyhbXFx3XFwuXSspL2ksIC8obHVuYXNjYXBlfG1heHRob258bmV0ZnJvbnR8amFzbWluZXxibGF6ZXIpW1xcL1xcc10/KFtcXHdcXC5dKikvaSwgLyhhdmFudFxcc3xpZW1vYmlsZXxzbGltKSg/OmJyb3dzZXIpP1tcXC9cXHNdPyhbXFx3XFwuXSopL2ksIC8oYmE/aWR1YnJvd3NlcilbXFwvXFxzXT8oW1xcd1xcLl0rKS9pLCAvKD86bXN8XFwoKShpZSlcXHMoW1xcd1xcLl0rKS9pLCAvKGZsb2NrfHJvY2ttZWx0fG1pZG9yaXxlcGlwaGFueXxzaWxrfHNreWZpcmV8b3ZpYnJvd3Nlcnxib2x0fGlyb258dml2YWxkaXxpcmlkaXVtfHBoYW50b21qc3xib3dzZXJ8cXVhcmt8cXVwemlsbGF8ZmFsa29uKVxcLyhbXFx3XFwuLV0rKS9pLCAvKHJla29ucXxwdWZmaW58YnJhdmV8d2hhbGV8cXFicm93c2VybGl0ZXxxcSlcXC8oW1xcd1xcLl0rKS9pLCAvKHdlaWJvKV9fKFtcXGRcXC5dKykvaV0sIFtOQU1FLCBWRVJTSU9OXSwgWy8oPzpbXFxzXFwvXXVjP1xccz9icm93c2VyfCg/Omp1Yy4rKXVjd2ViKVtcXC9cXHNdPyhbXFx3XFwuXSspL2ldLCBbVkVSU0lPTiwgW05BTUUsIFwiVUNCcm93c2VyXCJdXSwgWy8oPzp3aW5kb3dzd2VjaGF0KT9cXHNxYmNvcmVcXC8oW1xcd1xcLl0rKVxcYi4qKD86d2luZG93c3dlY2hhdCk/L2ldLCBbVkVSU0lPTiwgW05BTUUsIFwiV2VDaGF0KFdpbikgRGVza3RvcFwiXV0sIFsvbWljcm9tZXNzZW5nZXJcXC8oW1xcd1xcLl0rKS9pXSwgW1ZFUlNJT04sIFtOQU1FLCBcIldlQ2hhdFwiXV0sIFsva29ucXVlcm9yXFwvKFtcXHdcXC5dKykvaV0sIFtWRVJTSU9OLCBbTkFNRSwgXCJLb25xdWVyb3JcIl1dLCBbL3RyaWRlbnQuK3J2WzpcXHNdKFtcXHdcXC5dezEsOX0pXFxiLitsaWtlXFxzZ2Vja28vaV0sIFtWRVJTSU9OLCBbTkFNRSwgXCJJRVwiXV0sIFsveWFicm93c2VyXFwvKFtcXHdcXC5dKykvaV0sIFtWRVJTSU9OLCBbTkFNRSwgXCJZYW5kZXhcIl1dLCBbLyhhdmFzdHxhdmcpXFwvKFtcXHdcXC5dKykvaV0sIFtbTkFNRSwgLyguKykvLCBcIiQxIFNlY3VyZSBCcm93c2VyXCJdLCBWRVJTSU9OXSwgWy9mb2N1c1xcLyhbXFx3XFwuXSspL2ldLCBbVkVSU0lPTiwgW05BTUUsIFwiRmlyZWZveCBGb2N1c1wiXV0sIFsvb3B0XFwvKFtcXHdcXC5dKykvaV0sIFtWRVJTSU9OLCBbTkFNRSwgXCJPcGVyYSBUb3VjaFwiXV0sIFsvY29jX2NvY19icm93c2VyXFwvKFtcXHdcXC5dKykvaV0sIFtWRVJTSU9OLCBbTkFNRSwgXCJDb2MgQ29jXCJdXSwgWy9kb2xmaW5cXC8oW1xcd1xcLl0rKS9pXSwgW1ZFUlNJT04sIFtOQU1FLCBcIkRvbHBoaW5cIl1dLCBbL2NvYXN0XFwvKFtcXHdcXC5dKykvaV0sIFtWRVJTSU9OLCBbTkFNRSwgXCJPcGVyYSBDb2FzdFwiXV0sIFsveGlhb21pXFwvbWl1aWJyb3dzZXJcXC8oW1xcd1xcLl0rKS9pXSwgW1ZFUlNJT04sIFtOQU1FLCBcIk1JVUkgQnJvd3NlclwiXV0sIFsvZnhpb3NcXC8oW1xcd1xcLi1dKykvaV0sIFtWRVJTSU9OLCBbTkFNRSwgXCJGaXJlZm94XCJdXSwgWy8ocWlodXxxaGJyb3dzZXJ8cWlob29icm93c2VyfDM2MGJyb3dzZXIpL2ldLCBbW05BTUUsIFwiMzYwIEJyb3dzZXJcIl1dLCBbLyhvY3VsdXN8c2Ftc3VuZ3xzYWlsZmlzaClicm93c2VyXFwvKFtcXHdcXC5dKykvaV0sIFtbTkFNRSwgLyguKykvLCBcIiQxIEJyb3dzZXJcIl0sIFZFUlNJT05dLCBbLyhjb21vZG9fZHJhZ29uKVxcLyhbXFx3XFwuXSspL2ldLCBbW05BTUUsIC9fL2csIFwiIFwiXSwgVkVSU0lPTl0sIFsvXFxzKGVsZWN0cm9uKVxcLyhbXFx3XFwuXSspXFxzc2FmYXJpL2ksIC8odGVzbGEpKD86XFxzcXRjYXJicm93c2VyfFxcLygyMFsxMl1cXGRcXC5bXFx3XFwuLV0rKSkvaSwgL20/KHFxYnJvd3NlcnxiYWlkdWJveGFwcHwyMzQ1RXhwbG9yZXIpW1xcL1xcc10/KFtcXHdcXC5dKykvaV0sIFtOQU1FLCBWRVJTSU9OXSwgWy8oTWV0YVNyKVtcXC9cXHNdPyhbXFx3XFwuXSspL2ksIC8oTEJCUk9XU0VSKS9pXSwgW05BTUVdLCBbLztmYmF2XFwvKFtcXHdcXC5dKyk7L2ldLCBbVkVSU0lPTiwgW05BTUUsIFwiRmFjZWJvb2tcIl1dLCBbL0ZCQU5cXC9GQklPU3xGQl9JQUJcXC9GQjRBL2ldLCBbW05BTUUsIFwiRmFjZWJvb2tcIl1dLCBbL3NhZmFyaVxccyhsaW5lKVxcLyhbXFx3XFwuXSspL2ksIC9cXGIobGluZSlcXC8oW1xcd1xcLl0rKVxcL2lhYi9pLCAvKGNocm9taXVtfGluc3RhZ3JhbSlbXFwvXFxzXShbXFx3XFwuLV0rKS9pXSwgW05BTUUsIFZFUlNJT05dLCBbL1xcYmdzYVxcLyhbXFx3XFwuXSspXFxzLipzYWZhcmlcXC8vaV0sIFtWRVJTSU9OLCBbTkFNRSwgXCJHU0FcIl1dLCBbL2hlYWRsZXNzY2hyb21lKD86XFwvKFtcXHdcXC5dKyl8XFxzKS9pXSwgW1ZFUlNJT04sIFtOQU1FLCBcIkNocm9tZSBIZWFkbGVzc1wiXV0sIFsvXFxzd3ZcXCkuKyhjaHJvbWUpXFwvKFtcXHdcXC5dKykvaV0sIFtbTkFNRSwgXCJDaHJvbWUgV2ViVmlld1wiXSwgVkVSU0lPTl0sIFsvZHJvaWQuK1xcc3ZlcnNpb25cXC8oW1xcd1xcLl0rKVxcYi4rKD86bW9iaWxlXFxzc2FmYXJpfHNhZmFyaSkvaV0sIFtWRVJTSU9OLCBbTkFNRSwgXCJBbmRyb2lkIEJyb3dzZXJcIl1dLCBbLyhjaHJvbWV8b21uaXdlYnxhcm9yYXxbdGl6ZW5va2FdezV9XFxzP2Jyb3dzZXIpXFwvdj8oW1xcd1xcLl0rKS9pXSwgW05BTUUsIFZFUlNJT05dLCBbL3ZlcnNpb25cXC8oW1xcd1xcLl0rKVxccy4qbW9iaWxlXFwvXFx3K1xccyhzYWZhcmkpL2ldLCBbVkVSU0lPTiwgW05BTUUsIFwiTW9iaWxlIFNhZmFyaVwiXV0sIFsvdmVyc2lvblxcLyhbXFx3XFwuXSspXFxzLioobW9iaWxlXFxzP3NhZmFyaXxzYWZhcmkpL2ldLCBbVkVSU0lPTiwgTkFNRV0sIFsvd2Via2l0Lis/KG1vYmlsZVxccz9zYWZhcml8c2FmYXJpKShcXC9bXFx3XFwuXSspL2ldLCBbTkFNRSwgW1ZFUlNJT04sIG1hcHBlci5zdHIsIG1hcHMuYnJvd3Nlci5vbGRTYWZhcmkudmVyc2lvbl1dLCBbLyh3ZWJraXR8a2h0bWwpXFwvKFtcXHdcXC5dKykvaV0sIFtOQU1FLCBWRVJTSU9OXSwgWy8obmF2aWdhdG9yfG5ldHNjYXBlKVxcLyhbXFx3XFwuLV0rKS9pXSwgW1tOQU1FLCBcIk5ldHNjYXBlXCJdLCBWRVJTSU9OXSwgWy9pbGVcXHN2cjtcXHNydjooW1xcd1xcLl0rKVxcKS4rZmlyZWZveC9pXSwgW1ZFUlNJT04sIFtOQU1FLCBcIkZpcmVmb3ggUmVhbGl0eVwiXV0sIFsvZWtpb2hmLisoZmxvdylcXC8oW1xcd1xcLl0rKS9pLCAvKHN3aWZ0Zm94KS9pLCAvKGljZWRyYWdvbnxpY2V3ZWFzZWx8Y2FtaW5vfGNoaW1lcmF8ZmVubmVjfG1hZW1vXFxzYnJvd3NlcnxtaW5pbW98Y29ua2Vyb3IpW1xcL1xcc10/KFtcXHdcXC5cXCtdKykvaSwgLyhmaXJlZm94fHNlYW1vbmtleXxrLW1lbGVvbnxpY2VjYXR8aWNlYXBlfGZpcmViaXJkfHBob2VuaXh8cGFsZW1vb258YmFzaWxpc2t8d2F0ZXJmb3gpXFwvKFtcXHdcXC4tXSspJC9pLCAvKGZpcmVmb3gpXFwvKFtcXHdcXC5dKylcXHNbXFx3XFxzXFwtXStcXC9bXFx3XFwuXSskL2ksIC8obW96aWxsYSlcXC8oW1xcd1xcLl0rKVxccy4rcnZcXDouK2dlY2tvXFwvXFxkKy9pLCAvKHBvbGFyaXN8bHlueHxkaWxsb3xpY2FifGRvcmlzfGFtYXlhfHczbXxuZXRzdXJmfHNsZWlwbmlyKVtcXC9cXHNdPyhbXFx3XFwuXSspL2ksIC8obGlua3MpXFxzXFwoKFtcXHdcXC5dKykvaSwgLyhnb2Jyb3dzZXIpXFwvPyhbXFx3XFwuXSopL2ksIC8oaWNlXFxzP2Jyb3dzZXIpXFwvdj8oW1xcd1xcLl9dKykvaSwgLyhtb3NhaWMpW1xcL1xcc10oW1xcd1xcLl0rKS9pXSwgW05BTUUsIFZFUlNJT05dXSxcbiAgICBjcHU6IFtbLyg/OihhbWR8eCg/Oig/Ojg2fDY0KVtfLV0pP3x3b3d8d2luKTY0KVs7XFwpXS9pXSwgW1tBUkNISVRFQ1RVUkUsIFwiYW1kNjRcIl1dLCBbLyhpYTMyKD89OykpL2ldLCBbW0FSQ0hJVEVDVFVSRSwgdXRpbC5sb3dlcml6ZV1dLCBbLygoPzppWzM0Nl18eCk4NilbO1xcKV0vaV0sIFtbQVJDSElURUNUVVJFLCBcImlhMzJcIl1dLCBbL1xcYihhYXJjaDY0fGFybXY/OGU/bD8pXFxiL2ldLCBbW0FSQ0hJVEVDVFVSRSwgXCJhcm02NFwiXV0sIFsvXFxiKGFybSg/OnZbNjddKT9odD9uP1tmbF1wPylcXGIvaV0sIFtbQVJDSElURUNUVVJFLCBcImFybWhmXCJdXSwgWy93aW5kb3dzXFxzKGNlfG1vYmlsZSk7XFxzcHBjOy9pXSwgW1tBUkNISVRFQ1RVUkUsIFwiYXJtXCJdXSwgWy8oKD86cHBjfHBvd2VycGMpKD86NjQpPykoPzpcXHNtYWN8O3xcXCkpL2ldLCBbW0FSQ0hJVEVDVFVSRSwgL293ZXIvLCBcIlwiLCB1dGlsLmxvd2VyaXplXV0sIFsvKHN1bjRcXHcpWztcXCldL2ldLCBbW0FSQ0hJVEVDVFVSRSwgXCJzcGFyY1wiXV0sIFsvKCg/OmF2cjMyfGlhNjQoPz07KSl8NjhrKD89XFwpKXxcXGJhcm0oPzo2NHwoPz12KD86WzEtN118WzUtN10xKWw/fDt8ZWFiaSkpfCg/PWF0bWVsXFxzKWF2cnwoPzppcml4fG1pcHN8c3BhcmMpKD86NjQpP1xcYnxwYS1yaXNjKS9pXSwgW1tBUkNISVRFQ1RVUkUsIHV0aWwubG93ZXJpemVdXV0sXG4gICAgZGV2aWNlOiBbWy9cXGIoc2NoLWlbODldMFxcZHxzaHctbTM4MHN8c20tW3B0XVxcd3syLDR9fGd0LVtwbl1cXGR7Miw0fXxzZ2gtdDhbNTZdOXxuZXh1c1xcczEwKS9pXSwgW01PREVMLCBbVkVORE9SLCBcIlNhbXN1bmdcIl0sIFtUWVBFLCBUQUJMRVRdXSwgWy9cXGIoKD86c1tjZ3BdaHxndHxzbSktXFx3K3xnYWxheHlcXHNuZXh1cykvaSwgL1xcc3NhbXN1bmdbXFxzLV0oW1xcdy1dKykvaSwgL3NlYy0oc2doXFx3KykvaV0sIFtNT0RFTCwgW1ZFTkRPUiwgXCJTYW1zdW5nXCJdLCBbVFlQRSwgTU9CSUxFXV0sIFsvXFwoKGlwKD86aG9uZXxvZClbXFxzXFx3XSopOy9pXSwgW01PREVMLCBbVkVORE9SLCBcIkFwcGxlXCJdLCBbVFlQRSwgTU9CSUxFXV0sIFsvXFwoKGlwYWQpO1tcXHdcXHNcXCksOy1dK2FwcGxlL2ksIC9hcHBsZWNvcmVtZWRpYVxcL1tcXHdcXC5dK1xcc1xcKChpcGFkKS9pLCAvXFxiKGlwYWQpXFxkXFxkPyxcXGRcXGQ/WztcXF1dLitpb3MvaV0sIFtNT0RFTCwgW1ZFTkRPUiwgXCJBcHBsZVwiXSwgW1RZUEUsIFRBQkxFVF1dLCBbL1xcYigoPzphZ3J8YWdzWzIzXXxiYWgyP3xzaHQ/KS1hP1tsd11cXGR7Mn0pL2ldLCBbTU9ERUwsIFtWRU5ET1IsIFwiSHVhd2VpXCJdLCBbVFlQRSwgVEFCTEVUXV0sIFsvZFxcL2h1YXdlaShbXFx3XFxzLV0rKVs7XFwpXS9pLCAvXFxiKG5leHVzXFxzNnB8dm9nLVthdF0/bFxcZFxcZHxhbmUtW2F0XT9sW3hcXGRdXFxkfGVtbC1hP2xcXGRcXGRhP3xseWEtW2F0XT9sXFxkW1xcZGNdfGNsdC1hP2xcXGRcXGRpP3xlbGUtbFxcZFxcZCkvaSwgL1xcYihcXHd7Miw0fS1bYXR1XVtsbl1bMDEyNTldWzAxOV0pWztcXClcXHNdL2ldLCBbTU9ERUwsIFtWRU5ET1IsIFwiSHVhd2VpXCJdLCBbVFlQRSwgTU9CSUxFXV0sIFsvXFxiKHBvY29bXFxzXFx3XSspKD86XFxzYnVpbGR8XFwpKS9pLCAvXFxiO1xccyhcXHcrKVxcc2J1aWxkXFwvaG1cXDEvaSwgL1xcYihobVtcXHNcXC1fXT9ub3RlP1tcXHNfXT8oPzpcXGRcXHcpPylcXHNidWlsZC9pLCAvXFxiKHJlZG1pW1xcc1xcLV9dPyg/Om5vdGV8ayk/W1xcd1xcc19dKykoPzpcXHNidWlsZHxcXCkpL2ksIC9cXGIobWlbXFxzXFwtX10/KD86YVxcZHxvbmV8b25lW1xcc19dcGx1c3xub3RlIGx0ZSk/W1xcc19dPyg/OlxcZD9cXHc/KVtcXHNfXT8oPzpwbHVzKT8pXFxzYnVpbGQvaV0sIFtbTU9ERUwsIC9fL2csIFwiIFwiXSwgW1ZFTkRPUiwgXCJYaWFvbWlcIl0sIFtUWVBFLCBNT0JJTEVdXSwgWy9cXGIobWlbXFxzXFwtX10/KD86cGFkKSg/OltcXHdcXHNfXSspKSg/Olxcc2J1aWxkfFxcKSkvaV0sIFtbTU9ERUwsIC9fL2csIFwiIFwiXSwgW1ZFTkRPUiwgXCJYaWFvbWlcIl0sIFtUWVBFLCBUQUJMRVRdXSwgWy87XFxzKFxcdyspXFxzYnVpbGQuK1xcc29wcG8vaSwgL1xccyhjcGhbMTJdXFxkezN9fHAoPzphZnxjW2FsXXxkXFx3fGVbYXJdKVttdF1cXGQwfHg5MDA3KVxcYi9pXSwgW01PREVMLCBbVkVORE9SLCBcIk9QUE9cIl0sIFtUWVBFLCBNT0JJTEVdXSwgWy9cXHN2aXZvXFxzKFxcdyspKD86XFxzYnVpbGR8XFwpKS9pLCAvXFxzKHZbMTJdXFxkezN9XFx3P1thdF0pKD86XFxzYnVpbGR8OykvaV0sIFtNT0RFTCwgW1ZFTkRPUiwgXCJWaXZvXCJdLCBbVFlQRSwgTU9CSUxFXV0sIFsvXFxzKHJteFsxMl1cXGR7M30pKD86XFxzYnVpbGR8OykvaV0sIFtNT0RFTCwgW1ZFTkRPUiwgXCJSZWFsbWVcIl0sIFtUWVBFLCBNT0JJTEVdXSwgWy9cXHMobWlsZXN0b25lfGRyb2lkKD86WzItNHhdfFxccyg/OmJpb25pY3x4Mnxwcm98cmF6cikpPzo/KFxcczRnKT8pXFxiW1xcd1xcc10rYnVpbGRcXC8vaSwgL1xcc21vdCg/Om9yb2xhKT9bXFxzLV0oXFx3KikvaSwgLygoPzptb3RvW1xcc1xcd1xcKFxcKV0rfHh0XFxkezMsNH18bmV4dXNcXHM2KSg/PVxcc2J1aWxkfFxcKSkpL2ldLCBbTU9ERUwsIFtWRU5ET1IsIFwiTW90b3JvbGFcIl0sIFtUWVBFLCBNT0JJTEVdXSwgWy9cXHMobXo2MFxcZHx4b29tW1xcczJdezAsMn0pXFxzYnVpbGRcXC8vaV0sIFtNT0RFTCwgW1ZFTkRPUiwgXCJNb3Rvcm9sYVwiXSwgW1RZUEUsIFRBQkxFVF1dLCBbLygoPz1sZyk/W3ZsXWtcXC0/XFxkezN9KVxcc2J1aWxkfFxcczNcXC5bXFxzXFx3Oy1dezEwfWxnPy0oWzA2Y3Y5XXszLDR9KS9pXSwgW01PREVMLCBbVkVORE9SLCBcIkxHXCJdLCBbVFlQRSwgVEFCTEVUXV0sIFsvKGxtLT9mMTAwW252XT98bmV4dXNcXHNbNDVdKS9pLCAvbGdbZTtcXHNcXC8tXSsoKD8hYnJvd3NlcnxuZXRjYXN0KVxcdyspL2ksIC9cXGJsZyhcXC0/W1xcZFxcd10rKVxcc2J1aWxkL2ldLCBbTU9ERUwsIFtWRU5ET1IsIFwiTEdcIl0sIFtUWVBFLCBNT0JJTEVdXSwgWy8oaWRlYXRhYltcXHdcXC1cXHNdKykvaSwgL2xlbm92b1xccz8ocyg/OjUwMDB8NjAwMCkoPzpbXFx3LV0rKXx0YWIoPzpbXFxzXFx3XSspfHl0W1xcZFxcdy1dezZ9fHRiW1xcZFxcdy1dezZ9KS9pXSwgW01PREVMLCBbVkVORE9SLCBcIkxlbm92b1wiXSwgW1RZUEUsIFRBQkxFVF1dLCBbLyg/Om1hZW1vfG5va2lhKS4qKG45MDB8bHVtaWFcXHNcXGQrKS9pLCAvbm9raWFbXFxzXy1dPyhbXFx3XFwuLV0qKS9pXSwgW1tNT0RFTCwgL18vZywgXCIgXCJdLCBbVkVORE9SLCBcIk5va2lhXCJdLCBbVFlQRSwgTU9CSUxFXV0sIFsvZHJvaWQuKztcXHMocGl4ZWxcXHNjKVtcXHMpXS9pXSwgW01PREVMLCBbVkVORE9SLCBcIkdvb2dsZVwiXSwgW1RZUEUsIFRBQkxFVF1dLCBbL2Ryb2lkLis7XFxzKHBpeGVsW1xcc1xcZGF4bF17MCw2fSkoPzpcXHNidWlsZHxcXCkpL2ldLCBbTU9ERUwsIFtWRU5ET1IsIFwiR29vZ2xlXCJdLCBbVFlQRSwgTU9CSUxFXV0sIFsvZHJvaWQuK1xccyhbYy1nXVxcZHs0fXxzb1stbF1cXHcrfHhxLWFcXHdbNC03XVsxMl0pKD89XFxzYnVpbGRcXC98XFwpLitjaHJvbWVcXC8oPyFbMS02XXswLDF9XFxkXFwuKSkvaV0sIFtNT0RFTCwgW1ZFTkRPUiwgXCJTb255XCJdLCBbVFlQRSwgTU9CSUxFXV0sIFsvc29ueVxcc3RhYmxldFxcc1twc11cXHNidWlsZFxcLy9pLCAvKD86c29ueSk/c2dwXFx3Kyg/Olxcc2J1aWxkXFwvfFxcKSkvaV0sIFtbTU9ERUwsIFwiWHBlcmlhIFRhYmxldFwiXSwgW1ZFTkRPUiwgXCJTb255XCJdLCBbVFlQRSwgVEFCTEVUXV0sIFsvXFxzKGtiMjAwNXxpbjIwWzEyXTV8YmUyMFsxMl1bNTldKVxcYi9pLCAvXFxiYTAwMCgxKVxcc2J1aWxkL2ksIC9cXGJvbmVwbHVzXFxzKGFcXGR7NH0pW1xccyldL2ldLCBbTU9ERUwsIFtWRU5ET1IsIFwiT25lUGx1c1wiXSwgW1RZUEUsIE1PQklMRV1dLCBbLyhhbGV4YSl3ZWJtL2ksIC8oa2ZbYS16XXsyfXdpKShcXHNidWlsZFxcL3xcXCkpL2ksIC8oa2ZbYS16XSspKFxcc2J1aWxkXFwvfFxcKSkuK3NpbGtcXC8vaV0sIFtNT0RFTCwgW1ZFTkRPUiwgXCJBbWF6b25cIl0sIFtUWVBFLCBUQUJMRVRdXSwgWy8oc2R8a2YpWzAzNDloaWpvcnN0dXddKyhcXHNidWlsZFxcL3xcXCkpLitzaWxrXFwvL2ldLCBbW01PREVMLCBcIkZpcmUgUGhvbmVcIl0sIFtWRU5ET1IsIFwiQW1hem9uXCJdLCBbVFlQRSwgTU9CSUxFXV0sIFsvXFwoKHBsYXlib29rKTtbXFx3XFxzXFwpLDstXSsocmltKS9pXSwgW01PREVMLCBWRU5ET1IsIFtUWVBFLCBUQUJMRVRdXSwgWy8oKD86YmJbYS1mXXxzdFtodl0pMTAwLVxcZCkvaSwgL1xcKGJiMTA7XFxzKFxcdyspL2ldLCBbTU9ERUwsIFtWRU5ET1IsIFwiQmxhY2tCZXJyeVwiXSwgW1RZUEUsIE1PQklMRV1dLCBbLyg/OlxcYnxhc3VzXykodHJhbnNmb1twcmltZVxcc117NCwxMH1cXHNcXHcrfGVlZXBjfHNsaWRlclxcc1xcdyt8bmV4dXNcXHM3fHBhZGZvbmV8cDAwW2NqXSkvaV0sIFtNT0RFTCwgW1ZFTkRPUiwgXCJBU1VTXCJdLCBbVFlQRSwgVEFCTEVUXV0sIFsvXFxzKHpbZXNdNlswMjddWzAxXVtrbV1bbHNdfHplbmZvbmVcXHNcXGRcXHc/KVxcYi9pXSwgW01PREVMLCBbVkVORE9SLCBcIkFTVVNcIl0sIFtUWVBFLCBNT0JJTEVdXSwgWy8obmV4dXNcXHM5KS9pXSwgW01PREVMLCBbVkVORE9SLCBcIkhUQ1wiXSwgW1RZUEUsIFRBQkxFVF1dLCBbLyhodGMpWztfXFxzLV17MSwyfShbXFx3XFxzXSsoPz1cXCl8XFxzYnVpbGQpfFxcdyspL2ksIC8oenRlKS0oXFx3KikvaSwgLyhhbGNhdGVsfGdlZWtzcGhvbmV8bmV4aWFufHBhbmFzb25pY3woPz07XFxzKXNvbnkpW19cXHMtXT8oW1xcdy1dKikvaV0sIFtWRU5ET1IsIFtNT0RFTCwgL18vZywgXCIgXCJdLCBbVFlQRSwgTU9CSUxFXV0sIFsvZHJvaWRbeFxcZFxcLlxccztdK1xccyhbYWJdWzEtN11cXC0/WzAxNzhhXVxcZFxcZD8pL2ldLCBbTU9ERUwsIFtWRU5ET1IsIFwiQWNlclwiXSwgW1RZUEUsIFRBQkxFVF1dLCBbL2Ryb2lkLis7XFxzKG1bMS01XVxcc25vdGUpXFxzYnVpbGQvaSwgL1xcYm16LShbXFx3LV17Mix9KS9pXSwgW01PREVMLCBbVkVORE9SLCBcIk1laXp1XCJdLCBbVFlQRSwgTU9CSUxFXV0sIFsvKGJsYWNrYmVycnl8YmVucXxwYWxtKD89XFwtKXxzb255ZXJpY3Nzb258YWNlcnxhc3VzfGRlbGx8bWVpenV8bW90b3JvbGF8cG9seXRyb24pW1xcc18tXT8oW1xcdy1dKikvaSwgLyhocClcXHMoW1xcd1xcc10rXFx3KS9pLCAvKGFzdXMpLT8oXFx3KykvaSwgLyhtaWNyb3NvZnQpO1xccyhsdW1pYVtcXHNcXHddKykvaSwgLyhsZW5vdm8pW19cXHMtXT8oW1xcdy1dKykvaSwgL2xpbnV4Oy4rKGpvbGxhKTsvaSwgL2Ryb2lkLis7XFxzKG9wcG8pXFxzPyhbXFx3XFxzXSspXFxzYnVpbGQvaV0sIFtWRU5ET1IsIE1PREVMLCBbVFlQRSwgTU9CSUxFXV0sIFsvKGFyY2hvcylcXHMoZ2FtZXBhZDI/KS9pLCAvKGhwKS4rKHRvdWNocGFkKD8hLit0YWJsZXQpfHRhYmxldCkvaSwgLyhraW5kbGUpXFwvKFtcXHdcXC5dKykvaSwgL1xccyhub29rKVtcXHdcXHNdK2J1aWxkXFwvKFxcdyspL2ksIC8oZGVsbClcXHMoc3RyZWFba3ByXFxzXFxkXSpbXFxka29dKS9pLCAvWztcXC9dXFxzPyhsZVtcXHNcXC1dK3BhbilbXFxzXFwtXSsoXFx3ezEsOX0pXFxzYnVpbGQvaSwgL1s7XFwvXVxccz8odHJpbml0eSlbXFwtXFxzXSoodFxcZHszfSlcXHNidWlsZC9pLCAvXFxiKGdpZ2FzZXQpW1xcc1xcLV0rKHFcXHd7MSw5fSlcXHNidWlsZC9pLCAvXFxiKHZvZGFmb25lKVxccyhbXFx3XFxzXSspKD86XFwpfFxcc2J1aWxkKS9pXSwgW1ZFTkRPUiwgTU9ERUwsIFtUWVBFLCBUQUJMRVRdXSwgWy9cXHMoc3VyZmFjZVxcc2R1bylcXHMvaV0sIFtNT0RFTCwgW1ZFTkRPUiwgXCJNaWNyb3NvZnRcIl0sIFtUWVBFLCBUQUJMRVRdXSwgWy9kcm9pZFxcc1tcXGRcXC5dKztcXHMoZnBcXGR1PylcXHNidWlsZC9pXSwgW01PREVMLCBbVkVORE9SLCBcIkZhaXJwaG9uZVwiXSwgW1RZUEUsIE1PQklMRV1dLCBbL1xccyh1MzA0YWEpXFxzYnVpbGQvaV0sIFtNT0RFTCwgW1ZFTkRPUiwgXCJBVCZUXCJdLCBbVFlQRSwgTU9CSUxFXV0sIFsvc2llLShcXHcqKS9pXSwgW01PREVMLCBbVkVORE9SLCBcIlNpZW1lbnNcIl0sIFtUWVBFLCBNT0JJTEVdXSwgWy9bO1xcL11cXHM/KHJjdFxcdyspXFxzYnVpbGQvaV0sIFtNT0RFTCwgW1ZFTkRPUiwgXCJSQ0FcIl0sIFtUWVBFLCBUQUJMRVRdXSwgWy9bO1xcL1xcc10odmVudWVbXFxkXFxzXXsyLDd9KVxcc2J1aWxkL2ldLCBbTU9ERUwsIFtWRU5ET1IsIFwiRGVsbFwiXSwgW1RZUEUsIFRBQkxFVF1dLCBbL1s7XFwvXVxccz8ocSg/Om12fHRhKVxcdyspXFxzYnVpbGQvaV0sIFtNT0RFTCwgW1ZFTkRPUiwgXCJWZXJpem9uXCJdLCBbVFlQRSwgVEFCTEVUXV0sIFsvWztcXC9dXFxzKD86YmFybmVzWyZcXHNdK25vYmxlXFxzfGJuW3J0XSkoW1xcd1xcc1xcK10qKVxcc2J1aWxkL2ldLCBbTU9ERUwsIFtWRU5ET1IsIFwiQmFybmVzICYgTm9ibGVcIl0sIFtUWVBFLCBUQUJMRVRdXSwgWy9bO1xcL11cXHModG1cXGR7M31cXHcrKVxcc2J1aWxkL2ldLCBbTU9ERUwsIFtWRU5ET1IsIFwiTnVWaXNpb25cIl0sIFtUWVBFLCBUQUJMRVRdXSwgWy87XFxzKGs4OClcXHNidWlsZC9pXSwgW01PREVMLCBbVkVORE9SLCBcIlpURVwiXSwgW1RZUEUsIFRBQkxFVF1dLCBbLztcXHMobnhcXGR7M31qKVxcc2J1aWxkL2ldLCBbTU9ERUwsIFtWRU5ET1IsIFwiWlRFXCJdLCBbVFlQRSwgTU9CSUxFXV0sIFsvWztcXC9dXFxzPyhnZW5cXGR7M30pXFxzYnVpbGQuKjQ5aC9pXSwgW01PREVMLCBbVkVORE9SLCBcIlN3aXNzXCJdLCBbVFlQRSwgTU9CSUxFXV0sIFsvWztcXC9dXFxzPyh6dXJcXGR7M30pXFxzYnVpbGQvaV0sIFtNT0RFTCwgW1ZFTkRPUiwgXCJTd2lzc1wiXSwgW1RZUEUsIFRBQkxFVF1dLCBbL1s7XFwvXVxccz8oKHpla2kpP3RiLipcXGIpXFxzYnVpbGQvaV0sIFtNT0RFTCwgW1ZFTkRPUiwgXCJaZWtpXCJdLCBbVFlQRSwgVEFCTEVUXV0sIFsvWztcXC9dXFxzKFt5cl1cXGR7Mn0pXFxzYnVpbGQvaSwgL1s7XFwvXVxccyhkcmFnb25bXFwtXFxzXSt0b3VjaFxcc3xkdCkoXFx3ezV9KVxcc2J1aWxkL2ldLCBbW1ZFTkRPUiwgXCJEcmFnb24gVG91Y2hcIl0sIE1PREVMLCBbVFlQRSwgVEFCTEVUXV0sIFsvWztcXC9dXFxzPyhucy0/XFx3ezAsOX0pXFxzYnVpbGQvaV0sIFtNT0RFTCwgW1ZFTkRPUiwgXCJJbnNpZ25pYVwiXSwgW1RZUEUsIFRBQkxFVF1dLCBbL1s7XFwvXVxccz8oKG54YXxOZXh0KS0/XFx3ezAsOX0pXFxzYnVpbGQvaV0sIFtNT0RFTCwgW1ZFTkRPUiwgXCJOZXh0Qm9va1wiXSwgW1RZUEUsIFRBQkxFVF1dLCBbL1s7XFwvXVxccz8oeHRyZW1lXFxfKT8odigxWzA0NV18MlswMTVdfFszNDY5XTB8N1swNV0pKVxcc2J1aWxkL2ldLCBbW1ZFTkRPUiwgXCJWb2ljZVwiXSwgTU9ERUwsIFtUWVBFLCBNT0JJTEVdXSwgWy9bO1xcL11cXHM/KGx2dGVsXFwtKT8odjFbMTJdKVxcc2J1aWxkL2ldLCBbW1ZFTkRPUiwgXCJMdlRlbFwiXSwgTU9ERUwsIFtUWVBFLCBNT0JJTEVdXSwgWy87XFxzKHBoLTEpXFxzL2ldLCBbTU9ERUwsIFtWRU5ET1IsIFwiRXNzZW50aWFsXCJdLCBbVFlQRSwgTU9CSUxFXV0sIFsvWztcXC9dXFxzPyh2KDEwMG1kfDcwMG5hfDcwMTF8OTE3ZykuKlxcYilcXHNidWlsZC9pXSwgW01PREVMLCBbVkVORE9SLCBcIkVudml6ZW5cIl0sIFtUWVBFLCBUQUJMRVRdXSwgWy9bO1xcL11cXHM/KHRyaW9bXFxzXFx3XFwtXFwuXSspXFxzYnVpbGQvaV0sIFtNT0RFTCwgW1ZFTkRPUiwgXCJNYWNoU3BlZWRcIl0sIFtUWVBFLCBUQUJMRVRdXSwgWy9bO1xcL11cXHM/dHVfKDE0OTEpXFxzYnVpbGQvaV0sIFtNT0RFTCwgW1ZFTkRPUiwgXCJSb3RvclwiXSwgW1RZUEUsIFRBQkxFVF1dLCBbLyhzaGllbGRbXFx3XFxzXSspXFxzYnVpbGQvaV0sIFtNT0RFTCwgW1ZFTkRPUiwgXCJOdmlkaWFcIl0sIFtUWVBFLCBUQUJMRVRdXSwgWy8oc3ByaW50KVxccyhcXHcrKS9pXSwgW1ZFTkRPUiwgTU9ERUwsIFtUWVBFLCBNT0JJTEVdXSwgWy8oa2luXFwuW29uZXR3XXszfSkvaV0sIFtbTU9ERUwsIC9cXC4vZywgXCIgXCJdLCBbVkVORE9SLCBcIk1pY3Jvc29mdFwiXSwgW1RZUEUsIE1PQklMRV1dLCBbL2Ryb2lkXFxzW1xcZFxcLl0rO1xccyhjYzY2NjY/fGV0NVsxNl18bWNbMjM5XVsyM114P3x2YzhbMDNdeD8pXFwpL2ldLCBbTU9ERUwsIFtWRU5ET1IsIFwiWmVicmFcIl0sIFtUWVBFLCBUQUJMRVRdXSwgWy9kcm9pZFxcc1tcXGRcXC5dKztcXHMoZWMzMHxwczIwfHRjWzItOF1cXGRba3hdKVxcKS9pXSwgW01PREVMLCBbVkVORE9SLCBcIlplYnJhXCJdLCBbVFlQRSwgTU9CSUxFXV0sIFsvXFxzKG91eWEpXFxzL2ksIC8obmludGVuZG8pXFxzKFt3aWRzM3V0Y2hdKykvaV0sIFtWRU5ET1IsIE1PREVMLCBbVFlQRSwgQ09OU09MRV1dLCBbL2Ryb2lkLis7XFxzKHNoaWVsZClcXHNidWlsZC9pXSwgW01PREVMLCBbVkVORE9SLCBcIk52aWRpYVwiXSwgW1RZUEUsIENPTlNPTEVdXSwgWy8ocGxheXN0YXRpb25cXHNbMzQ1cG9ydGFibGV2aV0rKS9pXSwgW01PREVMLCBbVkVORE9SLCBcIlNvbnlcIl0sIFtUWVBFLCBDT05TT0xFXV0sIFsvW1xcc1xcKDtdKHhib3goPzpcXHNvbmUpPyg/ITtcXHN4Ym94KSlbXFxzXFwpO10vaV0sIFtNT0RFTCwgW1ZFTkRPUiwgXCJNaWNyb3NvZnRcIl0sIFtUWVBFLCBDT05TT0xFXV0sIFsvc21hcnQtdHYuKyhzYW1zdW5nKS9pXSwgW1ZFTkRPUiwgW1RZUEUsIFNNQVJUVFZdXSwgWy9oYmJ0di4rbWFwbGU7KFxcZCspL2ldLCBbW01PREVMLCAvXi8sIFwiU21hcnRUVlwiXSwgW1ZFTkRPUiwgXCJTYW1zdW5nXCJdLCBbVFlQRSwgU01BUlRUVl1dLCBbLyg/OmxpbnV4O1xcc25ldGNhc3QuK3NtYXJ0dHZ8bGdcXHNuZXRjYXN0XFwudHYtMjAxXFxkKS9pXSwgW1tWRU5ET1IsIFwiTEdcIl0sIFtUWVBFLCBTTUFSVFRWXV0sIFsvKGFwcGxlKVxccz90di9pXSwgW1ZFTkRPUiwgW01PREVMLCBcIkFwcGxlIFRWXCJdLCBbVFlQRSwgU01BUlRUVl1dLCBbL2Nya2V5L2ldLCBbW01PREVMLCBcIkNocm9tZWNhc3RcIl0sIFtWRU5ET1IsIFwiR29vZ2xlXCJdLCBbVFlQRSwgU01BUlRUVl1dLCBbL2Ryb2lkLithZnQoW1xcd10pKFxcc2J1aWxkXFwvfFxcKSkvaV0sIFtNT0RFTCwgW1ZFTkRPUiwgXCJBbWF6b25cIl0sIFtUWVBFLCBTTUFSVFRWXV0sIFsvXFwoZHR2W1xcKTtdLisoYXF1b3MpL2ldLCBbTU9ERUwsIFtWRU5ET1IsIFwiU2hhcnBcIl0sIFtUWVBFLCBTTUFSVFRWXV0sIFsvaGJidHZcXC9cXGQrXFwuXFxkK1xcLlxcZCtcXHMrXFwoW1xcd1xcc10qO1xccyooXFx3W147XSopOyhbXjtdKikvaV0sIFtbVkVORE9SLCB1dGlsLnRyaW1dLCBbTU9ERUwsIHV0aWwudHJpbV0sIFtUWVBFLCBTTUFSVFRWXV0sIFsvW1xcc1xcL1xcKF0oYW5kcm9pZFxcc3xzbWFydFstXFxzXT98b3BlcmFcXHMpdHZbO1xcKVxcc10vaV0sIFtbVFlQRSwgU01BUlRUVl1dLCBbLygocGViYmxlKSlhcHBcXC9bXFxkXFwuXStcXHMvaV0sIFtWRU5ET1IsIE1PREVMLCBbVFlQRSwgV0VBUkFCTEVdXSwgWy9kcm9pZC4rO1xccyhnbGFzcylcXHNcXGQvaV0sIFtNT0RFTCwgW1ZFTkRPUiwgXCJHb29nbGVcIl0sIFtUWVBFLCBXRUFSQUJMRV1dLCBbL2Ryb2lkXFxzW1xcZFxcLl0rO1xccyh3dDYzPzB7MiwzfSlcXCkvaV0sIFtNT0RFTCwgW1ZFTkRPUiwgXCJaZWJyYVwiXSwgW1RZUEUsIFdFQVJBQkxFXV0sIFsvKHRlc2xhKSg/Olxcc3F0Y2FyYnJvd3NlcnxcXC8yMFsxMl1cXGRcXC5bXFx3XFwuLV0rKS9pXSwgW1ZFTkRPUiwgW1RZUEUsIEVNQkVEREVEXV0sIFsvZHJvaWQgLis/OyAoW147XSs/KSg/OiBidWlsZHxcXCkgYXBwbGV3ZWJraXQpLis/IG1vYmlsZSBzYWZhcmkvaV0sIFtNT0RFTCwgW1RZUEUsIE1PQklMRV1dLCBbL2Ryb2lkIC4rPztcXHMoW147XSs/KSg/OiBidWlsZHxcXCkgYXBwbGV3ZWJraXQpLis/KD8hIG1vYmlsZSkgc2FmYXJpL2ldLCBbTU9ERUwsIFtUWVBFLCBUQUJMRVRdXSwgWy9cXHModGFibGV0fHRhYilbO1xcL10vaSwgL1xccyhtb2JpbGUpKD86WztcXC9dfFxcc3NhZmFyaSkvaV0sIFtbVFlQRSwgdXRpbC5sb3dlcml6ZV1dLCBbLyhhbmRyb2lkW1xcd1xcLlxcc1xcLV17MCw5fSk7LitidWlsZC9pXSwgW01PREVMLCBbVkVORE9SLCBcIkdlbmVyaWNcIl1dLCBbLyhwaG9uZSkvaV0sIFtbVFlQRSwgTU9CSUxFXV1dLFxuICAgIGVuZ2luZTogW1svd2luZG93cy4rXFxzZWRnZVxcLyhbXFx3XFwuXSspL2ldLCBbVkVSU0lPTiwgW05BTUUsIFwiRWRnZUhUTUxcIl1dLCBbL3dlYmtpdFxcLzUzN1xcLjM2LitjaHJvbWVcXC8oPyEyNykoW1xcd1xcLl0rKS9pXSwgW1ZFUlNJT04sIFtOQU1FLCBcIkJsaW5rXCJdXSwgWy8ocHJlc3RvKVxcLyhbXFx3XFwuXSspL2ksIC8od2Via2l0fHRyaWRlbnR8bmV0ZnJvbnR8bmV0c3VyZnxhbWF5YXxseW54fHczbXxnb2FubmEpXFwvKFtcXHdcXC5dKykvaSwgL2VraW9oKGZsb3cpXFwvKFtcXHdcXC5dKykvaSwgLyhraHRtbHx0YXNtYW58bGlua3MpW1xcL1xcc11cXCg/KFtcXHdcXC5dKykvaSwgLyhpY2FiKVtcXC9cXHNdKFsyM11cXC5bXFxkXFwuXSspL2ldLCBbTkFNRSwgVkVSU0lPTl0sIFsvcnZcXDooW1xcd1xcLl17MSw5fSlcXGIuKyhnZWNrbykvaV0sIFtWRVJTSU9OLCBOQU1FXV0sXG4gICAgb3M6IFtbL21pY3Jvc29mdFxccyh3aW5kb3dzKVxccyh2aXN0YXx4cCkvaV0sIFtOQU1FLCBWRVJTSU9OXSwgWy8od2luZG93cylcXHNudFxcczZcXC4yO1xccyhhcm0pL2ksIC8od2luZG93c1xcc3Bob25lKD86XFxzb3MpKilbXFxzXFwvXT8oW1xcZFxcLlxcc1xcd10qKS9pLCAvKHdpbmRvd3NcXHNtb2JpbGV8d2luZG93cylbXFxzXFwvXT8oW250Y2VcXGRcXC5cXHNdK1xcdykoPyEuK3hib3gpL2ldLCBbTkFNRSwgW1ZFUlNJT04sIG1hcHBlci5zdHIsIG1hcHMub3Mud2luZG93cy52ZXJzaW9uXV0sIFsvKHdpbig/PTN8OXxuKXx3aW5cXHM5eFxccykoW250XFxkXFwuXSspL2ldLCBbW05BTUUsIFwiV2luZG93c1wiXSwgW1ZFUlNJT04sIG1hcHBlci5zdHIsIG1hcHMub3Mud2luZG93cy52ZXJzaW9uXV0sIFsvaXBbaG9uZWFkXXsyLDR9XFxiKD86Lipvc1xccyhbXFx3XSspXFxzbGlrZVxcc21hY3w7XFxzb3BlcmEpL2ksIC9jZm5ldHdvcmtcXC8uK2Rhcndpbi9pXSwgW1tWRVJTSU9OLCAvXy9nLCBcIi5cIl0sIFtOQU1FLCBcImlPU1wiXV0sIFsvKG1hY1xcc29zXFxzeClcXHM/KFtcXHdcXHNcXC5dKikvaSwgLyhtYWNpbnRvc2h8bWFjKD89X3Bvd2VycGMpXFxzKSg/IS4raGFpa3UpL2ldLCBbW05BTUUsIFwiTWFjIE9TXCJdLCBbVkVSU0lPTiwgL18vZywgXCIuXCJdXSwgWy8oYW5kcm9pZHx3ZWJvc3xwYWxtXFxzb3N8cW54fGJhZGF8cmltXFxzdGFibGV0XFxzb3N8bWVlZ298c2FpbGZpc2h8Y29udGlraSlbXFwvXFxzLV0/KFtcXHdcXC5dKikvaSwgLyhibGFja2JlcnJ5KVxcdypcXC8oW1xcd1xcLl0qKS9pLCAvKHRpemVufGthaW9zKVtcXC9cXHNdKFtcXHdcXC5dKykvaSwgL1xcKChzZXJpZXM0MCk7L2ldLCBbTkFNRSwgVkVSU0lPTl0sIFsvXFwoYmIoMTApOy9pXSwgW1ZFUlNJT04sIFtOQU1FLCBcIkJsYWNrQmVycnlcIl1dLCBbLyg/OnN5bWJpYW5cXHM/b3N8c3ltYm9zfHM2MCg/PTspfHNlcmllczYwKVtcXC9cXHMtXT8oW1xcd1xcLl0qKS9pXSwgW1ZFUlNJT04sIFtOQU1FLCBcIlN5bWJpYW5cIl1dLCBbL21vemlsbGEuK1xcKG1vYmlsZTsuK2dlY2tvLitmaXJlZm94L2ldLCBbW05BTUUsIFwiRmlyZWZveCBPU1wiXV0sIFsvd2ViMHM7LitydCh0dikvaSwgL1xcYig/OmhwKT93b3MoPzpicm93c2VyKT9cXC8oW1xcd1xcLl0rKS9pXSwgW1ZFUlNJT04sIFtOQU1FLCBcIndlYk9TXCJdXSwgWy9jcmtleVxcLyhbXFxkXFwuXSspL2ldLCBbVkVSU0lPTiwgW05BTUUsIFwiQ2hyb21lY2FzdFwiXV0sIFsvKGNyb3MpXFxzW1xcd10rXFxzKFtcXHdcXC5dK1xcdykvaV0sIFtbTkFNRSwgXCJDaHJvbWl1bSBPU1wiXSwgVkVSU0lPTl0sIFsvKG5pbnRlbmRvfHBsYXlzdGF0aW9uKVxccyhbd2lkczM0NXBvcnRhYmxldnVjaF0rKS9pLCAvKHhib3gpO1xccyt4Ym94XFxzKFteXFwpO10rKS9pLCAvKG1pbnQpW1xcL1xcc1xcKFxcKV0/KFxcdyopL2ksIC8obWFnZWlhfHZlY3RvcmxpbnV4KVs7XFxzXS9pLCAvKGpvbGl8W2t4bG5dP3VidW50dXxkZWJpYW58c3VzZXxvcGVuc3VzZXxnZW50b298YXJjaCg/PVxcc2xpbnV4KXxzbGFja3dhcmV8ZmVkb3JhfG1hbmRyaXZhfGNlbnRvc3xwY2xpbnV4b3N8cmVkaGF0fHplbndhbGt8bGlucHVzfHJhc3BiaWFuKSg/Olxcc2dudVxcL2xpbnV4KT8oPzpcXHNsaW51eCk/W1xcL1xccy1dPyg/IWNocm9tfHBhY2thZ2UpKFtcXHdcXC4tXSopL2ksIC8oaHVyZHxsaW51eClcXHM/KFtcXHdcXC5dKikvaSwgLyhnbnUpXFxzPyhbXFx3XFwuXSopL2ksIC9cXHMoW2ZyZW50b3BjLV17MCw0fWJzZHxkcmFnb25mbHkpXFxzPyg/IWFtZHxbaXgzNDZdezEsMn04NikoW1xcd1xcLl0qKS9pLCAvKGhhaWt1KVxccyhcXHcrKS9pXSwgW05BTUUsIFZFUlNJT05dLCBbLyhzdW5vcylcXHM/KFtcXHdcXC5cXGRdKikvaV0sIFtbTkFNRSwgXCJTb2xhcmlzXCJdLCBWRVJTSU9OXSwgWy8oKD86b3Blbik/c29sYXJpcylbXFwvXFxzLV0/KFtcXHdcXC5dKikvaSwgLyhhaXgpXFxzKChcXGQpKD89XFwufFxcKXxcXHMpW1xcd1xcLl0pKi9pLCAvKHBsYW5cXHM5fG1pbml4fGJlb3N8b3NcXC8yfGFtaWdhb3N8bW9ycGhvc3xyaXNjXFxzb3N8b3BlbnZtc3xmdWNoc2lhKS9pLCAvKHVuaXgpXFxzPyhbXFx3XFwuXSopL2ldLCBbTkFNRSwgVkVSU0lPTl1dXG4gIH07XG5cbiAgdmFyIFVBUGFyc2VyID0gZnVuY3Rpb24gVUFQYXJzZXIodWEsIGV4dGVuc2lvbnMpIHtcbiAgICBpZiAodHlwZW9mIHVhID09PSBcIm9iamVjdFwiKSB7XG4gICAgICBleHRlbnNpb25zID0gdWE7XG4gICAgICB1YSA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgVUFQYXJzZXIpKSB7XG4gICAgICByZXR1cm4gbmV3IFVBUGFyc2VyKHVhLCBleHRlbnNpb25zKS5nZXRSZXN1bHQoKTtcbiAgICB9XG5cbiAgICB2YXIgX3VhID0gdWEgfHwgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgd2luZG93Lm5hdmlnYXRvciAmJiB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCA/IHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50IDogRU1QVFkpO1xuXG4gICAgdmFyIF9yZ3htYXAgPSBleHRlbnNpb25zID8gdXRpbC5leHRlbmQocmVnZXhlcywgZXh0ZW5zaW9ucykgOiByZWdleGVzO1xuXG4gICAgdGhpcy5nZXRCcm93c2VyID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIF9icm93c2VyID0ge1xuICAgICAgICBuYW1lOiB1bmRlZmluZWQsXG4gICAgICAgIHZlcnNpb246IHVuZGVmaW5lZFxuICAgICAgfTtcbiAgICAgIG1hcHBlci5yZ3guY2FsbChfYnJvd3NlciwgX3VhLCBfcmd4bWFwLmJyb3dzZXIpO1xuICAgICAgX2Jyb3dzZXIubWFqb3IgPSB1dGlsLm1ham9yKF9icm93c2VyLnZlcnNpb24pO1xuICAgICAgcmV0dXJuIF9icm93c2VyO1xuICAgIH07XG5cbiAgICB0aGlzLmdldENQVSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBfY3B1ID0ge1xuICAgICAgICBhcmNoaXRlY3R1cmU6IHVuZGVmaW5lZFxuICAgICAgfTtcbiAgICAgIG1hcHBlci5yZ3guY2FsbChfY3B1LCBfdWEsIF9yZ3htYXAuY3B1KTtcbiAgICAgIHJldHVybiBfY3B1O1xuICAgIH07XG5cbiAgICB0aGlzLmdldERldmljZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBfZGV2aWNlID0ge1xuICAgICAgICB2ZW5kb3I6IHVuZGVmaW5lZCxcbiAgICAgICAgbW9kZWw6IHVuZGVmaW5lZCxcbiAgICAgICAgdHlwZTogdW5kZWZpbmVkXG4gICAgICB9O1xuICAgICAgbWFwcGVyLnJneC5jYWxsKF9kZXZpY2UsIF91YSwgX3JneG1hcC5kZXZpY2UpO1xuICAgICAgcmV0dXJuIF9kZXZpY2U7XG4gICAgfTtcblxuICAgIHRoaXMuZ2V0RW5naW5lID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIF9lbmdpbmUgPSB7XG4gICAgICAgIG5hbWU6IHVuZGVmaW5lZCxcbiAgICAgICAgdmVyc2lvbjogdW5kZWZpbmVkXG4gICAgICB9O1xuICAgICAgbWFwcGVyLnJneC5jYWxsKF9lbmdpbmUsIF91YSwgX3JneG1hcC5lbmdpbmUpO1xuICAgICAgcmV0dXJuIF9lbmdpbmU7XG4gICAgfTtcblxuICAgIHRoaXMuZ2V0T1MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgX29zID0ge1xuICAgICAgICBuYW1lOiB1bmRlZmluZWQsXG4gICAgICAgIHZlcnNpb246IHVuZGVmaW5lZFxuICAgICAgfTtcbiAgICAgIG1hcHBlci5yZ3guY2FsbChfb3MsIF91YSwgX3JneG1hcC5vcyk7XG4gICAgICByZXR1cm4gX29zO1xuICAgIH07XG5cbiAgICB0aGlzLmdldFJlc3VsdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHVhOiB0aGlzLmdldFVBKCksXG4gICAgICAgIGJyb3dzZXI6IHRoaXMuZ2V0QnJvd3NlcigpLFxuICAgICAgICBlbmdpbmU6IHRoaXMuZ2V0RW5naW5lKCksXG4gICAgICAgIG9zOiB0aGlzLmdldE9TKCksXG4gICAgICAgIGRldmljZTogdGhpcy5nZXREZXZpY2UoKSxcbiAgICAgICAgY3B1OiB0aGlzLmdldENQVSgpXG4gICAgICB9O1xuICAgIH07XG5cbiAgICB0aGlzLmdldFVBID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF91YTtcbiAgICB9O1xuXG4gICAgdGhpcy5zZXRVQSA9IGZ1bmN0aW9uICh1YSkge1xuICAgICAgX3VhID0gdHlwZW9mIHVhID09PSBTVFJfVFlQRSAmJiB1YS5sZW5ndGggPiBVQV9NQVhfTEVOR1RIID8gdXRpbC50cmltKHVhLCBVQV9NQVhfTEVOR1RIKSA6IHVhO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIHRoaXMuc2V0VUEoX3VhKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBVQVBhcnNlci5WRVJTSU9OID0gTElCVkVSU0lPTjtcbiAgVUFQYXJzZXIuQlJPV1NFUiA9IHtcbiAgICBOQU1FOiBOQU1FLFxuICAgIE1BSk9SOiBNQUpPUixcbiAgICBWRVJTSU9OOiBWRVJTSU9OXG4gIH07XG4gIFVBUGFyc2VyLkNQVSA9IHtcbiAgICBBUkNISVRFQ1RVUkU6IEFSQ0hJVEVDVFVSRVxuICB9O1xuICBVQVBhcnNlci5ERVZJQ0UgPSB7XG4gICAgTU9ERUw6IE1PREVMLFxuICAgIFZFTkRPUjogVkVORE9SLFxuICAgIFRZUEU6IFRZUEUsXG4gICAgQ09OU09MRTogQ09OU09MRSxcbiAgICBNT0JJTEU6IE1PQklMRSxcbiAgICBTTUFSVFRWOiBTTUFSVFRWLFxuICAgIFRBQkxFVDogVEFCTEVULFxuICAgIFdFQVJBQkxFOiBXRUFSQUJMRSxcbiAgICBFTUJFRERFRDogRU1CRURERURcbiAgfTtcbiAgVUFQYXJzZXIuRU5HSU5FID0ge1xuICAgIE5BTUU6IE5BTUUsXG4gICAgVkVSU0lPTjogVkVSU0lPTlxuICB9O1xuICBVQVBhcnNlci5PUyA9IHtcbiAgICBOQU1FOiBOQU1FLFxuICAgIFZFUlNJT046IFZFUlNJT05cbiAgfTtcblxuICBpZiAodHlwZW9mIGV4cG9ydHMgIT09IFVOREVGX1RZUEUpIHtcbiAgICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gVU5ERUZfVFlQRSAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgICAgZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gVUFQYXJzZXI7XG4gICAgfVxuXG4gICAgZXhwb3J0cy5VQVBhcnNlciA9IFVBUGFyc2VyO1xuICB9IGVsc2Uge1xuICAgIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgZGVmaW5lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIFVBUGFyc2VyO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICB3aW5kb3cuVUFQYXJzZXIgPSBVQVBhcnNlcjtcbiAgICB9XG4gIH1cblxuICB2YXIgJCA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgKHdpbmRvdy5qUXVlcnkgfHwgd2luZG93LlplcHRvKTtcblxuICBpZiAoJCAmJiAhJC51YSkge1xuICAgIHZhciBwYXJzZXIgPSBuZXcgVUFQYXJzZXIoKTtcbiAgICAkLnVhID0gcGFyc2VyLmdldFJlc3VsdCgpO1xuXG4gICAgJC51YS5nZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gcGFyc2VyLmdldFVBKCk7XG4gICAgfTtcblxuICAgICQudWEuc2V0ID0gZnVuY3Rpb24gKHVhc3RyaW5nKSB7XG4gICAgICBwYXJzZXIuc2V0VUEodWFzdHJpbmcpO1xuICAgICAgdmFyIHJlc3VsdCA9IHBhcnNlci5nZXRSZXN1bHQoKTtcblxuICAgICAgZm9yICh2YXIgcHJvcCBpbiByZXN1bHQpIHtcbiAgICAgICAgJC51YVtwcm9wXSA9IHJlc3VsdFtwcm9wXTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG59KSh0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiID8gd2luZG93IDogdGhpcyk7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4889\n')},5438:function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("var $ = __webpack_require__(2109);\n\n// eslint-disable-next-line es/no-math-hypot -- required for testing\nvar $hypot = Math.hypot;\nvar abs = Math.abs;\nvar sqrt = Math.sqrt;\n\n// Chrome 77 bug\n// https://bugs.chromium.org/p/v8/issues/detail?id=9546\nvar BUGGY = !!$hypot && $hypot(Infinity, NaN) !== Infinity;\n\n// `Math.hypot` method\n// https://tc39.es/ecma262/#sec-math.hypot\n$({ target: 'Math', stat: true, forced: BUGGY }, {\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n hypot: function hypot(value1, value2) {\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * sqrt(sum);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMubWF0aC5oeXBvdC5qcz80MDU3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFFBQVEsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHLDRDQUE0QztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiNTQzOC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tbWF0aC1oeXBvdCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xudmFyICRoeXBvdCA9IE1hdGguaHlwb3Q7XG52YXIgYWJzID0gTWF0aC5hYnM7XG52YXIgc3FydCA9IE1hdGguc3FydDtcblxuLy8gQ2hyb21lIDc3IGJ1Z1xuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9OTU0NlxudmFyIEJVR0dZID0gISEkaHlwb3QgJiYgJGh5cG90KEluZmluaXR5LCBOYU4pICE9PSBJbmZpbml0eTtcblxuLy8gYE1hdGguaHlwb3RgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXRoLmh5cG90XG4kKHsgdGFyZ2V0OiAnTWF0aCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogQlVHR1kgfSwge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICBoeXBvdDogZnVuY3Rpb24gaHlwb3QodmFsdWUxLCB2YWx1ZTIpIHtcbiAgICB2YXIgc3VtID0gMDtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBsYXJnID0gMDtcbiAgICB2YXIgYXJnLCBkaXY7XG4gICAgd2hpbGUgKGkgPCBhTGVuKSB7XG4gICAgICBhcmcgPSBhYnMoYXJndW1lbnRzW2krK10pO1xuICAgICAgaWYgKGxhcmcgPCBhcmcpIHtcbiAgICAgICAgZGl2ID0gbGFyZyAvIGFyZztcbiAgICAgICAgc3VtID0gc3VtICogZGl2ICogZGl2ICsgMTtcbiAgICAgICAgbGFyZyA9IGFyZztcbiAgICAgIH0gZWxzZSBpZiAoYXJnID4gMCkge1xuICAgICAgICBkaXYgPSBhcmcgLyBsYXJnO1xuICAgICAgICBzdW0gKz0gZGl2ICogZGl2O1xuICAgICAgfSBlbHNlIHN1bSArPSBhcmc7XG4gICAgfVxuICAgIHJldHVybiBsYXJnID09PSBJbmZpbml0eSA/IEluZmluaXR5IDogbGFyZyAqIHNxcnQoc3VtKTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5438\n")},386:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n "default": function() { return /* binding */ cejst; }\n});\n\n// NAMESPACE OBJECT: ./src/components/areaDetail.module.scss\nvar areaDetail_module_namespaceObject = {};\n__webpack_require__.r(areaDetail_module_namespaceObject);\n__webpack_require__.d(areaDetail_module_namespaceObject, {\n "_D": function() { return areaDetailContainer; },\n "yM": function() { return areaDetail_module_categorization; },\n "Iq": function() { return censusLabel; },\n "J_": function() { return censusRow; },\n "jF": function() { return censusText; },\n "rN": function() { return cumulativeIndexScore; },\n "qE": function() { return divider; },\n "H": function() { return indicatorBox; },\n "GL": function() { return indicatorDescription; },\n "ls": function() { return indicatorTitle; },\n "Kr": function() { return indicatorValue; },\n "KW": function() { return nonPrioritized; },\n "y": function() { return prioritization; },\n "ah": function() { return prioritized; },\n "O3": function() { return priority; },\n "Gs": function() { return areaDetail_module_score; },\n "zZ": function() { return scoreSuperscript; },\n "Lj": function() { return threshold; },\n "NU": function() { return topRow; },\n "oJ": function() { return topRowSubTitle; },\n "yq": function() { return topRowTitle; }\n});\n\n// NAMESPACE OBJECT: ./src/components/mapLegend.module.scss\nvar mapLegend_module_namespaceObject = {};\n__webpack_require__.r(mapLegend_module_namespaceObject);\n__webpack_require__.d(mapLegend_module_namespaceObject, {\n "Ww": function() { return colorSwatch; },\n "nm": function() { return legendContainer; },\n "oI": function() { return legendItem; },\n "KW": function() { return mapLegend_module_nonPrioritized; },\n "ah": function() { return mapLegend_module_prioritized; },\n "VV": function() { return swatchContainer; },\n "Lj": function() { return mapLegend_module_threshold; }\n});\n\n// EXTERNAL MODULE: ./node_modules/react/index.js\nvar react = __webpack_require__(7294);\n// EXTERNAL MODULE: ./src/components/layout.tsx + 7 modules\nvar layout = __webpack_require__(1857);\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/extends.js\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js + 3 modules\nvar toConsumableArray = __webpack_require__(7329);\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/defineProperty.js\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n// EXTERNAL MODULE: ./node_modules/prop-types/index.js\nvar prop_types = __webpack_require__(5697);\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js\nfunction _iterableToArrayLimit(arr, i) {\n var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];\n\n if (_i == null) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n\n var _s, _e;\n\n try {\n for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i["return"] != null) _i["return"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js\nvar unsupportedIterableToArray = __webpack_require__(2961);\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/nonIterableRest.js\nfunction _nonIterableRest() {\n throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");\n}\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/slicedToArray.js\n\n\n\n\nfunction slicedToArray_slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || (0,unsupportedIterableToArray/* default */.Z)(arr, i) || _nonIterableRest();\n}\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/classCallCheck.js\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError("Cannot call a class as a function");\n }\n}\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/createClass.js\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ("value" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.math.hypot.js\nvar es_math_hypot = __webpack_require__(5438);\n;// CONCATENATED MODULE: ./node_modules/gl-matrix/esm/common.js\n\n\n/**\r\n * Common utilities\r\n * @module glMatrix\r\n */\n// Configuration Constants\nvar EPSILON = 0.000001;\nvar ARRAY_TYPE = typeof Float32Array !== \'undefined\' ? Float32Array : Array;\nvar RANDOM = Math.random;\n/**\r\n * Sets the type of array used when creating new vectors and matrices\r\n *\r\n * @param {Float32ArrayConstructor | ArrayConstructor} type Array type, such as Float32Array or Array\r\n */\n\nfunction setMatrixArrayType(type) {\n ARRAY_TYPE = type;\n}\nvar degree = Math.PI / 180;\n/**\r\n * Convert Degree To Radian\r\n *\r\n * @param {Number} a Angle in Degrees\r\n */\n\nfunction toRadian(a) {\n return a * degree;\n}\n/**\r\n * Tests whether or not the arguments have approximately the same value, within an absolute\r\n * or relative tolerance of glMatrix.EPSILON (an absolute tolerance is used for values less\r\n * than or equal to 1.0, and a relative tolerance is used for larger values)\r\n *\r\n * @param {Number} a The first number to test.\r\n * @param {Number} b The second number to test.\r\n * @returns {Boolean} True if the numbers are approximately equal, false otherwise.\r\n */\n\nfunction equals(a, b) {\n return Math.abs(a - b) <= EPSILON * Math.max(1.0, Math.abs(a), Math.abs(b));\n}\nif (!Math.hypot) Math.hypot = function () {\n var y = 0,\n i = arguments.length;\n\n while (i--) {\n y += arguments[i] * arguments[i];\n }\n\n return Math.sqrt(y);\n};\n;// CONCATENATED MODULE: ./node_modules/gl-matrix/esm/vec4.js\n\n\n/**\r\n * 4 Dimensional Vector\r\n * @module vec4\r\n */\n\n/**\r\n * Creates a new, empty vec4\r\n *\r\n * @returns {vec4} a new 4D vector\r\n */\n\nfunction create() {\n var out = new ARRAY_TYPE(4);\n\n if (ARRAY_TYPE != Float32Array) {\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n }\n\n return out;\n}\n/**\r\n * Creates a new vec4 initialized with values from an existing vector\r\n *\r\n * @param {ReadonlyVec4} a vector to clone\r\n * @returns {vec4} a new 4D vector\r\n */\n\nfunction clone(a) {\n var out = new glMatrix.ARRAY_TYPE(4);\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n return out;\n}\n/**\r\n * Creates a new vec4 initialized with the given values\r\n *\r\n * @param {Number} x X component\r\n * @param {Number} y Y component\r\n * @param {Number} z Z component\r\n * @param {Number} w W component\r\n * @returns {vec4} a new 4D vector\r\n */\n\nfunction fromValues(x, y, z, w) {\n var out = new glMatrix.ARRAY_TYPE(4);\n out[0] = x;\n out[1] = y;\n out[2] = z;\n out[3] = w;\n return out;\n}\n/**\r\n * Copy the values from one vec4 to another\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {ReadonlyVec4} a the source vector\r\n * @returns {vec4} out\r\n */\n\nfunction copy(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n return out;\n}\n/**\r\n * Set the components of a vec4 to the given values\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {Number} x X component\r\n * @param {Number} y Y component\r\n * @param {Number} z Z component\r\n * @param {Number} w W component\r\n * @returns {vec4} out\r\n */\n\nfunction set(out, x, y, z, w) {\n out[0] = x;\n out[1] = y;\n out[2] = z;\n out[3] = w;\n return out;\n}\n/**\r\n * Adds two vec4\'s\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {ReadonlyVec4} a the first operand\r\n * @param {ReadonlyVec4} b the second operand\r\n * @returns {vec4} out\r\n */\n\nfunction add(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n out[2] = a[2] + b[2];\n out[3] = a[3] + b[3];\n return out;\n}\n/**\r\n * Subtracts vector b from vector a\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {ReadonlyVec4} a the first operand\r\n * @param {ReadonlyVec4} b the second operand\r\n * @returns {vec4} out\r\n */\n\nfunction subtract(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n out[2] = a[2] - b[2];\n out[3] = a[3] - b[3];\n return out;\n}\n/**\r\n * Multiplies two vec4\'s\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {ReadonlyVec4} a the first operand\r\n * @param {ReadonlyVec4} b the second operand\r\n * @returns {vec4} out\r\n */\n\nfunction multiply(out, a, b) {\n out[0] = a[0] * b[0];\n out[1] = a[1] * b[1];\n out[2] = a[2] * b[2];\n out[3] = a[3] * b[3];\n return out;\n}\n/**\r\n * Divides two vec4\'s\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {ReadonlyVec4} a the first operand\r\n * @param {ReadonlyVec4} b the second operand\r\n * @returns {vec4} out\r\n */\n\nfunction divide(out, a, b) {\n out[0] = a[0] / b[0];\n out[1] = a[1] / b[1];\n out[2] = a[2] / b[2];\n out[3] = a[3] / b[3];\n return out;\n}\n/**\r\n * Math.ceil the components of a vec4\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {ReadonlyVec4} a vector to ceil\r\n * @returns {vec4} out\r\n */\n\nfunction ceil(out, a) {\n out[0] = Math.ceil(a[0]);\n out[1] = Math.ceil(a[1]);\n out[2] = Math.ceil(a[2]);\n out[3] = Math.ceil(a[3]);\n return out;\n}\n/**\r\n * Math.floor the components of a vec4\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {ReadonlyVec4} a vector to floor\r\n * @returns {vec4} out\r\n */\n\nfunction floor(out, a) {\n out[0] = Math.floor(a[0]);\n out[1] = Math.floor(a[1]);\n out[2] = Math.floor(a[2]);\n out[3] = Math.floor(a[3]);\n return out;\n}\n/**\r\n * Returns the minimum of two vec4\'s\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {ReadonlyVec4} a the first operand\r\n * @param {ReadonlyVec4} b the second operand\r\n * @returns {vec4} out\r\n */\n\nfunction min(out, a, b) {\n out[0] = Math.min(a[0], b[0]);\n out[1] = Math.min(a[1], b[1]);\n out[2] = Math.min(a[2], b[2]);\n out[3] = Math.min(a[3], b[3]);\n return out;\n}\n/**\r\n * Returns the maximum of two vec4\'s\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {ReadonlyVec4} a the first operand\r\n * @param {ReadonlyVec4} b the second operand\r\n * @returns {vec4} out\r\n */\n\nfunction max(out, a, b) {\n out[0] = Math.max(a[0], b[0]);\n out[1] = Math.max(a[1], b[1]);\n out[2] = Math.max(a[2], b[2]);\n out[3] = Math.max(a[3], b[3]);\n return out;\n}\n/**\r\n * Math.round the components of a vec4\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {ReadonlyVec4} a vector to round\r\n * @returns {vec4} out\r\n */\n\nfunction round(out, a) {\n out[0] = Math.round(a[0]);\n out[1] = Math.round(a[1]);\n out[2] = Math.round(a[2]);\n out[3] = Math.round(a[3]);\n return out;\n}\n/**\r\n * Scales a vec4 by a scalar number\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {ReadonlyVec4} a the vector to scale\r\n * @param {Number} b amount to scale the vector by\r\n * @returns {vec4} out\r\n */\n\nfunction scale(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n out[2] = a[2] * b;\n out[3] = a[3] * b;\n return out;\n}\n/**\r\n * Adds two vec4\'s after scaling the second operand by a scalar value\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {ReadonlyVec4} a the first operand\r\n * @param {ReadonlyVec4} b the second operand\r\n * @param {Number} scale the amount to scale b by before adding\r\n * @returns {vec4} out\r\n */\n\nfunction scaleAndAdd(out, a, b, scale) {\n out[0] = a[0] + b[0] * scale;\n out[1] = a[1] + b[1] * scale;\n out[2] = a[2] + b[2] * scale;\n out[3] = a[3] + b[3] * scale;\n return out;\n}\n/**\r\n * Calculates the euclidian distance between two vec4\'s\r\n *\r\n * @param {ReadonlyVec4} a the first operand\r\n * @param {ReadonlyVec4} b the second operand\r\n * @returns {Number} distance between a and b\r\n */\n\nfunction distance(a, b) {\n var x = b[0] - a[0];\n var y = b[1] - a[1];\n var z = b[2] - a[2];\n var w = b[3] - a[3];\n return Math.hypot(x, y, z, w);\n}\n/**\r\n * Calculates the squared euclidian distance between two vec4\'s\r\n *\r\n * @param {ReadonlyVec4} a the first operand\r\n * @param {ReadonlyVec4} b the second operand\r\n * @returns {Number} squared distance between a and b\r\n */\n\nfunction squaredDistance(a, b) {\n var x = b[0] - a[0];\n var y = b[1] - a[1];\n var z = b[2] - a[2];\n var w = b[3] - a[3];\n return x * x + y * y + z * z + w * w;\n}\n/**\r\n * Calculates the length of a vec4\r\n *\r\n * @param {ReadonlyVec4} a vector to calculate length of\r\n * @returns {Number} length of a\r\n */\n\nfunction vec4_length(a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n var w = a[3];\n return Math.hypot(x, y, z, w);\n}\n/**\r\n * Calculates the squared length of a vec4\r\n *\r\n * @param {ReadonlyVec4} a vector to calculate squared length of\r\n * @returns {Number} squared length of a\r\n */\n\nfunction squaredLength(a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n var w = a[3];\n return x * x + y * y + z * z + w * w;\n}\n/**\r\n * Negates the components of a vec4\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {ReadonlyVec4} a vector to negate\r\n * @returns {vec4} out\r\n */\n\nfunction negate(out, a) {\n out[0] = -a[0];\n out[1] = -a[1];\n out[2] = -a[2];\n out[3] = -a[3];\n return out;\n}\n/**\r\n * Returns the inverse of the components of a vec4\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {ReadonlyVec4} a vector to invert\r\n * @returns {vec4} out\r\n */\n\nfunction inverse(out, a) {\n out[0] = 1.0 / a[0];\n out[1] = 1.0 / a[1];\n out[2] = 1.0 / a[2];\n out[3] = 1.0 / a[3];\n return out;\n}\n/**\r\n * Normalize a vec4\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {ReadonlyVec4} a vector to normalize\r\n * @returns {vec4} out\r\n */\n\nfunction normalize(out, a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n var w = a[3];\n var len = x * x + y * y + z * z + w * w;\n\n if (len > 0) {\n len = 1 / Math.sqrt(len);\n }\n\n out[0] = x * len;\n out[1] = y * len;\n out[2] = z * len;\n out[3] = w * len;\n return out;\n}\n/**\r\n * Calculates the dot product of two vec4\'s\r\n *\r\n * @param {ReadonlyVec4} a the first operand\r\n * @param {ReadonlyVec4} b the second operand\r\n * @returns {Number} dot product of a and b\r\n */\n\nfunction dot(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];\n}\n/**\r\n * Returns the cross-product of three vectors in a 4-dimensional space\r\n *\r\n * @param {ReadonlyVec4} result the receiving vector\r\n * @param {ReadonlyVec4} U the first vector\r\n * @param {ReadonlyVec4} V the second vector\r\n * @param {ReadonlyVec4} W the third vector\r\n * @returns {vec4} result\r\n */\n\nfunction cross(out, u, v, w) {\n var A = v[0] * w[1] - v[1] * w[0],\n B = v[0] * w[2] - v[2] * w[0],\n C = v[0] * w[3] - v[3] * w[0],\n D = v[1] * w[2] - v[2] * w[1],\n E = v[1] * w[3] - v[3] * w[1],\n F = v[2] * w[3] - v[3] * w[2];\n var G = u[0];\n var H = u[1];\n var I = u[2];\n var J = u[3];\n out[0] = H * F - I * E + J * D;\n out[1] = -(G * F) + I * C - J * B;\n out[2] = G * E - H * C + J * A;\n out[3] = -(G * D) + H * B - I * A;\n return out;\n}\n/**\r\n * Performs a linear interpolation between two vec4\'s\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {ReadonlyVec4} a the first operand\r\n * @param {ReadonlyVec4} b the second operand\r\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\r\n * @returns {vec4} out\r\n */\n\nfunction lerp(out, a, b, t) {\n var ax = a[0];\n var ay = a[1];\n var az = a[2];\n var aw = a[3];\n out[0] = ax + t * (b[0] - ax);\n out[1] = ay + t * (b[1] - ay);\n out[2] = az + t * (b[2] - az);\n out[3] = aw + t * (b[3] - aw);\n return out;\n}\n/**\r\n * Generates a random vector with the given scale\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {Number} [scale] Length of the resulting vector. If ommitted, a unit vector will be returned\r\n * @returns {vec4} out\r\n */\n\nfunction random(out, scale) {\n scale = scale || 1.0; // Marsaglia, George. Choosing a Point from the Surface of a\n // Sphere. Ann. Math. Statist. 43 (1972), no. 2, 645--646.\n // http://projecteuclid.org/euclid.aoms/1177692644;\n\n var v1, v2, v3, v4;\n var s1, s2;\n\n do {\n v1 = glMatrix.RANDOM() * 2 - 1;\n v2 = glMatrix.RANDOM() * 2 - 1;\n s1 = v1 * v1 + v2 * v2;\n } while (s1 >= 1);\n\n do {\n v3 = glMatrix.RANDOM() * 2 - 1;\n v4 = glMatrix.RANDOM() * 2 - 1;\n s2 = v3 * v3 + v4 * v4;\n } while (s2 >= 1);\n\n var d = Math.sqrt((1 - s1) / s2);\n out[0] = scale * v1;\n out[1] = scale * v2;\n out[2] = scale * v3 * d;\n out[3] = scale * v4 * d;\n return out;\n}\n/**\r\n * Transforms the vec4 with a mat4.\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {ReadonlyVec4} a the vector to transform\r\n * @param {ReadonlyMat4} m matrix to transform with\r\n * @returns {vec4} out\r\n */\n\nfunction transformMat4(out, a, m) {\n var x = a[0],\n y = a[1],\n z = a[2],\n w = a[3];\n out[0] = m[0] * x + m[4] * y + m[8] * z + m[12] * w;\n out[1] = m[1] * x + m[5] * y + m[9] * z + m[13] * w;\n out[2] = m[2] * x + m[6] * y + m[10] * z + m[14] * w;\n out[3] = m[3] * x + m[7] * y + m[11] * z + m[15] * w;\n return out;\n}\n/**\r\n * Transforms the vec4 with a quat\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @param {ReadonlyVec4} a the vector to transform\r\n * @param {ReadonlyQuat} q quaternion to transform with\r\n * @returns {vec4} out\r\n */\n\nfunction transformQuat(out, a, q) {\n var x = a[0],\n y = a[1],\n z = a[2];\n var qx = q[0],\n qy = q[1],\n qz = q[2],\n qw = q[3]; // calculate quat * vec\n\n var ix = qw * x + qy * z - qz * y;\n var iy = qw * y + qz * x - qx * z;\n var iz = qw * z + qx * y - qy * x;\n var iw = -qx * x - qy * y - qz * z; // calculate result * inverse quat\n\n out[0] = ix * qw + iw * -qx + iy * -qz - iz * -qy;\n out[1] = iy * qw + iw * -qy + iz * -qx - ix * -qz;\n out[2] = iz * qw + iw * -qz + ix * -qy - iy * -qx;\n out[3] = a[3];\n return out;\n}\n/**\r\n * Set the components of a vec4 to zero\r\n *\r\n * @param {vec4} out the receiving vector\r\n * @returns {vec4} out\r\n */\n\nfunction zero(out) {\n out[0] = 0.0;\n out[1] = 0.0;\n out[2] = 0.0;\n out[3] = 0.0;\n return out;\n}\n/**\r\n * Returns a string representation of a vector\r\n *\r\n * @param {ReadonlyVec4} a vector to represent as a string\r\n * @returns {String} string representation of the vector\r\n */\n\nfunction str(a) {\n return "vec4(" + a[0] + ", " + a[1] + ", " + a[2] + ", " + a[3] + ")";\n}\n/**\r\n * Returns whether or not the vectors have exactly the same elements in the same position (when compared with ===)\r\n *\r\n * @param {ReadonlyVec4} a The first vector.\r\n * @param {ReadonlyVec4} b The second vector.\r\n * @returns {Boolean} True if the vectors are equal, false otherwise.\r\n */\n\nfunction exactEquals(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3];\n}\n/**\r\n * Returns whether or not the vectors have approximately the same elements in the same position.\r\n *\r\n * @param {ReadonlyVec4} a The first vector.\r\n * @param {ReadonlyVec4} b The second vector.\r\n * @returns {Boolean} True if the vectors are equal, false otherwise.\r\n */\n\nfunction vec4_equals(a, b) {\n var a0 = a[0],\n a1 = a[1],\n a2 = a[2],\n a3 = a[3];\n var b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3];\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3));\n}\n/**\r\n * Alias for {@link vec4.subtract}\r\n * @function\r\n */\n\nvar sub = (/* unused pure expression or super */ null && (subtract));\n/**\r\n * Alias for {@link vec4.multiply}\r\n * @function\r\n */\n\nvar mul = (/* unused pure expression or super */ null && (multiply));\n/**\r\n * Alias for {@link vec4.divide}\r\n * @function\r\n */\n\nvar div = (/* unused pure expression or super */ null && (divide));\n/**\r\n * Alias for {@link vec4.distance}\r\n * @function\r\n */\n\nvar dist = (/* unused pure expression or super */ null && (distance));\n/**\r\n * Alias for {@link vec4.squaredDistance}\r\n * @function\r\n */\n\nvar sqrDist = (/* unused pure expression or super */ null && (squaredDistance));\n/**\r\n * Alias for {@link vec4.length}\r\n * @function\r\n */\n\nvar len = (/* unused pure expression or super */ null && (vec4_length));\n/**\r\n * Alias for {@link vec4.squaredLength}\r\n * @function\r\n */\n\nvar sqrLen = (/* unused pure expression or super */ null && (squaredLength));\n/**\r\n * Perform some operation over an array of vec4s.\r\n *\r\n * @param {Array} a the array of vectors to iterate over\r\n * @param {Number} stride Number of elements between the start of each vec4. If 0 assumes tightly packed\r\n * @param {Number} offset Number of elements to skip at the beginning of the array\r\n * @param {Number} count Number of vec4s to iterate over. If 0 iterates over entire array\r\n * @param {Function} fn Function to call for each vector in the array\r\n * @param {Object} [arg] additional argument to pass to fn\r\n * @returns {Array} a\r\n * @function\r\n */\n\nvar forEach = function () {\n var vec = create();\n return function (a, stride, offset, count, fn, arg) {\n var i, l;\n\n if (!stride) {\n stride = 4;\n }\n\n if (!offset) {\n offset = 0;\n }\n\n if (count) {\n l = Math.min(count * stride + offset, a.length);\n } else {\n l = a.length;\n }\n\n for (i = offset; i < l; i += stride) {\n vec[0] = a[i];\n vec[1] = a[i + 1];\n vec[2] = a[i + 2];\n vec[3] = a[i + 3];\n fn(vec, vec, arg);\n a[i] = vec[0];\n a[i + 1] = vec[1];\n a[i + 2] = vec[2];\n a[i + 3] = vec[3];\n }\n\n return a;\n };\n}();\n;// CONCATENATED MODULE: ./node_modules/@math.gl/web-mercator/dist/esm/math-utils.js\n\nfunction createMat4() {\n return [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];\n}\nfunction transformVector(matrix, vector) {\n var result = transformMat4([], vector, matrix);\n scale(result, result, 1 / result[3]);\n return result;\n}\nfunction mod(value, divisor) {\n var modulus = value % divisor;\n return modulus < 0 ? divisor + modulus : modulus;\n}\nfunction math_utils_lerp(start, end, step) {\n return step * end + (1 - step) * start;\n}\n\nfunction ieLog2(x) {\n return Math.log(x) * Math.LOG2E;\n}\n\nvar log2 = Math.log2 || ieLog2;\n;// CONCATENATED MODULE: ./node_modules/gl-matrix/esm/mat4.js\n\n\n/**\r\n * 4x4 Matrix
Format: column-major, when typed out it looks like row-major
The matrices are being post multiplied.\r\n * @module mat4\r\n */\n\n/**\r\n * Creates a new identity mat4\r\n *\r\n * @returns {mat4} a new 4x4 matrix\r\n */\n\nfunction mat4_create() {\n var out = new glMatrix.ARRAY_TYPE(16);\n\n if (glMatrix.ARRAY_TYPE != Float32Array) {\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n }\n\n out[0] = 1;\n out[5] = 1;\n out[10] = 1;\n out[15] = 1;\n return out;\n}\n/**\r\n * Creates a new mat4 initialized with values from an existing matrix\r\n *\r\n * @param {ReadonlyMat4} a matrix to clone\r\n * @returns {mat4} a new 4x4 matrix\r\n */\n\nfunction mat4_clone(a) {\n var out = new glMatrix.ARRAY_TYPE(16);\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n out[9] = a[9];\n out[10] = a[10];\n out[11] = a[11];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n return out;\n}\n/**\r\n * Copy the values from one mat4 to another\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {ReadonlyMat4} a the source matrix\r\n * @returns {mat4} out\r\n */\n\nfunction mat4_copy(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n out[9] = a[9];\n out[10] = a[10];\n out[11] = a[11];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n return out;\n}\n/**\r\n * Create a new mat4 with the given values\r\n *\r\n * @param {Number} m00 Component in column 0, row 0 position (index 0)\r\n * @param {Number} m01 Component in column 0, row 1 position (index 1)\r\n * @param {Number} m02 Component in column 0, row 2 position (index 2)\r\n * @param {Number} m03 Component in column 0, row 3 position (index 3)\r\n * @param {Number} m10 Component in column 1, row 0 position (index 4)\r\n * @param {Number} m11 Component in column 1, row 1 position (index 5)\r\n * @param {Number} m12 Component in column 1, row 2 position (index 6)\r\n * @param {Number} m13 Component in column 1, row 3 position (index 7)\r\n * @param {Number} m20 Component in column 2, row 0 position (index 8)\r\n * @param {Number} m21 Component in column 2, row 1 position (index 9)\r\n * @param {Number} m22 Component in column 2, row 2 position (index 10)\r\n * @param {Number} m23 Component in column 2, row 3 position (index 11)\r\n * @param {Number} m30 Component in column 3, row 0 position (index 12)\r\n * @param {Number} m31 Component in column 3, row 1 position (index 13)\r\n * @param {Number} m32 Component in column 3, row 2 position (index 14)\r\n * @param {Number} m33 Component in column 3, row 3 position (index 15)\r\n * @returns {mat4} A new mat4\r\n */\n\nfunction mat4_fromValues(m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33) {\n var out = new glMatrix.ARRAY_TYPE(16);\n out[0] = m00;\n out[1] = m01;\n out[2] = m02;\n out[3] = m03;\n out[4] = m10;\n out[5] = m11;\n out[6] = m12;\n out[7] = m13;\n out[8] = m20;\n out[9] = m21;\n out[10] = m22;\n out[11] = m23;\n out[12] = m30;\n out[13] = m31;\n out[14] = m32;\n out[15] = m33;\n return out;\n}\n/**\r\n * Set the components of a mat4 to the given values\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {Number} m00 Component in column 0, row 0 position (index 0)\r\n * @param {Number} m01 Component in column 0, row 1 position (index 1)\r\n * @param {Number} m02 Component in column 0, row 2 position (index 2)\r\n * @param {Number} m03 Component in column 0, row 3 position (index 3)\r\n * @param {Number} m10 Component in column 1, row 0 position (index 4)\r\n * @param {Number} m11 Component in column 1, row 1 position (index 5)\r\n * @param {Number} m12 Component in column 1, row 2 position (index 6)\r\n * @param {Number} m13 Component in column 1, row 3 position (index 7)\r\n * @param {Number} m20 Component in column 2, row 0 position (index 8)\r\n * @param {Number} m21 Component in column 2, row 1 position (index 9)\r\n * @param {Number} m22 Component in column 2, row 2 position (index 10)\r\n * @param {Number} m23 Component in column 2, row 3 position (index 11)\r\n * @param {Number} m30 Component in column 3, row 0 position (index 12)\r\n * @param {Number} m31 Component in column 3, row 1 position (index 13)\r\n * @param {Number} m32 Component in column 3, row 2 position (index 14)\r\n * @param {Number} m33 Component in column 3, row 3 position (index 15)\r\n * @returns {mat4} out\r\n */\n\nfunction mat4_set(out, m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33) {\n out[0] = m00;\n out[1] = m01;\n out[2] = m02;\n out[3] = m03;\n out[4] = m10;\n out[5] = m11;\n out[6] = m12;\n out[7] = m13;\n out[8] = m20;\n out[9] = m21;\n out[10] = m22;\n out[11] = m23;\n out[12] = m30;\n out[13] = m31;\n out[14] = m32;\n out[15] = m33;\n return out;\n}\n/**\r\n * Set a mat4 to the identity matrix\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @returns {mat4} out\r\n */\n\nfunction identity(out) {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = 1;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 1;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n/**\r\n * Transpose the values of a mat4\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {ReadonlyMat4} a the source matrix\r\n * @returns {mat4} out\r\n */\n\nfunction transpose(out, a) {\n // If we are transposing ourselves we can skip a few steps but have to cache some values\n if (out === a) {\n var a01 = a[1],\n a02 = a[2],\n a03 = a[3];\n var a12 = a[6],\n a13 = a[7];\n var a23 = a[11];\n out[1] = a[4];\n out[2] = a[8];\n out[3] = a[12];\n out[4] = a01;\n out[6] = a[9];\n out[7] = a[13];\n out[8] = a02;\n out[9] = a12;\n out[11] = a[14];\n out[12] = a03;\n out[13] = a13;\n out[14] = a23;\n } else {\n out[0] = a[0];\n out[1] = a[4];\n out[2] = a[8];\n out[3] = a[12];\n out[4] = a[1];\n out[5] = a[5];\n out[6] = a[9];\n out[7] = a[13];\n out[8] = a[2];\n out[9] = a[6];\n out[10] = a[10];\n out[11] = a[14];\n out[12] = a[3];\n out[13] = a[7];\n out[14] = a[11];\n out[15] = a[15];\n }\n\n return out;\n}\n/**\r\n * Inverts a mat4\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {ReadonlyMat4} a the source matrix\r\n * @returns {mat4} out\r\n */\n\nfunction invert(out, a) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a03 = a[3];\n var a10 = a[4],\n a11 = a[5],\n a12 = a[6],\n a13 = a[7];\n var a20 = a[8],\n a21 = a[9],\n a22 = a[10],\n a23 = a[11];\n var a30 = a[12],\n a31 = a[13],\n a32 = a[14],\n a33 = a[15];\n var b00 = a00 * a11 - a01 * a10;\n var b01 = a00 * a12 - a02 * a10;\n var b02 = a00 * a13 - a03 * a10;\n var b03 = a01 * a12 - a02 * a11;\n var b04 = a01 * a13 - a03 * a11;\n var b05 = a02 * a13 - a03 * a12;\n var b06 = a20 * a31 - a21 * a30;\n var b07 = a20 * a32 - a22 * a30;\n var b08 = a20 * a33 - a23 * a30;\n var b09 = a21 * a32 - a22 * a31;\n var b10 = a21 * a33 - a23 * a31;\n var b11 = a22 * a33 - a23 * a32; // Calculate the determinant\n\n var det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n\n if (!det) {\n return null;\n }\n\n det = 1.0 / det;\n out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det;\n out[1] = (a02 * b10 - a01 * b11 - a03 * b09) * det;\n out[2] = (a31 * b05 - a32 * b04 + a33 * b03) * det;\n out[3] = (a22 * b04 - a21 * b05 - a23 * b03) * det;\n out[4] = (a12 * b08 - a10 * b11 - a13 * b07) * det;\n out[5] = (a00 * b11 - a02 * b08 + a03 * b07) * det;\n out[6] = (a32 * b02 - a30 * b05 - a33 * b01) * det;\n out[7] = (a20 * b05 - a22 * b02 + a23 * b01) * det;\n out[8] = (a10 * b10 - a11 * b08 + a13 * b06) * det;\n out[9] = (a01 * b08 - a00 * b10 - a03 * b06) * det;\n out[10] = (a30 * b04 - a31 * b02 + a33 * b00) * det;\n out[11] = (a21 * b02 - a20 * b04 - a23 * b00) * det;\n out[12] = (a11 * b07 - a10 * b09 - a12 * b06) * det;\n out[13] = (a00 * b09 - a01 * b07 + a02 * b06) * det;\n out[14] = (a31 * b01 - a30 * b03 - a32 * b00) * det;\n out[15] = (a20 * b03 - a21 * b01 + a22 * b00) * det;\n return out;\n}\n/**\r\n * Calculates the adjugate of a mat4\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {ReadonlyMat4} a the source matrix\r\n * @returns {mat4} out\r\n */\n\nfunction adjoint(out, a) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a03 = a[3];\n var a10 = a[4],\n a11 = a[5],\n a12 = a[6],\n a13 = a[7];\n var a20 = a[8],\n a21 = a[9],\n a22 = a[10],\n a23 = a[11];\n var a30 = a[12],\n a31 = a[13],\n a32 = a[14],\n a33 = a[15];\n out[0] = a11 * (a22 * a33 - a23 * a32) - a21 * (a12 * a33 - a13 * a32) + a31 * (a12 * a23 - a13 * a22);\n out[1] = -(a01 * (a22 * a33 - a23 * a32) - a21 * (a02 * a33 - a03 * a32) + a31 * (a02 * a23 - a03 * a22));\n out[2] = a01 * (a12 * a33 - a13 * a32) - a11 * (a02 * a33 - a03 * a32) + a31 * (a02 * a13 - a03 * a12);\n out[3] = -(a01 * (a12 * a23 - a13 * a22) - a11 * (a02 * a23 - a03 * a22) + a21 * (a02 * a13 - a03 * a12));\n out[4] = -(a10 * (a22 * a33 - a23 * a32) - a20 * (a12 * a33 - a13 * a32) + a30 * (a12 * a23 - a13 * a22));\n out[5] = a00 * (a22 * a33 - a23 * a32) - a20 * (a02 * a33 - a03 * a32) + a30 * (a02 * a23 - a03 * a22);\n out[6] = -(a00 * (a12 * a33 - a13 * a32) - a10 * (a02 * a33 - a03 * a32) + a30 * (a02 * a13 - a03 * a12));\n out[7] = a00 * (a12 * a23 - a13 * a22) - a10 * (a02 * a23 - a03 * a22) + a20 * (a02 * a13 - a03 * a12);\n out[8] = a10 * (a21 * a33 - a23 * a31) - a20 * (a11 * a33 - a13 * a31) + a30 * (a11 * a23 - a13 * a21);\n out[9] = -(a00 * (a21 * a33 - a23 * a31) - a20 * (a01 * a33 - a03 * a31) + a30 * (a01 * a23 - a03 * a21));\n out[10] = a00 * (a11 * a33 - a13 * a31) - a10 * (a01 * a33 - a03 * a31) + a30 * (a01 * a13 - a03 * a11);\n out[11] = -(a00 * (a11 * a23 - a13 * a21) - a10 * (a01 * a23 - a03 * a21) + a20 * (a01 * a13 - a03 * a11));\n out[12] = -(a10 * (a21 * a32 - a22 * a31) - a20 * (a11 * a32 - a12 * a31) + a30 * (a11 * a22 - a12 * a21));\n out[13] = a00 * (a21 * a32 - a22 * a31) - a20 * (a01 * a32 - a02 * a31) + a30 * (a01 * a22 - a02 * a21);\n out[14] = -(a00 * (a11 * a32 - a12 * a31) - a10 * (a01 * a32 - a02 * a31) + a30 * (a01 * a12 - a02 * a11));\n out[15] = a00 * (a11 * a22 - a12 * a21) - a10 * (a01 * a22 - a02 * a21) + a20 * (a01 * a12 - a02 * a11);\n return out;\n}\n/**\r\n * Calculates the determinant of a mat4\r\n *\r\n * @param {ReadonlyMat4} a the source matrix\r\n * @returns {Number} determinant of a\r\n */\n\nfunction determinant(a) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a03 = a[3];\n var a10 = a[4],\n a11 = a[5],\n a12 = a[6],\n a13 = a[7];\n var a20 = a[8],\n a21 = a[9],\n a22 = a[10],\n a23 = a[11];\n var a30 = a[12],\n a31 = a[13],\n a32 = a[14],\n a33 = a[15];\n var b00 = a00 * a11 - a01 * a10;\n var b01 = a00 * a12 - a02 * a10;\n var b02 = a00 * a13 - a03 * a10;\n var b03 = a01 * a12 - a02 * a11;\n var b04 = a01 * a13 - a03 * a11;\n var b05 = a02 * a13 - a03 * a12;\n var b06 = a20 * a31 - a21 * a30;\n var b07 = a20 * a32 - a22 * a30;\n var b08 = a20 * a33 - a23 * a30;\n var b09 = a21 * a32 - a22 * a31;\n var b10 = a21 * a33 - a23 * a31;\n var b11 = a22 * a33 - a23 * a32; // Calculate the determinant\n\n return b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n}\n/**\r\n * Multiplies two mat4s\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {ReadonlyMat4} a the first operand\r\n * @param {ReadonlyMat4} b the second operand\r\n * @returns {mat4} out\r\n */\n\nfunction mat4_multiply(out, a, b) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a03 = a[3];\n var a10 = a[4],\n a11 = a[5],\n a12 = a[6],\n a13 = a[7];\n var a20 = a[8],\n a21 = a[9],\n a22 = a[10],\n a23 = a[11];\n var a30 = a[12],\n a31 = a[13],\n a32 = a[14],\n a33 = a[15]; // Cache only the current line of the second matrix\n\n var b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3];\n out[0] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[1] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[2] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[3] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n b0 = b[4];\n b1 = b[5];\n b2 = b[6];\n b3 = b[7];\n out[4] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[5] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[6] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[7] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n b0 = b[8];\n b1 = b[9];\n b2 = b[10];\n b3 = b[11];\n out[8] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[9] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[10] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[11] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n b0 = b[12];\n b1 = b[13];\n b2 = b[14];\n b3 = b[15];\n out[12] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[13] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[14] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[15] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n return out;\n}\n/**\r\n * Translate a mat4 by the given vector\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {ReadonlyMat4} a the matrix to translate\r\n * @param {ReadonlyVec3} v vector to translate by\r\n * @returns {mat4} out\r\n */\n\nfunction translate(out, a, v) {\n var x = v[0],\n y = v[1],\n z = v[2];\n var a00, a01, a02, a03;\n var a10, a11, a12, a13;\n var a20, a21, a22, a23;\n\n if (a === out) {\n out[12] = a[0] * x + a[4] * y + a[8] * z + a[12];\n out[13] = a[1] * x + a[5] * y + a[9] * z + a[13];\n out[14] = a[2] * x + a[6] * y + a[10] * z + a[14];\n out[15] = a[3] * x + a[7] * y + a[11] * z + a[15];\n } else {\n a00 = a[0];\n a01 = a[1];\n a02 = a[2];\n a03 = a[3];\n a10 = a[4];\n a11 = a[5];\n a12 = a[6];\n a13 = a[7];\n a20 = a[8];\n a21 = a[9];\n a22 = a[10];\n a23 = a[11];\n out[0] = a00;\n out[1] = a01;\n out[2] = a02;\n out[3] = a03;\n out[4] = a10;\n out[5] = a11;\n out[6] = a12;\n out[7] = a13;\n out[8] = a20;\n out[9] = a21;\n out[10] = a22;\n out[11] = a23;\n out[12] = a00 * x + a10 * y + a20 * z + a[12];\n out[13] = a01 * x + a11 * y + a21 * z + a[13];\n out[14] = a02 * x + a12 * y + a22 * z + a[14];\n out[15] = a03 * x + a13 * y + a23 * z + a[15];\n }\n\n return out;\n}\n/**\r\n * Scales the mat4 by the dimensions in the given vec3 not using vectorization\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {ReadonlyMat4} a the matrix to scale\r\n * @param {ReadonlyVec3} v the vec3 to scale the matrix by\r\n * @returns {mat4} out\r\n **/\n\nfunction mat4_scale(out, a, v) {\n var x = v[0],\n y = v[1],\n z = v[2];\n out[0] = a[0] * x;\n out[1] = a[1] * x;\n out[2] = a[2] * x;\n out[3] = a[3] * x;\n out[4] = a[4] * y;\n out[5] = a[5] * y;\n out[6] = a[6] * y;\n out[7] = a[7] * y;\n out[8] = a[8] * z;\n out[9] = a[9] * z;\n out[10] = a[10] * z;\n out[11] = a[11] * z;\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n return out;\n}\n/**\r\n * Rotates a mat4 by the given angle around the given axis\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {ReadonlyMat4} a the matrix to rotate\r\n * @param {Number} rad the angle to rotate the matrix by\r\n * @param {ReadonlyVec3} axis the axis to rotate around\r\n * @returns {mat4} out\r\n */\n\nfunction rotate(out, a, rad, axis) {\n var x = axis[0],\n y = axis[1],\n z = axis[2];\n var len = Math.hypot(x, y, z);\n var s, c, t;\n var a00, a01, a02, a03;\n var a10, a11, a12, a13;\n var a20, a21, a22, a23;\n var b00, b01, b02;\n var b10, b11, b12;\n var b20, b21, b22;\n\n if (len < glMatrix.EPSILON) {\n return null;\n }\n\n len = 1 / len;\n x *= len;\n y *= len;\n z *= len;\n s = Math.sin(rad);\n c = Math.cos(rad);\n t = 1 - c;\n a00 = a[0];\n a01 = a[1];\n a02 = a[2];\n a03 = a[3];\n a10 = a[4];\n a11 = a[5];\n a12 = a[6];\n a13 = a[7];\n a20 = a[8];\n a21 = a[9];\n a22 = a[10];\n a23 = a[11]; // Construct the elements of the rotation matrix\n\n b00 = x * x * t + c;\n b01 = y * x * t + z * s;\n b02 = z * x * t - y * s;\n b10 = x * y * t - z * s;\n b11 = y * y * t + c;\n b12 = z * y * t + x * s;\n b20 = x * z * t + y * s;\n b21 = y * z * t - x * s;\n b22 = z * z * t + c; // Perform rotation-specific matrix multiplication\n\n out[0] = a00 * b00 + a10 * b01 + a20 * b02;\n out[1] = a01 * b00 + a11 * b01 + a21 * b02;\n out[2] = a02 * b00 + a12 * b01 + a22 * b02;\n out[3] = a03 * b00 + a13 * b01 + a23 * b02;\n out[4] = a00 * b10 + a10 * b11 + a20 * b12;\n out[5] = a01 * b10 + a11 * b11 + a21 * b12;\n out[6] = a02 * b10 + a12 * b11 + a22 * b12;\n out[7] = a03 * b10 + a13 * b11 + a23 * b12;\n out[8] = a00 * b20 + a10 * b21 + a20 * b22;\n out[9] = a01 * b20 + a11 * b21 + a21 * b22;\n out[10] = a02 * b20 + a12 * b21 + a22 * b22;\n out[11] = a03 * b20 + a13 * b21 + a23 * b22;\n\n if (a !== out) {\n // If the source and destination differ, copy the unchanged last row\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n }\n\n return out;\n}\n/**\r\n * Rotates a matrix by the given angle around the X axis\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {ReadonlyMat4} a the matrix to rotate\r\n * @param {Number} rad the angle to rotate the matrix by\r\n * @returns {mat4} out\r\n */\n\nfunction rotateX(out, a, rad) {\n var s = Math.sin(rad);\n var c = Math.cos(rad);\n var a10 = a[4];\n var a11 = a[5];\n var a12 = a[6];\n var a13 = a[7];\n var a20 = a[8];\n var a21 = a[9];\n var a22 = a[10];\n var a23 = a[11];\n\n if (a !== out) {\n // If the source and destination differ, copy the unchanged rows\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n } // Perform axis-specific matrix multiplication\n\n\n out[4] = a10 * c + a20 * s;\n out[5] = a11 * c + a21 * s;\n out[6] = a12 * c + a22 * s;\n out[7] = a13 * c + a23 * s;\n out[8] = a20 * c - a10 * s;\n out[9] = a21 * c - a11 * s;\n out[10] = a22 * c - a12 * s;\n out[11] = a23 * c - a13 * s;\n return out;\n}\n/**\r\n * Rotates a matrix by the given angle around the Y axis\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {ReadonlyMat4} a the matrix to rotate\r\n * @param {Number} rad the angle to rotate the matrix by\r\n * @returns {mat4} out\r\n */\n\nfunction rotateY(out, a, rad) {\n var s = Math.sin(rad);\n var c = Math.cos(rad);\n var a00 = a[0];\n var a01 = a[1];\n var a02 = a[2];\n var a03 = a[3];\n var a20 = a[8];\n var a21 = a[9];\n var a22 = a[10];\n var a23 = a[11];\n\n if (a !== out) {\n // If the source and destination differ, copy the unchanged rows\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n } // Perform axis-specific matrix multiplication\n\n\n out[0] = a00 * c - a20 * s;\n out[1] = a01 * c - a21 * s;\n out[2] = a02 * c - a22 * s;\n out[3] = a03 * c - a23 * s;\n out[8] = a00 * s + a20 * c;\n out[9] = a01 * s + a21 * c;\n out[10] = a02 * s + a22 * c;\n out[11] = a03 * s + a23 * c;\n return out;\n}\n/**\r\n * Rotates a matrix by the given angle around the Z axis\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {ReadonlyMat4} a the matrix to rotate\r\n * @param {Number} rad the angle to rotate the matrix by\r\n * @returns {mat4} out\r\n */\n\nfunction rotateZ(out, a, rad) {\n var s = Math.sin(rad);\n var c = Math.cos(rad);\n var a00 = a[0];\n var a01 = a[1];\n var a02 = a[2];\n var a03 = a[3];\n var a10 = a[4];\n var a11 = a[5];\n var a12 = a[6];\n var a13 = a[7];\n\n if (a !== out) {\n // If the source and destination differ, copy the unchanged last row\n out[8] = a[8];\n out[9] = a[9];\n out[10] = a[10];\n out[11] = a[11];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n } // Perform axis-specific matrix multiplication\n\n\n out[0] = a00 * c + a10 * s;\n out[1] = a01 * c + a11 * s;\n out[2] = a02 * c + a12 * s;\n out[3] = a03 * c + a13 * s;\n out[4] = a10 * c - a00 * s;\n out[5] = a11 * c - a01 * s;\n out[6] = a12 * c - a02 * s;\n out[7] = a13 * c - a03 * s;\n return out;\n}\n/**\r\n * Creates a matrix from a vector translation\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat4.identity(dest);\r\n * mat4.translate(dest, dest, vec);\r\n *\r\n * @param {mat4} out mat4 receiving operation result\r\n * @param {ReadonlyVec3} v Translation vector\r\n * @returns {mat4} out\r\n */\n\nfunction fromTranslation(out, v) {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = 1;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 1;\n out[11] = 0;\n out[12] = v[0];\n out[13] = v[1];\n out[14] = v[2];\n out[15] = 1;\n return out;\n}\n/**\r\n * Creates a matrix from a vector scaling\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat4.identity(dest);\r\n * mat4.scale(dest, dest, vec);\r\n *\r\n * @param {mat4} out mat4 receiving operation result\r\n * @param {ReadonlyVec3} v Scaling vector\r\n * @returns {mat4} out\r\n */\n\nfunction fromScaling(out, v) {\n out[0] = v[0];\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = v[1];\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = v[2];\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n/**\r\n * Creates a matrix from a given angle around a given axis\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat4.identity(dest);\r\n * mat4.rotate(dest, dest, rad, axis);\r\n *\r\n * @param {mat4} out mat4 receiving operation result\r\n * @param {Number} rad the angle to rotate the matrix by\r\n * @param {ReadonlyVec3} axis the axis to rotate around\r\n * @returns {mat4} out\r\n */\n\nfunction fromRotation(out, rad, axis) {\n var x = axis[0],\n y = axis[1],\n z = axis[2];\n var len = Math.hypot(x, y, z);\n var s, c, t;\n\n if (len < glMatrix.EPSILON) {\n return null;\n }\n\n len = 1 / len;\n x *= len;\n y *= len;\n z *= len;\n s = Math.sin(rad);\n c = Math.cos(rad);\n t = 1 - c; // Perform rotation-specific matrix multiplication\n\n out[0] = x * x * t + c;\n out[1] = y * x * t + z * s;\n out[2] = z * x * t - y * s;\n out[3] = 0;\n out[4] = x * y * t - z * s;\n out[5] = y * y * t + c;\n out[6] = z * y * t + x * s;\n out[7] = 0;\n out[8] = x * z * t + y * s;\n out[9] = y * z * t - x * s;\n out[10] = z * z * t + c;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n/**\r\n * Creates a matrix from the given angle around the X axis\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat4.identity(dest);\r\n * mat4.rotateX(dest, dest, rad);\r\n *\r\n * @param {mat4} out mat4 receiving operation result\r\n * @param {Number} rad the angle to rotate the matrix by\r\n * @returns {mat4} out\r\n */\n\nfunction fromXRotation(out, rad) {\n var s = Math.sin(rad);\n var c = Math.cos(rad); // Perform axis-specific matrix multiplication\n\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = c;\n out[6] = s;\n out[7] = 0;\n out[8] = 0;\n out[9] = -s;\n out[10] = c;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n/**\r\n * Creates a matrix from the given angle around the Y axis\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat4.identity(dest);\r\n * mat4.rotateY(dest, dest, rad);\r\n *\r\n * @param {mat4} out mat4 receiving operation result\r\n * @param {Number} rad the angle to rotate the matrix by\r\n * @returns {mat4} out\r\n */\n\nfunction fromYRotation(out, rad) {\n var s = Math.sin(rad);\n var c = Math.cos(rad); // Perform axis-specific matrix multiplication\n\n out[0] = c;\n out[1] = 0;\n out[2] = -s;\n out[3] = 0;\n out[4] = 0;\n out[5] = 1;\n out[6] = 0;\n out[7] = 0;\n out[8] = s;\n out[9] = 0;\n out[10] = c;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n/**\r\n * Creates a matrix from the given angle around the Z axis\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat4.identity(dest);\r\n * mat4.rotateZ(dest, dest, rad);\r\n *\r\n * @param {mat4} out mat4 receiving operation result\r\n * @param {Number} rad the angle to rotate the matrix by\r\n * @returns {mat4} out\r\n */\n\nfunction fromZRotation(out, rad) {\n var s = Math.sin(rad);\n var c = Math.cos(rad); // Perform axis-specific matrix multiplication\n\n out[0] = c;\n out[1] = s;\n out[2] = 0;\n out[3] = 0;\n out[4] = -s;\n out[5] = c;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 1;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n/**\r\n * Creates a matrix from a quaternion rotation and vector translation\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat4.identity(dest);\r\n * mat4.translate(dest, vec);\r\n * let quatMat = mat4.create();\r\n * quat4.toMat4(quat, quatMat);\r\n * mat4.multiply(dest, quatMat);\r\n *\r\n * @param {mat4} out mat4 receiving operation result\r\n * @param {quat4} q Rotation quaternion\r\n * @param {ReadonlyVec3} v Translation vector\r\n * @returns {mat4} out\r\n */\n\nfunction fromRotationTranslation(out, q, v) {\n // Quaternion math\n var x = q[0],\n y = q[1],\n z = q[2],\n w = q[3];\n var x2 = x + x;\n var y2 = y + y;\n var z2 = z + z;\n var xx = x * x2;\n var xy = x * y2;\n var xz = x * z2;\n var yy = y * y2;\n var yz = y * z2;\n var zz = z * z2;\n var wx = w * x2;\n var wy = w * y2;\n var wz = w * z2;\n out[0] = 1 - (yy + zz);\n out[1] = xy + wz;\n out[2] = xz - wy;\n out[3] = 0;\n out[4] = xy - wz;\n out[5] = 1 - (xx + zz);\n out[6] = yz + wx;\n out[7] = 0;\n out[8] = xz + wy;\n out[9] = yz - wx;\n out[10] = 1 - (xx + yy);\n out[11] = 0;\n out[12] = v[0];\n out[13] = v[1];\n out[14] = v[2];\n out[15] = 1;\n return out;\n}\n/**\r\n * Creates a new mat4 from a dual quat.\r\n *\r\n * @param {mat4} out Matrix\r\n * @param {ReadonlyQuat2} a Dual Quaternion\r\n * @returns {mat4} mat4 receiving operation result\r\n */\n\nfunction fromQuat2(out, a) {\n var translation = new glMatrix.ARRAY_TYPE(3);\n var bx = -a[0],\n by = -a[1],\n bz = -a[2],\n bw = a[3],\n ax = a[4],\n ay = a[5],\n az = a[6],\n aw = a[7];\n var magnitude = bx * bx + by * by + bz * bz + bw * bw; //Only scale if it makes sense\n\n if (magnitude > 0) {\n translation[0] = (ax * bw + aw * bx + ay * bz - az * by) * 2 / magnitude;\n translation[1] = (ay * bw + aw * by + az * bx - ax * bz) * 2 / magnitude;\n translation[2] = (az * bw + aw * bz + ax * by - ay * bx) * 2 / magnitude;\n } else {\n translation[0] = (ax * bw + aw * bx + ay * bz - az * by) * 2;\n translation[1] = (ay * bw + aw * by + az * bx - ax * bz) * 2;\n translation[2] = (az * bw + aw * bz + ax * by - ay * bx) * 2;\n }\n\n fromRotationTranslation(out, a, translation);\n return out;\n}\n/**\r\n * Returns the translation vector component of a transformation\r\n * matrix. If a matrix is built with fromRotationTranslation,\r\n * the returned vector will be the same as the translation vector\r\n * originally supplied.\r\n * @param {vec3} out Vector to receive translation component\r\n * @param {ReadonlyMat4} mat Matrix to be decomposed (input)\r\n * @return {vec3} out\r\n */\n\nfunction getTranslation(out, mat) {\n out[0] = mat[12];\n out[1] = mat[13];\n out[2] = mat[14];\n return out;\n}\n/**\r\n * Returns the scaling factor component of a transformation\r\n * matrix. If a matrix is built with fromRotationTranslationScale\r\n * with a normalized Quaternion paramter, the returned vector will be\r\n * the same as the scaling vector\r\n * originally supplied.\r\n * @param {vec3} out Vector to receive scaling factor component\r\n * @param {ReadonlyMat4} mat Matrix to be decomposed (input)\r\n * @return {vec3} out\r\n */\n\nfunction getScaling(out, mat) {\n var m11 = mat[0];\n var m12 = mat[1];\n var m13 = mat[2];\n var m21 = mat[4];\n var m22 = mat[5];\n var m23 = mat[6];\n var m31 = mat[8];\n var m32 = mat[9];\n var m33 = mat[10];\n out[0] = Math.hypot(m11, m12, m13);\n out[1] = Math.hypot(m21, m22, m23);\n out[2] = Math.hypot(m31, m32, m33);\n return out;\n}\n/**\r\n * Returns a quaternion representing the rotational component\r\n * of a transformation matrix. If a matrix is built with\r\n * fromRotationTranslation, the returned quaternion will be the\r\n * same as the quaternion originally supplied.\r\n * @param {quat} out Quaternion to receive the rotation component\r\n * @param {ReadonlyMat4} mat Matrix to be decomposed (input)\r\n * @return {quat} out\r\n */\n\nfunction getRotation(out, mat) {\n var scaling = new glMatrix.ARRAY_TYPE(3);\n getScaling(scaling, mat);\n var is1 = 1 / scaling[0];\n var is2 = 1 / scaling[1];\n var is3 = 1 / scaling[2];\n var sm11 = mat[0] * is1;\n var sm12 = mat[1] * is2;\n var sm13 = mat[2] * is3;\n var sm21 = mat[4] * is1;\n var sm22 = mat[5] * is2;\n var sm23 = mat[6] * is3;\n var sm31 = mat[8] * is1;\n var sm32 = mat[9] * is2;\n var sm33 = mat[10] * is3;\n var trace = sm11 + sm22 + sm33;\n var S = 0;\n\n if (trace > 0) {\n S = Math.sqrt(trace + 1.0) * 2;\n out[3] = 0.25 * S;\n out[0] = (sm23 - sm32) / S;\n out[1] = (sm31 - sm13) / S;\n out[2] = (sm12 - sm21) / S;\n } else if (sm11 > sm22 && sm11 > sm33) {\n S = Math.sqrt(1.0 + sm11 - sm22 - sm33) * 2;\n out[3] = (sm23 - sm32) / S;\n out[0] = 0.25 * S;\n out[1] = (sm12 + sm21) / S;\n out[2] = (sm31 + sm13) / S;\n } else if (sm22 > sm33) {\n S = Math.sqrt(1.0 + sm22 - sm11 - sm33) * 2;\n out[3] = (sm31 - sm13) / S;\n out[0] = (sm12 + sm21) / S;\n out[1] = 0.25 * S;\n out[2] = (sm23 + sm32) / S;\n } else {\n S = Math.sqrt(1.0 + sm33 - sm11 - sm22) * 2;\n out[3] = (sm12 - sm21) / S;\n out[0] = (sm31 + sm13) / S;\n out[1] = (sm23 + sm32) / S;\n out[2] = 0.25 * S;\n }\n\n return out;\n}\n/**\r\n * Creates a matrix from a quaternion rotation, vector translation and vector scale\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat4.identity(dest);\r\n * mat4.translate(dest, vec);\r\n * let quatMat = mat4.create();\r\n * quat4.toMat4(quat, quatMat);\r\n * mat4.multiply(dest, quatMat);\r\n * mat4.scale(dest, scale)\r\n *\r\n * @param {mat4} out mat4 receiving operation result\r\n * @param {quat4} q Rotation quaternion\r\n * @param {ReadonlyVec3} v Translation vector\r\n * @param {ReadonlyVec3} s Scaling vector\r\n * @returns {mat4} out\r\n */\n\nfunction fromRotationTranslationScale(out, q, v, s) {\n // Quaternion math\n var x = q[0],\n y = q[1],\n z = q[2],\n w = q[3];\n var x2 = x + x;\n var y2 = y + y;\n var z2 = z + z;\n var xx = x * x2;\n var xy = x * y2;\n var xz = x * z2;\n var yy = y * y2;\n var yz = y * z2;\n var zz = z * z2;\n var wx = w * x2;\n var wy = w * y2;\n var wz = w * z2;\n var sx = s[0];\n var sy = s[1];\n var sz = s[2];\n out[0] = (1 - (yy + zz)) * sx;\n out[1] = (xy + wz) * sx;\n out[2] = (xz - wy) * sx;\n out[3] = 0;\n out[4] = (xy - wz) * sy;\n out[5] = (1 - (xx + zz)) * sy;\n out[6] = (yz + wx) * sy;\n out[7] = 0;\n out[8] = (xz + wy) * sz;\n out[9] = (yz - wx) * sz;\n out[10] = (1 - (xx + yy)) * sz;\n out[11] = 0;\n out[12] = v[0];\n out[13] = v[1];\n out[14] = v[2];\n out[15] = 1;\n return out;\n}\n/**\r\n * Creates a matrix from a quaternion rotation, vector translation and vector scale, rotating and scaling around the given origin\r\n * This is equivalent to (but much faster than):\r\n *\r\n * mat4.identity(dest);\r\n * mat4.translate(dest, vec);\r\n * mat4.translate(dest, origin);\r\n * let quatMat = mat4.create();\r\n * quat4.toMat4(quat, quatMat);\r\n * mat4.multiply(dest, quatMat);\r\n * mat4.scale(dest, scale)\r\n * mat4.translate(dest, negativeOrigin);\r\n *\r\n * @param {mat4} out mat4 receiving operation result\r\n * @param {quat4} q Rotation quaternion\r\n * @param {ReadonlyVec3} v Translation vector\r\n * @param {ReadonlyVec3} s Scaling vector\r\n * @param {ReadonlyVec3} o The origin vector around which to scale and rotate\r\n * @returns {mat4} out\r\n */\n\nfunction fromRotationTranslationScaleOrigin(out, q, v, s, o) {\n // Quaternion math\n var x = q[0],\n y = q[1],\n z = q[2],\n w = q[3];\n var x2 = x + x;\n var y2 = y + y;\n var z2 = z + z;\n var xx = x * x2;\n var xy = x * y2;\n var xz = x * z2;\n var yy = y * y2;\n var yz = y * z2;\n var zz = z * z2;\n var wx = w * x2;\n var wy = w * y2;\n var wz = w * z2;\n var sx = s[0];\n var sy = s[1];\n var sz = s[2];\n var ox = o[0];\n var oy = o[1];\n var oz = o[2];\n var out0 = (1 - (yy + zz)) * sx;\n var out1 = (xy + wz) * sx;\n var out2 = (xz - wy) * sx;\n var out4 = (xy - wz) * sy;\n var out5 = (1 - (xx + zz)) * sy;\n var out6 = (yz + wx) * sy;\n var out8 = (xz + wy) * sz;\n var out9 = (yz - wx) * sz;\n var out10 = (1 - (xx + yy)) * sz;\n out[0] = out0;\n out[1] = out1;\n out[2] = out2;\n out[3] = 0;\n out[4] = out4;\n out[5] = out5;\n out[6] = out6;\n out[7] = 0;\n out[8] = out8;\n out[9] = out9;\n out[10] = out10;\n out[11] = 0;\n out[12] = v[0] + ox - (out0 * ox + out4 * oy + out8 * oz);\n out[13] = v[1] + oy - (out1 * ox + out5 * oy + out9 * oz);\n out[14] = v[2] + oz - (out2 * ox + out6 * oy + out10 * oz);\n out[15] = 1;\n return out;\n}\n/**\r\n * Calculates a 4x4 matrix from the given quaternion\r\n *\r\n * @param {mat4} out mat4 receiving operation result\r\n * @param {ReadonlyQuat} q Quaternion to create matrix from\r\n *\r\n * @returns {mat4} out\r\n */\n\nfunction fromQuat(out, q) {\n var x = q[0],\n y = q[1],\n z = q[2],\n w = q[3];\n var x2 = x + x;\n var y2 = y + y;\n var z2 = z + z;\n var xx = x * x2;\n var yx = y * x2;\n var yy = y * y2;\n var zx = z * x2;\n var zy = z * y2;\n var zz = z * z2;\n var wx = w * x2;\n var wy = w * y2;\n var wz = w * z2;\n out[0] = 1 - yy - zz;\n out[1] = yx + wz;\n out[2] = zx - wy;\n out[3] = 0;\n out[4] = yx - wz;\n out[5] = 1 - xx - zz;\n out[6] = zy + wx;\n out[7] = 0;\n out[8] = zx + wy;\n out[9] = zy - wx;\n out[10] = 1 - xx - yy;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n}\n/**\r\n * Generates a frustum matrix with the given bounds\r\n *\r\n * @param {mat4} out mat4 frustum matrix will be written into\r\n * @param {Number} left Left bound of the frustum\r\n * @param {Number} right Right bound of the frustum\r\n * @param {Number} bottom Bottom bound of the frustum\r\n * @param {Number} top Top bound of the frustum\r\n * @param {Number} near Near bound of the frustum\r\n * @param {Number} far Far bound of the frustum\r\n * @returns {mat4} out\r\n */\n\nfunction frustum(out, left, right, bottom, top, near, far) {\n var rl = 1 / (right - left);\n var tb = 1 / (top - bottom);\n var nf = 1 / (near - far);\n out[0] = near * 2 * rl;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = near * 2 * tb;\n out[6] = 0;\n out[7] = 0;\n out[8] = (right + left) * rl;\n out[9] = (top + bottom) * tb;\n out[10] = (far + near) * nf;\n out[11] = -1;\n out[12] = 0;\n out[13] = 0;\n out[14] = far * near * 2 * nf;\n out[15] = 0;\n return out;\n}\n/**\r\n * Generates a perspective projection matrix with the given bounds.\r\n * Passing null/undefined/no value for far will generate infinite projection matrix.\r\n *\r\n * @param {mat4} out mat4 frustum matrix will be written into\r\n * @param {number} fovy Vertical field of view in radians\r\n * @param {number} aspect Aspect ratio. typically viewport width/height\r\n * @param {number} near Near bound of the frustum\r\n * @param {number} far Far bound of the frustum, can be null or Infinity\r\n * @returns {mat4} out\r\n */\n\nfunction perspective(out, fovy, aspect, near, far) {\n var f = 1.0 / Math.tan(fovy / 2),\n nf;\n out[0] = f / aspect;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = f;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[11] = -1;\n out[12] = 0;\n out[13] = 0;\n out[15] = 0;\n\n if (far != null && far !== Infinity) {\n nf = 1 / (near - far);\n out[10] = (far + near) * nf;\n out[14] = 2 * far * near * nf;\n } else {\n out[10] = -1;\n out[14] = -2 * near;\n }\n\n return out;\n}\n/**\r\n * Generates a perspective projection matrix with the given field of view.\r\n * This is primarily useful for generating projection matrices to be used\r\n * with the still experiemental WebVR API.\r\n *\r\n * @param {mat4} out mat4 frustum matrix will be written into\r\n * @param {Object} fov Object containing the following values: upDegrees, downDegrees, leftDegrees, rightDegrees\r\n * @param {number} near Near bound of the frustum\r\n * @param {number} far Far bound of the frustum\r\n * @returns {mat4} out\r\n */\n\nfunction perspectiveFromFieldOfView(out, fov, near, far) {\n var upTan = Math.tan(fov.upDegrees * Math.PI / 180.0);\n var downTan = Math.tan(fov.downDegrees * Math.PI / 180.0);\n var leftTan = Math.tan(fov.leftDegrees * Math.PI / 180.0);\n var rightTan = Math.tan(fov.rightDegrees * Math.PI / 180.0);\n var xScale = 2.0 / (leftTan + rightTan);\n var yScale = 2.0 / (upTan + downTan);\n out[0] = xScale;\n out[1] = 0.0;\n out[2] = 0.0;\n out[3] = 0.0;\n out[4] = 0.0;\n out[5] = yScale;\n out[6] = 0.0;\n out[7] = 0.0;\n out[8] = -((leftTan - rightTan) * xScale * 0.5);\n out[9] = (upTan - downTan) * yScale * 0.5;\n out[10] = far / (near - far);\n out[11] = -1.0;\n out[12] = 0.0;\n out[13] = 0.0;\n out[14] = far * near / (near - far);\n out[15] = 0.0;\n return out;\n}\n/**\r\n * Generates a orthogonal projection matrix with the given bounds\r\n *\r\n * @param {mat4} out mat4 frustum matrix will be written into\r\n * @param {number} left Left bound of the frustum\r\n * @param {number} right Right bound of the frustum\r\n * @param {number} bottom Bottom bound of the frustum\r\n * @param {number} top Top bound of the frustum\r\n * @param {number} near Near bound of the frustum\r\n * @param {number} far Far bound of the frustum\r\n * @returns {mat4} out\r\n */\n\nfunction ortho(out, left, right, bottom, top, near, far) {\n var lr = 1 / (left - right);\n var bt = 1 / (bottom - top);\n var nf = 1 / (near - far);\n out[0] = -2 * lr;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = -2 * bt;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 2 * nf;\n out[11] = 0;\n out[12] = (left + right) * lr;\n out[13] = (top + bottom) * bt;\n out[14] = (far + near) * nf;\n out[15] = 1;\n return out;\n}\n/**\r\n * Generates a look-at matrix with the given eye position, focal point, and up axis.\r\n * If you want a matrix that actually makes an object look at another object, you should use targetTo instead.\r\n *\r\n * @param {mat4} out mat4 frustum matrix will be written into\r\n * @param {ReadonlyVec3} eye Position of the viewer\r\n * @param {ReadonlyVec3} center Point the viewer is looking at\r\n * @param {ReadonlyVec3} up vec3 pointing up\r\n * @returns {mat4} out\r\n */\n\nfunction lookAt(out, eye, center, up) {\n var x0, x1, x2, y0, y1, y2, z0, z1, z2, len;\n var eyex = eye[0];\n var eyey = eye[1];\n var eyez = eye[2];\n var upx = up[0];\n var upy = up[1];\n var upz = up[2];\n var centerx = center[0];\n var centery = center[1];\n var centerz = center[2];\n\n if (Math.abs(eyex - centerx) < glMatrix.EPSILON && Math.abs(eyey - centery) < glMatrix.EPSILON && Math.abs(eyez - centerz) < glMatrix.EPSILON) {\n return identity(out);\n }\n\n z0 = eyex - centerx;\n z1 = eyey - centery;\n z2 = eyez - centerz;\n len = 1 / Math.hypot(z0, z1, z2);\n z0 *= len;\n z1 *= len;\n z2 *= len;\n x0 = upy * z2 - upz * z1;\n x1 = upz * z0 - upx * z2;\n x2 = upx * z1 - upy * z0;\n len = Math.hypot(x0, x1, x2);\n\n if (!len) {\n x0 = 0;\n x1 = 0;\n x2 = 0;\n } else {\n len = 1 / len;\n x0 *= len;\n x1 *= len;\n x2 *= len;\n }\n\n y0 = z1 * x2 - z2 * x1;\n y1 = z2 * x0 - z0 * x2;\n y2 = z0 * x1 - z1 * x0;\n len = Math.hypot(y0, y1, y2);\n\n if (!len) {\n y0 = 0;\n y1 = 0;\n y2 = 0;\n } else {\n len = 1 / len;\n y0 *= len;\n y1 *= len;\n y2 *= len;\n }\n\n out[0] = x0;\n out[1] = y0;\n out[2] = z0;\n out[3] = 0;\n out[4] = x1;\n out[5] = y1;\n out[6] = z1;\n out[7] = 0;\n out[8] = x2;\n out[9] = y2;\n out[10] = z2;\n out[11] = 0;\n out[12] = -(x0 * eyex + x1 * eyey + x2 * eyez);\n out[13] = -(y0 * eyex + y1 * eyey + y2 * eyez);\n out[14] = -(z0 * eyex + z1 * eyey + z2 * eyez);\n out[15] = 1;\n return out;\n}\n/**\r\n * Generates a matrix that makes something look at something else.\r\n *\r\n * @param {mat4} out mat4 frustum matrix will be written into\r\n * @param {ReadonlyVec3} eye Position of the viewer\r\n * @param {ReadonlyVec3} center Point the viewer is looking at\r\n * @param {ReadonlyVec3} up vec3 pointing up\r\n * @returns {mat4} out\r\n */\n\nfunction targetTo(out, eye, target, up) {\n var eyex = eye[0],\n eyey = eye[1],\n eyez = eye[2],\n upx = up[0],\n upy = up[1],\n upz = up[2];\n var z0 = eyex - target[0],\n z1 = eyey - target[1],\n z2 = eyez - target[2];\n var len = z0 * z0 + z1 * z1 + z2 * z2;\n\n if (len > 0) {\n len = 1 / Math.sqrt(len);\n z0 *= len;\n z1 *= len;\n z2 *= len;\n }\n\n var x0 = upy * z2 - upz * z1,\n x1 = upz * z0 - upx * z2,\n x2 = upx * z1 - upy * z0;\n len = x0 * x0 + x1 * x1 + x2 * x2;\n\n if (len > 0) {\n len = 1 / Math.sqrt(len);\n x0 *= len;\n x1 *= len;\n x2 *= len;\n }\n\n out[0] = x0;\n out[1] = x1;\n out[2] = x2;\n out[3] = 0;\n out[4] = z1 * x2 - z2 * x1;\n out[5] = z2 * x0 - z0 * x2;\n out[6] = z0 * x1 - z1 * x0;\n out[7] = 0;\n out[8] = z0;\n out[9] = z1;\n out[10] = z2;\n out[11] = 0;\n out[12] = eyex;\n out[13] = eyey;\n out[14] = eyez;\n out[15] = 1;\n return out;\n}\n/**\r\n * Returns a string representation of a mat4\r\n *\r\n * @param {ReadonlyMat4} a matrix to represent as a string\r\n * @returns {String} string representation of the matrix\r\n */\n\nfunction mat4_str(a) {\n return "mat4(" + a[0] + ", " + a[1] + ", " + a[2] + ", " + a[3] + ", " + a[4] + ", " + a[5] + ", " + a[6] + ", " + a[7] + ", " + a[8] + ", " + a[9] + ", " + a[10] + ", " + a[11] + ", " + a[12] + ", " + a[13] + ", " + a[14] + ", " + a[15] + ")";\n}\n/**\r\n * Returns Frobenius norm of a mat4\r\n *\r\n * @param {ReadonlyMat4} a the matrix to calculate Frobenius norm of\r\n * @returns {Number} Frobenius norm\r\n */\n\nfunction frob(a) {\n return Math.hypot(a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], a[13], a[14], a[15]);\n}\n/**\r\n * Adds two mat4\'s\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {ReadonlyMat4} a the first operand\r\n * @param {ReadonlyMat4} b the second operand\r\n * @returns {mat4} out\r\n */\n\nfunction mat4_add(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n out[2] = a[2] + b[2];\n out[3] = a[3] + b[3];\n out[4] = a[4] + b[4];\n out[5] = a[5] + b[5];\n out[6] = a[6] + b[6];\n out[7] = a[7] + b[7];\n out[8] = a[8] + b[8];\n out[9] = a[9] + b[9];\n out[10] = a[10] + b[10];\n out[11] = a[11] + b[11];\n out[12] = a[12] + b[12];\n out[13] = a[13] + b[13];\n out[14] = a[14] + b[14];\n out[15] = a[15] + b[15];\n return out;\n}\n/**\r\n * Subtracts matrix b from matrix a\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {ReadonlyMat4} a the first operand\r\n * @param {ReadonlyMat4} b the second operand\r\n * @returns {mat4} out\r\n */\n\nfunction mat4_subtract(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n out[2] = a[2] - b[2];\n out[3] = a[3] - b[3];\n out[4] = a[4] - b[4];\n out[5] = a[5] - b[5];\n out[6] = a[6] - b[6];\n out[7] = a[7] - b[7];\n out[8] = a[8] - b[8];\n out[9] = a[9] - b[9];\n out[10] = a[10] - b[10];\n out[11] = a[11] - b[11];\n out[12] = a[12] - b[12];\n out[13] = a[13] - b[13];\n out[14] = a[14] - b[14];\n out[15] = a[15] - b[15];\n return out;\n}\n/**\r\n * Multiply each element of the matrix by a scalar.\r\n *\r\n * @param {mat4} out the receiving matrix\r\n * @param {ReadonlyMat4} a the matrix to scale\r\n * @param {Number} b amount to scale the matrix\'s elements by\r\n * @returns {mat4} out\r\n */\n\nfunction multiplyScalar(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n out[2] = a[2] * b;\n out[3] = a[3] * b;\n out[4] = a[4] * b;\n out[5] = a[5] * b;\n out[6] = a[6] * b;\n out[7] = a[7] * b;\n out[8] = a[8] * b;\n out[9] = a[9] * b;\n out[10] = a[10] * b;\n out[11] = a[11] * b;\n out[12] = a[12] * b;\n out[13] = a[13] * b;\n out[14] = a[14] * b;\n out[15] = a[15] * b;\n return out;\n}\n/**\r\n * Adds two mat4\'s after multiplying each element of the second operand by a scalar value.\r\n *\r\n * @param {mat4} out the receiving vector\r\n * @param {ReadonlyMat4} a the first operand\r\n * @param {ReadonlyMat4} b the second operand\r\n * @param {Number} scale the amount to scale b\'s elements by before adding\r\n * @returns {mat4} out\r\n */\n\nfunction multiplyScalarAndAdd(out, a, b, scale) {\n out[0] = a[0] + b[0] * scale;\n out[1] = a[1] + b[1] * scale;\n out[2] = a[2] + b[2] * scale;\n out[3] = a[3] + b[3] * scale;\n out[4] = a[4] + b[4] * scale;\n out[5] = a[5] + b[5] * scale;\n out[6] = a[6] + b[6] * scale;\n out[7] = a[7] + b[7] * scale;\n out[8] = a[8] + b[8] * scale;\n out[9] = a[9] + b[9] * scale;\n out[10] = a[10] + b[10] * scale;\n out[11] = a[11] + b[11] * scale;\n out[12] = a[12] + b[12] * scale;\n out[13] = a[13] + b[13] * scale;\n out[14] = a[14] + b[14] * scale;\n out[15] = a[15] + b[15] * scale;\n return out;\n}\n/**\r\n * Returns whether or not the matrices have exactly the same elements in the same position (when compared with ===)\r\n *\r\n * @param {ReadonlyMat4} a The first matrix.\r\n * @param {ReadonlyMat4} b The second matrix.\r\n * @returns {Boolean} True if the matrices are equal, false otherwise.\r\n */\n\nfunction mat4_exactEquals(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3] && a[4] === b[4] && a[5] === b[5] && a[6] === b[6] && a[7] === b[7] && a[8] === b[8] && a[9] === b[9] && a[10] === b[10] && a[11] === b[11] && a[12] === b[12] && a[13] === b[13] && a[14] === b[14] && a[15] === b[15];\n}\n/**\r\n * Returns whether or not the matrices have approximately the same elements in the same position.\r\n *\r\n * @param {ReadonlyMat4} a The first matrix.\r\n * @param {ReadonlyMat4} b The second matrix.\r\n * @returns {Boolean} True if the matrices are equal, false otherwise.\r\n */\n\nfunction mat4_equals(a, b) {\n var a0 = a[0],\n a1 = a[1],\n a2 = a[2],\n a3 = a[3];\n var a4 = a[4],\n a5 = a[5],\n a6 = a[6],\n a7 = a[7];\n var a8 = a[8],\n a9 = a[9],\n a10 = a[10],\n a11 = a[11];\n var a12 = a[12],\n a13 = a[13],\n a14 = a[14],\n a15 = a[15];\n var b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3];\n var b4 = b[4],\n b5 = b[5],\n b6 = b[6],\n b7 = b[7];\n var b8 = b[8],\n b9 = b[9],\n b10 = b[10],\n b11 = b[11];\n var b12 = b[12],\n b13 = b[13],\n b14 = b[14],\n b15 = b[15];\n return Math.abs(a0 - b0) <= EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3)) && Math.abs(a4 - b4) <= EPSILON * Math.max(1.0, Math.abs(a4), Math.abs(b4)) && Math.abs(a5 - b5) <= EPSILON * Math.max(1.0, Math.abs(a5), Math.abs(b5)) && Math.abs(a6 - b6) <= EPSILON * Math.max(1.0, Math.abs(a6), Math.abs(b6)) && Math.abs(a7 - b7) <= EPSILON * Math.max(1.0, Math.abs(a7), Math.abs(b7)) && Math.abs(a8 - b8) <= EPSILON * Math.max(1.0, Math.abs(a8), Math.abs(b8)) && Math.abs(a9 - b9) <= EPSILON * Math.max(1.0, Math.abs(a9), Math.abs(b9)) && Math.abs(a10 - b10) <= EPSILON * Math.max(1.0, Math.abs(a10), Math.abs(b10)) && Math.abs(a11 - b11) <= EPSILON * Math.max(1.0, Math.abs(a11), Math.abs(b11)) && Math.abs(a12 - b12) <= EPSILON * Math.max(1.0, Math.abs(a12), Math.abs(b12)) && Math.abs(a13 - b13) <= EPSILON * Math.max(1.0, Math.abs(a13), Math.abs(b13)) && Math.abs(a14 - b14) <= EPSILON * Math.max(1.0, Math.abs(a14), Math.abs(b14)) && Math.abs(a15 - b15) <= EPSILON * Math.max(1.0, Math.abs(a15), Math.abs(b15));\n}\n/**\r\n * Alias for {@link mat4.multiply}\r\n * @function\r\n */\n\nvar mat4_mul = (/* unused pure expression or super */ null && (mat4_multiply));\n/**\r\n * Alias for {@link mat4.subtract}\r\n * @function\r\n */\n\nvar mat4_sub = (/* unused pure expression or super */ null && (mat4_subtract));\n;// CONCATENATED MODULE: ./node_modules/gl-matrix/esm/vec2.js\n\n\n/**\r\n * 2 Dimensional Vector\r\n * @module vec2\r\n */\n\n/**\r\n * Creates a new, empty vec2\r\n *\r\n * @returns {vec2} a new 2D vector\r\n */\n\nfunction vec2_create() {\n var out = new ARRAY_TYPE(2);\n\n if (ARRAY_TYPE != Float32Array) {\n out[0] = 0;\n out[1] = 0;\n }\n\n return out;\n}\n/**\r\n * Creates a new vec2 initialized with values from an existing vector\r\n *\r\n * @param {ReadonlyVec2} a vector to clone\r\n * @returns {vec2} a new 2D vector\r\n */\n\nfunction vec2_clone(a) {\n var out = new glMatrix.ARRAY_TYPE(2);\n out[0] = a[0];\n out[1] = a[1];\n return out;\n}\n/**\r\n * Creates a new vec2 initialized with the given values\r\n *\r\n * @param {Number} x X component\r\n * @param {Number} y Y component\r\n * @returns {vec2} a new 2D vector\r\n */\n\nfunction vec2_fromValues(x, y) {\n var out = new glMatrix.ARRAY_TYPE(2);\n out[0] = x;\n out[1] = y;\n return out;\n}\n/**\r\n * Copy the values from one vec2 to another\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the source vector\r\n * @returns {vec2} out\r\n */\n\nfunction vec2_copy(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n return out;\n}\n/**\r\n * Set the components of a vec2 to the given values\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {Number} x X component\r\n * @param {Number} y Y component\r\n * @returns {vec2} out\r\n */\n\nfunction vec2_set(out, x, y) {\n out[0] = x;\n out[1] = y;\n return out;\n}\n/**\r\n * Adds two vec2\'s\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @returns {vec2} out\r\n */\n\nfunction vec2_add(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n return out;\n}\n/**\r\n * Subtracts vector b from vector a\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @returns {vec2} out\r\n */\n\nfunction vec2_subtract(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n return out;\n}\n/**\r\n * Multiplies two vec2\'s\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @returns {vec2} out\r\n */\n\nfunction vec2_multiply(out, a, b) {\n out[0] = a[0] * b[0];\n out[1] = a[1] * b[1];\n return out;\n}\n/**\r\n * Divides two vec2\'s\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @returns {vec2} out\r\n */\n\nfunction vec2_divide(out, a, b) {\n out[0] = a[0] / b[0];\n out[1] = a[1] / b[1];\n return out;\n}\n/**\r\n * Math.ceil the components of a vec2\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a vector to ceil\r\n * @returns {vec2} out\r\n */\n\nfunction vec2_ceil(out, a) {\n out[0] = Math.ceil(a[0]);\n out[1] = Math.ceil(a[1]);\n return out;\n}\n/**\r\n * Math.floor the components of a vec2\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a vector to floor\r\n * @returns {vec2} out\r\n */\n\nfunction vec2_floor(out, a) {\n out[0] = Math.floor(a[0]);\n out[1] = Math.floor(a[1]);\n return out;\n}\n/**\r\n * Returns the minimum of two vec2\'s\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @returns {vec2} out\r\n */\n\nfunction vec2_min(out, a, b) {\n out[0] = Math.min(a[0], b[0]);\n out[1] = Math.min(a[1], b[1]);\n return out;\n}\n/**\r\n * Returns the maximum of two vec2\'s\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @returns {vec2} out\r\n */\n\nfunction vec2_max(out, a, b) {\n out[0] = Math.max(a[0], b[0]);\n out[1] = Math.max(a[1], b[1]);\n return out;\n}\n/**\r\n * Math.round the components of a vec2\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a vector to round\r\n * @returns {vec2} out\r\n */\n\nfunction vec2_round(out, a) {\n out[0] = Math.round(a[0]);\n out[1] = Math.round(a[1]);\n return out;\n}\n/**\r\n * Scales a vec2 by a scalar number\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the vector to scale\r\n * @param {Number} b amount to scale the vector by\r\n * @returns {vec2} out\r\n */\n\nfunction vec2_scale(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n return out;\n}\n/**\r\n * Adds two vec2\'s after scaling the second operand by a scalar value\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @param {Number} scale the amount to scale b by before adding\r\n * @returns {vec2} out\r\n */\n\nfunction vec2_scaleAndAdd(out, a, b, scale) {\n out[0] = a[0] + b[0] * scale;\n out[1] = a[1] + b[1] * scale;\n return out;\n}\n/**\r\n * Calculates the euclidian distance between two vec2\'s\r\n *\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @returns {Number} distance between a and b\r\n */\n\nfunction vec2_distance(a, b) {\n var x = b[0] - a[0],\n y = b[1] - a[1];\n return Math.hypot(x, y);\n}\n/**\r\n * Calculates the squared euclidian distance between two vec2\'s\r\n *\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @returns {Number} squared distance between a and b\r\n */\n\nfunction vec2_squaredDistance(a, b) {\n var x = b[0] - a[0],\n y = b[1] - a[1];\n return x * x + y * y;\n}\n/**\r\n * Calculates the length of a vec2\r\n *\r\n * @param {ReadonlyVec2} a vector to calculate length of\r\n * @returns {Number} length of a\r\n */\n\nfunction vec2_length(a) {\n var x = a[0],\n y = a[1];\n return Math.hypot(x, y);\n}\n/**\r\n * Calculates the squared length of a vec2\r\n *\r\n * @param {ReadonlyVec2} a vector to calculate squared length of\r\n * @returns {Number} squared length of a\r\n */\n\nfunction vec2_squaredLength(a) {\n var x = a[0],\n y = a[1];\n return x * x + y * y;\n}\n/**\r\n * Negates the components of a vec2\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a vector to negate\r\n * @returns {vec2} out\r\n */\n\nfunction vec2_negate(out, a) {\n out[0] = -a[0];\n out[1] = -a[1];\n return out;\n}\n/**\r\n * Returns the inverse of the components of a vec2\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a vector to invert\r\n * @returns {vec2} out\r\n */\n\nfunction vec2_inverse(out, a) {\n out[0] = 1.0 / a[0];\n out[1] = 1.0 / a[1];\n return out;\n}\n/**\r\n * Normalize a vec2\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a vector to normalize\r\n * @returns {vec2} out\r\n */\n\nfunction vec2_normalize(out, a) {\n var x = a[0],\n y = a[1];\n var len = x * x + y * y;\n\n if (len > 0) {\n //TODO: evaluate use of glm_invsqrt here?\n len = 1 / Math.sqrt(len);\n }\n\n out[0] = a[0] * len;\n out[1] = a[1] * len;\n return out;\n}\n/**\r\n * Calculates the dot product of two vec2\'s\r\n *\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @returns {Number} dot product of a and b\r\n */\n\nfunction vec2_dot(a, b) {\n return a[0] * b[0] + a[1] * b[1];\n}\n/**\r\n * Computes the cross product of two vec2\'s\r\n * Note that the cross product must by definition produce a 3D vector\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @returns {vec3} out\r\n */\n\nfunction vec2_cross(out, a, b) {\n var z = a[0] * b[1] - a[1] * b[0];\n out[0] = out[1] = 0;\n out[2] = z;\n return out;\n}\n/**\r\n * Performs a linear interpolation between two vec2\'s\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the first operand\r\n * @param {ReadonlyVec2} b the second operand\r\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\r\n * @returns {vec2} out\r\n */\n\nfunction vec2_lerp(out, a, b, t) {\n var ax = a[0],\n ay = a[1];\n out[0] = ax + t * (b[0] - ax);\n out[1] = ay + t * (b[1] - ay);\n return out;\n}\n/**\r\n * Generates a random vector with the given scale\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {Number} [scale] Length of the resulting vector. If ommitted, a unit vector will be returned\r\n * @returns {vec2} out\r\n */\n\nfunction vec2_random(out, scale) {\n scale = scale || 1.0;\n var r = glMatrix.RANDOM() * 2.0 * Math.PI;\n out[0] = Math.cos(r) * scale;\n out[1] = Math.sin(r) * scale;\n return out;\n}\n/**\r\n * Transforms the vec2 with a mat2\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the vector to transform\r\n * @param {ReadonlyMat2} m matrix to transform with\r\n * @returns {vec2} out\r\n */\n\nfunction transformMat2(out, a, m) {\n var x = a[0],\n y = a[1];\n out[0] = m[0] * x + m[2] * y;\n out[1] = m[1] * x + m[3] * y;\n return out;\n}\n/**\r\n * Transforms the vec2 with a mat2d\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the vector to transform\r\n * @param {ReadonlyMat2d} m matrix to transform with\r\n * @returns {vec2} out\r\n */\n\nfunction transformMat2d(out, a, m) {\n var x = a[0],\n y = a[1];\n out[0] = m[0] * x + m[2] * y + m[4];\n out[1] = m[1] * x + m[3] * y + m[5];\n return out;\n}\n/**\r\n * Transforms the vec2 with a mat3\r\n * 3rd vector component is implicitly \'1\'\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the vector to transform\r\n * @param {ReadonlyMat3} m matrix to transform with\r\n * @returns {vec2} out\r\n */\n\nfunction transformMat3(out, a, m) {\n var x = a[0],\n y = a[1];\n out[0] = m[0] * x + m[3] * y + m[6];\n out[1] = m[1] * x + m[4] * y + m[7];\n return out;\n}\n/**\r\n * Transforms the vec2 with a mat4\r\n * 3rd vector component is implicitly \'0\'\r\n * 4th vector component is implicitly \'1\'\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @param {ReadonlyVec2} a the vector to transform\r\n * @param {ReadonlyMat4} m matrix to transform with\r\n * @returns {vec2} out\r\n */\n\nfunction vec2_transformMat4(out, a, m) {\n var x = a[0];\n var y = a[1];\n out[0] = m[0] * x + m[4] * y + m[12];\n out[1] = m[1] * x + m[5] * y + m[13];\n return out;\n}\n/**\r\n * Rotate a 2D vector\r\n * @param {vec2} out The receiving vec2\r\n * @param {ReadonlyVec2} a The vec2 point to rotate\r\n * @param {ReadonlyVec2} b The origin of the rotation\r\n * @param {Number} rad The angle of rotation in radians\r\n * @returns {vec2} out\r\n */\n\nfunction vec2_rotate(out, a, b, rad) {\n //Translate point to the origin\n var p0 = a[0] - b[0],\n p1 = a[1] - b[1],\n sinC = Math.sin(rad),\n cosC = Math.cos(rad); //perform rotation and translate to correct position\n\n out[0] = p0 * cosC - p1 * sinC + b[0];\n out[1] = p0 * sinC + p1 * cosC + b[1];\n return out;\n}\n/**\r\n * Get the angle between two 2D vectors\r\n * @param {ReadonlyVec2} a The first operand\r\n * @param {ReadonlyVec2} b The second operand\r\n * @returns {Number} The angle in radians\r\n */\n\nfunction angle(a, b) {\n var x1 = a[0],\n y1 = a[1],\n x2 = b[0],\n y2 = b[1],\n // mag is the product of the magnitudes of a and b\n mag = Math.sqrt(x1 * x1 + y1 * y1) * Math.sqrt(x2 * x2 + y2 * y2),\n // mag &&.. short circuits if mag == 0\n cosine = mag && (x1 * x2 + y1 * y2) / mag; // Math.min(Math.max(cosine, -1), 1) clamps the cosine between -1 and 1\n\n return Math.acos(Math.min(Math.max(cosine, -1), 1));\n}\n/**\r\n * Set the components of a vec2 to zero\r\n *\r\n * @param {vec2} out the receiving vector\r\n * @returns {vec2} out\r\n */\n\nfunction vec2_zero(out) {\n out[0] = 0.0;\n out[1] = 0.0;\n return out;\n}\n/**\r\n * Returns a string representation of a vector\r\n *\r\n * @param {ReadonlyVec2} a vector to represent as a string\r\n * @returns {String} string representation of the vector\r\n */\n\nfunction vec2_str(a) {\n return "vec2(" + a[0] + ", " + a[1] + ")";\n}\n/**\r\n * Returns whether or not the vectors exactly have the same elements in the same position (when compared with ===)\r\n *\r\n * @param {ReadonlyVec2} a The first vector.\r\n * @param {ReadonlyVec2} b The second vector.\r\n * @returns {Boolean} True if the vectors are equal, false otherwise.\r\n */\n\nfunction vec2_exactEquals(a, b) {\n return a[0] === b[0] && a[1] === b[1];\n}\n/**\r\n * Returns whether or not the vectors have approximately the same elements in the same position.\r\n *\r\n * @param {ReadonlyVec2} a The first vector.\r\n * @param {ReadonlyVec2} b The second vector.\r\n * @returns {Boolean} True if the vectors are equal, false otherwise.\r\n */\n\nfunction vec2_equals(a, b) {\n var a0 = a[0],\n a1 = a[1];\n var b0 = b[0],\n b1 = b[1];\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1));\n}\n/**\r\n * Alias for {@link vec2.length}\r\n * @function\r\n */\n\nvar vec2_len = (/* unused pure expression or super */ null && (vec2_length));\n/**\r\n * Alias for {@link vec2.subtract}\r\n * @function\r\n */\n\nvar vec2_sub = vec2_subtract;\n/**\r\n * Alias for {@link vec2.multiply}\r\n * @function\r\n */\n\nvar vec2_mul = (/* unused pure expression or super */ null && (vec2_multiply));\n/**\r\n * Alias for {@link vec2.divide}\r\n * @function\r\n */\n\nvar vec2_div = (/* unused pure expression or super */ null && (vec2_divide));\n/**\r\n * Alias for {@link vec2.distance}\r\n * @function\r\n */\n\nvar vec2_dist = (/* unused pure expression or super */ null && (vec2_distance));\n/**\r\n * Alias for {@link vec2.squaredDistance}\r\n * @function\r\n */\n\nvar vec2_sqrDist = (/* unused pure expression or super */ null && (vec2_squaredDistance));\n/**\r\n * Alias for {@link vec2.squaredLength}\r\n * @function\r\n */\n\nvar vec2_sqrLen = (/* unused pure expression or super */ null && (vec2_squaredLength));\n/**\r\n * Perform some operation over an array of vec2s.\r\n *\r\n * @param {Array} a the array of vectors to iterate over\r\n * @param {Number} stride Number of elements between the start of each vec2. If 0 assumes tightly packed\r\n * @param {Number} offset Number of elements to skip at the beginning of the array\r\n * @param {Number} count Number of vec2s to iterate over. If 0 iterates over entire array\r\n * @param {Function} fn Function to call for each vector in the array\r\n * @param {Object} [arg] additional argument to pass to fn\r\n * @returns {Array} a\r\n * @function\r\n */\n\nvar vec2_forEach = function () {\n var vec = vec2_create();\n return function (a, stride, offset, count, fn, arg) {\n var i, l;\n\n if (!stride) {\n stride = 2;\n }\n\n if (!offset) {\n offset = 0;\n }\n\n if (count) {\n l = Math.min(count * stride + offset, a.length);\n } else {\n l = a.length;\n }\n\n for (i = offset; i < l; i += stride) {\n vec[0] = a[i];\n vec[1] = a[i + 1];\n fn(vec, vec, arg);\n a[i] = vec[0];\n a[i + 1] = vec[1];\n }\n\n return a;\n };\n}();\n;// CONCATENATED MODULE: ./node_modules/gl-matrix/esm/vec3.js\n\n\n/**\r\n * 3 Dimensional Vector\r\n * @module vec3\r\n */\n\n/**\r\n * Creates a new, empty vec3\r\n *\r\n * @returns {vec3} a new 3D vector\r\n */\n\nfunction vec3_create() {\n var out = new ARRAY_TYPE(3);\n\n if (ARRAY_TYPE != Float32Array) {\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n }\n\n return out;\n}\n/**\r\n * Creates a new vec3 initialized with values from an existing vector\r\n *\r\n * @param {ReadonlyVec3} a vector to clone\r\n * @returns {vec3} a new 3D vector\r\n */\n\nfunction vec3_clone(a) {\n var out = new glMatrix.ARRAY_TYPE(3);\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n return out;\n}\n/**\r\n * Calculates the length of a vec3\r\n *\r\n * @param {ReadonlyVec3} a vector to calculate length of\r\n * @returns {Number} length of a\r\n */\n\nfunction vec3_length(a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n return Math.hypot(x, y, z);\n}\n/**\r\n * Creates a new vec3 initialized with the given values\r\n *\r\n * @param {Number} x X component\r\n * @param {Number} y Y component\r\n * @param {Number} z Z component\r\n * @returns {vec3} a new 3D vector\r\n */\n\nfunction vec3_fromValues(x, y, z) {\n var out = new glMatrix.ARRAY_TYPE(3);\n out[0] = x;\n out[1] = y;\n out[2] = z;\n return out;\n}\n/**\r\n * Copy the values from one vec3 to another\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the source vector\r\n * @returns {vec3} out\r\n */\n\nfunction vec3_copy(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n return out;\n}\n/**\r\n * Set the components of a vec3 to the given values\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {Number} x X component\r\n * @param {Number} y Y component\r\n * @param {Number} z Z component\r\n * @returns {vec3} out\r\n */\n\nfunction vec3_set(out, x, y, z) {\n out[0] = x;\n out[1] = y;\n out[2] = z;\n return out;\n}\n/**\r\n * Adds two vec3\'s\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @returns {vec3} out\r\n */\n\nfunction vec3_add(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n out[2] = a[2] + b[2];\n return out;\n}\n/**\r\n * Subtracts vector b from vector a\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @returns {vec3} out\r\n */\n\nfunction vec3_subtract(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n out[2] = a[2] - b[2];\n return out;\n}\n/**\r\n * Multiplies two vec3\'s\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @returns {vec3} out\r\n */\n\nfunction vec3_multiply(out, a, b) {\n out[0] = a[0] * b[0];\n out[1] = a[1] * b[1];\n out[2] = a[2] * b[2];\n return out;\n}\n/**\r\n * Divides two vec3\'s\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @returns {vec3} out\r\n */\n\nfunction vec3_divide(out, a, b) {\n out[0] = a[0] / b[0];\n out[1] = a[1] / b[1];\n out[2] = a[2] / b[2];\n return out;\n}\n/**\r\n * Math.ceil the components of a vec3\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a vector to ceil\r\n * @returns {vec3} out\r\n */\n\nfunction vec3_ceil(out, a) {\n out[0] = Math.ceil(a[0]);\n out[1] = Math.ceil(a[1]);\n out[2] = Math.ceil(a[2]);\n return out;\n}\n/**\r\n * Math.floor the components of a vec3\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a vector to floor\r\n * @returns {vec3} out\r\n */\n\nfunction vec3_floor(out, a) {\n out[0] = Math.floor(a[0]);\n out[1] = Math.floor(a[1]);\n out[2] = Math.floor(a[2]);\n return out;\n}\n/**\r\n * Returns the minimum of two vec3\'s\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @returns {vec3} out\r\n */\n\nfunction vec3_min(out, a, b) {\n out[0] = Math.min(a[0], b[0]);\n out[1] = Math.min(a[1], b[1]);\n out[2] = Math.min(a[2], b[2]);\n return out;\n}\n/**\r\n * Returns the maximum of two vec3\'s\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @returns {vec3} out\r\n */\n\nfunction vec3_max(out, a, b) {\n out[0] = Math.max(a[0], b[0]);\n out[1] = Math.max(a[1], b[1]);\n out[2] = Math.max(a[2], b[2]);\n return out;\n}\n/**\r\n * Math.round the components of a vec3\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a vector to round\r\n * @returns {vec3} out\r\n */\n\nfunction vec3_round(out, a) {\n out[0] = Math.round(a[0]);\n out[1] = Math.round(a[1]);\n out[2] = Math.round(a[2]);\n return out;\n}\n/**\r\n * Scales a vec3 by a scalar number\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the vector to scale\r\n * @param {Number} b amount to scale the vector by\r\n * @returns {vec3} out\r\n */\n\nfunction vec3_scale(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n out[2] = a[2] * b;\n return out;\n}\n/**\r\n * Adds two vec3\'s after scaling the second operand by a scalar value\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @param {Number} scale the amount to scale b by before adding\r\n * @returns {vec3} out\r\n */\n\nfunction vec3_scaleAndAdd(out, a, b, scale) {\n out[0] = a[0] + b[0] * scale;\n out[1] = a[1] + b[1] * scale;\n out[2] = a[2] + b[2] * scale;\n return out;\n}\n/**\r\n * Calculates the euclidian distance between two vec3\'s\r\n *\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @returns {Number} distance between a and b\r\n */\n\nfunction vec3_distance(a, b) {\n var x = b[0] - a[0];\n var y = b[1] - a[1];\n var z = b[2] - a[2];\n return Math.hypot(x, y, z);\n}\n/**\r\n * Calculates the squared euclidian distance between two vec3\'s\r\n *\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @returns {Number} squared distance between a and b\r\n */\n\nfunction vec3_squaredDistance(a, b) {\n var x = b[0] - a[0];\n var y = b[1] - a[1];\n var z = b[2] - a[2];\n return x * x + y * y + z * z;\n}\n/**\r\n * Calculates the squared length of a vec3\r\n *\r\n * @param {ReadonlyVec3} a vector to calculate squared length of\r\n * @returns {Number} squared length of a\r\n */\n\nfunction vec3_squaredLength(a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n return x * x + y * y + z * z;\n}\n/**\r\n * Negates the components of a vec3\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a vector to negate\r\n * @returns {vec3} out\r\n */\n\nfunction vec3_negate(out, a) {\n out[0] = -a[0];\n out[1] = -a[1];\n out[2] = -a[2];\n return out;\n}\n/**\r\n * Returns the inverse of the components of a vec3\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a vector to invert\r\n * @returns {vec3} out\r\n */\n\nfunction vec3_inverse(out, a) {\n out[0] = 1.0 / a[0];\n out[1] = 1.0 / a[1];\n out[2] = 1.0 / a[2];\n return out;\n}\n/**\r\n * Normalize a vec3\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a vector to normalize\r\n * @returns {vec3} out\r\n */\n\nfunction vec3_normalize(out, a) {\n var x = a[0];\n var y = a[1];\n var z = a[2];\n var len = x * x + y * y + z * z;\n\n if (len > 0) {\n //TODO: evaluate use of glm_invsqrt here?\n len = 1 / Math.sqrt(len);\n }\n\n out[0] = a[0] * len;\n out[1] = a[1] * len;\n out[2] = a[2] * len;\n return out;\n}\n/**\r\n * Calculates the dot product of two vec3\'s\r\n *\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @returns {Number} dot product of a and b\r\n */\n\nfunction vec3_dot(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n}\n/**\r\n * Computes the cross product of two vec3\'s\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @returns {vec3} out\r\n */\n\nfunction vec3_cross(out, a, b) {\n var ax = a[0],\n ay = a[1],\n az = a[2];\n var bx = b[0],\n by = b[1],\n bz = b[2];\n out[0] = ay * bz - az * by;\n out[1] = az * bx - ax * bz;\n out[2] = ax * by - ay * bx;\n return out;\n}\n/**\r\n * Performs a linear interpolation between two vec3\'s\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\r\n * @returns {vec3} out\r\n */\n\nfunction vec3_lerp(out, a, b, t) {\n var ax = a[0];\n var ay = a[1];\n var az = a[2];\n out[0] = ax + t * (b[0] - ax);\n out[1] = ay + t * (b[1] - ay);\n out[2] = az + t * (b[2] - az);\n return out;\n}\n/**\r\n * Performs a hermite interpolation with two control points\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @param {ReadonlyVec3} c the third operand\r\n * @param {ReadonlyVec3} d the fourth operand\r\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\r\n * @returns {vec3} out\r\n */\n\nfunction hermite(out, a, b, c, d, t) {\n var factorTimes2 = t * t;\n var factor1 = factorTimes2 * (2 * t - 3) + 1;\n var factor2 = factorTimes2 * (t - 2) + t;\n var factor3 = factorTimes2 * (t - 1);\n var factor4 = factorTimes2 * (3 - 2 * t);\n out[0] = a[0] * factor1 + b[0] * factor2 + c[0] * factor3 + d[0] * factor4;\n out[1] = a[1] * factor1 + b[1] * factor2 + c[1] * factor3 + d[1] * factor4;\n out[2] = a[2] * factor1 + b[2] * factor2 + c[2] * factor3 + d[2] * factor4;\n return out;\n}\n/**\r\n * Performs a bezier interpolation with two control points\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the first operand\r\n * @param {ReadonlyVec3} b the second operand\r\n * @param {ReadonlyVec3} c the third operand\r\n * @param {ReadonlyVec3} d the fourth operand\r\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\r\n * @returns {vec3} out\r\n */\n\nfunction bezier(out, a, b, c, d, t) {\n var inverseFactor = 1 - t;\n var inverseFactorTimesTwo = inverseFactor * inverseFactor;\n var factorTimes2 = t * t;\n var factor1 = inverseFactorTimesTwo * inverseFactor;\n var factor2 = 3 * t * inverseFactorTimesTwo;\n var factor3 = 3 * factorTimes2 * inverseFactor;\n var factor4 = factorTimes2 * t;\n out[0] = a[0] * factor1 + b[0] * factor2 + c[0] * factor3 + d[0] * factor4;\n out[1] = a[1] * factor1 + b[1] * factor2 + c[1] * factor3 + d[1] * factor4;\n out[2] = a[2] * factor1 + b[2] * factor2 + c[2] * factor3 + d[2] * factor4;\n return out;\n}\n/**\r\n * Generates a random vector with the given scale\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {Number} [scale] Length of the resulting vector. If ommitted, a unit vector will be returned\r\n * @returns {vec3} out\r\n */\n\nfunction vec3_random(out, scale) {\n scale = scale || 1.0;\n var r = glMatrix.RANDOM() * 2.0 * Math.PI;\n var z = glMatrix.RANDOM() * 2.0 - 1.0;\n var zScale = Math.sqrt(1.0 - z * z) * scale;\n out[0] = Math.cos(r) * zScale;\n out[1] = Math.sin(r) * zScale;\n out[2] = z * scale;\n return out;\n}\n/**\r\n * Transforms the vec3 with a mat4.\r\n * 4th vector component is implicitly \'1\'\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the vector to transform\r\n * @param {ReadonlyMat4} m matrix to transform with\r\n * @returns {vec3} out\r\n */\n\nfunction vec3_transformMat4(out, a, m) {\n var x = a[0],\n y = a[1],\n z = a[2];\n var w = m[3] * x + m[7] * y + m[11] * z + m[15];\n w = w || 1.0;\n out[0] = (m[0] * x + m[4] * y + m[8] * z + m[12]) / w;\n out[1] = (m[1] * x + m[5] * y + m[9] * z + m[13]) / w;\n out[2] = (m[2] * x + m[6] * y + m[10] * z + m[14]) / w;\n return out;\n}\n/**\r\n * Transforms the vec3 with a mat3.\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the vector to transform\r\n * @param {ReadonlyMat3} m the 3x3 matrix to transform with\r\n * @returns {vec3} out\r\n */\n\nfunction vec3_transformMat3(out, a, m) {\n var x = a[0],\n y = a[1],\n z = a[2];\n out[0] = x * m[0] + y * m[3] + z * m[6];\n out[1] = x * m[1] + y * m[4] + z * m[7];\n out[2] = x * m[2] + y * m[5] + z * m[8];\n return out;\n}\n/**\r\n * Transforms the vec3 with a quat\r\n * Can also be used for dual quaternions. (Multiply it with the real part)\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @param {ReadonlyVec3} a the vector to transform\r\n * @param {ReadonlyQuat} q quaternion to transform with\r\n * @returns {vec3} out\r\n */\n\nfunction vec3_transformQuat(out, a, q) {\n // benchmarks: https://jsperf.com/quaternion-transform-vec3-implementations-fixed\n var qx = q[0],\n qy = q[1],\n qz = q[2],\n qw = q[3];\n var x = a[0],\n y = a[1],\n z = a[2]; // var qvec = [qx, qy, qz];\n // var uv = vec3.cross([], qvec, a);\n\n var uvx = qy * z - qz * y,\n uvy = qz * x - qx * z,\n uvz = qx * y - qy * x; // var uuv = vec3.cross([], qvec, uv);\n\n var uuvx = qy * uvz - qz * uvy,\n uuvy = qz * uvx - qx * uvz,\n uuvz = qx * uvy - qy * uvx; // vec3.scale(uv, uv, 2 * w);\n\n var w2 = qw * 2;\n uvx *= w2;\n uvy *= w2;\n uvz *= w2; // vec3.scale(uuv, uuv, 2);\n\n uuvx *= 2;\n uuvy *= 2;\n uuvz *= 2; // return vec3.add(out, a, vec3.add(out, uv, uuv));\n\n out[0] = x + uvx + uuvx;\n out[1] = y + uvy + uuvy;\n out[2] = z + uvz + uuvz;\n return out;\n}\n/**\r\n * Rotate a 3D vector around the x-axis\r\n * @param {vec3} out The receiving vec3\r\n * @param {ReadonlyVec3} a The vec3 point to rotate\r\n * @param {ReadonlyVec3} b The origin of the rotation\r\n * @param {Number} rad The angle of rotation in radians\r\n * @returns {vec3} out\r\n */\n\nfunction vec3_rotateX(out, a, b, rad) {\n var p = [],\n r = []; //Translate point to the origin\n\n p[0] = a[0] - b[0];\n p[1] = a[1] - b[1];\n p[2] = a[2] - b[2]; //perform rotation\n\n r[0] = p[0];\n r[1] = p[1] * Math.cos(rad) - p[2] * Math.sin(rad);\n r[2] = p[1] * Math.sin(rad) + p[2] * Math.cos(rad); //translate to correct position\n\n out[0] = r[0] + b[0];\n out[1] = r[1] + b[1];\n out[2] = r[2] + b[2];\n return out;\n}\n/**\r\n * Rotate a 3D vector around the y-axis\r\n * @param {vec3} out The receiving vec3\r\n * @param {ReadonlyVec3} a The vec3 point to rotate\r\n * @param {ReadonlyVec3} b The origin of the rotation\r\n * @param {Number} rad The angle of rotation in radians\r\n * @returns {vec3} out\r\n */\n\nfunction vec3_rotateY(out, a, b, rad) {\n var p = [],\n r = []; //Translate point to the origin\n\n p[0] = a[0] - b[0];\n p[1] = a[1] - b[1];\n p[2] = a[2] - b[2]; //perform rotation\n\n r[0] = p[2] * Math.sin(rad) + p[0] * Math.cos(rad);\n r[1] = p[1];\n r[2] = p[2] * Math.cos(rad) - p[0] * Math.sin(rad); //translate to correct position\n\n out[0] = r[0] + b[0];\n out[1] = r[1] + b[1];\n out[2] = r[2] + b[2];\n return out;\n}\n/**\r\n * Rotate a 3D vector around the z-axis\r\n * @param {vec3} out The receiving vec3\r\n * @param {ReadonlyVec3} a The vec3 point to rotate\r\n * @param {ReadonlyVec3} b The origin of the rotation\r\n * @param {Number} rad The angle of rotation in radians\r\n * @returns {vec3} out\r\n */\n\nfunction vec3_rotateZ(out, a, b, rad) {\n var p = [],\n r = []; //Translate point to the origin\n\n p[0] = a[0] - b[0];\n p[1] = a[1] - b[1];\n p[2] = a[2] - b[2]; //perform rotation\n\n r[0] = p[0] * Math.cos(rad) - p[1] * Math.sin(rad);\n r[1] = p[0] * Math.sin(rad) + p[1] * Math.cos(rad);\n r[2] = p[2]; //translate to correct position\n\n out[0] = r[0] + b[0];\n out[1] = r[1] + b[1];\n out[2] = r[2] + b[2];\n return out;\n}\n/**\r\n * Get the angle between two 3D vectors\r\n * @param {ReadonlyVec3} a The first operand\r\n * @param {ReadonlyVec3} b The second operand\r\n * @returns {Number} The angle in radians\r\n */\n\nfunction vec3_angle(a, b) {\n var ax = a[0],\n ay = a[1],\n az = a[2],\n bx = b[0],\n by = b[1],\n bz = b[2],\n mag1 = Math.sqrt(ax * ax + ay * ay + az * az),\n mag2 = Math.sqrt(bx * bx + by * by + bz * bz),\n mag = mag1 * mag2,\n cosine = mag && vec3_dot(a, b) / mag;\n return Math.acos(Math.min(Math.max(cosine, -1), 1));\n}\n/**\r\n * Set the components of a vec3 to zero\r\n *\r\n * @param {vec3} out the receiving vector\r\n * @returns {vec3} out\r\n */\n\nfunction vec3_zero(out) {\n out[0] = 0.0;\n out[1] = 0.0;\n out[2] = 0.0;\n return out;\n}\n/**\r\n * Returns a string representation of a vector\r\n *\r\n * @param {ReadonlyVec3} a vector to represent as a string\r\n * @returns {String} string representation of the vector\r\n */\n\nfunction vec3_str(a) {\n return "vec3(" + a[0] + ", " + a[1] + ", " + a[2] + ")";\n}\n/**\r\n * Returns whether or not the vectors have exactly the same elements in the same position (when compared with ===)\r\n *\r\n * @param {ReadonlyVec3} a The first vector.\r\n * @param {ReadonlyVec3} b The second vector.\r\n * @returns {Boolean} True if the vectors are equal, false otherwise.\r\n */\n\nfunction vec3_exactEquals(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2];\n}\n/**\r\n * Returns whether or not the vectors have approximately the same elements in the same position.\r\n *\r\n * @param {ReadonlyVec3} a The first vector.\r\n * @param {ReadonlyVec3} b The second vector.\r\n * @returns {Boolean} True if the vectors are equal, false otherwise.\r\n */\n\nfunction vec3_equals(a, b) {\n var a0 = a[0],\n a1 = a[1],\n a2 = a[2];\n var b0 = b[0],\n b1 = b[1],\n b2 = b[2];\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2));\n}\n/**\r\n * Alias for {@link vec3.subtract}\r\n * @function\r\n */\n\nvar vec3_sub = (/* unused pure expression or super */ null && (vec3_subtract));\n/**\r\n * Alias for {@link vec3.multiply}\r\n * @function\r\n */\n\nvar vec3_mul = vec3_multiply;\n/**\r\n * Alias for {@link vec3.divide}\r\n * @function\r\n */\n\nvar vec3_div = (/* unused pure expression or super */ null && (vec3_divide));\n/**\r\n * Alias for {@link vec3.distance}\r\n * @function\r\n */\n\nvar vec3_dist = (/* unused pure expression or super */ null && (vec3_distance));\n/**\r\n * Alias for {@link vec3.squaredDistance}\r\n * @function\r\n */\n\nvar vec3_sqrDist = (/* unused pure expression or super */ null && (vec3_squaredDistance));\n/**\r\n * Alias for {@link vec3.length}\r\n * @function\r\n */\n\nvar vec3_len = (/* unused pure expression or super */ null && (vec3_length));\n/**\r\n * Alias for {@link vec3.squaredLength}\r\n * @function\r\n */\n\nvar vec3_sqrLen = (/* unused pure expression or super */ null && (vec3_squaredLength));\n/**\r\n * Perform some operation over an array of vec3s.\r\n *\r\n * @param {Array} a the array of vectors to iterate over\r\n * @param {Number} stride Number of elements between the start of each vec3. If 0 assumes tightly packed\r\n * @param {Number} offset Number of elements to skip at the beginning of the array\r\n * @param {Number} count Number of vec3s to iterate over. If 0 iterates over entire array\r\n * @param {Function} fn Function to call for each vector in the array\r\n * @param {Object} [arg] additional argument to pass to fn\r\n * @returns {Array} a\r\n * @function\r\n */\n\nvar vec3_forEach = function () {\n var vec = vec3_create();\n return function (a, stride, offset, count, fn, arg) {\n var i, l;\n\n if (!stride) {\n stride = 3;\n }\n\n if (!offset) {\n offset = 0;\n }\n\n if (count) {\n l = Math.min(count * stride + offset, a.length);\n } else {\n l = a.length;\n }\n\n for (i = offset; i < l; i += stride) {\n vec[0] = a[i];\n vec[1] = a[i + 1];\n vec[2] = a[i + 2];\n fn(vec, vec, arg);\n a[i] = vec[0];\n a[i + 1] = vec[1];\n a[i + 2] = vec[2];\n }\n\n return a;\n };\n}();\n;// CONCATENATED MODULE: ./node_modules/@math.gl/web-mercator/dist/esm/assert.js\nfunction assert_assert(condition, message) {\n if (!condition) {\n throw new Error(message || \'@math.gl/web-mercator: assertion failed.\');\n }\n}\n;// CONCATENATED MODULE: ./node_modules/@math.gl/web-mercator/dist/esm/web-mercator-utils.js\n\n\n\n\n\n\nvar PI = Math.PI;\nvar PI_4 = PI / 4;\nvar DEGREES_TO_RADIANS = PI / 180;\nvar RADIANS_TO_DEGREES = 180 / PI;\nvar TILE_SIZE = 512;\nvar EARTH_CIRCUMFERENCE = 40.03e6;\nvar DEFAULT_ALTITUDE = 1.5;\nfunction zoomToScale(zoom) {\n return Math.pow(2, zoom);\n}\nfunction scaleToZoom(scale) {\n return log2(scale);\n}\nfunction lngLatToWorld(_ref) {\n var _ref2 = slicedToArray_slicedToArray(_ref, 2),\n lng = _ref2[0],\n lat = _ref2[1];\n\n assert_assert(Number.isFinite(lng));\n assert_assert(Number.isFinite(lat) && lat >= -90 && lat <= 90, \'invalid latitude\');\n var lambda2 = lng * DEGREES_TO_RADIANS;\n var phi2 = lat * DEGREES_TO_RADIANS;\n var x = TILE_SIZE * (lambda2 + PI) / (2 * PI);\n var y = TILE_SIZE * (PI + Math.log(Math.tan(PI_4 + phi2 * 0.5))) / (2 * PI);\n return [x, y];\n}\nfunction worldToLngLat(_ref3) {\n var _ref4 = slicedToArray_slicedToArray(_ref3, 2),\n x = _ref4[0],\n y = _ref4[1];\n\n var lambda2 = x / TILE_SIZE * (2 * PI) - PI;\n var phi2 = 2 * (Math.atan(Math.exp(y / TILE_SIZE * (2 * PI) - PI)) - PI_4);\n return [lambda2 * RADIANS_TO_DEGREES, phi2 * RADIANS_TO_DEGREES];\n}\nfunction getMeterZoom(_ref5) {\n var latitude = _ref5.latitude;\n assert(Number.isFinite(latitude));\n var latCosine = Math.cos(latitude * DEGREES_TO_RADIANS);\n return scaleToZoom(EARTH_CIRCUMFERENCE * latCosine) - 9;\n}\nfunction getDistanceScales(_ref6) {\n var latitude = _ref6.latitude,\n longitude = _ref6.longitude,\n _ref6$highPrecision = _ref6.highPrecision,\n highPrecision = _ref6$highPrecision === void 0 ? false : _ref6$highPrecision;\n assert_assert(Number.isFinite(latitude) && Number.isFinite(longitude));\n var result = {};\n var worldSize = TILE_SIZE;\n var latCosine = Math.cos(latitude * DEGREES_TO_RADIANS);\n var unitsPerDegreeX = worldSize / 360;\n var unitsPerDegreeY = unitsPerDegreeX / latCosine;\n var altUnitsPerMeter = worldSize / EARTH_CIRCUMFERENCE / latCosine;\n result.unitsPerMeter = [altUnitsPerMeter, altUnitsPerMeter, altUnitsPerMeter];\n result.metersPerUnit = [1 / altUnitsPerMeter, 1 / altUnitsPerMeter, 1 / altUnitsPerMeter];\n result.unitsPerDegree = [unitsPerDegreeX, unitsPerDegreeY, altUnitsPerMeter];\n result.degreesPerUnit = [1 / unitsPerDegreeX, 1 / unitsPerDegreeY, 1 / altUnitsPerMeter];\n\n if (highPrecision) {\n var latCosine2 = DEGREES_TO_RADIANS * Math.tan(latitude * DEGREES_TO_RADIANS) / latCosine;\n var unitsPerDegreeY2 = unitsPerDegreeX * latCosine2 / 2;\n var altUnitsPerDegree2 = worldSize / EARTH_CIRCUMFERENCE * latCosine2;\n var altUnitsPerMeter2 = altUnitsPerDegree2 / unitsPerDegreeY * altUnitsPerMeter;\n result.unitsPerDegree2 = [0, unitsPerDegreeY2, altUnitsPerDegree2];\n result.unitsPerMeter2 = [altUnitsPerMeter2, 0, altUnitsPerMeter2];\n }\n\n return result;\n}\nfunction addMetersToLngLat(lngLatZ, xyz) {\n var _lngLatZ = _slicedToArray(lngLatZ, 3),\n longitude = _lngLatZ[0],\n latitude = _lngLatZ[1],\n z0 = _lngLatZ[2];\n\n var _xyz = _slicedToArray(xyz, 3),\n x = _xyz[0],\n y = _xyz[1],\n z = _xyz[2];\n\n var _getDistanceScales = getDistanceScales({\n longitude: longitude,\n latitude: latitude,\n highPrecision: true\n }),\n unitsPerMeter = _getDistanceScales.unitsPerMeter,\n unitsPerMeter2 = _getDistanceScales.unitsPerMeter2;\n\n var worldspace = lngLatToWorld(lngLatZ);\n worldspace[0] += x * (unitsPerMeter[0] + unitsPerMeter2[0] * y);\n worldspace[1] += y * (unitsPerMeter[1] + unitsPerMeter2[1] * y);\n var newLngLat = worldToLngLat(worldspace);\n var newZ = (z0 || 0) + (z || 0);\n return Number.isFinite(z0) || Number.isFinite(z) ? [newLngLat[0], newLngLat[1], newZ] : newLngLat;\n}\nfunction getViewMatrix(_ref7) {\n var height = _ref7.height,\n pitch = _ref7.pitch,\n bearing = _ref7.bearing,\n altitude = _ref7.altitude,\n scale = _ref7.scale,\n _ref7$center = _ref7.center,\n center = _ref7$center === void 0 ? null : _ref7$center;\n var vm = createMat4();\n translate(vm, vm, [0, 0, -altitude]);\n rotateX(vm, vm, -pitch * DEGREES_TO_RADIANS);\n rotateZ(vm, vm, bearing * DEGREES_TO_RADIANS);\n scale /= height;\n mat4_scale(vm, vm, [scale, scale, scale]);\n\n if (center) {\n translate(vm, vm, vec3_negate([], center));\n }\n\n return vm;\n}\nfunction getProjectionParameters(_ref8) {\n var width = _ref8.width,\n height = _ref8.height,\n _ref8$fovy = _ref8.fovy,\n fovy = _ref8$fovy === void 0 ? altitudeToFovy(DEFAULT_ALTITUDE) : _ref8$fovy,\n altitude = _ref8.altitude,\n _ref8$pitch = _ref8.pitch,\n pitch = _ref8$pitch === void 0 ? 0 : _ref8$pitch,\n _ref8$nearZMultiplier = _ref8.nearZMultiplier,\n nearZMultiplier = _ref8$nearZMultiplier === void 0 ? 1 : _ref8$nearZMultiplier,\n _ref8$farZMultiplier = _ref8.farZMultiplier,\n farZMultiplier = _ref8$farZMultiplier === void 0 ? 1 : _ref8$farZMultiplier;\n\n if (altitude !== undefined) {\n fovy = altitudeToFovy(altitude);\n }\n\n var halfFov = 0.5 * fovy * DEGREES_TO_RADIANS;\n var focalDistance = fovyToAltitude(fovy);\n var pitchRadians = pitch * DEGREES_TO_RADIANS;\n var topHalfSurfaceDistance = Math.sin(halfFov) * focalDistance / Math.sin(Math.min(Math.max(Math.PI / 2 - pitchRadians - halfFov, 0.01), Math.PI - 0.01));\n var farZ = Math.sin(pitchRadians) * topHalfSurfaceDistance + focalDistance;\n return {\n fov: 2 * halfFov,\n aspect: width / height,\n focalDistance: focalDistance,\n near: nearZMultiplier,\n far: farZ * farZMultiplier\n };\n}\nfunction getProjectionMatrix(_ref9) {\n var width = _ref9.width,\n height = _ref9.height,\n pitch = _ref9.pitch,\n altitude = _ref9.altitude,\n fovy = _ref9.fovy,\n nearZMultiplier = _ref9.nearZMultiplier,\n farZMultiplier = _ref9.farZMultiplier;\n\n var _getProjectionParamet = getProjectionParameters({\n width: width,\n height: height,\n altitude: altitude,\n fovy: fovy,\n pitch: pitch,\n nearZMultiplier: nearZMultiplier,\n farZMultiplier: farZMultiplier\n }),\n fov = _getProjectionParamet.fov,\n aspect = _getProjectionParamet.aspect,\n near = _getProjectionParamet.near,\n far = _getProjectionParamet.far;\n\n var projectionMatrix = perspective([], fov, aspect, near, far);\n return projectionMatrix;\n}\nfunction altitudeToFovy(altitude) {\n return 2 * Math.atan(0.5 / altitude) * RADIANS_TO_DEGREES;\n}\nfunction fovyToAltitude(fovy) {\n return 0.5 / Math.tan(0.5 * fovy * DEGREES_TO_RADIANS);\n}\nfunction worldToPixels(xyz, pixelProjectionMatrix) {\n var _xyz2 = slicedToArray_slicedToArray(xyz, 3),\n x = _xyz2[0],\n y = _xyz2[1],\n _xyz2$ = _xyz2[2],\n z = _xyz2$ === void 0 ? 0 : _xyz2$;\n\n assert_assert(Number.isFinite(x) && Number.isFinite(y) && Number.isFinite(z));\n return transformVector(pixelProjectionMatrix, [x, y, z, 1]);\n}\nfunction pixelsToWorld(xyz, pixelUnprojectionMatrix) {\n var targetZ = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n\n var _xyz3 = slicedToArray_slicedToArray(xyz, 3),\n x = _xyz3[0],\n y = _xyz3[1],\n z = _xyz3[2];\n\n assert_assert(Number.isFinite(x) && Number.isFinite(y), \'invalid pixel coordinate\');\n\n if (Number.isFinite(z)) {\n var coord = transformVector(pixelUnprojectionMatrix, [x, y, z, 1]);\n return coord;\n }\n\n var coord0 = transformVector(pixelUnprojectionMatrix, [x, y, 0, 1]);\n var coord1 = transformVector(pixelUnprojectionMatrix, [x, y, 1, 1]);\n var z0 = coord0[2];\n var z1 = coord1[2];\n var t = z0 === z1 ? 0 : ((targetZ || 0) - z0) / (z1 - z0);\n return vec2_lerp([], coord0, coord1, t);\n}\n;// CONCATENATED MODULE: ./node_modules/@math.gl/web-mercator/dist/esm/fit-bounds.js\n\n\n\n\nfunction fit_bounds_fitBounds(_ref) {\n var width = _ref.width,\n height = _ref.height,\n bounds = _ref.bounds,\n _ref$minExtent = _ref.minExtent,\n minExtent = _ref$minExtent === void 0 ? 0 : _ref$minExtent,\n _ref$maxZoom = _ref.maxZoom,\n maxZoom = _ref$maxZoom === void 0 ? 24 : _ref$maxZoom,\n _ref$padding = _ref.padding,\n padding = _ref$padding === void 0 ? 0 : _ref$padding,\n _ref$offset = _ref.offset,\n offset = _ref$offset === void 0 ? [0, 0] : _ref$offset;\n\n var _bounds = slicedToArray_slicedToArray(bounds, 2),\n _bounds$ = slicedToArray_slicedToArray(_bounds[0], 2),\n west = _bounds$[0],\n south = _bounds$[1],\n _bounds$2 = slicedToArray_slicedToArray(_bounds[1], 2),\n east = _bounds$2[0],\n north = _bounds$2[1];\n\n if (Number.isFinite(padding)) {\n var p = padding;\n padding = {\n top: p,\n bottom: p,\n left: p,\n right: p\n };\n } else {\n assert_assert(Number.isFinite(padding.top) && Number.isFinite(padding.bottom) && Number.isFinite(padding.left) && Number.isFinite(padding.right));\n }\n\n var viewport = new WebMercatorViewport({\n width: width,\n height: height,\n longitude: 0,\n latitude: 0,\n zoom: 0\n });\n var nw = viewport.project([west, north]);\n var se = viewport.project([east, south]);\n var size = [Math.max(Math.abs(se[0] - nw[0]), minExtent), Math.max(Math.abs(se[1] - nw[1]), minExtent)];\n var targetSize = [width - padding.left - padding.right - Math.abs(offset[0]) * 2, height - padding.top - padding.bottom - Math.abs(offset[1]) * 2];\n assert_assert(targetSize[0] > 0 && targetSize[1] > 0);\n var scaleX = targetSize[0] / size[0];\n var scaleY = targetSize[1] / size[1];\n var offsetX = (padding.right - padding.left) / 2 / scaleX;\n var offsetY = (padding.bottom - padding.top) / 2 / scaleY;\n var center = [(se[0] + nw[0]) / 2 + offsetX, (se[1] + nw[1]) / 2 + offsetY];\n var centerLngLat = viewport.unproject(center);\n var zoom = Math.min(maxZoom, viewport.zoom + log2(Math.abs(Math.min(scaleX, scaleY))));\n assert_assert(Number.isFinite(zoom));\n return {\n longitude: centerLngLat[0],\n latitude: centerLngLat[1],\n zoom: zoom\n };\n}\n;// CONCATENATED MODULE: ./node_modules/@math.gl/web-mercator/dist/esm/get-bounds.js\n\n\n\nvar get_bounds_DEGREES_TO_RADIANS = Math.PI / 180;\nfunction getBounds(viewport) {\n var z = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var width = viewport.width,\n height = viewport.height,\n unproject = viewport.unproject;\n var unprojectOps = {\n targetZ: z\n };\n var bottomLeft = unproject([0, height], unprojectOps);\n var bottomRight = unproject([width, height], unprojectOps);\n var topLeft;\n var topRight;\n var halfFov = viewport.fovy ? 0.5 * viewport.fovy * get_bounds_DEGREES_TO_RADIANS : Math.atan(0.5 / viewport.altitude);\n var angleToGround = (90 - viewport.pitch) * get_bounds_DEGREES_TO_RADIANS;\n\n if (halfFov > angleToGround - 0.01) {\n topLeft = unprojectOnFarPlane(viewport, 0, z);\n topRight = unprojectOnFarPlane(viewport, width, z);\n } else {\n topLeft = unproject([0, 0], unprojectOps);\n topRight = unproject([width, 0], unprojectOps);\n }\n\n return [bottomLeft, bottomRight, topRight, topLeft];\n}\n\nfunction unprojectOnFarPlane(viewport, x, targetZ) {\n var pixelUnprojectionMatrix = viewport.pixelUnprojectionMatrix;\n var coord0 = transformVector(pixelUnprojectionMatrix, [x, 0, 1, 1]);\n var coord1 = transformVector(pixelUnprojectionMatrix, [x, viewport.height, 1, 1]);\n var z = targetZ * viewport.distanceScales.unitsPerMeter[2];\n var t = (z - coord0[2]) / (coord1[2] - coord0[2]);\n var coord = vec2_lerp([], coord0, coord1, t);\n var result = worldToLngLat(coord);\n result[2] = targetZ;\n return result;\n}\n;// CONCATENATED MODULE: ./node_modules/@math.gl/web-mercator/dist/esm/web-mercator-viewport.js\n\n\n\n\n\n\n\n\n\n\n\n\nvar WebMercatorViewport = /*#__PURE__*/function () {\n function WebMercatorViewport() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {\n width: 1,\n height: 1\n },\n width = _ref.width,\n height = _ref.height,\n _ref$latitude = _ref.latitude,\n latitude = _ref$latitude === void 0 ? 0 : _ref$latitude,\n _ref$longitude = _ref.longitude,\n longitude = _ref$longitude === void 0 ? 0 : _ref$longitude,\n _ref$zoom = _ref.zoom,\n zoom = _ref$zoom === void 0 ? 0 : _ref$zoom,\n _ref$pitch = _ref.pitch,\n pitch = _ref$pitch === void 0 ? 0 : _ref$pitch,\n _ref$bearing = _ref.bearing,\n bearing = _ref$bearing === void 0 ? 0 : _ref$bearing,\n _ref$altitude = _ref.altitude,\n altitude = _ref$altitude === void 0 ? null : _ref$altitude,\n _ref$fovy = _ref.fovy,\n fovy = _ref$fovy === void 0 ? null : _ref$fovy,\n _ref$position = _ref.position,\n position = _ref$position === void 0 ? null : _ref$position,\n _ref$nearZMultiplier = _ref.nearZMultiplier,\n nearZMultiplier = _ref$nearZMultiplier === void 0 ? 0.02 : _ref$nearZMultiplier,\n _ref$farZMultiplier = _ref.farZMultiplier,\n farZMultiplier = _ref$farZMultiplier === void 0 ? 1.01 : _ref$farZMultiplier;\n\n _classCallCheck(this, WebMercatorViewport);\n\n width = width || 1;\n height = height || 1;\n\n if (fovy === null && altitude === null) {\n altitude = DEFAULT_ALTITUDE;\n fovy = altitudeToFovy(altitude);\n } else if (fovy === null) {\n fovy = altitudeToFovy(altitude);\n } else if (altitude === null) {\n altitude = fovyToAltitude(fovy);\n }\n\n var scale = zoomToScale(zoom);\n altitude = Math.max(0.75, altitude);\n var distanceScales = getDistanceScales({\n longitude: longitude,\n latitude: latitude\n });\n var center = lngLatToWorld([longitude, latitude]);\n center[2] = 0;\n\n if (position) {\n vec3_add(center, center, vec3_mul([], position, distanceScales.unitsPerMeter));\n }\n\n this.projectionMatrix = getProjectionMatrix({\n width: width,\n height: height,\n pitch: pitch,\n fovy: fovy,\n nearZMultiplier: nearZMultiplier,\n farZMultiplier: farZMultiplier\n });\n this.viewMatrix = getViewMatrix({\n height: height,\n scale: scale,\n center: center,\n pitch: pitch,\n bearing: bearing,\n altitude: altitude\n });\n this.width = width;\n this.height = height;\n this.scale = scale;\n this.latitude = latitude;\n this.longitude = longitude;\n this.zoom = zoom;\n this.pitch = pitch;\n this.bearing = bearing;\n this.altitude = altitude;\n this.fovy = fovy;\n this.center = center;\n this.meterOffset = position || [0, 0, 0];\n this.distanceScales = distanceScales;\n\n this._initMatrices();\n\n this.equals = this.equals.bind(this);\n this.project = this.project.bind(this);\n this.unproject = this.unproject.bind(this);\n this.projectPosition = this.projectPosition.bind(this);\n this.unprojectPosition = this.unprojectPosition.bind(this);\n Object.freeze(this);\n }\n\n _createClass(WebMercatorViewport, [{\n key: "_initMatrices",\n value: function _initMatrices() {\n var width = this.width,\n height = this.height,\n projectionMatrix = this.projectionMatrix,\n viewMatrix = this.viewMatrix;\n var vpm = createMat4();\n mat4_multiply(vpm, vpm, projectionMatrix);\n mat4_multiply(vpm, vpm, viewMatrix);\n this.viewProjectionMatrix = vpm;\n var m = createMat4();\n mat4_scale(m, m, [width / 2, -height / 2, 1]);\n translate(m, m, [1, -1, 0]);\n mat4_multiply(m, m, vpm);\n var mInverse = invert(createMat4(), m);\n\n if (!mInverse) {\n throw new Error(\'Pixel project matrix not invertible\');\n }\n\n this.pixelProjectionMatrix = m;\n this.pixelUnprojectionMatrix = mInverse;\n }\n }, {\n key: "equals",\n value: function equals(viewport) {\n if (!(viewport instanceof WebMercatorViewport)) {\n return false;\n }\n\n return viewport.width === this.width && viewport.height === this.height && mat4_equals(viewport.projectionMatrix, this.projectionMatrix) && mat4_equals(viewport.viewMatrix, this.viewMatrix);\n }\n }, {\n key: "project",\n value: function project(xyz) {\n var _ref2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref2$topLeft = _ref2.topLeft,\n topLeft = _ref2$topLeft === void 0 ? true : _ref2$topLeft;\n\n var worldPosition = this.projectPosition(xyz);\n var coord = worldToPixels(worldPosition, this.pixelProjectionMatrix);\n\n var _coord = slicedToArray_slicedToArray(coord, 2),\n x = _coord[0],\n y = _coord[1];\n\n var y2 = topLeft ? y : this.height - y;\n return xyz.length === 2 ? [x, y2] : [x, y2, coord[2]];\n }\n }, {\n key: "unproject",\n value: function unproject(xyz) {\n var _ref3 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref3$topLeft = _ref3.topLeft,\n topLeft = _ref3$topLeft === void 0 ? true : _ref3$topLeft,\n _ref3$targetZ = _ref3.targetZ,\n targetZ = _ref3$targetZ === void 0 ? undefined : _ref3$targetZ;\n\n var _xyz = slicedToArray_slicedToArray(xyz, 3),\n x = _xyz[0],\n y = _xyz[1],\n z = _xyz[2];\n\n var y2 = topLeft ? y : this.height - y;\n var targetZWorld = targetZ && targetZ * this.distanceScales.unitsPerMeter[2];\n var coord = pixelsToWorld([x, y2, z], this.pixelUnprojectionMatrix, targetZWorld);\n\n var _this$unprojectPositi = this.unprojectPosition(coord),\n _this$unprojectPositi2 = slicedToArray_slicedToArray(_this$unprojectPositi, 3),\n X = _this$unprojectPositi2[0],\n Y = _this$unprojectPositi2[1],\n Z = _this$unprojectPositi2[2];\n\n if (Number.isFinite(z)) {\n return [X, Y, Z];\n }\n\n return Number.isFinite(targetZ) ? [X, Y, targetZ] : [X, Y];\n }\n }, {\n key: "projectPosition",\n value: function projectPosition(xyz) {\n var _lngLatToWorld = lngLatToWorld(xyz),\n _lngLatToWorld2 = slicedToArray_slicedToArray(_lngLatToWorld, 2),\n X = _lngLatToWorld2[0],\n Y = _lngLatToWorld2[1];\n\n var Z = (xyz[2] || 0) * this.distanceScales.unitsPerMeter[2];\n return [X, Y, Z];\n }\n }, {\n key: "unprojectPosition",\n value: function unprojectPosition(xyz) {\n var _worldToLngLat = worldToLngLat(xyz),\n _worldToLngLat2 = slicedToArray_slicedToArray(_worldToLngLat, 2),\n X = _worldToLngLat2[0],\n Y = _worldToLngLat2[1];\n\n var Z = (xyz[2] || 0) * this.distanceScales.metersPerUnit[2];\n return [X, Y, Z];\n }\n }, {\n key: "projectFlat",\n value: function projectFlat(lngLat) {\n return lngLatToWorld(lngLat);\n }\n }, {\n key: "unprojectFlat",\n value: function unprojectFlat(xy) {\n return worldToLngLat(xy);\n }\n }, {\n key: "getMapCenterByLngLatPosition",\n value: function getMapCenterByLngLatPosition(_ref4) {\n var lngLat = _ref4.lngLat,\n pos = _ref4.pos;\n var fromLocation = pixelsToWorld(pos, this.pixelUnprojectionMatrix);\n var toLocation = lngLatToWorld(lngLat);\n var translate = vec2_add([], toLocation, vec2_negate([], fromLocation));\n var newCenter = vec2_add([], this.center, translate);\n return worldToLngLat(newCenter);\n }\n }, {\n key: "getLocationAtPoint",\n value: function getLocationAtPoint(_ref5) {\n var lngLat = _ref5.lngLat,\n pos = _ref5.pos;\n return this.getMapCenterByLngLatPosition({\n lngLat: lngLat,\n pos: pos\n });\n }\n }, {\n key: "fitBounds",\n value: function fitBounds(bounds) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var width = this.width,\n height = this.height;\n\n var _fitBounds2 = fit_bounds_fitBounds(Object.assign({\n width: width,\n height: height,\n bounds: bounds\n }, options)),\n longitude = _fitBounds2.longitude,\n latitude = _fitBounds2.latitude,\n zoom = _fitBounds2.zoom;\n\n return new WebMercatorViewport({\n width: width,\n height: height,\n longitude: longitude,\n latitude: latitude,\n zoom: zoom\n });\n }\n }, {\n key: "getBounds",\n value: function getBounds(options) {\n var corners = this.getBoundingRegion(options);\n var west = Math.min.apply(Math, (0,toConsumableArray/* default */.Z)(corners.map(function (p) {\n return p[0];\n })));\n var east = Math.max.apply(Math, (0,toConsumableArray/* default */.Z)(corners.map(function (p) {\n return p[0];\n })));\n var south = Math.min.apply(Math, (0,toConsumableArray/* default */.Z)(corners.map(function (p) {\n return p[1];\n })));\n var north = Math.max.apply(Math, (0,toConsumableArray/* default */.Z)(corners.map(function (p) {\n return p[1];\n })));\n return [[west, south], [east, north]];\n }\n }, {\n key: "getBoundingRegion",\n value: function getBoundingRegion() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return getBounds(this, options.z || 0);\n }\n }]);\n\n return WebMercatorViewport;\n}();\n\n\n;// CONCATENATED MODULE: ./node_modules/@math.gl/web-mercator/dist/esm/normalize-viewport-props.js\n\n\nvar MAX_LATITUDE = 85.05113;\nvar MIN_LATITUDE = -85.05113;\nfunction normalizeViewportProps(_ref) {\n var width = _ref.width,\n height = _ref.height,\n longitude = _ref.longitude,\n latitude = _ref.latitude,\n zoom = _ref.zoom,\n _ref$pitch = _ref.pitch,\n pitch = _ref$pitch === void 0 ? 0 : _ref$pitch,\n _ref$bearing = _ref.bearing,\n bearing = _ref$bearing === void 0 ? 0 : _ref$bearing;\n\n if (longitude < -180 || longitude > 180) {\n longitude = mod(longitude + 180, 360) - 180;\n }\n\n if (bearing < -180 || bearing > 180) {\n bearing = mod(bearing + 180, 360) - 180;\n }\n\n var flatViewport = new WebMercatorViewport({\n width: width,\n height: height,\n longitude: longitude,\n latitude: latitude,\n zoom: zoom\n });\n var topY = flatViewport.project([longitude, MAX_LATITUDE])[1];\n var bottomY = flatViewport.project([longitude, MIN_LATITUDE])[1];\n var shiftY = 0;\n\n if (bottomY - topY < height) {\n zoom += log2(height / (bottomY - topY));\n flatViewport = new WebMercatorViewport({\n width: width,\n height: height,\n longitude: longitude,\n latitude: latitude,\n zoom: zoom\n });\n topY = flatViewport.project([longitude, MAX_LATITUDE])[1];\n bottomY = flatViewport.project([longitude, MIN_LATITUDE])[1];\n }\n\n if (topY > 0) {\n shiftY = topY;\n } else if (bottomY < height) {\n shiftY = bottomY - height;\n }\n\n if (shiftY) {\n latitude = flatViewport.unproject([width / 2, height / 2 + shiftY])[1];\n }\n\n return {\n width: width,\n height: height,\n longitude: longitude,\n latitude: latitude,\n zoom: zoom,\n pitch: pitch,\n bearing: bearing\n };\n}\n;// CONCATENATED MODULE: ./node_modules/@math.gl/web-mercator/dist/esm/fly-to-viewport.js\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\n\n\n\nvar fly_to_viewport_EPSILON = 0.01;\nvar VIEWPORT_TRANSITION_PROPS = [\'longitude\', \'latitude\', \'zoom\'];\nvar DEFAULT_OPTS = {\n curve: 1.414,\n speed: 1.2\n};\nfunction flyToViewport(startProps, endProps, t) {\n var opts = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var viewport = {};\n\n var _getFlyToTransitionPa = getFlyToTransitionParams(startProps, endProps, opts),\n startZoom = _getFlyToTransitionPa.startZoom,\n startCenterXY = _getFlyToTransitionPa.startCenterXY,\n uDelta = _getFlyToTransitionPa.uDelta,\n w0 = _getFlyToTransitionPa.w0,\n u1 = _getFlyToTransitionPa.u1,\n S = _getFlyToTransitionPa.S,\n rho = _getFlyToTransitionPa.rho,\n rho2 = _getFlyToTransitionPa.rho2,\n r0 = _getFlyToTransitionPa.r0;\n\n if (u1 < fly_to_viewport_EPSILON) {\n var _iterator = _createForOfIteratorHelper(VIEWPORT_TRANSITION_PROPS),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var key = _step.value;\n var startValue = startProps[key];\n var endValue = endProps[key];\n viewport[key] = math_utils_lerp(startValue, endValue, t);\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n return viewport;\n }\n\n var s = t * S;\n var w = Math.cosh(r0) / Math.cosh(r0 + rho * s);\n var u = w0 * ((Math.cosh(r0) * Math.tanh(r0 + rho * s) - Math.sinh(r0)) / rho2) / u1;\n var scaleIncrement = 1 / w;\n var newZoom = startZoom + scaleToZoom(scaleIncrement);\n var newCenterWorld = vec2_scale([], uDelta, u);\n vec2_add(newCenterWorld, newCenterWorld, startCenterXY);\n var newCenter = worldToLngLat(newCenterWorld);\n viewport.longitude = newCenter[0];\n viewport.latitude = newCenter[1];\n viewport.zoom = newZoom;\n return viewport;\n}\nfunction getFlyToDuration(startProps, endProps) {\n var opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n opts = Object.assign({}, DEFAULT_OPTS, opts);\n var _opts = opts,\n screenSpeed = _opts.screenSpeed,\n speed = _opts.speed,\n maxDuration = _opts.maxDuration;\n\n var _getFlyToTransitionPa2 = getFlyToTransitionParams(startProps, endProps, opts),\n S = _getFlyToTransitionPa2.S,\n rho = _getFlyToTransitionPa2.rho;\n\n var length = 1000 * S;\n var duration;\n\n if (Number.isFinite(screenSpeed)) {\n duration = length / (screenSpeed / rho);\n } else {\n duration = length / speed;\n }\n\n return Number.isFinite(maxDuration) && duration > maxDuration ? 0 : duration;\n}\n\nfunction getFlyToTransitionParams(startProps, endProps, opts) {\n opts = Object.assign({}, DEFAULT_OPTS, opts);\n var rho = opts.curve;\n var startZoom = startProps.zoom;\n var startCenter = [startProps.longitude, startProps.latitude];\n var startScale = zoomToScale(startZoom);\n var endZoom = endProps.zoom;\n var endCenter = [endProps.longitude, endProps.latitude];\n var scale = zoomToScale(endZoom - startZoom);\n var startCenterXY = lngLatToWorld(startCenter);\n var endCenterXY = lngLatToWorld(endCenter);\n var uDelta = vec2_sub([], endCenterXY, startCenterXY);\n var w0 = Math.max(startProps.width, startProps.height);\n var w1 = w0 / scale;\n var u1 = vec2_length(uDelta) * startScale;\n\n var _u1 = Math.max(u1, fly_to_viewport_EPSILON);\n\n var rho2 = rho * rho;\n var b0 = (w1 * w1 - w0 * w0 + rho2 * rho2 * _u1 * _u1) / (2 * w0 * rho2 * _u1);\n var b1 = (w1 * w1 - w0 * w0 - rho2 * rho2 * _u1 * _u1) / (2 * w1 * rho2 * _u1);\n var r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0);\n var r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n var S = (r1 - r0) / rho;\n return {\n startZoom: startZoom,\n startCenterXY: startCenterXY,\n uDelta: uDelta,\n w0: w0,\n u1: u1,\n S: S,\n rho: rho,\n rho2: rho2,\n r0: r0,\n r1: r1\n };\n}\n;// CONCATENATED MODULE: ./node_modules/@math.gl/web-mercator/dist/esm/index.js\n\n\n\n\n\n\n\n;// CONCATENATED MODULE: ./node_modules/viewport-mercator-project/module.js\n\n\n;// CONCATENATED MODULE: ./node_modules/resize-observer-polyfill/dist/ResizeObserver.es.js\n/**\r\n * A collection of shims that provide minimal functionality of the ES6 collections.\r\n *\r\n * These implementations are not meant to be used outside of the ResizeObserver\r\n * modules as they cover only a limited range of use cases.\r\n */\n\n/* eslint-disable require-jsdoc, valid-jsdoc */\nvar MapShim = function () {\n if (typeof Map !== \'undefined\') {\n return Map;\n }\n /**\r\n * Returns index in provided array that matches the specified key.\r\n *\r\n * @param {Array} arr\r\n * @param {*} key\r\n * @returns {number}\r\n */\n\n\n function getIndex(arr, key) {\n var result = -1;\n arr.some(function (entry, index) {\n if (entry[0] === key) {\n result = index;\n return true;\n }\n\n return false;\n });\n return result;\n }\n\n return (\n /** @class */\n function () {\n function class_1() {\n this.__entries__ = [];\n }\n\n Object.defineProperty(class_1.prototype, "size", {\n /**\r\n * @returns {boolean}\r\n */\n get: function get() {\n return this.__entries__.length;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * @param {*} key\r\n * @returns {*}\r\n */\n\n class_1.prototype.get = function (key) {\n var index = getIndex(this.__entries__, key);\n var entry = this.__entries__[index];\n return entry && entry[1];\n };\n /**\r\n * @param {*} key\r\n * @param {*} value\r\n * @returns {void}\r\n */\n\n\n class_1.prototype.set = function (key, value) {\n var index = getIndex(this.__entries__, key);\n\n if (~index) {\n this.__entries__[index][1] = value;\n } else {\n this.__entries__.push([key, value]);\n }\n };\n /**\r\n * @param {*} key\r\n * @returns {void}\r\n */\n\n\n class_1.prototype.delete = function (key) {\n var entries = this.__entries__;\n var index = getIndex(entries, key);\n\n if (~index) {\n entries.splice(index, 1);\n }\n };\n /**\r\n * @param {*} key\r\n * @returns {void}\r\n */\n\n\n class_1.prototype.has = function (key) {\n return !!~getIndex(this.__entries__, key);\n };\n /**\r\n * @returns {void}\r\n */\n\n\n class_1.prototype.clear = function () {\n this.__entries__.splice(0);\n };\n /**\r\n * @param {Function} callback\r\n * @param {*} [ctx=null]\r\n * @returns {void}\r\n */\n\n\n class_1.prototype.forEach = function (callback, ctx) {\n if (ctx === void 0) {\n ctx = null;\n }\n\n for (var _i = 0, _a = this.__entries__; _i < _a.length; _i++) {\n var entry = _a[_i];\n callback.call(ctx, entry[1], entry[0]);\n }\n };\n\n return class_1;\n }()\n );\n}();\n/**\r\n * Detects whether window and document objects are available in current environment.\r\n */\n\n\nvar isBrowser = typeof window !== \'undefined\' && typeof document !== \'undefined\' && window.document === document; // Returns global object of a current environment.\n\nvar global$1 = function () {\n if (typeof __webpack_require__.g !== \'undefined\' && __webpack_require__.g.Math === Math) {\n return __webpack_require__.g;\n }\n\n if (typeof self !== \'undefined\' && self.Math === Math) {\n return self;\n }\n\n if (typeof window !== \'undefined\' && window.Math === Math) {\n return window;\n } // eslint-disable-next-line no-new-func\n\n\n return Function(\'return this\')();\n}();\n/**\r\n * A shim for the requestAnimationFrame which falls back to the setTimeout if\r\n * first one is not supported.\r\n *\r\n * @returns {number} Requests\' identifier.\r\n */\n\n\nvar requestAnimationFrame$1 = function () {\n if (typeof requestAnimationFrame === \'function\') {\n // It\'s required to use a bounded function because IE sometimes throws\n // an "Invalid calling object" error if rAF is invoked without the global\n // object on the left hand side.\n return requestAnimationFrame.bind(global$1);\n }\n\n return function (callback) {\n return setTimeout(function () {\n return callback(Date.now());\n }, 1000 / 60);\n };\n}(); // Defines minimum timeout before adding a trailing call.\n\n\nvar trailingTimeout = 2;\n/**\r\n * Creates a wrapper function which ensures that provided callback will be\r\n * invoked only once during the specified delay period.\r\n *\r\n * @param {Function} callback - Function to be invoked after the delay period.\r\n * @param {number} delay - Delay after which to invoke callback.\r\n * @returns {Function}\r\n */\n\nfunction throttle(callback, delay) {\n var leadingCall = false,\n trailingCall = false,\n lastCallTime = 0;\n /**\r\n * Invokes the original callback function and schedules new invocation if\r\n * the "proxy" was called during current request.\r\n *\r\n * @returns {void}\r\n */\n\n function resolvePending() {\n if (leadingCall) {\n leadingCall = false;\n callback();\n }\n\n if (trailingCall) {\n proxy();\n }\n }\n /**\r\n * Callback invoked after the specified delay. It will further postpone\r\n * invocation of the original function delegating it to the\r\n * requestAnimationFrame.\r\n *\r\n * @returns {void}\r\n */\n\n\n function timeoutCallback() {\n requestAnimationFrame$1(resolvePending);\n }\n /**\r\n * Schedules invocation of the original function.\r\n *\r\n * @returns {void}\r\n */\n\n\n function proxy() {\n var timeStamp = Date.now();\n\n if (leadingCall) {\n // Reject immediately following calls.\n if (timeStamp - lastCallTime < trailingTimeout) {\n return;\n } // Schedule new call to be in invoked when the pending one is resolved.\n // This is important for "transitions" which never actually start\n // immediately so there is a chance that we might miss one if change\n // happens amids the pending invocation.\n\n\n trailingCall = true;\n } else {\n leadingCall = true;\n trailingCall = false;\n setTimeout(timeoutCallback, delay);\n }\n\n lastCallTime = timeStamp;\n }\n\n return proxy;\n} // Minimum delay before invoking the update of observers.\n\n\nvar REFRESH_DELAY = 20; // A list of substrings of CSS properties used to find transition events that\n// might affect dimensions of observed elements.\n\nvar transitionKeys = [\'top\', \'right\', \'bottom\', \'left\', \'width\', \'height\', \'size\', \'weight\']; // Check if MutationObserver is available.\n\nvar mutationObserverSupported = typeof MutationObserver !== \'undefined\';\n/**\r\n * Singleton controller class which handles updates of ResizeObserver instances.\r\n */\n\nvar ResizeObserverController =\n/** @class */\nfunction () {\n /**\r\n * Creates a new instance of ResizeObserverController.\r\n *\r\n * @private\r\n */\n function ResizeObserverController() {\n /**\r\n * Indicates whether DOM listeners have been added.\r\n *\r\n * @private {boolean}\r\n */\n this.connected_ = false;\n /**\r\n * Tells that controller has subscribed for Mutation Events.\r\n *\r\n * @private {boolean}\r\n */\n\n this.mutationEventsAdded_ = false;\n /**\r\n * Keeps reference to the instance of MutationObserver.\r\n *\r\n * @private {MutationObserver}\r\n */\n\n this.mutationsObserver_ = null;\n /**\r\n * A list of connected observers.\r\n *\r\n * @private {Array}\r\n */\n\n this.observers_ = [];\n this.onTransitionEnd_ = this.onTransitionEnd_.bind(this);\n this.refresh = throttle(this.refresh.bind(this), REFRESH_DELAY);\n }\n /**\r\n * Adds observer to observers list.\r\n *\r\n * @param {ResizeObserverSPI} observer - Observer to be added.\r\n * @returns {void}\r\n */\n\n\n ResizeObserverController.prototype.addObserver = function (observer) {\n if (!~this.observers_.indexOf(observer)) {\n this.observers_.push(observer);\n } // Add listeners if they haven\'t been added yet.\n\n\n if (!this.connected_) {\n this.connect_();\n }\n };\n /**\r\n * Removes observer from observers list.\r\n *\r\n * @param {ResizeObserverSPI} observer - Observer to be removed.\r\n * @returns {void}\r\n */\n\n\n ResizeObserverController.prototype.removeObserver = function (observer) {\n var observers = this.observers_;\n var index = observers.indexOf(observer); // Remove observer if it\'s present in registry.\n\n if (~index) {\n observers.splice(index, 1);\n } // Remove listeners if controller has no connected observers.\n\n\n if (!observers.length && this.connected_) {\n this.disconnect_();\n }\n };\n /**\r\n * Invokes the update of observers. It will continue running updates insofar\r\n * it detects changes.\r\n *\r\n * @returns {void}\r\n */\n\n\n ResizeObserverController.prototype.refresh = function () {\n var changesDetected = this.updateObservers_(); // Continue running updates if changes have been detected as there might\n // be future ones caused by CSS transitions.\n\n if (changesDetected) {\n this.refresh();\n }\n };\n /**\r\n * Updates every observer from observers list and notifies them of queued\r\n * entries.\r\n *\r\n * @private\r\n * @returns {boolean} Returns "true" if any observer has detected changes in\r\n * dimensions of it\'s elements.\r\n */\n\n\n ResizeObserverController.prototype.updateObservers_ = function () {\n // Collect observers that have active observations.\n var activeObservers = this.observers_.filter(function (observer) {\n return observer.gatherActive(), observer.hasActive();\n }); // Deliver notifications in a separate cycle in order to avoid any\n // collisions between observers, e.g. when multiple instances of\n // ResizeObserver are tracking the same element and the callback of one\n // of them changes content dimensions of the observed target. Sometimes\n // this may result in notifications being blocked for the rest of observers.\n\n activeObservers.forEach(function (observer) {\n return observer.broadcastActive();\n });\n return activeObservers.length > 0;\n };\n /**\r\n * Initializes DOM listeners.\r\n *\r\n * @private\r\n * @returns {void}\r\n */\n\n\n ResizeObserverController.prototype.connect_ = function () {\n // Do nothing if running in a non-browser environment or if listeners\n // have been already added.\n if (!isBrowser || this.connected_) {\n return;\n } // Subscription to the "Transitionend" event is used as a workaround for\n // delayed transitions. This way it\'s possible to capture at least the\n // final state of an element.\n\n\n document.addEventListener(\'transitionend\', this.onTransitionEnd_);\n window.addEventListener(\'resize\', this.refresh);\n\n if (mutationObserverSupported) {\n this.mutationsObserver_ = new MutationObserver(this.refresh);\n this.mutationsObserver_.observe(document, {\n attributes: true,\n childList: true,\n characterData: true,\n subtree: true\n });\n } else {\n document.addEventListener(\'DOMSubtreeModified\', this.refresh);\n this.mutationEventsAdded_ = true;\n }\n\n this.connected_ = true;\n };\n /**\r\n * Removes DOM listeners.\r\n *\r\n * @private\r\n * @returns {void}\r\n */\n\n\n ResizeObserverController.prototype.disconnect_ = function () {\n // Do nothing if running in a non-browser environment or if listeners\n // have been already removed.\n if (!isBrowser || !this.connected_) {\n return;\n }\n\n document.removeEventListener(\'transitionend\', this.onTransitionEnd_);\n window.removeEventListener(\'resize\', this.refresh);\n\n if (this.mutationsObserver_) {\n this.mutationsObserver_.disconnect();\n }\n\n if (this.mutationEventsAdded_) {\n document.removeEventListener(\'DOMSubtreeModified\', this.refresh);\n }\n\n this.mutationsObserver_ = null;\n this.mutationEventsAdded_ = false;\n this.connected_ = false;\n };\n /**\r\n * "Transitionend" event handler.\r\n *\r\n * @private\r\n * @param {TransitionEvent} event\r\n * @returns {void}\r\n */\n\n\n ResizeObserverController.prototype.onTransitionEnd_ = function (_a) {\n var _b = _a.propertyName,\n propertyName = _b === void 0 ? \'\' : _b; // Detect whether transition may affect dimensions of an element.\n\n var isReflowProperty = transitionKeys.some(function (key) {\n return !!~propertyName.indexOf(key);\n });\n\n if (isReflowProperty) {\n this.refresh();\n }\n };\n /**\r\n * Returns instance of the ResizeObserverController.\r\n *\r\n * @returns {ResizeObserverController}\r\n */\n\n\n ResizeObserverController.getInstance = function () {\n if (!this.instance_) {\n this.instance_ = new ResizeObserverController();\n }\n\n return this.instance_;\n };\n /**\r\n * Holds reference to the controller\'s instance.\r\n *\r\n * @private {ResizeObserverController}\r\n */\n\n\n ResizeObserverController.instance_ = null;\n return ResizeObserverController;\n}();\n/**\r\n * Defines non-writable/enumerable properties of the provided target object.\r\n *\r\n * @param {Object} target - Object for which to define properties.\r\n * @param {Object} props - Properties to be defined.\r\n * @returns {Object} Target object.\r\n */\n\n\nvar defineConfigurable = function defineConfigurable(target, props) {\n for (var _i = 0, _a = Object.keys(props); _i < _a.length; _i++) {\n var key = _a[_i];\n Object.defineProperty(target, key, {\n value: props[key],\n enumerable: false,\n writable: false,\n configurable: true\n });\n }\n\n return target;\n};\n/**\r\n * Returns the global object associated with provided element.\r\n *\r\n * @param {Object} target\r\n * @returns {Object}\r\n */\n\n\nvar getWindowOf = function getWindowOf(target) {\n // Assume that the element is an instance of Node, which means that it\n // has the "ownerDocument" property from which we can retrieve a\n // corresponding global object.\n var ownerGlobal = target && target.ownerDocument && target.ownerDocument.defaultView; // Return the local global object if it\'s not possible extract one from\n // provided element.\n\n return ownerGlobal || global$1;\n}; // Placeholder of an empty content rectangle.\n\n\nvar emptyRect = createRectInit(0, 0, 0, 0);\n/**\r\n * Converts provided string to a number.\r\n *\r\n * @param {number|string} value\r\n * @returns {number}\r\n */\n\nfunction toFloat(value) {\n return parseFloat(value) || 0;\n}\n/**\r\n * Extracts borders size from provided styles.\r\n *\r\n * @param {CSSStyleDeclaration} styles\r\n * @param {...string} positions - Borders positions (top, right, ...)\r\n * @returns {number}\r\n */\n\n\nfunction getBordersSize(styles) {\n var positions = [];\n\n for (var _i = 1; _i < arguments.length; _i++) {\n positions[_i - 1] = arguments[_i];\n }\n\n return positions.reduce(function (size, position) {\n var value = styles[\'border-\' + position + \'-width\'];\n return size + toFloat(value);\n }, 0);\n}\n/**\r\n * Extracts paddings sizes from provided styles.\r\n *\r\n * @param {CSSStyleDeclaration} styles\r\n * @returns {Object} Paddings box.\r\n */\n\n\nfunction getPaddings(styles) {\n var positions = [\'top\', \'right\', \'bottom\', \'left\'];\n var paddings = {};\n\n for (var _i = 0, positions_1 = positions; _i < positions_1.length; _i++) {\n var position = positions_1[_i];\n var value = styles[\'padding-\' + position];\n paddings[position] = toFloat(value);\n }\n\n return paddings;\n}\n/**\r\n * Calculates content rectangle of provided SVG element.\r\n *\r\n * @param {SVGGraphicsElement} target - Element content rectangle of which needs\r\n * to be calculated.\r\n * @returns {DOMRectInit}\r\n */\n\n\nfunction getSVGContentRect(target) {\n var bbox = target.getBBox();\n return createRectInit(0, 0, bbox.width, bbox.height);\n}\n/**\r\n * Calculates content rectangle of provided HTMLElement.\r\n *\r\n * @param {HTMLElement} target - Element for which to calculate the content rectangle.\r\n * @returns {DOMRectInit}\r\n */\n\n\nfunction getHTMLElementContentRect(target) {\n // Client width & height properties can\'t be\n // used exclusively as they provide rounded values.\n var clientWidth = target.clientWidth,\n clientHeight = target.clientHeight; // By this condition we can catch all non-replaced inline, hidden and\n // detached elements. Though elements with width & height properties less\n // than 0.5 will be discarded as well.\n //\n // Without it we would need to implement separate methods for each of\n // those cases and it\'s not possible to perform a precise and performance\n // effective test for hidden elements. E.g. even jQuery\'s \':visible\' filter\n // gives wrong results for elements with width & height less than 0.5.\n\n if (!clientWidth && !clientHeight) {\n return emptyRect;\n }\n\n var styles = getWindowOf(target).getComputedStyle(target);\n var paddings = getPaddings(styles);\n var horizPad = paddings.left + paddings.right;\n var vertPad = paddings.top + paddings.bottom; // Computed styles of width & height are being used because they are the\n // only dimensions available to JS that contain non-rounded values. It could\n // be possible to utilize the getBoundingClientRect if only it\'s data wasn\'t\n // affected by CSS transformations let alone paddings, borders and scroll bars.\n\n var width = toFloat(styles.width),\n height = toFloat(styles.height); // Width & height include paddings and borders when the \'border-box\' box\n // model is applied (except for IE).\n\n if (styles.boxSizing === \'border-box\') {\n // Following conditions are required to handle Internet Explorer which\n // doesn\'t include paddings and borders to computed CSS dimensions.\n //\n // We can say that if CSS dimensions + paddings are equal to the "client"\n // properties then it\'s either IE, and thus we don\'t need to subtract\n // anything, or an element merely doesn\'t have paddings/borders styles.\n if (Math.round(width + horizPad) !== clientWidth) {\n width -= getBordersSize(styles, \'left\', \'right\') + horizPad;\n }\n\n if (Math.round(height + vertPad) !== clientHeight) {\n height -= getBordersSize(styles, \'top\', \'bottom\') + vertPad;\n }\n } // Following steps can\'t be applied to the document\'s root element as its\n // client[Width/Height] properties represent viewport area of the window.\n // Besides, it\'s as well not necessary as the itself neither has\n // rendered scroll bars nor it can be clipped.\n\n\n if (!isDocumentElement(target)) {\n // In some browsers (only in Firefox, actually) CSS width & height\n // include scroll bars size which can be removed at this step as scroll\n // bars are the only difference between rounded dimensions + paddings\n // and "client" properties, though that is not always true in Chrome.\n var vertScrollbar = Math.round(width + horizPad) - clientWidth;\n var horizScrollbar = Math.round(height + vertPad) - clientHeight; // Chrome has a rather weird rounding of "client" properties.\n // E.g. for an element with content width of 314.2px it sometimes gives\n // the client width of 315px and for the width of 314.7px it may give\n // 314px. And it doesn\'t happen all the time. So just ignore this delta\n // as a non-relevant.\n\n if (Math.abs(vertScrollbar) !== 1) {\n width -= vertScrollbar;\n }\n\n if (Math.abs(horizScrollbar) !== 1) {\n height -= horizScrollbar;\n }\n }\n\n return createRectInit(paddings.left, paddings.top, width, height);\n}\n/**\r\n * Checks whether provided element is an instance of the SVGGraphicsElement.\r\n *\r\n * @param {Element} target - Element to be checked.\r\n * @returns {boolean}\r\n */\n\n\nvar isSVGGraphicsElement = function () {\n // Some browsers, namely IE and Edge, don\'t have the SVGGraphicsElement\n // interface.\n if (typeof SVGGraphicsElement !== \'undefined\') {\n return function (target) {\n return target instanceof getWindowOf(target).SVGGraphicsElement;\n };\n } // If it\'s so, then check that element is at least an instance of the\n // SVGElement and that it has the "getBBox" method.\n // eslint-disable-next-line no-extra-parens\n\n\n return function (target) {\n return target instanceof getWindowOf(target).SVGElement && typeof target.getBBox === \'function\';\n };\n}();\n/**\r\n * Checks whether provided element is a document element ().\r\n *\r\n * @param {Element} target - Element to be checked.\r\n * @returns {boolean}\r\n */\n\n\nfunction isDocumentElement(target) {\n return target === getWindowOf(target).document.documentElement;\n}\n/**\r\n * Calculates an appropriate content rectangle for provided html or svg element.\r\n *\r\n * @param {Element} target - Element content rectangle of which needs to be calculated.\r\n * @returns {DOMRectInit}\r\n */\n\n\nfunction getContentRect(target) {\n if (!isBrowser) {\n return emptyRect;\n }\n\n if (isSVGGraphicsElement(target)) {\n return getSVGContentRect(target);\n }\n\n return getHTMLElementContentRect(target);\n}\n/**\r\n * Creates rectangle with an interface of the DOMRectReadOnly.\r\n * Spec: https://drafts.fxtf.org/geometry/#domrectreadonly\r\n *\r\n * @param {DOMRectInit} rectInit - Object with rectangle\'s x/y coordinates and dimensions.\r\n * @returns {DOMRectReadOnly}\r\n */\n\n\nfunction createReadOnlyRect(_a) {\n var x = _a.x,\n y = _a.y,\n width = _a.width,\n height = _a.height; // If DOMRectReadOnly is available use it as a prototype for the rectangle.\n\n var Constr = typeof DOMRectReadOnly !== \'undefined\' ? DOMRectReadOnly : Object;\n var rect = Object.create(Constr.prototype); // Rectangle\'s properties are not writable and non-enumerable.\n\n defineConfigurable(rect, {\n x: x,\n y: y,\n width: width,\n height: height,\n top: y,\n right: x + width,\n bottom: height + y,\n left: x\n });\n return rect;\n}\n/**\r\n * Creates DOMRectInit object based on the provided dimensions and the x/y coordinates.\r\n * Spec: https://drafts.fxtf.org/geometry/#dictdef-domrectinit\r\n *\r\n * @param {number} x - X coordinate.\r\n * @param {number} y - Y coordinate.\r\n * @param {number} width - Rectangle\'s width.\r\n * @param {number} height - Rectangle\'s height.\r\n * @returns {DOMRectInit}\r\n */\n\n\nfunction createRectInit(x, y, width, height) {\n return {\n x: x,\n y: y,\n width: width,\n height: height\n };\n}\n/**\r\n * Class that is responsible for computations of the content rectangle of\r\n * provided DOM element and for keeping track of it\'s changes.\r\n */\n\n\nvar ResizeObservation =\n/** @class */\nfunction () {\n /**\r\n * Creates an instance of ResizeObservation.\r\n *\r\n * @param {Element} target - Element to be observed.\r\n */\n function ResizeObservation(target) {\n /**\r\n * Broadcasted width of content rectangle.\r\n *\r\n * @type {number}\r\n */\n this.broadcastWidth = 0;\n /**\r\n * Broadcasted height of content rectangle.\r\n *\r\n * @type {number}\r\n */\n\n this.broadcastHeight = 0;\n /**\r\n * Reference to the last observed content rectangle.\r\n *\r\n * @private {DOMRectInit}\r\n */\n\n this.contentRect_ = createRectInit(0, 0, 0, 0);\n this.target = target;\n }\n /**\r\n * Updates content rectangle and tells whether it\'s width or height properties\r\n * have changed since the last broadcast.\r\n *\r\n * @returns {boolean}\r\n */\n\n\n ResizeObservation.prototype.isActive = function () {\n var rect = getContentRect(this.target);\n this.contentRect_ = rect;\n return rect.width !== this.broadcastWidth || rect.height !== this.broadcastHeight;\n };\n /**\r\n * Updates \'broadcastWidth\' and \'broadcastHeight\' properties with a data\r\n * from the corresponding properties of the last observed content rectangle.\r\n *\r\n * @returns {DOMRectInit} Last observed content rectangle.\r\n */\n\n\n ResizeObservation.prototype.broadcastRect = function () {\n var rect = this.contentRect_;\n this.broadcastWidth = rect.width;\n this.broadcastHeight = rect.height;\n return rect;\n };\n\n return ResizeObservation;\n}();\n\nvar ResizeObserverEntry =\n/** @class */\nfunction () {\n /**\r\n * Creates an instance of ResizeObserverEntry.\r\n *\r\n * @param {Element} target - Element that is being observed.\r\n * @param {DOMRectInit} rectInit - Data of the element\'s content rectangle.\r\n */\n function ResizeObserverEntry(target, rectInit) {\n var contentRect = createReadOnlyRect(rectInit); // According to the specification following properties are not writable\n // and are also not enumerable in the native implementation.\n //\n // Property accessors are not being used as they\'d require to define a\n // private WeakMap storage which may cause memory leaks in browsers that\n // don\'t support this type of collections.\n\n defineConfigurable(this, {\n target: target,\n contentRect: contentRect\n });\n }\n\n return ResizeObserverEntry;\n}();\n\nvar ResizeObserverSPI =\n/** @class */\nfunction () {\n /**\r\n * Creates a new instance of ResizeObserver.\r\n *\r\n * @param {ResizeObserverCallback} callback - Callback function that is invoked\r\n * when one of the observed elements changes it\'s content dimensions.\r\n * @param {ResizeObserverController} controller - Controller instance which\r\n * is responsible for the updates of observer.\r\n * @param {ResizeObserver} callbackCtx - Reference to the public\r\n * ResizeObserver instance which will be passed to callback function.\r\n */\n function ResizeObserverSPI(callback, controller, callbackCtx) {\n /**\r\n * Collection of resize observations that have detected changes in dimensions\r\n * of elements.\r\n *\r\n * @private {Array}\r\n */\n this.activeObservations_ = [];\n /**\r\n * Registry of the ResizeObservation instances.\r\n *\r\n * @private {Map}\r\n */\n\n this.observations_ = new MapShim();\n\n if (typeof callback !== \'function\') {\n throw new TypeError(\'The callback provided as parameter 1 is not a function.\');\n }\n\n this.callback_ = callback;\n this.controller_ = controller;\n this.callbackCtx_ = callbackCtx;\n }\n /**\r\n * Starts observing provided element.\r\n *\r\n * @param {Element} target - Element to be observed.\r\n * @returns {void}\r\n */\n\n\n ResizeObserverSPI.prototype.observe = function (target) {\n if (!arguments.length) {\n throw new TypeError(\'1 argument required, but only 0 present.\');\n } // Do nothing if current environment doesn\'t have the Element interface.\n\n\n if (typeof Element === \'undefined\' || !(Element instanceof Object)) {\n return;\n }\n\n if (!(target instanceof getWindowOf(target).Element)) {\n throw new TypeError(\'parameter 1 is not of type "Element".\');\n }\n\n var observations = this.observations_; // Do nothing if element is already being observed.\n\n if (observations.has(target)) {\n return;\n }\n\n observations.set(target, new ResizeObservation(target));\n this.controller_.addObserver(this); // Force the update of observations.\n\n this.controller_.refresh();\n };\n /**\r\n * Stops observing provided element.\r\n *\r\n * @param {Element} target - Element to stop observing.\r\n * @returns {void}\r\n */\n\n\n ResizeObserverSPI.prototype.unobserve = function (target) {\n if (!arguments.length) {\n throw new TypeError(\'1 argument required, but only 0 present.\');\n } // Do nothing if current environment doesn\'t have the Element interface.\n\n\n if (typeof Element === \'undefined\' || !(Element instanceof Object)) {\n return;\n }\n\n if (!(target instanceof getWindowOf(target).Element)) {\n throw new TypeError(\'parameter 1 is not of type "Element".\');\n }\n\n var observations = this.observations_; // Do nothing if element is not being observed.\n\n if (!observations.has(target)) {\n return;\n }\n\n observations.delete(target);\n\n if (!observations.size) {\n this.controller_.removeObserver(this);\n }\n };\n /**\r\n * Stops observing all elements.\r\n *\r\n * @returns {void}\r\n */\n\n\n ResizeObserverSPI.prototype.disconnect = function () {\n this.clearActive();\n this.observations_.clear();\n this.controller_.removeObserver(this);\n };\n /**\r\n * Collects observation instances the associated element of which has changed\r\n * it\'s content rectangle.\r\n *\r\n * @returns {void}\r\n */\n\n\n ResizeObserverSPI.prototype.gatherActive = function () {\n var _this = this;\n\n this.clearActive();\n this.observations_.forEach(function (observation) {\n if (observation.isActive()) {\n _this.activeObservations_.push(observation);\n }\n });\n };\n /**\r\n * Invokes initial callback function with a list of ResizeObserverEntry\r\n * instances collected from active resize observations.\r\n *\r\n * @returns {void}\r\n */\n\n\n ResizeObserverSPI.prototype.broadcastActive = function () {\n // Do nothing if observer doesn\'t have active observations.\n if (!this.hasActive()) {\n return;\n }\n\n var ctx = this.callbackCtx_; // Create ResizeObserverEntry instance for every active observation.\n\n var entries = this.activeObservations_.map(function (observation) {\n return new ResizeObserverEntry(observation.target, observation.broadcastRect());\n });\n this.callback_.call(ctx, entries, ctx);\n this.clearActive();\n };\n /**\r\n * Clears the collection of active observations.\r\n *\r\n * @returns {void}\r\n */\n\n\n ResizeObserverSPI.prototype.clearActive = function () {\n this.activeObservations_.splice(0);\n };\n /**\r\n * Tells whether observer has active observations.\r\n *\r\n * @returns {boolean}\r\n */\n\n\n ResizeObserverSPI.prototype.hasActive = function () {\n return this.activeObservations_.length > 0;\n };\n\n return ResizeObserverSPI;\n}(); // Registry of internal observers. If WeakMap is not available use current shim\n// for the Map collection as it has all required methods and because WeakMap\n// can\'t be fully polyfilled anyway.\n\n\nvar observers = typeof WeakMap !== \'undefined\' ? new WeakMap() : new MapShim();\n/**\r\n * ResizeObserver API. Encapsulates the ResizeObserver SPI implementation\r\n * exposing only those methods and properties that are defined in the spec.\r\n */\n\nvar ResizeObserver =\n/** @class */\nfunction () {\n /**\r\n * Creates a new instance of ResizeObserver.\r\n *\r\n * @param {ResizeObserverCallback} callback - Callback that is invoked when\r\n * dimensions of the observed elements change.\r\n */\n function ResizeObserver(callback) {\n if (!(this instanceof ResizeObserver)) {\n throw new TypeError(\'Cannot call a class as a function.\');\n }\n\n if (!arguments.length) {\n throw new TypeError(\'1 argument required, but only 0 present.\');\n }\n\n var controller = ResizeObserverController.getInstance();\n var observer = new ResizeObserverSPI(callback, controller, this);\n observers.set(this, observer);\n }\n\n return ResizeObserver;\n}(); // Expose public methods of ResizeObserver.\n\n\n[\'observe\', \'unobserve\', \'disconnect\'].forEach(function (method) {\n ResizeObserver.prototype[method] = function () {\n var _a;\n\n return (_a = observers.get(this))[method].apply(_a, arguments);\n };\n});\n\nvar index = function () {\n // Export existing implementation if available.\n if (typeof global$1.ResizeObserver !== \'undefined\') {\n return global$1.ResizeObserver;\n }\n\n return ResizeObserver;\n}();\n\n/* harmony default export */ var ResizeObserver_es = (index);\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/utils/globals.js\nvar window_ = typeof window !== \'undefined\' ? window : __webpack_require__.g;\nvar global_ = typeof __webpack_require__.g !== \'undefined\' ? __webpack_require__.g : window;\nvar document_ = typeof document !== \'undefined\' ? document : {};\n\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/utils/style-utils.js\n\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction style_utils_createForOfIteratorHelper(o, allowArrayLike) {\n var it;\n\n if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) {\n if (Array.isArray(o) || (it = style_utils_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {\n if (it) o = it;\n var i = 0;\n\n var F = function F() {};\n\n return {\n s: F,\n n: function n() {\n if (i >= o.length) return {\n done: true\n };\n return {\n done: false,\n value: o[i++]\n };\n },\n e: function e(_e) {\n throw _e;\n },\n f: F\n };\n }\n\n throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");\n }\n\n var normalCompletion = true,\n didErr = false,\n err;\n return {\n s: function s() {\n it = o[Symbol.iterator]();\n },\n n: function n() {\n var step = it.next();\n normalCompletion = step.done;\n return step;\n },\n e: function e(_e2) {\n didErr = true;\n err = _e2;\n },\n f: function f() {\n try {\n if (!normalCompletion && it["return"] != null) it["return"]();\n } finally {\n if (didErr) throw err;\n }\n }\n };\n}\n\nfunction style_utils_unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === "string") return style_utils_arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === "Object" && o.constructor) n = o.constructor.name;\n if (n === "Map" || n === "Set") return Array.from(o);\n if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return style_utils_arrayLikeToArray(o, minLen);\n}\n\nfunction style_utils_arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}\n\nvar refProps = [\'type\', \'source\', \'source-layer\', \'minzoom\', \'maxzoom\', \'filter\', \'layout\'];\nfunction normalizeStyle(style) {\n if (!style) {\n return null;\n }\n\n if (typeof style === \'string\') {\n return style;\n }\n\n if (style.toJS) {\n style = style.toJS();\n }\n\n var layerIndex = {};\n\n var _iterator = style_utils_createForOfIteratorHelper(style.layers),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var layer = _step.value;\n layerIndex[layer.id] = layer;\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n var layers = style.layers.map(function (layer) {\n var layerRef = layerIndex[layer.ref];\n var normalizedLayer = null;\n\n if (\'interactive\' in layer) {\n normalizedLayer = _objectSpread({}, layer);\n delete normalizedLayer.interactive;\n }\n\n if (layerRef) {\n normalizedLayer = normalizedLayer || _objectSpread({}, layer);\n delete normalizedLayer.ref;\n\n var _iterator2 = style_utils_createForOfIteratorHelper(refProps),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var propName = _step2.value;\n\n if (propName in layerRef) {\n normalizedLayer[propName] = layerRef[propName];\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n }\n\n return normalizedLayer || layer;\n });\n return _objectSpread(_objectSpread({}, style), {}, {\n layers: layers\n });\n}\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/mapbox/mapbox.js\n\n\n\n\n\n\n\nfunction noop() {}\n\nfunction defaultOnError(event) {\n if (event) {\n console.error(event.error);\n }\n}\n\nvar propTypes = {\n container: prop_types.object,\n gl: prop_types.object,\n mapboxApiAccessToken: prop_types.string,\n mapboxApiUrl: prop_types.string,\n attributionControl: prop_types.bool,\n preserveDrawingBuffer: prop_types.bool,\n reuseMaps: prop_types.bool,\n transformRequest: prop_types.func,\n mapOptions: prop_types.object,\n mapStyle: prop_types.oneOfType([prop_types.string, prop_types.object]),\n preventStyleDiffing: prop_types.bool,\n visible: prop_types.bool,\n asyncRender: prop_types.bool,\n onLoad: prop_types.func,\n onError: prop_types.func,\n width: prop_types.number,\n height: prop_types.number,\n viewState: prop_types.object,\n longitude: prop_types.number,\n latitude: prop_types.number,\n zoom: prop_types.number,\n bearing: prop_types.number,\n pitch: prop_types.number,\n altitude: prop_types.number\n};\nvar defaultProps = {\n container: document_.body,\n mapboxApiAccessToken: getAccessToken(),\n mapboxApiUrl: \'https://api.mapbox.com\',\n preserveDrawingBuffer: false,\n attributionControl: true,\n reuseMaps: false,\n mapOptions: {},\n mapStyle: \'mapbox://styles/mapbox/light-v8\',\n preventStyleDiffing: false,\n visible: true,\n asyncRender: false,\n onLoad: noop,\n onError: defaultOnError,\n width: 0,\n height: 0,\n longitude: 0,\n latitude: 0,\n zoom: 0,\n bearing: 0,\n pitch: 0,\n altitude: 1.5\n};\nfunction getAccessToken() {\n var accessToken = null;\n\n if (typeof window !== \'undefined\' && window.location) {\n var match = window.location.search.match(/access_token=([^&\\/]*)/);\n accessToken = match && match[1];\n }\n\n if (!accessToken && typeof process !== \'undefined\') {\n accessToken = accessToken || ({}).MapboxAccessToken || ({}).REACT_APP_MAPBOX_ACCESS_TOKEN;\n }\n\n return accessToken || \'no-token\';\n}\n\nfunction checkPropTypes(props) {\n var component = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \'component\';\n\n if (props.debug) {\n prop_types.checkPropTypes(propTypes, props, \'prop\', component);\n }\n}\n\nvar Mapbox = function () {\n function Mapbox(props) {\n var _this = this;\n\n _classCallCheck(this, Mapbox);\n\n _defineProperty(this, "props", defaultProps);\n\n _defineProperty(this, "width", 0);\n\n _defineProperty(this, "height", 0);\n\n _defineProperty(this, "_fireLoadEvent", function () {\n _this.props.onLoad({\n type: \'load\',\n target: _this._map\n });\n });\n\n if (!props.mapboxgl) {\n throw new Error(\'Mapbox not available\');\n }\n\n this.mapboxgl = props.mapboxgl;\n\n if (!Mapbox.initialized) {\n Mapbox.initialized = true;\n\n this._checkStyleSheet(this.mapboxgl.version);\n }\n\n this._initialize(props);\n }\n\n _createClass(Mapbox, [{\n key: "finalize",\n value: function finalize() {\n this._destroy();\n\n return this;\n }\n }, {\n key: "setProps",\n value: function setProps(props) {\n this._update(this.props, props);\n\n return this;\n }\n }, {\n key: "redraw",\n value: function redraw() {\n var map = this._map;\n\n if (map.style) {\n if (map._frame) {\n map._frame.cancel();\n\n map._frame = null;\n }\n\n map._render();\n }\n }\n }, {\n key: "getMap",\n value: function getMap() {\n return this._map;\n }\n }, {\n key: "_reuse",\n value: function _reuse(props) {\n this._map = Mapbox.savedMap;\n\n var oldContainer = this._map.getContainer();\n\n var newContainer = props.container;\n newContainer.classList.add(\'mapboxgl-map\');\n\n while (oldContainer.childNodes.length > 0) {\n newContainer.appendChild(oldContainer.childNodes[0]);\n }\n\n this._map._container = newContainer;\n Mapbox.savedMap = null;\n\n if (props.mapStyle) {\n this._map.setStyle(normalizeStyle(props.mapStyle), {\n diff: false\n });\n }\n\n if (this._map.isStyleLoaded()) {\n this._fireLoadEvent();\n } else {\n this._map.once(\'styledata\', this._fireLoadEvent);\n }\n }\n }, {\n key: "_create",\n value: function _create(props) {\n if (props.reuseMaps && Mapbox.savedMap) {\n this._reuse(props);\n } else {\n if (props.gl) {\n var getContext = HTMLCanvasElement.prototype.getContext;\n\n HTMLCanvasElement.prototype.getContext = function () {\n HTMLCanvasElement.prototype.getContext = getContext;\n return props.gl;\n };\n }\n\n var mapOptions = {\n container: props.container,\n center: [0, 0],\n zoom: 8,\n pitch: 0,\n bearing: 0,\n maxZoom: 24,\n style: normalizeStyle(props.mapStyle),\n interactive: false,\n trackResize: false,\n attributionControl: props.attributionControl,\n preserveDrawingBuffer: props.preserveDrawingBuffer\n };\n\n if (props.transformRequest) {\n mapOptions.transformRequest = props.transformRequest;\n }\n\n this._map = new this.mapboxgl.Map(Object.assign({}, mapOptions, props.mapOptions));\n\n this._map.once(\'load\', props.onLoad);\n\n this._map.on(\'error\', props.onError);\n }\n\n return this;\n }\n }, {\n key: "_destroy",\n value: function _destroy() {\n if (!this._map) {\n return;\n }\n\n if (!Mapbox.savedMap) {\n Mapbox.savedMap = this._map;\n\n this._map.off(\'load\', this.props.onLoad);\n\n this._map.off(\'error\', this.props.onError);\n\n this._map.off(\'styledata\', this._fireLoadEvent);\n } else {\n this._map.remove();\n }\n\n this._map = null;\n }\n }, {\n key: "_initialize",\n value: function _initialize(props) {\n var _this2 = this;\n\n props = Object.assign({}, defaultProps, props);\n checkPropTypes(props, \'Mapbox\');\n this.mapboxgl.accessToken = props.mapboxApiAccessToken || defaultProps.mapboxApiAccessToken;\n this.mapboxgl.baseApiUrl = props.mapboxApiUrl;\n\n this._create(props);\n\n var _props = props,\n container = _props.container;\n Object.defineProperty(container, \'offsetWidth\', {\n get: function get() {\n return _this2.width;\n }\n });\n Object.defineProperty(container, \'clientWidth\', {\n get: function get() {\n return _this2.width;\n }\n });\n Object.defineProperty(container, \'offsetHeight\', {\n get: function get() {\n return _this2.height;\n }\n });\n Object.defineProperty(container, \'clientHeight\', {\n get: function get() {\n return _this2.height;\n }\n });\n\n var canvas = this._map.getCanvas();\n\n if (canvas) {\n canvas.style.outline = \'none\';\n }\n\n this._updateMapViewport({}, props);\n\n this._updateMapSize({}, props);\n\n this.props = props;\n }\n }, {\n key: "_update",\n value: function _update(oldProps, newProps) {\n if (!this._map) {\n return;\n }\n\n newProps = Object.assign({}, this.props, newProps);\n checkPropTypes(newProps, \'Mapbox\');\n\n var viewportChanged = this._updateMapViewport(oldProps, newProps);\n\n var sizeChanged = this._updateMapSize(oldProps, newProps);\n\n this._updateMapStyle(oldProps, newProps);\n\n if (!newProps.asyncRender && (viewportChanged || sizeChanged)) {\n this.redraw();\n }\n\n this.props = newProps;\n }\n }, {\n key: "_updateMapStyle",\n value: function _updateMapStyle(oldProps, newProps) {\n var styleChanged = oldProps.mapStyle !== newProps.mapStyle;\n\n if (styleChanged) {\n this._map.setStyle(normalizeStyle(newProps.mapStyle), {\n diff: !newProps.preventStyleDiffing\n });\n }\n }\n }, {\n key: "_updateMapSize",\n value: function _updateMapSize(oldProps, newProps) {\n var sizeChanged = oldProps.width !== newProps.width || oldProps.height !== newProps.height;\n\n if (sizeChanged) {\n this.width = newProps.width;\n this.height = newProps.height;\n\n this._map.resize();\n }\n\n return sizeChanged;\n }\n }, {\n key: "_updateMapViewport",\n value: function _updateMapViewport(oldProps, newProps) {\n var oldViewState = this._getViewState(oldProps);\n\n var newViewState = this._getViewState(newProps);\n\n var viewportChanged = newViewState.latitude !== oldViewState.latitude || newViewState.longitude !== oldViewState.longitude || newViewState.zoom !== oldViewState.zoom || newViewState.pitch !== oldViewState.pitch || newViewState.bearing !== oldViewState.bearing || newViewState.altitude !== oldViewState.altitude;\n\n if (viewportChanged) {\n this._map.jumpTo(this._viewStateToMapboxProps(newViewState));\n\n if (newViewState.altitude !== oldViewState.altitude) {\n this._map.transform.altitude = newViewState.altitude;\n }\n }\n\n return viewportChanged;\n }\n }, {\n key: "_getViewState",\n value: function _getViewState(props) {\n var _ref = props.viewState || props,\n longitude = _ref.longitude,\n latitude = _ref.latitude,\n zoom = _ref.zoom,\n _ref$pitch = _ref.pitch,\n pitch = _ref$pitch === void 0 ? 0 : _ref$pitch,\n _ref$bearing = _ref.bearing,\n bearing = _ref$bearing === void 0 ? 0 : _ref$bearing,\n _ref$altitude = _ref.altitude,\n altitude = _ref$altitude === void 0 ? 1.5 : _ref$altitude;\n\n return {\n longitude: longitude,\n latitude: latitude,\n zoom: zoom,\n pitch: pitch,\n bearing: bearing,\n altitude: altitude\n };\n }\n }, {\n key: "_checkStyleSheet",\n value: function _checkStyleSheet() {\n var mapboxVersion = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \'0.47.0\';\n\n if (typeof document_ === \'undefined\') {\n return;\n }\n\n try {\n var testElement = document_.createElement(\'div\');\n testElement.className = \'mapboxgl-map\';\n testElement.style.display = \'none\';\n document_.body.appendChild(testElement);\n var isCssLoaded = window.getComputedStyle(testElement).position !== \'static\';\n\n if (!isCssLoaded) {\n var link = document_.createElement(\'link\');\n link.setAttribute(\'rel\', \'stylesheet\');\n link.setAttribute(\'type\', \'text/css\');\n link.setAttribute(\'href\', "https://api.tiles.mapbox.com/mapbox-gl-js/v".concat(mapboxVersion, "/mapbox-gl.css"));\n document_.head.appendChild(link);\n }\n } catch (error) {}\n }\n }, {\n key: "_viewStateToMapboxProps",\n value: function _viewStateToMapboxProps(viewState) {\n return {\n center: [viewState.longitude, viewState.latitude],\n zoom: viewState.zoom,\n bearing: viewState.bearing,\n pitch: viewState.pitch\n };\n }\n }]);\n\n return Mapbox;\n}();\n\n_defineProperty(Mapbox, "initialized", false);\n\n_defineProperty(Mapbox, "propTypes", propTypes);\n\n_defineProperty(Mapbox, "defaultProps", defaultProps);\n\n_defineProperty(Mapbox, "savedMap", null);\n\n\n// EXTERNAL MODULE: ./node_modules/maplibre-gl/dist/maplibre-gl.js\nvar maplibre_gl = __webpack_require__(9910);\nvar maplibre_gl_default = /*#__PURE__*/__webpack_require__.n(maplibre_gl);\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/utils/mapboxgl.browser.js\n\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/utils/math-utils.js\nvar math_utils_EPSILON = 1e-7;\n\nfunction isArray(value) {\n return Array.isArray(value) || ArrayBuffer.isView(value);\n}\n\nfunction math_utils_equals(a, b) {\n if (a === b) {\n return true;\n }\n\n if (isArray(a) && isArray(b)) {\n if (a.length !== b.length) {\n return false;\n }\n\n for (var i = 0; i < a.length; ++i) {\n if (!math_utils_equals(a[i], b[i])) {\n return false;\n }\n }\n\n return true;\n }\n\n return Math.abs(a - b) <= math_utils_EPSILON;\n}\nfunction clamp(value, min, max) {\n return Math.max(min, Math.min(max, value));\n}\nfunction utils_math_utils_lerp(a, b, t) {\n if (isArray(a)) {\n return a.map(function (ai, i) {\n return utils_math_utils_lerp(ai, b[i], t);\n });\n }\n\n return t * b + (1 - t) * a;\n}\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/utils/assert.js\nfunction utils_assert_assert(condition, message) {\n if (!condition) {\n throw new Error(message || \'react-map-gl: assertion failed.\');\n }\n}\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/utils/map-state.js\n\n\n\n\n\nfunction map_state_ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction map_state_objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n map_state_ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n map_state_ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\n\n\n\nvar MAPBOX_LIMITS = {\n minZoom: 0,\n maxZoom: 24,\n minPitch: 0,\n maxPitch: 85\n};\nvar DEFAULT_STATE = {\n pitch: 0,\n bearing: 0,\n altitude: 1.5\n};\nvar PITCH_MOUSE_THRESHOLD = 5;\nvar PITCH_ACCEL = 1.2;\n\nvar MapState = function () {\n function MapState(_ref) {\n var width = _ref.width,\n height = _ref.height,\n latitude = _ref.latitude,\n longitude = _ref.longitude,\n zoom = _ref.zoom,\n _ref$bearing = _ref.bearing,\n bearing = _ref$bearing === void 0 ? DEFAULT_STATE.bearing : _ref$bearing,\n _ref$pitch = _ref.pitch,\n pitch = _ref$pitch === void 0 ? DEFAULT_STATE.pitch : _ref$pitch,\n _ref$altitude = _ref.altitude,\n altitude = _ref$altitude === void 0 ? DEFAULT_STATE.altitude : _ref$altitude,\n _ref$maxZoom = _ref.maxZoom,\n maxZoom = _ref$maxZoom === void 0 ? MAPBOX_LIMITS.maxZoom : _ref$maxZoom,\n _ref$minZoom = _ref.minZoom,\n minZoom = _ref$minZoom === void 0 ? MAPBOX_LIMITS.minZoom : _ref$minZoom,\n _ref$maxPitch = _ref.maxPitch,\n maxPitch = _ref$maxPitch === void 0 ? MAPBOX_LIMITS.maxPitch : _ref$maxPitch,\n _ref$minPitch = _ref.minPitch,\n minPitch = _ref$minPitch === void 0 ? MAPBOX_LIMITS.minPitch : _ref$minPitch,\n transitionDuration = _ref.transitionDuration,\n transitionEasing = _ref.transitionEasing,\n transitionInterpolator = _ref.transitionInterpolator,\n transitionInterruption = _ref.transitionInterruption,\n startPanLngLat = _ref.startPanLngLat,\n startZoomLngLat = _ref.startZoomLngLat,\n startRotatePos = _ref.startRotatePos,\n startBearing = _ref.startBearing,\n startPitch = _ref.startPitch,\n startZoom = _ref.startZoom;\n\n _classCallCheck(this, MapState);\n\n utils_assert_assert(Number.isFinite(width), \'`width` must be supplied\');\n utils_assert_assert(Number.isFinite(height), \'`height` must be supplied\');\n utils_assert_assert(Number.isFinite(longitude), \'`longitude` must be supplied\');\n utils_assert_assert(Number.isFinite(latitude), \'`latitude` must be supplied\');\n utils_assert_assert(Number.isFinite(zoom), \'`zoom` must be supplied\');\n this._viewportProps = this._applyConstraints({\n width: width,\n height: height,\n latitude: latitude,\n longitude: longitude,\n zoom: zoom,\n bearing: bearing,\n pitch: pitch,\n altitude: altitude,\n maxZoom: maxZoom,\n minZoom: minZoom,\n maxPitch: maxPitch,\n minPitch: minPitch,\n transitionDuration: transitionDuration,\n transitionEasing: transitionEasing,\n transitionInterpolator: transitionInterpolator,\n transitionInterruption: transitionInterruption\n });\n this._state = {\n startPanLngLat: startPanLngLat,\n startZoomLngLat: startZoomLngLat,\n startRotatePos: startRotatePos,\n startBearing: startBearing,\n startPitch: startPitch,\n startZoom: startZoom\n };\n }\n\n _createClass(MapState, [{\n key: "getViewportProps",\n value: function getViewportProps() {\n return this._viewportProps;\n }\n }, {\n key: "getState",\n value: function getState() {\n return this._state;\n }\n }, {\n key: "panStart",\n value: function panStart(_ref2) {\n var pos = _ref2.pos;\n return this._getUpdatedMapState({\n startPanLngLat: this._unproject(pos)\n });\n }\n }, {\n key: "pan",\n value: function pan(_ref3) {\n var pos = _ref3.pos,\n startPos = _ref3.startPos;\n\n var startPanLngLat = this._state.startPanLngLat || this._unproject(startPos);\n\n if (!startPanLngLat) {\n return this;\n }\n\n var _this$_calculateNewLn = this._calculateNewLngLat({\n startPanLngLat: startPanLngLat,\n pos: pos\n }),\n _this$_calculateNewLn2 = slicedToArray_slicedToArray(_this$_calculateNewLn, 2),\n longitude = _this$_calculateNewLn2[0],\n latitude = _this$_calculateNewLn2[1];\n\n return this._getUpdatedMapState({\n longitude: longitude,\n latitude: latitude\n });\n }\n }, {\n key: "panEnd",\n value: function panEnd() {\n return this._getUpdatedMapState({\n startPanLngLat: null\n });\n }\n }, {\n key: "rotateStart",\n value: function rotateStart(_ref4) {\n var pos = _ref4.pos;\n return this._getUpdatedMapState({\n startRotatePos: pos,\n startBearing: this._viewportProps.bearing,\n startPitch: this._viewportProps.pitch\n });\n }\n }, {\n key: "rotate",\n value: function rotate(_ref5) {\n var pos = _ref5.pos,\n _ref5$deltaAngleX = _ref5.deltaAngleX,\n deltaAngleX = _ref5$deltaAngleX === void 0 ? 0 : _ref5$deltaAngleX,\n _ref5$deltaAngleY = _ref5.deltaAngleY,\n deltaAngleY = _ref5$deltaAngleY === void 0 ? 0 : _ref5$deltaAngleY;\n var _this$_state = this._state,\n startRotatePos = _this$_state.startRotatePos,\n startBearing = _this$_state.startBearing,\n startPitch = _this$_state.startPitch;\n\n if (!Number.isFinite(startBearing) || !Number.isFinite(startPitch)) {\n return this;\n }\n\n var newRotation;\n\n if (pos) {\n newRotation = this._calculateNewPitchAndBearing(map_state_objectSpread(map_state_objectSpread({}, this._getRotationParams(pos, startRotatePos)), {}, {\n startBearing: startBearing,\n startPitch: startPitch\n }));\n } else {\n newRotation = {\n bearing: startBearing + deltaAngleX,\n pitch: startPitch + deltaAngleY\n };\n }\n\n return this._getUpdatedMapState(newRotation);\n }\n }, {\n key: "rotateEnd",\n value: function rotateEnd() {\n return this._getUpdatedMapState({\n startBearing: null,\n startPitch: null\n });\n }\n }, {\n key: "zoomStart",\n value: function zoomStart(_ref6) {\n var pos = _ref6.pos;\n return this._getUpdatedMapState({\n startZoomLngLat: this._unproject(pos),\n startZoom: this._viewportProps.zoom\n });\n }\n }, {\n key: "zoom",\n value: function zoom(_ref7) {\n var pos = _ref7.pos,\n startPos = _ref7.startPos,\n scale = _ref7.scale;\n utils_assert_assert(scale > 0, \'`scale` must be a positive number\');\n var _this$_state2 = this._state,\n startZoom = _this$_state2.startZoom,\n startZoomLngLat = _this$_state2.startZoomLngLat;\n\n if (!Number.isFinite(startZoom)) {\n startZoom = this._viewportProps.zoom;\n startZoomLngLat = this._unproject(startPos) || this._unproject(pos);\n }\n\n utils_assert_assert(startZoomLngLat, \'`startZoomLngLat` prop is required \' + \'for zoom behavior to calculate where to position the map.\');\n\n var zoom = this._calculateNewZoom({\n scale: scale,\n startZoom: startZoom || 0\n });\n\n var zoomedViewport = new WebMercatorViewport(Object.assign({}, this._viewportProps, {\n zoom: zoom\n }));\n\n var _zoomedViewport$getMa = zoomedViewport.getMapCenterByLngLatPosition({\n lngLat: startZoomLngLat,\n pos: pos\n }),\n _zoomedViewport$getMa2 = slicedToArray_slicedToArray(_zoomedViewport$getMa, 2),\n longitude = _zoomedViewport$getMa2[0],\n latitude = _zoomedViewport$getMa2[1];\n\n return this._getUpdatedMapState({\n zoom: zoom,\n longitude: longitude,\n latitude: latitude\n });\n }\n }, {\n key: "zoomEnd",\n value: function zoomEnd() {\n return this._getUpdatedMapState({\n startZoomLngLat: null,\n startZoom: null\n });\n }\n }, {\n key: "_getUpdatedMapState",\n value: function _getUpdatedMapState(newProps) {\n return new MapState(Object.assign({}, this._viewportProps, this._state, newProps));\n }\n }, {\n key: "_applyConstraints",\n value: function _applyConstraints(props) {\n var maxZoom = props.maxZoom,\n minZoom = props.minZoom,\n zoom = props.zoom;\n props.zoom = clamp(zoom, minZoom, maxZoom);\n var maxPitch = props.maxPitch,\n minPitch = props.minPitch,\n pitch = props.pitch;\n props.pitch = clamp(pitch, minPitch, maxPitch);\n Object.assign(props, normalizeViewportProps(props));\n return props;\n }\n }, {\n key: "_unproject",\n value: function _unproject(pos) {\n var viewport = new WebMercatorViewport(this._viewportProps);\n return pos && viewport.unproject(pos);\n }\n }, {\n key: "_calculateNewLngLat",\n value: function _calculateNewLngLat(_ref8) {\n var startPanLngLat = _ref8.startPanLngLat,\n pos = _ref8.pos;\n var viewport = new WebMercatorViewport(this._viewportProps);\n return viewport.getMapCenterByLngLatPosition({\n lngLat: startPanLngLat,\n pos: pos\n });\n }\n }, {\n key: "_calculateNewZoom",\n value: function _calculateNewZoom(_ref9) {\n var scale = _ref9.scale,\n startZoom = _ref9.startZoom;\n var _this$_viewportProps = this._viewportProps,\n maxZoom = _this$_viewportProps.maxZoom,\n minZoom = _this$_viewportProps.minZoom;\n var zoom = startZoom + Math.log2(scale);\n return clamp(zoom, minZoom, maxZoom);\n }\n }, {\n key: "_calculateNewPitchAndBearing",\n value: function _calculateNewPitchAndBearing(_ref10) {\n var deltaScaleX = _ref10.deltaScaleX,\n deltaScaleY = _ref10.deltaScaleY,\n startBearing = _ref10.startBearing,\n startPitch = _ref10.startPitch;\n deltaScaleY = clamp(deltaScaleY, -1, 1);\n var _this$_viewportProps2 = this._viewportProps,\n minPitch = _this$_viewportProps2.minPitch,\n maxPitch = _this$_viewportProps2.maxPitch;\n var bearing = startBearing + 180 * deltaScaleX;\n var pitch = startPitch;\n\n if (deltaScaleY > 0) {\n pitch = startPitch + deltaScaleY * (maxPitch - startPitch);\n } else if (deltaScaleY < 0) {\n pitch = startPitch - deltaScaleY * (minPitch - startPitch);\n }\n\n return {\n pitch: pitch,\n bearing: bearing\n };\n }\n }, {\n key: "_getRotationParams",\n value: function _getRotationParams(pos, startPos) {\n var deltaX = pos[0] - startPos[0];\n var deltaY = pos[1] - startPos[1];\n var centerY = pos[1];\n var startY = startPos[1];\n var _this$_viewportProps3 = this._viewportProps,\n width = _this$_viewportProps3.width,\n height = _this$_viewportProps3.height;\n var deltaScaleX = deltaX / width;\n var deltaScaleY = 0;\n\n if (deltaY > 0) {\n if (Math.abs(height - startY) > PITCH_MOUSE_THRESHOLD) {\n deltaScaleY = deltaY / (startY - height) * PITCH_ACCEL;\n }\n } else if (deltaY < 0) {\n if (startY > PITCH_MOUSE_THRESHOLD) {\n deltaScaleY = 1 - centerY / startY;\n }\n }\n\n deltaScaleY = Math.min(1, Math.max(-1, deltaScaleY));\n return {\n deltaScaleX: deltaScaleX,\n deltaScaleY: deltaScaleY\n };\n }\n }]);\n\n return MapState;\n}();\n\n\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/utils/map-constraints.js\n\n\nfunction decapitalize(s) {\n return s[0].toLowerCase() + s.slice(1);\n}\n\nfunction checkVisibilityConstraints(props) {\n var constraints = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : MAPBOX_LIMITS;\n\n for (var constraintName in constraints) {\n var type = constraintName.slice(0, 3);\n var propName = decapitalize(constraintName.slice(3));\n\n if (type === \'min\' && props[propName] < constraints[constraintName]) {\n return false;\n }\n\n if (type === \'max\' && props[propName] > constraints[constraintName]) {\n return false;\n }\n }\n\n return true;\n}\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/components/map-context.js\n\n\n\nfunction map_context_ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction map_context_objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n map_context_ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n map_context_ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\n\n\nvar MapContext = (0,react.createContext)({\n viewport: null,\n map: null,\n container: null,\n onViewportChange: null,\n onViewStateChange: null,\n eventManager: null\n});\nvar MapContextProvider = MapContext.Provider;\n\nfunction WrappedProvider(_ref) {\n var value = _ref.value,\n children = _ref.children;\n\n var _useState = (0,react.useState)(null),\n _useState2 = slicedToArray_slicedToArray(_useState, 2),\n map = _useState2[0],\n setMap = _useState2[1];\n\n var context = (0,react.useContext)(MapContext);\n value = map_context_objectSpread(map_context_objectSpread({\n setMap: setMap\n }, context), {}, {\n map: context && context.map || map\n }, value);\n return react.createElement(MapContextProvider, {\n value: value\n }, children);\n}\n\nMapContext.Provider = WrappedProvider;\n/* harmony default export */ var map_context = (MapContext);\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/utils/use-isomorphic-layout-effect.js\n\nvar useIsomorphicLayoutEffect = typeof window !== \'undefined\' ? react.useLayoutEffect : react.useEffect;\n/* harmony default export */ var use_isomorphic_layout_effect = (useIsomorphicLayoutEffect);\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/utils/terrain.js\nfunction getTerrainElevation(map, _ref) {\n var longitude = _ref.longitude,\n latitude = _ref.latitude;\n\n if (map && map.queryTerrainElevation) {\n return map.queryTerrainElevation([longitude, latitude]) || 0;\n }\n\n return 0;\n}\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/components/static-map.js\n\n\n\nfunction static_map_ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction static_map_objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n static_map_ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n static_map_ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\n\n\n\n\n\n\n\n\n\n\n\nvar TOKEN_DOC_URL = \'https://visgl.github.io/react-map-gl/docs/get-started/mapbox-tokens\';\nvar NO_TOKEN_WARNING = \'A valid API access token is required to use Mapbox data\';\n\nfunction static_map_noop() {}\n\nfunction getViewport(_ref) {\n var map = _ref.map,\n props = _ref.props,\n width = _ref.width,\n height = _ref.height;\n\n var viewportProps = static_map_objectSpread(static_map_objectSpread(static_map_objectSpread({}, props), props.viewState), {}, {\n width: width,\n height: height\n });\n\n viewportProps.position = [0, 0, getTerrainElevation(map, viewportProps)];\n return new WebMercatorViewport(viewportProps);\n}\nvar UNAUTHORIZED_ERROR_CODE = 401;\nvar CONTAINER_STYLE = {\n position: \'absolute\',\n width: \'100%\',\n height: \'100%\',\n overflow: \'hidden\'\n};\nvar static_map_defaultProps = Object.assign({}, Mapbox.defaultProps, {\n disableTokenWarning: false,\n visible: true,\n onResize: static_map_noop,\n className: \'\',\n style: null,\n visibilityConstraints: MAPBOX_LIMITS\n});\n\nfunction NoTokenWarning() {\n var style = {\n position: \'absolute\',\n left: 0,\n top: 0\n };\n return react.createElement("div", {\n key: "warning",\n id: "no-token-warning",\n style: style\n }, react.createElement("h3", {\n key: "header"\n }, NO_TOKEN_WARNING), react.createElement("div", {\n key: "text"\n }, "For information on setting up your basemap, read"), react.createElement("a", {\n key: "link",\n href: TOKEN_DOC_URL\n }, "Note on Map Tokens"));\n}\n\nfunction getRefHandles(mapboxRef) {\n return {\n getMap: function getMap() {\n return mapboxRef.current && mapboxRef.current.getMap();\n },\n queryRenderedFeatures: function queryRenderedFeatures(geometry) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var map = mapboxRef.current && mapboxRef.current.getMap();\n return map && map.queryRenderedFeatures(geometry, options);\n }\n };\n}\n\nvar StaticMap = (0,react.forwardRef)(function (props, ref) {\n var _useState = (0,react.useState)(true),\n _useState2 = slicedToArray_slicedToArray(_useState, 2),\n accessTokenValid = _useState2[0],\n setTokenState = _useState2[1];\n\n var _useState3 = (0,react.useState)({\n width: 0,\n height: 0\n }),\n _useState4 = slicedToArray_slicedToArray(_useState3, 2),\n size = _useState4[0],\n setSize = _useState4[1];\n\n var mapboxRef = (0,react.useRef)(null);\n var mapDivRef = (0,react.useRef)(null);\n var containerRef = (0,react.useRef)(null);\n var overlayRef = (0,react.useRef)(null);\n var context = (0,react.useContext)(map_context);\n use_isomorphic_layout_effect(function () {\n if (!StaticMap.supported()) {\n return undefined;\n }\n\n var mapbox = new Mapbox(static_map_objectSpread(static_map_objectSpread(static_map_objectSpread({}, props), size), {}, {\n mapboxgl: (maplibre_gl_default()),\n container: mapDivRef.current,\n onError: function onError(evt) {\n var statusCode = evt.error && evt.error.status || evt.status;\n\n if (statusCode === UNAUTHORIZED_ERROR_CODE && accessTokenValid) {\n console.error(NO_TOKEN_WARNING);\n setTokenState(false);\n }\n\n props.onError(evt);\n }\n }));\n mapboxRef.current = mapbox;\n\n if (context && context.setMap) {\n context.setMap(mapbox.getMap());\n }\n\n var resizeObserver = new ResizeObserver_es(function (entries) {\n if (entries[0].contentRect) {\n var _entries$0$contentRec = entries[0].contentRect,\n _width = _entries$0$contentRec.width,\n _height = _entries$0$contentRec.height;\n setSize({\n width: _width,\n height: _height\n });\n props.onResize({\n width: _width,\n height: _height\n });\n }\n });\n resizeObserver.observe(containerRef.current);\n return function () {\n mapbox.finalize();\n mapboxRef.current = null;\n resizeObserver.disconnect();\n };\n }, []);\n use_isomorphic_layout_effect(function () {\n if (mapboxRef.current) {\n mapboxRef.current.setProps(static_map_objectSpread(static_map_objectSpread({}, props), size));\n }\n });\n var map = mapboxRef.current && mapboxRef.current.getMap();\n (0,react.useImperativeHandle)(ref, function () {\n return getRefHandles(mapboxRef);\n }, []);\n var preventScroll = (0,react.useCallback)(function (_ref2) {\n var target = _ref2.target;\n\n if (target === overlayRef.current) {\n target.scrollTo(0, 0);\n }\n }, []);\n var overlays = map && react.createElement(MapContextProvider, {\n value: static_map_objectSpread(static_map_objectSpread({}, context), {}, {\n viewport: context.viewport || getViewport(static_map_objectSpread({\n map: map,\n props: props\n }, size)),\n map: map,\n container: context.container || containerRef.current\n })\n }, react.createElement("div", {\n key: "map-overlays",\n className: "overlays",\n ref: overlayRef,\n style: CONTAINER_STYLE,\n onScroll: preventScroll\n }, props.children));\n var className = props.className,\n width = props.width,\n height = props.height,\n style = props.style,\n visibilityConstraints = props.visibilityConstraints;\n var mapContainerStyle = Object.assign({\n position: \'relative\'\n }, style, {\n width: width,\n height: height\n });\n var visible = props.visible && checkVisibilityConstraints(props.viewState || props, visibilityConstraints);\n var mapStyle = Object.assign({}, CONTAINER_STYLE, {\n visibility: visible ? \'inherit\' : \'hidden\'\n });\n return react.createElement("div", {\n key: "map-container",\n ref: containerRef,\n style: mapContainerStyle\n }, react.createElement("div", {\n key: "map-mapbox",\n ref: mapDivRef,\n style: mapStyle,\n className: className\n }), overlays, !accessTokenValid && !props.disableTokenWarning && react.createElement(NoTokenWarning, null));\n});\n\nStaticMap.supported = function () {\n return (maplibre_gl_default()) && maplibre_gl_default().supported();\n};\n\nStaticMap.defaultProps = static_map_defaultProps;\n/* harmony default export */ var static_map = (StaticMap);\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/utils/transition/transition-interpolator.js\n\n\n\n\nfunction transition_interpolator_createForOfIteratorHelper(o, allowArrayLike) {\n var it;\n\n if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) {\n if (Array.isArray(o) || (it = transition_interpolator_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {\n if (it) o = it;\n var i = 0;\n\n var F = function F() {};\n\n return {\n s: F,\n n: function n() {\n if (i >= o.length) return {\n done: true\n };\n return {\n done: false,\n value: o[i++]\n };\n },\n e: function e(_e) {\n throw _e;\n },\n f: F\n };\n }\n\n throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");\n }\n\n var normalCompletion = true,\n didErr = false,\n err;\n return {\n s: function s() {\n it = o[Symbol.iterator]();\n },\n n: function n() {\n var step = it.next();\n normalCompletion = step.done;\n return step;\n },\n e: function e(_e2) {\n didErr = true;\n err = _e2;\n },\n f: function f() {\n try {\n if (!normalCompletion && it["return"] != null) it["return"]();\n } finally {\n if (didErr) throw err;\n }\n }\n };\n}\n\nfunction transition_interpolator_unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === "string") return transition_interpolator_arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === "Object" && o.constructor) n = o.constructor.name;\n if (n === "Map" || n === "Set") return Array.from(o);\n if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return transition_interpolator_arrayLikeToArray(o, minLen);\n}\n\nfunction transition_interpolator_arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}\n\n\n\n\nvar TransitionInterpolator = function () {\n function TransitionInterpolator() {\n _classCallCheck(this, TransitionInterpolator);\n\n _defineProperty(this, "propNames", []);\n }\n\n _createClass(TransitionInterpolator, [{\n key: "arePropsEqual",\n value: function arePropsEqual(currentProps, nextProps) {\n var _iterator = transition_interpolator_createForOfIteratorHelper(this.propNames || []),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var key = _step.value;\n\n if (!math_utils_equals(currentProps[key], nextProps[key])) {\n return false;\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n return true;\n }\n }, {\n key: "initializeProps",\n value: function initializeProps(startProps, endProps) {\n return {\n start: startProps,\n end: endProps\n };\n }\n }, {\n key: "interpolateProps",\n value: function interpolateProps(startProps, endProps, t) {\n utils_assert_assert(false, \'interpolateProps is not implemented\');\n }\n }, {\n key: "getDuration",\n value: function getDuration(startProps, endProps) {\n return endProps.transitionDuration;\n }\n }]);\n\n return TransitionInterpolator;\n}();\n\n\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called");\n }\n\n return self;\n}\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js\nvar setPrototypeOf = __webpack_require__(4665);\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/inherits.js\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== "function" && superClass !== null) {\n throw new TypeError("Super expression must either be null or a function");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) (0,setPrototypeOf/* default */.Z)(subClass, superClass);\n}\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/typeof.js\nvar helpers_typeof = __webpack_require__(8);\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js\n\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (helpers_typeof(call) === "object" || typeof call === "function")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/utils/transition/transition-utils.js\nvar WRAPPED_ANGULAR_PROPS = {\n longitude: 1,\n bearing: 1\n};\nfunction transition_utils_mod(value, divisor) {\n var modulus = value % divisor;\n return modulus < 0 ? divisor + modulus : modulus;\n}\nfunction isValid(prop) {\n return Number.isFinite(prop) || Array.isArray(prop);\n}\n\nfunction isWrappedAngularProp(propName) {\n return propName in WRAPPED_ANGULAR_PROPS;\n}\n\nfunction getEndValueByShortestPath(propName, startValue, endValue) {\n if (isWrappedAngularProp(propName) && Math.abs(endValue - startValue) > 180) {\n endValue = endValue < 0 ? endValue + 360 : endValue - 360;\n }\n\n return endValue;\n}\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/utils/transition/viewport-fly-to-interpolator.js\n\n\n\n\n\n\n\n\nfunction viewport_fly_to_interpolator_createForOfIteratorHelper(o, allowArrayLike) {\n var it;\n\n if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) {\n if (Array.isArray(o) || (it = viewport_fly_to_interpolator_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {\n if (it) o = it;\n var i = 0;\n\n var F = function F() {};\n\n return {\n s: F,\n n: function n() {\n if (i >= o.length) return {\n done: true\n };\n return {\n done: false,\n value: o[i++]\n };\n },\n e: function e(_e) {\n throw _e;\n },\n f: F\n };\n }\n\n throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");\n }\n\n var normalCompletion = true,\n didErr = false,\n err;\n return {\n s: function s() {\n it = o[Symbol.iterator]();\n },\n n: function n() {\n var step = it.next();\n normalCompletion = step.done;\n return step;\n },\n e: function e(_e2) {\n didErr = true;\n err = _e2;\n },\n f: function f() {\n try {\n if (!normalCompletion && it["return"] != null) it["return"]();\n } finally {\n if (didErr) throw err;\n }\n }\n };\n}\n\nfunction viewport_fly_to_interpolator_unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === "string") return viewport_fly_to_interpolator_arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === "Object" && o.constructor) n = o.constructor.name;\n if (n === "Map" || n === "Set") return Array.from(o);\n if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return viewport_fly_to_interpolator_arrayLikeToArray(o, minLen);\n}\n\nfunction viewport_fly_to_interpolator_arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}\n\nfunction _createSuper(Derived) {\n var hasNativeReflectConstruct = _isNativeReflectConstruct();\n\n return function _createSuperInternal() {\n var Super = _getPrototypeOf(Derived),\n result;\n\n if (hasNativeReflectConstruct) {\n var NewTarget = _getPrototypeOf(this).constructor;\n\n result = Reflect.construct(Super, arguments, NewTarget);\n } else {\n result = Super.apply(this, arguments);\n }\n\n return _possibleConstructorReturn(this, result);\n };\n}\n\nfunction _isNativeReflectConstruct() {\n if (typeof Reflect === "undefined" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === "function") return true;\n\n try {\n Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}\n\n\n\n\n\n\nvar viewport_fly_to_interpolator_VIEWPORT_TRANSITION_PROPS = [\'longitude\', \'latitude\', \'zoom\', \'bearing\', \'pitch\'];\nvar REQUIRED_PROPS = [\'latitude\', \'longitude\', \'zoom\', \'width\', \'height\'];\nvar LINEARLY_INTERPOLATED_PROPS = [\'bearing\', \'pitch\'];\nvar viewport_fly_to_interpolator_DEFAULT_OPTS = {\n speed: 1.2,\n curve: 1.414\n};\n\nvar ViewportFlyToInterpolator = function (_TransitionInterpolat) {\n _inherits(ViewportFlyToInterpolator, _TransitionInterpolat);\n\n var _super = _createSuper(ViewportFlyToInterpolator);\n\n function ViewportFlyToInterpolator() {\n var _this;\n\n var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n _classCallCheck(this, ViewportFlyToInterpolator);\n\n _this = _super.call(this);\n\n _defineProperty(_assertThisInitialized(_this), "propNames", viewport_fly_to_interpolator_VIEWPORT_TRANSITION_PROPS);\n\n _this.props = Object.assign({}, viewport_fly_to_interpolator_DEFAULT_OPTS, props);\n return _this;\n }\n\n _createClass(ViewportFlyToInterpolator, [{\n key: "initializeProps",\n value: function initializeProps(startProps, endProps) {\n var startViewportProps = {};\n var endViewportProps = {};\n\n var _iterator = viewport_fly_to_interpolator_createForOfIteratorHelper(REQUIRED_PROPS),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var key = _step.value;\n var startValue = startProps[key];\n var endValue = endProps[key];\n utils_assert_assert(isValid(startValue) && isValid(endValue), "".concat(key, " must be supplied for transition"));\n startViewportProps[key] = startValue;\n endViewportProps[key] = getEndValueByShortestPath(key, startValue, endValue);\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n var _iterator2 = viewport_fly_to_interpolator_createForOfIteratorHelper(LINEARLY_INTERPOLATED_PROPS),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var _key = _step2.value;\n\n var _startValue = startProps[_key] || 0;\n\n var _endValue = endProps[_key] || 0;\n\n startViewportProps[_key] = _startValue;\n endViewportProps[_key] = getEndValueByShortestPath(_key, _startValue, _endValue);\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n return {\n start: startViewportProps,\n end: endViewportProps\n };\n }\n }, {\n key: "interpolateProps",\n value: function interpolateProps(startProps, endProps, t) {\n var viewport = flyToViewport(startProps, endProps, t, this.props);\n\n var _iterator3 = viewport_fly_to_interpolator_createForOfIteratorHelper(LINEARLY_INTERPOLATED_PROPS),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var key = _step3.value;\n viewport[key] = utils_math_utils_lerp(startProps[key], endProps[key], t);\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n\n return viewport;\n }\n }, {\n key: "getDuration",\n value: function getDuration(startProps, endProps) {\n var transitionDuration = endProps.transitionDuration;\n\n if (transitionDuration === \'auto\') {\n transitionDuration = getFlyToDuration(startProps, endProps, this.props);\n }\n\n return transitionDuration;\n }\n }]);\n\n return ViewportFlyToInterpolator;\n}(TransitionInterpolator);\n\n\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/utils/transition/linear-interpolator.js\n\n\n\n\n\n\n\nfunction linear_interpolator_createForOfIteratorHelper(o, allowArrayLike) {\n var it;\n\n if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) {\n if (Array.isArray(o) || (it = linear_interpolator_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {\n if (it) o = it;\n var i = 0;\n\n var F = function F() {};\n\n return {\n s: F,\n n: function n() {\n if (i >= o.length) return {\n done: true\n };\n return {\n done: false,\n value: o[i++]\n };\n },\n e: function e(_e) {\n throw _e;\n },\n f: F\n };\n }\n\n throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");\n }\n\n var normalCompletion = true,\n didErr = false,\n err;\n return {\n s: function s() {\n it = o[Symbol.iterator]();\n },\n n: function n() {\n var step = it.next();\n normalCompletion = step.done;\n return step;\n },\n e: function e(_e2) {\n didErr = true;\n err = _e2;\n },\n f: function f() {\n try {\n if (!normalCompletion && it["return"] != null) it["return"]();\n } finally {\n if (didErr) throw err;\n }\n }\n };\n}\n\nfunction linear_interpolator_unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === "string") return linear_interpolator_arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === "Object" && o.constructor) n = o.constructor.name;\n if (n === "Map" || n === "Set") return Array.from(o);\n if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return linear_interpolator_arrayLikeToArray(o, minLen);\n}\n\nfunction linear_interpolator_arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}\n\nfunction linear_interpolator_createSuper(Derived) {\n var hasNativeReflectConstruct = linear_interpolator_isNativeReflectConstruct();\n\n return function _createSuperInternal() {\n var Super = _getPrototypeOf(Derived),\n result;\n\n if (hasNativeReflectConstruct) {\n var NewTarget = _getPrototypeOf(this).constructor;\n\n result = Reflect.construct(Super, arguments, NewTarget);\n } else {\n result = Super.apply(this, arguments);\n }\n\n return _possibleConstructorReturn(this, result);\n };\n}\n\nfunction linear_interpolator_isNativeReflectConstruct() {\n if (typeof Reflect === "undefined" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === "function") return true;\n\n try {\n Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}\n\n\n\n\n\n\nvar linear_interpolator_VIEWPORT_TRANSITION_PROPS = [\'longitude\', \'latitude\', \'zoom\', \'bearing\', \'pitch\'];\n\nvar LinearInterpolator = function (_TransitionInterpolat) {\n _inherits(LinearInterpolator, _TransitionInterpolat);\n\n var _super = linear_interpolator_createSuper(LinearInterpolator);\n\n function LinearInterpolator() {\n var _this;\n\n var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n _classCallCheck(this, LinearInterpolator);\n\n _this = _super.call(this);\n\n if (Array.isArray(opts)) {\n opts = {\n transitionProps: opts\n };\n }\n\n _this.propNames = opts.transitionProps || linear_interpolator_VIEWPORT_TRANSITION_PROPS;\n\n if (opts.around) {\n _this.around = opts.around;\n }\n\n return _this;\n }\n\n _createClass(LinearInterpolator, [{\n key: "initializeProps",\n value: function initializeProps(startProps, endProps) {\n var startViewportProps = {};\n var endViewportProps = {};\n\n if (this.around) {\n startViewportProps.around = this.around;\n var aroundLngLat = new WebMercatorViewport(startProps).unproject(this.around);\n Object.assign(endViewportProps, endProps, {\n around: new WebMercatorViewport(endProps).project(aroundLngLat),\n aroundLngLat: aroundLngLat\n });\n }\n\n var _iterator = linear_interpolator_createForOfIteratorHelper(this.propNames),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var key = _step.value;\n var startValue = startProps[key];\n var endValue = endProps[key];\n utils_assert_assert(isValid(startValue) && isValid(endValue), "".concat(key, " must be supplied for transition"));\n startViewportProps[key] = startValue;\n endViewportProps[key] = getEndValueByShortestPath(key, startValue, endValue);\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n return {\n start: startViewportProps,\n end: endViewportProps\n };\n }\n }, {\n key: "interpolateProps",\n value: function interpolateProps(startProps, endProps, t) {\n var viewport = {};\n\n var _iterator2 = linear_interpolator_createForOfIteratorHelper(this.propNames),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var key = _step2.value;\n viewport[key] = utils_math_utils_lerp(startProps[key], endProps[key], t);\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n if (endProps.around) {\n var _WebMercatorViewport$ = new WebMercatorViewport(Object.assign({}, endProps, viewport)).getMapCenterByLngLatPosition({\n lngLat: endProps.aroundLngLat,\n pos: utils_math_utils_lerp(startProps.around, endProps.around, t)\n }),\n _WebMercatorViewport$2 = slicedToArray_slicedToArray(_WebMercatorViewport$, 2),\n longitude = _WebMercatorViewport$2[0],\n latitude = _WebMercatorViewport$2[1];\n\n viewport.longitude = longitude;\n viewport.latitude = latitude;\n }\n\n return viewport;\n }\n }]);\n\n return LinearInterpolator;\n}(TransitionInterpolator);\n\n\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/utils/transition/index.js\n\n\n\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/utils/transition-manager.js\n\n\n\n\n\n\n\nvar transition_manager_noop = function noop() {};\n\nfunction cropEasingFunction(easing, x0) {\n var y0 = easing(x0);\n return function (t) {\n return 1 / (1 - y0) * (easing(t * (1 - x0) + x0) - y0);\n };\n}\nvar TRANSITION_EVENTS = {\n BREAK: 1,\n SNAP_TO_END: 2,\n IGNORE: 3,\n UPDATE: 4\n};\nvar DEFAULT_PROPS = {\n transitionDuration: 0,\n transitionEasing: function transitionEasing(t) {\n return t;\n },\n transitionInterpolator: new LinearInterpolator(),\n transitionInterruption: TRANSITION_EVENTS.BREAK,\n onTransitionStart: transition_manager_noop,\n onTransitionInterrupt: transition_manager_noop,\n onTransitionEnd: transition_manager_noop\n};\n\nvar TransitionManager = function () {\n function TransitionManager() {\n var _this = this;\n\n var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n _classCallCheck(this, TransitionManager);\n\n _defineProperty(this, "_animationFrame", null);\n\n _defineProperty(this, "_onTransitionFrame", function () {\n _this._animationFrame = requestAnimationFrame(_this._onTransitionFrame);\n\n _this._updateViewport();\n });\n\n this.props = null;\n this.onViewportChange = opts.onViewportChange || transition_manager_noop;\n this.onStateChange = opts.onStateChange || transition_manager_noop;\n this.time = opts.getTime || Date.now;\n }\n\n _createClass(TransitionManager, [{\n key: "getViewportInTransition",\n value: function getViewportInTransition() {\n return this._animationFrame ? this.state.propsInTransition : null;\n }\n }, {\n key: "processViewportChange",\n value: function processViewportChange(nextProps) {\n var currentProps = this.props;\n this.props = nextProps;\n\n if (!currentProps || this._shouldIgnoreViewportChange(currentProps, nextProps)) {\n return false;\n }\n\n if (this._isTransitionEnabled(nextProps)) {\n var startProps = Object.assign({}, currentProps);\n var endProps = Object.assign({}, nextProps);\n\n if (this._isTransitionInProgress()) {\n currentProps.onTransitionInterrupt();\n\n if (this.state.interruption === TRANSITION_EVENTS.SNAP_TO_END) {\n Object.assign(startProps, this.state.endProps);\n } else {\n Object.assign(startProps, this.state.propsInTransition);\n }\n\n if (this.state.interruption === TRANSITION_EVENTS.UPDATE) {\n var currentTime = this.time();\n var x0 = (currentTime - this.state.startTime) / this.state.duration;\n endProps.transitionDuration = this.state.duration - (currentTime - this.state.startTime);\n endProps.transitionEasing = cropEasingFunction(this.state.easing, x0);\n endProps.transitionInterpolator = startProps.transitionInterpolator;\n }\n }\n\n endProps.onTransitionStart();\n\n this._triggerTransition(startProps, endProps);\n\n return true;\n }\n\n if (this._isTransitionInProgress()) {\n currentProps.onTransitionInterrupt();\n\n this._endTransition();\n }\n\n return false;\n }\n }, {\n key: "_isTransitionInProgress",\n value: function _isTransitionInProgress() {\n return Boolean(this._animationFrame);\n }\n }, {\n key: "_isTransitionEnabled",\n value: function _isTransitionEnabled(props) {\n var transitionDuration = props.transitionDuration,\n transitionInterpolator = props.transitionInterpolator;\n return (transitionDuration > 0 || transitionDuration === \'auto\') && Boolean(transitionInterpolator);\n }\n }, {\n key: "_isUpdateDueToCurrentTransition",\n value: function _isUpdateDueToCurrentTransition(props) {\n if (this.state.propsInTransition) {\n return this.state.interpolator.arePropsEqual(props, this.state.propsInTransition);\n }\n\n return false;\n }\n }, {\n key: "_shouldIgnoreViewportChange",\n value: function _shouldIgnoreViewportChange(currentProps, nextProps) {\n if (!currentProps) {\n return true;\n }\n\n if (this._isTransitionInProgress()) {\n return this.state.interruption === TRANSITION_EVENTS.IGNORE || this._isUpdateDueToCurrentTransition(nextProps);\n }\n\n if (this._isTransitionEnabled(nextProps)) {\n return nextProps.transitionInterpolator.arePropsEqual(currentProps, nextProps);\n }\n\n return true;\n }\n }, {\n key: "_triggerTransition",\n value: function _triggerTransition(startProps, endProps) {\n utils_assert_assert(this._isTransitionEnabled(endProps));\n\n if (this._animationFrame) {\n cancelAnimationFrame(this._animationFrame);\n }\n\n var transitionInterpolator = endProps.transitionInterpolator;\n var duration = transitionInterpolator.getDuration ? transitionInterpolator.getDuration(startProps, endProps) : endProps.transitionDuration;\n\n if (duration === 0) {\n return;\n }\n\n var initialProps = endProps.transitionInterpolator.initializeProps(startProps, endProps);\n var interactionState = {\n inTransition: true,\n isZooming: startProps.zoom !== endProps.zoom,\n isPanning: startProps.longitude !== endProps.longitude || startProps.latitude !== endProps.latitude,\n isRotating: startProps.bearing !== endProps.bearing || startProps.pitch !== endProps.pitch\n };\n this.state = {\n duration: duration,\n easing: endProps.transitionEasing,\n interpolator: endProps.transitionInterpolator,\n interruption: endProps.transitionInterruption,\n startTime: this.time(),\n startProps: initialProps.start,\n endProps: initialProps.end,\n animation: null,\n propsInTransition: {}\n };\n\n this._onTransitionFrame();\n\n this.onStateChange(interactionState);\n }\n }, {\n key: "_endTransition",\n value: function _endTransition() {\n if (this._animationFrame) {\n cancelAnimationFrame(this._animationFrame);\n this._animationFrame = null;\n }\n\n this.onStateChange({\n inTransition: false,\n isZooming: false,\n isPanning: false,\n isRotating: false\n });\n }\n }, {\n key: "_updateViewport",\n value: function _updateViewport() {\n var currentTime = this.time();\n var _this$state = this.state,\n startTime = _this$state.startTime,\n duration = _this$state.duration,\n easing = _this$state.easing,\n interpolator = _this$state.interpolator,\n startProps = _this$state.startProps,\n endProps = _this$state.endProps;\n var shouldEnd = false;\n var t = (currentTime - startTime) / duration;\n\n if (t >= 1) {\n t = 1;\n shouldEnd = true;\n }\n\n t = easing(t);\n var viewport = interpolator.interpolateProps(startProps, endProps, t);\n var mapState = new MapState(Object.assign({}, this.props, viewport));\n this.state.propsInTransition = mapState.getViewportProps();\n this.onViewportChange(this.state.propsInTransition, this.props);\n\n if (shouldEnd) {\n this._endTransition();\n\n this.props.onTransitionEnd();\n }\n }\n }]);\n\n return TransitionManager;\n}();\n\n_defineProperty(TransitionManager, "defaultProps", DEFAULT_PROPS);\n\n\n// EXTERNAL MODULE: ./node_modules/hammerjs/hammer.js\nvar hammer = __webpack_require__(5087);\nvar hammer_default = /*#__PURE__*/__webpack_require__.n(hammer);\n;// CONCATENATED MODULE: ./node_modules/mjolnir.js/dist/esm/utils/hammer-overrides.js\nvar INPUT_START = 1;\nvar INPUT_MOVE = 2;\nvar INPUT_END = 4;\nvar MOUSE_INPUT_MAP = {\n mousedown: INPUT_START,\n mousemove: INPUT_MOVE,\n mouseup: INPUT_END\n};\n\nfunction some(array, predict) {\n for (var i = 0; i < array.length; i++) {\n if (predict(array[i])) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction enhancePointerEventInput(PointerEventInput) {\n var oldHandler = PointerEventInput.prototype.handler;\n\n PointerEventInput.prototype.handler = function handler(ev) {\n var store = this.store;\n\n if (ev.button > 0 && ev.type === \'pointerdown\') {\n if (!some(store, function (e) {\n return e.pointerId === ev.pointerId;\n })) {\n store.push(ev);\n }\n }\n\n oldHandler.call(this, ev);\n };\n}\nfunction enhanceMouseInput(MouseInput) {\n MouseInput.prototype.handler = function handler(ev) {\n var eventType = MOUSE_INPUT_MAP[ev.type];\n\n if (eventType & INPUT_START && ev.button >= 0) {\n this.pressed = true;\n }\n\n if (eventType & INPUT_MOVE && ev.which === 0) {\n eventType = INPUT_END;\n }\n\n if (!this.pressed) {\n return;\n }\n\n if (eventType & INPUT_END) {\n this.pressed = false;\n }\n\n this.callback(this.manager, eventType, {\n pointers: [ev],\n changedPointers: [ev],\n pointerType: \'mouse\',\n srcEvent: ev\n });\n };\n}\n;// CONCATENATED MODULE: ./node_modules/mjolnir.js/dist/esm/utils/hammer.browser.js\n\n\nenhancePointerEventInput((hammer_default()).PointerEventInput);\nenhanceMouseInput((hammer_default()).MouseInput);\nvar Manager = (hammer_default()).Manager;\n/* harmony default export */ var hammer_browser = ((hammer_default()));\n;// CONCATENATED MODULE: ./node_modules/mjolnir.js/dist/esm/constants.js\n\nvar RECOGNIZERS = hammer_browser ? [[hammer_browser.Pan, {\n event: \'tripan\',\n pointers: 3,\n threshold: 0,\n enable: false\n}], [hammer_browser.Rotate, {\n enable: false\n}], [hammer_browser.Pinch, {\n enable: false\n}], [hammer_browser.Swipe, {\n enable: false\n}], [hammer_browser.Pan, {\n threshold: 0,\n enable: false\n}], [hammer_browser.Press, {\n enable: false\n}], [hammer_browser.Tap, {\n event: \'doubletap\',\n taps: 2,\n enable: false\n}], [hammer_browser.Tap, {\n event: \'anytap\',\n enable: false\n}], [hammer_browser.Tap, {\n enable: false\n}]] : null;\nvar RECOGNIZER_COMPATIBLE_MAP = {\n tripan: [\'rotate\', \'pinch\', \'pan\'],\n rotate: [\'pinch\'],\n pinch: [\'pan\'],\n pan: [\'press\', \'doubletap\', \'anytap\', \'tap\'],\n doubletap: [\'anytap\'],\n anytap: [\'tap\']\n};\nvar RECOGNIZER_FALLBACK_MAP = {\n doubletap: [\'tap\']\n};\nvar BASIC_EVENT_ALIASES = {\n pointerdown: \'pointerdown\',\n pointermove: \'pointermove\',\n pointerup: \'pointerup\',\n touchstart: \'pointerdown\',\n touchmove: \'pointermove\',\n touchend: \'pointerup\',\n mousedown: \'pointerdown\',\n mousemove: \'pointermove\',\n mouseup: \'pointerup\'\n};\nvar INPUT_EVENT_TYPES = {\n KEY_EVENTS: [\'keydown\', \'keyup\'],\n MOUSE_EVENTS: [\'mousedown\', \'mousemove\', \'mouseup\', \'mouseover\', \'mouseout\', \'mouseleave\'],\n WHEEL_EVENTS: [\'wheel\', \'mousewheel\']\n};\nvar EVENT_RECOGNIZER_MAP = {\n tap: \'tap\',\n anytap: \'anytap\',\n doubletap: \'doubletap\',\n press: \'press\',\n pinch: \'pinch\',\n pinchin: \'pinch\',\n pinchout: \'pinch\',\n pinchstart: \'pinch\',\n pinchmove: \'pinch\',\n pinchend: \'pinch\',\n pinchcancel: \'pinch\',\n rotate: \'rotate\',\n rotatestart: \'rotate\',\n rotatemove: \'rotate\',\n rotateend: \'rotate\',\n rotatecancel: \'rotate\',\n tripan: \'tripan\',\n tripanstart: \'tripan\',\n tripanmove: \'tripan\',\n tripanup: \'tripan\',\n tripandown: \'tripan\',\n tripanleft: \'tripan\',\n tripanright: \'tripan\',\n tripanend: \'tripan\',\n tripancancel: \'tripan\',\n pan: \'pan\',\n panstart: \'pan\',\n panmove: \'pan\',\n panup: \'pan\',\n pandown: \'pan\',\n panleft: \'pan\',\n panright: \'pan\',\n panend: \'pan\',\n pancancel: \'pan\',\n swipe: \'swipe\',\n swipeleft: \'swipe\',\n swiperight: \'swipe\',\n swipeup: \'swipe\',\n swipedown: \'swipe\'\n};\nvar GESTURE_EVENT_ALIASES = {\n click: \'tap\',\n anyclick: \'anytap\',\n dblclick: \'doubletap\',\n mousedown: \'pointerdown\',\n mousemove: \'pointermove\',\n mouseup: \'pointerup\',\n mouseover: \'pointerover\',\n mouseout: \'pointerout\',\n mouseleave: \'pointerleave\'\n};\n;// CONCATENATED MODULE: ./node_modules/mjolnir.js/dist/esm/utils/globals.js\nvar userAgent = typeof navigator !== \'undefined\' && navigator.userAgent ? navigator.userAgent.toLowerCase() : \'\';\nvar globals_window_ = typeof window !== \'undefined\' ? window : __webpack_require__.g;\nvar globals_global_ = typeof __webpack_require__.g !== \'undefined\' ? __webpack_require__.g : window;\nvar globals_document_ = typeof document !== \'undefined\' ? document : {};\n\nvar passiveSupported = false;\n\ntry {\n var options = {\n get passive() {\n passiveSupported = true;\n return true;\n }\n\n };\n globals_window_.addEventListener(\'test\', options, options);\n globals_window_.removeEventListener(\'test\', options, options);\n} catch (err) {}\n\n\n;// CONCATENATED MODULE: ./node_modules/mjolnir.js/dist/esm/inputs/wheel-input.js\n\n\n\n\nvar firefox = userAgent.indexOf(\'firefox\') !== -1;\nvar WHEEL_EVENTS = INPUT_EVENT_TYPES.WHEEL_EVENTS;\nvar EVENT_TYPE = \'wheel\';\nvar WHEEL_DELTA_MAGIC_SCALER = 4.000244140625;\nvar WHEEL_DELTA_PER_LINE = 40;\nvar SHIFT_MULTIPLIER = 0.25;\n\nvar WheelInput = /*#__PURE__*/function () {\n function WheelInput(element, callback) {\n var _this = this;\n\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n _classCallCheck(this, WheelInput);\n\n this.element = element;\n this.callback = callback;\n this.options = Object.assign({\n enable: true\n }, options);\n this.events = WHEEL_EVENTS.concat(options.events || []);\n this.handleEvent = this.handleEvent.bind(this);\n this.events.forEach(function (event) {\n return element.addEventListener(event, _this.handleEvent, passiveSupported ? {\n passive: false\n } : false);\n });\n }\n\n _createClass(WheelInput, [{\n key: "destroy",\n value: function destroy() {\n var _this2 = this;\n\n this.events.forEach(function (event) {\n return _this2.element.removeEventListener(event, _this2.handleEvent);\n });\n }\n }, {\n key: "enableEventType",\n value: function enableEventType(eventType, enabled) {\n if (eventType === EVENT_TYPE) {\n this.options.enable = enabled;\n }\n }\n }, {\n key: "handleEvent",\n value: function handleEvent(event) {\n if (!this.options.enable) {\n return;\n }\n\n var value = event.deltaY;\n\n if (globals_window_.WheelEvent) {\n if (firefox && event.deltaMode === globals_window_.WheelEvent.DOM_DELTA_PIXEL) {\n value /= globals_window_.devicePixelRatio;\n }\n\n if (event.deltaMode === globals_window_.WheelEvent.DOM_DELTA_LINE) {\n value *= WHEEL_DELTA_PER_LINE;\n }\n }\n\n var wheelPosition = {\n x: event.clientX,\n y: event.clientY\n };\n\n if (value !== 0 && value % WHEEL_DELTA_MAGIC_SCALER === 0) {\n value = Math.floor(value / WHEEL_DELTA_MAGIC_SCALER);\n }\n\n if (event.shiftKey && value) {\n value = value * SHIFT_MULTIPLIER;\n }\n\n this._onWheel(event, -value, wheelPosition);\n }\n }, {\n key: "_onWheel",\n value: function _onWheel(srcEvent, delta, position) {\n this.callback({\n type: EVENT_TYPE,\n center: position,\n delta: delta,\n srcEvent: srcEvent,\n pointerType: \'mouse\',\n target: srcEvent.target\n });\n }\n }]);\n\n return WheelInput;\n}();\n\n\n;// CONCATENATED MODULE: ./node_modules/mjolnir.js/dist/esm/inputs/move-input.js\n\n\n\nvar MOUSE_EVENTS = INPUT_EVENT_TYPES.MOUSE_EVENTS;\nvar MOVE_EVENT_TYPE = \'pointermove\';\nvar OVER_EVENT_TYPE = \'pointerover\';\nvar OUT_EVENT_TYPE = \'pointerout\';\nvar LEAVE_EVENT_TYPE = \'pointerleave\';\n\nvar MoveInput = /*#__PURE__*/function () {\n function MoveInput(element, callback) {\n var _this = this;\n\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n _classCallCheck(this, MoveInput);\n\n this.element = element;\n this.callback = callback;\n this.pressed = false;\n this.options = Object.assign({\n enable: true\n }, options);\n this.enableMoveEvent = this.options.enable;\n this.enableLeaveEvent = this.options.enable;\n this.enableOutEvent = this.options.enable;\n this.enableOverEvent = this.options.enable;\n this.events = MOUSE_EVENTS.concat(options.events || []);\n this.handleEvent = this.handleEvent.bind(this);\n this.events.forEach(function (event) {\n return element.addEventListener(event, _this.handleEvent);\n });\n }\n\n _createClass(MoveInput, [{\n key: "destroy",\n value: function destroy() {\n var _this2 = this;\n\n this.events.forEach(function (event) {\n return _this2.element.removeEventListener(event, _this2.handleEvent);\n });\n }\n }, {\n key: "enableEventType",\n value: function enableEventType(eventType, enabled) {\n if (eventType === MOVE_EVENT_TYPE) {\n this.enableMoveEvent = enabled;\n }\n\n if (eventType === OVER_EVENT_TYPE) {\n this.enableOverEvent = enabled;\n }\n\n if (eventType === OUT_EVENT_TYPE) {\n this.enableOutEvent = enabled;\n }\n\n if (eventType === LEAVE_EVENT_TYPE) {\n this.enableLeaveEvent = enabled;\n }\n }\n }, {\n key: "handleEvent",\n value: function handleEvent(event) {\n this.handleOverEvent(event);\n this.handleOutEvent(event);\n this.handleLeaveEvent(event);\n this.handleMoveEvent(event);\n }\n }, {\n key: "handleOverEvent",\n value: function handleOverEvent(event) {\n if (this.enableOverEvent) {\n if (event.type === \'mouseover\') {\n this.callback({\n type: OVER_EVENT_TYPE,\n srcEvent: event,\n pointerType: \'mouse\',\n target: event.target\n });\n }\n }\n }\n }, {\n key: "handleOutEvent",\n value: function handleOutEvent(event) {\n if (this.enableOutEvent) {\n if (event.type === \'mouseout\') {\n this.callback({\n type: OUT_EVENT_TYPE,\n srcEvent: event,\n pointerType: \'mouse\',\n target: event.target\n });\n }\n }\n }\n }, {\n key: "handleLeaveEvent",\n value: function handleLeaveEvent(event) {\n if (this.enableLeaveEvent) {\n if (event.type === \'mouseleave\') {\n this.callback({\n type: LEAVE_EVENT_TYPE,\n srcEvent: event,\n pointerType: \'mouse\',\n target: event.target\n });\n }\n }\n }\n }, {\n key: "handleMoveEvent",\n value: function handleMoveEvent(event) {\n if (this.enableMoveEvent) {\n switch (event.type) {\n case \'mousedown\':\n if (event.button >= 0) {\n this.pressed = true;\n }\n\n break;\n\n case \'mousemove\':\n if (event.which === 0) {\n this.pressed = false;\n }\n\n if (!this.pressed) {\n this.callback({\n type: MOVE_EVENT_TYPE,\n srcEvent: event,\n pointerType: \'mouse\',\n target: event.target\n });\n }\n\n break;\n\n case \'mouseup\':\n this.pressed = false;\n break;\n\n default:\n }\n }\n }\n }]);\n\n return MoveInput;\n}();\n\n\n;// CONCATENATED MODULE: ./node_modules/mjolnir.js/dist/esm/inputs/key-input.js\n\n\n\nvar KEY_EVENTS = INPUT_EVENT_TYPES.KEY_EVENTS;\nvar DOWN_EVENT_TYPE = \'keydown\';\nvar UP_EVENT_TYPE = \'keyup\';\n\nvar KeyInput = /*#__PURE__*/function () {\n function KeyInput(element, callback) {\n var _this = this;\n\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n _classCallCheck(this, KeyInput);\n\n this.element = element;\n this.callback = callback;\n this.options = Object.assign({\n enable: true\n }, options);\n this.enableDownEvent = this.options.enable;\n this.enableUpEvent = this.options.enable;\n this.events = KEY_EVENTS.concat(options.events || []);\n this.handleEvent = this.handleEvent.bind(this);\n element.tabIndex = options.tabIndex || 0;\n element.style.outline = \'none\';\n this.events.forEach(function (event) {\n return element.addEventListener(event, _this.handleEvent);\n });\n }\n\n _createClass(KeyInput, [{\n key: "destroy",\n value: function destroy() {\n var _this2 = this;\n\n this.events.forEach(function (event) {\n return _this2.element.removeEventListener(event, _this2.handleEvent);\n });\n }\n }, {\n key: "enableEventType",\n value: function enableEventType(eventType, enabled) {\n if (eventType === DOWN_EVENT_TYPE) {\n this.enableDownEvent = enabled;\n }\n\n if (eventType === UP_EVENT_TYPE) {\n this.enableUpEvent = enabled;\n }\n }\n }, {\n key: "handleEvent",\n value: function handleEvent(event) {\n var targetElement = event.target || event.srcElement;\n\n if (targetElement.tagName === \'INPUT\' && targetElement.type === \'text\' || targetElement.tagName === \'TEXTAREA\') {\n return;\n }\n\n if (this.enableDownEvent && event.type === \'keydown\') {\n this.callback({\n type: DOWN_EVENT_TYPE,\n srcEvent: event,\n key: event.key,\n target: event.target\n });\n }\n\n if (this.enableUpEvent && event.type === \'keyup\') {\n this.callback({\n type: UP_EVENT_TYPE,\n srcEvent: event,\n key: event.key,\n target: event.target\n });\n }\n }\n }]);\n\n return KeyInput;\n}();\n\n\n;// CONCATENATED MODULE: ./node_modules/mjolnir.js/dist/esm/inputs/contextmenu-input.js\n\n\nvar contextmenu_input_EVENT_TYPE = \'contextmenu\';\n\nvar ContextmenuInput = /*#__PURE__*/function () {\n function ContextmenuInput(element, callback) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n _classCallCheck(this, ContextmenuInput);\n\n this.element = element;\n this.callback = callback;\n this.options = Object.assign({\n enable: true\n }, options);\n this.handleEvent = this.handleEvent.bind(this);\n element.addEventListener(\'contextmenu\', this.handleEvent);\n }\n\n _createClass(ContextmenuInput, [{\n key: "destroy",\n value: function destroy() {\n this.element.removeEventListener(\'contextmenu\', this.handleEvent);\n }\n }, {\n key: "enableEventType",\n value: function enableEventType(eventType, enabled) {\n if (eventType === contextmenu_input_EVENT_TYPE) {\n this.options.enable = enabled;\n }\n }\n }, {\n key: "handleEvent",\n value: function handleEvent(event) {\n if (!this.options.enable) {\n return;\n }\n\n this.callback({\n type: contextmenu_input_EVENT_TYPE,\n center: {\n x: event.clientX,\n y: event.clientY\n },\n srcEvent: event,\n pointerType: \'mouse\',\n target: event.target\n });\n }\n }]);\n\n return ContextmenuInput;\n}();\n\n\n;// CONCATENATED MODULE: ./node_modules/mjolnir.js/dist/esm/utils/event-utils.js\nvar DOWN_EVENT = 1;\nvar MOVE_EVENT = 2;\nvar UP_EVENT = 4;\nvar event_utils_MOUSE_EVENTS = {\n pointerdown: DOWN_EVENT,\n pointermove: MOVE_EVENT,\n pointerup: UP_EVENT,\n mousedown: DOWN_EVENT,\n mousemove: MOVE_EVENT,\n mouseup: UP_EVENT\n};\nvar MOUSE_EVENT_WHICH_LEFT = 1;\nvar MOUSE_EVENT_WHICH_MIDDLE = 2;\nvar MOUSE_EVENT_WHICH_RIGHT = 3;\nvar MOUSE_EVENT_BUTTON_LEFT = 0;\nvar MOUSE_EVENT_BUTTON_MIDDLE = 1;\nvar MOUSE_EVENT_BUTTON_RIGHT = 2;\nvar MOUSE_EVENT_BUTTONS_LEFT_MASK = 1;\nvar MOUSE_EVENT_BUTTONS_RIGHT_MASK = 2;\nvar MOUSE_EVENT_BUTTONS_MIDDLE_MASK = 4;\nfunction whichButtons(event) {\n var eventType = event_utils_MOUSE_EVENTS[event.srcEvent.type];\n\n if (!eventType) {\n return null;\n }\n\n var _event$srcEvent = event.srcEvent,\n buttons = _event$srcEvent.buttons,\n button = _event$srcEvent.button,\n which = _event$srcEvent.which;\n var leftButton = false;\n var middleButton = false;\n var rightButton = false;\n\n if (eventType === UP_EVENT || eventType === MOVE_EVENT && !Number.isFinite(buttons)) {\n leftButton = which === MOUSE_EVENT_WHICH_LEFT;\n middleButton = which === MOUSE_EVENT_WHICH_MIDDLE;\n rightButton = which === MOUSE_EVENT_WHICH_RIGHT;\n } else if (eventType === MOVE_EVENT) {\n leftButton = Boolean(buttons & MOUSE_EVENT_BUTTONS_LEFT_MASK);\n middleButton = Boolean(buttons & MOUSE_EVENT_BUTTONS_MIDDLE_MASK);\n rightButton = Boolean(buttons & MOUSE_EVENT_BUTTONS_RIGHT_MASK);\n } else if (eventType === DOWN_EVENT) {\n leftButton = button === MOUSE_EVENT_BUTTON_LEFT;\n middleButton = button === MOUSE_EVENT_BUTTON_MIDDLE;\n rightButton = button === MOUSE_EVENT_BUTTON_RIGHT;\n }\n\n return {\n leftButton: leftButton,\n middleButton: middleButton,\n rightButton: rightButton\n };\n}\nfunction getOffsetPosition(event, rootElement) {\n var srcEvent = event.srcEvent;\n\n if (!event.center && !Number.isFinite(srcEvent.clientX)) {\n return null;\n }\n\n var center = event.center || {\n x: srcEvent.clientX,\n y: srcEvent.clientY\n };\n var rect = rootElement.getBoundingClientRect();\n var scaleX = rect.width / rootElement.offsetWidth || 1;\n var scaleY = rect.height / rootElement.offsetHeight || 1;\n var offsetCenter = {\n x: (center.x - rect.left - rootElement.clientLeft) / scaleX,\n y: (center.y - rect.top - rootElement.clientTop) / scaleY\n };\n return {\n center: center,\n offsetCenter: offsetCenter\n };\n}\n;// CONCATENATED MODULE: ./node_modules/mjolnir.js/dist/esm/utils/event-registrar.js\n\n\n\nvar DEFAULT_OPTIONS = {\n srcElement: \'root\',\n priority: 0\n};\n\nvar EventRegistrar = /*#__PURE__*/function () {\n function EventRegistrar(eventManager) {\n _classCallCheck(this, EventRegistrar);\n\n this.eventManager = eventManager;\n this.handlers = [];\n this.handlersByElement = new Map();\n this.handleEvent = this.handleEvent.bind(this);\n this._active = false;\n }\n\n _createClass(EventRegistrar, [{\n key: "isEmpty",\n value: function isEmpty() {\n return !this._active;\n }\n }, {\n key: "add",\n value: function add(type, handler, opts) {\n var once = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n var passive = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n var handlers = this.handlers,\n handlersByElement = this.handlersByElement;\n\n if (opts && (typeof opts !== \'object\' || opts.addEventListener)) {\n opts = {\n srcElement: opts\n };\n }\n\n opts = opts ? Object.assign({}, DEFAULT_OPTIONS, opts) : DEFAULT_OPTIONS;\n var entries = handlersByElement.get(opts.srcElement);\n\n if (!entries) {\n entries = [];\n handlersByElement.set(opts.srcElement, entries);\n }\n\n var entry = {\n type: type,\n handler: handler,\n srcElement: opts.srcElement,\n priority: opts.priority\n };\n\n if (once) {\n entry.once = true;\n }\n\n if (passive) {\n entry.passive = true;\n }\n\n handlers.push(entry);\n this._active = this._active || !entry.passive;\n var insertPosition = entries.length - 1;\n\n while (insertPosition >= 0) {\n if (entries[insertPosition].priority >= entry.priority) {\n break;\n }\n\n insertPosition--;\n }\n\n entries.splice(insertPosition + 1, 0, entry);\n }\n }, {\n key: "remove",\n value: function remove(type, handler) {\n var handlers = this.handlers,\n handlersByElement = this.handlersByElement;\n\n for (var i = handlers.length - 1; i >= 0; i--) {\n var entry = handlers[i];\n\n if (entry.type === type && entry.handler === handler) {\n handlers.splice(i, 1);\n var entries = handlersByElement.get(entry.srcElement);\n entries.splice(entries.indexOf(entry), 1);\n\n if (entries.length === 0) {\n handlersByElement.delete(entry.srcElement);\n }\n }\n }\n\n this._active = handlers.some(function (entry) {\n return !entry.passive;\n });\n }\n }, {\n key: "handleEvent",\n value: function handleEvent(event) {\n if (this.isEmpty()) {\n return;\n }\n\n var mjolnirEvent = this._normalizeEvent(event);\n\n var target = event.srcEvent.target;\n\n while (target && target !== mjolnirEvent.rootElement) {\n this._emit(mjolnirEvent, target);\n\n if (mjolnirEvent.handled) {\n return;\n }\n\n target = target.parentNode;\n }\n\n this._emit(mjolnirEvent, \'root\');\n }\n }, {\n key: "_emit",\n value: function _emit(event, srcElement) {\n var entries = this.handlersByElement.get(srcElement);\n\n if (entries) {\n var immediatePropagationStopped = false;\n\n var stopPropagation = function stopPropagation() {\n event.handled = true;\n };\n\n var stopImmediatePropagation = function stopImmediatePropagation() {\n event.handled = true;\n immediatePropagationStopped = true;\n };\n\n var entriesToRemove = [];\n\n for (var i = 0; i < entries.length; i++) {\n var _entries$i = entries[i],\n type = _entries$i.type,\n handler = _entries$i.handler,\n once = _entries$i.once;\n handler(Object.assign({}, event, {\n type: type,\n stopPropagation: stopPropagation,\n stopImmediatePropagation: stopImmediatePropagation\n }));\n\n if (once) {\n entriesToRemove.push(entries[i]);\n }\n\n if (immediatePropagationStopped) {\n break;\n }\n }\n\n for (var _i = 0; _i < entriesToRemove.length; _i++) {\n var _entriesToRemove$_i = entriesToRemove[_i],\n _type = _entriesToRemove$_i.type,\n _handler = _entriesToRemove$_i.handler;\n this.remove(_type, _handler);\n }\n }\n }\n }, {\n key: "_normalizeEvent",\n value: function _normalizeEvent(event) {\n var rootElement = this.eventManager.element;\n return Object.assign({}, event, whichButtons(event), getOffsetPosition(event, rootElement), {\n handled: false,\n rootElement: rootElement\n });\n }\n }]);\n\n return EventRegistrar;\n}();\n\n\n;// CONCATENATED MODULE: ./node_modules/mjolnir.js/dist/esm/event-manager.js\n\n\n\n\nfunction event_manager_createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = event_manager_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction event_manager_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return event_manager_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return event_manager_arrayLikeToArray(o, minLen); }\n\nfunction event_manager_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\n\n\n\n\n\n\n\nvar event_manager_DEFAULT_OPTIONS = {\n events: null,\n recognizers: null,\n recognizerOptions: {},\n Manager: Manager,\n touchAction: \'none\',\n tabIndex: 0\n};\n\nvar EventManager = /*#__PURE__*/function () {\n function EventManager() {\n var element = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n _classCallCheck(this, EventManager);\n\n this.options = Object.assign({}, event_manager_DEFAULT_OPTIONS, options);\n this.events = new Map();\n this._onBasicInput = this._onBasicInput.bind(this);\n this._onOtherEvent = this._onOtherEvent.bind(this);\n this.setElement(element);\n var events = options.events;\n\n if (events) {\n this.on(events);\n }\n }\n\n _createClass(EventManager, [{\n key: "setElement",\n value: function setElement(element) {\n var _this = this;\n\n if (this.element) {\n this.destroy();\n }\n\n this.element = element;\n\n if (!element) {\n return;\n }\n\n var options = this.options;\n var ManagerClass = options.Manager;\n this.manager = new ManagerClass(element, {\n touchAction: options.touchAction,\n recognizers: options.recognizers || RECOGNIZERS\n }).on(\'hammer.input\', this._onBasicInput);\n\n if (!options.recognizers) {\n Object.keys(RECOGNIZER_COMPATIBLE_MAP).forEach(function (name) {\n var recognizer = _this.manager.get(name);\n\n if (recognizer) {\n RECOGNIZER_COMPATIBLE_MAP[name].forEach(function (otherName) {\n recognizer.recognizeWith(otherName);\n });\n }\n });\n }\n\n for (var recognizerName in options.recognizerOptions) {\n var recognizer = this.manager.get(recognizerName);\n\n if (recognizer) {\n var recognizerOption = options.recognizerOptions[recognizerName];\n delete recognizerOption.enable;\n recognizer.set(recognizerOption);\n }\n }\n\n this.wheelInput = new WheelInput(element, this._onOtherEvent, {\n enable: false\n });\n this.moveInput = new MoveInput(element, this._onOtherEvent, {\n enable: false\n });\n this.keyInput = new KeyInput(element, this._onOtherEvent, {\n enable: false,\n tabIndex: options.tabIndex\n });\n this.contextmenuInput = new ContextmenuInput(element, this._onOtherEvent, {\n enable: false\n });\n\n var _iterator = event_manager_createForOfIteratorHelper(this.events),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var _step$value = slicedToArray_slicedToArray(_step.value, 2),\n eventAlias = _step$value[0],\n eventRegistrar = _step$value[1];\n\n if (!eventRegistrar.isEmpty()) {\n this._toggleRecognizer(eventRegistrar.recognizerName, true);\n\n this.manager.on(eventAlias, eventRegistrar.handleEvent);\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n }\n }, {\n key: "destroy",\n value: function destroy() {\n if (this.element) {\n this.wheelInput.destroy();\n this.moveInput.destroy();\n this.keyInput.destroy();\n this.contextmenuInput.destroy();\n this.manager.destroy();\n this.wheelInput = null;\n this.moveInput = null;\n this.keyInput = null;\n this.contextmenuInput = null;\n this.manager = null;\n this.element = null;\n }\n }\n }, {\n key: "on",\n value: function on(event, handler, opts) {\n this._addEventHandler(event, handler, opts, false);\n }\n }, {\n key: "once",\n value: function once(event, handler, opts) {\n this._addEventHandler(event, handler, opts, true);\n }\n }, {\n key: "watch",\n value: function watch(event, handler, opts) {\n this._addEventHandler(event, handler, opts, false, true);\n }\n }, {\n key: "off",\n value: function off(event, handler) {\n this._removeEventHandler(event, handler);\n }\n }, {\n key: "_toggleRecognizer",\n value: function _toggleRecognizer(name, enabled) {\n var manager = this.manager;\n\n if (!manager) {\n return;\n }\n\n var recognizer = manager.get(name);\n\n if (recognizer && recognizer.options.enable !== enabled) {\n recognizer.set({\n enable: enabled\n });\n var fallbackRecognizers = RECOGNIZER_FALLBACK_MAP[name];\n\n if (fallbackRecognizers && !this.options.recognizers) {\n fallbackRecognizers.forEach(function (otherName) {\n var otherRecognizer = manager.get(otherName);\n\n if (enabled) {\n otherRecognizer.requireFailure(name);\n recognizer.dropRequireFailure(otherName);\n } else {\n otherRecognizer.dropRequireFailure(name);\n }\n });\n }\n }\n\n this.wheelInput.enableEventType(name, enabled);\n this.moveInput.enableEventType(name, enabled);\n this.keyInput.enableEventType(name, enabled);\n this.contextmenuInput.enableEventType(name, enabled);\n }\n }, {\n key: "_addEventHandler",\n value: function _addEventHandler(event, handler, opts, once, passive) {\n if (typeof event !== \'string\') {\n opts = handler;\n\n for (var eventName in event) {\n this._addEventHandler(eventName, event[eventName], opts, once, passive);\n }\n\n return;\n }\n\n var manager = this.manager,\n events = this.events;\n var eventAlias = GESTURE_EVENT_ALIASES[event] || event;\n var eventRegistrar = events.get(eventAlias);\n\n if (!eventRegistrar) {\n eventRegistrar = new EventRegistrar(this);\n events.set(eventAlias, eventRegistrar);\n eventRegistrar.recognizerName = EVENT_RECOGNIZER_MAP[eventAlias] || eventAlias;\n\n if (manager) {\n manager.on(eventAlias, eventRegistrar.handleEvent);\n }\n }\n\n eventRegistrar.add(event, handler, opts, once, passive);\n\n if (!eventRegistrar.isEmpty()) {\n this._toggleRecognizer(eventRegistrar.recognizerName, true);\n }\n }\n }, {\n key: "_removeEventHandler",\n value: function _removeEventHandler(event, handler) {\n if (typeof event !== \'string\') {\n for (var eventName in event) {\n this._removeEventHandler(eventName, event[eventName]);\n }\n\n return;\n }\n\n var events = this.events;\n var eventAlias = GESTURE_EVENT_ALIASES[event] || event;\n var eventRegistrar = events.get(eventAlias);\n\n if (!eventRegistrar) {\n return;\n }\n\n eventRegistrar.remove(event, handler);\n\n if (eventRegistrar.isEmpty()) {\n var recognizerName = eventRegistrar.recognizerName;\n var isRecognizerUsed = false;\n\n var _iterator2 = event_manager_createForOfIteratorHelper(events.values()),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var eh = _step2.value;\n\n if (eh.recognizerName === recognizerName && !eh.isEmpty()) {\n isRecognizerUsed = true;\n break;\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n if (!isRecognizerUsed) {\n this._toggleRecognizer(recognizerName, false);\n }\n }\n }\n }, {\n key: "_onBasicInput",\n value: function _onBasicInput(event) {\n var srcEvent = event.srcEvent;\n var alias = BASIC_EVENT_ALIASES[srcEvent.type];\n\n if (alias) {\n this.manager.emit(alias, event);\n }\n }\n }, {\n key: "_onOtherEvent",\n value: function _onOtherEvent(event) {\n this.manager.emit(event.type, event);\n }\n }]);\n\n return EventManager;\n}();\n\n\n;// CONCATENATED MODULE: ./node_modules/mjolnir.js/dist/esm/index.js\n\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/utils/map-controller.js\n\n\n\n\nfunction map_controller_ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction map_controller_objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n map_controller_ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n map_controller_ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\n\n\n\nvar NO_TRANSITION_PROPS = {\n transitionDuration: 0\n};\nvar LINEAR_TRANSITION_PROPS = {\n transitionDuration: 300,\n transitionEasing: function transitionEasing(t) {\n return t;\n },\n transitionInterpolator: new LinearInterpolator(),\n transitionInterruption: TRANSITION_EVENTS.BREAK\n};\nvar DEFAULT_INERTIA = 300;\n\nvar INERTIA_EASING = function INERTIA_EASING(t) {\n return 1 - (1 - t) * (1 - t);\n};\n\nvar EVENT_TYPES = {\n WHEEL: [\'wheel\'],\n PAN: [\'panstart\', \'panmove\', \'panend\'],\n PINCH: [\'pinchstart\', \'pinchmove\', \'pinchend\'],\n TRIPLE_PAN: [\'tripanstart\', \'tripanmove\', \'tripanend\'],\n DOUBLE_TAP: [\'doubletap\'],\n KEYBOARD: [\'keydown\']\n};\n\nvar MapController = function () {\n function MapController() {\n var _this = this;\n\n _classCallCheck(this, MapController);\n\n _defineProperty(this, "events", []);\n\n _defineProperty(this, "scrollZoom", true);\n\n _defineProperty(this, "dragPan", true);\n\n _defineProperty(this, "dragRotate", true);\n\n _defineProperty(this, "doubleClickZoom", true);\n\n _defineProperty(this, "touchZoom", true);\n\n _defineProperty(this, "touchRotate", false);\n\n _defineProperty(this, "keyboard", true);\n\n _defineProperty(this, "_interactionState", {\n isDragging: false\n });\n\n _defineProperty(this, "_events", {});\n\n _defineProperty(this, "_setInteractionState", function (newState) {\n Object.assign(_this._interactionState, newState);\n\n if (_this.onStateChange) {\n _this.onStateChange(_this._interactionState);\n }\n });\n\n _defineProperty(this, "_onTransition", function (newViewport, oldViewport) {\n _this.onViewportChange(newViewport, _this._interactionState, oldViewport);\n });\n\n this.handleEvent = this.handleEvent.bind(this);\n this._transitionManager = new TransitionManager({\n onViewportChange: this._onTransition,\n onStateChange: this._setInteractionState\n });\n }\n\n _createClass(MapController, [{\n key: "handleEvent",\n value: function handleEvent(event) {\n this.mapState = this.getMapState();\n var eventStartBlocked = this._eventStartBlocked;\n\n switch (event.type) {\n case \'panstart\':\n return eventStartBlocked ? false : this._onPanStart(event);\n\n case \'panmove\':\n return this._onPan(event);\n\n case \'panend\':\n return this._onPanEnd(event);\n\n case \'pinchstart\':\n return eventStartBlocked ? false : this._onPinchStart(event);\n\n case \'pinchmove\':\n return this._onPinch(event);\n\n case \'pinchend\':\n return this._onPinchEnd(event);\n\n case \'tripanstart\':\n return eventStartBlocked ? false : this._onTriplePanStart(event);\n\n case \'tripanmove\':\n return this._onTriplePan(event);\n\n case \'tripanend\':\n return this._onTriplePanEnd(event);\n\n case \'doubletap\':\n return this._onDoubleTap(event);\n\n case \'wheel\':\n return this._onWheel(event);\n\n case \'keydown\':\n return this._onKeyDown(event);\n\n default:\n return false;\n }\n }\n }, {\n key: "getCenter",\n value: function getCenter(event) {\n var _event$offsetCenter = event.offsetCenter,\n x = _event$offsetCenter.x,\n y = _event$offsetCenter.y;\n return [x, y];\n }\n }, {\n key: "isFunctionKeyPressed",\n value: function isFunctionKeyPressed(event) {\n var srcEvent = event.srcEvent;\n return Boolean(srcEvent.metaKey || srcEvent.altKey || srcEvent.ctrlKey || srcEvent.shiftKey);\n }\n }, {\n key: "blockEvents",\n value: function blockEvents(timeout) {\n var _this2 = this;\n\n var timer = setTimeout(function () {\n if (_this2._eventStartBlocked === timer) {\n _this2._eventStartBlocked = null;\n }\n }, timeout);\n this._eventStartBlocked = timer;\n }\n }, {\n key: "updateViewport",\n value: function updateViewport(newMapState, extraProps, interactionState) {\n var oldViewport = this.mapState instanceof MapState ? this.mapState.getViewportProps() : this.mapState;\n\n var newViewport = map_controller_objectSpread(map_controller_objectSpread({}, newMapState.getViewportProps()), extraProps);\n\n var viewStateChanged = Object.keys(newViewport).some(function (key) {\n return oldViewport[key] !== newViewport[key];\n });\n this._state = newMapState.getState();\n\n this._setInteractionState(interactionState);\n\n if (viewStateChanged) {\n this.onViewportChange(newViewport, this._interactionState, oldViewport);\n }\n }\n }, {\n key: "getMapState",\n value: function getMapState(overrides) {\n return new MapState(map_controller_objectSpread(map_controller_objectSpread(map_controller_objectSpread({}, this.mapStateProps), this._state), overrides));\n }\n }, {\n key: "isDragging",\n value: function isDragging() {\n return this._interactionState.isDragging;\n }\n }, {\n key: "setOptions",\n value: function setOptions(options) {\n var onViewportChange = options.onViewportChange,\n onStateChange = options.onStateChange,\n _options$eventManager = options.eventManager,\n eventManager = _options$eventManager === void 0 ? this.eventManager : _options$eventManager,\n _options$isInteractiv = options.isInteractive,\n isInteractive = _options$isInteractiv === void 0 ? true : _options$isInteractiv,\n _options$scrollZoom = options.scrollZoom,\n scrollZoom = _options$scrollZoom === void 0 ? this.scrollZoom : _options$scrollZoom,\n _options$dragPan = options.dragPan,\n dragPan = _options$dragPan === void 0 ? this.dragPan : _options$dragPan,\n _options$dragRotate = options.dragRotate,\n dragRotate = _options$dragRotate === void 0 ? this.dragRotate : _options$dragRotate,\n _options$doubleClickZ = options.doubleClickZoom,\n doubleClickZoom = _options$doubleClickZ === void 0 ? this.doubleClickZoom : _options$doubleClickZ,\n _options$touchZoom = options.touchZoom,\n touchZoom = _options$touchZoom === void 0 ? this.touchZoom : _options$touchZoom,\n _options$touchRotate = options.touchRotate,\n touchRotate = _options$touchRotate === void 0 ? this.touchRotate : _options$touchRotate,\n _options$keyboard = options.keyboard,\n keyboard = _options$keyboard === void 0 ? this.keyboard : _options$keyboard;\n this.onViewportChange = onViewportChange;\n this.onStateChange = onStateChange;\n var prevOptions = this.mapStateProps || {};\n var dimensionChanged = prevOptions.height !== options.height || prevOptions.width !== options.width;\n this.mapStateProps = options;\n\n if (dimensionChanged) {\n this.mapState = prevOptions;\n this.updateViewport(new MapState(options));\n }\n\n this._transitionManager.processViewportChange(options);\n\n if (this.eventManager !== eventManager) {\n this.eventManager = eventManager;\n this._events = {};\n this.toggleEvents(this.events, true);\n }\n\n this.toggleEvents(EVENT_TYPES.WHEEL, isInteractive && Boolean(scrollZoom));\n this.toggleEvents(EVENT_TYPES.PAN, isInteractive && Boolean(dragPan || dragRotate));\n this.toggleEvents(EVENT_TYPES.PINCH, isInteractive && Boolean(touchZoom || touchRotate));\n this.toggleEvents(EVENT_TYPES.TRIPLE_PAN, isInteractive && Boolean(touchRotate));\n this.toggleEvents(EVENT_TYPES.DOUBLE_TAP, isInteractive && Boolean(doubleClickZoom));\n this.toggleEvents(EVENT_TYPES.KEYBOARD, isInteractive && Boolean(keyboard));\n this.scrollZoom = scrollZoom;\n this.dragPan = dragPan;\n this.dragRotate = dragRotate;\n this.doubleClickZoom = doubleClickZoom;\n this.touchZoom = touchZoom;\n this.touchRotate = touchRotate;\n this.keyboard = keyboard;\n }\n }, {\n key: "toggleEvents",\n value: function toggleEvents(eventNames, enabled) {\n var _this3 = this;\n\n if (this.eventManager) {\n eventNames.forEach(function (eventName) {\n if (_this3._events[eventName] !== enabled) {\n _this3._events[eventName] = enabled;\n\n if (enabled) {\n _this3.eventManager.on(eventName, _this3.handleEvent);\n } else {\n _this3.eventManager.off(eventName, _this3.handleEvent);\n }\n }\n });\n }\n }\n }, {\n key: "_onPanStart",\n value: function _onPanStart(event) {\n var pos = this.getCenter(event);\n this._panRotate = this.isFunctionKeyPressed(event) || event.rightButton;\n var newMapState = this._panRotate ? this.mapState.rotateStart({\n pos: pos\n }) : this.mapState.panStart({\n pos: pos\n });\n this.updateViewport(newMapState, NO_TRANSITION_PROPS, {\n isDragging: true\n });\n return true;\n }\n }, {\n key: "_onPan",\n value: function _onPan(event) {\n if (!this.isDragging()) {\n return false;\n }\n\n return this._panRotate ? this._onPanRotate(event) : this._onPanMove(event);\n }\n }, {\n key: "_onPanEnd",\n value: function _onPanEnd(event) {\n if (!this.isDragging()) {\n return false;\n }\n\n return this._panRotate ? this._onPanRotateEnd(event) : this._onPanMoveEnd(event);\n }\n }, {\n key: "_onPanMove",\n value: function _onPanMove(event) {\n if (!this.dragPan) {\n return false;\n }\n\n var pos = this.getCenter(event);\n var newMapState = this.mapState.pan({\n pos: pos\n });\n this.updateViewport(newMapState, NO_TRANSITION_PROPS, {\n isPanning: true\n });\n return true;\n }\n }, {\n key: "_onPanMoveEnd",\n value: function _onPanMoveEnd(event) {\n if (this.dragPan) {\n var _this$dragPan$inertia = this.dragPan.inertia,\n inertia = _this$dragPan$inertia === void 0 ? DEFAULT_INERTIA : _this$dragPan$inertia;\n\n if (inertia && event.velocity) {\n var pos = this.getCenter(event);\n var endPos = [pos[0] + event.velocityX * inertia / 2, pos[1] + event.velocityY * inertia / 2];\n var newControllerState = this.mapState.pan({\n pos: endPos\n }).panEnd();\n this.updateViewport(newControllerState, map_controller_objectSpread(map_controller_objectSpread({}, LINEAR_TRANSITION_PROPS), {}, {\n transitionDuration: inertia,\n transitionEasing: INERTIA_EASING\n }), {\n isDragging: false,\n isPanning: true\n });\n return true;\n }\n }\n\n var newMapState = this.mapState.panEnd();\n this.updateViewport(newMapState, null, {\n isDragging: false,\n isPanning: false\n });\n return true;\n }\n }, {\n key: "_onPanRotate",\n value: function _onPanRotate(event) {\n if (!this.dragRotate) {\n return false;\n }\n\n var pos = this.getCenter(event);\n var newMapState = this.mapState.rotate({\n pos: pos\n });\n this.updateViewport(newMapState, NO_TRANSITION_PROPS, {\n isRotating: true\n });\n return true;\n }\n }, {\n key: "_onPanRotateEnd",\n value: function _onPanRotateEnd(event) {\n if (this.dragRotate) {\n var _this$dragRotate$iner = this.dragRotate.inertia,\n inertia = _this$dragRotate$iner === void 0 ? DEFAULT_INERTIA : _this$dragRotate$iner;\n\n if (inertia && event.velocity) {\n var pos = this.getCenter(event);\n var endPos = [pos[0] + event.velocityX * inertia / 2, pos[1] + event.velocityY * inertia / 2];\n var newControllerState = this.mapState.rotate({\n pos: endPos\n }).rotateEnd();\n this.updateViewport(newControllerState, map_controller_objectSpread(map_controller_objectSpread({}, LINEAR_TRANSITION_PROPS), {}, {\n transitionDuration: inertia,\n transitionEasing: INERTIA_EASING\n }), {\n isDragging: false,\n isRotating: true\n });\n return true;\n }\n }\n\n var newMapState = this.mapState.panEnd();\n this.updateViewport(newMapState, null, {\n isDragging: false,\n isRotating: false\n });\n return true;\n }\n }, {\n key: "_onWheel",\n value: function _onWheel(event) {\n if (!this.scrollZoom) {\n return false;\n }\n\n var _this$scrollZoom = this.scrollZoom,\n _this$scrollZoom$spee = _this$scrollZoom.speed,\n speed = _this$scrollZoom$spee === void 0 ? 0.01 : _this$scrollZoom$spee,\n _this$scrollZoom$smoo = _this$scrollZoom.smooth,\n smooth = _this$scrollZoom$smoo === void 0 ? false : _this$scrollZoom$smoo;\n event.preventDefault();\n var pos = this.getCenter(event);\n var delta = event.delta;\n var scale = 2 / (1 + Math.exp(-Math.abs(delta * speed)));\n\n if (delta < 0 && scale !== 0) {\n scale = 1 / scale;\n }\n\n var newMapState = this.mapState.zoom({\n pos: pos,\n scale: scale\n });\n this.updateViewport(newMapState, map_controller_objectSpread(map_controller_objectSpread({}, LINEAR_TRANSITION_PROPS), {}, {\n transitionInterpolator: new LinearInterpolator({\n around: pos\n }),\n transitionDuration: smooth ? 250 : 1\n }), {\n isPanning: true,\n isZooming: true\n });\n return true;\n }\n }, {\n key: "_onPinchStart",\n value: function _onPinchStart(event) {\n var pos = this.getCenter(event);\n var newMapState = this.mapState.zoomStart({\n pos: pos\n }).rotateStart({\n pos: pos\n });\n this._startPinchRotation = event.rotation;\n this._lastPinchEvent = event;\n this.updateViewport(newMapState, NO_TRANSITION_PROPS, {\n isDragging: true\n });\n return true;\n }\n }, {\n key: "_onPinch",\n value: function _onPinch(event) {\n if (!this.isDragging()) {\n return false;\n }\n\n if (!this.touchZoom && !this.touchRotate) {\n return false;\n }\n\n var newMapState = this.mapState;\n\n if (this.touchZoom) {\n var scale = event.scale;\n var pos = this.getCenter(event);\n newMapState = newMapState.zoom({\n pos: pos,\n scale: scale\n });\n }\n\n if (this.touchRotate) {\n var rotation = event.rotation;\n newMapState = newMapState.rotate({\n deltaAngleX: this._startPinchRotation - rotation\n });\n }\n\n this.updateViewport(newMapState, NO_TRANSITION_PROPS, {\n isDragging: true,\n isPanning: Boolean(this.touchZoom),\n isZooming: Boolean(this.touchZoom),\n isRotating: Boolean(this.touchRotate)\n });\n this._lastPinchEvent = event;\n return true;\n }\n }, {\n key: "_onPinchEnd",\n value: function _onPinchEnd(event) {\n if (!this.isDragging()) {\n return false;\n }\n\n if (this.touchZoom) {\n var _this$touchZoom$inert = this.touchZoom.inertia,\n inertia = _this$touchZoom$inert === void 0 ? DEFAULT_INERTIA : _this$touchZoom$inert;\n var _lastPinchEvent = this._lastPinchEvent;\n\n if (inertia && _lastPinchEvent && event.scale !== _lastPinchEvent.scale) {\n var pos = this.getCenter(event);\n\n var _newMapState = this.mapState.rotateEnd();\n\n var z = Math.log2(event.scale);\n\n var velocityZ = (z - Math.log2(_lastPinchEvent.scale)) / (event.deltaTime - _lastPinchEvent.deltaTime);\n\n var endScale = Math.pow(2, z + velocityZ * inertia / 2);\n _newMapState = _newMapState.zoom({\n pos: pos,\n scale: endScale\n }).zoomEnd();\n this.updateViewport(_newMapState, map_controller_objectSpread(map_controller_objectSpread({}, LINEAR_TRANSITION_PROPS), {}, {\n transitionInterpolator: new LinearInterpolator({\n around: pos\n }),\n transitionDuration: inertia,\n transitionEasing: INERTIA_EASING\n }), {\n isDragging: false,\n isPanning: Boolean(this.touchZoom),\n isZooming: Boolean(this.touchZoom),\n isRotating: false\n });\n this.blockEvents(inertia);\n return true;\n }\n }\n\n var newMapState = this.mapState.zoomEnd().rotateEnd();\n this._state.startPinchRotation = 0;\n this.updateViewport(newMapState, null, {\n isDragging: false,\n isPanning: false,\n isZooming: false,\n isRotating: false\n });\n this._startPinchRotation = null;\n this._lastPinchEvent = null;\n return true;\n }\n }, {\n key: "_onTriplePanStart",\n value: function _onTriplePanStart(event) {\n var pos = this.getCenter(event);\n var newMapState = this.mapState.rotateStart({\n pos: pos\n });\n this.updateViewport(newMapState, NO_TRANSITION_PROPS, {\n isDragging: true\n });\n return true;\n }\n }, {\n key: "_onTriplePan",\n value: function _onTriplePan(event) {\n if (!this.isDragging()) {\n return false;\n }\n\n if (!this.touchRotate) {\n return false;\n }\n\n var pos = this.getCenter(event);\n pos[0] -= event.deltaX;\n var newMapState = this.mapState.rotate({\n pos: pos\n });\n this.updateViewport(newMapState, NO_TRANSITION_PROPS, {\n isRotating: true\n });\n return true;\n }\n }, {\n key: "_onTriplePanEnd",\n value: function _onTriplePanEnd(event) {\n if (!this.isDragging()) {\n return false;\n }\n\n if (this.touchRotate) {\n var _this$touchRotate$ine = this.touchRotate.inertia,\n inertia = _this$touchRotate$ine === void 0 ? DEFAULT_INERTIA : _this$touchRotate$ine;\n\n if (inertia && event.velocityY) {\n var pos = this.getCenter(event);\n var endPos = [pos[0], pos[1] += event.velocityY * inertia / 2];\n\n var _newMapState2 = this.mapState.rotate({\n pos: endPos\n });\n\n this.updateViewport(_newMapState2, map_controller_objectSpread(map_controller_objectSpread({}, LINEAR_TRANSITION_PROPS), {}, {\n transitionDuration: inertia,\n transitionEasing: INERTIA_EASING\n }), {\n isDragging: false,\n isRotating: true\n });\n this.blockEvents(inertia);\n return false;\n }\n }\n\n var newMapState = this.mapState.rotateEnd();\n this.updateViewport(newMapState, null, {\n isDragging: false,\n isRotating: false\n });\n return true;\n }\n }, {\n key: "_onDoubleTap",\n value: function _onDoubleTap(event) {\n if (!this.doubleClickZoom) {\n return false;\n }\n\n var pos = this.getCenter(event);\n var isZoomOut = this.isFunctionKeyPressed(event);\n var newMapState = this.mapState.zoom({\n pos: pos,\n scale: isZoomOut ? 0.5 : 2\n });\n this.updateViewport(newMapState, Object.assign({}, LINEAR_TRANSITION_PROPS, {\n transitionInterpolator: new LinearInterpolator({\n around: pos\n })\n }), {\n isZooming: true\n });\n return true;\n }\n }, {\n key: "_onKeyDown",\n value: function _onKeyDown(event) {\n if (!this.keyboard) {\n return false;\n }\n\n var funcKey = this.isFunctionKeyPressed(event);\n var _this$keyboard = this.keyboard,\n _this$keyboard$zoomSp = _this$keyboard.zoomSpeed,\n zoomSpeed = _this$keyboard$zoomSp === void 0 ? 2 : _this$keyboard$zoomSp,\n _this$keyboard$moveSp = _this$keyboard.moveSpeed,\n moveSpeed = _this$keyboard$moveSp === void 0 ? 100 : _this$keyboard$moveSp,\n _this$keyboard$rotate = _this$keyboard.rotateSpeedX,\n rotateSpeedX = _this$keyboard$rotate === void 0 ? 15 : _this$keyboard$rotate,\n _this$keyboard$rotate2 = _this$keyboard.rotateSpeedY,\n rotateSpeedY = _this$keyboard$rotate2 === void 0 ? 10 : _this$keyboard$rotate2;\n var mapStateProps = this.mapStateProps;\n var newMapState;\n\n switch (event.srcEvent.keyCode) {\n case 189:\n if (funcKey) {\n newMapState = this.getMapState({\n zoom: mapStateProps.zoom - Math.log2(zoomSpeed) - 1\n });\n } else {\n newMapState = this.getMapState({\n zoom: mapStateProps.zoom - Math.log2(zoomSpeed)\n });\n }\n\n break;\n\n case 187:\n if (funcKey) {\n newMapState = this.getMapState({\n zoom: mapStateProps.zoom + Math.log2(zoomSpeed) + 1\n });\n } else {\n newMapState = this.getMapState({\n zoom: mapStateProps.zoom + Math.log2(zoomSpeed)\n });\n }\n\n break;\n\n case 37:\n if (funcKey) {\n newMapState = this.getMapState({\n bearing: mapStateProps.bearing - rotateSpeedX\n });\n } else {\n newMapState = this.mapState.pan({\n pos: [moveSpeed, 0],\n startPos: [0, 0]\n });\n }\n\n break;\n\n case 39:\n if (funcKey) {\n newMapState = this.getMapState({\n bearing: mapStateProps.bearing + rotateSpeedX\n });\n } else {\n newMapState = this.mapState.pan({\n pos: [-moveSpeed, 0],\n startPos: [0, 0]\n });\n }\n\n break;\n\n case 38:\n if (funcKey) {\n newMapState = this.getMapState({\n pitch: mapStateProps.pitch + rotateSpeedY\n });\n } else {\n newMapState = this.mapState.pan({\n pos: [0, moveSpeed],\n startPos: [0, 0]\n });\n }\n\n break;\n\n case 40:\n if (funcKey) {\n newMapState = this.getMapState({\n pitch: mapStateProps.pitch - rotateSpeedY\n });\n } else {\n newMapState = this.mapState.pan({\n pos: [0, -moveSpeed],\n startPos: [0, 0]\n });\n }\n\n break;\n\n default:\n return false;\n }\n\n return this.updateViewport(newMapState, LINEAR_TRANSITION_PROPS);\n }\n }]);\n\n return MapController;\n}();\n\n\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/components/interactive-map.js\n\n\n\n\nfunction interactive_map_ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction interactive_map_objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n interactive_map_ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n interactive_map_ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\n\n\n\n\n\n\n\n\n\n\n\nvar interactive_map_propTypes = Object.assign({}, static_map.propTypes, {\n maxZoom: prop_types.number,\n minZoom: prop_types.number,\n maxPitch: prop_types.number,\n minPitch: prop_types.number,\n onViewStateChange: prop_types.func,\n onViewportChange: prop_types.func,\n onInteractionStateChange: prop_types.func,\n transitionDuration: prop_types.oneOfType([prop_types.number, prop_types.string]),\n transitionInterpolator: prop_types.object,\n transitionInterruption: prop_types.number,\n transitionEasing: prop_types.func,\n onTransitionStart: prop_types.func,\n onTransitionInterrupt: prop_types.func,\n onTransitionEnd: prop_types.func,\n scrollZoom: prop_types.oneOfType([prop_types.bool, prop_types.object]),\n dragPan: prop_types.oneOfType([prop_types.bool, prop_types.object]),\n dragRotate: prop_types.oneOfType([prop_types.bool, prop_types.object]),\n doubleClickZoom: prop_types.bool,\n touchZoom: prop_types.oneOfType([prop_types.bool, prop_types.object]),\n touchRotate: prop_types.oneOfType([prop_types.bool, prop_types.object]),\n keyboard: prop_types.oneOfType([prop_types.bool, prop_types.object]),\n onHover: prop_types.func,\n onClick: prop_types.func,\n onDblClick: prop_types.func,\n onContextMenu: prop_types.func,\n onMouseDown: prop_types.func,\n onMouseMove: prop_types.func,\n onMouseUp: prop_types.func,\n onTouchStart: prop_types.func,\n onTouchMove: prop_types.func,\n onTouchEnd: prop_types.func,\n onMouseEnter: prop_types.func,\n onMouseLeave: prop_types.func,\n onMouseOut: prop_types.func,\n onWheel: prop_types.func,\n touchAction: prop_types.string,\n eventRecognizerOptions: prop_types.object,\n clickRadius: prop_types.number,\n interactiveLayerIds: prop_types.array,\n getCursor: prop_types.func,\n controller: prop_types.instanceOf(MapController)\n});\n\nvar getDefaultCursor = function getDefaultCursor(_ref) {\n var isDragging = _ref.isDragging,\n isHovering = _ref.isHovering;\n return isDragging ? \'grabbing\' : isHovering ? \'pointer\' : \'grab\';\n};\n\nvar interactive_map_defaultProps = Object.assign({}, static_map.defaultProps, MAPBOX_LIMITS, TransitionManager.defaultProps, {\n onViewStateChange: null,\n onViewportChange: null,\n onClick: null,\n onNativeClick: null,\n onHover: null,\n onContextMenu: function onContextMenu(event) {\n return event.preventDefault();\n },\n scrollZoom: true,\n dragPan: true,\n dragRotate: true,\n doubleClickZoom: true,\n touchZoom: true,\n touchRotate: false,\n keyboard: true,\n touchAction: \'none\',\n eventRecognizerOptions: {},\n clickRadius: 0,\n getCursor: getDefaultCursor\n});\n\nfunction normalizeEvent(event) {\n if (event.lngLat || !event.offsetCenter) {\n return event;\n }\n\n var _event$offsetCenter = event.offsetCenter,\n x = _event$offsetCenter.x,\n y = _event$offsetCenter.y;\n\n if (!Number.isFinite(x) || !Number.isFinite(y)) {\n return event;\n }\n\n var pos = [x, y];\n event.point = pos;\n var viewport = this.viewport;\n var location = viewport.unproject(pos, {\n targetZ: viewport.meterOffset[2]\n });\n event.lngLat = [location[0], location[1]];\n return event;\n}\n\nfunction getFeatures(pos) {\n var map = this.map;\n\n if (!map || !pos) {\n return null;\n }\n\n var queryParams = {};\n var size = this.props.clickRadius;\n\n if (this.props.interactiveLayerIds) {\n queryParams.layers = this.props.interactiveLayerIds;\n }\n\n try {\n return map.queryRenderedFeatures(size ? [[pos[0] - size, pos[1] + size], [pos[0] + size, pos[1] - size]] : pos, queryParams);\n } catch (_unused) {\n return null;\n }\n}\n\nfunction onEvent(callbackName, event) {\n var func = this.props[callbackName];\n\n if (func) {\n func(normalizeEvent.call(this, event));\n }\n}\n\nfunction onPointerDown(event) {\n onEvent.call(this, event.pointerType === \'touch\' ? \'onTouchStart\' : \'onMouseDown\', event);\n}\n\nfunction onPointerUp(event) {\n onEvent.call(this, event.pointerType === \'touch\' ? \'onTouchEnd\' : \'onMouseUp\', event);\n}\n\nfunction onPointerMove(event) {\n onEvent.call(this, event.pointerType === \'touch\' ? \'onTouchMove\' : \'onMouseMove\', event);\n\n if (!this.state.isDragging) {\n var _this$props = this.props,\n onHover = _this$props.onHover,\n interactiveLayerIds = _this$props.interactiveLayerIds;\n var features;\n event = normalizeEvent.call(this, event);\n\n if (interactiveLayerIds || onHover) {\n features = getFeatures.call(this, event.point);\n }\n\n var isHovering = Boolean(interactiveLayerIds && features && features.length > 0);\n var isEntering = isHovering && !this.state.isHovering;\n var isExiting = !isHovering && this.state.isHovering;\n\n if (onHover || isEntering) {\n event.features = features;\n\n if (onHover) {\n onHover(event);\n }\n }\n\n if (isEntering) {\n onEvent.call(this, \'onMouseEnter\', event);\n }\n\n if (isExiting) {\n onEvent.call(this, \'onMouseLeave\', event);\n }\n\n if (isEntering || isExiting) {\n this.setState({\n isHovering: isHovering\n });\n }\n }\n}\n\nfunction onPointerClick(event) {\n var _this$props2 = this.props,\n onClick = _this$props2.onClick,\n onNativeClick = _this$props2.onNativeClick,\n onDblClick = _this$props2.onDblClick,\n doubleClickZoom = _this$props2.doubleClickZoom;\n var callbacks = [];\n var isDoubleClickEnabled = onDblClick || doubleClickZoom;\n\n switch (event.type) {\n case \'anyclick\':\n callbacks.push(onNativeClick);\n\n if (!isDoubleClickEnabled) {\n callbacks.push(onClick);\n }\n\n break;\n\n case \'click\':\n if (isDoubleClickEnabled) {\n callbacks.push(onClick);\n }\n\n break;\n\n default:\n }\n\n callbacks = callbacks.filter(Boolean);\n\n if (callbacks.length) {\n event = normalizeEvent.call(this, event);\n event.features = getFeatures.call(this, event.point);\n callbacks.forEach(function (cb) {\n return cb(event);\n });\n }\n}\n\nfunction interactive_map_getRefHandles(staticMapRef) {\n return {\n getMap: staticMapRef.current && staticMapRef.current.getMap,\n queryRenderedFeatures: staticMapRef.current && staticMapRef.current.queryRenderedFeatures\n };\n}\n\nvar InteractiveMap = (0,react.forwardRef)(function (props, ref) {\n var parentContext = (0,react.useContext)(map_context);\n var controller = (0,react.useMemo)(function () {\n return props.controller || new MapController();\n }, []);\n var eventManager = (0,react.useMemo)(function () {\n return new EventManager(null, {\n touchAction: props.touchAction,\n recognizerOptions: props.eventRecognizerOptions\n });\n }, []);\n var eventCanvasRef = (0,react.useRef)(null);\n var staticMapRef = (0,react.useRef)(null);\n\n var _thisRef = (0,react.useRef)({\n width: 0,\n height: 0,\n state: {\n isHovering: false,\n isDragging: false\n }\n });\n\n var thisRef = _thisRef.current;\n thisRef.props = props;\n thisRef.map = staticMapRef.current && staticMapRef.current.getMap();\n\n thisRef.setState = function (newState) {\n thisRef.state = interactive_map_objectSpread(interactive_map_objectSpread({}, thisRef.state), newState);\n eventCanvasRef.current.style.cursor = props.getCursor(thisRef.state);\n };\n\n var inRender = true;\n var viewportUpdateRequested;\n var stateUpdateRequested;\n\n var handleViewportChange = function handleViewportChange(viewState, interactionState, oldViewState) {\n if (inRender) {\n viewportUpdateRequested = [viewState, interactionState, oldViewState];\n return;\n }\n\n var _thisRef$props = thisRef.props,\n onViewStateChange = _thisRef$props.onViewStateChange,\n onViewportChange = _thisRef$props.onViewportChange;\n Object.defineProperty(viewState, \'position\', {\n get: function get() {\n return [0, 0, getTerrainElevation(thisRef.map, viewState)];\n }\n });\n\n if (onViewStateChange) {\n onViewStateChange({\n viewState: viewState,\n interactionState: interactionState,\n oldViewState: oldViewState\n });\n }\n\n if (onViewportChange) {\n onViewportChange(viewState, interactionState, oldViewState);\n }\n };\n\n (0,react.useImperativeHandle)(ref, function () {\n return interactive_map_getRefHandles(staticMapRef);\n }, []);\n var context = (0,react.useMemo)(function () {\n return interactive_map_objectSpread(interactive_map_objectSpread({}, parentContext), {}, {\n eventManager: eventManager,\n container: parentContext.container || eventCanvasRef.current\n });\n }, [parentContext, eventCanvasRef.current]);\n context.onViewportChange = handleViewportChange;\n context.viewport = parentContext.viewport || getViewport(thisRef);\n thisRef.viewport = context.viewport;\n\n var handleInteractionStateChange = function handleInteractionStateChange(interactionState) {\n var _interactionState$isD = interactionState.isDragging,\n isDragging = _interactionState$isD === void 0 ? false : _interactionState$isD;\n\n if (isDragging !== thisRef.state.isDragging) {\n thisRef.setState({\n isDragging: isDragging\n });\n }\n\n if (inRender) {\n stateUpdateRequested = interactionState;\n return;\n }\n\n var onInteractionStateChange = thisRef.props.onInteractionStateChange;\n\n if (onInteractionStateChange) {\n onInteractionStateChange(interactionState);\n }\n };\n\n var updateControllerOpts = function updateControllerOpts() {\n if (thisRef.width && thisRef.height) {\n controller.setOptions(interactive_map_objectSpread(interactive_map_objectSpread(interactive_map_objectSpread({}, thisRef.props), thisRef.props.viewState), {}, {\n isInteractive: Boolean(thisRef.props.onViewStateChange || thisRef.props.onViewportChange),\n onViewportChange: handleViewportChange,\n onStateChange: handleInteractionStateChange,\n eventManager: eventManager,\n width: thisRef.width,\n height: thisRef.height\n }));\n }\n };\n\n var onResize = function onResize(_ref2) {\n var width = _ref2.width,\n height = _ref2.height;\n thisRef.width = width;\n thisRef.height = height;\n updateControllerOpts();\n thisRef.props.onResize({\n width: width,\n height: height\n });\n };\n\n (0,react.useEffect)(function () {\n eventManager.setElement(eventCanvasRef.current);\n eventManager.on({\n pointerdown: onPointerDown.bind(thisRef),\n pointermove: onPointerMove.bind(thisRef),\n pointerup: onPointerUp.bind(thisRef),\n pointerleave: onEvent.bind(thisRef, \'onMouseOut\'),\n click: onPointerClick.bind(thisRef),\n anyclick: onPointerClick.bind(thisRef),\n dblclick: onEvent.bind(thisRef, \'onDblClick\'),\n wheel: onEvent.bind(thisRef, \'onWheel\'),\n contextmenu: onEvent.bind(thisRef, \'onContextMenu\')\n });\n return function () {\n eventManager.destroy();\n };\n }, []);\n use_isomorphic_layout_effect(function () {\n if (viewportUpdateRequested) {\n handleViewportChange.apply(void 0, (0,toConsumableArray/* default */.Z)(viewportUpdateRequested));\n }\n\n if (stateUpdateRequested) {\n handleInteractionStateChange(stateUpdateRequested);\n }\n });\n updateControllerOpts();\n var width = props.width,\n height = props.height,\n style = props.style,\n getCursor = props.getCursor;\n var eventCanvasStyle = (0,react.useMemo)(function () {\n return interactive_map_objectSpread(interactive_map_objectSpread({\n position: \'relative\'\n }, style), {}, {\n width: width,\n height: height,\n cursor: getCursor(thisRef.state)\n });\n }, [style, width, height, getCursor, thisRef.state]);\n\n if (!viewportUpdateRequested || !thisRef._child) {\n thisRef._child = react.createElement(MapContextProvider, {\n value: context\n }, react.createElement("div", {\n key: "event-canvas",\n ref: eventCanvasRef,\n style: eventCanvasStyle\n }, react.createElement(static_map, _extends({}, props, {\n width: "100%",\n height: "100%",\n style: null,\n onResize: onResize,\n ref: staticMapRef\n }))));\n }\n\n inRender = false;\n return thisRef._child;\n});\nInteractiveMap.supported = static_map.supported;\nInteractiveMap.propTypes = interactive_map_propTypes;\nInteractiveMap.defaultProps = interactive_map_defaultProps;\n/* harmony default export */ var interactive_map = (InteractiveMap);\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/typeof.js\nfunction _typeof(obj) {\n "@babel/helpers - typeof";\n\n if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/utils/deep-equal.js\n\nfunction deepEqual(a, b) {\n if (a === b) {\n return true;\n }\n\n if (!a || !b) {\n return false;\n }\n\n if (Array.isArray(a)) {\n if (!Array.isArray(b) || a.length !== b.length) {\n return false;\n }\n\n for (var i = 0; i < a.length; i++) {\n if (!deepEqual(a[i], b[i])) {\n return false;\n }\n }\n\n return true;\n } else if (Array.isArray(b)) {\n return false;\n }\n\n if (_typeof(a) === \'object\' && _typeof(b) === \'object\') {\n var aKeys = Object.keys(a);\n var bKeys = Object.keys(b);\n\n if (aKeys.length !== bKeys.length) {\n return false;\n }\n\n for (var _i = 0, _aKeys = aKeys; _i < _aKeys.length; _i++) {\n var key = _aKeys[_i];\n\n if (!b.hasOwnProperty(key)) {\n return false;\n }\n\n if (!deepEqual(a[key], b[key])) {\n return false;\n }\n }\n\n return true;\n }\n\n return false;\n}\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/components/source.js\n\n\n\nfunction source_ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction source_objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n source_ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n source_ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\n\n\n\n\n\n\nvar sourceCounter = 0;\n\nfunction createSource(map, id, props) {\n if (map.style && map.style._loaded) {\n var options = source_objectSpread({}, props);\n\n delete options.id;\n delete options.children;\n map.addSource(id, options);\n return map.getSource(id);\n }\n\n return null;\n}\n\nfunction updateSource(source, props, prevProps) {\n utils_assert_assert(props.id === prevProps.id, \'source id changed\');\n utils_assert_assert(props.type === prevProps.type, \'source type changed\');\n var changedKey = \'\';\n var changedKeyCount = 0;\n\n for (var key in props) {\n if (key !== \'children\' && key !== \'id\' && !deepEqual(prevProps[key], props[key])) {\n changedKey = key;\n changedKeyCount++;\n }\n }\n\n if (!changedKeyCount) {\n return;\n }\n\n var type = props.type;\n\n if (type === \'geojson\') {\n source.setData(props.data);\n } else if (type === \'image\') {\n source.updateImage({\n url: props.url,\n coordinates: props.coordinates\n });\n } else if ((type === \'canvas\' || type === \'video\') && changedKeyCount === 1 && changedKey === \'coordinates\') {\n source.setCoordinates(props.coordinates);\n } else if (type === \'vector\' && source.setUrl) {\n switch (changedKey) {\n case \'url\':\n source.setUrl(props.url);\n break;\n\n case \'tiles\':\n source.setTiles(props.tiles);\n break;\n\n default:\n }\n } else {\n console.warn("Unable to update prop: ".concat(changedKey));\n }\n}\n\nfunction Source(props) {\n var context = (0,react.useContext)(map_context);\n var propsRef = (0,react.useRef)({\n id: props.id,\n type: props.type\n });\n\n var _useState = (0,react.useState)(0),\n _useState2 = slicedToArray_slicedToArray(_useState, 2),\n setStyleLoaded = _useState2[1];\n\n var id = (0,react.useMemo)(function () {\n return props.id || "jsx-source-".concat(sourceCounter++);\n }, []);\n var map = context.map;\n (0,react.useEffect)(function () {\n if (map) {\n var forceUpdate = function forceUpdate() {\n return setStyleLoaded(function (version) {\n return version + 1;\n });\n };\n\n map.on(\'styledata\', forceUpdate);\n return function () {\n map.off(\'styledata\', forceUpdate);\n requestAnimationFrame(function () {\n if (map.style && map.style._loaded && map.getSource(id)) {\n map.removeSource(id);\n }\n });\n };\n }\n\n return undefined;\n }, [map, id]);\n var source = map && map.style && map.getSource(id);\n\n if (source) {\n updateSource(source, props, propsRef.current);\n } else {\n source = createSource(map, id, props);\n }\n\n propsRef.current = props;\n return source && react.Children.map(props.children, function (child) {\n return child && (0,react.cloneElement)(child, {\n source: id\n });\n }) || null;\n}\n\n/* harmony default export */ var source = (Source);\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = _objectWithoutPropertiesLoose(source, excluded);\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/components/layer.js\n\n\n\n\nfunction layer_ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction layer_objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n layer_ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n layer_ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\n\n\n\n\n\nvar LAYER_TYPES = [\'fill\', \'line\', \'symbol\', \'circle\', \'fill-extrusion\', \'raster\', \'background\', \'heatmap\', \'hillshade\', \'sky\'];\nvar layer_propTypes = {\n type: prop_types.oneOf(LAYER_TYPES).isRequired,\n id: prop_types.string,\n source: prop_types.string,\n beforeId: prop_types.string\n};\n\nfunction diffLayerStyles(map, id, props, prevProps) {\n var _props$layout = props.layout,\n layout = _props$layout === void 0 ? {} : _props$layout,\n _props$paint = props.paint,\n paint = _props$paint === void 0 ? {} : _props$paint,\n filter = props.filter,\n minzoom = props.minzoom,\n maxzoom = props.maxzoom,\n beforeId = props.beforeId,\n otherProps = _objectWithoutProperties(props, ["layout", "paint", "filter", "minzoom", "maxzoom", "beforeId"]);\n\n if (beforeId !== prevProps.beforeId) {\n map.moveLayer(id, beforeId);\n }\n\n if (layout !== prevProps.layout) {\n var prevLayout = prevProps.layout || {};\n\n for (var key in layout) {\n if (!deepEqual(layout[key], prevLayout[key])) {\n map.setLayoutProperty(id, key, layout[key]);\n }\n }\n\n for (var _key in prevLayout) {\n if (!layout.hasOwnProperty(_key)) {\n map.setLayoutProperty(id, _key, undefined);\n }\n }\n }\n\n if (paint !== prevProps.paint) {\n var prevPaint = prevProps.paint || {};\n\n for (var _key2 in paint) {\n if (!deepEqual(paint[_key2], prevPaint[_key2])) {\n map.setPaintProperty(id, _key2, paint[_key2]);\n }\n }\n\n for (var _key3 in prevPaint) {\n if (!paint.hasOwnProperty(_key3)) {\n map.setPaintProperty(id, _key3, undefined);\n }\n }\n }\n\n if (!deepEqual(filter, prevProps.filter)) {\n map.setFilter(id, filter);\n }\n\n if (minzoom !== prevProps.minzoom || maxzoom !== prevProps.maxzoom) {\n map.setLayerZoomRange(id, minzoom, maxzoom);\n }\n\n for (var _key4 in otherProps) {\n if (!deepEqual(otherProps[_key4], prevProps[_key4])) {\n map.setLayerProperty(id, _key4, otherProps[_key4]);\n }\n }\n}\n\nfunction createLayer(map, id, props) {\n if (map.style && map.style._loaded) {\n var options = layer_objectSpread(layer_objectSpread({}, props), {}, {\n id: id\n });\n\n delete options.beforeId;\n map.addLayer(options, props.beforeId);\n }\n}\n\nfunction updateLayer(map, id, props, prevProps) {\n utils_assert_assert(props.id === prevProps.id, \'layer id changed\');\n utils_assert_assert(props.type === prevProps.type, \'layer type changed\');\n\n try {\n diffLayerStyles(map, id, props, prevProps);\n } catch (error) {\n console.warn(error);\n }\n}\n\nvar layerCounter = 0;\n\nfunction Layer(props) {\n var context = (0,react.useContext)(map_context);\n var propsRef = (0,react.useRef)({\n id: props.id,\n type: props.type\n });\n\n var _useState = (0,react.useState)(0),\n _useState2 = slicedToArray_slicedToArray(_useState, 2),\n setStyleLoaded = _useState2[1];\n\n var id = (0,react.useMemo)(function () {\n return props.id || "jsx-layer-".concat(layerCounter++);\n }, []);\n var map = context.map;\n (0,react.useEffect)(function () {\n if (map) {\n var forceUpdate = function forceUpdate() {\n return setStyleLoaded(function (version) {\n return version + 1;\n });\n };\n\n map.on(\'styledata\', forceUpdate);\n return function () {\n map.off(\'styledata\', forceUpdate);\n\n if (map.style && map.style._loaded) {\n map.removeLayer(id);\n }\n };\n }\n\n return undefined;\n }, [map]);\n var layer = map && map.style && map.getLayer(id);\n\n if (layer) {\n updateLayer(map, id, props, propsRef.current);\n } else {\n createLayer(map, id, props);\n }\n\n propsRef.current = props;\n return null;\n}\n\nLayer.propTypes = layer_propTypes;\n/* harmony default export */ var components_layer = (Layer);\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/components/use-map-control.js\n\n\n\nvar mapControlDefaultProps = {\n captureScroll: false,\n captureDrag: true,\n captureClick: true,\n captureDoubleClick: true,\n capturePointerMove: false\n};\nvar mapControlPropTypes = {\n captureScroll: prop_types.bool,\n captureDrag: prop_types.bool,\n captureClick: prop_types.bool,\n captureDoubleClick: prop_types.bool,\n capturePointerMove: prop_types.bool\n};\n\nfunction onMount(thisRef) {\n var ref = thisRef.containerRef.current;\n var eventManager = thisRef.context.eventManager;\n\n if (!ref || !eventManager) {\n return undefined;\n }\n\n var events = {\n wheel: function wheel(evt) {\n var props = thisRef.props;\n\n if (props.captureScroll) {\n evt.stopPropagation();\n }\n\n if (props.onScroll) {\n props.onScroll(evt, thisRef);\n }\n },\n panstart: function panstart(evt) {\n var props = thisRef.props;\n\n if (props.captureDrag) {\n evt.stopPropagation();\n }\n\n if (props.onDragStart) {\n props.onDragStart(evt, thisRef);\n }\n },\n anyclick: function anyclick(evt) {\n var props = thisRef.props;\n\n if (props.captureClick) {\n evt.stopPropagation();\n }\n\n if (props.onClick) {\n props.onClick(evt, thisRef);\n }\n },\n click: function click(evt) {\n var props = thisRef.props;\n\n if (props.captureClick) {\n evt.stopPropagation();\n }\n\n if (props.onClick) {\n props.onClick(evt, thisRef);\n }\n },\n dblclick: function dblclick(evt) {\n var props = thisRef.props;\n\n if (props.captureDoubleClick) {\n evt.stopPropagation();\n }\n\n if (props.onDoubleClick) {\n props.onDoubleClick(evt, thisRef);\n }\n },\n pointermove: function pointermove(evt) {\n var props = thisRef.props;\n\n if (props.capturePointerMove) {\n evt.stopPropagation();\n }\n\n if (props.onPointerMove) {\n props.onPointerMove(evt, thisRef);\n }\n }\n };\n eventManager.watch(events, ref);\n return function () {\n eventManager.off(events);\n };\n}\n\nfunction useMapControl() {\n var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var context = (0,react.useContext)(map_context);\n var containerRef = (0,react.useRef)(null);\n\n var _thisRef = (0,react.useRef)({\n props: props,\n state: {},\n context: context,\n containerRef: containerRef\n });\n\n var thisRef = _thisRef.current;\n thisRef.props = props;\n thisRef.context = context;\n (0,react.useEffect)(function () {\n return onMount(thisRef);\n }, [context.eventManager]);\n return thisRef;\n}\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/components/base-control.js\n\n\n\n\n\n\n\n\n\nfunction base_control_createSuper(Derived) {\n var hasNativeReflectConstruct = base_control_isNativeReflectConstruct();\n\n return function _createSuperInternal() {\n var Super = _getPrototypeOf(Derived),\n result;\n\n if (hasNativeReflectConstruct) {\n var NewTarget = _getPrototypeOf(this).constructor;\n\n result = Reflect.construct(Super, arguments, NewTarget);\n } else {\n result = Super.apply(this, arguments);\n }\n\n return _possibleConstructorReturn(this, result);\n };\n}\n\nfunction base_control_isNativeReflectConstruct() {\n if (typeof Reflect === "undefined" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === "function") return true;\n\n try {\n Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}\n\n\n\n\n\nfunction Control(props) {\n var instance = props.instance;\n\n var _useMapControl = useMapControl(props),\n context = _useMapControl.context,\n containerRef = _useMapControl.containerRef;\n\n instance._context = context;\n instance._containerRef = containerRef;\n return instance._render();\n}\n\nvar BaseControl = function (_PureComponent) {\n _inherits(BaseControl, _PureComponent);\n\n var _super = base_control_createSuper(BaseControl);\n\n function BaseControl() {\n var _this;\n\n _classCallCheck(this, BaseControl);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), "_context", {});\n\n _defineProperty(_assertThisInitialized(_this), "_containerRef", (0,react.createRef)());\n\n _defineProperty(_assertThisInitialized(_this), "_onScroll", function (evt) {});\n\n _defineProperty(_assertThisInitialized(_this), "_onDragStart", function (evt) {});\n\n _defineProperty(_assertThisInitialized(_this), "_onDblClick", function (evt) {});\n\n _defineProperty(_assertThisInitialized(_this), "_onClick", function (evt) {});\n\n _defineProperty(_assertThisInitialized(_this), "_onPointerMove", function (evt) {});\n\n return _this;\n }\n\n _createClass(BaseControl, [{\n key: "_render",\n value: function _render() {\n throw new Error(\'_render() not implemented\');\n }\n }, {\n key: "render",\n value: function render() {\n return react.createElement(Control, _extends({\n instance: this\n }, this.props, {\n onScroll: this._onScroll,\n onDragStart: this._onDragStart,\n onDblClick: this._onDblClick,\n onClick: this._onClick,\n onPointerMove: this._onPointerMove\n }));\n }\n }]);\n\n return BaseControl;\n}(react.PureComponent);\n\n_defineProperty(BaseControl, "propTypes", mapControlPropTypes);\n\n_defineProperty(BaseControl, "defaultProps", mapControlDefaultProps);\n\n\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/components/draggable-control.js\n\n\n\nfunction draggable_control_ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction draggable_control_objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n draggable_control_ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n draggable_control_ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\n\n\n\nvar draggableControlPropTypes = Object.assign({}, mapControlPropTypes, {\n draggable: prop_types.bool,\n onDrag: prop_types.func,\n onDragEnd: prop_types.func,\n onDragStart: prop_types.func,\n offsetLeft: prop_types.number,\n offsetTop: prop_types.number\n});\nvar draggableControlDefaultProps = Object.assign({}, mapControlDefaultProps, {\n draggable: false,\n offsetLeft: 0,\n offsetTop: 0\n});\n\nfunction getDragEventPosition(event) {\n var _event$offsetCenter = event.offsetCenter,\n x = _event$offsetCenter.x,\n y = _event$offsetCenter.y;\n return [x, y];\n}\n\nfunction getDragEventOffset(event, container) {\n var _event$center = event.center,\n x = _event$center.x,\n y = _event$center.y;\n\n if (container) {\n var rect = container.getBoundingClientRect();\n return [rect.left - x, rect.top - y];\n }\n\n return null;\n}\n\nfunction getDragLngLat(dragPos, dragOffset, props, context) {\n var x = dragPos[0] + dragOffset[0] - props.offsetLeft;\n var y = dragPos[1] + dragOffset[1] - props.offsetTop;\n return context.viewport.unproject([x, y]);\n}\n\nfunction onDragStart(event, _ref) {\n var props = _ref.props,\n callbacks = _ref.callbacks,\n state = _ref.state,\n context = _ref.context,\n containerRef = _ref.containerRef;\n var draggable = props.draggable;\n\n if (!draggable) {\n return;\n }\n\n event.stopPropagation();\n var dragPos = getDragEventPosition(event);\n var dragOffset = getDragEventOffset(event, containerRef.current);\n state.setDragPos(dragPos);\n state.setDragOffset(dragOffset);\n\n if (callbacks.onDragStart && dragOffset) {\n var callbackEvent = Object.assign({}, event);\n callbackEvent.lngLat = getDragLngLat(dragPos, dragOffset, props, context);\n callbacks.onDragStart(callbackEvent);\n }\n}\n\nfunction onDrag(event, _ref2) {\n var props = _ref2.props,\n callbacks = _ref2.callbacks,\n state = _ref2.state,\n context = _ref2.context;\n event.stopPropagation();\n var dragPos = getDragEventPosition(event);\n state.setDragPos(dragPos);\n var dragOffset = state.dragOffset;\n\n if (callbacks.onDrag && dragOffset) {\n var callbackEvent = Object.assign({}, event);\n callbackEvent.lngLat = getDragLngLat(dragPos, dragOffset, props, context);\n callbacks.onDrag(callbackEvent);\n }\n}\n\nfunction onDragEnd(event, _ref3) {\n var props = _ref3.props,\n callbacks = _ref3.callbacks,\n state = _ref3.state,\n context = _ref3.context;\n event.stopPropagation();\n var dragPos = state.dragPos,\n dragOffset = state.dragOffset;\n state.setDragPos(null);\n state.setDragOffset(null);\n\n if (callbacks.onDragEnd && dragPos && dragOffset) {\n var callbackEvent = Object.assign({}, event);\n callbackEvent.lngLat = getDragLngLat(dragPos, dragOffset, props, context);\n callbacks.onDragEnd(callbackEvent);\n }\n}\n\nfunction onDragCancel(event, _ref4) {\n var state = _ref4.state;\n event.stopPropagation();\n state.setDragPos(null);\n state.setDragOffset(null);\n}\n\nfunction registerEvents(thisRef) {\n var eventManager = thisRef.context.eventManager;\n\n if (!eventManager || !thisRef.state.dragPos) {\n return undefined;\n }\n\n var events = {\n panmove: function panmove(evt) {\n return onDrag(evt, thisRef);\n },\n panend: function panend(evt) {\n return onDragEnd(evt, thisRef);\n },\n pancancel: function pancancel(evt) {\n return onDragCancel(evt, thisRef);\n }\n };\n eventManager.watch(events);\n return function () {\n eventManager.off(events);\n };\n}\n\nfunction useDraggableControl(props) {\n var _useState = (0,react.useState)(null),\n _useState2 = slicedToArray_slicedToArray(_useState, 2),\n dragPos = _useState2[0],\n setDragPos = _useState2[1];\n\n var _useState3 = (0,react.useState)(null),\n _useState4 = slicedToArray_slicedToArray(_useState3, 2),\n dragOffset = _useState4[0],\n setDragOffset = _useState4[1];\n\n var thisRef = useMapControl(draggable_control_objectSpread(draggable_control_objectSpread({}, props), {}, {\n onDragStart: onDragStart\n }));\n thisRef.callbacks = props;\n thisRef.state.dragPos = dragPos;\n thisRef.state.setDragPos = setDragPos;\n thisRef.state.dragOffset = dragOffset;\n thisRef.state.setDragOffset = setDragOffset;\n (0,react.useEffect)(function () {\n return registerEvents(thisRef);\n }, [thisRef.context.eventManager, Boolean(dragPos)]);\n return thisRef;\n}\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/utils/crisp-pixel.js\nvar pixelRatio = typeof window !== \'undefined\' && window.devicePixelRatio || 1;\nvar crispPixel = function crispPixel(size) {\n return Math.round(size * pixelRatio) / pixelRatio;\n};\nvar crispPercentage = function crispPercentage(el, percentage) {\n var dimension = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : \'x\';\n\n if (el === null) {\n return percentage;\n }\n\n var origSize = dimension === \'x\' ? el.offsetWidth : el.offsetHeight;\n return crispPixel(percentage / 100 * origSize) / origSize * 100;\n};\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/components/marker.js\n\n\n\n\n\n\nvar marker_defaultProps = Object.assign({}, draggableControlDefaultProps, {\n className: \'\'\n});\n\nfunction getPosition(_ref) {\n var props = _ref.props,\n state = _ref.state,\n context = _ref.context;\n var longitude = props.longitude,\n latitude = props.latitude,\n offsetLeft = props.offsetLeft,\n offsetTop = props.offsetTop;\n var dragPos = state.dragPos,\n dragOffset = state.dragOffset;\n var viewport = context.viewport,\n map = context.map;\n\n if (dragPos && dragOffset) {\n return [dragPos[0] + dragOffset[0], dragPos[1] + dragOffset[1]];\n }\n\n var altitude = getTerrainElevation(map, {\n longitude: longitude,\n latitude: latitude\n });\n\n var _viewport$project = viewport.project([longitude, latitude, altitude]),\n _viewport$project2 = slicedToArray_slicedToArray(_viewport$project, 2),\n x = _viewport$project2[0],\n y = _viewport$project2[1];\n\n x += offsetLeft;\n y += offsetTop;\n return [x, y];\n}\n\nfunction Marker(props) {\n var thisRef = useDraggableControl(props);\n var state = thisRef.state,\n containerRef = thisRef.containerRef;\n var children = props.children,\n className = props.className,\n draggable = props.draggable;\n var dragPos = state.dragPos;\n\n var _getPosition = getPosition(thisRef),\n _getPosition2 = slicedToArray_slicedToArray(_getPosition, 2),\n x = _getPosition2[0],\n y = _getPosition2[1];\n\n var transform = "translate(".concat(crispPixel(x), "px, ").concat(crispPixel(y), "px)");\n var cursor = draggable ? dragPos ? \'grabbing\' : \'grab\' : \'auto\';\n var control = (0,react.useMemo)(function () {\n var containerStyle = {\n position: \'absolute\',\n left: 0,\n top: 0,\n transform: transform,\n cursor: cursor\n };\n return react.createElement("div", {\n className: "mapboxgl-marker ".concat(className),\n ref: thisRef.containerRef,\n style: containerStyle\n }, children);\n }, [children, className]);\n var container = containerRef.current;\n\n if (container) {\n container.style.transform = transform;\n container.style.cursor = cursor;\n }\n\n return control;\n}\n\nMarker.defaultProps = marker_defaultProps;\n/* harmony default export */ var marker = (react.memo(Marker));\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/utils/dynamic-position.js\nvar ANCHOR_POSITION = {\n top: {\n x: 0.5,\n y: 0\n },\n \'top-left\': {\n x: 0,\n y: 0\n },\n \'top-right\': {\n x: 1,\n y: 0\n },\n bottom: {\n x: 0.5,\n y: 1\n },\n \'bottom-left\': {\n x: 0,\n y: 1\n },\n \'bottom-right\': {\n x: 1,\n y: 1\n },\n left: {\n x: 0,\n y: 0.5\n },\n right: {\n x: 1,\n y: 0.5\n }\n};\nvar ANCHOR_TYPES = Object.keys(ANCHOR_POSITION);\nfunction getDynamicPosition(_ref) {\n var x = _ref.x,\n y = _ref.y,\n width = _ref.width,\n height = _ref.height,\n selfWidth = _ref.selfWidth,\n selfHeight = _ref.selfHeight,\n anchor = _ref.anchor,\n _ref$padding = _ref.padding,\n padding = _ref$padding === void 0 ? 0 : _ref$padding;\n var _ANCHOR_POSITION$anch = ANCHOR_POSITION[anchor],\n anchorX = _ANCHOR_POSITION$anch.x,\n anchorY = _ANCHOR_POSITION$anch.y;\n var top = y - anchorY * selfHeight;\n var bottom = top + selfHeight;\n var cutoffY = Math.max(0, padding - top) + Math.max(0, bottom - height + padding);\n\n if (cutoffY > 0) {\n var bestAnchorY = anchorY;\n var minCutoff = cutoffY;\n\n for (anchorY = 0; anchorY <= 1; anchorY += 0.5) {\n top = y - anchorY * selfHeight;\n bottom = top + selfHeight;\n cutoffY = Math.max(0, padding - top) + Math.max(0, bottom - height + padding);\n\n if (cutoffY < minCutoff) {\n minCutoff = cutoffY;\n bestAnchorY = anchorY;\n }\n }\n\n anchorY = bestAnchorY;\n }\n\n var xStep = 0.5;\n\n if (anchorY === 0.5) {\n anchorX = Math.floor(anchorX);\n xStep = 1;\n }\n\n var left = x - anchorX * selfWidth;\n var right = left + selfWidth;\n var cutoffX = Math.max(0, padding - left) + Math.max(0, right - width + padding);\n\n if (cutoffX > 0) {\n var bestAnchorX = anchorX;\n var _minCutoff = cutoffX;\n\n for (anchorX = 0; anchorX <= 1; anchorX += xStep) {\n left = x - anchorX * selfWidth;\n right = left + selfWidth;\n cutoffX = Math.max(0, padding - left) + Math.max(0, right - width + padding);\n\n if (cutoffX < _minCutoff) {\n _minCutoff = cutoffX;\n bestAnchorX = anchorX;\n }\n }\n\n anchorX = bestAnchorX;\n }\n\n return ANCHOR_TYPES.find(function (positionType) {\n var anchorPosition = ANCHOR_POSITION[positionType];\n return anchorPosition.x === anchorX && anchorPosition.y === anchorY;\n }) || anchor;\n}\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/components/popup.js\n\n\n\nfunction popup_ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction popup_objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n popup_ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n popup_ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\n\n\n\n\n\n\nvar popup_defaultProps = Object.assign({}, mapControlDefaultProps, {\n className: \'\',\n offsetLeft: 0,\n offsetTop: 0,\n tipSize: 10,\n anchor: \'bottom\',\n dynamicPosition: true,\n sortByDepth: false,\n closeButton: true,\n closeOnClick: true,\n onClose: function onClose() {}\n});\n\nfunction popup_getPosition(props, viewport, el, _ref) {\n var _ref2 = slicedToArray_slicedToArray(_ref, 2),\n x = _ref2[0],\n y = _ref2[1];\n\n var anchor = props.anchor,\n dynamicPosition = props.dynamicPosition,\n tipSize = props.tipSize;\n\n if (el) {\n return dynamicPosition ? getDynamicPosition({\n x: x,\n y: y,\n anchor: anchor,\n padding: tipSize,\n width: viewport.width,\n height: viewport.height,\n selfWidth: el.clientWidth,\n selfHeight: el.clientHeight\n }) : anchor;\n }\n\n return anchor;\n}\n\nfunction getContainerStyle(props, viewport, el, _ref3, positionType) {\n var _ref4 = slicedToArray_slicedToArray(_ref3, 3),\n x = _ref4[0],\n y = _ref4[1],\n z = _ref4[2];\n\n var offsetLeft = props.offsetLeft,\n offsetTop = props.offsetTop,\n sortByDepth = props.sortByDepth;\n var anchorPosition = ANCHOR_POSITION[positionType];\n var left = x + offsetLeft;\n var top = y + offsetTop;\n var xPercentage = crispPercentage(el, -anchorPosition.x * 100);\n var yPercentage = crispPercentage(el, -anchorPosition.y * 100, \'y\');\n var style = {\n position: \'absolute\',\n transform: "\\n translate(".concat(xPercentage, "%, ").concat(yPercentage, "%)\\n translate(").concat(crispPixel(left), "px, ").concat(crispPixel(top), "px)\\n "),\n display: undefined,\n zIndex: undefined\n };\n\n if (!sortByDepth) {\n return style;\n }\n\n if (z > 1 || z < -1 || x < 0 || x > viewport.width || y < 0 || y > viewport.height) {\n style.display = \'none\';\n } else {\n style.zIndex = Math.floor((1 - z) / 2 * 100000);\n }\n\n return style;\n}\n\nfunction onClick(evt, _ref5) {\n var props = _ref5.props,\n context = _ref5.context;\n\n if (props.closeOnClick || evt.target.className === \'mapboxgl-popup-close-button\') {\n props.onClose();\n\n if (context.eventManager) {\n context.eventManager.once(\'click\', function (e) {\n return e.stopPropagation();\n }, evt.target);\n }\n }\n}\n\nfunction Popup(props) {\n var contentRef = (0,react.useRef)(null);\n var thisRef = useMapControl(popup_objectSpread(popup_objectSpread({}, props), {}, {\n onClick: onClick\n }));\n var context = thisRef.context,\n containerRef = thisRef.containerRef;\n\n var _useState = (0,react.useState)(false),\n _useState2 = slicedToArray_slicedToArray(_useState, 2),\n setLoaded = _useState2[1];\n\n (0,react.useEffect)(function () {\n setLoaded(true);\n }, [contentRef.current]);\n var viewport = context.viewport,\n map = context.map;\n var className = props.className,\n longitude = props.longitude,\n latitude = props.latitude,\n tipSize = props.tipSize,\n closeButton = props.closeButton,\n children = props.children;\n var altitude = props.altitude;\n\n if (altitude === undefined) {\n altitude = getTerrainElevation(map, {\n longitude: longitude,\n latitude: latitude\n });\n }\n\n var position = viewport.project([longitude, latitude, altitude]);\n var positionType = popup_getPosition(props, viewport, contentRef.current, position);\n var containerStyle = getContainerStyle(props, viewport, containerRef.current, position, positionType);\n var onReactClick = (0,react.useCallback)(function (e) {\n return !context.eventManager && onClick(e, thisRef);\n }, [context.eventManager]);\n return react.createElement("div", {\n className: "mapboxgl-popup mapboxgl-popup-anchor-".concat(positionType, " ").concat(className),\n style: containerStyle,\n ref: containerRef\n }, react.createElement("div", {\n key: "tip",\n className: "mapboxgl-popup-tip",\n style: {\n borderWidth: tipSize\n }\n }), react.createElement("div", {\n key: "content",\n ref: contentRef,\n className: "mapboxgl-popup-content",\n onClick: onReactClick\n }, closeButton && react.createElement("button", {\n key: "close-button",\n className: "mapboxgl-popup-close-button",\n type: "button"\n }, "\\xD7"), children));\n}\n\nPopup.defaultProps = popup_defaultProps;\n/* harmony default export */ var popup = (react.memo(Popup));\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/components/attribution-control.js\n\n\n\nfunction attribution_control_ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction attribution_control_objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n attribution_control_ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n attribution_control_ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\n\n\n\n\nvar attribution_control_defaultProps = Object.assign({}, mapControlDefaultProps, {\n className: \'\',\n toggleLabel: \'Toggle Attribution\'\n});\n\nfunction setupAttributioncontrol(opts, map, container, attributionContainer) {\n var control = new (maplibre_gl_default()).AttributionControl(opts);\n control._map = map;\n control._container = container;\n control._innerContainer = attributionContainer;\n\n control._updateAttributions();\n\n control._updateEditLink();\n\n map.on(\'styledata\', control._updateData);\n map.on(\'sourcedata\', control._updateData);\n return control;\n}\n\nfunction removeAttributionControl(control) {\n control._map.off(\'styledata\', control._updateData);\n\n control._map.off(\'sourcedata\', control._updateData);\n}\n\nfunction AttributionControl(props) {\n var _useMapControl = useMapControl(props),\n context = _useMapControl.context,\n containerRef = _useMapControl.containerRef;\n\n var innerContainerRef = (0,react.useRef)(null);\n\n var _useState = (0,react.useState)(false),\n _useState2 = slicedToArray_slicedToArray(_useState, 2),\n showCompact = _useState2[0],\n setShowCompact = _useState2[1];\n\n (0,react.useEffect)(function () {\n var control;\n\n if (context.map) {\n control = setupAttributioncontrol({\n customAttribution: props.customAttribution\n }, context.map, containerRef.current, innerContainerRef.current);\n }\n\n return function () {\n return control && removeAttributionControl(control);\n };\n }, [context.map]);\n var compact = props.compact === undefined ? context.viewport.width <= 640 : props.compact;\n (0,react.useEffect)(function () {\n if (!compact && showCompact) {\n setShowCompact(false);\n }\n }, [compact]);\n var toggleAttribution = (0,react.useCallback)(function () {\n return setShowCompact(function (value) {\n return !value;\n });\n }, []);\n var style = (0,react.useMemo)(function () {\n return attribution_control_objectSpread({\n position: \'absolute\'\n }, props.style);\n }, [props.style]);\n return react.createElement("div", {\n style: style,\n className: props.className\n }, react.createElement("div", {\n ref: containerRef,\n "aria-pressed": showCompact,\n className: "mapboxgl-ctrl mapboxgl-ctrl-attrib ".concat(compact ? \'mapboxgl-compact\' : \'\', " ").concat(showCompact ? \'mapboxgl-compact-show\' : \'\')\n }, react.createElement("button", {\n type: "button",\n className: "mapboxgl-ctrl-attrib-button",\n title: props.toggleLabel,\n onClick: toggleAttribution\n }), react.createElement("div", {\n ref: innerContainerRef,\n className: "mapboxgl-ctrl-attrib-inner",\n role: "list"\n })));\n}\n\nAttributionControl.defaultProps = attribution_control_defaultProps;\n/* harmony default export */ var attribution_control = (react.memo(AttributionControl));\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/components/fullscreen-control.js\n\n\n\nfunction fullscreen_control_ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction fullscreen_control_objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n fullscreen_control_ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n fullscreen_control_ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\n\n\n\n\n\nvar fullscreen_control_defaultProps = Object.assign({}, mapControlDefaultProps, {\n className: \'\',\n container: null,\n label: \'Toggle fullscreen\'\n});\n\nfunction FullscreenControl(props) {\n var _useMapControl = useMapControl(props),\n context = _useMapControl.context,\n containerRef = _useMapControl.containerRef;\n\n var _useState = (0,react.useState)(false),\n _useState2 = slicedToArray_slicedToArray(_useState, 2),\n isFullscreen = _useState2[0],\n setIsFullscreen = _useState2[1];\n\n var _useState3 = (0,react.useState)(false),\n _useState4 = slicedToArray_slicedToArray(_useState3, 2),\n showButton = _useState4[0],\n setShowButton = _useState4[1];\n\n var _useState5 = (0,react.useState)(null),\n _useState6 = slicedToArray_slicedToArray(_useState5, 2),\n mapboxFullscreenControl = _useState6[0],\n createMapboxFullscreenControl = _useState6[1];\n\n (0,react.useEffect)(function () {\n var control = new (maplibre_gl_default()).FullscreenControl();\n createMapboxFullscreenControl(control);\n setShowButton(control._checkFullscreenSupport());\n\n var onFullscreenChange = function onFullscreenChange() {\n var nextState = !control._fullscreen;\n control._fullscreen = nextState;\n setIsFullscreen(nextState);\n };\n\n document_.addEventListener(control._fullscreenchange, onFullscreenChange);\n return function () {\n document_.removeEventListener(control._fullscreenchange, onFullscreenChange);\n };\n }, []);\n\n var onClickFullscreen = function onClickFullscreen() {\n if (mapboxFullscreenControl) {\n mapboxFullscreenControl._container = props.container || context.container;\n\n mapboxFullscreenControl._onClickFullscreen();\n }\n };\n\n var style = (0,react.useMemo)(function () {\n return fullscreen_control_objectSpread({\n position: \'absolute\'\n }, props.style);\n }, [props.style]);\n\n if (!showButton) {\n return null;\n }\n\n var className = props.className,\n label = props.label;\n var type = isFullscreen ? \'shrink\' : \'fullscreen\';\n return react.createElement("div", {\n style: style,\n className: className\n }, react.createElement("div", {\n className: "mapboxgl-ctrl mapboxgl-ctrl-group",\n ref: containerRef\n }, react.createElement("button", {\n key: type,\n className: "mapboxgl-ctrl-icon mapboxgl-ctrl-".concat(type),\n type: "button",\n title: label,\n onClick: onClickFullscreen\n }, react.createElement("span", {\n className: "mapboxgl-ctrl-icon",\n "aria-hidden": "true"\n }))));\n}\n\nFullscreenControl.defaultProps = fullscreen_control_defaultProps;\n/* harmony default export */ var fullscreen_control = (react.memo(FullscreenControl));\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/utils/geolocate-utils.js\nvar supported;\nfunction isGeolocationSupported() {\n if (supported !== undefined) {\n return Promise.resolve(supported);\n }\n\n if (window.navigator.permissions !== undefined) {\n return window.navigator.permissions.query({\n name: \'geolocation\'\n }).then(function (p) {\n supported = p.state !== \'denied\';\n return supported;\n });\n }\n\n supported = Boolean(window.navigator.geolocation);\n return Promise.resolve(supported);\n}\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/components/geolocate-control.js\n\n\n\nfunction geolocate_control_ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction geolocate_control_objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n geolocate_control_ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n geolocate_control_ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\n\n\n\n\n\n\n\n\n\nvar geolocate_control_noop = function noop() {};\n\nvar geolocate_control_defaultProps = Object.assign({}, mapControlDefaultProps, {\n className: \'\',\n label: \'Find My Location\',\n disabledLabel: \'Location Not Available\',\n auto: false,\n positionOptions: {\n enableHighAccuracy: false,\n timeout: 6000\n },\n fitBoundsOptions: {\n maxZoom: 15\n },\n trackUserLocation: false,\n showUserLocation: true,\n showAccuracyCircle: true,\n onGeolocate: function onGeolocate() {}\n});\n\nfunction geolocate_control_getBounds(position) {\n var center = new (maplibre_gl_default()).LngLat(position.coords.longitude, position.coords.latitude);\n var radius = position.coords.accuracy;\n var bounds = center.toBounds(radius);\n return [[bounds._ne.lng, bounds._ne.lat], [bounds._sw.lng, bounds._sw.lat]];\n}\n\nfunction setupMapboxGeolocateControl(context, props, geolocateButton) {\n var control = new (maplibre_gl_default()).GeolocateControl(props);\n control._container = document_.createElement(\'div\');\n control._map = {\n on: function on() {},\n _getUIString: function _getUIString() {\n return \'\';\n }\n };\n\n control._setupUI(true);\n\n control._map = context.map;\n control._geolocateButton = geolocateButton;\n var eventManager = context.eventManager;\n\n if (control.options.trackUserLocation && eventManager) {\n eventManager.on(\'panstart\', function () {\n if (control._watchState === \'ACTIVE_LOCK\') {\n control._watchState = \'BACKGROUND\';\n geolocateButton.classList.add(\'mapboxgl-ctrl-geolocate-background\');\n geolocateButton.classList.remove(\'mapboxgl-ctrl-geolocate-active\');\n }\n });\n }\n\n control.on(\'geolocate\', props.onGeolocate);\n return control;\n}\n\nfunction updateCamera(position, _ref) {\n var context = _ref.context,\n props = _ref.props;\n var bounds = geolocate_control_getBounds(position);\n\n var _context$viewport$fit = context.viewport.fitBounds(bounds, props.fitBoundsOptions),\n longitude = _context$viewport$fit.longitude,\n latitude = _context$viewport$fit.latitude,\n zoom = _context$viewport$fit.zoom;\n\n var newViewState = Object.assign({}, context.viewport, {\n longitude: longitude,\n latitude: latitude,\n zoom: zoom\n });\n var mapState = new MapState(newViewState);\n var viewState = Object.assign({}, mapState.getViewportProps(), LINEAR_TRANSITION_PROPS);\n var onViewportChange = props.onViewportChange || context.onViewportChange || geolocate_control_noop;\n var onViewStateChange = props.onViewStateChange || context.onViewStateChange || geolocate_control_noop;\n onViewStateChange({\n viewState: viewState\n });\n onViewportChange(viewState);\n}\n\nfunction GeolocateControl(props) {\n var thisRef = useMapControl(props);\n var context = thisRef.context,\n containerRef = thisRef.containerRef;\n var geolocateButtonRef = (0,react.useRef)(null);\n\n var _useState = (0,react.useState)(null),\n _useState2 = slicedToArray_slicedToArray(_useState, 2),\n mapboxGeolocateControl = _useState2[0],\n createMapboxGeolocateControl = _useState2[1];\n\n var _useState3 = (0,react.useState)(false),\n _useState4 = slicedToArray_slicedToArray(_useState3, 2),\n supportsGeolocation = _useState4[0],\n setSupportsGeolocation = _useState4[1];\n\n (0,react.useEffect)(function () {\n var control;\n\n if (context.map) {\n isGeolocationSupported().then(function (result) {\n setSupportsGeolocation(result);\n\n if (geolocateButtonRef.current) {\n control = setupMapboxGeolocateControl(context, props, geolocateButtonRef.current);\n\n control._updateCamera = function (position) {\n return updateCamera(position, thisRef);\n };\n\n createMapboxGeolocateControl(control);\n }\n });\n }\n\n return function () {\n if (control) {\n control._clearWatch();\n }\n };\n }, [context.map]);\n var triggerGeolocate = (0,react.useCallback)(function () {\n if (mapboxGeolocateControl) {\n mapboxGeolocateControl.options = thisRef.props;\n mapboxGeolocateControl.trigger();\n }\n }, [mapboxGeolocateControl]);\n (0,react.useEffect)(function () {\n if (props.auto) {\n triggerGeolocate();\n }\n }, [mapboxGeolocateControl, props.auto]);\n (0,react.useEffect)(function () {\n if (mapboxGeolocateControl) {\n mapboxGeolocateControl._onZoom();\n }\n }, [context.viewport.zoom]);\n var className = props.className,\n label = props.label,\n disabledLabel = props.disabledLabel,\n trackUserLocation = props.trackUserLocation;\n var style = (0,react.useMemo)(function () {\n return geolocate_control_objectSpread({\n position: \'absolute\'\n }, props.style);\n }, [props.style]);\n return react.createElement("div", {\n style: style,\n className: className\n }, react.createElement("div", {\n key: "geolocate-control",\n className: "mapboxgl-ctrl mapboxgl-ctrl-group",\n ref: containerRef\n }, react.createElement("button", {\n key: "geolocate",\n className: "mapboxgl-ctrl-icon mapboxgl-ctrl-geolocate",\n ref: geolocateButtonRef,\n disabled: !supportsGeolocation,\n "aria-pressed": !trackUserLocation,\n type: "button",\n title: supportsGeolocation ? label : disabledLabel,\n "aria-label": supportsGeolocation ? label : disabledLabel,\n onClick: triggerGeolocate\n }, react.createElement("span", {\n className: "mapboxgl-ctrl-icon",\n "aria-hidden": "true"\n }))));\n}\n\nGeolocateControl.defaultProps = geolocate_control_defaultProps;\n/* harmony default export */ var geolocate_control = (react.memo(GeolocateControl));\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/utils/version.js\nfunction compareVersions(version1, version2) {\n var v1 = (version1 || \'\').split(\'.\').map(Number);\n var v2 = (version2 || \'\').split(\'.\').map(Number);\n\n for (var i = 0; i < 3; i++) {\n var part1 = v1[i] || 0;\n var part2 = v2[i] || 0;\n\n if (part1 < part2) {\n return -1;\n }\n\n if (part1 > part2) {\n return 1;\n }\n }\n\n return 0;\n}\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/components/navigation-control.js\n\n\nfunction navigation_control_ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction navigation_control_objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n navigation_control_ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n navigation_control_ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\n\n\n\n\n\n\n\nvar navigation_control_noop = function noop() {};\n\nvar navigation_control_defaultProps = Object.assign({}, mapControlDefaultProps, {\n className: \'\',\n showCompass: true,\n showZoom: true,\n zoomInLabel: \'Zoom In\',\n zoomOutLabel: \'Zoom Out\',\n compassLabel: \'Reset North\'\n});\nvar VERSION_LEGACY = 1;\nvar VERSION_1_6 = 2;\n\nfunction getUIVersion(mapboxVersion) {\n return compareVersions(mapboxVersion, \'1.6.0\') >= 0 ? VERSION_1_6 : VERSION_LEGACY;\n}\n\nfunction updateViewport(context, props, opts) {\n var viewport = context.viewport;\n var mapState = new MapState(Object.assign({}, viewport, opts));\n var viewState = Object.assign({}, mapState.getViewportProps(), LINEAR_TRANSITION_PROPS);\n var onViewportChange = props.onViewportChange || context.onViewportChange || navigation_control_noop;\n var onViewStateChange = props.onViewStateChange || context.onViewStateChange || navigation_control_noop;\n onViewStateChange({\n viewState: viewState\n });\n onViewportChange(viewState);\n}\n\nfunction renderButton(type, label, callback, children) {\n return react.createElement("button", {\n key: type,\n className: "mapboxgl-ctrl-icon mapboxgl-ctrl-".concat(type),\n type: "button",\n title: label,\n onClick: callback\n }, children || react.createElement("span", {\n className: "mapboxgl-ctrl-icon",\n "aria-hidden": "true"\n }));\n}\n\nfunction renderCompass(context) {\n var uiVersion = (0,react.useMemo)(function () {\n return context.map ? getUIVersion(context.map.version) : VERSION_1_6;\n }, [context.map]);\n var bearing = context.viewport.bearing;\n var style = {\n transform: "rotate(".concat(-bearing, "deg)")\n };\n return uiVersion === VERSION_1_6 ? react.createElement("span", {\n className: "mapboxgl-ctrl-icon",\n "aria-hidden": "true",\n style: style\n }) : react.createElement("span", {\n className: "mapboxgl-ctrl-compass-arrow",\n style: style\n });\n}\n\nfunction NavigationControl(props) {\n var _useMapControl = useMapControl(props),\n context = _useMapControl.context,\n containerRef = _useMapControl.containerRef;\n\n var onZoomIn = function onZoomIn() {\n updateViewport(context, props, {\n zoom: context.viewport.zoom + 1\n });\n };\n\n var onZoomOut = function onZoomOut() {\n updateViewport(context, props, {\n zoom: context.viewport.zoom - 1\n });\n };\n\n var onResetNorth = function onResetNorth() {\n updateViewport(context, props, {\n bearing: 0,\n pitch: 0\n });\n };\n\n var className = props.className,\n showCompass = props.showCompass,\n showZoom = props.showZoom,\n zoomInLabel = props.zoomInLabel,\n zoomOutLabel = props.zoomOutLabel,\n compassLabel = props.compassLabel;\n var style = (0,react.useMemo)(function () {\n return navigation_control_objectSpread({\n position: \'absolute\'\n }, props.style);\n }, [props.style]);\n return react.createElement("div", {\n style: style,\n className: className\n }, react.createElement("div", {\n className: "mapboxgl-ctrl mapboxgl-ctrl-group",\n ref: containerRef\n }, showZoom && renderButton(\'zoom-in\', zoomInLabel, onZoomIn), showZoom && renderButton(\'zoom-out\', zoomOutLabel, onZoomOut), showCompass && renderButton(\'compass\', compassLabel, onResetNorth, renderCompass(context))));\n}\n\nNavigationControl.defaultProps = navigation_control_defaultProps;\n/* harmony default export */ var navigation_control = (react.memo(NavigationControl));\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/components/scale-control.js\n\n\n\nfunction scale_control_ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction scale_control_objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n scale_control_ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n scale_control_ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\n\n\n\n\nvar scale_control_defaultProps = Object.assign({}, mapControlDefaultProps, {\n className: \'\',\n maxWidth: 100,\n unit: \'metric\'\n});\n\nfunction ScaleControl(props) {\n var _useMapControl = useMapControl(props),\n context = _useMapControl.context,\n containerRef = _useMapControl.containerRef;\n\n var _useState = (0,react.useState)(null),\n _useState2 = slicedToArray_slicedToArray(_useState, 2),\n mapboxScaleControl = _useState2[0],\n createMapboxScaleControl = _useState2[1];\n\n (0,react.useEffect)(function () {\n if (context.map) {\n var control = new (maplibre_gl_default()).ScaleControl();\n control._map = context.map;\n control._container = containerRef.current;\n createMapboxScaleControl(control);\n }\n }, [context.map]);\n\n if (mapboxScaleControl) {\n mapboxScaleControl.options = props;\n\n mapboxScaleControl._onMove();\n }\n\n var style = (0,react.useMemo)(function () {\n return scale_control_objectSpread({\n position: \'absolute\'\n }, props.style);\n }, [props.style]);\n return react.createElement("div", {\n style: style,\n className: props.className\n }, react.createElement("div", {\n ref: containerRef,\n className: "mapboxgl-ctrl mapboxgl-ctrl-scale"\n }));\n}\n\nScaleControl.defaultProps = scale_control_defaultProps;\n/* harmony default export */ var scale_control = (react.memo(ScaleControl));\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/overlays/canvas-overlay.js\n\n\n\n\nvar canvas_overlay_pixelRatio = typeof window !== \'undefined\' && window.devicePixelRatio || 1;\nvar canvas_overlay_defaultProps = {\n captureScroll: false,\n captureDrag: false,\n captureClick: false,\n captureDoubleClick: false,\n capturePointerMove: false\n};\n\nfunction CanvasOverlay(props) {\n var _useMapControl = useMapControl(props),\n context = _useMapControl.context,\n containerRef = _useMapControl.containerRef;\n\n var _useState = (0,react.useState)(null),\n _useState2 = slicedToArray_slicedToArray(_useState, 2),\n ctx = _useState2[0],\n setDrawingContext = _useState2[1];\n\n (0,react.useEffect)(function () {\n setDrawingContext(containerRef.current.getContext(\'2d\'));\n }, []);\n var viewport = context.viewport,\n isDragging = context.isDragging;\n\n if (ctx) {\n ctx.save();\n ctx.scale(canvas_overlay_pixelRatio, canvas_overlay_pixelRatio);\n props.redraw({\n width: viewport.width,\n height: viewport.height,\n ctx: ctx,\n isDragging: isDragging,\n project: viewport.project,\n unproject: viewport.unproject\n });\n ctx.restore();\n }\n\n return react.createElement("canvas", {\n ref: containerRef,\n width: viewport.width * canvas_overlay_pixelRatio,\n height: viewport.height * canvas_overlay_pixelRatio,\n style: {\n width: "".concat(viewport.width, "px"),\n height: "".concat(viewport.height, "px"),\n position: \'absolute\',\n left: 0,\n top: 0\n }\n });\n}\n\nCanvasOverlay.defaultProps = canvas_overlay_defaultProps;\n/* harmony default export */ var canvas_overlay = ((/* unused pure expression or super */ null && (CanvasOverlay)));\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/overlays/html-overlay.js\n\n\nfunction html_overlay_ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction html_overlay_objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n html_overlay_ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n html_overlay_ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\n\n\nvar html_overlay_defaultProps = {\n captureScroll: false,\n captureDrag: false,\n captureClick: false,\n captureDoubleClick: false,\n capturePointerMove: false\n};\n\nfunction HTMLOverlay(props) {\n var _useMapControl = useMapControl(props),\n context = _useMapControl.context,\n containerRef = _useMapControl.containerRef;\n\n var viewport = context.viewport,\n isDragging = context.isDragging;\n\n var style = html_overlay_objectSpread({\n position: \'absolute\',\n left: 0,\n top: 0,\n width: viewport.width,\n height: viewport.height\n }, props.style);\n\n return react.createElement("div", {\n ref: containerRef,\n style: style\n }, props.redraw({\n width: viewport.width,\n height: viewport.height,\n isDragging: isDragging,\n project: viewport.project,\n unproject: viewport.unproject\n }));\n}\n\nHTMLOverlay.defaultProps = html_overlay_defaultProps;\n/* harmony default export */ var html_overlay = ((/* unused pure expression or super */ null && (HTMLOverlay)));\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/overlays/svg-overlay.js\n\n\nfunction svg_overlay_ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction svg_overlay_objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n svg_overlay_ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n svg_overlay_ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\n\n\nvar svg_overlay_defaultProps = {\n captureScroll: false,\n captureDrag: false,\n captureClick: false,\n captureDoubleClick: false,\n capturePointerMove: false\n};\n\nfunction SVGOverlay(props) {\n var _useMapControl = useMapControl(props),\n context = _useMapControl.context,\n containerRef = _useMapControl.containerRef;\n\n var viewport = context.viewport,\n isDragging = context.isDragging;\n\n var style = svg_overlay_objectSpread({\n position: \'absolute\',\n left: 0,\n top: 0\n }, props.style);\n\n return react.createElement("svg", {\n width: viewport.width,\n height: viewport.height,\n ref: containerRef,\n style: style\n }, props.redraw({\n width: viewport.width,\n height: viewport.height,\n isDragging: isDragging,\n project: viewport.project,\n unproject: viewport.unproject\n }));\n}\n\nSVGOverlay.defaultProps = svg_overlay_defaultProps;\n/* harmony default export */ var svg_overlay = ((/* unused pure expression or super */ null && (SVGOverlay)));\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/utils/set-rtl-text-plugin.js\n\nvar setRTLTextPlugin = (maplibre_gl_default()) ? (maplibre_gl_default()).setRTLTextPlugin : function () {};\n/* harmony default export */ var set_rtl_text_plugin = ((/* unused pure expression or super */ null && (setRTLTextPlugin)));\n;// CONCATENATED MODULE: ./node_modules/react-map-gl/dist/esm/index.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n;// CONCATENATED MODULE: ./node_modules/@turf/helpers/dist/es/index.js\n/**\n * @module helpers\n */\n\n/**\n * Earth Radius used with the Harvesine formula and approximates using a spherical (non-ellipsoid) Earth.\n *\n * @memberof helpers\n * @type {number}\n */\nvar earthRadius = 6371008.8;\n/**\n * Unit of measurement factors using a spherical (non-ellipsoid) earth radius.\n *\n * @memberof helpers\n * @type {Object}\n */\n\nvar factors = {\n centimeters: earthRadius * 100,\n centimetres: earthRadius * 100,\n degrees: earthRadius / 111325,\n feet: earthRadius * 3.28084,\n inches: earthRadius * 39.37,\n kilometers: earthRadius / 1000,\n kilometres: earthRadius / 1000,\n meters: earthRadius,\n metres: earthRadius,\n miles: earthRadius / 1609.344,\n millimeters: earthRadius * 1000,\n millimetres: earthRadius * 1000,\n nauticalmiles: earthRadius / 1852,\n radians: 1,\n yards: earthRadius * 1.0936\n};\n/**\n * Units of measurement factors based on 1 meter.\n *\n * @memberof helpers\n * @type {Object}\n */\n\nvar unitsFactors = {\n centimeters: 100,\n centimetres: 100,\n degrees: 1 / 111325,\n feet: 3.28084,\n inches: 39.37,\n kilometers: 1 / 1000,\n kilometres: 1 / 1000,\n meters: 1,\n metres: 1,\n miles: 1 / 1609.344,\n millimeters: 1000,\n millimetres: 1000,\n nauticalmiles: 1 / 1852,\n radians: 1 / earthRadius,\n yards: 1.0936133\n};\n/**\n * Area of measurement factors based on 1 square meter.\n *\n * @memberof helpers\n * @type {Object}\n */\n\nvar areaFactors = {\n acres: 0.000247105,\n centimeters: 10000,\n centimetres: 10000,\n feet: 10.763910417,\n hectares: 0.0001,\n inches: 1550.003100006,\n kilometers: 0.000001,\n kilometres: 0.000001,\n meters: 1,\n metres: 1,\n miles: 3.86e-7,\n millimeters: 1000000,\n millimetres: 1000000,\n yards: 1.195990046\n};\n/**\n * Wraps a GeoJSON {@link Geometry} in a GeoJSON {@link Feature}.\n *\n * @name feature\n * @param {Geometry} geometry input geometry\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature} a GeoJSON Feature\n * @example\n * var geometry = {\n * "type": "Point",\n * "coordinates": [110, 50]\n * };\n *\n * var feature = turf.feature(geometry);\n *\n * //=feature\n */\n\nfunction es_feature(geom, properties, options) {\n if (options === void 0) {\n options = {};\n }\n\n var feat = {\n type: "Feature"\n };\n\n if (options.id === 0 || options.id) {\n feat.id = options.id;\n }\n\n if (options.bbox) {\n feat.bbox = options.bbox;\n }\n\n feat.properties = properties || {};\n feat.geometry = geom;\n return feat;\n}\n/**\n * Creates a GeoJSON {@link Geometry} from a Geometry string type & coordinates.\n * For GeometryCollection type use `helpers.geometryCollection`\n *\n * @name geometry\n * @param {string} type Geometry Type\n * @param {Array} coordinates Coordinates\n * @param {Object} [options={}] Optional Parameters\n * @returns {Geometry} a GeoJSON Geometry\n * @example\n * var type = "Point";\n * var coordinates = [110, 50];\n * var geometry = turf.geometry(type, coordinates);\n * // => geometry\n */\n\nfunction geometry(type, coordinates, _options) {\n if (_options === void 0) {\n _options = {};\n }\n\n switch (type) {\n case "Point":\n return es_point(coordinates).geometry;\n\n case "LineString":\n return es_lineString(coordinates).geometry;\n\n case "Polygon":\n return polygon(coordinates).geometry;\n\n case "MultiPoint":\n return multiPoint(coordinates).geometry;\n\n case "MultiLineString":\n return multiLineString(coordinates).geometry;\n\n case "MultiPolygon":\n return multiPolygon(coordinates).geometry;\n\n default:\n throw new Error(type + " is invalid");\n }\n}\n/**\n * Creates a {@link Point} {@link Feature} from a Position.\n *\n * @name point\n * @param {Array} coordinates longitude, latitude position (each in decimal degrees)\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature} a Point feature\n * @example\n * var point = turf.point([-75.343, 39.984]);\n *\n * //=point\n */\n\nfunction es_point(coordinates, properties, options) {\n if (options === void 0) {\n options = {};\n }\n\n if (!coordinates) {\n throw new Error("coordinates is required");\n }\n\n if (!Array.isArray(coordinates)) {\n throw new Error("coordinates must be an Array");\n }\n\n if (coordinates.length < 2) {\n throw new Error("coordinates must be at least 2 numbers long");\n }\n\n if (!isNumber(coordinates[0]) || !isNumber(coordinates[1])) {\n throw new Error("coordinates must contain numbers");\n }\n\n var geom = {\n type: "Point",\n coordinates: coordinates\n };\n return es_feature(geom, properties, options);\n}\n/**\n * Creates a {@link Point} {@link FeatureCollection} from an Array of Point coordinates.\n *\n * @name points\n * @param {Array>} coordinates an array of Points\n * @param {Object} [properties={}] Translate these properties to each Feature\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north]\n * associated with the FeatureCollection\n * @param {string|number} [options.id] Identifier associated with the FeatureCollection\n * @returns {FeatureCollection} Point Feature\n * @example\n * var points = turf.points([\n * [-75, 39],\n * [-80, 45],\n * [-78, 50]\n * ]);\n *\n * //=points\n */\n\nfunction points(coordinates, properties, options) {\n if (options === void 0) {\n options = {};\n }\n\n return featureCollection(coordinates.map(function (coords) {\n return es_point(coords, properties);\n }), options);\n}\n/**\n * Creates a {@link Polygon} {@link Feature} from an Array of LinearRings.\n *\n * @name polygon\n * @param {Array>>} coordinates an array of LinearRings\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature} Polygon Feature\n * @example\n * var polygon = turf.polygon([[[-5, 52], [-4, 56], [-2, 51], [-7, 54], [-5, 52]]], { name: \'poly1\' });\n *\n * //=polygon\n */\n\nfunction polygon(coordinates, properties, options) {\n if (options === void 0) {\n options = {};\n }\n\n for (var _i = 0, coordinates_1 = coordinates; _i < coordinates_1.length; _i++) {\n var ring = coordinates_1[_i];\n\n if (ring.length < 4) {\n throw new Error("Each LinearRing of a Polygon must have 4 or more Positions.");\n }\n\n for (var j = 0; j < ring[ring.length - 1].length; j++) {\n // Check if first point of Polygon contains two numbers\n if (ring[ring.length - 1][j] !== ring[0][j]) {\n throw new Error("First and last Position are not equivalent.");\n }\n }\n }\n\n var geom = {\n type: "Polygon",\n coordinates: coordinates\n };\n return es_feature(geom, properties, options);\n}\n/**\n * Creates a {@link Polygon} {@link FeatureCollection} from an Array of Polygon coordinates.\n *\n * @name polygons\n * @param {Array>>>} coordinates an array of Polygon coordinates\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the FeatureCollection\n * @returns {FeatureCollection} Polygon FeatureCollection\n * @example\n * var polygons = turf.polygons([\n * [[[-5, 52], [-4, 56], [-2, 51], [-7, 54], [-5, 52]]],\n * [[[-15, 42], [-14, 46], [-12, 41], [-17, 44], [-15, 42]]],\n * ]);\n *\n * //=polygons\n */\n\nfunction polygons(coordinates, properties, options) {\n if (options === void 0) {\n options = {};\n }\n\n return featureCollection(coordinates.map(function (coords) {\n return polygon(coords, properties);\n }), options);\n}\n/**\n * Creates a {@link LineString} {@link Feature} from an Array of Positions.\n *\n * @name lineString\n * @param {Array>} coordinates an array of Positions\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature} LineString Feature\n * @example\n * var linestring1 = turf.lineString([[-24, 63], [-23, 60], [-25, 65], [-20, 69]], {name: \'line 1\'});\n * var linestring2 = turf.lineString([[-14, 43], [-13, 40], [-15, 45], [-10, 49]], {name: \'line 2\'});\n *\n * //=linestring1\n * //=linestring2\n */\n\nfunction es_lineString(coordinates, properties, options) {\n if (options === void 0) {\n options = {};\n }\n\n if (coordinates.length < 2) {\n throw new Error("coordinates must be an array of two or more positions");\n }\n\n var geom = {\n type: "LineString",\n coordinates: coordinates\n };\n return es_feature(geom, properties, options);\n}\n/**\n * Creates a {@link LineString} {@link FeatureCollection} from an Array of LineString coordinates.\n *\n * @name lineStrings\n * @param {Array>>} coordinates an array of LinearRings\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north]\n * associated with the FeatureCollection\n * @param {string|number} [options.id] Identifier associated with the FeatureCollection\n * @returns {FeatureCollection} LineString FeatureCollection\n * @example\n * var linestrings = turf.lineStrings([\n * [[-24, 63], [-23, 60], [-25, 65], [-20, 69]],\n * [[-14, 43], [-13, 40], [-15, 45], [-10, 49]]\n * ]);\n *\n * //=linestrings\n */\n\nfunction lineStrings(coordinates, properties, options) {\n if (options === void 0) {\n options = {};\n }\n\n return featureCollection(coordinates.map(function (coords) {\n return es_lineString(coords, properties);\n }), options);\n}\n/**\n * Takes one or more {@link Feature|Features} and creates a {@link FeatureCollection}.\n *\n * @name featureCollection\n * @param {Feature[]} features input features\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {FeatureCollection} FeatureCollection of Features\n * @example\n * var locationA = turf.point([-75.343, 39.984], {name: \'Location A\'});\n * var locationB = turf.point([-75.833, 39.284], {name: \'Location B\'});\n * var locationC = turf.point([-75.534, 39.123], {name: \'Location C\'});\n *\n * var collection = turf.featureCollection([\n * locationA,\n * locationB,\n * locationC\n * ]);\n *\n * //=collection\n */\n\nfunction featureCollection(features, options) {\n if (options === void 0) {\n options = {};\n }\n\n var fc = {\n type: "FeatureCollection"\n };\n\n if (options.id) {\n fc.id = options.id;\n }\n\n if (options.bbox) {\n fc.bbox = options.bbox;\n }\n\n fc.features = features;\n return fc;\n}\n/**\n * Creates a {@link Feature} based on a\n * coordinate array. Properties can be added optionally.\n *\n * @name multiLineString\n * @param {Array>>} coordinates an array of LineStrings\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature} a MultiLineString feature\n * @throws {Error} if no coordinates are passed\n * @example\n * var multiLine = turf.multiLineString([[[0,0],[10,10]]]);\n *\n * //=multiLine\n */\n\nfunction multiLineString(coordinates, properties, options) {\n if (options === void 0) {\n options = {};\n }\n\n var geom = {\n type: "MultiLineString",\n coordinates: coordinates\n };\n return es_feature(geom, properties, options);\n}\n/**\n * Creates a {@link Feature} based on a\n * coordinate array. Properties can be added optionally.\n *\n * @name multiPoint\n * @param {Array>} coordinates an array of Positions\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature} a MultiPoint feature\n * @throws {Error} if no coordinates are passed\n * @example\n * var multiPt = turf.multiPoint([[0,0],[10,10]]);\n *\n * //=multiPt\n */\n\nfunction multiPoint(coordinates, properties, options) {\n if (options === void 0) {\n options = {};\n }\n\n var geom = {\n type: "MultiPoint",\n coordinates: coordinates\n };\n return es_feature(geom, properties, options);\n}\n/**\n * Creates a {@link Feature} based on a\n * coordinate array. Properties can be added optionally.\n *\n * @name multiPolygon\n * @param {Array>>>} coordinates an array of Polygons\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature} a multipolygon feature\n * @throws {Error} if no coordinates are passed\n * @example\n * var multiPoly = turf.multiPolygon([[[[0,0],[0,10],[10,10],[10,0],[0,0]]]]);\n *\n * //=multiPoly\n *\n */\n\nfunction multiPolygon(coordinates, properties, options) {\n if (options === void 0) {\n options = {};\n }\n\n var geom = {\n type: "MultiPolygon",\n coordinates: coordinates\n };\n return es_feature(geom, properties, options);\n}\n/**\n * Creates a {@link Feature} based on a\n * coordinate array. Properties can be added optionally.\n *\n * @name geometryCollection\n * @param {Array} geometries an array of GeoJSON Geometries\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature} a GeoJSON GeometryCollection Feature\n * @example\n * var pt = turf.geometry("Point", [100, 0]);\n * var line = turf.geometry("LineString", [[101, 0], [102, 1]]);\n * var collection = turf.geometryCollection([pt, line]);\n *\n * // => collection\n */\n\nfunction geometryCollection(geometries, properties, options) {\n if (options === void 0) {\n options = {};\n }\n\n var geom = {\n type: "GeometryCollection",\n geometries: geometries\n };\n return es_feature(geom, properties, options);\n}\n/**\n * Round number to precision\n *\n * @param {number} num Number\n * @param {number} [precision=0] Precision\n * @returns {number} rounded number\n * @example\n * turf.round(120.4321)\n * //=120\n *\n * turf.round(120.4321, 2)\n * //=120.43\n */\n\nfunction es_round(num, precision) {\n if (precision === void 0) {\n precision = 0;\n }\n\n if (precision && !(precision >= 0)) {\n throw new Error("precision must be a positive number");\n }\n\n var multiplier = Math.pow(10, precision || 0);\n return Math.round(num * multiplier) / multiplier;\n}\n/**\n * Convert a distance measurement (assuming a spherical Earth) from radians to a more friendly unit.\n * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet\n *\n * @name radiansToLength\n * @param {number} radians in radians across the sphere\n * @param {string} [units="kilometers"] can be degrees, radians, miles, inches, yards, metres,\n * meters, kilometres, kilometers.\n * @returns {number} distance\n */\n\nfunction radiansToLength(radians, units) {\n if (units === void 0) {\n units = "kilometers";\n }\n\n var factor = factors[units];\n\n if (!factor) {\n throw new Error(units + " units is invalid");\n }\n\n return radians * factor;\n}\n/**\n * Convert a distance measurement (assuming a spherical Earth) from a real-world unit into radians\n * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet\n *\n * @name lengthToRadians\n * @param {number} distance in real units\n * @param {string} [units="kilometers"] can be degrees, radians, miles, inches, yards, metres,\n * meters, kilometres, kilometers.\n * @returns {number} radians\n */\n\nfunction lengthToRadians(distance, units) {\n if (units === void 0) {\n units = "kilometers";\n }\n\n var factor = factors[units];\n\n if (!factor) {\n throw new Error(units + " units is invalid");\n }\n\n return distance / factor;\n}\n/**\n * Convert a distance measurement (assuming a spherical Earth) from a real-world unit into degrees\n * Valid units: miles, nauticalmiles, inches, yards, meters, metres, centimeters, kilometres, feet\n *\n * @name lengthToDegrees\n * @param {number} distance in real units\n * @param {string} [units="kilometers"] can be degrees, radians, miles, inches, yards, metres,\n * meters, kilometres, kilometers.\n * @returns {number} degrees\n */\n\nfunction lengthToDegrees(distance, units) {\n return radiansToDegrees(lengthToRadians(distance, units));\n}\n/**\n * Converts any bearing angle from the north line direction (positive clockwise)\n * and returns an angle between 0-360 degrees (positive clockwise), 0 being the north line\n *\n * @name bearingToAzimuth\n * @param {number} bearing angle, between -180 and +180 degrees\n * @returns {number} angle between 0 and 360 degrees\n */\n\nfunction bearingToAzimuth(bearing) {\n var angle = bearing % 360;\n\n if (angle < 0) {\n angle += 360;\n }\n\n return angle;\n}\n/**\n * Converts an angle in radians to degrees\n *\n * @name radiansToDegrees\n * @param {number} radians angle in radians\n * @returns {number} degrees between 0 and 360 degrees\n */\n\nfunction radiansToDegrees(radians) {\n var degrees = radians % (2 * Math.PI);\n return degrees * 180 / Math.PI;\n}\n/**\n * Converts an angle in degrees to radians\n *\n * @name degreesToRadians\n * @param {number} degrees angle between 0 and 360 degrees\n * @returns {number} angle in radians\n */\n\nfunction degreesToRadians(degrees) {\n var radians = degrees % 360;\n return radians * Math.PI / 180;\n}\n/**\n * Converts a length to the requested unit.\n * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet\n *\n * @param {number} length to be converted\n * @param {Units} [originalUnit="kilometers"] of the length\n * @param {Units} [finalUnit="kilometers"] returned unit\n * @returns {number} the converted length\n */\n\nfunction convertLength(length, originalUnit, finalUnit) {\n if (originalUnit === void 0) {\n originalUnit = "kilometers";\n }\n\n if (finalUnit === void 0) {\n finalUnit = "kilometers";\n }\n\n if (!(length >= 0)) {\n throw new Error("length must be a positive number");\n }\n\n return radiansToLength(lengthToRadians(length, originalUnit), finalUnit);\n}\n/**\n * Converts a area to the requested unit.\n * Valid units: kilometers, kilometres, meters, metres, centimetres, millimeters, acres, miles, yards, feet, inches, hectares\n * @param {number} area to be converted\n * @param {Units} [originalUnit="meters"] of the distance\n * @param {Units} [finalUnit="kilometers"] returned unit\n * @returns {number} the converted area\n */\n\nfunction convertArea(area, originalUnit, finalUnit) {\n if (originalUnit === void 0) {\n originalUnit = "meters";\n }\n\n if (finalUnit === void 0) {\n finalUnit = "kilometers";\n }\n\n if (!(area >= 0)) {\n throw new Error("area must be a positive number");\n }\n\n var startFactor = areaFactors[originalUnit];\n\n if (!startFactor) {\n throw new Error("invalid original units");\n }\n\n var finalFactor = areaFactors[finalUnit];\n\n if (!finalFactor) {\n throw new Error("invalid final units");\n }\n\n return area / startFactor * finalFactor;\n}\n/**\n * isNumber\n *\n * @param {*} num Number to validate\n * @returns {boolean} true/false\n * @example\n * turf.isNumber(123)\n * //=true\n * turf.isNumber(\'foo\')\n * //=false\n */\n\nfunction isNumber(num) {\n return !isNaN(num) && num !== null && !Array.isArray(num);\n}\n/**\n * isObject\n *\n * @param {*} input variable to validate\n * @returns {boolean} true/false\n * @example\n * turf.isObject({elevation: 10})\n * //=true\n * turf.isObject(\'foo\')\n * //=false\n */\n\nfunction es_isObject(input) {\n return !!input && input.constructor === Object;\n}\n/**\n * Validate BBox\n *\n * @private\n * @param {Array} bbox BBox to validate\n * @returns {void}\n * @throws Error if BBox is not valid\n * @example\n * validateBBox([-180, -40, 110, 50])\n * //=OK\n * validateBBox([-180, -40])\n * //=Error\n * validateBBox(\'Foo\')\n * //=Error\n * validateBBox(5)\n * //=Error\n * validateBBox(null)\n * //=Error\n * validateBBox(undefined)\n * //=Error\n */\n\nfunction validateBBox(bbox) {\n if (!bbox) {\n throw new Error("bbox is required");\n }\n\n if (!Array.isArray(bbox)) {\n throw new Error("bbox must be an Array");\n }\n\n if (bbox.length !== 4 && bbox.length !== 6) {\n throw new Error("bbox must be an Array of 4 or 6 numbers");\n }\n\n bbox.forEach(function (num) {\n if (!isNumber(num)) {\n throw new Error("bbox must only contain numbers");\n }\n });\n}\n/**\n * Validate Id\n *\n * @private\n * @param {string|number} id Id to validate\n * @returns {void}\n * @throws Error if Id is not valid\n * @example\n * validateId([-180, -40, 110, 50])\n * //=Error\n * validateId([-180, -40])\n * //=Error\n * validateId(\'Foo\')\n * //=OK\n * validateId(5)\n * //=OK\n * validateId(null)\n * //=Error\n * validateId(undefined)\n * //=Error\n */\n\nfunction validateId(id) {\n if (!id) {\n throw new Error("id is required");\n }\n\n if (["string", "number"].indexOf(typeof id) === -1) {\n throw new Error("id must be a number or a string");\n }\n}\n;// CONCATENATED MODULE: ./node_modules/@turf/meta/dist/es/index.js\n\n/**\n * Callback for coordEach\n *\n * @callback coordEachCallback\n * @param {Array} currentCoord The current coordinate being processed.\n * @param {number} coordIndex The current index of the coordinate being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n * @param {number} geometryIndex The current index of the Geometry being processed.\n */\n\n/**\n * Iterate over coordinates in any GeoJSON object, similar to Array.forEach()\n *\n * @name coordEach\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (currentCoord, coordIndex, featureIndex, multiFeatureIndex)\n * @param {boolean} [excludeWrapCoord=false] whether or not to include the final coordinate of LinearRings that wraps the ring in its iteration.\n * @returns {void}\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {"foo": "bar"}),\n * turf.point([36, 53], {"hello": "world"})\n * ]);\n *\n * turf.coordEach(features, function (currentCoord, coordIndex, featureIndex, multiFeatureIndex, geometryIndex) {\n * //=currentCoord\n * //=coordIndex\n * //=featureIndex\n * //=multiFeatureIndex\n * //=geometryIndex\n * });\n */\n\nfunction coordEach(geojson, callback, excludeWrapCoord) {\n // Handles null Geometry -- Skips this GeoJSON\n if (geojson === null) return;\n var j,\n k,\n l,\n geometry,\n stopG,\n coords,\n geometryMaybeCollection,\n wrapShrink = 0,\n coordIndex = 0,\n isGeometryCollection,\n type = geojson.type,\n isFeatureCollection = type === "FeatureCollection",\n isFeature = type === "Feature",\n stop = isFeatureCollection ? geojson.features.length : 1; // This logic may look a little weird. The reason why it is that way\n // is because it\'s trying to be fast. GeoJSON supports multiple kinds\n // of objects at its root: FeatureCollection, Features, Geometries.\n // This function has the responsibility of handling all of them, and that\n // means that some of the `for` loops you see below actually just don\'t apply\n // to certain inputs. For instance, if you give this just a\n // Point geometry, then both loops are short-circuited and all we do\n // is gradually rename the input until it\'s called \'geometry\'.\n //\n // This also aims to allocate as few resources as possible: just a\n // few numbers and booleans, rather than any temporary arrays as would\n // be required with the normalization approach.\n\n for (var featureIndex = 0; featureIndex < stop; featureIndex++) {\n geometryMaybeCollection = isFeatureCollection ? geojson.features[featureIndex].geometry : isFeature ? geojson.geometry : geojson;\n isGeometryCollection = geometryMaybeCollection ? geometryMaybeCollection.type === "GeometryCollection" : false;\n stopG = isGeometryCollection ? geometryMaybeCollection.geometries.length : 1;\n\n for (var geomIndex = 0; geomIndex < stopG; geomIndex++) {\n var multiFeatureIndex = 0;\n var geometryIndex = 0;\n geometry = isGeometryCollection ? geometryMaybeCollection.geometries[geomIndex] : geometryMaybeCollection; // Handles null Geometry -- Skips this geometry\n\n if (geometry === null) continue;\n coords = geometry.coordinates;\n var geomType = geometry.type;\n wrapShrink = excludeWrapCoord && (geomType === "Polygon" || geomType === "MultiPolygon") ? 1 : 0;\n\n switch (geomType) {\n case null:\n break;\n\n case "Point":\n if (callback(coords, coordIndex, featureIndex, multiFeatureIndex, geometryIndex) === false) return false;\n coordIndex++;\n multiFeatureIndex++;\n break;\n\n case "LineString":\n case "MultiPoint":\n for (j = 0; j < coords.length; j++) {\n if (callback(coords[j], coordIndex, featureIndex, multiFeatureIndex, geometryIndex) === false) return false;\n coordIndex++;\n if (geomType === "MultiPoint") multiFeatureIndex++;\n }\n\n if (geomType === "LineString") multiFeatureIndex++;\n break;\n\n case "Polygon":\n case "MultiLineString":\n for (j = 0; j < coords.length; j++) {\n for (k = 0; k < coords[j].length - wrapShrink; k++) {\n if (callback(coords[j][k], coordIndex, featureIndex, multiFeatureIndex, geometryIndex) === false) return false;\n coordIndex++;\n }\n\n if (geomType === "MultiLineString") multiFeatureIndex++;\n if (geomType === "Polygon") geometryIndex++;\n }\n\n if (geomType === "Polygon") multiFeatureIndex++;\n break;\n\n case "MultiPolygon":\n for (j = 0; j < coords.length; j++) {\n geometryIndex = 0;\n\n for (k = 0; k < coords[j].length; k++) {\n for (l = 0; l < coords[j][k].length - wrapShrink; l++) {\n if (callback(coords[j][k][l], coordIndex, featureIndex, multiFeatureIndex, geometryIndex) === false) return false;\n coordIndex++;\n }\n\n geometryIndex++;\n }\n\n multiFeatureIndex++;\n }\n\n break;\n\n case "GeometryCollection":\n for (j = 0; j < geometry.geometries.length; j++) {\n if (coordEach(geometry.geometries[j], callback, excludeWrapCoord) === false) return false;\n }\n\n break;\n\n default:\n throw new Error("Unknown Geometry Type");\n }\n }\n }\n}\n/**\n * Callback for coordReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n * - The previousValue argument is initialValue.\n * - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n * - The previousValue argument is the value of the first element present in the array.\n * - The currentValue argument is the value of the second element present in the array.\n *\n * @callback coordReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Array} currentCoord The current coordinate being processed.\n * @param {number} coordIndex The current index of the coordinate being processed.\n * Starts at index 0, if an initialValue is provided, and at index 1 otherwise.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n * @param {number} geometryIndex The current index of the Geometry being processed.\n */\n\n/**\n * Reduce coordinates in any GeoJSON object, similar to Array.reduce()\n *\n * @name coordReduce\n * @param {FeatureCollection|Geometry|Feature} geojson any GeoJSON object\n * @param {Function} callback a method that takes (previousValue, currentCoord, coordIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @param {boolean} [excludeWrapCoord=false] whether or not to include the final coordinate of LinearRings that wraps the ring in its iteration.\n * @returns {*} The value that results from the reduction.\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {"foo": "bar"}),\n * turf.point([36, 53], {"hello": "world"})\n * ]);\n *\n * turf.coordReduce(features, function (previousValue, currentCoord, coordIndex, featureIndex, multiFeatureIndex, geometryIndex) {\n * //=previousValue\n * //=currentCoord\n * //=coordIndex\n * //=featureIndex\n * //=multiFeatureIndex\n * //=geometryIndex\n * return currentCoord;\n * });\n */\n\n\nfunction coordReduce(geojson, callback, initialValue, excludeWrapCoord) {\n var previousValue = initialValue;\n coordEach(geojson, function (currentCoord, coordIndex, featureIndex, multiFeatureIndex, geometryIndex) {\n if (coordIndex === 0 && initialValue === undefined) previousValue = currentCoord;else previousValue = callback(previousValue, currentCoord, coordIndex, featureIndex, multiFeatureIndex, geometryIndex);\n }, excludeWrapCoord);\n return previousValue;\n}\n/**\n * Callback for propEach\n *\n * @callback propEachCallback\n * @param {Object} currentProperties The current Properties being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n */\n\n/**\n * Iterate over properties in any GeoJSON object, similar to Array.forEach()\n *\n * @name propEach\n * @param {FeatureCollection|Feature} geojson any GeoJSON object\n * @param {Function} callback a method that takes (currentProperties, featureIndex)\n * @returns {void}\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: \'bar\'}),\n * turf.point([36, 53], {hello: \'world\'})\n * ]);\n *\n * turf.propEach(features, function (currentProperties, featureIndex) {\n * //=currentProperties\n * //=featureIndex\n * });\n */\n\n\nfunction propEach(geojson, callback) {\n var i;\n\n switch (geojson.type) {\n case "FeatureCollection":\n for (i = 0; i < geojson.features.length; i++) {\n if (callback(geojson.features[i].properties, i) === false) break;\n }\n\n break;\n\n case "Feature":\n callback(geojson.properties, 0);\n break;\n }\n}\n/**\n * Callback for propReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n * - The previousValue argument is initialValue.\n * - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n * - The previousValue argument is the value of the first element present in the array.\n * - The currentValue argument is the value of the second element present in the array.\n *\n * @callback propReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {*} currentProperties The current Properties being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n */\n\n/**\n * Reduce properties in any GeoJSON object into a single value,\n * similar to how Array.reduce works. However, in this case we lazily run\n * the reduction, so an array of all properties is unnecessary.\n *\n * @name propReduce\n * @param {FeatureCollection|Feature} geojson any GeoJSON object\n * @param {Function} callback a method that takes (previousValue, currentProperties, featureIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {*} The value that results from the reduction.\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: \'bar\'}),\n * turf.point([36, 53], {hello: \'world\'})\n * ]);\n *\n * turf.propReduce(features, function (previousValue, currentProperties, featureIndex) {\n * //=previousValue\n * //=currentProperties\n * //=featureIndex\n * return currentProperties\n * });\n */\n\n\nfunction propReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n propEach(geojson, function (currentProperties, featureIndex) {\n if (featureIndex === 0 && initialValue === undefined) previousValue = currentProperties;else previousValue = callback(previousValue, currentProperties, featureIndex);\n });\n return previousValue;\n}\n/**\n * Callback for featureEach\n *\n * @callback featureEachCallback\n * @param {Feature} currentFeature The current Feature being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n */\n\n/**\n * Iterate over features in any GeoJSON object, similar to\n * Array.forEach.\n *\n * @name featureEach\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (currentFeature, featureIndex)\n * @returns {void}\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: \'bar\'}),\n * turf.point([36, 53], {hello: \'world\'})\n * ]);\n *\n * turf.featureEach(features, function (currentFeature, featureIndex) {\n * //=currentFeature\n * //=featureIndex\n * });\n */\n\n\nfunction featureEach(geojson, callback) {\n if (geojson.type === "Feature") {\n callback(geojson, 0);\n } else if (geojson.type === "FeatureCollection") {\n for (var i = 0; i < geojson.features.length; i++) {\n if (callback(geojson.features[i], i) === false) break;\n }\n }\n}\n/**\n * Callback for featureReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n * - The previousValue argument is initialValue.\n * - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n * - The previousValue argument is the value of the first element present in the array.\n * - The currentValue argument is the value of the second element present in the array.\n *\n * @callback featureReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Feature} currentFeature The current Feature being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n */\n\n/**\n * Reduce features in any GeoJSON object, similar to Array.reduce().\n *\n * @name featureReduce\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (previousValue, currentFeature, featureIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {*} The value that results from the reduction.\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {"foo": "bar"}),\n * turf.point([36, 53], {"hello": "world"})\n * ]);\n *\n * turf.featureReduce(features, function (previousValue, currentFeature, featureIndex) {\n * //=previousValue\n * //=currentFeature\n * //=featureIndex\n * return currentFeature\n * });\n */\n\n\nfunction featureReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n featureEach(geojson, function (currentFeature, featureIndex) {\n if (featureIndex === 0 && initialValue === undefined) previousValue = currentFeature;else previousValue = callback(previousValue, currentFeature, featureIndex);\n });\n return previousValue;\n}\n/**\n * Get all coordinates from any GeoJSON object.\n *\n * @name coordAll\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @returns {Array>} coordinate position array\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: \'bar\'}),\n * turf.point([36, 53], {hello: \'world\'})\n * ]);\n *\n * var coords = turf.coordAll(features);\n * //= [[26, 37], [36, 53]]\n */\n\n\nfunction coordAll(geojson) {\n var coords = [];\n coordEach(geojson, function (coord) {\n coords.push(coord);\n });\n return coords;\n}\n/**\n * Callback for geomEach\n *\n * @callback geomEachCallback\n * @param {Geometry} currentGeometry The current Geometry being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {Object} featureProperties The current Feature Properties being processed.\n * @param {Array} featureBBox The current Feature BBox being processed.\n * @param {number|string} featureId The current Feature Id being processed.\n */\n\n/**\n * Iterate over each geometry in any GeoJSON object, similar to Array.forEach()\n *\n * @name geomEach\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (currentGeometry, featureIndex, featureProperties, featureBBox, featureId)\n * @returns {void}\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: \'bar\'}),\n * turf.point([36, 53], {hello: \'world\'})\n * ]);\n *\n * turf.geomEach(features, function (currentGeometry, featureIndex, featureProperties, featureBBox, featureId) {\n * //=currentGeometry\n * //=featureIndex\n * //=featureProperties\n * //=featureBBox\n * //=featureId\n * });\n */\n\n\nfunction geomEach(geojson, callback) {\n var i,\n j,\n g,\n geometry,\n stopG,\n geometryMaybeCollection,\n isGeometryCollection,\n featureProperties,\n featureBBox,\n featureId,\n featureIndex = 0,\n isFeatureCollection = geojson.type === "FeatureCollection",\n isFeature = geojson.type === "Feature",\n stop = isFeatureCollection ? geojson.features.length : 1; // This logic may look a little weird. The reason why it is that way\n // is because it\'s trying to be fast. GeoJSON supports multiple kinds\n // of objects at its root: FeatureCollection, Features, Geometries.\n // This function has the responsibility of handling all of them, and that\n // means that some of the `for` loops you see below actually just don\'t apply\n // to certain inputs. For instance, if you give this just a\n // Point geometry, then both loops are short-circuited and all we do\n // is gradually rename the input until it\'s called \'geometry\'.\n //\n // This also aims to allocate as few resources as possible: just a\n // few numbers and booleans, rather than any temporary arrays as would\n // be required with the normalization approach.\n\n for (i = 0; i < stop; i++) {\n geometryMaybeCollection = isFeatureCollection ? geojson.features[i].geometry : isFeature ? geojson.geometry : geojson;\n featureProperties = isFeatureCollection ? geojson.features[i].properties : isFeature ? geojson.properties : {};\n featureBBox = isFeatureCollection ? geojson.features[i].bbox : isFeature ? geojson.bbox : undefined;\n featureId = isFeatureCollection ? geojson.features[i].id : isFeature ? geojson.id : undefined;\n isGeometryCollection = geometryMaybeCollection ? geometryMaybeCollection.type === "GeometryCollection" : false;\n stopG = isGeometryCollection ? geometryMaybeCollection.geometries.length : 1;\n\n for (g = 0; g < stopG; g++) {\n geometry = isGeometryCollection ? geometryMaybeCollection.geometries[g] : geometryMaybeCollection; // Handle null Geometry\n\n if (geometry === null) {\n if (callback(null, featureIndex, featureProperties, featureBBox, featureId) === false) return false;\n continue;\n }\n\n switch (geometry.type) {\n case "Point":\n case "LineString":\n case "MultiPoint":\n case "Polygon":\n case "MultiLineString":\n case "MultiPolygon":\n {\n if (callback(geometry, featureIndex, featureProperties, featureBBox, featureId) === false) return false;\n break;\n }\n\n case "GeometryCollection":\n {\n for (j = 0; j < geometry.geometries.length; j++) {\n if (callback(geometry.geometries[j], featureIndex, featureProperties, featureBBox, featureId) === false) return false;\n }\n\n break;\n }\n\n default:\n throw new Error("Unknown Geometry Type");\n }\n } // Only increase `featureIndex` per each feature\n\n\n featureIndex++;\n }\n}\n/**\n * Callback for geomReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n * - The previousValue argument is initialValue.\n * - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n * - The previousValue argument is the value of the first element present in the array.\n * - The currentValue argument is the value of the second element present in the array.\n *\n * @callback geomReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Geometry} currentGeometry The current Geometry being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {Object} featureProperties The current Feature Properties being processed.\n * @param {Array} featureBBox The current Feature BBox being processed.\n * @param {number|string} featureId The current Feature Id being processed.\n */\n\n/**\n * Reduce geometry in any GeoJSON object, similar to Array.reduce().\n *\n * @name geomReduce\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (previousValue, currentGeometry, featureIndex, featureProperties, featureBBox, featureId)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {*} The value that results from the reduction.\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: \'bar\'}),\n * turf.point([36, 53], {hello: \'world\'})\n * ]);\n *\n * turf.geomReduce(features, function (previousValue, currentGeometry, featureIndex, featureProperties, featureBBox, featureId) {\n * //=previousValue\n * //=currentGeometry\n * //=featureIndex\n * //=featureProperties\n * //=featureBBox\n * //=featureId\n * return currentGeometry\n * });\n */\n\n\nfunction geomReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n geomEach(geojson, function (currentGeometry, featureIndex, featureProperties, featureBBox, featureId) {\n if (featureIndex === 0 && initialValue === undefined) previousValue = currentGeometry;else previousValue = callback(previousValue, currentGeometry, featureIndex, featureProperties, featureBBox, featureId);\n });\n return previousValue;\n}\n/**\n * Callback for flattenEach\n *\n * @callback flattenEachCallback\n * @param {Feature} currentFeature The current flattened feature being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n */\n\n/**\n * Iterate over flattened features in any GeoJSON object, similar to\n * Array.forEach.\n *\n * @name flattenEach\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (currentFeature, featureIndex, multiFeatureIndex)\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: \'bar\'}),\n * turf.multiPoint([[40, 30], [36, 53]], {hello: \'world\'})\n * ]);\n *\n * turf.flattenEach(features, function (currentFeature, featureIndex, multiFeatureIndex) {\n * //=currentFeature\n * //=featureIndex\n * //=multiFeatureIndex\n * });\n */\n\n\nfunction flattenEach(geojson, callback) {\n geomEach(geojson, function (geometry, featureIndex, properties, bbox, id) {\n // Callback for single geometry\n var type = geometry === null ? null : geometry.type;\n\n switch (type) {\n case null:\n case "Point":\n case "LineString":\n case "Polygon":\n if (callback(feature(geometry, properties, {\n bbox: bbox,\n id: id\n }), featureIndex, 0) === false) return false;\n return;\n }\n\n var geomType; // Callback for multi-geometry\n\n switch (type) {\n case "MultiPoint":\n geomType = "Point";\n break;\n\n case "MultiLineString":\n geomType = "LineString";\n break;\n\n case "MultiPolygon":\n geomType = "Polygon";\n break;\n }\n\n for (var multiFeatureIndex = 0; multiFeatureIndex < geometry.coordinates.length; multiFeatureIndex++) {\n var coordinate = geometry.coordinates[multiFeatureIndex];\n var geom = {\n type: geomType,\n coordinates: coordinate\n };\n if (callback(feature(geom, properties), featureIndex, multiFeatureIndex) === false) return false;\n }\n });\n}\n/**\n * Callback for flattenReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n * - The previousValue argument is initialValue.\n * - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n * - The previousValue argument is the value of the first element present in the array.\n * - The currentValue argument is the value of the second element present in the array.\n *\n * @callback flattenReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Feature} currentFeature The current Feature being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n */\n\n/**\n * Reduce flattened features in any GeoJSON object, similar to Array.reduce().\n *\n * @name flattenReduce\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (previousValue, currentFeature, featureIndex, multiFeatureIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {*} The value that results from the reduction.\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: \'bar\'}),\n * turf.multiPoint([[40, 30], [36, 53]], {hello: \'world\'})\n * ]);\n *\n * turf.flattenReduce(features, function (previousValue, currentFeature, featureIndex, multiFeatureIndex) {\n * //=previousValue\n * //=currentFeature\n * //=featureIndex\n * //=multiFeatureIndex\n * return currentFeature\n * });\n */\n\n\nfunction flattenReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n flattenEach(geojson, function (currentFeature, featureIndex, multiFeatureIndex) {\n if (featureIndex === 0 && multiFeatureIndex === 0 && initialValue === undefined) previousValue = currentFeature;else previousValue = callback(previousValue, currentFeature, featureIndex, multiFeatureIndex);\n });\n return previousValue;\n}\n/**\n * Callback for segmentEach\n *\n * @callback segmentEachCallback\n * @param {Feature} currentSegment The current Segment being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n * @param {number} geometryIndex The current index of the Geometry being processed.\n * @param {number} segmentIndex The current index of the Segment being processed.\n * @returns {void}\n */\n\n/**\n * Iterate over 2-vertex line segment in any GeoJSON object, similar to Array.forEach()\n * (Multi)Point geometries do not contain segments therefore they are ignored during this operation.\n *\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON\n * @param {Function} callback a method that takes (currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex)\n * @returns {void}\n * @example\n * var polygon = turf.polygon([[[-50, 5], [-40, -10], [-50, -10], [-40, 5], [-50, 5]]]);\n *\n * // Iterate over GeoJSON by 2-vertex segments\n * turf.segmentEach(polygon, function (currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex) {\n * //=currentSegment\n * //=featureIndex\n * //=multiFeatureIndex\n * //=geometryIndex\n * //=segmentIndex\n * });\n *\n * // Calculate the total number of segments\n * var total = 0;\n * turf.segmentEach(polygon, function () {\n * total++;\n * });\n */\n\n\nfunction segmentEach(geojson, callback) {\n flattenEach(geojson, function (feature, featureIndex, multiFeatureIndex) {\n var segmentIndex = 0; // Exclude null Geometries\n\n if (!feature.geometry) return; // (Multi)Point geometries do not contain segments therefore they are ignored during this operation.\n\n var type = feature.geometry.type;\n if (type === "Point" || type === "MultiPoint") return; // Generate 2-vertex line segments\n\n var previousCoords;\n var previousFeatureIndex = 0;\n var previousMultiIndex = 0;\n var prevGeomIndex = 0;\n if (coordEach(feature, function (currentCoord, coordIndex, featureIndexCoord, multiPartIndexCoord, geometryIndex) {\n // Simulating a meta.coordReduce() since `reduce` operations cannot be stopped by returning `false`\n if (previousCoords === undefined || featureIndex > previousFeatureIndex || multiPartIndexCoord > previousMultiIndex || geometryIndex > prevGeomIndex) {\n previousCoords = currentCoord;\n previousFeatureIndex = featureIndex;\n previousMultiIndex = multiPartIndexCoord;\n prevGeomIndex = geometryIndex;\n segmentIndex = 0;\n return;\n }\n\n var currentSegment = lineString([previousCoords, currentCoord], feature.properties);\n if (callback(currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex) === false) return false;\n segmentIndex++;\n previousCoords = currentCoord;\n }) === false) return false;\n });\n}\n/**\n * Callback for segmentReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n * - The previousValue argument is initialValue.\n * - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n * - The previousValue argument is the value of the first element present in the array.\n * - The currentValue argument is the value of the second element present in the array.\n *\n * @callback segmentReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Feature} currentSegment The current Segment being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n * @param {number} geometryIndex The current index of the Geometry being processed.\n * @param {number} segmentIndex The current index of the Segment being processed.\n */\n\n/**\n * Reduce 2-vertex line segment in any GeoJSON object, similar to Array.reduce()\n * (Multi)Point geometries do not contain segments therefore they are ignored during this operation.\n *\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON\n * @param {Function} callback a method that takes (previousValue, currentSegment, currentIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {void}\n * @example\n * var polygon = turf.polygon([[[-50, 5], [-40, -10], [-50, -10], [-40, 5], [-50, 5]]]);\n *\n * // Iterate over GeoJSON by 2-vertex segments\n * turf.segmentReduce(polygon, function (previousSegment, currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex) {\n * //= previousSegment\n * //= currentSegment\n * //= featureIndex\n * //= multiFeatureIndex\n * //= geometryIndex\n * //= segmentIndex\n * return currentSegment\n * });\n *\n * // Calculate the total number of segments\n * var initialValue = 0\n * var total = turf.segmentReduce(polygon, function (previousValue) {\n * previousValue++;\n * return previousValue;\n * }, initialValue);\n */\n\n\nfunction segmentReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n var started = false;\n segmentEach(geojson, function (currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex) {\n if (started === false && initialValue === undefined) previousValue = currentSegment;else previousValue = callback(previousValue, currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex);\n started = true;\n });\n return previousValue;\n}\n/**\n * Callback for lineEach\n *\n * @callback lineEachCallback\n * @param {Feature} currentLine The current LineString|LinearRing being processed\n * @param {number} featureIndex The current index of the Feature being processed\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed\n * @param {number} geometryIndex The current index of the Geometry being processed\n */\n\n/**\n * Iterate over line or ring coordinates in LineString, Polygon, MultiLineString, MultiPolygon Features or Geometries,\n * similar to Array.forEach.\n *\n * @name lineEach\n * @param {Geometry|Feature} geojson object\n * @param {Function} callback a method that takes (currentLine, featureIndex, multiFeatureIndex, geometryIndex)\n * @example\n * var multiLine = turf.multiLineString([\n * [[26, 37], [35, 45]],\n * [[36, 53], [38, 50], [41, 55]]\n * ]);\n *\n * turf.lineEach(multiLine, function (currentLine, featureIndex, multiFeatureIndex, geometryIndex) {\n * //=currentLine\n * //=featureIndex\n * //=multiFeatureIndex\n * //=geometryIndex\n * });\n */\n\n\nfunction lineEach(geojson, callback) {\n // validation\n if (!geojson) throw new Error("geojson is required");\n flattenEach(geojson, function (feature, featureIndex, multiFeatureIndex) {\n if (feature.geometry === null) return;\n var type = feature.geometry.type;\n var coords = feature.geometry.coordinates;\n\n switch (type) {\n case "LineString":\n if (callback(feature, featureIndex, multiFeatureIndex, 0, 0) === false) return false;\n break;\n\n case "Polygon":\n for (var geometryIndex = 0; geometryIndex < coords.length; geometryIndex++) {\n if (callback(lineString(coords[geometryIndex], feature.properties), featureIndex, multiFeatureIndex, geometryIndex) === false) return false;\n }\n\n break;\n }\n });\n}\n/**\n * Callback for lineReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n * - The previousValue argument is initialValue.\n * - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n * - The previousValue argument is the value of the first element present in the array.\n * - The currentValue argument is the value of the second element present in the array.\n *\n * @callback lineReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Feature} currentLine The current LineString|LinearRing being processed.\n * @param {number} featureIndex The current index of the Feature being processed\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed\n * @param {number} geometryIndex The current index of the Geometry being processed\n */\n\n/**\n * Reduce features in any GeoJSON object, similar to Array.reduce().\n *\n * @name lineReduce\n * @param {Geometry|Feature} geojson object\n * @param {Function} callback a method that takes (previousValue, currentLine, featureIndex, multiFeatureIndex, geometryIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {*} The value that results from the reduction.\n * @example\n * var multiPoly = turf.multiPolygon([\n * turf.polygon([[[12,48],[2,41],[24,38],[12,48]], [[9,44],[13,41],[13,45],[9,44]]]),\n * turf.polygon([[[5, 5], [0, 0], [2, 2], [4, 4], [5, 5]]])\n * ]);\n *\n * turf.lineReduce(multiPoly, function (previousValue, currentLine, featureIndex, multiFeatureIndex, geometryIndex) {\n * //=previousValue\n * //=currentLine\n * //=featureIndex\n * //=multiFeatureIndex\n * //=geometryIndex\n * return currentLine\n * });\n */\n\n\nfunction lineReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n lineEach(geojson, function (currentLine, featureIndex, multiFeatureIndex, geometryIndex) {\n if (featureIndex === 0 && initialValue === undefined) previousValue = currentLine;else previousValue = callback(previousValue, currentLine, featureIndex, multiFeatureIndex, geometryIndex);\n });\n return previousValue;\n}\n/**\n * Finds a particular 2-vertex LineString Segment from a GeoJSON using `@turf/meta` indexes.\n *\n * Negative indexes are permitted.\n * Point & MultiPoint will always return null.\n *\n * @param {FeatureCollection|Feature|Geometry} geojson Any GeoJSON Feature or Geometry\n * @param {Object} [options={}] Optional parameters\n * @param {number} [options.featureIndex=0] Feature Index\n * @param {number} [options.multiFeatureIndex=0] Multi-Feature Index\n * @param {number} [options.geometryIndex=0] Geometry Index\n * @param {number} [options.segmentIndex=0] Segment Index\n * @param {Object} [options.properties={}] Translate Properties to output LineString\n * @param {BBox} [options.bbox={}] Translate BBox to output LineString\n * @param {number|string} [options.id={}] Translate Id to output LineString\n * @returns {Feature} 2-vertex GeoJSON Feature LineString\n * @example\n * var multiLine = turf.multiLineString([\n * [[10, 10], [50, 30], [30, 40]],\n * [[-10, -10], [-50, -30], [-30, -40]]\n * ]);\n *\n * // First Segment (defaults are 0)\n * turf.findSegment(multiLine);\n * // => Feature>\n *\n * // First Segment of 2nd Multi Feature\n * turf.findSegment(multiLine, {multiFeatureIndex: 1});\n * // => Feature>\n *\n * // Last Segment of Last Multi Feature\n * turf.findSegment(multiLine, {multiFeatureIndex: -1, segmentIndex: -1});\n * // => Feature>\n */\n\n\nfunction findSegment(geojson, options) {\n // Optional Parameters\n options = options || {};\n if (!isObject(options)) throw new Error("options is invalid");\n var featureIndex = options.featureIndex || 0;\n var multiFeatureIndex = options.multiFeatureIndex || 0;\n var geometryIndex = options.geometryIndex || 0;\n var segmentIndex = options.segmentIndex || 0; // Find FeatureIndex\n\n var properties = options.properties;\n var geometry;\n\n switch (geojson.type) {\n case "FeatureCollection":\n if (featureIndex < 0) featureIndex = geojson.features.length + featureIndex;\n properties = properties || geojson.features[featureIndex].properties;\n geometry = geojson.features[featureIndex].geometry;\n break;\n\n case "Feature":\n properties = properties || geojson.properties;\n geometry = geojson.geometry;\n break;\n\n case "Point":\n case "MultiPoint":\n return null;\n\n case "LineString":\n case "Polygon":\n case "MultiLineString":\n case "MultiPolygon":\n geometry = geojson;\n break;\n\n default:\n throw new Error("geojson is invalid");\n } // Find SegmentIndex\n\n\n if (geometry === null) return null;\n var coords = geometry.coordinates;\n\n switch (geometry.type) {\n case "Point":\n case "MultiPoint":\n return null;\n\n case "LineString":\n if (segmentIndex < 0) segmentIndex = coords.length + segmentIndex - 1;\n return lineString([coords[segmentIndex], coords[segmentIndex + 1]], properties, options);\n\n case "Polygon":\n if (geometryIndex < 0) geometryIndex = coords.length + geometryIndex;\n if (segmentIndex < 0) segmentIndex = coords[geometryIndex].length + segmentIndex - 1;\n return lineString([coords[geometryIndex][segmentIndex], coords[geometryIndex][segmentIndex + 1]], properties, options);\n\n case "MultiLineString":\n if (multiFeatureIndex < 0) multiFeatureIndex = coords.length + multiFeatureIndex;\n if (segmentIndex < 0) segmentIndex = coords[multiFeatureIndex].length + segmentIndex - 1;\n return lineString([coords[multiFeatureIndex][segmentIndex], coords[multiFeatureIndex][segmentIndex + 1]], properties, options);\n\n case "MultiPolygon":\n if (multiFeatureIndex < 0) multiFeatureIndex = coords.length + multiFeatureIndex;\n if (geometryIndex < 0) geometryIndex = coords[multiFeatureIndex].length + geometryIndex;\n if (segmentIndex < 0) segmentIndex = coords[multiFeatureIndex][geometryIndex].length - segmentIndex - 1;\n return lineString([coords[multiFeatureIndex][geometryIndex][segmentIndex], coords[multiFeatureIndex][geometryIndex][segmentIndex + 1]], properties, options);\n }\n\n throw new Error("geojson is invalid");\n}\n/**\n * Finds a particular Point from a GeoJSON using `@turf/meta` indexes.\n *\n * Negative indexes are permitted.\n *\n * @param {FeatureCollection|Feature|Geometry} geojson Any GeoJSON Feature or Geometry\n * @param {Object} [options={}] Optional parameters\n * @param {number} [options.featureIndex=0] Feature Index\n * @param {number} [options.multiFeatureIndex=0] Multi-Feature Index\n * @param {number} [options.geometryIndex=0] Geometry Index\n * @param {number} [options.coordIndex=0] Coord Index\n * @param {Object} [options.properties={}] Translate Properties to output Point\n * @param {BBox} [options.bbox={}] Translate BBox to output Point\n * @param {number|string} [options.id={}] Translate Id to output Point\n * @returns {Feature} 2-vertex GeoJSON Feature Point\n * @example\n * var multiLine = turf.multiLineString([\n * [[10, 10], [50, 30], [30, 40]],\n * [[-10, -10], [-50, -30], [-30, -40]]\n * ]);\n *\n * // First Segment (defaults are 0)\n * turf.findPoint(multiLine);\n * // => Feature>\n *\n * // First Segment of the 2nd Multi-Feature\n * turf.findPoint(multiLine, {multiFeatureIndex: 1});\n * // => Feature>\n *\n * // Last Segment of last Multi-Feature\n * turf.findPoint(multiLine, {multiFeatureIndex: -1, coordIndex: -1});\n * // => Feature>\n */\n\n\nfunction findPoint(geojson, options) {\n // Optional Parameters\n options = options || {};\n if (!isObject(options)) throw new Error("options is invalid");\n var featureIndex = options.featureIndex || 0;\n var multiFeatureIndex = options.multiFeatureIndex || 0;\n var geometryIndex = options.geometryIndex || 0;\n var coordIndex = options.coordIndex || 0; // Find FeatureIndex\n\n var properties = options.properties;\n var geometry;\n\n switch (geojson.type) {\n case "FeatureCollection":\n if (featureIndex < 0) featureIndex = geojson.features.length + featureIndex;\n properties = properties || geojson.features[featureIndex].properties;\n geometry = geojson.features[featureIndex].geometry;\n break;\n\n case "Feature":\n properties = properties || geojson.properties;\n geometry = geojson.geometry;\n break;\n\n case "Point":\n case "MultiPoint":\n return null;\n\n case "LineString":\n case "Polygon":\n case "MultiLineString":\n case "MultiPolygon":\n geometry = geojson;\n break;\n\n default:\n throw new Error("geojson is invalid");\n } // Find Coord Index\n\n\n if (geometry === null) return null;\n var coords = geometry.coordinates;\n\n switch (geometry.type) {\n case "Point":\n return point(coords, properties, options);\n\n case "MultiPoint":\n if (multiFeatureIndex < 0) multiFeatureIndex = coords.length + multiFeatureIndex;\n return point(coords[multiFeatureIndex], properties, options);\n\n case "LineString":\n if (coordIndex < 0) coordIndex = coords.length + coordIndex;\n return point(coords[coordIndex], properties, options);\n\n case "Polygon":\n if (geometryIndex < 0) geometryIndex = coords.length + geometryIndex;\n if (coordIndex < 0) coordIndex = coords[geometryIndex].length + coordIndex;\n return point(coords[geometryIndex][coordIndex], properties, options);\n\n case "MultiLineString":\n if (multiFeatureIndex < 0) multiFeatureIndex = coords.length + multiFeatureIndex;\n if (coordIndex < 0) coordIndex = coords[multiFeatureIndex].length + coordIndex;\n return point(coords[multiFeatureIndex][coordIndex], properties, options);\n\n case "MultiPolygon":\n if (multiFeatureIndex < 0) multiFeatureIndex = coords.length + multiFeatureIndex;\n if (geometryIndex < 0) geometryIndex = coords[multiFeatureIndex].length + geometryIndex;\n if (coordIndex < 0) coordIndex = coords[multiFeatureIndex][geometryIndex].length - coordIndex;\n return point(coords[multiFeatureIndex][geometryIndex][coordIndex], properties, options);\n }\n\n throw new Error("geojson is invalid");\n}\n\n\n;// CONCATENATED MODULE: ./node_modules/@turf/bbox/dist/es/index.js\n\n/**\n * Takes a set of features, calculates the bbox of all input features, and returns a bounding box.\n *\n * @name bbox\n * @param {GeoJSON} geojson any GeoJSON object\n * @returns {BBox} bbox extent in [minX, minY, maxX, maxY] order\n * @example\n * var line = turf.lineString([[-74, 40], [-78, 42], [-82, 35]]);\n * var bbox = turf.bbox(line);\n * var bboxPolygon = turf.bboxPolygon(bbox);\n *\n * //addToMap\n * var addToMap = [line, bboxPolygon]\n */\n\nfunction bbox(geojson) {\n var result = [Infinity, Infinity, -Infinity, -Infinity];\n coordEach(geojson, function (coord) {\n if (result[0] > coord[0]) {\n result[0] = coord[0];\n }\n\n if (result[1] > coord[1]) {\n result[1] = coord[1];\n }\n\n if (result[2] < coord[0]) {\n result[2] = coord[0];\n }\n\n if (result[3] < coord[1]) {\n result[3] = coord[1];\n }\n });\n return result;\n}\n\nbbox["default"] = bbox;\n/* harmony default export */ var es = (bbox);\n;// CONCATENATED MODULE: ./node_modules/d3-ease/src/cubic.js\nfunction cubicIn(t) {\n return t * t * t;\n}\nfunction cubicOut(t) {\n return --t * t * t + 1;\n}\nfunction cubicInOut(t) {\n return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n// EXTERNAL MODULE: ./node_modules/react-device-detect/main.js\nvar main = __webpack_require__(1677);\n// EXTERNAL MODULE: ./src/contexts/FlagContext.tsx\nvar FlagContext = __webpack_require__(774);\n// EXTERNAL MODULE: ./node_modules/gatsby-plugin-intl/index.js\nvar gatsby_plugin_intl = __webpack_require__(9703);\n;// CONCATENATED MODULE: ./src/components/territoryFocusControl.module.scss\n// extracted by mini-css-extract-plugin\nvar territoryFocusButton = "territoryFocusControl-module--territoryFocusButton--3wWoV";\nvar territoryFocusContainer = "territoryFocusControl-module--territoryFocusContainer--3N0XM";\n;// CONCATENATED MODULE: ./src/components/territoryFocusControl.tsx\nvar TerritoryFocusControl=function TerritoryFocusControl(_ref){var onClickTerritoryFocusButton=_ref.onClickTerritoryFocusButton;var intl=(0,gatsby_plugin_intl.useIntl)();var _useMapControl=useMapControl({// @ts-ignore // Types have not caught up yet, see https://github.com/visgl/react-map-gl/issues/1492\nonClick:onClickTerritoryFocusButton}),containerRef=_useMapControl.containerRef;var territories=[{short:intl.formatMessage({id:\'map.territoryFocus.lower48.short\',defaultMessage:\'48\',description:\'The abbreviated name indicating the bounds of the Lower 48 states\'}),long:intl.formatMessage({id:\'map.territoryFocus.lower48.long\',defaultMessage:\'Lower 48\',description:\'The longer name indicating the bounds of the Lower 48 states\'})},{short:intl.formatMessage({id:\'map.territoryFocus.alaska.short\',defaultMessage:\'AK\',description:\'The abbreviated indicating the bounds of Alaska\'}),long:intl.formatMessage({id:\'map.territoryFocus.alaska.long\',defaultMessage:\'Alaska\',description:\'The full name indicating the bounds of Alaska\'})},{short:intl.formatMessage({id:\'map.territoryFocus.hawaii.short\',defaultMessage:\'HI\',description:\'The abbreviated name indicating the bounds of Hawaii\'}),long:intl.formatMessage({id:\'map.territoryFocus.hawaii.long\',defaultMessage:\'Hawaii\',description:\'The longer name indicating the bounds of Hawaii\'})},{short:intl.formatMessage({id:\'map.territoryFocus.puerto_rico.short\',defaultMessage:\'PR\',description:\'The abbreviated name indicating the bounds of Puerto Rico\'}),long:intl.formatMessage({id:\'map.territoryFocus.puerto_rico.long\',defaultMessage:\'Puerto Rico\',description:\'The full name indicating the bounds of Puerto Rico\'})}];return/*#__PURE__*/react.createElement("div",{ref:containerRef,className:territoryFocusContainer},territories.map(function(territory){return/*#__PURE__*/react.createElement("button",{id:territory.short,key:territory.short,onClick:onClickTerritoryFocusButton,className:territoryFocusButton,"aria-label":intl.formatMessage({id:\'map.territoryFocus.focusOn\',defaultMessage:\'Focus on {territory}\',description:\'Focus on the bounds of a specific territory\'},{territory:territory.long})},territory.short);}));};/* harmony default export */ var territoryFocusControl = (TerritoryFocusControl);\n// EXTERNAL MODULE: ./node_modules/react-intl/lib/index.js + 8 modules\nvar lib = __webpack_require__(4424);\n;// CONCATENATED MODULE: ./node_modules/uswds/dist/img/usa-icons/lightbulb_outline.svg\n/* harmony default export */ var lightbulb_outline = ("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDI0IDI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCI+PGc+PHJlY3QgZmlsbD0ibm9uZSIgaGVpZ2h0PSIyNCIgd2lkdGg9IjI0Ii8+PC9nPjxnPjxnPjxnPjxwYXRoIGQ9Ik05LDIxYzAsMC41NSwwLjQ1LDEsMSwxaDRjMC41NSwwLDEtMC40NSwxLTF2LTFIOVYyMXogTTEyLDJDOC4xNCwyLDUsNS4xNCw1LDljMCwyLjM4LDEuMTksNC40NywzLDUuNzRWMTcgYzAsMC41NSwwLjQ1LDEsMSwxaDZjMC41NSwwLDEtMC40NSwxLTF2LTIuMjZjMS44MS0xLjI3LDMtMy4zNiwzLTUuNzRDMTksNS4xNCwxNS44NiwyLDEyLDJ6IE0xNCwxMy43VjE2aC00di0yLjMgQzguNDgsMTIuNjMsNywxMS41Myw3LDljMC0yLjc2LDIuMjQtNSw1LTVzNSwyLjI0LDUsNUMxNywxMS40OSwxNS40OSwxMi42NSwxNCwxMy43eiIvPjwvZz48L2c+PC9nPjwvc3ZnPg==");\n;// CONCATENATED MODULE: ./src/components/mapIntroduction.module.scss\n// extracted by mini-css-extract-plugin\nvar mapIntroContainer = "mapIntroduction-module--mapIntroContainer--1K8du";\nvar mapIntroHeader = "mapIntroduction-module--mapIntroHeader--32LBs";\nvar mapIntroText = "mapIntroduction-module--mapIntroText--Tib8L";\nvar mapIntroLightbulb = "mapIntroduction-module--mapIntroLightbulb--3LBx0";\nvar didYouKnowBox = "mapIntroduction-module--didYouKnowBox--3ztEy";\nvar didYouKnow = "mapIntroduction-module--didYouKnow--3_v_i";\nvar didYouKnowText = "mapIntroduction-module--didYouKnowText--3sgHs";\n;// CONCATENATED MODULE: ./src/components/mapIntroduction.tsx\n// @ts-ignore\nvar MapIntroduction=function MapIntroduction(){var intl=(0,gatsby_plugin_intl.useIntl)();var messages=(0,lib/* defineMessages */.vU)({mapIntroHeader:{id:\'mapIntro.mapIntroHeader\',defaultMessage:\'Zoom and select a census block group to view data\',description:\'introductory text of ways to use the map\'},didYouKnow:{id:\'mapIntro.didYouKnow\',defaultMessage:\' Did you know?\',description:\'text prompting a cite paragraph\'},censusBlockGroupDefinition:{id:\'mapIntro.censusBlockGroupDefinition\',defaultMessage:\'A census block group is generally between 600 and 3,000 people. \'+\'It is the smallest geographical unit for which the U.S. Census \'+\'Bureau publishes sample data.\',description:\'cites the definition and helpful information about census groups\'}});return/*#__PURE__*/react.createElement("aside",{className:mapIntroContainer},/*#__PURE__*/react.createElement("header",{className:mapIntroHeader},intl.formatMessage(messages.mapIntroHeader)),/*#__PURE__*/react.createElement("div",{className:mapIntroText},/*#__PURE__*/react.createElement("img",{className:mapIntroLightbulb,src:lightbulb_outline}),/*#__PURE__*/react.createElement("div",{className:didYouKnowBox},/*#__PURE__*/react.createElement("div",{className:didYouKnow},intl.formatMessage(messages.didYouKnow)),/*#__PURE__*/react.createElement("cite",{className:didYouKnowText},intl.formatMessage(messages.censusBlockGroupDefinition)))));};/* harmony default export */ var mapIntroduction = (MapIntroduction);\n;// CONCATENATED MODULE: ./src/components/areaDetail.module.scss\n// extracted by mini-css-extract-plugin\nvar areaDetailContainer = "areaDetail-module--areaDetailContainer--15ae9";\nvar topRow = "areaDetail-module--topRow--GKfYj";\nvar cumulativeIndexScore = "areaDetail-module--cumulativeIndexScore--6IjJ9";\nvar areaDetail_module_categorization = "areaDetail-module--categorization--3HQ3g";\nvar topRowTitle = "areaDetail-module--topRowTitle--3pDta";\nvar censusLabel = "areaDetail-module--censusLabel--2jDJl";\nvar topRowSubTitle = "areaDetail-module--topRowSubTitle--N8_GP";\nvar areaDetail_module_score = "areaDetail-module--score--3i8w1";\nvar scoreSuperscript = "areaDetail-module--scoreSuperscript--wmEIg";\nvar priority = "areaDetail-module--priority--PLMch";\nvar prioritized = "areaDetail-module--prioritized--1fVrQ";\nvar threshold = "areaDetail-module--threshold--34bIL";\nvar nonPrioritized = "areaDetail-module--nonPrioritized--1dEfk";\nvar prioritization = "areaDetail-module--prioritization--282dL";\nvar censusRow = "areaDetail-module--censusRow--1b9rm";\nvar censusText = "areaDetail-module--censusText--4hgvr";\nvar indicatorDescription = "areaDetail-module--indicatorDescription--2GABj";\nvar divider = "areaDetail-module--divider--3pt_a";\nvar indicatorBox = "areaDetail-module--indicatorBox--wTEld";\nvar indicatorTitle = "areaDetail-module--indicatorTitle--1tXMA";\nvar indicatorValue = "areaDetail-module--indicatorValue--3pmOI";\n;// CONCATENATED MODULE: ./src/data/constants.tsx\n// URLS\nvar FEATURE_TILE_BASE_URL=\'https://d2zjid6n5ja2pt.cloudfront.net\';var XYZ_SUFFIX=\'{z}/{x}/{y}.pbf\';var featureURLForTilesetName=function featureURLForTilesetName(tilesetName){return FEATURE_TILE_BASE_URL+"/"+tilesetName+"/"+XYZ_SUFFIX;};var FEATURE_TILE_HIGH_ZOOM_URL=featureURLForTilesetName(\'0714_high\');var FEATURE_TILE_LOW_ZOOM_URL=featureURLForTilesetName(\'tiles_low\');// Performance markers\nvar PERFORMANCE_MARKER_MAP_IDLE=\'MAP_IDLE\';// Properties\nvar SCORE_PROPERTY_HIGH=\'Score D (percentile)\';var SCORE_PROPERTY_LOW=\'D_SCORE\';var GEOID_PROPERTY=\'GEOID10\';var HIGH_SCORE_SOURCE_NAME=\'score-high\';var HIGH_SCORE_LAYER_NAME=\'score-high-layer\';var LOW_SCORE_SOURCE_NAME=\'score-low\';var LOW_SCORE_LAYER_NAME=\'score-low-layer\';var SELECTED_PROPERTY=\'selected\';var CURRENTLY_SELECTED_FEATURE_HIGHLIGHT_LAYER_NAME=\'currently-selected-feature-highlight-layer\';var BLOCK_GROUP_BOUNDARY_LAYER_NAME=\'block-group-boundary-layer\';// Properties\nvar POVERTY_PROPERTY_PERCENTILE=\'Poverty (Less than 200% of federal poverty line) (percentile)\';var HOUSING_BURDEN_PROPERTY_PERCENTILE=\'Housing burden (percent) (percentile)\';var LINGUISTIC_ISOLATION_PROPERTY_PERCENTILE=\'Linguistic isolation (percent) (percentile)\';var UNEMPLOYMENT_PROPERTY_PERCENTILE=\'Unemployed civilians (percent) (percentile)\';var TOTAL_POPULATION=\'Total population\';var EDUCATION_PROPERTY_PERCENTILE=\'Percent individuals age 25 or over \'+\'with less than high school degree (percentile)\';// The name of the layer within the tiles that contains the score\nvar SCORE_SOURCE_LAYER=\'blocks\';// Zoom\nvar GLOBAL_MIN_ZOOM=3;var GLOBAL_MAX_ZOOM=22;var GLOBAL_MIN_ZOOM_LOW=3;var GLOBAL_MAX_ZOOM_LOW=7;var GLOBAL_MIN_ZOOM_HIGHLIGHT=9;var GLOBAL_MAX_ZOOM_HIGHLIGHT=22;var GLOBAL_MIN_ZOOM_HIGH=7;var GLOBAL_MAX_ZOOM_HIGH=11;// Bounds\nvar GLOBAL_MAX_BOUNDS=(/* unused pure expression or super */ null && ([[-180.118306,5.499550],[-65.0,83.162102]]));var LOWER_48_BOUNDS=[[-124.7844079,24.7433195],[-66.9513812,49.3457868]];var ALASKA_BOUNDS=[[-183.856888,50.875311],[-140.932617,71.958797]];var HAWAII_BOUNDS=[[-168.118306,18.748115],[-154.757881,22.378413]];var PUERTO_RICO_BOUNDS=[[-67.945404,17.88328],[-65.220703,18.515683]];var GUAM_BOUNDS=(/* unused pure expression or super */ null && ([[-215.389709,13.225909],[-215.040894,13.663335]]));var MARIANA_ISLAND_BOUNDS=(/* unused pure expression or super */ null && ([[-215.313449,14.007801],[-213.742404,19.750326]]));var AMERICAN_SAMOA_BOUNDS=(/* unused pure expression or super */ null && ([[-171.089874,-14.548699],[-168.1433,-11.046934]]));var DEFAULT_CENTER=[32.4687126,-86.502136];// Opacity\nvar DEFAULT_LAYER_OPACITY=0.6;// Colors\nvar DEFAULT_OUTLINE_COLOR=\'#4EA5CF\';var MIN_COLOR=\'#FFFFFF\';var MED_COLOR=\'#D1DAE6\';var MAX_COLOR=\'#768FB3\';var BORDER_HIGHLIGHT_COLOR=\'#00BDE3\';var CURRENTLY_SELECTED_FEATURE_LAYER_OPACITY=0.5;// Widths\nvar HIGHLIGHT_BORDER_WIDTH=5.0;var CURRENTLY_SELECTED_FEATURE_LAYER_WIDTH=0.8;// Score boundaries\nvar SCORE_BOUNDARY_LOW=0.0;var SCORE_BOUNDARY_THRESHOLD=0.6;var SCORE_BOUNDARY_PRIORITIZED=0.75;var isMobile=main/* isMobile */.tq;\n;// CONCATENATED MODULE: ./src/components/areaDetail.tsx\n// External Libs:\n// Components:\n// Styles and constants\nvar readablePercent=function readablePercent(percent){return""+(percent*100).toFixed(1);};var getCategorization=function getCategorization(percentile){var categorization;var categoryCircleStyle;if(percentile>=SCORE_BOUNDARY_PRIORITIZED){categorization=\'Prioritized\';categoryCircleStyle=prioritized;}else if(SCORE_BOUNDARY_THRESHOLD<=percentile&&percentile\',SCORE_PROPERTY_HIGH,SCORE_BOUNDARY_THRESHOLD]],\'paint\':makePaint({field:SCORE_PROPERTY_HIGH,minRamp:SCORE_BOUNDARY_LOW,medRamp:SCORE_BOUNDARY_THRESHOLD,maxRamp:SCORE_BOUNDARY_PRIORITIZED}),\'minzoom\':GLOBAL_MIN_ZOOM_HIGH},{\'id\':LOW_SCORE_LAYER_NAME,\'source\':LOW_SCORE_SOURCE_NAME,\'source-layer\':SCORE_SOURCE_LAYER,\'type\':\'fill\',\'filter\':[\'all\',[\'>\',SCORE_PROPERTY_LOW,SCORE_BOUNDARY_THRESHOLD]],\'paint\':makePaint({field:SCORE_PROPERTY_LOW,minRamp:SCORE_BOUNDARY_LOW,medRamp:SCORE_BOUNDARY_THRESHOLD,maxRamp:SCORE_BOUNDARY_PRIORITIZED}),\'minzoom\':GLOBAL_MIN_ZOOM_LOW,\'maxzoom\':GLOBAL_MAX_ZOOM_LOW},{// We put labels last to ensure prominence\n\'id\':\'labels-only-layer\',\'type\':\'raster\',\'source\':\'labels\',\'minzoom\':GLOBAL_MIN_ZOOM,\'maxzoom\':GLOBAL_MAX_ZOOM}]};};\n;// CONCATENATED MODULE: ./src/components/J40Map.module.scss\n// extracted by mini-css-extract-plugin\nvar mapAndInfoPanelContainer = "J40Map-module--mapAndInfoPanelContainer--q-ody";\nvar j40Popup = "J40Map-module--j40Popup--3yJGr";\nvar navigationControl = "J40Map-module--navigationControl--2Aybf";\nvar fullscreenControl = "J40Map-module--fullscreenControl--1UBKe";\nvar geolocateControl = "J40Map-module--geolocateControl--3KVAk";\nvar J40Map_module_mapInfoPanel = "J40Map-module--mapInfoPanel--F3jR4";\n;// CONCATENATED MODULE: ./src/components/J40Map.tsx\n/* eslint-disable no-unused-vars */ // External Libs:\n// Contexts:\n// Components:\n// Styles and constants\n;;var J40Map=function J40Map(_ref){var location=_ref.location;var _location$hash$slice$=location.hash.slice(1).split(\'/\'),zoom=_location$hash$slice$[0],lat=_location$hash$slice$[1],lng=_location$hash$slice$[2];var _useState=(0,react.useState)({latitude:lat&&parseFloat(lat)||DEFAULT_CENTER[0],longitude:lng&&parseFloat(lng)||DEFAULT_CENTER[1],zoom:zoom&&parseFloat(zoom)||GLOBAL_MIN_ZOOM}),viewport=_useState[0],setViewport=_useState[1];var _useState2=(0,react.useState)(),selectedFeature=_useState2[0],setSelectedFeature=_useState2[1];var _useState3=(0,react.useState)(),detailViewData=_useState3[0],setDetailViewData=_useState3[1];var _useState4=(0,react.useState)(false),transitionInProgress=_useState4[0],setTransitionInProgress=_useState4[1];var _useState5=(0,react.useState)(false),geolocationInProgress=_useState5[0],setGeolocationInProgress=_useState5[1];var _useState6=(0,react.useState)(false),isMobileMapState=_useState6[0],setIsMobileMapState=_useState6[1];var mapRef=(0,react.useRef)(null);var flags=(0,FlagContext/* useFlags */.Vb)();var selectedFeatureId=selectedFeature&&selectedFeature.id||\'\';var filter=(0,react.useMemo)(function(){return[\'in\',GEOID_PROPERTY,selectedFeatureId];},[selectedFeature]);var onClick=function onClick(event){var feature=event.features&&event.features[0];if(feature){var _bbox=es(feature),minLng=_bbox[0],minLat=_bbox[1],maxLng=_bbox[2],maxLat=_bbox[3];var newViewPort=new WebMercatorViewport({height:viewport.height,width:viewport.width});var _newViewPort$fitBound=newViewPort.fitBounds([[minLng,minLat],[maxLng,maxLat]],{padding:40}),longitude=_newViewPort$fitBound.longitude,latitude=_newViewPort$fitBound.latitude,_zoom=_newViewPort$fitBound.zoom;if(feature.id!==selectedFeatureId){setSelectedFeature(feature);}else{setSelectedFeature(undefined);}var popupInfo={longitude:longitude,latitude:latitude,zoom:_zoom,properties:feature.properties};goToPlace([[minLng,minLat],[maxLng,maxLat]]);setDetailViewData(popupInfo);}};var onLoad=function onLoad(){if(typeof window!==\'undefined\'&&window.Cypress&&mapRef.current){window.underlyingMap=mapRef.current.getMap();}if(main/* isMobile */.tq)setIsMobileMapState(true);};var goToPlace=function goToPlace(bounds){var _WebMercatorViewport$=new WebMercatorViewport({height:viewport.height,width:viewport.width}).fitBounds(bounds,{padding:20,offset:[0,-100]}),longitude=_WebMercatorViewport$.longitude,latitude=_WebMercatorViewport$.latitude,zoom=_WebMercatorViewport$.zoom;setViewport(Object.assign({},viewport,{longitude:longitude,latitude:latitude,zoom:zoom,transitionDuration:1000,transitionInterpolator:new ViewportFlyToInterpolator(),transitionEasing:cubicInOut}));};var onClickTerritoryFocusButton=function onClickTerritoryFocusButton(event){event.stopPropagation();var buttonID=event.target&&event.target.id;switch(buttonID){case\'48\':goToPlace(LOWER_48_BOUNDS);break;case\'AK\':goToPlace(ALASKA_BOUNDS);break;case\'HI\':goToPlace(HAWAII_BOUNDS);break;case\'PR\':goToPlace(PUERTO_RICO_BOUNDS);break;default:break;}};var onTransitionStart=function onTransitionStart(){setTransitionInProgress(true);};var onTransitionEnd=function onTransitionEnd(){setTransitionInProgress(false);};var onGeolocate=function onGeolocate(){setGeolocationInProgress(false);};var onClickGeolocate=function onClickGeolocate(){setGeolocationInProgress(true);};return/*#__PURE__*/react.createElement("div",{className:mapAndInfoPanelContainer},/*#__PURE__*/react.createElement(interactive_map,Object.assign({},viewport,{mapStyle:makeMapStyle(flags),minZoom:GLOBAL_MIN_ZOOM,maxZoom:GLOBAL_MAX_ZOOM,mapOptions:{hash:true},width:"100%",height:isMobileMapState?\'44vh\':\'100%\',dragRotate:false,touchRotate:false,interactiveLayerIds:[HIGH_SCORE_LAYER_NAME],onViewportChange:setViewport,onClick:onClick,onLoad:onLoad,onTransitionStart:onTransitionStart,onTransitionEnd:onTransitionEnd,ref:mapRef,"data-cy":\'reactMapGL\'}),/*#__PURE__*/react.createElement(source,{id:HIGH_SCORE_SOURCE_NAME,type:"vector",promoteId:GEOID_PROPERTY,tiles:[FEATURE_TILE_HIGH_ZOOM_URL],maxzoom:GLOBAL_MIN_ZOOM_HIGH,minzoom:GLOBAL_MAX_ZOOM_HIGH},/*#__PURE__*/react.createElement(components_layer,{id:CURRENTLY_SELECTED_FEATURE_HIGHLIGHT_LAYER_NAME,"source-layer":SCORE_SOURCE_LAYER,type:"line",paint:{\'line-color\':DEFAULT_OUTLINE_COLOR,\'line-width\':CURRENTLY_SELECTED_FEATURE_LAYER_WIDTH,\'line-opacity\':CURRENTLY_SELECTED_FEATURE_LAYER_OPACITY},minzoom:GLOBAL_MIN_ZOOM_HIGHLIGHT,maxzoom:GLOBAL_MAX_ZOOM_HIGHLIGHT}),/*#__PURE__*/react.createElement(components_layer,{id:BLOCK_GROUP_BOUNDARY_LAYER_NAME,type:"line","source-layer":SCORE_SOURCE_LAYER,paint:{\'line-color\':BORDER_HIGHLIGHT_COLOR,\'line-width\':HIGHLIGHT_BORDER_WIDTH},filter:filter,minzoom:GLOBAL_MIN_ZOOM_HIGH})),\'fs\'in flags&&detailViewData&&!transitionInProgress&&/*#__PURE__*/react.createElement(popup,{className:j40Popup,tipSize:5,anchor:"top",longitude:detailViewData.longitude,latitude:detailViewData.latitude,closeOnClick:true,onClose:setDetailViewData,captureScroll:true},/*#__PURE__*/react.createElement(areaDetail,{properties:detailViewData.properties})),/*#__PURE__*/react.createElement(navigation_control,{showCompass:false,className:navigationControl}),\'gl\'in flags?/*#__PURE__*/react.createElement(geolocate_control,{className:geolocateControl,positionOptions:{enableHighAccuracy:true},onGeolocate:onGeolocate// @ts-ignore // Types have not caught up yet, see https://github.com/visgl/react-map-gl/issues/1492\n,onClick:onClickGeolocate}):\'\',geolocationInProgress?/*#__PURE__*/react.createElement("div",null,"Geolocation in progress..."):\'\',/*#__PURE__*/react.createElement(territoryFocusControl,{onClickTerritoryFocusButton:onClickTerritoryFocusButton}),\'fs\'in flags?/*#__PURE__*/react.createElement(fullscreen_control,{className:fullscreenControl}):\'\'),/*#__PURE__*/react.createElement(mapInfoPanel,{className:J40Map_module_mapInfoPanel,featureProperties:detailViewData===null||detailViewData===void 0?void 0:detailViewData.properties,selectedFeatureId:selectedFeature===null||selectedFeature===void 0?void 0:selectedFeature.id}));};/* harmony default export */ var components_J40Map = (J40Map);\n;// CONCATENATED MODULE: ./src/components/HowYouCanHelp.module.scss\n// extracted by mini-css-extract-plugin\nvar howYouCanHelpContainer = "HowYouCanHelp-module--howYouCanHelpContainer--2kqBa";\n;// CONCATENATED MODULE: ./src/components/HowYouCanHelp.tsx\nvar HowYouCanHelp=function HowYouCanHelp(){return/*#__PURE__*/react.createElement("div",{className:howYouCanHelpContainer},/*#__PURE__*/react.createElement("h2",null,"How You Can Help Improve the Tool"),/*#__PURE__*/react.createElement("ul",{className:\'usa-list\'},/*#__PURE__*/react.createElement("li",null,"If you have information that could help, we\\u2019d love to hear from you."),/*#__PURE__*/react.createElement("li",null,"View our full set of data sources and methodology where you can add or download sources and check statuses on our data roadmap."),/*#__PURE__*/react.createElement("li",null,"Check out our timeline and send feedback or attend relevant events."),/*#__PURE__*/react.createElement("li",null,"Contact us and share the stories of your community.")));};/* harmony default export */ var components_HowYouCanHelp = (HowYouCanHelp);\n// EXTERNAL MODULE: ./node_modules/@trussworks/react-uswds/lib/index.js\nvar react_uswds_lib = __webpack_require__(2593);\n;// CONCATENATED MODULE: ./src/components/downloadPacket.module.scss\n// extracted by mini-css-extract-plugin\nvar downloadBoxContainer = "downloadPacket-module--downloadBoxContainer--IfYSI";\nvar downloadBox = "downloadPacket-module--downloadBox--23qAG";\nvar downloadBoxTextBox = "downloadPacket-module--downloadBoxTextBox--2C08I";\nvar downloadBoxTitle = "downloadPacket-module--downloadBoxTitle--2oQsR";\nvar downloadBoxText = "downloadPacket-module--downloadBoxText--s09H8";\nvar downloadBoxButtonContainer = "downloadPacket-module--downloadBoxButtonContainer--EBWUf";\nvar downloadBoxButton = "downloadPacket-module--downloadBoxButton--3w-ok";\nvar downloadPacketText = "downloadPacket-module--downloadPacketText--2MyEV";\n;// CONCATENATED MODULE: ./node_modules/uswds/dist/img/usa-icons/file_download.svg\n/* harmony default export */ var file_download = ("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXoiLz48L3N2Zz4=");\n;// CONCATENATED MODULE: ./src/components/downloadPacket.tsx\n// @ts-ignore\nvar cbgFileURL=\'https://justice40-data.s3.amazonaws.com/Score/usa.zip\';var DownloadPacket=function DownloadPacket(){return/*#__PURE__*/react.createElement("div",{className:downloadBoxContainer},/*#__PURE__*/react.createElement("div",{className:downloadBox},/*#__PURE__*/react.createElement("div",{className:downloadBoxTextBox},/*#__PURE__*/react.createElement("div",{className:downloadBoxTitle},"Just Progress Packet"),/*#__PURE__*/react.createElement("div",{className:downloadBoxText},"This downloadable packet includes the list of Just Progress prioritized communities (30,021 census block groups) and 18 datasets."),/*#__PURE__*/react.createElement("div",{className:downloadBoxButtonContainer},/*#__PURE__*/react.createElement("a",{id:\'download-link\',href:cbgFileURL},/*#__PURE__*/react.createElement(react_uswds_lib.Button,{className:downloadBoxButton,type:"button"},/*#__PURE__*/react.createElement("div",null,/*#__PURE__*/react.createElement("img",{src:file_download})," "),/*#__PURE__*/react.createElement("div",{className:downloadPacketText},"Download packet")))))));};/* harmony default export */ var downloadPacket = (DownloadPacket);\n;// CONCATENATED MODULE: ./src/components/mapLegend.module.scss\n// extracted by mini-css-extract-plugin\nvar legendContainer = "mapLegend-module--legendContainer--2N1FC";\nvar swatchContainer = "mapLegend-module--swatchContainer--1yZX1";\nvar legendItem = "mapLegend-module--legendItem--WezUf";\nvar colorSwatch = "mapLegend-module--colorSwatch--oBUN2";\nvar mapLegend_module_prioritized = "mapLegend-module--prioritized--1I534";\nvar mapLegend_module_threshold = "mapLegend-module--threshold--1zali";\nvar mapLegend_module_nonPrioritized = "mapLegend-module--nonPrioritized--2y0Vm";\n;// CONCATENATED MODULE: ./src/components/mapLegend.tsx\nvar MapLegend=function MapLegend(){return/*#__PURE__*/react.createElement("div",{className:legendContainer},/*#__PURE__*/react.createElement("h3",{className:mapLegend_module_namespaceObject.legendHeader},"COLOR KEY"),/*#__PURE__*/react.createElement("div",{className:swatchContainer},/*#__PURE__*/react.createElement("div",{className:legendItem},/*#__PURE__*/react.createElement("div",{className:colorSwatch,id:mapLegend_module_prioritized}),/*#__PURE__*/react.createElement("span",null,"Prioritized Community")),/*#__PURE__*/react.createElement("div",{className:legendItem},/*#__PURE__*/react.createElement("div",{className:colorSwatch,id:mapLegend_module_threshold}),/*#__PURE__*/react.createElement("span",null,"Threshold Community")),/*#__PURE__*/react.createElement("div",{className:legendItem},/*#__PURE__*/react.createElement("div",{className:colorSwatch,id:mapLegend_module_nonPrioritized}),/*#__PURE__*/react.createElement("span",null,"Non-Prioritized Community"))));};/* harmony default export */ var mapLegend = (MapLegend);\n;// CONCATENATED MODULE: ./src/pages/cejst.module.scss\n// extracted by mini-css-extract-plugin\nvar disclaimer = "cejst-module--disclaimer--3LC1y";\nvar textBox = "cejst-module--textBox--9wuDw";\n;// CONCATENATED MODULE: ./src/pages/cejst.tsx\nvar CEJSTPage=function CEJSTPage(_ref){var location=_ref.location;// We temporarily removed MapControls, which would enable you to `setFeatures` also, for now\n// We will bring back later when we have interactive controls.\nreturn/*#__PURE__*/react.createElement(layout/* default */.Z,{location:location},/*#__PURE__*/react.createElement("main",{id:"main-content",role:"main"},/*#__PURE__*/react.createElement("section",null,/*#__PURE__*/react.createElement("h2",null,"Just Progress communities"),/*#__PURE__*/react.createElement("div",{className:disclaimer},/*#__PURE__*/react.createElement("div",{className:textBox},/*#__PURE__*/react.createElement("p",null,"Just Progress helps identify and prioritize communities across the United States and U.S. territories that have been historically overburdened and underserved. These communities will receive 40% of the benefits from investments in key areas outlined by the \\xA0",/*#__PURE__*/react.createElement("a",{href:\'https://www.whitehouse.gov/briefing-room/\'+\'presidential-actions/2021/01/27/\'+\'executive-order-on-tackling-the-climate-\'+\'crisis-at-home-and-abroad/\',target:\'_blank\',rel:\'noreferrer\'},"Executive Order on Tackling the Climate Crisis at Home and Abroad"),"."),/*#__PURE__*/react.createElement("p",null,"Download the Just Progress packet or explore the map below to see the list of prioritized communites. To learn more about how these communities were prioritized check out the \\xA0",/*#__PURE__*/react.createElement("a",{href:\'./methodology\'},"Methodology"),"\\xA0 page.")),/*#__PURE__*/react.createElement(downloadPacket,null))),/*#__PURE__*/react.createElement("h2",null,"Explore the Tool"),/*#__PURE__*/react.createElement(components_J40Map,{location:location}),/*#__PURE__*/react.createElement(mapLegend,null),/*#__PURE__*/react.createElement(components_HowYouCanHelp,null)));};/* harmony default export */ var cejst = (CEJSTPage);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzLmpzP2MzMWQiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHkuanM/YWRlMyIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hcnJheVdpdGhIb2xlcy5qcz8wZDIxIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzPzA5ZjAiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vbm9uSXRlcmFibGVSZXN0LmpzPzNkOGMiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheS5qcz8zODM1Iiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NsYXNzQ2FsbENoZWNrLmpzP2Q0ZWMiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY3JlYXRlQ2xhc3MuanM/YmVlMiIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9nbC1tYXRyaXgvZXNtL2NvbW1vbi5qcz9iOTNlIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL2dsLW1hdHJpeC9lc20vdmVjNC5qcz84OWJiIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL0BtYXRoLmdsL3dlYi1tZXJjYXRvci9kaXN0L2VzbS9tYXRoLXV0aWxzLmpzP2Q5MDYiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvZ2wtbWF0cml4L2VzbS9tYXQ0LmpzPzQ1ODkiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvZ2wtbWF0cml4L2VzbS92ZWMyLmpzPzFhNzEiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvZ2wtbWF0cml4L2VzbS92ZWMzLmpzPzg5MDIiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvQG1hdGguZ2wvd2ViLW1lcmNhdG9yL2Rpc3QvZXNtL2Fzc2VydC5qcz9hYTdhIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL0BtYXRoLmdsL3dlYi1tZXJjYXRvci9kaXN0L2VzbS93ZWItbWVyY2F0b3ItdXRpbHMuanM/NzM1MiIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AbWF0aC5nbC93ZWItbWVyY2F0b3IvZGlzdC9lc20vZml0LWJvdW5kcy5qcz84MTdlIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL0BtYXRoLmdsL3dlYi1tZXJjYXRvci9kaXN0L2VzbS9nZXQtYm91bmRzLmpzPzQwZjMiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvQG1hdGguZ2wvd2ViLW1lcmNhdG9yL2Rpc3QvZXNtL3dlYi1tZXJjYXRvci12aWV3cG9ydC5qcz8xYWQ2Iiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL0BtYXRoLmdsL3dlYi1tZXJjYXRvci9kaXN0L2VzbS9ub3JtYWxpemUtdmlld3BvcnQtcHJvcHMuanM/YzNkOCIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AbWF0aC5nbC93ZWItbWVyY2F0b3IvZGlzdC9lc20vZmx5LXRvLXZpZXdwb3J0LmpzPzNjMjgiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvQG1hdGguZ2wvd2ViLW1lcmNhdG9yL2Rpc3QvZXNtL2luZGV4LmpzP2U1YjMiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvdmlld3BvcnQtbWVyY2F0b3ItcHJvamVjdC9tb2R1bGUuanM/ZTI0NSIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9yZXNpemUtb2JzZXJ2ZXItcG9seWZpbGwvZGlzdC9SZXNpemVPYnNlcnZlci5lcy5qcz82ZmVhIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL3JlYWN0LW1hcC1nbC9kaXN0L2VzbS91dGlscy9nbG9iYWxzLmpzP2U3YWUiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvcmVhY3QtbWFwLWdsL2Rpc3QvZXNtL3V0aWxzL3N0eWxlLXV0aWxzLmpzP2UyZGEiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvcmVhY3QtbWFwLWdsL2Rpc3QvZXNtL21hcGJveC9tYXBib3guanM/OWM3ZCIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9yZWFjdC1tYXAtZ2wvZGlzdC9lc20vdXRpbHMvbWF0aC11dGlscy5qcz9mOTFhIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL3JlYWN0LW1hcC1nbC9kaXN0L2VzbS91dGlscy9hc3NlcnQuanM/ODA0NyIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9yZWFjdC1tYXAtZ2wvZGlzdC9lc20vdXRpbHMvbWFwLXN0YXRlLmpzPzRmYjEiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvcmVhY3QtbWFwLWdsL2Rpc3QvZXNtL3V0aWxzL21hcC1jb25zdHJhaW50cy5qcz8yMWNiIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL3JlYWN0LW1hcC1nbC9kaXN0L2VzbS9jb21wb25lbnRzL21hcC1jb250ZXh0LmpzP2M2N2EiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvcmVhY3QtbWFwLWdsL2Rpc3QvZXNtL3V0aWxzL3VzZS1pc29tb3JwaGljLWxheW91dC1lZmZlY3QuanM/NGY3MSIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9yZWFjdC1tYXAtZ2wvZGlzdC9lc20vdXRpbHMvdGVycmFpbi5qcz8xMDFiIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL3JlYWN0LW1hcC1nbC9kaXN0L2VzbS9jb21wb25lbnRzL3N0YXRpYy1tYXAuanM/NjhkMCIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9yZWFjdC1tYXAtZ2wvZGlzdC9lc20vdXRpbHMvdHJhbnNpdGlvbi90cmFuc2l0aW9uLWludGVycG9sYXRvci5qcz80YWQ0Iiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qcz8yNTdlIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzLmpzPzI2MmUiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcz85OWRlIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2dldFByb3RvdHlwZU9mLmpzPzdlODQiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvcmVhY3QtbWFwLWdsL2Rpc3QvZXNtL3V0aWxzL3RyYW5zaXRpb24vdHJhbnNpdGlvbi11dGlscy5qcz84ZDM2Iiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL3JlYWN0LW1hcC1nbC9kaXN0L2VzbS91dGlscy90cmFuc2l0aW9uL3ZpZXdwb3J0LWZseS10by1pbnRlcnBvbGF0b3IuanM/NDg3MiIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9yZWFjdC1tYXAtZ2wvZGlzdC9lc20vdXRpbHMvdHJhbnNpdGlvbi9saW5lYXItaW50ZXJwb2xhdG9yLmpzPzRiMGUiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvcmVhY3QtbWFwLWdsL2Rpc3QvZXNtL3V0aWxzL3RyYW5zaXRpb24vaW5kZXguanM/MmJiOSIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9yZWFjdC1tYXAtZ2wvZGlzdC9lc20vdXRpbHMvdHJhbnNpdGlvbi1tYW5hZ2VyLmpzP2MzMzQiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvbWpvbG5pci5qcy9kaXN0L2VzbS91dGlscy9oYW1tZXItb3ZlcnJpZGVzLmpzPzNjNzYiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvbWpvbG5pci5qcy9kaXN0L2VzbS91dGlscy9oYW1tZXIuYnJvd3Nlci5qcz9iNjk4Iiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL21qb2xuaXIuanMvZGlzdC9lc20vY29uc3RhbnRzLmpzP2Y0MjUiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvbWpvbG5pci5qcy9kaXN0L2VzbS91dGlscy9nbG9iYWxzLmpzP2UxNDEiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvbWpvbG5pci5qcy9kaXN0L2VzbS9pbnB1dHMvd2hlZWwtaW5wdXQuanM/MDUzZSIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9tam9sbmlyLmpzL2Rpc3QvZXNtL2lucHV0cy9tb3ZlLWlucHV0LmpzP2JiNDAiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvbWpvbG5pci5qcy9kaXN0L2VzbS9pbnB1dHMva2V5LWlucHV0LmpzPzQzMmEiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvbWpvbG5pci5qcy9kaXN0L2VzbS9pbnB1dHMvY29udGV4dG1lbnUtaW5wdXQuanM/NWVkMSIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9tam9sbmlyLmpzL2Rpc3QvZXNtL3V0aWxzL2V2ZW50LXV0aWxzLmpzPzI1NjIiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvbWpvbG5pci5qcy9kaXN0L2VzbS91dGlscy9ldmVudC1yZWdpc3RyYXIuanM/NDc1MyIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9tam9sbmlyLmpzL2Rpc3QvZXNtL2V2ZW50LW1hbmFnZXIuanM/ZDE3MSIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9yZWFjdC1tYXAtZ2wvZGlzdC9lc20vdXRpbHMvbWFwLWNvbnRyb2xsZXIuanM/MmM1MSIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9yZWFjdC1tYXAtZ2wvZGlzdC9lc20vY29tcG9uZW50cy9pbnRlcmFjdGl2ZS1tYXAuanM/ODZkYiIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanM/NTNjYSIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9yZWFjdC1tYXAtZ2wvZGlzdC9lc20vdXRpbHMvZGVlcC1lcXVhbC5qcz82NTAyIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL3JlYWN0LW1hcC1nbC9kaXN0L2VzbS9jb21wb25lbnRzL3NvdXJjZS5qcz82ZWU0Iiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UuanM/Y2NiNSIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllcy5qcz8xNWZkIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL3JlYWN0LW1hcC1nbC9kaXN0L2VzbS9jb21wb25lbnRzL2xheWVyLmpzPzlmZjciLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvcmVhY3QtbWFwLWdsL2Rpc3QvZXNtL2NvbXBvbmVudHMvdXNlLW1hcC1jb250cm9sLmpzPzgzYjciLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvcmVhY3QtbWFwLWdsL2Rpc3QvZXNtL2NvbXBvbmVudHMvYmFzZS1jb250cm9sLmpzP2MzNTciLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvcmVhY3QtbWFwLWdsL2Rpc3QvZXNtL2NvbXBvbmVudHMvZHJhZ2dhYmxlLWNvbnRyb2wuanM/MmY3NCIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9yZWFjdC1tYXAtZ2wvZGlzdC9lc20vdXRpbHMvY3Jpc3AtcGl4ZWwuanM/ODhhZCIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9yZWFjdC1tYXAtZ2wvZGlzdC9lc20vY29tcG9uZW50cy9tYXJrZXIuanM/MDA4ZCIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9yZWFjdC1tYXAtZ2wvZGlzdC9lc20vdXRpbHMvZHluYW1pYy1wb3NpdGlvbi5qcz9hZDM5Iiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL3JlYWN0LW1hcC1nbC9kaXN0L2VzbS9jb21wb25lbnRzL3BvcHVwLmpzPzk5MzYiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvcmVhY3QtbWFwLWdsL2Rpc3QvZXNtL2NvbXBvbmVudHMvYXR0cmlidXRpb24tY29udHJvbC5qcz8yMzEyIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL3JlYWN0LW1hcC1nbC9kaXN0L2VzbS9jb21wb25lbnRzL2Z1bGxzY3JlZW4tY29udHJvbC5qcz8xMDM2Iiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL3JlYWN0LW1hcC1nbC9kaXN0L2VzbS91dGlscy9nZW9sb2NhdGUtdXRpbHMuanM/ZDM2YiIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9yZWFjdC1tYXAtZ2wvZGlzdC9lc20vY29tcG9uZW50cy9nZW9sb2NhdGUtY29udHJvbC5qcz9hYzMwIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL3JlYWN0LW1hcC1nbC9kaXN0L2VzbS91dGlscy92ZXJzaW9uLmpzP2IyNzgiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvcmVhY3QtbWFwLWdsL2Rpc3QvZXNtL2NvbXBvbmVudHMvbmF2aWdhdGlvbi1jb250cm9sLmpzP2ExYzUiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvcmVhY3QtbWFwLWdsL2Rpc3QvZXNtL2NvbXBvbmVudHMvc2NhbGUtY29udHJvbC5qcz9lNzIwIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL3JlYWN0LW1hcC1nbC9kaXN0L2VzbS9vdmVybGF5cy9jYW52YXMtb3ZlcmxheS5qcz84NTMzIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL3JlYWN0LW1hcC1nbC9kaXN0L2VzbS9vdmVybGF5cy9odG1sLW92ZXJsYXkuanM/Y2Q3ZCIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9yZWFjdC1tYXAtZ2wvZGlzdC9lc20vb3ZlcmxheXMvc3ZnLW92ZXJsYXkuanM/OGU1MCIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy9yZWFjdC1tYXAtZ2wvZGlzdC9lc20vdXRpbHMvc2V0LXJ0bC10ZXh0LXBsdWdpbi5qcz8wMGNmIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL3JlYWN0LW1hcC1nbC9kaXN0L2VzbS9pbmRleC5qcz9jMWIzIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL0B0dXJmL2hlbHBlcnMvZGlzdC9lcy9pbmRleC5qcz8yOTI1Iiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL0B0dXJmL21ldGEvZGlzdC9lcy9pbmRleC5qcz80ZTU4Iiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL0B0dXJmL2Jib3gvZGlzdC9lcy9pbmRleC5qcz9jZTFjIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vbm9kZV9tb2R1bGVzL2QzLWVhc2Uvc3JjL2N1YmljLmpzP2U0MmQiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9zcmMvY29tcG9uZW50cy90ZXJyaXRvcnlGb2N1c0NvbnRyb2wubW9kdWxlLnNjc3M/MDAwYyIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL3NyYy9jb21wb25lbnRzL3RlcnJpdG9yeUZvY3VzQ29udHJvbC50c3g/MTRlNSIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL25vZGVfbW9kdWxlcy91c3dkcy9kaXN0L2ltZy91c2EtaWNvbnMvbGlnaHRidWxiX291dGxpbmUuc3ZnPzg0YWYiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9zcmMvY29tcG9uZW50cy9tYXBJbnRyb2R1Y3Rpb24ubW9kdWxlLnNjc3M/YWE4NiIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL3NyYy9jb21wb25lbnRzL21hcEludHJvZHVjdGlvbi50c3g/MmJkMiIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL3NyYy9jb21wb25lbnRzL2FyZWFEZXRhaWwubW9kdWxlLnNjc3M/NGM3MCIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL3NyYy9kYXRhL2NvbnN0YW50cy50c3g/YmU1YSIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL3NyYy9jb21wb25lbnRzL2FyZWFEZXRhaWwudHN4PzI5NTciLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9zcmMvY29tcG9uZW50cy9tYXBJbmZvUGFuZWwudHN4Pzg4NDMiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9zcmMvZGF0YS9tYXBTdHlsZS50c3g/OWQ5NiIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL3NyYy9jb21wb25lbnRzL0o0ME1hcC5tb2R1bGUuc2Nzcz9iN2RiIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vc3JjL2NvbXBvbmVudHMvSjQwTWFwLnRzeD9hZjc3Iiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vc3JjL2NvbXBvbmVudHMvSG93WW91Q2FuSGVscC5tb2R1bGUuc2Nzcz9jY2NiIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vc3JjL2NvbXBvbmVudHMvSG93WW91Q2FuSGVscC50c3g/OTBiNCIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL3NyYy9jb21wb25lbnRzL2Rvd25sb2FkUGFja2V0Lm1vZHVsZS5zY3NzP2JiODMiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9ub2RlX21vZHVsZXMvdXN3ZHMvZGlzdC9pbWcvdXNhLWljb25zL2ZpbGVfZG93bmxvYWQuc3ZnPzIyNzkiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9zcmMvY29tcG9uZW50cy9kb3dubG9hZFBhY2tldC50c3g/Nzk4MiIsIndlYnBhY2s6Ly9qdXN0aWNlNDAtdG9vbC8uL3NyYy9jb21wb25lbnRzL21hcExlZ2VuZC5tb2R1bGUuc2Nzcz9iY2JjIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vc3JjL2NvbXBvbmVudHMvbWFwTGVnZW5kLnRzeD84MTYxIiwid2VicGFjazovL2p1c3RpY2U0MC10b29sLy4vc3JjL3BhZ2VzL2NlanN0Lm1vZHVsZS5zY3NzPzYxZTMiLCJ3ZWJwYWNrOi8vanVzdGljZTQwLXRvb2wvLi9zcmMvcGFnZXMvY2Vqc3QudHN4P2UxZGYiXSwibmFtZXMiOlsiVGVycml0b3J5Rm9jdXNDb250cm9sIiwib25DbGlja1RlcnJpdG9yeUZvY3VzQnV0dG9uIiwiaW50bCIsInVzZUludGwiLCJ1c2VNYXBDb250cm9sIiwib25DbGljayIsImNvbnRhaW5lclJlZiIsInRlcnJpdG9yaWVzIiwic2hvcnQiLCJmb3JtYXRNZXNzYWdlIiwiaWQiLCJkZWZhdWx0TWVzc2FnZSIsImRlc2NyaXB0aW9uIiwibG9uZyIsInN0eWxlcyIsIm1hcCIsInRlcnJpdG9yeSIsIk1hcEludHJvZHVjdGlvbiIsIm1lc3NhZ2VzIiwiZGVmaW5lTWVzc2FnZXMiLCJtYXBJbnRyb0hlYWRlciIsImRpZFlvdUtub3ciLCJjZW5zdXNCbG9ja0dyb3VwRGVmaW5pdGlvbiIsImxpZ2h0YnVsYkljb24iLCJGRUFUVVJFX1RJTEVfQkFTRV9VUkwiLCJYWVpfU1VGRklYIiwiZmVhdHVyZVVSTEZvclRpbGVzZXROYW1lIiwidGlsZXNldE5hbWUiLCJGRUFUVVJFX1RJTEVfSElHSF9aT09NX1VSTCIsIkZFQVRVUkVfVElMRV9MT1dfWk9PTV9VUkwiLCJQRVJGT1JNQU5DRV9NQVJLRVJfTUFQX0lETEUiLCJTQ09SRV9QUk9QRVJUWV9ISUdIIiwiU0NPUkVfUFJPUEVSVFlfTE9XIiwiR0VPSURfUFJPUEVSVFkiLCJISUdIX1NDT1JFX1NPVVJDRV9OQU1FIiwiSElHSF9TQ09SRV9MQVlFUl9OQU1FIiwiTE9XX1NDT1JFX1NPVVJDRV9OQU1FIiwiTE9XX1NDT1JFX0xBWUVSX05BTUUiLCJTRUxFQ1RFRF9QUk9QRVJUWSIsIkNVUlJFTlRMWV9TRUxFQ1RFRF9GRUFUVVJFX0hJR0hMSUdIVF9MQVlFUl9OQU1FIiwiQkxPQ0tfR1JPVVBfQk9VTkRBUllfTEFZRVJfTkFNRSIsIlBPVkVSVFlfUFJPUEVSVFlfUEVSQ0VOVElMRSIsIkhPVVNJTkdfQlVSREVOX1BST1BFUlRZX1BFUkNFTlRJTEUiLCJMSU5HVUlTVElDX0lTT0xBVElPTl9QUk9QRVJUWV9QRVJDRU5USUxFIiwiVU5FTVBMT1lNRU5UX1BST1BFUlRZX1BFUkNFTlRJTEUiLCJUT1RBTF9QT1BVTEFUSU9OIiwiRURVQ0FUSU9OX1BST1BFUlRZX1BFUkNFTlRJTEUiLCJTQ09SRV9TT1VSQ0VfTEFZRVIiLCJHTE9CQUxfTUlOX1pPT00iLCJHTE9CQUxfTUFYX1pPT00iLCJHTE9CQUxfTUlOX1pPT01fTE9XIiwiR0xPQkFMX01BWF9aT09NX0xPVyIsIkdMT0JBTF9NSU5fWk9PTV9ISUdITElHSFQiLCJHTE9CQUxfTUFYX1pPT01fSElHSExJR0hUIiwiR0xPQkFMX01JTl9aT09NX0hJR0giLCJHTE9CQUxfTUFYX1pPT01fSElHSCIsIkdMT0JBTF9NQVhfQk9VTkRTIiwiTE9XRVJfNDhfQk9VTkRTIiwiQUxBU0tBX0JPVU5EUyIsIkhBV0FJSV9CT1VORFMiLCJQVUVSVE9fUklDT19CT1VORFMiLCJHVUFNX0JPVU5EUyIsIk1BUklBTkFfSVNMQU5EX0JPVU5EUyIsIkFNRVJJQ0FOX1NBTU9BX0JPVU5EUyIsIkRFRkFVTFRfQ0VOVEVSIiwiREVGQVVMVF9MQVlFUl9PUEFDSVRZIiwiREVGQVVMVF9PVVRMSU5FX0NPTE9SIiwiTUlOX0NPTE9SIiwiTUVEX0NPTE9SIiwiTUFYX0NPTE9SIiwiQk9SREVSX0hJR0hMSUdIVF9DT0xPUiIsIkNVUlJFTlRMWV9TRUxFQ1RFRF9GRUFUVVJFX0xBWUVSX09QQUNJVFkiLCJISUdITElHSFRfQk9SREVSX1dJRFRIIiwiQ1VSUkVOVExZX1NFTEVDVEVEX0ZFQVRVUkVfTEFZRVJfV0lEVEgiLCJTQ09SRV9CT1VOREFSWV9MT1ciLCJTQ09SRV9CT1VOREFSWV9USFJFU0hPTEQiLCJTQ09SRV9CT1VOREFSWV9QUklPUklUSVpFRCIsImlzTW9iaWxlIiwiaXNNb2JpbGVSZWFjdERldmljZURldGVjdCIsInJlYWRhYmxlUGVyY2VudCIsInBlcmNlbnQiLCJ0b0ZpeGVkIiwiZ2V0Q2F0ZWdvcml6YXRpb24iLCJwZXJjZW50aWxlIiwiY2F0ZWdvcml6YXRpb24iLCJjYXRlZ29yeUNpcmNsZVN0eWxlIiwiY29uc3RhbnRzIiwiQXJlYURldGFpbCIsInByb3BlcnRpZXMiLCJjdW11bGF0aXZlSW5kZXhTY29yZSIsImNlbnN1c0Jsb2NrR3JvdXAiLCJjb3VudHkiLCJzdGF0ZSIsInBvcHVsYXRpb24iLCJpbmRpY2F0b3JDb2x1bW5IZWFkZXIiLCJwZXJjZW50aWxlQ29sdW1uSGVhZGVyIiwicG92ZXJ0eSIsImVkdWNhdGlvbiIsImxpbmd1aXN0aWNJc29sYXRpb24iLCJ1bmVtcGxveW1lbnQiLCJob3VzZUJ1cmRlbiIsInNjb3JlIiwiYmxvY2tHcm91cCIsInBvdmVydHlJbmZvIiwibGFiZWwiLCJ2YWx1ZSIsImVkdUluZm8iLCJsaW5Jc29JbmZvIiwidW1lbXBsb3lJbmZvIiwiaW5kaWNhdG9ycyIsInRvTG9jYWxlU3RyaW5nIiwiaW5kaWNhdG9yIiwiaW5kZXgiLCJNYXBJbmZvUGFuZWwiLCJjbGFzc05hbWUiLCJmZWF0dXJlUHJvcGVydGllcyIsInNlbGVjdGVkRmVhdHVyZUlkIiwiaGV4VG9IU0xBIiwiaGV4IiwiYWxwaGEiLCJjaHJvbWEiLCJjc3MiLCJtYWtlUGFpbnQiLCJmaWVsZCIsIm1pblJhbXAiLCJtZWRSYW1wIiwibWF4UmFtcCIsInBhaW50RGVzY3JpcHRvciIsImltYWdlU3VmZml4IiwibWFrZU1hcFN0eWxlIiwiZmxhZ0NvbnRhaW5lciIsIko0ME1hcCIsImxvY2F0aW9uIiwiaGFzaCIsInNsaWNlIiwic3BsaXQiLCJ6b29tIiwibGF0IiwibG5nIiwidXNlU3RhdGUiLCJsYXRpdHVkZSIsInBhcnNlRmxvYXQiLCJsb25naXR1ZGUiLCJ2aWV3cG9ydCIsInNldFZpZXdwb3J0Iiwic2VsZWN0ZWRGZWF0dXJlIiwic2V0U2VsZWN0ZWRGZWF0dXJlIiwiZGV0YWlsVmlld0RhdGEiLCJzZXREZXRhaWxWaWV3RGF0YSIsInRyYW5zaXRpb25JblByb2dyZXNzIiwic2V0VHJhbnNpdGlvbkluUHJvZ3Jlc3MiLCJnZW9sb2NhdGlvbkluUHJvZ3Jlc3MiLCJzZXRHZW9sb2NhdGlvbkluUHJvZ3Jlc3MiLCJpc01vYmlsZU1hcFN0YXRlIiwic2V0SXNNb2JpbGVNYXBTdGF0ZSIsIm1hcFJlZiIsInVzZVJlZiIsImZsYWdzIiwidXNlRmxhZ3MiLCJmaWx0ZXIiLCJ1c2VNZW1vIiwiZXZlbnQiLCJmZWF0dXJlIiwiZmVhdHVyZXMiLCJiYm94IiwibWluTG5nIiwibWluTGF0IiwibWF4TG5nIiwibWF4TGF0IiwibmV3Vmlld1BvcnQiLCJXZWJNZXJjYXRvclZpZXdwb3J0IiwiaGVpZ2h0Iiwid2lkdGgiLCJmaXRCb3VuZHMiLCJwYWRkaW5nIiwidW5kZWZpbmVkIiwicG9wdXBJbmZvIiwiZ29Ub1BsYWNlIiwib25Mb2FkIiwid2luZG93IiwiQ3lwcmVzcyIsImN1cnJlbnQiLCJ1bmRlcmx5aW5nTWFwIiwiZ2V0TWFwIiwiYm91bmRzIiwib2Zmc2V0IiwidHJhbnNpdGlvbkR1cmF0aW9uIiwidHJhbnNpdGlvbkludGVycG9sYXRvciIsIkZseVRvSW50ZXJwb2xhdG9yIiwidHJhbnNpdGlvbkVhc2luZyIsImQzIiwic3RvcFByb3BhZ2F0aW9uIiwiYnV0dG9uSUQiLCJ0YXJnZXQiLCJvblRyYW5zaXRpb25TdGFydCIsIm9uVHJhbnNpdGlvbkVuZCIsIm9uR2VvbG9jYXRlIiwib25DbGlja0dlb2xvY2F0ZSIsImVuYWJsZUhpZ2hBY2N1cmFjeSIsIkhvd1lvdUNhbkhlbHAiLCJjYmdGaWxlVVJMIiwiRG93bmxvYWRQYWNrZXQiLCJkb3dubG9hZEljb24iLCJNYXBMZWdlbmQiLCJDRUpTVFBhZ2UiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQWU7QUFDZjtBQUNBLG1CQUFtQixzQkFBc0I7QUFDekM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxDOzs7O0FDaEJlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0EsQzs7OztBQ2JlO0FBQ2Y7QUFDQSxDOztBQ0ZlO0FBQ2Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSwyQkFBMkIsK0JBQStCO0FBQzFEOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEM7Ozs7QUM1QmU7QUFDZjtBQUNBLEM7O0FDRmlEO0FBQ1k7QUFDWTtBQUN0QjtBQUNwQyxTQUFTLDJCQUFjO0FBQ3RDLFNBQVMsZUFBYyxTQUFTLHFCQUFvQixZQUFZLDZDQUEwQixZQUFZLGdCQUFlO0FBQ3JILEM7O0FDTmU7QUFDZjtBQUNBO0FBQ0E7QUFDQSxDOztBQ0pBO0FBQ0EsaUJBQWlCLGtCQUFrQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFZTtBQUNmO0FBQ0E7QUFDQTtBQUNBLEM7Ozs7QUNkMEM7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNBO0FBQ0E7QUFDUDtBQUNBO0FBQ0E7QUFDQSxXQUFXLDJDQUEyQztBQUN0RDs7QUFFTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjs7QUFFTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixhQUFhLFFBQVE7QUFDckI7O0FBRU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEU7O0FDbkQwQztBQUNGO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsS0FBSztBQUNsQjs7QUFFTztBQUNQLGdCQUFnQixVQUFtQjs7QUFFbkMsTUFBTSxVQUFtQjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGFBQWE7QUFDeEIsYUFBYSxLQUFLO0FBQ2xCOztBQUVPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsYUFBYSxLQUFLO0FBQ2xCOztBQUVPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsV0FBVyxhQUFhO0FBQ3hCLGFBQWEsS0FBSztBQUNsQjs7QUFFTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsYUFBYSxLQUFLO0FBQ2xCOztBQUVPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFdBQVcsYUFBYTtBQUN4QixXQUFXLGFBQWE7QUFDeEIsYUFBYSxLQUFLO0FBQ2xCOztBQUVPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFdBQVcsYUFBYTtBQUN4QixXQUFXLGFBQWE7QUFDeEIsYUFBYSxLQUFLO0FBQ2xCOztBQUVPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFdBQVcsYUFBYTtBQUN4QixXQUFXLGFBQWE7QUFDeEIsYUFBYSxLQUFLO0FBQ2xCOztBQUVPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFdBQVcsYUFBYTtBQUN4QixXQUFXLGFBQWE7QUFDeEIsYUFBYSxLQUFLO0FBQ2xCOztBQUVPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFdBQVcsYUFBYTtBQUN4QixhQUFhLEtBQUs7QUFDbEI7O0FBRU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsV0FBVyxhQUFhO0FBQ3hCLGFBQWEsS0FBSztBQUNsQjs7QUFFTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixXQUFXLGFBQWE7QUFDeEIsV0FBVyxhQUFhO0FBQ3hCLGFBQWEsS0FBSztBQUNsQjs7QUFFTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixXQUFXLGFBQWE7QUFDeEIsV0FBVyxhQUFhO0FBQ3hCLGFBQWEsS0FBSztBQUNsQjs7QUFFTztBQUNQ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O0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsV0FBVyxhQUFhO0FBQ3hCLGFBQWEsS0FBSztBQUNsQjs7QUFFTyxTQUFTLFNBQUk7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLGFBQWEsS0FBSztBQUNsQjs7QUFFTyxTQUFTLGVBQVU7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLGFBQWEsS0FBSztBQUNsQjs7QUFFTyxTQUFTLFFBQUc7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLGFBQWEsS0FBSztBQUNsQjs7QUFFTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixXQUFXLGFBQWE7QUFDeEIsYUFBYSxLQUFLO0FBQ2xCOztBQUVPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsV0FBVyxhQUFhO0FBQ3hCLGFBQWEsS0FBSztBQUNsQjs7QUFFTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQzs7QUFFbEM7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxLQUFLO0FBQ2hCLFdBQVcsYUFBYTtBQUN4QixhQUFhLEtBQUs7QUFDbEI7O0FBRU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsYUFBYTtBQUN4QixhQUFhLE9BQU87QUFDcEI7O0FBRU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0M7O0FBRWxDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsV0FBVyxhQUFhO0FBQ3hCLFdBQVcsYUFBYTtBQUN4QixhQUFhLEtBQUs7QUFDbEI7O0FBRU8sU0FBUyxhQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjs7QUFFbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsV0FBVyxhQUFhO0FBQ3hCLFdBQVcsYUFBYTtBQUN4QixhQUFhLEtBQUs7QUFDbEI7O0FBRU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsV0FBVyxhQUFhO0FBQ3hCO0FBQ0EsYUFBYSxLQUFLO0FBQ2xCOztBQUVPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsYUFBYSxLQUFLO0FBQ2xCOztBQUVPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLGFBQWEsS0FBSztBQUNsQjs7QUFFTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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LENBQy9DO0FBQ0E7QUFDQSxtQkFDRSxvQkFBQyxxQkFBRCxFQUFRLFFBQVEsQ0FBRUEsUUFBbEIsZUFDRSw0QkFBTSxFQUFFLENBQUMsY0FBVCxDQUF3QixJQUFJLENBQUMsTUFBN0IsZUFFRSxnREFDRSwwREFERixjQUVFLDJCQUFLLFNBQVMsQ0FBRXRILFVBQWhCLGVBQ0UsMkJBQUssU0FBUyxDQUFFQSxPQUFoQixlQUNFLGtUQUtFLHlCQUNFLElBQUksQ0FBRSw0Q0FDSixrQ0FESSxDQUVKLDBDQUZJLENBR0osNEJBSkosQ0FLRSxNQUFNLENBQUUsUUFMVixDQU1FLEdBQUcsQ0FBRSxZQU5QLHNFQUxGLEtBREYsY0FnQkUsZ09BSUUseUJBQ0UsSUFBSSxDQUFFLGVBRFIsZ0JBSkYsY0FoQkYsQ0FERixjQTZCRSxvQkFBQyxjQUFELE1BN0JGLENBRkYsQ0FGRixjQW9DRSxpREFwQ0YsY0FxQ0Usb0JBQUMsaUJBQUQsRUFBUSxRQUFRLENBQUVzSCxRQUFsQixFQXJDRixjQXNDRSxvQkFBQyxTQUFELE1BdENGLGNBdUNFLG9CQUFDLHdCQUFELE1BdkNGLENBREYsQ0FERixDQTZDRCxDQWhERCxDQWtEQSwwQ0FBZXdFLFNBQWYiLCJmaWxlIjoiMzg2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2V4dGVuZHMoKSB7XG4gIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07XG5cbiAgICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHtcbiAgICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfTtcblxuICByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIG9iajtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkge1xuICB2YXIgX2kgPSBhcnIgPT0gbnVsbCA/IG51bGwgOiB0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGFycltTeW1ib2wuaXRlcmF0b3JdIHx8IGFycltcIkBAaXRlcmF0b3JcIl07XG5cbiAgaWYgKF9pID09IG51bGwpIHJldHVybjtcbiAgdmFyIF9hcnIgPSBbXTtcbiAgdmFyIF9uID0gdHJ1ZTtcbiAgdmFyIF9kID0gZmFsc2U7XG5cbiAgdmFyIF9zLCBfZTtcblxuICB0cnkge1xuICAgIGZvciAoX2kgPSBfaS5jYWxsKGFycik7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHtcbiAgICAgIF9hcnIucHVzaChfcy52YWx1ZSk7XG5cbiAgICAgIGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhaztcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIF9kID0gdHJ1ZTtcbiAgICBfZSA9IGVycjtcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSAhPSBudWxsKSBfaVtcInJldHVyblwiXSgpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAoX2QpIHRocm93IF9lO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBfYXJyO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59IiwiaW1wb3J0IGFycmF5V2l0aEhvbGVzIGZyb20gXCIuL2FycmF5V2l0aEhvbGVzLmpzXCI7XG5pbXBvcnQgaXRlcmFibGVUb0FycmF5TGltaXQgZnJvbSBcIi4vaXRlcmFibGVUb0FycmF5TGltaXQuanNcIjtcbmltcG9ydCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSBmcm9tIFwiLi91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qc1wiO1xuaW1wb3J0IG5vbkl0ZXJhYmxlUmVzdCBmcm9tIFwiLi9ub25JdGVyYWJsZVJlc3QuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkge1xuICByZXR1cm4gYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBpdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgbm9uSXRlcmFibGVSZXN0KCk7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn0iLCJmdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldO1xuICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTtcbiAgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICByZXR1cm4gQ29uc3RydWN0b3I7XG59IiwiaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLm1hdGguaHlwb3QuanNcIjtcblxuLyoqXHJcbiAqIENvbW1vbiB1dGlsaXRpZXNcclxuICogQG1vZHVsZSBnbE1hdHJpeFxyXG4gKi9cbi8vIENvbmZpZ3VyYXRpb24gQ29uc3RhbnRzXG5leHBvcnQgdmFyIEVQU0lMT04gPSAwLjAwMDAwMTtcbmV4cG9ydCB2YXIgQVJSQVlfVFlQRSA9IHR5cGVvZiBGbG9hdDMyQXJyYXkgIT09ICd1bmRlZmluZWQnID8gRmxvYXQzMkFycmF5IDogQXJyYXk7XG5leHBvcnQgdmFyIFJBTkRPTSA9IE1hdGgucmFuZG9tO1xuLyoqXHJcbiAqIFNldHMgdGhlIHR5cGUgb2YgYXJyYXkgdXNlZCB3aGVuIGNyZWF0aW5nIG5ldyB2ZWN0b3JzIGFuZCBtYXRyaWNlc1xyXG4gKlxyXG4gKiBAcGFyYW0ge0Zsb2F0MzJBcnJheUNvbnN0cnVjdG9yIHwgQXJyYXlDb25zdHJ1Y3Rvcn0gdHlwZSBBcnJheSB0eXBlLCBzdWNoIGFzIEZsb2F0MzJBcnJheSBvciBBcnJheVxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNldE1hdHJpeEFycmF5VHlwZSh0eXBlKSB7XG4gIEFSUkFZX1RZUEUgPSB0eXBlO1xufVxudmFyIGRlZ3JlZSA9IE1hdGguUEkgLyAxODA7XG4vKipcclxuICogQ29udmVydCBEZWdyZWUgVG8gUmFkaWFuXHJcbiAqXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBhIEFuZ2xlIGluIERlZ3JlZXNcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB0b1JhZGlhbihhKSB7XG4gIHJldHVybiBhICogZGVncmVlO1xufVxuLyoqXHJcbiAqIFRlc3RzIHdoZXRoZXIgb3Igbm90IHRoZSBhcmd1bWVudHMgaGF2ZSBhcHByb3hpbWF0ZWx5IHRoZSBzYW1lIHZhbHVlLCB3aXRoaW4gYW4gYWJzb2x1dGVcclxuICogb3IgcmVsYXRpdmUgdG9sZXJhbmNlIG9mIGdsTWF0cml4LkVQU0lMT04gKGFuIGFic29sdXRlIHRvbGVyYW5jZSBpcyB1c2VkIGZvciB2YWx1ZXMgbGVzc1xyXG4gKiB0aGFuIG9yIGVxdWFsIHRvIDEuMCwgYW5kIGEgcmVsYXRpdmUgdG9sZXJhbmNlIGlzIHVzZWQgZm9yIGxhcmdlciB2YWx1ZXMpXHJcbiAqXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBhIFRoZSBmaXJzdCBudW1iZXIgdG8gdGVzdC5cclxuICogQHBhcmFtIHtOdW1iZXJ9IGIgVGhlIHNlY29uZCBudW1iZXIgdG8gdGVzdC5cclxuICogQHJldHVybnMge0Jvb2xlYW59IFRydWUgaWYgdGhlIG51bWJlcnMgYXJlIGFwcHJveGltYXRlbHkgZXF1YWwsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBlcXVhbHMoYSwgYikge1xuICByZXR1cm4gTWF0aC5hYnMoYSAtIGIpIDw9IEVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGEpLCBNYXRoLmFicyhiKSk7XG59XG5pZiAoIU1hdGguaHlwb3QpIE1hdGguaHlwb3QgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciB5ID0gMCxcbiAgICAgIGkgPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gIHdoaWxlIChpLS0pIHtcbiAgICB5ICs9IGFyZ3VtZW50c1tpXSAqIGFyZ3VtZW50c1tpXTtcbiAgfVxuXG4gIHJldHVybiBNYXRoLnNxcnQoeSk7XG59OyIsImltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5tYXRoLmh5cG90LmpzXCI7XG5pbXBvcnQgKiBhcyBnbE1hdHJpeCBmcm9tIFwiLi9jb21tb24uanNcIjtcbi8qKlxyXG4gKiA0IERpbWVuc2lvbmFsIFZlY3RvclxyXG4gKiBAbW9kdWxlIHZlYzRcclxuICovXG5cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3LCBlbXB0eSB2ZWM0XHJcbiAqXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBhIG5ldyA0RCB2ZWN0b3JcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGUoKSB7XG4gIHZhciBvdXQgPSBuZXcgZ2xNYXRyaXguQVJSQVlfVFlQRSg0KTtcblxuICBpZiAoZ2xNYXRyaXguQVJSQVlfVFlQRSAhPSBGbG9hdDMyQXJyYXkpIHtcbiAgICBvdXRbMF0gPSAwO1xuICAgIG91dFsxXSA9IDA7XG4gICAgb3V0WzJdID0gMDtcbiAgICBvdXRbM10gPSAwO1xuICB9XG5cbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IHZlYzQgaW5pdGlhbGl6ZWQgd2l0aCB2YWx1ZXMgZnJvbSBhbiBleGlzdGluZyB2ZWN0b3JcclxuICpcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzR9IGEgdmVjdG9yIHRvIGNsb25lXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBhIG5ldyA0RCB2ZWN0b3JcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjbG9uZShhKSB7XG4gIHZhciBvdXQgPSBuZXcgZ2xNYXRyaXguQVJSQVlfVFlQRSg0KTtcbiAgb3V0WzBdID0gYVswXTtcbiAgb3V0WzFdID0gYVsxXTtcbiAgb3V0WzJdID0gYVsyXTtcbiAgb3V0WzNdID0gYVszXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IHZlYzQgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgZ2l2ZW4gdmFsdWVzXHJcbiAqXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB4IFggY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB5IFkgY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB6IFogY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB3IFcgY29tcG9uZW50XHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBhIG5ldyA0RCB2ZWN0b3JcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tVmFsdWVzKHgsIHksIHosIHcpIHtcbiAgdmFyIG91dCA9IG5ldyBnbE1hdHJpeC5BUlJBWV9UWVBFKDQpO1xuICBvdXRbMF0gPSB4O1xuICBvdXRbMV0gPSB5O1xuICBvdXRbMl0gPSB6O1xuICBvdXRbM10gPSB3O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENvcHkgdGhlIHZhbHVlcyBmcm9tIG9uZSB2ZWM0IHRvIGFub3RoZXJcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzR9IGEgdGhlIHNvdXJjZSB2ZWN0b3JcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNvcHkob3V0LCBhKSB7XG4gIG91dFswXSA9IGFbMF07XG4gIG91dFsxXSA9IGFbMV07XG4gIG91dFsyXSA9IGFbMl07XG4gIG91dFszXSA9IGFbM107XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU2V0IHRoZSBjb21wb25lbnRzIG9mIGEgdmVjNCB0byB0aGUgZ2l2ZW4gdmFsdWVzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB4IFggY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB5IFkgY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB6IFogY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB3IFcgY29tcG9uZW50XHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzZXQob3V0LCB4LCB5LCB6LCB3KSB7XG4gIG91dFswXSA9IHg7XG4gIG91dFsxXSA9IHk7XG4gIG91dFsyXSA9IHo7XG4gIG91dFszXSA9IHc7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQWRkcyB0d28gdmVjNCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWM0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gYWRkKG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdICsgYlswXTtcbiAgb3V0WzFdID0gYVsxXSArIGJbMV07XG4gIG91dFsyXSA9IGFbMl0gKyBiWzJdO1xuICBvdXRbM10gPSBhWzNdICsgYlszXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBTdWJ0cmFjdHMgdmVjdG9yIGIgZnJvbSB2ZWN0b3IgYVxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjNH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjNH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnRyYWN0KG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdIC0gYlswXTtcbiAgb3V0WzFdID0gYVsxXSAtIGJbMV07XG4gIG91dFsyXSA9IGFbMl0gLSBiWzJdO1xuICBvdXRbM10gPSBhWzNdIC0gYlszXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBNdWx0aXBsaWVzIHR3byB2ZWM0J3NcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBtdWx0aXBseShvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gYVswXSAqIGJbMF07XG4gIG91dFsxXSA9IGFbMV0gKiBiWzFdO1xuICBvdXRbMl0gPSBhWzJdICogYlsyXTtcbiAgb3V0WzNdID0gYVszXSAqIGJbM107XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogRGl2aWRlcyB0d28gdmVjNCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWM0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZGl2aWRlKG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdIC8gYlswXTtcbiAgb3V0WzFdID0gYVsxXSAvIGJbMV07XG4gIG91dFsyXSA9IGFbMl0gLyBiWzJdO1xuICBvdXRbM10gPSBhWzNdIC8gYlszXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBNYXRoLmNlaWwgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWM0XHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWM0fSBhIHZlY3RvciB0byBjZWlsXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjZWlsKG91dCwgYSkge1xuICBvdXRbMF0gPSBNYXRoLmNlaWwoYVswXSk7XG4gIG91dFsxXSA9IE1hdGguY2VpbChhWzFdKTtcbiAgb3V0WzJdID0gTWF0aC5jZWlsKGFbMl0pO1xuICBvdXRbM10gPSBNYXRoLmNlaWwoYVszXSk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogTWF0aC5mbG9vciB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzRcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzR9IGEgdmVjdG9yIHRvIGZsb29yXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmbG9vcihvdXQsIGEpIHtcbiAgb3V0WzBdID0gTWF0aC5mbG9vcihhWzBdKTtcbiAgb3V0WzFdID0gTWF0aC5mbG9vcihhWzFdKTtcbiAgb3V0WzJdID0gTWF0aC5mbG9vcihhWzJdKTtcbiAgb3V0WzNdID0gTWF0aC5mbG9vcihhWzNdKTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSBtaW5pbXVtIG9mIHR3byB2ZWM0J3NcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBtaW4ob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IE1hdGgubWluKGFbMF0sIGJbMF0pO1xuICBvdXRbMV0gPSBNYXRoLm1pbihhWzFdLCBiWzFdKTtcbiAgb3V0WzJdID0gTWF0aC5taW4oYVsyXSwgYlsyXSk7XG4gIG91dFszXSA9IE1hdGgubWluKGFbM10sIGJbM10pO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJldHVybnMgdGhlIG1heGltdW0gb2YgdHdvIHZlYzQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjNH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjNH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG1heChvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gTWF0aC5tYXgoYVswXSwgYlswXSk7XG4gIG91dFsxXSA9IE1hdGgubWF4KGFbMV0sIGJbMV0pO1xuICBvdXRbMl0gPSBNYXRoLm1heChhWzJdLCBiWzJdKTtcbiAgb3V0WzNdID0gTWF0aC5tYXgoYVszXSwgYlszXSk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogTWF0aC5yb3VuZCB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzRcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzR9IGEgdmVjdG9yIHRvIHJvdW5kXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiByb3VuZChvdXQsIGEpIHtcbiAgb3V0WzBdID0gTWF0aC5yb3VuZChhWzBdKTtcbiAgb3V0WzFdID0gTWF0aC5yb3VuZChhWzFdKTtcbiAgb3V0WzJdID0gTWF0aC5yb3VuZChhWzJdKTtcbiAgb3V0WzNdID0gTWF0aC5yb3VuZChhWzNdKTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBTY2FsZXMgYSB2ZWM0IGJ5IGEgc2NhbGFyIG51bWJlclxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjNH0gYSB0aGUgdmVjdG9yIHRvIHNjYWxlXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBiIGFtb3VudCB0byBzY2FsZSB0aGUgdmVjdG9yIGJ5XHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzY2FsZShvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gYVswXSAqIGI7XG4gIG91dFsxXSA9IGFbMV0gKiBiO1xuICBvdXRbMl0gPSBhWzJdICogYjtcbiAgb3V0WzNdID0gYVszXSAqIGI7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQWRkcyB0d28gdmVjNCdzIGFmdGVyIHNjYWxpbmcgdGhlIHNlY29uZCBvcGVyYW5kIGJ5IGEgc2NhbGFyIHZhbHVlXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWM0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gc2NhbGUgdGhlIGFtb3VudCB0byBzY2FsZSBiIGJ5IGJlZm9yZSBhZGRpbmdcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNjYWxlQW5kQWRkKG91dCwgYSwgYiwgc2NhbGUpIHtcbiAgb3V0WzBdID0gYVswXSArIGJbMF0gKiBzY2FsZTtcbiAgb3V0WzFdID0gYVsxXSArIGJbMV0gKiBzY2FsZTtcbiAgb3V0WzJdID0gYVsyXSArIGJbMl0gKiBzY2FsZTtcbiAgb3V0WzNdID0gYVszXSArIGJbM10gKiBzY2FsZTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBldWNsaWRpYW4gZGlzdGFuY2UgYmV0d2VlbiB0d28gdmVjNCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWM0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBkaXN0YW5jZSBiZXR3ZWVuIGEgYW5kIGJcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBkaXN0YW5jZShhLCBiKSB7XG4gIHZhciB4ID0gYlswXSAtIGFbMF07XG4gIHZhciB5ID0gYlsxXSAtIGFbMV07XG4gIHZhciB6ID0gYlsyXSAtIGFbMl07XG4gIHZhciB3ID0gYlszXSAtIGFbM107XG4gIHJldHVybiBNYXRoLmh5cG90KHgsIHksIHosIHcpO1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIHNxdWFyZWQgZXVjbGlkaWFuIGRpc3RhbmNlIGJldHdlZW4gdHdvIHZlYzQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjNH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjNH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge051bWJlcn0gc3F1YXJlZCBkaXN0YW5jZSBiZXR3ZWVuIGEgYW5kIGJcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzcXVhcmVkRGlzdGFuY2UoYSwgYikge1xuICB2YXIgeCA9IGJbMF0gLSBhWzBdO1xuICB2YXIgeSA9IGJbMV0gLSBhWzFdO1xuICB2YXIgeiA9IGJbMl0gLSBhWzJdO1xuICB2YXIgdyA9IGJbM10gLSBhWzNdO1xuICByZXR1cm4geCAqIHggKyB5ICogeSArIHogKiB6ICsgdyAqIHc7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgbGVuZ3RoIG9mIGEgdmVjNFxyXG4gKlxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjNH0gYSB2ZWN0b3IgdG8gY2FsY3VsYXRlIGxlbmd0aCBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBsZW5ndGggb2YgYVxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGxlbmd0aChhKSB7XG4gIHZhciB4ID0gYVswXTtcbiAgdmFyIHkgPSBhWzFdO1xuICB2YXIgeiA9IGFbMl07XG4gIHZhciB3ID0gYVszXTtcbiAgcmV0dXJuIE1hdGguaHlwb3QoeCwgeSwgeiwgdyk7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgc3F1YXJlZCBsZW5ndGggb2YgYSB2ZWM0XHJcbiAqXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWM0fSBhIHZlY3RvciB0byBjYWxjdWxhdGUgc3F1YXJlZCBsZW5ndGggb2ZcclxuICogQHJldHVybnMge051bWJlcn0gc3F1YXJlZCBsZW5ndGggb2YgYVxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNxdWFyZWRMZW5ndGgoYSkge1xuICB2YXIgeCA9IGFbMF07XG4gIHZhciB5ID0gYVsxXTtcbiAgdmFyIHogPSBhWzJdO1xuICB2YXIgdyA9IGFbM107XG4gIHJldHVybiB4ICogeCArIHkgKiB5ICsgeiAqIHogKyB3ICogdztcbn1cbi8qKlxyXG4gKiBOZWdhdGVzIHRoZSBjb21wb25lbnRzIG9mIGEgdmVjNFxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjNH0gYSB2ZWN0b3IgdG8gbmVnYXRlXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBuZWdhdGUob3V0LCBhKSB7XG4gIG91dFswXSA9IC1hWzBdO1xuICBvdXRbMV0gPSAtYVsxXTtcbiAgb3V0WzJdID0gLWFbMl07XG4gIG91dFszXSA9IC1hWzNdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJldHVybnMgdGhlIGludmVyc2Ugb2YgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWM0XHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWM0fSBhIHZlY3RvciB0byBpbnZlcnRcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGludmVyc2Uob3V0LCBhKSB7XG4gIG91dFswXSA9IDEuMCAvIGFbMF07XG4gIG91dFsxXSA9IDEuMCAvIGFbMV07XG4gIG91dFsyXSA9IDEuMCAvIGFbMl07XG4gIG91dFszXSA9IDEuMCAvIGFbM107XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogTm9ybWFsaXplIGEgdmVjNFxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjNH0gYSB2ZWN0b3IgdG8gbm9ybWFsaXplXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemUob3V0LCBhKSB7XG4gIHZhciB4ID0gYVswXTtcbiAgdmFyIHkgPSBhWzFdO1xuICB2YXIgeiA9IGFbMl07XG4gIHZhciB3ID0gYVszXTtcbiAgdmFyIGxlbiA9IHggKiB4ICsgeSAqIHkgKyB6ICogeiArIHcgKiB3O1xuXG4gIGlmIChsZW4gPiAwKSB7XG4gICAgbGVuID0gMSAvIE1hdGguc3FydChsZW4pO1xuICB9XG5cbiAgb3V0WzBdID0geCAqIGxlbjtcbiAgb3V0WzFdID0geSAqIGxlbjtcbiAgb3V0WzJdID0geiAqIGxlbjtcbiAgb3V0WzNdID0gdyAqIGxlbjtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBkb3QgcHJvZHVjdCBvZiB0d28gdmVjNCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWM0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBkb3QgcHJvZHVjdCBvZiBhIGFuZCBiXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZG90KGEsIGIpIHtcbiAgcmV0dXJuIGFbMF0gKiBiWzBdICsgYVsxXSAqIGJbMV0gKyBhWzJdICogYlsyXSArIGFbM10gKiBiWzNdO1xufVxuLyoqXHJcbiAqIFJldHVybnMgdGhlIGNyb3NzLXByb2R1Y3Qgb2YgdGhyZWUgdmVjdG9ycyBpbiBhIDQtZGltZW5zaW9uYWwgc3BhY2VcclxuICpcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzR9IHJlc3VsdCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjNH0gVSB0aGUgZmlyc3QgdmVjdG9yXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWM0fSBWIHRoZSBzZWNvbmQgdmVjdG9yXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWM0fSBXIHRoZSB0aGlyZCB2ZWN0b3JcclxuICogQHJldHVybnMge3ZlYzR9IHJlc3VsdFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNyb3NzKG91dCwgdSwgdiwgdykge1xuICB2YXIgQSA9IHZbMF0gKiB3WzFdIC0gdlsxXSAqIHdbMF0sXG4gICAgICBCID0gdlswXSAqIHdbMl0gLSB2WzJdICogd1swXSxcbiAgICAgIEMgPSB2WzBdICogd1szXSAtIHZbM10gKiB3WzBdLFxuICAgICAgRCA9IHZbMV0gKiB3WzJdIC0gdlsyXSAqIHdbMV0sXG4gICAgICBFID0gdlsxXSAqIHdbM10gLSB2WzNdICogd1sxXSxcbiAgICAgIEYgPSB2WzJdICogd1szXSAtIHZbM10gKiB3WzJdO1xuICB2YXIgRyA9IHVbMF07XG4gIHZhciBIID0gdVsxXTtcbiAgdmFyIEkgPSB1WzJdO1xuICB2YXIgSiA9IHVbM107XG4gIG91dFswXSA9IEggKiBGIC0gSSAqIEUgKyBKICogRDtcbiAgb3V0WzFdID0gLShHICogRikgKyBJICogQyAtIEogKiBCO1xuICBvdXRbMl0gPSBHICogRSAtIEggKiBDICsgSiAqIEE7XG4gIG91dFszXSA9IC0oRyAqIEQpICsgSCAqIEIgLSBJICogQTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBQZXJmb3JtcyBhIGxpbmVhciBpbnRlcnBvbGF0aW9uIGJldHdlZW4gdHdvIHZlYzQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjNH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjNH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHQgaW50ZXJwb2xhdGlvbiBhbW91bnQsIGluIHRoZSByYW5nZSBbMC0xXSwgYmV0d2VlbiB0aGUgdHdvIGlucHV0c1xyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbGVycChvdXQsIGEsIGIsIHQpIHtcbiAgdmFyIGF4ID0gYVswXTtcbiAgdmFyIGF5ID0gYVsxXTtcbiAgdmFyIGF6ID0gYVsyXTtcbiAgdmFyIGF3ID0gYVszXTtcbiAgb3V0WzBdID0gYXggKyB0ICogKGJbMF0gLSBheCk7XG4gIG91dFsxXSA9IGF5ICsgdCAqIChiWzFdIC0gYXkpO1xuICBvdXRbMl0gPSBheiArIHQgKiAoYlsyXSAtIGF6KTtcbiAgb3V0WzNdID0gYXcgKyB0ICogKGJbM10gLSBhdyk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogR2VuZXJhdGVzIGEgcmFuZG9tIHZlY3RvciB3aXRoIHRoZSBnaXZlbiBzY2FsZVxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge051bWJlcn0gW3NjYWxlXSBMZW5ndGggb2YgdGhlIHJlc3VsdGluZyB2ZWN0b3IuIElmIG9tbWl0dGVkLCBhIHVuaXQgdmVjdG9yIHdpbGwgYmUgcmV0dXJuZWRcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHJhbmRvbShvdXQsIHNjYWxlKSB7XG4gIHNjYWxlID0gc2NhbGUgfHwgMS4wOyAvLyBNYXJzYWdsaWEsIEdlb3JnZS4gQ2hvb3NpbmcgYSBQb2ludCBmcm9tIHRoZSBTdXJmYWNlIG9mIGFcbiAgLy8gU3BoZXJlLiBBbm4uIE1hdGguIFN0YXRpc3QuIDQzICgxOTcyKSwgbm8uIDIsIDY0NS0tNjQ2LlxuICAvLyBodHRwOi8vcHJvamVjdGV1Y2xpZC5vcmcvZXVjbGlkLmFvbXMvMTE3NzY5MjY0NDtcblxuICB2YXIgdjEsIHYyLCB2MywgdjQ7XG4gIHZhciBzMSwgczI7XG5cbiAgZG8ge1xuICAgIHYxID0gZ2xNYXRyaXguUkFORE9NKCkgKiAyIC0gMTtcbiAgICB2MiA9IGdsTWF0cml4LlJBTkRPTSgpICogMiAtIDE7XG4gICAgczEgPSB2MSAqIHYxICsgdjIgKiB2MjtcbiAgfSB3aGlsZSAoczEgPj0gMSk7XG5cbiAgZG8ge1xuICAgIHYzID0gZ2xNYXRyaXguUkFORE9NKCkgKiAyIC0gMTtcbiAgICB2NCA9IGdsTWF0cml4LlJBTkRPTSgpICogMiAtIDE7XG4gICAgczIgPSB2MyAqIHYzICsgdjQgKiB2NDtcbiAgfSB3aGlsZSAoczIgPj0gMSk7XG5cbiAgdmFyIGQgPSBNYXRoLnNxcnQoKDEgLSBzMSkgLyBzMik7XG4gIG91dFswXSA9IHNjYWxlICogdjE7XG4gIG91dFsxXSA9IHNjYWxlICogdjI7XG4gIG91dFsyXSA9IHNjYWxlICogdjMgKiBkO1xuICBvdXRbM10gPSBzY2FsZSAqIHY0ICogZDtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBUcmFuc2Zvcm1zIHRoZSB2ZWM0IHdpdGggYSBtYXQ0LlxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjNH0gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5TWF0NH0gbSBtYXRyaXggdG8gdHJhbnNmb3JtIHdpdGhcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybU1hdDQob3V0LCBhLCBtKSB7XG4gIHZhciB4ID0gYVswXSxcbiAgICAgIHkgPSBhWzFdLFxuICAgICAgeiA9IGFbMl0sXG4gICAgICB3ID0gYVszXTtcbiAgb3V0WzBdID0gbVswXSAqIHggKyBtWzRdICogeSArIG1bOF0gKiB6ICsgbVsxMl0gKiB3O1xuICBvdXRbMV0gPSBtWzFdICogeCArIG1bNV0gKiB5ICsgbVs5XSAqIHogKyBtWzEzXSAqIHc7XG4gIG91dFsyXSA9IG1bMl0gKiB4ICsgbVs2XSAqIHkgKyBtWzEwXSAqIHogKyBtWzE0XSAqIHc7XG4gIG91dFszXSA9IG1bM10gKiB4ICsgbVs3XSAqIHkgKyBtWzExXSAqIHogKyBtWzE1XSAqIHc7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogVHJhbnNmb3JtcyB0aGUgdmVjNCB3aXRoIGEgcXVhdFxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjNH0gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5UXVhdH0gcSBxdWF0ZXJuaW9uIHRvIHRyYW5zZm9ybSB3aXRoXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2Zvcm1RdWF0KG91dCwgYSwgcSkge1xuICB2YXIgeCA9IGFbMF0sXG4gICAgICB5ID0gYVsxXSxcbiAgICAgIHogPSBhWzJdO1xuICB2YXIgcXggPSBxWzBdLFxuICAgICAgcXkgPSBxWzFdLFxuICAgICAgcXogPSBxWzJdLFxuICAgICAgcXcgPSBxWzNdOyAvLyBjYWxjdWxhdGUgcXVhdCAqIHZlY1xuXG4gIHZhciBpeCA9IHF3ICogeCArIHF5ICogeiAtIHF6ICogeTtcbiAgdmFyIGl5ID0gcXcgKiB5ICsgcXogKiB4IC0gcXggKiB6O1xuICB2YXIgaXogPSBxdyAqIHogKyBxeCAqIHkgLSBxeSAqIHg7XG4gIHZhciBpdyA9IC1xeCAqIHggLSBxeSAqIHkgLSBxeiAqIHo7IC8vIGNhbGN1bGF0ZSByZXN1bHQgKiBpbnZlcnNlIHF1YXRcblxuICBvdXRbMF0gPSBpeCAqIHF3ICsgaXcgKiAtcXggKyBpeSAqIC1xeiAtIGl6ICogLXF5O1xuICBvdXRbMV0gPSBpeSAqIHF3ICsgaXcgKiAtcXkgKyBpeiAqIC1xeCAtIGl4ICogLXF6O1xuICBvdXRbMl0gPSBpeiAqIHF3ICsgaXcgKiAtcXogKyBpeCAqIC1xeSAtIGl5ICogLXF4O1xuICBvdXRbM10gPSBhWzNdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFNldCB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzQgdG8gemVyb1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gemVybyhvdXQpIHtcbiAgb3V0WzBdID0gMC4wO1xuICBvdXRbMV0gPSAwLjA7XG4gIG91dFsyXSA9IDAuMDtcbiAgb3V0WzNdID0gMC4wO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSB2ZWN0b3JcclxuICpcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzR9IGEgdmVjdG9yIHRvIHJlcHJlc2VudCBhcyBhIHN0cmluZ1xyXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZlY3RvclxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cihhKSB7XG4gIHJldHVybiBcInZlYzQoXCIgKyBhWzBdICsgXCIsIFwiICsgYVsxXSArIFwiLCBcIiArIGFbMl0gKyBcIiwgXCIgKyBhWzNdICsgXCIpXCI7XG59XG4vKipcclxuICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgdmVjdG9ycyBoYXZlIGV4YWN0bHkgdGhlIHNhbWUgZWxlbWVudHMgaW4gdGhlIHNhbWUgcG9zaXRpb24gKHdoZW4gY29tcGFyZWQgd2l0aCA9PT0pXHJcbiAqXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWM0fSBhIFRoZSBmaXJzdCB2ZWN0b3IuXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWM0fSBiIFRoZSBzZWNvbmQgdmVjdG9yLlxyXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gVHJ1ZSBpZiB0aGUgdmVjdG9ycyBhcmUgZXF1YWwsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBleGFjdEVxdWFscyhhLCBiKSB7XG4gIHJldHVybiBhWzBdID09PSBiWzBdICYmIGFbMV0gPT09IGJbMV0gJiYgYVsyXSA9PT0gYlsyXSAmJiBhWzNdID09PSBiWzNdO1xufVxuLyoqXHJcbiAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIHZlY3RvcnMgaGF2ZSBhcHByb3hpbWF0ZWx5IHRoZSBzYW1lIGVsZW1lbnRzIGluIHRoZSBzYW1lIHBvc2l0aW9uLlxyXG4gKlxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjNH0gYSBUaGUgZmlyc3QgdmVjdG9yLlxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjNH0gYiBUaGUgc2Vjb25kIHZlY3Rvci5cclxuICogQHJldHVybnMge0Jvb2xlYW59IFRydWUgaWYgdGhlIHZlY3RvcnMgYXJlIGVxdWFsLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZXF1YWxzKGEsIGIpIHtcbiAgdmFyIGEwID0gYVswXSxcbiAgICAgIGExID0gYVsxXSxcbiAgICAgIGEyID0gYVsyXSxcbiAgICAgIGEzID0gYVszXTtcbiAgdmFyIGIwID0gYlswXSxcbiAgICAgIGIxID0gYlsxXSxcbiAgICAgIGIyID0gYlsyXSxcbiAgICAgIGIzID0gYlszXTtcbiAgcmV0dXJuIE1hdGguYWJzKGEwIC0gYjApIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGEwKSwgTWF0aC5hYnMoYjApKSAmJiBNYXRoLmFicyhhMSAtIGIxKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMSksIE1hdGguYWJzKGIxKSkgJiYgTWF0aC5hYnMoYTIgLSBiMikgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTIpLCBNYXRoLmFicyhiMikpICYmIE1hdGguYWJzKGEzIC0gYjMpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGEzKSwgTWF0aC5hYnMoYjMpKTtcbn1cbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzQuc3VidHJhY3R9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBzdWIgPSBzdWJ0cmFjdDtcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzQubXVsdGlwbHl9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBtdWwgPSBtdWx0aXBseTtcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzQuZGl2aWRlfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgZGl2ID0gZGl2aWRlO1xuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjNC5kaXN0YW5jZX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIGRpc3QgPSBkaXN0YW5jZTtcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzQuc3F1YXJlZERpc3RhbmNlfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgc3FyRGlzdCA9IHNxdWFyZWREaXN0YW5jZTtcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzQubGVuZ3RofVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgbGVuID0gbGVuZ3RoO1xuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjNC5zcXVhcmVkTGVuZ3RofVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgc3FyTGVuID0gc3F1YXJlZExlbmd0aDtcbi8qKlxyXG4gKiBQZXJmb3JtIHNvbWUgb3BlcmF0aW9uIG92ZXIgYW4gYXJyYXkgb2YgdmVjNHMuXHJcbiAqXHJcbiAqIEBwYXJhbSB7QXJyYXl9IGEgdGhlIGFycmF5IG9mIHZlY3RvcnMgdG8gaXRlcmF0ZSBvdmVyXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBzdHJpZGUgTnVtYmVyIG9mIGVsZW1lbnRzIGJldHdlZW4gdGhlIHN0YXJ0IG9mIGVhY2ggdmVjNC4gSWYgMCBhc3N1bWVzIHRpZ2h0bHkgcGFja2VkXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBvZmZzZXQgTnVtYmVyIG9mIGVsZW1lbnRzIHRvIHNraXAgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgYXJyYXlcclxuICogQHBhcmFtIHtOdW1iZXJ9IGNvdW50IE51bWJlciBvZiB2ZWM0cyB0byBpdGVyYXRlIG92ZXIuIElmIDAgaXRlcmF0ZXMgb3ZlciBlbnRpcmUgYXJyYXlcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gRnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCB2ZWN0b3IgaW4gdGhlIGFycmF5XHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbYXJnXSBhZGRpdGlvbmFsIGFyZ3VtZW50IHRvIHBhc3MgdG8gZm5cclxuICogQHJldHVybnMge0FycmF5fSBhXHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBmb3JFYWNoID0gZnVuY3Rpb24gKCkge1xuICB2YXIgdmVjID0gY3JlYXRlKCk7XG4gIHJldHVybiBmdW5jdGlvbiAoYSwgc3RyaWRlLCBvZmZzZXQsIGNvdW50LCBmbiwgYXJnKSB7XG4gICAgdmFyIGksIGw7XG5cbiAgICBpZiAoIXN0cmlkZSkge1xuICAgICAgc3RyaWRlID0gNDtcbiAgICB9XG5cbiAgICBpZiAoIW9mZnNldCkge1xuICAgICAgb2Zmc2V0ID0gMDtcbiAgICB9XG5cbiAgICBpZiAoY291bnQpIHtcbiAgICAgIGwgPSBNYXRoLm1pbihjb3VudCAqIHN0cmlkZSArIG9mZnNldCwgYS5sZW5ndGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsID0gYS5sZW5ndGg7XG4gICAgfVxuXG4gICAgZm9yIChpID0gb2Zmc2V0OyBpIDwgbDsgaSArPSBzdHJpZGUpIHtcbiAgICAgIHZlY1swXSA9IGFbaV07XG4gICAgICB2ZWNbMV0gPSBhW2kgKyAxXTtcbiAgICAgIHZlY1syXSA9IGFbaSArIDJdO1xuICAgICAgdmVjWzNdID0gYVtpICsgM107XG4gICAgICBmbih2ZWMsIHZlYywgYXJnKTtcbiAgICAgIGFbaV0gPSB2ZWNbMF07XG4gICAgICBhW2kgKyAxXSA9IHZlY1sxXTtcbiAgICAgIGFbaSArIDJdID0gdmVjWzJdO1xuICAgICAgYVtpICsgM10gPSB2ZWNbM107XG4gICAgfVxuXG4gICAgcmV0dXJuIGE7XG4gIH07XG59KCk7IiwiaW1wb3J0ICogYXMgdmVjNCBmcm9tICdnbC1tYXRyaXgvdmVjNCc7XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTWF0NCgpIHtcbiAgcmV0dXJuIFsxLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAxXTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2Zvcm1WZWN0b3IobWF0cml4LCB2ZWN0b3IpIHtcbiAgdmFyIHJlc3VsdCA9IHZlYzQudHJhbnNmb3JtTWF0NChbXSwgdmVjdG9yLCBtYXRyaXgpO1xuICB2ZWM0LnNjYWxlKHJlc3VsdCwgcmVzdWx0LCAxIC8gcmVzdWx0WzNdKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBtb2QodmFsdWUsIGRpdmlzb3IpIHtcbiAgdmFyIG1vZHVsdXMgPSB2YWx1ZSAlIGRpdmlzb3I7XG4gIHJldHVybiBtb2R1bHVzIDwgMCA/IGRpdmlzb3IgKyBtb2R1bHVzIDogbW9kdWx1cztcbn1cbmV4cG9ydCBmdW5jdGlvbiBsZXJwKHN0YXJ0LCBlbmQsIHN0ZXApIHtcbiAgcmV0dXJuIHN0ZXAgKiBlbmQgKyAoMSAtIHN0ZXApICogc3RhcnQ7XG59XG5cbmZ1bmN0aW9uIGllTG9nMih4KSB7XG4gIHJldHVybiBNYXRoLmxvZyh4KSAqIE1hdGguTE9HMkU7XG59XG5cbmV4cG9ydCB2YXIgbG9nMiA9IE1hdGgubG9nMiB8fCBpZUxvZzI7IiwiaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLm1hdGguaHlwb3QuanNcIjtcbmltcG9ydCAqIGFzIGdsTWF0cml4IGZyb20gXCIuL2NvbW1vbi5qc1wiO1xuLyoqXHJcbiAqIDR4NCBNYXRyaXg8YnI+Rm9ybWF0OiBjb2x1bW4tbWFqb3IsIHdoZW4gdHlwZWQgb3V0IGl0IGxvb2tzIGxpa2Ugcm93LW1ham9yPGJyPlRoZSBtYXRyaWNlcyBhcmUgYmVpbmcgcG9zdCBtdWx0aXBsaWVkLlxyXG4gKiBAbW9kdWxlIG1hdDRcclxuICovXG5cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IGlkZW50aXR5IG1hdDRcclxuICpcclxuICogQHJldHVybnMge21hdDR9IGEgbmV3IDR4NCBtYXRyaXhcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGUoKSB7XG4gIHZhciBvdXQgPSBuZXcgZ2xNYXRyaXguQVJSQVlfVFlQRSgxNik7XG5cbiAgaWYgKGdsTWF0cml4LkFSUkFZX1RZUEUgIT0gRmxvYXQzMkFycmF5KSB7XG4gICAgb3V0WzFdID0gMDtcbiAgICBvdXRbMl0gPSAwO1xuICAgIG91dFszXSA9IDA7XG4gICAgb3V0WzRdID0gMDtcbiAgICBvdXRbNl0gPSAwO1xuICAgIG91dFs3XSA9IDA7XG4gICAgb3V0WzhdID0gMDtcbiAgICBvdXRbOV0gPSAwO1xuICAgIG91dFsxMV0gPSAwO1xuICAgIG91dFsxMl0gPSAwO1xuICAgIG91dFsxM10gPSAwO1xuICAgIG91dFsxNF0gPSAwO1xuICB9XG5cbiAgb3V0WzBdID0gMTtcbiAgb3V0WzVdID0gMTtcbiAgb3V0WzEwXSA9IDE7XG4gIG91dFsxNV0gPSAxO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgbWF0NCBpbml0aWFsaXplZCB3aXRoIHZhbHVlcyBmcm9tIGFuIGV4aXN0aW5nIG1hdHJpeFxyXG4gKlxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5TWF0NH0gYSBtYXRyaXggdG8gY2xvbmVcclxuICogQHJldHVybnMge21hdDR9IGEgbmV3IDR4NCBtYXRyaXhcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjbG9uZShhKSB7XG4gIHZhciBvdXQgPSBuZXcgZ2xNYXRyaXguQVJSQVlfVFlQRSgxNik7XG4gIG91dFswXSA9IGFbMF07XG4gIG91dFsxXSA9IGFbMV07XG4gIG91dFsyXSA9IGFbMl07XG4gIG91dFszXSA9IGFbM107XG4gIG91dFs0XSA9IGFbNF07XG4gIG91dFs1XSA9IGFbNV07XG4gIG91dFs2XSA9IGFbNl07XG4gIG91dFs3XSA9IGFbN107XG4gIG91dFs4XSA9IGFbOF07XG4gIG91dFs5XSA9IGFbOV07XG4gIG91dFsxMF0gPSBhWzEwXTtcbiAgb3V0WzExXSA9IGFbMTFdO1xuICBvdXRbMTJdID0gYVsxMl07XG4gIG91dFsxM10gPSBhWzEzXTtcbiAgb3V0WzE0XSA9IGFbMTRdO1xuICBvdXRbMTVdID0gYVsxNV07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ29weSB0aGUgdmFsdWVzIGZyb20gb25lIG1hdDQgdG8gYW5vdGhlclxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5TWF0NH0gYSB0aGUgc291cmNlIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY29weShvdXQsIGEpIHtcbiAgb3V0WzBdID0gYVswXTtcbiAgb3V0WzFdID0gYVsxXTtcbiAgb3V0WzJdID0gYVsyXTtcbiAgb3V0WzNdID0gYVszXTtcbiAgb3V0WzRdID0gYVs0XTtcbiAgb3V0WzVdID0gYVs1XTtcbiAgb3V0WzZdID0gYVs2XTtcbiAgb3V0WzddID0gYVs3XTtcbiAgb3V0WzhdID0gYVs4XTtcbiAgb3V0WzldID0gYVs5XTtcbiAgb3V0WzEwXSA9IGFbMTBdO1xuICBvdXRbMTFdID0gYVsxMV07XG4gIG91dFsxMl0gPSBhWzEyXTtcbiAgb3V0WzEzXSA9IGFbMTNdO1xuICBvdXRbMTRdID0gYVsxNF07XG4gIG91dFsxNV0gPSBhWzE1XTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGUgYSBuZXcgbWF0NCB3aXRoIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0wMCBDb21wb25lbnQgaW4gY29sdW1uIDAsIHJvdyAwIHBvc2l0aW9uIChpbmRleCAwKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTAxIENvbXBvbmVudCBpbiBjb2x1bW4gMCwgcm93IDEgcG9zaXRpb24gKGluZGV4IDEpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMDIgQ29tcG9uZW50IGluIGNvbHVtbiAwLCByb3cgMiBwb3NpdGlvbiAoaW5kZXggMilcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0wMyBDb21wb25lbnQgaW4gY29sdW1uIDAsIHJvdyAzIHBvc2l0aW9uIChpbmRleCAzKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTEwIENvbXBvbmVudCBpbiBjb2x1bW4gMSwgcm93IDAgcG9zaXRpb24gKGluZGV4IDQpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMTEgQ29tcG9uZW50IGluIGNvbHVtbiAxLCByb3cgMSBwb3NpdGlvbiAoaW5kZXggNSlcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0xMiBDb21wb25lbnQgaW4gY29sdW1uIDEsIHJvdyAyIHBvc2l0aW9uIChpbmRleCA2KVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTEzIENvbXBvbmVudCBpbiBjb2x1bW4gMSwgcm93IDMgcG9zaXRpb24gKGluZGV4IDcpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMjAgQ29tcG9uZW50IGluIGNvbHVtbiAyLCByb3cgMCBwb3NpdGlvbiAoaW5kZXggOClcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0yMSBDb21wb25lbnQgaW4gY29sdW1uIDIsIHJvdyAxIHBvc2l0aW9uIChpbmRleCA5KVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTIyIENvbXBvbmVudCBpbiBjb2x1bW4gMiwgcm93IDIgcG9zaXRpb24gKGluZGV4IDEwKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTIzIENvbXBvbmVudCBpbiBjb2x1bW4gMiwgcm93IDMgcG9zaXRpb24gKGluZGV4IDExKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTMwIENvbXBvbmVudCBpbiBjb2x1bW4gMywgcm93IDAgcG9zaXRpb24gKGluZGV4IDEyKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTMxIENvbXBvbmVudCBpbiBjb2x1bW4gMywgcm93IDEgcG9zaXRpb24gKGluZGV4IDEzKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTMyIENvbXBvbmVudCBpbiBjb2x1bW4gMywgcm93IDIgcG9zaXRpb24gKGluZGV4IDE0KVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTMzIENvbXBvbmVudCBpbiBjb2x1bW4gMywgcm93IDMgcG9zaXRpb24gKGluZGV4IDE1KVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gQSBuZXcgbWF0NFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21WYWx1ZXMobTAwLCBtMDEsIG0wMiwgbTAzLCBtMTAsIG0xMSwgbTEyLCBtMTMsIG0yMCwgbTIxLCBtMjIsIG0yMywgbTMwLCBtMzEsIG0zMiwgbTMzKSB7XG4gIHZhciBvdXQgPSBuZXcgZ2xNYXRyaXguQVJSQVlfVFlQRSgxNik7XG4gIG91dFswXSA9IG0wMDtcbiAgb3V0WzFdID0gbTAxO1xuICBvdXRbMl0gPSBtMDI7XG4gIG91dFszXSA9IG0wMztcbiAgb3V0WzRdID0gbTEwO1xuICBvdXRbNV0gPSBtMTE7XG4gIG91dFs2XSA9IG0xMjtcbiAgb3V0WzddID0gbTEzO1xuICBvdXRbOF0gPSBtMjA7XG4gIG91dFs5XSA9IG0yMTtcbiAgb3V0WzEwXSA9IG0yMjtcbiAgb3V0WzExXSA9IG0yMztcbiAgb3V0WzEyXSA9IG0zMDtcbiAgb3V0WzEzXSA9IG0zMTtcbiAgb3V0WzE0XSA9IG0zMjtcbiAgb3V0WzE1XSA9IG0zMztcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBTZXQgdGhlIGNvbXBvbmVudHMgb2YgYSBtYXQ0IHRvIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0wMCBDb21wb25lbnQgaW4gY29sdW1uIDAsIHJvdyAwIHBvc2l0aW9uIChpbmRleCAwKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTAxIENvbXBvbmVudCBpbiBjb2x1bW4gMCwgcm93IDEgcG9zaXRpb24gKGluZGV4IDEpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMDIgQ29tcG9uZW50IGluIGNvbHVtbiAwLCByb3cgMiBwb3NpdGlvbiAoaW5kZXggMilcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0wMyBDb21wb25lbnQgaW4gY29sdW1uIDAsIHJvdyAzIHBvc2l0aW9uIChpbmRleCAzKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTEwIENvbXBvbmVudCBpbiBjb2x1bW4gMSwgcm93IDAgcG9zaXRpb24gKGluZGV4IDQpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMTEgQ29tcG9uZW50IGluIGNvbHVtbiAxLCByb3cgMSBwb3NpdGlvbiAoaW5kZXggNSlcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0xMiBDb21wb25lbnQgaW4gY29sdW1uIDEsIHJvdyAyIHBvc2l0aW9uIChpbmRleCA2KVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTEzIENvbXBvbmVudCBpbiBjb2x1bW4gMSwgcm93IDMgcG9zaXRpb24gKGluZGV4IDcpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMjAgQ29tcG9uZW50IGluIGNvbHVtbiAyLCByb3cgMCBwb3NpdGlvbiAoaW5kZXggOClcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0yMSBDb21wb25lbnQgaW4gY29sdW1uIDIsIHJvdyAxIHBvc2l0aW9uIChpbmRleCA5KVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTIyIENvbXBvbmVudCBpbiBjb2x1bW4gMiwgcm93IDIgcG9zaXRpb24gKGluZGV4IDEwKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTIzIENvbXBvbmVudCBpbiBjb2x1bW4gMiwgcm93IDMgcG9zaXRpb24gKGluZGV4IDExKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTMwIENvbXBvbmVudCBpbiBjb2x1bW4gMywgcm93IDAgcG9zaXRpb24gKGluZGV4IDEyKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTMxIENvbXBvbmVudCBpbiBjb2x1bW4gMywgcm93IDEgcG9zaXRpb24gKGluZGV4IDEzKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTMyIENvbXBvbmVudCBpbiBjb2x1bW4gMywgcm93IDIgcG9zaXRpb24gKGluZGV4IDE0KVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTMzIENvbXBvbmVudCBpbiBjb2x1bW4gMywgcm93IDMgcG9zaXRpb24gKGluZGV4IDE1KVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc2V0KG91dCwgbTAwLCBtMDEsIG0wMiwgbTAzLCBtMTAsIG0xMSwgbTEyLCBtMTMsIG0yMCwgbTIxLCBtMjIsIG0yMywgbTMwLCBtMzEsIG0zMiwgbTMzKSB7XG4gIG91dFswXSA9IG0wMDtcbiAgb3V0WzFdID0gbTAxO1xuICBvdXRbMl0gPSBtMDI7XG4gIG91dFszXSA9IG0wMztcbiAgb3V0WzRdID0gbTEwO1xuICBvdXRbNV0gPSBtMTE7XG4gIG91dFs2XSA9IG0xMjtcbiAgb3V0WzddID0gbTEzO1xuICBvdXRbOF0gPSBtMjA7XG4gIG91dFs5XSA9IG0yMTtcbiAgb3V0WzEwXSA9IG0yMjtcbiAgb3V0WzExXSA9IG0yMztcbiAgb3V0WzEyXSA9IG0zMDtcbiAgb3V0WzEzXSA9IG0zMTtcbiAgb3V0WzE0XSA9IG0zMjtcbiAgb3V0WzE1XSA9IG0zMztcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBTZXQgYSBtYXQ0IHRvIHRoZSBpZGVudGl0eSBtYXRyaXhcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aXR5KG91dCkge1xuICBvdXRbMF0gPSAxO1xuICBvdXRbMV0gPSAwO1xuICBvdXRbMl0gPSAwO1xuICBvdXRbM10gPSAwO1xuICBvdXRbNF0gPSAwO1xuICBvdXRbNV0gPSAxO1xuICBvdXRbNl0gPSAwO1xuICBvdXRbN10gPSAwO1xuICBvdXRbOF0gPSAwO1xuICBvdXRbOV0gPSAwO1xuICBvdXRbMTBdID0gMTtcbiAgb3V0WzExXSA9IDA7XG4gIG91dFsxMl0gPSAwO1xuICBvdXRbMTNdID0gMDtcbiAgb3V0WzE0XSA9IDA7XG4gIG91dFsxNV0gPSAxO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFRyYW5zcG9zZSB0aGUgdmFsdWVzIG9mIGEgbWF0NFxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5TWF0NH0gYSB0aGUgc291cmNlIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNwb3NlKG91dCwgYSkge1xuICAvLyBJZiB3ZSBhcmUgdHJhbnNwb3Npbmcgb3Vyc2VsdmVzIHdlIGNhbiBza2lwIGEgZmV3IHN0ZXBzIGJ1dCBoYXZlIHRvIGNhY2hlIHNvbWUgdmFsdWVzXG4gIGlmIChvdXQgPT09IGEpIHtcbiAgICB2YXIgYTAxID0gYVsxXSxcbiAgICAgICAgYTAyID0gYVsyXSxcbiAgICAgICAgYTAzID0gYVszXTtcbiAgICB2YXIgYTEyID0gYVs2XSxcbiAgICAgICAgYTEzID0gYVs3XTtcbiAgICB2YXIgYTIzID0gYVsxMV07XG4gICAgb3V0WzFdID0gYVs0XTtcbiAgICBvdXRbMl0gPSBhWzhdO1xuICAgIG91dFszXSA9IGFbMTJdO1xuICAgIG91dFs0XSA9IGEwMTtcbiAgICBvdXRbNl0gPSBhWzldO1xuICAgIG91dFs3XSA9IGFbMTNdO1xuICAgIG91dFs4XSA9IGEwMjtcbiAgICBvdXRbOV0gPSBhMTI7XG4gICAgb3V0WzExXSA9IGFbMTRdO1xuICAgIG91dFsxMl0gPSBhMDM7XG4gICAgb3V0WzEzXSA9IGExMztcbiAgICBvdXRbMTRdID0gYTIzO1xuICB9IGVsc2Uge1xuICAgIG91dFswXSA9IGFbMF07XG4gICAgb3V0WzFdID0gYVs0XTtcbiAgICBvdXRbMl0gPSBhWzhdO1xuICAgIG91dFszXSA9IGFbMTJdO1xuICAgIG91dFs0XSA9IGFbMV07XG4gICAgb3V0WzVdID0gYVs1XTtcbiAgICBvdXRbNl0gPSBhWzldO1xuICAgIG91dFs3XSA9IGFbMTNdO1xuICAgIG91dFs4XSA9IGFbMl07XG4gICAgb3V0WzldID0gYVs2XTtcbiAgICBvdXRbMTBdID0gYVsxMF07XG4gICAgb3V0WzExXSA9IGFbMTRdO1xuICAgIG91dFsxMl0gPSBhWzNdO1xuICAgIG91dFsxM10gPSBhWzddO1xuICAgIG91dFsxNF0gPSBhWzExXTtcbiAgICBvdXRbMTVdID0gYVsxNV07XG4gIH1cblxuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIEludmVydHMgYSBtYXQ0XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlNYXQ0fSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBpbnZlcnQob3V0LCBhKSB7XG4gIHZhciBhMDAgPSBhWzBdLFxuICAgICAgYTAxID0gYVsxXSxcbiAgICAgIGEwMiA9IGFbMl0sXG4gICAgICBhMDMgPSBhWzNdO1xuICB2YXIgYTEwID0gYVs0XSxcbiAgICAgIGExMSA9IGFbNV0sXG4gICAgICBhMTIgPSBhWzZdLFxuICAgICAgYTEzID0gYVs3XTtcbiAgdmFyIGEyMCA9IGFbOF0sXG4gICAgICBhMjEgPSBhWzldLFxuICAgICAgYTIyID0gYVsxMF0sXG4gICAgICBhMjMgPSBhWzExXTtcbiAgdmFyIGEzMCA9IGFbMTJdLFxuICAgICAgYTMxID0gYVsxM10sXG4gICAgICBhMzIgPSBhWzE0XSxcbiAgICAgIGEzMyA9IGFbMTVdO1xuICB2YXIgYjAwID0gYTAwICogYTExIC0gYTAxICogYTEwO1xuICB2YXIgYjAxID0gYTAwICogYTEyIC0gYTAyICogYTEwO1xuICB2YXIgYjAyID0gYTAwICogYTEzIC0gYTAzICogYTEwO1xuICB2YXIgYjAzID0gYTAxICogYTEyIC0gYTAyICogYTExO1xuICB2YXIgYjA0ID0gYTAxICogYTEzIC0gYTAzICogYTExO1xuICB2YXIgYjA1ID0gYTAyICogYTEzIC0gYTAzICogYTEyO1xuICB2YXIgYjA2ID0gYTIwICogYTMxIC0gYTIxICogYTMwO1xuICB2YXIgYjA3ID0gYTIwICogYTMyIC0gYTIyICogYTMwO1xuICB2YXIgYjA4ID0gYTIwICogYTMzIC0gYTIzICogYTMwO1xuICB2YXIgYjA5ID0gYTIxICogYTMyIC0gYTIyICogYTMxO1xuICB2YXIgYjEwID0gYTIxICogYTMzIC0gYTIzICogYTMxO1xuICB2YXIgYjExID0gYTIyICogYTMzIC0gYTIzICogYTMyOyAvLyBDYWxjdWxhdGUgdGhlIGRldGVybWluYW50XG5cbiAgdmFyIGRldCA9IGIwMCAqIGIxMSAtIGIwMSAqIGIxMCArIGIwMiAqIGIwOSArIGIwMyAqIGIwOCAtIGIwNCAqIGIwNyArIGIwNSAqIGIwNjtcblxuICBpZiAoIWRldCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZGV0ID0gMS4wIC8gZGV0O1xuICBvdXRbMF0gPSAoYTExICogYjExIC0gYTEyICogYjEwICsgYTEzICogYjA5KSAqIGRldDtcbiAgb3V0WzFdID0gKGEwMiAqIGIxMCAtIGEwMSAqIGIxMSAtIGEwMyAqIGIwOSkgKiBkZXQ7XG4gIG91dFsyXSA9IChhMzEgKiBiMDUgLSBhMzIgKiBiMDQgKyBhMzMgKiBiMDMpICogZGV0O1xuICBvdXRbM10gPSAoYTIyICogYjA0IC0gYTIxICogYjA1IC0gYTIzICogYjAzKSAqIGRldDtcbiAgb3V0WzRdID0gKGExMiAqIGIwOCAtIGExMCAqIGIxMSAtIGExMyAqIGIwNykgKiBkZXQ7XG4gIG91dFs1XSA9IChhMDAgKiBiMTEgLSBhMDIgKiBiMDggKyBhMDMgKiBiMDcpICogZGV0O1xuICBvdXRbNl0gPSAoYTMyICogYjAyIC0gYTMwICogYjA1IC0gYTMzICogYjAxKSAqIGRldDtcbiAgb3V0WzddID0gKGEyMCAqIGIwNSAtIGEyMiAqIGIwMiArIGEyMyAqIGIwMSkgKiBkZXQ7XG4gIG91dFs4XSA9IChhMTAgKiBiMTAgLSBhMTEgKiBiMDggKyBhMTMgKiBiMDYpICogZGV0O1xuICBvdXRbOV0gPSAoYTAxICogYjA4IC0gYTAwICogYjEwIC0gYTAzICogYjA2KSAqIGRldDtcbiAgb3V0WzEwXSA9IChhMzAgKiBiMDQgLSBhMzEgKiBiMDIgKyBhMzMgKiBiMDApICogZGV0O1xuICBvdXRbMTFdID0gKGEyMSAqIGIwMiAtIGEyMCAqIGIwNCAtIGEyMyAqIGIwMCkgKiBkZXQ7XG4gIG91dFsxMl0gPSAoYTExICogYjA3IC0gYTEwICogYjA5IC0gYTEyICogYjA2KSAqIGRldDtcbiAgb3V0WzEzXSA9IChhMDAgKiBiMDkgLSBhMDEgKiBiMDcgKyBhMDIgKiBiMDYpICogZGV0O1xuICBvdXRbMTRdID0gKGEzMSAqIGIwMSAtIGEzMCAqIGIwMyAtIGEzMiAqIGIwMCkgKiBkZXQ7XG4gIG91dFsxNV0gPSAoYTIwICogYjAzIC0gYTIxICogYjAxICsgYTIyICogYjAwKSAqIGRldDtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBhZGp1Z2F0ZSBvZiBhIG1hdDRcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHtSZWFkb25seU1hdDR9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGFkam9pbnQob3V0LCBhKSB7XG4gIHZhciBhMDAgPSBhWzBdLFxuICAgICAgYTAxID0gYVsxXSxcbiAgICAgIGEwMiA9IGFbMl0sXG4gICAgICBhMDMgPSBhWzNdO1xuICB2YXIgYTEwID0gYVs0XSxcbiAgICAgIGExMSA9IGFbNV0sXG4gICAgICBhMTIgPSBhWzZdLFxuICAgICAgYTEzID0gYVs3XTtcbiAgdmFyIGEyMCA9IGFbOF0sXG4gICAgICBhMjEgPSBhWzldLFxuICAgICAgYTIyID0gYVsxMF0sXG4gICAgICBhMjMgPSBhWzExXTtcbiAgdmFyIGEzMCA9IGFbMTJdLFxuICAgICAgYTMxID0gYVsxM10sXG4gICAgICBhMzIgPSBhWzE0XSxcbiAgICAgIGEzMyA9IGFbMTVdO1xuICBvdXRbMF0gPSBhMTEgKiAoYTIyICogYTMzIC0gYTIzICogYTMyKSAtIGEyMSAqIChhMTIgKiBhMzMgLSBhMTMgKiBhMzIpICsgYTMxICogKGExMiAqIGEyMyAtIGExMyAqIGEyMik7XG4gIG91dFsxXSA9IC0oYTAxICogKGEyMiAqIGEzMyAtIGEyMyAqIGEzMikgLSBhMjEgKiAoYTAyICogYTMzIC0gYTAzICogYTMyKSArIGEzMSAqIChhMDIgKiBhMjMgLSBhMDMgKiBhMjIpKTtcbiAgb3V0WzJdID0gYTAxICogKGExMiAqIGEzMyAtIGExMyAqIGEzMikgLSBhMTEgKiAoYTAyICogYTMzIC0gYTAzICogYTMyKSArIGEzMSAqIChhMDIgKiBhMTMgLSBhMDMgKiBhMTIpO1xuICBvdXRbM10gPSAtKGEwMSAqIChhMTIgKiBhMjMgLSBhMTMgKiBhMjIpIC0gYTExICogKGEwMiAqIGEyMyAtIGEwMyAqIGEyMikgKyBhMjEgKiAoYTAyICogYTEzIC0gYTAzICogYTEyKSk7XG4gIG91dFs0XSA9IC0oYTEwICogKGEyMiAqIGEzMyAtIGEyMyAqIGEzMikgLSBhMjAgKiAoYTEyICogYTMzIC0gYTEzICogYTMyKSArIGEzMCAqIChhMTIgKiBhMjMgLSBhMTMgKiBhMjIpKTtcbiAgb3V0WzVdID0gYTAwICogKGEyMiAqIGEzMyAtIGEyMyAqIGEzMikgLSBhMjAgKiAoYTAyICogYTMzIC0gYTAzICogYTMyKSArIGEzMCAqIChhMDIgKiBhMjMgLSBhMDMgKiBhMjIpO1xuICBvdXRbNl0gPSAtKGEwMCAqIChhMTIgKiBhMzMgLSBhMTMgKiBhMzIpIC0gYTEwICogKGEwMiAqIGEzMyAtIGEwMyAqIGEzMikgKyBhMzAgKiAoYTAyICogYTEzIC0gYTAzICogYTEyKSk7XG4gIG91dFs3XSA9IGEwMCAqIChhMTIgKiBhMjMgLSBhMTMgKiBhMjIpIC0gYTEwICogKGEwMiAqIGEyMyAtIGEwMyAqIGEyMikgKyBhMjAgKiAoYTAyICogYTEzIC0gYTAzICogYTEyKTtcbiAgb3V0WzhdID0gYTEwICogKGEyMSAqIGEzMyAtIGEyMyAqIGEzMSkgLSBhMjAgKiAoYTExICogYTMzIC0gYTEzICogYTMxKSArIGEzMCAqIChhMTEgKiBhMjMgLSBhMTMgKiBhMjEpO1xuICBvdXRbOV0gPSAtKGEwMCAqIChhMjEgKiBhMzMgLSBhMjMgKiBhMzEpIC0gYTIwICogKGEwMSAqIGEzMyAtIGEwMyAqIGEzMSkgKyBhMzAgKiAoYTAxICogYTIzIC0gYTAzICogYTIxKSk7XG4gIG91dFsxMF0gPSBhMDAgKiAoYTExICogYTMzIC0gYTEzICogYTMxKSAtIGExMCAqIChhMDEgKiBhMzMgLSBhMDMgKiBhMzEpICsgYTMwICogKGEwMSAqIGExMyAtIGEwMyAqIGExMSk7XG4gIG91dFsxMV0gPSAtKGEwMCAqIChhMTEgKiBhMjMgLSBhMTMgKiBhMjEpIC0gYTEwICogKGEwMSAqIGEyMyAtIGEwMyAqIGEyMSkgKyBhMjAgKiAoYTAxICogYTEzIC0gYTAzICogYTExKSk7XG4gIG91dFsxMl0gPSAtKGExMCAqIChhMjEgKiBhMzIgLSBhMjIgKiBhMzEpIC0gYTIwICogKGExMSAqIGEzMiAtIGExMiAqIGEzMSkgKyBhMzAgKiAoYTExICogYTIyIC0gYTEyICogYTIxKSk7XG4gIG91dFsxM10gPSBhMDAgKiAoYTIxICogYTMyIC0gYTIyICogYTMxKSAtIGEyMCAqIChhMDEgKiBhMzIgLSBhMDIgKiBhMzEpICsgYTMwICogKGEwMSAqIGEyMiAtIGEwMiAqIGEyMSk7XG4gIG91dFsxNF0gPSAtKGEwMCAqIChhMTEgKiBhMzIgLSBhMTIgKiBhMzEpIC0gYTEwICogKGEwMSAqIGEzMiAtIGEwMiAqIGEzMSkgKyBhMzAgKiAoYTAxICogYTEyIC0gYTAyICogYTExKSk7XG4gIG91dFsxNV0gPSBhMDAgKiAoYTExICogYTIyIC0gYTEyICogYTIxKSAtIGExMCAqIChhMDEgKiBhMjIgLSBhMDIgKiBhMjEpICsgYTIwICogKGEwMSAqIGExMiAtIGEwMiAqIGExMSk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgZGV0ZXJtaW5hbnQgb2YgYSBtYXQ0XHJcbiAqXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlNYXQ0fSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGRldGVybWluYW50IG9mIGFcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBkZXRlcm1pbmFudChhKSB7XG4gIHZhciBhMDAgPSBhWzBdLFxuICAgICAgYTAxID0gYVsxXSxcbiAgICAgIGEwMiA9IGFbMl0sXG4gICAgICBhMDMgPSBhWzNdO1xuICB2YXIgYTEwID0gYVs0XSxcbiAgICAgIGExMSA9IGFbNV0sXG4gICAgICBhMTIgPSBhWzZdLFxuICAgICAgYTEzID0gYVs3XTtcbiAgdmFyIGEyMCA9IGFbOF0sXG4gICAgICBhMjEgPSBhWzldLFxuICAgICAgYTIyID0gYVsxMF0sXG4gICAgICBhMjMgPSBhWzExXTtcbiAgdmFyIGEzMCA9IGFbMTJdLFxuICAgICAgYTMxID0gYVsxM10sXG4gICAgICBhMzIgPSBhWzE0XSxcbiAgICAgIGEzMyA9IGFbMTVdO1xuICB2YXIgYjAwID0gYTAwICogYTExIC0gYTAxICogYTEwO1xuICB2YXIgYjAxID0gYTAwICogYTEyIC0gYTAyICogYTEwO1xuICB2YXIgYjAyID0gYTAwICogYTEzIC0gYTAzICogYTEwO1xuICB2YXIgYjAzID0gYTAxICogYTEyIC0gYTAyICogYTExO1xuICB2YXIgYjA0ID0gYTAxICogYTEzIC0gYTAzICogYTExO1xuICB2YXIgYjA1ID0gYTAyICogYTEzIC0gYTAzICogYTEyO1xuICB2YXIgYjA2ID0gYTIwICogYTMxIC0gYTIxICogYTMwO1xuICB2YXIgYjA3ID0gYTIwICogYTMyIC0gYTIyICogYTMwO1xuICB2YXIgYjA4ID0gYTIwICogYTMzIC0gYTIzICogYTMwO1xuICB2YXIgYjA5ID0gYTIxICogYTMyIC0gYTIyICogYTMxO1xuICB2YXIgYjEwID0gYTIxICogYTMzIC0gYTIzICogYTMxO1xuICB2YXIgYjExID0gYTIyICogYTMzIC0gYTIzICogYTMyOyAvLyBDYWxjdWxhdGUgdGhlIGRldGVybWluYW50XG5cbiAgcmV0dXJuIGIwMCAqIGIxMSAtIGIwMSAqIGIxMCArIGIwMiAqIGIwOSArIGIwMyAqIGIwOCAtIGIwNCAqIGIwNyArIGIwNSAqIGIwNjtcbn1cbi8qKlxyXG4gKiBNdWx0aXBsaWVzIHR3byBtYXQ0c1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5TWF0NH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5TWF0NH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG11bHRpcGx5KG91dCwgYSwgYikge1xuICB2YXIgYTAwID0gYVswXSxcbiAgICAgIGEwMSA9IGFbMV0sXG4gICAgICBhMDIgPSBhWzJdLFxuICAgICAgYTAzID0gYVszXTtcbiAgdmFyIGExMCA9IGFbNF0sXG4gICAgICBhMTEgPSBhWzVdLFxuICAgICAgYTEyID0gYVs2XSxcbiAgICAgIGExMyA9IGFbN107XG4gIHZhciBhMjAgPSBhWzhdLFxuICAgICAgYTIxID0gYVs5XSxcbiAgICAgIGEyMiA9IGFbMTBdLFxuICAgICAgYTIzID0gYVsxMV07XG4gIHZhciBhMzAgPSBhWzEyXSxcbiAgICAgIGEzMSA9IGFbMTNdLFxuICAgICAgYTMyID0gYVsxNF0sXG4gICAgICBhMzMgPSBhWzE1XTsgLy8gQ2FjaGUgb25seSB0aGUgY3VycmVudCBsaW5lIG9mIHRoZSBzZWNvbmQgbWF0cml4XG5cbiAgdmFyIGIwID0gYlswXSxcbiAgICAgIGIxID0gYlsxXSxcbiAgICAgIGIyID0gYlsyXSxcbiAgICAgIGIzID0gYlszXTtcbiAgb3V0WzBdID0gYjAgKiBhMDAgKyBiMSAqIGExMCArIGIyICogYTIwICsgYjMgKiBhMzA7XG4gIG91dFsxXSA9IGIwICogYTAxICsgYjEgKiBhMTEgKyBiMiAqIGEyMSArIGIzICogYTMxO1xuICBvdXRbMl0gPSBiMCAqIGEwMiArIGIxICogYTEyICsgYjIgKiBhMjIgKyBiMyAqIGEzMjtcbiAgb3V0WzNdID0gYjAgKiBhMDMgKyBiMSAqIGExMyArIGIyICogYTIzICsgYjMgKiBhMzM7XG4gIGIwID0gYls0XTtcbiAgYjEgPSBiWzVdO1xuICBiMiA9IGJbNl07XG4gIGIzID0gYls3XTtcbiAgb3V0WzRdID0gYjAgKiBhMDAgKyBiMSAqIGExMCArIGIyICogYTIwICsgYjMgKiBhMzA7XG4gIG91dFs1XSA9IGIwICogYTAxICsgYjEgKiBhMTEgKyBiMiAqIGEyMSArIGIzICogYTMxO1xuICBvdXRbNl0gPSBiMCAqIGEwMiArIGIxICogYTEyICsgYjIgKiBhMjIgKyBiMyAqIGEzMjtcbiAgb3V0WzddID0gYjAgKiBhMDMgKyBiMSAqIGExMyArIGIyICogYTIzICsgYjMgKiBhMzM7XG4gIGIwID0gYls4XTtcbiAgYjEgPSBiWzldO1xuICBiMiA9IGJbMTBdO1xuICBiMyA9IGJbMTFdO1xuICBvdXRbOF0gPSBiMCAqIGEwMCArIGIxICogYTEwICsgYjIgKiBhMjAgKyBiMyAqIGEzMDtcbiAgb3V0WzldID0gYjAgKiBhMDEgKyBiMSAqIGExMSArIGIyICogYTIxICsgYjMgKiBhMzE7XG4gIG91dFsxMF0gPSBiMCAqIGEwMiArIGIxICogYTEyICsgYjIgKiBhMjIgKyBiMyAqIGEzMjtcbiAgb3V0WzExXSA9IGIwICogYTAzICsgYjEgKiBhMTMgKyBiMiAqIGEyMyArIGIzICogYTMzO1xuICBiMCA9IGJbMTJdO1xuICBiMSA9IGJbMTNdO1xuICBiMiA9IGJbMTRdO1xuICBiMyA9IGJbMTVdO1xuICBvdXRbMTJdID0gYjAgKiBhMDAgKyBiMSAqIGExMCArIGIyICogYTIwICsgYjMgKiBhMzA7XG4gIG91dFsxM10gPSBiMCAqIGEwMSArIGIxICogYTExICsgYjIgKiBhMjEgKyBiMyAqIGEzMTtcbiAgb3V0WzE0XSA9IGIwICogYTAyICsgYjEgKiBhMTIgKyBiMiAqIGEyMiArIGIzICogYTMyO1xuICBvdXRbMTVdID0gYjAgKiBhMDMgKyBiMSAqIGExMyArIGIyICogYTIzICsgYjMgKiBhMzM7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogVHJhbnNsYXRlIGEgbWF0NCBieSB0aGUgZ2l2ZW4gdmVjdG9yXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlNYXQ0fSBhIHRoZSBtYXRyaXggdG8gdHJhbnNsYXRlXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMzfSB2IHZlY3RvciB0byB0cmFuc2xhdGUgYnlcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zbGF0ZShvdXQsIGEsIHYpIHtcbiAgdmFyIHggPSB2WzBdLFxuICAgICAgeSA9IHZbMV0sXG4gICAgICB6ID0gdlsyXTtcbiAgdmFyIGEwMCwgYTAxLCBhMDIsIGEwMztcbiAgdmFyIGExMCwgYTExLCBhMTIsIGExMztcbiAgdmFyIGEyMCwgYTIxLCBhMjIsIGEyMztcblxuICBpZiAoYSA9PT0gb3V0KSB7XG4gICAgb3V0WzEyXSA9IGFbMF0gKiB4ICsgYVs0XSAqIHkgKyBhWzhdICogeiArIGFbMTJdO1xuICAgIG91dFsxM10gPSBhWzFdICogeCArIGFbNV0gKiB5ICsgYVs5XSAqIHogKyBhWzEzXTtcbiAgICBvdXRbMTRdID0gYVsyXSAqIHggKyBhWzZdICogeSArIGFbMTBdICogeiArIGFbMTRdO1xuICAgIG91dFsxNV0gPSBhWzNdICogeCArIGFbN10gKiB5ICsgYVsxMV0gKiB6ICsgYVsxNV07XG4gIH0gZWxzZSB7XG4gICAgYTAwID0gYVswXTtcbiAgICBhMDEgPSBhWzFdO1xuICAgIGEwMiA9IGFbMl07XG4gICAgYTAzID0gYVszXTtcbiAgICBhMTAgPSBhWzRdO1xuICAgIGExMSA9IGFbNV07XG4gICAgYTEyID0gYVs2XTtcbiAgICBhMTMgPSBhWzddO1xuICAgIGEyMCA9IGFbOF07XG4gICAgYTIxID0gYVs5XTtcbiAgICBhMjIgPSBhWzEwXTtcbiAgICBhMjMgPSBhWzExXTtcbiAgICBvdXRbMF0gPSBhMDA7XG4gICAgb3V0WzFdID0gYTAxO1xuICAgIG91dFsyXSA9IGEwMjtcbiAgICBvdXRbM10gPSBhMDM7XG4gICAgb3V0WzRdID0gYTEwO1xuICAgIG91dFs1XSA9IGExMTtcbiAgICBvdXRbNl0gPSBhMTI7XG4gICAgb3V0WzddID0gYTEzO1xuICAgIG91dFs4XSA9IGEyMDtcbiAgICBvdXRbOV0gPSBhMjE7XG4gICAgb3V0WzEwXSA9IGEyMjtcbiAgICBvdXRbMTFdID0gYTIzO1xuICAgIG91dFsxMl0gPSBhMDAgKiB4ICsgYTEwICogeSArIGEyMCAqIHogKyBhWzEyXTtcbiAgICBvdXRbMTNdID0gYTAxICogeCArIGExMSAqIHkgKyBhMjEgKiB6ICsgYVsxM107XG4gICAgb3V0WzE0XSA9IGEwMiAqIHggKyBhMTIgKiB5ICsgYTIyICogeiArIGFbMTRdO1xuICAgIG91dFsxNV0gPSBhMDMgKiB4ICsgYTEzICogeSArIGEyMyAqIHogKyBhWzE1XTtcbiAgfVxuXG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU2NhbGVzIHRoZSBtYXQ0IGJ5IHRoZSBkaW1lbnNpb25zIGluIHRoZSBnaXZlbiB2ZWMzIG5vdCB1c2luZyB2ZWN0b3JpemF0aW9uXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlNYXQ0fSBhIHRoZSBtYXRyaXggdG8gc2NhbGVcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzN9IHYgdGhlIHZlYzMgdG8gc2NhbGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNjYWxlKG91dCwgYSwgdikge1xuICB2YXIgeCA9IHZbMF0sXG4gICAgICB5ID0gdlsxXSxcbiAgICAgIHogPSB2WzJdO1xuICBvdXRbMF0gPSBhWzBdICogeDtcbiAgb3V0WzFdID0gYVsxXSAqIHg7XG4gIG91dFsyXSA9IGFbMl0gKiB4O1xuICBvdXRbM10gPSBhWzNdICogeDtcbiAgb3V0WzRdID0gYVs0XSAqIHk7XG4gIG91dFs1XSA9IGFbNV0gKiB5O1xuICBvdXRbNl0gPSBhWzZdICogeTtcbiAgb3V0WzddID0gYVs3XSAqIHk7XG4gIG91dFs4XSA9IGFbOF0gKiB6O1xuICBvdXRbOV0gPSBhWzldICogejtcbiAgb3V0WzEwXSA9IGFbMTBdICogejtcbiAgb3V0WzExXSA9IGFbMTFdICogejtcbiAgb3V0WzEyXSA9IGFbMTJdO1xuICBvdXRbMTNdID0gYVsxM107XG4gIG91dFsxNF0gPSBhWzE0XTtcbiAgb3V0WzE1XSA9IGFbMTVdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJvdGF0ZXMgYSBtYXQ0IGJ5IHRoZSBnaXZlbiBhbmdsZSBhcm91bmQgdGhlIGdpdmVuIGF4aXNcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHtSZWFkb25seU1hdDR9IGEgdGhlIG1hdHJpeCB0byByb3RhdGVcclxuICogQHBhcmFtIHtOdW1iZXJ9IHJhZCB0aGUgYW5nbGUgdG8gcm90YXRlIHRoZSBtYXRyaXggYnlcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzN9IGF4aXMgdGhlIGF4aXMgdG8gcm90YXRlIGFyb3VuZFxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcm90YXRlKG91dCwgYSwgcmFkLCBheGlzKSB7XG4gIHZhciB4ID0gYXhpc1swXSxcbiAgICAgIHkgPSBheGlzWzFdLFxuICAgICAgeiA9IGF4aXNbMl07XG4gIHZhciBsZW4gPSBNYXRoLmh5cG90KHgsIHksIHopO1xuICB2YXIgcywgYywgdDtcbiAgdmFyIGEwMCwgYTAxLCBhMDIsIGEwMztcbiAgdmFyIGExMCwgYTExLCBhMTIsIGExMztcbiAgdmFyIGEyMCwgYTIxLCBhMjIsIGEyMztcbiAgdmFyIGIwMCwgYjAxLCBiMDI7XG4gIHZhciBiMTAsIGIxMSwgYjEyO1xuICB2YXIgYjIwLCBiMjEsIGIyMjtcblxuICBpZiAobGVuIDwgZ2xNYXRyaXguRVBTSUxPTikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgbGVuID0gMSAvIGxlbjtcbiAgeCAqPSBsZW47XG4gIHkgKj0gbGVuO1xuICB6ICo9IGxlbjtcbiAgcyA9IE1hdGguc2luKHJhZCk7XG4gIGMgPSBNYXRoLmNvcyhyYWQpO1xuICB0ID0gMSAtIGM7XG4gIGEwMCA9IGFbMF07XG4gIGEwMSA9IGFbMV07XG4gIGEwMiA9IGFbMl07XG4gIGEwMyA9IGFbM107XG4gIGExMCA9IGFbNF07XG4gIGExMSA9IGFbNV07XG4gIGExMiA9IGFbNl07XG4gIGExMyA9IGFbN107XG4gIGEyMCA9IGFbOF07XG4gIGEyMSA9IGFbOV07XG4gIGEyMiA9IGFbMTBdO1xuICBhMjMgPSBhWzExXTsgLy8gQ29uc3RydWN0IHRoZSBlbGVtZW50cyBvZiB0aGUgcm90YXRpb24gbWF0cml4XG5cbiAgYjAwID0geCAqIHggKiB0ICsgYztcbiAgYjAxID0geSAqIHggKiB0ICsgeiAqIHM7XG4gIGIwMiA9IHogKiB4ICogdCAtIHkgKiBzO1xuICBiMTAgPSB4ICogeSAqIHQgLSB6ICogcztcbiAgYjExID0geSAqIHkgKiB0ICsgYztcbiAgYjEyID0geiAqIHkgKiB0ICsgeCAqIHM7XG4gIGIyMCA9IHggKiB6ICogdCArIHkgKiBzO1xuICBiMjEgPSB5ICogeiAqIHQgLSB4ICogcztcbiAgYjIyID0geiAqIHogKiB0ICsgYzsgLy8gUGVyZm9ybSByb3RhdGlvbi1zcGVjaWZpYyBtYXRyaXggbXVsdGlwbGljYXRpb25cblxuICBvdXRbMF0gPSBhMDAgKiBiMDAgKyBhMTAgKiBiMDEgKyBhMjAgKiBiMDI7XG4gIG91dFsxXSA9IGEwMSAqIGIwMCArIGExMSAqIGIwMSArIGEyMSAqIGIwMjtcbiAgb3V0WzJdID0gYTAyICogYjAwICsgYTEyICogYjAxICsgYTIyICogYjAyO1xuICBvdXRbM10gPSBhMDMgKiBiMDAgKyBhMTMgKiBiMDEgKyBhMjMgKiBiMDI7XG4gIG91dFs0XSA9IGEwMCAqIGIxMCArIGExMCAqIGIxMSArIGEyMCAqIGIxMjtcbiAgb3V0WzVdID0gYTAxICogYjEwICsgYTExICogYjExICsgYTIxICogYjEyO1xuICBvdXRbNl0gPSBhMDIgKiBiMTAgKyBhMTIgKiBiMTEgKyBhMjIgKiBiMTI7XG4gIG91dFs3XSA9IGEwMyAqIGIxMCArIGExMyAqIGIxMSArIGEyMyAqIGIxMjtcbiAgb3V0WzhdID0gYTAwICogYjIwICsgYTEwICogYjIxICsgYTIwICogYjIyO1xuICBvdXRbOV0gPSBhMDEgKiBiMjAgKyBhMTEgKiBiMjEgKyBhMjEgKiBiMjI7XG4gIG91dFsxMF0gPSBhMDIgKiBiMjAgKyBhMTIgKiBiMjEgKyBhMjIgKiBiMjI7XG4gIG91dFsxMV0gPSBhMDMgKiBiMjAgKyBhMTMgKiBiMjEgKyBhMjMgKiBiMjI7XG5cbiAgaWYgKGEgIT09IG91dCkge1xuICAgIC8vIElmIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGRpZmZlciwgY29weSB0aGUgdW5jaGFuZ2VkIGxhc3Qgcm93XG4gICAgb3V0WzEyXSA9IGFbMTJdO1xuICAgIG91dFsxM10gPSBhWzEzXTtcbiAgICBvdXRbMTRdID0gYVsxNF07XG4gICAgb3V0WzE1XSA9IGFbMTVdO1xuICB9XG5cbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSb3RhdGVzIGEgbWF0cml4IGJ5IHRoZSBnaXZlbiBhbmdsZSBhcm91bmQgdGhlIFggYXhpc1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5TWF0NH0gYSB0aGUgbWF0cml4IHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmFkIHRoZSBhbmdsZSB0byByb3RhdGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcm90YXRlWChvdXQsIGEsIHJhZCkge1xuICB2YXIgcyA9IE1hdGguc2luKHJhZCk7XG4gIHZhciBjID0gTWF0aC5jb3MocmFkKTtcbiAgdmFyIGExMCA9IGFbNF07XG4gIHZhciBhMTEgPSBhWzVdO1xuICB2YXIgYTEyID0gYVs2XTtcbiAgdmFyIGExMyA9IGFbN107XG4gIHZhciBhMjAgPSBhWzhdO1xuICB2YXIgYTIxID0gYVs5XTtcbiAgdmFyIGEyMiA9IGFbMTBdO1xuICB2YXIgYTIzID0gYVsxMV07XG5cbiAgaWYgKGEgIT09IG91dCkge1xuICAgIC8vIElmIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGRpZmZlciwgY29weSB0aGUgdW5jaGFuZ2VkIHJvd3NcbiAgICBvdXRbMF0gPSBhWzBdO1xuICAgIG91dFsxXSA9IGFbMV07XG4gICAgb3V0WzJdID0gYVsyXTtcbiAgICBvdXRbM10gPSBhWzNdO1xuICAgIG91dFsxMl0gPSBhWzEyXTtcbiAgICBvdXRbMTNdID0gYVsxM107XG4gICAgb3V0WzE0XSA9IGFbMTRdO1xuICAgIG91dFsxNV0gPSBhWzE1XTtcbiAgfSAvLyBQZXJmb3JtIGF4aXMtc3BlY2lmaWMgbWF0cml4IG11bHRpcGxpY2F0aW9uXG5cblxuICBvdXRbNF0gPSBhMTAgKiBjICsgYTIwICogcztcbiAgb3V0WzVdID0gYTExICogYyArIGEyMSAqIHM7XG4gIG91dFs2XSA9IGExMiAqIGMgKyBhMjIgKiBzO1xuICBvdXRbN10gPSBhMTMgKiBjICsgYTIzICogcztcbiAgb3V0WzhdID0gYTIwICogYyAtIGExMCAqIHM7XG4gIG91dFs5XSA9IGEyMSAqIGMgLSBhMTEgKiBzO1xuICBvdXRbMTBdID0gYTIyICogYyAtIGExMiAqIHM7XG4gIG91dFsxMV0gPSBhMjMgKiBjIC0gYTEzICogcztcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSb3RhdGVzIGEgbWF0cml4IGJ5IHRoZSBnaXZlbiBhbmdsZSBhcm91bmQgdGhlIFkgYXhpc1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5TWF0NH0gYSB0aGUgbWF0cml4IHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmFkIHRoZSBhbmdsZSB0byByb3RhdGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcm90YXRlWShvdXQsIGEsIHJhZCkge1xuICB2YXIgcyA9IE1hdGguc2luKHJhZCk7XG4gIHZhciBjID0gTWF0aC5jb3MocmFkKTtcbiAgdmFyIGEwMCA9IGFbMF07XG4gIHZhciBhMDEgPSBhWzFdO1xuICB2YXIgYTAyID0gYVsyXTtcbiAgdmFyIGEwMyA9IGFbM107XG4gIHZhciBhMjAgPSBhWzhdO1xuICB2YXIgYTIxID0gYVs5XTtcbiAgdmFyIGEyMiA9IGFbMTBdO1xuICB2YXIgYTIzID0gYVsxMV07XG5cbiAgaWYgKGEgIT09IG91dCkge1xuICAgIC8vIElmIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGRpZmZlciwgY29weSB0aGUgdW5jaGFuZ2VkIHJvd3NcbiAgICBvdXRbNF0gPSBhWzRdO1xuICAgIG91dFs1XSA9IGFbNV07XG4gICAgb3V0WzZdID0gYVs2XTtcbiAgICBvdXRbN10gPSBhWzddO1xuICAgIG91dFsxMl0gPSBhWzEyXTtcbiAgICBvdXRbMTNdID0gYVsxM107XG4gICAgb3V0WzE0XSA9IGFbMTRdO1xuICAgIG91dFsxNV0gPSBhWzE1XTtcbiAgfSAvLyBQZXJmb3JtIGF4aXMtc3BlY2lmaWMgbWF0cml4IG11bHRpcGxpY2F0aW9uXG5cblxuICBvdXRbMF0gPSBhMDAgKiBjIC0gYTIwICogcztcbiAgb3V0WzFdID0gYTAxICogYyAtIGEyMSAqIHM7XG4gIG91dFsyXSA9IGEwMiAqIGMgLSBhMjIgKiBzO1xuICBvdXRbM10gPSBhMDMgKiBjIC0gYTIzICogcztcbiAgb3V0WzhdID0gYTAwICogcyArIGEyMCAqIGM7XG4gIG91dFs5XSA9IGEwMSAqIHMgKyBhMjEgKiBjO1xuICBvdXRbMTBdID0gYTAyICogcyArIGEyMiAqIGM7XG4gIG91dFsxMV0gPSBhMDMgKiBzICsgYTIzICogYztcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSb3RhdGVzIGEgbWF0cml4IGJ5IHRoZSBnaXZlbiBhbmdsZSBhcm91bmQgdGhlIFogYXhpc1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5TWF0NH0gYSB0aGUgbWF0cml4IHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmFkIHRoZSBhbmdsZSB0byByb3RhdGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcm90YXRlWihvdXQsIGEsIHJhZCkge1xuICB2YXIgcyA9IE1hdGguc2luKHJhZCk7XG4gIHZhciBjID0gTWF0aC5jb3MocmFkKTtcbiAgdmFyIGEwMCA9IGFbMF07XG4gIHZhciBhMDEgPSBhWzFdO1xuICB2YXIgYTAyID0gYVsyXTtcbiAgdmFyIGEwMyA9IGFbM107XG4gIHZhciBhMTAgPSBhWzRdO1xuICB2YXIgYTExID0gYVs1XTtcbiAgdmFyIGExMiA9IGFbNl07XG4gIHZhciBhMTMgPSBhWzddO1xuXG4gIGlmIChhICE9PSBvdXQpIHtcbiAgICAvLyBJZiB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBkaWZmZXIsIGNvcHkgdGhlIHVuY2hhbmdlZCBsYXN0IHJvd1xuICAgIG91dFs4XSA9IGFbOF07XG4gICAgb3V0WzldID0gYVs5XTtcbiAgICBvdXRbMTBdID0gYVsxMF07XG4gICAgb3V0WzExXSA9IGFbMTFdO1xuICAgIG91dFsxMl0gPSBhWzEyXTtcbiAgICBvdXRbMTNdID0gYVsxM107XG4gICAgb3V0WzE0XSA9IGFbMTRdO1xuICAgIG91dFsxNV0gPSBhWzE1XTtcbiAgfSAvLyBQZXJmb3JtIGF4aXMtc3BlY2lmaWMgbWF0cml4IG11bHRpcGxpY2F0aW9uXG5cblxuICBvdXRbMF0gPSBhMDAgKiBjICsgYTEwICogcztcbiAgb3V0WzFdID0gYTAxICogYyArIGExMSAqIHM7XG4gIG91dFsyXSA9IGEwMiAqIGMgKyBhMTIgKiBzO1xuICBvdXRbM10gPSBhMDMgKiBjICsgYTEzICogcztcbiAgb3V0WzRdID0gYTEwICogYyAtIGEwMCAqIHM7XG4gIG91dFs1XSA9IGExMSAqIGMgLSBhMDEgKiBzO1xuICBvdXRbNl0gPSBhMTIgKiBjIC0gYTAyICogcztcbiAgb3V0WzddID0gYTEzICogYyAtIGEwMyAqIHM7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIG1hdHJpeCBmcm9tIGEgdmVjdG9yIHRyYW5zbGF0aW9uXHJcbiAqIFRoaXMgaXMgZXF1aXZhbGVudCB0byAoYnV0IG11Y2ggZmFzdGVyIHRoYW4pOlxyXG4gKlxyXG4gKiAgICAgbWF0NC5pZGVudGl0eShkZXN0KTtcclxuICogICAgIG1hdDQudHJhbnNsYXRlKGRlc3QsIGRlc3QsIHZlYyk7XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IG1hdDQgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzN9IHYgVHJhbnNsYXRpb24gdmVjdG9yXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tVHJhbnNsYXRpb24ob3V0LCB2KSB7XG4gIG91dFswXSA9IDE7XG4gIG91dFsxXSA9IDA7XG4gIG91dFsyXSA9IDA7XG4gIG91dFszXSA9IDA7XG4gIG91dFs0XSA9IDA7XG4gIG91dFs1XSA9IDE7XG4gIG91dFs2XSA9IDA7XG4gIG91dFs3XSA9IDA7XG4gIG91dFs4XSA9IDA7XG4gIG91dFs5XSA9IDA7XG4gIG91dFsxMF0gPSAxO1xuICBvdXRbMTFdID0gMDtcbiAgb3V0WzEyXSA9IHZbMF07XG4gIG91dFsxM10gPSB2WzFdO1xuICBvdXRbMTRdID0gdlsyXTtcbiAgb3V0WzE1XSA9IDE7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIG1hdHJpeCBmcm9tIGEgdmVjdG9yIHNjYWxpbmdcclxuICogVGhpcyBpcyBlcXVpdmFsZW50IHRvIChidXQgbXVjaCBmYXN0ZXIgdGhhbik6XHJcbiAqXHJcbiAqICAgICBtYXQ0LmlkZW50aXR5KGRlc3QpO1xyXG4gKiAgICAgbWF0NC5zY2FsZShkZXN0LCBkZXN0LCB2ZWMpO1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCBtYXQ0IHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMzfSB2IFNjYWxpbmcgdmVjdG9yXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tU2NhbGluZyhvdXQsIHYpIHtcbiAgb3V0WzBdID0gdlswXTtcbiAgb3V0WzFdID0gMDtcbiAgb3V0WzJdID0gMDtcbiAgb3V0WzNdID0gMDtcbiAgb3V0WzRdID0gMDtcbiAgb3V0WzVdID0gdlsxXTtcbiAgb3V0WzZdID0gMDtcbiAgb3V0WzddID0gMDtcbiAgb3V0WzhdID0gMDtcbiAgb3V0WzldID0gMDtcbiAgb3V0WzEwXSA9IHZbMl07XG4gIG91dFsxMV0gPSAwO1xuICBvdXRbMTJdID0gMDtcbiAgb3V0WzEzXSA9IDA7XG4gIG91dFsxNF0gPSAwO1xuICBvdXRbMTVdID0gMTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbWF0cml4IGZyb20gYSBnaXZlbiBhbmdsZSBhcm91bmQgYSBnaXZlbiBheGlzXHJcbiAqIFRoaXMgaXMgZXF1aXZhbGVudCB0byAoYnV0IG11Y2ggZmFzdGVyIHRoYW4pOlxyXG4gKlxyXG4gKiAgICAgbWF0NC5pZGVudGl0eShkZXN0KTtcclxuICogICAgIG1hdDQucm90YXRlKGRlc3QsIGRlc3QsIHJhZCwgYXhpcyk7XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IG1hdDQgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHJhZCB0aGUgYW5nbGUgdG8gcm90YXRlIHRoZSBtYXRyaXggYnlcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzN9IGF4aXMgdGhlIGF4aXMgdG8gcm90YXRlIGFyb3VuZFxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVJvdGF0aW9uKG91dCwgcmFkLCBheGlzKSB7XG4gIHZhciB4ID0gYXhpc1swXSxcbiAgICAgIHkgPSBheGlzWzFdLFxuICAgICAgeiA9IGF4aXNbMl07XG4gIHZhciBsZW4gPSBNYXRoLmh5cG90KHgsIHksIHopO1xuICB2YXIgcywgYywgdDtcblxuICBpZiAobGVuIDwgZ2xNYXRyaXguRVBTSUxPTikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgbGVuID0gMSAvIGxlbjtcbiAgeCAqPSBsZW47XG4gIHkgKj0gbGVuO1xuICB6ICo9IGxlbjtcbiAgcyA9IE1hdGguc2luKHJhZCk7XG4gIGMgPSBNYXRoLmNvcyhyYWQpO1xuICB0ID0gMSAtIGM7IC8vIFBlcmZvcm0gcm90YXRpb24tc3BlY2lmaWMgbWF0cml4IG11bHRpcGxpY2F0aW9uXG5cbiAgb3V0WzBdID0geCAqIHggKiB0ICsgYztcbiAgb3V0WzFdID0geSAqIHggKiB0ICsgeiAqIHM7XG4gIG91dFsyXSA9IHogKiB4ICogdCAtIHkgKiBzO1xuICBvdXRbM10gPSAwO1xuICBvdXRbNF0gPSB4ICogeSAqIHQgLSB6ICogcztcbiAgb3V0WzVdID0geSAqIHkgKiB0ICsgYztcbiAgb3V0WzZdID0geiAqIHkgKiB0ICsgeCAqIHM7XG4gIG91dFs3XSA9IDA7XG4gIG91dFs4XSA9IHggKiB6ICogdCArIHkgKiBzO1xuICBvdXRbOV0gPSB5ICogeiAqIHQgLSB4ICogcztcbiAgb3V0WzEwXSA9IHogKiB6ICogdCArIGM7XG4gIG91dFsxMV0gPSAwO1xuICBvdXRbMTJdID0gMDtcbiAgb3V0WzEzXSA9IDA7XG4gIG91dFsxNF0gPSAwO1xuICBvdXRbMTVdID0gMTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbWF0cml4IGZyb20gdGhlIGdpdmVuIGFuZ2xlIGFyb3VuZCB0aGUgWCBheGlzXHJcbiAqIFRoaXMgaXMgZXF1aXZhbGVudCB0byAoYnV0IG11Y2ggZmFzdGVyIHRoYW4pOlxyXG4gKlxyXG4gKiAgICAgbWF0NC5pZGVudGl0eShkZXN0KTtcclxuICogICAgIG1hdDQucm90YXRlWChkZXN0LCBkZXN0LCByYWQpO1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCBtYXQ0IHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgdGhlIGFuZ2xlIHRvIHJvdGF0ZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tWFJvdGF0aW9uKG91dCwgcmFkKSB7XG4gIHZhciBzID0gTWF0aC5zaW4ocmFkKTtcbiAgdmFyIGMgPSBNYXRoLmNvcyhyYWQpOyAvLyBQZXJmb3JtIGF4aXMtc3BlY2lmaWMgbWF0cml4IG11bHRpcGxpY2F0aW9uXG5cbiAgb3V0WzBdID0gMTtcbiAgb3V0WzFdID0gMDtcbiAgb3V0WzJdID0gMDtcbiAgb3V0WzNdID0gMDtcbiAgb3V0WzRdID0gMDtcbiAgb3V0WzVdID0gYztcbiAgb3V0WzZdID0gcztcbiAgb3V0WzddID0gMDtcbiAgb3V0WzhdID0gMDtcbiAgb3V0WzldID0gLXM7XG4gIG91dFsxMF0gPSBjO1xuICBvdXRbMTFdID0gMDtcbiAgb3V0WzEyXSA9IDA7XG4gIG91dFsxM10gPSAwO1xuICBvdXRbMTRdID0gMDtcbiAgb3V0WzE1XSA9IDE7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIG1hdHJpeCBmcm9tIHRoZSBnaXZlbiBhbmdsZSBhcm91bmQgdGhlIFkgYXhpc1xyXG4gKiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gKGJ1dCBtdWNoIGZhc3RlciB0aGFuKTpcclxuICpcclxuICogICAgIG1hdDQuaWRlbnRpdHkoZGVzdCk7XHJcbiAqICAgICBtYXQ0LnJvdGF0ZVkoZGVzdCwgZGVzdCwgcmFkKTtcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgbWF0NCByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmFkIHRoZSBhbmdsZSB0byByb3RhdGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVlSb3RhdGlvbihvdXQsIHJhZCkge1xuICB2YXIgcyA9IE1hdGguc2luKHJhZCk7XG4gIHZhciBjID0gTWF0aC5jb3MocmFkKTsgLy8gUGVyZm9ybSBheGlzLXNwZWNpZmljIG1hdHJpeCBtdWx0aXBsaWNhdGlvblxuXG4gIG91dFswXSA9IGM7XG4gIG91dFsxXSA9IDA7XG4gIG91dFsyXSA9IC1zO1xuICBvdXRbM10gPSAwO1xuICBvdXRbNF0gPSAwO1xuICBvdXRbNV0gPSAxO1xuICBvdXRbNl0gPSAwO1xuICBvdXRbN10gPSAwO1xuICBvdXRbOF0gPSBzO1xuICBvdXRbOV0gPSAwO1xuICBvdXRbMTBdID0gYztcbiAgb3V0WzExXSA9IDA7XG4gIG91dFsxMl0gPSAwO1xuICBvdXRbMTNdID0gMDtcbiAgb3V0WzE0XSA9IDA7XG4gIG91dFsxNV0gPSAxO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBtYXRyaXggZnJvbSB0aGUgZ2l2ZW4gYW5nbGUgYXJvdW5kIHRoZSBaIGF4aXNcclxuICogVGhpcyBpcyBlcXVpdmFsZW50IHRvIChidXQgbXVjaCBmYXN0ZXIgdGhhbik6XHJcbiAqXHJcbiAqICAgICBtYXQ0LmlkZW50aXR5KGRlc3QpO1xyXG4gKiAgICAgbWF0NC5yb3RhdGVaKGRlc3QsIGRlc3QsIHJhZCk7XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IG1hdDQgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHJhZCB0aGUgYW5nbGUgdG8gcm90YXRlIHRoZSBtYXRyaXggYnlcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21aUm90YXRpb24ob3V0LCByYWQpIHtcbiAgdmFyIHMgPSBNYXRoLnNpbihyYWQpO1xuICB2YXIgYyA9IE1hdGguY29zKHJhZCk7IC8vIFBlcmZvcm0gYXhpcy1zcGVjaWZpYyBtYXRyaXggbXVsdGlwbGljYXRpb25cblxuICBvdXRbMF0gPSBjO1xuICBvdXRbMV0gPSBzO1xuICBvdXRbMl0gPSAwO1xuICBvdXRbM10gPSAwO1xuICBvdXRbNF0gPSAtcztcbiAgb3V0WzVdID0gYztcbiAgb3V0WzZdID0gMDtcbiAgb3V0WzddID0gMDtcbiAgb3V0WzhdID0gMDtcbiAgb3V0WzldID0gMDtcbiAgb3V0WzEwXSA9IDE7XG4gIG91dFsxMV0gPSAwO1xuICBvdXRbMTJdID0gMDtcbiAgb3V0WzEzXSA9IDA7XG4gIG91dFsxNF0gPSAwO1xuICBvdXRbMTVdID0gMTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbWF0cml4IGZyb20gYSBxdWF0ZXJuaW9uIHJvdGF0aW9uIGFuZCB2ZWN0b3IgdHJhbnNsYXRpb25cclxuICogVGhpcyBpcyBlcXVpdmFsZW50IHRvIChidXQgbXVjaCBmYXN0ZXIgdGhhbik6XHJcbiAqXHJcbiAqICAgICBtYXQ0LmlkZW50aXR5KGRlc3QpO1xyXG4gKiAgICAgbWF0NC50cmFuc2xhdGUoZGVzdCwgdmVjKTtcclxuICogICAgIGxldCBxdWF0TWF0ID0gbWF0NC5jcmVhdGUoKTtcclxuICogICAgIHF1YXQ0LnRvTWF0NChxdWF0LCBxdWF0TWF0KTtcclxuICogICAgIG1hdDQubXVsdGlwbHkoZGVzdCwgcXVhdE1hdCk7XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IG1hdDQgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQHBhcmFtIHtxdWF0NH0gcSBSb3RhdGlvbiBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMzfSB2IFRyYW5zbGF0aW9uIHZlY3RvclxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVJvdGF0aW9uVHJhbnNsYXRpb24ob3V0LCBxLCB2KSB7XG4gIC8vIFF1YXRlcm5pb24gbWF0aFxuICB2YXIgeCA9IHFbMF0sXG4gICAgICB5ID0gcVsxXSxcbiAgICAgIHogPSBxWzJdLFxuICAgICAgdyA9IHFbM107XG4gIHZhciB4MiA9IHggKyB4O1xuICB2YXIgeTIgPSB5ICsgeTtcbiAgdmFyIHoyID0geiArIHo7XG4gIHZhciB4eCA9IHggKiB4MjtcbiAgdmFyIHh5ID0geCAqIHkyO1xuICB2YXIgeHogPSB4ICogejI7XG4gIHZhciB5eSA9IHkgKiB5MjtcbiAgdmFyIHl6ID0geSAqIHoyO1xuICB2YXIgenogPSB6ICogejI7XG4gIHZhciB3eCA9IHcgKiB4MjtcbiAgdmFyIHd5ID0gdyAqIHkyO1xuICB2YXIgd3ogPSB3ICogejI7XG4gIG91dFswXSA9IDEgLSAoeXkgKyB6eik7XG4gIG91dFsxXSA9IHh5ICsgd3o7XG4gIG91dFsyXSA9IHh6IC0gd3k7XG4gIG91dFszXSA9IDA7XG4gIG91dFs0XSA9IHh5IC0gd3o7XG4gIG91dFs1XSA9IDEgLSAoeHggKyB6eik7XG4gIG91dFs2XSA9IHl6ICsgd3g7XG4gIG91dFs3XSA9IDA7XG4gIG91dFs4XSA9IHh6ICsgd3k7XG4gIG91dFs5XSA9IHl6IC0gd3g7XG4gIG91dFsxMF0gPSAxIC0gKHh4ICsgeXkpO1xuICBvdXRbMTFdID0gMDtcbiAgb3V0WzEyXSA9IHZbMF07XG4gIG91dFsxM10gPSB2WzFdO1xuICBvdXRbMTRdID0gdlsyXTtcbiAgb3V0WzE1XSA9IDE7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBtYXQ0IGZyb20gYSBkdWFsIHF1YXQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IE1hdHJpeFxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5UXVhdDJ9IGEgRHVhbCBRdWF0ZXJuaW9uXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBtYXQ0IHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVF1YXQyKG91dCwgYSkge1xuICB2YXIgdHJhbnNsYXRpb24gPSBuZXcgZ2xNYXRyaXguQVJSQVlfVFlQRSgzKTtcbiAgdmFyIGJ4ID0gLWFbMF0sXG4gICAgICBieSA9IC1hWzFdLFxuICAgICAgYnogPSAtYVsyXSxcbiAgICAgIGJ3ID0gYVszXSxcbiAgICAgIGF4ID0gYVs0XSxcbiAgICAgIGF5ID0gYVs1XSxcbiAgICAgIGF6ID0gYVs2XSxcbiAgICAgIGF3ID0gYVs3XTtcbiAgdmFyIG1hZ25pdHVkZSA9IGJ4ICogYnggKyBieSAqIGJ5ICsgYnogKiBieiArIGJ3ICogYnc7IC8vT25seSBzY2FsZSBpZiBpdCBtYWtlcyBzZW5zZVxuXG4gIGlmIChtYWduaXR1ZGUgPiAwKSB7XG4gICAgdHJhbnNsYXRpb25bMF0gPSAoYXggKiBidyArIGF3ICogYnggKyBheSAqIGJ6IC0gYXogKiBieSkgKiAyIC8gbWFnbml0dWRlO1xuICAgIHRyYW5zbGF0aW9uWzFdID0gKGF5ICogYncgKyBhdyAqIGJ5ICsgYXogKiBieCAtIGF4ICogYnopICogMiAvIG1hZ25pdHVkZTtcbiAgICB0cmFuc2xhdGlvblsyXSA9IChheiAqIGJ3ICsgYXcgKiBieiArIGF4ICogYnkgLSBheSAqIGJ4KSAqIDIgLyBtYWduaXR1ZGU7XG4gIH0gZWxzZSB7XG4gICAgdHJhbnNsYXRpb25bMF0gPSAoYXggKiBidyArIGF3ICogYnggKyBheSAqIGJ6IC0gYXogKiBieSkgKiAyO1xuICAgIHRyYW5zbGF0aW9uWzFdID0gKGF5ICogYncgKyBhdyAqIGJ5ICsgYXogKiBieCAtIGF4ICogYnopICogMjtcbiAgICB0cmFuc2xhdGlvblsyXSA9IChheiAqIGJ3ICsgYXcgKiBieiArIGF4ICogYnkgLSBheSAqIGJ4KSAqIDI7XG4gIH1cblxuICBmcm9tUm90YXRpb25UcmFuc2xhdGlvbihvdXQsIGEsIHRyYW5zbGF0aW9uKTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSB0cmFuc2xhdGlvbiB2ZWN0b3IgY29tcG9uZW50IG9mIGEgdHJhbnNmb3JtYXRpb25cclxuICogIG1hdHJpeC4gSWYgYSBtYXRyaXggaXMgYnVpbHQgd2l0aCBmcm9tUm90YXRpb25UcmFuc2xhdGlvbixcclxuICogIHRoZSByZXR1cm5lZCB2ZWN0b3Igd2lsbCBiZSB0aGUgc2FtZSBhcyB0aGUgdHJhbnNsYXRpb24gdmVjdG9yXHJcbiAqICBvcmlnaW5hbGx5IHN1cHBsaWVkLlxyXG4gKiBAcGFyYW0gIHt2ZWMzfSBvdXQgVmVjdG9yIHRvIHJlY2VpdmUgdHJhbnNsYXRpb24gY29tcG9uZW50XHJcbiAqIEBwYXJhbSAge1JlYWRvbmx5TWF0NH0gbWF0IE1hdHJpeCB0byBiZSBkZWNvbXBvc2VkIChpbnB1dClcclxuICogQHJldHVybiB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VHJhbnNsYXRpb24ob3V0LCBtYXQpIHtcbiAgb3V0WzBdID0gbWF0WzEyXTtcbiAgb3V0WzFdID0gbWF0WzEzXTtcbiAgb3V0WzJdID0gbWF0WzE0XTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSBzY2FsaW5nIGZhY3RvciBjb21wb25lbnQgb2YgYSB0cmFuc2Zvcm1hdGlvblxyXG4gKiAgbWF0cml4LiBJZiBhIG1hdHJpeCBpcyBidWlsdCB3aXRoIGZyb21Sb3RhdGlvblRyYW5zbGF0aW9uU2NhbGVcclxuICogIHdpdGggYSBub3JtYWxpemVkIFF1YXRlcm5pb24gcGFyYW10ZXIsIHRoZSByZXR1cm5lZCB2ZWN0b3Igd2lsbCBiZVxyXG4gKiAgdGhlIHNhbWUgYXMgdGhlIHNjYWxpbmcgdmVjdG9yXHJcbiAqICBvcmlnaW5hbGx5IHN1cHBsaWVkLlxyXG4gKiBAcGFyYW0gIHt2ZWMzfSBvdXQgVmVjdG9yIHRvIHJlY2VpdmUgc2NhbGluZyBmYWN0b3IgY29tcG9uZW50XHJcbiAqIEBwYXJhbSAge1JlYWRvbmx5TWF0NH0gbWF0IE1hdHJpeCB0byBiZSBkZWNvbXBvc2VkIChpbnB1dClcclxuICogQHJldHVybiB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2NhbGluZyhvdXQsIG1hdCkge1xuICB2YXIgbTExID0gbWF0WzBdO1xuICB2YXIgbTEyID0gbWF0WzFdO1xuICB2YXIgbTEzID0gbWF0WzJdO1xuICB2YXIgbTIxID0gbWF0WzRdO1xuICB2YXIgbTIyID0gbWF0WzVdO1xuICB2YXIgbTIzID0gbWF0WzZdO1xuICB2YXIgbTMxID0gbWF0WzhdO1xuICB2YXIgbTMyID0gbWF0WzldO1xuICB2YXIgbTMzID0gbWF0WzEwXTtcbiAgb3V0WzBdID0gTWF0aC5oeXBvdChtMTEsIG0xMiwgbTEzKTtcbiAgb3V0WzFdID0gTWF0aC5oeXBvdChtMjEsIG0yMiwgbTIzKTtcbiAgb3V0WzJdID0gTWF0aC5oeXBvdChtMzEsIG0zMiwgbTMzKTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIGEgcXVhdGVybmlvbiByZXByZXNlbnRpbmcgdGhlIHJvdGF0aW9uYWwgY29tcG9uZW50XHJcbiAqICBvZiBhIHRyYW5zZm9ybWF0aW9uIG1hdHJpeC4gSWYgYSBtYXRyaXggaXMgYnVpbHQgd2l0aFxyXG4gKiAgZnJvbVJvdGF0aW9uVHJhbnNsYXRpb24sIHRoZSByZXR1cm5lZCBxdWF0ZXJuaW9uIHdpbGwgYmUgdGhlXHJcbiAqICBzYW1lIGFzIHRoZSBxdWF0ZXJuaW9uIG9yaWdpbmFsbHkgc3VwcGxpZWQuXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IFF1YXRlcm5pb24gdG8gcmVjZWl2ZSB0aGUgcm90YXRpb24gY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlNYXQ0fSBtYXQgTWF0cml4IHRvIGJlIGRlY29tcG9zZWQgKGlucHV0KVxyXG4gKiBAcmV0dXJuIHtxdWF0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSb3RhdGlvbihvdXQsIG1hdCkge1xuICB2YXIgc2NhbGluZyA9IG5ldyBnbE1hdHJpeC5BUlJBWV9UWVBFKDMpO1xuICBnZXRTY2FsaW5nKHNjYWxpbmcsIG1hdCk7XG4gIHZhciBpczEgPSAxIC8gc2NhbGluZ1swXTtcbiAgdmFyIGlzMiA9IDEgLyBzY2FsaW5nWzFdO1xuICB2YXIgaXMzID0gMSAvIHNjYWxpbmdbMl07XG4gIHZhciBzbTExID0gbWF0WzBdICogaXMxO1xuICB2YXIgc20xMiA9IG1hdFsxXSAqIGlzMjtcbiAgdmFyIHNtMTMgPSBtYXRbMl0gKiBpczM7XG4gIHZhciBzbTIxID0gbWF0WzRdICogaXMxO1xuICB2YXIgc20yMiA9IG1hdFs1XSAqIGlzMjtcbiAgdmFyIHNtMjMgPSBtYXRbNl0gKiBpczM7XG4gIHZhciBzbTMxID0gbWF0WzhdICogaXMxO1xuICB2YXIgc20zMiA9IG1hdFs5XSAqIGlzMjtcbiAgdmFyIHNtMzMgPSBtYXRbMTBdICogaXMzO1xuICB2YXIgdHJhY2UgPSBzbTExICsgc20yMiArIHNtMzM7XG4gIHZhciBTID0gMDtcblxuICBpZiAodHJhY2UgPiAwKSB7XG4gICAgUyA9IE1hdGguc3FydCh0cmFjZSArIDEuMCkgKiAyO1xuICAgIG91dFszXSA9IDAuMjUgKiBTO1xuICAgIG91dFswXSA9IChzbTIzIC0gc20zMikgLyBTO1xuICAgIG91dFsxXSA9IChzbTMxIC0gc20xMykgLyBTO1xuICAgIG91dFsyXSA9IChzbTEyIC0gc20yMSkgLyBTO1xuICB9IGVsc2UgaWYgKHNtMTEgPiBzbTIyICYmIHNtMTEgPiBzbTMzKSB7XG4gICAgUyA9IE1hdGguc3FydCgxLjAgKyBzbTExIC0gc20yMiAtIHNtMzMpICogMjtcbiAgICBvdXRbM10gPSAoc20yMyAtIHNtMzIpIC8gUztcbiAgICBvdXRbMF0gPSAwLjI1ICogUztcbiAgICBvdXRbMV0gPSAoc20xMiArIHNtMjEpIC8gUztcbiAgICBvdXRbMl0gPSAoc20zMSArIHNtMTMpIC8gUztcbiAgfSBlbHNlIGlmIChzbTIyID4gc20zMykge1xuICAgIFMgPSBNYXRoLnNxcnQoMS4wICsgc20yMiAtIHNtMTEgLSBzbTMzKSAqIDI7XG4gICAgb3V0WzNdID0gKHNtMzEgLSBzbTEzKSAvIFM7XG4gICAgb3V0WzBdID0gKHNtMTIgKyBzbTIxKSAvIFM7XG4gICAgb3V0WzFdID0gMC4yNSAqIFM7XG4gICAgb3V0WzJdID0gKHNtMjMgKyBzbTMyKSAvIFM7XG4gIH0gZWxzZSB7XG4gICAgUyA9IE1hdGguc3FydCgxLjAgKyBzbTMzIC0gc20xMSAtIHNtMjIpICogMjtcbiAgICBvdXRbM10gPSAoc20xMiAtIHNtMjEpIC8gUztcbiAgICBvdXRbMF0gPSAoc20zMSArIHNtMTMpIC8gUztcbiAgICBvdXRbMV0gPSAoc20yMyArIHNtMzIpIC8gUztcbiAgICBvdXRbMl0gPSAwLjI1ICogUztcbiAgfVxuXG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIG1hdHJpeCBmcm9tIGEgcXVhdGVybmlvbiByb3RhdGlvbiwgdmVjdG9yIHRyYW5zbGF0aW9uIGFuZCB2ZWN0b3Igc2NhbGVcclxuICogVGhpcyBpcyBlcXVpdmFsZW50IHRvIChidXQgbXVjaCBmYXN0ZXIgdGhhbik6XHJcbiAqXHJcbiAqICAgICBtYXQ0LmlkZW50aXR5KGRlc3QpO1xyXG4gKiAgICAgbWF0NC50cmFuc2xhdGUoZGVzdCwgdmVjKTtcclxuICogICAgIGxldCBxdWF0TWF0ID0gbWF0NC5jcmVhdGUoKTtcclxuICogICAgIHF1YXQ0LnRvTWF0NChxdWF0LCBxdWF0TWF0KTtcclxuICogICAgIG1hdDQubXVsdGlwbHkoZGVzdCwgcXVhdE1hdCk7XHJcbiAqICAgICBtYXQ0LnNjYWxlKGRlc3QsIHNjYWxlKVxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCBtYXQ0IHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqIEBwYXJhbSB7cXVhdDR9IHEgUm90YXRpb24gcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjM30gdiBUcmFuc2xhdGlvbiB2ZWN0b3JcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzN9IHMgU2NhbGluZyB2ZWN0b3JcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21Sb3RhdGlvblRyYW5zbGF0aW9uU2NhbGUob3V0LCBxLCB2LCBzKSB7XG4gIC8vIFF1YXRlcm5pb24gbWF0aFxuICB2YXIgeCA9IHFbMF0sXG4gICAgICB5ID0gcVsxXSxcbiAgICAgIHogPSBxWzJdLFxuICAgICAgdyA9IHFbM107XG4gIHZhciB4MiA9IHggKyB4O1xuICB2YXIgeTIgPSB5ICsgeTtcbiAgdmFyIHoyID0geiArIHo7XG4gIHZhciB4eCA9IHggKiB4MjtcbiAgdmFyIHh5ID0geCAqIHkyO1xuICB2YXIgeHogPSB4ICogejI7XG4gIHZhciB5eSA9IHkgKiB5MjtcbiAgdmFyIHl6ID0geSAqIHoyO1xuICB2YXIgenogPSB6ICogejI7XG4gIHZhciB3eCA9IHcgKiB4MjtcbiAgdmFyIHd5ID0gdyAqIHkyO1xuICB2YXIgd3ogPSB3ICogejI7XG4gIHZhciBzeCA9IHNbMF07XG4gIHZhciBzeSA9IHNbMV07XG4gIHZhciBzeiA9IHNbMl07XG4gIG91dFswXSA9ICgxIC0gKHl5ICsgenopKSAqIHN4O1xuICBvdXRbMV0gPSAoeHkgKyB3eikgKiBzeDtcbiAgb3V0WzJdID0gKHh6IC0gd3kpICogc3g7XG4gIG91dFszXSA9IDA7XG4gIG91dFs0XSA9ICh4eSAtIHd6KSAqIHN5O1xuICBvdXRbNV0gPSAoMSAtICh4eCArIHp6KSkgKiBzeTtcbiAgb3V0WzZdID0gKHl6ICsgd3gpICogc3k7XG4gIG91dFs3XSA9IDA7XG4gIG91dFs4XSA9ICh4eiArIHd5KSAqIHN6O1xuICBvdXRbOV0gPSAoeXogLSB3eCkgKiBzejtcbiAgb3V0WzEwXSA9ICgxIC0gKHh4ICsgeXkpKSAqIHN6O1xuICBvdXRbMTFdID0gMDtcbiAgb3V0WzEyXSA9IHZbMF07XG4gIG91dFsxM10gPSB2WzFdO1xuICBvdXRbMTRdID0gdlsyXTtcbiAgb3V0WzE1XSA9IDE7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIG1hdHJpeCBmcm9tIGEgcXVhdGVybmlvbiByb3RhdGlvbiwgdmVjdG9yIHRyYW5zbGF0aW9uIGFuZCB2ZWN0b3Igc2NhbGUsIHJvdGF0aW5nIGFuZCBzY2FsaW5nIGFyb3VuZCB0aGUgZ2l2ZW4gb3JpZ2luXHJcbiAqIFRoaXMgaXMgZXF1aXZhbGVudCB0byAoYnV0IG11Y2ggZmFzdGVyIHRoYW4pOlxyXG4gKlxyXG4gKiAgICAgbWF0NC5pZGVudGl0eShkZXN0KTtcclxuICogICAgIG1hdDQudHJhbnNsYXRlKGRlc3QsIHZlYyk7XHJcbiAqICAgICBtYXQ0LnRyYW5zbGF0ZShkZXN0LCBvcmlnaW4pO1xyXG4gKiAgICAgbGV0IHF1YXRNYXQgPSBtYXQ0LmNyZWF0ZSgpO1xyXG4gKiAgICAgcXVhdDQudG9NYXQ0KHF1YXQsIHF1YXRNYXQpO1xyXG4gKiAgICAgbWF0NC5tdWx0aXBseShkZXN0LCBxdWF0TWF0KTtcclxuICogICAgIG1hdDQuc2NhbGUoZGVzdCwgc2NhbGUpXHJcbiAqICAgICBtYXQ0LnRyYW5zbGF0ZShkZXN0LCBuZWdhdGl2ZU9yaWdpbik7XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IG1hdDQgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQHBhcmFtIHtxdWF0NH0gcSBSb3RhdGlvbiBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMzfSB2IFRyYW5zbGF0aW9uIHZlY3RvclxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjM30gcyBTY2FsaW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjM30gbyBUaGUgb3JpZ2luIHZlY3RvciBhcm91bmQgd2hpY2ggdG8gc2NhbGUgYW5kIHJvdGF0ZVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVJvdGF0aW9uVHJhbnNsYXRpb25TY2FsZU9yaWdpbihvdXQsIHEsIHYsIHMsIG8pIHtcbiAgLy8gUXVhdGVybmlvbiBtYXRoXG4gIHZhciB4ID0gcVswXSxcbiAgICAgIHkgPSBxWzFdLFxuICAgICAgeiA9IHFbMl0sXG4gICAgICB3ID0gcVszXTtcbiAgdmFyIHgyID0geCArIHg7XG4gIHZhciB5MiA9IHkgKyB5O1xuICB2YXIgejIgPSB6ICsgejtcbiAgdmFyIHh4ID0geCAqIHgyO1xuICB2YXIgeHkgPSB4ICogeTI7XG4gIHZhciB4eiA9IHggKiB6MjtcbiAgdmFyIHl5ID0geSAqIHkyO1xuICB2YXIgeXogPSB5ICogejI7XG4gIHZhciB6eiA9IHogKiB6MjtcbiAgdmFyIHd4ID0gdyAqIHgyO1xuICB2YXIgd3kgPSB3ICogeTI7XG4gIHZhciB3eiA9IHcgKiB6MjtcbiAgdmFyIHN4ID0gc1swXTtcbiAgdmFyIHN5ID0gc1sxXTtcbiAgdmFyIHN6ID0gc1syXTtcbiAgdmFyIG94ID0gb1swXTtcbiAgdmFyIG95ID0gb1sxXTtcbiAgdmFyIG96ID0gb1syXTtcbiAgdmFyIG91dDAgPSAoMSAtICh5eSArIHp6KSkgKiBzeDtcbiAgdmFyIG91dDEgPSAoeHkgKyB3eikgKiBzeDtcbiAgdmFyIG91dDIgPSAoeHogLSB3eSkgKiBzeDtcbiAgdmFyIG91dDQgPSAoeHkgLSB3eikgKiBzeTtcbiAgdmFyIG91dDUgPSAoMSAtICh4eCArIHp6KSkgKiBzeTtcbiAgdmFyIG91dDYgPSAoeXogKyB3eCkgKiBzeTtcbiAgdmFyIG91dDggPSAoeHogKyB3eSkgKiBzejtcbiAgdmFyIG91dDkgPSAoeXogLSB3eCkgKiBzejtcbiAgdmFyIG91dDEwID0gKDEgLSAoeHggKyB5eSkpICogc3o7XG4gIG91dFswXSA9IG91dDA7XG4gIG91dFsxXSA9IG91dDE7XG4gIG91dFsyXSA9IG91dDI7XG4gIG91dFszXSA9IDA7XG4gIG91dFs0XSA9IG91dDQ7XG4gIG91dFs1XSA9IG91dDU7XG4gIG91dFs2XSA9IG91dDY7XG4gIG91dFs3XSA9IDA7XG4gIG91dFs4XSA9IG91dDg7XG4gIG91dFs5XSA9IG91dDk7XG4gIG91dFsxMF0gPSBvdXQxMDtcbiAgb3V0WzExXSA9IDA7XG4gIG91dFsxMl0gPSB2WzBdICsgb3ggLSAob3V0MCAqIG94ICsgb3V0NCAqIG95ICsgb3V0OCAqIG96KTtcbiAgb3V0WzEzXSA9IHZbMV0gKyBveSAtIChvdXQxICogb3ggKyBvdXQ1ICogb3kgKyBvdXQ5ICogb3opO1xuICBvdXRbMTRdID0gdlsyXSArIG96IC0gKG91dDIgKiBveCArIG91dDYgKiBveSArIG91dDEwICogb3opO1xuICBvdXRbMTVdID0gMTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIGEgNHg0IG1hdHJpeCBmcm9tIHRoZSBnaXZlbiBxdWF0ZXJuaW9uXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IG1hdDQgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQHBhcmFtIHtSZWFkb25seVF1YXR9IHEgUXVhdGVybmlvbiB0byBjcmVhdGUgbWF0cml4IGZyb21cclxuICpcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21RdWF0KG91dCwgcSkge1xuICB2YXIgeCA9IHFbMF0sXG4gICAgICB5ID0gcVsxXSxcbiAgICAgIHogPSBxWzJdLFxuICAgICAgdyA9IHFbM107XG4gIHZhciB4MiA9IHggKyB4O1xuICB2YXIgeTIgPSB5ICsgeTtcbiAgdmFyIHoyID0geiArIHo7XG4gIHZhciB4eCA9IHggKiB4MjtcbiAgdmFyIHl4ID0geSAqIHgyO1xuICB2YXIgeXkgPSB5ICogeTI7XG4gIHZhciB6eCA9IHogKiB4MjtcbiAgdmFyIHp5ID0geiAqIHkyO1xuICB2YXIgenogPSB6ICogejI7XG4gIHZhciB3eCA9IHcgKiB4MjtcbiAgdmFyIHd5ID0gdyAqIHkyO1xuICB2YXIgd3ogPSB3ICogejI7XG4gIG91dFswXSA9IDEgLSB5eSAtIHp6O1xuICBvdXRbMV0gPSB5eCArIHd6O1xuICBvdXRbMl0gPSB6eCAtIHd5O1xuICBvdXRbM10gPSAwO1xuICBvdXRbNF0gPSB5eCAtIHd6O1xuICBvdXRbNV0gPSAxIC0geHggLSB6ejtcbiAgb3V0WzZdID0genkgKyB3eDtcbiAgb3V0WzddID0gMDtcbiAgb3V0WzhdID0genggKyB3eTtcbiAgb3V0WzldID0genkgLSB3eDtcbiAgb3V0WzEwXSA9IDEgLSB4eCAtIHl5O1xuICBvdXRbMTFdID0gMDtcbiAgb3V0WzEyXSA9IDA7XG4gIG91dFsxM10gPSAwO1xuICBvdXRbMTRdID0gMDtcbiAgb3V0WzE1XSA9IDE7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogR2VuZXJhdGVzIGEgZnJ1c3R1bSBtYXRyaXggd2l0aCB0aGUgZ2l2ZW4gYm91bmRzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IG1hdDQgZnJ1c3R1bSBtYXRyaXggd2lsbCBiZSB3cml0dGVuIGludG9cclxuICogQHBhcmFtIHtOdW1iZXJ9IGxlZnQgTGVmdCBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmlnaHQgUmlnaHQgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHBhcmFtIHtOdW1iZXJ9IGJvdHRvbSBCb3R0b20gYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHBhcmFtIHtOdW1iZXJ9IHRvcCBUb3AgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHBhcmFtIHtOdW1iZXJ9IG5lYXIgTmVhciBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcGFyYW0ge051bWJlcn0gZmFyIEZhciBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJ1c3R1bShvdXQsIGxlZnQsIHJpZ2h0LCBib3R0b20sIHRvcCwgbmVhciwgZmFyKSB7XG4gIHZhciBybCA9IDEgLyAocmlnaHQgLSBsZWZ0KTtcbiAgdmFyIHRiID0gMSAvICh0b3AgLSBib3R0b20pO1xuICB2YXIgbmYgPSAxIC8gKG5lYXIgLSBmYXIpO1xuICBvdXRbMF0gPSBuZWFyICogMiAqIHJsO1xuICBvdXRbMV0gPSAwO1xuICBvdXRbMl0gPSAwO1xuICBvdXRbM10gPSAwO1xuICBvdXRbNF0gPSAwO1xuICBvdXRbNV0gPSBuZWFyICogMiAqIHRiO1xuICBvdXRbNl0gPSAwO1xuICBvdXRbN10gPSAwO1xuICBvdXRbOF0gPSAocmlnaHQgKyBsZWZ0KSAqIHJsO1xuICBvdXRbOV0gPSAodG9wICsgYm90dG9tKSAqIHRiO1xuICBvdXRbMTBdID0gKGZhciArIG5lYXIpICogbmY7XG4gIG91dFsxMV0gPSAtMTtcbiAgb3V0WzEyXSA9IDA7XG4gIG91dFsxM10gPSAwO1xuICBvdXRbMTRdID0gZmFyICogbmVhciAqIDIgKiBuZjtcbiAgb3V0WzE1XSA9IDA7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogR2VuZXJhdGVzIGEgcGVyc3BlY3RpdmUgcHJvamVjdGlvbiBtYXRyaXggd2l0aCB0aGUgZ2l2ZW4gYm91bmRzLlxyXG4gKiBQYXNzaW5nIG51bGwvdW5kZWZpbmVkL25vIHZhbHVlIGZvciBmYXIgd2lsbCBnZW5lcmF0ZSBpbmZpbml0ZSBwcm9qZWN0aW9uIG1hdHJpeC5cclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgbWF0NCBmcnVzdHVtIG1hdHJpeCB3aWxsIGJlIHdyaXR0ZW4gaW50b1xyXG4gKiBAcGFyYW0ge251bWJlcn0gZm92eSBWZXJ0aWNhbCBmaWVsZCBvZiB2aWV3IGluIHJhZGlhbnNcclxuICogQHBhcmFtIHtudW1iZXJ9IGFzcGVjdCBBc3BlY3QgcmF0aW8uIHR5cGljYWxseSB2aWV3cG9ydCB3aWR0aC9oZWlnaHRcclxuICogQHBhcmFtIHtudW1iZXJ9IG5lYXIgTmVhciBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcGFyYW0ge251bWJlcn0gZmFyIEZhciBib3VuZCBvZiB0aGUgZnJ1c3R1bSwgY2FuIGJlIG51bGwgb3IgSW5maW5pdHlcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHBlcnNwZWN0aXZlKG91dCwgZm92eSwgYXNwZWN0LCBuZWFyLCBmYXIpIHtcbiAgdmFyIGYgPSAxLjAgLyBNYXRoLnRhbihmb3Z5IC8gMiksXG4gICAgICBuZjtcbiAgb3V0WzBdID0gZiAvIGFzcGVjdDtcbiAgb3V0WzFdID0gMDtcbiAgb3V0WzJdID0gMDtcbiAgb3V0WzNdID0gMDtcbiAgb3V0WzRdID0gMDtcbiAgb3V0WzVdID0gZjtcbiAgb3V0WzZdID0gMDtcbiAgb3V0WzddID0gMDtcbiAgb3V0WzhdID0gMDtcbiAgb3V0WzldID0gMDtcbiAgb3V0WzExXSA9IC0xO1xuICBvdXRbMTJdID0gMDtcbiAgb3V0WzEzXSA9IDA7XG4gIG91dFsxNV0gPSAwO1xuXG4gIGlmIChmYXIgIT0gbnVsbCAmJiBmYXIgIT09IEluZmluaXR5KSB7XG4gICAgbmYgPSAxIC8gKG5lYXIgLSBmYXIpO1xuICAgIG91dFsxMF0gPSAoZmFyICsgbmVhcikgKiBuZjtcbiAgICBvdXRbMTRdID0gMiAqIGZhciAqIG5lYXIgKiBuZjtcbiAgfSBlbHNlIHtcbiAgICBvdXRbMTBdID0gLTE7XG4gICAgb3V0WzE0XSA9IC0yICogbmVhcjtcbiAgfVxuXG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogR2VuZXJhdGVzIGEgcGVyc3BlY3RpdmUgcHJvamVjdGlvbiBtYXRyaXggd2l0aCB0aGUgZ2l2ZW4gZmllbGQgb2Ygdmlldy5cclxuICogVGhpcyBpcyBwcmltYXJpbHkgdXNlZnVsIGZvciBnZW5lcmF0aW5nIHByb2plY3Rpb24gbWF0cmljZXMgdG8gYmUgdXNlZFxyXG4gKiB3aXRoIHRoZSBzdGlsbCBleHBlcmllbWVudGFsIFdlYlZSIEFQSS5cclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgbWF0NCBmcnVzdHVtIG1hdHJpeCB3aWxsIGJlIHdyaXR0ZW4gaW50b1xyXG4gKiBAcGFyYW0ge09iamVjdH0gZm92IE9iamVjdCBjb250YWluaW5nIHRoZSBmb2xsb3dpbmcgdmFsdWVzOiB1cERlZ3JlZXMsIGRvd25EZWdyZWVzLCBsZWZ0RGVncmVlcywgcmlnaHREZWdyZWVzXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBuZWFyIE5lYXIgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHBhcmFtIHtudW1iZXJ9IGZhciBGYXIgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHBlcnNwZWN0aXZlRnJvbUZpZWxkT2ZWaWV3KG91dCwgZm92LCBuZWFyLCBmYXIpIHtcbiAgdmFyIHVwVGFuID0gTWF0aC50YW4oZm92LnVwRGVncmVlcyAqIE1hdGguUEkgLyAxODAuMCk7XG4gIHZhciBkb3duVGFuID0gTWF0aC50YW4oZm92LmRvd25EZWdyZWVzICogTWF0aC5QSSAvIDE4MC4wKTtcbiAgdmFyIGxlZnRUYW4gPSBNYXRoLnRhbihmb3YubGVmdERlZ3JlZXMgKiBNYXRoLlBJIC8gMTgwLjApO1xuICB2YXIgcmlnaHRUYW4gPSBNYXRoLnRhbihmb3YucmlnaHREZWdyZWVzICogTWF0aC5QSSAvIDE4MC4wKTtcbiAgdmFyIHhTY2FsZSA9IDIuMCAvIChsZWZ0VGFuICsgcmlnaHRUYW4pO1xuICB2YXIgeVNjYWxlID0gMi4wIC8gKHVwVGFuICsgZG93blRhbik7XG4gIG91dFswXSA9IHhTY2FsZTtcbiAgb3V0WzFdID0gMC4wO1xuICBvdXRbMl0gPSAwLjA7XG4gIG91dFszXSA9IDAuMDtcbiAgb3V0WzRdID0gMC4wO1xuICBvdXRbNV0gPSB5U2NhbGU7XG4gIG91dFs2XSA9IDAuMDtcbiAgb3V0WzddID0gMC4wO1xuICBvdXRbOF0gPSAtKChsZWZ0VGFuIC0gcmlnaHRUYW4pICogeFNjYWxlICogMC41KTtcbiAgb3V0WzldID0gKHVwVGFuIC0gZG93blRhbikgKiB5U2NhbGUgKiAwLjU7XG4gIG91dFsxMF0gPSBmYXIgLyAobmVhciAtIGZhcik7XG4gIG91dFsxMV0gPSAtMS4wO1xuICBvdXRbMTJdID0gMC4wO1xuICBvdXRbMTNdID0gMC4wO1xuICBvdXRbMTRdID0gZmFyICogbmVhciAvIChuZWFyIC0gZmFyKTtcbiAgb3V0WzE1XSA9IDAuMDtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBHZW5lcmF0ZXMgYSBvcnRob2dvbmFsIHByb2plY3Rpb24gbWF0cml4IHdpdGggdGhlIGdpdmVuIGJvdW5kc1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCBtYXQ0IGZydXN0dW0gbWF0cml4IHdpbGwgYmUgd3JpdHRlbiBpbnRvXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBsZWZ0IExlZnQgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHBhcmFtIHtudW1iZXJ9IHJpZ2h0IFJpZ2h0IGJvdW5kIG9mIHRoZSBmcnVzdHVtXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBib3R0b20gQm90dG9tIGJvdW5kIG9mIHRoZSBmcnVzdHVtXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB0b3AgVG9wIGJvdW5kIG9mIHRoZSBmcnVzdHVtXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBuZWFyIE5lYXIgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHBhcmFtIHtudW1iZXJ9IGZhciBGYXIgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG9ydGhvKG91dCwgbGVmdCwgcmlnaHQsIGJvdHRvbSwgdG9wLCBuZWFyLCBmYXIpIHtcbiAgdmFyIGxyID0gMSAvIChsZWZ0IC0gcmlnaHQpO1xuICB2YXIgYnQgPSAxIC8gKGJvdHRvbSAtIHRvcCk7XG4gIHZhciBuZiA9IDEgLyAobmVhciAtIGZhcik7XG4gIG91dFswXSA9IC0yICogbHI7XG4gIG91dFsxXSA9IDA7XG4gIG91dFsyXSA9IDA7XG4gIG91dFszXSA9IDA7XG4gIG91dFs0XSA9IDA7XG4gIG91dFs1XSA9IC0yICogYnQ7XG4gIG91dFs2XSA9IDA7XG4gIG91dFs3XSA9IDA7XG4gIG91dFs4XSA9IDA7XG4gIG91dFs5XSA9IDA7XG4gIG91dFsxMF0gPSAyICogbmY7XG4gIG91dFsxMV0gPSAwO1xuICBvdXRbMTJdID0gKGxlZnQgKyByaWdodCkgKiBscjtcbiAgb3V0WzEzXSA9ICh0b3AgKyBib3R0b20pICogYnQ7XG4gIG91dFsxNF0gPSAoZmFyICsgbmVhcikgKiBuZjtcbiAgb3V0WzE1XSA9IDE7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogR2VuZXJhdGVzIGEgbG9vay1hdCBtYXRyaXggd2l0aCB0aGUgZ2l2ZW4gZXllIHBvc2l0aW9uLCBmb2NhbCBwb2ludCwgYW5kIHVwIGF4aXMuXHJcbiAqIElmIHlvdSB3YW50IGEgbWF0cml4IHRoYXQgYWN0dWFsbHkgbWFrZXMgYW4gb2JqZWN0IGxvb2sgYXQgYW5vdGhlciBvYmplY3QsIHlvdSBzaG91bGQgdXNlIHRhcmdldFRvIGluc3RlYWQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IG1hdDQgZnJ1c3R1bSBtYXRyaXggd2lsbCBiZSB3cml0dGVuIGludG9cclxuICogQHBhcmFtIHtSZWFkb25seVZlYzN9IGV5ZSBQb3NpdGlvbiBvZiB0aGUgdmlld2VyXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMzfSBjZW50ZXIgUG9pbnQgdGhlIHZpZXdlciBpcyBsb29raW5nIGF0XHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMzfSB1cCB2ZWMzIHBvaW50aW5nIHVwXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBsb29rQXQob3V0LCBleWUsIGNlbnRlciwgdXApIHtcbiAgdmFyIHgwLCB4MSwgeDIsIHkwLCB5MSwgeTIsIHowLCB6MSwgejIsIGxlbjtcbiAgdmFyIGV5ZXggPSBleWVbMF07XG4gIHZhciBleWV5ID0gZXllWzFdO1xuICB2YXIgZXlleiA9IGV5ZVsyXTtcbiAgdmFyIHVweCA9IHVwWzBdO1xuICB2YXIgdXB5ID0gdXBbMV07XG4gIHZhciB1cHogPSB1cFsyXTtcbiAgdmFyIGNlbnRlcnggPSBjZW50ZXJbMF07XG4gIHZhciBjZW50ZXJ5ID0gY2VudGVyWzFdO1xuICB2YXIgY2VudGVyeiA9IGNlbnRlclsyXTtcblxuICBpZiAoTWF0aC5hYnMoZXlleCAtIGNlbnRlcngpIDwgZ2xNYXRyaXguRVBTSUxPTiAmJiBNYXRoLmFicyhleWV5IC0gY2VudGVyeSkgPCBnbE1hdHJpeC5FUFNJTE9OICYmIE1hdGguYWJzKGV5ZXogLSBjZW50ZXJ6KSA8IGdsTWF0cml4LkVQU0lMT04pIHtcbiAgICByZXR1cm4gaWRlbnRpdHkob3V0KTtcbiAgfVxuXG4gIHowID0gZXlleCAtIGNlbnRlcng7XG4gIHoxID0gZXlleSAtIGNlbnRlcnk7XG4gIHoyID0gZXlleiAtIGNlbnRlcno7XG4gIGxlbiA9IDEgLyBNYXRoLmh5cG90KHowLCB6MSwgejIpO1xuICB6MCAqPSBsZW47XG4gIHoxICo9IGxlbjtcbiAgejIgKj0gbGVuO1xuICB4MCA9IHVweSAqIHoyIC0gdXB6ICogejE7XG4gIHgxID0gdXB6ICogejAgLSB1cHggKiB6MjtcbiAgeDIgPSB1cHggKiB6MSAtIHVweSAqIHowO1xuICBsZW4gPSBNYXRoLmh5cG90KHgwLCB4MSwgeDIpO1xuXG4gIGlmICghbGVuKSB7XG4gICAgeDAgPSAwO1xuICAgIHgxID0gMDtcbiAgICB4MiA9IDA7XG4gIH0gZWxzZSB7XG4gICAgbGVuID0gMSAvIGxlbjtcbiAgICB4MCAqPSBsZW47XG4gICAgeDEgKj0gbGVuO1xuICAgIHgyICo9IGxlbjtcbiAgfVxuXG4gIHkwID0gejEgKiB4MiAtIHoyICogeDE7XG4gIHkxID0gejIgKiB4MCAtIHowICogeDI7XG4gIHkyID0gejAgKiB4MSAtIHoxICogeDA7XG4gIGxlbiA9IE1hdGguaHlwb3QoeTAsIHkxLCB5Mik7XG5cbiAgaWYgKCFsZW4pIHtcbiAgICB5MCA9IDA7XG4gICAgeTEgPSAwO1xuICAgIHkyID0gMDtcbiAgfSBlbHNlIHtcbiAgICBsZW4gPSAxIC8gbGVuO1xuICAgIHkwICo9IGxlbjtcbiAgICB5MSAqPSBsZW47XG4gICAgeTIgKj0gbGVuO1xuICB9XG5cbiAgb3V0WzBdID0geDA7XG4gIG91dFsxXSA9IHkwO1xuICBvdXRbMl0gPSB6MDtcbiAgb3V0WzNdID0gMDtcbiAgb3V0WzRdID0geDE7XG4gIG91dFs1XSA9IHkxO1xuICBvdXRbNl0gPSB6MTtcbiAgb3V0WzddID0gMDtcbiAgb3V0WzhdID0geDI7XG4gIG91dFs5XSA9IHkyO1xuICBvdXRbMTBdID0gejI7XG4gIG91dFsxMV0gPSAwO1xuICBvdXRbMTJdID0gLSh4MCAqIGV5ZXggKyB4MSAqIGV5ZXkgKyB4MiAqIGV5ZXopO1xuICBvdXRbMTNdID0gLSh5MCAqIGV5ZXggKyB5MSAqIGV5ZXkgKyB5MiAqIGV5ZXopO1xuICBvdXRbMTRdID0gLSh6MCAqIGV5ZXggKyB6MSAqIGV5ZXkgKyB6MiAqIGV5ZXopO1xuICBvdXRbMTVdID0gMTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBHZW5lcmF0ZXMgYSBtYXRyaXggdGhhdCBtYWtlcyBzb21ldGhpbmcgbG9vayBhdCBzb21ldGhpbmcgZWxzZS5cclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgbWF0NCBmcnVzdHVtIG1hdHJpeCB3aWxsIGJlIHdyaXR0ZW4gaW50b1xyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjM30gZXllIFBvc2l0aW9uIG9mIHRoZSB2aWV3ZXJcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzN9IGNlbnRlciBQb2ludCB0aGUgdmlld2VyIGlzIGxvb2tpbmcgYXRcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzN9IHVwIHZlYzMgcG9pbnRpbmcgdXBcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHRhcmdldFRvKG91dCwgZXllLCB0YXJnZXQsIHVwKSB7XG4gIHZhciBleWV4ID0gZXllWzBdLFxuICAgICAgZXlleSA9IGV5ZVsxXSxcbiAgICAgIGV5ZXogPSBleWVbMl0sXG4gICAgICB1cHggPSB1cFswXSxcbiAgICAgIHVweSA9IHVwWzFdLFxuICAgICAgdXB6ID0gdXBbMl07XG4gIHZhciB6MCA9IGV5ZXggLSB0YXJnZXRbMF0sXG4gICAgICB6MSA9IGV5ZXkgLSB0YXJnZXRbMV0sXG4gICAgICB6MiA9IGV5ZXogLSB0YXJnZXRbMl07XG4gIHZhciBsZW4gPSB6MCAqIHowICsgejEgKiB6MSArIHoyICogejI7XG5cbiAgaWYgKGxlbiA+IDApIHtcbiAgICBsZW4gPSAxIC8gTWF0aC5zcXJ0KGxlbik7XG4gICAgejAgKj0gbGVuO1xuICAgIHoxICo9IGxlbjtcbiAgICB6MiAqPSBsZW47XG4gIH1cblxuICB2YXIgeDAgPSB1cHkgKiB6MiAtIHVweiAqIHoxLFxuICAgICAgeDEgPSB1cHogKiB6MCAtIHVweCAqIHoyLFxuICAgICAgeDIgPSB1cHggKiB6MSAtIHVweSAqIHowO1xuICBsZW4gPSB4MCAqIHgwICsgeDEgKiB4MSArIHgyICogeDI7XG5cbiAgaWYgKGxlbiA+IDApIHtcbiAgICBsZW4gPSAxIC8gTWF0aC5zcXJ0KGxlbik7XG4gICAgeDAgKj0gbGVuO1xuICAgIHgxICo9IGxlbjtcbiAgICB4MiAqPSBsZW47XG4gIH1cblxuICBvdXRbMF0gPSB4MDtcbiAgb3V0WzFdID0geDE7XG4gIG91dFsyXSA9IHgyO1xuICBvdXRbM10gPSAwO1xuICBvdXRbNF0gPSB6MSAqIHgyIC0gejIgKiB4MTtcbiAgb3V0WzVdID0gejIgKiB4MCAtIHowICogeDI7XG4gIG91dFs2XSA9IHowICogeDEgLSB6MSAqIHgwO1xuICBvdXRbN10gPSAwO1xuICBvdXRbOF0gPSB6MDtcbiAgb3V0WzldID0gejE7XG4gIG91dFsxMF0gPSB6MjtcbiAgb3V0WzExXSA9IDA7XG4gIG91dFsxMl0gPSBleWV4O1xuICBvdXRbMTNdID0gZXlleTtcbiAgb3V0WzE0XSA9IGV5ZXo7XG4gIG91dFsxNV0gPSAxO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBtYXQ0XHJcbiAqXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlNYXQ0fSBhIG1hdHJpeCB0byByZXByZXNlbnQgYXMgYSBzdHJpbmdcclxuICogQHJldHVybnMge1N0cmluZ30gc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtYXRyaXhcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzdHIoYSkge1xuICByZXR1cm4gXCJtYXQ0KFwiICsgYVswXSArIFwiLCBcIiArIGFbMV0gKyBcIiwgXCIgKyBhWzJdICsgXCIsIFwiICsgYVszXSArIFwiLCBcIiArIGFbNF0gKyBcIiwgXCIgKyBhWzVdICsgXCIsIFwiICsgYVs2XSArIFwiLCBcIiArIGFbN10gKyBcIiwgXCIgKyBhWzhdICsgXCIsIFwiICsgYVs5XSArIFwiLCBcIiArIGFbMTBdICsgXCIsIFwiICsgYVsxMV0gKyBcIiwgXCIgKyBhWzEyXSArIFwiLCBcIiArIGFbMTNdICsgXCIsIFwiICsgYVsxNF0gKyBcIiwgXCIgKyBhWzE1XSArIFwiKVwiO1xufVxuLyoqXHJcbiAqIFJldHVybnMgRnJvYmVuaXVzIG5vcm0gb2YgYSBtYXQ0XHJcbiAqXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlNYXQ0fSBhIHRoZSBtYXRyaXggdG8gY2FsY3VsYXRlIEZyb2Jlbml1cyBub3JtIG9mXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IEZyb2Jlbml1cyBub3JtXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvYihhKSB7XG4gIHJldHVybiBNYXRoLmh5cG90KGFbMF0sIGFbMV0sIGFbMl0sIGFbM10sIGFbNF0sIGFbNV0sIGFbNl0sIGFbN10sIGFbOF0sIGFbOV0sIGFbMTBdLCBhWzExXSwgYVsxMl0sIGFbMTNdLCBhWzE0XSwgYVsxNV0pO1xufVxuLyoqXHJcbiAqIEFkZHMgdHdvIG1hdDQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5TWF0NH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5TWF0NH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZChvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gYVswXSArIGJbMF07XG4gIG91dFsxXSA9IGFbMV0gKyBiWzFdO1xuICBvdXRbMl0gPSBhWzJdICsgYlsyXTtcbiAgb3V0WzNdID0gYVszXSArIGJbM107XG4gIG91dFs0XSA9IGFbNF0gKyBiWzRdO1xuICBvdXRbNV0gPSBhWzVdICsgYls1XTtcbiAgb3V0WzZdID0gYVs2XSArIGJbNl07XG4gIG91dFs3XSA9IGFbN10gKyBiWzddO1xuICBvdXRbOF0gPSBhWzhdICsgYls4XTtcbiAgb3V0WzldID0gYVs5XSArIGJbOV07XG4gIG91dFsxMF0gPSBhWzEwXSArIGJbMTBdO1xuICBvdXRbMTFdID0gYVsxMV0gKyBiWzExXTtcbiAgb3V0WzEyXSA9IGFbMTJdICsgYlsxMl07XG4gIG91dFsxM10gPSBhWzEzXSArIGJbMTNdO1xuICBvdXRbMTRdID0gYVsxNF0gKyBiWzE0XTtcbiAgb3V0WzE1XSA9IGFbMTVdICsgYlsxNV07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU3VidHJhY3RzIG1hdHJpeCBiIGZyb20gbWF0cml4IGFcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHtSZWFkb25seU1hdDR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHtSZWFkb25seU1hdDR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJ0cmFjdChvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gYVswXSAtIGJbMF07XG4gIG91dFsxXSA9IGFbMV0gLSBiWzFdO1xuICBvdXRbMl0gPSBhWzJdIC0gYlsyXTtcbiAgb3V0WzNdID0gYVszXSAtIGJbM107XG4gIG91dFs0XSA9IGFbNF0gLSBiWzRdO1xuICBvdXRbNV0gPSBhWzVdIC0gYls1XTtcbiAgb3V0WzZdID0gYVs2XSAtIGJbNl07XG4gIG91dFs3XSA9IGFbN10gLSBiWzddO1xuICBvdXRbOF0gPSBhWzhdIC0gYls4XTtcbiAgb3V0WzldID0gYVs5XSAtIGJbOV07XG4gIG91dFsxMF0gPSBhWzEwXSAtIGJbMTBdO1xuICBvdXRbMTFdID0gYVsxMV0gLSBiWzExXTtcbiAgb3V0WzEyXSA9IGFbMTJdIC0gYlsxMl07XG4gIG91dFsxM10gPSBhWzEzXSAtIGJbMTNdO1xuICBvdXRbMTRdID0gYVsxNF0gLSBiWzE0XTtcbiAgb3V0WzE1XSA9IGFbMTVdIC0gYlsxNV07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogTXVsdGlwbHkgZWFjaCBlbGVtZW50IG9mIHRoZSBtYXRyaXggYnkgYSBzY2FsYXIuXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlNYXQ0fSBhIHRoZSBtYXRyaXggdG8gc2NhbGVcclxuICogQHBhcmFtIHtOdW1iZXJ9IGIgYW1vdW50IHRvIHNjYWxlIHRoZSBtYXRyaXgncyBlbGVtZW50cyBieVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbXVsdGlwbHlTY2FsYXIob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IGFbMF0gKiBiO1xuICBvdXRbMV0gPSBhWzFdICogYjtcbiAgb3V0WzJdID0gYVsyXSAqIGI7XG4gIG91dFszXSA9IGFbM10gKiBiO1xuICBvdXRbNF0gPSBhWzRdICogYjtcbiAgb3V0WzVdID0gYVs1XSAqIGI7XG4gIG91dFs2XSA9IGFbNl0gKiBiO1xuICBvdXRbN10gPSBhWzddICogYjtcbiAgb3V0WzhdID0gYVs4XSAqIGI7XG4gIG91dFs5XSA9IGFbOV0gKiBiO1xuICBvdXRbMTBdID0gYVsxMF0gKiBiO1xuICBvdXRbMTFdID0gYVsxMV0gKiBiO1xuICBvdXRbMTJdID0gYVsxMl0gKiBiO1xuICBvdXRbMTNdID0gYVsxM10gKiBiO1xuICBvdXRbMTRdID0gYVsxNF0gKiBiO1xuICBvdXRbMTVdID0gYVsxNV0gKiBiO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIEFkZHMgdHdvIG1hdDQncyBhZnRlciBtdWx0aXBseWluZyBlYWNoIGVsZW1lbnQgb2YgdGhlIHNlY29uZCBvcGVyYW5kIGJ5IGEgc2NhbGFyIHZhbHVlLlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5TWF0NH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5TWF0NH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHNjYWxlIHRoZSBhbW91bnQgdG8gc2NhbGUgYidzIGVsZW1lbnRzIGJ5IGJlZm9yZSBhZGRpbmdcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG11bHRpcGx5U2NhbGFyQW5kQWRkKG91dCwgYSwgYiwgc2NhbGUpIHtcbiAgb3V0WzBdID0gYVswXSArIGJbMF0gKiBzY2FsZTtcbiAgb3V0WzFdID0gYVsxXSArIGJbMV0gKiBzY2FsZTtcbiAgb3V0WzJdID0gYVsyXSArIGJbMl0gKiBzY2FsZTtcbiAgb3V0WzNdID0gYVszXSArIGJbM10gKiBzY2FsZTtcbiAgb3V0WzRdID0gYVs0XSArIGJbNF0gKiBzY2FsZTtcbiAgb3V0WzVdID0gYVs1XSArIGJbNV0gKiBzY2FsZTtcbiAgb3V0WzZdID0gYVs2XSArIGJbNl0gKiBzY2FsZTtcbiAgb3V0WzddID0gYVs3XSArIGJbN10gKiBzY2FsZTtcbiAgb3V0WzhdID0gYVs4XSArIGJbOF0gKiBzY2FsZTtcbiAgb3V0WzldID0gYVs5XSArIGJbOV0gKiBzY2FsZTtcbiAgb3V0WzEwXSA9IGFbMTBdICsgYlsxMF0gKiBzY2FsZTtcbiAgb3V0WzExXSA9IGFbMTFdICsgYlsxMV0gKiBzY2FsZTtcbiAgb3V0WzEyXSA9IGFbMTJdICsgYlsxMl0gKiBzY2FsZTtcbiAgb3V0WzEzXSA9IGFbMTNdICsgYlsxM10gKiBzY2FsZTtcbiAgb3V0WzE0XSA9IGFbMTRdICsgYlsxNF0gKiBzY2FsZTtcbiAgb3V0WzE1XSA9IGFbMTVdICsgYlsxNV0gKiBzY2FsZTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBtYXRyaWNlcyBoYXZlIGV4YWN0bHkgdGhlIHNhbWUgZWxlbWVudHMgaW4gdGhlIHNhbWUgcG9zaXRpb24gKHdoZW4gY29tcGFyZWQgd2l0aCA9PT0pXHJcbiAqXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlNYXQ0fSBhIFRoZSBmaXJzdCBtYXRyaXguXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlNYXQ0fSBiIFRoZSBzZWNvbmQgbWF0cml4LlxyXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gVHJ1ZSBpZiB0aGUgbWF0cmljZXMgYXJlIGVxdWFsLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZXhhY3RFcXVhbHMoYSwgYikge1xuICByZXR1cm4gYVswXSA9PT0gYlswXSAmJiBhWzFdID09PSBiWzFdICYmIGFbMl0gPT09IGJbMl0gJiYgYVszXSA9PT0gYlszXSAmJiBhWzRdID09PSBiWzRdICYmIGFbNV0gPT09IGJbNV0gJiYgYVs2XSA9PT0gYls2XSAmJiBhWzddID09PSBiWzddICYmIGFbOF0gPT09IGJbOF0gJiYgYVs5XSA9PT0gYls5XSAmJiBhWzEwXSA9PT0gYlsxMF0gJiYgYVsxMV0gPT09IGJbMTFdICYmIGFbMTJdID09PSBiWzEyXSAmJiBhWzEzXSA9PT0gYlsxM10gJiYgYVsxNF0gPT09IGJbMTRdICYmIGFbMTVdID09PSBiWzE1XTtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBtYXRyaWNlcyBoYXZlIGFwcHJveGltYXRlbHkgdGhlIHNhbWUgZWxlbWVudHMgaW4gdGhlIHNhbWUgcG9zaXRpb24uXHJcbiAqXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlNYXQ0fSBhIFRoZSBmaXJzdCBtYXRyaXguXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlNYXQ0fSBiIFRoZSBzZWNvbmQgbWF0cml4LlxyXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gVHJ1ZSBpZiB0aGUgbWF0cmljZXMgYXJlIGVxdWFsLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZXF1YWxzKGEsIGIpIHtcbiAgdmFyIGEwID0gYVswXSxcbiAgICAgIGExID0gYVsxXSxcbiAgICAgIGEyID0gYVsyXSxcbiAgICAgIGEzID0gYVszXTtcbiAgdmFyIGE0ID0gYVs0XSxcbiAgICAgIGE1ID0gYVs1XSxcbiAgICAgIGE2ID0gYVs2XSxcbiAgICAgIGE3ID0gYVs3XTtcbiAgdmFyIGE4ID0gYVs4XSxcbiAgICAgIGE5ID0gYVs5XSxcbiAgICAgIGExMCA9IGFbMTBdLFxuICAgICAgYTExID0gYVsxMV07XG4gIHZhciBhMTIgPSBhWzEyXSxcbiAgICAgIGExMyA9IGFbMTNdLFxuICAgICAgYTE0ID0gYVsxNF0sXG4gICAgICBhMTUgPSBhWzE1XTtcbiAgdmFyIGIwID0gYlswXSxcbiAgICAgIGIxID0gYlsxXSxcbiAgICAgIGIyID0gYlsyXSxcbiAgICAgIGIzID0gYlszXTtcbiAgdmFyIGI0ID0gYls0XSxcbiAgICAgIGI1ID0gYls1XSxcbiAgICAgIGI2ID0gYls2XSxcbiAgICAgIGI3ID0gYls3XTtcbiAgdmFyIGI4ID0gYls4XSxcbiAgICAgIGI5ID0gYls5XSxcbiAgICAgIGIxMCA9IGJbMTBdLFxuICAgICAgYjExID0gYlsxMV07XG4gIHZhciBiMTIgPSBiWzEyXSxcbiAgICAgIGIxMyA9IGJbMTNdLFxuICAgICAgYjE0ID0gYlsxNF0sXG4gICAgICBiMTUgPSBiWzE1XTtcbiAgcmV0dXJuIE1hdGguYWJzKGEwIC0gYjApIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGEwKSwgTWF0aC5hYnMoYjApKSAmJiBNYXRoLmFicyhhMSAtIGIxKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMSksIE1hdGguYWJzKGIxKSkgJiYgTWF0aC5hYnMoYTIgLSBiMikgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTIpLCBNYXRoLmFicyhiMikpICYmIE1hdGguYWJzKGEzIC0gYjMpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGEzKSwgTWF0aC5hYnMoYjMpKSAmJiBNYXRoLmFicyhhNCAtIGI0KSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhNCksIE1hdGguYWJzKGI0KSkgJiYgTWF0aC5hYnMoYTUgLSBiNSkgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTUpLCBNYXRoLmFicyhiNSkpICYmIE1hdGguYWJzKGE2IC0gYjYpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGE2KSwgTWF0aC5hYnMoYjYpKSAmJiBNYXRoLmFicyhhNyAtIGI3KSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhNyksIE1hdGguYWJzKGI3KSkgJiYgTWF0aC5hYnMoYTggLSBiOCkgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTgpLCBNYXRoLmFicyhiOCkpICYmIE1hdGguYWJzKGE5IC0gYjkpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGE5KSwgTWF0aC5hYnMoYjkpKSAmJiBNYXRoLmFicyhhMTAgLSBiMTApIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGExMCksIE1hdGguYWJzKGIxMCkpICYmIE1hdGguYWJzKGExMSAtIGIxMSkgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTExKSwgTWF0aC5hYnMoYjExKSkgJiYgTWF0aC5hYnMoYTEyIC0gYjEyKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMTIpLCBNYXRoLmFicyhiMTIpKSAmJiBNYXRoLmFicyhhMTMgLSBiMTMpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGExMyksIE1hdGguYWJzKGIxMykpICYmIE1hdGguYWJzKGExNCAtIGIxNCkgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTE0KSwgTWF0aC5hYnMoYjE0KSkgJiYgTWF0aC5hYnMoYTE1IC0gYjE1KSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMTUpLCBNYXRoLmFicyhiMTUpKTtcbn1cbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIG1hdDQubXVsdGlwbHl9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBtdWwgPSBtdWx0aXBseTtcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIG1hdDQuc3VidHJhY3R9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBzdWIgPSBzdWJ0cmFjdDsiLCJpbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMubWF0aC5oeXBvdC5qc1wiO1xuaW1wb3J0ICogYXMgZ2xNYXRyaXggZnJvbSBcIi4vY29tbW9uLmpzXCI7XG4vKipcclxuICogMiBEaW1lbnNpb25hbCBWZWN0b3JcclxuICogQG1vZHVsZSB2ZWMyXHJcbiAqL1xuXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldywgZW1wdHkgdmVjMlxyXG4gKlxyXG4gKiBAcmV0dXJucyB7dmVjMn0gYSBuZXcgMkQgdmVjdG9yXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlKCkge1xuICB2YXIgb3V0ID0gbmV3IGdsTWF0cml4LkFSUkFZX1RZUEUoMik7XG5cbiAgaWYgKGdsTWF0cml4LkFSUkFZX1RZUEUgIT0gRmxvYXQzMkFycmF5KSB7XG4gICAgb3V0WzBdID0gMDtcbiAgICBvdXRbMV0gPSAwO1xuICB9XG5cbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IHZlYzIgaW5pdGlhbGl6ZWQgd2l0aCB2YWx1ZXMgZnJvbSBhbiBleGlzdGluZyB2ZWN0b3JcclxuICpcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzJ9IGEgdmVjdG9yIHRvIGNsb25lXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBhIG5ldyAyRCB2ZWN0b3JcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjbG9uZShhKSB7XG4gIHZhciBvdXQgPSBuZXcgZ2xNYXRyaXguQVJSQVlfVFlQRSgyKTtcbiAgb3V0WzBdID0gYVswXTtcbiAgb3V0WzFdID0gYVsxXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IHZlYzIgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgZ2l2ZW4gdmFsdWVzXHJcbiAqXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB4IFggY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB5IFkgY29tcG9uZW50XHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBhIG5ldyAyRCB2ZWN0b3JcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tVmFsdWVzKHgsIHkpIHtcbiAgdmFyIG91dCA9IG5ldyBnbE1hdHJpeC5BUlJBWV9UWVBFKDIpO1xuICBvdXRbMF0gPSB4O1xuICBvdXRbMV0gPSB5O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENvcHkgdGhlIHZhbHVlcyBmcm9tIG9uZSB2ZWMyIHRvIGFub3RoZXJcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzJ9IGEgdGhlIHNvdXJjZSB2ZWN0b3JcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNvcHkob3V0LCBhKSB7XG4gIG91dFswXSA9IGFbMF07XG4gIG91dFsxXSA9IGFbMV07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU2V0IHRoZSBjb21wb25lbnRzIG9mIGEgdmVjMiB0byB0aGUgZ2l2ZW4gdmFsdWVzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB4IFggY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB5IFkgY29tcG9uZW50XHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzZXQob3V0LCB4LCB5KSB7XG4gIG91dFswXSA9IHg7XG4gIG91dFsxXSA9IHk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQWRkcyB0d28gdmVjMidzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gYWRkKG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdICsgYlswXTtcbiAgb3V0WzFdID0gYVsxXSArIGJbMV07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU3VidHJhY3RzIHZlY3RvciBiIGZyb20gdmVjdG9yIGFcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJ0cmFjdChvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gYVswXSAtIGJbMF07XG4gIG91dFsxXSA9IGFbMV0gLSBiWzFdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIE11bHRpcGxpZXMgdHdvIHZlYzInc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjMn0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG11bHRpcGx5KG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdICogYlswXTtcbiAgb3V0WzFdID0gYVsxXSAqIGJbMV07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogRGl2aWRlcyB0d28gdmVjMidzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZGl2aWRlKG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdIC8gYlswXTtcbiAgb3V0WzFdID0gYVsxXSAvIGJbMV07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogTWF0aC5jZWlsIHRoZSBjb21wb25lbnRzIG9mIGEgdmVjMlxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjMn0gYSB2ZWN0b3IgdG8gY2VpbFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY2VpbChvdXQsIGEpIHtcbiAgb3V0WzBdID0gTWF0aC5jZWlsKGFbMF0pO1xuICBvdXRbMV0gPSBNYXRoLmNlaWwoYVsxXSk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogTWF0aC5mbG9vciB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzJcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzJ9IGEgdmVjdG9yIHRvIGZsb29yXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmbG9vcihvdXQsIGEpIHtcbiAgb3V0WzBdID0gTWF0aC5mbG9vcihhWzBdKTtcbiAgb3V0WzFdID0gTWF0aC5mbG9vcihhWzFdKTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSBtaW5pbXVtIG9mIHR3byB2ZWMyJ3NcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBtaW4ob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IE1hdGgubWluKGFbMF0sIGJbMF0pO1xuICBvdXRbMV0gPSBNYXRoLm1pbihhWzFdLCBiWzFdKTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSBtYXhpbXVtIG9mIHR3byB2ZWMyJ3NcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBtYXgob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IE1hdGgubWF4KGFbMF0sIGJbMF0pO1xuICBvdXRbMV0gPSBNYXRoLm1heChhWzFdLCBiWzFdKTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBNYXRoLnJvdW5kIHRoZSBjb21wb25lbnRzIG9mIGEgdmVjMlxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjMn0gYSB2ZWN0b3IgdG8gcm91bmRcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHJvdW5kKG91dCwgYSkge1xuICBvdXRbMF0gPSBNYXRoLnJvdW5kKGFbMF0pO1xuICBvdXRbMV0gPSBNYXRoLnJvdW5kKGFbMV0pO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFNjYWxlcyBhIHZlYzIgYnkgYSBzY2FsYXIgbnVtYmVyXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMyfSBhIHRoZSB2ZWN0b3IgdG8gc2NhbGVcclxuICogQHBhcmFtIHtOdW1iZXJ9IGIgYW1vdW50IHRvIHNjYWxlIHRoZSB2ZWN0b3IgYnlcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNjYWxlKG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdICogYjtcbiAgb3V0WzFdID0gYVsxXSAqIGI7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQWRkcyB0d28gdmVjMidzIGFmdGVyIHNjYWxpbmcgdGhlIHNlY29uZCBvcGVyYW5kIGJ5IGEgc2NhbGFyIHZhbHVlXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gc2NhbGUgdGhlIGFtb3VudCB0byBzY2FsZSBiIGJ5IGJlZm9yZSBhZGRpbmdcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNjYWxlQW5kQWRkKG91dCwgYSwgYiwgc2NhbGUpIHtcbiAgb3V0WzBdID0gYVswXSArIGJbMF0gKiBzY2FsZTtcbiAgb3V0WzFdID0gYVsxXSArIGJbMV0gKiBzY2FsZTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBldWNsaWRpYW4gZGlzdGFuY2UgYmV0d2VlbiB0d28gdmVjMidzXHJcbiAqXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBkaXN0YW5jZSBiZXR3ZWVuIGEgYW5kIGJcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBkaXN0YW5jZShhLCBiKSB7XG4gIHZhciB4ID0gYlswXSAtIGFbMF0sXG4gICAgICB5ID0gYlsxXSAtIGFbMV07XG4gIHJldHVybiBNYXRoLmh5cG90KHgsIHkpO1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIHNxdWFyZWQgZXVjbGlkaWFuIGRpc3RhbmNlIGJldHdlZW4gdHdvIHZlYzInc1xyXG4gKlxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjMn0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge051bWJlcn0gc3F1YXJlZCBkaXN0YW5jZSBiZXR3ZWVuIGEgYW5kIGJcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzcXVhcmVkRGlzdGFuY2UoYSwgYikge1xuICB2YXIgeCA9IGJbMF0gLSBhWzBdLFxuICAgICAgeSA9IGJbMV0gLSBhWzFdO1xuICByZXR1cm4geCAqIHggKyB5ICogeTtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBsZW5ndGggb2YgYSB2ZWMyXHJcbiAqXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMyfSBhIHZlY3RvciB0byBjYWxjdWxhdGUgbGVuZ3RoIG9mXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGxlbmd0aCBvZiBhXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbGVuZ3RoKGEpIHtcbiAgdmFyIHggPSBhWzBdLFxuICAgICAgeSA9IGFbMV07XG4gIHJldHVybiBNYXRoLmh5cG90KHgsIHkpO1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIHNxdWFyZWQgbGVuZ3RoIG9mIGEgdmVjMlxyXG4gKlxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjMn0gYSB2ZWN0b3IgdG8gY2FsY3VsYXRlIHNxdWFyZWQgbGVuZ3RoIG9mXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IHNxdWFyZWQgbGVuZ3RoIG9mIGFcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzcXVhcmVkTGVuZ3RoKGEpIHtcbiAgdmFyIHggPSBhWzBdLFxuICAgICAgeSA9IGFbMV07XG4gIHJldHVybiB4ICogeCArIHkgKiB5O1xufVxuLyoqXHJcbiAqIE5lZ2F0ZXMgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWMyXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMyfSBhIHZlY3RvciB0byBuZWdhdGVcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG5lZ2F0ZShvdXQsIGEpIHtcbiAgb3V0WzBdID0gLWFbMF07XG4gIG91dFsxXSA9IC1hWzFdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJldHVybnMgdGhlIGludmVyc2Ugb2YgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWMyXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMyfSBhIHZlY3RvciB0byBpbnZlcnRcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGludmVyc2Uob3V0LCBhKSB7XG4gIG91dFswXSA9IDEuMCAvIGFbMF07XG4gIG91dFsxXSA9IDEuMCAvIGFbMV07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogTm9ybWFsaXplIGEgdmVjMlxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjMn0gYSB2ZWN0b3IgdG8gbm9ybWFsaXplXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemUob3V0LCBhKSB7XG4gIHZhciB4ID0gYVswXSxcbiAgICAgIHkgPSBhWzFdO1xuICB2YXIgbGVuID0geCAqIHggKyB5ICogeTtcblxuICBpZiAobGVuID4gMCkge1xuICAgIC8vVE9ETzogZXZhbHVhdGUgdXNlIG9mIGdsbV9pbnZzcXJ0IGhlcmU/XG4gICAgbGVuID0gMSAvIE1hdGguc3FydChsZW4pO1xuICB9XG5cbiAgb3V0WzBdID0gYVswXSAqIGxlbjtcbiAgb3V0WzFdID0gYVsxXSAqIGxlbjtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBkb3QgcHJvZHVjdCBvZiB0d28gdmVjMidzXHJcbiAqXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBkb3QgcHJvZHVjdCBvZiBhIGFuZCBiXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZG90KGEsIGIpIHtcbiAgcmV0dXJuIGFbMF0gKiBiWzBdICsgYVsxXSAqIGJbMV07XG59XG4vKipcclxuICogQ29tcHV0ZXMgdGhlIGNyb3NzIHByb2R1Y3Qgb2YgdHdvIHZlYzInc1xyXG4gKiBOb3RlIHRoYXQgdGhlIGNyb3NzIHByb2R1Y3QgbXVzdCBieSBkZWZpbml0aW9uIHByb2R1Y2UgYSAzRCB2ZWN0b3JcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjcm9zcyhvdXQsIGEsIGIpIHtcbiAgdmFyIHogPSBhWzBdICogYlsxXSAtIGFbMV0gKiBiWzBdO1xuICBvdXRbMF0gPSBvdXRbMV0gPSAwO1xuICBvdXRbMl0gPSB6O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFBlcmZvcm1zIGEgbGluZWFyIGludGVycG9sYXRpb24gYmV0d2VlbiB0d28gdmVjMidzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gdCBpbnRlcnBvbGF0aW9uIGFtb3VudCwgaW4gdGhlIHJhbmdlIFswLTFdLCBiZXR3ZWVuIHRoZSB0d28gaW5wdXRzXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBsZXJwKG91dCwgYSwgYiwgdCkge1xuICB2YXIgYXggPSBhWzBdLFxuICAgICAgYXkgPSBhWzFdO1xuICBvdXRbMF0gPSBheCArIHQgKiAoYlswXSAtIGF4KTtcbiAgb3V0WzFdID0gYXkgKyB0ICogKGJbMV0gLSBheSk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogR2VuZXJhdGVzIGEgcmFuZG9tIHZlY3RvciB3aXRoIHRoZSBnaXZlbiBzY2FsZVxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge051bWJlcn0gW3NjYWxlXSBMZW5ndGggb2YgdGhlIHJlc3VsdGluZyB2ZWN0b3IuIElmIG9tbWl0dGVkLCBhIHVuaXQgdmVjdG9yIHdpbGwgYmUgcmV0dXJuZWRcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHJhbmRvbShvdXQsIHNjYWxlKSB7XG4gIHNjYWxlID0gc2NhbGUgfHwgMS4wO1xuICB2YXIgciA9IGdsTWF0cml4LlJBTkRPTSgpICogMi4wICogTWF0aC5QSTtcbiAgb3V0WzBdID0gTWF0aC5jb3MocikgKiBzY2FsZTtcbiAgb3V0WzFdID0gTWF0aC5zaW4ocikgKiBzY2FsZTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBUcmFuc2Zvcm1zIHRoZSB2ZWMyIHdpdGggYSBtYXQyXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMyfSBhIHRoZSB2ZWN0b3IgdG8gdHJhbnNmb3JtXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlNYXQyfSBtIG1hdHJpeCB0byB0cmFuc2Zvcm0gd2l0aFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtTWF0MihvdXQsIGEsIG0pIHtcbiAgdmFyIHggPSBhWzBdLFxuICAgICAgeSA9IGFbMV07XG4gIG91dFswXSA9IG1bMF0gKiB4ICsgbVsyXSAqIHk7XG4gIG91dFsxXSA9IG1bMV0gKiB4ICsgbVszXSAqIHk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogVHJhbnNmb3JtcyB0aGUgdmVjMiB3aXRoIGEgbWF0MmRcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzJ9IGEgdGhlIHZlY3RvciB0byB0cmFuc2Zvcm1cclxuICogQHBhcmFtIHtSZWFkb25seU1hdDJkfSBtIG1hdHJpeCB0byB0cmFuc2Zvcm0gd2l0aFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtTWF0MmQob3V0LCBhLCBtKSB7XG4gIHZhciB4ID0gYVswXSxcbiAgICAgIHkgPSBhWzFdO1xuICBvdXRbMF0gPSBtWzBdICogeCArIG1bMl0gKiB5ICsgbVs0XTtcbiAgb3V0WzFdID0gbVsxXSAqIHggKyBtWzNdICogeSArIG1bNV07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogVHJhbnNmb3JtcyB0aGUgdmVjMiB3aXRoIGEgbWF0M1xyXG4gKiAzcmQgdmVjdG9yIGNvbXBvbmVudCBpcyBpbXBsaWNpdGx5ICcxJ1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjMn0gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5TWF0M30gbSBtYXRyaXggdG8gdHJhbnNmb3JtIHdpdGhcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybU1hdDMob3V0LCBhLCBtKSB7XG4gIHZhciB4ID0gYVswXSxcbiAgICAgIHkgPSBhWzFdO1xuICBvdXRbMF0gPSBtWzBdICogeCArIG1bM10gKiB5ICsgbVs2XTtcbiAgb3V0WzFdID0gbVsxXSAqIHggKyBtWzRdICogeSArIG1bN107XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogVHJhbnNmb3JtcyB0aGUgdmVjMiB3aXRoIGEgbWF0NFxyXG4gKiAzcmQgdmVjdG9yIGNvbXBvbmVudCBpcyBpbXBsaWNpdGx5ICcwJ1xyXG4gKiA0dGggdmVjdG9yIGNvbXBvbmVudCBpcyBpbXBsaWNpdGx5ICcxJ1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjMn0gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5TWF0NH0gbSBtYXRyaXggdG8gdHJhbnNmb3JtIHdpdGhcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybU1hdDQob3V0LCBhLCBtKSB7XG4gIHZhciB4ID0gYVswXTtcbiAgdmFyIHkgPSBhWzFdO1xuICBvdXRbMF0gPSBtWzBdICogeCArIG1bNF0gKiB5ICsgbVsxMl07XG4gIG91dFsxXSA9IG1bMV0gKiB4ICsgbVs1XSAqIHkgKyBtWzEzXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSb3RhdGUgYSAyRCB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgVGhlIHJlY2VpdmluZyB2ZWMyXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMyfSBhIFRoZSB2ZWMyIHBvaW50IHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjMn0gYiBUaGUgb3JpZ2luIG9mIHRoZSByb3RhdGlvblxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmFkIFRoZSBhbmdsZSBvZiByb3RhdGlvbiBpbiByYWRpYW5zXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiByb3RhdGUob3V0LCBhLCBiLCByYWQpIHtcbiAgLy9UcmFuc2xhdGUgcG9pbnQgdG8gdGhlIG9yaWdpblxuICB2YXIgcDAgPSBhWzBdIC0gYlswXSxcbiAgICAgIHAxID0gYVsxXSAtIGJbMV0sXG4gICAgICBzaW5DID0gTWF0aC5zaW4ocmFkKSxcbiAgICAgIGNvc0MgPSBNYXRoLmNvcyhyYWQpOyAvL3BlcmZvcm0gcm90YXRpb24gYW5kIHRyYW5zbGF0ZSB0byBjb3JyZWN0IHBvc2l0aW9uXG5cbiAgb3V0WzBdID0gcDAgKiBjb3NDIC0gcDEgKiBzaW5DICsgYlswXTtcbiAgb3V0WzFdID0gcDAgKiBzaW5DICsgcDEgKiBjb3NDICsgYlsxXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBHZXQgdGhlIGFuZ2xlIGJldHdlZW4gdHdvIDJEIHZlY3RvcnNcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzJ9IGEgVGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzJ9IGIgVGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBhbmdsZSBpbiByYWRpYW5zXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gYW5nbGUoYSwgYikge1xuICB2YXIgeDEgPSBhWzBdLFxuICAgICAgeTEgPSBhWzFdLFxuICAgICAgeDIgPSBiWzBdLFxuICAgICAgeTIgPSBiWzFdLFxuICAgICAgLy8gbWFnIGlzIHRoZSBwcm9kdWN0IG9mIHRoZSBtYWduaXR1ZGVzIG9mIGEgYW5kIGJcbiAgbWFnID0gTWF0aC5zcXJ0KHgxICogeDEgKyB5MSAqIHkxKSAqIE1hdGguc3FydCh4MiAqIHgyICsgeTIgKiB5MiksXG4gICAgICAvLyBtYWcgJiYuLiBzaG9ydCBjaXJjdWl0cyBpZiBtYWcgPT0gMFxuICBjb3NpbmUgPSBtYWcgJiYgKHgxICogeDIgKyB5MSAqIHkyKSAvIG1hZzsgLy8gTWF0aC5taW4oTWF0aC5tYXgoY29zaW5lLCAtMSksIDEpIGNsYW1wcyB0aGUgY29zaW5lIGJldHdlZW4gLTEgYW5kIDFcblxuICByZXR1cm4gTWF0aC5hY29zKE1hdGgubWluKE1hdGgubWF4KGNvc2luZSwgLTEpLCAxKSk7XG59XG4vKipcclxuICogU2V0IHRoZSBjb21wb25lbnRzIG9mIGEgdmVjMiB0byB6ZXJvXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB6ZXJvKG91dCkge1xuICBvdXRbMF0gPSAwLjA7XG4gIG91dFsxXSA9IDAuMDtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgdmVjdG9yXHJcbiAqXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMyfSBhIHZlY3RvciB0byByZXByZXNlbnQgYXMgYSBzdHJpbmdcclxuICogQHJldHVybnMge1N0cmluZ30gc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2ZWN0b3JcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzdHIoYSkge1xuICByZXR1cm4gXCJ2ZWMyKFwiICsgYVswXSArIFwiLCBcIiArIGFbMV0gKyBcIilcIjtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSB2ZWN0b3JzIGV4YWN0bHkgaGF2ZSB0aGUgc2FtZSBlbGVtZW50cyBpbiB0aGUgc2FtZSBwb3NpdGlvbiAod2hlbiBjb21wYXJlZCB3aXRoID09PSlcclxuICpcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzJ9IGEgVGhlIGZpcnN0IHZlY3Rvci5cclxuICogQHBhcmFtIHtSZWFkb25seVZlYzJ9IGIgVGhlIHNlY29uZCB2ZWN0b3IuXHJcbiAqIEByZXR1cm5zIHtCb29sZWFufSBUcnVlIGlmIHRoZSB2ZWN0b3JzIGFyZSBlcXVhbCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGV4YWN0RXF1YWxzKGEsIGIpIHtcbiAgcmV0dXJuIGFbMF0gPT09IGJbMF0gJiYgYVsxXSA9PT0gYlsxXTtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSB2ZWN0b3JzIGhhdmUgYXBwcm94aW1hdGVseSB0aGUgc2FtZSBlbGVtZW50cyBpbiB0aGUgc2FtZSBwb3NpdGlvbi5cclxuICpcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzJ9IGEgVGhlIGZpcnN0IHZlY3Rvci5cclxuICogQHBhcmFtIHtSZWFkb25seVZlYzJ9IGIgVGhlIHNlY29uZCB2ZWN0b3IuXHJcbiAqIEByZXR1cm5zIHtCb29sZWFufSBUcnVlIGlmIHRoZSB2ZWN0b3JzIGFyZSBlcXVhbCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWFscyhhLCBiKSB7XG4gIHZhciBhMCA9IGFbMF0sXG4gICAgICBhMSA9IGFbMV07XG4gIHZhciBiMCA9IGJbMF0sXG4gICAgICBiMSA9IGJbMV07XG4gIHJldHVybiBNYXRoLmFicyhhMCAtIGIwKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMCksIE1hdGguYWJzKGIwKSkgJiYgTWF0aC5hYnMoYTEgLSBiMSkgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTEpLCBNYXRoLmFicyhiMSkpO1xufVxuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjMi5sZW5ndGh9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBsZW4gPSBsZW5ndGg7XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMyLnN1YnRyYWN0fVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgc3ViID0gc3VidHJhY3Q7XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMyLm11bHRpcGx5fVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgbXVsID0gbXVsdGlwbHk7XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMyLmRpdmlkZX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIGRpdiA9IGRpdmlkZTtcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzIuZGlzdGFuY2V9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBkaXN0ID0gZGlzdGFuY2U7XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMyLnNxdWFyZWREaXN0YW5jZX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIHNxckRpc3QgPSBzcXVhcmVkRGlzdGFuY2U7XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMyLnNxdWFyZWRMZW5ndGh9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBzcXJMZW4gPSBzcXVhcmVkTGVuZ3RoO1xuLyoqXHJcbiAqIFBlcmZvcm0gc29tZSBvcGVyYXRpb24gb3ZlciBhbiBhcnJheSBvZiB2ZWMycy5cclxuICpcclxuICogQHBhcmFtIHtBcnJheX0gYSB0aGUgYXJyYXkgb2YgdmVjdG9ycyB0byBpdGVyYXRlIG92ZXJcclxuICogQHBhcmFtIHtOdW1iZXJ9IHN0cmlkZSBOdW1iZXIgb2YgZWxlbWVudHMgYmV0d2VlbiB0aGUgc3RhcnQgb2YgZWFjaCB2ZWMyLiBJZiAwIGFzc3VtZXMgdGlnaHRseSBwYWNrZWRcclxuICogQHBhcmFtIHtOdW1iZXJ9IG9mZnNldCBOdW1iZXIgb2YgZWxlbWVudHMgdG8gc2tpcCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcnJheVxyXG4gKiBAcGFyYW0ge051bWJlcn0gY291bnQgTnVtYmVyIG9mIHZlYzJzIHRvIGl0ZXJhdGUgb3Zlci4gSWYgMCBpdGVyYXRlcyBvdmVyIGVudGlyZSBhcnJheVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBGdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIHZlY3RvciBpbiB0aGUgYXJyYXlcclxuICogQHBhcmFtIHtPYmplY3R9IFthcmddIGFkZGl0aW9uYWwgYXJndW1lbnQgdG8gcGFzcyB0byBmblxyXG4gKiBAcmV0dXJucyB7QXJyYXl9IGFcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIGZvckVhY2ggPSBmdW5jdGlvbiAoKSB7XG4gIHZhciB2ZWMgPSBjcmVhdGUoKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChhLCBzdHJpZGUsIG9mZnNldCwgY291bnQsIGZuLCBhcmcpIHtcbiAgICB2YXIgaSwgbDtcblxuICAgIGlmICghc3RyaWRlKSB7XG4gICAgICBzdHJpZGUgPSAyO1xuICAgIH1cblxuICAgIGlmICghb2Zmc2V0KSB7XG4gICAgICBvZmZzZXQgPSAwO1xuICAgIH1cblxuICAgIGlmIChjb3VudCkge1xuICAgICAgbCA9IE1hdGgubWluKGNvdW50ICogc3RyaWRlICsgb2Zmc2V0LCBhLmxlbmd0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGwgPSBhLmxlbmd0aDtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSBvZmZzZXQ7IGkgPCBsOyBpICs9IHN0cmlkZSkge1xuICAgICAgdmVjWzBdID0gYVtpXTtcbiAgICAgIHZlY1sxXSA9IGFbaSArIDFdO1xuICAgICAgZm4odmVjLCB2ZWMsIGFyZyk7XG4gICAgICBhW2ldID0gdmVjWzBdO1xuICAgICAgYVtpICsgMV0gPSB2ZWNbMV07XG4gICAgfVxuXG4gICAgcmV0dXJuIGE7XG4gIH07XG59KCk7IiwiaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLm1hdGguaHlwb3QuanNcIjtcbmltcG9ydCAqIGFzIGdsTWF0cml4IGZyb20gXCIuL2NvbW1vbi5qc1wiO1xuLyoqXHJcbiAqIDMgRGltZW5zaW9uYWwgVmVjdG9yXHJcbiAqIEBtb2R1bGUgdmVjM1xyXG4gKi9cblxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcsIGVtcHR5IHZlYzNcclxuICpcclxuICogQHJldHVybnMge3ZlYzN9IGEgbmV3IDNEIHZlY3RvclxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgdmFyIG91dCA9IG5ldyBnbE1hdHJpeC5BUlJBWV9UWVBFKDMpO1xuXG4gIGlmIChnbE1hdHJpeC5BUlJBWV9UWVBFICE9IEZsb2F0MzJBcnJheSkge1xuICAgIG91dFswXSA9IDA7XG4gICAgb3V0WzFdID0gMDtcbiAgICBvdXRbMl0gPSAwO1xuICB9XG5cbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IHZlYzMgaW5pdGlhbGl6ZWQgd2l0aCB2YWx1ZXMgZnJvbSBhbiBleGlzdGluZyB2ZWN0b3JcclxuICpcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzN9IGEgdmVjdG9yIHRvIGNsb25lXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBhIG5ldyAzRCB2ZWN0b3JcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjbG9uZShhKSB7XG4gIHZhciBvdXQgPSBuZXcgZ2xNYXRyaXguQVJSQVlfVFlQRSgzKTtcbiAgb3V0WzBdID0gYVswXTtcbiAgb3V0WzFdID0gYVsxXTtcbiAgb3V0WzJdID0gYVsyXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBsZW5ndGggb2YgYSB2ZWMzXHJcbiAqXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMzfSBhIHZlY3RvciB0byBjYWxjdWxhdGUgbGVuZ3RoIG9mXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGxlbmd0aCBvZiBhXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbGVuZ3RoKGEpIHtcbiAgdmFyIHggPSBhWzBdO1xuICB2YXIgeSA9IGFbMV07XG4gIHZhciB6ID0gYVsyXTtcbiAgcmV0dXJuIE1hdGguaHlwb3QoeCwgeSwgeik7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyB2ZWMzIGluaXRpYWxpemVkIHdpdGggdGhlIGdpdmVuIHZhbHVlc1xyXG4gKlxyXG4gKiBAcGFyYW0ge051bWJlcn0geCBYIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0geSBZIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0geiBaIGNvbXBvbmVudFxyXG4gKiBAcmV0dXJucyB7dmVjM30gYSBuZXcgM0QgdmVjdG9yXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVZhbHVlcyh4LCB5LCB6KSB7XG4gIHZhciBvdXQgPSBuZXcgZ2xNYXRyaXguQVJSQVlfVFlQRSgzKTtcbiAgb3V0WzBdID0geDtcbiAgb3V0WzFdID0geTtcbiAgb3V0WzJdID0gejtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDb3B5IHRoZSB2YWx1ZXMgZnJvbSBvbmUgdmVjMyB0byBhbm90aGVyXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMzfSBhIHRoZSBzb3VyY2UgdmVjdG9yXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjb3B5KG91dCwgYSkge1xuICBvdXRbMF0gPSBhWzBdO1xuICBvdXRbMV0gPSBhWzFdO1xuICBvdXRbMl0gPSBhWzJdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFNldCB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzMgdG8gdGhlIGdpdmVuIHZhbHVlc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge051bWJlcn0geCBYIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0geSBZIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0geiBaIGNvbXBvbmVudFxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc2V0KG91dCwgeCwgeSwgeikge1xuICBvdXRbMF0gPSB4O1xuICBvdXRbMV0gPSB5O1xuICBvdXRbMl0gPSB6O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIEFkZHMgdHdvIHZlYzMnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjM30gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZChvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gYVswXSArIGJbMF07XG4gIG91dFsxXSA9IGFbMV0gKyBiWzFdO1xuICBvdXRbMl0gPSBhWzJdICsgYlsyXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBTdWJ0cmFjdHMgdmVjdG9yIGIgZnJvbSB2ZWN0b3IgYVxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjM30gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnRyYWN0KG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdIC0gYlswXTtcbiAgb3V0WzFdID0gYVsxXSAtIGJbMV07XG4gIG91dFsyXSA9IGFbMl0gLSBiWzJdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIE11bHRpcGxpZXMgdHdvIHZlYzMnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjM30gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG11bHRpcGx5KG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdICogYlswXTtcbiAgb3V0WzFdID0gYVsxXSAqIGJbMV07XG4gIG91dFsyXSA9IGFbMl0gKiBiWzJdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIERpdmlkZXMgdHdvIHZlYzMnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjM30gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGRpdmlkZShvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gYVswXSAvIGJbMF07XG4gIG91dFsxXSA9IGFbMV0gLyBiWzFdO1xuICBvdXRbMl0gPSBhWzJdIC8gYlsyXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBNYXRoLmNlaWwgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWMzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMzfSBhIHZlY3RvciB0byBjZWlsXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjZWlsKG91dCwgYSkge1xuICBvdXRbMF0gPSBNYXRoLmNlaWwoYVswXSk7XG4gIG91dFsxXSA9IE1hdGguY2VpbChhWzFdKTtcbiAgb3V0WzJdID0gTWF0aC5jZWlsKGFbMl0pO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIE1hdGguZmxvb3IgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWMzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMzfSBhIHZlY3RvciB0byBmbG9vclxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZmxvb3Iob3V0LCBhKSB7XG4gIG91dFswXSA9IE1hdGguZmxvb3IoYVswXSk7XG4gIG91dFsxXSA9IE1hdGguZmxvb3IoYVsxXSk7XG4gIG91dFsyXSA9IE1hdGguZmxvb3IoYVsyXSk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUmV0dXJucyB0aGUgbWluaW11bSBvZiB0d28gdmVjMydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMzfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbWluKG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBNYXRoLm1pbihhWzBdLCBiWzBdKTtcbiAgb3V0WzFdID0gTWF0aC5taW4oYVsxXSwgYlsxXSk7XG4gIG91dFsyXSA9IE1hdGgubWluKGFbMl0sIGJbMl0pO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJldHVybnMgdGhlIG1heGltdW0gb2YgdHdvIHZlYzMnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjM30gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG1heChvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gTWF0aC5tYXgoYVswXSwgYlswXSk7XG4gIG91dFsxXSA9IE1hdGgubWF4KGFbMV0sIGJbMV0pO1xuICBvdXRbMl0gPSBNYXRoLm1heChhWzJdLCBiWzJdKTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBNYXRoLnJvdW5kIHRoZSBjb21wb25lbnRzIG9mIGEgdmVjM1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjM30gYSB2ZWN0b3IgdG8gcm91bmRcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHJvdW5kKG91dCwgYSkge1xuICBvdXRbMF0gPSBNYXRoLnJvdW5kKGFbMF0pO1xuICBvdXRbMV0gPSBNYXRoLnJvdW5kKGFbMV0pO1xuICBvdXRbMl0gPSBNYXRoLnJvdW5kKGFbMl0pO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFNjYWxlcyBhIHZlYzMgYnkgYSBzY2FsYXIgbnVtYmVyXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMzfSBhIHRoZSB2ZWN0b3IgdG8gc2NhbGVcclxuICogQHBhcmFtIHtOdW1iZXJ9IGIgYW1vdW50IHRvIHNjYWxlIHRoZSB2ZWN0b3IgYnlcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNjYWxlKG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdICogYjtcbiAgb3V0WzFdID0gYVsxXSAqIGI7XG4gIG91dFsyXSA9IGFbMl0gKiBiO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIEFkZHMgdHdvIHZlYzMncyBhZnRlciBzY2FsaW5nIHRoZSBzZWNvbmQgb3BlcmFuZCBieSBhIHNjYWxhciB2YWx1ZVxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjM30gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHNjYWxlIHRoZSBhbW91bnQgdG8gc2NhbGUgYiBieSBiZWZvcmUgYWRkaW5nXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzY2FsZUFuZEFkZChvdXQsIGEsIGIsIHNjYWxlKSB7XG4gIG91dFswXSA9IGFbMF0gKyBiWzBdICogc2NhbGU7XG4gIG91dFsxXSA9IGFbMV0gKyBiWzFdICogc2NhbGU7XG4gIG91dFsyXSA9IGFbMl0gKyBiWzJdICogc2NhbGU7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgZXVjbGlkaWFuIGRpc3RhbmNlIGJldHdlZW4gdHdvIHZlYzMnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjM30gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge051bWJlcn0gZGlzdGFuY2UgYmV0d2VlbiBhIGFuZCBiXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZGlzdGFuY2UoYSwgYikge1xuICB2YXIgeCA9IGJbMF0gLSBhWzBdO1xuICB2YXIgeSA9IGJbMV0gLSBhWzFdO1xuICB2YXIgeiA9IGJbMl0gLSBhWzJdO1xuICByZXR1cm4gTWF0aC5oeXBvdCh4LCB5LCB6KTtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBzcXVhcmVkIGV1Y2xpZGlhbiBkaXN0YW5jZSBiZXR3ZWVuIHR3byB2ZWMzJ3NcclxuICpcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IHNxdWFyZWQgZGlzdGFuY2UgYmV0d2VlbiBhIGFuZCBiXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc3F1YXJlZERpc3RhbmNlKGEsIGIpIHtcbiAgdmFyIHggPSBiWzBdIC0gYVswXTtcbiAgdmFyIHkgPSBiWzFdIC0gYVsxXTtcbiAgdmFyIHogPSBiWzJdIC0gYVsyXTtcbiAgcmV0dXJuIHggKiB4ICsgeSAqIHkgKyB6ICogejtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBzcXVhcmVkIGxlbmd0aCBvZiBhIHZlYzNcclxuICpcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzN9IGEgdmVjdG9yIHRvIGNhbGN1bGF0ZSBzcXVhcmVkIGxlbmd0aCBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBzcXVhcmVkIGxlbmd0aCBvZiBhXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc3F1YXJlZExlbmd0aChhKSB7XG4gIHZhciB4ID0gYVswXTtcbiAgdmFyIHkgPSBhWzFdO1xuICB2YXIgeiA9IGFbMl07XG4gIHJldHVybiB4ICogeCArIHkgKiB5ICsgeiAqIHo7XG59XG4vKipcclxuICogTmVnYXRlcyB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzNcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzN9IGEgdmVjdG9yIHRvIG5lZ2F0ZVxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbmVnYXRlKG91dCwgYSkge1xuICBvdXRbMF0gPSAtYVswXTtcbiAgb3V0WzFdID0gLWFbMV07XG4gIG91dFsyXSA9IC1hWzJdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJldHVybnMgdGhlIGludmVyc2Ugb2YgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWMzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMzfSBhIHZlY3RvciB0byBpbnZlcnRcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGludmVyc2Uob3V0LCBhKSB7XG4gIG91dFswXSA9IDEuMCAvIGFbMF07XG4gIG91dFsxXSA9IDEuMCAvIGFbMV07XG4gIG91dFsyXSA9IDEuMCAvIGFbMl07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogTm9ybWFsaXplIGEgdmVjM1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjM30gYSB2ZWN0b3IgdG8gbm9ybWFsaXplXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemUob3V0LCBhKSB7XG4gIHZhciB4ID0gYVswXTtcbiAgdmFyIHkgPSBhWzFdO1xuICB2YXIgeiA9IGFbMl07XG4gIHZhciBsZW4gPSB4ICogeCArIHkgKiB5ICsgeiAqIHo7XG5cbiAgaWYgKGxlbiA+IDApIHtcbiAgICAvL1RPRE86IGV2YWx1YXRlIHVzZSBvZiBnbG1faW52c3FydCBoZXJlP1xuICAgIGxlbiA9IDEgLyBNYXRoLnNxcnQobGVuKTtcbiAgfVxuXG4gIG91dFswXSA9IGFbMF0gKiBsZW47XG4gIG91dFsxXSA9IGFbMV0gKiBsZW47XG4gIG91dFsyXSA9IGFbMl0gKiBsZW47XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgZG90IHByb2R1Y3Qgb2YgdHdvIHZlYzMnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjM30gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge051bWJlcn0gZG90IHByb2R1Y3Qgb2YgYSBhbmQgYlxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGRvdChhLCBiKSB7XG4gIHJldHVybiBhWzBdICogYlswXSArIGFbMV0gKiBiWzFdICsgYVsyXSAqIGJbMl07XG59XG4vKipcclxuICogQ29tcHV0ZXMgdGhlIGNyb3NzIHByb2R1Y3Qgb2YgdHdvIHZlYzMnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjM30gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNyb3NzKG91dCwgYSwgYikge1xuICB2YXIgYXggPSBhWzBdLFxuICAgICAgYXkgPSBhWzFdLFxuICAgICAgYXogPSBhWzJdO1xuICB2YXIgYnggPSBiWzBdLFxuICAgICAgYnkgPSBiWzFdLFxuICAgICAgYnogPSBiWzJdO1xuICBvdXRbMF0gPSBheSAqIGJ6IC0gYXogKiBieTtcbiAgb3V0WzFdID0gYXogKiBieCAtIGF4ICogYno7XG4gIG91dFsyXSA9IGF4ICogYnkgLSBheSAqIGJ4O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFBlcmZvcm1zIGEgbGluZWFyIGludGVycG9sYXRpb24gYmV0d2VlbiB0d28gdmVjMydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMzfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gdCBpbnRlcnBvbGF0aW9uIGFtb3VudCwgaW4gdGhlIHJhbmdlIFswLTFdLCBiZXR3ZWVuIHRoZSB0d28gaW5wdXRzXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBsZXJwKG91dCwgYSwgYiwgdCkge1xuICB2YXIgYXggPSBhWzBdO1xuICB2YXIgYXkgPSBhWzFdO1xuICB2YXIgYXogPSBhWzJdO1xuICBvdXRbMF0gPSBheCArIHQgKiAoYlswXSAtIGF4KTtcbiAgb3V0WzFdID0gYXkgKyB0ICogKGJbMV0gLSBheSk7XG4gIG91dFsyXSA9IGF6ICsgdCAqIChiWzJdIC0gYXopO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFBlcmZvcm1zIGEgaGVybWl0ZSBpbnRlcnBvbGF0aW9uIHdpdGggdHdvIGNvbnRyb2wgcG9pbnRzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMzfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjM30gYyB0aGUgdGhpcmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjM30gZCB0aGUgZm91cnRoIG9wZXJhbmRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHQgaW50ZXJwb2xhdGlvbiBhbW91bnQsIGluIHRoZSByYW5nZSBbMC0xXSwgYmV0d2VlbiB0aGUgdHdvIGlucHV0c1xyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaGVybWl0ZShvdXQsIGEsIGIsIGMsIGQsIHQpIHtcbiAgdmFyIGZhY3RvclRpbWVzMiA9IHQgKiB0O1xuICB2YXIgZmFjdG9yMSA9IGZhY3RvclRpbWVzMiAqICgyICogdCAtIDMpICsgMTtcbiAgdmFyIGZhY3RvcjIgPSBmYWN0b3JUaW1lczIgKiAodCAtIDIpICsgdDtcbiAgdmFyIGZhY3RvcjMgPSBmYWN0b3JUaW1lczIgKiAodCAtIDEpO1xuICB2YXIgZmFjdG9yNCA9IGZhY3RvclRpbWVzMiAqICgzIC0gMiAqIHQpO1xuICBvdXRbMF0gPSBhWzBdICogZmFjdG9yMSArIGJbMF0gKiBmYWN0b3IyICsgY1swXSAqIGZhY3RvcjMgKyBkWzBdICogZmFjdG9yNDtcbiAgb3V0WzFdID0gYVsxXSAqIGZhY3RvcjEgKyBiWzFdICogZmFjdG9yMiArIGNbMV0gKiBmYWN0b3IzICsgZFsxXSAqIGZhY3RvcjQ7XG4gIG91dFsyXSA9IGFbMl0gKiBmYWN0b3IxICsgYlsyXSAqIGZhY3RvcjIgKyBjWzJdICogZmFjdG9yMyArIGRbMl0gKiBmYWN0b3I0O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFBlcmZvcm1zIGEgYmV6aWVyIGludGVycG9sYXRpb24gd2l0aCB0d28gY29udHJvbCBwb2ludHNcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMzfSBjIHRoZSB0aGlyZCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMzfSBkIHRoZSBmb3VydGggb3BlcmFuZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gdCBpbnRlcnBvbGF0aW9uIGFtb3VudCwgaW4gdGhlIHJhbmdlIFswLTFdLCBiZXR3ZWVuIHRoZSB0d28gaW5wdXRzXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBiZXppZXIob3V0LCBhLCBiLCBjLCBkLCB0KSB7XG4gIHZhciBpbnZlcnNlRmFjdG9yID0gMSAtIHQ7XG4gIHZhciBpbnZlcnNlRmFjdG9yVGltZXNUd28gPSBpbnZlcnNlRmFjdG9yICogaW52ZXJzZUZhY3RvcjtcbiAgdmFyIGZhY3RvclRpbWVzMiA9IHQgKiB0O1xuICB2YXIgZmFjdG9yMSA9IGludmVyc2VGYWN0b3JUaW1lc1R3byAqIGludmVyc2VGYWN0b3I7XG4gIHZhciBmYWN0b3IyID0gMyAqIHQgKiBpbnZlcnNlRmFjdG9yVGltZXNUd287XG4gIHZhciBmYWN0b3IzID0gMyAqIGZhY3RvclRpbWVzMiAqIGludmVyc2VGYWN0b3I7XG4gIHZhciBmYWN0b3I0ID0gZmFjdG9yVGltZXMyICogdDtcbiAgb3V0WzBdID0gYVswXSAqIGZhY3RvcjEgKyBiWzBdICogZmFjdG9yMiArIGNbMF0gKiBmYWN0b3IzICsgZFswXSAqIGZhY3RvcjQ7XG4gIG91dFsxXSA9IGFbMV0gKiBmYWN0b3IxICsgYlsxXSAqIGZhY3RvcjIgKyBjWzFdICogZmFjdG9yMyArIGRbMV0gKiBmYWN0b3I0O1xuICBvdXRbMl0gPSBhWzJdICogZmFjdG9yMSArIGJbMl0gKiBmYWN0b3IyICsgY1syXSAqIGZhY3RvcjMgKyBkWzJdICogZmFjdG9yNDtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBHZW5lcmF0ZXMgYSByYW5kb20gdmVjdG9yIHdpdGggdGhlIGdpdmVuIHNjYWxlXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBbc2NhbGVdIExlbmd0aCBvZiB0aGUgcmVzdWx0aW5nIHZlY3Rvci4gSWYgb21taXR0ZWQsIGEgdW5pdCB2ZWN0b3Igd2lsbCBiZSByZXR1cm5lZFxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcmFuZG9tKG91dCwgc2NhbGUpIHtcbiAgc2NhbGUgPSBzY2FsZSB8fCAxLjA7XG4gIHZhciByID0gZ2xNYXRyaXguUkFORE9NKCkgKiAyLjAgKiBNYXRoLlBJO1xuICB2YXIgeiA9IGdsTWF0cml4LlJBTkRPTSgpICogMi4wIC0gMS4wO1xuICB2YXIgelNjYWxlID0gTWF0aC5zcXJ0KDEuMCAtIHogKiB6KSAqIHNjYWxlO1xuICBvdXRbMF0gPSBNYXRoLmNvcyhyKSAqIHpTY2FsZTtcbiAgb3V0WzFdID0gTWF0aC5zaW4ocikgKiB6U2NhbGU7XG4gIG91dFsyXSA9IHogKiBzY2FsZTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBUcmFuc2Zvcm1zIHRoZSB2ZWMzIHdpdGggYSBtYXQ0LlxyXG4gKiA0dGggdmVjdG9yIGNvbXBvbmVudCBpcyBpbXBsaWNpdGx5ICcxJ1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjM30gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5TWF0NH0gbSBtYXRyaXggdG8gdHJhbnNmb3JtIHdpdGhcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybU1hdDQob3V0LCBhLCBtKSB7XG4gIHZhciB4ID0gYVswXSxcbiAgICAgIHkgPSBhWzFdLFxuICAgICAgeiA9IGFbMl07XG4gIHZhciB3ID0gbVszXSAqIHggKyBtWzddICogeSArIG1bMTFdICogeiArIG1bMTVdO1xuICB3ID0gdyB8fCAxLjA7XG4gIG91dFswXSA9IChtWzBdICogeCArIG1bNF0gKiB5ICsgbVs4XSAqIHogKyBtWzEyXSkgLyB3O1xuICBvdXRbMV0gPSAobVsxXSAqIHggKyBtWzVdICogeSArIG1bOV0gKiB6ICsgbVsxM10pIC8gdztcbiAgb3V0WzJdID0gKG1bMl0gKiB4ICsgbVs2XSAqIHkgKyBtWzEwXSAqIHogKyBtWzE0XSkgLyB3O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFRyYW5zZm9ybXMgdGhlIHZlYzMgd2l0aCBhIG1hdDMuXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMzfSBhIHRoZSB2ZWN0b3IgdG8gdHJhbnNmb3JtXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlNYXQzfSBtIHRoZSAzeDMgbWF0cml4IHRvIHRyYW5zZm9ybSB3aXRoXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2Zvcm1NYXQzKG91dCwgYSwgbSkge1xuICB2YXIgeCA9IGFbMF0sXG4gICAgICB5ID0gYVsxXSxcbiAgICAgIHogPSBhWzJdO1xuICBvdXRbMF0gPSB4ICogbVswXSArIHkgKiBtWzNdICsgeiAqIG1bNl07XG4gIG91dFsxXSA9IHggKiBtWzFdICsgeSAqIG1bNF0gKyB6ICogbVs3XTtcbiAgb3V0WzJdID0geCAqIG1bMl0gKyB5ICogbVs1XSArIHogKiBtWzhdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFRyYW5zZm9ybXMgdGhlIHZlYzMgd2l0aCBhIHF1YXRcclxuICogQ2FuIGFsc28gYmUgdXNlZCBmb3IgZHVhbCBxdWF0ZXJuaW9ucy4gKE11bHRpcGx5IGl0IHdpdGggdGhlIHJlYWwgcGFydClcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzN9IGEgdGhlIHZlY3RvciB0byB0cmFuc2Zvcm1cclxuICogQHBhcmFtIHtSZWFkb25seVF1YXR9IHEgcXVhdGVybmlvbiB0byB0cmFuc2Zvcm0gd2l0aFxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtUXVhdChvdXQsIGEsIHEpIHtcbiAgLy8gYmVuY2htYXJrczogaHR0cHM6Ly9qc3BlcmYuY29tL3F1YXRlcm5pb24tdHJhbnNmb3JtLXZlYzMtaW1wbGVtZW50YXRpb25zLWZpeGVkXG4gIHZhciBxeCA9IHFbMF0sXG4gICAgICBxeSA9IHFbMV0sXG4gICAgICBxeiA9IHFbMl0sXG4gICAgICBxdyA9IHFbM107XG4gIHZhciB4ID0gYVswXSxcbiAgICAgIHkgPSBhWzFdLFxuICAgICAgeiA9IGFbMl07IC8vIHZhciBxdmVjID0gW3F4LCBxeSwgcXpdO1xuICAvLyB2YXIgdXYgPSB2ZWMzLmNyb3NzKFtdLCBxdmVjLCBhKTtcblxuICB2YXIgdXZ4ID0gcXkgKiB6IC0gcXogKiB5LFxuICAgICAgdXZ5ID0gcXogKiB4IC0gcXggKiB6LFxuICAgICAgdXZ6ID0gcXggKiB5IC0gcXkgKiB4OyAvLyB2YXIgdXV2ID0gdmVjMy5jcm9zcyhbXSwgcXZlYywgdXYpO1xuXG4gIHZhciB1dXZ4ID0gcXkgKiB1dnogLSBxeiAqIHV2eSxcbiAgICAgIHV1dnkgPSBxeiAqIHV2eCAtIHF4ICogdXZ6LFxuICAgICAgdXV2eiA9IHF4ICogdXZ5IC0gcXkgKiB1dng7IC8vIHZlYzMuc2NhbGUodXYsIHV2LCAyICogdyk7XG5cbiAgdmFyIHcyID0gcXcgKiAyO1xuICB1dnggKj0gdzI7XG4gIHV2eSAqPSB3MjtcbiAgdXZ6ICo9IHcyOyAvLyB2ZWMzLnNjYWxlKHV1diwgdXV2LCAyKTtcblxuICB1dXZ4ICo9IDI7XG4gIHV1dnkgKj0gMjtcbiAgdXV2eiAqPSAyOyAvLyByZXR1cm4gdmVjMy5hZGQob3V0LCBhLCB2ZWMzLmFkZChvdXQsIHV2LCB1dXYpKTtcblxuICBvdXRbMF0gPSB4ICsgdXZ4ICsgdXV2eDtcbiAgb3V0WzFdID0geSArIHV2eSArIHV1dnk7XG4gIG91dFsyXSA9IHogKyB1dnogKyB1dXZ6O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJvdGF0ZSBhIDNEIHZlY3RvciBhcm91bmQgdGhlIHgtYXhpc1xyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCBUaGUgcmVjZWl2aW5nIHZlYzNcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzN9IGEgVGhlIHZlYzMgcG9pbnQgdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMzfSBiIFRoZSBvcmlnaW4gb2YgdGhlIHJvdGF0aW9uXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgVGhlIGFuZ2xlIG9mIHJvdGF0aW9uIGluIHJhZGlhbnNcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHJvdGF0ZVgob3V0LCBhLCBiLCByYWQpIHtcbiAgdmFyIHAgPSBbXSxcbiAgICAgIHIgPSBbXTsgLy9UcmFuc2xhdGUgcG9pbnQgdG8gdGhlIG9yaWdpblxuXG4gIHBbMF0gPSBhWzBdIC0gYlswXTtcbiAgcFsxXSA9IGFbMV0gLSBiWzFdO1xuICBwWzJdID0gYVsyXSAtIGJbMl07IC8vcGVyZm9ybSByb3RhdGlvblxuXG4gIHJbMF0gPSBwWzBdO1xuICByWzFdID0gcFsxXSAqIE1hdGguY29zKHJhZCkgLSBwWzJdICogTWF0aC5zaW4ocmFkKTtcbiAgclsyXSA9IHBbMV0gKiBNYXRoLnNpbihyYWQpICsgcFsyXSAqIE1hdGguY29zKHJhZCk7IC8vdHJhbnNsYXRlIHRvIGNvcnJlY3QgcG9zaXRpb25cblxuICBvdXRbMF0gPSByWzBdICsgYlswXTtcbiAgb3V0WzFdID0gclsxXSArIGJbMV07XG4gIG91dFsyXSA9IHJbMl0gKyBiWzJdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJvdGF0ZSBhIDNEIHZlY3RvciBhcm91bmQgdGhlIHktYXhpc1xyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCBUaGUgcmVjZWl2aW5nIHZlYzNcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzN9IGEgVGhlIHZlYzMgcG9pbnQgdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMzfSBiIFRoZSBvcmlnaW4gb2YgdGhlIHJvdGF0aW9uXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgVGhlIGFuZ2xlIG9mIHJvdGF0aW9uIGluIHJhZGlhbnNcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHJvdGF0ZVkob3V0LCBhLCBiLCByYWQpIHtcbiAgdmFyIHAgPSBbXSxcbiAgICAgIHIgPSBbXTsgLy9UcmFuc2xhdGUgcG9pbnQgdG8gdGhlIG9yaWdpblxuXG4gIHBbMF0gPSBhWzBdIC0gYlswXTtcbiAgcFsxXSA9IGFbMV0gLSBiWzFdO1xuICBwWzJdID0gYVsyXSAtIGJbMl07IC8vcGVyZm9ybSByb3RhdGlvblxuXG4gIHJbMF0gPSBwWzJdICogTWF0aC5zaW4ocmFkKSArIHBbMF0gKiBNYXRoLmNvcyhyYWQpO1xuICByWzFdID0gcFsxXTtcbiAgclsyXSA9IHBbMl0gKiBNYXRoLmNvcyhyYWQpIC0gcFswXSAqIE1hdGguc2luKHJhZCk7IC8vdHJhbnNsYXRlIHRvIGNvcnJlY3QgcG9zaXRpb25cblxuICBvdXRbMF0gPSByWzBdICsgYlswXTtcbiAgb3V0WzFdID0gclsxXSArIGJbMV07XG4gIG91dFsyXSA9IHJbMl0gKyBiWzJdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJvdGF0ZSBhIDNEIHZlY3RvciBhcm91bmQgdGhlIHotYXhpc1xyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCBUaGUgcmVjZWl2aW5nIHZlYzNcclxuICogQHBhcmFtIHtSZWFkb25seVZlYzN9IGEgVGhlIHZlYzMgcG9pbnQgdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMzfSBiIFRoZSBvcmlnaW4gb2YgdGhlIHJvdGF0aW9uXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgVGhlIGFuZ2xlIG9mIHJvdGF0aW9uIGluIHJhZGlhbnNcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHJvdGF0ZVoob3V0LCBhLCBiLCByYWQpIHtcbiAgdmFyIHAgPSBbXSxcbiAgICAgIHIgPSBbXTsgLy9UcmFuc2xhdGUgcG9pbnQgdG8gdGhlIG9yaWdpblxuXG4gIHBbMF0gPSBhWzBdIC0gYlswXTtcbiAgcFsxXSA9IGFbMV0gLSBiWzFdO1xuICBwWzJdID0gYVsyXSAtIGJbMl07IC8vcGVyZm9ybSByb3RhdGlvblxuXG4gIHJbMF0gPSBwWzBdICogTWF0aC5jb3MocmFkKSAtIHBbMV0gKiBNYXRoLnNpbihyYWQpO1xuICByWzFdID0gcFswXSAqIE1hdGguc2luKHJhZCkgKyBwWzFdICogTWF0aC5jb3MocmFkKTtcbiAgclsyXSA9IHBbMl07IC8vdHJhbnNsYXRlIHRvIGNvcnJlY3QgcG9zaXRpb25cblxuICBvdXRbMF0gPSByWzBdICsgYlswXTtcbiAgb3V0WzFdID0gclsxXSArIGJbMV07XG4gIG91dFsyXSA9IHJbMl0gKyBiWzJdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIEdldCB0aGUgYW5nbGUgYmV0d2VlbiB0d28gM0QgdmVjdG9yc1xyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjM30gYSBUaGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjM30gYiBUaGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge051bWJlcn0gVGhlIGFuZ2xlIGluIHJhZGlhbnNcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBhbmdsZShhLCBiKSB7XG4gIHZhciBheCA9IGFbMF0sXG4gICAgICBheSA9IGFbMV0sXG4gICAgICBheiA9IGFbMl0sXG4gICAgICBieCA9IGJbMF0sXG4gICAgICBieSA9IGJbMV0sXG4gICAgICBieiA9IGJbMl0sXG4gICAgICBtYWcxID0gTWF0aC5zcXJ0KGF4ICogYXggKyBheSAqIGF5ICsgYXogKiBheiksXG4gICAgICBtYWcyID0gTWF0aC5zcXJ0KGJ4ICogYnggKyBieSAqIGJ5ICsgYnogKiBieiksXG4gICAgICBtYWcgPSBtYWcxICogbWFnMixcbiAgICAgIGNvc2luZSA9IG1hZyAmJiBkb3QoYSwgYikgLyBtYWc7XG4gIHJldHVybiBNYXRoLmFjb3MoTWF0aC5taW4oTWF0aC5tYXgoY29zaW5lLCAtMSksIDEpKTtcbn1cbi8qKlxyXG4gKiBTZXQgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWMzIHRvIHplcm9cclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHplcm8ob3V0KSB7XG4gIG91dFswXSA9IDAuMDtcbiAgb3V0WzFdID0gMC4wO1xuICBvdXRbMl0gPSAwLjA7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIHZlY3RvclxyXG4gKlxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjM30gYSB2ZWN0b3IgdG8gcmVwcmVzZW50IGFzIGEgc3RyaW5nXHJcbiAqIEByZXR1cm5zIHtTdHJpbmd9IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdmVjdG9yXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc3RyKGEpIHtcbiAgcmV0dXJuIFwidmVjMyhcIiArIGFbMF0gKyBcIiwgXCIgKyBhWzFdICsgXCIsIFwiICsgYVsyXSArIFwiKVwiO1xufVxuLyoqXHJcbiAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIHZlY3RvcnMgaGF2ZSBleGFjdGx5IHRoZSBzYW1lIGVsZW1lbnRzIGluIHRoZSBzYW1lIHBvc2l0aW9uICh3aGVuIGNvbXBhcmVkIHdpdGggPT09KVxyXG4gKlxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjM30gYSBUaGUgZmlyc3QgdmVjdG9yLlxyXG4gKiBAcGFyYW0ge1JlYWRvbmx5VmVjM30gYiBUaGUgc2Vjb25kIHZlY3Rvci5cclxuICogQHJldHVybnMge0Jvb2xlYW59IFRydWUgaWYgdGhlIHZlY3RvcnMgYXJlIGVxdWFsLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZXhhY3RFcXVhbHMoYSwgYikge1xuICByZXR1cm4gYVswXSA9PT0gYlswXSAmJiBhWzFdID09PSBiWzFdICYmIGFbMl0gPT09IGJbMl07XG59XG4vKipcclxuICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgdmVjdG9ycyBoYXZlIGFwcHJveGltYXRlbHkgdGhlIHNhbWUgZWxlbWVudHMgaW4gdGhlIHNhbWUgcG9zaXRpb24uXHJcbiAqXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMzfSBhIFRoZSBmaXJzdCB2ZWN0b3IuXHJcbiAqIEBwYXJhbSB7UmVhZG9ubHlWZWMzfSBiIFRoZSBzZWNvbmQgdmVjdG9yLlxyXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gVHJ1ZSBpZiB0aGUgdmVjdG9ycyBhcmUgZXF1YWwsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBlcXVhbHMoYSwgYikge1xuICB2YXIgYTAgPSBhWzBdLFxuICAgICAgYTEgPSBhWzFdLFxuICAgICAgYTIgPSBhWzJdO1xuICB2YXIgYjAgPSBiWzBdLFxuICAgICAgYjEgPSBiWzFdLFxuICAgICAgYjIgPSBiWzJdO1xuICByZXR1cm4gTWF0aC5hYnMoYTAgLSBiMCkgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTApLCBNYXRoLmFicyhiMCkpICYmIE1hdGguYWJzKGExIC0gYjEpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGExKSwgTWF0aC5hYnMoYjEpKSAmJiBNYXRoLmFicyhhMiAtIGIyKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMiksIE1hdGguYWJzKGIyKSk7XG59XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMzLnN1YnRyYWN0fVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgc3ViID0gc3VidHJhY3Q7XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMzLm11bHRpcGx5fVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgbXVsID0gbXVsdGlwbHk7XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMzLmRpdmlkZX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIGRpdiA9IGRpdmlkZTtcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzMuZGlzdGFuY2V9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBkaXN0ID0gZGlzdGFuY2U7XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMzLnNxdWFyZWREaXN0YW5jZX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIHNxckRpc3QgPSBzcXVhcmVkRGlzdGFuY2U7XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMzLmxlbmd0aH1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIGxlbiA9IGxlbmd0aDtcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzMuc3F1YXJlZExlbmd0aH1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIHNxckxlbiA9IHNxdWFyZWRMZW5ndGg7XG4vKipcclxuICogUGVyZm9ybSBzb21lIG9wZXJhdGlvbiBvdmVyIGFuIGFycmF5IG9mIHZlYzNzLlxyXG4gKlxyXG4gKiBAcGFyYW0ge0FycmF5fSBhIHRoZSBhcnJheSBvZiB2ZWN0b3JzIHRvIGl0ZXJhdGUgb3ZlclxyXG4gKiBAcGFyYW0ge051bWJlcn0gc3RyaWRlIE51bWJlciBvZiBlbGVtZW50cyBiZXR3ZWVuIHRoZSBzdGFydCBvZiBlYWNoIHZlYzMuIElmIDAgYXNzdW1lcyB0aWdodGx5IHBhY2tlZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gb2Zmc2V0IE51bWJlciBvZiBlbGVtZW50cyB0byBza2lwIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFycmF5XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBjb3VudCBOdW1iZXIgb2YgdmVjM3MgdG8gaXRlcmF0ZSBvdmVyLiBJZiAwIGl0ZXJhdGVzIG92ZXIgZW50aXJlIGFycmF5XHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIEZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggdmVjdG9yIGluIHRoZSBhcnJheVxyXG4gKiBAcGFyYW0ge09iamVjdH0gW2FyZ10gYWRkaXRpb25hbCBhcmd1bWVudCB0byBwYXNzIHRvIGZuXHJcbiAqIEByZXR1cm5zIHtBcnJheX0gYVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgZm9yRWFjaCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHZlYyA9IGNyZWF0ZSgpO1xuICByZXR1cm4gZnVuY3Rpb24gKGEsIHN0cmlkZSwgb2Zmc2V0LCBjb3VudCwgZm4sIGFyZykge1xuICAgIHZhciBpLCBsO1xuXG4gICAgaWYgKCFzdHJpZGUpIHtcbiAgICAgIHN0cmlkZSA9IDM7XG4gICAgfVxuXG4gICAgaWYgKCFvZmZzZXQpIHtcbiAgICAgIG9mZnNldCA9IDA7XG4gICAgfVxuXG4gICAgaWYgKGNvdW50KSB7XG4gICAgICBsID0gTWF0aC5taW4oY291bnQgKiBzdHJpZGUgKyBvZmZzZXQsIGEubGVuZ3RoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbCA9IGEubGVuZ3RoO1xuICAgIH1cblxuICAgIGZvciAoaSA9IG9mZnNldDsgaSA8IGw7IGkgKz0gc3RyaWRlKSB7XG4gICAgICB2ZWNbMF0gPSBhW2ldO1xuICAgICAgdmVjWzFdID0gYVtpICsgMV07XG4gICAgICB2ZWNbMl0gPSBhW2kgKyAyXTtcbiAgICAgIGZuKHZlYywgdmVjLCBhcmcpO1xuICAgICAgYVtpXSA9IHZlY1swXTtcbiAgICAgIGFbaSArIDFdID0gdmVjWzFdO1xuICAgICAgYVtpICsgMl0gPSB2ZWNbMl07XG4gICAgfVxuXG4gICAgcmV0dXJuIGE7XG4gIH07XG59KCk7IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYXNzZXJ0KGNvbmRpdGlvbiwgbWVzc2FnZSkge1xuICBpZiAoIWNvbmRpdGlvbikge1xuICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlIHx8ICdAbWF0aC5nbC93ZWItbWVyY2F0b3I6IGFzc2VydGlvbiBmYWlsZWQuJyk7XG4gIH1cbn0iLCJpbXBvcnQgX3NsaWNlZFRvQXJyYXkgZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL2p1c3RpY2U0MC10b29sL2p1c3RpY2U0MC10b29sL2NsaWVudC9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheVwiO1xuaW1wb3J0IHsgY3JlYXRlTWF0NCwgdHJhbnNmb3JtVmVjdG9yLCBsb2cyIH0gZnJvbSAnLi9tYXRoLXV0aWxzJztcbmltcG9ydCAqIGFzIG1hdDQgZnJvbSAnZ2wtbWF0cml4L21hdDQnO1xuaW1wb3J0ICogYXMgdmVjMiBmcm9tICdnbC1tYXRyaXgvdmVjMic7XG5pbXBvcnQgKiBhcyB2ZWMzIGZyb20gJ2dsLW1hdHJpeC92ZWMzJztcbmltcG9ydCBhc3NlcnQgZnJvbSAnLi9hc3NlcnQnO1xudmFyIFBJID0gTWF0aC5QSTtcbnZhciBQSV80ID0gUEkgLyA0O1xudmFyIERFR1JFRVNfVE9fUkFESUFOUyA9IFBJIC8gMTgwO1xudmFyIFJBRElBTlNfVE9fREVHUkVFUyA9IDE4MCAvIFBJO1xudmFyIFRJTEVfU0laRSA9IDUxMjtcbnZhciBFQVJUSF9DSVJDVU1GRVJFTkNFID0gNDAuMDNlNjtcbmV4cG9ydCB2YXIgREVGQVVMVF9BTFRJVFVERSA9IDEuNTtcbmV4cG9ydCBmdW5jdGlvbiB6b29tVG9TY2FsZSh6b29tKSB7XG4gIHJldHVybiBNYXRoLnBvdygyLCB6b29tKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBzY2FsZVRvWm9vbShzY2FsZSkge1xuICByZXR1cm4gbG9nMihzY2FsZSk7XG59XG5leHBvcnQgZnVuY3Rpb24gbG5nTGF0VG9Xb3JsZChfcmVmKSB7XG4gIHZhciBfcmVmMiA9IF9zbGljZWRUb0FycmF5KF9yZWYsIDIpLFxuICAgICAgbG5nID0gX3JlZjJbMF0sXG4gICAgICBsYXQgPSBfcmVmMlsxXTtcblxuICBhc3NlcnQoTnVtYmVyLmlzRmluaXRlKGxuZykpO1xuICBhc3NlcnQoTnVtYmVyLmlzRmluaXRlKGxhdCkgJiYgbGF0ID49IC05MCAmJiBsYXQgPD0gOTAsICdpbnZhbGlkIGxhdGl0dWRlJyk7XG4gIHZhciBsYW1iZGEyID0gbG5nICogREVHUkVFU19UT19SQURJQU5TO1xuICB2YXIgcGhpMiA9IGxhdCAqIERFR1JFRVNfVE9fUkFESUFOUztcbiAgdmFyIHggPSBUSUxFX1NJWkUgKiAobGFtYmRhMiArIFBJKSAvICgyICogUEkpO1xuICB2YXIgeSA9IFRJTEVfU0laRSAqIChQSSArIE1hdGgubG9nKE1hdGgudGFuKFBJXzQgKyBwaGkyICogMC41KSkpIC8gKDIgKiBQSSk7XG4gIHJldHVybiBbeCwgeV07XG59XG5leHBvcnQgZnVuY3Rpb24gd29ybGRUb0xuZ0xhdChfcmVmMykge1xuICB2YXIgX3JlZjQgPSBfc2xpY2VkVG9BcnJheShfcmVmMywgMiksXG4gICAgICB4ID0gX3JlZjRbMF0sXG4gICAgICB5ID0gX3JlZjRbMV07XG5cbiAgdmFyIGxhbWJkYTIgPSB4IC8gVElMRV9TSVpFICogKDIgKiBQSSkgLSBQSTtcbiAgdmFyIHBoaTIgPSAyICogKE1hdGguYXRhbihNYXRoLmV4cCh5IC8gVElMRV9TSVpFICogKDIgKiBQSSkgLSBQSSkpIC0gUElfNCk7XG4gIHJldHVybiBbbGFtYmRhMiAqIFJBRElBTlNfVE9fREVHUkVFUywgcGhpMiAqIFJBRElBTlNfVE9fREVHUkVFU107XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0TWV0ZXJab29tKF9yZWY1KSB7XG4gIHZhciBsYXRpdHVkZSA9IF9yZWY1LmxhdGl0dWRlO1xuICBhc3NlcnQoTnVtYmVyLmlzRmluaXRlKGxhdGl0dWRlKSk7XG4gIHZhciBsYXRDb3NpbmUgPSBNYXRoLmNvcyhsYXRpdHVkZSAqIERFR1JFRVNfVE9fUkFESUFOUyk7XG4gIHJldHVybiBzY2FsZVRvWm9vbShFQVJUSF9DSVJDVU1GRVJFTkNFICogbGF0Q29zaW5lKSAtIDk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0RGlzdGFuY2VTY2FsZXMoX3JlZjYpIHtcbiAgdmFyIGxhdGl0dWRlID0gX3JlZjYubGF0aXR1ZGUsXG4gICAgICBsb25naXR1ZGUgPSBfcmVmNi5sb25naXR1ZGUsXG4gICAgICBfcmVmNiRoaWdoUHJlY2lzaW9uID0gX3JlZjYuaGlnaFByZWNpc2lvbixcbiAgICAgIGhpZ2hQcmVjaXNpb24gPSBfcmVmNiRoaWdoUHJlY2lzaW9uID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWY2JGhpZ2hQcmVjaXNpb247XG4gIGFzc2VydChOdW1iZXIuaXNGaW5pdGUobGF0aXR1ZGUpICYmIE51bWJlci5pc0Zpbml0ZShsb25naXR1ZGUpKTtcbiAgdmFyIHJlc3VsdCA9IHt9O1xuICB2YXIgd29ybGRTaXplID0gVElMRV9TSVpFO1xuICB2YXIgbGF0Q29zaW5lID0gTWF0aC5jb3MobGF0aXR1ZGUgKiBERUdSRUVTX1RPX1JBRElBTlMpO1xuICB2YXIgdW5pdHNQZXJEZWdyZWVYID0gd29ybGRTaXplIC8gMzYwO1xuICB2YXIgdW5pdHNQZXJEZWdyZWVZID0gdW5pdHNQZXJEZWdyZWVYIC8gbGF0Q29zaW5lO1xuICB2YXIgYWx0VW5pdHNQZXJNZXRlciA9IHdvcmxkU2l6ZSAvIEVBUlRIX0NJUkNVTUZFUkVOQ0UgLyBsYXRDb3NpbmU7XG4gIHJlc3VsdC51bml0c1Blck1ldGVyID0gW2FsdFVuaXRzUGVyTWV0ZXIsIGFsdFVuaXRzUGVyTWV0ZXIsIGFsdFVuaXRzUGVyTWV0ZXJdO1xuICByZXN1bHQubWV0ZXJzUGVyVW5pdCA9IFsxIC8gYWx0VW5pdHNQZXJNZXRlciwgMSAvIGFsdFVuaXRzUGVyTWV0ZXIsIDEgLyBhbHRVbml0c1Blck1ldGVyXTtcbiAgcmVzdWx0LnVuaXRzUGVyRGVncmVlID0gW3VuaXRzUGVyRGVncmVlWCwgdW5pdHNQZXJEZWdyZWVZLCBhbHRVbml0c1Blck1ldGVyXTtcbiAgcmVzdWx0LmRlZ3JlZXNQZXJVbml0ID0gWzEgLyB1bml0c1BlckRlZ3JlZVgsIDEgLyB1bml0c1BlckRlZ3JlZVksIDEgLyBhbHRVbml0c1Blck1ldGVyXTtcblxuICBpZiAoaGlnaFByZWNpc2lvbikge1xuICAgIHZhciBsYXRDb3NpbmUyID0gREVHUkVFU19UT19SQURJQU5TICogTWF0aC50YW4obGF0aXR1ZGUgKiBERUdSRUVTX1RPX1JBRElBTlMpIC8gbGF0Q29zaW5lO1xuICAgIHZhciB1bml0c1BlckRlZ3JlZVkyID0gdW5pdHNQZXJEZWdyZWVYICogbGF0Q29zaW5lMiAvIDI7XG4gICAgdmFyIGFsdFVuaXRzUGVyRGVncmVlMiA9IHdvcmxkU2l6ZSAvIEVBUlRIX0NJUkNVTUZFUkVOQ0UgKiBsYXRDb3NpbmUyO1xuICAgIHZhciBhbHRVbml0c1Blck1ldGVyMiA9IGFsdFVuaXRzUGVyRGVncmVlMiAvIHVuaXRzUGVyRGVncmVlWSAqIGFsdFVuaXRzUGVyTWV0ZXI7XG4gICAgcmVzdWx0LnVuaXRzUGVyRGVncmVlMiA9IFswLCB1bml0c1BlckRlZ3JlZVkyLCBhbHRVbml0c1BlckRlZ3JlZTJdO1xuICAgIHJlc3VsdC51bml0c1Blck1ldGVyMiA9IFthbHRVbml0c1Blck1ldGVyMiwgMCwgYWx0VW5pdHNQZXJNZXRlcjJdO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBhZGRNZXRlcnNUb0xuZ0xhdChsbmdMYXRaLCB4eXopIHtcbiAgdmFyIF9sbmdMYXRaID0gX3NsaWNlZFRvQXJyYXkobG5nTGF0WiwgMyksXG4gICAgICBsb25naXR1ZGUgPSBfbG5nTGF0WlswXSxcbiAgICAgIGxhdGl0dWRlID0gX2xuZ0xhdFpbMV0sXG4gICAgICB6MCA9IF9sbmdMYXRaWzJdO1xuXG4gIHZhciBfeHl6ID0gX3NsaWNlZFRvQXJyYXkoeHl6LCAzKSxcbiAgICAgIHggPSBfeHl6WzBdLFxuICAgICAgeSA9IF94eXpbMV0sXG4gICAgICB6ID0gX3h5elsyXTtcblxuICB2YXIgX2dldERpc3RhbmNlU2NhbGVzID0gZ2V0RGlzdGFuY2VTY2FsZXMoe1xuICAgIGxvbmdpdHVkZTogbG9uZ2l0dWRlLFxuICAgIGxhdGl0dWRlOiBsYXRpdHVkZSxcbiAgICBoaWdoUHJlY2lzaW9uOiB0cnVlXG4gIH0pLFxuICAgICAgdW5pdHNQZXJNZXRlciA9IF9nZXREaXN0YW5jZVNjYWxlcy51bml0c1Blck1ldGVyLFxuICAgICAgdW5pdHNQZXJNZXRlcjIgPSBfZ2V0RGlzdGFuY2VTY2FsZXMudW5pdHNQZXJNZXRlcjI7XG5cbiAgdmFyIHdvcmxkc3BhY2UgPSBsbmdMYXRUb1dvcmxkKGxuZ0xhdFopO1xuICB3b3JsZHNwYWNlWzBdICs9IHggKiAodW5pdHNQZXJNZXRlclswXSArIHVuaXRzUGVyTWV0ZXIyWzBdICogeSk7XG4gIHdvcmxkc3BhY2VbMV0gKz0geSAqICh1bml0c1Blck1ldGVyWzFdICsgdW5pdHNQZXJNZXRlcjJbMV0gKiB5KTtcbiAgdmFyIG5ld0xuZ0xhdCA9IHdvcmxkVG9MbmdMYXQod29ybGRzcGFjZSk7XG4gIHZhciBuZXdaID0gKHowIHx8IDApICsgKHogfHwgMCk7XG4gIHJldHVybiBOdW1iZXIuaXNGaW5pdGUoejApIHx8IE51bWJlci5pc0Zpbml0ZSh6KSA/IFtuZXdMbmdMYXRbMF0sIG5ld0xuZ0xhdFsxXSwgbmV3Wl0gOiBuZXdMbmdMYXQ7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0Vmlld01hdHJpeChfcmVmNykge1xuICB2YXIgaGVpZ2h0ID0gX3JlZjcuaGVpZ2h0LFxuICAgICAgcGl0Y2ggPSBfcmVmNy5waXRjaCxcbiAgICAgIGJlYXJpbmcgPSBfcmVmNy5iZWFyaW5nLFxuICAgICAgYWx0aXR1ZGUgPSBfcmVmNy5hbHRpdHVkZSxcbiAgICAgIHNjYWxlID0gX3JlZjcuc2NhbGUsXG4gICAgICBfcmVmNyRjZW50ZXIgPSBfcmVmNy5jZW50ZXIsXG4gICAgICBjZW50ZXIgPSBfcmVmNyRjZW50ZXIgPT09IHZvaWQgMCA/IG51bGwgOiBfcmVmNyRjZW50ZXI7XG4gIHZhciB2bSA9IGNyZWF0ZU1hdDQoKTtcbiAgbWF0NC50cmFuc2xhdGUodm0sIHZtLCBbMCwgMCwgLWFsdGl0dWRlXSk7XG4gIG1hdDQucm90YXRlWCh2bSwgdm0sIC1waXRjaCAqIERFR1JFRVNfVE9fUkFESUFOUyk7XG4gIG1hdDQucm90YXRlWih2bSwgdm0sIGJlYXJpbmcgKiBERUdSRUVTX1RPX1JBRElBTlMpO1xuICBzY2FsZSAvPSBoZWlnaHQ7XG4gIG1hdDQuc2NhbGUodm0sIHZtLCBbc2NhbGUsIHNjYWxlLCBzY2FsZV0pO1xuXG4gIGlmIChjZW50ZXIpIHtcbiAgICBtYXQ0LnRyYW5zbGF0ZSh2bSwgdm0sIHZlYzMubmVnYXRlKFtdLCBjZW50ZXIpKTtcbiAgfVxuXG4gIHJldHVybiB2bTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRQcm9qZWN0aW9uUGFyYW1ldGVycyhfcmVmOCkge1xuICB2YXIgd2lkdGggPSBfcmVmOC53aWR0aCxcbiAgICAgIGhlaWdodCA9IF9yZWY4LmhlaWdodCxcbiAgICAgIF9yZWY4JGZvdnkgPSBfcmVmOC5mb3Z5LFxuICAgICAgZm92eSA9IF9yZWY4JGZvdnkgPT09IHZvaWQgMCA/IGFsdGl0dWRlVG9Gb3Z5KERFRkFVTFRfQUxUSVRVREUpIDogX3JlZjgkZm92eSxcbiAgICAgIGFsdGl0dWRlID0gX3JlZjguYWx0aXR1ZGUsXG4gICAgICBfcmVmOCRwaXRjaCA9IF9yZWY4LnBpdGNoLFxuICAgICAgcGl0Y2ggPSBfcmVmOCRwaXRjaCA9PT0gdm9pZCAwID8gMCA6IF9yZWY4JHBpdGNoLFxuICAgICAgX3JlZjgkbmVhclpNdWx0aXBsaWVyID0gX3JlZjgubmVhclpNdWx0aXBsaWVyLFxuICAgICAgbmVhclpNdWx0aXBsaWVyID0gX3JlZjgkbmVhclpNdWx0aXBsaWVyID09PSB2b2lkIDAgPyAxIDogX3JlZjgkbmVhclpNdWx0aXBsaWVyLFxuICAgICAgX3JlZjgkZmFyWk11bHRpcGxpZXIgPSBfcmVmOC5mYXJaTXVsdGlwbGllcixcbiAgICAgIGZhclpNdWx0aXBsaWVyID0gX3JlZjgkZmFyWk11bHRpcGxpZXIgPT09IHZvaWQgMCA/IDEgOiBfcmVmOCRmYXJaTXVsdGlwbGllcjtcblxuICBpZiAoYWx0aXR1ZGUgIT09IHVuZGVmaW5lZCkge1xuICAgIGZvdnkgPSBhbHRpdHVkZVRvRm92eShhbHRpdHVkZSk7XG4gIH1cblxuICB2YXIgaGFsZkZvdiA9IDAuNSAqIGZvdnkgKiBERUdSRUVTX1RPX1JBRElBTlM7XG4gIHZhciBmb2NhbERpc3RhbmNlID0gZm92eVRvQWx0aXR1ZGUoZm92eSk7XG4gIHZhciBwaXRjaFJhZGlhbnMgPSBwaXRjaCAqIERFR1JFRVNfVE9fUkFESUFOUztcbiAgdmFyIHRvcEhhbGZTdXJmYWNlRGlzdGFuY2UgPSBNYXRoLnNpbihoYWxmRm92KSAqIGZvY2FsRGlzdGFuY2UgLyBNYXRoLnNpbihNYXRoLm1pbihNYXRoLm1heChNYXRoLlBJIC8gMiAtIHBpdGNoUmFkaWFucyAtIGhhbGZGb3YsIDAuMDEpLCBNYXRoLlBJIC0gMC4wMSkpO1xuICB2YXIgZmFyWiA9IE1hdGguc2luKHBpdGNoUmFkaWFucykgKiB0b3BIYWxmU3VyZmFjZURpc3RhbmNlICsgZm9jYWxEaXN0YW5jZTtcbiAgcmV0dXJuIHtcbiAgICBmb3Y6IDIgKiBoYWxmRm92LFxuICAgIGFzcGVjdDogd2lkdGggLyBoZWlnaHQsXG4gICAgZm9jYWxEaXN0YW5jZTogZm9jYWxEaXN0YW5jZSxcbiAgICBuZWFyOiBuZWFyWk11bHRpcGxpZXIsXG4gICAgZmFyOiBmYXJaICogZmFyWk11bHRpcGxpZXJcbiAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRQcm9qZWN0aW9uTWF0cml4KF9yZWY5KSB7XG4gIHZhciB3aWR0aCA9IF9yZWY5LndpZHRoLFxuICAgICAgaGVpZ2h0ID0gX3JlZjkuaGVpZ2h0LFxuICAgICAgcGl0Y2ggPSBfcmVmOS5waXRjaCxcbiAgICAgIGFsdGl0dWRlID0gX3JlZjkuYWx0aXR1ZGUsXG4gICAgICBmb3Z5ID0gX3JlZjkuZm92eSxcbiAgICAgIG5lYXJaTXVsdGlwbGllciA9IF9yZWY5Lm5lYXJaTXVsdGlwbGllcixcbiAgICAgIGZhclpNdWx0aXBsaWVyID0gX3JlZjkuZmFyWk11bHRpcGxpZXI7XG5cbiAgdmFyIF9nZXRQcm9qZWN0aW9uUGFyYW1ldCA9IGdldFByb2plY3Rpb25QYXJhbWV0ZXJzKHtcbiAgICB3aWR0aDogd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgYWx0aXR1ZGU6IGFsdGl0dWRlLFxuICAgIGZvdnk6IGZvdnksXG4gICAgcGl0Y2g6IHBpdGNoLFxuICAgIG5lYXJaTXVsdGlwbGllcjogbmVhclpNdWx0aXBsaWVyLFxuICAgIGZhclpNdWx0aXBsaWVyOiBmYXJaTXVsdGlwbGllclxuICB9KSxcbiAgICAgIGZvdiA9IF9nZXRQcm9qZWN0aW9uUGFyYW1ldC5mb3YsXG4gICAgICBhc3BlY3QgPSBfZ2V0UHJvamVjdGlvblBhcmFtZXQuYXNwZWN0LFxuICAgICAgbmVhciA9IF9nZXRQcm9qZWN0aW9uUGFyYW1ldC5uZWFyLFxuICAgICAgZmFyID0gX2dldFByb2plY3Rpb25QYXJhbWV0LmZhcjtcblxuICB2YXIgcHJvamVjdGlvbk1hdHJpeCA9IG1hdDQucGVyc3BlY3RpdmUoW10sIGZvdiwgYXNwZWN0LCBuZWFyLCBmYXIpO1xuICByZXR1cm4gcHJvamVjdGlvbk1hdHJpeDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBhbHRpdHVkZVRvRm92eShhbHRpdHVkZSkge1xuICByZXR1cm4gMiAqIE1hdGguYXRhbigwLjUgLyBhbHRpdHVkZSkgKiBSQURJQU5TX1RPX0RFR1JFRVM7XG59XG5leHBvcnQgZnVuY3Rpb24gZm92eVRvQWx0aXR1ZGUoZm92eSkge1xuICByZXR1cm4gMC41IC8gTWF0aC50YW4oMC41ICogZm92eSAqIERFR1JFRVNfVE9fUkFESUFOUyk7XG59XG5leHBvcnQgZnVuY3Rpb24gd29ybGRUb1BpeGVscyh4eXosIHBpeGVsUHJvamVjdGlvbk1hdHJpeCkge1xuICB2YXIgX3h5ejIgPSBfc2xpY2VkVG9BcnJheSh4eXosIDMpLFxuICAgICAgeCA9IF94eXoyWzBdLFxuICAgICAgeSA9IF94eXoyWzFdLFxuICAgICAgX3h5ejIkID0gX3h5ejJbMl0sXG4gICAgICB6ID0gX3h5ejIkID09PSB2b2lkIDAgPyAwIDogX3h5ejIkO1xuXG4gIGFzc2VydChOdW1iZXIuaXNGaW5pdGUoeCkgJiYgTnVtYmVyLmlzRmluaXRlKHkpICYmIE51bWJlci5pc0Zpbml0ZSh6KSk7XG4gIHJldHVybiB0cmFuc2Zvcm1WZWN0b3IocGl4ZWxQcm9qZWN0aW9uTWF0cml4LCBbeCwgeSwgeiwgMV0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBpeGVsc1RvV29ybGQoeHl6LCBwaXhlbFVucHJvamVjdGlvbk1hdHJpeCkge1xuICB2YXIgdGFyZ2V0WiA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogMDtcblxuICB2YXIgX3h5ejMgPSBfc2xpY2VkVG9BcnJheSh4eXosIDMpLFxuICAgICAgeCA9IF94eXozWzBdLFxuICAgICAgeSA9IF94eXozWzFdLFxuICAgICAgeiA9IF94eXozWzJdO1xuXG4gIGFzc2VydChOdW1iZXIuaXNGaW5pdGUoeCkgJiYgTnVtYmVyLmlzRmluaXRlKHkpLCAnaW52YWxpZCBwaXhlbCBjb29yZGluYXRlJyk7XG5cbiAgaWYgKE51bWJlci5pc0Zpbml0ZSh6KSkge1xuICAgIHZhciBjb29yZCA9IHRyYW5zZm9ybVZlY3RvcihwaXhlbFVucHJvamVjdGlvbk1hdHJpeCwgW3gsIHksIHosIDFdKTtcbiAgICByZXR1cm4gY29vcmQ7XG4gIH1cblxuICB2YXIgY29vcmQwID0gdHJhbnNmb3JtVmVjdG9yKHBpeGVsVW5wcm9qZWN0aW9uTWF0cml4LCBbeCwgeSwgMCwgMV0pO1xuICB2YXIgY29vcmQxID0gdHJhbnNmb3JtVmVjdG9yKHBpeGVsVW5wcm9qZWN0aW9uTWF0cml4LCBbeCwgeSwgMSwgMV0pO1xuICB2YXIgejAgPSBjb29yZDBbMl07XG4gIHZhciB6MSA9IGNvb3JkMVsyXTtcbiAgdmFyIHQgPSB6MCA9PT0gejEgPyAwIDogKCh0YXJnZXRaIHx8IDApIC0gejApIC8gKHoxIC0gejApO1xuICByZXR1cm4gdmVjMi5sZXJwKFtdLCBjb29yZDAsIGNvb3JkMSwgdCk7XG59IiwiaW1wb3J0IF9zbGljZWRUb0FycmF5IGZyb20gXCIvaG9tZS9ydW5uZXIvd29yay9qdXN0aWNlNDAtdG9vbC9qdXN0aWNlNDAtdG9vbC9jbGllbnQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXlcIjtcbmltcG9ydCBXZWJNZXJjYXRvclZpZXdwb3J0IGZyb20gJy4vd2ViLW1lcmNhdG9yLXZpZXdwb3J0JztcbmltcG9ydCBhc3NlcnQgZnJvbSAnLi9hc3NlcnQnO1xuaW1wb3J0IHsgbG9nMiB9IGZyb20gJy4vbWF0aC11dGlscyc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBmaXRCb3VuZHMoX3JlZikge1xuICB2YXIgd2lkdGggPSBfcmVmLndpZHRoLFxuICAgICAgaGVpZ2h0ID0gX3JlZi5oZWlnaHQsXG4gICAgICBib3VuZHMgPSBfcmVmLmJvdW5kcyxcbiAgICAgIF9yZWYkbWluRXh0ZW50ID0gX3JlZi5taW5FeHRlbnQsXG4gICAgICBtaW5FeHRlbnQgPSBfcmVmJG1pbkV4dGVudCA9PT0gdm9pZCAwID8gMCA6IF9yZWYkbWluRXh0ZW50LFxuICAgICAgX3JlZiRtYXhab29tID0gX3JlZi5tYXhab29tLFxuICAgICAgbWF4Wm9vbSA9IF9yZWYkbWF4Wm9vbSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJG1heFpvb20sXG4gICAgICBfcmVmJHBhZGRpbmcgPSBfcmVmLnBhZGRpbmcsXG4gICAgICBwYWRkaW5nID0gX3JlZiRwYWRkaW5nID09PSB2b2lkIDAgPyAwIDogX3JlZiRwYWRkaW5nLFxuICAgICAgX3JlZiRvZmZzZXQgPSBfcmVmLm9mZnNldCxcbiAgICAgIG9mZnNldCA9IF9yZWYkb2Zmc2V0ID09PSB2b2lkIDAgPyBbMCwgMF0gOiBfcmVmJG9mZnNldDtcblxuICB2YXIgX2JvdW5kcyA9IF9zbGljZWRUb0FycmF5KGJvdW5kcywgMiksXG4gICAgICBfYm91bmRzJCA9IF9zbGljZWRUb0FycmF5KF9ib3VuZHNbMF0sIDIpLFxuICAgICAgd2VzdCA9IF9ib3VuZHMkWzBdLFxuICAgICAgc291dGggPSBfYm91bmRzJFsxXSxcbiAgICAgIF9ib3VuZHMkMiA9IF9zbGljZWRUb0FycmF5KF9ib3VuZHNbMV0sIDIpLFxuICAgICAgZWFzdCA9IF9ib3VuZHMkMlswXSxcbiAgICAgIG5vcnRoID0gX2JvdW5kcyQyWzFdO1xuXG4gIGlmIChOdW1iZXIuaXNGaW5pdGUocGFkZGluZykpIHtcbiAgICB2YXIgcCA9IHBhZGRpbmc7XG4gICAgcGFkZGluZyA9IHtcbiAgICAgIHRvcDogcCxcbiAgICAgIGJvdHRvbTogcCxcbiAgICAgIGxlZnQ6IHAsXG4gICAgICByaWdodDogcFxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgYXNzZXJ0KE51bWJlci5pc0Zpbml0ZShwYWRkaW5nLnRvcCkgJiYgTnVtYmVyLmlzRmluaXRlKHBhZGRpbmcuYm90dG9tKSAmJiBOdW1iZXIuaXNGaW5pdGUocGFkZGluZy5sZWZ0KSAmJiBOdW1iZXIuaXNGaW5pdGUocGFkZGluZy5yaWdodCkpO1xuICB9XG5cbiAgdmFyIHZpZXdwb3J0ID0gbmV3IFdlYk1lcmNhdG9yVmlld3BvcnQoe1xuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICBsb25naXR1ZGU6IDAsXG4gICAgbGF0aXR1ZGU6IDAsXG4gICAgem9vbTogMFxuICB9KTtcbiAgdmFyIG53ID0gdmlld3BvcnQucHJvamVjdChbd2VzdCwgbm9ydGhdKTtcbiAgdmFyIHNlID0gdmlld3BvcnQucHJvamVjdChbZWFzdCwgc291dGhdKTtcbiAgdmFyIHNpemUgPSBbTWF0aC5tYXgoTWF0aC5hYnMoc2VbMF0gLSBud1swXSksIG1pbkV4dGVudCksIE1hdGgubWF4KE1hdGguYWJzKHNlWzFdIC0gbndbMV0pLCBtaW5FeHRlbnQpXTtcbiAgdmFyIHRhcmdldFNpemUgPSBbd2lkdGggLSBwYWRkaW5nLmxlZnQgLSBwYWRkaW5nLnJpZ2h0IC0gTWF0aC5hYnMob2Zmc2V0WzBdKSAqIDIsIGhlaWdodCAtIHBhZGRpbmcudG9wIC0gcGFkZGluZy5ib3R0b20gLSBNYXRoLmFicyhvZmZzZXRbMV0pICogMl07XG4gIGFzc2VydCh0YXJnZXRTaXplWzBdID4gMCAmJiB0YXJnZXRTaXplWzFdID4gMCk7XG4gIHZhciBzY2FsZVggPSB0YXJnZXRTaXplWzBdIC8gc2l6ZVswXTtcbiAgdmFyIHNjYWxlWSA9IHRhcmdldFNpemVbMV0gLyBzaXplWzFdO1xuICB2YXIgb2Zmc2V0WCA9IChwYWRkaW5nLnJpZ2h0IC0gcGFkZGluZy5sZWZ0KSAvIDIgLyBzY2FsZVg7XG4gIHZhciBvZmZzZXRZID0gKHBhZGRpbmcuYm90dG9tIC0gcGFkZGluZy50b3ApIC8gMiAvIHNjYWxlWTtcbiAgdmFyIGNlbnRlciA9IFsoc2VbMF0gKyBud1swXSkgLyAyICsgb2Zmc2V0WCwgKHNlWzFdICsgbndbMV0pIC8gMiArIG9mZnNldFldO1xuICB2YXIgY2VudGVyTG5nTGF0ID0gdmlld3BvcnQudW5wcm9qZWN0KGNlbnRlcik7XG4gIHZhciB6b29tID0gTWF0aC5taW4obWF4Wm9vbSwgdmlld3BvcnQuem9vbSArIGxvZzIoTWF0aC5hYnMoTWF0aC5taW4oc2NhbGVYLCBzY2FsZVkpKSkpO1xuICBhc3NlcnQoTnVtYmVyLmlzRmluaXRlKHpvb20pKTtcbiAgcmV0dXJuIHtcbiAgICBsb25naXR1ZGU6IGNlbnRlckxuZ0xhdFswXSxcbiAgICBsYXRpdHVkZTogY2VudGVyTG5nTGF0WzFdLFxuICAgIHpvb206IHpvb21cbiAgfTtcbn0iLCJpbXBvcnQgeyB3b3JsZFRvTG5nTGF0IH0gZnJvbSAnLi93ZWItbWVyY2F0b3ItdXRpbHMnO1xuaW1wb3J0ICogYXMgdmVjMiBmcm9tICdnbC1tYXRyaXgvdmVjMic7XG5pbXBvcnQgeyB0cmFuc2Zvcm1WZWN0b3IgfSBmcm9tICcuL21hdGgtdXRpbHMnO1xudmFyIERFR1JFRVNfVE9fUkFESUFOUyA9IE1hdGguUEkgLyAxODA7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRCb3VuZHModmlld3BvcnQpIHtcbiAgdmFyIHogPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IDA7XG4gIHZhciB3aWR0aCA9IHZpZXdwb3J0LndpZHRoLFxuICAgICAgaGVpZ2h0ID0gdmlld3BvcnQuaGVpZ2h0LFxuICAgICAgdW5wcm9qZWN0ID0gdmlld3BvcnQudW5wcm9qZWN0O1xuICB2YXIgdW5wcm9qZWN0T3BzID0ge1xuICAgIHRhcmdldFo6IHpcbiAgfTtcbiAgdmFyIGJvdHRvbUxlZnQgPSB1bnByb2plY3QoWzAsIGhlaWdodF0sIHVucHJvamVjdE9wcyk7XG4gIHZhciBib3R0b21SaWdodCA9IHVucHJvamVjdChbd2lkdGgsIGhlaWdodF0sIHVucHJvamVjdE9wcyk7XG4gIHZhciB0b3BMZWZ0O1xuICB2YXIgdG9wUmlnaHQ7XG4gIHZhciBoYWxmRm92ID0gdmlld3BvcnQuZm92eSA/IDAuNSAqIHZpZXdwb3J0LmZvdnkgKiBERUdSRUVTX1RPX1JBRElBTlMgOiBNYXRoLmF0YW4oMC41IC8gdmlld3BvcnQuYWx0aXR1ZGUpO1xuICB2YXIgYW5nbGVUb0dyb3VuZCA9ICg5MCAtIHZpZXdwb3J0LnBpdGNoKSAqIERFR1JFRVNfVE9fUkFESUFOUztcblxuICBpZiAoaGFsZkZvdiA+IGFuZ2xlVG9Hcm91bmQgLSAwLjAxKSB7XG4gICAgdG9wTGVmdCA9IHVucHJvamVjdE9uRmFyUGxhbmUodmlld3BvcnQsIDAsIHopO1xuICAgIHRvcFJpZ2h0ID0gdW5wcm9qZWN0T25GYXJQbGFuZSh2aWV3cG9ydCwgd2lkdGgsIHopO1xuICB9IGVsc2Uge1xuICAgIHRvcExlZnQgPSB1bnByb2plY3QoWzAsIDBdLCB1bnByb2plY3RPcHMpO1xuICAgIHRvcFJpZ2h0ID0gdW5wcm9qZWN0KFt3aWR0aCwgMF0sIHVucHJvamVjdE9wcyk7XG4gIH1cblxuICByZXR1cm4gW2JvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0LCB0b3BSaWdodCwgdG9wTGVmdF07XG59XG5cbmZ1bmN0aW9uIHVucHJvamVjdE9uRmFyUGxhbmUodmlld3BvcnQsIHgsIHRhcmdldFopIHtcbiAgdmFyIHBpeGVsVW5wcm9qZWN0aW9uTWF0cml4ID0gdmlld3BvcnQucGl4ZWxVbnByb2plY3Rpb25NYXRyaXg7XG4gIHZhciBjb29yZDAgPSB0cmFuc2Zvcm1WZWN0b3IocGl4ZWxVbnByb2plY3Rpb25NYXRyaXgsIFt4LCAwLCAxLCAxXSk7XG4gIHZhciBjb29yZDEgPSB0cmFuc2Zvcm1WZWN0b3IocGl4ZWxVbnByb2plY3Rpb25NYXRyaXgsIFt4LCB2aWV3cG9ydC5oZWlnaHQsIDEsIDFdKTtcbiAgdmFyIHogPSB0YXJnZXRaICogdmlld3BvcnQuZGlzdGFuY2VTY2FsZXMudW5pdHNQZXJNZXRlclsyXTtcbiAgdmFyIHQgPSAoeiAtIGNvb3JkMFsyXSkgLyAoY29vcmQxWzJdIC0gY29vcmQwWzJdKTtcbiAgdmFyIGNvb3JkID0gdmVjMi5sZXJwKFtdLCBjb29yZDAsIGNvb3JkMSwgdCk7XG4gIHZhciByZXN1bHQgPSB3b3JsZFRvTG5nTGF0KGNvb3JkKTtcbiAgcmVzdWx0WzJdID0gdGFyZ2V0WjtcbiAgcmV0dXJuIHJlc3VsdDtcbn0iLCJpbXBvcnQgX3RvQ29uc3VtYWJsZUFycmF5IGZyb20gXCIvaG9tZS9ydW5uZXIvd29yay9qdXN0aWNlNDAtdG9vbC9qdXN0aWNlNDAtdG9vbC9jbGllbnQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvQ29uc3VtYWJsZUFycmF5XCI7XG5pbXBvcnQgX3NsaWNlZFRvQXJyYXkgZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL2p1c3RpY2U0MC10b29sL2p1c3RpY2U0MC10b29sL2NsaWVudC9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheVwiO1xuaW1wb3J0IF9jbGFzc0NhbGxDaGVjayBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvanVzdGljZTQwLXRvb2wvanVzdGljZTQwLXRvb2wvY2xpZW50L25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jbGFzc0NhbGxDaGVja1wiO1xuaW1wb3J0IF9jcmVhdGVDbGFzcyBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvanVzdGljZTQwLXRvb2wvanVzdGljZTQwLXRvb2wvY2xpZW50L25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jcmVhdGVDbGFzc1wiO1xuaW1wb3J0IHsgY3JlYXRlTWF0NCB9IGZyb20gJy4vbWF0aC11dGlscyc7XG5pbXBvcnQgeyB6b29tVG9TY2FsZSwgcGl4ZWxzVG9Xb3JsZCwgbG5nTGF0VG9Xb3JsZCwgd29ybGRUb0xuZ0xhdCwgd29ybGRUb1BpeGVscywgYWx0aXR1ZGVUb0ZvdnksIGZvdnlUb0FsdGl0dWRlLCBERUZBVUxUX0FMVElUVURFLCBnZXRQcm9qZWN0aW9uTWF0cml4LCBnZXREaXN0YW5jZVNjYWxlcywgZ2V0Vmlld01hdHJpeCB9IGZyb20gJy4vd2ViLW1lcmNhdG9yLXV0aWxzJztcbmltcG9ydCBfZml0Qm91bmRzIGZyb20gJy4vZml0LWJvdW5kcyc7XG5pbXBvcnQgZ2V0Qm91bmRzIGZyb20gJy4vZ2V0LWJvdW5kcyc7XG5pbXBvcnQgKiBhcyBtYXQ0IGZyb20gJ2dsLW1hdHJpeC9tYXQ0JztcbmltcG9ydCAqIGFzIHZlYzIgZnJvbSAnZ2wtbWF0cml4L3ZlYzInO1xuaW1wb3J0ICogYXMgdmVjMyBmcm9tICdnbC1tYXRyaXgvdmVjMyc7XG5cbnZhciBXZWJNZXJjYXRvclZpZXdwb3J0ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gV2ViTWVyY2F0b3JWaWV3cG9ydCgpIHtcbiAgICB2YXIgX3JlZiA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge1xuICAgICAgd2lkdGg6IDEsXG4gICAgICBoZWlnaHQ6IDFcbiAgICB9LFxuICAgICAgICB3aWR0aCA9IF9yZWYud2lkdGgsXG4gICAgICAgIGhlaWdodCA9IF9yZWYuaGVpZ2h0LFxuICAgICAgICBfcmVmJGxhdGl0dWRlID0gX3JlZi5sYXRpdHVkZSxcbiAgICAgICAgbGF0aXR1ZGUgPSBfcmVmJGxhdGl0dWRlID09PSB2b2lkIDAgPyAwIDogX3JlZiRsYXRpdHVkZSxcbiAgICAgICAgX3JlZiRsb25naXR1ZGUgPSBfcmVmLmxvbmdpdHVkZSxcbiAgICAgICAgbG9uZ2l0dWRlID0gX3JlZiRsb25naXR1ZGUgPT09IHZvaWQgMCA/IDAgOiBfcmVmJGxvbmdpdHVkZSxcbiAgICAgICAgX3JlZiR6b29tID0gX3JlZi56b29tLFxuICAgICAgICB6b29tID0gX3JlZiR6b29tID09PSB2b2lkIDAgPyAwIDogX3JlZiR6b29tLFxuICAgICAgICBfcmVmJHBpdGNoID0gX3JlZi5waXRjaCxcbiAgICAgICAgcGl0Y2ggPSBfcmVmJHBpdGNoID09PSB2b2lkIDAgPyAwIDogX3JlZiRwaXRjaCxcbiAgICAgICAgX3JlZiRiZWFyaW5nID0gX3JlZi5iZWFyaW5nLFxuICAgICAgICBiZWFyaW5nID0gX3JlZiRiZWFyaW5nID09PSB2b2lkIDAgPyAwIDogX3JlZiRiZWFyaW5nLFxuICAgICAgICBfcmVmJGFsdGl0dWRlID0gX3JlZi5hbHRpdHVkZSxcbiAgICAgICAgYWx0aXR1ZGUgPSBfcmVmJGFsdGl0dWRlID09PSB2b2lkIDAgPyBudWxsIDogX3JlZiRhbHRpdHVkZSxcbiAgICAgICAgX3JlZiRmb3Z5ID0gX3JlZi5mb3Z5LFxuICAgICAgICBmb3Z5ID0gX3JlZiRmb3Z5ID09PSB2b2lkIDAgPyBudWxsIDogX3JlZiRmb3Z5LFxuICAgICAgICBfcmVmJHBvc2l0aW9uID0gX3JlZi5wb3NpdGlvbixcbiAgICAgICAgcG9zaXRpb24gPSBfcmVmJHBvc2l0aW9uID09PSB2b2lkIDAgPyBudWxsIDogX3JlZiRwb3NpdGlvbixcbiAgICAgICAgX3JlZiRuZWFyWk11bHRpcGxpZXIgPSBfcmVmLm5lYXJaTXVsdGlwbGllcixcbiAgICAgICAgbmVhclpNdWx0aXBsaWVyID0gX3JlZiRuZWFyWk11bHRpcGxpZXIgPT09IHZvaWQgMCA/IDAuMDIgOiBfcmVmJG5lYXJaTXVsdGlwbGllcixcbiAgICAgICAgX3JlZiRmYXJaTXVsdGlwbGllciA9IF9yZWYuZmFyWk11bHRpcGxpZXIsXG4gICAgICAgIGZhclpNdWx0aXBsaWVyID0gX3JlZiRmYXJaTXVsdGlwbGllciA9PT0gdm9pZCAwID8gMS4wMSA6IF9yZWYkZmFyWk11bHRpcGxpZXI7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgV2ViTWVyY2F0b3JWaWV3cG9ydCk7XG5cbiAgICB3aWR0aCA9IHdpZHRoIHx8IDE7XG4gICAgaGVpZ2h0ID0gaGVpZ2h0IHx8IDE7XG5cbiAgICBpZiAoZm92eSA9PT0gbnVsbCAmJiBhbHRpdHVkZSA9PT0gbnVsbCkge1xuICAgICAgYWx0aXR1ZGUgPSBERUZBVUxUX0FMVElUVURFO1xuICAgICAgZm92eSA9IGFsdGl0dWRlVG9Gb3Z5KGFsdGl0dWRlKTtcbiAgICB9IGVsc2UgaWYgKGZvdnkgPT09IG51bGwpIHtcbiAgICAgIGZvdnkgPSBhbHRpdHVkZVRvRm92eShhbHRpdHVkZSk7XG4gICAgfSBlbHNlIGlmIChhbHRpdHVkZSA9PT0gbnVsbCkge1xuICAgICAgYWx0aXR1ZGUgPSBmb3Z5VG9BbHRpdHVkZShmb3Z5KTtcbiAgICB9XG5cbiAgICB2YXIgc2NhbGUgPSB6b29tVG9TY2FsZSh6b29tKTtcbiAgICBhbHRpdHVkZSA9IE1hdGgubWF4KDAuNzUsIGFsdGl0dWRlKTtcbiAgICB2YXIgZGlzdGFuY2VTY2FsZXMgPSBnZXREaXN0YW5jZVNjYWxlcyh7XG4gICAgICBsb25naXR1ZGU6IGxvbmdpdHVkZSxcbiAgICAgIGxhdGl0dWRlOiBsYXRpdHVkZVxuICAgIH0pO1xuICAgIHZhciBjZW50ZXIgPSBsbmdMYXRUb1dvcmxkKFtsb25naXR1ZGUsIGxhdGl0dWRlXSk7XG4gICAgY2VudGVyWzJdID0gMDtcblxuICAgIGlmIChwb3NpdGlvbikge1xuICAgICAgdmVjMy5hZGQoY2VudGVyLCBjZW50ZXIsIHZlYzMubXVsKFtdLCBwb3NpdGlvbiwgZGlzdGFuY2VTY2FsZXMudW5pdHNQZXJNZXRlcikpO1xuICAgIH1cblxuICAgIHRoaXMucHJvamVjdGlvbk1hdHJpeCA9IGdldFByb2plY3Rpb25NYXRyaXgoe1xuICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgICBwaXRjaDogcGl0Y2gsXG4gICAgICBmb3Z5OiBmb3Z5LFxuICAgICAgbmVhclpNdWx0aXBsaWVyOiBuZWFyWk11bHRpcGxpZXIsXG4gICAgICBmYXJaTXVsdGlwbGllcjogZmFyWk11bHRpcGxpZXJcbiAgICB9KTtcbiAgICB0aGlzLnZpZXdNYXRyaXggPSBnZXRWaWV3TWF0cml4KHtcbiAgICAgIGhlaWdodDogaGVpZ2h0LFxuICAgICAgc2NhbGU6IHNjYWxlLFxuICAgICAgY2VudGVyOiBjZW50ZXIsXG4gICAgICBwaXRjaDogcGl0Y2gsXG4gICAgICBiZWFyaW5nOiBiZWFyaW5nLFxuICAgICAgYWx0aXR1ZGU6IGFsdGl0dWRlXG4gICAgfSk7XG4gICAgdGhpcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgIHRoaXMuc2NhbGUgPSBzY2FsZTtcbiAgICB0aGlzLmxhdGl0dWRlID0gbGF0aXR1ZGU7XG4gICAgdGhpcy5sb25naXR1ZGUgPSBsb25naXR1ZGU7XG4gICAgdGhpcy56b29tID0gem9vbTtcbiAgICB0aGlzLnBpdGNoID0gcGl0Y2g7XG4gICAgdGhpcy5iZWFyaW5nID0gYmVhcmluZztcbiAgICB0aGlzLmFsdGl0dWRlID0gYWx0aXR1ZGU7XG4gICAgdGhpcy5mb3Z5ID0gZm92eTtcbiAgICB0aGlzLmNlbnRlciA9IGNlbnRlcjtcbiAgICB0aGlzLm1ldGVyT2Zmc2V0ID0gcG9zaXRpb24gfHwgWzAsIDAsIDBdO1xuICAgIHRoaXMuZGlzdGFuY2VTY2FsZXMgPSBkaXN0YW5jZVNjYWxlcztcblxuICAgIHRoaXMuX2luaXRNYXRyaWNlcygpO1xuXG4gICAgdGhpcy5lcXVhbHMgPSB0aGlzLmVxdWFscy5iaW5kKHRoaXMpO1xuICAgIHRoaXMucHJvamVjdCA9IHRoaXMucHJvamVjdC5iaW5kKHRoaXMpO1xuICAgIHRoaXMudW5wcm9qZWN0ID0gdGhpcy51bnByb2plY3QuYmluZCh0aGlzKTtcbiAgICB0aGlzLnByb2plY3RQb3NpdGlvbiA9IHRoaXMucHJvamVjdFBvc2l0aW9uLmJpbmQodGhpcyk7XG4gICAgdGhpcy51bnByb2plY3RQb3NpdGlvbiA9IHRoaXMudW5wcm9qZWN0UG9zaXRpb24uYmluZCh0aGlzKTtcbiAgICBPYmplY3QuZnJlZXplKHRoaXMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFdlYk1lcmNhdG9yVmlld3BvcnQsIFt7XG4gICAga2V5OiBcIl9pbml0TWF0cmljZXNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2luaXRNYXRyaWNlcygpIHtcbiAgICAgIHZhciB3aWR0aCA9IHRoaXMud2lkdGgsXG4gICAgICAgICAgaGVpZ2h0ID0gdGhpcy5oZWlnaHQsXG4gICAgICAgICAgcHJvamVjdGlvbk1hdHJpeCA9IHRoaXMucHJvamVjdGlvbk1hdHJpeCxcbiAgICAgICAgICB2aWV3TWF0cml4ID0gdGhpcy52aWV3TWF0cml4O1xuICAgICAgdmFyIHZwbSA9IGNyZWF0ZU1hdDQoKTtcbiAgICAgIG1hdDQubXVsdGlwbHkodnBtLCB2cG0sIHByb2plY3Rpb25NYXRyaXgpO1xuICAgICAgbWF0NC5tdWx0aXBseSh2cG0sIHZwbSwgdmlld01hdHJpeCk7XG4gICAgICB0aGlzLnZpZXdQcm9qZWN0aW9uTWF0cml4ID0gdnBtO1xuICAgICAgdmFyIG0gPSBjcmVhdGVNYXQ0KCk7XG4gICAgICBtYXQ0LnNjYWxlKG0sIG0sIFt3aWR0aCAvIDIsIC1oZWlnaHQgLyAyLCAxXSk7XG4gICAgICBtYXQ0LnRyYW5zbGF0ZShtLCBtLCBbMSwgLTEsIDBdKTtcbiAgICAgIG1hdDQubXVsdGlwbHkobSwgbSwgdnBtKTtcbiAgICAgIHZhciBtSW52ZXJzZSA9IG1hdDQuaW52ZXJ0KGNyZWF0ZU1hdDQoKSwgbSk7XG5cbiAgICAgIGlmICghbUludmVyc2UpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQaXhlbCBwcm9qZWN0IG1hdHJpeCBub3QgaW52ZXJ0aWJsZScpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnBpeGVsUHJvamVjdGlvbk1hdHJpeCA9IG07XG4gICAgICB0aGlzLnBpeGVsVW5wcm9qZWN0aW9uTWF0cml4ID0gbUludmVyc2U7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImVxdWFsc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBlcXVhbHModmlld3BvcnQpIHtcbiAgICAgIGlmICghKHZpZXdwb3J0IGluc3RhbmNlb2YgV2ViTWVyY2F0b3JWaWV3cG9ydCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdmlld3BvcnQud2lkdGggPT09IHRoaXMud2lkdGggJiYgdmlld3BvcnQuaGVpZ2h0ID09PSB0aGlzLmhlaWdodCAmJiBtYXQ0LmVxdWFscyh2aWV3cG9ydC5wcm9qZWN0aW9uTWF0cml4LCB0aGlzLnByb2plY3Rpb25NYXRyaXgpICYmIG1hdDQuZXF1YWxzKHZpZXdwb3J0LnZpZXdNYXRyaXgsIHRoaXMudmlld01hdHJpeCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInByb2plY3RcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcHJvamVjdCh4eXopIHtcbiAgICAgIHZhciBfcmVmMiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge30sXG4gICAgICAgICAgX3JlZjIkdG9wTGVmdCA9IF9yZWYyLnRvcExlZnQsXG4gICAgICAgICAgdG9wTGVmdCA9IF9yZWYyJHRvcExlZnQgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmMiR0b3BMZWZ0O1xuXG4gICAgICB2YXIgd29ybGRQb3NpdGlvbiA9IHRoaXMucHJvamVjdFBvc2l0aW9uKHh5eik7XG4gICAgICB2YXIgY29vcmQgPSB3b3JsZFRvUGl4ZWxzKHdvcmxkUG9zaXRpb24sIHRoaXMucGl4ZWxQcm9qZWN0aW9uTWF0cml4KTtcblxuICAgICAgdmFyIF9jb29yZCA9IF9zbGljZWRUb0FycmF5KGNvb3JkLCAyKSxcbiAgICAgICAgICB4ID0gX2Nvb3JkWzBdLFxuICAgICAgICAgIHkgPSBfY29vcmRbMV07XG5cbiAgICAgIHZhciB5MiA9IHRvcExlZnQgPyB5IDogdGhpcy5oZWlnaHQgLSB5O1xuICAgICAgcmV0dXJuIHh5ei5sZW5ndGggPT09IDIgPyBbeCwgeTJdIDogW3gsIHkyLCBjb29yZFsyXV07XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInVucHJvamVjdFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB1bnByb2plY3QoeHl6KSB7XG4gICAgICB2YXIgX3JlZjMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9LFxuICAgICAgICAgIF9yZWYzJHRvcExlZnQgPSBfcmVmMy50b3BMZWZ0LFxuICAgICAgICAgIHRvcExlZnQgPSBfcmVmMyR0b3BMZWZ0ID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZjMkdG9wTGVmdCxcbiAgICAgICAgICBfcmVmMyR0YXJnZXRaID0gX3JlZjMudGFyZ2V0WixcbiAgICAgICAgICB0YXJnZXRaID0gX3JlZjMkdGFyZ2V0WiA9PT0gdm9pZCAwID8gdW5kZWZpbmVkIDogX3JlZjMkdGFyZ2V0WjtcblxuICAgICAgdmFyIF94eXogPSBfc2xpY2VkVG9BcnJheSh4eXosIDMpLFxuICAgICAgICAgIHggPSBfeHl6WzBdLFxuICAgICAgICAgIHkgPSBfeHl6WzFdLFxuICAgICAgICAgIHogPSBfeHl6WzJdO1xuXG4gICAgICB2YXIgeTIgPSB0b3BMZWZ0ID8geSA6IHRoaXMuaGVpZ2h0IC0geTtcbiAgICAgIHZhciB0YXJnZXRaV29ybGQgPSB0YXJnZXRaICYmIHRhcmdldFogKiB0aGlzLmRpc3RhbmNlU2NhbGVzLnVuaXRzUGVyTWV0ZXJbMl07XG4gICAgICB2YXIgY29vcmQgPSBwaXhlbHNUb1dvcmxkKFt4LCB5Miwgel0sIHRoaXMucGl4ZWxVbnByb2plY3Rpb25NYXRyaXgsIHRhcmdldFpXb3JsZCk7XG5cbiAgICAgIHZhciBfdGhpcyR1bnByb2plY3RQb3NpdGkgPSB0aGlzLnVucHJvamVjdFBvc2l0aW9uKGNvb3JkKSxcbiAgICAgICAgICBfdGhpcyR1bnByb2plY3RQb3NpdGkyID0gX3NsaWNlZFRvQXJyYXkoX3RoaXMkdW5wcm9qZWN0UG9zaXRpLCAzKSxcbiAgICAgICAgICBYID0gX3RoaXMkdW5wcm9qZWN0UG9zaXRpMlswXSxcbiAgICAgICAgICBZID0gX3RoaXMkdW5wcm9qZWN0UG9zaXRpMlsxXSxcbiAgICAgICAgICBaID0gX3RoaXMkdW5wcm9qZWN0UG9zaXRpMlsyXTtcblxuICAgICAgaWYgKE51bWJlci5pc0Zpbml0ZSh6KSkge1xuICAgICAgICByZXR1cm4gW1gsIFksIFpdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKHRhcmdldFopID8gW1gsIFksIHRhcmdldFpdIDogW1gsIFldO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJwcm9qZWN0UG9zaXRpb25cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcHJvamVjdFBvc2l0aW9uKHh5eikge1xuICAgICAgdmFyIF9sbmdMYXRUb1dvcmxkID0gbG5nTGF0VG9Xb3JsZCh4eXopLFxuICAgICAgICAgIF9sbmdMYXRUb1dvcmxkMiA9IF9zbGljZWRUb0FycmF5KF9sbmdMYXRUb1dvcmxkLCAyKSxcbiAgICAgICAgICBYID0gX2xuZ0xhdFRvV29ybGQyWzBdLFxuICAgICAgICAgIFkgPSBfbG5nTGF0VG9Xb3JsZDJbMV07XG5cbiAgICAgIHZhciBaID0gKHh5elsyXSB8fCAwKSAqIHRoaXMuZGlzdGFuY2VTY2FsZXMudW5pdHNQZXJNZXRlclsyXTtcbiAgICAgIHJldHVybiBbWCwgWSwgWl07XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInVucHJvamVjdFBvc2l0aW9uXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHVucHJvamVjdFBvc2l0aW9uKHh5eikge1xuICAgICAgdmFyIF93b3JsZFRvTG5nTGF0ID0gd29ybGRUb0xuZ0xhdCh4eXopLFxuICAgICAgICAgIF93b3JsZFRvTG5nTGF0MiA9IF9zbGljZWRUb0FycmF5KF93b3JsZFRvTG5nTGF0LCAyKSxcbiAgICAgICAgICBYID0gX3dvcmxkVG9MbmdMYXQyWzBdLFxuICAgICAgICAgIFkgPSBfd29ybGRUb0xuZ0xhdDJbMV07XG5cbiAgICAgIHZhciBaID0gKHh5elsyXSB8fCAwKSAqIHRoaXMuZGlzdGFuY2VTY2FsZXMubWV0ZXJzUGVyVW5pdFsyXTtcbiAgICAgIHJldHVybiBbWCwgWSwgWl07XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInByb2plY3RGbGF0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHByb2plY3RGbGF0KGxuZ0xhdCkge1xuICAgICAgcmV0dXJuIGxuZ0xhdFRvV29ybGQobG5nTGF0KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwidW5wcm9qZWN0RmxhdFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB1bnByb2plY3RGbGF0KHh5KSB7XG4gICAgICByZXR1cm4gd29ybGRUb0xuZ0xhdCh4eSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldE1hcENlbnRlckJ5TG5nTGF0UG9zaXRpb25cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0TWFwQ2VudGVyQnlMbmdMYXRQb3NpdGlvbihfcmVmNCkge1xuICAgICAgdmFyIGxuZ0xhdCA9IF9yZWY0LmxuZ0xhdCxcbiAgICAgICAgICBwb3MgPSBfcmVmNC5wb3M7XG4gICAgICB2YXIgZnJvbUxvY2F0aW9uID0gcGl4ZWxzVG9Xb3JsZChwb3MsIHRoaXMucGl4ZWxVbnByb2plY3Rpb25NYXRyaXgpO1xuICAgICAgdmFyIHRvTG9jYXRpb24gPSBsbmdMYXRUb1dvcmxkKGxuZ0xhdCk7XG4gICAgICB2YXIgdHJhbnNsYXRlID0gdmVjMi5hZGQoW10sIHRvTG9jYXRpb24sIHZlYzIubmVnYXRlKFtdLCBmcm9tTG9jYXRpb24pKTtcbiAgICAgIHZhciBuZXdDZW50ZXIgPSB2ZWMyLmFkZChbXSwgdGhpcy5jZW50ZXIsIHRyYW5zbGF0ZSk7XG4gICAgICByZXR1cm4gd29ybGRUb0xuZ0xhdChuZXdDZW50ZXIpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRMb2NhdGlvbkF0UG9pbnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0TG9jYXRpb25BdFBvaW50KF9yZWY1KSB7XG4gICAgICB2YXIgbG5nTGF0ID0gX3JlZjUubG5nTGF0LFxuICAgICAgICAgIHBvcyA9IF9yZWY1LnBvcztcbiAgICAgIHJldHVybiB0aGlzLmdldE1hcENlbnRlckJ5TG5nTGF0UG9zaXRpb24oe1xuICAgICAgICBsbmdMYXQ6IGxuZ0xhdCxcbiAgICAgICAgcG9zOiBwb3NcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJmaXRCb3VuZHNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZml0Qm91bmRzKGJvdW5kcykge1xuICAgICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICAgICAgdmFyIHdpZHRoID0gdGhpcy53aWR0aCxcbiAgICAgICAgICBoZWlnaHQgPSB0aGlzLmhlaWdodDtcblxuICAgICAgdmFyIF9maXRCb3VuZHMyID0gX2ZpdEJvdW5kcyhPYmplY3QuYXNzaWduKHtcbiAgICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICAgICAgYm91bmRzOiBib3VuZHNcbiAgICAgIH0sIG9wdGlvbnMpKSxcbiAgICAgICAgICBsb25naXR1ZGUgPSBfZml0Qm91bmRzMi5sb25naXR1ZGUsXG4gICAgICAgICAgbGF0aXR1ZGUgPSBfZml0Qm91bmRzMi5sYXRpdHVkZSxcbiAgICAgICAgICB6b29tID0gX2ZpdEJvdW5kczIuem9vbTtcblxuICAgICAgcmV0dXJuIG5ldyBXZWJNZXJjYXRvclZpZXdwb3J0KHtcbiAgICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICAgICAgbG9uZ2l0dWRlOiBsb25naXR1ZGUsXG4gICAgICAgIGxhdGl0dWRlOiBsYXRpdHVkZSxcbiAgICAgICAgem9vbTogem9vbVxuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldEJvdW5kc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRCb3VuZHMob3B0aW9ucykge1xuICAgICAgdmFyIGNvcm5lcnMgPSB0aGlzLmdldEJvdW5kaW5nUmVnaW9uKG9wdGlvbnMpO1xuICAgICAgdmFyIHdlc3QgPSBNYXRoLm1pbi5hcHBseShNYXRoLCBfdG9Db25zdW1hYmxlQXJyYXkoY29ybmVycy5tYXAoZnVuY3Rpb24gKHApIHtcbiAgICAgICAgcmV0dXJuIHBbMF07XG4gICAgICB9KSkpO1xuICAgICAgdmFyIGVhc3QgPSBNYXRoLm1heC5hcHBseShNYXRoLCBfdG9Db25zdW1hYmxlQXJyYXkoY29ybmVycy5tYXAoZnVuY3Rpb24gKHApIHtcbiAgICAgICAgcmV0dXJuIHBbMF07XG4gICAgICB9KSkpO1xuICAgICAgdmFyIHNvdXRoID0gTWF0aC5taW4uYXBwbHkoTWF0aCwgX3RvQ29uc3VtYWJsZUFycmF5KGNvcm5lcnMubWFwKGZ1bmN0aW9uIChwKSB7XG4gICAgICAgIHJldHVybiBwWzFdO1xuICAgICAgfSkpKTtcbiAgICAgIHZhciBub3J0aCA9IE1hdGgubWF4LmFwcGx5KE1hdGgsIF90b0NvbnN1bWFibGVBcnJheShjb3JuZXJzLm1hcChmdW5jdGlvbiAocCkge1xuICAgICAgICByZXR1cm4gcFsxXTtcbiAgICAgIH0pKSk7XG4gICAgICByZXR1cm4gW1t3ZXN0LCBzb3V0aF0sIFtlYXN0LCBub3J0aF1dO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRCb3VuZGluZ1JlZ2lvblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRCb3VuZGluZ1JlZ2lvbigpIHtcbiAgICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgICAgIHJldHVybiBnZXRCb3VuZHModGhpcywgb3B0aW9ucy56IHx8IDApO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBXZWJNZXJjYXRvclZpZXdwb3J0O1xufSgpO1xuXG5leHBvcnQgeyBXZWJNZXJjYXRvclZpZXdwb3J0IGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgV2ViTWVyY2F0b3JWaWV3cG9ydCBmcm9tICcuL3dlYi1tZXJjYXRvci12aWV3cG9ydCc7XG5pbXBvcnQgeyBtb2QsIGxvZzIgfSBmcm9tICcuL21hdGgtdXRpbHMnO1xudmFyIE1BWF9MQVRJVFVERSA9IDg1LjA1MTEzO1xudmFyIE1JTl9MQVRJVFVERSA9IC04NS4wNTExMztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG5vcm1hbGl6ZVZpZXdwb3J0UHJvcHMoX3JlZikge1xuICB2YXIgd2lkdGggPSBfcmVmLndpZHRoLFxuICAgICAgaGVpZ2h0ID0gX3JlZi5oZWlnaHQsXG4gICAgICBsb25naXR1ZGUgPSBfcmVmLmxvbmdpdHVkZSxcbiAgICAgIGxhdGl0dWRlID0gX3JlZi5sYXRpdHVkZSxcbiAgICAgIHpvb20gPSBfcmVmLnpvb20sXG4gICAgICBfcmVmJHBpdGNoID0gX3JlZi5waXRjaCxcbiAgICAgIHBpdGNoID0gX3JlZiRwaXRjaCA9PT0gdm9pZCAwID8gMCA6IF9yZWYkcGl0Y2gsXG4gICAgICBfcmVmJGJlYXJpbmcgPSBfcmVmLmJlYXJpbmcsXG4gICAgICBiZWFyaW5nID0gX3JlZiRiZWFyaW5nID09PSB2b2lkIDAgPyAwIDogX3JlZiRiZWFyaW5nO1xuXG4gIGlmIChsb25naXR1ZGUgPCAtMTgwIHx8IGxvbmdpdHVkZSA+IDE4MCkge1xuICAgIGxvbmdpdHVkZSA9IG1vZChsb25naXR1ZGUgKyAxODAsIDM2MCkgLSAxODA7XG4gIH1cblxuICBpZiAoYmVhcmluZyA8IC0xODAgfHwgYmVhcmluZyA+IDE4MCkge1xuICAgIGJlYXJpbmcgPSBtb2QoYmVhcmluZyArIDE4MCwgMzYwKSAtIDE4MDtcbiAgfVxuXG4gIHZhciBmbGF0Vmlld3BvcnQgPSBuZXcgV2ViTWVyY2F0b3JWaWV3cG9ydCh7XG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0LFxuICAgIGxvbmdpdHVkZTogbG9uZ2l0dWRlLFxuICAgIGxhdGl0dWRlOiBsYXRpdHVkZSxcbiAgICB6b29tOiB6b29tXG4gIH0pO1xuICB2YXIgdG9wWSA9IGZsYXRWaWV3cG9ydC5wcm9qZWN0KFtsb25naXR1ZGUsIE1BWF9MQVRJVFVERV0pWzFdO1xuICB2YXIgYm90dG9tWSA9IGZsYXRWaWV3cG9ydC5wcm9qZWN0KFtsb25naXR1ZGUsIE1JTl9MQVRJVFVERV0pWzFdO1xuICB2YXIgc2hpZnRZID0gMDtcblxuICBpZiAoYm90dG9tWSAtIHRvcFkgPCBoZWlnaHQpIHtcbiAgICB6b29tICs9IGxvZzIoaGVpZ2h0IC8gKGJvdHRvbVkgLSB0b3BZKSk7XG4gICAgZmxhdFZpZXdwb3J0ID0gbmV3IFdlYk1lcmNhdG9yVmlld3BvcnQoe1xuICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgICBsb25naXR1ZGU6IGxvbmdpdHVkZSxcbiAgICAgIGxhdGl0dWRlOiBsYXRpdHVkZSxcbiAgICAgIHpvb206IHpvb21cbiAgICB9KTtcbiAgICB0b3BZID0gZmxhdFZpZXdwb3J0LnByb2plY3QoW2xvbmdpdHVkZSwgTUFYX0xBVElUVURFXSlbMV07XG4gICAgYm90dG9tWSA9IGZsYXRWaWV3cG9ydC5wcm9qZWN0KFtsb25naXR1ZGUsIE1JTl9MQVRJVFVERV0pWzFdO1xuICB9XG5cbiAgaWYgKHRvcFkgPiAwKSB7XG4gICAgc2hpZnRZID0gdG9wWTtcbiAgfSBlbHNlIGlmIChib3R0b21ZIDwgaGVpZ2h0KSB7XG4gICAgc2hpZnRZID0gYm90dG9tWSAtIGhlaWdodDtcbiAgfVxuXG4gIGlmIChzaGlmdFkpIHtcbiAgICBsYXRpdHVkZSA9IGZsYXRWaWV3cG9ydC51bnByb2plY3QoW3dpZHRoIC8gMiwgaGVpZ2h0IC8gMiArIHNoaWZ0WV0pWzFdO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB3aWR0aDogd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgbG9uZ2l0dWRlOiBsb25naXR1ZGUsXG4gICAgbGF0aXR1ZGU6IGxhdGl0dWRlLFxuICAgIHpvb206IHpvb20sXG4gICAgcGl0Y2g6IHBpdGNoLFxuICAgIGJlYXJpbmc6IGJlYXJpbmdcbiAgfTtcbn0iLCJmdW5jdGlvbiBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcihvLCBhbGxvd0FycmF5TGlrZSkgeyB2YXIgaXQgPSB0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXSB8fCBvW1wiQEBpdGVyYXRvclwiXTsgaWYgKCFpdCkgeyBpZiAoQXJyYXkuaXNBcnJheShvKSB8fCAoaXQgPSBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobykpIHx8IGFsbG93QXJyYXlMaWtlICYmIG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSB7IGlmIChpdCkgbyA9IGl0OyB2YXIgaSA9IDA7IHZhciBGID0gZnVuY3Rpb24gRigpIHt9OyByZXR1cm4geyBzOiBGLCBuOiBmdW5jdGlvbiBuKCkgeyBpZiAoaSA+PSBvLmxlbmd0aCkgcmV0dXJuIHsgZG9uZTogdHJ1ZSB9OyByZXR1cm4geyBkb25lOiBmYWxzZSwgdmFsdWU6IG9baSsrXSB9OyB9LCBlOiBmdW5jdGlvbiBlKF9lKSB7IHRocm93IF9lOyB9LCBmOiBGIH07IH0gdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9IHZhciBub3JtYWxDb21wbGV0aW9uID0gdHJ1ZSwgZGlkRXJyID0gZmFsc2UsIGVycjsgcmV0dXJuIHsgczogZnVuY3Rpb24gcygpIHsgaXQgPSBpdC5jYWxsKG8pOyB9LCBuOiBmdW5jdGlvbiBuKCkgeyB2YXIgc3RlcCA9IGl0Lm5leHQoKTsgbm9ybWFsQ29tcGxldGlvbiA9IHN0ZXAuZG9uZTsgcmV0dXJuIHN0ZXA7IH0sIGU6IGZ1bmN0aW9uIGUoX2UyKSB7IGRpZEVyciA9IHRydWU7IGVyciA9IF9lMjsgfSwgZjogZnVuY3Rpb24gZigpIHsgdHJ5IHsgaWYgKCFub3JtYWxDb21wbGV0aW9uICYmIGl0LnJldHVybiAhPSBudWxsKSBpdC5yZXR1cm4oKTsgfSBmaW5hbGx5IHsgaWYgKGRpZEVycikgdGhyb3cgZXJyOyB9IH0gfTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbmltcG9ydCB7IGxlcnAgfSBmcm9tICcuL21hdGgtdXRpbHMnO1xuaW1wb3J0IHsgc2NhbGVUb1pvb20sIHpvb21Ub1NjYWxlLCBsbmdMYXRUb1dvcmxkLCB3b3JsZFRvTG5nTGF0IH0gZnJvbSAnLi93ZWItbWVyY2F0b3ItdXRpbHMnO1xuaW1wb3J0ICogYXMgdmVjMiBmcm9tICdnbC1tYXRyaXgvdmVjMic7XG52YXIgRVBTSUxPTiA9IDAuMDE7XG52YXIgVklFV1BPUlRfVFJBTlNJVElPTl9QUk9QUyA9IFsnbG9uZ2l0dWRlJywgJ2xhdGl0dWRlJywgJ3pvb20nXTtcbnZhciBERUZBVUxUX09QVFMgPSB7XG4gIGN1cnZlOiAxLjQxNCxcbiAgc3BlZWQ6IDEuMlxufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZseVRvVmlld3BvcnQoc3RhcnRQcm9wcywgZW5kUHJvcHMsIHQpIHtcbiAgdmFyIG9wdHMgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6IHt9O1xuICB2YXIgdmlld3BvcnQgPSB7fTtcblxuICB2YXIgX2dldEZseVRvVHJhbnNpdGlvblBhID0gZ2V0Rmx5VG9UcmFuc2l0aW9uUGFyYW1zKHN0YXJ0UHJvcHMsIGVuZFByb3BzLCBvcHRzKSxcbiAgICAgIHN0YXJ0Wm9vbSA9IF9nZXRGbHlUb1RyYW5zaXRpb25QYS5zdGFydFpvb20sXG4gICAgICBzdGFydENlbnRlclhZID0gX2dldEZseVRvVHJhbnNpdGlvblBhLnN0YXJ0Q2VudGVyWFksXG4gICAgICB1RGVsdGEgPSBfZ2V0Rmx5VG9UcmFuc2l0aW9uUGEudURlbHRhLFxuICAgICAgdzAgPSBfZ2V0Rmx5VG9UcmFuc2l0aW9uUGEudzAsXG4gICAgICB1MSA9IF9nZXRGbHlUb1RyYW5zaXRpb25QYS51MSxcbiAgICAgIFMgPSBfZ2V0Rmx5VG9UcmFuc2l0aW9uUGEuUyxcbiAgICAgIHJobyA9IF9nZXRGbHlUb1RyYW5zaXRpb25QYS5yaG8sXG4gICAgICByaG8yID0gX2dldEZseVRvVHJhbnNpdGlvblBhLnJobzIsXG4gICAgICByMCA9IF9nZXRGbHlUb1RyYW5zaXRpb25QYS5yMDtcblxuICBpZiAodTEgPCBFUFNJTE9OKSB7XG4gICAgdmFyIF9pdGVyYXRvciA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKFZJRVdQT1JUX1RSQU5TSVRJT05fUFJPUFMpLFxuICAgICAgICBfc3RlcDtcblxuICAgIHRyeSB7XG4gICAgICBmb3IgKF9pdGVyYXRvci5zKCk7ICEoX3N0ZXAgPSBfaXRlcmF0b3IubigpKS5kb25lOykge1xuICAgICAgICB2YXIga2V5ID0gX3N0ZXAudmFsdWU7XG4gICAgICAgIHZhciBzdGFydFZhbHVlID0gc3RhcnRQcm9wc1trZXldO1xuICAgICAgICB2YXIgZW5kVmFsdWUgPSBlbmRQcm9wc1trZXldO1xuICAgICAgICB2aWV3cG9ydFtrZXldID0gbGVycChzdGFydFZhbHVlLCBlbmRWYWx1ZSwgdCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBfaXRlcmF0b3IuZShlcnIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBfaXRlcmF0b3IuZigpO1xuICAgIH1cblxuICAgIHJldHVybiB2aWV3cG9ydDtcbiAgfVxuXG4gIHZhciBzID0gdCAqIFM7XG4gIHZhciB3ID0gTWF0aC5jb3NoKHIwKSAvIE1hdGguY29zaChyMCArIHJobyAqIHMpO1xuICB2YXIgdSA9IHcwICogKChNYXRoLmNvc2gocjApICogTWF0aC50YW5oKHIwICsgcmhvICogcykgLSBNYXRoLnNpbmgocjApKSAvIHJobzIpIC8gdTE7XG4gIHZhciBzY2FsZUluY3JlbWVudCA9IDEgLyB3O1xuICB2YXIgbmV3Wm9vbSA9IHN0YXJ0Wm9vbSArIHNjYWxlVG9ab29tKHNjYWxlSW5jcmVtZW50KTtcbiAgdmFyIG5ld0NlbnRlcldvcmxkID0gdmVjMi5zY2FsZShbXSwgdURlbHRhLCB1KTtcbiAgdmVjMi5hZGQobmV3Q2VudGVyV29ybGQsIG5ld0NlbnRlcldvcmxkLCBzdGFydENlbnRlclhZKTtcbiAgdmFyIG5ld0NlbnRlciA9IHdvcmxkVG9MbmdMYXQobmV3Q2VudGVyV29ybGQpO1xuICB2aWV3cG9ydC5sb25naXR1ZGUgPSBuZXdDZW50ZXJbMF07XG4gIHZpZXdwb3J0LmxhdGl0dWRlID0gbmV3Q2VudGVyWzFdO1xuICB2aWV3cG9ydC56b29tID0gbmV3Wm9vbTtcbiAgcmV0dXJuIHZpZXdwb3J0O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldEZseVRvRHVyYXRpb24oc3RhcnRQcm9wcywgZW5kUHJvcHMpIHtcbiAgdmFyIG9wdHMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHt9O1xuICBvcHRzID0gT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9PUFRTLCBvcHRzKTtcbiAgdmFyIF9vcHRzID0gb3B0cyxcbiAgICAgIHNjcmVlblNwZWVkID0gX29wdHMuc2NyZWVuU3BlZWQsXG4gICAgICBzcGVlZCA9IF9vcHRzLnNwZWVkLFxuICAgICAgbWF4RHVyYXRpb24gPSBfb3B0cy5tYXhEdXJhdGlvbjtcblxuICB2YXIgX2dldEZseVRvVHJhbnNpdGlvblBhMiA9IGdldEZseVRvVHJhbnNpdGlvblBhcmFtcyhzdGFydFByb3BzLCBlbmRQcm9wcywgb3B0cyksXG4gICAgICBTID0gX2dldEZseVRvVHJhbnNpdGlvblBhMi5TLFxuICAgICAgcmhvID0gX2dldEZseVRvVHJhbnNpdGlvblBhMi5yaG87XG5cbiAgdmFyIGxlbmd0aCA9IDEwMDAgKiBTO1xuICB2YXIgZHVyYXRpb247XG5cbiAgaWYgKE51bWJlci5pc0Zpbml0ZShzY3JlZW5TcGVlZCkpIHtcbiAgICBkdXJhdGlvbiA9IGxlbmd0aCAvIChzY3JlZW5TcGVlZCAvIHJobyk7XG4gIH0gZWxzZSB7XG4gICAgZHVyYXRpb24gPSBsZW5ndGggLyBzcGVlZDtcbiAgfVxuXG4gIHJldHVybiBOdW1iZXIuaXNGaW5pdGUobWF4RHVyYXRpb24pICYmIGR1cmF0aW9uID4gbWF4RHVyYXRpb24gPyAwIDogZHVyYXRpb247XG59XG5cbmZ1bmN0aW9uIGdldEZseVRvVHJhbnNpdGlvblBhcmFtcyhzdGFydFByb3BzLCBlbmRQcm9wcywgb3B0cykge1xuICBvcHRzID0gT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9PUFRTLCBvcHRzKTtcbiAgdmFyIHJobyA9IG9wdHMuY3VydmU7XG4gIHZhciBzdGFydFpvb20gPSBzdGFydFByb3BzLnpvb207XG4gIHZhciBzdGFydENlbnRlciA9IFtzdGFydFByb3BzLmxvbmdpdHVkZSwgc3RhcnRQcm9wcy5sYXRpdHVkZV07XG4gIHZhciBzdGFydFNjYWxlID0gem9vbVRvU2NhbGUoc3RhcnRab29tKTtcbiAgdmFyIGVuZFpvb20gPSBlbmRQcm9wcy56b29tO1xuICB2YXIgZW5kQ2VudGVyID0gW2VuZFByb3BzLmxvbmdpdHVkZSwgZW5kUHJvcHMubGF0aXR1ZGVdO1xuICB2YXIgc2NhbGUgPSB6b29tVG9TY2FsZShlbmRab29tIC0gc3RhcnRab29tKTtcbiAgdmFyIHN0YXJ0Q2VudGVyWFkgPSBsbmdMYXRUb1dvcmxkKHN0YXJ0Q2VudGVyKTtcbiAgdmFyIGVuZENlbnRlclhZID0gbG5nTGF0VG9Xb3JsZChlbmRDZW50ZXIpO1xuICB2YXIgdURlbHRhID0gdmVjMi5zdWIoW10sIGVuZENlbnRlclhZLCBzdGFydENlbnRlclhZKTtcbiAgdmFyIHcwID0gTWF0aC5tYXgoc3RhcnRQcm9wcy53aWR0aCwgc3RhcnRQcm9wcy5oZWlnaHQpO1xuICB2YXIgdzEgPSB3MCAvIHNjYWxlO1xuICB2YXIgdTEgPSB2ZWMyLmxlbmd0aCh1RGVsdGEpICogc3RhcnRTY2FsZTtcblxuICB2YXIgX3UxID0gTWF0aC5tYXgodTEsIEVQU0lMT04pO1xuXG4gIHZhciByaG8yID0gcmhvICogcmhvO1xuICB2YXIgYjAgPSAodzEgKiB3MSAtIHcwICogdzAgKyByaG8yICogcmhvMiAqIF91MSAqIF91MSkgLyAoMiAqIHcwICogcmhvMiAqIF91MSk7XG4gIHZhciBiMSA9ICh3MSAqIHcxIC0gdzAgKiB3MCAtIHJobzIgKiByaG8yICogX3UxICogX3UxKSAvICgyICogdzEgKiByaG8yICogX3UxKTtcbiAgdmFyIHIwID0gTWF0aC5sb2coTWF0aC5zcXJ0KGIwICogYjAgKyAxKSAtIGIwKTtcbiAgdmFyIHIxID0gTWF0aC5sb2coTWF0aC5zcXJ0KGIxICogYjEgKyAxKSAtIGIxKTtcbiAgdmFyIFMgPSAocjEgLSByMCkgLyByaG87XG4gIHJldHVybiB7XG4gICAgc3RhcnRab29tOiBzdGFydFpvb20sXG4gICAgc3RhcnRDZW50ZXJYWTogc3RhcnRDZW50ZXJYWSxcbiAgICB1RGVsdGE6IHVEZWx0YSxcbiAgICB3MDogdzAsXG4gICAgdTE6IHUxLFxuICAgIFM6IFMsXG4gICAgcmhvOiByaG8sXG4gICAgcmhvMjogcmhvMixcbiAgICByMDogcjAsXG4gICAgcjE6IHIxXG4gIH07XG59IiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gJy4vd2ViLW1lcmNhdG9yLXZpZXdwb3J0JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgV2ViTWVyY2F0b3JWaWV3cG9ydCB9IGZyb20gJy4vd2ViLW1lcmNhdG9yLXZpZXdwb3J0JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZ2V0Qm91bmRzIH0gZnJvbSAnLi9nZXQtYm91bmRzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZml0Qm91bmRzIH0gZnJvbSAnLi9maXQtYm91bmRzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgbm9ybWFsaXplVmlld3BvcnRQcm9wcyB9IGZyb20gJy4vbm9ybWFsaXplLXZpZXdwb3J0LXByb3BzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZmx5VG9WaWV3cG9ydCwgZ2V0Rmx5VG9EdXJhdGlvbiB9IGZyb20gJy4vZmx5LXRvLXZpZXdwb3J0JztcbmV4cG9ydCB7IGxuZ0xhdFRvV29ybGQsIHdvcmxkVG9MbmdMYXQsIHdvcmxkVG9QaXhlbHMsIHBpeGVsc1RvV29ybGQsIHpvb21Ub1NjYWxlLCBzY2FsZVRvWm9vbSwgZ2V0TWV0ZXJab29tLCBnZXREaXN0YW5jZVNjYWxlcywgYWRkTWV0ZXJzVG9MbmdMYXQsIGdldFZpZXdNYXRyaXgsIGdldFByb2plY3Rpb25NYXRyaXgsIGdldFByb2plY3Rpb25QYXJhbWV0ZXJzIH0gZnJvbSAnLi93ZWItbWVyY2F0b3ItdXRpbHMnOyIsImV4cG9ydCB7IFdlYk1lcmNhdG9yVmlld3BvcnQgYXMgZGVmYXVsdCB9IGZyb20gJ0BtYXRoLmdsL3dlYi1tZXJjYXRvcic7XG5leHBvcnQgKiBmcm9tICdAbWF0aC5nbC93ZWItbWVyY2F0b3InOyIsIi8qKlxyXG4gKiBBIGNvbGxlY3Rpb24gb2Ygc2hpbXMgdGhhdCBwcm92aWRlIG1pbmltYWwgZnVuY3Rpb25hbGl0eSBvZiB0aGUgRVM2IGNvbGxlY3Rpb25zLlxyXG4gKlxyXG4gKiBUaGVzZSBpbXBsZW1lbnRhdGlvbnMgYXJlIG5vdCBtZWFudCB0byBiZSB1c2VkIG91dHNpZGUgb2YgdGhlIFJlc2l6ZU9ic2VydmVyXHJcbiAqIG1vZHVsZXMgYXMgdGhleSBjb3ZlciBvbmx5IGEgbGltaXRlZCByYW5nZSBvZiB1c2UgY2FzZXMuXHJcbiAqL1xuXG4vKiBlc2xpbnQtZGlzYWJsZSByZXF1aXJlLWpzZG9jLCB2YWxpZC1qc2RvYyAqL1xudmFyIE1hcFNoaW0gPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0eXBlb2YgTWFwICE9PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBNYXA7XG4gIH1cbiAgLyoqXHJcbiAgICogUmV0dXJucyBpbmRleCBpbiBwcm92aWRlZCBhcnJheSB0aGF0IG1hdGNoZXMgdGhlIHNwZWNpZmllZCBrZXkuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0FycmF5PEFycmF5Pn0gYXJyXHJcbiAgICogQHBhcmFtIHsqfSBrZXlcclxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxyXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gZ2V0SW5kZXgoYXJyLCBrZXkpIHtcbiAgICB2YXIgcmVzdWx0ID0gLTE7XG4gICAgYXJyLnNvbWUoZnVuY3Rpb24gKGVudHJ5LCBpbmRleCkge1xuICAgICAgaWYgKGVudHJ5WzBdID09PSBrZXkpIHtcbiAgICAgICAgcmVzdWx0ID0gaW5kZXg7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgLyoqIEBjbGFzcyAqL1xuICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZ1bmN0aW9uIGNsYXNzXzEoKSB7XG4gICAgICAgIHRoaXMuX19lbnRyaWVzX18gPSBbXTtcbiAgICAgIH1cblxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNsYXNzXzEucHJvdG90eXBlLCBcInNpemVcIiwge1xuICAgICAgICAvKipcclxuICAgICAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX19lbnRyaWVzX18ubGVuZ3RoO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgIH0pO1xuICAgICAgLyoqXHJcbiAgICAgICAqIEBwYXJhbSB7Kn0ga2V5XHJcbiAgICAgICAqIEByZXR1cm5zIHsqfVxyXG4gICAgICAgKi9cblxuICAgICAgY2xhc3NfMS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKGtleSkge1xuICAgICAgICB2YXIgaW5kZXggPSBnZXRJbmRleCh0aGlzLl9fZW50cmllc19fLCBrZXkpO1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLl9fZW50cmllc19fW2luZGV4XTtcbiAgICAgICAgcmV0dXJuIGVudHJ5ICYmIGVudHJ5WzFdO1xuICAgICAgfTtcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAcGFyYW0geyp9IGtleVxyXG4gICAgICAgKiBAcGFyYW0geyp9IHZhbHVlXHJcbiAgICAgICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAgICAgKi9cblxuXG4gICAgICBjbGFzc18xLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgICB2YXIgaW5kZXggPSBnZXRJbmRleCh0aGlzLl9fZW50cmllc19fLCBrZXkpO1xuXG4gICAgICAgIGlmICh+aW5kZXgpIHtcbiAgICAgICAgICB0aGlzLl9fZW50cmllc19fW2luZGV4XVsxXSA9IHZhbHVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuX19lbnRyaWVzX18ucHVzaChba2V5LCB2YWx1ZV0pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgLyoqXHJcbiAgICAgICAqIEBwYXJhbSB7Kn0ga2V5XHJcbiAgICAgICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAgICAgKi9cblxuXG4gICAgICBjbGFzc18xLnByb3RvdHlwZS5kZWxldGUgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHZhciBlbnRyaWVzID0gdGhpcy5fX2VudHJpZXNfXztcbiAgICAgICAgdmFyIGluZGV4ID0gZ2V0SW5kZXgoZW50cmllcywga2V5KTtcblxuICAgICAgICBpZiAofmluZGV4KSB7XG4gICAgICAgICAgZW50cmllcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgLyoqXHJcbiAgICAgICAqIEBwYXJhbSB7Kn0ga2V5XHJcbiAgICAgICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAgICAgKi9cblxuXG4gICAgICBjbGFzc18xLnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHJldHVybiAhIX5nZXRJbmRleCh0aGlzLl9fZW50cmllc19fLCBrZXkpO1xuICAgICAgfTtcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAcmV0dXJucyB7dm9pZH1cclxuICAgICAgICovXG5cblxuICAgICAgY2xhc3NfMS5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuX19lbnRyaWVzX18uc3BsaWNlKDApO1xuICAgICAgfTtcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xyXG4gICAgICAgKiBAcGFyYW0geyp9IFtjdHg9bnVsbF1cclxuICAgICAgICogQHJldHVybnMge3ZvaWR9XHJcbiAgICAgICAqL1xuXG5cbiAgICAgIGNsYXNzXzEucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2ssIGN0eCkge1xuICAgICAgICBpZiAoY3R4ID09PSB2b2lkIDApIHtcbiAgICAgICAgICBjdHggPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IHRoaXMuX19lbnRyaWVzX187IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgdmFyIGVudHJ5ID0gX2FbX2ldO1xuICAgICAgICAgIGNhbGxiYWNrLmNhbGwoY3R4LCBlbnRyeVsxXSwgZW50cnlbMF0pO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gY2xhc3NfMTtcbiAgICB9KClcbiAgKTtcbn0oKTtcbi8qKlxyXG4gKiBEZXRlY3RzIHdoZXRoZXIgd2luZG93IGFuZCBkb2N1bWVudCBvYmplY3RzIGFyZSBhdmFpbGFibGUgaW4gY3VycmVudCBlbnZpcm9ubWVudC5cclxuICovXG5cblxudmFyIGlzQnJvd3NlciA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmRvY3VtZW50ID09PSBkb2N1bWVudDsgLy8gUmV0dXJucyBnbG9iYWwgb2JqZWN0IG9mIGEgY3VycmVudCBlbnZpcm9ubWVudC5cblxudmFyIGdsb2JhbCQxID0gZnVuY3Rpb24gKCkge1xuICBpZiAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcgJiYgZ2xvYmFsLk1hdGggPT09IE1hdGgpIHtcbiAgICByZXR1cm4gZ2xvYmFsO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyAmJiBzZWxmLk1hdGggPT09IE1hdGgpIHtcbiAgICByZXR1cm4gc2VsZjtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuTWF0aCA9PT0gTWF0aCkge1xuICAgIHJldHVybiB3aW5kb3c7XG4gIH0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG5cblxuICByZXR1cm4gRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbn0oKTtcbi8qKlxyXG4gKiBBIHNoaW0gZm9yIHRoZSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgd2hpY2ggZmFsbHMgYmFjayB0byB0aGUgc2V0VGltZW91dCBpZlxyXG4gKiBmaXJzdCBvbmUgaXMgbm90IHN1cHBvcnRlZC5cclxuICpcclxuICogQHJldHVybnMge251bWJlcn0gUmVxdWVzdHMnIGlkZW50aWZpZXIuXHJcbiAqL1xuXG5cbnZhciByZXF1ZXN0QW5pbWF0aW9uRnJhbWUkMSA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBJdCdzIHJlcXVpcmVkIHRvIHVzZSBhIGJvdW5kZWQgZnVuY3Rpb24gYmVjYXVzZSBJRSBzb21ldGltZXMgdGhyb3dzXG4gICAgLy8gYW4gXCJJbnZhbGlkIGNhbGxpbmcgb2JqZWN0XCIgZXJyb3IgaWYgckFGIGlzIGludm9rZWQgd2l0aG91dCB0aGUgZ2xvYmFsXG4gICAgLy8gb2JqZWN0IG9uIHRoZSBsZWZ0IGhhbmQgc2lkZS5cbiAgICByZXR1cm4gcmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQoZ2xvYmFsJDEpO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBjYWxsYmFjayhEYXRlLm5vdygpKTtcbiAgICB9LCAxMDAwIC8gNjApO1xuICB9O1xufSgpOyAvLyBEZWZpbmVzIG1pbmltdW0gdGltZW91dCBiZWZvcmUgYWRkaW5nIGEgdHJhaWxpbmcgY2FsbC5cblxuXG52YXIgdHJhaWxpbmdUaW1lb3V0ID0gMjtcbi8qKlxyXG4gKiBDcmVhdGVzIGEgd3JhcHBlciBmdW5jdGlvbiB3aGljaCBlbnN1cmVzIHRoYXQgcHJvdmlkZWQgY2FsbGJhY2sgd2lsbCBiZVxyXG4gKiBpbnZva2VkIG9ubHkgb25jZSBkdXJpbmcgdGhlIHNwZWNpZmllZCBkZWxheSBwZXJpb2QuXHJcbiAqXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIC0gRnVuY3Rpb24gdG8gYmUgaW52b2tlZCBhZnRlciB0aGUgZGVsYXkgcGVyaW9kLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gZGVsYXkgLSBEZWxheSBhZnRlciB3aGljaCB0byBpbnZva2UgY2FsbGJhY2suXHJcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cclxuICovXG5cbmZ1bmN0aW9uIHRocm90dGxlKGNhbGxiYWNrLCBkZWxheSkge1xuICB2YXIgbGVhZGluZ0NhbGwgPSBmYWxzZSxcbiAgICAgIHRyYWlsaW5nQ2FsbCA9IGZhbHNlLFxuICAgICAgbGFzdENhbGxUaW1lID0gMDtcbiAgLyoqXHJcbiAgICogSW52b2tlcyB0aGUgb3JpZ2luYWwgY2FsbGJhY2sgZnVuY3Rpb24gYW5kIHNjaGVkdWxlcyBuZXcgaW52b2NhdGlvbiBpZlxyXG4gICAqIHRoZSBcInByb3h5XCIgd2FzIGNhbGxlZCBkdXJpbmcgY3VycmVudCByZXF1ZXN0LlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge3ZvaWR9XHJcbiAgICovXG5cbiAgZnVuY3Rpb24gcmVzb2x2ZVBlbmRpbmcoKSB7XG4gICAgaWYgKGxlYWRpbmdDYWxsKSB7XG4gICAgICBsZWFkaW5nQ2FsbCA9IGZhbHNlO1xuICAgICAgY2FsbGJhY2soKTtcbiAgICB9XG5cbiAgICBpZiAodHJhaWxpbmdDYWxsKSB7XG4gICAgICBwcm94eSgpO1xuICAgIH1cbiAgfVxuICAvKipcclxuICAgKiBDYWxsYmFjayBpbnZva2VkIGFmdGVyIHRoZSBzcGVjaWZpZWQgZGVsYXkuIEl0IHdpbGwgZnVydGhlciBwb3N0cG9uZVxyXG4gICAqIGludm9jYXRpb24gb2YgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIGRlbGVnYXRpbmcgaXQgdG8gdGhlXHJcbiAgICogcmVxdWVzdEFuaW1hdGlvbkZyYW1lLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge3ZvaWR9XHJcbiAgICovXG5cblxuICBmdW5jdGlvbiB0aW1lb3V0Q2FsbGJhY2soKSB7XG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lJDEocmVzb2x2ZVBlbmRpbmcpO1xuICB9XG4gIC8qKlxyXG4gICAqIFNjaGVkdWxlcyBpbnZvY2F0aW9uIG9mIHRoZSBvcmlnaW5hbCBmdW5jdGlvbi5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcHJveHkoKSB7XG4gICAgdmFyIHRpbWVTdGFtcCA9IERhdGUubm93KCk7XG5cbiAgICBpZiAobGVhZGluZ0NhbGwpIHtcbiAgICAgIC8vIFJlamVjdCBpbW1lZGlhdGVseSBmb2xsb3dpbmcgY2FsbHMuXG4gICAgICBpZiAodGltZVN0YW1wIC0gbGFzdENhbGxUaW1lIDwgdHJhaWxpbmdUaW1lb3V0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gLy8gU2NoZWR1bGUgbmV3IGNhbGwgdG8gYmUgaW4gaW52b2tlZCB3aGVuIHRoZSBwZW5kaW5nIG9uZSBpcyByZXNvbHZlZC5cbiAgICAgIC8vIFRoaXMgaXMgaW1wb3J0YW50IGZvciBcInRyYW5zaXRpb25zXCIgd2hpY2ggbmV2ZXIgYWN0dWFsbHkgc3RhcnRcbiAgICAgIC8vIGltbWVkaWF0ZWx5IHNvIHRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgd2UgbWlnaHQgbWlzcyBvbmUgaWYgY2hhbmdlXG4gICAgICAvLyBoYXBwZW5zIGFtaWRzIHRoZSBwZW5kaW5nIGludm9jYXRpb24uXG5cblxuICAgICAgdHJhaWxpbmdDYWxsID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGVhZGluZ0NhbGwgPSB0cnVlO1xuICAgICAgdHJhaWxpbmdDYWxsID0gZmFsc2U7XG4gICAgICBzZXRUaW1lb3V0KHRpbWVvdXRDYWxsYmFjaywgZGVsYXkpO1xuICAgIH1cblxuICAgIGxhc3RDYWxsVGltZSA9IHRpbWVTdGFtcDtcbiAgfVxuXG4gIHJldHVybiBwcm94eTtcbn0gLy8gTWluaW11bSBkZWxheSBiZWZvcmUgaW52b2tpbmcgdGhlIHVwZGF0ZSBvZiBvYnNlcnZlcnMuXG5cblxudmFyIFJFRlJFU0hfREVMQVkgPSAyMDsgLy8gQSBsaXN0IG9mIHN1YnN0cmluZ3Mgb2YgQ1NTIHByb3BlcnRpZXMgdXNlZCB0byBmaW5kIHRyYW5zaXRpb24gZXZlbnRzIHRoYXRcbi8vIG1pZ2h0IGFmZmVjdCBkaW1lbnNpb25zIG9mIG9ic2VydmVkIGVsZW1lbnRzLlxuXG52YXIgdHJhbnNpdGlvbktleXMgPSBbJ3RvcCcsICdyaWdodCcsICdib3R0b20nLCAnbGVmdCcsICd3aWR0aCcsICdoZWlnaHQnLCAnc2l6ZScsICd3ZWlnaHQnXTsgLy8gQ2hlY2sgaWYgTXV0YXRpb25PYnNlcnZlciBpcyBhdmFpbGFibGUuXG5cbnZhciBtdXRhdGlvbk9ic2VydmVyU3VwcG9ydGVkID0gdHlwZW9mIE11dGF0aW9uT2JzZXJ2ZXIgIT09ICd1bmRlZmluZWQnO1xuLyoqXHJcbiAqIFNpbmdsZXRvbiBjb250cm9sbGVyIGNsYXNzIHdoaWNoIGhhbmRsZXMgdXBkYXRlcyBvZiBSZXNpemVPYnNlcnZlciBpbnN0YW5jZXMuXHJcbiAqL1xuXG52YXIgUmVzaXplT2JzZXJ2ZXJDb250cm9sbGVyID1cbi8qKiBAY2xhc3MgKi9cbmZ1bmN0aW9uICgpIHtcbiAgLyoqXHJcbiAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBSZXNpemVPYnNlcnZlckNvbnRyb2xsZXIuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xuICBmdW5jdGlvbiBSZXNpemVPYnNlcnZlckNvbnRyb2xsZXIoKSB7XG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciBET00gbGlzdGVuZXJzIGhhdmUgYmVlbiBhZGRlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcHJpdmF0ZSB7Ym9vbGVhbn1cclxuICAgICAqL1xuICAgIHRoaXMuY29ubmVjdGVkXyA9IGZhbHNlO1xuICAgIC8qKlxyXG4gICAgICogVGVsbHMgdGhhdCBjb250cm9sbGVyIGhhcyBzdWJzY3JpYmVkIGZvciBNdXRhdGlvbiBFdmVudHMuXHJcbiAgICAgKlxyXG4gICAgICogQHByaXZhdGUge2Jvb2xlYW59XHJcbiAgICAgKi9cblxuICAgIHRoaXMubXV0YXRpb25FdmVudHNBZGRlZF8gPSBmYWxzZTtcbiAgICAvKipcclxuICAgICAqIEtlZXBzIHJlZmVyZW5jZSB0byB0aGUgaW5zdGFuY2Ugb2YgTXV0YXRpb25PYnNlcnZlci5cclxuICAgICAqXHJcbiAgICAgKiBAcHJpdmF0ZSB7TXV0YXRpb25PYnNlcnZlcn1cclxuICAgICAqL1xuXG4gICAgdGhpcy5tdXRhdGlvbnNPYnNlcnZlcl8gPSBudWxsO1xuICAgIC8qKlxyXG4gICAgICogQSBsaXN0IG9mIGNvbm5lY3RlZCBvYnNlcnZlcnMuXHJcbiAgICAgKlxyXG4gICAgICogQHByaXZhdGUge0FycmF5PFJlc2l6ZU9ic2VydmVyU1BJPn1cclxuICAgICAqL1xuXG4gICAgdGhpcy5vYnNlcnZlcnNfID0gW107XG4gICAgdGhpcy5vblRyYW5zaXRpb25FbmRfID0gdGhpcy5vblRyYW5zaXRpb25FbmRfLmJpbmQodGhpcyk7XG4gICAgdGhpcy5yZWZyZXNoID0gdGhyb3R0bGUodGhpcy5yZWZyZXNoLmJpbmQodGhpcyksIFJFRlJFU0hfREVMQVkpO1xuICB9XG4gIC8qKlxyXG4gICAqIEFkZHMgb2JzZXJ2ZXIgdG8gb2JzZXJ2ZXJzIGxpc3QuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1Jlc2l6ZU9ic2VydmVyU1BJfSBvYnNlcnZlciAtIE9ic2VydmVyIHRvIGJlIGFkZGVkLlxyXG4gICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAqL1xuXG5cbiAgUmVzaXplT2JzZXJ2ZXJDb250cm9sbGVyLnByb3RvdHlwZS5hZGRPYnNlcnZlciA9IGZ1bmN0aW9uIChvYnNlcnZlcikge1xuICAgIGlmICghfnRoaXMub2JzZXJ2ZXJzXy5pbmRleE9mKG9ic2VydmVyKSkge1xuICAgICAgdGhpcy5vYnNlcnZlcnNfLnB1c2gob2JzZXJ2ZXIpO1xuICAgIH0gLy8gQWRkIGxpc3RlbmVycyBpZiB0aGV5IGhhdmVuJ3QgYmVlbiBhZGRlZCB5ZXQuXG5cblxuICAgIGlmICghdGhpcy5jb25uZWN0ZWRfKSB7XG4gICAgICB0aGlzLmNvbm5lY3RfKCk7XG4gICAgfVxuICB9O1xuICAvKipcclxuICAgKiBSZW1vdmVzIG9ic2VydmVyIGZyb20gb2JzZXJ2ZXJzIGxpc3QuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1Jlc2l6ZU9ic2VydmVyU1BJfSBvYnNlcnZlciAtIE9ic2VydmVyIHRvIGJlIHJlbW92ZWQuXHJcbiAgICogQHJldHVybnMge3ZvaWR9XHJcbiAgICovXG5cblxuICBSZXNpemVPYnNlcnZlckNvbnRyb2xsZXIucHJvdG90eXBlLnJlbW92ZU9ic2VydmVyID0gZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgdmFyIG9ic2VydmVycyA9IHRoaXMub2JzZXJ2ZXJzXztcbiAgICB2YXIgaW5kZXggPSBvYnNlcnZlcnMuaW5kZXhPZihvYnNlcnZlcik7IC8vIFJlbW92ZSBvYnNlcnZlciBpZiBpdCdzIHByZXNlbnQgaW4gcmVnaXN0cnkuXG5cbiAgICBpZiAofmluZGV4KSB7XG4gICAgICBvYnNlcnZlcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9IC8vIFJlbW92ZSBsaXN0ZW5lcnMgaWYgY29udHJvbGxlciBoYXMgbm8gY29ubmVjdGVkIG9ic2VydmVycy5cblxuXG4gICAgaWYgKCFvYnNlcnZlcnMubGVuZ3RoICYmIHRoaXMuY29ubmVjdGVkXykge1xuICAgICAgdGhpcy5kaXNjb25uZWN0XygpO1xuICAgIH1cbiAgfTtcbiAgLyoqXHJcbiAgICogSW52b2tlcyB0aGUgdXBkYXRlIG9mIG9ic2VydmVycy4gSXQgd2lsbCBjb250aW51ZSBydW5uaW5nIHVwZGF0ZXMgaW5zb2ZhclxyXG4gICAqIGl0IGRldGVjdHMgY2hhbmdlcy5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAqL1xuXG5cbiAgUmVzaXplT2JzZXJ2ZXJDb250cm9sbGVyLnByb3RvdHlwZS5yZWZyZXNoID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBjaGFuZ2VzRGV0ZWN0ZWQgPSB0aGlzLnVwZGF0ZU9ic2VydmVyc18oKTsgLy8gQ29udGludWUgcnVubmluZyB1cGRhdGVzIGlmIGNoYW5nZXMgaGF2ZSBiZWVuIGRldGVjdGVkIGFzIHRoZXJlIG1pZ2h0XG4gICAgLy8gYmUgZnV0dXJlIG9uZXMgY2F1c2VkIGJ5IENTUyB0cmFuc2l0aW9ucy5cblxuICAgIGlmIChjaGFuZ2VzRGV0ZWN0ZWQpIHtcbiAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgIH1cbiAgfTtcbiAgLyoqXHJcbiAgICogVXBkYXRlcyBldmVyeSBvYnNlcnZlciBmcm9tIG9ic2VydmVycyBsaXN0IGFuZCBub3RpZmllcyB0aGVtIG9mIHF1ZXVlZFxyXG4gICAqIGVudHJpZXMuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIFwidHJ1ZVwiIGlmIGFueSBvYnNlcnZlciBoYXMgZGV0ZWN0ZWQgY2hhbmdlcyBpblxyXG4gICAqICAgICAgZGltZW5zaW9ucyBvZiBpdCdzIGVsZW1lbnRzLlxyXG4gICAqL1xuXG5cbiAgUmVzaXplT2JzZXJ2ZXJDb250cm9sbGVyLnByb3RvdHlwZS51cGRhdGVPYnNlcnZlcnNfID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIENvbGxlY3Qgb2JzZXJ2ZXJzIHRoYXQgaGF2ZSBhY3RpdmUgb2JzZXJ2YXRpb25zLlxuICAgIHZhciBhY3RpdmVPYnNlcnZlcnMgPSB0aGlzLm9ic2VydmVyc18uZmlsdGVyKGZ1bmN0aW9uIChvYnNlcnZlcikge1xuICAgICAgcmV0dXJuIG9ic2VydmVyLmdhdGhlckFjdGl2ZSgpLCBvYnNlcnZlci5oYXNBY3RpdmUoKTtcbiAgICB9KTsgLy8gRGVsaXZlciBub3RpZmljYXRpb25zIGluIGEgc2VwYXJhdGUgY3ljbGUgaW4gb3JkZXIgdG8gYXZvaWQgYW55XG4gICAgLy8gY29sbGlzaW9ucyBiZXR3ZWVuIG9ic2VydmVycywgZS5nLiB3aGVuIG11bHRpcGxlIGluc3RhbmNlcyBvZlxuICAgIC8vIFJlc2l6ZU9ic2VydmVyIGFyZSB0cmFja2luZyB0aGUgc2FtZSBlbGVtZW50IGFuZCB0aGUgY2FsbGJhY2sgb2Ygb25lXG4gICAgLy8gb2YgdGhlbSBjaGFuZ2VzIGNvbnRlbnQgZGltZW5zaW9ucyBvZiB0aGUgb2JzZXJ2ZWQgdGFyZ2V0LiBTb21ldGltZXNcbiAgICAvLyB0aGlzIG1heSByZXN1bHQgaW4gbm90aWZpY2F0aW9ucyBiZWluZyBibG9ja2VkIGZvciB0aGUgcmVzdCBvZiBvYnNlcnZlcnMuXG5cbiAgICBhY3RpdmVPYnNlcnZlcnMuZm9yRWFjaChmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICAgIHJldHVybiBvYnNlcnZlci5icm9hZGNhc3RBY3RpdmUoKTtcbiAgICB9KTtcbiAgICByZXR1cm4gYWN0aXZlT2JzZXJ2ZXJzLmxlbmd0aCA+IDA7XG4gIH07XG4gIC8qKlxyXG4gICAqIEluaXRpYWxpemVzIERPTSBsaXN0ZW5lcnMuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAqL1xuXG5cbiAgUmVzaXplT2JzZXJ2ZXJDb250cm9sbGVyLnByb3RvdHlwZS5jb25uZWN0XyA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBEbyBub3RoaW5nIGlmIHJ1bm5pbmcgaW4gYSBub24tYnJvd3NlciBlbnZpcm9ubWVudCBvciBpZiBsaXN0ZW5lcnNcbiAgICAvLyBoYXZlIGJlZW4gYWxyZWFkeSBhZGRlZC5cbiAgICBpZiAoIWlzQnJvd3NlciB8fCB0aGlzLmNvbm5lY3RlZF8pIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIFN1YnNjcmlwdGlvbiB0byB0aGUgXCJUcmFuc2l0aW9uZW5kXCIgZXZlbnQgaXMgdXNlZCBhcyBhIHdvcmthcm91bmQgZm9yXG4gICAgLy8gZGVsYXllZCB0cmFuc2l0aW9ucy4gVGhpcyB3YXkgaXQncyBwb3NzaWJsZSB0byBjYXB0dXJlIGF0IGxlYXN0IHRoZVxuICAgIC8vIGZpbmFsIHN0YXRlIG9mIGFuIGVsZW1lbnQuXG5cblxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RyYW5zaXRpb25lbmQnLCB0aGlzLm9uVHJhbnNpdGlvbkVuZF8pO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLnJlZnJlc2gpO1xuXG4gICAgaWYgKG11dGF0aW9uT2JzZXJ2ZXJTdXBwb3J0ZWQpIHtcbiAgICAgIHRoaXMubXV0YXRpb25zT2JzZXJ2ZXJfID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIodGhpcy5yZWZyZXNoKTtcbiAgICAgIHRoaXMubXV0YXRpb25zT2JzZXJ2ZXJfLm9ic2VydmUoZG9jdW1lbnQsIHtcbiAgICAgICAgYXR0cmlidXRlczogdHJ1ZSxcbiAgICAgICAgY2hpbGRMaXN0OiB0cnVlLFxuICAgICAgICBjaGFyYWN0ZXJEYXRhOiB0cnVlLFxuICAgICAgICBzdWJ0cmVlOiB0cnVlXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NU3VidHJlZU1vZGlmaWVkJywgdGhpcy5yZWZyZXNoKTtcbiAgICAgIHRoaXMubXV0YXRpb25FdmVudHNBZGRlZF8gPSB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMuY29ubmVjdGVkXyA9IHRydWU7XG4gIH07XG4gIC8qKlxyXG4gICAqIFJlbW92ZXMgRE9NIGxpc3RlbmVycy5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICogQHJldHVybnMge3ZvaWR9XHJcbiAgICovXG5cblxuICBSZXNpemVPYnNlcnZlckNvbnRyb2xsZXIucHJvdG90eXBlLmRpc2Nvbm5lY3RfID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIERvIG5vdGhpbmcgaWYgcnVubmluZyBpbiBhIG5vbi1icm93c2VyIGVudmlyb25tZW50IG9yIGlmIGxpc3RlbmVyc1xuICAgIC8vIGhhdmUgYmVlbiBhbHJlYWR5IHJlbW92ZWQuXG4gICAgaWYgKCFpc0Jyb3dzZXIgfHwgIXRoaXMuY29ubmVjdGVkXykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RyYW5zaXRpb25lbmQnLCB0aGlzLm9uVHJhbnNpdGlvbkVuZF8pO1xuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLnJlZnJlc2gpO1xuXG4gICAgaWYgKHRoaXMubXV0YXRpb25zT2JzZXJ2ZXJfKSB7XG4gICAgICB0aGlzLm11dGF0aW9uc09ic2VydmVyXy5kaXNjb25uZWN0KCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubXV0YXRpb25FdmVudHNBZGRlZF8pIHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ0RPTVN1YnRyZWVNb2RpZmllZCcsIHRoaXMucmVmcmVzaCk7XG4gICAgfVxuXG4gICAgdGhpcy5tdXRhdGlvbnNPYnNlcnZlcl8gPSBudWxsO1xuICAgIHRoaXMubXV0YXRpb25FdmVudHNBZGRlZF8gPSBmYWxzZTtcbiAgICB0aGlzLmNvbm5lY3RlZF8gPSBmYWxzZTtcbiAgfTtcbiAgLyoqXHJcbiAgICogXCJUcmFuc2l0aW9uZW5kXCIgZXZlbnQgaGFuZGxlci5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICogQHBhcmFtIHtUcmFuc2l0aW9uRXZlbnR9IGV2ZW50XHJcbiAgICogQHJldHVybnMge3ZvaWR9XHJcbiAgICovXG5cblxuICBSZXNpemVPYnNlcnZlckNvbnRyb2xsZXIucHJvdG90eXBlLm9uVHJhbnNpdGlvbkVuZF8gPSBmdW5jdGlvbiAoX2EpIHtcbiAgICB2YXIgX2IgPSBfYS5wcm9wZXJ0eU5hbWUsXG4gICAgICAgIHByb3BlcnR5TmFtZSA9IF9iID09PSB2b2lkIDAgPyAnJyA6IF9iOyAvLyBEZXRlY3Qgd2hldGhlciB0cmFuc2l0aW9uIG1heSBhZmZlY3QgZGltZW5zaW9ucyBvZiBhbiBlbGVtZW50LlxuXG4gICAgdmFyIGlzUmVmbG93UHJvcGVydHkgPSB0cmFuc2l0aW9uS2V5cy5zb21lKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHJldHVybiAhIX5wcm9wZXJ0eU5hbWUuaW5kZXhPZihrZXkpO1xuICAgIH0pO1xuXG4gICAgaWYgKGlzUmVmbG93UHJvcGVydHkpIHtcbiAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgIH1cbiAgfTtcbiAgLyoqXHJcbiAgICogUmV0dXJucyBpbnN0YW5jZSBvZiB0aGUgUmVzaXplT2JzZXJ2ZXJDb250cm9sbGVyLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge1Jlc2l6ZU9ic2VydmVyQ29udHJvbGxlcn1cclxuICAgKi9cblxuXG4gIFJlc2l6ZU9ic2VydmVyQ29udHJvbGxlci5nZXRJbnN0YW5jZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXRoaXMuaW5zdGFuY2VfKSB7XG4gICAgICB0aGlzLmluc3RhbmNlXyA9IG5ldyBSZXNpemVPYnNlcnZlckNvbnRyb2xsZXIoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5pbnN0YW5jZV87XG4gIH07XG4gIC8qKlxyXG4gICAqIEhvbGRzIHJlZmVyZW5jZSB0byB0aGUgY29udHJvbGxlcidzIGluc3RhbmNlLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGUge1Jlc2l6ZU9ic2VydmVyQ29udHJvbGxlcn1cclxuICAgKi9cblxuXG4gIFJlc2l6ZU9ic2VydmVyQ29udHJvbGxlci5pbnN0YW5jZV8gPSBudWxsO1xuICByZXR1cm4gUmVzaXplT2JzZXJ2ZXJDb250cm9sbGVyO1xufSgpO1xuLyoqXHJcbiAqIERlZmluZXMgbm9uLXdyaXRhYmxlL2VudW1lcmFibGUgcHJvcGVydGllcyBvZiB0aGUgcHJvdmlkZWQgdGFyZ2V0IG9iamVjdC5cclxuICpcclxuICogQHBhcmFtIHtPYmplY3R9IHRhcmdldCAtIE9iamVjdCBmb3Igd2hpY2ggdG8gZGVmaW5lIHByb3BlcnRpZXMuXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyAtIFByb3BlcnRpZXMgdG8gYmUgZGVmaW5lZC5cclxuICogQHJldHVybnMge09iamVjdH0gVGFyZ2V0IG9iamVjdC5cclxuICovXG5cblxudmFyIGRlZmluZUNvbmZpZ3VyYWJsZSA9IGZ1bmN0aW9uIGRlZmluZUNvbmZpZ3VyYWJsZSh0YXJnZXQsIHByb3BzKSB7XG4gIGZvciAodmFyIF9pID0gMCwgX2EgPSBPYmplY3Qua2V5cyhwcm9wcyk7IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7XG4gICAgdmFyIGtleSA9IF9hW19pXTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHtcbiAgICAgIHZhbHVlOiBwcm9wc1trZXldLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59O1xuLyoqXHJcbiAqIFJldHVybnMgdGhlIGdsb2JhbCBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHByb3ZpZGVkIGVsZW1lbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSB0YXJnZXRcclxuICogQHJldHVybnMge09iamVjdH1cclxuICovXG5cblxudmFyIGdldFdpbmRvd09mID0gZnVuY3Rpb24gZ2V0V2luZG93T2YodGFyZ2V0KSB7XG4gIC8vIEFzc3VtZSB0aGF0IHRoZSBlbGVtZW50IGlzIGFuIGluc3RhbmNlIG9mIE5vZGUsIHdoaWNoIG1lYW5zIHRoYXQgaXRcbiAgLy8gaGFzIHRoZSBcIm93bmVyRG9jdW1lbnRcIiBwcm9wZXJ0eSBmcm9tIHdoaWNoIHdlIGNhbiByZXRyaWV2ZSBhXG4gIC8vIGNvcnJlc3BvbmRpbmcgZ2xvYmFsIG9iamVjdC5cbiAgdmFyIG93bmVyR2xvYmFsID0gdGFyZ2V0ICYmIHRhcmdldC5vd25lckRvY3VtZW50ICYmIHRhcmdldC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3OyAvLyBSZXR1cm4gdGhlIGxvY2FsIGdsb2JhbCBvYmplY3QgaWYgaXQncyBub3QgcG9zc2libGUgZXh0cmFjdCBvbmUgZnJvbVxuICAvLyBwcm92aWRlZCBlbGVtZW50LlxuXG4gIHJldHVybiBvd25lckdsb2JhbCB8fCBnbG9iYWwkMTtcbn07IC8vIFBsYWNlaG9sZGVyIG9mIGFuIGVtcHR5IGNvbnRlbnQgcmVjdGFuZ2xlLlxuXG5cbnZhciBlbXB0eVJlY3QgPSBjcmVhdGVSZWN0SW5pdCgwLCAwLCAwLCAwKTtcbi8qKlxyXG4gKiBDb252ZXJ0cyBwcm92aWRlZCBzdHJpbmcgdG8gYSBudW1iZXIuXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gdmFsdWVcclxuICogQHJldHVybnMge251bWJlcn1cclxuICovXG5cbmZ1bmN0aW9uIHRvRmxvYXQodmFsdWUpIHtcbiAgcmV0dXJuIHBhcnNlRmxvYXQodmFsdWUpIHx8IDA7XG59XG4vKipcclxuICogRXh0cmFjdHMgYm9yZGVycyBzaXplIGZyb20gcHJvdmlkZWQgc3R5bGVzLlxyXG4gKlxyXG4gKiBAcGFyYW0ge0NTU1N0eWxlRGVjbGFyYXRpb259IHN0eWxlc1xyXG4gKiBAcGFyYW0gey4uLnN0cmluZ30gcG9zaXRpb25zIC0gQm9yZGVycyBwb3NpdGlvbnMgKHRvcCwgcmlnaHQsIC4uLilcclxuICogQHJldHVybnMge251bWJlcn1cclxuICovXG5cblxuZnVuY3Rpb24gZ2V0Qm9yZGVyc1NpemUoc3R5bGVzKSB7XG4gIHZhciBwb3NpdGlvbnMgPSBbXTtcblxuICBmb3IgKHZhciBfaSA9IDE7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgIHBvc2l0aW9uc1tfaSAtIDFdID0gYXJndW1lbnRzW19pXTtcbiAgfVxuXG4gIHJldHVybiBwb3NpdGlvbnMucmVkdWNlKGZ1bmN0aW9uIChzaXplLCBwb3NpdGlvbikge1xuICAgIHZhciB2YWx1ZSA9IHN0eWxlc1snYm9yZGVyLScgKyBwb3NpdGlvbiArICctd2lkdGgnXTtcbiAgICByZXR1cm4gc2l6ZSArIHRvRmxvYXQodmFsdWUpO1xuICB9LCAwKTtcbn1cbi8qKlxyXG4gKiBFeHRyYWN0cyBwYWRkaW5ncyBzaXplcyBmcm9tIHByb3ZpZGVkIHN0eWxlcy5cclxuICpcclxuICogQHBhcmFtIHtDU1NTdHlsZURlY2xhcmF0aW9ufSBzdHlsZXNcclxuICogQHJldHVybnMge09iamVjdH0gUGFkZGluZ3MgYm94LlxyXG4gKi9cblxuXG5mdW5jdGlvbiBnZXRQYWRkaW5ncyhzdHlsZXMpIHtcbiAgdmFyIHBvc2l0aW9ucyA9IFsndG9wJywgJ3JpZ2h0JywgJ2JvdHRvbScsICdsZWZ0J107XG4gIHZhciBwYWRkaW5ncyA9IHt9O1xuXG4gIGZvciAodmFyIF9pID0gMCwgcG9zaXRpb25zXzEgPSBwb3NpdGlvbnM7IF9pIDwgcG9zaXRpb25zXzEubGVuZ3RoOyBfaSsrKSB7XG4gICAgdmFyIHBvc2l0aW9uID0gcG9zaXRpb25zXzFbX2ldO1xuICAgIHZhciB2YWx1ZSA9IHN0eWxlc1sncGFkZGluZy0nICsgcG9zaXRpb25dO1xuICAgIHBhZGRpbmdzW3Bvc2l0aW9uXSA9IHRvRmxvYXQodmFsdWUpO1xuICB9XG5cbiAgcmV0dXJuIHBhZGRpbmdzO1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgY29udGVudCByZWN0YW5nbGUgb2YgcHJvdmlkZWQgU1ZHIGVsZW1lbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7U1ZHR3JhcGhpY3NFbGVtZW50fSB0YXJnZXQgLSBFbGVtZW50IGNvbnRlbnQgcmVjdGFuZ2xlIG9mIHdoaWNoIG5lZWRzXHJcbiAqICAgICAgdG8gYmUgY2FsY3VsYXRlZC5cclxuICogQHJldHVybnMge0RPTVJlY3RJbml0fVxyXG4gKi9cblxuXG5mdW5jdGlvbiBnZXRTVkdDb250ZW50UmVjdCh0YXJnZXQpIHtcbiAgdmFyIGJib3ggPSB0YXJnZXQuZ2V0QkJveCgpO1xuICByZXR1cm4gY3JlYXRlUmVjdEluaXQoMCwgMCwgYmJveC53aWR0aCwgYmJveC5oZWlnaHQpO1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgY29udGVudCByZWN0YW5nbGUgb2YgcHJvdmlkZWQgSFRNTEVsZW1lbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHRhcmdldCAtIEVsZW1lbnQgZm9yIHdoaWNoIHRvIGNhbGN1bGF0ZSB0aGUgY29udGVudCByZWN0YW5nbGUuXHJcbiAqIEByZXR1cm5zIHtET01SZWN0SW5pdH1cclxuICovXG5cblxuZnVuY3Rpb24gZ2V0SFRNTEVsZW1lbnRDb250ZW50UmVjdCh0YXJnZXQpIHtcbiAgLy8gQ2xpZW50IHdpZHRoICYgaGVpZ2h0IHByb3BlcnRpZXMgY2FuJ3QgYmVcbiAgLy8gdXNlZCBleGNsdXNpdmVseSBhcyB0aGV5IHByb3ZpZGUgcm91bmRlZCB2YWx1ZXMuXG4gIHZhciBjbGllbnRXaWR0aCA9IHRhcmdldC5jbGllbnRXaWR0aCxcbiAgICAgIGNsaWVudEhlaWdodCA9IHRhcmdldC5jbGllbnRIZWlnaHQ7IC8vIEJ5IHRoaXMgY29uZGl0aW9uIHdlIGNhbiBjYXRjaCBhbGwgbm9uLXJlcGxhY2VkIGlubGluZSwgaGlkZGVuIGFuZFxuICAvLyBkZXRhY2hlZCBlbGVtZW50cy4gVGhvdWdoIGVsZW1lbnRzIHdpdGggd2lkdGggJiBoZWlnaHQgcHJvcGVydGllcyBsZXNzXG4gIC8vIHRoYW4gMC41IHdpbGwgYmUgZGlzY2FyZGVkIGFzIHdlbGwuXG4gIC8vXG4gIC8vIFdpdGhvdXQgaXQgd2Ugd291bGQgbmVlZCB0byBpbXBsZW1lbnQgc2VwYXJhdGUgbWV0aG9kcyBmb3IgZWFjaCBvZlxuICAvLyB0aG9zZSBjYXNlcyBhbmQgaXQncyBub3QgcG9zc2libGUgdG8gcGVyZm9ybSBhIHByZWNpc2UgYW5kIHBlcmZvcm1hbmNlXG4gIC8vIGVmZmVjdGl2ZSB0ZXN0IGZvciBoaWRkZW4gZWxlbWVudHMuIEUuZy4gZXZlbiBqUXVlcnkncyAnOnZpc2libGUnIGZpbHRlclxuICAvLyBnaXZlcyB3cm9uZyByZXN1bHRzIGZvciBlbGVtZW50cyB3aXRoIHdpZHRoICYgaGVpZ2h0IGxlc3MgdGhhbiAwLjUuXG5cbiAgaWYgKCFjbGllbnRXaWR0aCAmJiAhY2xpZW50SGVpZ2h0KSB7XG4gICAgcmV0dXJuIGVtcHR5UmVjdDtcbiAgfVxuXG4gIHZhciBzdHlsZXMgPSBnZXRXaW5kb3dPZih0YXJnZXQpLmdldENvbXB1dGVkU3R5bGUodGFyZ2V0KTtcbiAgdmFyIHBhZGRpbmdzID0gZ2V0UGFkZGluZ3Moc3R5bGVzKTtcbiAgdmFyIGhvcml6UGFkID0gcGFkZGluZ3MubGVmdCArIHBhZGRpbmdzLnJpZ2h0O1xuICB2YXIgdmVydFBhZCA9IHBhZGRpbmdzLnRvcCArIHBhZGRpbmdzLmJvdHRvbTsgLy8gQ29tcHV0ZWQgc3R5bGVzIG9mIHdpZHRoICYgaGVpZ2h0IGFyZSBiZWluZyB1c2VkIGJlY2F1c2UgdGhleSBhcmUgdGhlXG4gIC8vIG9ubHkgZGltZW5zaW9ucyBhdmFpbGFibGUgdG8gSlMgdGhhdCBjb250YWluIG5vbi1yb3VuZGVkIHZhbHVlcy4gSXQgY291bGRcbiAgLy8gYmUgcG9zc2libGUgdG8gdXRpbGl6ZSB0aGUgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGlmIG9ubHkgaXQncyBkYXRhIHdhc24ndFxuICAvLyBhZmZlY3RlZCBieSBDU1MgdHJhbnNmb3JtYXRpb25zIGxldCBhbG9uZSBwYWRkaW5ncywgYm9yZGVycyBhbmQgc2Nyb2xsIGJhcnMuXG5cbiAgdmFyIHdpZHRoID0gdG9GbG9hdChzdHlsZXMud2lkdGgpLFxuICAgICAgaGVpZ2h0ID0gdG9GbG9hdChzdHlsZXMuaGVpZ2h0KTsgLy8gV2lkdGggJiBoZWlnaHQgaW5jbHVkZSBwYWRkaW5ncyBhbmQgYm9yZGVycyB3aGVuIHRoZSAnYm9yZGVyLWJveCcgYm94XG4gIC8vIG1vZGVsIGlzIGFwcGxpZWQgKGV4Y2VwdCBmb3IgSUUpLlxuXG4gIGlmIChzdHlsZXMuYm94U2l6aW5nID09PSAnYm9yZGVyLWJveCcpIHtcbiAgICAvLyBGb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgcmVxdWlyZWQgdG8gaGFuZGxlIEludGVybmV0IEV4cGxvcmVyIHdoaWNoXG4gICAgLy8gZG9lc24ndCBpbmNsdWRlIHBhZGRpbmdzIGFuZCBib3JkZXJzIHRvIGNvbXB1dGVkIENTUyBkaW1lbnNpb25zLlxuICAgIC8vXG4gICAgLy8gV2UgY2FuIHNheSB0aGF0IGlmIENTUyBkaW1lbnNpb25zICsgcGFkZGluZ3MgYXJlIGVxdWFsIHRvIHRoZSBcImNsaWVudFwiXG4gICAgLy8gcHJvcGVydGllcyB0aGVuIGl0J3MgZWl0aGVyIElFLCBhbmQgdGh1cyB3ZSBkb24ndCBuZWVkIHRvIHN1YnRyYWN0XG4gICAgLy8gYW55dGhpbmcsIG9yIGFuIGVsZW1lbnQgbWVyZWx5IGRvZXNuJ3QgaGF2ZSBwYWRkaW5ncy9ib3JkZXJzIHN0eWxlcy5cbiAgICBpZiAoTWF0aC5yb3VuZCh3aWR0aCArIGhvcml6UGFkKSAhPT0gY2xpZW50V2lkdGgpIHtcbiAgICAgIHdpZHRoIC09IGdldEJvcmRlcnNTaXplKHN0eWxlcywgJ2xlZnQnLCAncmlnaHQnKSArIGhvcml6UGFkO1xuICAgIH1cblxuICAgIGlmIChNYXRoLnJvdW5kKGhlaWdodCArIHZlcnRQYWQpICE9PSBjbGllbnRIZWlnaHQpIHtcbiAgICAgIGhlaWdodCAtPSBnZXRCb3JkZXJzU2l6ZShzdHlsZXMsICd0b3AnLCAnYm90dG9tJykgKyB2ZXJ0UGFkO1xuICAgIH1cbiAgfSAvLyBGb2xsb3dpbmcgc3RlcHMgY2FuJ3QgYmUgYXBwbGllZCB0byB0aGUgZG9jdW1lbnQncyByb290IGVsZW1lbnQgYXMgaXRzXG4gIC8vIGNsaWVudFtXaWR0aC9IZWlnaHRdIHByb3BlcnRpZXMgcmVwcmVzZW50IHZpZXdwb3J0IGFyZWEgb2YgdGhlIHdpbmRvdy5cbiAgLy8gQmVzaWRlcywgaXQncyBhcyB3ZWxsIG5vdCBuZWNlc3NhcnkgYXMgdGhlIDxodG1sPiBpdHNlbGYgbmVpdGhlciBoYXNcbiAgLy8gcmVuZGVyZWQgc2Nyb2xsIGJhcnMgbm9yIGl0IGNhbiBiZSBjbGlwcGVkLlxuXG5cbiAgaWYgKCFpc0RvY3VtZW50RWxlbWVudCh0YXJnZXQpKSB7XG4gICAgLy8gSW4gc29tZSBicm93c2VycyAob25seSBpbiBGaXJlZm94LCBhY3R1YWxseSkgQ1NTIHdpZHRoICYgaGVpZ2h0XG4gICAgLy8gaW5jbHVkZSBzY3JvbGwgYmFycyBzaXplIHdoaWNoIGNhbiBiZSByZW1vdmVkIGF0IHRoaXMgc3RlcCBhcyBzY3JvbGxcbiAgICAvLyBiYXJzIGFyZSB0aGUgb25seSBkaWZmZXJlbmNlIGJldHdlZW4gcm91bmRlZCBkaW1lbnNpb25zICsgcGFkZGluZ3NcbiAgICAvLyBhbmQgXCJjbGllbnRcIiBwcm9wZXJ0aWVzLCB0aG91Z2ggdGhhdCBpcyBub3QgYWx3YXlzIHRydWUgaW4gQ2hyb21lLlxuICAgIHZhciB2ZXJ0U2Nyb2xsYmFyID0gTWF0aC5yb3VuZCh3aWR0aCArIGhvcml6UGFkKSAtIGNsaWVudFdpZHRoO1xuICAgIHZhciBob3JpelNjcm9sbGJhciA9IE1hdGgucm91bmQoaGVpZ2h0ICsgdmVydFBhZCkgLSBjbGllbnRIZWlnaHQ7IC8vIENocm9tZSBoYXMgYSByYXRoZXIgd2VpcmQgcm91bmRpbmcgb2YgXCJjbGllbnRcIiBwcm9wZXJ0aWVzLlxuICAgIC8vIEUuZy4gZm9yIGFuIGVsZW1lbnQgd2l0aCBjb250ZW50IHdpZHRoIG9mIDMxNC4ycHggaXQgc29tZXRpbWVzIGdpdmVzXG4gICAgLy8gdGhlIGNsaWVudCB3aWR0aCBvZiAzMTVweCBhbmQgZm9yIHRoZSB3aWR0aCBvZiAzMTQuN3B4IGl0IG1heSBnaXZlXG4gICAgLy8gMzE0cHguIEFuZCBpdCBkb2Vzbid0IGhhcHBlbiBhbGwgdGhlIHRpbWUuIFNvIGp1c3QgaWdub3JlIHRoaXMgZGVsdGFcbiAgICAvLyBhcyBhIG5vbi1yZWxldmFudC5cblxuICAgIGlmIChNYXRoLmFicyh2ZXJ0U2Nyb2xsYmFyKSAhPT0gMSkge1xuICAgICAgd2lkdGggLT0gdmVydFNjcm9sbGJhcjtcbiAgICB9XG5cbiAgICBpZiAoTWF0aC5hYnMoaG9yaXpTY3JvbGxiYXIpICE9PSAxKSB7XG4gICAgICBoZWlnaHQgLT0gaG9yaXpTY3JvbGxiYXI7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNyZWF0ZVJlY3RJbml0KHBhZGRpbmdzLmxlZnQsIHBhZGRpbmdzLnRvcCwgd2lkdGgsIGhlaWdodCk7XG59XG4vKipcclxuICogQ2hlY2tzIHdoZXRoZXIgcHJvdmlkZWQgZWxlbWVudCBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgU1ZHR3JhcGhpY3NFbGVtZW50LlxyXG4gKlxyXG4gKiBAcGFyYW0ge0VsZW1lbnR9IHRhcmdldCAtIEVsZW1lbnQgdG8gYmUgY2hlY2tlZC5cclxuICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAqL1xuXG5cbnZhciBpc1NWR0dyYXBoaWNzRWxlbWVudCA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gU29tZSBicm93c2VycywgbmFtZWx5IElFIGFuZCBFZGdlLCBkb24ndCBoYXZlIHRoZSBTVkdHcmFwaGljc0VsZW1lbnRcbiAgLy8gaW50ZXJmYWNlLlxuICBpZiAodHlwZW9mIFNWR0dyYXBoaWNzRWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCkge1xuICAgICAgcmV0dXJuIHRhcmdldCBpbnN0YW5jZW9mIGdldFdpbmRvd09mKHRhcmdldCkuU1ZHR3JhcGhpY3NFbGVtZW50O1xuICAgIH07XG4gIH0gLy8gSWYgaXQncyBzbywgdGhlbiBjaGVjayB0aGF0IGVsZW1lbnQgaXMgYXQgbGVhc3QgYW4gaW5zdGFuY2Ugb2YgdGhlXG4gIC8vIFNWR0VsZW1lbnQgYW5kIHRoYXQgaXQgaGFzIHRoZSBcImdldEJCb3hcIiBtZXRob2QuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1leHRyYS1wYXJlbnNcblxuXG4gIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgcmV0dXJuIHRhcmdldCBpbnN0YW5jZW9mIGdldFdpbmRvd09mKHRhcmdldCkuU1ZHRWxlbWVudCAmJiB0eXBlb2YgdGFyZ2V0LmdldEJCb3ggPT09ICdmdW5jdGlvbic7XG4gIH07XG59KCk7XG4vKipcclxuICogQ2hlY2tzIHdoZXRoZXIgcHJvdmlkZWQgZWxlbWVudCBpcyBhIGRvY3VtZW50IGVsZW1lbnQgKDxodG1sPikuXHJcbiAqXHJcbiAqIEBwYXJhbSB7RWxlbWVudH0gdGFyZ2V0IC0gRWxlbWVudCB0byBiZSBjaGVja2VkLlxyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICovXG5cblxuZnVuY3Rpb24gaXNEb2N1bWVudEVsZW1lbnQodGFyZ2V0KSB7XG4gIHJldHVybiB0YXJnZXQgPT09IGdldFdpbmRvd09mKHRhcmdldCkuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgYW4gYXBwcm9wcmlhdGUgY29udGVudCByZWN0YW5nbGUgZm9yIHByb3ZpZGVkIGh0bWwgb3Igc3ZnIGVsZW1lbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7RWxlbWVudH0gdGFyZ2V0IC0gRWxlbWVudCBjb250ZW50IHJlY3RhbmdsZSBvZiB3aGljaCBuZWVkcyB0byBiZSBjYWxjdWxhdGVkLlxyXG4gKiBAcmV0dXJucyB7RE9NUmVjdEluaXR9XHJcbiAqL1xuXG5cbmZ1bmN0aW9uIGdldENvbnRlbnRSZWN0KHRhcmdldCkge1xuICBpZiAoIWlzQnJvd3Nlcikge1xuICAgIHJldHVybiBlbXB0eVJlY3Q7XG4gIH1cblxuICBpZiAoaXNTVkdHcmFwaGljc0VsZW1lbnQodGFyZ2V0KSkge1xuICAgIHJldHVybiBnZXRTVkdDb250ZW50UmVjdCh0YXJnZXQpO1xuICB9XG5cbiAgcmV0dXJuIGdldEhUTUxFbGVtZW50Q29udGVudFJlY3QodGFyZ2V0KTtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIHJlY3RhbmdsZSB3aXRoIGFuIGludGVyZmFjZSBvZiB0aGUgRE9NUmVjdFJlYWRPbmx5LlxyXG4gKiBTcGVjOiBodHRwczovL2RyYWZ0cy5meHRmLm9yZy9nZW9tZXRyeS8jZG9tcmVjdHJlYWRvbmx5XHJcbiAqXHJcbiAqIEBwYXJhbSB7RE9NUmVjdEluaXR9IHJlY3RJbml0IC0gT2JqZWN0IHdpdGggcmVjdGFuZ2xlJ3MgeC95IGNvb3JkaW5hdGVzIGFuZCBkaW1lbnNpb25zLlxyXG4gKiBAcmV0dXJucyB7RE9NUmVjdFJlYWRPbmx5fVxyXG4gKi9cblxuXG5mdW5jdGlvbiBjcmVhdGVSZWFkT25seVJlY3QoX2EpIHtcbiAgdmFyIHggPSBfYS54LFxuICAgICAgeSA9IF9hLnksXG4gICAgICB3aWR0aCA9IF9hLndpZHRoLFxuICAgICAgaGVpZ2h0ID0gX2EuaGVpZ2h0OyAvLyBJZiBET01SZWN0UmVhZE9ubHkgaXMgYXZhaWxhYmxlIHVzZSBpdCBhcyBhIHByb3RvdHlwZSBmb3IgdGhlIHJlY3RhbmdsZS5cblxuICB2YXIgQ29uc3RyID0gdHlwZW9mIERPTVJlY3RSZWFkT25seSAhPT0gJ3VuZGVmaW5lZCcgPyBET01SZWN0UmVhZE9ubHkgOiBPYmplY3Q7XG4gIHZhciByZWN0ID0gT2JqZWN0LmNyZWF0ZShDb25zdHIucHJvdG90eXBlKTsgLy8gUmVjdGFuZ2xlJ3MgcHJvcGVydGllcyBhcmUgbm90IHdyaXRhYmxlIGFuZCBub24tZW51bWVyYWJsZS5cblxuICBkZWZpbmVDb25maWd1cmFibGUocmVjdCwge1xuICAgIHg6IHgsXG4gICAgeTogeSxcbiAgICB3aWR0aDogd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgdG9wOiB5LFxuICAgIHJpZ2h0OiB4ICsgd2lkdGgsXG4gICAgYm90dG9tOiBoZWlnaHQgKyB5LFxuICAgIGxlZnQ6IHhcbiAgfSk7XG4gIHJldHVybiByZWN0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgRE9NUmVjdEluaXQgb2JqZWN0IGJhc2VkIG9uIHRoZSBwcm92aWRlZCBkaW1lbnNpb25zIGFuZCB0aGUgeC95IGNvb3JkaW5hdGVzLlxyXG4gKiBTcGVjOiBodHRwczovL2RyYWZ0cy5meHRmLm9yZy9nZW9tZXRyeS8jZGljdGRlZi1kb21yZWN0aW5pdFxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcn0geCAtIFggY29vcmRpbmF0ZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IHkgLSBZIGNvb3JkaW5hdGUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aCAtIFJlY3RhbmdsZSdzIHdpZHRoLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0IC0gUmVjdGFuZ2xlJ3MgaGVpZ2h0LlxyXG4gKiBAcmV0dXJucyB7RE9NUmVjdEluaXR9XHJcbiAqL1xuXG5cbmZ1bmN0aW9uIGNyZWF0ZVJlY3RJbml0KHgsIHksIHdpZHRoLCBoZWlnaHQpIHtcbiAgcmV0dXJuIHtcbiAgICB4OiB4LFxuICAgIHk6IHksXG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0XG4gIH07XG59XG4vKipcclxuICogQ2xhc3MgdGhhdCBpcyByZXNwb25zaWJsZSBmb3IgY29tcHV0YXRpb25zIG9mIHRoZSBjb250ZW50IHJlY3RhbmdsZSBvZlxyXG4gKiBwcm92aWRlZCBET00gZWxlbWVudCBhbmQgZm9yIGtlZXBpbmcgdHJhY2sgb2YgaXQncyBjaGFuZ2VzLlxyXG4gKi9cblxuXG52YXIgUmVzaXplT2JzZXJ2YXRpb24gPVxuLyoqIEBjbGFzcyAqL1xuZnVuY3Rpb24gKCkge1xuICAvKipcclxuICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIFJlc2l6ZU9ic2VydmF0aW9uLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtFbGVtZW50fSB0YXJnZXQgLSBFbGVtZW50IHRvIGJlIG9ic2VydmVkLlxyXG4gICAqL1xuICBmdW5jdGlvbiBSZXNpemVPYnNlcnZhdGlvbih0YXJnZXQpIHtcbiAgICAvKipcclxuICAgICAqIEJyb2FkY2FzdGVkIHdpZHRoIG9mIGNvbnRlbnQgcmVjdGFuZ2xlLlxyXG4gICAgICpcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cbiAgICB0aGlzLmJyb2FkY2FzdFdpZHRoID0gMDtcbiAgICAvKipcclxuICAgICAqIEJyb2FkY2FzdGVkIGhlaWdodCBvZiBjb250ZW50IHJlY3RhbmdsZS5cclxuICAgICAqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXG5cbiAgICB0aGlzLmJyb2FkY2FzdEhlaWdodCA9IDA7XG4gICAgLyoqXHJcbiAgICAgKiBSZWZlcmVuY2UgdG8gdGhlIGxhc3Qgb2JzZXJ2ZWQgY29udGVudCByZWN0YW5nbGUuXHJcbiAgICAgKlxyXG4gICAgICogQHByaXZhdGUge0RPTVJlY3RJbml0fVxyXG4gICAgICovXG5cbiAgICB0aGlzLmNvbnRlbnRSZWN0XyA9IGNyZWF0ZVJlY3RJbml0KDAsIDAsIDAsIDApO1xuICAgIHRoaXMudGFyZ2V0ID0gdGFyZ2V0O1xuICB9XG4gIC8qKlxyXG4gICAqIFVwZGF0ZXMgY29udGVudCByZWN0YW5nbGUgYW5kIHRlbGxzIHdoZXRoZXIgaXQncyB3aWR0aCBvciBoZWlnaHQgcHJvcGVydGllc1xyXG4gICAqIGhhdmUgY2hhbmdlZCBzaW5jZSB0aGUgbGFzdCBicm9hZGNhc3QuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICAgKi9cblxuXG4gIFJlc2l6ZU9ic2VydmF0aW9uLnByb3RvdHlwZS5pc0FjdGl2ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcmVjdCA9IGdldENvbnRlbnRSZWN0KHRoaXMudGFyZ2V0KTtcbiAgICB0aGlzLmNvbnRlbnRSZWN0XyA9IHJlY3Q7XG4gICAgcmV0dXJuIHJlY3Qud2lkdGggIT09IHRoaXMuYnJvYWRjYXN0V2lkdGggfHwgcmVjdC5oZWlnaHQgIT09IHRoaXMuYnJvYWRjYXN0SGVpZ2h0O1xuICB9O1xuICAvKipcclxuICAgKiBVcGRhdGVzICdicm9hZGNhc3RXaWR0aCcgYW5kICdicm9hZGNhc3RIZWlnaHQnIHByb3BlcnRpZXMgd2l0aCBhIGRhdGFcclxuICAgKiBmcm9tIHRoZSBjb3JyZXNwb25kaW5nIHByb3BlcnRpZXMgb2YgdGhlIGxhc3Qgb2JzZXJ2ZWQgY29udGVudCByZWN0YW5nbGUuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7RE9NUmVjdEluaXR9IExhc3Qgb2JzZXJ2ZWQgY29udGVudCByZWN0YW5nbGUuXHJcbiAgICovXG5cblxuICBSZXNpemVPYnNlcnZhdGlvbi5wcm90b3R5cGUuYnJvYWRjYXN0UmVjdCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcmVjdCA9IHRoaXMuY29udGVudFJlY3RfO1xuICAgIHRoaXMuYnJvYWRjYXN0V2lkdGggPSByZWN0LndpZHRoO1xuICAgIHRoaXMuYnJvYWRjYXN0SGVpZ2h0ID0gcmVjdC5oZWlnaHQ7XG4gICAgcmV0dXJuIHJlY3Q7XG4gIH07XG5cbiAgcmV0dXJuIFJlc2l6ZU9ic2VydmF0aW9uO1xufSgpO1xuXG52YXIgUmVzaXplT2JzZXJ2ZXJFbnRyeSA9XG4vKiogQGNsYXNzICovXG5mdW5jdGlvbiAoKSB7XG4gIC8qKlxyXG4gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgUmVzaXplT2JzZXJ2ZXJFbnRyeS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gdGFyZ2V0IC0gRWxlbWVudCB0aGF0IGlzIGJlaW5nIG9ic2VydmVkLlxyXG4gICAqIEBwYXJhbSB7RE9NUmVjdEluaXR9IHJlY3RJbml0IC0gRGF0YSBvZiB0aGUgZWxlbWVudCdzIGNvbnRlbnQgcmVjdGFuZ2xlLlxyXG4gICAqL1xuICBmdW5jdGlvbiBSZXNpemVPYnNlcnZlckVudHJ5KHRhcmdldCwgcmVjdEluaXQpIHtcbiAgICB2YXIgY29udGVudFJlY3QgPSBjcmVhdGVSZWFkT25seVJlY3QocmVjdEluaXQpOyAvLyBBY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmljYXRpb24gZm9sbG93aW5nIHByb3BlcnRpZXMgYXJlIG5vdCB3cml0YWJsZVxuICAgIC8vIGFuZCBhcmUgYWxzbyBub3QgZW51bWVyYWJsZSBpbiB0aGUgbmF0aXZlIGltcGxlbWVudGF0aW9uLlxuICAgIC8vXG4gICAgLy8gUHJvcGVydHkgYWNjZXNzb3JzIGFyZSBub3QgYmVpbmcgdXNlZCBhcyB0aGV5J2QgcmVxdWlyZSB0byBkZWZpbmUgYVxuICAgIC8vIHByaXZhdGUgV2Vha01hcCBzdG9yYWdlIHdoaWNoIG1heSBjYXVzZSBtZW1vcnkgbGVha3MgaW4gYnJvd3NlcnMgdGhhdFxuICAgIC8vIGRvbid0IHN1cHBvcnQgdGhpcyB0eXBlIG9mIGNvbGxlY3Rpb25zLlxuXG4gICAgZGVmaW5lQ29uZmlndXJhYmxlKHRoaXMsIHtcbiAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgY29udGVudFJlY3Q6IGNvbnRlbnRSZWN0XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gUmVzaXplT2JzZXJ2ZXJFbnRyeTtcbn0oKTtcblxudmFyIFJlc2l6ZU9ic2VydmVyU1BJID1cbi8qKiBAY2xhc3MgKi9cbmZ1bmN0aW9uICgpIHtcbiAgLyoqXHJcbiAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBSZXNpemVPYnNlcnZlci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7UmVzaXplT2JzZXJ2ZXJDYWxsYmFja30gY2FsbGJhY2sgLSBDYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGludm9rZWRcclxuICAgKiAgICAgIHdoZW4gb25lIG9mIHRoZSBvYnNlcnZlZCBlbGVtZW50cyBjaGFuZ2VzIGl0J3MgY29udGVudCBkaW1lbnNpb25zLlxyXG4gICAqIEBwYXJhbSB7UmVzaXplT2JzZXJ2ZXJDb250cm9sbGVyfSBjb250cm9sbGVyIC0gQ29udHJvbGxlciBpbnN0YW5jZSB3aGljaFxyXG4gICAqICAgICAgaXMgcmVzcG9uc2libGUgZm9yIHRoZSB1cGRhdGVzIG9mIG9ic2VydmVyLlxyXG4gICAqIEBwYXJhbSB7UmVzaXplT2JzZXJ2ZXJ9IGNhbGxiYWNrQ3R4IC0gUmVmZXJlbmNlIHRvIHRoZSBwdWJsaWNcclxuICAgKiAgICAgIFJlc2l6ZU9ic2VydmVyIGluc3RhbmNlIHdoaWNoIHdpbGwgYmUgcGFzc2VkIHRvIGNhbGxiYWNrIGZ1bmN0aW9uLlxyXG4gICAqL1xuICBmdW5jdGlvbiBSZXNpemVPYnNlcnZlclNQSShjYWxsYmFjaywgY29udHJvbGxlciwgY2FsbGJhY2tDdHgpIHtcbiAgICAvKipcclxuICAgICAqIENvbGxlY3Rpb24gb2YgcmVzaXplIG9ic2VydmF0aW9ucyB0aGF0IGhhdmUgZGV0ZWN0ZWQgY2hhbmdlcyBpbiBkaW1lbnNpb25zXHJcbiAgICAgKiBvZiBlbGVtZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBAcHJpdmF0ZSB7QXJyYXk8UmVzaXplT2JzZXJ2YXRpb24+fVxyXG4gICAgICovXG4gICAgdGhpcy5hY3RpdmVPYnNlcnZhdGlvbnNfID0gW107XG4gICAgLyoqXHJcbiAgICAgKiBSZWdpc3RyeSBvZiB0aGUgUmVzaXplT2JzZXJ2YXRpb24gaW5zdGFuY2VzLlxyXG4gICAgICpcclxuICAgICAqIEBwcml2YXRlIHtNYXA8RWxlbWVudCwgUmVzaXplT2JzZXJ2YXRpb24+fVxyXG4gICAgICovXG5cbiAgICB0aGlzLm9ic2VydmF0aW9uc18gPSBuZXcgTWFwU2hpbSgpO1xuXG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIGNhbGxiYWNrIHByb3ZpZGVkIGFzIHBhcmFtZXRlciAxIGlzIG5vdCBhIGZ1bmN0aW9uLicpO1xuICAgIH1cblxuICAgIHRoaXMuY2FsbGJhY2tfID0gY2FsbGJhY2s7XG4gICAgdGhpcy5jb250cm9sbGVyXyA9IGNvbnRyb2xsZXI7XG4gICAgdGhpcy5jYWxsYmFja0N0eF8gPSBjYWxsYmFja0N0eDtcbiAgfVxuICAvKipcclxuICAgKiBTdGFydHMgb2JzZXJ2aW5nIHByb3ZpZGVkIGVsZW1lbnQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHRhcmdldCAtIEVsZW1lbnQgdG8gYmUgb2JzZXJ2ZWQuXHJcbiAgICogQHJldHVybnMge3ZvaWR9XHJcbiAgICovXG5cblxuICBSZXNpemVPYnNlcnZlclNQSS5wcm90b3R5cGUub2JzZXJ2ZSA9IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJzEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5IDAgcHJlc2VudC4nKTtcbiAgICB9IC8vIERvIG5vdGhpbmcgaWYgY3VycmVudCBlbnZpcm9ubWVudCBkb2Vzbid0IGhhdmUgdGhlIEVsZW1lbnQgaW50ZXJmYWNlLlxuXG5cbiAgICBpZiAodHlwZW9mIEVsZW1lbnQgPT09ICd1bmRlZmluZWQnIHx8ICEoRWxlbWVudCBpbnN0YW5jZW9mIE9iamVjdCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoISh0YXJnZXQgaW5zdGFuY2VvZiBnZXRXaW5kb3dPZih0YXJnZXQpLkVsZW1lbnQpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdwYXJhbWV0ZXIgMSBpcyBub3Qgb2YgdHlwZSBcIkVsZW1lbnRcIi4nKTtcbiAgICB9XG5cbiAgICB2YXIgb2JzZXJ2YXRpb25zID0gdGhpcy5vYnNlcnZhdGlvbnNfOyAvLyBEbyBub3RoaW5nIGlmIGVsZW1lbnQgaXMgYWxyZWFkeSBiZWluZyBvYnNlcnZlZC5cblxuICAgIGlmIChvYnNlcnZhdGlvbnMuaGFzKHRhcmdldCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBvYnNlcnZhdGlvbnMuc2V0KHRhcmdldCwgbmV3IFJlc2l6ZU9ic2VydmF0aW9uKHRhcmdldCkpO1xuICAgIHRoaXMuY29udHJvbGxlcl8uYWRkT2JzZXJ2ZXIodGhpcyk7IC8vIEZvcmNlIHRoZSB1cGRhdGUgb2Ygb2JzZXJ2YXRpb25zLlxuXG4gICAgdGhpcy5jb250cm9sbGVyXy5yZWZyZXNoKCk7XG4gIH07XG4gIC8qKlxyXG4gICAqIFN0b3BzIG9ic2VydmluZyBwcm92aWRlZCBlbGVtZW50LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtFbGVtZW50fSB0YXJnZXQgLSBFbGVtZW50IHRvIHN0b3Agb2JzZXJ2aW5nLlxyXG4gICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAqL1xuXG5cbiAgUmVzaXplT2JzZXJ2ZXJTUEkucHJvdG90eXBlLnVub2JzZXJ2ZSA9IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJzEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5IDAgcHJlc2VudC4nKTtcbiAgICB9IC8vIERvIG5vdGhpbmcgaWYgY3VycmVudCBlbnZpcm9ubWVudCBkb2Vzbid0IGhhdmUgdGhlIEVsZW1lbnQgaW50ZXJmYWNlLlxuXG5cbiAgICBpZiAodHlwZW9mIEVsZW1lbnQgPT09ICd1bmRlZmluZWQnIHx8ICEoRWxlbWVudCBpbnN0YW5jZW9mIE9iamVjdCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoISh0YXJnZXQgaW5zdGFuY2VvZiBnZXRXaW5kb3dPZih0YXJnZXQpLkVsZW1lbnQpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdwYXJhbWV0ZXIgMSBpcyBub3Qgb2YgdHlwZSBcIkVsZW1lbnRcIi4nKTtcbiAgICB9XG5cbiAgICB2YXIgb2JzZXJ2YXRpb25zID0gdGhpcy5vYnNlcnZhdGlvbnNfOyAvLyBEbyBub3RoaW5nIGlmIGVsZW1lbnQgaXMgbm90IGJlaW5nIG9ic2VydmVkLlxuXG4gICAgaWYgKCFvYnNlcnZhdGlvbnMuaGFzKHRhcmdldCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBvYnNlcnZhdGlvbnMuZGVsZXRlKHRhcmdldCk7XG5cbiAgICBpZiAoIW9ic2VydmF0aW9ucy5zaXplKSB7XG4gICAgICB0aGlzLmNvbnRyb2xsZXJfLnJlbW92ZU9ic2VydmVyKHRoaXMpO1xuICAgIH1cbiAgfTtcbiAgLyoqXHJcbiAgICogU3RvcHMgb2JzZXJ2aW5nIGFsbCBlbGVtZW50cy5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAqL1xuXG5cbiAgUmVzaXplT2JzZXJ2ZXJTUEkucHJvdG90eXBlLmRpc2Nvbm5lY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5jbGVhckFjdGl2ZSgpO1xuICAgIHRoaXMub2JzZXJ2YXRpb25zXy5jbGVhcigpO1xuICAgIHRoaXMuY29udHJvbGxlcl8ucmVtb3ZlT2JzZXJ2ZXIodGhpcyk7XG4gIH07XG4gIC8qKlxyXG4gICAqIENvbGxlY3RzIG9ic2VydmF0aW9uIGluc3RhbmNlcyB0aGUgYXNzb2NpYXRlZCBlbGVtZW50IG9mIHdoaWNoIGhhcyBjaGFuZ2VkXHJcbiAgICogaXQncyBjb250ZW50IHJlY3RhbmdsZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAqL1xuXG5cbiAgUmVzaXplT2JzZXJ2ZXJTUEkucHJvdG90eXBlLmdhdGhlckFjdGl2ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdGhpcy5jbGVhckFjdGl2ZSgpO1xuICAgIHRoaXMub2JzZXJ2YXRpb25zXy5mb3JFYWNoKGZ1bmN0aW9uIChvYnNlcnZhdGlvbikge1xuICAgICAgaWYgKG9ic2VydmF0aW9uLmlzQWN0aXZlKCkpIHtcbiAgICAgICAgX3RoaXMuYWN0aXZlT2JzZXJ2YXRpb25zXy5wdXNoKG9ic2VydmF0aW9uKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbiAgLyoqXHJcbiAgICogSW52b2tlcyBpbml0aWFsIGNhbGxiYWNrIGZ1bmN0aW9uIHdpdGggYSBsaXN0IG9mIFJlc2l6ZU9ic2VydmVyRW50cnlcclxuICAgKiBpbnN0YW5jZXMgY29sbGVjdGVkIGZyb20gYWN0aXZlIHJlc2l6ZSBvYnNlcnZhdGlvbnMuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7dm9pZH1cclxuICAgKi9cblxuXG4gIFJlc2l6ZU9ic2VydmVyU1BJLnByb3RvdHlwZS5icm9hZGNhc3RBY3RpdmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gRG8gbm90aGluZyBpZiBvYnNlcnZlciBkb2Vzbid0IGhhdmUgYWN0aXZlIG9ic2VydmF0aW9ucy5cbiAgICBpZiAoIXRoaXMuaGFzQWN0aXZlKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgY3R4ID0gdGhpcy5jYWxsYmFja0N0eF87IC8vIENyZWF0ZSBSZXNpemVPYnNlcnZlckVudHJ5IGluc3RhbmNlIGZvciBldmVyeSBhY3RpdmUgb2JzZXJ2YXRpb24uXG5cbiAgICB2YXIgZW50cmllcyA9IHRoaXMuYWN0aXZlT2JzZXJ2YXRpb25zXy5tYXAoZnVuY3Rpb24gKG9ic2VydmF0aW9uKSB7XG4gICAgICByZXR1cm4gbmV3IFJlc2l6ZU9ic2VydmVyRW50cnkob2JzZXJ2YXRpb24udGFyZ2V0LCBvYnNlcnZhdGlvbi5icm9hZGNhc3RSZWN0KCkpO1xuICAgIH0pO1xuICAgIHRoaXMuY2FsbGJhY2tfLmNhbGwoY3R4LCBlbnRyaWVzLCBjdHgpO1xuICAgIHRoaXMuY2xlYXJBY3RpdmUoKTtcbiAgfTtcbiAgLyoqXHJcbiAgICogQ2xlYXJzIHRoZSBjb2xsZWN0aW9uIG9mIGFjdGl2ZSBvYnNlcnZhdGlvbnMuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7dm9pZH1cclxuICAgKi9cblxuXG4gIFJlc2l6ZU9ic2VydmVyU1BJLnByb3RvdHlwZS5jbGVhckFjdGl2ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmFjdGl2ZU9ic2VydmF0aW9uc18uc3BsaWNlKDApO1xuICB9O1xuICAvKipcclxuICAgKiBUZWxscyB3aGV0aGVyIG9ic2VydmVyIGhhcyBhY3RpdmUgb2JzZXJ2YXRpb25zLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAgICovXG5cblxuICBSZXNpemVPYnNlcnZlclNQSS5wcm90b3R5cGUuaGFzQWN0aXZlID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmFjdGl2ZU9ic2VydmF0aW9uc18ubGVuZ3RoID4gMDtcbiAgfTtcblxuICByZXR1cm4gUmVzaXplT2JzZXJ2ZXJTUEk7XG59KCk7IC8vIFJlZ2lzdHJ5IG9mIGludGVybmFsIG9ic2VydmVycy4gSWYgV2Vha01hcCBpcyBub3QgYXZhaWxhYmxlIHVzZSBjdXJyZW50IHNoaW1cbi8vIGZvciB0aGUgTWFwIGNvbGxlY3Rpb24gYXMgaXQgaGFzIGFsbCByZXF1aXJlZCBtZXRob2RzIGFuZCBiZWNhdXNlIFdlYWtNYXBcbi8vIGNhbid0IGJlIGZ1bGx5IHBvbHlmaWxsZWQgYW55d2F5LlxuXG5cbnZhciBvYnNlcnZlcnMgPSB0eXBlb2YgV2Vha01hcCAhPT0gJ3VuZGVmaW5lZCcgPyBuZXcgV2Vha01hcCgpIDogbmV3IE1hcFNoaW0oKTtcbi8qKlxyXG4gKiBSZXNpemVPYnNlcnZlciBBUEkuIEVuY2Fwc3VsYXRlcyB0aGUgUmVzaXplT2JzZXJ2ZXIgU1BJIGltcGxlbWVudGF0aW9uXHJcbiAqIGV4cG9zaW5nIG9ubHkgdGhvc2UgbWV0aG9kcyBhbmQgcHJvcGVydGllcyB0aGF0IGFyZSBkZWZpbmVkIGluIHRoZSBzcGVjLlxyXG4gKi9cblxudmFyIFJlc2l6ZU9ic2VydmVyID1cbi8qKiBAY2xhc3MgKi9cbmZ1bmN0aW9uICgpIHtcbiAgLyoqXHJcbiAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBSZXNpemVPYnNlcnZlci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7UmVzaXplT2JzZXJ2ZXJDYWxsYmFja30gY2FsbGJhY2sgLSBDYWxsYmFjayB0aGF0IGlzIGludm9rZWQgd2hlblxyXG4gICAqICAgICAgZGltZW5zaW9ucyBvZiB0aGUgb2JzZXJ2ZWQgZWxlbWVudHMgY2hhbmdlLlxyXG4gICAqL1xuICBmdW5jdGlvbiBSZXNpemVPYnNlcnZlcihjYWxsYmFjaykge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBSZXNpemVPYnNlcnZlcikpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbi4nKTtcbiAgICB9XG5cbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJzEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5IDAgcHJlc2VudC4nKTtcbiAgICB9XG5cbiAgICB2YXIgY29udHJvbGxlciA9IFJlc2l6ZU9ic2VydmVyQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpO1xuICAgIHZhciBvYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlclNQSShjYWxsYmFjaywgY29udHJvbGxlciwgdGhpcyk7XG4gICAgb2JzZXJ2ZXJzLnNldCh0aGlzLCBvYnNlcnZlcik7XG4gIH1cblxuICByZXR1cm4gUmVzaXplT2JzZXJ2ZXI7XG59KCk7IC8vIEV4cG9zZSBwdWJsaWMgbWV0aG9kcyBvZiBSZXNpemVPYnNlcnZlci5cblxuXG5bJ29ic2VydmUnLCAndW5vYnNlcnZlJywgJ2Rpc2Nvbm5lY3QnXS5mb3JFYWNoKGZ1bmN0aW9uIChtZXRob2QpIHtcbiAgUmVzaXplT2JzZXJ2ZXIucHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIF9hO1xuXG4gICAgcmV0dXJuIChfYSA9IG9ic2VydmVycy5nZXQodGhpcykpW21ldGhvZF0uYXBwbHkoX2EsIGFyZ3VtZW50cyk7XG4gIH07XG59KTtcblxudmFyIGluZGV4ID0gZnVuY3Rpb24gKCkge1xuICAvLyBFeHBvcnQgZXhpc3RpbmcgaW1wbGVtZW50YXRpb24gaWYgYXZhaWxhYmxlLlxuICBpZiAodHlwZW9mIGdsb2JhbCQxLlJlc2l6ZU9ic2VydmVyICE9PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBnbG9iYWwkMS5SZXNpemVPYnNlcnZlcjtcbiAgfVxuXG4gIHJldHVybiBSZXNpemVPYnNlcnZlcjtcbn0oKTtcblxuZXhwb3J0IGRlZmF1bHQgaW5kZXg7IiwidmFyIHdpbmRvd18gPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IGdsb2JhbDtcbnZhciBnbG9iYWxfID0gdHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWwgOiB3aW5kb3c7XG52YXIgZG9jdW1lbnRfID0gdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyA/IGRvY3VtZW50IDoge307XG5leHBvcnQgeyB3aW5kb3dfIGFzIHdpbmRvdywgZ2xvYmFsXyBhcyBnbG9iYWwsIGRvY3VtZW50XyBhcyBkb2N1bWVudCB9OyIsImltcG9ydCBfZGVmaW5lUHJvcGVydHkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5XCI7XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkge1xuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7XG5cbiAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTtcbiAgICBpZiAoZW51bWVyYWJsZU9ubHkpIHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTtcbiAgICB9KTtcbiAgICBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7XG4gIH1cblxuICByZXR1cm4ga2V5cztcbn1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTtcblxuICAgIGlmIChpICUgMikge1xuICAgICAgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuZnVuY3Rpb24gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIobywgYWxsb3dBcnJheUxpa2UpIHtcbiAgdmFyIGl0O1xuXG4gIGlmICh0eXBlb2YgU3ltYm9sID09PSBcInVuZGVmaW5lZFwiIHx8IG9bU3ltYm9sLml0ZXJhdG9yXSA9PSBudWxsKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkobykgfHwgKGl0ID0gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8pKSB8fCBhbGxvd0FycmF5TGlrZSAmJiBvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgaWYgKGl0KSBvID0gaXQ7XG4gICAgICB2YXIgaSA9IDA7XG5cbiAgICAgIHZhciBGID0gZnVuY3Rpb24gRigpIHt9O1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBzOiBGLFxuICAgICAgICBuOiBmdW5jdGlvbiBuKCkge1xuICAgICAgICAgIGlmIChpID49IG8ubGVuZ3RoKSByZXR1cm4ge1xuICAgICAgICAgICAgZG9uZTogdHJ1ZVxuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRvbmU6IGZhbHNlLFxuICAgICAgICAgICAgdmFsdWU6IG9baSsrXVxuICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICAgIGU6IGZ1bmN0aW9uIGUoX2UpIHtcbiAgICAgICAgICB0aHJvdyBfZTtcbiAgICAgICAgfSxcbiAgICAgICAgZjogRlxuICAgICAgfTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG4gIH1cblxuICB2YXIgbm9ybWFsQ29tcGxldGlvbiA9IHRydWUsXG4gICAgICBkaWRFcnIgPSBmYWxzZSxcbiAgICAgIGVycjtcbiAgcmV0dXJuIHtcbiAgICBzOiBmdW5jdGlvbiBzKCkge1xuICAgICAgaXQgPSBvW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgICB9LFxuICAgIG46IGZ1bmN0aW9uIG4oKSB7XG4gICAgICB2YXIgc3RlcCA9IGl0Lm5leHQoKTtcbiAgICAgIG5vcm1hbENvbXBsZXRpb24gPSBzdGVwLmRvbmU7XG4gICAgICByZXR1cm4gc3RlcDtcbiAgICB9LFxuICAgIGU6IGZ1bmN0aW9uIGUoX2UyKSB7XG4gICAgICBkaWRFcnIgPSB0cnVlO1xuICAgICAgZXJyID0gX2UyO1xuICAgIH0sXG4gICAgZjogZnVuY3Rpb24gZigpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghbm9ybWFsQ29tcGxldGlvbiAmJiBpdFtcInJldHVyblwiXSAhPSBudWxsKSBpdFtcInJldHVyblwiXSgpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKGRpZEVycikgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikge1xuICBpZiAoIW8pIHJldHVybjtcbiAgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbiAgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpO1xuICBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lO1xuICBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTtcbiAgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xufVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikge1xuICBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDtcblxuICBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHtcbiAgICBhcnIyW2ldID0gYXJyW2ldO1xuICB9XG5cbiAgcmV0dXJuIGFycjI7XG59XG5cbnZhciByZWZQcm9wcyA9IFsndHlwZScsICdzb3VyY2UnLCAnc291cmNlLWxheWVyJywgJ21pbnpvb20nLCAnbWF4em9vbScsICdmaWx0ZXInLCAnbGF5b3V0J107XG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplU3R5bGUoc3R5bGUpIHtcbiAgaWYgKCFzdHlsZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBzdHlsZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gc3R5bGU7XG4gIH1cblxuICBpZiAoc3R5bGUudG9KUykge1xuICAgIHN0eWxlID0gc3R5bGUudG9KUygpO1xuICB9XG5cbiAgdmFyIGxheWVySW5kZXggPSB7fTtcblxuICB2YXIgX2l0ZXJhdG9yID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIoc3R5bGUubGF5ZXJzKSxcbiAgICAgIF9zdGVwO1xuXG4gIHRyeSB7XG4gICAgZm9yIChfaXRlcmF0b3IucygpOyAhKF9zdGVwID0gX2l0ZXJhdG9yLm4oKSkuZG9uZTspIHtcbiAgICAgIHZhciBsYXllciA9IF9zdGVwLnZhbHVlO1xuICAgICAgbGF5ZXJJbmRleFtsYXllci5pZF0gPSBsYXllcjtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIF9pdGVyYXRvci5lKGVycik7XG4gIH0gZmluYWxseSB7XG4gICAgX2l0ZXJhdG9yLmYoKTtcbiAgfVxuXG4gIHZhciBsYXllcnMgPSBzdHlsZS5sYXllcnMubWFwKGZ1bmN0aW9uIChsYXllcikge1xuICAgIHZhciBsYXllclJlZiA9IGxheWVySW5kZXhbbGF5ZXIucmVmXTtcbiAgICB2YXIgbm9ybWFsaXplZExheWVyID0gbnVsbDtcblxuICAgIGlmICgnaW50ZXJhY3RpdmUnIGluIGxheWVyKSB7XG4gICAgICBub3JtYWxpemVkTGF5ZXIgPSBfb2JqZWN0U3ByZWFkKHt9LCBsYXllcik7XG4gICAgICBkZWxldGUgbm9ybWFsaXplZExheWVyLmludGVyYWN0aXZlO1xuICAgIH1cblxuICAgIGlmIChsYXllclJlZikge1xuICAgICAgbm9ybWFsaXplZExheWVyID0gbm9ybWFsaXplZExheWVyIHx8IF9vYmplY3RTcHJlYWQoe30sIGxheWVyKTtcbiAgICAgIGRlbGV0ZSBub3JtYWxpemVkTGF5ZXIucmVmO1xuXG4gICAgICB2YXIgX2l0ZXJhdG9yMiA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKHJlZlByb3BzKSxcbiAgICAgICAgICBfc3RlcDI7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGZvciAoX2l0ZXJhdG9yMi5zKCk7ICEoX3N0ZXAyID0gX2l0ZXJhdG9yMi5uKCkpLmRvbmU7KSB7XG4gICAgICAgICAgdmFyIHByb3BOYW1lID0gX3N0ZXAyLnZhbHVlO1xuXG4gICAgICAgICAgaWYgKHByb3BOYW1lIGluIGxheWVyUmVmKSB7XG4gICAgICAgICAgICBub3JtYWxpemVkTGF5ZXJbcHJvcE5hbWVdID0gbGF5ZXJSZWZbcHJvcE5hbWVdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIF9pdGVyYXRvcjIuZShlcnIpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgX2l0ZXJhdG9yMi5mKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vcm1hbGl6ZWRMYXllciB8fCBsYXllcjtcbiAgfSk7XG4gIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHN0eWxlKSwge30sIHtcbiAgICBsYXllcnM6IGxheWVyc1xuICB9KTtcbn0iLCJpbXBvcnQgX2NsYXNzQ2FsbENoZWNrIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jbGFzc0NhbGxDaGVja1wiO1xuaW1wb3J0IF9jcmVhdGVDbGFzcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY3JlYXRlQ2xhc3NcIjtcbmltcG9ydCBfZGVmaW5lUHJvcGVydHkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5XCI7XG5pbXBvcnQgKiBhcyBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBkb2N1bWVudCB9IGZyb20gJy4uL3V0aWxzL2dsb2JhbHMnO1xuaW1wb3J0IHsgbm9ybWFsaXplU3R5bGUgfSBmcm9tICcuLi91dGlscy9zdHlsZS11dGlscyc7XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5mdW5jdGlvbiBkZWZhdWx0T25FcnJvcihldmVudCkge1xuICBpZiAoZXZlbnQpIHtcbiAgICBjb25zb2xlLmVycm9yKGV2ZW50LmVycm9yKTtcbiAgfVxufVxuXG52YXIgcHJvcFR5cGVzID0ge1xuICBjb250YWluZXI6IFByb3BUeXBlcy5vYmplY3QsXG4gIGdsOiBQcm9wVHlwZXMub2JqZWN0LFxuICBtYXBib3hBcGlBY2Nlc3NUb2tlbjogUHJvcFR5cGVzLnN0cmluZyxcbiAgbWFwYm94QXBpVXJsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBhdHRyaWJ1dGlvbkNvbnRyb2w6IFByb3BUeXBlcy5ib29sLFxuICBwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6IFByb3BUeXBlcy5ib29sLFxuICByZXVzZU1hcHM6IFByb3BUeXBlcy5ib29sLFxuICB0cmFuc2Zvcm1SZXF1ZXN0OiBQcm9wVHlwZXMuZnVuYyxcbiAgbWFwT3B0aW9uczogUHJvcFR5cGVzLm9iamVjdCxcbiAgbWFwU3R5bGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgcHJldmVudFN0eWxlRGlmZmluZzogUHJvcFR5cGVzLmJvb2wsXG4gIHZpc2libGU6IFByb3BUeXBlcy5ib29sLFxuICBhc3luY1JlbmRlcjogUHJvcFR5cGVzLmJvb2wsXG4gIG9uTG9hZDogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uRXJyb3I6IFByb3BUeXBlcy5mdW5jLFxuICB3aWR0aDogUHJvcFR5cGVzLm51bWJlcixcbiAgaGVpZ2h0OiBQcm9wVHlwZXMubnVtYmVyLFxuICB2aWV3U3RhdGU6IFByb3BUeXBlcy5vYmplY3QsXG4gIGxvbmdpdHVkZTogUHJvcFR5cGVzLm51bWJlcixcbiAgbGF0aXR1ZGU6IFByb3BUeXBlcy5udW1iZXIsXG4gIHpvb206IFByb3BUeXBlcy5udW1iZXIsXG4gIGJlYXJpbmc6IFByb3BUeXBlcy5udW1iZXIsXG4gIHBpdGNoOiBQcm9wVHlwZXMubnVtYmVyLFxuICBhbHRpdHVkZTogUHJvcFR5cGVzLm51bWJlclxufTtcbnZhciBkZWZhdWx0UHJvcHMgPSB7XG4gIGNvbnRhaW5lcjogZG9jdW1lbnQuYm9keSxcbiAgbWFwYm94QXBpQWNjZXNzVG9rZW46IGdldEFjY2Vzc1Rva2VuKCksXG4gIG1hcGJveEFwaVVybDogJ2h0dHBzOi8vYXBpLm1hcGJveC5jb20nLFxuICBwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6IGZhbHNlLFxuICBhdHRyaWJ1dGlvbkNvbnRyb2w6IHRydWUsXG4gIHJldXNlTWFwczogZmFsc2UsXG4gIG1hcE9wdGlvbnM6IHt9LFxuICBtYXBTdHlsZTogJ21hcGJveDovL3N0eWxlcy9tYXBib3gvbGlnaHQtdjgnLFxuICBwcmV2ZW50U3R5bGVEaWZmaW5nOiBmYWxzZSxcbiAgdmlzaWJsZTogdHJ1ZSxcbiAgYXN5bmNSZW5kZXI6IGZhbHNlLFxuICBvbkxvYWQ6IG5vb3AsXG4gIG9uRXJyb3I6IGRlZmF1bHRPbkVycm9yLFxuICB3aWR0aDogMCxcbiAgaGVpZ2h0OiAwLFxuICBsb25naXR1ZGU6IDAsXG4gIGxhdGl0dWRlOiAwLFxuICB6b29tOiAwLFxuICBiZWFyaW5nOiAwLFxuICBwaXRjaDogMCxcbiAgYWx0aXR1ZGU6IDEuNVxufTtcbmV4cG9ydCBmdW5jdGlvbiBnZXRBY2Nlc3NUb2tlbigpIHtcbiAgdmFyIGFjY2Vzc1Rva2VuID0gbnVsbDtcblxuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmxvY2F0aW9uKSB7XG4gICAgdmFyIG1hdGNoID0gd2luZG93LmxvY2F0aW9uLnNlYXJjaC5tYXRjaCgvYWNjZXNzX3Rva2VuPShbXiZcXC9dKikvKTtcbiAgICBhY2Nlc3NUb2tlbiA9IG1hdGNoICYmIG1hdGNoWzFdO1xuICB9XG5cbiAgaWYgKCFhY2Nlc3NUb2tlbiAmJiB0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBhY2Nlc3NUb2tlbiA9IGFjY2Vzc1Rva2VuIHx8IHByb2Nlc3MuZW52Lk1hcGJveEFjY2Vzc1Rva2VuIHx8IHByb2Nlc3MuZW52LlJFQUNUX0FQUF9NQVBCT1hfQUNDRVNTX1RPS0VOO1xuICB9XG5cbiAgcmV0dXJuIGFjY2Vzc1Rva2VuIHx8ICduby10b2tlbic7XG59XG5cbmZ1bmN0aW9uIGNoZWNrUHJvcFR5cGVzKHByb3BzKSB7XG4gIHZhciBjb21wb25lbnQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6ICdjb21wb25lbnQnO1xuXG4gIGlmIChwcm9wcy5kZWJ1Zykge1xuICAgIFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcyhwcm9wVHlwZXMsIHByb3BzLCAncHJvcCcsIGNvbXBvbmVudCk7XG4gIH1cbn1cblxudmFyIE1hcGJveCA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gTWFwYm94KHByb3BzKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBNYXBib3gpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwicHJvcHNcIiwgZGVmYXVsdFByb3BzKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcIndpZHRoXCIsIDApO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiaGVpZ2h0XCIsIDApO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiX2ZpcmVMb2FkRXZlbnRcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMucHJvcHMub25Mb2FkKHtcbiAgICAgICAgdHlwZTogJ2xvYWQnLFxuICAgICAgICB0YXJnZXQ6IF90aGlzLl9tYXBcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaWYgKCFwcm9wcy5tYXBib3hnbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNYXBib3ggbm90IGF2YWlsYWJsZScpO1xuICAgIH1cblxuICAgIHRoaXMubWFwYm94Z2wgPSBwcm9wcy5tYXBib3hnbDtcblxuICAgIGlmICghTWFwYm94LmluaXRpYWxpemVkKSB7XG4gICAgICBNYXBib3guaW5pdGlhbGl6ZWQgPSB0cnVlO1xuXG4gICAgICB0aGlzLl9jaGVja1N0eWxlU2hlZXQodGhpcy5tYXBib3hnbC52ZXJzaW9uKTtcbiAgICB9XG5cbiAgICB0aGlzLl9pbml0aWFsaXplKHByb3BzKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhNYXBib3gsIFt7XG4gICAga2V5OiBcImZpbmFsaXplXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGZpbmFsaXplKCkge1xuICAgICAgdGhpcy5fZGVzdHJveSgpO1xuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic2V0UHJvcHNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2V0UHJvcHMocHJvcHMpIHtcbiAgICAgIHRoaXMuX3VwZGF0ZSh0aGlzLnByb3BzLCBwcm9wcyk7XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZWRyYXdcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVkcmF3KCkge1xuICAgICAgdmFyIG1hcCA9IHRoaXMuX21hcDtcblxuICAgICAgaWYgKG1hcC5zdHlsZSkge1xuICAgICAgICBpZiAobWFwLl9mcmFtZSkge1xuICAgICAgICAgIG1hcC5fZnJhbWUuY2FuY2VsKCk7XG5cbiAgICAgICAgICBtYXAuX2ZyYW1lID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIG1hcC5fcmVuZGVyKCk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldE1hcFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRNYXAoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fbWFwO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJfcmV1c2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gX3JldXNlKHByb3BzKSB7XG4gICAgICB0aGlzLl9tYXAgPSBNYXBib3guc2F2ZWRNYXA7XG5cbiAgICAgIHZhciBvbGRDb250YWluZXIgPSB0aGlzLl9tYXAuZ2V0Q29udGFpbmVyKCk7XG5cbiAgICAgIHZhciBuZXdDb250YWluZXIgPSBwcm9wcy5jb250YWluZXI7XG4gICAgICBuZXdDb250YWluZXIuY2xhc3NMaXN0LmFkZCgnbWFwYm94Z2wtbWFwJyk7XG5cbiAgICAgIHdoaWxlIChvbGRDb250YWluZXIuY2hpbGROb2Rlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIG5ld0NvbnRhaW5lci5hcHBlbmRDaGlsZChvbGRDb250YWluZXIuY2hpbGROb2Rlc1swXSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX21hcC5fY29udGFpbmVyID0gbmV3Q29udGFpbmVyO1xuICAgICAgTWFwYm94LnNhdmVkTWFwID0gbnVsbDtcblxuICAgICAgaWYgKHByb3BzLm1hcFN0eWxlKSB7XG4gICAgICAgIHRoaXMuX21hcC5zZXRTdHlsZShub3JtYWxpemVTdHlsZShwcm9wcy5tYXBTdHlsZSksIHtcbiAgICAgICAgICBkaWZmOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX21hcC5pc1N0eWxlTG9hZGVkKCkpIHtcbiAgICAgICAgdGhpcy5fZmlyZUxvYWRFdmVudCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fbWFwLm9uY2UoJ3N0eWxlZGF0YScsIHRoaXMuX2ZpcmVMb2FkRXZlbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJfY3JlYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9jcmVhdGUocHJvcHMpIHtcbiAgICAgIGlmIChwcm9wcy5yZXVzZU1hcHMgJiYgTWFwYm94LnNhdmVkTWFwKSB7XG4gICAgICAgIHRoaXMuX3JldXNlKHByb3BzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChwcm9wcy5nbCkge1xuICAgICAgICAgIHZhciBnZXRDb250ZXh0ID0gSFRNTENhbnZhc0VsZW1lbnQucHJvdG90eXBlLmdldENvbnRleHQ7XG5cbiAgICAgICAgICBIVE1MQ2FudmFzRWxlbWVudC5wcm90b3R5cGUuZ2V0Q29udGV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIEhUTUxDYW52YXNFbGVtZW50LnByb3RvdHlwZS5nZXRDb250ZXh0ID0gZ2V0Q29udGV4dDtcbiAgICAgICAgICAgIHJldHVybiBwcm9wcy5nbDtcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG1hcE9wdGlvbnMgPSB7XG4gICAgICAgICAgY29udGFpbmVyOiBwcm9wcy5jb250YWluZXIsXG4gICAgICAgICAgY2VudGVyOiBbMCwgMF0sXG4gICAgICAgICAgem9vbTogOCxcbiAgICAgICAgICBwaXRjaDogMCxcbiAgICAgICAgICBiZWFyaW5nOiAwLFxuICAgICAgICAgIG1heFpvb206IDI0LFxuICAgICAgICAgIHN0eWxlOiBub3JtYWxpemVTdHlsZShwcm9wcy5tYXBTdHlsZSksXG4gICAgICAgICAgaW50ZXJhY3RpdmU6IGZhbHNlLFxuICAgICAgICAgIHRyYWNrUmVzaXplOiBmYWxzZSxcbiAgICAgICAgICBhdHRyaWJ1dGlvbkNvbnRyb2w6IHByb3BzLmF0dHJpYnV0aW9uQ29udHJvbCxcbiAgICAgICAgICBwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6IHByb3BzLnByZXNlcnZlRHJhd2luZ0J1ZmZlclxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChwcm9wcy50cmFuc2Zvcm1SZXF1ZXN0KSB7XG4gICAgICAgICAgbWFwT3B0aW9ucy50cmFuc2Zvcm1SZXF1ZXN0ID0gcHJvcHMudHJhbnNmb3JtUmVxdWVzdDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX21hcCA9IG5ldyB0aGlzLm1hcGJveGdsLk1hcChPYmplY3QuYXNzaWduKHt9LCBtYXBPcHRpb25zLCBwcm9wcy5tYXBPcHRpb25zKSk7XG5cbiAgICAgICAgdGhpcy5fbWFwLm9uY2UoJ2xvYWQnLCBwcm9wcy5vbkxvYWQpO1xuXG4gICAgICAgIHRoaXMuX21hcC5vbignZXJyb3InLCBwcm9wcy5vbkVycm9yKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIl9kZXN0cm95XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9kZXN0cm95KCkge1xuICAgICAgaWYgKCF0aGlzLl9tYXApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIU1hcGJveC5zYXZlZE1hcCkge1xuICAgICAgICBNYXBib3guc2F2ZWRNYXAgPSB0aGlzLl9tYXA7XG5cbiAgICAgICAgdGhpcy5fbWFwLm9mZignbG9hZCcsIHRoaXMucHJvcHMub25Mb2FkKTtcblxuICAgICAgICB0aGlzLl9tYXAub2ZmKCdlcnJvcicsIHRoaXMucHJvcHMub25FcnJvcik7XG5cbiAgICAgICAgdGhpcy5fbWFwLm9mZignc3R5bGVkYXRhJywgdGhpcy5fZmlyZUxvYWRFdmVudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9tYXAucmVtb3ZlKCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX21hcCA9IG51bGw7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIl9pbml0aWFsaXplXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9pbml0aWFsaXplKHByb3BzKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgcHJvcHMgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0UHJvcHMsIHByb3BzKTtcbiAgICAgIGNoZWNrUHJvcFR5cGVzKHByb3BzLCAnTWFwYm94Jyk7XG4gICAgICB0aGlzLm1hcGJveGdsLmFjY2Vzc1Rva2VuID0gcHJvcHMubWFwYm94QXBpQWNjZXNzVG9rZW4gfHwgZGVmYXVsdFByb3BzLm1hcGJveEFwaUFjY2Vzc1Rva2VuO1xuICAgICAgdGhpcy5tYXBib3hnbC5iYXNlQXBpVXJsID0gcHJvcHMubWFwYm94QXBpVXJsO1xuXG4gICAgICB0aGlzLl9jcmVhdGUocHJvcHMpO1xuXG4gICAgICB2YXIgX3Byb3BzID0gcHJvcHMsXG4gICAgICAgICAgY29udGFpbmVyID0gX3Byb3BzLmNvbnRhaW5lcjtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb250YWluZXIsICdvZmZzZXRXaWR0aCcsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgcmV0dXJuIF90aGlzMi53aWR0aDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29udGFpbmVyLCAnY2xpZW50V2lkdGgnLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgIHJldHVybiBfdGhpczIud2lkdGg7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbnRhaW5lciwgJ29mZnNldEhlaWdodCcsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgcmV0dXJuIF90aGlzMi5oZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbnRhaW5lciwgJ2NsaWVudEhlaWdodCcsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgcmV0dXJuIF90aGlzMi5oZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB2YXIgY2FudmFzID0gdGhpcy5fbWFwLmdldENhbnZhcygpO1xuXG4gICAgICBpZiAoY2FudmFzKSB7XG4gICAgICAgIGNhbnZhcy5zdHlsZS5vdXRsaW5lID0gJ25vbmUnO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl91cGRhdGVNYXBWaWV3cG9ydCh7fSwgcHJvcHMpO1xuXG4gICAgICB0aGlzLl91cGRhdGVNYXBTaXplKHt9LCBwcm9wcyk7XG5cbiAgICAgIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiX3VwZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfdXBkYXRlKG9sZFByb3BzLCBuZXdQcm9wcykge1xuICAgICAgaWYgKCF0aGlzLl9tYXApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBuZXdQcm9wcyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMucHJvcHMsIG5ld1Byb3BzKTtcbiAgICAgIGNoZWNrUHJvcFR5cGVzKG5ld1Byb3BzLCAnTWFwYm94Jyk7XG5cbiAgICAgIHZhciB2aWV3cG9ydENoYW5nZWQgPSB0aGlzLl91cGRhdGVNYXBWaWV3cG9ydChvbGRQcm9wcywgbmV3UHJvcHMpO1xuXG4gICAgICB2YXIgc2l6ZUNoYW5nZWQgPSB0aGlzLl91cGRhdGVNYXBTaXplKG9sZFByb3BzLCBuZXdQcm9wcyk7XG5cbiAgICAgIHRoaXMuX3VwZGF0ZU1hcFN0eWxlKG9sZFByb3BzLCBuZXdQcm9wcyk7XG5cbiAgICAgIGlmICghbmV3UHJvcHMuYXN5bmNSZW5kZXIgJiYgKHZpZXdwb3J0Q2hhbmdlZCB8fCBzaXplQ2hhbmdlZCkpIHtcbiAgICAgICAgdGhpcy5yZWRyYXcoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5wcm9wcyA9IG5ld1Byb3BzO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJfdXBkYXRlTWFwU3R5bGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gX3VwZGF0ZU1hcFN0eWxlKG9sZFByb3BzLCBuZXdQcm9wcykge1xuICAgICAgdmFyIHN0eWxlQ2hhbmdlZCA9IG9sZFByb3BzLm1hcFN0eWxlICE9PSBuZXdQcm9wcy5tYXBTdHlsZTtcblxuICAgICAgaWYgKHN0eWxlQ2hhbmdlZCkge1xuICAgICAgICB0aGlzLl9tYXAuc2V0U3R5bGUobm9ybWFsaXplU3R5bGUobmV3UHJvcHMubWFwU3R5bGUpLCB7XG4gICAgICAgICAgZGlmZjogIW5ld1Byb3BzLnByZXZlbnRTdHlsZURpZmZpbmdcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIl91cGRhdGVNYXBTaXplXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF91cGRhdGVNYXBTaXplKG9sZFByb3BzLCBuZXdQcm9wcykge1xuICAgICAgdmFyIHNpemVDaGFuZ2VkID0gb2xkUHJvcHMud2lkdGggIT09IG5ld1Byb3BzLndpZHRoIHx8IG9sZFByb3BzLmhlaWdodCAhPT0gbmV3UHJvcHMuaGVpZ2h0O1xuXG4gICAgICBpZiAoc2l6ZUNoYW5nZWQpIHtcbiAgICAgICAgdGhpcy53aWR0aCA9IG5ld1Byb3BzLndpZHRoO1xuICAgICAgICB0aGlzLmhlaWdodCA9IG5ld1Byb3BzLmhlaWdodDtcblxuICAgICAgICB0aGlzLl9tYXAucmVzaXplKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzaXplQ2hhbmdlZDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiX3VwZGF0ZU1hcFZpZXdwb3J0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF91cGRhdGVNYXBWaWV3cG9ydChvbGRQcm9wcywgbmV3UHJvcHMpIHtcbiAgICAgIHZhciBvbGRWaWV3U3RhdGUgPSB0aGlzLl9nZXRWaWV3U3RhdGUob2xkUHJvcHMpO1xuXG4gICAgICB2YXIgbmV3Vmlld1N0YXRlID0gdGhpcy5fZ2V0Vmlld1N0YXRlKG5ld1Byb3BzKTtcblxuICAgICAgdmFyIHZpZXdwb3J0Q2hhbmdlZCA9IG5ld1ZpZXdTdGF0ZS5sYXRpdHVkZSAhPT0gb2xkVmlld1N0YXRlLmxhdGl0dWRlIHx8IG5ld1ZpZXdTdGF0ZS5sb25naXR1ZGUgIT09IG9sZFZpZXdTdGF0ZS5sb25naXR1ZGUgfHwgbmV3Vmlld1N0YXRlLnpvb20gIT09IG9sZFZpZXdTdGF0ZS56b29tIHx8IG5ld1ZpZXdTdGF0ZS5waXRjaCAhPT0gb2xkVmlld1N0YXRlLnBpdGNoIHx8IG5ld1ZpZXdTdGF0ZS5iZWFyaW5nICE9PSBvbGRWaWV3U3RhdGUuYmVhcmluZyB8fCBuZXdWaWV3U3RhdGUuYWx0aXR1ZGUgIT09IG9sZFZpZXdTdGF0ZS5hbHRpdHVkZTtcblxuICAgICAgaWYgKHZpZXdwb3J0Q2hhbmdlZCkge1xuICAgICAgICB0aGlzLl9tYXAuanVtcFRvKHRoaXMuX3ZpZXdTdGF0ZVRvTWFwYm94UHJvcHMobmV3Vmlld1N0YXRlKSk7XG5cbiAgICAgICAgaWYgKG5ld1ZpZXdTdGF0ZS5hbHRpdHVkZSAhPT0gb2xkVmlld1N0YXRlLmFsdGl0dWRlKSB7XG4gICAgICAgICAgdGhpcy5fbWFwLnRyYW5zZm9ybS5hbHRpdHVkZSA9IG5ld1ZpZXdTdGF0ZS5hbHRpdHVkZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdmlld3BvcnRDaGFuZ2VkO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJfZ2V0Vmlld1N0YXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9nZXRWaWV3U3RhdGUocHJvcHMpIHtcbiAgICAgIHZhciBfcmVmID0gcHJvcHMudmlld1N0YXRlIHx8IHByb3BzLFxuICAgICAgICAgIGxvbmdpdHVkZSA9IF9yZWYubG9uZ2l0dWRlLFxuICAgICAgICAgIGxhdGl0dWRlID0gX3JlZi5sYXRpdHVkZSxcbiAgICAgICAgICB6b29tID0gX3JlZi56b29tLFxuICAgICAgICAgIF9yZWYkcGl0Y2ggPSBfcmVmLnBpdGNoLFxuICAgICAgICAgIHBpdGNoID0gX3JlZiRwaXRjaCA9PT0gdm9pZCAwID8gMCA6IF9yZWYkcGl0Y2gsXG4gICAgICAgICAgX3JlZiRiZWFyaW5nID0gX3JlZi5iZWFyaW5nLFxuICAgICAgICAgIGJlYXJpbmcgPSBfcmVmJGJlYXJpbmcgPT09IHZvaWQgMCA/IDAgOiBfcmVmJGJlYXJpbmcsXG4gICAgICAgICAgX3JlZiRhbHRpdHVkZSA9IF9yZWYuYWx0aXR1ZGUsXG4gICAgICAgICAgYWx0aXR1ZGUgPSBfcmVmJGFsdGl0dWRlID09PSB2b2lkIDAgPyAxLjUgOiBfcmVmJGFsdGl0dWRlO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBsb25naXR1ZGU6IGxvbmdpdHVkZSxcbiAgICAgICAgbGF0aXR1ZGU6IGxhdGl0dWRlLFxuICAgICAgICB6b29tOiB6b29tLFxuICAgICAgICBwaXRjaDogcGl0Y2gsXG4gICAgICAgIGJlYXJpbmc6IGJlYXJpbmcsXG4gICAgICAgIGFsdGl0dWRlOiBhbHRpdHVkZVxuICAgICAgfTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiX2NoZWNrU3R5bGVTaGVldFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfY2hlY2tTdHlsZVNoZWV0KCkge1xuICAgICAgdmFyIG1hcGJveFZlcnNpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6ICcwLjQ3LjAnO1xuXG4gICAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciB0ZXN0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICB0ZXN0RWxlbWVudC5jbGFzc05hbWUgPSAnbWFwYm94Z2wtbWFwJztcbiAgICAgICAgdGVzdEVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0ZXN0RWxlbWVudCk7XG4gICAgICAgIHZhciBpc0Nzc0xvYWRlZCA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRlc3RFbGVtZW50KS5wb3NpdGlvbiAhPT0gJ3N0YXRpYyc7XG5cbiAgICAgICAgaWYgKCFpc0Nzc0xvYWRlZCkge1xuICAgICAgICAgIHZhciBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGluaycpO1xuICAgICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKCdyZWwnLCAnc3R5bGVzaGVldCcpO1xuICAgICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKCd0eXBlJywgJ3RleHQvY3NzJyk7XG4gICAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBcImh0dHBzOi8vYXBpLnRpbGVzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL3ZcIi5jb25jYXQobWFwYm94VmVyc2lvbiwgXCIvbWFwYm94LWdsLmNzc1wiKSk7XG4gICAgICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChsaW5rKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHt9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIl92aWV3U3RhdGVUb01hcGJveFByb3BzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF92aWV3U3RhdGVUb01hcGJveFByb3BzKHZpZXdTdGF0ZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY2VudGVyOiBbdmlld1N0YXRlLmxvbmdpdHVkZSwgdmlld1N0YXRlLmxhdGl0dWRlXSxcbiAgICAgICAgem9vbTogdmlld1N0YXRlLnpvb20sXG4gICAgICAgIGJlYXJpbmc6IHZpZXdTdGF0ZS5iZWFyaW5nLFxuICAgICAgICBwaXRjaDogdmlld1N0YXRlLnBpdGNoXG4gICAgICB9O1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBNYXBib3g7XG59KCk7XG5cbl9kZWZpbmVQcm9wZXJ0eShNYXBib3gsIFwiaW5pdGlhbGl6ZWRcIiwgZmFsc2UpO1xuXG5fZGVmaW5lUHJvcGVydHkoTWFwYm94LCBcInByb3BUeXBlc1wiLCBwcm9wVHlwZXMpO1xuXG5fZGVmaW5lUHJvcGVydHkoTWFwYm94LCBcImRlZmF1bHRQcm9wc1wiLCBkZWZhdWx0UHJvcHMpO1xuXG5fZGVmaW5lUHJvcGVydHkoTWFwYm94LCBcInNhdmVkTWFwXCIsIG51bGwpO1xuXG5leHBvcnQgeyBNYXBib3ggYXMgZGVmYXVsdCB9OyIsInZhciBFUFNJTE9OID0gMWUtNztcblxuZnVuY3Rpb24gaXNBcnJheSh2YWx1ZSkge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSkgfHwgQXJyYXlCdWZmZXIuaXNWaWV3KHZhbHVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWFscyhhLCBiKSB7XG4gIGlmIChhID09PSBiKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoaXNBcnJheShhKSAmJiBpc0FycmF5KGIpKSB7XG4gICAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYS5sZW5ndGg7ICsraSkge1xuICAgICAgaWYgKCFlcXVhbHMoYVtpXSwgYltpXSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIE1hdGguYWJzKGEgLSBiKSA8PSBFUFNJTE9OO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNsYW1wKHZhbHVlLCBtaW4sIG1heCkge1xuICByZXR1cm4gTWF0aC5tYXgobWluLCBNYXRoLm1pbihtYXgsIHZhbHVlKSk7XG59XG5leHBvcnQgZnVuY3Rpb24gbGVycChhLCBiLCB0KSB7XG4gIGlmIChpc0FycmF5KGEpKSB7XG4gICAgcmV0dXJuIGEubWFwKGZ1bmN0aW9uIChhaSwgaSkge1xuICAgICAgcmV0dXJuIGxlcnAoYWksIGJbaV0sIHQpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHQgKiBiICsgKDEgLSB0KSAqIGE7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYXNzZXJ0KGNvbmRpdGlvbiwgbWVzc2FnZSkge1xuICBpZiAoIWNvbmRpdGlvbikge1xuICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlIHx8ICdyZWFjdC1tYXAtZ2w6IGFzc2VydGlvbiBmYWlsZWQuJyk7XG4gIH1cbn0iLCJpbXBvcnQgX2RlZmluZVByb3BlcnR5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eVwiO1xuaW1wb3J0IF9zbGljZWRUb0FycmF5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zbGljZWRUb0FycmF5XCI7XG5pbXBvcnQgX2NsYXNzQ2FsbENoZWNrIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jbGFzc0NhbGxDaGVja1wiO1xuaW1wb3J0IF9jcmVhdGVDbGFzcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY3JlYXRlQ2xhc3NcIjtcblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7XG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTtcblxuICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICAgIHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpO1xuICAgIGlmIChlbnVtZXJhYmxlT25seSkgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHtcbiAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlO1xuICAgIH0pO1xuICAgIGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTtcbiAgfVxuXG4gIHJldHVybiBrZXlzO1xufVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkge1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9O1xuXG4gICAgaWYgKGkgJSAyKSB7XG4gICAgICBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5pbXBvcnQgV2ViTWVyY2F0b3JWaWV3cG9ydCwgeyBub3JtYWxpemVWaWV3cG9ydFByb3BzIH0gZnJvbSAndmlld3BvcnQtbWVyY2F0b3ItcHJvamVjdCc7XG5pbXBvcnQgeyBjbGFtcCB9IGZyb20gJy4vbWF0aC11dGlscyc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJy4vYXNzZXJ0JztcbmV4cG9ydCB2YXIgTUFQQk9YX0xJTUlUUyA9IHtcbiAgbWluWm9vbTogMCxcbiAgbWF4Wm9vbTogMjQsXG4gIG1pblBpdGNoOiAwLFxuICBtYXhQaXRjaDogODVcbn07XG52YXIgREVGQVVMVF9TVEFURSA9IHtcbiAgcGl0Y2g6IDAsXG4gIGJlYXJpbmc6IDAsXG4gIGFsdGl0dWRlOiAxLjVcbn07XG52YXIgUElUQ0hfTU9VU0VfVEhSRVNIT0xEID0gNTtcbnZhciBQSVRDSF9BQ0NFTCA9IDEuMjtcblxudmFyIE1hcFN0YXRlID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBNYXBTdGF0ZShfcmVmKSB7XG4gICAgdmFyIHdpZHRoID0gX3JlZi53aWR0aCxcbiAgICAgICAgaGVpZ2h0ID0gX3JlZi5oZWlnaHQsXG4gICAgICAgIGxhdGl0dWRlID0gX3JlZi5sYXRpdHVkZSxcbiAgICAgICAgbG9uZ2l0dWRlID0gX3JlZi5sb25naXR1ZGUsXG4gICAgICAgIHpvb20gPSBfcmVmLnpvb20sXG4gICAgICAgIF9yZWYkYmVhcmluZyA9IF9yZWYuYmVhcmluZyxcbiAgICAgICAgYmVhcmluZyA9IF9yZWYkYmVhcmluZyA9PT0gdm9pZCAwID8gREVGQVVMVF9TVEFURS5iZWFyaW5nIDogX3JlZiRiZWFyaW5nLFxuICAgICAgICBfcmVmJHBpdGNoID0gX3JlZi5waXRjaCxcbiAgICAgICAgcGl0Y2ggPSBfcmVmJHBpdGNoID09PSB2b2lkIDAgPyBERUZBVUxUX1NUQVRFLnBpdGNoIDogX3JlZiRwaXRjaCxcbiAgICAgICAgX3JlZiRhbHRpdHVkZSA9IF9yZWYuYWx0aXR1ZGUsXG4gICAgICAgIGFsdGl0dWRlID0gX3JlZiRhbHRpdHVkZSA9PT0gdm9pZCAwID8gREVGQVVMVF9TVEFURS5hbHRpdHVkZSA6IF9yZWYkYWx0aXR1ZGUsXG4gICAgICAgIF9yZWYkbWF4Wm9vbSA9IF9yZWYubWF4Wm9vbSxcbiAgICAgICAgbWF4Wm9vbSA9IF9yZWYkbWF4Wm9vbSA9PT0gdm9pZCAwID8gTUFQQk9YX0xJTUlUUy5tYXhab29tIDogX3JlZiRtYXhab29tLFxuICAgICAgICBfcmVmJG1pblpvb20gPSBfcmVmLm1pblpvb20sXG4gICAgICAgIG1pblpvb20gPSBfcmVmJG1pblpvb20gPT09IHZvaWQgMCA/IE1BUEJPWF9MSU1JVFMubWluWm9vbSA6IF9yZWYkbWluWm9vbSxcbiAgICAgICAgX3JlZiRtYXhQaXRjaCA9IF9yZWYubWF4UGl0Y2gsXG4gICAgICAgIG1heFBpdGNoID0gX3JlZiRtYXhQaXRjaCA9PT0gdm9pZCAwID8gTUFQQk9YX0xJTUlUUy5tYXhQaXRjaCA6IF9yZWYkbWF4UGl0Y2gsXG4gICAgICAgIF9yZWYkbWluUGl0Y2ggPSBfcmVmLm1pblBpdGNoLFxuICAgICAgICBtaW5QaXRjaCA9IF9yZWYkbWluUGl0Y2ggPT09IHZvaWQgMCA/IE1BUEJPWF9MSU1JVFMubWluUGl0Y2ggOiBfcmVmJG1pblBpdGNoLFxuICAgICAgICB0cmFuc2l0aW9uRHVyYXRpb24gPSBfcmVmLnRyYW5zaXRpb25EdXJhdGlvbixcbiAgICAgICAgdHJhbnNpdGlvbkVhc2luZyA9IF9yZWYudHJhbnNpdGlvbkVhc2luZyxcbiAgICAgICAgdHJhbnNpdGlvbkludGVycG9sYXRvciA9IF9yZWYudHJhbnNpdGlvbkludGVycG9sYXRvcixcbiAgICAgICAgdHJhbnNpdGlvbkludGVycnVwdGlvbiA9IF9yZWYudHJhbnNpdGlvbkludGVycnVwdGlvbixcbiAgICAgICAgc3RhcnRQYW5MbmdMYXQgPSBfcmVmLnN0YXJ0UGFuTG5nTGF0LFxuICAgICAgICBzdGFydFpvb21MbmdMYXQgPSBfcmVmLnN0YXJ0Wm9vbUxuZ0xhdCxcbiAgICAgICAgc3RhcnRSb3RhdGVQb3MgPSBfcmVmLnN0YXJ0Um90YXRlUG9zLFxuICAgICAgICBzdGFydEJlYXJpbmcgPSBfcmVmLnN0YXJ0QmVhcmluZyxcbiAgICAgICAgc3RhcnRQaXRjaCA9IF9yZWYuc3RhcnRQaXRjaCxcbiAgICAgICAgc3RhcnRab29tID0gX3JlZi5zdGFydFpvb207XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgTWFwU3RhdGUpO1xuXG4gICAgYXNzZXJ0KE51bWJlci5pc0Zpbml0ZSh3aWR0aCksICdgd2lkdGhgIG11c3QgYmUgc3VwcGxpZWQnKTtcbiAgICBhc3NlcnQoTnVtYmVyLmlzRmluaXRlKGhlaWdodCksICdgaGVpZ2h0YCBtdXN0IGJlIHN1cHBsaWVkJyk7XG4gICAgYXNzZXJ0KE51bWJlci5pc0Zpbml0ZShsb25naXR1ZGUpLCAnYGxvbmdpdHVkZWAgbXVzdCBiZSBzdXBwbGllZCcpO1xuICAgIGFzc2VydChOdW1iZXIuaXNGaW5pdGUobGF0aXR1ZGUpLCAnYGxhdGl0dWRlYCBtdXN0IGJlIHN1cHBsaWVkJyk7XG4gICAgYXNzZXJ0KE51bWJlci5pc0Zpbml0ZSh6b29tKSwgJ2B6b29tYCBtdXN0IGJlIHN1cHBsaWVkJyk7XG4gICAgdGhpcy5fdmlld3BvcnRQcm9wcyA9IHRoaXMuX2FwcGx5Q29uc3RyYWludHMoe1xuICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgICBsYXRpdHVkZTogbGF0aXR1ZGUsXG4gICAgICBsb25naXR1ZGU6IGxvbmdpdHVkZSxcbiAgICAgIHpvb206IHpvb20sXG4gICAgICBiZWFyaW5nOiBiZWFyaW5nLFxuICAgICAgcGl0Y2g6IHBpdGNoLFxuICAgICAgYWx0aXR1ZGU6IGFsdGl0dWRlLFxuICAgICAgbWF4Wm9vbTogbWF4Wm9vbSxcbiAgICAgIG1pblpvb206IG1pblpvb20sXG4gICAgICBtYXhQaXRjaDogbWF4UGl0Y2gsXG4gICAgICBtaW5QaXRjaDogbWluUGl0Y2gsXG4gICAgICB0cmFuc2l0aW9uRHVyYXRpb246IHRyYW5zaXRpb25EdXJhdGlvbixcbiAgICAgIHRyYW5zaXRpb25FYXNpbmc6IHRyYW5zaXRpb25FYXNpbmcsXG4gICAgICB0cmFuc2l0aW9uSW50ZXJwb2xhdG9yOiB0cmFuc2l0aW9uSW50ZXJwb2xhdG9yLFxuICAgICAgdHJhbnNpdGlvbkludGVycnVwdGlvbjogdHJhbnNpdGlvbkludGVycnVwdGlvblxuICAgIH0pO1xuICAgIHRoaXMuX3N0YXRlID0ge1xuICAgICAgc3RhcnRQYW5MbmdMYXQ6IHN0YXJ0UGFuTG5nTGF0LFxuICAgICAgc3RhcnRab29tTG5nTGF0OiBzdGFydFpvb21MbmdMYXQsXG4gICAgICBzdGFydFJvdGF0ZVBvczogc3RhcnRSb3RhdGVQb3MsXG4gICAgICBzdGFydEJlYXJpbmc6IHN0YXJ0QmVhcmluZyxcbiAgICAgIHN0YXJ0UGl0Y2g6IHN0YXJ0UGl0Y2gsXG4gICAgICBzdGFydFpvb206IHN0YXJ0Wm9vbVxuICAgIH07XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoTWFwU3RhdGUsIFt7XG4gICAga2V5OiBcImdldFZpZXdwb3J0UHJvcHNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0Vmlld3BvcnRQcm9wcygpIHtcbiAgICAgIHJldHVybiB0aGlzLl92aWV3cG9ydFByb3BzO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRTdGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRTdGF0ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9zdGF0ZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicGFuU3RhcnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcGFuU3RhcnQoX3JlZjIpIHtcbiAgICAgIHZhciBwb3MgPSBfcmVmMi5wb3M7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0VXBkYXRlZE1hcFN0YXRlKHtcbiAgICAgICAgc3RhcnRQYW5MbmdMYXQ6IHRoaXMuX3VucHJvamVjdChwb3MpXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicGFuXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHBhbihfcmVmMykge1xuICAgICAgdmFyIHBvcyA9IF9yZWYzLnBvcyxcbiAgICAgICAgICBzdGFydFBvcyA9IF9yZWYzLnN0YXJ0UG9zO1xuXG4gICAgICB2YXIgc3RhcnRQYW5MbmdMYXQgPSB0aGlzLl9zdGF0ZS5zdGFydFBhbkxuZ0xhdCB8fCB0aGlzLl91bnByb2plY3Qoc3RhcnRQb3MpO1xuXG4gICAgICBpZiAoIXN0YXJ0UGFuTG5nTGF0KSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuXG4gICAgICB2YXIgX3RoaXMkX2NhbGN1bGF0ZU5ld0xuID0gdGhpcy5fY2FsY3VsYXRlTmV3TG5nTGF0KHtcbiAgICAgICAgc3RhcnRQYW5MbmdMYXQ6IHN0YXJ0UGFuTG5nTGF0LFxuICAgICAgICBwb3M6IHBvc1xuICAgICAgfSksXG4gICAgICAgICAgX3RoaXMkX2NhbGN1bGF0ZU5ld0xuMiA9IF9zbGljZWRUb0FycmF5KF90aGlzJF9jYWxjdWxhdGVOZXdMbiwgMiksXG4gICAgICAgICAgbG9uZ2l0dWRlID0gX3RoaXMkX2NhbGN1bGF0ZU5ld0xuMlswXSxcbiAgICAgICAgICBsYXRpdHVkZSA9IF90aGlzJF9jYWxjdWxhdGVOZXdMbjJbMV07XG5cbiAgICAgIHJldHVybiB0aGlzLl9nZXRVcGRhdGVkTWFwU3RhdGUoe1xuICAgICAgICBsb25naXR1ZGU6IGxvbmdpdHVkZSxcbiAgICAgICAgbGF0aXR1ZGU6IGxhdGl0dWRlXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicGFuRW5kXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHBhbkVuZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRVcGRhdGVkTWFwU3RhdGUoe1xuICAgICAgICBzdGFydFBhbkxuZ0xhdDogbnVsbFxuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJvdGF0ZVN0YXJ0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJvdGF0ZVN0YXJ0KF9yZWY0KSB7XG4gICAgICB2YXIgcG9zID0gX3JlZjQucG9zO1xuICAgICAgcmV0dXJuIHRoaXMuX2dldFVwZGF0ZWRNYXBTdGF0ZSh7XG4gICAgICAgIHN0YXJ0Um90YXRlUG9zOiBwb3MsXG4gICAgICAgIHN0YXJ0QmVhcmluZzogdGhpcy5fdmlld3BvcnRQcm9wcy5iZWFyaW5nLFxuICAgICAgICBzdGFydFBpdGNoOiB0aGlzLl92aWV3cG9ydFByb3BzLnBpdGNoXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicm90YXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJvdGF0ZShfcmVmNSkge1xuICAgICAgdmFyIHBvcyA9IF9yZWY1LnBvcyxcbiAgICAgICAgICBfcmVmNSRkZWx0YUFuZ2xlWCA9IF9yZWY1LmRlbHRhQW5nbGVYLFxuICAgICAgICAgIGRlbHRhQW5nbGVYID0gX3JlZjUkZGVsdGFBbmdsZVggPT09IHZvaWQgMCA/IDAgOiBfcmVmNSRkZWx0YUFuZ2xlWCxcbiAgICAgICAgICBfcmVmNSRkZWx0YUFuZ2xlWSA9IF9yZWY1LmRlbHRhQW5nbGVZLFxuICAgICAgICAgIGRlbHRhQW5nbGVZID0gX3JlZjUkZGVsdGFBbmdsZVkgPT09IHZvaWQgMCA/IDAgOiBfcmVmNSRkZWx0YUFuZ2xlWTtcbiAgICAgIHZhciBfdGhpcyRfc3RhdGUgPSB0aGlzLl9zdGF0ZSxcbiAgICAgICAgICBzdGFydFJvdGF0ZVBvcyA9IF90aGlzJF9zdGF0ZS5zdGFydFJvdGF0ZVBvcyxcbiAgICAgICAgICBzdGFydEJlYXJpbmcgPSBfdGhpcyRfc3RhdGUuc3RhcnRCZWFyaW5nLFxuICAgICAgICAgIHN0YXJ0UGl0Y2ggPSBfdGhpcyRfc3RhdGUuc3RhcnRQaXRjaDtcblxuICAgICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoc3RhcnRCZWFyaW5nKSB8fCAhTnVtYmVyLmlzRmluaXRlKHN0YXJ0UGl0Y2gpKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuXG4gICAgICB2YXIgbmV3Um90YXRpb247XG5cbiAgICAgIGlmIChwb3MpIHtcbiAgICAgICAgbmV3Um90YXRpb24gPSB0aGlzLl9jYWxjdWxhdGVOZXdQaXRjaEFuZEJlYXJpbmcoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCB0aGlzLl9nZXRSb3RhdGlvblBhcmFtcyhwb3MsIHN0YXJ0Um90YXRlUG9zKSksIHt9LCB7XG4gICAgICAgICAgc3RhcnRCZWFyaW5nOiBzdGFydEJlYXJpbmcsXG4gICAgICAgICAgc3RhcnRQaXRjaDogc3RhcnRQaXRjaFxuICAgICAgICB9KSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdSb3RhdGlvbiA9IHtcbiAgICAgICAgICBiZWFyaW5nOiBzdGFydEJlYXJpbmcgKyBkZWx0YUFuZ2xlWCxcbiAgICAgICAgICBwaXRjaDogc3RhcnRQaXRjaCArIGRlbHRhQW5nbGVZXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLl9nZXRVcGRhdGVkTWFwU3RhdGUobmV3Um90YXRpb24pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyb3RhdGVFbmRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcm90YXRlRW5kKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldFVwZGF0ZWRNYXBTdGF0ZSh7XG4gICAgICAgIHN0YXJ0QmVhcmluZzogbnVsbCxcbiAgICAgICAgc3RhcnRQaXRjaDogbnVsbFxuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInpvb21TdGFydFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB6b29tU3RhcnQoX3JlZjYpIHtcbiAgICAgIHZhciBwb3MgPSBfcmVmNi5wb3M7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0VXBkYXRlZE1hcFN0YXRlKHtcbiAgICAgICAgc3RhcnRab29tTG5nTGF0OiB0aGlzLl91bnByb2plY3QocG9zKSxcbiAgICAgICAgc3RhcnRab29tOiB0aGlzLl92aWV3cG9ydFByb3BzLnpvb21cbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ6b29tXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHpvb20oX3JlZjcpIHtcbiAgICAgIHZhciBwb3MgPSBfcmVmNy5wb3MsXG4gICAgICAgICAgc3RhcnRQb3MgPSBfcmVmNy5zdGFydFBvcyxcbiAgICAgICAgICBzY2FsZSA9IF9yZWY3LnNjYWxlO1xuICAgICAgYXNzZXJ0KHNjYWxlID4gMCwgJ2BzY2FsZWAgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpO1xuICAgICAgdmFyIF90aGlzJF9zdGF0ZTIgPSB0aGlzLl9zdGF0ZSxcbiAgICAgICAgICBzdGFydFpvb20gPSBfdGhpcyRfc3RhdGUyLnN0YXJ0Wm9vbSxcbiAgICAgICAgICBzdGFydFpvb21MbmdMYXQgPSBfdGhpcyRfc3RhdGUyLnN0YXJ0Wm9vbUxuZ0xhdDtcblxuICAgICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoc3RhcnRab29tKSkge1xuICAgICAgICBzdGFydFpvb20gPSB0aGlzLl92aWV3cG9ydFByb3BzLnpvb207XG4gICAgICAgIHN0YXJ0Wm9vbUxuZ0xhdCA9IHRoaXMuX3VucHJvamVjdChzdGFydFBvcykgfHwgdGhpcy5fdW5wcm9qZWN0KHBvcyk7XG4gICAgICB9XG5cbiAgICAgIGFzc2VydChzdGFydFpvb21MbmdMYXQsICdgc3RhcnRab29tTG5nTGF0YCBwcm9wIGlzIHJlcXVpcmVkICcgKyAnZm9yIHpvb20gYmVoYXZpb3IgdG8gY2FsY3VsYXRlIHdoZXJlIHRvIHBvc2l0aW9uIHRoZSBtYXAuJyk7XG5cbiAgICAgIHZhciB6b29tID0gdGhpcy5fY2FsY3VsYXRlTmV3Wm9vbSh7XG4gICAgICAgIHNjYWxlOiBzY2FsZSxcbiAgICAgICAgc3RhcnRab29tOiBzdGFydFpvb20gfHwgMFxuICAgICAgfSk7XG5cbiAgICAgIHZhciB6b29tZWRWaWV3cG9ydCA9IG5ldyBXZWJNZXJjYXRvclZpZXdwb3J0KE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX3ZpZXdwb3J0UHJvcHMsIHtcbiAgICAgICAgem9vbTogem9vbVxuICAgICAgfSkpO1xuXG4gICAgICB2YXIgX3pvb21lZFZpZXdwb3J0JGdldE1hID0gem9vbWVkVmlld3BvcnQuZ2V0TWFwQ2VudGVyQnlMbmdMYXRQb3NpdGlvbih7XG4gICAgICAgIGxuZ0xhdDogc3RhcnRab29tTG5nTGF0LFxuICAgICAgICBwb3M6IHBvc1xuICAgICAgfSksXG4gICAgICAgICAgX3pvb21lZFZpZXdwb3J0JGdldE1hMiA9IF9zbGljZWRUb0FycmF5KF96b29tZWRWaWV3cG9ydCRnZXRNYSwgMiksXG4gICAgICAgICAgbG9uZ2l0dWRlID0gX3pvb21lZFZpZXdwb3J0JGdldE1hMlswXSxcbiAgICAgICAgICBsYXRpdHVkZSA9IF96b29tZWRWaWV3cG9ydCRnZXRNYTJbMV07XG5cbiAgICAgIHJldHVybiB0aGlzLl9nZXRVcGRhdGVkTWFwU3RhdGUoe1xuICAgICAgICB6b29tOiB6b29tLFxuICAgICAgICBsb25naXR1ZGU6IGxvbmdpdHVkZSxcbiAgICAgICAgbGF0aXR1ZGU6IGxhdGl0dWRlXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiem9vbUVuZFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB6b29tRW5kKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldFVwZGF0ZWRNYXBTdGF0ZSh7XG4gICAgICAgIHN0YXJ0Wm9vbUxuZ0xhdDogbnVsbCxcbiAgICAgICAgc3RhcnRab29tOiBudWxsXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiX2dldFVwZGF0ZWRNYXBTdGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfZ2V0VXBkYXRlZE1hcFN0YXRlKG5ld1Byb3BzKSB7XG4gICAgICByZXR1cm4gbmV3IE1hcFN0YXRlKE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX3ZpZXdwb3J0UHJvcHMsIHRoaXMuX3N0YXRlLCBuZXdQcm9wcykpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJfYXBwbHlDb25zdHJhaW50c1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfYXBwbHlDb25zdHJhaW50cyhwcm9wcykge1xuICAgICAgdmFyIG1heFpvb20gPSBwcm9wcy5tYXhab29tLFxuICAgICAgICAgIG1pblpvb20gPSBwcm9wcy5taW5ab29tLFxuICAgICAgICAgIHpvb20gPSBwcm9wcy56b29tO1xuICAgICAgcHJvcHMuem9vbSA9IGNsYW1wKHpvb20sIG1pblpvb20sIG1heFpvb20pO1xuICAgICAgdmFyIG1heFBpdGNoID0gcHJvcHMubWF4UGl0Y2gsXG4gICAgICAgICAgbWluUGl0Y2ggPSBwcm9wcy5taW5QaXRjaCxcbiAgICAgICAgICBwaXRjaCA9IHByb3BzLnBpdGNoO1xuICAgICAgcHJvcHMucGl0Y2ggPSBjbGFtcChwaXRjaCwgbWluUGl0Y2gsIG1heFBpdGNoKTtcbiAgICAgIE9iamVjdC5hc3NpZ24ocHJvcHMsIG5vcm1hbGl6ZVZpZXdwb3J0UHJvcHMocHJvcHMpKTtcbiAgICAgIHJldHVybiBwcm9wcztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiX3VucHJvamVjdFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfdW5wcm9qZWN0KHBvcykge1xuICAgICAgdmFyIHZpZXdwb3J0ID0gbmV3IFdlYk1lcmNhdG9yVmlld3BvcnQodGhpcy5fdmlld3BvcnRQcm9wcyk7XG4gICAgICByZXR1cm4gcG9zICYmIHZpZXdwb3J0LnVucHJvamVjdChwb3MpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJfY2FsY3VsYXRlTmV3TG5nTGF0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9jYWxjdWxhdGVOZXdMbmdMYXQoX3JlZjgpIHtcbiAgICAgIHZhciBzdGFydFBhbkxuZ0xhdCA9IF9yZWY4LnN0YXJ0UGFuTG5nTGF0LFxuICAgICAgICAgIHBvcyA9IF9yZWY4LnBvcztcbiAgICAgIHZhciB2aWV3cG9ydCA9IG5ldyBXZWJNZXJjYXRvclZpZXdwb3J0KHRoaXMuX3ZpZXdwb3J0UHJvcHMpO1xuICAgICAgcmV0dXJuIHZpZXdwb3J0LmdldE1hcENlbnRlckJ5TG5nTGF0UG9zaXRpb24oe1xuICAgICAgICBsbmdMYXQ6IHN0YXJ0UGFuTG5nTGF0LFxuICAgICAgICBwb3M6IHBvc1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIl9jYWxjdWxhdGVOZXdab29tXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9jYWxjdWxhdGVOZXdab29tKF9yZWY5KSB7XG4gICAgICB2YXIgc2NhbGUgPSBfcmVmOS5zY2FsZSxcbiAgICAgICAgICBzdGFydFpvb20gPSBfcmVmOS5zdGFydFpvb207XG4gICAgICB2YXIgX3RoaXMkX3ZpZXdwb3J0UHJvcHMgPSB0aGlzLl92aWV3cG9ydFByb3BzLFxuICAgICAgICAgIG1heFpvb20gPSBfdGhpcyRfdmlld3BvcnRQcm9wcy5tYXhab29tLFxuICAgICAgICAgIG1pblpvb20gPSBfdGhpcyRfdmlld3BvcnRQcm9wcy5taW5ab29tO1xuICAgICAgdmFyIHpvb20gPSBzdGFydFpvb20gKyBNYXRoLmxvZzIoc2NhbGUpO1xuICAgICAgcmV0dXJuIGNsYW1wKHpvb20sIG1pblpvb20sIG1heFpvb20pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJfY2FsY3VsYXRlTmV3UGl0Y2hBbmRCZWFyaW5nXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9jYWxjdWxhdGVOZXdQaXRjaEFuZEJlYXJpbmcoX3JlZjEwKSB7XG4gICAgICB2YXIgZGVsdGFTY2FsZVggPSBfcmVmMTAuZGVsdGFTY2FsZVgsXG4gICAgICAgICAgZGVsdGFTY2FsZVkgPSBfcmVmMTAuZGVsdGFTY2FsZVksXG4gICAgICAgICAgc3RhcnRCZWFyaW5nID0gX3JlZjEwLnN0YXJ0QmVhcmluZyxcbiAgICAgICAgICBzdGFydFBpdGNoID0gX3JlZjEwLnN0YXJ0UGl0Y2g7XG4gICAgICBkZWx0YVNjYWxlWSA9IGNsYW1wKGRlbHRhU2NhbGVZLCAtMSwgMSk7XG4gICAgICB2YXIgX3RoaXMkX3ZpZXdwb3J0UHJvcHMyID0gdGhpcy5fdmlld3BvcnRQcm9wcyxcbiAgICAgICAgICBtaW5QaXRjaCA9IF90aGlzJF92aWV3cG9ydFByb3BzMi5taW5QaXRjaCxcbiAgICAgICAgICBtYXhQaXRjaCA9IF90aGlzJF92aWV3cG9ydFByb3BzMi5tYXhQaXRjaDtcbiAgICAgIHZhciBiZWFyaW5nID0gc3RhcnRCZWFyaW5nICsgMTgwICogZGVsdGFTY2FsZVg7XG4gICAgICB2YXIgcGl0Y2ggPSBzdGFydFBpdGNoO1xuXG4gICAgICBpZiAoZGVsdGFTY2FsZVkgPiAwKSB7XG4gICAgICAgIHBpdGNoID0gc3RhcnRQaXRjaCArIGRlbHRhU2NhbGVZICogKG1heFBpdGNoIC0gc3RhcnRQaXRjaCk7XG4gICAgICB9IGVsc2UgaWYgKGRlbHRhU2NhbGVZIDwgMCkge1xuICAgICAgICBwaXRjaCA9IHN0YXJ0UGl0Y2ggLSBkZWx0YVNjYWxlWSAqIChtaW5QaXRjaCAtIHN0YXJ0UGl0Y2gpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBwaXRjaDogcGl0Y2gsXG4gICAgICAgIGJlYXJpbmc6IGJlYXJpbmdcbiAgICAgIH07XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIl9nZXRSb3RhdGlvblBhcmFtc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfZ2V0Um90YXRpb25QYXJhbXMocG9zLCBzdGFydFBvcykge1xuICAgICAgdmFyIGRlbHRhWCA9IHBvc1swXSAtIHN0YXJ0UG9zWzBdO1xuICAgICAgdmFyIGRlbHRhWSA9IHBvc1sxXSAtIHN0YXJ0UG9zWzFdO1xuICAgICAgdmFyIGNlbnRlclkgPSBwb3NbMV07XG4gICAgICB2YXIgc3RhcnRZID0gc3RhcnRQb3NbMV07XG4gICAgICB2YXIgX3RoaXMkX3ZpZXdwb3J0UHJvcHMzID0gdGhpcy5fdmlld3BvcnRQcm9wcyxcbiAgICAgICAgICB3aWR0aCA9IF90aGlzJF92aWV3cG9ydFByb3BzMy53aWR0aCxcbiAgICAgICAgICBoZWlnaHQgPSBfdGhpcyRfdmlld3BvcnRQcm9wczMuaGVpZ2h0O1xuICAgICAgdmFyIGRlbHRhU2NhbGVYID0gZGVsdGFYIC8gd2lkdGg7XG4gICAgICB2YXIgZGVsdGFTY2FsZVkgPSAwO1xuXG4gICAgICBpZiAoZGVsdGFZID4gMCkge1xuICAgICAgICBpZiAoTWF0aC5hYnMoaGVpZ2h0IC0gc3RhcnRZKSA+IFBJVENIX01PVVNFX1RIUkVTSE9MRCkge1xuICAgICAgICAgIGRlbHRhU2NhbGVZID0gZGVsdGFZIC8gKHN0YXJ0WSAtIGhlaWdodCkgKiBQSVRDSF9BQ0NFTDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChkZWx0YVkgPCAwKSB7XG4gICAgICAgIGlmIChzdGFydFkgPiBQSVRDSF9NT1VTRV9USFJFU0hPTEQpIHtcbiAgICAgICAgICBkZWx0YVNjYWxlWSA9IDEgLSBjZW50ZXJZIC8gc3RhcnRZO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGRlbHRhU2NhbGVZID0gTWF0aC5taW4oMSwgTWF0aC5tYXgoLTEsIGRlbHRhU2NhbGVZKSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkZWx0YVNjYWxlWDogZGVsdGFTY2FsZVgsXG4gICAgICAgIGRlbHRhU2NhbGVZOiBkZWx0YVNjYWxlWVxuICAgICAgfTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gTWFwU3RhdGU7XG59KCk7XG5cbmV4cG9ydCB7IE1hcFN0YXRlIGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgeyBNQVBCT1hfTElNSVRTIH0gZnJvbSAnLi9tYXAtc3RhdGUnO1xuXG5mdW5jdGlvbiBkZWNhcGl0YWxpemUocykge1xuICByZXR1cm4gc1swXS50b0xvd2VyQ2FzZSgpICsgcy5zbGljZSgxKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrVmlzaWJpbGl0eUNvbnN0cmFpbnRzKHByb3BzKSB7XG4gIHZhciBjb25zdHJhaW50cyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogTUFQQk9YX0xJTUlUUztcblxuICBmb3IgKHZhciBjb25zdHJhaW50TmFtZSBpbiBjb25zdHJhaW50cykge1xuICAgIHZhciB0eXBlID0gY29uc3RyYWludE5hbWUuc2xpY2UoMCwgMyk7XG4gICAgdmFyIHByb3BOYW1lID0gZGVjYXBpdGFsaXplKGNvbnN0cmFpbnROYW1lLnNsaWNlKDMpKTtcblxuICAgIGlmICh0eXBlID09PSAnbWluJyAmJiBwcm9wc1twcm9wTmFtZV0gPCBjb25zdHJhaW50c1tjb25zdHJhaW50TmFtZV0pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodHlwZSA9PT0gJ21heCcgJiYgcHJvcHNbcHJvcE5hbWVdID4gY29uc3RyYWludHNbY29uc3RyYWludE5hbWVdKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59IiwiaW1wb3J0IF9kZWZpbmVQcm9wZXJ0eSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHlcIjtcbmltcG9ydCBfc2xpY2VkVG9BcnJheSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheVwiO1xuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHtcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXG4gIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7XG4gICAgaWYgKGVudW1lcmFibGVPbmx5KSBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkge1xuICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7XG4gICAgfSk7XG4gICAga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpO1xuICB9XG5cbiAgcmV0dXJuIGtleXM7XG59XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307XG5cbiAgICBpZiAoaSAlIDIpIHtcbiAgICAgIG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIHVzZVN0YXRlLCB1c2VDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xudmFyIE1hcENvbnRleHQgPSBjcmVhdGVDb250ZXh0KHtcbiAgdmlld3BvcnQ6IG51bGwsXG4gIG1hcDogbnVsbCxcbiAgY29udGFpbmVyOiBudWxsLFxuICBvblZpZXdwb3J0Q2hhbmdlOiBudWxsLFxuICBvblZpZXdTdGF0ZUNoYW5nZTogbnVsbCxcbiAgZXZlbnRNYW5hZ2VyOiBudWxsXG59KTtcbmV4cG9ydCB2YXIgTWFwQ29udGV4dFByb3ZpZGVyID0gTWFwQ29udGV4dC5Qcm92aWRlcjtcblxuZnVuY3Rpb24gV3JhcHBlZFByb3ZpZGVyKF9yZWYpIHtcbiAgdmFyIHZhbHVlID0gX3JlZi52YWx1ZSxcbiAgICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbjtcblxuICB2YXIgX3VzZVN0YXRlID0gdXNlU3RhdGUobnVsbCksXG4gICAgICBfdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlLCAyKSxcbiAgICAgIG1hcCA9IF91c2VTdGF0ZTJbMF0sXG4gICAgICBzZXRNYXAgPSBfdXNlU3RhdGUyWzFdO1xuXG4gIHZhciBjb250ZXh0ID0gdXNlQ29udGV4dChNYXBDb250ZXh0KTtcbiAgdmFsdWUgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe1xuICAgIHNldE1hcDogc2V0TWFwXG4gIH0sIGNvbnRleHQpLCB7fSwge1xuICAgIG1hcDogY29udGV4dCAmJiBjb250ZXh0Lm1hcCB8fCBtYXBcbiAgfSwgdmFsdWUpO1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChNYXBDb250ZXh0UHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogdmFsdWVcbiAgfSwgY2hpbGRyZW4pO1xufVxuXG5NYXBDb250ZXh0LlByb3ZpZGVyID0gV3JhcHBlZFByb3ZpZGVyO1xuZXhwb3J0IGRlZmF1bHQgTWFwQ29udGV4dDsiLCJpbXBvcnQgeyB1c2VFZmZlY3QsIHVzZUxheW91dEVmZmVjdCB9IGZyb20gJ3JlYWN0JztcbnZhciB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0ID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB1c2VMYXlvdXRFZmZlY3QgOiB1c2VFZmZlY3Q7XG5leHBvcnQgZGVmYXVsdCB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0OyIsImV4cG9ydCBmdW5jdGlvbiBnZXRUZXJyYWluRWxldmF0aW9uKG1hcCwgX3JlZikge1xuICB2YXIgbG9uZ2l0dWRlID0gX3JlZi5sb25naXR1ZGUsXG4gICAgICBsYXRpdHVkZSA9IF9yZWYubGF0aXR1ZGU7XG5cbiAgaWYgKG1hcCAmJiBtYXAucXVlcnlUZXJyYWluRWxldmF0aW9uKSB7XG4gICAgcmV0dXJuIG1hcC5xdWVyeVRlcnJhaW5FbGV2YXRpb24oW2xvbmdpdHVkZSwgbGF0aXR1ZGVdKSB8fCAwO1xuICB9XG5cbiAgcmV0dXJuIDA7XG59IiwiaW1wb3J0IF9zbGljZWRUb0FycmF5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zbGljZWRUb0FycmF5XCI7XG5pbXBvcnQgX2RlZmluZVByb3BlcnR5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eVwiO1xuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHtcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXG4gIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7XG4gICAgaWYgKGVudW1lcmFibGVPbmx5KSBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkge1xuICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7XG4gICAgfSk7XG4gICAga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpO1xuICB9XG5cbiAgcmV0dXJuIGtleXM7XG59XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307XG5cbiAgICBpZiAoaSAlIDIpIHtcbiAgICAgIG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZVN0YXRlLCB1c2VSZWYsIHVzZUNhbGxiYWNrLCB1c2VDb250ZXh0LCB1c2VJbXBlcmF0aXZlSGFuZGxlLCBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFdlYk1lcmNhdG9yVmlld3BvcnQgZnJvbSAndmlld3BvcnQtbWVyY2F0b3ItcHJvamVjdCc7XG5pbXBvcnQgUmVzaXplT2JzZXJ2ZXIgZnJvbSAncmVzaXplLW9ic2VydmVyLXBvbHlmaWxsJztcbmltcG9ydCBNYXBib3ggZnJvbSAnLi4vbWFwYm94L21hcGJveCc7XG5pbXBvcnQgbWFwYm94Z2wgZnJvbSAnLi4vdXRpbHMvbWFwYm94Z2wnO1xuaW1wb3J0IHsgY2hlY2tWaXNpYmlsaXR5Q29uc3RyYWludHMgfSBmcm9tICcuLi91dGlscy9tYXAtY29uc3RyYWludHMnO1xuaW1wb3J0IHsgTUFQQk9YX0xJTUlUUyB9IGZyb20gJy4uL3V0aWxzL21hcC1zdGF0ZSc7XG5pbXBvcnQgTWFwQ29udGV4dCwgeyBNYXBDb250ZXh0UHJvdmlkZXIgfSBmcm9tICcuL21hcC1jb250ZXh0JztcbmltcG9ydCB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0IGZyb20gJy4uL3V0aWxzL3VzZS1pc29tb3JwaGljLWxheW91dC1lZmZlY3QnO1xuaW1wb3J0IHsgZ2V0VGVycmFpbkVsZXZhdGlvbiB9IGZyb20gJy4uL3V0aWxzL3RlcnJhaW4nO1xudmFyIFRPS0VOX0RPQ19VUkwgPSAnaHR0cHM6Ly92aXNnbC5naXRodWIuaW8vcmVhY3QtbWFwLWdsL2RvY3MvZ2V0LXN0YXJ0ZWQvbWFwYm94LXRva2Vucyc7XG52YXIgTk9fVE9LRU5fV0FSTklORyA9ICdBIHZhbGlkIEFQSSBhY2Nlc3MgdG9rZW4gaXMgcmVxdWlyZWQgdG8gdXNlIE1hcGJveCBkYXRhJztcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRWaWV3cG9ydChfcmVmKSB7XG4gIHZhciBtYXAgPSBfcmVmLm1hcCxcbiAgICAgIHByb3BzID0gX3JlZi5wcm9wcyxcbiAgICAgIHdpZHRoID0gX3JlZi53aWR0aCxcbiAgICAgIGhlaWdodCA9IF9yZWYuaGVpZ2h0O1xuXG4gIHZhciB2aWV3cG9ydFByb3BzID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHByb3BzKSwgcHJvcHMudmlld1N0YXRlKSwge30sIHtcbiAgICB3aWR0aDogd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHRcbiAgfSk7XG5cbiAgdmlld3BvcnRQcm9wcy5wb3NpdGlvbiA9IFswLCAwLCBnZXRUZXJyYWluRWxldmF0aW9uKG1hcCwgdmlld3BvcnRQcm9wcyldO1xuICByZXR1cm4gbmV3IFdlYk1lcmNhdG9yVmlld3BvcnQodmlld3BvcnRQcm9wcyk7XG59XG52YXIgVU5BVVRIT1JJWkVEX0VSUk9SX0NPREUgPSA0MDE7XG52YXIgQ09OVEFJTkVSX1NUWUxFID0ge1xuICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgd2lkdGg6ICcxMDAlJyxcbiAgaGVpZ2h0OiAnMTAwJScsXG4gIG92ZXJmbG93OiAnaGlkZGVuJ1xufTtcbnZhciBkZWZhdWx0UHJvcHMgPSBPYmplY3QuYXNzaWduKHt9LCBNYXBib3guZGVmYXVsdFByb3BzLCB7XG4gIGRpc2FibGVUb2tlbldhcm5pbmc6IGZhbHNlLFxuICB2aXNpYmxlOiB0cnVlLFxuICBvblJlc2l6ZTogbm9vcCxcbiAgY2xhc3NOYW1lOiAnJyxcbiAgc3R5bGU6IG51bGwsXG4gIHZpc2liaWxpdHlDb25zdHJhaW50czogTUFQQk9YX0xJTUlUU1xufSk7XG5cbmZ1bmN0aW9uIE5vVG9rZW5XYXJuaW5nKCkge1xuICB2YXIgc3R5bGUgPSB7XG4gICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgbGVmdDogMCxcbiAgICB0b3A6IDBcbiAgfTtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgIGtleTogXCJ3YXJuaW5nXCIsXG4gICAgaWQ6IFwibm8tdG9rZW4td2FybmluZ1wiLFxuICAgIHN0eWxlOiBzdHlsZVxuICB9LCBSZWFjdC5jcmVhdGVFbGVtZW50KFwiaDNcIiwge1xuICAgIGtleTogXCJoZWFkZXJcIlxuICB9LCBOT19UT0tFTl9XQVJOSU5HKSwgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAga2V5OiBcInRleHRcIlxuICB9LCBcIkZvciBpbmZvcm1hdGlvbiBvbiBzZXR0aW5nIHVwIHlvdXIgYmFzZW1hcCwgcmVhZFwiKSwgUmVhY3QuY3JlYXRlRWxlbWVudChcImFcIiwge1xuICAgIGtleTogXCJsaW5rXCIsXG4gICAgaHJlZjogVE9LRU5fRE9DX1VSTFxuICB9LCBcIk5vdGUgb24gTWFwIFRva2Vuc1wiKSk7XG59XG5cbmZ1bmN0aW9uIGdldFJlZkhhbmRsZXMobWFwYm94UmVmKSB7XG4gIHJldHVybiB7XG4gICAgZ2V0TWFwOiBmdW5jdGlvbiBnZXRNYXAoKSB7XG4gICAgICByZXR1cm4gbWFwYm94UmVmLmN1cnJlbnQgJiYgbWFwYm94UmVmLmN1cnJlbnQuZ2V0TWFwKCk7XG4gICAgfSxcbiAgICBxdWVyeVJlbmRlcmVkRmVhdHVyZXM6IGZ1bmN0aW9uIHF1ZXJ5UmVuZGVyZWRGZWF0dXJlcyhnZW9tZXRyeSkge1xuICAgICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICAgICAgdmFyIG1hcCA9IG1hcGJveFJlZi5jdXJyZW50ICYmIG1hcGJveFJlZi5jdXJyZW50LmdldE1hcCgpO1xuICAgICAgcmV0dXJuIG1hcCAmJiBtYXAucXVlcnlSZW5kZXJlZEZlYXR1cmVzKGdlb21ldHJ5LCBvcHRpb25zKTtcbiAgICB9XG4gIH07XG59XG5cbnZhciBTdGF0aWNNYXAgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChwcm9wcywgcmVmKSB7XG4gIHZhciBfdXNlU3RhdGUgPSB1c2VTdGF0ZSh0cnVlKSxcbiAgICAgIF91c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUsIDIpLFxuICAgICAgYWNjZXNzVG9rZW5WYWxpZCA9IF91c2VTdGF0ZTJbMF0sXG4gICAgICBzZXRUb2tlblN0YXRlID0gX3VzZVN0YXRlMlsxXTtcblxuICB2YXIgX3VzZVN0YXRlMyA9IHVzZVN0YXRlKHtcbiAgICB3aWR0aDogMCxcbiAgICBoZWlnaHQ6IDBcbiAgfSksXG4gICAgICBfdXNlU3RhdGU0ID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlMywgMiksXG4gICAgICBzaXplID0gX3VzZVN0YXRlNFswXSxcbiAgICAgIHNldFNpemUgPSBfdXNlU3RhdGU0WzFdO1xuXG4gIHZhciBtYXBib3hSZWYgPSB1c2VSZWYobnVsbCk7XG4gIHZhciBtYXBEaXZSZWYgPSB1c2VSZWYobnVsbCk7XG4gIHZhciBjb250YWluZXJSZWYgPSB1c2VSZWYobnVsbCk7XG4gIHZhciBvdmVybGF5UmVmID0gdXNlUmVmKG51bGwpO1xuICB2YXIgY29udGV4dCA9IHVzZUNvbnRleHQoTWFwQ29udGV4dCk7XG4gIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmICghU3RhdGljTWFwLnN1cHBvcnRlZCgpKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHZhciBtYXBib3ggPSBuZXcgTWFwYm94KF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBwcm9wcyksIHNpemUpLCB7fSwge1xuICAgICAgbWFwYm94Z2w6IG1hcGJveGdsLFxuICAgICAgY29udGFpbmVyOiBtYXBEaXZSZWYuY3VycmVudCxcbiAgICAgIG9uRXJyb3I6IGZ1bmN0aW9uIG9uRXJyb3IoZXZ0KSB7XG4gICAgICAgIHZhciBzdGF0dXNDb2RlID0gZXZ0LmVycm9yICYmIGV2dC5lcnJvci5zdGF0dXMgfHwgZXZ0LnN0YXR1cztcblxuICAgICAgICBpZiAoc3RhdHVzQ29kZSA9PT0gVU5BVVRIT1JJWkVEX0VSUk9SX0NPREUgJiYgYWNjZXNzVG9rZW5WYWxpZCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoTk9fVE9LRU5fV0FSTklORyk7XG4gICAgICAgICAgc2V0VG9rZW5TdGF0ZShmYWxzZSk7XG4gICAgICAgIH1cblxuICAgICAgICBwcm9wcy5vbkVycm9yKGV2dCk7XG4gICAgICB9XG4gICAgfSkpO1xuICAgIG1hcGJveFJlZi5jdXJyZW50ID0gbWFwYm94O1xuXG4gICAgaWYgKGNvbnRleHQgJiYgY29udGV4dC5zZXRNYXApIHtcbiAgICAgIGNvbnRleHQuc2V0TWFwKG1hcGJveC5nZXRNYXAoKSk7XG4gICAgfVxuXG4gICAgdmFyIHJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKGZ1bmN0aW9uIChlbnRyaWVzKSB7XG4gICAgICBpZiAoZW50cmllc1swXS5jb250ZW50UmVjdCkge1xuICAgICAgICB2YXIgX2VudHJpZXMkMCRjb250ZW50UmVjID0gZW50cmllc1swXS5jb250ZW50UmVjdCxcbiAgICAgICAgICAgIF93aWR0aCA9IF9lbnRyaWVzJDAkY29udGVudFJlYy53aWR0aCxcbiAgICAgICAgICAgIF9oZWlnaHQgPSBfZW50cmllcyQwJGNvbnRlbnRSZWMuaGVpZ2h0O1xuICAgICAgICBzZXRTaXplKHtcbiAgICAgICAgICB3aWR0aDogX3dpZHRoLFxuICAgICAgICAgIGhlaWdodDogX2hlaWdodFxuICAgICAgICB9KTtcbiAgICAgICAgcHJvcHMub25SZXNpemUoe1xuICAgICAgICAgIHdpZHRoOiBfd2lkdGgsXG4gICAgICAgICAgaGVpZ2h0OiBfaGVpZ2h0XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJlc2l6ZU9ic2VydmVyLm9ic2VydmUoY29udGFpbmVyUmVmLmN1cnJlbnQpO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBtYXBib3guZmluYWxpemUoKTtcbiAgICAgIG1hcGJveFJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICAgIHJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICB9O1xuICB9LCBbXSk7XG4gIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmIChtYXBib3hSZWYuY3VycmVudCkge1xuICAgICAgbWFwYm94UmVmLmN1cnJlbnQuc2V0UHJvcHMoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBwcm9wcyksIHNpemUpKTtcbiAgICB9XG4gIH0pO1xuICB2YXIgbWFwID0gbWFwYm94UmVmLmN1cnJlbnQgJiYgbWFwYm94UmVmLmN1cnJlbnQuZ2V0TWFwKCk7XG4gIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGdldFJlZkhhbmRsZXMobWFwYm94UmVmKTtcbiAgfSwgW10pO1xuICB2YXIgcHJldmVudFNjcm9sbCA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChfcmVmMikge1xuICAgIHZhciB0YXJnZXQgPSBfcmVmMi50YXJnZXQ7XG5cbiAgICBpZiAodGFyZ2V0ID09PSBvdmVybGF5UmVmLmN1cnJlbnQpIHtcbiAgICAgIHRhcmdldC5zY3JvbGxUbygwLCAwKTtcbiAgICB9XG4gIH0sIFtdKTtcbiAgdmFyIG92ZXJsYXlzID0gbWFwICYmIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTWFwQ29udGV4dFByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgY29udGV4dCksIHt9LCB7XG4gICAgICB2aWV3cG9ydDogY29udGV4dC52aWV3cG9ydCB8fCBnZXRWaWV3cG9ydChfb2JqZWN0U3ByZWFkKHtcbiAgICAgICAgbWFwOiBtYXAsXG4gICAgICAgIHByb3BzOiBwcm9wc1xuICAgICAgfSwgc2l6ZSkpLFxuICAgICAgbWFwOiBtYXAsXG4gICAgICBjb250YWluZXI6IGNvbnRleHQuY29udGFpbmVyIHx8IGNvbnRhaW5lclJlZi5jdXJyZW50XG4gICAgfSlcbiAgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAga2V5OiBcIm1hcC1vdmVybGF5c1wiLFxuICAgIGNsYXNzTmFtZTogXCJvdmVybGF5c1wiLFxuICAgIHJlZjogb3ZlcmxheVJlZixcbiAgICBzdHlsZTogQ09OVEFJTkVSX1NUWUxFLFxuICAgIG9uU2Nyb2xsOiBwcmV2ZW50U2Nyb2xsXG4gIH0sIHByb3BzLmNoaWxkcmVuKSk7XG4gIHZhciBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUsXG4gICAgICB3aWR0aCA9IHByb3BzLndpZHRoLFxuICAgICAgaGVpZ2h0ID0gcHJvcHMuaGVpZ2h0LFxuICAgICAgc3R5bGUgPSBwcm9wcy5zdHlsZSxcbiAgICAgIHZpc2liaWxpdHlDb25zdHJhaW50cyA9IHByb3BzLnZpc2liaWxpdHlDb25zdHJhaW50cztcbiAgdmFyIG1hcENvbnRhaW5lclN0eWxlID0gT2JqZWN0LmFzc2lnbih7XG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZSdcbiAgfSwgc3R5bGUsIHtcbiAgICB3aWR0aDogd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHRcbiAgfSk7XG4gIHZhciB2aXNpYmxlID0gcHJvcHMudmlzaWJsZSAmJiBjaGVja1Zpc2liaWxpdHlDb25zdHJhaW50cyhwcm9wcy52aWV3U3RhdGUgfHwgcHJvcHMsIHZpc2liaWxpdHlDb25zdHJhaW50cyk7XG4gIHZhciBtYXBTdHlsZSA9IE9iamVjdC5hc3NpZ24oe30sIENPTlRBSU5FUl9TVFlMRSwge1xuICAgIHZpc2liaWxpdHk6IHZpc2libGUgPyAnaW5oZXJpdCcgOiAnaGlkZGVuJ1xuICB9KTtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgIGtleTogXCJtYXAtY29udGFpbmVyXCIsXG4gICAgcmVmOiBjb250YWluZXJSZWYsXG4gICAgc3R5bGU6IG1hcENvbnRhaW5lclN0eWxlXG4gIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgIGtleTogXCJtYXAtbWFwYm94XCIsXG4gICAgcmVmOiBtYXBEaXZSZWYsXG4gICAgc3R5bGU6IG1hcFN0eWxlLFxuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lXG4gIH0pLCBvdmVybGF5cywgIWFjY2Vzc1Rva2VuVmFsaWQgJiYgIXByb3BzLmRpc2FibGVUb2tlbldhcm5pbmcgJiYgUmVhY3QuY3JlYXRlRWxlbWVudChOb1Rva2VuV2FybmluZywgbnVsbCkpO1xufSk7XG5cblN0YXRpY01hcC5zdXBwb3J0ZWQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBtYXBib3hnbCAmJiBtYXBib3hnbC5zdXBwb3J0ZWQoKTtcbn07XG5cblN0YXRpY01hcC5kZWZhdWx0UHJvcHMgPSBkZWZhdWx0UHJvcHM7XG5leHBvcnQgZGVmYXVsdCBTdGF0aWNNYXA7IiwiaW1wb3J0IF9jbGFzc0NhbGxDaGVjayBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY2xhc3NDYWxsQ2hlY2tcIjtcbmltcG9ydCBfY3JlYXRlQ2xhc3MgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NyZWF0ZUNsYXNzXCI7XG5pbXBvcnQgX2RlZmluZVByb3BlcnR5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eVwiO1xuXG5mdW5jdGlvbiBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcihvLCBhbGxvd0FycmF5TGlrZSkge1xuICB2YXIgaXQ7XG5cbiAgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwidW5kZWZpbmVkXCIgfHwgb1tTeW1ib2wuaXRlcmF0b3JdID09IG51bGwpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShvKSB8fCAoaXQgPSBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobykpIHx8IGFsbG93QXJyYXlMaWtlICYmIG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSB7XG4gICAgICBpZiAoaXQpIG8gPSBpdDtcbiAgICAgIHZhciBpID0gMDtcblxuICAgICAgdmFyIEYgPSBmdW5jdGlvbiBGKCkge307XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHM6IEYsXG4gICAgICAgIG46IGZ1bmN0aW9uIG4oKSB7XG4gICAgICAgICAgaWYgKGkgPj0gby5sZW5ndGgpIHJldHVybiB7XG4gICAgICAgICAgICBkb25lOiB0cnVlXG4gICAgICAgICAgfTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZG9uZTogZmFsc2UsXG4gICAgICAgICAgICB2YWx1ZTogb1tpKytdXG4gICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICAgZTogZnVuY3Rpb24gZShfZSkge1xuICAgICAgICAgIHRocm93IF9lO1xuICAgICAgICB9LFxuICAgICAgICBmOiBGXG4gICAgICB9O1xuICAgIH1cblxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbiAgfVxuXG4gIHZhciBub3JtYWxDb21wbGV0aW9uID0gdHJ1ZSxcbiAgICAgIGRpZEVyciA9IGZhbHNlLFxuICAgICAgZXJyO1xuICByZXR1cm4ge1xuICAgIHM6IGZ1bmN0aW9uIHMoKSB7XG4gICAgICBpdCA9IG9bU3ltYm9sLml0ZXJhdG9yXSgpO1xuICAgIH0sXG4gICAgbjogZnVuY3Rpb24gbigpIHtcbiAgICAgIHZhciBzdGVwID0gaXQubmV4dCgpO1xuICAgICAgbm9ybWFsQ29tcGxldGlvbiA9IHN0ZXAuZG9uZTtcbiAgICAgIHJldHVybiBzdGVwO1xuICAgIH0sXG4gICAgZTogZnVuY3Rpb24gZShfZTIpIHtcbiAgICAgIGRpZEVyciA9IHRydWU7XG4gICAgICBlcnIgPSBfZTI7XG4gICAgfSxcbiAgICBmOiBmdW5jdGlvbiBmKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKCFub3JtYWxDb21wbGV0aW9uICYmIGl0W1wicmV0dXJuXCJdICE9IG51bGwpIGl0W1wicmV0dXJuXCJdKCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAoZGlkRXJyKSB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7XG4gIGlmICghbykgcmV0dXJuO1xuICBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xuICB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7XG4gIGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7XG4gIGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pO1xuICBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG59XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7XG4gIGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoO1xuXG4gIGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykge1xuICAgIGFycjJbaV0gPSBhcnJbaV07XG4gIH1cblxuICByZXR1cm4gYXJyMjtcbn1cblxuaW1wb3J0IHsgZXF1YWxzIH0gZnJvbSAnLi4vbWF0aC11dGlscyc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJy4uL2Fzc2VydCc7XG5cbnZhciBUcmFuc2l0aW9uSW50ZXJwb2xhdG9yID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBUcmFuc2l0aW9uSW50ZXJwb2xhdG9yKCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBUcmFuc2l0aW9uSW50ZXJwb2xhdG9yKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInByb3BOYW1lc1wiLCBbXSk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoVHJhbnNpdGlvbkludGVycG9sYXRvciwgW3tcbiAgICBrZXk6IFwiYXJlUHJvcHNFcXVhbFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBhcmVQcm9wc0VxdWFsKGN1cnJlbnRQcm9wcywgbmV4dFByb3BzKSB7XG4gICAgICB2YXIgX2l0ZXJhdG9yID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIodGhpcy5wcm9wTmFtZXMgfHwgW10pLFxuICAgICAgICAgIF9zdGVwO1xuXG4gICAgICB0cnkge1xuICAgICAgICBmb3IgKF9pdGVyYXRvci5zKCk7ICEoX3N0ZXAgPSBfaXRlcmF0b3IubigpKS5kb25lOykge1xuICAgICAgICAgIHZhciBrZXkgPSBfc3RlcC52YWx1ZTtcblxuICAgICAgICAgIGlmICghZXF1YWxzKGN1cnJlbnRQcm9wc1trZXldLCBuZXh0UHJvcHNba2V5XSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBfaXRlcmF0b3IuZShlcnIpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgX2l0ZXJhdG9yLmYoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImluaXRpYWxpemVQcm9wc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpbml0aWFsaXplUHJvcHMoc3RhcnRQcm9wcywgZW5kUHJvcHMpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXJ0OiBzdGFydFByb3BzLFxuICAgICAgICBlbmQ6IGVuZFByb3BzXG4gICAgICB9O1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJpbnRlcnBvbGF0ZVByb3BzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGludGVycG9sYXRlUHJvcHMoc3RhcnRQcm9wcywgZW5kUHJvcHMsIHQpIHtcbiAgICAgIGFzc2VydChmYWxzZSwgJ2ludGVycG9sYXRlUHJvcHMgaXMgbm90IGltcGxlbWVudGVkJyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldER1cmF0aW9uXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldER1cmF0aW9uKHN0YXJ0UHJvcHMsIGVuZFByb3BzKSB7XG4gICAgICByZXR1cm4gZW5kUHJvcHMudHJhbnNpdGlvbkR1cmF0aW9uO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBUcmFuc2l0aW9uSW50ZXJwb2xhdG9yO1xufSgpO1xuXG5leHBvcnQgeyBUcmFuc2l0aW9uSW50ZXJwb2xhdG9yIGFzIGRlZmF1bHQgfTsiLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgfVxuXG4gIHJldHVybiBzZWxmO1xufSIsImltcG9ydCBzZXRQcm90b3R5cGVPZiBmcm9tIFwiLi9zZXRQcm90b3R5cGVPZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gIH1cblxuICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9XG4gIH0pO1xuICBpZiAoc3VwZXJDbGFzcykgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufSIsImltcG9ydCBfdHlwZW9mIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL3R5cGVvZlwiO1xuaW1wb3J0IGFzc2VydFRoaXNJbml0aWFsaXplZCBmcm9tIFwiLi9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHtcbiAgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHtcbiAgICByZXR1cm4gY2FsbDtcbiAgfVxuXG4gIHJldHVybiBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pO1xuICB9O1xuICByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pO1xufSIsInZhciBXUkFQUEVEX0FOR1VMQVJfUFJPUFMgPSB7XG4gIGxvbmdpdHVkZTogMSxcbiAgYmVhcmluZzogMVxufTtcbmV4cG9ydCBmdW5jdGlvbiBtb2QodmFsdWUsIGRpdmlzb3IpIHtcbiAgdmFyIG1vZHVsdXMgPSB2YWx1ZSAlIGRpdmlzb3I7XG4gIHJldHVybiBtb2R1bHVzIDwgMCA/IGRpdmlzb3IgKyBtb2R1bHVzIDogbW9kdWx1cztcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkKHByb3ApIHtcbiAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZShwcm9wKSB8fCBBcnJheS5pc0FycmF5KHByb3ApO1xufVxuXG5mdW5jdGlvbiBpc1dyYXBwZWRBbmd1bGFyUHJvcChwcm9wTmFtZSkge1xuICByZXR1cm4gcHJvcE5hbWUgaW4gV1JBUFBFRF9BTkdVTEFSX1BST1BTO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW5kVmFsdWVCeVNob3J0ZXN0UGF0aChwcm9wTmFtZSwgc3RhcnRWYWx1ZSwgZW5kVmFsdWUpIHtcbiAgaWYgKGlzV3JhcHBlZEFuZ3VsYXJQcm9wKHByb3BOYW1lKSAmJiBNYXRoLmFicyhlbmRWYWx1ZSAtIHN0YXJ0VmFsdWUpID4gMTgwKSB7XG4gICAgZW5kVmFsdWUgPSBlbmRWYWx1ZSA8IDAgPyBlbmRWYWx1ZSArIDM2MCA6IGVuZFZhbHVlIC0gMzYwO1xuICB9XG5cbiAgcmV0dXJuIGVuZFZhbHVlO1xufSIsImltcG9ydCBfY2xhc3NDYWxsQ2hlY2sgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NsYXNzQ2FsbENoZWNrXCI7XG5pbXBvcnQgX2NyZWF0ZUNsYXNzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jcmVhdGVDbGFzc1wiO1xuaW1wb3J0IF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2Fzc2VydFRoaXNJbml0aWFsaXplZFwiO1xuaW1wb3J0IF9pbmhlcml0cyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNcIjtcbmltcG9ydCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vcG9zc2libGVDb25zdHJ1Y3RvclJldHVyblwiO1xuaW1wb3J0IF9nZXRQcm90b3R5cGVPZiBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZ2V0UHJvdG90eXBlT2ZcIjtcbmltcG9ydCBfZGVmaW5lUHJvcGVydHkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5XCI7XG5cbmZ1bmN0aW9uIF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKG8sIGFsbG93QXJyYXlMaWtlKSB7XG4gIHZhciBpdDtcblxuICBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJ1bmRlZmluZWRcIiB8fCBvW1N5bWJvbC5pdGVyYXRvcl0gPT0gbnVsbCkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KG8pIHx8IChpdCA9IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvKSkgfHwgYWxsb3dBcnJheUxpa2UgJiYgbyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIGlmIChpdCkgbyA9IGl0O1xuICAgICAgdmFyIGkgPSAwO1xuXG4gICAgICB2YXIgRiA9IGZ1bmN0aW9uIEYoKSB7fTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgczogRixcbiAgICAgICAgbjogZnVuY3Rpb24gbigpIHtcbiAgICAgICAgICBpZiAoaSA+PSBvLmxlbmd0aCkgcmV0dXJuIHtcbiAgICAgICAgICAgIGRvbmU6IHRydWVcbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkb25lOiBmYWxzZSxcbiAgICAgICAgICAgIHZhbHVlOiBvW2krK11cbiAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgICAgICBlOiBmdW5jdGlvbiBlKF9lKSB7XG4gICAgICAgICAgdGhyb3cgX2U7XG4gICAgICAgIH0sXG4gICAgICAgIGY6IEZcbiAgICAgIH07XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xuICB9XG5cbiAgdmFyIG5vcm1hbENvbXBsZXRpb24gPSB0cnVlLFxuICAgICAgZGlkRXJyID0gZmFsc2UsXG4gICAgICBlcnI7XG4gIHJldHVybiB7XG4gICAgczogZnVuY3Rpb24gcygpIHtcbiAgICAgIGl0ID0gb1tTeW1ib2wuaXRlcmF0b3JdKCk7XG4gICAgfSxcbiAgICBuOiBmdW5jdGlvbiBuKCkge1xuICAgICAgdmFyIHN0ZXAgPSBpdC5uZXh0KCk7XG4gICAgICBub3JtYWxDb21wbGV0aW9uID0gc3RlcC5kb25lO1xuICAgICAgcmV0dXJuIHN0ZXA7XG4gICAgfSxcbiAgICBlOiBmdW5jdGlvbiBlKF9lMikge1xuICAgICAgZGlkRXJyID0gdHJ1ZTtcbiAgICAgIGVyciA9IF9lMjtcbiAgICB9LFxuICAgIGY6IGZ1bmN0aW9uIGYoKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoIW5vcm1hbENvbXBsZXRpb24gJiYgaXRbXCJyZXR1cm5cIl0gIT0gbnVsbCkgaXRbXCJyZXR1cm5cIl0oKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChkaWRFcnIpIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHtcbiAgaWYgKCFvKSByZXR1cm47XG4gIGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG4gIHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTtcbiAgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTtcbiAgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7XG4gIGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbn1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHtcbiAgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7XG5cbiAgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7XG4gICAgYXJyMltpXSA9IGFycltpXTtcbiAgfVxuXG4gIHJldHVybiBhcnIyO1xufVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkge1xuICB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTtcblxuICByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7XG4gICAgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLFxuICAgICAgICByZXN1bHQ7XG5cbiAgICBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkge1xuICAgICAgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjtcblxuICAgICAgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHtcbiAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlO1xuICBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlO1xuICBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlO1xuXG4gIHRyeSB7XG4gICAgRGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChEYXRlLCBbXSwgZnVuY3Rpb24gKCkge30pKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5pbXBvcnQgYXNzZXJ0IGZyb20gJy4uL2Fzc2VydCc7XG5pbXBvcnQgVHJhbnNpdGlvbkludGVycG9sYXRvciBmcm9tICcuL3RyYW5zaXRpb24taW50ZXJwb2xhdG9yJztcbmltcG9ydCB7IGZseVRvVmlld3BvcnQsIGdldEZseVRvRHVyYXRpb24gfSBmcm9tICd2aWV3cG9ydC1tZXJjYXRvci1wcm9qZWN0JztcbmltcG9ydCB7IGlzVmFsaWQsIGdldEVuZFZhbHVlQnlTaG9ydGVzdFBhdGggfSBmcm9tICcuL3RyYW5zaXRpb24tdXRpbHMnO1xuaW1wb3J0IHsgbGVycCB9IGZyb20gJy4uL21hdGgtdXRpbHMnO1xudmFyIFZJRVdQT1JUX1RSQU5TSVRJT05fUFJPUFMgPSBbJ2xvbmdpdHVkZScsICdsYXRpdHVkZScsICd6b29tJywgJ2JlYXJpbmcnLCAncGl0Y2gnXTtcbnZhciBSRVFVSVJFRF9QUk9QUyA9IFsnbGF0aXR1ZGUnLCAnbG9uZ2l0dWRlJywgJ3pvb20nLCAnd2lkdGgnLCAnaGVpZ2h0J107XG52YXIgTElORUFSTFlfSU5URVJQT0xBVEVEX1BST1BTID0gWydiZWFyaW5nJywgJ3BpdGNoJ107XG52YXIgREVGQVVMVF9PUFRTID0ge1xuICBzcGVlZDogMS4yLFxuICBjdXJ2ZTogMS40MTRcbn07XG5cbnZhciBWaWV3cG9ydEZseVRvSW50ZXJwb2xhdG9yID0gZnVuY3Rpb24gKF9UcmFuc2l0aW9uSW50ZXJwb2xhdCkge1xuICBfaW5oZXJpdHMoVmlld3BvcnRGbHlUb0ludGVycG9sYXRvciwgX1RyYW5zaXRpb25JbnRlcnBvbGF0KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFZpZXdwb3J0Rmx5VG9JbnRlcnBvbGF0b3IpO1xuXG4gIGZ1bmN0aW9uIFZpZXdwb3J0Rmx5VG9JbnRlcnBvbGF0b3IoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgdmFyIHByb3BzID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBWaWV3cG9ydEZseVRvSW50ZXJwb2xhdG9yKTtcblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcyk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwicHJvcE5hbWVzXCIsIFZJRVdQT1JUX1RSQU5TSVRJT05fUFJPUFMpO1xuXG4gICAgX3RoaXMucHJvcHMgPSBPYmplY3QuYXNzaWduKHt9LCBERUZBVUxUX09QVFMsIHByb3BzKTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoVmlld3BvcnRGbHlUb0ludGVycG9sYXRvciwgW3tcbiAgICBrZXk6IFwiaW5pdGlhbGl6ZVByb3BzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGluaXRpYWxpemVQcm9wcyhzdGFydFByb3BzLCBlbmRQcm9wcykge1xuICAgICAgdmFyIHN0YXJ0Vmlld3BvcnRQcm9wcyA9IHt9O1xuICAgICAgdmFyIGVuZFZpZXdwb3J0UHJvcHMgPSB7fTtcblxuICAgICAgdmFyIF9pdGVyYXRvciA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKFJFUVVJUkVEX1BST1BTKSxcbiAgICAgICAgICBfc3RlcDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgZm9yIChfaXRlcmF0b3IucygpOyAhKF9zdGVwID0gX2l0ZXJhdG9yLm4oKSkuZG9uZTspIHtcbiAgICAgICAgICB2YXIga2V5ID0gX3N0ZXAudmFsdWU7XG4gICAgICAgICAgdmFyIHN0YXJ0VmFsdWUgPSBzdGFydFByb3BzW2tleV07XG4gICAgICAgICAgdmFyIGVuZFZhbHVlID0gZW5kUHJvcHNba2V5XTtcbiAgICAgICAgICBhc3NlcnQoaXNWYWxpZChzdGFydFZhbHVlKSAmJiBpc1ZhbGlkKGVuZFZhbHVlKSwgXCJcIi5jb25jYXQoa2V5LCBcIiBtdXN0IGJlIHN1cHBsaWVkIGZvciB0cmFuc2l0aW9uXCIpKTtcbiAgICAgICAgICBzdGFydFZpZXdwb3J0UHJvcHNba2V5XSA9IHN0YXJ0VmFsdWU7XG4gICAgICAgICAgZW5kVmlld3BvcnRQcm9wc1trZXldID0gZ2V0RW5kVmFsdWVCeVNob3J0ZXN0UGF0aChrZXksIHN0YXJ0VmFsdWUsIGVuZFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIF9pdGVyYXRvci5lKGVycik7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBfaXRlcmF0b3IuZigpO1xuICAgICAgfVxuXG4gICAgICB2YXIgX2l0ZXJhdG9yMiA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKExJTkVBUkxZX0lOVEVSUE9MQVRFRF9QUk9QUyksXG4gICAgICAgICAgX3N0ZXAyO1xuXG4gICAgICB0cnkge1xuICAgICAgICBmb3IgKF9pdGVyYXRvcjIucygpOyAhKF9zdGVwMiA9IF9pdGVyYXRvcjIubigpKS5kb25lOykge1xuICAgICAgICAgIHZhciBfa2V5ID0gX3N0ZXAyLnZhbHVlO1xuXG4gICAgICAgICAgdmFyIF9zdGFydFZhbHVlID0gc3RhcnRQcm9wc1tfa2V5XSB8fCAwO1xuXG4gICAgICAgICAgdmFyIF9lbmRWYWx1ZSA9IGVuZFByb3BzW19rZXldIHx8IDA7XG5cbiAgICAgICAgICBzdGFydFZpZXdwb3J0UHJvcHNbX2tleV0gPSBfc3RhcnRWYWx1ZTtcbiAgICAgICAgICBlbmRWaWV3cG9ydFByb3BzW19rZXldID0gZ2V0RW5kVmFsdWVCeVNob3J0ZXN0UGF0aChfa2V5LCBfc3RhcnRWYWx1ZSwgX2VuZFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIF9pdGVyYXRvcjIuZShlcnIpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgX2l0ZXJhdG9yMi5mKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXJ0OiBzdGFydFZpZXdwb3J0UHJvcHMsXG4gICAgICAgIGVuZDogZW5kVmlld3BvcnRQcm9wc1xuICAgICAgfTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaW50ZXJwb2xhdGVQcm9wc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpbnRlcnBvbGF0ZVByb3BzKHN0YXJ0UHJvcHMsIGVuZFByb3BzLCB0KSB7XG4gICAgICB2YXIgdmlld3BvcnQgPSBmbHlUb1ZpZXdwb3J0KHN0YXJ0UHJvcHMsIGVuZFByb3BzLCB0LCB0aGlzLnByb3BzKTtcblxuICAgICAgdmFyIF9pdGVyYXRvcjMgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcihMSU5FQVJMWV9JTlRFUlBPTEFURURfUFJPUFMpLFxuICAgICAgICAgIF9zdGVwMztcblxuICAgICAgdHJ5IHtcbiAgICAgICAgZm9yIChfaXRlcmF0b3IzLnMoKTsgIShfc3RlcDMgPSBfaXRlcmF0b3IzLm4oKSkuZG9uZTspIHtcbiAgICAgICAgICB2YXIga2V5ID0gX3N0ZXAzLnZhbHVlO1xuICAgICAgICAgIHZpZXdwb3J0W2tleV0gPSBsZXJwKHN0YXJ0UHJvcHNba2V5XSwgZW5kUHJvcHNba2V5XSwgdCk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBfaXRlcmF0b3IzLmUoZXJyKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIF9pdGVyYXRvcjMuZigpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdmlld3BvcnQ7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldER1cmF0aW9uXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldER1cmF0aW9uKHN0YXJ0UHJvcHMsIGVuZFByb3BzKSB7XG4gICAgICB2YXIgdHJhbnNpdGlvbkR1cmF0aW9uID0gZW5kUHJvcHMudHJhbnNpdGlvbkR1cmF0aW9uO1xuXG4gICAgICBpZiAodHJhbnNpdGlvbkR1cmF0aW9uID09PSAnYXV0bycpIHtcbiAgICAgICAgdHJhbnNpdGlvbkR1cmF0aW9uID0gZ2V0Rmx5VG9EdXJhdGlvbihzdGFydFByb3BzLCBlbmRQcm9wcywgdGhpcy5wcm9wcyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cmFuc2l0aW9uRHVyYXRpb247XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFZpZXdwb3J0Rmx5VG9JbnRlcnBvbGF0b3I7XG59KFRyYW5zaXRpb25JbnRlcnBvbGF0b3IpO1xuXG5leHBvcnQgeyBWaWV3cG9ydEZseVRvSW50ZXJwb2xhdG9yIGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgX3NsaWNlZFRvQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXlcIjtcbmltcG9ydCBfY2xhc3NDYWxsQ2hlY2sgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NsYXNzQ2FsbENoZWNrXCI7XG5pbXBvcnQgX2NyZWF0ZUNsYXNzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jcmVhdGVDbGFzc1wiO1xuaW1wb3J0IF9pbmhlcml0cyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNcIjtcbmltcG9ydCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vcG9zc2libGVDb25zdHJ1Y3RvclJldHVyblwiO1xuaW1wb3J0IF9nZXRQcm90b3R5cGVPZiBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZ2V0UHJvdG90eXBlT2ZcIjtcblxuZnVuY3Rpb24gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIobywgYWxsb3dBcnJheUxpa2UpIHtcbiAgdmFyIGl0O1xuXG4gIGlmICh0eXBlb2YgU3ltYm9sID09PSBcInVuZGVmaW5lZFwiIHx8IG9bU3ltYm9sLml0ZXJhdG9yXSA9PSBudWxsKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkobykgfHwgKGl0ID0gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8pKSB8fCBhbGxvd0FycmF5TGlrZSAmJiBvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgaWYgKGl0KSBvID0gaXQ7XG4gICAgICB2YXIgaSA9IDA7XG5cbiAgICAgIHZhciBGID0gZnVuY3Rpb24gRigpIHt9O1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBzOiBGLFxuICAgICAgICBuOiBmdW5jdGlvbiBuKCkge1xuICAgICAgICAgIGlmIChpID49IG8ubGVuZ3RoKSByZXR1cm4ge1xuICAgICAgICAgICAgZG9uZTogdHJ1ZVxuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRvbmU6IGZhbHNlLFxuICAgICAgICAgICAgdmFsdWU6IG9baSsrXVxuICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICAgIGU6IGZ1bmN0aW9uIGUoX2UpIHtcbiAgICAgICAgICB0aHJvdyBfZTtcbiAgICAgICAgfSxcbiAgICAgICAgZjogRlxuICAgICAgfTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG4gIH1cblxuICB2YXIgbm9ybWFsQ29tcGxldGlvbiA9IHRydWUsXG4gICAgICBkaWRFcnIgPSBmYWxzZSxcbiAgICAgIGVycjtcbiAgcmV0dXJuIHtcbiAgICBzOiBmdW5jdGlvbiBzKCkge1xuICAgICAgaXQgPSBvW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgICB9LFxuICAgIG46IGZ1bmN0aW9uIG4oKSB7XG4gICAgICB2YXIgc3RlcCA9IGl0Lm5leHQoKTtcbiAgICAgIG5vcm1hbENvbXBsZXRpb24gPSBzdGVwLmRvbmU7XG4gICAgICByZXR1cm4gc3RlcDtcbiAgICB9LFxuICAgIGU6IGZ1bmN0aW9uIGUoX2UyKSB7XG4gICAgICBkaWRFcnIgPSB0cnVlO1xuICAgICAgZXJyID0gX2UyO1xuICAgIH0sXG4gICAgZjogZnVuY3Rpb24gZigpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghbm9ybWFsQ29tcGxldGlvbiAmJiBpdFtcInJldHVyblwiXSAhPSBudWxsKSBpdFtcInJldHVyblwiXSgpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKGRpZEVycikgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikge1xuICBpZiAoIW8pIHJldHVybjtcbiAgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbiAgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpO1xuICBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lO1xuICBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTtcbiAgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xufVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikge1xuICBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDtcblxuICBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHtcbiAgICBhcnIyW2ldID0gYXJyW2ldO1xuICB9XG5cbiAgcmV0dXJuIGFycjI7XG59XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7XG4gIHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpO1xuXG4gIHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHtcbiAgICB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksXG4gICAgICAgIHJlc3VsdDtcblxuICAgIGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7XG4gICAgICB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yO1xuXG4gICAgICByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH1cblxuICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkge1xuICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7XG4gIGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7XG4gIGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7XG5cbiAgdHJ5IHtcbiAgICBEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFJlZmxlY3QuY29uc3RydWN0KERhdGUsIFtdLCBmdW5jdGlvbiAoKSB7fSkpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmltcG9ydCBXZWJNZXJjYXRvclZpZXdwb3J0IGZyb20gJ3ZpZXdwb3J0LW1lcmNhdG9yLXByb2plY3QnO1xuaW1wb3J0IGFzc2VydCBmcm9tICcuLi9hc3NlcnQnO1xuaW1wb3J0IFRyYW5zaXRpb25JbnRlcnBvbGF0b3IgZnJvbSAnLi90cmFuc2l0aW9uLWludGVycG9sYXRvcic7XG5pbXBvcnQgeyBpc1ZhbGlkLCBnZXRFbmRWYWx1ZUJ5U2hvcnRlc3RQYXRoIH0gZnJvbSAnLi90cmFuc2l0aW9uLXV0aWxzJztcbmltcG9ydCB7IGxlcnAgfSBmcm9tICcuLi9tYXRoLXV0aWxzJztcbnZhciBWSUVXUE9SVF9UUkFOU0lUSU9OX1BST1BTID0gWydsb25naXR1ZGUnLCAnbGF0aXR1ZGUnLCAnem9vbScsICdiZWFyaW5nJywgJ3BpdGNoJ107XG5cbnZhciBMaW5lYXJJbnRlcnBvbGF0b3IgPSBmdW5jdGlvbiAoX1RyYW5zaXRpb25JbnRlcnBvbGF0KSB7XG4gIF9pbmhlcml0cyhMaW5lYXJJbnRlcnBvbGF0b3IsIF9UcmFuc2l0aW9uSW50ZXJwb2xhdCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihMaW5lYXJJbnRlcnBvbGF0b3IpO1xuXG4gIGZ1bmN0aW9uIExpbmVhckludGVycG9sYXRvcigpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICB2YXIgb3B0cyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgTGluZWFySW50ZXJwb2xhdG9yKTtcblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcyk7XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRzKSkge1xuICAgICAgb3B0cyA9IHtcbiAgICAgICAgdHJhbnNpdGlvblByb3BzOiBvcHRzXG4gICAgICB9O1xuICAgIH1cblxuICAgIF90aGlzLnByb3BOYW1lcyA9IG9wdHMudHJhbnNpdGlvblByb3BzIHx8IFZJRVdQT1JUX1RSQU5TSVRJT05fUFJPUFM7XG5cbiAgICBpZiAob3B0cy5hcm91bmQpIHtcbiAgICAgIF90aGlzLmFyb3VuZCA9IG9wdHMuYXJvdW5kO1xuICAgIH1cblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhMaW5lYXJJbnRlcnBvbGF0b3IsIFt7XG4gICAga2V5OiBcImluaXRpYWxpemVQcm9wc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpbml0aWFsaXplUHJvcHMoc3RhcnRQcm9wcywgZW5kUHJvcHMpIHtcbiAgICAgIHZhciBzdGFydFZpZXdwb3J0UHJvcHMgPSB7fTtcbiAgICAgIHZhciBlbmRWaWV3cG9ydFByb3BzID0ge307XG5cbiAgICAgIGlmICh0aGlzLmFyb3VuZCkge1xuICAgICAgICBzdGFydFZpZXdwb3J0UHJvcHMuYXJvdW5kID0gdGhpcy5hcm91bmQ7XG4gICAgICAgIHZhciBhcm91bmRMbmdMYXQgPSBuZXcgV2ViTWVyY2F0b3JWaWV3cG9ydChzdGFydFByb3BzKS51bnByb2plY3QodGhpcy5hcm91bmQpO1xuICAgICAgICBPYmplY3QuYXNzaWduKGVuZFZpZXdwb3J0UHJvcHMsIGVuZFByb3BzLCB7XG4gICAgICAgICAgYXJvdW5kOiBuZXcgV2ViTWVyY2F0b3JWaWV3cG9ydChlbmRQcm9wcykucHJvamVjdChhcm91bmRMbmdMYXQpLFxuICAgICAgICAgIGFyb3VuZExuZ0xhdDogYXJvdW5kTG5nTGF0XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB2YXIgX2l0ZXJhdG9yID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIodGhpcy5wcm9wTmFtZXMpLFxuICAgICAgICAgIF9zdGVwO1xuXG4gICAgICB0cnkge1xuICAgICAgICBmb3IgKF9pdGVyYXRvci5zKCk7ICEoX3N0ZXAgPSBfaXRlcmF0b3IubigpKS5kb25lOykge1xuICAgICAgICAgIHZhciBrZXkgPSBfc3RlcC52YWx1ZTtcbiAgICAgICAgICB2YXIgc3RhcnRWYWx1ZSA9IHN0YXJ0UHJvcHNba2V5XTtcbiAgICAgICAgICB2YXIgZW5kVmFsdWUgPSBlbmRQcm9wc1trZXldO1xuICAgICAgICAgIGFzc2VydChpc1ZhbGlkKHN0YXJ0VmFsdWUpICYmIGlzVmFsaWQoZW5kVmFsdWUpLCBcIlwiLmNvbmNhdChrZXksIFwiIG11c3QgYmUgc3VwcGxpZWQgZm9yIHRyYW5zaXRpb25cIikpO1xuICAgICAgICAgIHN0YXJ0Vmlld3BvcnRQcm9wc1trZXldID0gc3RhcnRWYWx1ZTtcbiAgICAgICAgICBlbmRWaWV3cG9ydFByb3BzW2tleV0gPSBnZXRFbmRWYWx1ZUJ5U2hvcnRlc3RQYXRoKGtleSwgc3RhcnRWYWx1ZSwgZW5kVmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgX2l0ZXJhdG9yLmUoZXJyKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIF9pdGVyYXRvci5mKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXJ0OiBzdGFydFZpZXdwb3J0UHJvcHMsXG4gICAgICAgIGVuZDogZW5kVmlld3BvcnRQcm9wc1xuICAgICAgfTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaW50ZXJwb2xhdGVQcm9wc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpbnRlcnBvbGF0ZVByb3BzKHN0YXJ0UHJvcHMsIGVuZFByb3BzLCB0KSB7XG4gICAgICB2YXIgdmlld3BvcnQgPSB7fTtcblxuICAgICAgdmFyIF9pdGVyYXRvcjIgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcih0aGlzLnByb3BOYW1lcyksXG4gICAgICAgICAgX3N0ZXAyO1xuXG4gICAgICB0cnkge1xuICAgICAgICBmb3IgKF9pdGVyYXRvcjIucygpOyAhKF9zdGVwMiA9IF9pdGVyYXRvcjIubigpKS5kb25lOykge1xuICAgICAgICAgIHZhciBrZXkgPSBfc3RlcDIudmFsdWU7XG4gICAgICAgICAgdmlld3BvcnRba2V5XSA9IGxlcnAoc3RhcnRQcm9wc1trZXldLCBlbmRQcm9wc1trZXldLCB0KTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIF9pdGVyYXRvcjIuZShlcnIpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgX2l0ZXJhdG9yMi5mKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChlbmRQcm9wcy5hcm91bmQpIHtcbiAgICAgICAgdmFyIF9XZWJNZXJjYXRvclZpZXdwb3J0JCA9IG5ldyBXZWJNZXJjYXRvclZpZXdwb3J0KE9iamVjdC5hc3NpZ24oe30sIGVuZFByb3BzLCB2aWV3cG9ydCkpLmdldE1hcENlbnRlckJ5TG5nTGF0UG9zaXRpb24oe1xuICAgICAgICAgIGxuZ0xhdDogZW5kUHJvcHMuYXJvdW5kTG5nTGF0LFxuICAgICAgICAgIHBvczogbGVycChzdGFydFByb3BzLmFyb3VuZCwgZW5kUHJvcHMuYXJvdW5kLCB0KVxuICAgICAgICB9KSxcbiAgICAgICAgICAgIF9XZWJNZXJjYXRvclZpZXdwb3J0JDIgPSBfc2xpY2VkVG9BcnJheShfV2ViTWVyY2F0b3JWaWV3cG9ydCQsIDIpLFxuICAgICAgICAgICAgbG9uZ2l0dWRlID0gX1dlYk1lcmNhdG9yVmlld3BvcnQkMlswXSxcbiAgICAgICAgICAgIGxhdGl0dWRlID0gX1dlYk1lcmNhdG9yVmlld3BvcnQkMlsxXTtcblxuICAgICAgICB2aWV3cG9ydC5sb25naXR1ZGUgPSBsb25naXR1ZGU7XG4gICAgICAgIHZpZXdwb3J0LmxhdGl0dWRlID0gbGF0aXR1ZGU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB2aWV3cG9ydDtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gTGluZWFySW50ZXJwb2xhdG9yO1xufShUcmFuc2l0aW9uSW50ZXJwb2xhdG9yKTtcblxuZXhwb3J0IHsgTGluZWFySW50ZXJwb2xhdG9yIGFzIGRlZmF1bHQgfTsiLCJleHBvcnQgeyBkZWZhdWx0IGFzIFRyYW5zaXRpb25JbnRlcnBvbGF0b3IgfSBmcm9tICcuL3RyYW5zaXRpb24taW50ZXJwb2xhdG9yJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVmlld3BvcnRGbHlUb0ludGVycG9sYXRvciB9IGZyb20gJy4vdmlld3BvcnQtZmx5LXRvLWludGVycG9sYXRvcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIExpbmVhckludGVycG9sYXRvciB9IGZyb20gJy4vbGluZWFyLWludGVycG9sYXRvcic7IiwiaW1wb3J0IF9jbGFzc0NhbGxDaGVjayBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY2xhc3NDYWxsQ2hlY2tcIjtcbmltcG9ydCBfY3JlYXRlQ2xhc3MgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NyZWF0ZUNsYXNzXCI7XG5pbXBvcnQgX2RlZmluZVByb3BlcnR5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eVwiO1xuaW1wb3J0IGFzc2VydCBmcm9tICcuL2Fzc2VydCc7XG5pbXBvcnQgeyBMaW5lYXJJbnRlcnBvbGF0b3IgfSBmcm9tICcuL3RyYW5zaXRpb24nO1xuaW1wb3J0IE1hcFN0YXRlIGZyb20gJy4vbWFwLXN0YXRlJztcblxudmFyIG5vb3AgPSBmdW5jdGlvbiBub29wKCkge307XG5cbmV4cG9ydCBmdW5jdGlvbiBjcm9wRWFzaW5nRnVuY3Rpb24oZWFzaW5nLCB4MCkge1xuICB2YXIgeTAgPSBlYXNpbmcoeDApO1xuICByZXR1cm4gZnVuY3Rpb24gKHQpIHtcbiAgICByZXR1cm4gMSAvICgxIC0geTApICogKGVhc2luZyh0ICogKDEgLSB4MCkgKyB4MCkgLSB5MCk7XG4gIH07XG59XG5leHBvcnQgdmFyIFRSQU5TSVRJT05fRVZFTlRTID0ge1xuICBCUkVBSzogMSxcbiAgU05BUF9UT19FTkQ6IDIsXG4gIElHTk9SRTogMyxcbiAgVVBEQVRFOiA0XG59O1xudmFyIERFRkFVTFRfUFJPUFMgPSB7XG4gIHRyYW5zaXRpb25EdXJhdGlvbjogMCxcbiAgdHJhbnNpdGlvbkVhc2luZzogZnVuY3Rpb24gdHJhbnNpdGlvbkVhc2luZyh0KSB7XG4gICAgcmV0dXJuIHQ7XG4gIH0sXG4gIHRyYW5zaXRpb25JbnRlcnBvbGF0b3I6IG5ldyBMaW5lYXJJbnRlcnBvbGF0b3IoKSxcbiAgdHJhbnNpdGlvbkludGVycnVwdGlvbjogVFJBTlNJVElPTl9FVkVOVFMuQlJFQUssXG4gIG9uVHJhbnNpdGlvblN0YXJ0OiBub29wLFxuICBvblRyYW5zaXRpb25JbnRlcnJ1cHQ6IG5vb3AsXG4gIG9uVHJhbnNpdGlvbkVuZDogbm9vcFxufTtcblxudmFyIFRyYW5zaXRpb25NYW5hZ2VyID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBUcmFuc2l0aW9uTWFuYWdlcigpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdmFyIG9wdHMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFRyYW5zaXRpb25NYW5hZ2VyKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcIl9hbmltYXRpb25GcmFtZVwiLCBudWxsKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcIl9vblRyYW5zaXRpb25GcmFtZVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5fYW5pbWF0aW9uRnJhbWUgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoX3RoaXMuX29uVHJhbnNpdGlvbkZyYW1lKTtcblxuICAgICAgX3RoaXMuX3VwZGF0ZVZpZXdwb3J0KCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnByb3BzID0gbnVsbDtcbiAgICB0aGlzLm9uVmlld3BvcnRDaGFuZ2UgPSBvcHRzLm9uVmlld3BvcnRDaGFuZ2UgfHwgbm9vcDtcbiAgICB0aGlzLm9uU3RhdGVDaGFuZ2UgPSBvcHRzLm9uU3RhdGVDaGFuZ2UgfHwgbm9vcDtcbiAgICB0aGlzLnRpbWUgPSBvcHRzLmdldFRpbWUgfHwgRGF0ZS5ub3c7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoVHJhbnNpdGlvbk1hbmFnZXIsIFt7XG4gICAga2V5OiBcImdldFZpZXdwb3J0SW5UcmFuc2l0aW9uXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFZpZXdwb3J0SW5UcmFuc2l0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2FuaW1hdGlvbkZyYW1lID8gdGhpcy5zdGF0ZS5wcm9wc0luVHJhbnNpdGlvbiA6IG51bGw7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInByb2Nlc3NWaWV3cG9ydENoYW5nZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwcm9jZXNzVmlld3BvcnRDaGFuZ2UobmV4dFByb3BzKSB7XG4gICAgICB2YXIgY3VycmVudFByb3BzID0gdGhpcy5wcm9wcztcbiAgICAgIHRoaXMucHJvcHMgPSBuZXh0UHJvcHM7XG5cbiAgICAgIGlmICghY3VycmVudFByb3BzIHx8IHRoaXMuX3Nob3VsZElnbm9yZVZpZXdwb3J0Q2hhbmdlKGN1cnJlbnRQcm9wcywgbmV4dFByb3BzKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9pc1RyYW5zaXRpb25FbmFibGVkKG5leHRQcm9wcykpIHtcbiAgICAgICAgdmFyIHN0YXJ0UHJvcHMgPSBPYmplY3QuYXNzaWduKHt9LCBjdXJyZW50UHJvcHMpO1xuICAgICAgICB2YXIgZW5kUHJvcHMgPSBPYmplY3QuYXNzaWduKHt9LCBuZXh0UHJvcHMpO1xuXG4gICAgICAgIGlmICh0aGlzLl9pc1RyYW5zaXRpb25JblByb2dyZXNzKCkpIHtcbiAgICAgICAgICBjdXJyZW50UHJvcHMub25UcmFuc2l0aW9uSW50ZXJydXB0KCk7XG5cbiAgICAgICAgICBpZiAodGhpcy5zdGF0ZS5pbnRlcnJ1cHRpb24gPT09IFRSQU5TSVRJT05fRVZFTlRTLlNOQVBfVE9fRU5EKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHN0YXJ0UHJvcHMsIHRoaXMuc3RhdGUuZW5kUHJvcHMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHN0YXJ0UHJvcHMsIHRoaXMuc3RhdGUucHJvcHNJblRyYW5zaXRpb24pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0aGlzLnN0YXRlLmludGVycnVwdGlvbiA9PT0gVFJBTlNJVElPTl9FVkVOVFMuVVBEQVRFKSB7XG4gICAgICAgICAgICB2YXIgY3VycmVudFRpbWUgPSB0aGlzLnRpbWUoKTtcbiAgICAgICAgICAgIHZhciB4MCA9IChjdXJyZW50VGltZSAtIHRoaXMuc3RhdGUuc3RhcnRUaW1lKSAvIHRoaXMuc3RhdGUuZHVyYXRpb247XG4gICAgICAgICAgICBlbmRQcm9wcy50cmFuc2l0aW9uRHVyYXRpb24gPSB0aGlzLnN0YXRlLmR1cmF0aW9uIC0gKGN1cnJlbnRUaW1lIC0gdGhpcy5zdGF0ZS5zdGFydFRpbWUpO1xuICAgICAgICAgICAgZW5kUHJvcHMudHJhbnNpdGlvbkVhc2luZyA9IGNyb3BFYXNpbmdGdW5jdGlvbih0aGlzLnN0YXRlLmVhc2luZywgeDApO1xuICAgICAgICAgICAgZW5kUHJvcHMudHJhbnNpdGlvbkludGVycG9sYXRvciA9IHN0YXJ0UHJvcHMudHJhbnNpdGlvbkludGVycG9sYXRvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBlbmRQcm9wcy5vblRyYW5zaXRpb25TdGFydCgpO1xuXG4gICAgICAgIHRoaXMuX3RyaWdnZXJUcmFuc2l0aW9uKHN0YXJ0UHJvcHMsIGVuZFByb3BzKTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX2lzVHJhbnNpdGlvbkluUHJvZ3Jlc3MoKSkge1xuICAgICAgICBjdXJyZW50UHJvcHMub25UcmFuc2l0aW9uSW50ZXJydXB0KCk7XG5cbiAgICAgICAgdGhpcy5fZW5kVHJhbnNpdGlvbigpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIl9pc1RyYW5zaXRpb25JblByb2dyZXNzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9pc1RyYW5zaXRpb25JblByb2dyZXNzKCkge1xuICAgICAgcmV0dXJuIEJvb2xlYW4odGhpcy5fYW5pbWF0aW9uRnJhbWUpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJfaXNUcmFuc2l0aW9uRW5hYmxlZFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfaXNUcmFuc2l0aW9uRW5hYmxlZChwcm9wcykge1xuICAgICAgdmFyIHRyYW5zaXRpb25EdXJhdGlvbiA9IHByb3BzLnRyYW5zaXRpb25EdXJhdGlvbixcbiAgICAgICAgICB0cmFuc2l0aW9uSW50ZXJwb2xhdG9yID0gcHJvcHMudHJhbnNpdGlvbkludGVycG9sYXRvcjtcbiAgICAgIHJldHVybiAodHJhbnNpdGlvbkR1cmF0aW9uID4gMCB8fCB0cmFuc2l0aW9uRHVyYXRpb24gPT09ICdhdXRvJykgJiYgQm9vbGVhbih0cmFuc2l0aW9uSW50ZXJwb2xhdG9yKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiX2lzVXBkYXRlRHVlVG9DdXJyZW50VHJhbnNpdGlvblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfaXNVcGRhdGVEdWVUb0N1cnJlbnRUcmFuc2l0aW9uKHByb3BzKSB7XG4gICAgICBpZiAodGhpcy5zdGF0ZS5wcm9wc0luVHJhbnNpdGlvbikge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZS5pbnRlcnBvbGF0b3IuYXJlUHJvcHNFcXVhbChwcm9wcywgdGhpcy5zdGF0ZS5wcm9wc0luVHJhbnNpdGlvbik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiX3Nob3VsZElnbm9yZVZpZXdwb3J0Q2hhbmdlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9zaG91bGRJZ25vcmVWaWV3cG9ydENoYW5nZShjdXJyZW50UHJvcHMsIG5leHRQcm9wcykge1xuICAgICAgaWYgKCFjdXJyZW50UHJvcHMpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9pc1RyYW5zaXRpb25JblByb2dyZXNzKCkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUuaW50ZXJydXB0aW9uID09PSBUUkFOU0lUSU9OX0VWRU5UUy5JR05PUkUgfHwgdGhpcy5faXNVcGRhdGVEdWVUb0N1cnJlbnRUcmFuc2l0aW9uKG5leHRQcm9wcyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9pc1RyYW5zaXRpb25FbmFibGVkKG5leHRQcm9wcykpIHtcbiAgICAgICAgcmV0dXJuIG5leHRQcm9wcy50cmFuc2l0aW9uSW50ZXJwb2xhdG9yLmFyZVByb3BzRXF1YWwoY3VycmVudFByb3BzLCBuZXh0UHJvcHMpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiX3RyaWdnZXJUcmFuc2l0aW9uXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF90cmlnZ2VyVHJhbnNpdGlvbihzdGFydFByb3BzLCBlbmRQcm9wcykge1xuICAgICAgYXNzZXJ0KHRoaXMuX2lzVHJhbnNpdGlvbkVuYWJsZWQoZW5kUHJvcHMpKTtcblxuICAgICAgaWYgKHRoaXMuX2FuaW1hdGlvbkZyYW1lKSB7XG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX2FuaW1hdGlvbkZyYW1lKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHRyYW5zaXRpb25JbnRlcnBvbGF0b3IgPSBlbmRQcm9wcy50cmFuc2l0aW9uSW50ZXJwb2xhdG9yO1xuICAgICAgdmFyIGR1cmF0aW9uID0gdHJhbnNpdGlvbkludGVycG9sYXRvci5nZXREdXJhdGlvbiA/IHRyYW5zaXRpb25JbnRlcnBvbGF0b3IuZ2V0RHVyYXRpb24oc3RhcnRQcm9wcywgZW5kUHJvcHMpIDogZW5kUHJvcHMudHJhbnNpdGlvbkR1cmF0aW9uO1xuXG4gICAgICBpZiAoZHVyYXRpb24gPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgaW5pdGlhbFByb3BzID0gZW5kUHJvcHMudHJhbnNpdGlvbkludGVycG9sYXRvci5pbml0aWFsaXplUHJvcHMoc3RhcnRQcm9wcywgZW5kUHJvcHMpO1xuICAgICAgdmFyIGludGVyYWN0aW9uU3RhdGUgPSB7XG4gICAgICAgIGluVHJhbnNpdGlvbjogdHJ1ZSxcbiAgICAgICAgaXNab29taW5nOiBzdGFydFByb3BzLnpvb20gIT09IGVuZFByb3BzLnpvb20sXG4gICAgICAgIGlzUGFubmluZzogc3RhcnRQcm9wcy5sb25naXR1ZGUgIT09IGVuZFByb3BzLmxvbmdpdHVkZSB8fCBzdGFydFByb3BzLmxhdGl0dWRlICE9PSBlbmRQcm9wcy5sYXRpdHVkZSxcbiAgICAgICAgaXNSb3RhdGluZzogc3RhcnRQcm9wcy5iZWFyaW5nICE9PSBlbmRQcm9wcy5iZWFyaW5nIHx8IHN0YXJ0UHJvcHMucGl0Y2ggIT09IGVuZFByb3BzLnBpdGNoXG4gICAgICB9O1xuICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgZHVyYXRpb246IGR1cmF0aW9uLFxuICAgICAgICBlYXNpbmc6IGVuZFByb3BzLnRyYW5zaXRpb25FYXNpbmcsXG4gICAgICAgIGludGVycG9sYXRvcjogZW5kUHJvcHMudHJhbnNpdGlvbkludGVycG9sYXRvcixcbiAgICAgICAgaW50ZXJydXB0aW9uOiBlbmRQcm9wcy50cmFuc2l0aW9uSW50ZXJydXB0aW9uLFxuICAgICAgICBzdGFydFRpbWU6IHRoaXMudGltZSgpLFxuICAgICAgICBzdGFydFByb3BzOiBpbml0aWFsUHJvcHMuc3RhcnQsXG4gICAgICAgIGVuZFByb3BzOiBpbml0aWFsUHJvcHMuZW5kLFxuICAgICAgICBhbmltYXRpb246IG51bGwsXG4gICAgICAgIHByb3BzSW5UcmFuc2l0aW9uOiB7fVxuICAgICAgfTtcblxuICAgICAgdGhpcy5fb25UcmFuc2l0aW9uRnJhbWUoKTtcblxuICAgICAgdGhpcy5vblN0YXRlQ2hhbmdlKGludGVyYWN0aW9uU3RhdGUpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJfZW5kVHJhbnNpdGlvblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfZW5kVHJhbnNpdGlvbigpIHtcbiAgICAgIGlmICh0aGlzLl9hbmltYXRpb25GcmFtZSkge1xuICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9hbmltYXRpb25GcmFtZSk7XG4gICAgICAgIHRoaXMuX2FuaW1hdGlvbkZyYW1lID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgdGhpcy5vblN0YXRlQ2hhbmdlKHtcbiAgICAgICAgaW5UcmFuc2l0aW9uOiBmYWxzZSxcbiAgICAgICAgaXNab29taW5nOiBmYWxzZSxcbiAgICAgICAgaXNQYW5uaW5nOiBmYWxzZSxcbiAgICAgICAgaXNSb3RhdGluZzogZmFsc2VcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJfdXBkYXRlVmlld3BvcnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gX3VwZGF0ZVZpZXdwb3J0KCkge1xuICAgICAgdmFyIGN1cnJlbnRUaW1lID0gdGhpcy50aW1lKCk7XG4gICAgICB2YXIgX3RoaXMkc3RhdGUgPSB0aGlzLnN0YXRlLFxuICAgICAgICAgIHN0YXJ0VGltZSA9IF90aGlzJHN0YXRlLnN0YXJ0VGltZSxcbiAgICAgICAgICBkdXJhdGlvbiA9IF90aGlzJHN0YXRlLmR1cmF0aW9uLFxuICAgICAgICAgIGVhc2luZyA9IF90aGlzJHN0YXRlLmVhc2luZyxcbiAgICAgICAgICBpbnRlcnBvbGF0b3IgPSBfdGhpcyRzdGF0ZS5pbnRlcnBvbGF0b3IsXG4gICAgICAgICAgc3RhcnRQcm9wcyA9IF90aGlzJHN0YXRlLnN0YXJ0UHJvcHMsXG4gICAgICAgICAgZW5kUHJvcHMgPSBfdGhpcyRzdGF0ZS5lbmRQcm9wcztcbiAgICAgIHZhciBzaG91bGRFbmQgPSBmYWxzZTtcbiAgICAgIHZhciB0ID0gKGN1cnJlbnRUaW1lIC0gc3RhcnRUaW1lKSAvIGR1cmF0aW9uO1xuXG4gICAgICBpZiAodCA+PSAxKSB7XG4gICAgICAgIHQgPSAxO1xuICAgICAgICBzaG91bGRFbmQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICB0ID0gZWFzaW5nKHQpO1xuICAgICAgdmFyIHZpZXdwb3J0ID0gaW50ZXJwb2xhdG9yLmludGVycG9sYXRlUHJvcHMoc3RhcnRQcm9wcywgZW5kUHJvcHMsIHQpO1xuICAgICAgdmFyIG1hcFN0YXRlID0gbmV3IE1hcFN0YXRlKE9iamVjdC5hc3NpZ24oe30sIHRoaXMucHJvcHMsIHZpZXdwb3J0KSk7XG4gICAgICB0aGlzLnN0YXRlLnByb3BzSW5UcmFuc2l0aW9uID0gbWFwU3RhdGUuZ2V0Vmlld3BvcnRQcm9wcygpO1xuICAgICAgdGhpcy5vblZpZXdwb3J0Q2hhbmdlKHRoaXMuc3RhdGUucHJvcHNJblRyYW5zaXRpb24sIHRoaXMucHJvcHMpO1xuXG4gICAgICBpZiAoc2hvdWxkRW5kKSB7XG4gICAgICAgIHRoaXMuX2VuZFRyYW5zaXRpb24oKTtcblxuICAgICAgICB0aGlzLnByb3BzLm9uVHJhbnNpdGlvbkVuZCgpO1xuICAgICAgfVxuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBUcmFuc2l0aW9uTWFuYWdlcjtcbn0oKTtcblxuX2RlZmluZVByb3BlcnR5KFRyYW5zaXRpb25NYW5hZ2VyLCBcImRlZmF1bHRQcm9wc1wiLCBERUZBVUxUX1BST1BTKTtcblxuZXhwb3J0IHsgVHJhbnNpdGlvbk1hbmFnZXIgYXMgZGVmYXVsdCB9OyIsInZhciBJTlBVVF9TVEFSVCA9IDE7XG52YXIgSU5QVVRfTU9WRSA9IDI7XG52YXIgSU5QVVRfRU5EID0gNDtcbnZhciBNT1VTRV9JTlBVVF9NQVAgPSB7XG4gIG1vdXNlZG93bjogSU5QVVRfU1RBUlQsXG4gIG1vdXNlbW92ZTogSU5QVVRfTU9WRSxcbiAgbW91c2V1cDogSU5QVVRfRU5EXG59O1xuXG5mdW5jdGlvbiBzb21lKGFycmF5LCBwcmVkaWN0KSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAocHJlZGljdChhcnJheVtpXSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuaGFuY2VQb2ludGVyRXZlbnRJbnB1dChQb2ludGVyRXZlbnRJbnB1dCkge1xuICB2YXIgb2xkSGFuZGxlciA9IFBvaW50ZXJFdmVudElucHV0LnByb3RvdHlwZS5oYW5kbGVyO1xuXG4gIFBvaW50ZXJFdmVudElucHV0LnByb3RvdHlwZS5oYW5kbGVyID0gZnVuY3Rpb24gaGFuZGxlcihldikge1xuICAgIHZhciBzdG9yZSA9IHRoaXMuc3RvcmU7XG5cbiAgICBpZiAoZXYuYnV0dG9uID4gMCAmJiBldi50eXBlID09PSAncG9pbnRlcmRvd24nKSB7XG4gICAgICBpZiAoIXNvbWUoc3RvcmUsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHJldHVybiBlLnBvaW50ZXJJZCA9PT0gZXYucG9pbnRlcklkO1xuICAgICAgfSkpIHtcbiAgICAgICAgc3RvcmUucHVzaChldik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgb2xkSGFuZGxlci5jYWxsKHRoaXMsIGV2KTtcbiAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBlbmhhbmNlTW91c2VJbnB1dChNb3VzZUlucHV0KSB7XG4gIE1vdXNlSW5wdXQucHJvdG90eXBlLmhhbmRsZXIgPSBmdW5jdGlvbiBoYW5kbGVyKGV2KSB7XG4gICAgdmFyIGV2ZW50VHlwZSA9IE1PVVNFX0lOUFVUX01BUFtldi50eXBlXTtcblxuICAgIGlmIChldmVudFR5cGUgJiBJTlBVVF9TVEFSVCAmJiBldi5idXR0b24gPj0gMCkge1xuICAgICAgdGhpcy5wcmVzc2VkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnRUeXBlICYgSU5QVVRfTU9WRSAmJiBldi53aGljaCA9PT0gMCkge1xuICAgICAgZXZlbnRUeXBlID0gSU5QVVRfRU5EO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5wcmVzc2VkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50VHlwZSAmIElOUFVUX0VORCkge1xuICAgICAgdGhpcy5wcmVzc2VkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy5jYWxsYmFjayh0aGlzLm1hbmFnZXIsIGV2ZW50VHlwZSwge1xuICAgICAgcG9pbnRlcnM6IFtldl0sXG4gICAgICBjaGFuZ2VkUG9pbnRlcnM6IFtldl0sXG4gICAgICBwb2ludGVyVHlwZTogJ21vdXNlJyxcbiAgICAgIHNyY0V2ZW50OiBldlxuICAgIH0pO1xuICB9O1xufSIsImltcG9ydCBoYW1tZXJqcyBmcm9tICdoYW1tZXJqcyc7XG5pbXBvcnQgeyBlbmhhbmNlUG9pbnRlckV2ZW50SW5wdXQsIGVuaGFuY2VNb3VzZUlucHV0IH0gZnJvbSAnLi9oYW1tZXItb3ZlcnJpZGVzJztcbmVuaGFuY2VQb2ludGVyRXZlbnRJbnB1dChoYW1tZXJqcy5Qb2ludGVyRXZlbnRJbnB1dCk7XG5lbmhhbmNlTW91c2VJbnB1dChoYW1tZXJqcy5Nb3VzZUlucHV0KTtcbmV4cG9ydCB2YXIgTWFuYWdlciA9IGhhbW1lcmpzLk1hbmFnZXI7XG5leHBvcnQgZGVmYXVsdCBoYW1tZXJqczsiLCJpbXBvcnQgSGFtbWVyIGZyb20gJy4vdXRpbHMvaGFtbWVyJztcbmV4cG9ydCB2YXIgUkVDT0dOSVpFUlMgPSBIYW1tZXIgPyBbW0hhbW1lci5QYW4sIHtcbiAgZXZlbnQ6ICd0cmlwYW4nLFxuICBwb2ludGVyczogMyxcbiAgdGhyZXNob2xkOiAwLFxuICBlbmFibGU6IGZhbHNlXG59XSwgW0hhbW1lci5Sb3RhdGUsIHtcbiAgZW5hYmxlOiBmYWxzZVxufV0sIFtIYW1tZXIuUGluY2gsIHtcbiAgZW5hYmxlOiBmYWxzZVxufV0sIFtIYW1tZXIuU3dpcGUsIHtcbiAgZW5hYmxlOiBmYWxzZVxufV0sIFtIYW1tZXIuUGFuLCB7XG4gIHRocmVzaG9sZDogMCxcbiAgZW5hYmxlOiBmYWxzZVxufV0sIFtIYW1tZXIuUHJlc3MsIHtcbiAgZW5hYmxlOiBmYWxzZVxufV0sIFtIYW1tZXIuVGFwLCB7XG4gIGV2ZW50OiAnZG91YmxldGFwJyxcbiAgdGFwczogMixcbiAgZW5hYmxlOiBmYWxzZVxufV0sIFtIYW1tZXIuVGFwLCB7XG4gIGV2ZW50OiAnYW55dGFwJyxcbiAgZW5hYmxlOiBmYWxzZVxufV0sIFtIYW1tZXIuVGFwLCB7XG4gIGVuYWJsZTogZmFsc2Vcbn1dXSA6IG51bGw7XG5leHBvcnQgdmFyIFJFQ09HTklaRVJfQ09NUEFUSUJMRV9NQVAgPSB7XG4gIHRyaXBhbjogWydyb3RhdGUnLCAncGluY2gnLCAncGFuJ10sXG4gIHJvdGF0ZTogWydwaW5jaCddLFxuICBwaW5jaDogWydwYW4nXSxcbiAgcGFuOiBbJ3ByZXNzJywgJ2RvdWJsZXRhcCcsICdhbnl0YXAnLCAndGFwJ10sXG4gIGRvdWJsZXRhcDogWydhbnl0YXAnXSxcbiAgYW55dGFwOiBbJ3RhcCddXG59O1xuZXhwb3J0IHZhciBSRUNPR05JWkVSX0ZBTExCQUNLX01BUCA9IHtcbiAgZG91YmxldGFwOiBbJ3RhcCddXG59O1xuZXhwb3J0IHZhciBCQVNJQ19FVkVOVF9BTElBU0VTID0ge1xuICBwb2ludGVyZG93bjogJ3BvaW50ZXJkb3duJyxcbiAgcG9pbnRlcm1vdmU6ICdwb2ludGVybW92ZScsXG4gIHBvaW50ZXJ1cDogJ3BvaW50ZXJ1cCcsXG4gIHRvdWNoc3RhcnQ6ICdwb2ludGVyZG93bicsXG4gIHRvdWNobW92ZTogJ3BvaW50ZXJtb3ZlJyxcbiAgdG91Y2hlbmQ6ICdwb2ludGVydXAnLFxuICBtb3VzZWRvd246ICdwb2ludGVyZG93bicsXG4gIG1vdXNlbW92ZTogJ3BvaW50ZXJtb3ZlJyxcbiAgbW91c2V1cDogJ3BvaW50ZXJ1cCdcbn07XG5leHBvcnQgdmFyIElOUFVUX0VWRU5UX1RZUEVTID0ge1xuICBLRVlfRVZFTlRTOiBbJ2tleWRvd24nLCAna2V5dXAnXSxcbiAgTU9VU0VfRVZFTlRTOiBbJ21vdXNlZG93bicsICdtb3VzZW1vdmUnLCAnbW91c2V1cCcsICdtb3VzZW92ZXInLCAnbW91c2VvdXQnLCAnbW91c2VsZWF2ZSddLFxuICBXSEVFTF9FVkVOVFM6IFsnd2hlZWwnLCAnbW91c2V3aGVlbCddXG59O1xuZXhwb3J0IHZhciBFVkVOVF9SRUNPR05JWkVSX01BUCA9IHtcbiAgdGFwOiAndGFwJyxcbiAgYW55dGFwOiAnYW55dGFwJyxcbiAgZG91YmxldGFwOiAnZG91YmxldGFwJyxcbiAgcHJlc3M6ICdwcmVzcycsXG4gIHBpbmNoOiAncGluY2gnLFxuICBwaW5jaGluOiAncGluY2gnLFxuICBwaW5jaG91dDogJ3BpbmNoJyxcbiAgcGluY2hzdGFydDogJ3BpbmNoJyxcbiAgcGluY2htb3ZlOiAncGluY2gnLFxuICBwaW5jaGVuZDogJ3BpbmNoJyxcbiAgcGluY2hjYW5jZWw6ICdwaW5jaCcsXG4gIHJvdGF0ZTogJ3JvdGF0ZScsXG4gIHJvdGF0ZXN0YXJ0OiAncm90YXRlJyxcbiAgcm90YXRlbW92ZTogJ3JvdGF0ZScsXG4gIHJvdGF0ZWVuZDogJ3JvdGF0ZScsXG4gIHJvdGF0ZWNhbmNlbDogJ3JvdGF0ZScsXG4gIHRyaXBhbjogJ3RyaXBhbicsXG4gIHRyaXBhbnN0YXJ0OiAndHJpcGFuJyxcbiAgdHJpcGFubW92ZTogJ3RyaXBhbicsXG4gIHRyaXBhbnVwOiAndHJpcGFuJyxcbiAgdHJpcGFuZG93bjogJ3RyaXBhbicsXG4gIHRyaXBhbmxlZnQ6ICd0cmlwYW4nLFxuICB0cmlwYW5yaWdodDogJ3RyaXBhbicsXG4gIHRyaXBhbmVuZDogJ3RyaXBhbicsXG4gIHRyaXBhbmNhbmNlbDogJ3RyaXBhbicsXG4gIHBhbjogJ3BhbicsXG4gIHBhbnN0YXJ0OiAncGFuJyxcbiAgcGFubW92ZTogJ3BhbicsXG4gIHBhbnVwOiAncGFuJyxcbiAgcGFuZG93bjogJ3BhbicsXG4gIHBhbmxlZnQ6ICdwYW4nLFxuICBwYW5yaWdodDogJ3BhbicsXG4gIHBhbmVuZDogJ3BhbicsXG4gIHBhbmNhbmNlbDogJ3BhbicsXG4gIHN3aXBlOiAnc3dpcGUnLFxuICBzd2lwZWxlZnQ6ICdzd2lwZScsXG4gIHN3aXBlcmlnaHQ6ICdzd2lwZScsXG4gIHN3aXBldXA6ICdzd2lwZScsXG4gIHN3aXBlZG93bjogJ3N3aXBlJ1xufTtcbmV4cG9ydCB2YXIgR0VTVFVSRV9FVkVOVF9BTElBU0VTID0ge1xuICBjbGljazogJ3RhcCcsXG4gIGFueWNsaWNrOiAnYW55dGFwJyxcbiAgZGJsY2xpY2s6ICdkb3VibGV0YXAnLFxuICBtb3VzZWRvd246ICdwb2ludGVyZG93bicsXG4gIG1vdXNlbW92ZTogJ3BvaW50ZXJtb3ZlJyxcbiAgbW91c2V1cDogJ3BvaW50ZXJ1cCcsXG4gIG1vdXNlb3ZlcjogJ3BvaW50ZXJvdmVyJyxcbiAgbW91c2VvdXQ6ICdwb2ludGVyb3V0JyxcbiAgbW91c2VsZWF2ZTogJ3BvaW50ZXJsZWF2ZSdcbn07IiwiZXhwb3J0IHZhciB1c2VyQWdlbnQgPSB0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiBuYXZpZ2F0b3IudXNlckFnZW50ID8gbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpIDogJyc7XG52YXIgd2luZG93XyA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogZ2xvYmFsO1xudmFyIGdsb2JhbF8gPSB0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbCA6IHdpbmRvdztcbnZhciBkb2N1bWVudF8gPSB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnID8gZG9jdW1lbnQgOiB7fTtcbmV4cG9ydCB7IHdpbmRvd18gYXMgd2luZG93LCBnbG9iYWxfIGFzIGdsb2JhbCwgZG9jdW1lbnRfIGFzIGRvY3VtZW50IH07XG52YXIgcGFzc2l2ZVN1cHBvcnRlZCA9IGZhbHNlO1xuXG50cnkge1xuICB2YXIgb3B0aW9ucyA9IHtcbiAgICBnZXQgcGFzc2l2ZSgpIHtcbiAgICAgIHBhc3NpdmVTdXBwb3J0ZWQgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gIH07XG4gIHdpbmRvd18uYWRkRXZlbnRMaXN0ZW5lcigndGVzdCcsIG9wdGlvbnMsIG9wdGlvbnMpO1xuICB3aW5kb3dfLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Rlc3QnLCBvcHRpb25zLCBvcHRpb25zKTtcbn0gY2F0Y2ggKGVycikge31cblxuZXhwb3J0IHsgcGFzc2l2ZVN1cHBvcnRlZCB9OyIsImltcG9ydCBfY2xhc3NDYWxsQ2hlY2sgZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL2p1c3RpY2U0MC10b29sL2p1c3RpY2U0MC10b29sL2NsaWVudC9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY2xhc3NDYWxsQ2hlY2tcIjtcbmltcG9ydCBfY3JlYXRlQ2xhc3MgZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL2p1c3RpY2U0MC10b29sL2p1c3RpY2U0MC10b29sL2NsaWVudC9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY3JlYXRlQ2xhc3NcIjtcbmltcG9ydCB7IElOUFVUX0VWRU5UX1RZUEVTIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IHdpbmRvdywgdXNlckFnZW50LCBwYXNzaXZlU3VwcG9ydGVkIH0gZnJvbSAnLi4vdXRpbHMvZ2xvYmFscyc7XG52YXIgZmlyZWZveCA9IHVzZXJBZ2VudC5pbmRleE9mKCdmaXJlZm94JykgIT09IC0xO1xudmFyIFdIRUVMX0VWRU5UUyA9IElOUFVUX0VWRU5UX1RZUEVTLldIRUVMX0VWRU5UUztcbnZhciBFVkVOVF9UWVBFID0gJ3doZWVsJztcbnZhciBXSEVFTF9ERUxUQV9NQUdJQ19TQ0FMRVIgPSA0LjAwMDI0NDE0MDYyNTtcbnZhciBXSEVFTF9ERUxUQV9QRVJfTElORSA9IDQwO1xudmFyIFNISUZUX01VTFRJUExJRVIgPSAwLjI1O1xuXG52YXIgV2hlZWxJbnB1dCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFdoZWVsSW5wdXQoZWxlbWVudCwgY2FsbGJhY2spIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHt9O1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFdoZWVsSW5wdXQpO1xuXG4gICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcbiAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgdGhpcy5vcHRpb25zID0gT2JqZWN0LmFzc2lnbih7XG4gICAgICBlbmFibGU6IHRydWVcbiAgICB9LCBvcHRpb25zKTtcbiAgICB0aGlzLmV2ZW50cyA9IFdIRUVMX0VWRU5UUy5jb25jYXQob3B0aW9ucy5ldmVudHMgfHwgW10pO1xuICAgIHRoaXMuaGFuZGxlRXZlbnQgPSB0aGlzLmhhbmRsZUV2ZW50LmJpbmQodGhpcyk7XG4gICAgdGhpcy5ldmVudHMuZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIHJldHVybiBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIF90aGlzLmhhbmRsZUV2ZW50LCBwYXNzaXZlU3VwcG9ydGVkID8ge1xuICAgICAgICBwYXNzaXZlOiBmYWxzZVxuICAgICAgfSA6IGZhbHNlKTtcbiAgICB9KTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhXaGVlbElucHV0LCBbe1xuICAgIGtleTogXCJkZXN0cm95XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgdGhpcy5ldmVudHMuZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzMi5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQsIF90aGlzMi5oYW5kbGVFdmVudCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZW5hYmxlRXZlbnRUeXBlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGVuYWJsZUV2ZW50VHlwZShldmVudFR5cGUsIGVuYWJsZWQpIHtcbiAgICAgIGlmIChldmVudFR5cGUgPT09IEVWRU5UX1RZUEUpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmVuYWJsZSA9IGVuYWJsZWQ7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImhhbmRsZUV2ZW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGhhbmRsZUV2ZW50KGV2ZW50KSB7XG4gICAgICBpZiAoIXRoaXMub3B0aW9ucy5lbmFibGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgdmFsdWUgPSBldmVudC5kZWx0YVk7XG5cbiAgICAgIGlmICh3aW5kb3cuV2hlZWxFdmVudCkge1xuICAgICAgICBpZiAoZmlyZWZveCAmJiBldmVudC5kZWx0YU1vZGUgPT09IHdpbmRvdy5XaGVlbEV2ZW50LkRPTV9ERUxUQV9QSVhFTCkge1xuICAgICAgICAgIHZhbHVlIC89IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV2ZW50LmRlbHRhTW9kZSA9PT0gd2luZG93LldoZWVsRXZlbnQuRE9NX0RFTFRBX0xJTkUpIHtcbiAgICAgICAgICB2YWx1ZSAqPSBXSEVFTF9ERUxUQV9QRVJfTElORTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgd2hlZWxQb3NpdGlvbiA9IHtcbiAgICAgICAgeDogZXZlbnQuY2xpZW50WCxcbiAgICAgICAgeTogZXZlbnQuY2xpZW50WVxuICAgICAgfTtcblxuICAgICAgaWYgKHZhbHVlICE9PSAwICYmIHZhbHVlICUgV0hFRUxfREVMVEFfTUFHSUNfU0NBTEVSID09PSAwKSB7XG4gICAgICAgIHZhbHVlID0gTWF0aC5mbG9vcih2YWx1ZSAvIFdIRUVMX0RFTFRBX01BR0lDX1NDQUxFUik7XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudC5zaGlmdEtleSAmJiB2YWx1ZSkge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlICogU0hJRlRfTVVMVElQTElFUjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fb25XaGVlbChldmVudCwgLXZhbHVlLCB3aGVlbFBvc2l0aW9uKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiX29uV2hlZWxcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gX29uV2hlZWwoc3JjRXZlbnQsIGRlbHRhLCBwb3NpdGlvbikge1xuICAgICAgdGhpcy5jYWxsYmFjayh7XG4gICAgICAgIHR5cGU6IEVWRU5UX1RZUEUsXG4gICAgICAgIGNlbnRlcjogcG9zaXRpb24sXG4gICAgICAgIGRlbHRhOiBkZWx0YSxcbiAgICAgICAgc3JjRXZlbnQ6IHNyY0V2ZW50LFxuICAgICAgICBwb2ludGVyVHlwZTogJ21vdXNlJyxcbiAgICAgICAgdGFyZ2V0OiBzcmNFdmVudC50YXJnZXRcbiAgICAgIH0pO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBXaGVlbElucHV0O1xufSgpO1xuXG5leHBvcnQgeyBXaGVlbElucHV0IGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgX2NsYXNzQ2FsbENoZWNrIGZyb20gXCIvaG9tZS9ydW5uZXIvd29yay9qdXN0aWNlNDAtdG9vbC9qdXN0aWNlNDAtdG9vbC9jbGllbnQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NsYXNzQ2FsbENoZWNrXCI7XG5pbXBvcnQgX2NyZWF0ZUNsYXNzIGZyb20gXCIvaG9tZS9ydW5uZXIvd29yay9qdXN0aWNlNDAtdG9vbC9qdXN0aWNlNDAtdG9vbC9jbGllbnQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NyZWF0ZUNsYXNzXCI7XG5pbXBvcnQgeyBJTlBVVF9FVkVOVF9UWVBFUyB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG52YXIgTU9VU0VfRVZFTlRTID0gSU5QVVRfRVZFTlRfVFlQRVMuTU9VU0VfRVZFTlRTO1xudmFyIE1PVkVfRVZFTlRfVFlQRSA9ICdwb2ludGVybW92ZSc7XG52YXIgT1ZFUl9FVkVOVF9UWVBFID0gJ3BvaW50ZXJvdmVyJztcbnZhciBPVVRfRVZFTlRfVFlQRSA9ICdwb2ludGVyb3V0JztcbnZhciBMRUFWRV9FVkVOVF9UWVBFID0gJ3BvaW50ZXJsZWF2ZSc7XG5cbnZhciBNb3ZlSW5wdXQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBNb3ZlSW5wdXQoZWxlbWVudCwgY2FsbGJhY2spIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHt9O1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIE1vdmVJbnB1dCk7XG5cbiAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICB0aGlzLnByZXNzZWQgPSBmYWxzZTtcbiAgICB0aGlzLm9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHtcbiAgICAgIGVuYWJsZTogdHJ1ZVxuICAgIH0sIG9wdGlvbnMpO1xuICAgIHRoaXMuZW5hYmxlTW92ZUV2ZW50ID0gdGhpcy5vcHRpb25zLmVuYWJsZTtcbiAgICB0aGlzLmVuYWJsZUxlYXZlRXZlbnQgPSB0aGlzLm9wdGlvbnMuZW5hYmxlO1xuICAgIHRoaXMuZW5hYmxlT3V0RXZlbnQgPSB0aGlzLm9wdGlvbnMuZW5hYmxlO1xuICAgIHRoaXMuZW5hYmxlT3ZlckV2ZW50ID0gdGhpcy5vcHRpb25zLmVuYWJsZTtcbiAgICB0aGlzLmV2ZW50cyA9IE1PVVNFX0VWRU5UUy5jb25jYXQob3B0aW9ucy5ldmVudHMgfHwgW10pO1xuICAgIHRoaXMuaGFuZGxlRXZlbnQgPSB0aGlzLmhhbmRsZUV2ZW50LmJpbmQodGhpcyk7XG4gICAgdGhpcy5ldmVudHMuZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIHJldHVybiBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIF90aGlzLmhhbmRsZUV2ZW50KTtcbiAgICB9KTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhNb3ZlSW5wdXQsIFt7XG4gICAga2V5OiBcImRlc3Ryb3lcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB0aGlzLmV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICByZXR1cm4gX3RoaXMyLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgX3RoaXMyLmhhbmRsZUV2ZW50KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJlbmFibGVFdmVudFR5cGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZW5hYmxlRXZlbnRUeXBlKGV2ZW50VHlwZSwgZW5hYmxlZCkge1xuICAgICAgaWYgKGV2ZW50VHlwZSA9PT0gTU9WRV9FVkVOVF9UWVBFKSB7XG4gICAgICAgIHRoaXMuZW5hYmxlTW92ZUV2ZW50ID0gZW5hYmxlZDtcbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50VHlwZSA9PT0gT1ZFUl9FVkVOVF9UWVBFKSB7XG4gICAgICAgIHRoaXMuZW5hYmxlT3ZlckV2ZW50ID0gZW5hYmxlZDtcbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50VHlwZSA9PT0gT1VUX0VWRU5UX1RZUEUpIHtcbiAgICAgICAgdGhpcy5lbmFibGVPdXRFdmVudCA9IGVuYWJsZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudFR5cGUgPT09IExFQVZFX0VWRU5UX1RZUEUpIHtcbiAgICAgICAgdGhpcy5lbmFibGVMZWF2ZUV2ZW50ID0gZW5hYmxlZDtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaGFuZGxlRXZlbnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlRXZlbnQoZXZlbnQpIHtcbiAgICAgIHRoaXMuaGFuZGxlT3ZlckV2ZW50KGV2ZW50KTtcbiAgICAgIHRoaXMuaGFuZGxlT3V0RXZlbnQoZXZlbnQpO1xuICAgICAgdGhpcy5oYW5kbGVMZWF2ZUV2ZW50KGV2ZW50KTtcbiAgICAgIHRoaXMuaGFuZGxlTW92ZUV2ZW50KGV2ZW50KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaGFuZGxlT3ZlckV2ZW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGhhbmRsZU92ZXJFdmVudChldmVudCkge1xuICAgICAgaWYgKHRoaXMuZW5hYmxlT3ZlckV2ZW50KSB7XG4gICAgICAgIGlmIChldmVudC50eXBlID09PSAnbW91c2VvdmVyJykge1xuICAgICAgICAgIHRoaXMuY2FsbGJhY2soe1xuICAgICAgICAgICAgdHlwZTogT1ZFUl9FVkVOVF9UWVBFLFxuICAgICAgICAgICAgc3JjRXZlbnQ6IGV2ZW50LFxuICAgICAgICAgICAgcG9pbnRlclR5cGU6ICdtb3VzZScsXG4gICAgICAgICAgICB0YXJnZXQ6IGV2ZW50LnRhcmdldFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImhhbmRsZU91dEV2ZW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGhhbmRsZU91dEV2ZW50KGV2ZW50KSB7XG4gICAgICBpZiAodGhpcy5lbmFibGVPdXRFdmVudCkge1xuICAgICAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ21vdXNlb3V0Jykge1xuICAgICAgICAgIHRoaXMuY2FsbGJhY2soe1xuICAgICAgICAgICAgdHlwZTogT1VUX0VWRU5UX1RZUEUsXG4gICAgICAgICAgICBzcmNFdmVudDogZXZlbnQsXG4gICAgICAgICAgICBwb2ludGVyVHlwZTogJ21vdXNlJyxcbiAgICAgICAgICAgIHRhcmdldDogZXZlbnQudGFyZ2V0XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaGFuZGxlTGVhdmVFdmVudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVMZWF2ZUV2ZW50KGV2ZW50KSB7XG4gICAgICBpZiAodGhpcy5lbmFibGVMZWF2ZUV2ZW50KSB7XG4gICAgICAgIGlmIChldmVudC50eXBlID09PSAnbW91c2VsZWF2ZScpIHtcbiAgICAgICAgICB0aGlzLmNhbGxiYWNrKHtcbiAgICAgICAgICAgIHR5cGU6IExFQVZFX0VWRU5UX1RZUEUsXG4gICAgICAgICAgICBzcmNFdmVudDogZXZlbnQsXG4gICAgICAgICAgICBwb2ludGVyVHlwZTogJ21vdXNlJyxcbiAgICAgICAgICAgIHRhcmdldDogZXZlbnQudGFyZ2V0XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaGFuZGxlTW92ZUV2ZW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGhhbmRsZU1vdmVFdmVudChldmVudCkge1xuICAgICAgaWYgKHRoaXMuZW5hYmxlTW92ZUV2ZW50KSB7XG4gICAgICAgIHN3aXRjaCAoZXZlbnQudHlwZSkge1xuICAgICAgICAgIGNhc2UgJ21vdXNlZG93bic6XG4gICAgICAgICAgICBpZiAoZXZlbnQuYnV0dG9uID49IDApIHtcbiAgICAgICAgICAgICAgdGhpcy5wcmVzc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICdtb3VzZW1vdmUnOlxuICAgICAgICAgICAgaWYgKGV2ZW50LndoaWNoID09PSAwKSB7XG4gICAgICAgICAgICAgIHRoaXMucHJlc3NlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIXRoaXMucHJlc3NlZCkge1xuICAgICAgICAgICAgICB0aGlzLmNhbGxiYWNrKHtcbiAgICAgICAgICAgICAgICB0eXBlOiBNT1ZFX0VWRU5UX1RZUEUsXG4gICAgICAgICAgICAgICAgc3JjRXZlbnQ6IGV2ZW50LFxuICAgICAgICAgICAgICAgIHBvaW50ZXJUeXBlOiAnbW91c2UnLFxuICAgICAgICAgICAgICAgIHRhcmdldDogZXZlbnQudGFyZ2V0XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ21vdXNldXAnOlxuICAgICAgICAgICAgdGhpcy5wcmVzc2VkID0gZmFsc2U7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gTW92ZUlucHV0O1xufSgpO1xuXG5leHBvcnQgeyBNb3ZlSW5wdXQgYXMgZGVmYXVsdCB9OyIsImltcG9ydCBfY2xhc3NDYWxsQ2hlY2sgZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL2p1c3RpY2U0MC10b29sL2p1c3RpY2U0MC10b29sL2NsaWVudC9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY2xhc3NDYWxsQ2hlY2tcIjtcbmltcG9ydCBfY3JlYXRlQ2xhc3MgZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL2p1c3RpY2U0MC10b29sL2p1c3RpY2U0MC10b29sL2NsaWVudC9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY3JlYXRlQ2xhc3NcIjtcbmltcG9ydCB7IElOUFVUX0VWRU5UX1RZUEVTIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbnZhciBLRVlfRVZFTlRTID0gSU5QVVRfRVZFTlRfVFlQRVMuS0VZX0VWRU5UUztcbnZhciBET1dOX0VWRU5UX1RZUEUgPSAna2V5ZG93bic7XG52YXIgVVBfRVZFTlRfVFlQRSA9ICdrZXl1cCc7XG5cbnZhciBLZXlJbnB1dCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEtleUlucHV0KGVsZW1lbnQsIGNhbGxiYWNrKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiB7fTtcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBLZXlJbnB1dCk7XG5cbiAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICB0aGlzLm9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHtcbiAgICAgIGVuYWJsZTogdHJ1ZVxuICAgIH0sIG9wdGlvbnMpO1xuICAgIHRoaXMuZW5hYmxlRG93bkV2ZW50ID0gdGhpcy5vcHRpb25zLmVuYWJsZTtcbiAgICB0aGlzLmVuYWJsZVVwRXZlbnQgPSB0aGlzLm9wdGlvbnMuZW5hYmxlO1xuICAgIHRoaXMuZXZlbnRzID0gS0VZX0VWRU5UUy5jb25jYXQob3B0aW9ucy5ldmVudHMgfHwgW10pO1xuICAgIHRoaXMuaGFuZGxlRXZlbnQgPSB0aGlzLmhhbmRsZUV2ZW50LmJpbmQodGhpcyk7XG4gICAgZWxlbWVudC50YWJJbmRleCA9IG9wdGlvbnMudGFiSW5kZXggfHwgMDtcbiAgICBlbGVtZW50LnN0eWxlLm91dGxpbmUgPSAnbm9uZSc7XG4gICAgdGhpcy5ldmVudHMuZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIHJldHVybiBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIF90aGlzLmhhbmRsZUV2ZW50KTtcbiAgICB9KTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhLZXlJbnB1dCwgW3tcbiAgICBrZXk6IFwiZGVzdHJveVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHRoaXMuZXZlbnRzLmZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHJldHVybiBfdGhpczIuZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50LCBfdGhpczIuaGFuZGxlRXZlbnQpO1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImVuYWJsZUV2ZW50VHlwZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBlbmFibGVFdmVudFR5cGUoZXZlbnRUeXBlLCBlbmFibGVkKSB7XG4gICAgICBpZiAoZXZlbnRUeXBlID09PSBET1dOX0VWRU5UX1RZUEUpIHtcbiAgICAgICAgdGhpcy5lbmFibGVEb3duRXZlbnQgPSBlbmFibGVkO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnRUeXBlID09PSBVUF9FVkVOVF9UWVBFKSB7XG4gICAgICAgIHRoaXMuZW5hYmxlVXBFdmVudCA9IGVuYWJsZWQ7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImhhbmRsZUV2ZW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGhhbmRsZUV2ZW50KGV2ZW50KSB7XG4gICAgICB2YXIgdGFyZ2V0RWxlbWVudCA9IGV2ZW50LnRhcmdldCB8fCBldmVudC5zcmNFbGVtZW50O1xuXG4gICAgICBpZiAodGFyZ2V0RWxlbWVudC50YWdOYW1lID09PSAnSU5QVVQnICYmIHRhcmdldEVsZW1lbnQudHlwZSA9PT0gJ3RleHQnIHx8IHRhcmdldEVsZW1lbnQudGFnTmFtZSA9PT0gJ1RFWFRBUkVBJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmVuYWJsZURvd25FdmVudCAmJiBldmVudC50eXBlID09PSAna2V5ZG93bicpIHtcbiAgICAgICAgdGhpcy5jYWxsYmFjayh7XG4gICAgICAgICAgdHlwZTogRE9XTl9FVkVOVF9UWVBFLFxuICAgICAgICAgIHNyY0V2ZW50OiBldmVudCxcbiAgICAgICAgICBrZXk6IGV2ZW50LmtleSxcbiAgICAgICAgICB0YXJnZXQ6IGV2ZW50LnRhcmdldFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuZW5hYmxlVXBFdmVudCAmJiBldmVudC50eXBlID09PSAna2V5dXAnKSB7XG4gICAgICAgIHRoaXMuY2FsbGJhY2soe1xuICAgICAgICAgIHR5cGU6IFVQX0VWRU5UX1RZUEUsXG4gICAgICAgICAgc3JjRXZlbnQ6IGV2ZW50LFxuICAgICAgICAgIGtleTogZXZlbnQua2V5LFxuICAgICAgICAgIHRhcmdldDogZXZlbnQudGFyZ2V0XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBLZXlJbnB1dDtcbn0oKTtcblxuZXhwb3J0IHsgS2V5SW5wdXQgYXMgZGVmYXVsdCB9OyIsImltcG9ydCBfY2xhc3NDYWxsQ2hlY2sgZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL2p1c3RpY2U0MC10b29sL2p1c3RpY2U0MC10b29sL2NsaWVudC9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY2xhc3NDYWxsQ2hlY2tcIjtcbmltcG9ydCBfY3JlYXRlQ2xhc3MgZnJvbSBcIi9ob21lL3J1bm5lci93b3JrL2p1c3RpY2U0MC10b29sL2p1c3RpY2U0MC10b29sL2NsaWVudC9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY3JlYXRlQ2xhc3NcIjtcbnZhciBFVkVOVF9UWVBFID0gJ2NvbnRleHRtZW51JztcblxudmFyIENvbnRleHRtZW51SW5wdXQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBDb250ZXh0bWVudUlucHV0KGVsZW1lbnQsIGNhbGxiYWNrKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHt9O1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIENvbnRleHRtZW51SW5wdXQpO1xuXG4gICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcbiAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgdGhpcy5vcHRpb25zID0gT2JqZWN0LmFzc2lnbih7XG4gICAgICBlbmFibGU6IHRydWVcbiAgICB9LCBvcHRpb25zKTtcbiAgICB0aGlzLmhhbmRsZUV2ZW50ID0gdGhpcy5oYW5kbGVFdmVudC5iaW5kKHRoaXMpO1xuICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY29udGV4dG1lbnUnLCB0aGlzLmhhbmRsZUV2ZW50KTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhDb250ZXh0bWVudUlucHV0LCBbe1xuICAgIGtleTogXCJkZXN0cm95XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICB0aGlzLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY29udGV4dG1lbnUnLCB0aGlzLmhhbmRsZUV2ZW50KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZW5hYmxlRXZlbnRUeXBlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGVuYWJsZUV2ZW50VHlwZShldmVudFR5cGUsIGVuYWJsZWQpIHtcbiAgICAgIGlmIChldmVudFR5cGUgPT09IEVWRU5UX1RZUEUpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmVuYWJsZSA9IGVuYWJsZWQ7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImhhbmRsZUV2ZW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGhhbmRsZUV2ZW50KGV2ZW50KSB7XG4gICAgICBpZiAoIXRoaXMub3B0aW9ucy5lbmFibGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmNhbGxiYWNrKHtcbiAgICAgICAgdHlwZTogRVZFTlRfVFlQRSxcbiAgICAgICAgY2VudGVyOiB7XG4gICAgICAgICAgeDogZXZlbnQuY2xpZW50WCxcbiAgICAgICAgICB5OiBldmVudC5jbGllbnRZXG4gICAgICAgIH0sXG4gICAgICAgIHNyY0V2ZW50OiBldmVudCxcbiAgICAgICAgcG9pbnRlclR5cGU6ICdtb3VzZScsXG4gICAgICAgIHRhcmdldDogZXZlbnQudGFyZ2V0XG4gICAgICB9KTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gQ29udGV4dG1lbnVJbnB1dDtcbn0oKTtcblxuZXhwb3J0IHsgQ29udGV4dG1lbnVJbnB1dCBhcyBkZWZhdWx0IH07IiwidmFyIERPV05fRVZFTlQgPSAxO1xudmFyIE1PVkVfRVZFTlQgPSAyO1xudmFyIFVQX0VWRU5UID0gNDtcbnZhciBNT1VTRV9FVkVOVFMgPSB7XG4gIHBvaW50ZXJkb3duOiBET1dOX0VWRU5ULFxuICBwb2ludGVybW92ZTogTU9WRV9FVkVOVCxcbiAgcG9pbnRlcnVwOiBVUF9FVkVOVCxcbiAgbW91c2Vkb3duOiBET1dOX0VWRU5ULFxuICBtb3VzZW1vdmU6IE1PVkVfRVZFTlQsXG4gIG1vdXNldXA6IFVQX0VWRU5UXG59O1xudmFyIE1PVVNFX0VWRU5UX1dISUNIX0xFRlQgPSAxO1xudmFyIE1PVVNFX0VWRU5UX1dISUNIX01JRERMRSA9IDI7XG52YXIgTU9VU0VfRVZFTlRfV0hJQ0hfUklHSFQgPSAzO1xudmFyIE1PVVNFX0VWRU5UX0JVVFRPTl9MRUZUID0gMDtcbnZhciBNT1VTRV9FVkVOVF9CVVRUT05fTUlERExFID0gMTtcbnZhciBNT1VTRV9FVkVOVF9CVVRUT05fUklHSFQgPSAyO1xudmFyIE1PVVNFX0VWRU5UX0JVVFRPTlNfTEVGVF9NQVNLID0gMTtcbnZhciBNT1VTRV9FVkVOVF9CVVRUT05TX1JJR0hUX01BU0sgPSAyO1xudmFyIE1PVVNFX0VWRU5UX0JVVFRPTlNfTUlERExFX01BU0sgPSA0O1xuZXhwb3J0IGZ1bmN0aW9uIHdoaWNoQnV0dG9ucyhldmVudCkge1xuICB2YXIgZXZlbnRUeXBlID0gTU9VU0VfRVZFTlRTW2V2ZW50LnNyY0V2ZW50LnR5cGVdO1xuXG4gIGlmICghZXZlbnRUeXBlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgX2V2ZW50JHNyY0V2ZW50ID0gZXZlbnQuc3JjRXZlbnQsXG4gICAgICBidXR0b25zID0gX2V2ZW50JHNyY0V2ZW50LmJ1dHRvbnMsXG4gICAgICBidXR0b24gPSBfZXZlbnQkc3JjRXZlbnQuYnV0dG9uLFxuICAgICAgd2hpY2ggPSBfZXZlbnQkc3JjRXZlbnQud2hpY2g7XG4gIHZhciBsZWZ0QnV0dG9uID0gZmFsc2U7XG4gIHZhciBtaWRkbGVCdXR0b24gPSBmYWxzZTtcbiAgdmFyIHJpZ2h0QnV0dG9uID0gZmFsc2U7XG5cbiAgaWYgKGV2ZW50VHlwZSA9PT0gVVBfRVZFTlQgfHwgZXZlbnRUeXBlID09PSBNT1ZFX0VWRU5UICYmICFOdW1iZXIuaXNGaW5pdGUoYnV0dG9ucykpIHtcbiAgICBsZWZ0QnV0dG9uID0gd2hpY2ggPT09IE1PVVNFX0VWRU5UX1dISUNIX0xFRlQ7XG4gICAgbWlkZGxlQnV0dG9uID0gd2hpY2ggPT09IE1PVVNFX0VWRU5UX1dISUNIX01JRERMRTtcbiAgICByaWdodEJ1dHRvbiA9IHdoaWNoID09PSBNT1VTRV9FVkVOVF9XSElDSF9SSUdIVDtcbiAgfSBlbHNlIGlmIChldmVudFR5cGUgPT09IE1PVkVfRVZFTlQpIHtcbiAgICBsZWZ0QnV0dG9uID0gQm9vbGVhbihidXR0b25zICYgTU9VU0VfRVZFTlRfQlVUVE9OU19MRUZUX01BU0spO1xuICAgIG1pZGRsZUJ1dHRvbiA9IEJvb2xlYW4oYnV0dG9ucyAmIE1PVVNFX0VWRU5UX0JVVFRPTlNfTUlERExFX01BU0spO1xuICAgIHJpZ2h0QnV0dG9uID0gQm9vbGVhbihidXR0b25zICYgTU9VU0VfRVZFTlRfQlVUVE9OU19SSUdIVF9NQVNLKTtcbiAgfSBlbHNlIGlmIChldmVudFR5cGUgPT09IERPV05fRVZFTlQpIHtcbiAgICBsZWZ0QnV0dG9uID0gYnV0dG9uID09PSBNT1VTRV9FVkVOVF9CVVRUT05fTEVGVDtcbiAgICBtaWRkbGVCdXR0b24gPSBidXR0b24gPT09IE1PVVNFX0VWRU5UX0JVVFRPTl9NSURETEU7XG4gICAgcmlnaHRCdXR0b24gPSBidXR0b24gPT09IE1PVVNFX0VWRU5UX0JVVFRPTl9SSUdIVDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbGVmdEJ1dHRvbjogbGVmdEJ1dHRvbixcbiAgICBtaWRkbGVCdXR0b246IG1pZGRsZUJ1dHRvbixcbiAgICByaWdodEJ1dHRvbjogcmlnaHRCdXR0b25cbiAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRPZmZzZXRQb3NpdGlvbihldmVudCwgcm9vdEVsZW1lbnQpIHtcbiAgdmFyIHNyY0V2ZW50ID0gZXZlbnQuc3JjRXZlbnQ7XG5cbiAgaWYgKCFldmVudC5jZW50ZXIgJiYgIU51bWJlci5pc0Zpbml0ZShzcmNFdmVudC5jbGllbnRYKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIGNlbnRlciA9IGV2ZW50LmNlbnRlciB8fCB7XG4gICAgeDogc3JjRXZlbnQuY2xpZW50WCxcbiAgICB5OiBzcmNFdmVudC5jbGllbnRZXG4gIH07XG4gIHZhciByZWN0ID0gcm9vdEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIHZhciBzY2FsZVggPSByZWN0LndpZHRoIC8gcm9vdEVsZW1lbnQub2Zmc2V0V2lkdGggfHwgMTtcbiAgdmFyIHNjYWxlWSA9IHJlY3QuaGVpZ2h0IC8gcm9vdEVsZW1lbnQub2Zmc2V0SGVpZ2h0IHx8IDE7XG4gIHZhciBvZmZzZXRDZW50ZXIgPSB7XG4gICAgeDogKGNlbnRlci54IC0gcmVjdC5sZWZ0IC0gcm9vdEVsZW1lbnQuY2xpZW50TGVmdCkgLyBzY2FsZVgsXG4gICAgeTogKGNlbnRlci55IC0gcmVjdC50b3AgLSByb290RWxlbWVudC5jbGllbnRUb3ApIC8gc2NhbGVZXG4gIH07XG4gIHJldHVybiB7XG4gICAgY2VudGVyOiBjZW50ZXIsXG4gICAgb2Zmc2V0Q2VudGVyOiBvZmZzZXRDZW50ZXJcbiAgfTtcbn0iLCJpbXBvcnQgX2NsYXNzQ2FsbENoZWNrIGZyb20gXCIvaG9tZS9ydW5uZXIvd29yay9qdXN0aWNlNDAtdG9vbC9qdXN0aWNlNDAtdG9vbC9jbGllbnQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NsYXNzQ2FsbENoZWNrXCI7XG5pbXBvcnQgX2NyZWF0ZUNsYXNzIGZyb20gXCIvaG9tZS9ydW5uZXIvd29yay9qdXN0aWNlNDAtdG9vbC9qdXN0aWNlNDAtdG9vbC9jbGllbnQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NyZWF0ZUNsYXNzXCI7XG5pbXBvcnQgeyB3aGljaEJ1dHRvbnMsIGdldE9mZnNldFBvc2l0aW9uIH0gZnJvbSAnLi9ldmVudC11dGlscyc7XG52YXIgREVGQVVMVF9PUFRJT05TID0ge1xuICBzcmNFbGVtZW50OiAncm9vdCcsXG4gIHByaW9yaXR5OiAwXG59O1xuXG52YXIgRXZlbnRSZWdpc3RyYXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBFdmVudFJlZ2lzdHJhcihldmVudE1hbmFnZXIpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXZlbnRSZWdpc3RyYXIpO1xuXG4gICAgdGhpcy5ldmVudE1hbmFnZXIgPSBldmVudE1hbmFnZXI7XG4gICAgdGhpcy5oYW5kbGVycyA9IFtdO1xuICAgIHRoaXMuaGFuZGxlcnNCeUVsZW1lbnQgPSBuZXcgTWFwKCk7XG4gICAgdGhpcy5oYW5kbGVFdmVudCA9IHRoaXMuaGFuZGxlRXZlbnQuYmluZCh0aGlzKTtcbiAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhFdmVudFJlZ2lzdHJhciwgW3tcbiAgICBrZXk6IFwiaXNFbXB0eVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpc0VtcHR5KCkge1xuICAgICAgcmV0dXJuICF0aGlzLl9hY3RpdmU7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImFkZFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBhZGQodHlwZSwgaGFuZGxlciwgb3B0cykge1xuICAgICAgdmFyIG9uY2UgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6IGZhbHNlO1xuICAgICAgdmFyIHBhc3NpdmUgPSBhcmd1bWVudHMubGVuZ3RoID4gNCAmJiBhcmd1bWVudHNbNF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s0XSA6IGZhbHNlO1xuICAgICAgdmFyIGhhbmRsZXJzID0gdGhpcy5oYW5kbGVycyxcbiAgICAgICAgICBoYW5kbGVyc0J5RWxlbWVudCA9IHRoaXMuaGFuZGxlcnNCeUVsZW1lbnQ7XG5cbiAgICAgIGlmIChvcHRzICYmICh0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcgfHwgb3B0cy5hZGRFdmVudExpc3RlbmVyKSkge1xuICAgICAgICBvcHRzID0ge1xuICAgICAgICAgIHNyY0VsZW1lbnQ6IG9wdHNcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgb3B0cyA9IG9wdHMgPyBPYmplY3QuYXNzaWduKHt9LCBERUZBVUxUX09QVElPTlMsIG9wdHMpIDogREVGQVVMVF9PUFRJT05TO1xuICAgICAgdmFyIGVudHJpZXMgPSBoYW5kbGVyc0J5RWxlbWVudC5nZXQob3B0cy5zcmNFbGVtZW50KTtcblxuICAgICAgaWYgKCFlbnRyaWVzKSB7XG4gICAgICAgIGVudHJpZXMgPSBbXTtcbiAgICAgICAgaGFuZGxlcnNCeUVsZW1lbnQuc2V0KG9wdHMuc3JjRWxlbWVudCwgZW50cmllcyk7XG4gICAgICB9XG5cbiAgICAgIHZhciBlbnRyeSA9IHtcbiAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgaGFuZGxlcjogaGFuZGxlcixcbiAgICAgICAgc3JjRWxlbWVudDogb3B0cy5zcmNFbGVtZW50LFxuICAgICAgICBwcmlvcml0eTogb3B0cy5wcmlvcml0eVxuICAgICAgfTtcblxuICAgICAgaWYgKG9uY2UpIHtcbiAgICAgICAgZW50cnkub25jZSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChwYXNzaXZlKSB7XG4gICAgICAgIGVudHJ5LnBhc3NpdmUgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBoYW5kbGVycy5wdXNoKGVudHJ5KTtcbiAgICAgIHRoaXMuX2FjdGl2ZSA9IHRoaXMuX2FjdGl2ZSB8fCAhZW50cnkucGFzc2l2ZTtcbiAgICAgIHZhciBpbnNlcnRQb3NpdGlvbiA9IGVudHJpZXMubGVuZ3RoIC0gMTtcblxuICAgICAgd2hpbGUgKGluc2VydFBvc2l0aW9uID49IDApIHtcbiAgICAgICAgaWYgKGVudHJpZXNbaW5zZXJ0UG9zaXRpb25dLnByaW9yaXR5ID49IGVudHJ5LnByaW9yaXR5KSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBpbnNlcnRQb3NpdGlvbi0tO1xuICAgICAgfVxuXG4gICAgICBlbnRyaWVzLnNwbGljZShpbnNlcnRQb3NpdGlvbiArIDEsIDAsIGVudHJ5KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVtb3ZlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbW92ZSh0eXBlLCBoYW5kbGVyKSB7XG4gICAgICB2YXIgaGFuZGxlcnMgPSB0aGlzLmhhbmRsZXJzLFxuICAgICAgICAgIGhhbmRsZXJzQnlFbGVtZW50ID0gdGhpcy5oYW5kbGVyc0J5RWxlbWVudDtcblxuICAgICAgZm9yICh2YXIgaSA9IGhhbmRsZXJzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IGhhbmRsZXJzW2ldO1xuXG4gICAgICAgIGlmIChlbnRyeS50eXBlID09PSB0eXBlICYmIGVudHJ5LmhhbmRsZXIgPT09IGhhbmRsZXIpIHtcbiAgICAgICAgICBoYW5kbGVycy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgdmFyIGVudHJpZXMgPSBoYW5kbGVyc0J5RWxlbWVudC5nZXQoZW50cnkuc3JjRWxlbWVudCk7XG4gICAgICAgICAgZW50cmllcy5zcGxpY2UoZW50cmllcy5pbmRleE9mKGVudHJ5KSwgMSk7XG5cbiAgICAgICAgICBpZiAoZW50cmllcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGhhbmRsZXJzQnlFbGVtZW50LmRlbGV0ZShlbnRyeS5zcmNFbGVtZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5fYWN0aXZlID0gaGFuZGxlcnMuc29tZShmdW5jdGlvbiAoZW50cnkpIHtcbiAgICAgICAgcmV0dXJuICFlbnRyeS5wYXNzaXZlO1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImhhbmRsZUV2ZW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGhhbmRsZUV2ZW50KGV2ZW50KSB7XG4gICAgICBpZiAodGhpcy5pc0VtcHR5KCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgbWpvbG5pckV2ZW50ID0gdGhpcy5fbm9ybWFsaXplRXZlbnQoZXZlbnQpO1xuXG4gICAgICB2YXIgdGFyZ2V0ID0gZXZlbnQuc3JjRXZlbnQudGFyZ2V0O1xuXG4gICAgICB3aGlsZSAodGFyZ2V0ICYmIHRhcmdldCAhPT0gbWpvbG5pckV2ZW50LnJvb3RFbGVtZW50KSB7XG4gICAgICAgIHRoaXMuX2VtaXQobWpvbG5pckV2ZW50LCB0YXJnZXQpO1xuXG4gICAgICAgIGlmIChtam9sbmlyRXZlbnQuaGFuZGxlZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRhcmdldCA9IHRhcmdldC5wYXJlbnROb2RlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9lbWl0KG1qb2xuaXJFdmVudCwgJ3Jvb3QnKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiX2VtaXRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2VtaXQoZXZlbnQsIHNyY0VsZW1lbnQpIHtcbiAgICAgIHZhciBlbnRyaWVzID0gdGhpcy5oYW5kbGVyc0J5RWxlbWVudC5nZXQoc3JjRWxlbWVudCk7XG5cbiAgICAgIGlmIChlbnRyaWVzKSB7XG4gICAgICAgIHZhciBpbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQgPSBmYWxzZTtcblxuICAgICAgICB2YXIgc3RvcFByb3BhZ2F0aW9uID0gZnVuY3Rpb24gc3RvcFByb3BhZ2F0aW9uKCkge1xuICAgICAgICAgIGV2ZW50LmhhbmRsZWQgPSB0cnVlO1xuICAgICAgICB9O1xuXG4gICAgICAgIHZhciBzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24gPSBmdW5jdGlvbiBzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSB7XG4gICAgICAgICAgZXZlbnQuaGFuZGxlZCA9IHRydWU7XG4gICAgICAgICAgaW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgZW50cmllc1RvUmVtb3ZlID0gW107XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbnRyaWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIF9lbnRyaWVzJGkgPSBlbnRyaWVzW2ldLFxuICAgICAgICAgICAgICB0eXBlID0gX2VudHJpZXMkaS50eXBlLFxuICAgICAgICAgICAgICBoYW5kbGVyID0gX2VudHJpZXMkaS5oYW5kbGVyLFxuICAgICAgICAgICAgICBvbmNlID0gX2VudHJpZXMkaS5vbmNlO1xuICAgICAgICAgIGhhbmRsZXIoT2JqZWN0LmFzc2lnbih7fSwgZXZlbnQsIHtcbiAgICAgICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgICAgICBzdG9wUHJvcGFnYXRpb246IHN0b3BQcm9wYWdhdGlvbixcbiAgICAgICAgICAgIHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjogc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uXG4gICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgaWYgKG9uY2UpIHtcbiAgICAgICAgICAgIGVudHJpZXNUb1JlbW92ZS5wdXNoKGVudHJpZXNbaV0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChpbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBlbnRyaWVzVG9SZW1vdmUubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgdmFyIF9lbnRyaWVzVG9SZW1vdmUkX2kgPSBlbnRyaWVzVG9SZW1vdmVbX2ldLFxuICAgICAgICAgICAgICBfdHlwZSA9IF9lbnRyaWVzVG9SZW1vdmUkX2kudHlwZSxcbiAgICAgICAgICAgICAgX2hhbmRsZXIgPSBfZW50cmllc1RvUmVtb3ZlJF9pLmhhbmRsZXI7XG4gICAgICAgICAgdGhpcy5yZW1vdmUoX3R5cGUsIF9oYW5kbGVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJfbm9ybWFsaXplRXZlbnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gX25vcm1hbGl6ZUV2ZW50KGV2ZW50KSB7XG4gICAgICB2YXIgcm9vdEVsZW1lbnQgPSB0aGlzLmV2ZW50TWFuYWdlci5lbGVtZW50O1xuICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGV2ZW50LCB3aGljaEJ1dHRvbnMoZXZlbnQpLCBnZXRPZmZzZXRQb3NpdGlvbihldmVudCwgcm9vdEVsZW1lbnQpLCB7XG4gICAgICAgIGhhbmRsZWQ6IGZhbHNlLFxuICAgICAgICByb290RWxlbWVudDogcm9vdEVsZW1lbnRcbiAgICAgIH0pO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFdmVudFJlZ2lzdHJhcjtcbn0oKTtcblxuZXhwb3J0IHsgRXZlbnRSZWdpc3RyYXIgYXMgZGVmYXVsdCB9OyIsImltcG9ydCBfc2xpY2VkVG9BcnJheSBmcm9tIFwiL2hvbWUvcnVubmVyL3dvcmsvanVzdGljZTQwLXRvb2wvanVzdGljZTQwLXRvb2wvY2xpZW50L25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zbGljZWRUb0FycmF5XCI7XG5pbXBvcnQgX2NsYXNzQ2FsbENoZWNrIGZyb20gXCIvaG9tZS9ydW5uZXIvd29yay9qdXN0aWNlNDAtdG9vbC9qdXN0aWNlNDAtdG9vbC9jbGllbnQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NsYXNzQ2FsbENoZWNrXCI7XG5pbXBvcnQgX2NyZWF0ZUNsYXNzIGZyb20gXCIvaG9tZS9ydW5uZXIvd29yay9qdXN0aWNlNDAtdG9vbC9qdXN0aWNlNDAtdG9vbC9jbGllbnQvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NyZWF0ZUNsYXNzXCI7XG5cbmZ1bmN0aW9uIF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKG8sIGFsbG93QXJyYXlMaWtlKSB7IHZhciBpdCA9IHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdIHx8IG9bXCJAQGl0ZXJhdG9yXCJdOyBpZiAoIWl0KSB7IGlmIChBcnJheS5pc0FycmF5KG8pIHx8IChpdCA9IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvKSkgfHwgYWxsb3dBcnJheUxpa2UgJiYgbyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHsgaWYgKGl0KSBvID0gaXQ7IHZhciBpID0gMDsgdmFyIEYgPSBmdW5jdGlvbiBGKCkge307IHJldHVybiB7IHM6IEYsIG46IGZ1bmN0aW9uIG4oKSB7IGlmIChpID49IG8ubGVuZ3RoKSByZXR1cm4geyBkb25lOiB0cnVlIH07IHJldHVybiB7IGRvbmU6IGZhbHNlLCB2YWx1ZTogb1tpKytdIH07IH0sIGU6IGZ1bmN0aW9uIGUoX2UpIHsgdGhyb3cgX2U7IH0sIGY6IEYgfTsgfSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH0gdmFyIG5vcm1hbENvbXBsZXRpb24gPSB0cnVlLCBkaWRFcnIgPSBmYWxzZSwgZXJyOyByZXR1cm4geyBzOiBmdW5jdGlvbiBzKCkgeyBpdCA9IGl0LmNhbGwobyk7IH0sIG46IGZ1bmN0aW9uIG4oKSB7IHZhciBzdGVwID0gaXQubmV4dCgpOyBub3JtYWxDb21wbGV0aW9uID0gc3RlcC5kb25lOyByZXR1cm4gc3RlcDsgfSwgZTogZnVuY3Rpb24gZShfZTIpIHsgZGlkRXJyID0gdHJ1ZTsgZXJyID0gX2UyOyB9LCBmOiBmdW5jdGlvbiBmKCkgeyB0cnkgeyBpZiAoIW5vcm1hbENvbXBsZXRpb24gJiYgaXQucmV0dXJuICE9IG51bGwpIGl0LnJldHVybigpOyB9IGZpbmFsbHkgeyBpZiAoZGlkRXJyKSB0aHJvdyBlcnI7IH0gfSB9OyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuaW1wb3J0IHsgTWFuYWdlciB9IGZyb20gJy4vdXRpbHMvaGFtbWVyJztcbmltcG9ydCBXaGVlbElucHV0IGZyb20gJy4vaW5wdXRzL3doZWVsLWlucHV0JztcbmltcG9ydCBNb3ZlSW5wdXQgZnJvbSAnLi9pbnB1dHMvbW92ZS1pbnB1dCc7XG5pbXBvcnQgS2V5SW5wdXQgZnJvbSAnLi9pbnB1dHMva2V5LWlucHV0JztcbmltcG9ydCBDb250ZXh0bWVudUlucHV0IGZyb20gJy4vaW5wdXRzL2NvbnRleHRtZW51LWlucHV0JztcbmltcG9ydCBFdmVudFJlZ2lzdHJhciBmcm9tICcuL3V0aWxzL2V2ZW50LXJlZ2lzdHJhcic7XG5pbXBvcnQgeyBCQVNJQ19FVkVOVF9BTElBU0VTLCBFVkVOVF9SRUNPR05JWkVSX01BUCwgR0VTVFVSRV9FVkVOVF9BTElBU0VTLCBSRUNPR05JWkVSUywgUkVDT0dOSVpFUl9DT01QQVRJQkxFX01BUCwgUkVDT0dOSVpFUl9GQUxMQkFDS19NQVAgfSBmcm9tICcuL2NvbnN0YW50cyc7XG52YXIgREVGQVVMVF9PUFRJT05TID0ge1xuICBldmVudHM6IG51bGwsXG4gIHJlY29nbml6ZXJzOiBudWxsLFxuICByZWNvZ25pemVyT3B0aW9uczoge30sXG4gIE1hbmFnZXI6IE1hbmFnZXIsXG4gIHRvdWNoQWN0aW9uOiAnbm9uZScsXG4gIHRhYkluZGV4OiAwXG59O1xuXG52YXIgRXZlbnRNYW5hZ2VyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRXZlbnRNYW5hZ2VyKCkge1xuICAgIHZhciBlbGVtZW50ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBudWxsO1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdmVudE1hbmFnZXIpO1xuXG4gICAgdGhpcy5vcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9PUFRJT05TLCBvcHRpb25zKTtcbiAgICB0aGlzLmV2ZW50cyA9IG5ldyBNYXAoKTtcbiAgICB0aGlzLl9vbkJhc2ljSW5wdXQgPSB0aGlzLl9vbkJhc2ljSW5wdXQuYmluZCh0aGlzKTtcbiAgICB0aGlzLl9vbk90aGVyRXZlbnQgPSB0aGlzLl9vbk90aGVyRXZlbnQuYmluZCh0aGlzKTtcbiAgICB0aGlzLnNldEVsZW1lbnQoZWxlbWVudCk7XG4gICAgdmFyIGV2ZW50cyA9IG9wdGlvbnMuZXZlbnRzO1xuXG4gICAgaWYgKGV2ZW50cykge1xuICAgICAgdGhpcy5vbihldmVudHMpO1xuICAgIH1cbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhFdmVudE1hbmFnZXIsIFt7XG4gICAga2V5OiBcInNldEVsZW1lbnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2V0RWxlbWVudChlbGVtZW50KSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICBpZiAodGhpcy5lbGVtZW50KSB7XG4gICAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuXG4gICAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICAgIHZhciBNYW5hZ2VyQ2xhc3MgPSBvcHRpb25zLk1hbmFnZXI7XG4gICAgICB0aGlzLm1hbmFnZXIgPSBuZXcgTWFuYWdlckNsYXNzKGVsZW1lbnQsIHtcbiAgICAgICAgdG91Y2hBY3Rpb246IG9wdGlvbnMudG91Y2hBY3Rpb24sXG4gICAgICAgIHJlY29nbml6ZXJzOiBvcHRpb25zLnJlY29nbml6ZXJzIHx8IFJFQ09HTklaRVJTXG4gICAgICB9KS5vbignaGFtbWVyLmlucHV0JywgdGhpcy5fb25CYXNpY0lucHV0KTtcblxuICAgICAgaWYgKCFvcHRpb25zLnJlY29nbml6ZXJzKSB7XG4gICAgICAgIE9iamVjdC5rZXlzKFJFQ09HTklaRVJfQ09NUEFUSUJMRV9NQVApLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgICB2YXIgcmVjb2duaXplciA9IF90aGlzLm1hbmFnZXIuZ2V0KG5hbWUpO1xuXG4gICAgICAgICAgaWYgKHJlY29nbml6ZXIpIHtcbiAgICAgICAgICAgIFJFQ09HTklaRVJfQ09NUEFUSUJMRV9NQVBbbmFtZV0uZm9yRWFjaChmdW5jdGlvbiAob3RoZXJOYW1lKSB7XG4gICAgICAgICAgICAgIHJlY29nbml6ZXIucmVjb2duaXplV2l0aChvdGhlck5hbWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgcmVjb2duaXplck5hbWUgaW4gb3B0aW9ucy5yZWNvZ25pemVyT3B0aW9ucykge1xuICAgICAgICB2YXIgcmVjb2duaXplciA9IHRoaXMubWFuYWdlci5nZXQocmVjb2duaXplck5hbWUpO1xuXG4gICAgICAgIGlmIChyZWNvZ25pemVyKSB7XG4gICAgICAgICAgdmFyIHJlY29nbml6ZXJPcHRpb24gPSBvcHRpb25zLnJlY29nbml6ZXJPcHRpb25zW3JlY29nbml6ZXJOYW1lXTtcbiAgICAgICAgICBkZWxldGUgcmVjb2duaXplck9wdGlvbi5lbmFibGU7XG4gICAgICAgICAgcmVjb2duaXplci5zZXQocmVjb2duaXplck9wdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy53aGVlbElucHV0ID0gbmV3IFdoZWVsSW5wdXQoZWxlbWVudCwgdGhpcy5fb25PdGhlckV2ZW50LCB7XG4gICAgICAgIGVuYWJsZTogZmFsc2VcbiAgICAgIH0pO1xuICAgICAgdGhpcy5tb3ZlSW5wdXQgPSBuZXcgTW92ZUlucHV0KGVsZW1lbnQsIHRoaXMuX29uT3RoZXJFdmVudCwge1xuICAgICAgICBlbmFibGU6IGZhbHNlXG4gICAgICB9KTtcbiAgICAgIHRoaXMua2V5SW5wdXQgPSBuZXcgS2V5SW5wdXQoZWxlbWVudCwgdGhpcy5fb25PdGhlckV2ZW50LCB7XG4gICAgICAgIGVuYWJsZTogZmFsc2UsXG4gICAgICAgIHRhYkluZGV4OiBvcHRpb25zLnRhYkluZGV4XG4gICAgICB9KTtcbiAgICAgIHRoaXMuY29udGV4dG1lbnVJbnB1dCA9IG5ldyBDb250ZXh0bWVudUlucHV0KGVsZW1lbnQsIHRoaXMuX29uT3RoZXJFdmVudCwge1xuICAgICAgICBlbmFibGU6IGZhbHNlXG4gICAgICB9KTtcblxuICAgICAgdmFyIF9pdGVyYXRvciA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKHRoaXMuZXZlbnRzKSxcbiAgICAgICAgICBfc3RlcDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgZm9yIChfaXRlcmF0b3IucygpOyAhKF9zdGVwID0gX2l0ZXJhdG9yLm4oKSkuZG9uZTspIHtcbiAgICAgICAgICB2YXIgX3N0ZXAkdmFsdWUgPSBfc2xpY2VkVG9BcnJheShfc3RlcC52YWx1ZSwgMiksXG4gICAgICAgICAgICAgIGV2ZW50QWxpYXMgPSBfc3RlcCR2YWx1ZVswXSxcbiAgICAgICAgICAgICAgZXZlbnRSZWdpc3RyYXIgPSBfc3RlcCR2YWx1ZVsxXTtcblxuICAgICAgICAgIGlmICghZXZlbnRSZWdpc3RyYXIuaXNFbXB0eSgpKSB7XG4gICAgICAgICAgICB0aGlzLl90b2dnbGVSZWNvZ25pemVyKGV2ZW50UmVnaXN0cmFyLnJlY29nbml6ZXJOYW1lLCB0cnVlKTtcblxuICAgICAgICAgICAgdGhpcy5tYW5hZ2VyLm9uKGV2ZW50QWxpYXMsIGV2ZW50UmVnaXN0cmFyLmhhbmRsZUV2ZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBfaXRlcmF0b3IuZShlcnIpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgX2l0ZXJhdG9yLmYoKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZGVzdHJveVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgICAgaWYgKHRoaXMuZWxlbWVudCkge1xuICAgICAgICB0aGlzLndoZWVsSW5wdXQuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLm1vdmVJbnB1dC5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMua2V5SW5wdXQuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLmNvbnRleHRtZW51SW5wdXQuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLm1hbmFnZXIuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLndoZWVsSW5wdXQgPSBudWxsO1xuICAgICAgICB0aGlzLm1vdmVJbnB1dCA9IG51bGw7XG4gICAgICAgIHRoaXMua2V5SW5wdXQgPSBudWxsO1xuICAgICAgICB0aGlzLmNvbnRleHRtZW51SW5wdXQgPSBudWxsO1xuICAgICAgICB0aGlzLm1hbmFnZXIgPSBudWxsO1xuICAgICAgICB0aGlzLmVsZW1lbnQgPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJvblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvbihldmVudCwgaGFuZGxlciwgb3B0cykge1xuICAgICAgdGhpcy5fYWRkRXZlbnRIYW5kbGVyKGV2ZW50LCBoYW5kbGVyLCBvcHRzLCBmYWxzZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIm9uY2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gb25jZShldmVudCwgaGFuZGxlciwgb3B0cykge1xuICAgICAgdGhpcy5fYWRkRXZlbnRIYW5kbGVyKGV2ZW50LCBoYW5kbGVyLCBvcHRzLCB0cnVlKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwid2F0Y2hcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gd2F0Y2goZXZlbnQsIGhhbmRsZXIsIG9wdHMpIHtcbiAgICAgIHRoaXMuX2FkZEV2ZW50SGFuZGxlcihldmVudCwgaGFuZGxlciwgb3B0cywgZmFsc2UsIHRydWUpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJvZmZcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gb2ZmKGV2ZW50LCBoYW5kbGVyKSB7XG4gICAgICB0aGlzLl9yZW1vdmVFdmVudEhhbmRsZXIoZXZlbnQsIGhhbmRsZXIpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJfdG9nZ2xlUmVjb2duaXplclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfdG9nZ2xlUmVjb2duaXplcihuYW1lLCBlbmFibGVkKSB7XG4gICAgICB2YXIgbWFuYWdlciA9IHRoaXMubWFuYWdlcjtcblxuICAgICAgaWYgKCFtYW5hZ2VyKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIHJlY29nbml6ZXIgPSBtYW5hZ2VyLmdldChuYW1lKTtcblxuICAgICAgaWYgKHJlY29nbml6ZXIgJiYgcmVjb2duaXplci5vcHRpb25zLmVuYWJsZSAhPT0gZW5hYmxlZCkge1xuICAgICAgICByZWNvZ25pemVyLnNldCh7XG4gICAgICAgICAgZW5hYmxlOiBlbmFibGVkXG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgZmFsbGJhY2tSZWNvZ25pemVycyA9IFJFQ09HTklaRVJfRkFMTEJBQ0tfTUFQW25hbWVdO1xuXG4gICAgICAgIGlmIChmYWxsYmFja1JlY29nbml6ZXJzICYmICF0aGlzLm9wdGlvbnMucmVjb2duaXplcnMpIHtcbiAgICAgICAgICBmYWxsYmFja1JlY29nbml6ZXJzLmZvckVhY2goZnVuY3Rpb24gKG90aGVyTmFtZSkge1xuICAgICAgICAgICAgdmFyIG90aGVyUmVjb2duaXplciA9IG1hbmFnZXIuZ2V0KG90aGVyTmFtZSk7XG5cbiAgICAgICAgICAgIGlmIChlbmFibGVkKSB7XG4gICAgICAgICAgICAgIG90aGVyUmVjb2duaXplci5yZXF1aXJlRmFpbHVyZShuYW1lKTtcbiAgICAgICAgICAgICAgcmVjb2duaXplci5kcm9wUmVxdWlyZUZhaWx1cmUob3RoZXJOYW1lKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG90aGVyUmVjb2duaXplci5kcm9wUmVxdWlyZUZhaWx1cmUobmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy53aGVlbElucHV0LmVuYWJsZUV2ZW50VHlwZShuYW1lLCBlbmFibGVkKTtcbiAgICAgIHRoaXMubW92ZUlucHV0LmVuYWJsZUV2ZW50VHlwZShuYW1lLCBlbmFibGVkKTtcbiAgICAgIHRoaXMua2V5SW5wdXQuZW5hYmxlRXZlbnRUeXBlKG5hbWUsIGVuYWJsZWQpO1xuICAgICAgdGhpcy5jb250ZXh0bWVudUlucHV0LmVuYWJsZUV2ZW50VHlwZShuYW1lLCBlbmFibGVkKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiX2FkZEV2ZW50SGFuZGxlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfYWRkRXZlbnRIYW5kbGVyKGV2ZW50LCBoYW5kbGVyLCBvcHRzLCBvbmNlLCBwYXNzaXZlKSB7XG4gICAgICBpZiAodHlwZW9mIGV2ZW50ICE9PSAnc3RyaW5nJykge1xuICAgICAgICBvcHRzID0gaGFuZGxlcjtcblxuICAgICAgICBmb3IgKHZhciBldmVudE5hbWUgaW4gZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLl9hZGRFdmVudEhhbmRsZXIoZXZlbnROYW1lLCBldmVudFtldmVudE5hbWVdLCBvcHRzLCBvbmNlLCBwYXNzaXZlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIG1hbmFnZXIgPSB0aGlzLm1hbmFnZXIsXG4gICAgICAgICAgZXZlbnRzID0gdGhpcy5ldmVudHM7XG4gICAgICB2YXIgZXZlbnRBbGlhcyA9IEdFU1RVUkVfRVZFTlRfQUxJQVNFU1tldmVudF0gfHwgZXZlbnQ7XG4gICAgICB2YXIgZXZlbnRSZWdpc3RyYXIgPSBldmVudHMuZ2V0KGV2ZW50QWxpYXMpO1xuXG4gICAgICBpZiAoIWV2ZW50UmVnaXN0cmFyKSB7XG4gICAgICAgIGV2ZW50UmVnaXN0cmFyID0gbmV3IEV2ZW50UmVnaXN0cmFyKHRoaXMpO1xuICAgICAgICBldmVudHMuc2V0KGV2ZW50QWxpYXMsIGV2ZW50UmVnaXN0cmFyKTtcbiAgICAgICAgZXZlbnRSZWdpc3RyYXIucmVjb2duaXplck5hbWUgPSBFVkVOVF9SRUNPR05JWkVSX01BUFtldmVudEFsaWFzXSB8fCBldmVudEFsaWFzO1xuXG4gICAgICAgIGlmIChtYW5hZ2VyKSB7XG4gICAgICAgICAgbWFuYWdlci5vbihldmVudEFsaWFzLCBldmVudFJlZ2lzdHJhci5oYW5kbGVFdmVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZXZlbnRSZWdpc3RyYXIuYWRkKGV2ZW50LCBoYW5kbGVyLCBvcHRzLCBvbmNlLCBwYXNzaXZlKTtcblxuICAgICAgaWYgKCFldmVudFJlZ2lzdHJhci5pc0VtcHR5KCkpIHtcbiAgICAgICAgdGhpcy5fdG9nZ2xlUmVjb2duaXplcihldmVudFJlZ2lzdHJhci5yZWNvZ25pemVyTmFtZSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIl9yZW1vdmVFdmVudEhhbmRsZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gX3JlbW92ZUV2ZW50SGFuZGxlcihldmVudCwgaGFuZGxlcikge1xuICAgICAgaWYgKHR5cGVvZiBldmVudCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgZm9yICh2YXIgZXZlbnROYW1lIGluIGV2ZW50KSB7XG4gICAgICAgICAgdGhpcy5fcmVtb3ZlRXZlbnRIYW5kbGVyKGV2ZW50TmFtZSwgZXZlbnRbZXZlbnROYW1lXSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBldmVudHMgPSB0aGlzLmV2ZW50cztcbiAgICAgIHZhciBldmVudEFsaWFzID0gR0VTVFVSRV9FVkVOVF9BTElBU0VTW2V2ZW50XSB8fCBldmVudDtcbiAgICAgIHZhciBldmVudFJlZ2lzdHJhciA9IGV2ZW50cy5nZXQoZXZlbnRBbGlhcyk7XG5cbiAgICAgIGlmICghZXZlbnRSZWdpc3RyYXIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBldmVudFJlZ2lzdHJhci5yZW1vdmUoZXZlbnQsIGhhbmRsZXIpO1xuXG4gICAgICBpZiAoZXZlbnRSZWdpc3RyYXIuaXNFbXB0eSgpKSB7XG4gICAgICAgIHZhciByZWNvZ25pemVyTmFtZSA9IGV2ZW50UmVnaXN0cmFyLnJlY29nbml6ZXJOYW1lO1xuICAgICAgICB2YXIgaXNSZWNvZ25pemVyVXNlZCA9IGZhbHNlO1xuXG4gICAgICAgIHZhciBfaXRlcmF0b3IyID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIoZXZlbnRzLnZhbHVlcygpKSxcbiAgICAgICAgICAgIF9zdGVwMjtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGZvciAoX2l0ZXJhdG9yMi5zKCk7ICEoX3N0ZXAyID0gX2l0ZXJhdG9yMi5uKCkpLmRvbmU7KSB7XG4gICAgICAgICAgICB2YXIgZWggPSBfc3RlcDIudmFsdWU7XG5cbiAgICAgICAgICAgIGlmIChlaC5yZWNvZ25pemVyTmFtZSA9PT0gcmVjb2duaXplck5hbWUgJiYgIWVoLmlzRW1wdHkoKSkge1xuICAgICAgICAgICAgICBpc1JlY29nbml6ZXJVc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBfaXRlcmF0b3IyLmUoZXJyKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBfaXRlcmF0b3IyLmYoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNSZWNvZ25pemVyVXNlZCkge1xuICAgICAgICAgIHRoaXMuX3RvZ2dsZVJlY29nbml6ZXIocmVjb2duaXplck5hbWUsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJfb25CYXNpY0lucHV0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9vbkJhc2ljSW5wdXQoZXZlbnQpIHtcbiAgICAgIHZhciBzcmNFdmVudCA9IGV2ZW50LnNyY0V2ZW50O1xuICAgICAgdmFyIGFsaWFzID0gQkFTSUNfRVZFTlRfQUxJQVNFU1tzcmNFdmVudC50eXBlXTtcblxuICAgICAgaWYgKGFsaWFzKSB7XG4gICAgICAgIHRoaXMubWFuYWdlci5lbWl0KGFsaWFzLCBldmVudCk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIl9vbk90aGVyRXZlbnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gX29uT3RoZXJFdmVudChldmVudCkge1xuICAgICAgdGhpcy5tYW5hZ2VyLmVtaXQoZXZlbnQudHlwZSwgZXZlbnQpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFdmVudE1hbmFnZXI7XG59KCk7XG5cbmV4cG9ydCB7IEV2ZW50TWFuYWdlciBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IF9jbGFzc0NhbGxDaGVjayBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY2xhc3NDYWxsQ2hlY2tcIjtcbmltcG9ydCBfY3JlYXRlQ2xhc3MgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NyZWF0ZUNsYXNzXCI7XG5pbXBvcnQgX2RlZmluZVByb3BlcnR5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eVwiO1xuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHtcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXG4gIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7XG4gICAgaWYgKGVudW1lcmFibGVPbmx5KSBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkge1xuICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7XG4gICAgfSk7XG4gICAga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpO1xuICB9XG5cbiAgcmV0dXJuIGtleXM7XG59XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307XG5cbiAgICBpZiAoaSAlIDIpIHtcbiAgICAgIG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbmltcG9ydCBNYXBTdGF0ZSBmcm9tICcuL21hcC1zdGF0ZSc7XG5pbXBvcnQgeyBMaW5lYXJJbnRlcnBvbGF0b3IgfSBmcm9tICcuL3RyYW5zaXRpb24nO1xuaW1wb3J0IFRyYW5zaXRpb25NYW5hZ2VyLCB7IFRSQU5TSVRJT05fRVZFTlRTIH0gZnJvbSAnLi90cmFuc2l0aW9uLW1hbmFnZXInO1xudmFyIE5PX1RSQU5TSVRJT05fUFJPUFMgPSB7XG4gIHRyYW5zaXRpb25EdXJhdGlvbjogMFxufTtcbmV4cG9ydCB2YXIgTElORUFSX1RSQU5TSVRJT05fUFJPUFMgPSB7XG4gIHRyYW5zaXRpb25EdXJhdGlvbjogMzAwLFxuICB0cmFuc2l0aW9uRWFzaW5nOiBmdW5jdGlvbiB0cmFuc2l0aW9uRWFzaW5nKHQpIHtcbiAgICByZXR1cm4gdDtcbiAgfSxcbiAgdHJhbnNpdGlvbkludGVycG9sYXRvcjogbmV3IExpbmVhckludGVycG9sYXRvcigpLFxuICB0cmFuc2l0aW9uSW50ZXJydXB0aW9uOiBUUkFOU0lUSU9OX0VWRU5UUy5CUkVBS1xufTtcbnZhciBERUZBVUxUX0lORVJUSUEgPSAzMDA7XG5cbnZhciBJTkVSVElBX0VBU0lORyA9IGZ1bmN0aW9uIElORVJUSUFfRUFTSU5HKHQpIHtcbiAgcmV0dXJuIDEgLSAoMSAtIHQpICogKDEgLSB0KTtcbn07XG5cbnZhciBFVkVOVF9UWVBFUyA9IHtcbiAgV0hFRUw6IFsnd2hlZWwnXSxcbiAgUEFOOiBbJ3BhbnN0YXJ0JywgJ3Bhbm1vdmUnLCAncGFuZW5kJ10sXG4gIFBJTkNIOiBbJ3BpbmNoc3RhcnQnLCAncGluY2htb3ZlJywgJ3BpbmNoZW5kJ10sXG4gIFRSSVBMRV9QQU46IFsndHJpcGFuc3RhcnQnLCAndHJpcGFubW92ZScsICd0cmlwYW5lbmQnXSxcbiAgRE9VQkxFX1RBUDogWydkb3VibGV0YXAnXSxcbiAgS0VZQk9BUkQ6IFsna2V5ZG93biddXG59O1xuXG52YXIgTWFwQ29udHJvbGxlciA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gTWFwQ29udHJvbGxlcigpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIE1hcENvbnRyb2xsZXIpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiZXZlbnRzXCIsIFtdKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInNjcm9sbFpvb21cIiwgdHJ1ZSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJkcmFnUGFuXCIsIHRydWUpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiZHJhZ1JvdGF0ZVwiLCB0cnVlKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImRvdWJsZUNsaWNrWm9vbVwiLCB0cnVlKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInRvdWNoWm9vbVwiLCB0cnVlKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInRvdWNoUm90YXRlXCIsIGZhbHNlKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImtleWJvYXJkXCIsIHRydWUpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiX2ludGVyYWN0aW9uU3RhdGVcIiwge1xuICAgICAgaXNEcmFnZ2luZzogZmFsc2VcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcIl9ldmVudHNcIiwge30pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiX3NldEludGVyYWN0aW9uU3RhdGVcIiwgZnVuY3Rpb24gKG5ld1N0YXRlKSB7XG4gICAgICBPYmplY3QuYXNzaWduKF90aGlzLl9pbnRlcmFjdGlvblN0YXRlLCBuZXdTdGF0ZSk7XG5cbiAgICAgIGlmIChfdGhpcy5vblN0YXRlQ2hhbmdlKSB7XG4gICAgICAgIF90aGlzLm9uU3RhdGVDaGFuZ2UoX3RoaXMuX2ludGVyYWN0aW9uU3RhdGUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiX29uVHJhbnNpdGlvblwiLCBmdW5jdGlvbiAobmV3Vmlld3BvcnQsIG9sZFZpZXdwb3J0KSB7XG4gICAgICBfdGhpcy5vblZpZXdwb3J0Q2hhbmdlKG5ld1ZpZXdwb3J0LCBfdGhpcy5faW50ZXJhY3Rpb25TdGF0ZSwgb2xkVmlld3BvcnQpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5oYW5kbGVFdmVudCA9IHRoaXMuaGFuZGxlRXZlbnQuYmluZCh0aGlzKTtcbiAgICB0aGlzLl90cmFuc2l0aW9uTWFuYWdlciA9IG5ldyBUcmFuc2l0aW9uTWFuYWdlcih7XG4gICAgICBvblZpZXdwb3J0Q2hhbmdlOiB0aGlzLl9vblRyYW5zaXRpb24sXG4gICAgICBvblN0YXRlQ2hhbmdlOiB0aGlzLl9zZXRJbnRlcmFjdGlvblN0YXRlXG4gICAgfSk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoTWFwQ29udHJvbGxlciwgW3tcbiAgICBrZXk6IFwiaGFuZGxlRXZlbnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlRXZlbnQoZXZlbnQpIHtcbiAgICAgIHRoaXMubWFwU3RhdGUgPSB0aGlzLmdldE1hcFN0YXRlKCk7XG4gICAgICB2YXIgZXZlbnRTdGFydEJsb2NrZWQgPSB0aGlzLl9ldmVudFN0YXJ0QmxvY2tlZDtcblxuICAgICAgc3dpdGNoIChldmVudC50eXBlKSB7XG4gICAgICAgIGNhc2UgJ3BhbnN0YXJ0JzpcbiAgICAgICAgICByZXR1cm4gZXZlbnRTdGFydEJsb2NrZWQgPyBmYWxzZSA6IHRoaXMuX29uUGFuU3RhcnQoZXZlbnQpO1xuXG4gICAgICAgIGNhc2UgJ3Bhbm1vdmUnOlxuICAgICAgICAgIHJldHVybiB0aGlzLl9vblBhbihldmVudCk7XG5cbiAgICAgICAgY2FzZSAncGFuZW5kJzpcbiAgICAgICAgICByZXR1cm4gdGhpcy5fb25QYW5FbmQoZXZlbnQpO1xuXG4gICAgICAgIGNhc2UgJ3BpbmNoc3RhcnQnOlxuICAgICAgICAgIHJldHVybiBldmVudFN0YXJ0QmxvY2tlZCA/IGZhbHNlIDogdGhpcy5fb25QaW5jaFN0YXJ0KGV2ZW50KTtcblxuICAgICAgICBjYXNlICdwaW5jaG1vdmUnOlxuICAgICAgICAgIHJldHVybiB0aGlzLl9vblBpbmNoKGV2ZW50KTtcblxuICAgICAgICBjYXNlICdwaW5jaGVuZCc6XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX29uUGluY2hFbmQoZXZlbnQpO1xuXG4gICAgICAgIGNhc2UgJ3RyaXBhbnN0YXJ0JzpcbiAgICAgICAgICByZXR1cm4gZXZlbnRTdGFydEJsb2NrZWQgPyBmYWxzZSA6IHRoaXMuX29uVHJpcGxlUGFuU3RhcnQoZXZlbnQpO1xuXG4gICAgICAgIGNhc2UgJ3RyaXBhbm1vdmUnOlxuICAgICAgICAgIHJldHVybiB0aGlzLl9vblRyaXBsZVBhbihldmVudCk7XG5cbiAgICAgICAgY2FzZSAndHJpcGFuZW5kJzpcbiAgICAgICAgICByZXR1cm4gdGhpcy5fb25UcmlwbGVQYW5FbmQoZXZlbnQpO1xuXG4gICAgICAgIGNhc2UgJ2RvdWJsZXRhcCc6XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX29uRG91YmxlVGFwKGV2ZW50KTtcblxuICAgICAgICBjYXNlICd3aGVlbCc6XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX29uV2hlZWwoZXZlbnQpO1xuXG4gICAgICAgIGNhc2UgJ2tleWRvd24nOlxuICAgICAgICAgIHJldHVybiB0aGlzLl9vbktleURvd24oZXZlbnQpO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRDZW50ZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0Q2VudGVyKGV2ZW50KSB7XG4gICAgICB2YXIgX2V2ZW50JG9mZnNldENlbnRlciA9IGV2ZW50Lm9mZnNldENlbnRlcixcbiAgICAgICAgICB4ID0gX2V2ZW50JG9mZnNldENlbnRlci54LFxuICAgICAgICAgIHkgPSBfZXZlbnQkb2Zmc2V0Q2VudGVyLnk7XG4gICAgICByZXR1cm4gW3gsIHldO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJpc0Z1bmN0aW9uS2V5UHJlc3NlZFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpc0Z1bmN0aW9uS2V5UHJlc3NlZChldmVudCkge1xuICAgICAgdmFyIHNyY0V2ZW50ID0gZXZlbnQuc3JjRXZlbnQ7XG4gICAgICByZXR1cm4gQm9vbGVhbihzcmNFdmVudC5tZXRhS2V5IHx8IHNyY0V2ZW50LmFsdEtleSB8fCBzcmNFdmVudC5jdHJsS2V5IHx8IHNyY0V2ZW50LnNoaWZ0S2V5KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiYmxvY2tFdmVudHNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gYmxvY2tFdmVudHModGltZW91dCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHZhciB0aW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoX3RoaXMyLl9ldmVudFN0YXJ0QmxvY2tlZCA9PT0gdGltZXIpIHtcbiAgICAgICAgICBfdGhpczIuX2V2ZW50U3RhcnRCbG9ja2VkID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfSwgdGltZW91dCk7XG4gICAgICB0aGlzLl9ldmVudFN0YXJ0QmxvY2tlZCA9IHRpbWVyO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ1cGRhdGVWaWV3cG9ydFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB1cGRhdGVWaWV3cG9ydChuZXdNYXBTdGF0ZSwgZXh0cmFQcm9wcywgaW50ZXJhY3Rpb25TdGF0ZSkge1xuICAgICAgdmFyIG9sZFZpZXdwb3J0ID0gdGhpcy5tYXBTdGF0ZSBpbnN0YW5jZW9mIE1hcFN0YXRlID8gdGhpcy5tYXBTdGF0ZS5nZXRWaWV3cG9ydFByb3BzKCkgOiB0aGlzLm1hcFN0YXRlO1xuXG4gICAgICB2YXIgbmV3Vmlld3BvcnQgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIG5ld01hcFN0YXRlLmdldFZpZXdwb3J0UHJvcHMoKSksIGV4dHJhUHJvcHMpO1xuXG4gICAgICB2YXIgdmlld1N0YXRlQ2hhbmdlZCA9IE9iamVjdC5rZXlzKG5ld1ZpZXdwb3J0KS5zb21lKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgcmV0dXJuIG9sZFZpZXdwb3J0W2tleV0gIT09IG5ld1ZpZXdwb3J0W2tleV07XG4gICAgICB9KTtcbiAgICAgIHRoaXMuX3N0YXRlID0gbmV3TWFwU3RhdGUuZ2V0U3RhdGUoKTtcblxuICAgICAgdGhpcy5fc2V0SW50ZXJhY3Rpb25TdGF0ZShpbnRlcmFjdGlvblN0YXRlKTtcblxuICAgICAgaWYgKHZpZXdTdGF0ZUNoYW5nZWQpIHtcbiAgICAgICAgdGhpcy5vblZpZXdwb3J0Q2hhbmdlKG5ld1ZpZXdwb3J0LCB0aGlzLl9pbnRlcmFjdGlvblN0YXRlLCBvbGRWaWV3cG9ydCk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldE1hcFN0YXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldE1hcFN0YXRlKG92ZXJyaWRlcykge1xuICAgICAgcmV0dXJuIG5ldyBNYXBTdGF0ZShfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgdGhpcy5tYXBTdGF0ZVByb3BzKSwgdGhpcy5fc3RhdGUpLCBvdmVycmlkZXMpKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaXNEcmFnZ2luZ1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpc0RyYWdnaW5nKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2ludGVyYWN0aW9uU3RhdGUuaXNEcmFnZ2luZztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic2V0T3B0aW9uc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzZXRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICAgIHZhciBvblZpZXdwb3J0Q2hhbmdlID0gb3B0aW9ucy5vblZpZXdwb3J0Q2hhbmdlLFxuICAgICAgICAgIG9uU3RhdGVDaGFuZ2UgPSBvcHRpb25zLm9uU3RhdGVDaGFuZ2UsXG4gICAgICAgICAgX29wdGlvbnMkZXZlbnRNYW5hZ2VyID0gb3B0aW9ucy5ldmVudE1hbmFnZXIsXG4gICAgICAgICAgZXZlbnRNYW5hZ2VyID0gX29wdGlvbnMkZXZlbnRNYW5hZ2VyID09PSB2b2lkIDAgPyB0aGlzLmV2ZW50TWFuYWdlciA6IF9vcHRpb25zJGV2ZW50TWFuYWdlcixcbiAgICAgICAgICBfb3B0aW9ucyRpc0ludGVyYWN0aXYgPSBvcHRpb25zLmlzSW50ZXJhY3RpdmUsXG4gICAgICAgICAgaXNJbnRlcmFjdGl2ZSA9IF9vcHRpb25zJGlzSW50ZXJhY3RpdiA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJGlzSW50ZXJhY3RpdixcbiAgICAgICAgICBfb3B0aW9ucyRzY3JvbGxab29tID0gb3B0aW9ucy5zY3JvbGxab29tLFxuICAgICAgICAgIHNjcm9sbFpvb20gPSBfb3B0aW9ucyRzY3JvbGxab29tID09PSB2b2lkIDAgPyB0aGlzLnNjcm9sbFpvb20gOiBfb3B0aW9ucyRzY3JvbGxab29tLFxuICAgICAgICAgIF9vcHRpb25zJGRyYWdQYW4gPSBvcHRpb25zLmRyYWdQYW4sXG4gICAgICAgICAgZHJhZ1BhbiA9IF9vcHRpb25zJGRyYWdQYW4gPT09IHZvaWQgMCA/IHRoaXMuZHJhZ1BhbiA6IF9vcHRpb25zJGRyYWdQYW4sXG4gICAgICAgICAgX29wdGlvbnMkZHJhZ1JvdGF0ZSA9IG9wdGlvbnMuZHJhZ1JvdGF0ZSxcbiAgICAgICAgICBkcmFnUm90YXRlID0gX29wdGlvbnMkZHJhZ1JvdGF0ZSA9PT0gdm9pZCAwID8gdGhpcy5kcmFnUm90YXRlIDogX29wdGlvbnMkZHJhZ1JvdGF0ZSxcbiAgICAgICAgICBfb3B0aW9ucyRkb3VibGVDbGlja1ogPSBvcHRpb25zLmRvdWJsZUNsaWNrWm9vbSxcbiAgICAgICAgICBkb3VibGVDbGlja1pvb20gPSBfb3B0aW9ucyRkb3VibGVDbGlja1ogPT09IHZvaWQgMCA/IHRoaXMuZG91YmxlQ2xpY2tab29tIDogX29wdGlvbnMkZG91YmxlQ2xpY2taLFxuICAgICAgICAgIF9vcHRpb25zJHRvdWNoWm9vbSA9IG9wdGlvbnMudG91Y2hab29tLFxuICAgICAgICAgIHRvdWNoWm9vbSA9IF9vcHRpb25zJHRvdWNoWm9vbSA9PT0gdm9pZCAwID8gdGhpcy50b3VjaFpvb20gOiBfb3B0aW9ucyR0b3VjaFpvb20sXG4gICAgICAgICAgX29wdGlvbnMkdG91Y2hSb3RhdGUgPSBvcHRpb25zLnRvdWNoUm90YXRlLFxuICAgICAgICAgIHRvdWNoUm90YXRlID0gX29wdGlvbnMkdG91Y2hSb3RhdGUgPT09IHZvaWQgMCA/IHRoaXMudG91Y2hSb3RhdGUgOiBfb3B0aW9ucyR0b3VjaFJvdGF0ZSxcbiAgICAgICAgICBfb3B0aW9ucyRrZXlib2FyZCA9IG9wdGlvbnMua2V5Ym9hcmQsXG4gICAgICAgICAga2V5Ym9hcmQgPSBfb3B0aW9ucyRrZXlib2FyZCA9PT0gdm9pZCAwID8gdGhpcy5rZXlib2FyZCA6IF9vcHRpb25zJGtleWJvYXJkO1xuICAgICAgdGhpcy5vblZpZXdwb3J0Q2hhbmdlID0gb25WaWV3cG9ydENoYW5nZTtcbiAgICAgIHRoaXMub25TdGF0ZUNoYW5nZSA9IG9uU3RhdGVDaGFuZ2U7XG4gICAgICB2YXIgcHJldk9wdGlvbnMgPSB0aGlzLm1hcFN0YXRlUHJvcHMgfHwge307XG4gICAgICB2YXIgZGltZW5zaW9uQ2hhbmdlZCA9IHByZXZPcHRpb25zLmhlaWdodCAhPT0gb3B0aW9ucy5oZWlnaHQgfHwgcHJldk9wdGlvbnMud2lkdGggIT09IG9wdGlvbnMud2lkdGg7XG4gICAgICB0aGlzLm1hcFN0YXRlUHJvcHMgPSBvcHRpb25zO1xuXG4gICAgICBpZiAoZGltZW5zaW9uQ2hhbmdlZCkge1xuICAgICAgICB0aGlzLm1hcFN0YXRlID0gcHJldk9wdGlvbnM7XG4gICAgICAgIHRoaXMudXBkYXRlVmlld3BvcnQobmV3IE1hcFN0YXRlKG9wdGlvbnMpKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fdHJhbnNpdGlvbk1hbmFnZXIucHJvY2Vzc1ZpZXdwb3J0Q2hhbmdlKG9wdGlvbnMpO1xuXG4gICAgICBpZiAodGhpcy5ldmVudE1hbmFnZXIgIT09IGV2ZW50TWFuYWdlcikge1xuICAgICAgICB0aGlzLmV2ZW50TWFuYWdlciA9IGV2ZW50TWFuYWdlcjtcbiAgICAgICAgdGhpcy5fZXZlbnRzID0ge307XG4gICAgICAgIHRoaXMudG9nZ2xlRXZlbnRzKHRoaXMuZXZlbnRzLCB0cnVlKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy50b2dnbGVFdmVudHMoRVZFTlRfVFlQRVMuV0hFRUwsIGlzSW50ZXJhY3RpdmUgJiYgQm9vbGVhbihzY3JvbGxab29tKSk7XG4gICAgICB0aGlzLnRvZ2dsZUV2ZW50cyhFVkVOVF9UWVBFUy5QQU4sIGlzSW50ZXJhY3RpdmUgJiYgQm9vbGVhbihkcmFnUGFuIHx8IGRyYWdSb3RhdGUpKTtcbiAgICAgIHRoaXMudG9nZ2xlRXZlbnRzKEVWRU5UX1RZUEVTLlBJTkNILCBpc0ludGVyYWN0aXZlICYmIEJvb2xlYW4odG91Y2hab29tIHx8IHRvdWNoUm90YXRlKSk7XG4gICAgICB0aGlzLnRvZ2dsZUV2ZW50cyhFVkVOVF9UWVBFUy5UUklQTEVfUEFOLCBpc0ludGVyYWN0aXZlICYmIEJvb2xlYW4odG91Y2hSb3RhdGUpKTtcbiAgICAgIHRoaXMudG9nZ2xlRXZlbnRzKEVWRU5UX1RZUEVTLkRPVUJMRV9UQVAsIGlzSW50ZXJhY3RpdmUgJiYgQm9vbGVhbihkb3VibGVDbGlja1pvb20pKTtcbiAgICAgIHRoaXMudG9nZ2xlRXZlbnRzKEVWRU5UX1RZUEVTLktFWUJPQVJELCBpc0ludGVyYWN0aXZlICYmIEJvb2xlYW4oa2V5Ym9hcmQpKTtcbiAgICAgIHRoaXMuc2Nyb2xsWm9vbSA9IHNjcm9sbFpvb207XG4gICAgICB0aGlzLmRyYWdQYW4gPSBkcmFnUGFuO1xuICAgICAgdGhpcy5kcmFnUm90YXRlID0gZHJhZ1JvdGF0ZTtcbiAgICAgIHRoaXMuZG91YmxlQ2xpY2tab29tID0gZG91YmxlQ2xpY2tab29tO1xuICAgICAgdGhpcy50b3VjaFpvb20gPSB0b3VjaFpvb207XG4gICAgICB0aGlzLnRvdWNoUm90YXRlID0gdG91Y2hSb3RhdGU7XG4gICAgICB0aGlzLmtleWJvYXJkID0ga2V5Ym9hcmQ7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInRvZ2dsZUV2ZW50c1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB0b2dnbGVFdmVudHMoZXZlbnROYW1lcywgZW5hYmxlZCkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgIGlmICh0aGlzLmV2ZW50TWFuYWdlcikge1xuICAgICAgICBldmVudE5hbWVzLmZvckVhY2goZnVuY3Rpb24gKGV2ZW50TmFtZSkge1xuICAgICAgICAgIGlmIChfdGhpczMuX2V2ZW50c1tldmVudE5hbWVdICE9PSBlbmFibGVkKSB7XG4gICAgICAgICAgICBfdGhpczMuX2V2ZW50c1tldmVudE5hbWVdID0gZW5hYmxlZDtcblxuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIHtcbiAgICAgICAgICAgICAgX3RoaXMzLmV2ZW50TWFuYWdlci5vbihldmVudE5hbWUsIF90aGlzMy5oYW5kbGVFdmVudCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBfdGhpczMuZXZlbnRNYW5hZ2VyLm9mZihldmVudE5hbWUsIF90aGlzMy5oYW5kbGVFdmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiX29uUGFuU3RhcnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gX29uUGFuU3RhcnQoZXZlbnQpIHtcbiAgICAgIHZhciBwb3MgPSB0aGlzLmdldENlbnRlcihldmVudCk7XG4gICAgICB0aGlzLl9wYW5Sb3RhdGUgPSB0aGlzLmlzRnVuY3Rpb25LZXlQcmVzc2VkKGV2ZW50KSB8fCBldmVudC5yaWdodEJ1dHRvbjtcbiAgICAgIHZhciBuZXdNYXBTdGF0ZSA9IHRoaXMuX3BhblJvdGF0ZSA/IHRoaXMubWFwU3RhdGUucm90YXRlU3RhcnQoe1xuICAgICAgICBwb3M6IHBvc1xuICAgICAgfSkgOiB0aGlzLm1hcFN0YXRlLnBhblN0YXJ0KHtcbiAgICAgICAgcG9zOiBwb3NcbiAgICAgIH0pO1xuICAgICAgdGhpcy51cGRhdGVWaWV3cG9ydChuZXdNYXBTdGF0ZSwgTk9fVFJBTlNJVElPTl9QUk9QUywge1xuICAgICAgICBpc0RyYWdnaW5nOiB0cnVlXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJfb25QYW5cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gX29uUGFuKGV2ZW50KSB7XG4gICAgICBpZiAoIXRoaXMuaXNEcmFnZ2luZygpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuX3BhblJvdGF0ZSA/IHRoaXMuX29uUGFuUm90YXRlKGV2ZW50KSA6IHRoaXMuX29uUGFuTW92ZShldmVudCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIl9vblBhbkVuZFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfb25QYW5FbmQoZXZlbnQpIHtcbiAgICAgIGlmICghdGhpcy5pc0RyYWdnaW5nKCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5fcGFuUm90YXRlID8gdGhpcy5fb25QYW5Sb3RhdGVFbmQoZXZlbnQpIDogdGhpcy5fb25QYW5Nb3ZlRW5kKGV2ZW50KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiX29uUGFuTW92ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfb25QYW5Nb3ZlKGV2ZW50KSB7XG4gICAgICBpZiAoIXRoaXMuZHJhZ1Bhbikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHZhciBwb3MgPSB0aGlzLmdldENlbnRlcihldmVudCk7XG4gICAgICB2YXIgbmV3TWFwU3RhdGUgPSB0aGlzLm1hcFN0YXRlLnBhbih7XG4gICAgICAgIHBvczogcG9zXG4gICAgICB9KTtcbiAgICAgIHRoaXMudXBkYXRlVmlld3BvcnQobmV3TWFwU3RhdGUsIE5PX1RSQU5TSVRJT05fUFJPUFMsIHtcbiAgICAgICAgaXNQYW5uaW5nOiB0cnVlXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJfb25QYW5Nb3ZlRW5kXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9vblBhbk1vdmVFbmQoZXZlbnQpIHtcbiAgICAgIGlmICh0aGlzLmRyYWdQYW4pIHtcbiAgICAgICAgdmFyIF90aGlzJGRyYWdQYW4kaW5lcnRpYSA9IHRoaXMuZHJhZ1Bhbi5pbmVydGlhLFxuICAgICAgICAgICAgaW5lcnRpYSA9IF90aGlzJGRyYWdQYW4kaW5lcnRpYSA9PT0gdm9pZCAwID8gREVGQVVMVF9JTkVSVElBIDogX3RoaXMkZHJhZ1BhbiRpbmVydGlhO1xuXG4gICAgICAgIGlmIChpbmVydGlhICYmIGV2ZW50LnZlbG9jaXR5KSB7XG4gICAgICAgICAgdmFyIHBvcyA9IHRoaXMuZ2V0Q2VudGVyKGV2ZW50KTtcbiAgICAgICAgICB2YXIgZW5kUG9zID0gW3Bvc1swXSArIGV2ZW50LnZlbG9jaXR5WCAqIGluZXJ0aWEgLyAyLCBwb3NbMV0gKyBldmVudC52ZWxvY2l0eVkgKiBpbmVydGlhIC8gMl07XG4gICAgICAgICAgdmFyIG5ld0NvbnRyb2xsZXJTdGF0ZSA9IHRoaXMubWFwU3RhdGUucGFuKHtcbiAgICAgICAgICAgIHBvczogZW5kUG9zXG4gICAgICAgICAgfSkucGFuRW5kKCk7XG4gICAgICAgICAgdGhpcy51cGRhdGVWaWV3cG9ydChuZXdDb250cm9sbGVyU3RhdGUsIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgTElORUFSX1RSQU5TSVRJT05fUFJPUFMpLCB7fSwge1xuICAgICAgICAgICAgdHJhbnNpdGlvbkR1cmF0aW9uOiBpbmVydGlhLFxuICAgICAgICAgICAgdHJhbnNpdGlvbkVhc2luZzogSU5FUlRJQV9FQVNJTkdcbiAgICAgICAgICB9KSwge1xuICAgICAgICAgICAgaXNEcmFnZ2luZzogZmFsc2UsXG4gICAgICAgICAgICBpc1Bhbm5pbmc6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgbmV3TWFwU3RhdGUgPSB0aGlzLm1hcFN0YXRlLnBhbkVuZCgpO1xuICAgICAgdGhpcy51cGRhdGVWaWV3cG9ydChuZXdNYXBTdGF0ZSwgbnVsbCwge1xuICAgICAgICBpc0RyYWdnaW5nOiBmYWxzZSxcbiAgICAgICAgaXNQYW5uaW5nOiBmYWxzZVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiX29uUGFuUm90YXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9vblBhblJvdGF0ZShldmVudCkge1xuICAgICAgaWYgKCF0aGlzLmRyYWdSb3RhdGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICB2YXIgcG9zID0gdGhpcy5nZXRDZW50ZXIoZXZlbnQpO1xuICAgICAgdmFyIG5ld01hcFN0YXRlID0gdGhpcy5tYXBTdGF0ZS5yb3RhdGUoe1xuICAgICAgICBwb3M6IHBvc1xuICAgICAgfSk7XG4gICAgICB0aGlzLnVwZGF0ZVZpZXdwb3J0KG5ld01hcFN0YXRlLCBOT19UUkFOU0lUSU9OX1BST1BTLCB7XG4gICAgICAgIGlzUm90YXRpbmc6IHRydWVcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIl9vblBhblJvdGF0ZUVuZFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfb25QYW5Sb3RhdGVFbmQoZXZlbnQpIHtcbiAgICAgIGlmICh0aGlzLmRyYWdSb3RhdGUpIHtcbiAgICAgICAgdmFyIF90aGlzJGRyYWdSb3RhdGUkaW5lciA9IHRoaXMuZHJhZ1JvdGF0ZS5pbmVydGlhLFxuICAgICAgICAgICAgaW5lcnRpYSA9IF90aGlzJGRyYWdSb3RhdGUkaW5lciA9PT0gdm9pZCAwID8gREVGQVVMVF9JTkVSVElBIDogX3RoaXMkZHJhZ1JvdGF0ZSRpbmVyO1xuXG4gICAgICAgIGlmIChpbmVydGlhICYmIGV2ZW50LnZlbG9jaXR5KSB7XG4gICAgICAgICAgdmFyIHBvcyA9IHRoaXMuZ2V0Q2VudGVyKGV2ZW50KTtcbiAgICAgICAgICB2YXIgZW5kUG9zID0gW3Bvc1swXSArIGV2ZW50LnZlbG9jaXR5WCAqIGluZXJ0aWEgLyAyLCBwb3NbMV0gKyBldmVudC52ZWxvY2l0eVkgKiBpbmVydGlhIC8gMl07XG4gICAgICAgICAgdmFyIG5ld0NvbnRyb2xsZXJTdGF0ZSA9IHRoaXMubWFwU3RhdGUucm90YXRlKHtcbiAgICAgICAgICAgIHBvczogZW5kUG9zXG4gICAgICAgICAgfSkucm90YXRlRW5kKCk7XG4gICAgICAgICAgdGhpcy51cGRhdGVWaWV3cG9ydChuZXdDb250cm9sbGVyU3RhdGUsIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgTElORUFSX1RSQU5TSVRJT05fUFJPUFMpLCB7fSwge1xuICAgICAgICAgICAgdHJhbnNpdGlvbkR1cmF0aW9uOiBpbmVydGlhLFxuICAgICAgICAgICAgdHJhbnNpdGlvbkVhc2luZzogSU5FUlRJQV9FQVNJTkdcbiAgICAgICAgICB9KSwge1xuICAgICAgICAgICAgaXNEcmFnZ2luZzogZmFsc2UsXG4gICAgICAgICAgICBpc1JvdGF0aW5nOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIG5ld01hcFN0YXRlID0gdGhpcy5tYXBTdGF0ZS5wYW5FbmQoKTtcbiAgICAgIHRoaXMudXBkYXRlVmlld3BvcnQobmV3TWFwU3RhdGUsIG51bGwsIHtcbiAgICAgICAgaXNEcmFnZ2luZzogZmFsc2UsXG4gICAgICAgIGlzUm90YXRpbmc6IGZhbHNlXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJfb25XaGVlbFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfb25XaGVlbChldmVudCkge1xuICAgICAgaWYgKCF0aGlzLnNjcm9sbFpvb20pIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICB2YXIgX3RoaXMkc2Nyb2xsWm9vbSA9IHRoaXMuc2Nyb2xsWm9vbSxcbiAgICAgICAgICBfdGhpcyRzY3JvbGxab29tJHNwZWUgPSBfdGhpcyRzY3JvbGxab29tLnNwZWVkLFxuICAgICAgICAgIHNwZWVkID0gX3RoaXMkc2Nyb2xsWm9vbSRzcGVlID09PSB2b2lkIDAgPyAwLjAxIDogX3RoaXMkc2Nyb2xsWm9vbSRzcGVlLFxuICAgICAgICAgIF90aGlzJHNjcm9sbFpvb20kc21vbyA9IF90aGlzJHNjcm9sbFpvb20uc21vb3RoLFxuICAgICAgICAgIHNtb290aCA9IF90aGlzJHNjcm9sbFpvb20kc21vbyA9PT0gdm9pZCAwID8gZmFsc2UgOiBfdGhpcyRzY3JvbGxab29tJHNtb287XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdmFyIHBvcyA9IHRoaXMuZ2V0Q2VudGVyKGV2ZW50KTtcbiAgICAgIHZhciBkZWx0YSA9IGV2ZW50LmRlbHRhO1xuICAgICAgdmFyIHNjYWxlID0gMiAvICgxICsgTWF0aC5leHAoLU1hdGguYWJzKGRlbHRhICogc3BlZWQpKSk7XG5cbiAgICAgIGlmIChkZWx0YSA8IDAgJiYgc2NhbGUgIT09IDApIHtcbiAgICAgICAgc2NhbGUgPSAxIC8gc2NhbGU7XG4gICAgICB9XG5cbiAgICAgIHZhciBuZXdNYXBTdGF0ZSA9IHRoaXMubWFwU3RhdGUuem9vbSh7XG4gICAgICAgIHBvczogcG9zLFxuICAgICAgICBzY2FsZTogc2NhbGVcbiAgICAgIH0pO1xuICAgICAgdGhpcy51cGRhdGVWaWV3cG9ydChuZXdNYXBTdGF0ZSwgX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBMSU5FQVJfVFJBTlNJVElPTl9QUk9QUyksIHt9LCB7XG4gICAgICAgIHRyYW5zaXRpb25JbnRlcnBvbGF0b3I6IG5ldyBMaW5lYXJJbnRlcnBvbGF0b3Ioe1xuICAgICAgICAgIGFyb3VuZDogcG9zXG4gICAgICAgIH0pLFxuICAgICAgICB0cmFuc2l0aW9uRHVyYXRpb246IHNtb290aCA/IDI1MCA6IDFcbiAgICAgIH0pLCB7XG4gICAgICAgIGlzUGFubmluZzogdHJ1ZSxcbiAgICAgICAgaXNab29taW5nOiB0cnVlXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJfb25QaW5jaFN0YXJ0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9vblBpbmNoU3RhcnQoZXZlbnQpIHtcbiAgICAgIHZhciBwb3MgPSB0aGlzLmdldENlbnRlcihldmVudCk7XG4gICAgICB2YXIgbmV3TWFwU3RhdGUgPSB0aGlzLm1hcFN0YXRlLnpvb21TdGFydCh7XG4gICAgICAgIHBvczogcG9zXG4gICAgICB9KS5yb3RhdGVTdGFydCh7XG4gICAgICAgIHBvczogcG9zXG4gICAgICB9KTtcbiAgICAgIHRoaXMuX3N0YXJ0UGluY2hSb3RhdGlvbiA9IGV2ZW50LnJvdGF0aW9uO1xuICAgICAgdGhpcy5fbGFzdFBpbmNoRXZlbnQgPSBldmVudDtcbiAgICAgIHRoaXMudXBkYXRlVmlld3BvcnQobmV3TWFwU3RhdGUsIE5PX1RSQU5TSVRJT05fUFJPUFMsIHtcbiAgICAgICAgaXNEcmFnZ2luZzogdHJ1ZVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiX29uUGluY2hcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gX29uUGluY2goZXZlbnQpIHtcbiAgICAgIGlmICghdGhpcy5pc0RyYWdnaW5nKCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMudG91Y2hab29tICYmICF0aGlzLnRvdWNoUm90YXRlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgdmFyIG5ld01hcFN0YXRlID0gdGhpcy5tYXBTdGF0ZTtcblxuICAgICAgaWYgKHRoaXMudG91Y2hab29tKSB7XG4gICAgICAgIHZhciBzY2FsZSA9IGV2ZW50LnNjYWxlO1xuICAgICAgICB2YXIgcG9zID0gdGhpcy5nZXRDZW50ZXIoZXZlbnQpO1xuICAgICAgICBuZXdNYXBTdGF0ZSA9IG5ld01hcFN0YXRlLnpvb20oe1xuICAgICAgICAgIHBvczogcG9zLFxuICAgICAgICAgIHNjYWxlOiBzY2FsZVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMudG91Y2hSb3RhdGUpIHtcbiAgICAgICAgdmFyIHJvdGF0aW9uID0gZXZlbnQucm90YXRpb247XG4gICAgICAgIG5ld01hcFN0YXRlID0gbmV3TWFwU3RhdGUucm90YXRlKHtcbiAgICAgICAgICBkZWx0YUFuZ2xlWDogdGhpcy5fc3RhcnRQaW5jaFJvdGF0aW9uIC0gcm90YXRpb25cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMudXBkYXRlVmlld3BvcnQobmV3TWFwU3RhdGUsIE5PX1RSQU5TSVRJT05fUFJPUFMsIHtcbiAgICAgICAgaXNEcmFnZ2luZzogdHJ1ZSxcbiAgICAgICAgaXNQYW5uaW5nOiBCb29sZWFuKHRoaXMudG91Y2hab29tKSxcbiAgICAgICAgaXNab29taW5nOiBCb29sZWFuKHRoaXMudG91Y2hab29tKSxcbiAgICAgICAgaXNSb3RhdGluZzogQm9vbGVhbih0aGlzLnRvdWNoUm90YXRlKVxuICAgICAgfSk7XG4gICAgICB0aGlzLl9sYXN0UGluY2hFdmVudCA9IGV2ZW50O1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIl9vblBpbmNoRW5kXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9vblBpbmNoRW5kKGV2ZW50KSB7XG4gICAgICBpZiAoIXRoaXMuaXNEcmFnZ2luZygpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMudG91Y2hab29tKSB7XG4gICAgICAgIHZhciBfdGhpcyR0b3VjaFpvb20kaW5lcnQgPSB0aGlzLnRvdWNoWm9vbS5pbmVydGlhLFxuICAgICAgICAgICAgaW5lcnRpYSA9IF90aGlzJHRvdWNoWm9vbSRpbmVydCA9PT0gdm9pZCAwID8gREVGQVVMVF9JTkVSVElBIDogX3RoaXMkdG91Y2hab29tJGluZXJ0O1xuICAgICAgICB2YXIgX2xhc3RQaW5jaEV2ZW50ID0gdGhpcy5fbGFzdFBpbmNoRXZlbnQ7XG5cbiAgICAgICAgaWYgKGluZXJ0aWEgJiYgX2xhc3RQaW5jaEV2ZW50ICYmIGV2ZW50LnNjYWxlICE9PSBfbGFzdFBpbmNoRXZlbnQuc2NhbGUpIHtcbiAgICAgICAgICB2YXIgcG9zID0gdGhpcy5nZXRDZW50ZXIoZXZlbnQpO1xuXG4gICAgICAgICAgdmFyIF9uZXdNYXBTdGF0ZSA9IHRoaXMubWFwU3RhdGUucm90YXRlRW5kKCk7XG5cbiAgICAgICAgICB2YXIgeiA9IE1hdGgubG9nMihldmVudC5zY2FsZSk7XG5cbiAgICAgICAgICB2YXIgdmVsb2NpdHlaID0gKHogLSBNYXRoLmxvZzIoX2xhc3RQaW5jaEV2ZW50LnNjYWxlKSkgLyAoZXZlbnQuZGVsdGFUaW1lIC0gX2xhc3RQaW5jaEV2ZW50LmRlbHRhVGltZSk7XG5cbiAgICAgICAgICB2YXIgZW5kU2NhbGUgPSBNYXRoLnBvdygyLCB6ICsgdmVsb2NpdHlaICogaW5lcnRpYSAvIDIpO1xuICAgICAgICAgIF9uZXdNYXBTdGF0ZSA9IF9uZXdNYXBTdGF0ZS56b29tKHtcbiAgICAgICAgICAgIHBvczogcG9zLFxuICAgICAgICAgICAgc2NhbGU6IGVuZFNjYWxlXG4gICAgICAgICAgfSkuem9vbUVuZCgpO1xuICAgICAgICAgIHRoaXMudXBkYXRlVmlld3BvcnQoX25ld01hcFN0YXRlLCBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIExJTkVBUl9UUkFOU0lUSU9OX1BST1BTKSwge30sIHtcbiAgICAgICAgICAgIHRyYW5zaXRpb25JbnRlcnBvbGF0b3I6IG5ldyBMaW5lYXJJbnRlcnBvbGF0b3Ioe1xuICAgICAgICAgICAgICBhcm91bmQ6IHBvc1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB0cmFuc2l0aW9uRHVyYXRpb246IGluZXJ0aWEsXG4gICAgICAgICAgICB0cmFuc2l0aW9uRWFzaW5nOiBJTkVSVElBX0VBU0lOR1xuICAgICAgICAgIH0pLCB7XG4gICAgICAgICAgICBpc0RyYWdnaW5nOiBmYWxzZSxcbiAgICAgICAgICAgIGlzUGFubmluZzogQm9vbGVhbih0aGlzLnRvdWNoWm9vbSksXG4gICAgICAgICAgICBpc1pvb21pbmc6IEJvb2xlYW4odGhpcy50b3VjaFpvb20pLFxuICAgICAgICAgICAgaXNSb3RhdGluZzogZmFsc2VcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLmJsb2NrRXZlbnRzKGluZXJ0aWEpO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBuZXdNYXBTdGF0ZSA9IHRoaXMubWFwU3RhdGUuem9vbUVuZCgpLnJvdGF0ZUVuZCgpO1xuICAgICAgdGhpcy5fc3RhdGUuc3RhcnRQaW5jaFJvdGF0aW9uID0gMDtcbiAgICAgIHRoaXMudXBkYXRlVmlld3BvcnQobmV3TWFwU3RhdGUsIG51bGwsIHtcbiAgICAgICAgaXNEcmFnZ2luZzogZmFsc2UsXG4gICAgICAgIGlzUGFubmluZzogZmFsc2UsXG4gICAgICAgIGlzWm9vbWluZzogZmFsc2UsXG4gICAgICAgIGlzUm90YXRpbmc6IGZhbHNlXG4gICAgICB9KTtcbiAgICAgIHRoaXMuX3N0YXJ0UGluY2hSb3RhdGlvbiA9IG51bGw7XG4gICAgICB0aGlzLl9sYXN0UGluY2hFdmVudCA9IG51bGw7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiX29uVHJpcGxlUGFuU3RhcnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gX29uVHJpcGxlUGFuU3RhcnQoZXZlbnQpIHtcbiAgICAgIHZhciBwb3MgPSB0aGlzLmdldENlbnRlcihldmVudCk7XG4gICAgICB2YXIgbmV3TWFwU3RhdGUgPSB0aGlzLm1hcFN0YXRlLnJvdGF0ZVN0YXJ0KHtcbiAgICAgICAgcG9zOiBwb3NcbiAgICAgIH0pO1xuICAgICAgdGhpcy51cGRhdGVWaWV3cG9ydChuZXdNYXBTdGF0ZSwgTk9fVFJBTlNJVElPTl9QUk9QUywge1xuICAgICAgICBpc0RyYWdnaW5nOiB0cnVlXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJfb25UcmlwbGVQYW5cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gX29uVHJpcGxlUGFuKGV2ZW50KSB7XG4gICAgICBpZiAoIXRoaXMuaXNEcmFnZ2luZygpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLnRvdWNoUm90YXRlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgdmFyIHBvcyA9IHRoaXMuZ2V0Q2VudGVyKGV2ZW50KTtcbiAgICAgIHBvc1swXSAtPSBldmVudC5kZWx0YVg7XG4gICAgICB2YXIgbmV3TWFwU3RhdGUgPSB0aGlzLm1hcFN0YXRlLnJvdGF0ZSh7XG4gICAgICAgIHBvczogcG9zXG4gICAgICB9KTtcbiAgICAgIHRoaXMudXBkYXRlVmlld3BvcnQobmV3TWFwU3RhdGUsIE5PX1RSQU5TSVRJT05fUFJPUFMsIHtcbiAgICAgICAgaXNSb3RhdGluZzogdHJ1ZVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiX29uVHJpcGxlUGFuRW5kXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9vblRyaXBsZVBhbkVuZChldmVudCkge1xuICAgICAgaWYgKCF0aGlzLmlzRHJhZ2dpbmcoKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnRvdWNoUm90YXRlKSB7XG4gICAgICAgIHZhciBfdGhpcyR0b3VjaFJvdGF0ZSRpbmUgPSB0aGlzLnRvdWNoUm90YXRlLmluZXJ0aWEsXG4gICAgICAgICAgICBpbmVydGlhID0gX3RoaXMkdG91Y2hSb3RhdGUkaW5lID09PSB2b2lkIDAgPyBERUZBVUxUX0lORVJUSUEgOiBfdGhpcyR0b3VjaFJvdGF0ZSRpbmU7XG5cbiAgICAgICAgaWYgKGluZXJ0aWEgJiYgZXZlbnQudmVsb2NpdHlZKSB7XG4gICAgICAgICAgdmFyIHBvcyA9IHRoaXMuZ2V0Q2VudGVyKGV2ZW50KTtcbiAgICAgICAgICB2YXIgZW5kUG9zID0gW3Bvc1swXSwgcG9zWzFdICs9IGV2ZW50LnZlbG9jaXR5WSAqIGluZXJ0aWEgLyAyXTtcblxuICAgICAgICAgIHZhciBfbmV3TWFwU3RhdGUyID0gdGhpcy5tYXBTdGF0ZS5yb3RhdGUoe1xuICAgICAgICAgICAgcG9zOiBlbmRQb3NcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHRoaXMudXBkYXRlVmlld3BvcnQoX25ld01hcFN0YXRlMiwgX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBMSU5FQVJfVFJBTlNJVElPTl9QUk9QUyksIHt9LCB7XG4gICAgICAgICAgICB0cmFuc2l0aW9uRHVyYXRpb246IGluZXJ0aWEsXG4gICAgICAgICAgICB0cmFuc2l0aW9uRWFzaW5nOiBJTkVSVElBX0VBU0lOR1xuICAgICAgICAgIH0pLCB7XG4gICAgICAgICAgICBpc0RyYWdnaW5nOiBmYWxzZSxcbiAgICAgICAgICAgIGlzUm90YXRpbmc6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLmJsb2NrRXZlbnRzKGluZXJ0aWEpO1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgbmV3TWFwU3RhdGUgPSB0aGlzLm1hcFN0YXRlLnJvdGF0ZUVuZCgpO1xuICAgICAgdGhpcy51cGRhdGVWaWV3cG9ydChuZXdNYXBTdGF0ZSwgbnVsbCwge1xuICAgICAgICBpc0RyYWdnaW5nOiBmYWxzZSxcbiAgICAgICAgaXNSb3RhdGluZzogZmFsc2VcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIl9vbkRvdWJsZVRhcFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfb25Eb3VibGVUYXAoZXZlbnQpIHtcbiAgICAgIGlmICghdGhpcy5kb3VibGVDbGlja1pvb20pIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICB2YXIgcG9zID0gdGhpcy5nZXRDZW50ZXIoZXZlbnQpO1xuICAgICAgdmFyIGlzWm9vbU91dCA9IHRoaXMuaXNGdW5jdGlvbktleVByZXNzZWQoZXZlbnQpO1xuICAgICAgdmFyIG5ld01hcFN0YXRlID0gdGhpcy5tYXBTdGF0ZS56b29tKHtcbiAgICAgICAgcG9zOiBwb3MsXG4gICAgICAgIHNjYWxlOiBpc1pvb21PdXQgPyAwLjUgOiAyXG4gICAgICB9KTtcbiAgICAgIHRoaXMudXBkYXRlVmlld3BvcnQobmV3TWFwU3RhdGUsIE9iamVjdC5hc3NpZ24oe30sIExJTkVBUl9UUkFOU0lUSU9OX1BST1BTLCB7XG4gICAgICAgIHRyYW5zaXRpb25JbnRlcnBvbGF0b3I6IG5ldyBMaW5lYXJJbnRlcnBvbGF0b3Ioe1xuICAgICAgICAgIGFyb3VuZDogcG9zXG4gICAgICAgIH0pXG4gICAgICB9KSwge1xuICAgICAgICBpc1pvb21pbmc6IHRydWVcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIl9vbktleURvd25cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gX29uS2V5RG93bihldmVudCkge1xuICAgICAgaWYgKCF0aGlzLmtleWJvYXJkKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgdmFyIGZ1bmNLZXkgPSB0aGlzLmlzRnVuY3Rpb25LZXlQcmVzc2VkKGV2ZW50KTtcbiAgICAgIHZhciBfdGhpcyRrZXlib2FyZCA9IHRoaXMua2V5Ym9hcmQsXG4gICAgICAgICAgX3RoaXMka2V5Ym9hcmQkem9vbVNwID0gX3RoaXMka2V5Ym9hcmQuem9vbVNwZWVkLFxuICAgICAgICAgIHpvb21TcGVlZCA9IF90aGlzJGtleWJvYXJkJHpvb21TcCA9PT0gdm9pZCAwID8gMiA6IF90aGlzJGtleWJvYXJkJHpvb21TcCxcbiAgICAgICAgICBfdGhpcyRrZXlib2FyZCRtb3ZlU3AgPSBfdGhpcyRrZXlib2FyZC5tb3ZlU3BlZWQsXG4gICAgICAgICAgbW92ZVNwZWVkID0gX3RoaXMka2V5Ym9hcmQkbW92ZVNwID09PSB2b2lkIDAgPyAxMDAgOiBfdGhpcyRrZXlib2FyZCRtb3ZlU3AsXG4gICAgICAgICAgX3RoaXMka2V5Ym9hcmQkcm90YXRlID0gX3RoaXMka2V5Ym9hcmQucm90YXRlU3BlZWRYLFxuICAgICAgICAgIHJvdGF0ZVNwZWVkWCA9IF90aGlzJGtleWJvYXJkJHJvdGF0ZSA9PT0gdm9pZCAwID8gMTUgOiBfdGhpcyRrZXlib2FyZCRyb3RhdGUsXG4gICAgICAgICAgX3RoaXMka2V5Ym9hcmQkcm90YXRlMiA9IF90aGlzJGtleWJvYXJkLnJvdGF0ZVNwZWVkWSxcbiAgICAgICAgICByb3RhdGVTcGVlZFkgPSBfdGhpcyRrZXlib2FyZCRyb3RhdGUyID09PSB2b2lkIDAgPyAxMCA6IF90aGlzJGtleWJvYXJkJHJvdGF0ZTI7XG4gICAgICB2YXIgbWFwU3RhdGVQcm9wcyA9IHRoaXMubWFwU3RhdGVQcm9wcztcbiAgICAgIHZhciBuZXdNYXBTdGF0ZTtcblxuICAgICAgc3dpdGNoIChldmVudC5zcmNFdmVudC5rZXlDb2RlKSB7XG4gICAgICAgIGNhc2UgMTg5OlxuICAgICAgICAgIGlmIChmdW5jS2V5KSB7XG4gICAgICAgICAgICBuZXdNYXBTdGF0ZSA9IHRoaXMuZ2V0TWFwU3RhdGUoe1xuICAgICAgICAgICAgICB6b29tOiBtYXBTdGF0ZVByb3BzLnpvb20gLSBNYXRoLmxvZzIoem9vbVNwZWVkKSAtIDFcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXdNYXBTdGF0ZSA9IHRoaXMuZ2V0TWFwU3RhdGUoe1xuICAgICAgICAgICAgICB6b29tOiBtYXBTdGF0ZVByb3BzLnpvb20gLSBNYXRoLmxvZzIoem9vbVNwZWVkKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAxODc6XG4gICAgICAgICAgaWYgKGZ1bmNLZXkpIHtcbiAgICAgICAgICAgIG5ld01hcFN0YXRlID0gdGhpcy5nZXRNYXBTdGF0ZSh7XG4gICAgICAgICAgICAgIHpvb206IG1hcFN0YXRlUHJvcHMuem9vbSArIE1hdGgubG9nMih6b29tU3BlZWQpICsgMVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5ld01hcFN0YXRlID0gdGhpcy5nZXRNYXBTdGF0ZSh7XG4gICAgICAgICAgICAgIHpvb206IG1hcFN0YXRlUHJvcHMuem9vbSArIE1hdGgubG9nMih6b29tU3BlZWQpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDM3OlxuICAgICAgICAgIGlmIChmdW5jS2V5KSB7XG4gICAgICAgICAgICBuZXdNYXBTdGF0ZSA9IHRoaXMuZ2V0TWFwU3RhdGUoe1xuICAgICAgICAgICAgICBiZWFyaW5nOiBtYXBTdGF0ZVByb3BzLmJlYXJpbmcgLSByb3RhdGVTcGVlZFhcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXdNYXBTdGF0ZSA9IHRoaXMubWFwU3RhdGUucGFuKHtcbiAgICAgICAgICAgICAgcG9zOiBbbW92ZVNwZWVkLCAwXSxcbiAgICAgICAgICAgICAgc3RhcnRQb3M6IFswLCAwXVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAzOTpcbiAgICAgICAgICBpZiAoZnVuY0tleSkge1xuICAgICAgICAgICAgbmV3TWFwU3RhdGUgPSB0aGlzLmdldE1hcFN0YXRlKHtcbiAgICAgICAgICAgICAgYmVhcmluZzogbWFwU3RhdGVQcm9wcy5iZWFyaW5nICsgcm90YXRlU3BlZWRYXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3TWFwU3RhdGUgPSB0aGlzLm1hcFN0YXRlLnBhbih7XG4gICAgICAgICAgICAgIHBvczogWy1tb3ZlU3BlZWQsIDBdLFxuICAgICAgICAgICAgICBzdGFydFBvczogWzAsIDBdXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDM4OlxuICAgICAgICAgIGlmIChmdW5jS2V5KSB7XG4gICAgICAgICAgICBuZXdNYXBTdGF0ZSA9IHRoaXMuZ2V0TWFwU3RhdGUoe1xuICAgICAgICAgICAgICBwaXRjaDogbWFwU3RhdGVQcm9wcy5waXRjaCArIHJvdGF0ZVNwZWVkWVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5ld01hcFN0YXRlID0gdGhpcy5tYXBTdGF0ZS5wYW4oe1xuICAgICAgICAgICAgICBwb3M6IFswLCBtb3ZlU3BlZWRdLFxuICAgICAgICAgICAgICBzdGFydFBvczogWzAsIDBdXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDQwOlxuICAgICAgICAgIGlmIChmdW5jS2V5KSB7XG4gICAgICAgICAgICBuZXdNYXBTdGF0ZSA9IHRoaXMuZ2V0TWFwU3RhdGUoe1xuICAgICAgICAgICAgICBwaXRjaDogbWFwU3RhdGVQcm9wcy5waXRjaCAtIHJvdGF0ZVNwZWVkWVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5ld01hcFN0YXRlID0gdGhpcy5tYXBTdGF0ZS5wYW4oe1xuICAgICAgICAgICAgICBwb3M6IFswLCAtbW92ZVNwZWVkXSxcbiAgICAgICAgICAgICAgc3RhcnRQb3M6IFswLCAwXVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLnVwZGF0ZVZpZXdwb3J0KG5ld01hcFN0YXRlLCBMSU5FQVJfVFJBTlNJVElPTl9QUk9QUyk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIE1hcENvbnRyb2xsZXI7XG59KCk7XG5cbmV4cG9ydCB7IE1hcENvbnRyb2xsZXIgYXMgZGVmYXVsdCB9OyIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF90b0NvbnN1bWFibGVBcnJheSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Db25zdW1hYmxlQXJyYXlcIjtcbmltcG9ydCBfZGVmaW5lUHJvcGVydHkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5XCI7XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkge1xuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7XG5cbiAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTtcbiAgICBpZiAoZW51bWVyYWJsZU9ubHkpIHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTtcbiAgICB9KTtcbiAgICBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7XG4gIH1cblxuICByZXR1cm4ga2V5cztcbn1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTtcblxuICAgIGlmIChpICUgMikge1xuICAgICAgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlQ29udGV4dCwgdXNlUmVmLCB1c2VNZW1vLCB1c2VFZmZlY3QsIHVzZUltcGVyYXRpdmVIYW5kbGUsIGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgKiBhcyBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgU3RhdGljTWFwLCB7IGdldFZpZXdwb3J0IH0gZnJvbSAnLi9zdGF0aWMtbWFwJztcbmltcG9ydCB7IE1BUEJPWF9MSU1JVFMgfSBmcm9tICcuLi91dGlscy9tYXAtc3RhdGUnO1xuaW1wb3J0IFRyYW5zaXRpb25NYW5hZ2VyIGZyb20gJy4uL3V0aWxzL3RyYW5zaXRpb24tbWFuYWdlcic7XG5pbXBvcnQgTWFwQ29udGV4dCwgeyBNYXBDb250ZXh0UHJvdmlkZXIgfSBmcm9tICcuL21hcC1jb250ZXh0JztcbmltcG9ydCB7IEV2ZW50TWFuYWdlciB9IGZyb20gJ21qb2xuaXIuanMnO1xuaW1wb3J0IE1hcENvbnRyb2xsZXIgZnJvbSAnLi4vdXRpbHMvbWFwLWNvbnRyb2xsZXInO1xuaW1wb3J0IHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QgZnJvbSAnLi4vdXRpbHMvdXNlLWlzb21vcnBoaWMtbGF5b3V0LWVmZmVjdCc7XG5pbXBvcnQgeyBnZXRUZXJyYWluRWxldmF0aW9uIH0gZnJvbSAnLi4vdXRpbHMvdGVycmFpbic7XG52YXIgcHJvcFR5cGVzID0gT2JqZWN0LmFzc2lnbih7fSwgU3RhdGljTWFwLnByb3BUeXBlcywge1xuICBtYXhab29tOiBQcm9wVHlwZXMubnVtYmVyLFxuICBtaW5ab29tOiBQcm9wVHlwZXMubnVtYmVyLFxuICBtYXhQaXRjaDogUHJvcFR5cGVzLm51bWJlcixcbiAgbWluUGl0Y2g6IFByb3BUeXBlcy5udW1iZXIsXG4gIG9uVmlld1N0YXRlQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25WaWV3cG9ydENoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uSW50ZXJhY3Rpb25TdGF0ZUNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gIHRyYW5zaXRpb25EdXJhdGlvbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICB0cmFuc2l0aW9uSW50ZXJwb2xhdG9yOiBQcm9wVHlwZXMub2JqZWN0LFxuICB0cmFuc2l0aW9uSW50ZXJydXB0aW9uOiBQcm9wVHlwZXMubnVtYmVyLFxuICB0cmFuc2l0aW9uRWFzaW5nOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25UcmFuc2l0aW9uU3RhcnQ6IFByb3BUeXBlcy5mdW5jLFxuICBvblRyYW5zaXRpb25JbnRlcnJ1cHQ6IFByb3BUeXBlcy5mdW5jLFxuICBvblRyYW5zaXRpb25FbmQ6IFByb3BUeXBlcy5mdW5jLFxuICBzY3JvbGxab29tOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYm9vbCwgUHJvcFR5cGVzLm9iamVjdF0pLFxuICBkcmFnUGFuOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYm9vbCwgUHJvcFR5cGVzLm9iamVjdF0pLFxuICBkcmFnUm90YXRlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYm9vbCwgUHJvcFR5cGVzLm9iamVjdF0pLFxuICBkb3VibGVDbGlja1pvb206IFByb3BUeXBlcy5ib29sLFxuICB0b3VjaFpvb206IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ib29sLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIHRvdWNoUm90YXRlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYm9vbCwgUHJvcFR5cGVzLm9iamVjdF0pLFxuICBrZXlib2FyZDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmJvb2wsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgb25Ib3ZlcjogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICBvbkRibENsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25Db250ZXh0TWVudTogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uTW91c2VEb3duOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25Nb3VzZU1vdmU6IFByb3BUeXBlcy5mdW5jLFxuICBvbk1vdXNlVXA6IFByb3BUeXBlcy5mdW5jLFxuICBvblRvdWNoU3RhcnQ6IFByb3BUeXBlcy5mdW5jLFxuICBvblRvdWNoTW92ZTogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uVG91Y2hFbmQ6IFByb3BUeXBlcy5mdW5jLFxuICBvbk1vdXNlRW50ZXI6IFByb3BUeXBlcy5mdW5jLFxuICBvbk1vdXNlTGVhdmU6IFByb3BUeXBlcy5mdW5jLFxuICBvbk1vdXNlT3V0OiBQcm9wVHlwZXMuZnVuYyxcbiAgb25XaGVlbDogUHJvcFR5cGVzLmZ1bmMsXG4gIHRvdWNoQWN0aW9uOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBldmVudFJlY29nbml6ZXJPcHRpb25zOiBQcm9wVHlwZXMub2JqZWN0LFxuICBjbGlja1JhZGl1czogUHJvcFR5cGVzLm51bWJlcixcbiAgaW50ZXJhY3RpdmVMYXllcklkczogUHJvcFR5cGVzLmFycmF5LFxuICBnZXRDdXJzb3I6IFByb3BUeXBlcy5mdW5jLFxuICBjb250cm9sbGVyOiBQcm9wVHlwZXMuaW5zdGFuY2VPZihNYXBDb250cm9sbGVyKVxufSk7XG5cbnZhciBnZXREZWZhdWx0Q3Vyc29yID0gZnVuY3Rpb24gZ2V0RGVmYXVsdEN1cnNvcihfcmVmKSB7XG4gIHZhciBpc0RyYWdnaW5nID0gX3JlZi5pc0RyYWdnaW5nLFxuICAgICAgaXNIb3ZlcmluZyA9IF9yZWYuaXNIb3ZlcmluZztcbiAgcmV0dXJuIGlzRHJhZ2dpbmcgPyAnZ3JhYmJpbmcnIDogaXNIb3ZlcmluZyA/ICdwb2ludGVyJyA6ICdncmFiJztcbn07XG5cbnZhciBkZWZhdWx0UHJvcHMgPSBPYmplY3QuYXNzaWduKHt9LCBTdGF0aWNNYXAuZGVmYXVsdFByb3BzLCBNQVBCT1hfTElNSVRTLCBUcmFuc2l0aW9uTWFuYWdlci5kZWZhdWx0UHJvcHMsIHtcbiAgb25WaWV3U3RhdGVDaGFuZ2U6IG51bGwsXG4gIG9uVmlld3BvcnRDaGFuZ2U6IG51bGwsXG4gIG9uQ2xpY2s6IG51bGwsXG4gIG9uTmF0aXZlQ2xpY2s6IG51bGwsXG4gIG9uSG92ZXI6IG51bGwsXG4gIG9uQ29udGV4dE1lbnU6IGZ1bmN0aW9uIG9uQ29udGV4dE1lbnUoZXZlbnQpIHtcbiAgICByZXR1cm4gZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfSxcbiAgc2Nyb2xsWm9vbTogdHJ1ZSxcbiAgZHJhZ1BhbjogdHJ1ZSxcbiAgZHJhZ1JvdGF0ZTogdHJ1ZSxcbiAgZG91YmxlQ2xpY2tab29tOiB0cnVlLFxuICB0b3VjaFpvb206IHRydWUsXG4gIHRvdWNoUm90YXRlOiBmYWxzZSxcbiAga2V5Ym9hcmQ6IHRydWUsXG4gIHRvdWNoQWN0aW9uOiAnbm9uZScsXG4gIGV2ZW50UmVjb2duaXplck9wdGlvbnM6IHt9LFxuICBjbGlja1JhZGl1czogMCxcbiAgZ2V0Q3Vyc29yOiBnZXREZWZhdWx0Q3Vyc29yXG59KTtcblxuZnVuY3Rpb24gbm9ybWFsaXplRXZlbnQoZXZlbnQpIHtcbiAgaWYgKGV2ZW50LmxuZ0xhdCB8fCAhZXZlbnQub2Zmc2V0Q2VudGVyKSB7XG4gICAgcmV0dXJuIGV2ZW50O1xuICB9XG5cbiAgdmFyIF9ldmVudCRvZmZzZXRDZW50ZXIgPSBldmVudC5vZmZzZXRDZW50ZXIsXG4gICAgICB4ID0gX2V2ZW50JG9mZnNldENlbnRlci54LFxuICAgICAgeSA9IF9ldmVudCRvZmZzZXRDZW50ZXIueTtcblxuICBpZiAoIU51bWJlci5pc0Zpbml0ZSh4KSB8fCAhTnVtYmVyLmlzRmluaXRlKHkpKSB7XG4gICAgcmV0dXJuIGV2ZW50O1xuICB9XG5cbiAgdmFyIHBvcyA9IFt4LCB5XTtcbiAgZXZlbnQucG9pbnQgPSBwb3M7XG4gIHZhciB2aWV3cG9ydCA9IHRoaXMudmlld3BvcnQ7XG4gIHZhciBsb2NhdGlvbiA9IHZpZXdwb3J0LnVucHJvamVjdChwb3MsIHtcbiAgICB0YXJnZXRaOiB2aWV3cG9ydC5tZXRlck9mZnNldFsyXVxuICB9KTtcbiAgZXZlbnQubG5nTGF0ID0gW2xvY2F0aW9uWzBdLCBsb2NhdGlvblsxXV07XG4gIHJldHVybiBldmVudDtcbn1cblxuZnVuY3Rpb24gZ2V0RmVhdHVyZXMocG9zKSB7XG4gIHZhciBtYXAgPSB0aGlzLm1hcDtcblxuICBpZiAoIW1hcCB8fCAhcG9zKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgcXVlcnlQYXJhbXMgPSB7fTtcbiAgdmFyIHNpemUgPSB0aGlzLnByb3BzLmNsaWNrUmFkaXVzO1xuXG4gIGlmICh0aGlzLnByb3BzLmludGVyYWN0aXZlTGF5ZXJJZHMpIHtcbiAgICBxdWVyeVBhcmFtcy5sYXllcnMgPSB0aGlzLnByb3BzLmludGVyYWN0aXZlTGF5ZXJJZHM7XG4gIH1cblxuICB0cnkge1xuICAgIHJldHVybiBtYXAucXVlcnlSZW5kZXJlZEZlYXR1cmVzKHNpemUgPyBbW3Bvc1swXSAtIHNpemUsIHBvc1sxXSArIHNpemVdLCBbcG9zWzBdICsgc2l6ZSwgcG9zWzFdIC0gc2l6ZV1dIDogcG9zLCBxdWVyeVBhcmFtcyk7XG4gIH0gY2F0Y2ggKF91bnVzZWQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiBvbkV2ZW50KGNhbGxiYWNrTmFtZSwgZXZlbnQpIHtcbiAgdmFyIGZ1bmMgPSB0aGlzLnByb3BzW2NhbGxiYWNrTmFtZV07XG5cbiAgaWYgKGZ1bmMpIHtcbiAgICBmdW5jKG5vcm1hbGl6ZUV2ZW50LmNhbGwodGhpcywgZXZlbnQpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBvblBvaW50ZXJEb3duKGV2ZW50KSB7XG4gIG9uRXZlbnQuY2FsbCh0aGlzLCBldmVudC5wb2ludGVyVHlwZSA9PT0gJ3RvdWNoJyA/ICdvblRvdWNoU3RhcnQnIDogJ29uTW91c2VEb3duJywgZXZlbnQpO1xufVxuXG5mdW5jdGlvbiBvblBvaW50ZXJVcChldmVudCkge1xuICBvbkV2ZW50LmNhbGwodGhpcywgZXZlbnQucG9pbnRlclR5cGUgPT09ICd0b3VjaCcgPyAnb25Ub3VjaEVuZCcgOiAnb25Nb3VzZVVwJywgZXZlbnQpO1xufVxuXG5mdW5jdGlvbiBvblBvaW50ZXJNb3ZlKGV2ZW50KSB7XG4gIG9uRXZlbnQuY2FsbCh0aGlzLCBldmVudC5wb2ludGVyVHlwZSA9PT0gJ3RvdWNoJyA/ICdvblRvdWNoTW92ZScgOiAnb25Nb3VzZU1vdmUnLCBldmVudCk7XG5cbiAgaWYgKCF0aGlzLnN0YXRlLmlzRHJhZ2dpbmcpIHtcbiAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICBvbkhvdmVyID0gX3RoaXMkcHJvcHMub25Ib3ZlcixcbiAgICAgICAgaW50ZXJhY3RpdmVMYXllcklkcyA9IF90aGlzJHByb3BzLmludGVyYWN0aXZlTGF5ZXJJZHM7XG4gICAgdmFyIGZlYXR1cmVzO1xuICAgIGV2ZW50ID0gbm9ybWFsaXplRXZlbnQuY2FsbCh0aGlzLCBldmVudCk7XG5cbiAgICBpZiAoaW50ZXJhY3RpdmVMYXllcklkcyB8fCBvbkhvdmVyKSB7XG4gICAgICBmZWF0dXJlcyA9IGdldEZlYXR1cmVzLmNhbGwodGhpcywgZXZlbnQucG9pbnQpO1xuICAgIH1cblxuICAgIHZhciBpc0hvdmVyaW5nID0gQm9vbGVhbihpbnRlcmFjdGl2ZUxheWVySWRzICYmIGZlYXR1cmVzICYmIGZlYXR1cmVzLmxlbmd0aCA+IDApO1xuICAgIHZhciBpc0VudGVyaW5nID0gaXNIb3ZlcmluZyAmJiAhdGhpcy5zdGF0ZS5pc0hvdmVyaW5nO1xuICAgIHZhciBpc0V4aXRpbmcgPSAhaXNIb3ZlcmluZyAmJiB0aGlzLnN0YXRlLmlzSG92ZXJpbmc7XG5cbiAgICBpZiAob25Ib3ZlciB8fCBpc0VudGVyaW5nKSB7XG4gICAgICBldmVudC5mZWF0dXJlcyA9IGZlYXR1cmVzO1xuXG4gICAgICBpZiAob25Ib3Zlcikge1xuICAgICAgICBvbkhvdmVyKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNFbnRlcmluZykge1xuICAgICAgb25FdmVudC5jYWxsKHRoaXMsICdvbk1vdXNlRW50ZXInLCBldmVudCk7XG4gICAgfVxuXG4gICAgaWYgKGlzRXhpdGluZykge1xuICAgICAgb25FdmVudC5jYWxsKHRoaXMsICdvbk1vdXNlTGVhdmUnLCBldmVudCk7XG4gICAgfVxuXG4gICAgaWYgKGlzRW50ZXJpbmcgfHwgaXNFeGl0aW5nKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgaXNIb3ZlcmluZzogaXNIb3ZlcmluZ1xuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG9uUG9pbnRlckNsaWNrKGV2ZW50KSB7XG4gIHZhciBfdGhpcyRwcm9wczIgPSB0aGlzLnByb3BzLFxuICAgICAgb25DbGljayA9IF90aGlzJHByb3BzMi5vbkNsaWNrLFxuICAgICAgb25OYXRpdmVDbGljayA9IF90aGlzJHByb3BzMi5vbk5hdGl2ZUNsaWNrLFxuICAgICAgb25EYmxDbGljayA9IF90aGlzJHByb3BzMi5vbkRibENsaWNrLFxuICAgICAgZG91YmxlQ2xpY2tab29tID0gX3RoaXMkcHJvcHMyLmRvdWJsZUNsaWNrWm9vbTtcbiAgdmFyIGNhbGxiYWNrcyA9IFtdO1xuICB2YXIgaXNEb3VibGVDbGlja0VuYWJsZWQgPSBvbkRibENsaWNrIHx8IGRvdWJsZUNsaWNrWm9vbTtcblxuICBzd2l0Y2ggKGV2ZW50LnR5cGUpIHtcbiAgICBjYXNlICdhbnljbGljayc6XG4gICAgICBjYWxsYmFja3MucHVzaChvbk5hdGl2ZUNsaWNrKTtcblxuICAgICAgaWYgKCFpc0RvdWJsZUNsaWNrRW5hYmxlZCkge1xuICAgICAgICBjYWxsYmFja3MucHVzaChvbkNsaWNrKTtcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdjbGljayc6XG4gICAgICBpZiAoaXNEb3VibGVDbGlja0VuYWJsZWQpIHtcbiAgICAgICAgY2FsbGJhY2tzLnB1c2gob25DbGljayk7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgfVxuXG4gIGNhbGxiYWNrcyA9IGNhbGxiYWNrcy5maWx0ZXIoQm9vbGVhbik7XG5cbiAgaWYgKGNhbGxiYWNrcy5sZW5ndGgpIHtcbiAgICBldmVudCA9IG5vcm1hbGl6ZUV2ZW50LmNhbGwodGhpcywgZXZlbnQpO1xuICAgIGV2ZW50LmZlYXR1cmVzID0gZ2V0RmVhdHVyZXMuY2FsbCh0aGlzLCBldmVudC5wb2ludCk7XG4gICAgY2FsbGJhY2tzLmZvckVhY2goZnVuY3Rpb24gKGNiKSB7XG4gICAgICByZXR1cm4gY2IoZXZlbnQpO1xuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFJlZkhhbmRsZXMoc3RhdGljTWFwUmVmKSB7XG4gIHJldHVybiB7XG4gICAgZ2V0TWFwOiBzdGF0aWNNYXBSZWYuY3VycmVudCAmJiBzdGF0aWNNYXBSZWYuY3VycmVudC5nZXRNYXAsXG4gICAgcXVlcnlSZW5kZXJlZEZlYXR1cmVzOiBzdGF0aWNNYXBSZWYuY3VycmVudCAmJiBzdGF0aWNNYXBSZWYuY3VycmVudC5xdWVyeVJlbmRlcmVkRmVhdHVyZXNcbiAgfTtcbn1cblxudmFyIEludGVyYWN0aXZlTWFwID0gZm9yd2FyZFJlZihmdW5jdGlvbiAocHJvcHMsIHJlZikge1xuICB2YXIgcGFyZW50Q29udGV4dCA9IHVzZUNvbnRleHQoTWFwQ29udGV4dCk7XG4gIHZhciBjb250cm9sbGVyID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHByb3BzLmNvbnRyb2xsZXIgfHwgbmV3IE1hcENvbnRyb2xsZXIoKTtcbiAgfSwgW10pO1xuICB2YXIgZXZlbnRNYW5hZ2VyID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBFdmVudE1hbmFnZXIobnVsbCwge1xuICAgICAgdG91Y2hBY3Rpb246IHByb3BzLnRvdWNoQWN0aW9uLFxuICAgICAgcmVjb2duaXplck9wdGlvbnM6IHByb3BzLmV2ZW50UmVjb2duaXplck9wdGlvbnNcbiAgICB9KTtcbiAgfSwgW10pO1xuICB2YXIgZXZlbnRDYW52YXNSZWYgPSB1c2VSZWYobnVsbCk7XG4gIHZhciBzdGF0aWNNYXBSZWYgPSB1c2VSZWYobnVsbCk7XG5cbiAgdmFyIF90aGlzUmVmID0gdXNlUmVmKHtcbiAgICB3aWR0aDogMCxcbiAgICBoZWlnaHQ6IDAsXG4gICAgc3RhdGU6IHtcbiAgICAgIGlzSG92ZXJpbmc6IGZhbHNlLFxuICAgICAgaXNEcmFnZ2luZzogZmFsc2VcbiAgICB9XG4gIH0pO1xuXG4gIHZhciB0aGlzUmVmID0gX3RoaXNSZWYuY3VycmVudDtcbiAgdGhpc1JlZi5wcm9wcyA9IHByb3BzO1xuICB0aGlzUmVmLm1hcCA9IHN0YXRpY01hcFJlZi5jdXJyZW50ICYmIHN0YXRpY01hcFJlZi5jdXJyZW50LmdldE1hcCgpO1xuXG4gIHRoaXNSZWYuc2V0U3RhdGUgPSBmdW5jdGlvbiAobmV3U3RhdGUpIHtcbiAgICB0aGlzUmVmLnN0YXRlID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCB0aGlzUmVmLnN0YXRlKSwgbmV3U3RhdGUpO1xuICAgIGV2ZW50Q2FudmFzUmVmLmN1cnJlbnQuc3R5bGUuY3Vyc29yID0gcHJvcHMuZ2V0Q3Vyc29yKHRoaXNSZWYuc3RhdGUpO1xuICB9O1xuXG4gIHZhciBpblJlbmRlciA9IHRydWU7XG4gIHZhciB2aWV3cG9ydFVwZGF0ZVJlcXVlc3RlZDtcbiAgdmFyIHN0YXRlVXBkYXRlUmVxdWVzdGVkO1xuXG4gIHZhciBoYW5kbGVWaWV3cG9ydENoYW5nZSA9IGZ1bmN0aW9uIGhhbmRsZVZpZXdwb3J0Q2hhbmdlKHZpZXdTdGF0ZSwgaW50ZXJhY3Rpb25TdGF0ZSwgb2xkVmlld1N0YXRlKSB7XG4gICAgaWYgKGluUmVuZGVyKSB7XG4gICAgICB2aWV3cG9ydFVwZGF0ZVJlcXVlc3RlZCA9IFt2aWV3U3RhdGUsIGludGVyYWN0aW9uU3RhdGUsIG9sZFZpZXdTdGF0ZV07XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIF90aGlzUmVmJHByb3BzID0gdGhpc1JlZi5wcm9wcyxcbiAgICAgICAgb25WaWV3U3RhdGVDaGFuZ2UgPSBfdGhpc1JlZiRwcm9wcy5vblZpZXdTdGF0ZUNoYW5nZSxcbiAgICAgICAgb25WaWV3cG9ydENoYW5nZSA9IF90aGlzUmVmJHByb3BzLm9uVmlld3BvcnRDaGFuZ2U7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHZpZXdTdGF0ZSwgJ3Bvc2l0aW9uJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBbMCwgMCwgZ2V0VGVycmFpbkVsZXZhdGlvbih0aGlzUmVmLm1hcCwgdmlld1N0YXRlKV07XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAob25WaWV3U3RhdGVDaGFuZ2UpIHtcbiAgICAgIG9uVmlld1N0YXRlQ2hhbmdlKHtcbiAgICAgICAgdmlld1N0YXRlOiB2aWV3U3RhdGUsXG4gICAgICAgIGludGVyYWN0aW9uU3RhdGU6IGludGVyYWN0aW9uU3RhdGUsXG4gICAgICAgIG9sZFZpZXdTdGF0ZTogb2xkVmlld1N0YXRlXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAob25WaWV3cG9ydENoYW5nZSkge1xuICAgICAgb25WaWV3cG9ydENoYW5nZSh2aWV3U3RhdGUsIGludGVyYWN0aW9uU3RhdGUsIG9sZFZpZXdTdGF0ZSk7XG4gICAgfVxuICB9O1xuXG4gIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGdldFJlZkhhbmRsZXMoc3RhdGljTWFwUmVmKTtcbiAgfSwgW10pO1xuICB2YXIgY29udGV4dCA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHBhcmVudENvbnRleHQpLCB7fSwge1xuICAgICAgZXZlbnRNYW5hZ2VyOiBldmVudE1hbmFnZXIsXG4gICAgICBjb250YWluZXI6IHBhcmVudENvbnRleHQuY29udGFpbmVyIHx8IGV2ZW50Q2FudmFzUmVmLmN1cnJlbnRcbiAgICB9KTtcbiAgfSwgW3BhcmVudENvbnRleHQsIGV2ZW50Q2FudmFzUmVmLmN1cnJlbnRdKTtcbiAgY29udGV4dC5vblZpZXdwb3J0Q2hhbmdlID0gaGFuZGxlVmlld3BvcnRDaGFuZ2U7XG4gIGNvbnRleHQudmlld3BvcnQgPSBwYXJlbnRDb250ZXh0LnZpZXdwb3J0IHx8IGdldFZpZXdwb3J0KHRoaXNSZWYpO1xuICB0aGlzUmVmLnZpZXdwb3J0ID0gY29udGV4dC52aWV3cG9ydDtcblxuICB2YXIgaGFuZGxlSW50ZXJhY3Rpb25TdGF0ZUNoYW5nZSA9IGZ1bmN0aW9uIGhhbmRsZUludGVyYWN0aW9uU3RhdGVDaGFuZ2UoaW50ZXJhY3Rpb25TdGF0ZSkge1xuICAgIHZhciBfaW50ZXJhY3Rpb25TdGF0ZSRpc0QgPSBpbnRlcmFjdGlvblN0YXRlLmlzRHJhZ2dpbmcsXG4gICAgICAgIGlzRHJhZ2dpbmcgPSBfaW50ZXJhY3Rpb25TdGF0ZSRpc0QgPT09IHZvaWQgMCA/IGZhbHNlIDogX2ludGVyYWN0aW9uU3RhdGUkaXNEO1xuXG4gICAgaWYgKGlzRHJhZ2dpbmcgIT09IHRoaXNSZWYuc3RhdGUuaXNEcmFnZ2luZykge1xuICAgICAgdGhpc1JlZi5zZXRTdGF0ZSh7XG4gICAgICAgIGlzRHJhZ2dpbmc6IGlzRHJhZ2dpbmdcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChpblJlbmRlcikge1xuICAgICAgc3RhdGVVcGRhdGVSZXF1ZXN0ZWQgPSBpbnRlcmFjdGlvblN0YXRlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBvbkludGVyYWN0aW9uU3RhdGVDaGFuZ2UgPSB0aGlzUmVmLnByb3BzLm9uSW50ZXJhY3Rpb25TdGF0ZUNoYW5nZTtcblxuICAgIGlmIChvbkludGVyYWN0aW9uU3RhdGVDaGFuZ2UpIHtcbiAgICAgIG9uSW50ZXJhY3Rpb25TdGF0ZUNoYW5nZShpbnRlcmFjdGlvblN0YXRlKTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIHVwZGF0ZUNvbnRyb2xsZXJPcHRzID0gZnVuY3Rpb24gdXBkYXRlQ29udHJvbGxlck9wdHMoKSB7XG4gICAgaWYgKHRoaXNSZWYud2lkdGggJiYgdGhpc1JlZi5oZWlnaHQpIHtcbiAgICAgIGNvbnRyb2xsZXIuc2V0T3B0aW9ucyhfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgdGhpc1JlZi5wcm9wcyksIHRoaXNSZWYucHJvcHMudmlld1N0YXRlKSwge30sIHtcbiAgICAgICAgaXNJbnRlcmFjdGl2ZTogQm9vbGVhbih0aGlzUmVmLnByb3BzLm9uVmlld1N0YXRlQ2hhbmdlIHx8IHRoaXNSZWYucHJvcHMub25WaWV3cG9ydENoYW5nZSksXG4gICAgICAgIG9uVmlld3BvcnRDaGFuZ2U6IGhhbmRsZVZpZXdwb3J0Q2hhbmdlLFxuICAgICAgICBvblN0YXRlQ2hhbmdlOiBoYW5kbGVJbnRlcmFjdGlvblN0YXRlQ2hhbmdlLFxuICAgICAgICBldmVudE1hbmFnZXI6IGV2ZW50TWFuYWdlcixcbiAgICAgICAgd2lkdGg6IHRoaXNSZWYud2lkdGgsXG4gICAgICAgIGhlaWdodDogdGhpc1JlZi5oZWlnaHRcbiAgICAgIH0pKTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIG9uUmVzaXplID0gZnVuY3Rpb24gb25SZXNpemUoX3JlZjIpIHtcbiAgICB2YXIgd2lkdGggPSBfcmVmMi53aWR0aCxcbiAgICAgICAgaGVpZ2h0ID0gX3JlZjIuaGVpZ2h0O1xuICAgIHRoaXNSZWYud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzUmVmLmhlaWdodCA9IGhlaWdodDtcbiAgICB1cGRhdGVDb250cm9sbGVyT3B0cygpO1xuICAgIHRoaXNSZWYucHJvcHMub25SZXNpemUoe1xuICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgaGVpZ2h0OiBoZWlnaHRcbiAgICB9KTtcbiAgfTtcblxuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGV2ZW50TWFuYWdlci5zZXRFbGVtZW50KGV2ZW50Q2FudmFzUmVmLmN1cnJlbnQpO1xuICAgIGV2ZW50TWFuYWdlci5vbih7XG4gICAgICBwb2ludGVyZG93bjogb25Qb2ludGVyRG93bi5iaW5kKHRoaXNSZWYpLFxuICAgICAgcG9pbnRlcm1vdmU6IG9uUG9pbnRlck1vdmUuYmluZCh0aGlzUmVmKSxcbiAgICAgIHBvaW50ZXJ1cDogb25Qb2ludGVyVXAuYmluZCh0aGlzUmVmKSxcbiAgICAgIHBvaW50ZXJsZWF2ZTogb25FdmVudC5iaW5kKHRoaXNSZWYsICdvbk1vdXNlT3V0JyksXG4gICAgICBjbGljazogb25Qb2ludGVyQ2xpY2suYmluZCh0aGlzUmVmKSxcbiAgICAgIGFueWNsaWNrOiBvblBvaW50ZXJDbGljay5iaW5kKHRoaXNSZWYpLFxuICAgICAgZGJsY2xpY2s6IG9uRXZlbnQuYmluZCh0aGlzUmVmLCAnb25EYmxDbGljaycpLFxuICAgICAgd2hlZWw6IG9uRXZlbnQuYmluZCh0aGlzUmVmLCAnb25XaGVlbCcpLFxuICAgICAgY29udGV4dG1lbnU6IG9uRXZlbnQuYmluZCh0aGlzUmVmLCAnb25Db250ZXh0TWVudScpXG4gICAgfSk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIGV2ZW50TWFuYWdlci5kZXN0cm95KCk7XG4gICAgfTtcbiAgfSwgW10pO1xuICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodmlld3BvcnRVcGRhdGVSZXF1ZXN0ZWQpIHtcbiAgICAgIGhhbmRsZVZpZXdwb3J0Q2hhbmdlLmFwcGx5KHZvaWQgMCwgX3RvQ29uc3VtYWJsZUFycmF5KHZpZXdwb3J0VXBkYXRlUmVxdWVzdGVkKSk7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlVXBkYXRlUmVxdWVzdGVkKSB7XG4gICAgICBoYW5kbGVJbnRlcmFjdGlvblN0YXRlQ2hhbmdlKHN0YXRlVXBkYXRlUmVxdWVzdGVkKTtcbiAgICB9XG4gIH0pO1xuICB1cGRhdGVDb250cm9sbGVyT3B0cygpO1xuICB2YXIgd2lkdGggPSBwcm9wcy53aWR0aCxcbiAgICAgIGhlaWdodCA9IHByb3BzLmhlaWdodCxcbiAgICAgIHN0eWxlID0gcHJvcHMuc3R5bGUsXG4gICAgICBnZXRDdXJzb3IgPSBwcm9wcy5nZXRDdXJzb3I7XG4gIHZhciBldmVudENhbnZhc1N0eWxlID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7XG4gICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJ1xuICAgIH0sIHN0eWxlKSwge30sIHtcbiAgICAgIHdpZHRoOiB3aWR0aCxcbiAgICAgIGhlaWdodDogaGVpZ2h0LFxuICAgICAgY3Vyc29yOiBnZXRDdXJzb3IodGhpc1JlZi5zdGF0ZSlcbiAgICB9KTtcbiAgfSwgW3N0eWxlLCB3aWR0aCwgaGVpZ2h0LCBnZXRDdXJzb3IsIHRoaXNSZWYuc3RhdGVdKTtcblxuICBpZiAoIXZpZXdwb3J0VXBkYXRlUmVxdWVzdGVkIHx8ICF0aGlzUmVmLl9jaGlsZCkge1xuICAgIHRoaXNSZWYuX2NoaWxkID0gUmVhY3QuY3JlYXRlRWxlbWVudChNYXBDb250ZXh0UHJvdmlkZXIsIHtcbiAgICAgIHZhbHVlOiBjb250ZXh0XG4gICAgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICBrZXk6IFwiZXZlbnQtY2FudmFzXCIsXG4gICAgICByZWY6IGV2ZW50Q2FudmFzUmVmLFxuICAgICAgc3R5bGU6IGV2ZW50Q2FudmFzU3R5bGVcbiAgICB9LCBSZWFjdC5jcmVhdGVFbGVtZW50KFN0YXRpY01hcCwgX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgICB3aWR0aDogXCIxMDAlXCIsXG4gICAgICBoZWlnaHQ6IFwiMTAwJVwiLFxuICAgICAgc3R5bGU6IG51bGwsXG4gICAgICBvblJlc2l6ZTogb25SZXNpemUsXG4gICAgICByZWY6IHN0YXRpY01hcFJlZlxuICAgIH0pKSkpO1xuICB9XG5cbiAgaW5SZW5kZXIgPSBmYWxzZTtcbiAgcmV0dXJuIHRoaXNSZWYuX2NoaWxkO1xufSk7XG5JbnRlcmFjdGl2ZU1hcC5zdXBwb3J0ZWQgPSBTdGF0aWNNYXAuc3VwcG9ydGVkO1xuSW50ZXJhY3RpdmVNYXAucHJvcFR5cGVzID0gcHJvcFR5cGVzO1xuSW50ZXJhY3RpdmVNYXAuZGVmYXVsdFByb3BzID0gZGVmYXVsdFByb3BzO1xuZXhwb3J0IGRlZmF1bHQgSW50ZXJhY3RpdmVNYXA7IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikge1xuICAgIF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICAgICAgcmV0dXJuIHR5cGVvZiBvYmo7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgICAgIHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gX3R5cGVvZihvYmopO1xufSIsImltcG9ydCBfdHlwZW9mIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2ZcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRlZXBFcXVhbChhLCBiKSB7XG4gIGlmIChhID09PSBiKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoIWEgfHwgIWIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheShhKSkge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShiKSB8fCBhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICghZGVlcEVxdWFsKGFbaV0sIGJbaV0pKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGIpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKF90eXBlb2YoYSkgPT09ICdvYmplY3QnICYmIF90eXBlb2YoYikgPT09ICdvYmplY3QnKSB7XG4gICAgdmFyIGFLZXlzID0gT2JqZWN0LmtleXMoYSk7XG4gICAgdmFyIGJLZXlzID0gT2JqZWN0LmtleXMoYik7XG5cbiAgICBpZiAoYUtleXMubGVuZ3RoICE9PSBiS2V5cy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfaSA9IDAsIF9hS2V5cyA9IGFLZXlzOyBfaSA8IF9hS2V5cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgIHZhciBrZXkgPSBfYUtleXNbX2ldO1xuXG4gICAgICBpZiAoIWIuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmICghZGVlcEVxdWFsKGFba2V5XSwgYltrZXldKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59IiwiaW1wb3J0IF9zbGljZWRUb0FycmF5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zbGljZWRUb0FycmF5XCI7XG5pbXBvcnQgX2RlZmluZVByb3BlcnR5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eVwiO1xuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHtcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXG4gIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7XG4gICAgaWYgKGVudW1lcmFibGVPbmx5KSBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkge1xuICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7XG4gICAgfSk7XG4gICAga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpO1xuICB9XG5cbiAgcmV0dXJuIGtleXM7XG59XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307XG5cbiAgICBpZiAoaSAlIDIpIHtcbiAgICAgIG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUNvbnRleHQsIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlU3RhdGUsIHVzZVJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNsb25lRWxlbWVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBNYXBDb250ZXh0IGZyb20gJy4vbWFwLWNvbnRleHQnO1xuaW1wb3J0IGFzc2VydCBmcm9tICcuLi91dGlscy9hc3NlcnQnO1xuaW1wb3J0IGRlZXBFcXVhbCBmcm9tICcuLi91dGlscy9kZWVwLWVxdWFsJztcbnZhciBzb3VyY2VDb3VudGVyID0gMDtcblxuZnVuY3Rpb24gY3JlYXRlU291cmNlKG1hcCwgaWQsIHByb3BzKSB7XG4gIGlmIChtYXAuc3R5bGUgJiYgbWFwLnN0eWxlLl9sb2FkZWQpIHtcbiAgICB2YXIgb3B0aW9ucyA9IF9vYmplY3RTcHJlYWQoe30sIHByb3BzKTtcblxuICAgIGRlbGV0ZSBvcHRpb25zLmlkO1xuICAgIGRlbGV0ZSBvcHRpb25zLmNoaWxkcmVuO1xuICAgIG1hcC5hZGRTb3VyY2UoaWQsIG9wdGlvbnMpO1xuICAgIHJldHVybiBtYXAuZ2V0U291cmNlKGlkKTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVTb3VyY2Uoc291cmNlLCBwcm9wcywgcHJldlByb3BzKSB7XG4gIGFzc2VydChwcm9wcy5pZCA9PT0gcHJldlByb3BzLmlkLCAnc291cmNlIGlkIGNoYW5nZWQnKTtcbiAgYXNzZXJ0KHByb3BzLnR5cGUgPT09IHByZXZQcm9wcy50eXBlLCAnc291cmNlIHR5cGUgY2hhbmdlZCcpO1xuICB2YXIgY2hhbmdlZEtleSA9ICcnO1xuICB2YXIgY2hhbmdlZEtleUNvdW50ID0gMDtcblxuICBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHtcbiAgICBpZiAoa2V5ICE9PSAnY2hpbGRyZW4nICYmIGtleSAhPT0gJ2lkJyAmJiAhZGVlcEVxdWFsKHByZXZQcm9wc1trZXldLCBwcm9wc1trZXldKSkge1xuICAgICAgY2hhbmdlZEtleSA9IGtleTtcbiAgICAgIGNoYW5nZWRLZXlDb3VudCsrO1xuICAgIH1cbiAgfVxuXG4gIGlmICghY2hhbmdlZEtleUNvdW50KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHR5cGUgPSBwcm9wcy50eXBlO1xuXG4gIGlmICh0eXBlID09PSAnZ2VvanNvbicpIHtcbiAgICBzb3VyY2Uuc2V0RGF0YShwcm9wcy5kYXRhKTtcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnaW1hZ2UnKSB7XG4gICAgc291cmNlLnVwZGF0ZUltYWdlKHtcbiAgICAgIHVybDogcHJvcHMudXJsLFxuICAgICAgY29vcmRpbmF0ZXM6IHByb3BzLmNvb3JkaW5hdGVzXG4gICAgfSk7XG4gIH0gZWxzZSBpZiAoKHR5cGUgPT09ICdjYW52YXMnIHx8IHR5cGUgPT09ICd2aWRlbycpICYmIGNoYW5nZWRLZXlDb3VudCA9PT0gMSAmJiBjaGFuZ2VkS2V5ID09PSAnY29vcmRpbmF0ZXMnKSB7XG4gICAgc291cmNlLnNldENvb3JkaW5hdGVzKHByb3BzLmNvb3JkaW5hdGVzKTtcbiAgfSBlbHNlIGlmICh0eXBlID09PSAndmVjdG9yJyAmJiBzb3VyY2Uuc2V0VXJsKSB7XG4gICAgc3dpdGNoIChjaGFuZ2VkS2V5KSB7XG4gICAgICBjYXNlICd1cmwnOlxuICAgICAgICBzb3VyY2Uuc2V0VXJsKHByb3BzLnVybCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICd0aWxlcyc6XG4gICAgICAgIHNvdXJjZS5zZXRUaWxlcyhwcm9wcy50aWxlcyk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb25zb2xlLndhcm4oXCJVbmFibGUgdG8gdXBkYXRlIDxTb3VyY2U+IHByb3A6IFwiLmNvbmNhdChjaGFuZ2VkS2V5KSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gU291cmNlKHByb3BzKSB7XG4gIHZhciBjb250ZXh0ID0gdXNlQ29udGV4dChNYXBDb250ZXh0KTtcbiAgdmFyIHByb3BzUmVmID0gdXNlUmVmKHtcbiAgICBpZDogcHJvcHMuaWQsXG4gICAgdHlwZTogcHJvcHMudHlwZVxuICB9KTtcblxuICB2YXIgX3VzZVN0YXRlID0gdXNlU3RhdGUoMCksXG4gICAgICBfdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlLCAyKSxcbiAgICAgIHNldFN0eWxlTG9hZGVkID0gX3VzZVN0YXRlMlsxXTtcblxuICB2YXIgaWQgPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gcHJvcHMuaWQgfHwgXCJqc3gtc291cmNlLVwiLmNvbmNhdChzb3VyY2VDb3VudGVyKyspO1xuICB9LCBbXSk7XG4gIHZhciBtYXAgPSBjb250ZXh0Lm1hcDtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAobWFwKSB7XG4gICAgICB2YXIgZm9yY2VVcGRhdGUgPSBmdW5jdGlvbiBmb3JjZVVwZGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHNldFN0eWxlTG9hZGVkKGZ1bmN0aW9uICh2ZXJzaW9uKSB7XG4gICAgICAgICAgcmV0dXJuIHZlcnNpb24gKyAxO1xuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIG1hcC5vbignc3R5bGVkYXRhJywgZm9yY2VVcGRhdGUpO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbWFwLm9mZignc3R5bGVkYXRhJywgZm9yY2VVcGRhdGUpO1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmIChtYXAuc3R5bGUgJiYgbWFwLnN0eWxlLl9sb2FkZWQgJiYgbWFwLmdldFNvdXJjZShpZCkpIHtcbiAgICAgICAgICAgIG1hcC5yZW1vdmVTb3VyY2UoaWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH0sIFttYXAsIGlkXSk7XG4gIHZhciBzb3VyY2UgPSBtYXAgJiYgbWFwLnN0eWxlICYmIG1hcC5nZXRTb3VyY2UoaWQpO1xuXG4gIGlmIChzb3VyY2UpIHtcbiAgICB1cGRhdGVTb3VyY2Uoc291cmNlLCBwcm9wcywgcHJvcHNSZWYuY3VycmVudCk7XG4gIH0gZWxzZSB7XG4gICAgc291cmNlID0gY3JlYXRlU291cmNlKG1hcCwgaWQsIHByb3BzKTtcbiAgfVxuXG4gIHByb3BzUmVmLmN1cnJlbnQgPSBwcm9wcztcbiAgcmV0dXJuIHNvdXJjZSAmJiBSZWFjdC5DaGlsZHJlbi5tYXAocHJvcHMuY2hpbGRyZW4sIGZ1bmN0aW9uIChjaGlsZCkge1xuICAgIHJldHVybiBjaGlsZCAmJiBjbG9uZUVsZW1lbnQoY2hpbGQsIHtcbiAgICAgIHNvdXJjZTogaWRcbiAgICB9KTtcbiAgfSkgfHwgbnVsbDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgU291cmNlOyIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHtcbiAgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307XG4gIHZhciB0YXJnZXQgPSB7fTtcbiAgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpO1xuICB2YXIga2V5LCBpO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAga2V5ID0gc291cmNlS2V5c1tpXTtcbiAgICBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlO1xuICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufSIsImltcG9ydCBvYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCIuL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7XG4gIGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9O1xuICB2YXIgdGFyZ2V0ID0gb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTtcbiAgdmFyIGtleSwgaTtcblxuICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICAgIHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07XG4gICAgICBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlO1xuICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTtcbiAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn0iLCJpbXBvcnQgX3NsaWNlZFRvQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXlcIjtcbmltcG9ydCBfZGVmaW5lUHJvcGVydHkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5XCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc1wiO1xuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHtcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXG4gIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7XG4gICAgaWYgKGVudW1lcmFibGVPbmx5KSBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkge1xuICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7XG4gICAgfSk7XG4gICAga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpO1xuICB9XG5cbiAgcmV0dXJuIGtleXM7XG59XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307XG5cbiAgICBpZiAoaSAlIDIpIHtcbiAgICAgIG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbmltcG9ydCB7IHVzZUNvbnRleHQsIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlU3RhdGUsIHVzZVJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCAqIGFzIFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBNYXBDb250ZXh0IGZyb20gJy4vbWFwLWNvbnRleHQnO1xuaW1wb3J0IGFzc2VydCBmcm9tICcuLi91dGlscy9hc3NlcnQnO1xuaW1wb3J0IGRlZXBFcXVhbCBmcm9tICcuLi91dGlscy9kZWVwLWVxdWFsJztcbnZhciBMQVlFUl9UWVBFUyA9IFsnZmlsbCcsICdsaW5lJywgJ3N5bWJvbCcsICdjaXJjbGUnLCAnZmlsbC1leHRydXNpb24nLCAncmFzdGVyJywgJ2JhY2tncm91bmQnLCAnaGVhdG1hcCcsICdoaWxsc2hhZGUnLCAnc2t5J107XG52YXIgcHJvcFR5cGVzID0ge1xuICB0eXBlOiBQcm9wVHlwZXMub25lT2YoTEFZRVJfVFlQRVMpLmlzUmVxdWlyZWQsXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzb3VyY2U6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGJlZm9yZUlkOiBQcm9wVHlwZXMuc3RyaW5nXG59O1xuXG5mdW5jdGlvbiBkaWZmTGF5ZXJTdHlsZXMobWFwLCBpZCwgcHJvcHMsIHByZXZQcm9wcykge1xuICB2YXIgX3Byb3BzJGxheW91dCA9IHByb3BzLmxheW91dCxcbiAgICAgIGxheW91dCA9IF9wcm9wcyRsYXlvdXQgPT09IHZvaWQgMCA/IHt9IDogX3Byb3BzJGxheW91dCxcbiAgICAgIF9wcm9wcyRwYWludCA9IHByb3BzLnBhaW50LFxuICAgICAgcGFpbnQgPSBfcHJvcHMkcGFpbnQgPT09IHZvaWQgMCA/IHt9IDogX3Byb3BzJHBhaW50LFxuICAgICAgZmlsdGVyID0gcHJvcHMuZmlsdGVyLFxuICAgICAgbWluem9vbSA9IHByb3BzLm1pbnpvb20sXG4gICAgICBtYXh6b29tID0gcHJvcHMubWF4em9vbSxcbiAgICAgIGJlZm9yZUlkID0gcHJvcHMuYmVmb3JlSWQsXG4gICAgICBvdGhlclByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHByb3BzLCBbXCJsYXlvdXRcIiwgXCJwYWludFwiLCBcImZpbHRlclwiLCBcIm1pbnpvb21cIiwgXCJtYXh6b29tXCIsIFwiYmVmb3JlSWRcIl0pO1xuXG4gIGlmIChiZWZvcmVJZCAhPT0gcHJldlByb3BzLmJlZm9yZUlkKSB7XG4gICAgbWFwLm1vdmVMYXllcihpZCwgYmVmb3JlSWQpO1xuICB9XG5cbiAgaWYgKGxheW91dCAhPT0gcHJldlByb3BzLmxheW91dCkge1xuICAgIHZhciBwcmV2TGF5b3V0ID0gcHJldlByb3BzLmxheW91dCB8fCB7fTtcblxuICAgIGZvciAodmFyIGtleSBpbiBsYXlvdXQpIHtcbiAgICAgIGlmICghZGVlcEVxdWFsKGxheW91dFtrZXldLCBwcmV2TGF5b3V0W2tleV0pKSB7XG4gICAgICAgIG1hcC5zZXRMYXlvdXRQcm9wZXJ0eShpZCwga2V5LCBsYXlvdXRba2V5XSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2tleSBpbiBwcmV2TGF5b3V0KSB7XG4gICAgICBpZiAoIWxheW91dC5oYXNPd25Qcm9wZXJ0eShfa2V5KSkge1xuICAgICAgICBtYXAuc2V0TGF5b3V0UHJvcGVydHkoaWQsIF9rZXksIHVuZGVmaW5lZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHBhaW50ICE9PSBwcmV2UHJvcHMucGFpbnQpIHtcbiAgICB2YXIgcHJldlBhaW50ID0gcHJldlByb3BzLnBhaW50IHx8IHt9O1xuXG4gICAgZm9yICh2YXIgX2tleTIgaW4gcGFpbnQpIHtcbiAgICAgIGlmICghZGVlcEVxdWFsKHBhaW50W19rZXkyXSwgcHJldlBhaW50W19rZXkyXSkpIHtcbiAgICAgICAgbWFwLnNldFBhaW50UHJvcGVydHkoaWQsIF9rZXkyLCBwYWludFtfa2V5Ml0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIF9rZXkzIGluIHByZXZQYWludCkge1xuICAgICAgaWYgKCFwYWludC5oYXNPd25Qcm9wZXJ0eShfa2V5MykpIHtcbiAgICAgICAgbWFwLnNldFBhaW50UHJvcGVydHkoaWQsIF9rZXkzLCB1bmRlZmluZWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmICghZGVlcEVxdWFsKGZpbHRlciwgcHJldlByb3BzLmZpbHRlcikpIHtcbiAgICBtYXAuc2V0RmlsdGVyKGlkLCBmaWx0ZXIpO1xuICB9XG5cbiAgaWYgKG1pbnpvb20gIT09IHByZXZQcm9wcy5taW56b29tIHx8IG1heHpvb20gIT09IHByZXZQcm9wcy5tYXh6b29tKSB7XG4gICAgbWFwLnNldExheWVyWm9vbVJhbmdlKGlkLCBtaW56b29tLCBtYXh6b29tKTtcbiAgfVxuXG4gIGZvciAodmFyIF9rZXk0IGluIG90aGVyUHJvcHMpIHtcbiAgICBpZiAoIWRlZXBFcXVhbChvdGhlclByb3BzW19rZXk0XSwgcHJldlByb3BzW19rZXk0XSkpIHtcbiAgICAgIG1hcC5zZXRMYXllclByb3BlcnR5KGlkLCBfa2V5NCwgb3RoZXJQcm9wc1tfa2V5NF0pO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVMYXllcihtYXAsIGlkLCBwcm9wcykge1xuICBpZiAobWFwLnN0eWxlICYmIG1hcC5zdHlsZS5fbG9hZGVkKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHByb3BzKSwge30sIHtcbiAgICAgIGlkOiBpZFxuICAgIH0pO1xuXG4gICAgZGVsZXRlIG9wdGlvbnMuYmVmb3JlSWQ7XG4gICAgbWFwLmFkZExheWVyKG9wdGlvbnMsIHByb3BzLmJlZm9yZUlkKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB1cGRhdGVMYXllcihtYXAsIGlkLCBwcm9wcywgcHJldlByb3BzKSB7XG4gIGFzc2VydChwcm9wcy5pZCA9PT0gcHJldlByb3BzLmlkLCAnbGF5ZXIgaWQgY2hhbmdlZCcpO1xuICBhc3NlcnQocHJvcHMudHlwZSA9PT0gcHJldlByb3BzLnR5cGUsICdsYXllciB0eXBlIGNoYW5nZWQnKTtcblxuICB0cnkge1xuICAgIGRpZmZMYXllclN0eWxlcyhtYXAsIGlkLCBwcm9wcywgcHJldlByb3BzKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLndhcm4oZXJyb3IpO1xuICB9XG59XG5cbnZhciBsYXllckNvdW50ZXIgPSAwO1xuXG5mdW5jdGlvbiBMYXllcihwcm9wcykge1xuICB2YXIgY29udGV4dCA9IHVzZUNvbnRleHQoTWFwQ29udGV4dCk7XG4gIHZhciBwcm9wc1JlZiA9IHVzZVJlZih7XG4gICAgaWQ6IHByb3BzLmlkLFxuICAgIHR5cGU6IHByb3BzLnR5cGVcbiAgfSk7XG5cbiAgdmFyIF91c2VTdGF0ZSA9IHVzZVN0YXRlKDApLFxuICAgICAgX3VzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZSwgMiksXG4gICAgICBzZXRTdHlsZUxvYWRlZCA9IF91c2VTdGF0ZTJbMV07XG5cbiAgdmFyIGlkID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHByb3BzLmlkIHx8IFwianN4LWxheWVyLVwiLmNvbmNhdChsYXllckNvdW50ZXIrKyk7XG4gIH0sIFtdKTtcbiAgdmFyIG1hcCA9IGNvbnRleHQubWFwO1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmIChtYXApIHtcbiAgICAgIHZhciBmb3JjZVVwZGF0ZSA9IGZ1bmN0aW9uIGZvcmNlVXBkYXRlKCkge1xuICAgICAgICByZXR1cm4gc2V0U3R5bGVMb2FkZWQoZnVuY3Rpb24gKHZlcnNpb24pIHtcbiAgICAgICAgICByZXR1cm4gdmVyc2lvbiArIDE7XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgbWFwLm9uKCdzdHlsZWRhdGEnLCBmb3JjZVVwZGF0ZSk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICBtYXAub2ZmKCdzdHlsZWRhdGEnLCBmb3JjZVVwZGF0ZSk7XG5cbiAgICAgICAgaWYgKG1hcC5zdHlsZSAmJiBtYXAuc3R5bGUuX2xvYWRlZCkge1xuICAgICAgICAgIG1hcC5yZW1vdmVMYXllcihpZCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfSwgW21hcF0pO1xuICB2YXIgbGF5ZXIgPSBtYXAgJiYgbWFwLnN0eWxlICYmIG1hcC5nZXRMYXllcihpZCk7XG5cbiAgaWYgKGxheWVyKSB7XG4gICAgdXBkYXRlTGF5ZXIobWFwLCBpZCwgcHJvcHMsIHByb3BzUmVmLmN1cnJlbnQpO1xuICB9IGVsc2Uge1xuICAgIGNyZWF0ZUxheWVyKG1hcCwgaWQsIHByb3BzKTtcbiAgfVxuXG4gIHByb3BzUmVmLmN1cnJlbnQgPSBwcm9wcztcbiAgcmV0dXJuIG51bGw7XG59XG5cbkxheWVyLnByb3BUeXBlcyA9IHByb3BUeXBlcztcbmV4cG9ydCBkZWZhdWx0IExheWVyOyIsImltcG9ydCB7IHVzZUNvbnRleHQsIHVzZVJlZiwgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0ICogYXMgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IE1hcENvbnRleHQgZnJvbSAnLi9tYXAtY29udGV4dCc7XG5leHBvcnQgdmFyIG1hcENvbnRyb2xEZWZhdWx0UHJvcHMgPSB7XG4gIGNhcHR1cmVTY3JvbGw6IGZhbHNlLFxuICBjYXB0dXJlRHJhZzogdHJ1ZSxcbiAgY2FwdHVyZUNsaWNrOiB0cnVlLFxuICBjYXB0dXJlRG91YmxlQ2xpY2s6IHRydWUsXG4gIGNhcHR1cmVQb2ludGVyTW92ZTogZmFsc2Vcbn07XG5leHBvcnQgdmFyIG1hcENvbnRyb2xQcm9wVHlwZXMgPSB7XG4gIGNhcHR1cmVTY3JvbGw6IFByb3BUeXBlcy5ib29sLFxuICBjYXB0dXJlRHJhZzogUHJvcFR5cGVzLmJvb2wsXG4gIGNhcHR1cmVDbGljazogUHJvcFR5cGVzLmJvb2wsXG4gIGNhcHR1cmVEb3VibGVDbGljazogUHJvcFR5cGVzLmJvb2wsXG4gIGNhcHR1cmVQb2ludGVyTW92ZTogUHJvcFR5cGVzLmJvb2xcbn07XG5cbmZ1bmN0aW9uIG9uTW91bnQodGhpc1JlZikge1xuICB2YXIgcmVmID0gdGhpc1JlZi5jb250YWluZXJSZWYuY3VycmVudDtcbiAgdmFyIGV2ZW50TWFuYWdlciA9IHRoaXNSZWYuY29udGV4dC5ldmVudE1hbmFnZXI7XG5cbiAgaWYgKCFyZWYgfHwgIWV2ZW50TWFuYWdlcikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICB2YXIgZXZlbnRzID0ge1xuICAgIHdoZWVsOiBmdW5jdGlvbiB3aGVlbChldnQpIHtcbiAgICAgIHZhciBwcm9wcyA9IHRoaXNSZWYucHJvcHM7XG5cbiAgICAgIGlmIChwcm9wcy5jYXB0dXJlU2Nyb2xsKSB7XG4gICAgICAgIGV2dC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByb3BzLm9uU2Nyb2xsKSB7XG4gICAgICAgIHByb3BzLm9uU2Nyb2xsKGV2dCwgdGhpc1JlZik7XG4gICAgICB9XG4gICAgfSxcbiAgICBwYW5zdGFydDogZnVuY3Rpb24gcGFuc3RhcnQoZXZ0KSB7XG4gICAgICB2YXIgcHJvcHMgPSB0aGlzUmVmLnByb3BzO1xuXG4gICAgICBpZiAocHJvcHMuY2FwdHVyZURyYWcpIHtcbiAgICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvcHMub25EcmFnU3RhcnQpIHtcbiAgICAgICAgcHJvcHMub25EcmFnU3RhcnQoZXZ0LCB0aGlzUmVmKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGFueWNsaWNrOiBmdW5jdGlvbiBhbnljbGljayhldnQpIHtcbiAgICAgIHZhciBwcm9wcyA9IHRoaXNSZWYucHJvcHM7XG5cbiAgICAgIGlmIChwcm9wcy5jYXB0dXJlQ2xpY2spIHtcbiAgICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvcHMub25DbGljaykge1xuICAgICAgICBwcm9wcy5vbkNsaWNrKGV2dCwgdGhpc1JlZik7XG4gICAgICB9XG4gICAgfSxcbiAgICBjbGljazogZnVuY3Rpb24gY2xpY2soZXZ0KSB7XG4gICAgICB2YXIgcHJvcHMgPSB0aGlzUmVmLnByb3BzO1xuXG4gICAgICBpZiAocHJvcHMuY2FwdHVyZUNsaWNrKSB7XG4gICAgICAgIGV2dC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByb3BzLm9uQ2xpY2spIHtcbiAgICAgICAgcHJvcHMub25DbGljayhldnQsIHRoaXNSZWYpO1xuICAgICAgfVxuICAgIH0sXG4gICAgZGJsY2xpY2s6IGZ1bmN0aW9uIGRibGNsaWNrKGV2dCkge1xuICAgICAgdmFyIHByb3BzID0gdGhpc1JlZi5wcm9wcztcblxuICAgICAgaWYgKHByb3BzLmNhcHR1cmVEb3VibGVDbGljaykge1xuICAgICAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9wcy5vbkRvdWJsZUNsaWNrKSB7XG4gICAgICAgIHByb3BzLm9uRG91YmxlQ2xpY2soZXZ0LCB0aGlzUmVmKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHBvaW50ZXJtb3ZlOiBmdW5jdGlvbiBwb2ludGVybW92ZShldnQpIHtcbiAgICAgIHZhciBwcm9wcyA9IHRoaXNSZWYucHJvcHM7XG5cbiAgICAgIGlmIChwcm9wcy5jYXB0dXJlUG9pbnRlck1vdmUpIHtcbiAgICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvcHMub25Qb2ludGVyTW92ZSkge1xuICAgICAgICBwcm9wcy5vblBvaW50ZXJNb3ZlKGV2dCwgdGhpc1JlZik7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICBldmVudE1hbmFnZXIud2F0Y2goZXZlbnRzLCByZWYpO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGV2ZW50TWFuYWdlci5vZmYoZXZlbnRzKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlTWFwQ29udHJvbCgpIHtcbiAgdmFyIHByb3BzID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgdmFyIGNvbnRleHQgPSB1c2VDb250ZXh0KE1hcENvbnRleHQpO1xuICB2YXIgY29udGFpbmVyUmVmID0gdXNlUmVmKG51bGwpO1xuXG4gIHZhciBfdGhpc1JlZiA9IHVzZVJlZih7XG4gICAgcHJvcHM6IHByb3BzLFxuICAgIHN0YXRlOiB7fSxcbiAgICBjb250ZXh0OiBjb250ZXh0LFxuICAgIGNvbnRhaW5lclJlZjogY29udGFpbmVyUmVmXG4gIH0pO1xuXG4gIHZhciB0aGlzUmVmID0gX3RoaXNSZWYuY3VycmVudDtcbiAgdGhpc1JlZi5wcm9wcyA9IHByb3BzO1xuICB0aGlzUmVmLmNvbnRleHQgPSBjb250ZXh0O1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBvbk1vdW50KHRoaXNSZWYpO1xuICB9LCBbY29udGV4dC5ldmVudE1hbmFnZXJdKTtcbiAgcmV0dXJuIHRoaXNSZWY7XG59IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX2NsYXNzQ2FsbENoZWNrIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jbGFzc0NhbGxDaGVja1wiO1xuaW1wb3J0IF9jcmVhdGVDbGFzcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY3JlYXRlQ2xhc3NcIjtcbmltcG9ydCBfYXNzZXJ0VGhpc0luaXRpYWxpemVkIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3NlcnRUaGlzSW5pdGlhbGl6ZWRcIjtcbmltcG9ydCBfaW5oZXJpdHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzXCI7XG5pbXBvcnQgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4gZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm5cIjtcbmltcG9ydCBfZ2V0UHJvdG90eXBlT2YgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2dldFByb3RvdHlwZU9mXCI7XG5pbXBvcnQgX2RlZmluZVByb3BlcnR5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eVwiO1xuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkge1xuICB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTtcblxuICByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7XG4gICAgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLFxuICAgICAgICByZXN1bHQ7XG5cbiAgICBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkge1xuICAgICAgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjtcblxuICAgICAgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHtcbiAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlO1xuICBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlO1xuICBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlO1xuXG4gIHRyeSB7XG4gICAgRGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChEYXRlLCBbXSwgZnVuY3Rpb24gKCkge30pKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBQdXJlQ29tcG9uZW50LCBjcmVhdGVSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdXNlTWFwQ29udHJvbCwgeyBtYXBDb250cm9sRGVmYXVsdFByb3BzLCBtYXBDb250cm9sUHJvcFR5cGVzIH0gZnJvbSAnLi91c2UtbWFwLWNvbnRyb2wnO1xuXG5mdW5jdGlvbiBDb250cm9sKHByb3BzKSB7XG4gIHZhciBpbnN0YW5jZSA9IHByb3BzLmluc3RhbmNlO1xuXG4gIHZhciBfdXNlTWFwQ29udHJvbCA9IHVzZU1hcENvbnRyb2wocHJvcHMpLFxuICAgICAgY29udGV4dCA9IF91c2VNYXBDb250cm9sLmNvbnRleHQsXG4gICAgICBjb250YWluZXJSZWYgPSBfdXNlTWFwQ29udHJvbC5jb250YWluZXJSZWY7XG5cbiAgaW5zdGFuY2UuX2NvbnRleHQgPSBjb250ZXh0O1xuICBpbnN0YW5jZS5fY29udGFpbmVyUmVmID0gY29udGFpbmVyUmVmO1xuICByZXR1cm4gaW5zdGFuY2UuX3JlbmRlcigpO1xufVxuXG52YXIgQmFzZUNvbnRyb2wgPSBmdW5jdGlvbiAoX1B1cmVDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEJhc2VDb250cm9sLCBfUHVyZUNvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihCYXNlQ29udHJvbCk7XG5cbiAgZnVuY3Rpb24gQmFzZUNvbnRyb2woKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEJhc2VDb250cm9sKTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsLmFwcGx5KF9zdXBlciwgW3RoaXNdLmNvbmNhdChhcmdzKSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiX2NvbnRleHRcIiwge30pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIl9jb250YWluZXJSZWZcIiwgY3JlYXRlUmVmKCkpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIl9vblNjcm9sbFwiLCBmdW5jdGlvbiAoZXZ0KSB7fSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiX29uRHJhZ1N0YXJ0XCIsIGZ1bmN0aW9uIChldnQpIHt9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJfb25EYmxDbGlja1wiLCBmdW5jdGlvbiAoZXZ0KSB7fSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiX29uQ2xpY2tcIiwgZnVuY3Rpb24gKGV2dCkge30pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIl9vblBvaW50ZXJNb3ZlXCIsIGZ1bmN0aW9uIChldnQpIHt9KTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhCYXNlQ29udHJvbCwgW3tcbiAgICBrZXk6IFwiX3JlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfcmVuZGVyKCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdfcmVuZGVyKCkgbm90IGltcGxlbWVudGVkJyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChDb250cm9sLCBfZXh0ZW5kcyh7XG4gICAgICAgIGluc3RhbmNlOiB0aGlzXG4gICAgICB9LCB0aGlzLnByb3BzLCB7XG4gICAgICAgIG9uU2Nyb2xsOiB0aGlzLl9vblNjcm9sbCxcbiAgICAgICAgb25EcmFnU3RhcnQ6IHRoaXMuX29uRHJhZ1N0YXJ0LFxuICAgICAgICBvbkRibENsaWNrOiB0aGlzLl9vbkRibENsaWNrLFxuICAgICAgICBvbkNsaWNrOiB0aGlzLl9vbkNsaWNrLFxuICAgICAgICBvblBvaW50ZXJNb3ZlOiB0aGlzLl9vblBvaW50ZXJNb3ZlXG4gICAgICB9KSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEJhc2VDb250cm9sO1xufShQdXJlQ29tcG9uZW50KTtcblxuX2RlZmluZVByb3BlcnR5KEJhc2VDb250cm9sLCBcInByb3BUeXBlc1wiLCBtYXBDb250cm9sUHJvcFR5cGVzKTtcblxuX2RlZmluZVByb3BlcnR5KEJhc2VDb250cm9sLCBcImRlZmF1bHRQcm9wc1wiLCBtYXBDb250cm9sRGVmYXVsdFByb3BzKTtcblxuZXhwb3J0IHsgQmFzZUNvbnRyb2wgYXMgZGVmYXVsdCB9OyIsImltcG9ydCBfZGVmaW5lUHJvcGVydHkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5XCI7XG5pbXBvcnQgX3NsaWNlZFRvQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXlcIjtcblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7XG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTtcblxuICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICAgIHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpO1xuICAgIGlmIChlbnVtZXJhYmxlT25seSkgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHtcbiAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlO1xuICAgIH0pO1xuICAgIGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTtcbiAgfVxuXG4gIHJldHVybiBrZXlzO1xufVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkge1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9O1xuXG4gICAgaWYgKGkgJSAyKSB7XG4gICAgICBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5pbXBvcnQgKiBhcyBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHVzZU1hcENvbnRyb2wsIHsgbWFwQ29udHJvbERlZmF1bHRQcm9wcywgbWFwQ29udHJvbFByb3BUeXBlcyB9IGZyb20gJy4vdXNlLW1hcC1jb250cm9sJztcbmV4cG9ydCB2YXIgZHJhZ2dhYmxlQ29udHJvbFByb3BUeXBlcyA9IE9iamVjdC5hc3NpZ24oe30sIG1hcENvbnRyb2xQcm9wVHlwZXMsIHtcbiAgZHJhZ2dhYmxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgb25EcmFnOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25EcmFnRW5kOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25EcmFnU3RhcnQ6IFByb3BUeXBlcy5mdW5jLFxuICBvZmZzZXRMZWZ0OiBQcm9wVHlwZXMubnVtYmVyLFxuICBvZmZzZXRUb3A6IFByb3BUeXBlcy5udW1iZXJcbn0pO1xuZXhwb3J0IHZhciBkcmFnZ2FibGVDb250cm9sRGVmYXVsdFByb3BzID0gT2JqZWN0LmFzc2lnbih7fSwgbWFwQ29udHJvbERlZmF1bHRQcm9wcywge1xuICBkcmFnZ2FibGU6IGZhbHNlLFxuICBvZmZzZXRMZWZ0OiAwLFxuICBvZmZzZXRUb3A6IDBcbn0pO1xuXG5mdW5jdGlvbiBnZXREcmFnRXZlbnRQb3NpdGlvbihldmVudCkge1xuICB2YXIgX2V2ZW50JG9mZnNldENlbnRlciA9IGV2ZW50Lm9mZnNldENlbnRlcixcbiAgICAgIHggPSBfZXZlbnQkb2Zmc2V0Q2VudGVyLngsXG4gICAgICB5ID0gX2V2ZW50JG9mZnNldENlbnRlci55O1xuICByZXR1cm4gW3gsIHldO1xufVxuXG5mdW5jdGlvbiBnZXREcmFnRXZlbnRPZmZzZXQoZXZlbnQsIGNvbnRhaW5lcikge1xuICB2YXIgX2V2ZW50JGNlbnRlciA9IGV2ZW50LmNlbnRlcixcbiAgICAgIHggPSBfZXZlbnQkY2VudGVyLngsXG4gICAgICB5ID0gX2V2ZW50JGNlbnRlci55O1xuXG4gIGlmIChjb250YWluZXIpIHtcbiAgICB2YXIgcmVjdCA9IGNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICByZXR1cm4gW3JlY3QubGVmdCAtIHgsIHJlY3QudG9wIC0geV07XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gZ2V0RHJhZ0xuZ0xhdChkcmFnUG9zLCBkcmFnT2Zmc2V0LCBwcm9wcywgY29udGV4dCkge1xuICB2YXIgeCA9IGRyYWdQb3NbMF0gKyBkcmFnT2Zmc2V0WzBdIC0gcHJvcHMub2Zmc2V0TGVmdDtcbiAgdmFyIHkgPSBkcmFnUG9zWzFdICsgZHJhZ09mZnNldFsxXSAtIHByb3BzLm9mZnNldFRvcDtcbiAgcmV0dXJuIGNvbnRleHQudmlld3BvcnQudW5wcm9qZWN0KFt4LCB5XSk7XG59XG5cbmZ1bmN0aW9uIG9uRHJhZ1N0YXJ0KGV2ZW50LCBfcmVmKSB7XG4gIHZhciBwcm9wcyA9IF9yZWYucHJvcHMsXG4gICAgICBjYWxsYmFja3MgPSBfcmVmLmNhbGxiYWNrcyxcbiAgICAgIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIGNvbnRleHQgPSBfcmVmLmNvbnRleHQsXG4gICAgICBjb250YWluZXJSZWYgPSBfcmVmLmNvbnRhaW5lclJlZjtcbiAgdmFyIGRyYWdnYWJsZSA9IHByb3BzLmRyYWdnYWJsZTtcblxuICBpZiAoIWRyYWdnYWJsZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICB2YXIgZHJhZ1BvcyA9IGdldERyYWdFdmVudFBvc2l0aW9uKGV2ZW50KTtcbiAgdmFyIGRyYWdPZmZzZXQgPSBnZXREcmFnRXZlbnRPZmZzZXQoZXZlbnQsIGNvbnRhaW5lclJlZi5jdXJyZW50KTtcbiAgc3RhdGUuc2V0RHJhZ1BvcyhkcmFnUG9zKTtcbiAgc3RhdGUuc2V0RHJhZ09mZnNldChkcmFnT2Zmc2V0KTtcblxuICBpZiAoY2FsbGJhY2tzLm9uRHJhZ1N0YXJ0ICYmIGRyYWdPZmZzZXQpIHtcbiAgICB2YXIgY2FsbGJhY2tFdmVudCA9IE9iamVjdC5hc3NpZ24oe30sIGV2ZW50KTtcbiAgICBjYWxsYmFja0V2ZW50LmxuZ0xhdCA9IGdldERyYWdMbmdMYXQoZHJhZ1BvcywgZHJhZ09mZnNldCwgcHJvcHMsIGNvbnRleHQpO1xuICAgIGNhbGxiYWNrcy5vbkRyYWdTdGFydChjYWxsYmFja0V2ZW50KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBvbkRyYWcoZXZlbnQsIF9yZWYyKSB7XG4gIHZhciBwcm9wcyA9IF9yZWYyLnByb3BzLFxuICAgICAgY2FsbGJhY2tzID0gX3JlZjIuY2FsbGJhY2tzLFxuICAgICAgc3RhdGUgPSBfcmVmMi5zdGF0ZSxcbiAgICAgIGNvbnRleHQgPSBfcmVmMi5jb250ZXh0O1xuICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgdmFyIGRyYWdQb3MgPSBnZXREcmFnRXZlbnRQb3NpdGlvbihldmVudCk7XG4gIHN0YXRlLnNldERyYWdQb3MoZHJhZ1Bvcyk7XG4gIHZhciBkcmFnT2Zmc2V0ID0gc3RhdGUuZHJhZ09mZnNldDtcblxuICBpZiAoY2FsbGJhY2tzLm9uRHJhZyAmJiBkcmFnT2Zmc2V0KSB7XG4gICAgdmFyIGNhbGxiYWNrRXZlbnQgPSBPYmplY3QuYXNzaWduKHt9LCBldmVudCk7XG4gICAgY2FsbGJhY2tFdmVudC5sbmdMYXQgPSBnZXREcmFnTG5nTGF0KGRyYWdQb3MsIGRyYWdPZmZzZXQsIHByb3BzLCBjb250ZXh0KTtcbiAgICBjYWxsYmFja3Mub25EcmFnKGNhbGxiYWNrRXZlbnQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIG9uRHJhZ0VuZChldmVudCwgX3JlZjMpIHtcbiAgdmFyIHByb3BzID0gX3JlZjMucHJvcHMsXG4gICAgICBjYWxsYmFja3MgPSBfcmVmMy5jYWxsYmFja3MsXG4gICAgICBzdGF0ZSA9IF9yZWYzLnN0YXRlLFxuICAgICAgY29udGV4dCA9IF9yZWYzLmNvbnRleHQ7XG4gIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICB2YXIgZHJhZ1BvcyA9IHN0YXRlLmRyYWdQb3MsXG4gICAgICBkcmFnT2Zmc2V0ID0gc3RhdGUuZHJhZ09mZnNldDtcbiAgc3RhdGUuc2V0RHJhZ1BvcyhudWxsKTtcbiAgc3RhdGUuc2V0RHJhZ09mZnNldChudWxsKTtcblxuICBpZiAoY2FsbGJhY2tzLm9uRHJhZ0VuZCAmJiBkcmFnUG9zICYmIGRyYWdPZmZzZXQpIHtcbiAgICB2YXIgY2FsbGJhY2tFdmVudCA9IE9iamVjdC5hc3NpZ24oe30sIGV2ZW50KTtcbiAgICBjYWxsYmFja0V2ZW50LmxuZ0xhdCA9IGdldERyYWdMbmdMYXQoZHJhZ1BvcywgZHJhZ09mZnNldCwgcHJvcHMsIGNvbnRleHQpO1xuICAgIGNhbGxiYWNrcy5vbkRyYWdFbmQoY2FsbGJhY2tFdmVudCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gb25EcmFnQ2FuY2VsKGV2ZW50LCBfcmVmNCkge1xuICB2YXIgc3RhdGUgPSBfcmVmNC5zdGF0ZTtcbiAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIHN0YXRlLnNldERyYWdQb3MobnVsbCk7XG4gIHN0YXRlLnNldERyYWdPZmZzZXQobnVsbCk7XG59XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyRXZlbnRzKHRoaXNSZWYpIHtcbiAgdmFyIGV2ZW50TWFuYWdlciA9IHRoaXNSZWYuY29udGV4dC5ldmVudE1hbmFnZXI7XG5cbiAgaWYgKCFldmVudE1hbmFnZXIgfHwgIXRoaXNSZWYuc3RhdGUuZHJhZ1Bvcykge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICB2YXIgZXZlbnRzID0ge1xuICAgIHBhbm1vdmU6IGZ1bmN0aW9uIHBhbm1vdmUoZXZ0KSB7XG4gICAgICByZXR1cm4gb25EcmFnKGV2dCwgdGhpc1JlZik7XG4gICAgfSxcbiAgICBwYW5lbmQ6IGZ1bmN0aW9uIHBhbmVuZChldnQpIHtcbiAgICAgIHJldHVybiBvbkRyYWdFbmQoZXZ0LCB0aGlzUmVmKTtcbiAgICB9LFxuICAgIHBhbmNhbmNlbDogZnVuY3Rpb24gcGFuY2FuY2VsKGV2dCkge1xuICAgICAgcmV0dXJuIG9uRHJhZ0NhbmNlbChldnQsIHRoaXNSZWYpO1xuICAgIH1cbiAgfTtcbiAgZXZlbnRNYW5hZ2VyLndhdGNoKGV2ZW50cyk7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgZXZlbnRNYW5hZ2VyLm9mZihldmVudHMpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VEcmFnZ2FibGVDb250cm9sKHByb3BzKSB7XG4gIHZhciBfdXNlU3RhdGUgPSB1c2VTdGF0ZShudWxsKSxcbiAgICAgIF91c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUsIDIpLFxuICAgICAgZHJhZ1BvcyA9IF91c2VTdGF0ZTJbMF0sXG4gICAgICBzZXREcmFnUG9zID0gX3VzZVN0YXRlMlsxXTtcblxuICB2YXIgX3VzZVN0YXRlMyA9IHVzZVN0YXRlKG51bGwpLFxuICAgICAgX3VzZVN0YXRlNCA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZTMsIDIpLFxuICAgICAgZHJhZ09mZnNldCA9IF91c2VTdGF0ZTRbMF0sXG4gICAgICBzZXREcmFnT2Zmc2V0ID0gX3VzZVN0YXRlNFsxXTtcblxuICB2YXIgdGhpc1JlZiA9IHVzZU1hcENvbnRyb2woX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBwcm9wcyksIHt9LCB7XG4gICAgb25EcmFnU3RhcnQ6IG9uRHJhZ1N0YXJ0XG4gIH0pKTtcbiAgdGhpc1JlZi5jYWxsYmFja3MgPSBwcm9wcztcbiAgdGhpc1JlZi5zdGF0ZS5kcmFnUG9zID0gZHJhZ1BvcztcbiAgdGhpc1JlZi5zdGF0ZS5zZXREcmFnUG9zID0gc2V0RHJhZ1BvcztcbiAgdGhpc1JlZi5zdGF0ZS5kcmFnT2Zmc2V0ID0gZHJhZ09mZnNldDtcbiAgdGhpc1JlZi5zdGF0ZS5zZXREcmFnT2Zmc2V0ID0gc2V0RHJhZ09mZnNldDtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gcmVnaXN0ZXJFdmVudHModGhpc1JlZik7XG4gIH0sIFt0aGlzUmVmLmNvbnRleHQuZXZlbnRNYW5hZ2VyLCBCb29sZWFuKGRyYWdQb3MpXSk7XG4gIHJldHVybiB0aGlzUmVmO1xufSIsInZhciBwaXhlbFJhdGlvID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmRldmljZVBpeGVsUmF0aW8gfHwgMTtcbmV4cG9ydCB2YXIgY3Jpc3BQaXhlbCA9IGZ1bmN0aW9uIGNyaXNwUGl4ZWwoc2l6ZSkge1xuICByZXR1cm4gTWF0aC5yb3VuZChzaXplICogcGl4ZWxSYXRpbykgLyBwaXhlbFJhdGlvO1xufTtcbmV4cG9ydCB2YXIgY3Jpc3BQZXJjZW50YWdlID0gZnVuY3Rpb24gY3Jpc3BQZXJjZW50YWdlKGVsLCBwZXJjZW50YWdlKSB7XG4gIHZhciBkaW1lbnNpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6ICd4JztcblxuICBpZiAoZWwgPT09IG51bGwpIHtcbiAgICByZXR1cm4gcGVyY2VudGFnZTtcbiAgfVxuXG4gIHZhciBvcmlnU2l6ZSA9IGRpbWVuc2lvbiA9PT0gJ3gnID8gZWwub2Zmc2V0V2lkdGggOiBlbC5vZmZzZXRIZWlnaHQ7XG4gIHJldHVybiBjcmlzcFBpeGVsKHBlcmNlbnRhZ2UgLyAxMDAgKiBvcmlnU2l6ZSkgLyBvcmlnU2l6ZSAqIDEwMDtcbn07IiwiaW1wb3J0IF9zbGljZWRUb0FycmF5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zbGljZWRUb0FycmF5XCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHVzZURyYWdnYWJsZUNvbnRyb2wsIHsgZHJhZ2dhYmxlQ29udHJvbERlZmF1bHRQcm9wcywgZHJhZ2dhYmxlQ29udHJvbFByb3BUeXBlcyB9IGZyb20gJy4vZHJhZ2dhYmxlLWNvbnRyb2wnO1xuaW1wb3J0IHsgY3Jpc3BQaXhlbCB9IGZyb20gJy4uL3V0aWxzL2NyaXNwLXBpeGVsJztcbmltcG9ydCB7IGdldFRlcnJhaW5FbGV2YXRpb24gfSBmcm9tICcuLi91dGlscy90ZXJyYWluJztcbnZhciBkZWZhdWx0UHJvcHMgPSBPYmplY3QuYXNzaWduKHt9LCBkcmFnZ2FibGVDb250cm9sRGVmYXVsdFByb3BzLCB7XG4gIGNsYXNzTmFtZTogJydcbn0pO1xuXG5mdW5jdGlvbiBnZXRQb3NpdGlvbihfcmVmKSB7XG4gIHZhciBwcm9wcyA9IF9yZWYucHJvcHMsXG4gICAgICBzdGF0ZSA9IF9yZWYuc3RhdGUsXG4gICAgICBjb250ZXh0ID0gX3JlZi5jb250ZXh0O1xuICB2YXIgbG9uZ2l0dWRlID0gcHJvcHMubG9uZ2l0dWRlLFxuICAgICAgbGF0aXR1ZGUgPSBwcm9wcy5sYXRpdHVkZSxcbiAgICAgIG9mZnNldExlZnQgPSBwcm9wcy5vZmZzZXRMZWZ0LFxuICAgICAgb2Zmc2V0VG9wID0gcHJvcHMub2Zmc2V0VG9wO1xuICB2YXIgZHJhZ1BvcyA9IHN0YXRlLmRyYWdQb3MsXG4gICAgICBkcmFnT2Zmc2V0ID0gc3RhdGUuZHJhZ09mZnNldDtcbiAgdmFyIHZpZXdwb3J0ID0gY29udGV4dC52aWV3cG9ydCxcbiAgICAgIG1hcCA9IGNvbnRleHQubWFwO1xuXG4gIGlmIChkcmFnUG9zICYmIGRyYWdPZmZzZXQpIHtcbiAgICByZXR1cm4gW2RyYWdQb3NbMF0gKyBkcmFnT2Zmc2V0WzBdLCBkcmFnUG9zWzFdICsgZHJhZ09mZnNldFsxXV07XG4gIH1cblxuICB2YXIgYWx0aXR1ZGUgPSBnZXRUZXJyYWluRWxldmF0aW9uKG1hcCwge1xuICAgIGxvbmdpdHVkZTogbG9uZ2l0dWRlLFxuICAgIGxhdGl0dWRlOiBsYXRpdHVkZVxuICB9KTtcblxuICB2YXIgX3ZpZXdwb3J0JHByb2plY3QgPSB2aWV3cG9ydC5wcm9qZWN0KFtsb25naXR1ZGUsIGxhdGl0dWRlLCBhbHRpdHVkZV0pLFxuICAgICAgX3ZpZXdwb3J0JHByb2plY3QyID0gX3NsaWNlZFRvQXJyYXkoX3ZpZXdwb3J0JHByb2plY3QsIDIpLFxuICAgICAgeCA9IF92aWV3cG9ydCRwcm9qZWN0MlswXSxcbiAgICAgIHkgPSBfdmlld3BvcnQkcHJvamVjdDJbMV07XG5cbiAgeCArPSBvZmZzZXRMZWZ0O1xuICB5ICs9IG9mZnNldFRvcDtcbiAgcmV0dXJuIFt4LCB5XTtcbn1cblxuZnVuY3Rpb24gTWFya2VyKHByb3BzKSB7XG4gIHZhciB0aGlzUmVmID0gdXNlRHJhZ2dhYmxlQ29udHJvbChwcm9wcyk7XG4gIHZhciBzdGF0ZSA9IHRoaXNSZWYuc3RhdGUsXG4gICAgICBjb250YWluZXJSZWYgPSB0aGlzUmVmLmNvbnRhaW5lclJlZjtcbiAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUsXG4gICAgICBkcmFnZ2FibGUgPSBwcm9wcy5kcmFnZ2FibGU7XG4gIHZhciBkcmFnUG9zID0gc3RhdGUuZHJhZ1BvcztcblxuICB2YXIgX2dldFBvc2l0aW9uID0gZ2V0UG9zaXRpb24odGhpc1JlZiksXG4gICAgICBfZ2V0UG9zaXRpb24yID0gX3NsaWNlZFRvQXJyYXkoX2dldFBvc2l0aW9uLCAyKSxcbiAgICAgIHggPSBfZ2V0UG9zaXRpb24yWzBdLFxuICAgICAgeSA9IF9nZXRQb3NpdGlvbjJbMV07XG5cbiAgdmFyIHRyYW5zZm9ybSA9IFwidHJhbnNsYXRlKFwiLmNvbmNhdChjcmlzcFBpeGVsKHgpLCBcInB4LCBcIikuY29uY2F0KGNyaXNwUGl4ZWwoeSksIFwicHgpXCIpO1xuICB2YXIgY3Vyc29yID0gZHJhZ2dhYmxlID8gZHJhZ1BvcyA/ICdncmFiYmluZycgOiAnZ3JhYicgOiAnYXV0byc7XG4gIHZhciBjb250cm9sID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGNvbnRhaW5lclN0eWxlID0ge1xuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICBsZWZ0OiAwLFxuICAgICAgdG9wOiAwLFxuICAgICAgdHJhbnNmb3JtOiB0cmFuc2Zvcm0sXG4gICAgICBjdXJzb3I6IGN1cnNvclxuICAgIH07XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgY2xhc3NOYW1lOiBcIm1hcGJveGdsLW1hcmtlciBcIi5jb25jYXQoY2xhc3NOYW1lKSxcbiAgICAgIHJlZjogdGhpc1JlZi5jb250YWluZXJSZWYsXG4gICAgICBzdHlsZTogY29udGFpbmVyU3R5bGVcbiAgICB9LCBjaGlsZHJlbik7XG4gIH0sIFtjaGlsZHJlbiwgY2xhc3NOYW1lXSk7XG4gIHZhciBjb250YWluZXIgPSBjb250YWluZXJSZWYuY3VycmVudDtcblxuICBpZiAoY29udGFpbmVyKSB7XG4gICAgY29udGFpbmVyLnN0eWxlLnRyYW5zZm9ybSA9IHRyYW5zZm9ybTtcbiAgICBjb250YWluZXIuc3R5bGUuY3Vyc29yID0gY3Vyc29yO1xuICB9XG5cbiAgcmV0dXJuIGNvbnRyb2w7XG59XG5cbk1hcmtlci5kZWZhdWx0UHJvcHMgPSBkZWZhdWx0UHJvcHM7XG5leHBvcnQgZGVmYXVsdCBSZWFjdC5tZW1vKE1hcmtlcik7IiwiZXhwb3J0IHZhciBBTkNIT1JfUE9TSVRJT04gPSB7XG4gIHRvcDoge1xuICAgIHg6IDAuNSxcbiAgICB5OiAwXG4gIH0sXG4gICd0b3AtbGVmdCc6IHtcbiAgICB4OiAwLFxuICAgIHk6IDBcbiAgfSxcbiAgJ3RvcC1yaWdodCc6IHtcbiAgICB4OiAxLFxuICAgIHk6IDBcbiAgfSxcbiAgYm90dG9tOiB7XG4gICAgeDogMC41LFxuICAgIHk6IDFcbiAgfSxcbiAgJ2JvdHRvbS1sZWZ0Jzoge1xuICAgIHg6IDAsXG4gICAgeTogMVxuICB9LFxuICAnYm90dG9tLXJpZ2h0Jzoge1xuICAgIHg6IDEsXG4gICAgeTogMVxuICB9LFxuICBsZWZ0OiB7XG4gICAgeDogMCxcbiAgICB5OiAwLjVcbiAgfSxcbiAgcmlnaHQ6IHtcbiAgICB4OiAxLFxuICAgIHk6IDAuNVxuICB9XG59O1xudmFyIEFOQ0hPUl9UWVBFUyA9IE9iamVjdC5rZXlzKEFOQ0hPUl9QT1NJVElPTik7XG5leHBvcnQgZnVuY3Rpb24gZ2V0RHluYW1pY1Bvc2l0aW9uKF9yZWYpIHtcbiAgdmFyIHggPSBfcmVmLngsXG4gICAgICB5ID0gX3JlZi55LFxuICAgICAgd2lkdGggPSBfcmVmLndpZHRoLFxuICAgICAgaGVpZ2h0ID0gX3JlZi5oZWlnaHQsXG4gICAgICBzZWxmV2lkdGggPSBfcmVmLnNlbGZXaWR0aCxcbiAgICAgIHNlbGZIZWlnaHQgPSBfcmVmLnNlbGZIZWlnaHQsXG4gICAgICBhbmNob3IgPSBfcmVmLmFuY2hvcixcbiAgICAgIF9yZWYkcGFkZGluZyA9IF9yZWYucGFkZGluZyxcbiAgICAgIHBhZGRpbmcgPSBfcmVmJHBhZGRpbmcgPT09IHZvaWQgMCA/IDAgOiBfcmVmJHBhZGRpbmc7XG4gIHZhciBfQU5DSE9SX1BPU0lUSU9OJGFuY2ggPSBBTkNIT1JfUE9TSVRJT05bYW5jaG9yXSxcbiAgICAgIGFuY2hvclggPSBfQU5DSE9SX1BPU0lUSU9OJGFuY2gueCxcbiAgICAgIGFuY2hvclkgPSBfQU5DSE9SX1BPU0lUSU9OJGFuY2gueTtcbiAgdmFyIHRvcCA9IHkgLSBhbmNob3JZICogc2VsZkhlaWdodDtcbiAgdmFyIGJvdHRvbSA9IHRvcCArIHNlbGZIZWlnaHQ7XG4gIHZhciBjdXRvZmZZID0gTWF0aC5tYXgoMCwgcGFkZGluZyAtIHRvcCkgKyBNYXRoLm1heCgwLCBib3R0b20gLSBoZWlnaHQgKyBwYWRkaW5nKTtcblxuICBpZiAoY3V0b2ZmWSA+IDApIHtcbiAgICB2YXIgYmVzdEFuY2hvclkgPSBhbmNob3JZO1xuICAgIHZhciBtaW5DdXRvZmYgPSBjdXRvZmZZO1xuXG4gICAgZm9yIChhbmNob3JZID0gMDsgYW5jaG9yWSA8PSAxOyBhbmNob3JZICs9IDAuNSkge1xuICAgICAgdG9wID0geSAtIGFuY2hvclkgKiBzZWxmSGVpZ2h0O1xuICAgICAgYm90dG9tID0gdG9wICsgc2VsZkhlaWdodDtcbiAgICAgIGN1dG9mZlkgPSBNYXRoLm1heCgwLCBwYWRkaW5nIC0gdG9wKSArIE1hdGgubWF4KDAsIGJvdHRvbSAtIGhlaWdodCArIHBhZGRpbmcpO1xuXG4gICAgICBpZiAoY3V0b2ZmWSA8IG1pbkN1dG9mZikge1xuICAgICAgICBtaW5DdXRvZmYgPSBjdXRvZmZZO1xuICAgICAgICBiZXN0QW5jaG9yWSA9IGFuY2hvclk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgYW5jaG9yWSA9IGJlc3RBbmNob3JZO1xuICB9XG5cbiAgdmFyIHhTdGVwID0gMC41O1xuXG4gIGlmIChhbmNob3JZID09PSAwLjUpIHtcbiAgICBhbmNob3JYID0gTWF0aC5mbG9vcihhbmNob3JYKTtcbiAgICB4U3RlcCA9IDE7XG4gIH1cblxuICB2YXIgbGVmdCA9IHggLSBhbmNob3JYICogc2VsZldpZHRoO1xuICB2YXIgcmlnaHQgPSBsZWZ0ICsgc2VsZldpZHRoO1xuICB2YXIgY3V0b2ZmWCA9IE1hdGgubWF4KDAsIHBhZGRpbmcgLSBsZWZ0KSArIE1hdGgubWF4KDAsIHJpZ2h0IC0gd2lkdGggKyBwYWRkaW5nKTtcblxuICBpZiAoY3V0b2ZmWCA+IDApIHtcbiAgICB2YXIgYmVzdEFuY2hvclggPSBhbmNob3JYO1xuICAgIHZhciBfbWluQ3V0b2ZmID0gY3V0b2ZmWDtcblxuICAgIGZvciAoYW5jaG9yWCA9IDA7IGFuY2hvclggPD0gMTsgYW5jaG9yWCArPSB4U3RlcCkge1xuICAgICAgbGVmdCA9IHggLSBhbmNob3JYICogc2VsZldpZHRoO1xuICAgICAgcmlnaHQgPSBsZWZ0ICsgc2VsZldpZHRoO1xuICAgICAgY3V0b2ZmWCA9IE1hdGgubWF4KDAsIHBhZGRpbmcgLSBsZWZ0KSArIE1hdGgubWF4KDAsIHJpZ2h0IC0gd2lkdGggKyBwYWRkaW5nKTtcblxuICAgICAgaWYgKGN1dG9mZlggPCBfbWluQ3V0b2ZmKSB7XG4gICAgICAgIF9taW5DdXRvZmYgPSBjdXRvZmZYO1xuICAgICAgICBiZXN0QW5jaG9yWCA9IGFuY2hvclg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgYW5jaG9yWCA9IGJlc3RBbmNob3JYO1xuICB9XG5cbiAgcmV0dXJuIEFOQ0hPUl9UWVBFUy5maW5kKGZ1bmN0aW9uIChwb3NpdGlvblR5cGUpIHtcbiAgICB2YXIgYW5jaG9yUG9zaXRpb24gPSBBTkNIT1JfUE9TSVRJT05bcG9zaXRpb25UeXBlXTtcbiAgICByZXR1cm4gYW5jaG9yUG9zaXRpb24ueCA9PT0gYW5jaG9yWCAmJiBhbmNob3JQb3NpdGlvbi55ID09PSBhbmNob3JZO1xuICB9KSB8fCBhbmNob3I7XG59IiwiaW1wb3J0IF9kZWZpbmVQcm9wZXJ0eSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHlcIjtcbmltcG9ydCBfc2xpY2VkVG9BcnJheSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheVwiO1xuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHtcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXG4gIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7XG4gICAgaWYgKGVudW1lcmFibGVPbmx5KSBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkge1xuICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7XG4gICAgfSk7XG4gICAga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpO1xuICB9XG5cbiAgcmV0dXJuIGtleXM7XG59XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307XG5cbiAgICBpZiAoaSAlIDIpIHtcbiAgICAgIG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZVJlZiwgdXNlU3RhdGUsIHVzZUVmZmVjdCwgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdXNlTWFwQ29udHJvbCwgeyBtYXBDb250cm9sRGVmYXVsdFByb3BzLCBtYXBDb250cm9sUHJvcFR5cGVzIH0gZnJvbSAnLi91c2UtbWFwLWNvbnRyb2wnO1xuaW1wb3J0IHsgZ2V0RHluYW1pY1Bvc2l0aW9uLCBBTkNIT1JfUE9TSVRJT04gfSBmcm9tICcuLi91dGlscy9keW5hbWljLXBvc2l0aW9uJztcbmltcG9ydCB7IGdldFRlcnJhaW5FbGV2YXRpb24gfSBmcm9tICcuLi91dGlscy90ZXJyYWluJztcbmltcG9ydCB7IGNyaXNwUGVyY2VudGFnZSwgY3Jpc3BQaXhlbCB9IGZyb20gJy4uL3V0aWxzL2NyaXNwLXBpeGVsJztcbnZhciBkZWZhdWx0UHJvcHMgPSBPYmplY3QuYXNzaWduKHt9LCBtYXBDb250cm9sRGVmYXVsdFByb3BzLCB7XG4gIGNsYXNzTmFtZTogJycsXG4gIG9mZnNldExlZnQ6IDAsXG4gIG9mZnNldFRvcDogMCxcbiAgdGlwU2l6ZTogMTAsXG4gIGFuY2hvcjogJ2JvdHRvbScsXG4gIGR5bmFtaWNQb3NpdGlvbjogdHJ1ZSxcbiAgc29ydEJ5RGVwdGg6IGZhbHNlLFxuICBjbG9zZUJ1dHRvbjogdHJ1ZSxcbiAgY2xvc2VPbkNsaWNrOiB0cnVlLFxuICBvbkNsb3NlOiBmdW5jdGlvbiBvbkNsb3NlKCkge31cbn0pO1xuXG5mdW5jdGlvbiBnZXRQb3NpdGlvbihwcm9wcywgdmlld3BvcnQsIGVsLCBfcmVmKSB7XG4gIHZhciBfcmVmMiA9IF9zbGljZWRUb0FycmF5KF9yZWYsIDIpLFxuICAgICAgeCA9IF9yZWYyWzBdLFxuICAgICAgeSA9IF9yZWYyWzFdO1xuXG4gIHZhciBhbmNob3IgPSBwcm9wcy5hbmNob3IsXG4gICAgICBkeW5hbWljUG9zaXRpb24gPSBwcm9wcy5keW5hbWljUG9zaXRpb24sXG4gICAgICB0aXBTaXplID0gcHJvcHMudGlwU2l6ZTtcblxuICBpZiAoZWwpIHtcbiAgICByZXR1cm4gZHluYW1pY1Bvc2l0aW9uID8gZ2V0RHluYW1pY1Bvc2l0aW9uKHtcbiAgICAgIHg6IHgsXG4gICAgICB5OiB5LFxuICAgICAgYW5jaG9yOiBhbmNob3IsXG4gICAgICBwYWRkaW5nOiB0aXBTaXplLFxuICAgICAgd2lkdGg6IHZpZXdwb3J0LndpZHRoLFxuICAgICAgaGVpZ2h0OiB2aWV3cG9ydC5oZWlnaHQsXG4gICAgICBzZWxmV2lkdGg6IGVsLmNsaWVudFdpZHRoLFxuICAgICAgc2VsZkhlaWdodDogZWwuY2xpZW50SGVpZ2h0XG4gICAgfSkgOiBhbmNob3I7XG4gIH1cblxuICByZXR1cm4gYW5jaG9yO1xufVxuXG5mdW5jdGlvbiBnZXRDb250YWluZXJTdHlsZShwcm9wcywgdmlld3BvcnQsIGVsLCBfcmVmMywgcG9zaXRpb25UeXBlKSB7XG4gIHZhciBfcmVmNCA9IF9zbGljZWRUb0FycmF5KF9yZWYzLCAzKSxcbiAgICAgIHggPSBfcmVmNFswXSxcbiAgICAgIHkgPSBfcmVmNFsxXSxcbiAgICAgIHogPSBfcmVmNFsyXTtcblxuICB2YXIgb2Zmc2V0TGVmdCA9IHByb3BzLm9mZnNldExlZnQsXG4gICAgICBvZmZzZXRUb3AgPSBwcm9wcy5vZmZzZXRUb3AsXG4gICAgICBzb3J0QnlEZXB0aCA9IHByb3BzLnNvcnRCeURlcHRoO1xuICB2YXIgYW5jaG9yUG9zaXRpb24gPSBBTkNIT1JfUE9TSVRJT05bcG9zaXRpb25UeXBlXTtcbiAgdmFyIGxlZnQgPSB4ICsgb2Zmc2V0TGVmdDtcbiAgdmFyIHRvcCA9IHkgKyBvZmZzZXRUb3A7XG4gIHZhciB4UGVyY2VudGFnZSA9IGNyaXNwUGVyY2VudGFnZShlbCwgLWFuY2hvclBvc2l0aW9uLnggKiAxMDApO1xuICB2YXIgeVBlcmNlbnRhZ2UgPSBjcmlzcFBlcmNlbnRhZ2UoZWwsIC1hbmNob3JQb3NpdGlvbi55ICogMTAwLCAneScpO1xuICB2YXIgc3R5bGUgPSB7XG4gICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgdHJhbnNmb3JtOiBcIlxcbiAgICAgIHRyYW5zbGF0ZShcIi5jb25jYXQoeFBlcmNlbnRhZ2UsIFwiJSwgXCIpLmNvbmNhdCh5UGVyY2VudGFnZSwgXCIlKVxcbiAgICAgIHRyYW5zbGF0ZShcIikuY29uY2F0KGNyaXNwUGl4ZWwobGVmdCksIFwicHgsIFwiKS5jb25jYXQoY3Jpc3BQaXhlbCh0b3ApLCBcInB4KVxcbiAgICBcIiksXG4gICAgZGlzcGxheTogdW5kZWZpbmVkLFxuICAgIHpJbmRleDogdW5kZWZpbmVkXG4gIH07XG5cbiAgaWYgKCFzb3J0QnlEZXB0aCkge1xuICAgIHJldHVybiBzdHlsZTtcbiAgfVxuXG4gIGlmICh6ID4gMSB8fCB6IDwgLTEgfHwgeCA8IDAgfHwgeCA+IHZpZXdwb3J0LndpZHRoIHx8IHkgPCAwIHx8IHkgPiB2aWV3cG9ydC5oZWlnaHQpIHtcbiAgICBzdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICB9IGVsc2Uge1xuICAgIHN0eWxlLnpJbmRleCA9IE1hdGguZmxvb3IoKDEgLSB6KSAvIDIgKiAxMDAwMDApO1xuICB9XG5cbiAgcmV0dXJuIHN0eWxlO1xufVxuXG5mdW5jdGlvbiBvbkNsaWNrKGV2dCwgX3JlZjUpIHtcbiAgdmFyIHByb3BzID0gX3JlZjUucHJvcHMsXG4gICAgICBjb250ZXh0ID0gX3JlZjUuY29udGV4dDtcblxuICBpZiAocHJvcHMuY2xvc2VPbkNsaWNrIHx8IGV2dC50YXJnZXQuY2xhc3NOYW1lID09PSAnbWFwYm94Z2wtcG9wdXAtY2xvc2UtYnV0dG9uJykge1xuICAgIHByb3BzLm9uQ2xvc2UoKTtcblxuICAgIGlmIChjb250ZXh0LmV2ZW50TWFuYWdlcikge1xuICAgICAgY29udGV4dC5ldmVudE1hbmFnZXIub25jZSgnY2xpY2snLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICByZXR1cm4gZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIH0sIGV2dC50YXJnZXQpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBQb3B1cChwcm9wcykge1xuICB2YXIgY29udGVudFJlZiA9IHVzZVJlZihudWxsKTtcbiAgdmFyIHRoaXNSZWYgPSB1c2VNYXBDb250cm9sKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgcHJvcHMpLCB7fSwge1xuICAgIG9uQ2xpY2s6IG9uQ2xpY2tcbiAgfSkpO1xuICB2YXIgY29udGV4dCA9IHRoaXNSZWYuY29udGV4dCxcbiAgICAgIGNvbnRhaW5lclJlZiA9IHRoaXNSZWYuY29udGFpbmVyUmVmO1xuXG4gIHZhciBfdXNlU3RhdGUgPSB1c2VTdGF0ZShmYWxzZSksXG4gICAgICBfdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlLCAyKSxcbiAgICAgIHNldExvYWRlZCA9IF91c2VTdGF0ZTJbMV07XG5cbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBzZXRMb2FkZWQodHJ1ZSk7XG4gIH0sIFtjb250ZW50UmVmLmN1cnJlbnRdKTtcbiAgdmFyIHZpZXdwb3J0ID0gY29udGV4dC52aWV3cG9ydCxcbiAgICAgIG1hcCA9IGNvbnRleHQubWFwO1xuICB2YXIgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lLFxuICAgICAgbG9uZ2l0dWRlID0gcHJvcHMubG9uZ2l0dWRlLFxuICAgICAgbGF0aXR1ZGUgPSBwcm9wcy5sYXRpdHVkZSxcbiAgICAgIHRpcFNpemUgPSBwcm9wcy50aXBTaXplLFxuICAgICAgY2xvc2VCdXR0b24gPSBwcm9wcy5jbG9zZUJ1dHRvbixcbiAgICAgIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW47XG4gIHZhciBhbHRpdHVkZSA9IHByb3BzLmFsdGl0dWRlO1xuXG4gIGlmIChhbHRpdHVkZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYWx0aXR1ZGUgPSBnZXRUZXJyYWluRWxldmF0aW9uKG1hcCwge1xuICAgICAgbG9uZ2l0dWRlOiBsb25naXR1ZGUsXG4gICAgICBsYXRpdHVkZTogbGF0aXR1ZGVcbiAgICB9KTtcbiAgfVxuXG4gIHZhciBwb3NpdGlvbiA9IHZpZXdwb3J0LnByb2plY3QoW2xvbmdpdHVkZSwgbGF0aXR1ZGUsIGFsdGl0dWRlXSk7XG4gIHZhciBwb3NpdGlvblR5cGUgPSBnZXRQb3NpdGlvbihwcm9wcywgdmlld3BvcnQsIGNvbnRlbnRSZWYuY3VycmVudCwgcG9zaXRpb24pO1xuICB2YXIgY29udGFpbmVyU3R5bGUgPSBnZXRDb250YWluZXJTdHlsZShwcm9wcywgdmlld3BvcnQsIGNvbnRhaW5lclJlZi5jdXJyZW50LCBwb3NpdGlvbiwgcG9zaXRpb25UeXBlKTtcbiAgdmFyIG9uUmVhY3RDbGljayA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChlKSB7XG4gICAgcmV0dXJuICFjb250ZXh0LmV2ZW50TWFuYWdlciAmJiBvbkNsaWNrKGUsIHRoaXNSZWYpO1xuICB9LCBbY29udGV4dC5ldmVudE1hbmFnZXJdKTtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgIGNsYXNzTmFtZTogXCJtYXBib3hnbC1wb3B1cCBtYXBib3hnbC1wb3B1cC1hbmNob3ItXCIuY29uY2F0KHBvc2l0aW9uVHlwZSwgXCIgXCIpLmNvbmNhdChjbGFzc05hbWUpLFxuICAgIHN0eWxlOiBjb250YWluZXJTdHlsZSxcbiAgICByZWY6IGNvbnRhaW5lclJlZlxuICB9LCBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICBrZXk6IFwidGlwXCIsXG4gICAgY2xhc3NOYW1lOiBcIm1hcGJveGdsLXBvcHVwLXRpcFwiLFxuICAgIHN0eWxlOiB7XG4gICAgICBib3JkZXJXaWR0aDogdGlwU2l6ZVxuICAgIH1cbiAgfSksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgIGtleTogXCJjb250ZW50XCIsXG4gICAgcmVmOiBjb250ZW50UmVmLFxuICAgIGNsYXNzTmFtZTogXCJtYXBib3hnbC1wb3B1cC1jb250ZW50XCIsXG4gICAgb25DbGljazogb25SZWFjdENsaWNrXG4gIH0sIGNsb3NlQnV0dG9uICYmIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIiwge1xuICAgIGtleTogXCJjbG9zZS1idXR0b25cIixcbiAgICBjbGFzc05hbWU6IFwibWFwYm94Z2wtcG9wdXAtY2xvc2UtYnV0dG9uXCIsXG4gICAgdHlwZTogXCJidXR0b25cIlxuICB9LCBcIlxceEQ3XCIpLCBjaGlsZHJlbikpO1xufVxuXG5Qb3B1cC5kZWZhdWx0UHJvcHMgPSBkZWZhdWx0UHJvcHM7XG5leHBvcnQgZGVmYXVsdCBSZWFjdC5tZW1vKFBvcHVwKTsiLCJpbXBvcnQgX2RlZmluZVByb3BlcnR5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eVwiO1xuaW1wb3J0IF9zbGljZWRUb0FycmF5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zbGljZWRUb0FycmF5XCI7XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkge1xuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7XG5cbiAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTtcbiAgICBpZiAoZW51bWVyYWJsZU9ubHkpIHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTtcbiAgICB9KTtcbiAgICBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7XG4gIH1cblxuICByZXR1cm4ga2V5cztcbn1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTtcblxuICAgIGlmIChpICUgMikge1xuICAgICAgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VDYWxsYmFjaywgdXNlU3RhdGUsIHVzZVJlZiwgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBtYXBib3hnbCBmcm9tICcuLi91dGlscy9tYXBib3hnbCc7XG5pbXBvcnQgdXNlTWFwQ29udHJvbCwgeyBtYXBDb250cm9sRGVmYXVsdFByb3BzLCBtYXBDb250cm9sUHJvcFR5cGVzIH0gZnJvbSAnLi91c2UtbWFwLWNvbnRyb2wnO1xudmFyIGRlZmF1bHRQcm9wcyA9IE9iamVjdC5hc3NpZ24oe30sIG1hcENvbnRyb2xEZWZhdWx0UHJvcHMsIHtcbiAgY2xhc3NOYW1lOiAnJyxcbiAgdG9nZ2xlTGFiZWw6ICdUb2dnbGUgQXR0cmlidXRpb24nXG59KTtcblxuZnVuY3Rpb24gc2V0dXBBdHRyaWJ1dGlvbmNvbnRyb2wob3B0cywgbWFwLCBjb250YWluZXIsIGF0dHJpYnV0aW9uQ29udGFpbmVyKSB7XG4gIHZhciBjb250cm9sID0gbmV3IG1hcGJveGdsLkF0dHJpYnV0aW9uQ29udHJvbChvcHRzKTtcbiAgY29udHJvbC5fbWFwID0gbWFwO1xuICBjb250cm9sLl9jb250YWluZXIgPSBjb250YWluZXI7XG4gIGNvbnRyb2wuX2lubmVyQ29udGFpbmVyID0gYXR0cmlidXRpb25Db250YWluZXI7XG5cbiAgY29udHJvbC5fdXBkYXRlQXR0cmlidXRpb25zKCk7XG5cbiAgY29udHJvbC5fdXBkYXRlRWRpdExpbmsoKTtcblxuICBtYXAub24oJ3N0eWxlZGF0YScsIGNvbnRyb2wuX3VwZGF0ZURhdGEpO1xuICBtYXAub24oJ3NvdXJjZWRhdGEnLCBjb250cm9sLl91cGRhdGVEYXRhKTtcbiAgcmV0dXJuIGNvbnRyb2w7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUF0dHJpYnV0aW9uQ29udHJvbChjb250cm9sKSB7XG4gIGNvbnRyb2wuX21hcC5vZmYoJ3N0eWxlZGF0YScsIGNvbnRyb2wuX3VwZGF0ZURhdGEpO1xuXG4gIGNvbnRyb2wuX21hcC5vZmYoJ3NvdXJjZWRhdGEnLCBjb250cm9sLl91cGRhdGVEYXRhKTtcbn1cblxuZnVuY3Rpb24gQXR0cmlidXRpb25Db250cm9sKHByb3BzKSB7XG4gIHZhciBfdXNlTWFwQ29udHJvbCA9IHVzZU1hcENvbnRyb2wocHJvcHMpLFxuICAgICAgY29udGV4dCA9IF91c2VNYXBDb250cm9sLmNvbnRleHQsXG4gICAgICBjb250YWluZXJSZWYgPSBfdXNlTWFwQ29udHJvbC5jb250YWluZXJSZWY7XG5cbiAgdmFyIGlubmVyQ29udGFpbmVyUmVmID0gdXNlUmVmKG51bGwpO1xuXG4gIHZhciBfdXNlU3RhdGUgPSB1c2VTdGF0ZShmYWxzZSksXG4gICAgICBfdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlLCAyKSxcbiAgICAgIHNob3dDb21wYWN0ID0gX3VzZVN0YXRlMlswXSxcbiAgICAgIHNldFNob3dDb21wYWN0ID0gX3VzZVN0YXRlMlsxXTtcblxuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHZhciBjb250cm9sO1xuXG4gICAgaWYgKGNvbnRleHQubWFwKSB7XG4gICAgICBjb250cm9sID0gc2V0dXBBdHRyaWJ1dGlvbmNvbnRyb2woe1xuICAgICAgICBjdXN0b21BdHRyaWJ1dGlvbjogcHJvcHMuY3VzdG9tQXR0cmlidXRpb25cbiAgICAgIH0sIGNvbnRleHQubWFwLCBjb250YWluZXJSZWYuY3VycmVudCwgaW5uZXJDb250YWluZXJSZWYuY3VycmVudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBjb250cm9sICYmIHJlbW92ZUF0dHJpYnV0aW9uQ29udHJvbChjb250cm9sKTtcbiAgICB9O1xuICB9LCBbY29udGV4dC5tYXBdKTtcbiAgdmFyIGNvbXBhY3QgPSBwcm9wcy5jb21wYWN0ID09PSB1bmRlZmluZWQgPyBjb250ZXh0LnZpZXdwb3J0LndpZHRoIDw9IDY0MCA6IHByb3BzLmNvbXBhY3Q7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFjb21wYWN0ICYmIHNob3dDb21wYWN0KSB7XG4gICAgICBzZXRTaG93Q29tcGFjdChmYWxzZSk7XG4gICAgfVxuICB9LCBbY29tcGFjdF0pO1xuICB2YXIgdG9nZ2xlQXR0cmlidXRpb24gPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHNldFNob3dDb21wYWN0KGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgcmV0dXJuICF2YWx1ZTtcbiAgICB9KTtcbiAgfSwgW10pO1xuICB2YXIgc3R5bGUgPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX29iamVjdFNwcmVhZCh7XG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJ1xuICAgIH0sIHByb3BzLnN0eWxlKTtcbiAgfSwgW3Byb3BzLnN0eWxlXSk7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICBzdHlsZTogc3R5bGUsXG4gICAgY2xhc3NOYW1lOiBwcm9wcy5jbGFzc05hbWVcbiAgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgcmVmOiBjb250YWluZXJSZWYsXG4gICAgXCJhcmlhLXByZXNzZWRcIjogc2hvd0NvbXBhY3QsXG4gICAgY2xhc3NOYW1lOiBcIm1hcGJveGdsLWN0cmwgbWFwYm94Z2wtY3RybC1hdHRyaWIgXCIuY29uY2F0KGNvbXBhY3QgPyAnbWFwYm94Z2wtY29tcGFjdCcgOiAnJywgXCIgXCIpLmNvbmNhdChzaG93Q29tcGFjdCA/ICdtYXBib3hnbC1jb21wYWN0LXNob3cnIDogJycpXG4gIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIiwge1xuICAgIHR5cGU6IFwiYnV0dG9uXCIsXG4gICAgY2xhc3NOYW1lOiBcIm1hcGJveGdsLWN0cmwtYXR0cmliLWJ1dHRvblwiLFxuICAgIHRpdGxlOiBwcm9wcy50b2dnbGVMYWJlbCxcbiAgICBvbkNsaWNrOiB0b2dnbGVBdHRyaWJ1dGlvblxuICB9KSwgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgcmVmOiBpbm5lckNvbnRhaW5lclJlZixcbiAgICBjbGFzc05hbWU6IFwibWFwYm94Z2wtY3RybC1hdHRyaWItaW5uZXJcIixcbiAgICByb2xlOiBcImxpc3RcIlxuICB9KSkpO1xufVxuXG5BdHRyaWJ1dGlvbkNvbnRyb2wuZGVmYXVsdFByb3BzID0gZGVmYXVsdFByb3BzO1xuZXhwb3J0IGRlZmF1bHQgUmVhY3QubWVtbyhBdHRyaWJ1dGlvbkNvbnRyb2wpOyIsImltcG9ydCBfZGVmaW5lUHJvcGVydHkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5XCI7XG5pbXBvcnQgX3NsaWNlZFRvQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXlcIjtcblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7XG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTtcblxuICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICAgIHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpO1xuICAgIGlmIChlbnVtZXJhYmxlT25seSkgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHtcbiAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlO1xuICAgIH0pO1xuICAgIGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTtcbiAgfVxuXG4gIHJldHVybiBrZXlzO1xufVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkge1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9O1xuXG4gICAgaWYgKGkgJSAyKSB7XG4gICAgICBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5pbXBvcnQgeyBkb2N1bWVudCB9IGZyb20gJy4uL3V0aWxzL2dsb2JhbHMnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VTdGF0ZSwgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBtYXBib3hnbCBmcm9tICcuLi91dGlscy9tYXBib3hnbCc7XG5pbXBvcnQgdXNlTWFwQ29udHJvbCwgeyBtYXBDb250cm9sRGVmYXVsdFByb3BzLCBtYXBDb250cm9sUHJvcFR5cGVzIH0gZnJvbSAnLi91c2UtbWFwLWNvbnRyb2wnO1xudmFyIGRlZmF1bHRQcm9wcyA9IE9iamVjdC5hc3NpZ24oe30sIG1hcENvbnRyb2xEZWZhdWx0UHJvcHMsIHtcbiAgY2xhc3NOYW1lOiAnJyxcbiAgY29udGFpbmVyOiBudWxsLFxuICBsYWJlbDogJ1RvZ2dsZSBmdWxsc2NyZWVuJ1xufSk7XG5cbmZ1bmN0aW9uIEZ1bGxzY3JlZW5Db250cm9sKHByb3BzKSB7XG4gIHZhciBfdXNlTWFwQ29udHJvbCA9IHVzZU1hcENvbnRyb2wocHJvcHMpLFxuICAgICAgY29udGV4dCA9IF91c2VNYXBDb250cm9sLmNvbnRleHQsXG4gICAgICBjb250YWluZXJSZWYgPSBfdXNlTWFwQ29udHJvbC5jb250YWluZXJSZWY7XG5cbiAgdmFyIF91c2VTdGF0ZSA9IHVzZVN0YXRlKGZhbHNlKSxcbiAgICAgIF91c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUsIDIpLFxuICAgICAgaXNGdWxsc2NyZWVuID0gX3VzZVN0YXRlMlswXSxcbiAgICAgIHNldElzRnVsbHNjcmVlbiA9IF91c2VTdGF0ZTJbMV07XG5cbiAgdmFyIF91c2VTdGF0ZTMgPSB1c2VTdGF0ZShmYWxzZSksXG4gICAgICBfdXNlU3RhdGU0ID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlMywgMiksXG4gICAgICBzaG93QnV0dG9uID0gX3VzZVN0YXRlNFswXSxcbiAgICAgIHNldFNob3dCdXR0b24gPSBfdXNlU3RhdGU0WzFdO1xuXG4gIHZhciBfdXNlU3RhdGU1ID0gdXNlU3RhdGUobnVsbCksXG4gICAgICBfdXNlU3RhdGU2ID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlNSwgMiksXG4gICAgICBtYXBib3hGdWxsc2NyZWVuQ29udHJvbCA9IF91c2VTdGF0ZTZbMF0sXG4gICAgICBjcmVhdGVNYXBib3hGdWxsc2NyZWVuQ29udHJvbCA9IF91c2VTdGF0ZTZbMV07XG5cbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgY29udHJvbCA9IG5ldyBtYXBib3hnbC5GdWxsc2NyZWVuQ29udHJvbCgpO1xuICAgIGNyZWF0ZU1hcGJveEZ1bGxzY3JlZW5Db250cm9sKGNvbnRyb2wpO1xuICAgIHNldFNob3dCdXR0b24oY29udHJvbC5fY2hlY2tGdWxsc2NyZWVuU3VwcG9ydCgpKTtcblxuICAgIHZhciBvbkZ1bGxzY3JlZW5DaGFuZ2UgPSBmdW5jdGlvbiBvbkZ1bGxzY3JlZW5DaGFuZ2UoKSB7XG4gICAgICB2YXIgbmV4dFN0YXRlID0gIWNvbnRyb2wuX2Z1bGxzY3JlZW47XG4gICAgICBjb250cm9sLl9mdWxsc2NyZWVuID0gbmV4dFN0YXRlO1xuICAgICAgc2V0SXNGdWxsc2NyZWVuKG5leHRTdGF0ZSk7XG4gICAgfTtcblxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoY29udHJvbC5fZnVsbHNjcmVlbmNoYW5nZSwgb25GdWxsc2NyZWVuQ2hhbmdlKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihjb250cm9sLl9mdWxsc2NyZWVuY2hhbmdlLCBvbkZ1bGxzY3JlZW5DaGFuZ2UpO1xuICAgIH07XG4gIH0sIFtdKTtcblxuICB2YXIgb25DbGlja0Z1bGxzY3JlZW4gPSBmdW5jdGlvbiBvbkNsaWNrRnVsbHNjcmVlbigpIHtcbiAgICBpZiAobWFwYm94RnVsbHNjcmVlbkNvbnRyb2wpIHtcbiAgICAgIG1hcGJveEZ1bGxzY3JlZW5Db250cm9sLl9jb250YWluZXIgPSBwcm9wcy5jb250YWluZXIgfHwgY29udGV4dC5jb250YWluZXI7XG5cbiAgICAgIG1hcGJveEZ1bGxzY3JlZW5Db250cm9sLl9vbkNsaWNrRnVsbHNjcmVlbigpO1xuICAgIH1cbiAgfTtcblxuICB2YXIgc3R5bGUgPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX29iamVjdFNwcmVhZCh7XG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJ1xuICAgIH0sIHByb3BzLnN0eWxlKTtcbiAgfSwgW3Byb3BzLnN0eWxlXSk7XG5cbiAgaWYgKCFzaG93QnV0dG9uKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lLFxuICAgICAgbGFiZWwgPSBwcm9wcy5sYWJlbDtcbiAgdmFyIHR5cGUgPSBpc0Z1bGxzY3JlZW4gPyAnc2hyaW5rJyA6ICdmdWxsc2NyZWVuJztcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgIHN0eWxlOiBzdHlsZSxcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZVxuICB9LCBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICBjbGFzc05hbWU6IFwibWFwYm94Z2wtY3RybCBtYXBib3hnbC1jdHJsLWdyb3VwXCIsXG4gICAgcmVmOiBjb250YWluZXJSZWZcbiAgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLCB7XG4gICAga2V5OiB0eXBlLFxuICAgIGNsYXNzTmFtZTogXCJtYXBib3hnbC1jdHJsLWljb24gbWFwYm94Z2wtY3RybC1cIi5jb25jYXQodHlwZSksXG4gICAgdHlwZTogXCJidXR0b25cIixcbiAgICB0aXRsZTogbGFiZWwsXG4gICAgb25DbGljazogb25DbGlja0Z1bGxzY3JlZW5cbiAgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge1xuICAgIGNsYXNzTmFtZTogXCJtYXBib3hnbC1jdHJsLWljb25cIixcbiAgICBcImFyaWEtaGlkZGVuXCI6IFwidHJ1ZVwiXG4gIH0pKSkpO1xufVxuXG5GdWxsc2NyZWVuQ29udHJvbC5kZWZhdWx0UHJvcHMgPSBkZWZhdWx0UHJvcHM7XG5leHBvcnQgZGVmYXVsdCBSZWFjdC5tZW1vKEZ1bGxzY3JlZW5Db250cm9sKTsiLCJ2YXIgc3VwcG9ydGVkO1xuZXhwb3J0IGZ1bmN0aW9uIGlzR2VvbG9jYXRpb25TdXBwb3J0ZWQoKSB7XG4gIGlmIChzdXBwb3J0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoc3VwcG9ydGVkKTtcbiAgfVxuXG4gIGlmICh3aW5kb3cubmF2aWdhdG9yLnBlcm1pc3Npb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gd2luZG93Lm5hdmlnYXRvci5wZXJtaXNzaW9ucy5xdWVyeSh7XG4gICAgICBuYW1lOiAnZ2VvbG9jYXRpb24nXG4gICAgfSkudGhlbihmdW5jdGlvbiAocCkge1xuICAgICAgc3VwcG9ydGVkID0gcC5zdGF0ZSAhPT0gJ2RlbmllZCc7XG4gICAgICByZXR1cm4gc3VwcG9ydGVkO1xuICAgIH0pO1xuICB9XG5cbiAgc3VwcG9ydGVkID0gQm9vbGVhbih3aW5kb3cubmF2aWdhdG9yLmdlb2xvY2F0aW9uKTtcbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShzdXBwb3J0ZWQpO1xufSIsImltcG9ydCBfZGVmaW5lUHJvcGVydHkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5XCI7XG5pbXBvcnQgX3NsaWNlZFRvQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXlcIjtcblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7XG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTtcblxuICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICAgIHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpO1xuICAgIGlmIChlbnVtZXJhYmxlT25seSkgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHtcbiAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlO1xuICAgIH0pO1xuICAgIGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTtcbiAgfVxuXG4gIHJldHVybiBrZXlzO1xufVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkge1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9O1xuXG4gICAgaWYgKGkgJSAyKSB7XG4gICAgICBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VSZWYsIHVzZUVmZmVjdCwgdXNlU3RhdGUsIHVzZUNhbGxiYWNrLCB1c2VNZW1vIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgZG9jdW1lbnQgfSBmcm9tICcuLi91dGlscy9nbG9iYWxzJztcbmltcG9ydCBtYXBib3hnbCBmcm9tICcuLi91dGlscy9tYXBib3hnbCc7XG5pbXBvcnQgTWFwU3RhdGUgZnJvbSAnLi4vdXRpbHMvbWFwLXN0YXRlJztcbmltcG9ydCB7IExJTkVBUl9UUkFOU0lUSU9OX1BST1BTIH0gZnJvbSAnLi4vdXRpbHMvbWFwLWNvbnRyb2xsZXInO1xuaW1wb3J0IHsgaXNHZW9sb2NhdGlvblN1cHBvcnRlZCB9IGZyb20gJy4uL3V0aWxzL2dlb2xvY2F0ZS11dGlscyc7XG5pbXBvcnQgdXNlTWFwQ29udHJvbCwgeyBtYXBDb250cm9sRGVmYXVsdFByb3BzLCBtYXBDb250cm9sUHJvcFR5cGVzIH0gZnJvbSAnLi91c2UtbWFwLWNvbnRyb2wnO1xuXG52YXIgbm9vcCA9IGZ1bmN0aW9uIG5vb3AoKSB7fTtcblxudmFyIGRlZmF1bHRQcm9wcyA9IE9iamVjdC5hc3NpZ24oe30sIG1hcENvbnRyb2xEZWZhdWx0UHJvcHMsIHtcbiAgY2xhc3NOYW1lOiAnJyxcbiAgbGFiZWw6ICdGaW5kIE15IExvY2F0aW9uJyxcbiAgZGlzYWJsZWRMYWJlbDogJ0xvY2F0aW9uIE5vdCBBdmFpbGFibGUnLFxuICBhdXRvOiBmYWxzZSxcbiAgcG9zaXRpb25PcHRpb25zOiB7XG4gICAgZW5hYmxlSGlnaEFjY3VyYWN5OiBmYWxzZSxcbiAgICB0aW1lb3V0OiA2MDAwXG4gIH0sXG4gIGZpdEJvdW5kc09wdGlvbnM6IHtcbiAgICBtYXhab29tOiAxNVxuICB9LFxuICB0cmFja1VzZXJMb2NhdGlvbjogZmFsc2UsXG4gIHNob3dVc2VyTG9jYXRpb246IHRydWUsXG4gIHNob3dBY2N1cmFjeUNpcmNsZTogdHJ1ZSxcbiAgb25HZW9sb2NhdGU6IGZ1bmN0aW9uIG9uR2VvbG9jYXRlKCkge31cbn0pO1xuXG5mdW5jdGlvbiBnZXRCb3VuZHMocG9zaXRpb24pIHtcbiAgdmFyIGNlbnRlciA9IG5ldyBtYXBib3hnbC5MbmdMYXQocG9zaXRpb24uY29vcmRzLmxvbmdpdHVkZSwgcG9zaXRpb24uY29vcmRzLmxhdGl0dWRlKTtcbiAgdmFyIHJhZGl1cyA9IHBvc2l0aW9uLmNvb3Jkcy5hY2N1cmFjeTtcbiAgdmFyIGJvdW5kcyA9IGNlbnRlci50b0JvdW5kcyhyYWRpdXMpO1xuICByZXR1cm4gW1tib3VuZHMuX25lLmxuZywgYm91bmRzLl9uZS5sYXRdLCBbYm91bmRzLl9zdy5sbmcsIGJvdW5kcy5fc3cubGF0XV07XG59XG5cbmZ1bmN0aW9uIHNldHVwTWFwYm94R2VvbG9jYXRlQ29udHJvbChjb250ZXh0LCBwcm9wcywgZ2VvbG9jYXRlQnV0dG9uKSB7XG4gIHZhciBjb250cm9sID0gbmV3IG1hcGJveGdsLkdlb2xvY2F0ZUNvbnRyb2wocHJvcHMpO1xuICBjb250cm9sLl9jb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgY29udHJvbC5fbWFwID0ge1xuICAgIG9uOiBmdW5jdGlvbiBvbigpIHt9LFxuICAgIF9nZXRVSVN0cmluZzogZnVuY3Rpb24gX2dldFVJU3RyaW5nKCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfTtcblxuICBjb250cm9sLl9zZXR1cFVJKHRydWUpO1xuXG4gIGNvbnRyb2wuX21hcCA9IGNvbnRleHQubWFwO1xuICBjb250cm9sLl9nZW9sb2NhdGVCdXR0b24gPSBnZW9sb2NhdGVCdXR0b247XG4gIHZhciBldmVudE1hbmFnZXIgPSBjb250ZXh0LmV2ZW50TWFuYWdlcjtcblxuICBpZiAoY29udHJvbC5vcHRpb25zLnRyYWNrVXNlckxvY2F0aW9uICYmIGV2ZW50TWFuYWdlcikge1xuICAgIGV2ZW50TWFuYWdlci5vbigncGFuc3RhcnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoY29udHJvbC5fd2F0Y2hTdGF0ZSA9PT0gJ0FDVElWRV9MT0NLJykge1xuICAgICAgICBjb250cm9sLl93YXRjaFN0YXRlID0gJ0JBQ0tHUk9VTkQnO1xuICAgICAgICBnZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgnbWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZCcpO1xuICAgICAgICBnZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgnbWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlJyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBjb250cm9sLm9uKCdnZW9sb2NhdGUnLCBwcm9wcy5vbkdlb2xvY2F0ZSk7XG4gIHJldHVybiBjb250cm9sO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVDYW1lcmEocG9zaXRpb24sIF9yZWYpIHtcbiAgdmFyIGNvbnRleHQgPSBfcmVmLmNvbnRleHQsXG4gICAgICBwcm9wcyA9IF9yZWYucHJvcHM7XG4gIHZhciBib3VuZHMgPSBnZXRCb3VuZHMocG9zaXRpb24pO1xuXG4gIHZhciBfY29udGV4dCR2aWV3cG9ydCRmaXQgPSBjb250ZXh0LnZpZXdwb3J0LmZpdEJvdW5kcyhib3VuZHMsIHByb3BzLmZpdEJvdW5kc09wdGlvbnMpLFxuICAgICAgbG9uZ2l0dWRlID0gX2NvbnRleHQkdmlld3BvcnQkZml0LmxvbmdpdHVkZSxcbiAgICAgIGxhdGl0dWRlID0gX2NvbnRleHQkdmlld3BvcnQkZml0LmxhdGl0dWRlLFxuICAgICAgem9vbSA9IF9jb250ZXh0JHZpZXdwb3J0JGZpdC56b29tO1xuXG4gIHZhciBuZXdWaWV3U3RhdGUgPSBPYmplY3QuYXNzaWduKHt9LCBjb250ZXh0LnZpZXdwb3J0LCB7XG4gICAgbG9uZ2l0dWRlOiBsb25naXR1ZGUsXG4gICAgbGF0aXR1ZGU6IGxhdGl0dWRlLFxuICAgIHpvb206IHpvb21cbiAgfSk7XG4gIHZhciBtYXBTdGF0ZSA9IG5ldyBNYXBTdGF0ZShuZXdWaWV3U3RhdGUpO1xuICB2YXIgdmlld1N0YXRlID0gT2JqZWN0LmFzc2lnbih7fSwgbWFwU3RhdGUuZ2V0Vmlld3BvcnRQcm9wcygpLCBMSU5FQVJfVFJBTlNJVElPTl9QUk9QUyk7XG4gIHZhciBvblZpZXdwb3J0Q2hhbmdlID0gcHJvcHMub25WaWV3cG9ydENoYW5nZSB8fCBjb250ZXh0Lm9uVmlld3BvcnRDaGFuZ2UgfHwgbm9vcDtcbiAgdmFyIG9uVmlld1N0YXRlQ2hhbmdlID0gcHJvcHMub25WaWV3U3RhdGVDaGFuZ2UgfHwgY29udGV4dC5vblZpZXdTdGF0ZUNoYW5nZSB8fCBub29wO1xuICBvblZpZXdTdGF0ZUNoYW5nZSh7XG4gICAgdmlld1N0YXRlOiB2aWV3U3RhdGVcbiAgfSk7XG4gIG9uVmlld3BvcnRDaGFuZ2Uodmlld1N0YXRlKTtcbn1cblxuZnVuY3Rpb24gR2VvbG9jYXRlQ29udHJvbChwcm9wcykge1xuICB2YXIgdGhpc1JlZiA9IHVzZU1hcENvbnRyb2wocHJvcHMpO1xuICB2YXIgY29udGV4dCA9IHRoaXNSZWYuY29udGV4dCxcbiAgICAgIGNvbnRhaW5lclJlZiA9IHRoaXNSZWYuY29udGFpbmVyUmVmO1xuICB2YXIgZ2VvbG9jYXRlQnV0dG9uUmVmID0gdXNlUmVmKG51bGwpO1xuXG4gIHZhciBfdXNlU3RhdGUgPSB1c2VTdGF0ZShudWxsKSxcbiAgICAgIF91c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUsIDIpLFxuICAgICAgbWFwYm94R2VvbG9jYXRlQ29udHJvbCA9IF91c2VTdGF0ZTJbMF0sXG4gICAgICBjcmVhdGVNYXBib3hHZW9sb2NhdGVDb250cm9sID0gX3VzZVN0YXRlMlsxXTtcblxuICB2YXIgX3VzZVN0YXRlMyA9IHVzZVN0YXRlKGZhbHNlKSxcbiAgICAgIF91c2VTdGF0ZTQgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUzLCAyKSxcbiAgICAgIHN1cHBvcnRzR2VvbG9jYXRpb24gPSBfdXNlU3RhdGU0WzBdLFxuICAgICAgc2V0U3VwcG9ydHNHZW9sb2NhdGlvbiA9IF91c2VTdGF0ZTRbMV07XG5cbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgY29udHJvbDtcblxuICAgIGlmIChjb250ZXh0Lm1hcCkge1xuICAgICAgaXNHZW9sb2NhdGlvblN1cHBvcnRlZCgpLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICBzZXRTdXBwb3J0c0dlb2xvY2F0aW9uKHJlc3VsdCk7XG5cbiAgICAgICAgaWYgKGdlb2xvY2F0ZUJ1dHRvblJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgY29udHJvbCA9IHNldHVwTWFwYm94R2VvbG9jYXRlQ29udHJvbChjb250ZXh0LCBwcm9wcywgZ2VvbG9jYXRlQnV0dG9uUmVmLmN1cnJlbnQpO1xuXG4gICAgICAgICAgY29udHJvbC5fdXBkYXRlQ2FtZXJhID0gZnVuY3Rpb24gKHBvc2l0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gdXBkYXRlQ2FtZXJhKHBvc2l0aW9uLCB0aGlzUmVmKTtcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgY3JlYXRlTWFwYm94R2VvbG9jYXRlQ29udHJvbChjb250cm9sKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChjb250cm9sKSB7XG4gICAgICAgIGNvbnRyb2wuX2NsZWFyV2F0Y2goKTtcbiAgICAgIH1cbiAgICB9O1xuICB9LCBbY29udGV4dC5tYXBdKTtcbiAgdmFyIHRyaWdnZXJHZW9sb2NhdGUgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgaWYgKG1hcGJveEdlb2xvY2F0ZUNvbnRyb2wpIHtcbiAgICAgIG1hcGJveEdlb2xvY2F0ZUNvbnRyb2wub3B0aW9ucyA9IHRoaXNSZWYucHJvcHM7XG4gICAgICBtYXBib3hHZW9sb2NhdGVDb250cm9sLnRyaWdnZXIoKTtcbiAgICB9XG4gIH0sIFttYXBib3hHZW9sb2NhdGVDb250cm9sXSk7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHByb3BzLmF1dG8pIHtcbiAgICAgIHRyaWdnZXJHZW9sb2NhdGUoKTtcbiAgICB9XG4gIH0sIFttYXBib3hHZW9sb2NhdGVDb250cm9sLCBwcm9wcy5hdXRvXSk7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKG1hcGJveEdlb2xvY2F0ZUNvbnRyb2wpIHtcbiAgICAgIG1hcGJveEdlb2xvY2F0ZUNvbnRyb2wuX29uWm9vbSgpO1xuICAgIH1cbiAgfSwgW2NvbnRleHQudmlld3BvcnQuem9vbV0pO1xuICB2YXIgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lLFxuICAgICAgbGFiZWwgPSBwcm9wcy5sYWJlbCxcbiAgICAgIGRpc2FibGVkTGFiZWwgPSBwcm9wcy5kaXNhYmxlZExhYmVsLFxuICAgICAgdHJhY2tVc2VyTG9jYXRpb24gPSBwcm9wcy50cmFja1VzZXJMb2NhdGlvbjtcbiAgdmFyIHN0eWxlID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9vYmplY3RTcHJlYWQoe1xuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZSdcbiAgICB9LCBwcm9wcy5zdHlsZSk7XG4gIH0sIFtwcm9wcy5zdHlsZV0pO1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgc3R5bGU6IHN0eWxlLFxuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lXG4gIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgIGtleTogXCJnZW9sb2NhdGUtY29udHJvbFwiLFxuICAgIGNsYXNzTmFtZTogXCJtYXBib3hnbC1jdHJsIG1hcGJveGdsLWN0cmwtZ3JvdXBcIixcbiAgICByZWY6IGNvbnRhaW5lclJlZlxuICB9LCBSZWFjdC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIsIHtcbiAgICBrZXk6IFwiZ2VvbG9jYXRlXCIsXG4gICAgY2xhc3NOYW1lOiBcIm1hcGJveGdsLWN0cmwtaWNvbiBtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZVwiLFxuICAgIHJlZjogZ2VvbG9jYXRlQnV0dG9uUmVmLFxuICAgIGRpc2FibGVkOiAhc3VwcG9ydHNHZW9sb2NhdGlvbixcbiAgICBcImFyaWEtcHJlc3NlZFwiOiAhdHJhY2tVc2VyTG9jYXRpb24sXG4gICAgdHlwZTogXCJidXR0b25cIixcbiAgICB0aXRsZTogc3VwcG9ydHNHZW9sb2NhdGlvbiA/IGxhYmVsIDogZGlzYWJsZWRMYWJlbCxcbiAgICBcImFyaWEtbGFiZWxcIjogc3VwcG9ydHNHZW9sb2NhdGlvbiA/IGxhYmVsIDogZGlzYWJsZWRMYWJlbCxcbiAgICBvbkNsaWNrOiB0cmlnZ2VyR2VvbG9jYXRlXG4gIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtcbiAgICBjbGFzc05hbWU6IFwibWFwYm94Z2wtY3RybC1pY29uXCIsXG4gICAgXCJhcmlhLWhpZGRlblwiOiBcInRydWVcIlxuICB9KSkpKTtcbn1cblxuR2VvbG9jYXRlQ29udHJvbC5kZWZhdWx0UHJvcHMgPSBkZWZhdWx0UHJvcHM7XG5leHBvcnQgZGVmYXVsdCBSZWFjdC5tZW1vKEdlb2xvY2F0ZUNvbnRyb2wpOyIsImV4cG9ydCBmdW5jdGlvbiBjb21wYXJlVmVyc2lvbnModmVyc2lvbjEsIHZlcnNpb24yKSB7XG4gIHZhciB2MSA9ICh2ZXJzaW9uMSB8fCAnJykuc3BsaXQoJy4nKS5tYXAoTnVtYmVyKTtcbiAgdmFyIHYyID0gKHZlcnNpb24yIHx8ICcnKS5zcGxpdCgnLicpLm1hcChOdW1iZXIpO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMzsgaSsrKSB7XG4gICAgdmFyIHBhcnQxID0gdjFbaV0gfHwgMDtcbiAgICB2YXIgcGFydDIgPSB2MltpXSB8fCAwO1xuXG4gICAgaWYgKHBhcnQxIDwgcGFydDIpIHtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICBpZiAocGFydDEgPiBwYXJ0Mikge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIDA7XG59IiwiaW1wb3J0IF9kZWZpbmVQcm9wZXJ0eSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHlcIjtcblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7XG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTtcblxuICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICAgIHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpO1xuICAgIGlmIChlbnVtZXJhYmxlT25seSkgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHtcbiAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlO1xuICAgIH0pO1xuICAgIGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTtcbiAgfVxuXG4gIHJldHVybiBrZXlzO1xufVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkge1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9O1xuXG4gICAgaWYgKGkgJSAyKSB7XG4gICAgICBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IE1hcFN0YXRlIGZyb20gJy4uL3V0aWxzL21hcC1zdGF0ZSc7XG5pbXBvcnQgeyBMSU5FQVJfVFJBTlNJVElPTl9QUk9QUyB9IGZyb20gJy4uL3V0aWxzL21hcC1jb250cm9sbGVyJztcbmltcG9ydCB7IGNvbXBhcmVWZXJzaW9ucyB9IGZyb20gJy4uL3V0aWxzL3ZlcnNpb24nO1xuaW1wb3J0IHVzZU1hcENvbnRyb2wsIHsgbWFwQ29udHJvbERlZmF1bHRQcm9wcywgbWFwQ29udHJvbFByb3BUeXBlcyB9IGZyb20gJy4vdXNlLW1hcC1jb250cm9sJztcblxudmFyIG5vb3AgPSBmdW5jdGlvbiBub29wKCkge307XG5cbnZhciBkZWZhdWx0UHJvcHMgPSBPYmplY3QuYXNzaWduKHt9LCBtYXBDb250cm9sRGVmYXVsdFByb3BzLCB7XG4gIGNsYXNzTmFtZTogJycsXG4gIHNob3dDb21wYXNzOiB0cnVlLFxuICBzaG93Wm9vbTogdHJ1ZSxcbiAgem9vbUluTGFiZWw6ICdab29tIEluJyxcbiAgem9vbU91dExhYmVsOiAnWm9vbSBPdXQnLFxuICBjb21wYXNzTGFiZWw6ICdSZXNldCBOb3J0aCdcbn0pO1xudmFyIFZFUlNJT05fTEVHQUNZID0gMTtcbnZhciBWRVJTSU9OXzFfNiA9IDI7XG5cbmZ1bmN0aW9uIGdldFVJVmVyc2lvbihtYXBib3hWZXJzaW9uKSB7XG4gIHJldHVybiBjb21wYXJlVmVyc2lvbnMobWFwYm94VmVyc2lvbiwgJzEuNi4wJykgPj0gMCA/IFZFUlNJT05fMV82IDogVkVSU0lPTl9MRUdBQ1k7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVZpZXdwb3J0KGNvbnRleHQsIHByb3BzLCBvcHRzKSB7XG4gIHZhciB2aWV3cG9ydCA9IGNvbnRleHQudmlld3BvcnQ7XG4gIHZhciBtYXBTdGF0ZSA9IG5ldyBNYXBTdGF0ZShPYmplY3QuYXNzaWduKHt9LCB2aWV3cG9ydCwgb3B0cykpO1xuICB2YXIgdmlld1N0YXRlID0gT2JqZWN0LmFzc2lnbih7fSwgbWFwU3RhdGUuZ2V0Vmlld3BvcnRQcm9wcygpLCBMSU5FQVJfVFJBTlNJVElPTl9QUk9QUyk7XG4gIHZhciBvblZpZXdwb3J0Q2hhbmdlID0gcHJvcHMub25WaWV3cG9ydENoYW5nZSB8fCBjb250ZXh0Lm9uVmlld3BvcnRDaGFuZ2UgfHwgbm9vcDtcbiAgdmFyIG9uVmlld1N0YXRlQ2hhbmdlID0gcHJvcHMub25WaWV3U3RhdGVDaGFuZ2UgfHwgY29udGV4dC5vblZpZXdTdGF0ZUNoYW5nZSB8fCBub29wO1xuICBvblZpZXdTdGF0ZUNoYW5nZSh7XG4gICAgdmlld1N0YXRlOiB2aWV3U3RhdGVcbiAgfSk7XG4gIG9uVmlld3BvcnRDaGFuZ2Uodmlld1N0YXRlKTtcbn1cblxuZnVuY3Rpb24gcmVuZGVyQnV0dG9uKHR5cGUsIGxhYmVsLCBjYWxsYmFjaywgY2hpbGRyZW4pIHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIiwge1xuICAgIGtleTogdHlwZSxcbiAgICBjbGFzc05hbWU6IFwibWFwYm94Z2wtY3RybC1pY29uIG1hcGJveGdsLWN0cmwtXCIuY29uY2F0KHR5cGUpLFxuICAgIHR5cGU6IFwiYnV0dG9uXCIsXG4gICAgdGl0bGU6IGxhYmVsLFxuICAgIG9uQ2xpY2s6IGNhbGxiYWNrXG4gIH0sIGNoaWxkcmVuIHx8IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtcbiAgICBjbGFzc05hbWU6IFwibWFwYm94Z2wtY3RybC1pY29uXCIsXG4gICAgXCJhcmlhLWhpZGRlblwiOiBcInRydWVcIlxuICB9KSk7XG59XG5cbmZ1bmN0aW9uIHJlbmRlckNvbXBhc3MoY29udGV4dCkge1xuICB2YXIgdWlWZXJzaW9uID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGNvbnRleHQubWFwID8gZ2V0VUlWZXJzaW9uKGNvbnRleHQubWFwLnZlcnNpb24pIDogVkVSU0lPTl8xXzY7XG4gIH0sIFtjb250ZXh0Lm1hcF0pO1xuICB2YXIgYmVhcmluZyA9IGNvbnRleHQudmlld3BvcnQuYmVhcmluZztcbiAgdmFyIHN0eWxlID0ge1xuICAgIHRyYW5zZm9ybTogXCJyb3RhdGUoXCIuY29uY2F0KC1iZWFyaW5nLCBcImRlZylcIilcbiAgfTtcbiAgcmV0dXJuIHVpVmVyc2lvbiA9PT0gVkVSU0lPTl8xXzYgPyBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7XG4gICAgY2xhc3NOYW1lOiBcIm1hcGJveGdsLWN0cmwtaWNvblwiLFxuICAgIFwiYXJpYS1oaWRkZW5cIjogXCJ0cnVlXCIsXG4gICAgc3R5bGU6IHN0eWxlXG4gIH0pIDogUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge1xuICAgIGNsYXNzTmFtZTogXCJtYXBib3hnbC1jdHJsLWNvbXBhc3MtYXJyb3dcIixcbiAgICBzdHlsZTogc3R5bGVcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIE5hdmlnYXRpb25Db250cm9sKHByb3BzKSB7XG4gIHZhciBfdXNlTWFwQ29udHJvbCA9IHVzZU1hcENvbnRyb2wocHJvcHMpLFxuICAgICAgY29udGV4dCA9IF91c2VNYXBDb250cm9sLmNvbnRleHQsXG4gICAgICBjb250YWluZXJSZWYgPSBfdXNlTWFwQ29udHJvbC5jb250YWluZXJSZWY7XG5cbiAgdmFyIG9uWm9vbUluID0gZnVuY3Rpb24gb25ab29tSW4oKSB7XG4gICAgdXBkYXRlVmlld3BvcnQoY29udGV4dCwgcHJvcHMsIHtcbiAgICAgIHpvb206IGNvbnRleHQudmlld3BvcnQuem9vbSArIDFcbiAgICB9KTtcbiAgfTtcblxuICB2YXIgb25ab29tT3V0ID0gZnVuY3Rpb24gb25ab29tT3V0KCkge1xuICAgIHVwZGF0ZVZpZXdwb3J0KGNvbnRleHQsIHByb3BzLCB7XG4gICAgICB6b29tOiBjb250ZXh0LnZpZXdwb3J0Lnpvb20gLSAxXG4gICAgfSk7XG4gIH07XG5cbiAgdmFyIG9uUmVzZXROb3J0aCA9IGZ1bmN0aW9uIG9uUmVzZXROb3J0aCgpIHtcbiAgICB1cGRhdGVWaWV3cG9ydChjb250ZXh0LCBwcm9wcywge1xuICAgICAgYmVhcmluZzogMCxcbiAgICAgIHBpdGNoOiAwXG4gICAgfSk7XG4gIH07XG5cbiAgdmFyIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSxcbiAgICAgIHNob3dDb21wYXNzID0gcHJvcHMuc2hvd0NvbXBhc3MsXG4gICAgICBzaG93Wm9vbSA9IHByb3BzLnNob3dab29tLFxuICAgICAgem9vbUluTGFiZWwgPSBwcm9wcy56b29tSW5MYWJlbCxcbiAgICAgIHpvb21PdXRMYWJlbCA9IHByb3BzLnpvb21PdXRMYWJlbCxcbiAgICAgIGNvbXBhc3NMYWJlbCA9IHByb3BzLmNvbXBhc3NMYWJlbDtcbiAgdmFyIHN0eWxlID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9vYmplY3RTcHJlYWQoe1xuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZSdcbiAgICB9LCBwcm9wcy5zdHlsZSk7XG4gIH0sIFtwcm9wcy5zdHlsZV0pO1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgc3R5bGU6IHN0eWxlLFxuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lXG4gIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgIGNsYXNzTmFtZTogXCJtYXBib3hnbC1jdHJsIG1hcGJveGdsLWN0cmwtZ3JvdXBcIixcbiAgICByZWY6IGNvbnRhaW5lclJlZlxuICB9LCBzaG93Wm9vbSAmJiByZW5kZXJCdXR0b24oJ3pvb20taW4nLCB6b29tSW5MYWJlbCwgb25ab29tSW4pLCBzaG93Wm9vbSAmJiByZW5kZXJCdXR0b24oJ3pvb20tb3V0Jywgem9vbU91dExhYmVsLCBvblpvb21PdXQpLCBzaG93Q29tcGFzcyAmJiByZW5kZXJCdXR0b24oJ2NvbXBhc3MnLCBjb21wYXNzTGFiZWwsIG9uUmVzZXROb3J0aCwgcmVuZGVyQ29tcGFzcyhjb250ZXh0KSkpKTtcbn1cblxuTmF2aWdhdGlvbkNvbnRyb2wuZGVmYXVsdFByb3BzID0gZGVmYXVsdFByb3BzO1xuZXhwb3J0IGRlZmF1bHQgUmVhY3QubWVtbyhOYXZpZ2F0aW9uQ29udHJvbCk7IiwiaW1wb3J0IF9kZWZpbmVQcm9wZXJ0eSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHlcIjtcbmltcG9ydCBfc2xpY2VkVG9BcnJheSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheVwiO1xuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHtcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXG4gIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7XG4gICAgaWYgKGVudW1lcmFibGVPbmx5KSBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkge1xuICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7XG4gICAgfSk7XG4gICAga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpO1xuICB9XG5cbiAgcmV0dXJuIGtleXM7XG59XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307XG5cbiAgICBpZiAoaSAlIDIpIHtcbiAgICAgIG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgbWFwYm94Z2wgZnJvbSAnLi4vdXRpbHMvbWFwYm94Z2wnO1xuaW1wb3J0IHVzZU1hcENvbnRyb2wsIHsgbWFwQ29udHJvbERlZmF1bHRQcm9wcywgbWFwQ29udHJvbFByb3BUeXBlcyB9IGZyb20gJy4vdXNlLW1hcC1jb250cm9sJztcbnZhciBkZWZhdWx0UHJvcHMgPSBPYmplY3QuYXNzaWduKHt9LCBtYXBDb250cm9sRGVmYXVsdFByb3BzLCB7XG4gIGNsYXNzTmFtZTogJycsXG4gIG1heFdpZHRoOiAxMDAsXG4gIHVuaXQ6ICdtZXRyaWMnXG59KTtcblxuZnVuY3Rpb24gU2NhbGVDb250cm9sKHByb3BzKSB7XG4gIHZhciBfdXNlTWFwQ29udHJvbCA9IHVzZU1hcENvbnRyb2wocHJvcHMpLFxuICAgICAgY29udGV4dCA9IF91c2VNYXBDb250cm9sLmNvbnRleHQsXG4gICAgICBjb250YWluZXJSZWYgPSBfdXNlTWFwQ29udHJvbC5jb250YWluZXJSZWY7XG5cbiAgdmFyIF91c2VTdGF0ZSA9IHVzZVN0YXRlKG51bGwpLFxuICAgICAgX3VzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZSwgMiksXG4gICAgICBtYXBib3hTY2FsZUNvbnRyb2wgPSBfdXNlU3RhdGUyWzBdLFxuICAgICAgY3JlYXRlTWFwYm94U2NhbGVDb250cm9sID0gX3VzZVN0YXRlMlsxXTtcblxuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmIChjb250ZXh0Lm1hcCkge1xuICAgICAgdmFyIGNvbnRyb2wgPSBuZXcgbWFwYm94Z2wuU2NhbGVDb250cm9sKCk7XG4gICAgICBjb250cm9sLl9tYXAgPSBjb250ZXh0Lm1hcDtcbiAgICAgIGNvbnRyb2wuX2NvbnRhaW5lciA9IGNvbnRhaW5lclJlZi5jdXJyZW50O1xuICAgICAgY3JlYXRlTWFwYm94U2NhbGVDb250cm9sKGNvbnRyb2wpO1xuICAgIH1cbiAgfSwgW2NvbnRleHQubWFwXSk7XG5cbiAgaWYgKG1hcGJveFNjYWxlQ29udHJvbCkge1xuICAgIG1hcGJveFNjYWxlQ29udHJvbC5vcHRpb25zID0gcHJvcHM7XG5cbiAgICBtYXBib3hTY2FsZUNvbnRyb2wuX29uTW92ZSgpO1xuICB9XG5cbiAgdmFyIHN0eWxlID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9vYmplY3RTcHJlYWQoe1xuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZSdcbiAgICB9LCBwcm9wcy5zdHlsZSk7XG4gIH0sIFtwcm9wcy5zdHlsZV0pO1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgc3R5bGU6IHN0eWxlLFxuICAgIGNsYXNzTmFtZTogcHJvcHMuY2xhc3NOYW1lXG4gIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgIHJlZjogY29udGFpbmVyUmVmLFxuICAgIGNsYXNzTmFtZTogXCJtYXBib3hnbC1jdHJsIG1hcGJveGdsLWN0cmwtc2NhbGVcIlxuICB9KSk7XG59XG5cblNjYWxlQ29udHJvbC5kZWZhdWx0UHJvcHMgPSBkZWZhdWx0UHJvcHM7XG5leHBvcnQgZGVmYXVsdCBSZWFjdC5tZW1vKFNjYWxlQ29udHJvbCk7IiwiaW1wb3J0IF9zbGljZWRUb0FycmF5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zbGljZWRUb0FycmF5XCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHVzZU1hcENvbnRyb2wsIHsgbWFwQ29udHJvbFByb3BUeXBlcyB9IGZyb20gJy4uL2NvbXBvbmVudHMvdXNlLW1hcC1jb250cm9sJztcbnZhciBwaXhlbFJhdGlvID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmRldmljZVBpeGVsUmF0aW8gfHwgMTtcbnZhciBkZWZhdWx0UHJvcHMgPSB7XG4gIGNhcHR1cmVTY3JvbGw6IGZhbHNlLFxuICBjYXB0dXJlRHJhZzogZmFsc2UsXG4gIGNhcHR1cmVDbGljazogZmFsc2UsXG4gIGNhcHR1cmVEb3VibGVDbGljazogZmFsc2UsXG4gIGNhcHR1cmVQb2ludGVyTW92ZTogZmFsc2Vcbn07XG5cbmZ1bmN0aW9uIENhbnZhc092ZXJsYXkocHJvcHMpIHtcbiAgdmFyIF91c2VNYXBDb250cm9sID0gdXNlTWFwQ29udHJvbChwcm9wcyksXG4gICAgICBjb250ZXh0ID0gX3VzZU1hcENvbnRyb2wuY29udGV4dCxcbiAgICAgIGNvbnRhaW5lclJlZiA9IF91c2VNYXBDb250cm9sLmNvbnRhaW5lclJlZjtcblxuICB2YXIgX3VzZVN0YXRlID0gdXNlU3RhdGUobnVsbCksXG4gICAgICBfdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlLCAyKSxcbiAgICAgIGN0eCA9IF91c2VTdGF0ZTJbMF0sXG4gICAgICBzZXREcmF3aW5nQ29udGV4dCA9IF91c2VTdGF0ZTJbMV07XG5cbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBzZXREcmF3aW5nQ29udGV4dChjb250YWluZXJSZWYuY3VycmVudC5nZXRDb250ZXh0KCcyZCcpKTtcbiAgfSwgW10pO1xuICB2YXIgdmlld3BvcnQgPSBjb250ZXh0LnZpZXdwb3J0LFxuICAgICAgaXNEcmFnZ2luZyA9IGNvbnRleHQuaXNEcmFnZ2luZztcblxuICBpZiAoY3R4KSB7XG4gICAgY3R4LnNhdmUoKTtcbiAgICBjdHguc2NhbGUocGl4ZWxSYXRpbywgcGl4ZWxSYXRpbyk7XG4gICAgcHJvcHMucmVkcmF3KHtcbiAgICAgIHdpZHRoOiB2aWV3cG9ydC53aWR0aCxcbiAgICAgIGhlaWdodDogdmlld3BvcnQuaGVpZ2h0LFxuICAgICAgY3R4OiBjdHgsXG4gICAgICBpc0RyYWdnaW5nOiBpc0RyYWdnaW5nLFxuICAgICAgcHJvamVjdDogdmlld3BvcnQucHJvamVjdCxcbiAgICAgIHVucHJvamVjdDogdmlld3BvcnQudW5wcm9qZWN0XG4gICAgfSk7XG4gICAgY3R4LnJlc3RvcmUoKTtcbiAgfVxuXG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIsIHtcbiAgICByZWY6IGNvbnRhaW5lclJlZixcbiAgICB3aWR0aDogdmlld3BvcnQud2lkdGggKiBwaXhlbFJhdGlvLFxuICAgIGhlaWdodDogdmlld3BvcnQuaGVpZ2h0ICogcGl4ZWxSYXRpbyxcbiAgICBzdHlsZToge1xuICAgICAgd2lkdGg6IFwiXCIuY29uY2F0KHZpZXdwb3J0LndpZHRoLCBcInB4XCIpLFxuICAgICAgaGVpZ2h0OiBcIlwiLmNvbmNhdCh2aWV3cG9ydC5oZWlnaHQsIFwicHhcIiksXG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIGxlZnQ6IDAsXG4gICAgICB0b3A6IDBcbiAgICB9XG4gIH0pO1xufVxuXG5DYW52YXNPdmVybGF5LmRlZmF1bHRQcm9wcyA9IGRlZmF1bHRQcm9wcztcbmV4cG9ydCBkZWZhdWx0IENhbnZhc092ZXJsYXk7IiwiaW1wb3J0IF9kZWZpbmVQcm9wZXJ0eSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHlcIjtcblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7XG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTtcblxuICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICAgIHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpO1xuICAgIGlmIChlbnVtZXJhYmxlT25seSkgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHtcbiAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlO1xuICAgIH0pO1xuICAgIGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTtcbiAgfVxuXG4gIHJldHVybiBrZXlzO1xufVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkge1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9O1xuXG4gICAgaWYgKGkgJSAyKSB7XG4gICAgICBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdXNlTWFwQ29udHJvbCwgeyBtYXBDb250cm9sUHJvcFR5cGVzIH0gZnJvbSAnLi4vY29tcG9uZW50cy91c2UtbWFwLWNvbnRyb2wnO1xudmFyIGRlZmF1bHRQcm9wcyA9IHtcbiAgY2FwdHVyZVNjcm9sbDogZmFsc2UsXG4gIGNhcHR1cmVEcmFnOiBmYWxzZSxcbiAgY2FwdHVyZUNsaWNrOiBmYWxzZSxcbiAgY2FwdHVyZURvdWJsZUNsaWNrOiBmYWxzZSxcbiAgY2FwdHVyZVBvaW50ZXJNb3ZlOiBmYWxzZVxufTtcblxuZnVuY3Rpb24gSFRNTE92ZXJsYXkocHJvcHMpIHtcbiAgdmFyIF91c2VNYXBDb250cm9sID0gdXNlTWFwQ29udHJvbChwcm9wcyksXG4gICAgICBjb250ZXh0ID0gX3VzZU1hcENvbnRyb2wuY29udGV4dCxcbiAgICAgIGNvbnRhaW5lclJlZiA9IF91c2VNYXBDb250cm9sLmNvbnRhaW5lclJlZjtcblxuICB2YXIgdmlld3BvcnQgPSBjb250ZXh0LnZpZXdwb3J0LFxuICAgICAgaXNEcmFnZ2luZyA9IGNvbnRleHQuaXNEcmFnZ2luZztcblxuICB2YXIgc3R5bGUgPSBfb2JqZWN0U3ByZWFkKHtcbiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICBsZWZ0OiAwLFxuICAgIHRvcDogMCxcbiAgICB3aWR0aDogdmlld3BvcnQud2lkdGgsXG4gICAgaGVpZ2h0OiB2aWV3cG9ydC5oZWlnaHRcbiAgfSwgcHJvcHMuc3R5bGUpO1xuXG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICByZWY6IGNvbnRhaW5lclJlZixcbiAgICBzdHlsZTogc3R5bGVcbiAgfSwgcHJvcHMucmVkcmF3KHtcbiAgICB3aWR0aDogdmlld3BvcnQud2lkdGgsXG4gICAgaGVpZ2h0OiB2aWV3cG9ydC5oZWlnaHQsXG4gICAgaXNEcmFnZ2luZzogaXNEcmFnZ2luZyxcbiAgICBwcm9qZWN0OiB2aWV3cG9ydC5wcm9qZWN0LFxuICAgIHVucHJvamVjdDogdmlld3BvcnQudW5wcm9qZWN0XG4gIH0pKTtcbn1cblxuSFRNTE92ZXJsYXkuZGVmYXVsdFByb3BzID0gZGVmYXVsdFByb3BzO1xuZXhwb3J0IGRlZmF1bHQgSFRNTE92ZXJsYXk7IiwiaW1wb3J0IF9kZWZpbmVQcm9wZXJ0eSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHlcIjtcblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7XG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTtcblxuICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICAgIHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpO1xuICAgIGlmIChlbnVtZXJhYmxlT25seSkgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHtcbiAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlO1xuICAgIH0pO1xuICAgIGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTtcbiAgfVxuXG4gIHJldHVybiBrZXlzO1xufVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkge1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9O1xuXG4gICAgaWYgKGkgJSAyKSB7XG4gICAgICBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdXNlTWFwQ29udHJvbCwgeyBtYXBDb250cm9sUHJvcFR5cGVzIH0gZnJvbSAnLi4vY29tcG9uZW50cy91c2UtbWFwLWNvbnRyb2wnO1xudmFyIGRlZmF1bHRQcm9wcyA9IHtcbiAgY2FwdHVyZVNjcm9sbDogZmFsc2UsXG4gIGNhcHR1cmVEcmFnOiBmYWxzZSxcbiAgY2FwdHVyZUNsaWNrOiBmYWxzZSxcbiAgY2FwdHVyZURvdWJsZUNsaWNrOiBmYWxzZSxcbiAgY2FwdHVyZVBvaW50ZXJNb3ZlOiBmYWxzZVxufTtcblxuZnVuY3Rpb24gU1ZHT3ZlcmxheShwcm9wcykge1xuICB2YXIgX3VzZU1hcENvbnRyb2wgPSB1c2VNYXBDb250cm9sKHByb3BzKSxcbiAgICAgIGNvbnRleHQgPSBfdXNlTWFwQ29udHJvbC5jb250ZXh0LFxuICAgICAgY29udGFpbmVyUmVmID0gX3VzZU1hcENvbnRyb2wuY29udGFpbmVyUmVmO1xuXG4gIHZhciB2aWV3cG9ydCA9IGNvbnRleHQudmlld3BvcnQsXG4gICAgICBpc0RyYWdnaW5nID0gY29udGV4dC5pc0RyYWdnaW5nO1xuXG4gIHZhciBzdHlsZSA9IF9vYmplY3RTcHJlYWQoe1xuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIGxlZnQ6IDAsXG4gICAgdG9wOiAwXG4gIH0sIHByb3BzLnN0eWxlKTtcblxuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCB7XG4gICAgd2lkdGg6IHZpZXdwb3J0LndpZHRoLFxuICAgIGhlaWdodDogdmlld3BvcnQuaGVpZ2h0LFxuICAgIHJlZjogY29udGFpbmVyUmVmLFxuICAgIHN0eWxlOiBzdHlsZVxuICB9LCBwcm9wcy5yZWRyYXcoe1xuICAgIHdpZHRoOiB2aWV3cG9ydC53aWR0aCxcbiAgICBoZWlnaHQ6IHZpZXdwb3J0LmhlaWdodCxcbiAgICBpc0RyYWdnaW5nOiBpc0RyYWdnaW5nLFxuICAgIHByb2plY3Q6IHZpZXdwb3J0LnByb2plY3QsXG4gICAgdW5wcm9qZWN0OiB2aWV3cG9ydC51bnByb2plY3RcbiAgfSkpO1xufVxuXG5TVkdPdmVybGF5LmRlZmF1bHRQcm9wcyA9IGRlZmF1bHRQcm9wcztcbmV4cG9ydCBkZWZhdWx0IFNWR092ZXJsYXk7IiwiaW1wb3J0IG1hcGJveGdsIGZyb20gJy4vbWFwYm94Z2wnO1xudmFyIHNldFJUTFRleHRQbHVnaW4gPSBtYXBib3hnbCA/IG1hcGJveGdsLnNldFJUTFRleHRQbHVnaW4gOiBmdW5jdGlvbiAoKSB7fTtcbmV4cG9ydCBkZWZhdWx0IHNldFJUTFRleHRQbHVnaW47IiwiZXhwb3J0IHsgZGVmYXVsdCB9IGZyb20gJy4vY29tcG9uZW50cy9pbnRlcmFjdGl2ZS1tYXAnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBJbnRlcmFjdGl2ZU1hcCB9IGZyb20gJy4vY29tcG9uZW50cy9pbnRlcmFjdGl2ZS1tYXAnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTdGF0aWNNYXAgfSBmcm9tICcuL2NvbXBvbmVudHMvc3RhdGljLW1hcCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFNvdXJjZSB9IGZyb20gJy4vY29tcG9uZW50cy9zb3VyY2UnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBMYXllciB9IGZyb20gJy4vY29tcG9uZW50cy9sYXllcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEJhc2VDb250cm9sIH0gZnJvbSAnLi9jb21wb25lbnRzL2Jhc2UtY29udHJvbCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE1hcmtlciB9IGZyb20gJy4vY29tcG9uZW50cy9tYXJrZXInO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQb3B1cCB9IGZyb20gJy4vY29tcG9uZW50cy9wb3B1cCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEF0dHJpYnV0aW9uQ29udHJvbCB9IGZyb20gJy4vY29tcG9uZW50cy9hdHRyaWJ1dGlvbi1jb250cm9sJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRnVsbHNjcmVlbkNvbnRyb2wgfSBmcm9tICcuL2NvbXBvbmVudHMvZnVsbHNjcmVlbi1jb250cm9sJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgR2VvbG9jYXRlQ29udHJvbCB9IGZyb20gJy4vY29tcG9uZW50cy9nZW9sb2NhdGUtY29udHJvbCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE5hdmlnYXRpb25Db250cm9sIH0gZnJvbSAnLi9jb21wb25lbnRzL25hdmlnYXRpb24tY29udHJvbCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFNjYWxlQ29udHJvbCB9IGZyb20gJy4vY29tcG9uZW50cy9zY2FsZS1jb250cm9sJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ2FudmFzT3ZlcmxheSB9IGZyb20gJy4vb3ZlcmxheXMvY2FudmFzLW92ZXJsYXknO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBIVE1MT3ZlcmxheSB9IGZyb20gJy4vb3ZlcmxheXMvaHRtbC1vdmVybGF5JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU1ZHT3ZlcmxheSB9IGZyb20gJy4vb3ZlcmxheXMvc3ZnLW92ZXJsYXknO1xuZXhwb3J0IHsgVFJBTlNJVElPTl9FVkVOVFMgfSBmcm9tICcuL3V0aWxzL3RyYW5zaXRpb24tbWFuYWdlcic7XG5leHBvcnQgeyBUcmFuc2l0aW9uSW50ZXJwb2xhdG9yLCBMaW5lYXJJbnRlcnBvbGF0b3IsIFZpZXdwb3J0Rmx5VG9JbnRlcnBvbGF0b3IgYXMgRmx5VG9JbnRlcnBvbGF0b3IgfSBmcm9tICcuL3V0aWxzL3RyYW5zaXRpb24nO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBNYXBDb250cm9sbGVyIH0gZnJvbSAnLi91dGlscy9tYXAtY29udHJvbGxlcic7XG5leHBvcnQgeyBXZWJNZXJjYXRvclZpZXdwb3J0IH0gZnJvbSAndmlld3BvcnQtbWVyY2F0b3ItcHJvamVjdCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHNldFJUTFRleHRQbHVnaW4gfSBmcm9tICcuL3V0aWxzL3NldC1ydGwtdGV4dC1wbHVnaW4nO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBNYXBDb250ZXh0IH0gZnJvbSAnLi9jb21wb25lbnRzL21hcC1jb250ZXh0JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgX3VzZU1hcENvbnRyb2wgfSBmcm9tICcuL2NvbXBvbmVudHMvdXNlLW1hcC1jb250cm9sJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgX01hcENvbnRleHQgfSBmcm9tICcuL2NvbXBvbmVudHMvbWFwLWNvbnRleHQnOyIsIi8qKlxuICogQG1vZHVsZSBoZWxwZXJzXG4gKi9cblxuLyoqXG4gKiBFYXJ0aCBSYWRpdXMgdXNlZCB3aXRoIHRoZSBIYXJ2ZXNpbmUgZm9ybXVsYSBhbmQgYXBwcm94aW1hdGVzIHVzaW5nIGEgc3BoZXJpY2FsIChub24tZWxsaXBzb2lkKSBFYXJ0aC5cbiAqXG4gKiBAbWVtYmVyb2YgaGVscGVyc1xuICogQHR5cGUge251bWJlcn1cbiAqL1xuZXhwb3J0IHZhciBlYXJ0aFJhZGl1cyA9IDYzNzEwMDguODtcbi8qKlxuICogVW5pdCBvZiBtZWFzdXJlbWVudCBmYWN0b3JzIHVzaW5nIGEgc3BoZXJpY2FsIChub24tZWxsaXBzb2lkKSBlYXJ0aCByYWRpdXMuXG4gKlxuICogQG1lbWJlcm9mIGhlbHBlcnNcbiAqIEB0eXBlIHtPYmplY3R9XG4gKi9cblxuZXhwb3J0IHZhciBmYWN0b3JzID0ge1xuICBjZW50aW1ldGVyczogZWFydGhSYWRpdXMgKiAxMDAsXG4gIGNlbnRpbWV0cmVzOiBlYXJ0aFJhZGl1cyAqIDEwMCxcbiAgZGVncmVlczogZWFydGhSYWRpdXMgLyAxMTEzMjUsXG4gIGZlZXQ6IGVhcnRoUmFkaXVzICogMy4yODA4NCxcbiAgaW5jaGVzOiBlYXJ0aFJhZGl1cyAqIDM5LjM3LFxuICBraWxvbWV0ZXJzOiBlYXJ0aFJhZGl1cyAvIDEwMDAsXG4gIGtpbG9tZXRyZXM6IGVhcnRoUmFkaXVzIC8gMTAwMCxcbiAgbWV0ZXJzOiBlYXJ0aFJhZGl1cyxcbiAgbWV0cmVzOiBlYXJ0aFJhZGl1cyxcbiAgbWlsZXM6IGVhcnRoUmFkaXVzIC8gMTYwOS4zNDQsXG4gIG1pbGxpbWV0ZXJzOiBlYXJ0aFJhZGl1cyAqIDEwMDAsXG4gIG1pbGxpbWV0cmVzOiBlYXJ0aFJhZGl1cyAqIDEwMDAsXG4gIG5hdXRpY2FsbWlsZXM6IGVhcnRoUmFkaXVzIC8gMTg1MixcbiAgcmFkaWFuczogMSxcbiAgeWFyZHM6IGVhcnRoUmFkaXVzICogMS4wOTM2XG59O1xuLyoqXG4gKiBVbml0cyBvZiBtZWFzdXJlbWVudCBmYWN0b3JzIGJhc2VkIG9uIDEgbWV0ZXIuXG4gKlxuICogQG1lbWJlcm9mIGhlbHBlcnNcbiAqIEB0eXBlIHtPYmplY3R9XG4gKi9cblxuZXhwb3J0IHZhciB1bml0c0ZhY3RvcnMgPSB7XG4gIGNlbnRpbWV0ZXJzOiAxMDAsXG4gIGNlbnRpbWV0cmVzOiAxMDAsXG4gIGRlZ3JlZXM6IDEgLyAxMTEzMjUsXG4gIGZlZXQ6IDMuMjgwODQsXG4gIGluY2hlczogMzkuMzcsXG4gIGtpbG9tZXRlcnM6IDEgLyAxMDAwLFxuICBraWxvbWV0cmVzOiAxIC8gMTAwMCxcbiAgbWV0ZXJzOiAxLFxuICBtZXRyZXM6IDEsXG4gIG1pbGVzOiAxIC8gMTYwOS4zNDQsXG4gIG1pbGxpbWV0ZXJzOiAxMDAwLFxuICBtaWxsaW1ldHJlczogMTAwMCxcbiAgbmF1dGljYWxtaWxlczogMSAvIDE4NTIsXG4gIHJhZGlhbnM6IDEgLyBlYXJ0aFJhZGl1cyxcbiAgeWFyZHM6IDEuMDkzNjEzM1xufTtcbi8qKlxuICogQXJlYSBvZiBtZWFzdXJlbWVudCBmYWN0b3JzIGJhc2VkIG9uIDEgc3F1YXJlIG1ldGVyLlxuICpcbiAqIEBtZW1iZXJvZiBoZWxwZXJzXG4gKiBAdHlwZSB7T2JqZWN0fVxuICovXG5cbmV4cG9ydCB2YXIgYXJlYUZhY3RvcnMgPSB7XG4gIGFjcmVzOiAwLjAwMDI0NzEwNSxcbiAgY2VudGltZXRlcnM6IDEwMDAwLFxuICBjZW50aW1ldHJlczogMTAwMDAsXG4gIGZlZXQ6IDEwLjc2MzkxMDQxNyxcbiAgaGVjdGFyZXM6IDAuMDAwMSxcbiAgaW5jaGVzOiAxNTUwLjAwMzEwMDAwNixcbiAga2lsb21ldGVyczogMC4wMDAwMDEsXG4gIGtpbG9tZXRyZXM6IDAuMDAwMDAxLFxuICBtZXRlcnM6IDEsXG4gIG1ldHJlczogMSxcbiAgbWlsZXM6IDMuODZlLTcsXG4gIG1pbGxpbWV0ZXJzOiAxMDAwMDAwLFxuICBtaWxsaW1ldHJlczogMTAwMDAwMCxcbiAgeWFyZHM6IDEuMTk1OTkwMDQ2XG59O1xuLyoqXG4gKiBXcmFwcyBhIEdlb0pTT04ge0BsaW5rIEdlb21ldHJ5fSBpbiBhIEdlb0pTT04ge0BsaW5rIEZlYXR1cmV9LlxuICpcbiAqIEBuYW1lIGZlYXR1cmVcbiAqIEBwYXJhbSB7R2VvbWV0cnl9IGdlb21ldHJ5IGlucHV0IGdlb21ldHJ5XG4gKiBAcGFyYW0ge09iamVjdH0gW3Byb3BlcnRpZXM9e31dIGFuIE9iamVjdCBvZiBrZXktdmFsdWUgcGFpcnMgdG8gYWRkIGFzIHByb3BlcnRpZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gT3B0aW9uYWwgUGFyYW1ldGVyc1xuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBbb3B0aW9ucy5iYm94XSBCb3VuZGluZyBCb3ggQXJyYXkgW3dlc3QsIHNvdXRoLCBlYXN0LCBub3J0aF0gYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IFtvcHRpb25zLmlkXSBJZGVudGlmaWVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZVxuICogQHJldHVybnMge0ZlYXR1cmV9IGEgR2VvSlNPTiBGZWF0dXJlXG4gKiBAZXhhbXBsZVxuICogdmFyIGdlb21ldHJ5ID0ge1xuICogICBcInR5cGVcIjogXCJQb2ludFwiLFxuICogICBcImNvb3JkaW5hdGVzXCI6IFsxMTAsIDUwXVxuICogfTtcbiAqXG4gKiB2YXIgZmVhdHVyZSA9IHR1cmYuZmVhdHVyZShnZW9tZXRyeSk7XG4gKlxuICogLy89ZmVhdHVyZVxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmZWF0dXJlKGdlb20sIHByb3BlcnRpZXMsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIHZhciBmZWF0ID0ge1xuICAgIHR5cGU6IFwiRmVhdHVyZVwiXG4gIH07XG5cbiAgaWYgKG9wdGlvbnMuaWQgPT09IDAgfHwgb3B0aW9ucy5pZCkge1xuICAgIGZlYXQuaWQgPSBvcHRpb25zLmlkO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMuYmJveCkge1xuICAgIGZlYXQuYmJveCA9IG9wdGlvbnMuYmJveDtcbiAgfVxuXG4gIGZlYXQucHJvcGVydGllcyA9IHByb3BlcnRpZXMgfHwge307XG4gIGZlYXQuZ2VvbWV0cnkgPSBnZW9tO1xuICByZXR1cm4gZmVhdDtcbn1cbi8qKlxuICogQ3JlYXRlcyBhIEdlb0pTT04ge0BsaW5rIEdlb21ldHJ5fSBmcm9tIGEgR2VvbWV0cnkgc3RyaW5nIHR5cGUgJiBjb29yZGluYXRlcy5cbiAqIEZvciBHZW9tZXRyeUNvbGxlY3Rpb24gdHlwZSB1c2UgYGhlbHBlcnMuZ2VvbWV0cnlDb2xsZWN0aW9uYFxuICpcbiAqIEBuYW1lIGdlb21ldHJ5XG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZSBHZW9tZXRyeSBUeXBlXG4gKiBAcGFyYW0ge0FycmF5PGFueT59IGNvb3JkaW5hdGVzIENvb3JkaW5hdGVzXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIE9wdGlvbmFsIFBhcmFtZXRlcnNcbiAqIEByZXR1cm5zIHtHZW9tZXRyeX0gYSBHZW9KU09OIEdlb21ldHJ5XG4gKiBAZXhhbXBsZVxuICogdmFyIHR5cGUgPSBcIlBvaW50XCI7XG4gKiB2YXIgY29vcmRpbmF0ZXMgPSBbMTEwLCA1MF07XG4gKiB2YXIgZ2VvbWV0cnkgPSB0dXJmLmdlb21ldHJ5KHR5cGUsIGNvb3JkaW5hdGVzKTtcbiAqIC8vID0+IGdlb21ldHJ5XG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGdlb21ldHJ5KHR5cGUsIGNvb3JkaW5hdGVzLCBfb3B0aW9ucykge1xuICBpZiAoX29wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIF9vcHRpb25zID0ge307XG4gIH1cblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIFwiUG9pbnRcIjpcbiAgICAgIHJldHVybiBwb2ludChjb29yZGluYXRlcykuZ2VvbWV0cnk7XG5cbiAgICBjYXNlIFwiTGluZVN0cmluZ1wiOlxuICAgICAgcmV0dXJuIGxpbmVTdHJpbmcoY29vcmRpbmF0ZXMpLmdlb21ldHJ5O1xuXG4gICAgY2FzZSBcIlBvbHlnb25cIjpcbiAgICAgIHJldHVybiBwb2x5Z29uKGNvb3JkaW5hdGVzKS5nZW9tZXRyeTtcblxuICAgIGNhc2UgXCJNdWx0aVBvaW50XCI6XG4gICAgICByZXR1cm4gbXVsdGlQb2ludChjb29yZGluYXRlcykuZ2VvbWV0cnk7XG5cbiAgICBjYXNlIFwiTXVsdGlMaW5lU3RyaW5nXCI6XG4gICAgICByZXR1cm4gbXVsdGlMaW5lU3RyaW5nKGNvb3JkaW5hdGVzKS5nZW9tZXRyeTtcblxuICAgIGNhc2UgXCJNdWx0aVBvbHlnb25cIjpcbiAgICAgIHJldHVybiBtdWx0aVBvbHlnb24oY29vcmRpbmF0ZXMpLmdlb21ldHJ5O1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcih0eXBlICsgXCIgaXMgaW52YWxpZFwiKTtcbiAgfVxufVxuLyoqXG4gKiBDcmVhdGVzIGEge0BsaW5rIFBvaW50fSB7QGxpbmsgRmVhdHVyZX0gZnJvbSBhIFBvc2l0aW9uLlxuICpcbiAqIEBuYW1lIHBvaW50XG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IGNvb3JkaW5hdGVzIGxvbmdpdHVkZSwgbGF0aXR1ZGUgcG9zaXRpb24gKGVhY2ggaW4gZGVjaW1hbCBkZWdyZWVzKVxuICogQHBhcmFtIHtPYmplY3R9IFtwcm9wZXJ0aWVzPXt9XSBhbiBPYmplY3Qgb2Yga2V5LXZhbHVlIHBhaXJzIHRvIGFkZCBhcyBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIE9wdGlvbmFsIFBhcmFtZXRlcnNcbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gW29wdGlvbnMuYmJveF0gQm91bmRpbmcgQm94IEFycmF5IFt3ZXN0LCBzb3V0aCwgZWFzdCwgbm9ydGhdIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZVxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBbb3B0aW9ucy5pZF0gSWRlbnRpZmllciBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVcbiAqIEByZXR1cm5zIHtGZWF0dXJlPFBvaW50Pn0gYSBQb2ludCBmZWF0dXJlXG4gKiBAZXhhbXBsZVxuICogdmFyIHBvaW50ID0gdHVyZi5wb2ludChbLTc1LjM0MywgMzkuOTg0XSk7XG4gKlxuICogLy89cG9pbnRcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcG9pbnQoY29vcmRpbmF0ZXMsIHByb3BlcnRpZXMsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIGlmICghY29vcmRpbmF0ZXMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJjb29yZGluYXRlcyBpcyByZXF1aXJlZFwiKTtcbiAgfVxuXG4gIGlmICghQXJyYXkuaXNBcnJheShjb29yZGluYXRlcykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJjb29yZGluYXRlcyBtdXN0IGJlIGFuIEFycmF5XCIpO1xuICB9XG5cbiAgaWYgKGNvb3JkaW5hdGVzLmxlbmd0aCA8IDIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJjb29yZGluYXRlcyBtdXN0IGJlIGF0IGxlYXN0IDIgbnVtYmVycyBsb25nXCIpO1xuICB9XG5cbiAgaWYgKCFpc051bWJlcihjb29yZGluYXRlc1swXSkgfHwgIWlzTnVtYmVyKGNvb3JkaW5hdGVzWzFdKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcImNvb3JkaW5hdGVzIG11c3QgY29udGFpbiBudW1iZXJzXCIpO1xuICB9XG5cbiAgdmFyIGdlb20gPSB7XG4gICAgdHlwZTogXCJQb2ludFwiLFxuICAgIGNvb3JkaW5hdGVzOiBjb29yZGluYXRlc1xuICB9O1xuICByZXR1cm4gZmVhdHVyZShnZW9tLCBwcm9wZXJ0aWVzLCBvcHRpb25zKTtcbn1cbi8qKlxuICogQ3JlYXRlcyBhIHtAbGluayBQb2ludH0ge0BsaW5rIEZlYXR1cmVDb2xsZWN0aW9ufSBmcm9tIGFuIEFycmF5IG9mIFBvaW50IGNvb3JkaW5hdGVzLlxuICpcbiAqIEBuYW1lIHBvaW50c1xuICogQHBhcmFtIHtBcnJheTxBcnJheTxudW1iZXI+Pn0gY29vcmRpbmF0ZXMgYW4gYXJyYXkgb2YgUG9pbnRzXG4gKiBAcGFyYW0ge09iamVjdH0gW3Byb3BlcnRpZXM9e31dIFRyYW5zbGF0ZSB0aGVzZSBwcm9wZXJ0aWVzIHRvIGVhY2ggRmVhdHVyZVxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBPcHRpb25hbCBQYXJhbWV0ZXJzXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IFtvcHRpb25zLmJib3hdIEJvdW5kaW5nIEJveCBBcnJheSBbd2VzdCwgc291dGgsIGVhc3QsIG5vcnRoXVxuICogYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlQ29sbGVjdGlvblxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBbb3B0aW9ucy5pZF0gSWRlbnRpZmllciBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVDb2xsZWN0aW9uXG4gKiBAcmV0dXJucyB7RmVhdHVyZUNvbGxlY3Rpb248UG9pbnQ+fSBQb2ludCBGZWF0dXJlXG4gKiBAZXhhbXBsZVxuICogdmFyIHBvaW50cyA9IHR1cmYucG9pbnRzKFtcbiAqICAgWy03NSwgMzldLFxuICogICBbLTgwLCA0NV0sXG4gKiAgIFstNzgsIDUwXVxuICogXSk7XG4gKlxuICogLy89cG9pbnRzXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHBvaW50cyhjb29yZGluYXRlcywgcHJvcGVydGllcywgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgcmV0dXJuIGZlYXR1cmVDb2xsZWN0aW9uKGNvb3JkaW5hdGVzLm1hcChmdW5jdGlvbiAoY29vcmRzKSB7XG4gICAgcmV0dXJuIHBvaW50KGNvb3JkcywgcHJvcGVydGllcyk7XG4gIH0pLCBvcHRpb25zKTtcbn1cbi8qKlxuICogQ3JlYXRlcyBhIHtAbGluayBQb2x5Z29ufSB7QGxpbmsgRmVhdHVyZX0gZnJvbSBhbiBBcnJheSBvZiBMaW5lYXJSaW5ncy5cbiAqXG4gKiBAbmFtZSBwb2x5Z29uXG4gKiBAcGFyYW0ge0FycmF5PEFycmF5PEFycmF5PG51bWJlcj4+Pn0gY29vcmRpbmF0ZXMgYW4gYXJyYXkgb2YgTGluZWFyUmluZ3NcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcHJvcGVydGllcz17fV0gYW4gT2JqZWN0IG9mIGtleS12YWx1ZSBwYWlycyB0byBhZGQgYXMgcHJvcGVydGllc1xuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBPcHRpb25hbCBQYXJhbWV0ZXJzXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IFtvcHRpb25zLmJib3hdIEJvdW5kaW5nIEJveCBBcnJheSBbd2VzdCwgc291dGgsIGVhc3QsIG5vcnRoXSBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW29wdGlvbnMuaWRdIElkZW50aWZpZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlXG4gKiBAcmV0dXJucyB7RmVhdHVyZTxQb2x5Z29uPn0gUG9seWdvbiBGZWF0dXJlXG4gKiBAZXhhbXBsZVxuICogdmFyIHBvbHlnb24gPSB0dXJmLnBvbHlnb24oW1tbLTUsIDUyXSwgWy00LCA1Nl0sIFstMiwgNTFdLCBbLTcsIDU0XSwgWy01LCA1Ml1dXSwgeyBuYW1lOiAncG9seTEnIH0pO1xuICpcbiAqIC8vPXBvbHlnb25cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcG9seWdvbihjb29yZGluYXRlcywgcHJvcGVydGllcywgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgZm9yICh2YXIgX2kgPSAwLCBjb29yZGluYXRlc18xID0gY29vcmRpbmF0ZXM7IF9pIDwgY29vcmRpbmF0ZXNfMS5sZW5ndGg7IF9pKyspIHtcbiAgICB2YXIgcmluZyA9IGNvb3JkaW5hdGVzXzFbX2ldO1xuXG4gICAgaWYgKHJpbmcubGVuZ3RoIDwgNCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRWFjaCBMaW5lYXJSaW5nIG9mIGEgUG9seWdvbiBtdXN0IGhhdmUgNCBvciBtb3JlIFBvc2l0aW9ucy5cIik7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCByaW5nW3JpbmcubGVuZ3RoIC0gMV0ubGVuZ3RoOyBqKyspIHtcbiAgICAgIC8vIENoZWNrIGlmIGZpcnN0IHBvaW50IG9mIFBvbHlnb24gY29udGFpbnMgdHdvIG51bWJlcnNcbiAgICAgIGlmIChyaW5nW3JpbmcubGVuZ3RoIC0gMV1bal0gIT09IHJpbmdbMF1bal0pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRmlyc3QgYW5kIGxhc3QgUG9zaXRpb24gYXJlIG5vdCBlcXVpdmFsZW50LlwiKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgZ2VvbSA9IHtcbiAgICB0eXBlOiBcIlBvbHlnb25cIixcbiAgICBjb29yZGluYXRlczogY29vcmRpbmF0ZXNcbiAgfTtcbiAgcmV0dXJuIGZlYXR1cmUoZ2VvbSwgcHJvcGVydGllcywgb3B0aW9ucyk7XG59XG4vKipcbiAqIENyZWF0ZXMgYSB7QGxpbmsgUG9seWdvbn0ge0BsaW5rIEZlYXR1cmVDb2xsZWN0aW9ufSBmcm9tIGFuIEFycmF5IG9mIFBvbHlnb24gY29vcmRpbmF0ZXMuXG4gKlxuICogQG5hbWUgcG9seWdvbnNcbiAqIEBwYXJhbSB7QXJyYXk8QXJyYXk8QXJyYXk8QXJyYXk8bnVtYmVyPj4+Pn0gY29vcmRpbmF0ZXMgYW4gYXJyYXkgb2YgUG9seWdvbiBjb29yZGluYXRlc1xuICogQHBhcmFtIHtPYmplY3R9IFtwcm9wZXJ0aWVzPXt9XSBhbiBPYmplY3Qgb2Yga2V5LXZhbHVlIHBhaXJzIHRvIGFkZCBhcyBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIE9wdGlvbmFsIFBhcmFtZXRlcnNcbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gW29wdGlvbnMuYmJveF0gQm91bmRpbmcgQm94IEFycmF5IFt3ZXN0LCBzb3V0aCwgZWFzdCwgbm9ydGhdIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZVxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBbb3B0aW9ucy5pZF0gSWRlbnRpZmllciBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVDb2xsZWN0aW9uXG4gKiBAcmV0dXJucyB7RmVhdHVyZUNvbGxlY3Rpb248UG9seWdvbj59IFBvbHlnb24gRmVhdHVyZUNvbGxlY3Rpb25cbiAqIEBleGFtcGxlXG4gKiB2YXIgcG9seWdvbnMgPSB0dXJmLnBvbHlnb25zKFtcbiAqICAgW1tbLTUsIDUyXSwgWy00LCA1Nl0sIFstMiwgNTFdLCBbLTcsIDU0XSwgWy01LCA1Ml1dXSxcbiAqICAgW1tbLTE1LCA0Ml0sIFstMTQsIDQ2XSwgWy0xMiwgNDFdLCBbLTE3LCA0NF0sIFstMTUsIDQyXV1dLFxuICogXSk7XG4gKlxuICogLy89cG9seWdvbnNcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcG9seWdvbnMoY29vcmRpbmF0ZXMsIHByb3BlcnRpZXMsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIHJldHVybiBmZWF0dXJlQ29sbGVjdGlvbihjb29yZGluYXRlcy5tYXAoZnVuY3Rpb24gKGNvb3Jkcykge1xuICAgIHJldHVybiBwb2x5Z29uKGNvb3JkcywgcHJvcGVydGllcyk7XG4gIH0pLCBvcHRpb25zKTtcbn1cbi8qKlxuICogQ3JlYXRlcyBhIHtAbGluayBMaW5lU3RyaW5nfSB7QGxpbmsgRmVhdHVyZX0gZnJvbSBhbiBBcnJheSBvZiBQb3NpdGlvbnMuXG4gKlxuICogQG5hbWUgbGluZVN0cmluZ1xuICogQHBhcmFtIHtBcnJheTxBcnJheTxudW1iZXI+Pn0gY29vcmRpbmF0ZXMgYW4gYXJyYXkgb2YgUG9zaXRpb25zXG4gKiBAcGFyYW0ge09iamVjdH0gW3Byb3BlcnRpZXM9e31dIGFuIE9iamVjdCBvZiBrZXktdmFsdWUgcGFpcnMgdG8gYWRkIGFzIHByb3BlcnRpZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gT3B0aW9uYWwgUGFyYW1ldGVyc1xuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBbb3B0aW9ucy5iYm94XSBCb3VuZGluZyBCb3ggQXJyYXkgW3dlc3QsIHNvdXRoLCBlYXN0LCBub3J0aF0gYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IFtvcHRpb25zLmlkXSBJZGVudGlmaWVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZVxuICogQHJldHVybnMge0ZlYXR1cmU8TGluZVN0cmluZz59IExpbmVTdHJpbmcgRmVhdHVyZVxuICogQGV4YW1wbGVcbiAqIHZhciBsaW5lc3RyaW5nMSA9IHR1cmYubGluZVN0cmluZyhbWy0yNCwgNjNdLCBbLTIzLCA2MF0sIFstMjUsIDY1XSwgWy0yMCwgNjldXSwge25hbWU6ICdsaW5lIDEnfSk7XG4gKiB2YXIgbGluZXN0cmluZzIgPSB0dXJmLmxpbmVTdHJpbmcoW1stMTQsIDQzXSwgWy0xMywgNDBdLCBbLTE1LCA0NV0sIFstMTAsIDQ5XV0sIHtuYW1lOiAnbGluZSAyJ30pO1xuICpcbiAqIC8vPWxpbmVzdHJpbmcxXG4gKiAvLz1saW5lc3RyaW5nMlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBsaW5lU3RyaW5nKGNvb3JkaW5hdGVzLCBwcm9wZXJ0aWVzLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cblxuICBpZiAoY29vcmRpbmF0ZXMubGVuZ3RoIDwgMikge1xuICAgIHRocm93IG5ldyBFcnJvcihcImNvb3JkaW5hdGVzIG11c3QgYmUgYW4gYXJyYXkgb2YgdHdvIG9yIG1vcmUgcG9zaXRpb25zXCIpO1xuICB9XG5cbiAgdmFyIGdlb20gPSB7XG4gICAgdHlwZTogXCJMaW5lU3RyaW5nXCIsXG4gICAgY29vcmRpbmF0ZXM6IGNvb3JkaW5hdGVzXG4gIH07XG4gIHJldHVybiBmZWF0dXJlKGdlb20sIHByb3BlcnRpZXMsIG9wdGlvbnMpO1xufVxuLyoqXG4gKiBDcmVhdGVzIGEge0BsaW5rIExpbmVTdHJpbmd9IHtAbGluayBGZWF0dXJlQ29sbGVjdGlvbn0gZnJvbSBhbiBBcnJheSBvZiBMaW5lU3RyaW5nIGNvb3JkaW5hdGVzLlxuICpcbiAqIEBuYW1lIGxpbmVTdHJpbmdzXG4gKiBAcGFyYW0ge0FycmF5PEFycmF5PEFycmF5PG51bWJlcj4+Pn0gY29vcmRpbmF0ZXMgYW4gYXJyYXkgb2YgTGluZWFyUmluZ3NcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcHJvcGVydGllcz17fV0gYW4gT2JqZWN0IG9mIGtleS12YWx1ZSBwYWlycyB0byBhZGQgYXMgcHJvcGVydGllc1xuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBPcHRpb25hbCBQYXJhbWV0ZXJzXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IFtvcHRpb25zLmJib3hdIEJvdW5kaW5nIEJveCBBcnJheSBbd2VzdCwgc291dGgsIGVhc3QsIG5vcnRoXVxuICogYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlQ29sbGVjdGlvblxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBbb3B0aW9ucy5pZF0gSWRlbnRpZmllciBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVDb2xsZWN0aW9uXG4gKiBAcmV0dXJucyB7RmVhdHVyZUNvbGxlY3Rpb248TGluZVN0cmluZz59IExpbmVTdHJpbmcgRmVhdHVyZUNvbGxlY3Rpb25cbiAqIEBleGFtcGxlXG4gKiB2YXIgbGluZXN0cmluZ3MgPSB0dXJmLmxpbmVTdHJpbmdzKFtcbiAqICAgW1stMjQsIDYzXSwgWy0yMywgNjBdLCBbLTI1LCA2NV0sIFstMjAsIDY5XV0sXG4gKiAgIFtbLTE0LCA0M10sIFstMTMsIDQwXSwgWy0xNSwgNDVdLCBbLTEwLCA0OV1dXG4gKiBdKTtcbiAqXG4gKiAvLz1saW5lc3RyaW5nc1xuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBsaW5lU3RyaW5ncyhjb29yZGluYXRlcywgcHJvcGVydGllcywgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgcmV0dXJuIGZlYXR1cmVDb2xsZWN0aW9uKGNvb3JkaW5hdGVzLm1hcChmdW5jdGlvbiAoY29vcmRzKSB7XG4gICAgcmV0dXJuIGxpbmVTdHJpbmcoY29vcmRzLCBwcm9wZXJ0aWVzKTtcbiAgfSksIG9wdGlvbnMpO1xufVxuLyoqXG4gKiBUYWtlcyBvbmUgb3IgbW9yZSB7QGxpbmsgRmVhdHVyZXxGZWF0dXJlc30gYW5kIGNyZWF0ZXMgYSB7QGxpbmsgRmVhdHVyZUNvbGxlY3Rpb259LlxuICpcbiAqIEBuYW1lIGZlYXR1cmVDb2xsZWN0aW9uXG4gKiBAcGFyYW0ge0ZlYXR1cmVbXX0gZmVhdHVyZXMgaW5wdXQgZmVhdHVyZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gT3B0aW9uYWwgUGFyYW1ldGVyc1xuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBbb3B0aW9ucy5iYm94XSBCb3VuZGluZyBCb3ggQXJyYXkgW3dlc3QsIHNvdXRoLCBlYXN0LCBub3J0aF0gYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IFtvcHRpb25zLmlkXSBJZGVudGlmaWVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZVxuICogQHJldHVybnMge0ZlYXR1cmVDb2xsZWN0aW9ufSBGZWF0dXJlQ29sbGVjdGlvbiBvZiBGZWF0dXJlc1xuICogQGV4YW1wbGVcbiAqIHZhciBsb2NhdGlvbkEgPSB0dXJmLnBvaW50KFstNzUuMzQzLCAzOS45ODRdLCB7bmFtZTogJ0xvY2F0aW9uIEEnfSk7XG4gKiB2YXIgbG9jYXRpb25CID0gdHVyZi5wb2ludChbLTc1LjgzMywgMzkuMjg0XSwge25hbWU6ICdMb2NhdGlvbiBCJ30pO1xuICogdmFyIGxvY2F0aW9uQyA9IHR1cmYucG9pbnQoWy03NS41MzQsIDM5LjEyM10sIHtuYW1lOiAnTG9jYXRpb24gQyd9KTtcbiAqXG4gKiB2YXIgY29sbGVjdGlvbiA9IHR1cmYuZmVhdHVyZUNvbGxlY3Rpb24oW1xuICogICBsb2NhdGlvbkEsXG4gKiAgIGxvY2F0aW9uQixcbiAqICAgbG9jYXRpb25DXG4gKiBdKTtcbiAqXG4gKiAvLz1jb2xsZWN0aW9uXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZlYXR1cmVDb2xsZWN0aW9uKGZlYXR1cmVzLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cblxuICB2YXIgZmMgPSB7XG4gICAgdHlwZTogXCJGZWF0dXJlQ29sbGVjdGlvblwiXG4gIH07XG5cbiAgaWYgKG9wdGlvbnMuaWQpIHtcbiAgICBmYy5pZCA9IG9wdGlvbnMuaWQ7XG4gIH1cblxuICBpZiAob3B0aW9ucy5iYm94KSB7XG4gICAgZmMuYmJveCA9IG9wdGlvbnMuYmJveDtcbiAgfVxuXG4gIGZjLmZlYXR1cmVzID0gZmVhdHVyZXM7XG4gIHJldHVybiBmYztcbn1cbi8qKlxuICogQ3JlYXRlcyBhIHtAbGluayBGZWF0dXJlPE11bHRpTGluZVN0cmluZz59IGJhc2VkIG9uIGFcbiAqIGNvb3JkaW5hdGUgYXJyYXkuIFByb3BlcnRpZXMgY2FuIGJlIGFkZGVkIG9wdGlvbmFsbHkuXG4gKlxuICogQG5hbWUgbXVsdGlMaW5lU3RyaW5nXG4gKiBAcGFyYW0ge0FycmF5PEFycmF5PEFycmF5PG51bWJlcj4+Pn0gY29vcmRpbmF0ZXMgYW4gYXJyYXkgb2YgTGluZVN0cmluZ3NcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcHJvcGVydGllcz17fV0gYW4gT2JqZWN0IG9mIGtleS12YWx1ZSBwYWlycyB0byBhZGQgYXMgcHJvcGVydGllc1xuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBPcHRpb25hbCBQYXJhbWV0ZXJzXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IFtvcHRpb25zLmJib3hdIEJvdW5kaW5nIEJveCBBcnJheSBbd2VzdCwgc291dGgsIGVhc3QsIG5vcnRoXSBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW29wdGlvbnMuaWRdIElkZW50aWZpZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlXG4gKiBAcmV0dXJucyB7RmVhdHVyZTxNdWx0aUxpbmVTdHJpbmc+fSBhIE11bHRpTGluZVN0cmluZyBmZWF0dXJlXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgbm8gY29vcmRpbmF0ZXMgYXJlIHBhc3NlZFxuICogQGV4YW1wbGVcbiAqIHZhciBtdWx0aUxpbmUgPSB0dXJmLm11bHRpTGluZVN0cmluZyhbW1swLDBdLFsxMCwxMF1dXSk7XG4gKlxuICogLy89bXVsdGlMaW5lXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG11bHRpTGluZVN0cmluZyhjb29yZGluYXRlcywgcHJvcGVydGllcywgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgdmFyIGdlb20gPSB7XG4gICAgdHlwZTogXCJNdWx0aUxpbmVTdHJpbmdcIixcbiAgICBjb29yZGluYXRlczogY29vcmRpbmF0ZXNcbiAgfTtcbiAgcmV0dXJuIGZlYXR1cmUoZ2VvbSwgcHJvcGVydGllcywgb3B0aW9ucyk7XG59XG4vKipcbiAqIENyZWF0ZXMgYSB7QGxpbmsgRmVhdHVyZTxNdWx0aVBvaW50Pn0gYmFzZWQgb24gYVxuICogY29vcmRpbmF0ZSBhcnJheS4gUHJvcGVydGllcyBjYW4gYmUgYWRkZWQgb3B0aW9uYWxseS5cbiAqXG4gKiBAbmFtZSBtdWx0aVBvaW50XG4gKiBAcGFyYW0ge0FycmF5PEFycmF5PG51bWJlcj4+fSBjb29yZGluYXRlcyBhbiBhcnJheSBvZiBQb3NpdGlvbnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcHJvcGVydGllcz17fV0gYW4gT2JqZWN0IG9mIGtleS12YWx1ZSBwYWlycyB0byBhZGQgYXMgcHJvcGVydGllc1xuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBPcHRpb25hbCBQYXJhbWV0ZXJzXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IFtvcHRpb25zLmJib3hdIEJvdW5kaW5nIEJveCBBcnJheSBbd2VzdCwgc291dGgsIGVhc3QsIG5vcnRoXSBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW29wdGlvbnMuaWRdIElkZW50aWZpZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlXG4gKiBAcmV0dXJucyB7RmVhdHVyZTxNdWx0aVBvaW50Pn0gYSBNdWx0aVBvaW50IGZlYXR1cmVcbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiBubyBjb29yZGluYXRlcyBhcmUgcGFzc2VkXG4gKiBAZXhhbXBsZVxuICogdmFyIG11bHRpUHQgPSB0dXJmLm11bHRpUG9pbnQoW1swLDBdLFsxMCwxMF1dKTtcbiAqXG4gKiAvLz1tdWx0aVB0XG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG11bHRpUG9pbnQoY29vcmRpbmF0ZXMsIHByb3BlcnRpZXMsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIHZhciBnZW9tID0ge1xuICAgIHR5cGU6IFwiTXVsdGlQb2ludFwiLFxuICAgIGNvb3JkaW5hdGVzOiBjb29yZGluYXRlc1xuICB9O1xuICByZXR1cm4gZmVhdHVyZShnZW9tLCBwcm9wZXJ0aWVzLCBvcHRpb25zKTtcbn1cbi8qKlxuICogQ3JlYXRlcyBhIHtAbGluayBGZWF0dXJlPE11bHRpUG9seWdvbj59IGJhc2VkIG9uIGFcbiAqIGNvb3JkaW5hdGUgYXJyYXkuIFByb3BlcnRpZXMgY2FuIGJlIGFkZGVkIG9wdGlvbmFsbHkuXG4gKlxuICogQG5hbWUgbXVsdGlQb2x5Z29uXG4gKiBAcGFyYW0ge0FycmF5PEFycmF5PEFycmF5PEFycmF5PG51bWJlcj4+Pj59IGNvb3JkaW5hdGVzIGFuIGFycmF5IG9mIFBvbHlnb25zXG4gKiBAcGFyYW0ge09iamVjdH0gW3Byb3BlcnRpZXM9e31dIGFuIE9iamVjdCBvZiBrZXktdmFsdWUgcGFpcnMgdG8gYWRkIGFzIHByb3BlcnRpZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gT3B0aW9uYWwgUGFyYW1ldGVyc1xuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBbb3B0aW9ucy5iYm94XSBCb3VuZGluZyBCb3ggQXJyYXkgW3dlc3QsIHNvdXRoLCBlYXN0LCBub3J0aF0gYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IFtvcHRpb25zLmlkXSBJZGVudGlmaWVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZVxuICogQHJldHVybnMge0ZlYXR1cmU8TXVsdGlQb2x5Z29uPn0gYSBtdWx0aXBvbHlnb24gZmVhdHVyZVxuICogQHRocm93cyB7RXJyb3J9IGlmIG5vIGNvb3JkaW5hdGVzIGFyZSBwYXNzZWRcbiAqIEBleGFtcGxlXG4gKiB2YXIgbXVsdGlQb2x5ID0gdHVyZi5tdWx0aVBvbHlnb24oW1tbWzAsMF0sWzAsMTBdLFsxMCwxMF0sWzEwLDBdLFswLDBdXV1dKTtcbiAqXG4gKiAvLz1tdWx0aVBvbHlcbiAqXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG11bHRpUG9seWdvbihjb29yZGluYXRlcywgcHJvcGVydGllcywgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgdmFyIGdlb20gPSB7XG4gICAgdHlwZTogXCJNdWx0aVBvbHlnb25cIixcbiAgICBjb29yZGluYXRlczogY29vcmRpbmF0ZXNcbiAgfTtcbiAgcmV0dXJuIGZlYXR1cmUoZ2VvbSwgcHJvcGVydGllcywgb3B0aW9ucyk7XG59XG4vKipcbiAqIENyZWF0ZXMgYSB7QGxpbmsgRmVhdHVyZTxHZW9tZXRyeUNvbGxlY3Rpb24+fSBiYXNlZCBvbiBhXG4gKiBjb29yZGluYXRlIGFycmF5LiBQcm9wZXJ0aWVzIGNhbiBiZSBhZGRlZCBvcHRpb25hbGx5LlxuICpcbiAqIEBuYW1lIGdlb21ldHJ5Q29sbGVjdGlvblxuICogQHBhcmFtIHtBcnJheTxHZW9tZXRyeT59IGdlb21ldHJpZXMgYW4gYXJyYXkgb2YgR2VvSlNPTiBHZW9tZXRyaWVzXG4gKiBAcGFyYW0ge09iamVjdH0gW3Byb3BlcnRpZXM9e31dIGFuIE9iamVjdCBvZiBrZXktdmFsdWUgcGFpcnMgdG8gYWRkIGFzIHByb3BlcnRpZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gT3B0aW9uYWwgUGFyYW1ldGVyc1xuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBbb3B0aW9ucy5iYm94XSBCb3VuZGluZyBCb3ggQXJyYXkgW3dlc3QsIHNvdXRoLCBlYXN0LCBub3J0aF0gYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IFtvcHRpb25zLmlkXSBJZGVudGlmaWVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZVxuICogQHJldHVybnMge0ZlYXR1cmU8R2VvbWV0cnlDb2xsZWN0aW9uPn0gYSBHZW9KU09OIEdlb21ldHJ5Q29sbGVjdGlvbiBGZWF0dXJlXG4gKiBAZXhhbXBsZVxuICogdmFyIHB0ID0gdHVyZi5nZW9tZXRyeShcIlBvaW50XCIsIFsxMDAsIDBdKTtcbiAqIHZhciBsaW5lID0gdHVyZi5nZW9tZXRyeShcIkxpbmVTdHJpbmdcIiwgW1sxMDEsIDBdLCBbMTAyLCAxXV0pO1xuICogdmFyIGNvbGxlY3Rpb24gPSB0dXJmLmdlb21ldHJ5Q29sbGVjdGlvbihbcHQsIGxpbmVdKTtcbiAqXG4gKiAvLyA9PiBjb2xsZWN0aW9uXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGdlb21ldHJ5Q29sbGVjdGlvbihnZW9tZXRyaWVzLCBwcm9wZXJ0aWVzLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cblxuICB2YXIgZ2VvbSA9IHtcbiAgICB0eXBlOiBcIkdlb21ldHJ5Q29sbGVjdGlvblwiLFxuICAgIGdlb21ldHJpZXM6IGdlb21ldHJpZXNcbiAgfTtcbiAgcmV0dXJuIGZlYXR1cmUoZ2VvbSwgcHJvcGVydGllcywgb3B0aW9ucyk7XG59XG4vKipcbiAqIFJvdW5kIG51bWJlciB0byBwcmVjaXNpb25cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gbnVtIE51bWJlclxuICogQHBhcmFtIHtudW1iZXJ9IFtwcmVjaXNpb249MF0gUHJlY2lzaW9uXG4gKiBAcmV0dXJucyB7bnVtYmVyfSByb3VuZGVkIG51bWJlclxuICogQGV4YW1wbGVcbiAqIHR1cmYucm91bmQoMTIwLjQzMjEpXG4gKiAvLz0xMjBcbiAqXG4gKiB0dXJmLnJvdW5kKDEyMC40MzIxLCAyKVxuICogLy89MTIwLjQzXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHJvdW5kKG51bSwgcHJlY2lzaW9uKSB7XG4gIGlmIChwcmVjaXNpb24gPT09IHZvaWQgMCkge1xuICAgIHByZWNpc2lvbiA9IDA7XG4gIH1cblxuICBpZiAocHJlY2lzaW9uICYmICEocHJlY2lzaW9uID49IDApKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwicHJlY2lzaW9uIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXJcIik7XG4gIH1cblxuICB2YXIgbXVsdGlwbGllciA9IE1hdGgucG93KDEwLCBwcmVjaXNpb24gfHwgMCk7XG4gIHJldHVybiBNYXRoLnJvdW5kKG51bSAqIG11bHRpcGxpZXIpIC8gbXVsdGlwbGllcjtcbn1cbi8qKlxuICogQ29udmVydCBhIGRpc3RhbmNlIG1lYXN1cmVtZW50IChhc3N1bWluZyBhIHNwaGVyaWNhbCBFYXJ0aCkgZnJvbSByYWRpYW5zIHRvIGEgbW9yZSBmcmllbmRseSB1bml0LlxuICogVmFsaWQgdW5pdHM6IG1pbGVzLCBuYXV0aWNhbG1pbGVzLCBpbmNoZXMsIHlhcmRzLCBtZXRlcnMsIG1ldHJlcywga2lsb21ldGVycywgY2VudGltZXRlcnMsIGZlZXRcbiAqXG4gKiBAbmFtZSByYWRpYW5zVG9MZW5ndGhcbiAqIEBwYXJhbSB7bnVtYmVyfSByYWRpYW5zIGluIHJhZGlhbnMgYWNyb3NzIHRoZSBzcGhlcmVcbiAqIEBwYXJhbSB7c3RyaW5nfSBbdW5pdHM9XCJraWxvbWV0ZXJzXCJdIGNhbiBiZSBkZWdyZWVzLCByYWRpYW5zLCBtaWxlcywgaW5jaGVzLCB5YXJkcywgbWV0cmVzLFxuICogbWV0ZXJzLCBraWxvbWV0cmVzLCBraWxvbWV0ZXJzLlxuICogQHJldHVybnMge251bWJlcn0gZGlzdGFuY2VcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcmFkaWFuc1RvTGVuZ3RoKHJhZGlhbnMsIHVuaXRzKSB7XG4gIGlmICh1bml0cyA9PT0gdm9pZCAwKSB7XG4gICAgdW5pdHMgPSBcImtpbG9tZXRlcnNcIjtcbiAgfVxuXG4gIHZhciBmYWN0b3IgPSBmYWN0b3JzW3VuaXRzXTtcblxuICBpZiAoIWZhY3Rvcikge1xuICAgIHRocm93IG5ldyBFcnJvcih1bml0cyArIFwiIHVuaXRzIGlzIGludmFsaWRcIik7XG4gIH1cblxuICByZXR1cm4gcmFkaWFucyAqIGZhY3Rvcjtcbn1cbi8qKlxuICogQ29udmVydCBhIGRpc3RhbmNlIG1lYXN1cmVtZW50IChhc3N1bWluZyBhIHNwaGVyaWNhbCBFYXJ0aCkgZnJvbSBhIHJlYWwtd29ybGQgdW5pdCBpbnRvIHJhZGlhbnNcbiAqIFZhbGlkIHVuaXRzOiBtaWxlcywgbmF1dGljYWxtaWxlcywgaW5jaGVzLCB5YXJkcywgbWV0ZXJzLCBtZXRyZXMsIGtpbG9tZXRlcnMsIGNlbnRpbWV0ZXJzLCBmZWV0XG4gKlxuICogQG5hbWUgbGVuZ3RoVG9SYWRpYW5zXG4gKiBAcGFyYW0ge251bWJlcn0gZGlzdGFuY2UgaW4gcmVhbCB1bml0c1xuICogQHBhcmFtIHtzdHJpbmd9IFt1bml0cz1cImtpbG9tZXRlcnNcIl0gY2FuIGJlIGRlZ3JlZXMsIHJhZGlhbnMsIG1pbGVzLCBpbmNoZXMsIHlhcmRzLCBtZXRyZXMsXG4gKiBtZXRlcnMsIGtpbG9tZXRyZXMsIGtpbG9tZXRlcnMuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSByYWRpYW5zXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGxlbmd0aFRvUmFkaWFucyhkaXN0YW5jZSwgdW5pdHMpIHtcbiAgaWYgKHVuaXRzID09PSB2b2lkIDApIHtcbiAgICB1bml0cyA9IFwia2lsb21ldGVyc1wiO1xuICB9XG5cbiAgdmFyIGZhY3RvciA9IGZhY3RvcnNbdW5pdHNdO1xuXG4gIGlmICghZmFjdG9yKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKHVuaXRzICsgXCIgdW5pdHMgaXMgaW52YWxpZFwiKTtcbiAgfVxuXG4gIHJldHVybiBkaXN0YW5jZSAvIGZhY3Rvcjtcbn1cbi8qKlxuICogQ29udmVydCBhIGRpc3RhbmNlIG1lYXN1cmVtZW50IChhc3N1bWluZyBhIHNwaGVyaWNhbCBFYXJ0aCkgZnJvbSBhIHJlYWwtd29ybGQgdW5pdCBpbnRvIGRlZ3JlZXNcbiAqIFZhbGlkIHVuaXRzOiBtaWxlcywgbmF1dGljYWxtaWxlcywgaW5jaGVzLCB5YXJkcywgbWV0ZXJzLCBtZXRyZXMsIGNlbnRpbWV0ZXJzLCBraWxvbWV0cmVzLCBmZWV0XG4gKlxuICogQG5hbWUgbGVuZ3RoVG9EZWdyZWVzXG4gKiBAcGFyYW0ge251bWJlcn0gZGlzdGFuY2UgaW4gcmVhbCB1bml0c1xuICogQHBhcmFtIHtzdHJpbmd9IFt1bml0cz1cImtpbG9tZXRlcnNcIl0gY2FuIGJlIGRlZ3JlZXMsIHJhZGlhbnMsIG1pbGVzLCBpbmNoZXMsIHlhcmRzLCBtZXRyZXMsXG4gKiBtZXRlcnMsIGtpbG9tZXRyZXMsIGtpbG9tZXRlcnMuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBkZWdyZWVzXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGxlbmd0aFRvRGVncmVlcyhkaXN0YW5jZSwgdW5pdHMpIHtcbiAgcmV0dXJuIHJhZGlhbnNUb0RlZ3JlZXMobGVuZ3RoVG9SYWRpYW5zKGRpc3RhbmNlLCB1bml0cykpO1xufVxuLyoqXG4gKiBDb252ZXJ0cyBhbnkgYmVhcmluZyBhbmdsZSBmcm9tIHRoZSBub3J0aCBsaW5lIGRpcmVjdGlvbiAocG9zaXRpdmUgY2xvY2t3aXNlKVxuICogYW5kIHJldHVybnMgYW4gYW5nbGUgYmV0d2VlbiAwLTM2MCBkZWdyZWVzIChwb3NpdGl2ZSBjbG9ja3dpc2UpLCAwIGJlaW5nIHRoZSBub3J0aCBsaW5lXG4gKlxuICogQG5hbWUgYmVhcmluZ1RvQXppbXV0aFxuICogQHBhcmFtIHtudW1iZXJ9IGJlYXJpbmcgYW5nbGUsIGJldHdlZW4gLTE4MCBhbmQgKzE4MCBkZWdyZWVzXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBhbmdsZSBiZXR3ZWVuIDAgYW5kIDM2MCBkZWdyZWVzXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGJlYXJpbmdUb0F6aW11dGgoYmVhcmluZykge1xuICB2YXIgYW5nbGUgPSBiZWFyaW5nICUgMzYwO1xuXG4gIGlmIChhbmdsZSA8IDApIHtcbiAgICBhbmdsZSArPSAzNjA7XG4gIH1cblxuICByZXR1cm4gYW5nbGU7XG59XG4vKipcbiAqIENvbnZlcnRzIGFuIGFuZ2xlIGluIHJhZGlhbnMgdG8gZGVncmVlc1xuICpcbiAqIEBuYW1lIHJhZGlhbnNUb0RlZ3JlZXNcbiAqIEBwYXJhbSB7bnVtYmVyfSByYWRpYW5zIGFuZ2xlIGluIHJhZGlhbnNcbiAqIEByZXR1cm5zIHtudW1iZXJ9IGRlZ3JlZXMgYmV0d2VlbiAwIGFuZCAzNjAgZGVncmVlc1xuICovXG5cbmV4cG9ydCBmdW5jdGlvbiByYWRpYW5zVG9EZWdyZWVzKHJhZGlhbnMpIHtcbiAgdmFyIGRlZ3JlZXMgPSByYWRpYW5zICUgKDIgKiBNYXRoLlBJKTtcbiAgcmV0dXJuIGRlZ3JlZXMgKiAxODAgLyBNYXRoLlBJO1xufVxuLyoqXG4gKiBDb252ZXJ0cyBhbiBhbmdsZSBpbiBkZWdyZWVzIHRvIHJhZGlhbnNcbiAqXG4gKiBAbmFtZSBkZWdyZWVzVG9SYWRpYW5zXG4gKiBAcGFyYW0ge251bWJlcn0gZGVncmVlcyBhbmdsZSBiZXR3ZWVuIDAgYW5kIDM2MCBkZWdyZWVzXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBhbmdsZSBpbiByYWRpYW5zXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZ3JlZXNUb1JhZGlhbnMoZGVncmVlcykge1xuICB2YXIgcmFkaWFucyA9IGRlZ3JlZXMgJSAzNjA7XG4gIHJldHVybiByYWRpYW5zICogTWF0aC5QSSAvIDE4MDtcbn1cbi8qKlxuICogQ29udmVydHMgYSBsZW5ndGggdG8gdGhlIHJlcXVlc3RlZCB1bml0LlxuICogVmFsaWQgdW5pdHM6IG1pbGVzLCBuYXV0aWNhbG1pbGVzLCBpbmNoZXMsIHlhcmRzLCBtZXRlcnMsIG1ldHJlcywga2lsb21ldGVycywgY2VudGltZXRlcnMsIGZlZXRcbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoIHRvIGJlIGNvbnZlcnRlZFxuICogQHBhcmFtIHtVbml0c30gW29yaWdpbmFsVW5pdD1cImtpbG9tZXRlcnNcIl0gb2YgdGhlIGxlbmd0aFxuICogQHBhcmFtIHtVbml0c30gW2ZpbmFsVW5pdD1cImtpbG9tZXRlcnNcIl0gcmV0dXJuZWQgdW5pdFxuICogQHJldHVybnMge251bWJlcn0gdGhlIGNvbnZlcnRlZCBsZW5ndGhcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydExlbmd0aChsZW5ndGgsIG9yaWdpbmFsVW5pdCwgZmluYWxVbml0KSB7XG4gIGlmIChvcmlnaW5hbFVuaXQgPT09IHZvaWQgMCkge1xuICAgIG9yaWdpbmFsVW5pdCA9IFwia2lsb21ldGVyc1wiO1xuICB9XG5cbiAgaWYgKGZpbmFsVW5pdCA9PT0gdm9pZCAwKSB7XG4gICAgZmluYWxVbml0ID0gXCJraWxvbWV0ZXJzXCI7XG4gIH1cblxuICBpZiAoIShsZW5ndGggPj0gMCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJsZW5ndGggbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlclwiKTtcbiAgfVxuXG4gIHJldHVybiByYWRpYW5zVG9MZW5ndGgobGVuZ3RoVG9SYWRpYW5zKGxlbmd0aCwgb3JpZ2luYWxVbml0KSwgZmluYWxVbml0KTtcbn1cbi8qKlxuICogQ29udmVydHMgYSBhcmVhIHRvIHRoZSByZXF1ZXN0ZWQgdW5pdC5cbiAqIFZhbGlkIHVuaXRzOiBraWxvbWV0ZXJzLCBraWxvbWV0cmVzLCBtZXRlcnMsIG1ldHJlcywgY2VudGltZXRyZXMsIG1pbGxpbWV0ZXJzLCBhY3JlcywgbWlsZXMsIHlhcmRzLCBmZWV0LCBpbmNoZXMsIGhlY3RhcmVzXG4gKiBAcGFyYW0ge251bWJlcn0gYXJlYSB0byBiZSBjb252ZXJ0ZWRcbiAqIEBwYXJhbSB7VW5pdHN9IFtvcmlnaW5hbFVuaXQ9XCJtZXRlcnNcIl0gb2YgdGhlIGRpc3RhbmNlXG4gKiBAcGFyYW0ge1VuaXRzfSBbZmluYWxVbml0PVwia2lsb21ldGVyc1wiXSByZXR1cm5lZCB1bml0XG4gKiBAcmV0dXJucyB7bnVtYmVyfSB0aGUgY29udmVydGVkIGFyZWFcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydEFyZWEoYXJlYSwgb3JpZ2luYWxVbml0LCBmaW5hbFVuaXQpIHtcbiAgaWYgKG9yaWdpbmFsVW5pdCA9PT0gdm9pZCAwKSB7XG4gICAgb3JpZ2luYWxVbml0ID0gXCJtZXRlcnNcIjtcbiAgfVxuXG4gIGlmIChmaW5hbFVuaXQgPT09IHZvaWQgMCkge1xuICAgIGZpbmFsVW5pdCA9IFwia2lsb21ldGVyc1wiO1xuICB9XG5cbiAgaWYgKCEoYXJlYSA+PSAwKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcImFyZWEgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlclwiKTtcbiAgfVxuXG4gIHZhciBzdGFydEZhY3RvciA9IGFyZWFGYWN0b3JzW29yaWdpbmFsVW5pdF07XG5cbiAgaWYgKCFzdGFydEZhY3Rvcikge1xuICAgIHRocm93IG5ldyBFcnJvcihcImludmFsaWQgb3JpZ2luYWwgdW5pdHNcIik7XG4gIH1cblxuICB2YXIgZmluYWxGYWN0b3IgPSBhcmVhRmFjdG9yc1tmaW5hbFVuaXRdO1xuXG4gIGlmICghZmluYWxGYWN0b3IpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGZpbmFsIHVuaXRzXCIpO1xuICB9XG5cbiAgcmV0dXJuIGFyZWEgLyBzdGFydEZhY3RvciAqIGZpbmFsRmFjdG9yO1xufVxuLyoqXG4gKiBpc051bWJlclxuICpcbiAqIEBwYXJhbSB7Kn0gbnVtIE51bWJlciB0byB2YWxpZGF0ZVxuICogQHJldHVybnMge2Jvb2xlYW59IHRydWUvZmFsc2VcbiAqIEBleGFtcGxlXG4gKiB0dXJmLmlzTnVtYmVyKDEyMylcbiAqIC8vPXRydWVcbiAqIHR1cmYuaXNOdW1iZXIoJ2ZvbycpXG4gKiAvLz1mYWxzZVxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBpc051bWJlcihudW0pIHtcbiAgcmV0dXJuICFpc05hTihudW0pICYmIG51bSAhPT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheShudW0pO1xufVxuLyoqXG4gKiBpc09iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gaW5wdXQgdmFyaWFibGUgdG8gdmFsaWRhdGVcbiAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlL2ZhbHNlXG4gKiBAZXhhbXBsZVxuICogdHVyZi5pc09iamVjdCh7ZWxldmF0aW9uOiAxMH0pXG4gKiAvLz10cnVlXG4gKiB0dXJmLmlzT2JqZWN0KCdmb28nKVxuICogLy89ZmFsc2VcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaXNPYmplY3QoaW5wdXQpIHtcbiAgcmV0dXJuICEhaW5wdXQgJiYgaW5wdXQuY29uc3RydWN0b3IgPT09IE9iamVjdDtcbn1cbi8qKlxuICogVmFsaWRhdGUgQkJveFxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IGJib3ggQkJveCB0byB2YWxpZGF0ZVxuICogQHJldHVybnMge3ZvaWR9XG4gKiBAdGhyb3dzIEVycm9yIGlmIEJCb3ggaXMgbm90IHZhbGlkXG4gKiBAZXhhbXBsZVxuICogdmFsaWRhdGVCQm94KFstMTgwLCAtNDAsIDExMCwgNTBdKVxuICogLy89T0tcbiAqIHZhbGlkYXRlQkJveChbLTE4MCwgLTQwXSlcbiAqIC8vPUVycm9yXG4gKiB2YWxpZGF0ZUJCb3goJ0ZvbycpXG4gKiAvLz1FcnJvclxuICogdmFsaWRhdGVCQm94KDUpXG4gKiAvLz1FcnJvclxuICogdmFsaWRhdGVCQm94KG51bGwpXG4gKiAvLz1FcnJvclxuICogdmFsaWRhdGVCQm94KHVuZGVmaW5lZClcbiAqIC8vPUVycm9yXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlQkJveChiYm94KSB7XG4gIGlmICghYmJveCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcImJib3ggaXMgcmVxdWlyZWRcIik7XG4gIH1cblxuICBpZiAoIUFycmF5LmlzQXJyYXkoYmJveCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJiYm94IG11c3QgYmUgYW4gQXJyYXlcIik7XG4gIH1cblxuICBpZiAoYmJveC5sZW5ndGggIT09IDQgJiYgYmJveC5sZW5ndGggIT09IDYpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJiYm94IG11c3QgYmUgYW4gQXJyYXkgb2YgNCBvciA2IG51bWJlcnNcIik7XG4gIH1cblxuICBiYm94LmZvckVhY2goZnVuY3Rpb24gKG51bSkge1xuICAgIGlmICghaXNOdW1iZXIobnVtKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYmJveCBtdXN0IG9ubHkgY29udGFpbiBudW1iZXJzXCIpO1xuICAgIH1cbiAgfSk7XG59XG4vKipcbiAqIFZhbGlkYXRlIElkXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gaWQgSWQgdG8gdmFsaWRhdGVcbiAqIEByZXR1cm5zIHt2b2lkfVxuICogQHRocm93cyBFcnJvciBpZiBJZCBpcyBub3QgdmFsaWRcbiAqIEBleGFtcGxlXG4gKiB2YWxpZGF0ZUlkKFstMTgwLCAtNDAsIDExMCwgNTBdKVxuICogLy89RXJyb3JcbiAqIHZhbGlkYXRlSWQoWy0xODAsIC00MF0pXG4gKiAvLz1FcnJvclxuICogdmFsaWRhdGVJZCgnRm9vJylcbiAqIC8vPU9LXG4gKiB2YWxpZGF0ZUlkKDUpXG4gKiAvLz1PS1xuICogdmFsaWRhdGVJZChudWxsKVxuICogLy89RXJyb3JcbiAqIHZhbGlkYXRlSWQodW5kZWZpbmVkKVxuICogLy89RXJyb3JcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVJZChpZCkge1xuICBpZiAoIWlkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiaWQgaXMgcmVxdWlyZWRcIik7XG4gIH1cblxuICBpZiAoW1wic3RyaW5nXCIsIFwibnVtYmVyXCJdLmluZGV4T2YodHlwZW9mIGlkKSA9PT0gLTEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJpZCBtdXN0IGJlIGEgbnVtYmVyIG9yIGEgc3RyaW5nXCIpO1xuICB9XG59IiwiaW1wb3J0IHsgZmVhdHVyZSwgbGluZVN0cmluZywgaXNPYmplY3QsIHBvaW50IH0gZnJvbSAnQHR1cmYvaGVscGVycyc7XG4vKipcbiAqIENhbGxiYWNrIGZvciBjb29yZEVhY2hcbiAqXG4gKiBAY2FsbGJhY2sgY29vcmRFYWNoQ2FsbGJhY2tcbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gY3VycmVudENvb3JkIFRoZSBjdXJyZW50IGNvb3JkaW5hdGUgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtudW1iZXJ9IGNvb3JkSW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIGNvb3JkaW5hdGUgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtudW1iZXJ9IGZlYXR1cmVJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgRmVhdHVyZSBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gbXVsdGlGZWF0dXJlSW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIE11bHRpLUZlYXR1cmUgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtudW1iZXJ9IGdlb21ldHJ5SW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIEdlb21ldHJ5IGJlaW5nIHByb2Nlc3NlZC5cbiAqL1xuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBjb29yZGluYXRlcyBpbiBhbnkgR2VvSlNPTiBvYmplY3QsIHNpbWlsYXIgdG8gQXJyYXkuZm9yRWFjaCgpXG4gKlxuICogQG5hbWUgY29vcmRFYWNoXG4gKiBAcGFyYW0ge0ZlYXR1cmVDb2xsZWN0aW9ufEZlYXR1cmV8R2VvbWV0cnl9IGdlb2pzb24gYW55IEdlb0pTT04gb2JqZWN0XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBhIG1ldGhvZCB0aGF0IHRha2VzIChjdXJyZW50Q29vcmQsIGNvb3JkSW5kZXgsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgpXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtleGNsdWRlV3JhcENvb3JkPWZhbHNlXSB3aGV0aGVyIG9yIG5vdCB0byBpbmNsdWRlIHRoZSBmaW5hbCBjb29yZGluYXRlIG9mIExpbmVhclJpbmdzIHRoYXQgd3JhcHMgdGhlIHJpbmcgaW4gaXRzIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICogQGV4YW1wbGVcbiAqIHZhciBmZWF0dXJlcyA9IHR1cmYuZmVhdHVyZUNvbGxlY3Rpb24oW1xuICogICB0dXJmLnBvaW50KFsyNiwgMzddLCB7XCJmb29cIjogXCJiYXJcIn0pLFxuICogICB0dXJmLnBvaW50KFszNiwgNTNdLCB7XCJoZWxsb1wiOiBcIndvcmxkXCJ9KVxuICogXSk7XG4gKlxuICogdHVyZi5jb29yZEVhY2goZmVhdHVyZXMsIGZ1bmN0aW9uIChjdXJyZW50Q29vcmQsIGNvb3JkSW5kZXgsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgsIGdlb21ldHJ5SW5kZXgpIHtcbiAqICAgLy89Y3VycmVudENvb3JkXG4gKiAgIC8vPWNvb3JkSW5kZXhcbiAqICAgLy89ZmVhdHVyZUluZGV4XG4gKiAgIC8vPW11bHRpRmVhdHVyZUluZGV4XG4gKiAgIC8vPWdlb21ldHJ5SW5kZXhcbiAqIH0pO1xuICovXG5cbmZ1bmN0aW9uIGNvb3JkRWFjaChnZW9qc29uLCBjYWxsYmFjaywgZXhjbHVkZVdyYXBDb29yZCkge1xuICAvLyBIYW5kbGVzIG51bGwgR2VvbWV0cnkgLS0gU2tpcHMgdGhpcyBHZW9KU09OXG4gIGlmIChnZW9qc29uID09PSBudWxsKSByZXR1cm47XG4gIHZhciBqLFxuICAgICAgayxcbiAgICAgIGwsXG4gICAgICBnZW9tZXRyeSxcbiAgICAgIHN0b3BHLFxuICAgICAgY29vcmRzLFxuICAgICAgZ2VvbWV0cnlNYXliZUNvbGxlY3Rpb24sXG4gICAgICB3cmFwU2hyaW5rID0gMCxcbiAgICAgIGNvb3JkSW5kZXggPSAwLFxuICAgICAgaXNHZW9tZXRyeUNvbGxlY3Rpb24sXG4gICAgICB0eXBlID0gZ2VvanNvbi50eXBlLFxuICAgICAgaXNGZWF0dXJlQ29sbGVjdGlvbiA9IHR5cGUgPT09IFwiRmVhdHVyZUNvbGxlY3Rpb25cIixcbiAgICAgIGlzRmVhdHVyZSA9IHR5cGUgPT09IFwiRmVhdHVyZVwiLFxuICAgICAgc3RvcCA9IGlzRmVhdHVyZUNvbGxlY3Rpb24gPyBnZW9qc29uLmZlYXR1cmVzLmxlbmd0aCA6IDE7IC8vIFRoaXMgbG9naWMgbWF5IGxvb2sgYSBsaXR0bGUgd2VpcmQuIFRoZSByZWFzb24gd2h5IGl0IGlzIHRoYXQgd2F5XG4gIC8vIGlzIGJlY2F1c2UgaXQncyB0cnlpbmcgdG8gYmUgZmFzdC4gR2VvSlNPTiBzdXBwb3J0cyBtdWx0aXBsZSBraW5kc1xuICAvLyBvZiBvYmplY3RzIGF0IGl0cyByb290OiBGZWF0dXJlQ29sbGVjdGlvbiwgRmVhdHVyZXMsIEdlb21ldHJpZXMuXG4gIC8vIFRoaXMgZnVuY3Rpb24gaGFzIHRoZSByZXNwb25zaWJpbGl0eSBvZiBoYW5kbGluZyBhbGwgb2YgdGhlbSwgYW5kIHRoYXRcbiAgLy8gbWVhbnMgdGhhdCBzb21lIG9mIHRoZSBgZm9yYCBsb29wcyB5b3Ugc2VlIGJlbG93IGFjdHVhbGx5IGp1c3QgZG9uJ3QgYXBwbHlcbiAgLy8gdG8gY2VydGFpbiBpbnB1dHMuIEZvciBpbnN0YW5jZSwgaWYgeW91IGdpdmUgdGhpcyBqdXN0IGFcbiAgLy8gUG9pbnQgZ2VvbWV0cnksIHRoZW4gYm90aCBsb29wcyBhcmUgc2hvcnQtY2lyY3VpdGVkIGFuZCBhbGwgd2UgZG9cbiAgLy8gaXMgZ3JhZHVhbGx5IHJlbmFtZSB0aGUgaW5wdXQgdW50aWwgaXQncyBjYWxsZWQgJ2dlb21ldHJ5Jy5cbiAgLy9cbiAgLy8gVGhpcyBhbHNvIGFpbXMgdG8gYWxsb2NhdGUgYXMgZmV3IHJlc291cmNlcyBhcyBwb3NzaWJsZToganVzdCBhXG4gIC8vIGZldyBudW1iZXJzIGFuZCBib29sZWFucywgcmF0aGVyIHRoYW4gYW55IHRlbXBvcmFyeSBhcnJheXMgYXMgd291bGRcbiAgLy8gYmUgcmVxdWlyZWQgd2l0aCB0aGUgbm9ybWFsaXphdGlvbiBhcHByb2FjaC5cblxuICBmb3IgKHZhciBmZWF0dXJlSW5kZXggPSAwOyBmZWF0dXJlSW5kZXggPCBzdG9wOyBmZWF0dXJlSW5kZXgrKykge1xuICAgIGdlb21ldHJ5TWF5YmVDb2xsZWN0aW9uID0gaXNGZWF0dXJlQ29sbGVjdGlvbiA/IGdlb2pzb24uZmVhdHVyZXNbZmVhdHVyZUluZGV4XS5nZW9tZXRyeSA6IGlzRmVhdHVyZSA/IGdlb2pzb24uZ2VvbWV0cnkgOiBnZW9qc29uO1xuICAgIGlzR2VvbWV0cnlDb2xsZWN0aW9uID0gZ2VvbWV0cnlNYXliZUNvbGxlY3Rpb24gPyBnZW9tZXRyeU1heWJlQ29sbGVjdGlvbi50eXBlID09PSBcIkdlb21ldHJ5Q29sbGVjdGlvblwiIDogZmFsc2U7XG4gICAgc3RvcEcgPSBpc0dlb21ldHJ5Q29sbGVjdGlvbiA/IGdlb21ldHJ5TWF5YmVDb2xsZWN0aW9uLmdlb21ldHJpZXMubGVuZ3RoIDogMTtcblxuICAgIGZvciAodmFyIGdlb21JbmRleCA9IDA7IGdlb21JbmRleCA8IHN0b3BHOyBnZW9tSW5kZXgrKykge1xuICAgICAgdmFyIG11bHRpRmVhdHVyZUluZGV4ID0gMDtcbiAgICAgIHZhciBnZW9tZXRyeUluZGV4ID0gMDtcbiAgICAgIGdlb21ldHJ5ID0gaXNHZW9tZXRyeUNvbGxlY3Rpb24gPyBnZW9tZXRyeU1heWJlQ29sbGVjdGlvbi5nZW9tZXRyaWVzW2dlb21JbmRleF0gOiBnZW9tZXRyeU1heWJlQ29sbGVjdGlvbjsgLy8gSGFuZGxlcyBudWxsIEdlb21ldHJ5IC0tIFNraXBzIHRoaXMgZ2VvbWV0cnlcblxuICAgICAgaWYgKGdlb21ldHJ5ID09PSBudWxsKSBjb250aW51ZTtcbiAgICAgIGNvb3JkcyA9IGdlb21ldHJ5LmNvb3JkaW5hdGVzO1xuICAgICAgdmFyIGdlb21UeXBlID0gZ2VvbWV0cnkudHlwZTtcbiAgICAgIHdyYXBTaHJpbmsgPSBleGNsdWRlV3JhcENvb3JkICYmIChnZW9tVHlwZSA9PT0gXCJQb2x5Z29uXCIgfHwgZ2VvbVR5cGUgPT09IFwiTXVsdGlQb2x5Z29uXCIpID8gMSA6IDA7XG5cbiAgICAgIHN3aXRjaCAoZ2VvbVR5cGUpIHtcbiAgICAgICAgY2FzZSBudWxsOlxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJQb2ludFwiOlxuICAgICAgICAgIGlmIChjYWxsYmFjayhjb29yZHMsIGNvb3JkSW5kZXgsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgsIGdlb21ldHJ5SW5kZXgpID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIGNvb3JkSW5kZXgrKztcbiAgICAgICAgICBtdWx0aUZlYXR1cmVJbmRleCsrO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJMaW5lU3RyaW5nXCI6XG4gICAgICAgIGNhc2UgXCJNdWx0aVBvaW50XCI6XG4gICAgICAgICAgZm9yIChqID0gMDsgaiA8IGNvb3Jkcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgaWYgKGNhbGxiYWNrKGNvb3Jkc1tqXSwgY29vcmRJbmRleCwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCwgZ2VvbWV0cnlJbmRleCkgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBjb29yZEluZGV4Kys7XG4gICAgICAgICAgICBpZiAoZ2VvbVR5cGUgPT09IFwiTXVsdGlQb2ludFwiKSBtdWx0aUZlYXR1cmVJbmRleCsrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChnZW9tVHlwZSA9PT0gXCJMaW5lU3RyaW5nXCIpIG11bHRpRmVhdHVyZUluZGV4Kys7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcIlBvbHlnb25cIjpcbiAgICAgICAgY2FzZSBcIk11bHRpTGluZVN0cmluZ1wiOlxuICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBjb29yZHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGZvciAoayA9IDA7IGsgPCBjb29yZHNbal0ubGVuZ3RoIC0gd3JhcFNocmluazsgaysrKSB7XG4gICAgICAgICAgICAgIGlmIChjYWxsYmFjayhjb29yZHNbal1ba10sIGNvb3JkSW5kZXgsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgsIGdlb21ldHJ5SW5kZXgpID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICBjb29yZEluZGV4Kys7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChnZW9tVHlwZSA9PT0gXCJNdWx0aUxpbmVTdHJpbmdcIikgbXVsdGlGZWF0dXJlSW5kZXgrKztcbiAgICAgICAgICAgIGlmIChnZW9tVHlwZSA9PT0gXCJQb2x5Z29uXCIpIGdlb21ldHJ5SW5kZXgrKztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZ2VvbVR5cGUgPT09IFwiUG9seWdvblwiKSBtdWx0aUZlYXR1cmVJbmRleCsrO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJNdWx0aVBvbHlnb25cIjpcbiAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgY29vcmRzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBnZW9tZXRyeUluZGV4ID0gMDtcblxuICAgICAgICAgICAgZm9yIChrID0gMDsgayA8IGNvb3Jkc1tqXS5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgICBmb3IgKGwgPSAwOyBsIDwgY29vcmRzW2pdW2tdLmxlbmd0aCAtIHdyYXBTaHJpbms7IGwrKykge1xuICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjayhjb29yZHNbal1ba11bbF0sIGNvb3JkSW5kZXgsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgsIGdlb21ldHJ5SW5kZXgpID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIGNvb3JkSW5kZXgrKztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGdlb21ldHJ5SW5kZXgrKztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbXVsdGlGZWF0dXJlSW5kZXgrKztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiR2VvbWV0cnlDb2xsZWN0aW9uXCI6XG4gICAgICAgICAgZm9yIChqID0gMDsgaiA8IGdlb21ldHJ5Lmdlb21ldHJpZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGlmIChjb29yZEVhY2goZ2VvbWV0cnkuZ2VvbWV0cmllc1tqXSwgY2FsbGJhY2ssIGV4Y2x1ZGVXcmFwQ29vcmQpID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBHZW9tZXRyeSBUeXBlXCIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBDYWxsYmFjayBmb3IgY29vcmRSZWR1Y2VcbiAqXG4gKiBUaGUgZmlyc3QgdGltZSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgY2FsbGVkLCB0aGUgdmFsdWVzIHByb3ZpZGVkIGFzIGFyZ3VtZW50cyBkZXBlbmRcbiAqIG9uIHdoZXRoZXIgdGhlIHJlZHVjZSBtZXRob2QgaGFzIGFuIGluaXRpYWxWYWx1ZSBhcmd1bWVudC5cbiAqXG4gKiBJZiBhbiBpbml0aWFsVmFsdWUgaXMgcHJvdmlkZWQgdG8gdGhlIHJlZHVjZSBtZXRob2Q6XG4gKiAgLSBUaGUgcHJldmlvdXNWYWx1ZSBhcmd1bWVudCBpcyBpbml0aWFsVmFsdWUuXG4gKiAgLSBUaGUgY3VycmVudFZhbHVlIGFyZ3VtZW50IGlzIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgZWxlbWVudCBwcmVzZW50IGluIHRoZSBhcnJheS5cbiAqXG4gKiBJZiBhbiBpbml0aWFsVmFsdWUgaXMgbm90IHByb3ZpZGVkOlxuICogIC0gVGhlIHByZXZpb3VzVmFsdWUgYXJndW1lbnQgaXMgdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBlbGVtZW50IHByZXNlbnQgaW4gdGhlIGFycmF5LlxuICogIC0gVGhlIGN1cnJlbnRWYWx1ZSBhcmd1bWVudCBpcyB0aGUgdmFsdWUgb2YgdGhlIHNlY29uZCBlbGVtZW50IHByZXNlbnQgaW4gdGhlIGFycmF5LlxuICpcbiAqIEBjYWxsYmFjayBjb29yZFJlZHVjZUNhbGxiYWNrXG4gKiBAcGFyYW0geyp9IHByZXZpb3VzVmFsdWUgVGhlIGFjY3VtdWxhdGVkIHZhbHVlIHByZXZpb3VzbHkgcmV0dXJuZWQgaW4gdGhlIGxhc3QgaW52b2NhdGlvblxuICogb2YgdGhlIGNhbGxiYWNrLCBvciBpbml0aWFsVmFsdWUsIGlmIHN1cHBsaWVkLlxuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBjdXJyZW50Q29vcmQgVGhlIGN1cnJlbnQgY29vcmRpbmF0ZSBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gY29vcmRJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgY29vcmRpbmF0ZSBiZWluZyBwcm9jZXNzZWQuXG4gKiBTdGFydHMgYXQgaW5kZXggMCwgaWYgYW4gaW5pdGlhbFZhbHVlIGlzIHByb3ZpZGVkLCBhbmQgYXQgaW5kZXggMSBvdGhlcndpc2UuXG4gKiBAcGFyYW0ge251bWJlcn0gZmVhdHVyZUluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBGZWF0dXJlIGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBtdWx0aUZlYXR1cmVJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgTXVsdGktRmVhdHVyZSBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gZ2VvbWV0cnlJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgR2VvbWV0cnkgYmVpbmcgcHJvY2Vzc2VkLlxuICovXG5cbi8qKlxuICogUmVkdWNlIGNvb3JkaW5hdGVzIGluIGFueSBHZW9KU09OIG9iamVjdCwgc2ltaWxhciB0byBBcnJheS5yZWR1Y2UoKVxuICpcbiAqIEBuYW1lIGNvb3JkUmVkdWNlXG4gKiBAcGFyYW0ge0ZlYXR1cmVDb2xsZWN0aW9ufEdlb21ldHJ5fEZlYXR1cmV9IGdlb2pzb24gYW55IEdlb0pTT04gb2JqZWN0XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBhIG1ldGhvZCB0aGF0IHRha2VzIChwcmV2aW91c1ZhbHVlLCBjdXJyZW50Q29vcmQsIGNvb3JkSW5kZXgpXG4gKiBAcGFyYW0geyp9IFtpbml0aWFsVmFsdWVdIFZhbHVlIHRvIHVzZSBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIGZpcnN0IGNhbGwgb2YgdGhlIGNhbGxiYWNrLlxuICogQHBhcmFtIHtib29sZWFufSBbZXhjbHVkZVdyYXBDb29yZD1mYWxzZV0gd2hldGhlciBvciBub3QgdG8gaW5jbHVkZSB0aGUgZmluYWwgY29vcmRpbmF0ZSBvZiBMaW5lYXJSaW5ncyB0aGF0IHdyYXBzIHRoZSByaW5nIGluIGl0cyBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7Kn0gVGhlIHZhbHVlIHRoYXQgcmVzdWx0cyBmcm9tIHRoZSByZWR1Y3Rpb24uXG4gKiBAZXhhbXBsZVxuICogdmFyIGZlYXR1cmVzID0gdHVyZi5mZWF0dXJlQ29sbGVjdGlvbihbXG4gKiAgIHR1cmYucG9pbnQoWzI2LCAzN10sIHtcImZvb1wiOiBcImJhclwifSksXG4gKiAgIHR1cmYucG9pbnQoWzM2LCA1M10sIHtcImhlbGxvXCI6IFwid29ybGRcIn0pXG4gKiBdKTtcbiAqXG4gKiB0dXJmLmNvb3JkUmVkdWNlKGZlYXR1cmVzLCBmdW5jdGlvbiAocHJldmlvdXNWYWx1ZSwgY3VycmVudENvb3JkLCBjb29yZEluZGV4LCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4LCBnZW9tZXRyeUluZGV4KSB7XG4gKiAgIC8vPXByZXZpb3VzVmFsdWVcbiAqICAgLy89Y3VycmVudENvb3JkXG4gKiAgIC8vPWNvb3JkSW5kZXhcbiAqICAgLy89ZmVhdHVyZUluZGV4XG4gKiAgIC8vPW11bHRpRmVhdHVyZUluZGV4XG4gKiAgIC8vPWdlb21ldHJ5SW5kZXhcbiAqICAgcmV0dXJuIGN1cnJlbnRDb29yZDtcbiAqIH0pO1xuICovXG5cblxuZnVuY3Rpb24gY29vcmRSZWR1Y2UoZ2VvanNvbiwgY2FsbGJhY2ssIGluaXRpYWxWYWx1ZSwgZXhjbHVkZVdyYXBDb29yZCkge1xuICB2YXIgcHJldmlvdXNWYWx1ZSA9IGluaXRpYWxWYWx1ZTtcbiAgY29vcmRFYWNoKGdlb2pzb24sIGZ1bmN0aW9uIChjdXJyZW50Q29vcmQsIGNvb3JkSW5kZXgsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgsIGdlb21ldHJ5SW5kZXgpIHtcbiAgICBpZiAoY29vcmRJbmRleCA9PT0gMCAmJiBpbml0aWFsVmFsdWUgPT09IHVuZGVmaW5lZCkgcHJldmlvdXNWYWx1ZSA9IGN1cnJlbnRDb29yZDtlbHNlIHByZXZpb3VzVmFsdWUgPSBjYWxsYmFjayhwcmV2aW91c1ZhbHVlLCBjdXJyZW50Q29vcmQsIGNvb3JkSW5kZXgsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgsIGdlb21ldHJ5SW5kZXgpO1xuICB9LCBleGNsdWRlV3JhcENvb3JkKTtcbiAgcmV0dXJuIHByZXZpb3VzVmFsdWU7XG59XG4vKipcbiAqIENhbGxiYWNrIGZvciBwcm9wRWFjaFxuICpcbiAqIEBjYWxsYmFjayBwcm9wRWFjaENhbGxiYWNrXG4gKiBAcGFyYW0ge09iamVjdH0gY3VycmVudFByb3BlcnRpZXMgVGhlIGN1cnJlbnQgUHJvcGVydGllcyBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gZmVhdHVyZUluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBGZWF0dXJlIGJlaW5nIHByb2Nlc3NlZC5cbiAqL1xuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBwcm9wZXJ0aWVzIGluIGFueSBHZW9KU09OIG9iamVjdCwgc2ltaWxhciB0byBBcnJheS5mb3JFYWNoKClcbiAqXG4gKiBAbmFtZSBwcm9wRWFjaFxuICogQHBhcmFtIHtGZWF0dXJlQ29sbGVjdGlvbnxGZWF0dXJlfSBnZW9qc29uIGFueSBHZW9KU09OIG9iamVjdFxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgYSBtZXRob2QgdGhhdCB0YWtlcyAoY3VycmVudFByb3BlcnRpZXMsIGZlYXR1cmVJbmRleClcbiAqIEByZXR1cm5zIHt2b2lkfVxuICogQGV4YW1wbGVcbiAqIHZhciBmZWF0dXJlcyA9IHR1cmYuZmVhdHVyZUNvbGxlY3Rpb24oW1xuICogICAgIHR1cmYucG9pbnQoWzI2LCAzN10sIHtmb286ICdiYXInfSksXG4gKiAgICAgdHVyZi5wb2ludChbMzYsIDUzXSwge2hlbGxvOiAnd29ybGQnfSlcbiAqIF0pO1xuICpcbiAqIHR1cmYucHJvcEVhY2goZmVhdHVyZXMsIGZ1bmN0aW9uIChjdXJyZW50UHJvcGVydGllcywgZmVhdHVyZUluZGV4KSB7XG4gKiAgIC8vPWN1cnJlbnRQcm9wZXJ0aWVzXG4gKiAgIC8vPWZlYXR1cmVJbmRleFxuICogfSk7XG4gKi9cblxuXG5mdW5jdGlvbiBwcm9wRWFjaChnZW9qc29uLCBjYWxsYmFjaykge1xuICB2YXIgaTtcblxuICBzd2l0Y2ggKGdlb2pzb24udHlwZSkge1xuICAgIGNhc2UgXCJGZWF0dXJlQ29sbGVjdGlvblwiOlxuICAgICAgZm9yIChpID0gMDsgaSA8IGdlb2pzb24uZmVhdHVyZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGNhbGxiYWNrKGdlb2pzb24uZmVhdHVyZXNbaV0ucHJvcGVydGllcywgaSkgPT09IGZhbHNlKSBicmVhaztcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwiRmVhdHVyZVwiOlxuICAgICAgY2FsbGJhY2soZ2VvanNvbi5wcm9wZXJ0aWVzLCAwKTtcbiAgICAgIGJyZWFrO1xuICB9XG59XG4vKipcbiAqIENhbGxiYWNrIGZvciBwcm9wUmVkdWNlXG4gKlxuICogVGhlIGZpcnN0IHRpbWUgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZCwgdGhlIHZhbHVlcyBwcm92aWRlZCBhcyBhcmd1bWVudHMgZGVwZW5kXG4gKiBvbiB3aGV0aGVyIHRoZSByZWR1Y2UgbWV0aG9kIGhhcyBhbiBpbml0aWFsVmFsdWUgYXJndW1lbnQuXG4gKlxuICogSWYgYW4gaW5pdGlhbFZhbHVlIGlzIHByb3ZpZGVkIHRvIHRoZSByZWR1Y2UgbWV0aG9kOlxuICogIC0gVGhlIHByZXZpb3VzVmFsdWUgYXJndW1lbnQgaXMgaW5pdGlhbFZhbHVlLlxuICogIC0gVGhlIGN1cnJlbnRWYWx1ZSBhcmd1bWVudCBpcyB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0IGVsZW1lbnQgcHJlc2VudCBpbiB0aGUgYXJyYXkuXG4gKlxuICogSWYgYW4gaW5pdGlhbFZhbHVlIGlzIG5vdCBwcm92aWRlZDpcbiAqICAtIFRoZSBwcmV2aW91c1ZhbHVlIGFyZ3VtZW50IGlzIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgZWxlbWVudCBwcmVzZW50IGluIHRoZSBhcnJheS5cbiAqICAtIFRoZSBjdXJyZW50VmFsdWUgYXJndW1lbnQgaXMgdGhlIHZhbHVlIG9mIHRoZSBzZWNvbmQgZWxlbWVudCBwcmVzZW50IGluIHRoZSBhcnJheS5cbiAqXG4gKiBAY2FsbGJhY2sgcHJvcFJlZHVjZUNhbGxiYWNrXG4gKiBAcGFyYW0geyp9IHByZXZpb3VzVmFsdWUgVGhlIGFjY3VtdWxhdGVkIHZhbHVlIHByZXZpb3VzbHkgcmV0dXJuZWQgaW4gdGhlIGxhc3QgaW52b2NhdGlvblxuICogb2YgdGhlIGNhbGxiYWNrLCBvciBpbml0aWFsVmFsdWUsIGlmIHN1cHBsaWVkLlxuICogQHBhcmFtIHsqfSBjdXJyZW50UHJvcGVydGllcyBUaGUgY3VycmVudCBQcm9wZXJ0aWVzIGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmZWF0dXJlSW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIEZlYXR1cmUgYmVpbmcgcHJvY2Vzc2VkLlxuICovXG5cbi8qKlxuICogUmVkdWNlIHByb3BlcnRpZXMgaW4gYW55IEdlb0pTT04gb2JqZWN0IGludG8gYSBzaW5nbGUgdmFsdWUsXG4gKiBzaW1pbGFyIHRvIGhvdyBBcnJheS5yZWR1Y2Ugd29ya3MuIEhvd2V2ZXIsIGluIHRoaXMgY2FzZSB3ZSBsYXppbHkgcnVuXG4gKiB0aGUgcmVkdWN0aW9uLCBzbyBhbiBhcnJheSBvZiBhbGwgcHJvcGVydGllcyBpcyB1bm5lY2Vzc2FyeS5cbiAqXG4gKiBAbmFtZSBwcm9wUmVkdWNlXG4gKiBAcGFyYW0ge0ZlYXR1cmVDb2xsZWN0aW9ufEZlYXR1cmV9IGdlb2pzb24gYW55IEdlb0pTT04gb2JqZWN0XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBhIG1ldGhvZCB0aGF0IHRha2VzIChwcmV2aW91c1ZhbHVlLCBjdXJyZW50UHJvcGVydGllcywgZmVhdHVyZUluZGV4KVxuICogQHBhcmFtIHsqfSBbaW5pdGlhbFZhbHVlXSBWYWx1ZSB0byB1c2UgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBmaXJzdCBjYWxsIG9mIHRoZSBjYWxsYmFjay5cbiAqIEByZXR1cm5zIHsqfSBUaGUgdmFsdWUgdGhhdCByZXN1bHRzIGZyb20gdGhlIHJlZHVjdGlvbi5cbiAqIEBleGFtcGxlXG4gKiB2YXIgZmVhdHVyZXMgPSB0dXJmLmZlYXR1cmVDb2xsZWN0aW9uKFtcbiAqICAgICB0dXJmLnBvaW50KFsyNiwgMzddLCB7Zm9vOiAnYmFyJ30pLFxuICogICAgIHR1cmYucG9pbnQoWzM2LCA1M10sIHtoZWxsbzogJ3dvcmxkJ30pXG4gKiBdKTtcbiAqXG4gKiB0dXJmLnByb3BSZWR1Y2UoZmVhdHVyZXMsIGZ1bmN0aW9uIChwcmV2aW91c1ZhbHVlLCBjdXJyZW50UHJvcGVydGllcywgZmVhdHVyZUluZGV4KSB7XG4gKiAgIC8vPXByZXZpb3VzVmFsdWVcbiAqICAgLy89Y3VycmVudFByb3BlcnRpZXNcbiAqICAgLy89ZmVhdHVyZUluZGV4XG4gKiAgIHJldHVybiBjdXJyZW50UHJvcGVydGllc1xuICogfSk7XG4gKi9cblxuXG5mdW5jdGlvbiBwcm9wUmVkdWNlKGdlb2pzb24sIGNhbGxiYWNrLCBpbml0aWFsVmFsdWUpIHtcbiAgdmFyIHByZXZpb3VzVmFsdWUgPSBpbml0aWFsVmFsdWU7XG4gIHByb3BFYWNoKGdlb2pzb24sIGZ1bmN0aW9uIChjdXJyZW50UHJvcGVydGllcywgZmVhdHVyZUluZGV4KSB7XG4gICAgaWYgKGZlYXR1cmVJbmRleCA9PT0gMCAmJiBpbml0aWFsVmFsdWUgPT09IHVuZGVmaW5lZCkgcHJldmlvdXNWYWx1ZSA9IGN1cnJlbnRQcm9wZXJ0aWVzO2Vsc2UgcHJldmlvdXNWYWx1ZSA9IGNhbGxiYWNrKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRQcm9wZXJ0aWVzLCBmZWF0dXJlSW5kZXgpO1xuICB9KTtcbiAgcmV0dXJuIHByZXZpb3VzVmFsdWU7XG59XG4vKipcbiAqIENhbGxiYWNrIGZvciBmZWF0dXJlRWFjaFxuICpcbiAqIEBjYWxsYmFjayBmZWF0dXJlRWFjaENhbGxiYWNrXG4gKiBAcGFyYW0ge0ZlYXR1cmU8YW55Pn0gY3VycmVudEZlYXR1cmUgVGhlIGN1cnJlbnQgRmVhdHVyZSBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gZmVhdHVyZUluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBGZWF0dXJlIGJlaW5nIHByb2Nlc3NlZC5cbiAqL1xuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBmZWF0dXJlcyBpbiBhbnkgR2VvSlNPTiBvYmplY3QsIHNpbWlsYXIgdG9cbiAqIEFycmF5LmZvckVhY2guXG4gKlxuICogQG5hbWUgZmVhdHVyZUVhY2hcbiAqIEBwYXJhbSB7RmVhdHVyZUNvbGxlY3Rpb258RmVhdHVyZXxHZW9tZXRyeX0gZ2VvanNvbiBhbnkgR2VvSlNPTiBvYmplY3RcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIGEgbWV0aG9kIHRoYXQgdGFrZXMgKGN1cnJlbnRGZWF0dXJlLCBmZWF0dXJlSW5kZXgpXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqIEBleGFtcGxlXG4gKiB2YXIgZmVhdHVyZXMgPSB0dXJmLmZlYXR1cmVDb2xsZWN0aW9uKFtcbiAqICAgdHVyZi5wb2ludChbMjYsIDM3XSwge2ZvbzogJ2Jhcid9KSxcbiAqICAgdHVyZi5wb2ludChbMzYsIDUzXSwge2hlbGxvOiAnd29ybGQnfSlcbiAqIF0pO1xuICpcbiAqIHR1cmYuZmVhdHVyZUVhY2goZmVhdHVyZXMsIGZ1bmN0aW9uIChjdXJyZW50RmVhdHVyZSwgZmVhdHVyZUluZGV4KSB7XG4gKiAgIC8vPWN1cnJlbnRGZWF0dXJlXG4gKiAgIC8vPWZlYXR1cmVJbmRleFxuICogfSk7XG4gKi9cblxuXG5mdW5jdGlvbiBmZWF0dXJlRWFjaChnZW9qc29uLCBjYWxsYmFjaykge1xuICBpZiAoZ2VvanNvbi50eXBlID09PSBcIkZlYXR1cmVcIikge1xuICAgIGNhbGxiYWNrKGdlb2pzb24sIDApO1xuICB9IGVsc2UgaWYgKGdlb2pzb24udHlwZSA9PT0gXCJGZWF0dXJlQ29sbGVjdGlvblwiKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBnZW9qc29uLmZlYXR1cmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoY2FsbGJhY2soZ2VvanNvbi5mZWF0dXJlc1tpXSwgaSkgPT09IGZhbHNlKSBicmVhaztcbiAgICB9XG4gIH1cbn1cbi8qKlxuICogQ2FsbGJhY2sgZm9yIGZlYXR1cmVSZWR1Y2VcbiAqXG4gKiBUaGUgZmlyc3QgdGltZSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgY2FsbGVkLCB0aGUgdmFsdWVzIHByb3ZpZGVkIGFzIGFyZ3VtZW50cyBkZXBlbmRcbiAqIG9uIHdoZXRoZXIgdGhlIHJlZHVjZSBtZXRob2QgaGFzIGFuIGluaXRpYWxWYWx1ZSBhcmd1bWVudC5cbiAqXG4gKiBJZiBhbiBpbml0aWFsVmFsdWUgaXMgcHJvdmlkZWQgdG8gdGhlIHJlZHVjZSBtZXRob2Q6XG4gKiAgLSBUaGUgcHJldmlvdXNWYWx1ZSBhcmd1bWVudCBpcyBpbml0aWFsVmFsdWUuXG4gKiAgLSBUaGUgY3VycmVudFZhbHVlIGFyZ3VtZW50IGlzIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgZWxlbWVudCBwcmVzZW50IGluIHRoZSBhcnJheS5cbiAqXG4gKiBJZiBhbiBpbml0aWFsVmFsdWUgaXMgbm90IHByb3ZpZGVkOlxuICogIC0gVGhlIHByZXZpb3VzVmFsdWUgYXJndW1lbnQgaXMgdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBlbGVtZW50IHByZXNlbnQgaW4gdGhlIGFycmF5LlxuICogIC0gVGhlIGN1cnJlbnRWYWx1ZSBhcmd1bWVudCBpcyB0aGUgdmFsdWUgb2YgdGhlIHNlY29uZCBlbGVtZW50IHByZXNlbnQgaW4gdGhlIGFycmF5LlxuICpcbiAqIEBjYWxsYmFjayBmZWF0dXJlUmVkdWNlQ2FsbGJhY2tcbiAqIEBwYXJhbSB7Kn0gcHJldmlvdXNWYWx1ZSBUaGUgYWNjdW11bGF0ZWQgdmFsdWUgcHJldmlvdXNseSByZXR1cm5lZCBpbiB0aGUgbGFzdCBpbnZvY2F0aW9uXG4gKiBvZiB0aGUgY2FsbGJhY2ssIG9yIGluaXRpYWxWYWx1ZSwgaWYgc3VwcGxpZWQuXG4gKiBAcGFyYW0ge0ZlYXR1cmV9IGN1cnJlbnRGZWF0dXJlIFRoZSBjdXJyZW50IEZlYXR1cmUgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtudW1iZXJ9IGZlYXR1cmVJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgRmVhdHVyZSBiZWluZyBwcm9jZXNzZWQuXG4gKi9cblxuLyoqXG4gKiBSZWR1Y2UgZmVhdHVyZXMgaW4gYW55IEdlb0pTT04gb2JqZWN0LCBzaW1pbGFyIHRvIEFycmF5LnJlZHVjZSgpLlxuICpcbiAqIEBuYW1lIGZlYXR1cmVSZWR1Y2VcbiAqIEBwYXJhbSB7RmVhdHVyZUNvbGxlY3Rpb258RmVhdHVyZXxHZW9tZXRyeX0gZ2VvanNvbiBhbnkgR2VvSlNPTiBvYmplY3RcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIGEgbWV0aG9kIHRoYXQgdGFrZXMgKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRGZWF0dXJlLCBmZWF0dXJlSW5kZXgpXG4gKiBAcGFyYW0geyp9IFtpbml0aWFsVmFsdWVdIFZhbHVlIHRvIHVzZSBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIGZpcnN0IGNhbGwgb2YgdGhlIGNhbGxiYWNrLlxuICogQHJldHVybnMgeyp9IFRoZSB2YWx1ZSB0aGF0IHJlc3VsdHMgZnJvbSB0aGUgcmVkdWN0aW9uLlxuICogQGV4YW1wbGVcbiAqIHZhciBmZWF0dXJlcyA9IHR1cmYuZmVhdHVyZUNvbGxlY3Rpb24oW1xuICogICB0dXJmLnBvaW50KFsyNiwgMzddLCB7XCJmb29cIjogXCJiYXJcIn0pLFxuICogICB0dXJmLnBvaW50KFszNiwgNTNdLCB7XCJoZWxsb1wiOiBcIndvcmxkXCJ9KVxuICogXSk7XG4gKlxuICogdHVyZi5mZWF0dXJlUmVkdWNlKGZlYXR1cmVzLCBmdW5jdGlvbiAocHJldmlvdXNWYWx1ZSwgY3VycmVudEZlYXR1cmUsIGZlYXR1cmVJbmRleCkge1xuICogICAvLz1wcmV2aW91c1ZhbHVlXG4gKiAgIC8vPWN1cnJlbnRGZWF0dXJlXG4gKiAgIC8vPWZlYXR1cmVJbmRleFxuICogICByZXR1cm4gY3VycmVudEZlYXR1cmVcbiAqIH0pO1xuICovXG5cblxuZnVuY3Rpb24gZmVhdHVyZVJlZHVjZShnZW9qc29uLCBjYWxsYmFjaywgaW5pdGlhbFZhbHVlKSB7XG4gIHZhciBwcmV2aW91c1ZhbHVlID0gaW5pdGlhbFZhbHVlO1xuICBmZWF0dXJlRWFjaChnZW9qc29uLCBmdW5jdGlvbiAoY3VycmVudEZlYXR1cmUsIGZlYXR1cmVJbmRleCkge1xuICAgIGlmIChmZWF0dXJlSW5kZXggPT09IDAgJiYgaW5pdGlhbFZhbHVlID09PSB1bmRlZmluZWQpIHByZXZpb3VzVmFsdWUgPSBjdXJyZW50RmVhdHVyZTtlbHNlIHByZXZpb3VzVmFsdWUgPSBjYWxsYmFjayhwcmV2aW91c1ZhbHVlLCBjdXJyZW50RmVhdHVyZSwgZmVhdHVyZUluZGV4KTtcbiAgfSk7XG4gIHJldHVybiBwcmV2aW91c1ZhbHVlO1xufVxuLyoqXG4gKiBHZXQgYWxsIGNvb3JkaW5hdGVzIGZyb20gYW55IEdlb0pTT04gb2JqZWN0LlxuICpcbiAqIEBuYW1lIGNvb3JkQWxsXG4gKiBAcGFyYW0ge0ZlYXR1cmVDb2xsZWN0aW9ufEZlYXR1cmV8R2VvbWV0cnl9IGdlb2pzb24gYW55IEdlb0pTT04gb2JqZWN0XG4gKiBAcmV0dXJucyB7QXJyYXk8QXJyYXk8bnVtYmVyPj59IGNvb3JkaW5hdGUgcG9zaXRpb24gYXJyYXlcbiAqIEBleGFtcGxlXG4gKiB2YXIgZmVhdHVyZXMgPSB0dXJmLmZlYXR1cmVDb2xsZWN0aW9uKFtcbiAqICAgdHVyZi5wb2ludChbMjYsIDM3XSwge2ZvbzogJ2Jhcid9KSxcbiAqICAgdHVyZi5wb2ludChbMzYsIDUzXSwge2hlbGxvOiAnd29ybGQnfSlcbiAqIF0pO1xuICpcbiAqIHZhciBjb29yZHMgPSB0dXJmLmNvb3JkQWxsKGZlYXR1cmVzKTtcbiAqIC8vPSBbWzI2LCAzN10sIFszNiwgNTNdXVxuICovXG5cblxuZnVuY3Rpb24gY29vcmRBbGwoZ2VvanNvbikge1xuICB2YXIgY29vcmRzID0gW107XG4gIGNvb3JkRWFjaChnZW9qc29uLCBmdW5jdGlvbiAoY29vcmQpIHtcbiAgICBjb29yZHMucHVzaChjb29yZCk7XG4gIH0pO1xuICByZXR1cm4gY29vcmRzO1xufVxuLyoqXG4gKiBDYWxsYmFjayBmb3IgZ2VvbUVhY2hcbiAqXG4gKiBAY2FsbGJhY2sgZ2VvbUVhY2hDYWxsYmFja1xuICogQHBhcmFtIHtHZW9tZXRyeX0gY3VycmVudEdlb21ldHJ5IFRoZSBjdXJyZW50IEdlb21ldHJ5IGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmZWF0dXJlSW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIEZlYXR1cmUgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtPYmplY3R9IGZlYXR1cmVQcm9wZXJ0aWVzIFRoZSBjdXJyZW50IEZlYXR1cmUgUHJvcGVydGllcyBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IGZlYXR1cmVCQm94IFRoZSBjdXJyZW50IEZlYXR1cmUgQkJveCBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IGZlYXR1cmVJZCBUaGUgY3VycmVudCBGZWF0dXJlIElkIGJlaW5nIHByb2Nlc3NlZC5cbiAqL1xuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBlYWNoIGdlb21ldHJ5IGluIGFueSBHZW9KU09OIG9iamVjdCwgc2ltaWxhciB0byBBcnJheS5mb3JFYWNoKClcbiAqXG4gKiBAbmFtZSBnZW9tRWFjaFxuICogQHBhcmFtIHtGZWF0dXJlQ29sbGVjdGlvbnxGZWF0dXJlfEdlb21ldHJ5fSBnZW9qc29uIGFueSBHZW9KU09OIG9iamVjdFxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgYSBtZXRob2QgdGhhdCB0YWtlcyAoY3VycmVudEdlb21ldHJ5LCBmZWF0dXJlSW5kZXgsIGZlYXR1cmVQcm9wZXJ0aWVzLCBmZWF0dXJlQkJveCwgZmVhdHVyZUlkKVxuICogQHJldHVybnMge3ZvaWR9XG4gKiBAZXhhbXBsZVxuICogdmFyIGZlYXR1cmVzID0gdHVyZi5mZWF0dXJlQ29sbGVjdGlvbihbXG4gKiAgICAgdHVyZi5wb2ludChbMjYsIDM3XSwge2ZvbzogJ2Jhcid9KSxcbiAqICAgICB0dXJmLnBvaW50KFszNiwgNTNdLCB7aGVsbG86ICd3b3JsZCd9KVxuICogXSk7XG4gKlxuICogdHVyZi5nZW9tRWFjaChmZWF0dXJlcywgZnVuY3Rpb24gKGN1cnJlbnRHZW9tZXRyeSwgZmVhdHVyZUluZGV4LCBmZWF0dXJlUHJvcGVydGllcywgZmVhdHVyZUJCb3gsIGZlYXR1cmVJZCkge1xuICogICAvLz1jdXJyZW50R2VvbWV0cnlcbiAqICAgLy89ZmVhdHVyZUluZGV4XG4gKiAgIC8vPWZlYXR1cmVQcm9wZXJ0aWVzXG4gKiAgIC8vPWZlYXR1cmVCQm94XG4gKiAgIC8vPWZlYXR1cmVJZFxuICogfSk7XG4gKi9cblxuXG5mdW5jdGlvbiBnZW9tRWFjaChnZW9qc29uLCBjYWxsYmFjaykge1xuICB2YXIgaSxcbiAgICAgIGosXG4gICAgICBnLFxuICAgICAgZ2VvbWV0cnksXG4gICAgICBzdG9wRyxcbiAgICAgIGdlb21ldHJ5TWF5YmVDb2xsZWN0aW9uLFxuICAgICAgaXNHZW9tZXRyeUNvbGxlY3Rpb24sXG4gICAgICBmZWF0dXJlUHJvcGVydGllcyxcbiAgICAgIGZlYXR1cmVCQm94LFxuICAgICAgZmVhdHVyZUlkLFxuICAgICAgZmVhdHVyZUluZGV4ID0gMCxcbiAgICAgIGlzRmVhdHVyZUNvbGxlY3Rpb24gPSBnZW9qc29uLnR5cGUgPT09IFwiRmVhdHVyZUNvbGxlY3Rpb25cIixcbiAgICAgIGlzRmVhdHVyZSA9IGdlb2pzb24udHlwZSA9PT0gXCJGZWF0dXJlXCIsXG4gICAgICBzdG9wID0gaXNGZWF0dXJlQ29sbGVjdGlvbiA/IGdlb2pzb24uZmVhdHVyZXMubGVuZ3RoIDogMTsgLy8gVGhpcyBsb2dpYyBtYXkgbG9vayBhIGxpdHRsZSB3ZWlyZC4gVGhlIHJlYXNvbiB3aHkgaXQgaXMgdGhhdCB3YXlcbiAgLy8gaXMgYmVjYXVzZSBpdCdzIHRyeWluZyB0byBiZSBmYXN0LiBHZW9KU09OIHN1cHBvcnRzIG11bHRpcGxlIGtpbmRzXG4gIC8vIG9mIG9iamVjdHMgYXQgaXRzIHJvb3Q6IEZlYXR1cmVDb2xsZWN0aW9uLCBGZWF0dXJlcywgR2VvbWV0cmllcy5cbiAgLy8gVGhpcyBmdW5jdGlvbiBoYXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIGhhbmRsaW5nIGFsbCBvZiB0aGVtLCBhbmQgdGhhdFxuICAvLyBtZWFucyB0aGF0IHNvbWUgb2YgdGhlIGBmb3JgIGxvb3BzIHlvdSBzZWUgYmVsb3cgYWN0dWFsbHkganVzdCBkb24ndCBhcHBseVxuICAvLyB0byBjZXJ0YWluIGlucHV0cy4gRm9yIGluc3RhbmNlLCBpZiB5b3UgZ2l2ZSB0aGlzIGp1c3QgYVxuICAvLyBQb2ludCBnZW9tZXRyeSwgdGhlbiBib3RoIGxvb3BzIGFyZSBzaG9ydC1jaXJjdWl0ZWQgYW5kIGFsbCB3ZSBkb1xuICAvLyBpcyBncmFkdWFsbHkgcmVuYW1lIHRoZSBpbnB1dCB1bnRpbCBpdCdzIGNhbGxlZCAnZ2VvbWV0cnknLlxuICAvL1xuICAvLyBUaGlzIGFsc28gYWltcyB0byBhbGxvY2F0ZSBhcyBmZXcgcmVzb3VyY2VzIGFzIHBvc3NpYmxlOiBqdXN0IGFcbiAgLy8gZmV3IG51bWJlcnMgYW5kIGJvb2xlYW5zLCByYXRoZXIgdGhhbiBhbnkgdGVtcG9yYXJ5IGFycmF5cyBhcyB3b3VsZFxuICAvLyBiZSByZXF1aXJlZCB3aXRoIHRoZSBub3JtYWxpemF0aW9uIGFwcHJvYWNoLlxuXG4gIGZvciAoaSA9IDA7IGkgPCBzdG9wOyBpKyspIHtcbiAgICBnZW9tZXRyeU1heWJlQ29sbGVjdGlvbiA9IGlzRmVhdHVyZUNvbGxlY3Rpb24gPyBnZW9qc29uLmZlYXR1cmVzW2ldLmdlb21ldHJ5IDogaXNGZWF0dXJlID8gZ2VvanNvbi5nZW9tZXRyeSA6IGdlb2pzb247XG4gICAgZmVhdHVyZVByb3BlcnRpZXMgPSBpc0ZlYXR1cmVDb2xsZWN0aW9uID8gZ2VvanNvbi5mZWF0dXJlc1tpXS5wcm9wZXJ0aWVzIDogaXNGZWF0dXJlID8gZ2VvanNvbi5wcm9wZXJ0aWVzIDoge307XG4gICAgZmVhdHVyZUJCb3ggPSBpc0ZlYXR1cmVDb2xsZWN0aW9uID8gZ2VvanNvbi5mZWF0dXJlc1tpXS5iYm94IDogaXNGZWF0dXJlID8gZ2VvanNvbi5iYm94IDogdW5kZWZpbmVkO1xuICAgIGZlYXR1cmVJZCA9IGlzRmVhdHVyZUNvbGxlY3Rpb24gPyBnZW9qc29uLmZlYXR1cmVzW2ldLmlkIDogaXNGZWF0dXJlID8gZ2VvanNvbi5pZCA6IHVuZGVmaW5lZDtcbiAgICBpc0dlb21ldHJ5Q29sbGVjdGlvbiA9IGdlb21ldHJ5TWF5YmVDb2xsZWN0aW9uID8gZ2VvbWV0cnlNYXliZUNvbGxlY3Rpb24udHlwZSA9PT0gXCJHZW9tZXRyeUNvbGxlY3Rpb25cIiA6IGZhbHNlO1xuICAgIHN0b3BHID0gaXNHZW9tZXRyeUNvbGxlY3Rpb24gPyBnZW9tZXRyeU1heWJlQ29sbGVjdGlvbi5nZW9tZXRyaWVzLmxlbmd0aCA6IDE7XG5cbiAgICBmb3IgKGcgPSAwOyBnIDwgc3RvcEc7IGcrKykge1xuICAgICAgZ2VvbWV0cnkgPSBpc0dlb21ldHJ5Q29sbGVjdGlvbiA/IGdlb21ldHJ5TWF5YmVDb2xsZWN0aW9uLmdlb21ldHJpZXNbZ10gOiBnZW9tZXRyeU1heWJlQ29sbGVjdGlvbjsgLy8gSGFuZGxlIG51bGwgR2VvbWV0cnlcblxuICAgICAgaWYgKGdlb21ldHJ5ID09PSBudWxsKSB7XG4gICAgICAgIGlmIChjYWxsYmFjayhudWxsLCBmZWF0dXJlSW5kZXgsIGZlYXR1cmVQcm9wZXJ0aWVzLCBmZWF0dXJlQkJveCwgZmVhdHVyZUlkKSA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAoZ2VvbWV0cnkudHlwZSkge1xuICAgICAgICBjYXNlIFwiUG9pbnRcIjpcbiAgICAgICAgY2FzZSBcIkxpbmVTdHJpbmdcIjpcbiAgICAgICAgY2FzZSBcIk11bHRpUG9pbnRcIjpcbiAgICAgICAgY2FzZSBcIlBvbHlnb25cIjpcbiAgICAgICAgY2FzZSBcIk11bHRpTGluZVN0cmluZ1wiOlxuICAgICAgICBjYXNlIFwiTXVsdGlQb2x5Z29uXCI6XG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKGNhbGxiYWNrKGdlb21ldHJ5LCBmZWF0dXJlSW5kZXgsIGZlYXR1cmVQcm9wZXJ0aWVzLCBmZWF0dXJlQkJveCwgZmVhdHVyZUlkKSA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlIFwiR2VvbWV0cnlDb2xsZWN0aW9uXCI6XG4gICAgICAgICAge1xuICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGdlb21ldHJ5Lmdlb21ldHJpZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKGdlb21ldHJ5Lmdlb21ldHJpZXNbal0sIGZlYXR1cmVJbmRleCwgZmVhdHVyZVByb3BlcnRpZXMsIGZlYXR1cmVCQm94LCBmZWF0dXJlSWQpID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIEdlb21ldHJ5IFR5cGVcIik7XG4gICAgICB9XG4gICAgfSAvLyBPbmx5IGluY3JlYXNlIGBmZWF0dXJlSW5kZXhgIHBlciBlYWNoIGZlYXR1cmVcblxuXG4gICAgZmVhdHVyZUluZGV4Kys7XG4gIH1cbn1cbi8qKlxuICogQ2FsbGJhY2sgZm9yIGdlb21SZWR1Y2VcbiAqXG4gKiBUaGUgZmlyc3QgdGltZSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgY2FsbGVkLCB0aGUgdmFsdWVzIHByb3ZpZGVkIGFzIGFyZ3VtZW50cyBkZXBlbmRcbiAqIG9uIHdoZXRoZXIgdGhlIHJlZHVjZSBtZXRob2QgaGFzIGFuIGluaXRpYWxWYWx1ZSBhcmd1bWVudC5cbiAqXG4gKiBJZiBhbiBpbml0aWFsVmFsdWUgaXMgcHJvdmlkZWQgdG8gdGhlIHJlZHVjZSBtZXRob2Q6XG4gKiAgLSBUaGUgcHJldmlvdXNWYWx1ZSBhcmd1bWVudCBpcyBpbml0aWFsVmFsdWUuXG4gKiAgLSBUaGUgY3VycmVudFZhbHVlIGFyZ3VtZW50IGlzIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgZWxlbWVudCBwcmVzZW50IGluIHRoZSBhcnJheS5cbiAqXG4gKiBJZiBhbiBpbml0aWFsVmFsdWUgaXMgbm90IHByb3ZpZGVkOlxuICogIC0gVGhlIHByZXZpb3VzVmFsdWUgYXJndW1lbnQgaXMgdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBlbGVtZW50IHByZXNlbnQgaW4gdGhlIGFycmF5LlxuICogIC0gVGhlIGN1cnJlbnRWYWx1ZSBhcmd1bWVudCBpcyB0aGUgdmFsdWUgb2YgdGhlIHNlY29uZCBlbGVtZW50IHByZXNlbnQgaW4gdGhlIGFycmF5LlxuICpcbiAqIEBjYWxsYmFjayBnZW9tUmVkdWNlQ2FsbGJhY2tcbiAqIEBwYXJhbSB7Kn0gcHJldmlvdXNWYWx1ZSBUaGUgYWNjdW11bGF0ZWQgdmFsdWUgcHJldmlvdXNseSByZXR1cm5lZCBpbiB0aGUgbGFzdCBpbnZvY2F0aW9uXG4gKiBvZiB0aGUgY2FsbGJhY2ssIG9yIGluaXRpYWxWYWx1ZSwgaWYgc3VwcGxpZWQuXG4gKiBAcGFyYW0ge0dlb21ldHJ5fSBjdXJyZW50R2VvbWV0cnkgVGhlIGN1cnJlbnQgR2VvbWV0cnkgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtudW1iZXJ9IGZlYXR1cmVJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgRmVhdHVyZSBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge09iamVjdH0gZmVhdHVyZVByb3BlcnRpZXMgVGhlIGN1cnJlbnQgRmVhdHVyZSBQcm9wZXJ0aWVzIGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gZmVhdHVyZUJCb3ggVGhlIGN1cnJlbnQgRmVhdHVyZSBCQm94IGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gZmVhdHVyZUlkIFRoZSBjdXJyZW50IEZlYXR1cmUgSWQgYmVpbmcgcHJvY2Vzc2VkLlxuICovXG5cbi8qKlxuICogUmVkdWNlIGdlb21ldHJ5IGluIGFueSBHZW9KU09OIG9iamVjdCwgc2ltaWxhciB0byBBcnJheS5yZWR1Y2UoKS5cbiAqXG4gKiBAbmFtZSBnZW9tUmVkdWNlXG4gKiBAcGFyYW0ge0ZlYXR1cmVDb2xsZWN0aW9ufEZlYXR1cmV8R2VvbWV0cnl9IGdlb2pzb24gYW55IEdlb0pTT04gb2JqZWN0XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBhIG1ldGhvZCB0aGF0IHRha2VzIChwcmV2aW91c1ZhbHVlLCBjdXJyZW50R2VvbWV0cnksIGZlYXR1cmVJbmRleCwgZmVhdHVyZVByb3BlcnRpZXMsIGZlYXR1cmVCQm94LCBmZWF0dXJlSWQpXG4gKiBAcGFyYW0geyp9IFtpbml0aWFsVmFsdWVdIFZhbHVlIHRvIHVzZSBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIGZpcnN0IGNhbGwgb2YgdGhlIGNhbGxiYWNrLlxuICogQHJldHVybnMgeyp9IFRoZSB2YWx1ZSB0aGF0IHJlc3VsdHMgZnJvbSB0aGUgcmVkdWN0aW9uLlxuICogQGV4YW1wbGVcbiAqIHZhciBmZWF0dXJlcyA9IHR1cmYuZmVhdHVyZUNvbGxlY3Rpb24oW1xuICogICAgIHR1cmYucG9pbnQoWzI2LCAzN10sIHtmb286ICdiYXInfSksXG4gKiAgICAgdHVyZi5wb2ludChbMzYsIDUzXSwge2hlbGxvOiAnd29ybGQnfSlcbiAqIF0pO1xuICpcbiAqIHR1cmYuZ2VvbVJlZHVjZShmZWF0dXJlcywgZnVuY3Rpb24gKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRHZW9tZXRyeSwgZmVhdHVyZUluZGV4LCBmZWF0dXJlUHJvcGVydGllcywgZmVhdHVyZUJCb3gsIGZlYXR1cmVJZCkge1xuICogICAvLz1wcmV2aW91c1ZhbHVlXG4gKiAgIC8vPWN1cnJlbnRHZW9tZXRyeVxuICogICAvLz1mZWF0dXJlSW5kZXhcbiAqICAgLy89ZmVhdHVyZVByb3BlcnRpZXNcbiAqICAgLy89ZmVhdHVyZUJCb3hcbiAqICAgLy89ZmVhdHVyZUlkXG4gKiAgIHJldHVybiBjdXJyZW50R2VvbWV0cnlcbiAqIH0pO1xuICovXG5cblxuZnVuY3Rpb24gZ2VvbVJlZHVjZShnZW9qc29uLCBjYWxsYmFjaywgaW5pdGlhbFZhbHVlKSB7XG4gIHZhciBwcmV2aW91c1ZhbHVlID0gaW5pdGlhbFZhbHVlO1xuICBnZW9tRWFjaChnZW9qc29uLCBmdW5jdGlvbiAoY3VycmVudEdlb21ldHJ5LCBmZWF0dXJlSW5kZXgsIGZlYXR1cmVQcm9wZXJ0aWVzLCBmZWF0dXJlQkJveCwgZmVhdHVyZUlkKSB7XG4gICAgaWYgKGZlYXR1cmVJbmRleCA9PT0gMCAmJiBpbml0aWFsVmFsdWUgPT09IHVuZGVmaW5lZCkgcHJldmlvdXNWYWx1ZSA9IGN1cnJlbnRHZW9tZXRyeTtlbHNlIHByZXZpb3VzVmFsdWUgPSBjYWxsYmFjayhwcmV2aW91c1ZhbHVlLCBjdXJyZW50R2VvbWV0cnksIGZlYXR1cmVJbmRleCwgZmVhdHVyZVByb3BlcnRpZXMsIGZlYXR1cmVCQm94LCBmZWF0dXJlSWQpO1xuICB9KTtcbiAgcmV0dXJuIHByZXZpb3VzVmFsdWU7XG59XG4vKipcbiAqIENhbGxiYWNrIGZvciBmbGF0dGVuRWFjaFxuICpcbiAqIEBjYWxsYmFjayBmbGF0dGVuRWFjaENhbGxiYWNrXG4gKiBAcGFyYW0ge0ZlYXR1cmV9IGN1cnJlbnRGZWF0dXJlIFRoZSBjdXJyZW50IGZsYXR0ZW5lZCBmZWF0dXJlIGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmZWF0dXJlSW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIEZlYXR1cmUgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtudW1iZXJ9IG11bHRpRmVhdHVyZUluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBNdWx0aS1GZWF0dXJlIGJlaW5nIHByb2Nlc3NlZC5cbiAqL1xuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBmbGF0dGVuZWQgZmVhdHVyZXMgaW4gYW55IEdlb0pTT04gb2JqZWN0LCBzaW1pbGFyIHRvXG4gKiBBcnJheS5mb3JFYWNoLlxuICpcbiAqIEBuYW1lIGZsYXR0ZW5FYWNoXG4gKiBAcGFyYW0ge0ZlYXR1cmVDb2xsZWN0aW9ufEZlYXR1cmV8R2VvbWV0cnl9IGdlb2pzb24gYW55IEdlb0pTT04gb2JqZWN0XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBhIG1ldGhvZCB0aGF0IHRha2VzIChjdXJyZW50RmVhdHVyZSwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleClcbiAqIEBleGFtcGxlXG4gKiB2YXIgZmVhdHVyZXMgPSB0dXJmLmZlYXR1cmVDb2xsZWN0aW9uKFtcbiAqICAgICB0dXJmLnBvaW50KFsyNiwgMzddLCB7Zm9vOiAnYmFyJ30pLFxuICogICAgIHR1cmYubXVsdGlQb2ludChbWzQwLCAzMF0sIFszNiwgNTNdXSwge2hlbGxvOiAnd29ybGQnfSlcbiAqIF0pO1xuICpcbiAqIHR1cmYuZmxhdHRlbkVhY2goZmVhdHVyZXMsIGZ1bmN0aW9uIChjdXJyZW50RmVhdHVyZSwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCkge1xuICogICAvLz1jdXJyZW50RmVhdHVyZVxuICogICAvLz1mZWF0dXJlSW5kZXhcbiAqICAgLy89bXVsdGlGZWF0dXJlSW5kZXhcbiAqIH0pO1xuICovXG5cblxuZnVuY3Rpb24gZmxhdHRlbkVhY2goZ2VvanNvbiwgY2FsbGJhY2spIHtcbiAgZ2VvbUVhY2goZ2VvanNvbiwgZnVuY3Rpb24gKGdlb21ldHJ5LCBmZWF0dXJlSW5kZXgsIHByb3BlcnRpZXMsIGJib3gsIGlkKSB7XG4gICAgLy8gQ2FsbGJhY2sgZm9yIHNpbmdsZSBnZW9tZXRyeVxuICAgIHZhciB0eXBlID0gZ2VvbWV0cnkgPT09IG51bGwgPyBudWxsIDogZ2VvbWV0cnkudHlwZTtcblxuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBudWxsOlxuICAgICAgY2FzZSBcIlBvaW50XCI6XG4gICAgICBjYXNlIFwiTGluZVN0cmluZ1wiOlxuICAgICAgY2FzZSBcIlBvbHlnb25cIjpcbiAgICAgICAgaWYgKGNhbGxiYWNrKGZlYXR1cmUoZ2VvbWV0cnksIHByb3BlcnRpZXMsIHtcbiAgICAgICAgICBiYm94OiBiYm94LFxuICAgICAgICAgIGlkOiBpZFxuICAgICAgICB9KSwgZmVhdHVyZUluZGV4LCAwKSA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBnZW9tVHlwZTsgLy8gQ2FsbGJhY2sgZm9yIG11bHRpLWdlb21ldHJ5XG5cbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgXCJNdWx0aVBvaW50XCI6XG4gICAgICAgIGdlb21UeXBlID0gXCJQb2ludFwiO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcIk11bHRpTGluZVN0cmluZ1wiOlxuICAgICAgICBnZW9tVHlwZSA9IFwiTGluZVN0cmluZ1wiO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcIk11bHRpUG9seWdvblwiOlxuICAgICAgICBnZW9tVHlwZSA9IFwiUG9seWdvblwiO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBmb3IgKHZhciBtdWx0aUZlYXR1cmVJbmRleCA9IDA7IG11bHRpRmVhdHVyZUluZGV4IDwgZ2VvbWV0cnkuY29vcmRpbmF0ZXMubGVuZ3RoOyBtdWx0aUZlYXR1cmVJbmRleCsrKSB7XG4gICAgICB2YXIgY29vcmRpbmF0ZSA9IGdlb21ldHJ5LmNvb3JkaW5hdGVzW211bHRpRmVhdHVyZUluZGV4XTtcbiAgICAgIHZhciBnZW9tID0ge1xuICAgICAgICB0eXBlOiBnZW9tVHlwZSxcbiAgICAgICAgY29vcmRpbmF0ZXM6IGNvb3JkaW5hdGVcbiAgICAgIH07XG4gICAgICBpZiAoY2FsbGJhY2soZmVhdHVyZShnZW9tLCBwcm9wZXJ0aWVzKSwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCkgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9KTtcbn1cbi8qKlxuICogQ2FsbGJhY2sgZm9yIGZsYXR0ZW5SZWR1Y2VcbiAqXG4gKiBUaGUgZmlyc3QgdGltZSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgY2FsbGVkLCB0aGUgdmFsdWVzIHByb3ZpZGVkIGFzIGFyZ3VtZW50cyBkZXBlbmRcbiAqIG9uIHdoZXRoZXIgdGhlIHJlZHVjZSBtZXRob2QgaGFzIGFuIGluaXRpYWxWYWx1ZSBhcmd1bWVudC5cbiAqXG4gKiBJZiBhbiBpbml0aWFsVmFsdWUgaXMgcHJvdmlkZWQgdG8gdGhlIHJlZHVjZSBtZXRob2Q6XG4gKiAgLSBUaGUgcHJldmlvdXNWYWx1ZSBhcmd1bWVudCBpcyBpbml0aWFsVmFsdWUuXG4gKiAgLSBUaGUgY3VycmVudFZhbHVlIGFyZ3VtZW50IGlzIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgZWxlbWVudCBwcmVzZW50IGluIHRoZSBhcnJheS5cbiAqXG4gKiBJZiBhbiBpbml0aWFsVmFsdWUgaXMgbm90IHByb3ZpZGVkOlxuICogIC0gVGhlIHByZXZpb3VzVmFsdWUgYXJndW1lbnQgaXMgdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBlbGVtZW50IHByZXNlbnQgaW4gdGhlIGFycmF5LlxuICogIC0gVGhlIGN1cnJlbnRWYWx1ZSBhcmd1bWVudCBpcyB0aGUgdmFsdWUgb2YgdGhlIHNlY29uZCBlbGVtZW50IHByZXNlbnQgaW4gdGhlIGFycmF5LlxuICpcbiAqIEBjYWxsYmFjayBmbGF0dGVuUmVkdWNlQ2FsbGJhY2tcbiAqIEBwYXJhbSB7Kn0gcHJldmlvdXNWYWx1ZSBUaGUgYWNjdW11bGF0ZWQgdmFsdWUgcHJldmlvdXNseSByZXR1cm5lZCBpbiB0aGUgbGFzdCBpbnZvY2F0aW9uXG4gKiBvZiB0aGUgY2FsbGJhY2ssIG9yIGluaXRpYWxWYWx1ZSwgaWYgc3VwcGxpZWQuXG4gKiBAcGFyYW0ge0ZlYXR1cmV9IGN1cnJlbnRGZWF0dXJlIFRoZSBjdXJyZW50IEZlYXR1cmUgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtudW1iZXJ9IGZlYXR1cmVJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgRmVhdHVyZSBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gbXVsdGlGZWF0dXJlSW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIE11bHRpLUZlYXR1cmUgYmVpbmcgcHJvY2Vzc2VkLlxuICovXG5cbi8qKlxuICogUmVkdWNlIGZsYXR0ZW5lZCBmZWF0dXJlcyBpbiBhbnkgR2VvSlNPTiBvYmplY3QsIHNpbWlsYXIgdG8gQXJyYXkucmVkdWNlKCkuXG4gKlxuICogQG5hbWUgZmxhdHRlblJlZHVjZVxuICogQHBhcmFtIHtGZWF0dXJlQ29sbGVjdGlvbnxGZWF0dXJlfEdlb21ldHJ5fSBnZW9qc29uIGFueSBHZW9KU09OIG9iamVjdFxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgYSBtZXRob2QgdGhhdCB0YWtlcyAocHJldmlvdXNWYWx1ZSwgY3VycmVudEZlYXR1cmUsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgpXG4gKiBAcGFyYW0geyp9IFtpbml0aWFsVmFsdWVdIFZhbHVlIHRvIHVzZSBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIGZpcnN0IGNhbGwgb2YgdGhlIGNhbGxiYWNrLlxuICogQHJldHVybnMgeyp9IFRoZSB2YWx1ZSB0aGF0IHJlc3VsdHMgZnJvbSB0aGUgcmVkdWN0aW9uLlxuICogQGV4YW1wbGVcbiAqIHZhciBmZWF0dXJlcyA9IHR1cmYuZmVhdHVyZUNvbGxlY3Rpb24oW1xuICogICAgIHR1cmYucG9pbnQoWzI2LCAzN10sIHtmb286ICdiYXInfSksXG4gKiAgICAgdHVyZi5tdWx0aVBvaW50KFtbNDAsIDMwXSwgWzM2LCA1M11dLCB7aGVsbG86ICd3b3JsZCd9KVxuICogXSk7XG4gKlxuICogdHVyZi5mbGF0dGVuUmVkdWNlKGZlYXR1cmVzLCBmdW5jdGlvbiAocHJldmlvdXNWYWx1ZSwgY3VycmVudEZlYXR1cmUsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgpIHtcbiAqICAgLy89cHJldmlvdXNWYWx1ZVxuICogICAvLz1jdXJyZW50RmVhdHVyZVxuICogICAvLz1mZWF0dXJlSW5kZXhcbiAqICAgLy89bXVsdGlGZWF0dXJlSW5kZXhcbiAqICAgcmV0dXJuIGN1cnJlbnRGZWF0dXJlXG4gKiB9KTtcbiAqL1xuXG5cbmZ1bmN0aW9uIGZsYXR0ZW5SZWR1Y2UoZ2VvanNvbiwgY2FsbGJhY2ssIGluaXRpYWxWYWx1ZSkge1xuICB2YXIgcHJldmlvdXNWYWx1ZSA9IGluaXRpYWxWYWx1ZTtcbiAgZmxhdHRlbkVhY2goZ2VvanNvbiwgZnVuY3Rpb24gKGN1cnJlbnRGZWF0dXJlLCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4KSB7XG4gICAgaWYgKGZlYXR1cmVJbmRleCA9PT0gMCAmJiBtdWx0aUZlYXR1cmVJbmRleCA9PT0gMCAmJiBpbml0aWFsVmFsdWUgPT09IHVuZGVmaW5lZCkgcHJldmlvdXNWYWx1ZSA9IGN1cnJlbnRGZWF0dXJlO2Vsc2UgcHJldmlvdXNWYWx1ZSA9IGNhbGxiYWNrKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRGZWF0dXJlLCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4KTtcbiAgfSk7XG4gIHJldHVybiBwcmV2aW91c1ZhbHVlO1xufVxuLyoqXG4gKiBDYWxsYmFjayBmb3Igc2VnbWVudEVhY2hcbiAqXG4gKiBAY2FsbGJhY2sgc2VnbWVudEVhY2hDYWxsYmFja1xuICogQHBhcmFtIHtGZWF0dXJlPExpbmVTdHJpbmc+fSBjdXJyZW50U2VnbWVudCBUaGUgY3VycmVudCBTZWdtZW50IGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmZWF0dXJlSW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIEZlYXR1cmUgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtudW1iZXJ9IG11bHRpRmVhdHVyZUluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBNdWx0aS1GZWF0dXJlIGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBnZW9tZXRyeUluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBHZW9tZXRyeSBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gc2VnbWVudEluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBTZWdtZW50IGJlaW5nIHByb2Nlc3NlZC5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIDItdmVydGV4IGxpbmUgc2VnbWVudCBpbiBhbnkgR2VvSlNPTiBvYmplY3QsIHNpbWlsYXIgdG8gQXJyYXkuZm9yRWFjaCgpXG4gKiAoTXVsdGkpUG9pbnQgZ2VvbWV0cmllcyBkbyBub3QgY29udGFpbiBzZWdtZW50cyB0aGVyZWZvcmUgdGhleSBhcmUgaWdub3JlZCBkdXJpbmcgdGhpcyBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHtGZWF0dXJlQ29sbGVjdGlvbnxGZWF0dXJlfEdlb21ldHJ5fSBnZW9qc29uIGFueSBHZW9KU09OXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBhIG1ldGhvZCB0aGF0IHRha2VzIChjdXJyZW50U2VnbWVudCwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCwgZ2VvbWV0cnlJbmRleCwgc2VnbWVudEluZGV4KVxuICogQHJldHVybnMge3ZvaWR9XG4gKiBAZXhhbXBsZVxuICogdmFyIHBvbHlnb24gPSB0dXJmLnBvbHlnb24oW1tbLTUwLCA1XSwgWy00MCwgLTEwXSwgWy01MCwgLTEwXSwgWy00MCwgNV0sIFstNTAsIDVdXV0pO1xuICpcbiAqIC8vIEl0ZXJhdGUgb3ZlciBHZW9KU09OIGJ5IDItdmVydGV4IHNlZ21lbnRzXG4gKiB0dXJmLnNlZ21lbnRFYWNoKHBvbHlnb24sIGZ1bmN0aW9uIChjdXJyZW50U2VnbWVudCwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCwgZ2VvbWV0cnlJbmRleCwgc2VnbWVudEluZGV4KSB7XG4gKiAgIC8vPWN1cnJlbnRTZWdtZW50XG4gKiAgIC8vPWZlYXR1cmVJbmRleFxuICogICAvLz1tdWx0aUZlYXR1cmVJbmRleFxuICogICAvLz1nZW9tZXRyeUluZGV4XG4gKiAgIC8vPXNlZ21lbnRJbmRleFxuICogfSk7XG4gKlxuICogLy8gQ2FsY3VsYXRlIHRoZSB0b3RhbCBudW1iZXIgb2Ygc2VnbWVudHNcbiAqIHZhciB0b3RhbCA9IDA7XG4gKiB0dXJmLnNlZ21lbnRFYWNoKHBvbHlnb24sIGZ1bmN0aW9uICgpIHtcbiAqICAgICB0b3RhbCsrO1xuICogfSk7XG4gKi9cblxuXG5mdW5jdGlvbiBzZWdtZW50RWFjaChnZW9qc29uLCBjYWxsYmFjaykge1xuICBmbGF0dGVuRWFjaChnZW9qc29uLCBmdW5jdGlvbiAoZmVhdHVyZSwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCkge1xuICAgIHZhciBzZWdtZW50SW5kZXggPSAwOyAvLyBFeGNsdWRlIG51bGwgR2VvbWV0cmllc1xuXG4gICAgaWYgKCFmZWF0dXJlLmdlb21ldHJ5KSByZXR1cm47IC8vIChNdWx0aSlQb2ludCBnZW9tZXRyaWVzIGRvIG5vdCBjb250YWluIHNlZ21lbnRzIHRoZXJlZm9yZSB0aGV5IGFyZSBpZ25vcmVkIGR1cmluZyB0aGlzIG9wZXJhdGlvbi5cblxuICAgIHZhciB0eXBlID0gZmVhdHVyZS5nZW9tZXRyeS50eXBlO1xuICAgIGlmICh0eXBlID09PSBcIlBvaW50XCIgfHwgdHlwZSA9PT0gXCJNdWx0aVBvaW50XCIpIHJldHVybjsgLy8gR2VuZXJhdGUgMi12ZXJ0ZXggbGluZSBzZWdtZW50c1xuXG4gICAgdmFyIHByZXZpb3VzQ29vcmRzO1xuICAgIHZhciBwcmV2aW91c0ZlYXR1cmVJbmRleCA9IDA7XG4gICAgdmFyIHByZXZpb3VzTXVsdGlJbmRleCA9IDA7XG4gICAgdmFyIHByZXZHZW9tSW5kZXggPSAwO1xuICAgIGlmIChjb29yZEVhY2goZmVhdHVyZSwgZnVuY3Rpb24gKGN1cnJlbnRDb29yZCwgY29vcmRJbmRleCwgZmVhdHVyZUluZGV4Q29vcmQsIG11bHRpUGFydEluZGV4Q29vcmQsIGdlb21ldHJ5SW5kZXgpIHtcbiAgICAgIC8vIFNpbXVsYXRpbmcgYSBtZXRhLmNvb3JkUmVkdWNlKCkgc2luY2UgYHJlZHVjZWAgb3BlcmF0aW9ucyBjYW5ub3QgYmUgc3RvcHBlZCBieSByZXR1cm5pbmcgYGZhbHNlYFxuICAgICAgaWYgKHByZXZpb3VzQ29vcmRzID09PSB1bmRlZmluZWQgfHwgZmVhdHVyZUluZGV4ID4gcHJldmlvdXNGZWF0dXJlSW5kZXggfHwgbXVsdGlQYXJ0SW5kZXhDb29yZCA+IHByZXZpb3VzTXVsdGlJbmRleCB8fCBnZW9tZXRyeUluZGV4ID4gcHJldkdlb21JbmRleCkge1xuICAgICAgICBwcmV2aW91c0Nvb3JkcyA9IGN1cnJlbnRDb29yZDtcbiAgICAgICAgcHJldmlvdXNGZWF0dXJlSW5kZXggPSBmZWF0dXJlSW5kZXg7XG4gICAgICAgIHByZXZpb3VzTXVsdGlJbmRleCA9IG11bHRpUGFydEluZGV4Q29vcmQ7XG4gICAgICAgIHByZXZHZW9tSW5kZXggPSBnZW9tZXRyeUluZGV4O1xuICAgICAgICBzZWdtZW50SW5kZXggPSAwO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBjdXJyZW50U2VnbWVudCA9IGxpbmVTdHJpbmcoW3ByZXZpb3VzQ29vcmRzLCBjdXJyZW50Q29vcmRdLCBmZWF0dXJlLnByb3BlcnRpZXMpO1xuICAgICAgaWYgKGNhbGxiYWNrKGN1cnJlbnRTZWdtZW50LCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4LCBnZW9tZXRyeUluZGV4LCBzZWdtZW50SW5kZXgpID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgc2VnbWVudEluZGV4Kys7XG4gICAgICBwcmV2aW91c0Nvb3JkcyA9IGN1cnJlbnRDb29yZDtcbiAgICB9KSA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcbiAgfSk7XG59XG4vKipcbiAqIENhbGxiYWNrIGZvciBzZWdtZW50UmVkdWNlXG4gKlxuICogVGhlIGZpcnN0IHRpbWUgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZCwgdGhlIHZhbHVlcyBwcm92aWRlZCBhcyBhcmd1bWVudHMgZGVwZW5kXG4gKiBvbiB3aGV0aGVyIHRoZSByZWR1Y2UgbWV0aG9kIGhhcyBhbiBpbml0aWFsVmFsdWUgYXJndW1lbnQuXG4gKlxuICogSWYgYW4gaW5pdGlhbFZhbHVlIGlzIHByb3ZpZGVkIHRvIHRoZSByZWR1Y2UgbWV0aG9kOlxuICogIC0gVGhlIHByZXZpb3VzVmFsdWUgYXJndW1lbnQgaXMgaW5pdGlhbFZhbHVlLlxuICogIC0gVGhlIGN1cnJlbnRWYWx1ZSBhcmd1bWVudCBpcyB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0IGVsZW1lbnQgcHJlc2VudCBpbiB0aGUgYXJyYXkuXG4gKlxuICogSWYgYW4gaW5pdGlhbFZhbHVlIGlzIG5vdCBwcm92aWRlZDpcbiAqICAtIFRoZSBwcmV2aW91c1ZhbHVlIGFyZ3VtZW50IGlzIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgZWxlbWVudCBwcmVzZW50IGluIHRoZSBhcnJheS5cbiAqICAtIFRoZSBjdXJyZW50VmFsdWUgYXJndW1lbnQgaXMgdGhlIHZhbHVlIG9mIHRoZSBzZWNvbmQgZWxlbWVudCBwcmVzZW50IGluIHRoZSBhcnJheS5cbiAqXG4gKiBAY2FsbGJhY2sgc2VnbWVudFJlZHVjZUNhbGxiYWNrXG4gKiBAcGFyYW0geyp9IHByZXZpb3VzVmFsdWUgVGhlIGFjY3VtdWxhdGVkIHZhbHVlIHByZXZpb3VzbHkgcmV0dXJuZWQgaW4gdGhlIGxhc3QgaW52b2NhdGlvblxuICogb2YgdGhlIGNhbGxiYWNrLCBvciBpbml0aWFsVmFsdWUsIGlmIHN1cHBsaWVkLlxuICogQHBhcmFtIHtGZWF0dXJlPExpbmVTdHJpbmc+fSBjdXJyZW50U2VnbWVudCBUaGUgY3VycmVudCBTZWdtZW50IGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmZWF0dXJlSW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIEZlYXR1cmUgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtudW1iZXJ9IG11bHRpRmVhdHVyZUluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBNdWx0aS1GZWF0dXJlIGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBnZW9tZXRyeUluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBHZW9tZXRyeSBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gc2VnbWVudEluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBTZWdtZW50IGJlaW5nIHByb2Nlc3NlZC5cbiAqL1xuXG4vKipcbiAqIFJlZHVjZSAyLXZlcnRleCBsaW5lIHNlZ21lbnQgaW4gYW55IEdlb0pTT04gb2JqZWN0LCBzaW1pbGFyIHRvIEFycmF5LnJlZHVjZSgpXG4gKiAoTXVsdGkpUG9pbnQgZ2VvbWV0cmllcyBkbyBub3QgY29udGFpbiBzZWdtZW50cyB0aGVyZWZvcmUgdGhleSBhcmUgaWdub3JlZCBkdXJpbmcgdGhpcyBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHtGZWF0dXJlQ29sbGVjdGlvbnxGZWF0dXJlfEdlb21ldHJ5fSBnZW9qc29uIGFueSBHZW9KU09OXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBhIG1ldGhvZCB0aGF0IHRha2VzIChwcmV2aW91c1ZhbHVlLCBjdXJyZW50U2VnbWVudCwgY3VycmVudEluZGV4KVxuICogQHBhcmFtIHsqfSBbaW5pdGlhbFZhbHVlXSBWYWx1ZSB0byB1c2UgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBmaXJzdCBjYWxsIG9mIHRoZSBjYWxsYmFjay5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICogQGV4YW1wbGVcbiAqIHZhciBwb2x5Z29uID0gdHVyZi5wb2x5Z29uKFtbWy01MCwgNV0sIFstNDAsIC0xMF0sIFstNTAsIC0xMF0sIFstNDAsIDVdLCBbLTUwLCA1XV1dKTtcbiAqXG4gKiAvLyBJdGVyYXRlIG92ZXIgR2VvSlNPTiBieSAyLXZlcnRleCBzZWdtZW50c1xuICogdHVyZi5zZWdtZW50UmVkdWNlKHBvbHlnb24sIGZ1bmN0aW9uIChwcmV2aW91c1NlZ21lbnQsIGN1cnJlbnRTZWdtZW50LCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4LCBnZW9tZXRyeUluZGV4LCBzZWdtZW50SW5kZXgpIHtcbiAqICAgLy89IHByZXZpb3VzU2VnbWVudFxuICogICAvLz0gY3VycmVudFNlZ21lbnRcbiAqICAgLy89IGZlYXR1cmVJbmRleFxuICogICAvLz0gbXVsdGlGZWF0dXJlSW5kZXhcbiAqICAgLy89IGdlb21ldHJ5SW5kZXhcbiAqICAgLy89IHNlZ21lbnRJbmRleFxuICogICByZXR1cm4gY3VycmVudFNlZ21lbnRcbiAqIH0pO1xuICpcbiAqIC8vIENhbGN1bGF0ZSB0aGUgdG90YWwgbnVtYmVyIG9mIHNlZ21lbnRzXG4gKiB2YXIgaW5pdGlhbFZhbHVlID0gMFxuICogdmFyIHRvdGFsID0gdHVyZi5zZWdtZW50UmVkdWNlKHBvbHlnb24sIGZ1bmN0aW9uIChwcmV2aW91c1ZhbHVlKSB7XG4gKiAgICAgcHJldmlvdXNWYWx1ZSsrO1xuICogICAgIHJldHVybiBwcmV2aW91c1ZhbHVlO1xuICogfSwgaW5pdGlhbFZhbHVlKTtcbiAqL1xuXG5cbmZ1bmN0aW9uIHNlZ21lbnRSZWR1Y2UoZ2VvanNvbiwgY2FsbGJhY2ssIGluaXRpYWxWYWx1ZSkge1xuICB2YXIgcHJldmlvdXNWYWx1ZSA9IGluaXRpYWxWYWx1ZTtcbiAgdmFyIHN0YXJ0ZWQgPSBmYWxzZTtcbiAgc2VnbWVudEVhY2goZ2VvanNvbiwgZnVuY3Rpb24gKGN1cnJlbnRTZWdtZW50LCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4LCBnZW9tZXRyeUluZGV4LCBzZWdtZW50SW5kZXgpIHtcbiAgICBpZiAoc3RhcnRlZCA9PT0gZmFsc2UgJiYgaW5pdGlhbFZhbHVlID09PSB1bmRlZmluZWQpIHByZXZpb3VzVmFsdWUgPSBjdXJyZW50U2VnbWVudDtlbHNlIHByZXZpb3VzVmFsdWUgPSBjYWxsYmFjayhwcmV2aW91c1ZhbHVlLCBjdXJyZW50U2VnbWVudCwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCwgZ2VvbWV0cnlJbmRleCwgc2VnbWVudEluZGV4KTtcbiAgICBzdGFydGVkID0gdHJ1ZTtcbiAgfSk7XG4gIHJldHVybiBwcmV2aW91c1ZhbHVlO1xufVxuLyoqXG4gKiBDYWxsYmFjayBmb3IgbGluZUVhY2hcbiAqXG4gKiBAY2FsbGJhY2sgbGluZUVhY2hDYWxsYmFja1xuICogQHBhcmFtIHtGZWF0dXJlPExpbmVTdHJpbmc+fSBjdXJyZW50TGluZSBUaGUgY3VycmVudCBMaW5lU3RyaW5nfExpbmVhclJpbmcgYmVpbmcgcHJvY2Vzc2VkXG4gKiBAcGFyYW0ge251bWJlcn0gZmVhdHVyZUluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBGZWF0dXJlIGJlaW5nIHByb2Nlc3NlZFxuICogQHBhcmFtIHtudW1iZXJ9IG11bHRpRmVhdHVyZUluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBNdWx0aS1GZWF0dXJlIGJlaW5nIHByb2Nlc3NlZFxuICogQHBhcmFtIHtudW1iZXJ9IGdlb21ldHJ5SW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIEdlb21ldHJ5IGJlaW5nIHByb2Nlc3NlZFxuICovXG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIGxpbmUgb3IgcmluZyBjb29yZGluYXRlcyBpbiBMaW5lU3RyaW5nLCBQb2x5Z29uLCBNdWx0aUxpbmVTdHJpbmcsIE11bHRpUG9seWdvbiBGZWF0dXJlcyBvciBHZW9tZXRyaWVzLFxuICogc2ltaWxhciB0byBBcnJheS5mb3JFYWNoLlxuICpcbiAqIEBuYW1lIGxpbmVFYWNoXG4gKiBAcGFyYW0ge0dlb21ldHJ5fEZlYXR1cmU8TGluZVN0cmluZ3xQb2x5Z29ufE11bHRpTGluZVN0cmluZ3xNdWx0aVBvbHlnb24+fSBnZW9qc29uIG9iamVjdFxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgYSBtZXRob2QgdGhhdCB0YWtlcyAoY3VycmVudExpbmUsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgsIGdlb21ldHJ5SW5kZXgpXG4gKiBAZXhhbXBsZVxuICogdmFyIG11bHRpTGluZSA9IHR1cmYubXVsdGlMaW5lU3RyaW5nKFtcbiAqICAgW1syNiwgMzddLCBbMzUsIDQ1XV0sXG4gKiAgIFtbMzYsIDUzXSwgWzM4LCA1MF0sIFs0MSwgNTVdXVxuICogXSk7XG4gKlxuICogdHVyZi5saW5lRWFjaChtdWx0aUxpbmUsIGZ1bmN0aW9uIChjdXJyZW50TGluZSwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCwgZ2VvbWV0cnlJbmRleCkge1xuICogICAvLz1jdXJyZW50TGluZVxuICogICAvLz1mZWF0dXJlSW5kZXhcbiAqICAgLy89bXVsdGlGZWF0dXJlSW5kZXhcbiAqICAgLy89Z2VvbWV0cnlJbmRleFxuICogfSk7XG4gKi9cblxuXG5mdW5jdGlvbiBsaW5lRWFjaChnZW9qc29uLCBjYWxsYmFjaykge1xuICAvLyB2YWxpZGF0aW9uXG4gIGlmICghZ2VvanNvbikgdGhyb3cgbmV3IEVycm9yKFwiZ2VvanNvbiBpcyByZXF1aXJlZFwiKTtcbiAgZmxhdHRlbkVhY2goZ2VvanNvbiwgZnVuY3Rpb24gKGZlYXR1cmUsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgpIHtcbiAgICBpZiAoZmVhdHVyZS5nZW9tZXRyeSA9PT0gbnVsbCkgcmV0dXJuO1xuICAgIHZhciB0eXBlID0gZmVhdHVyZS5nZW9tZXRyeS50eXBlO1xuICAgIHZhciBjb29yZHMgPSBmZWF0dXJlLmdlb21ldHJ5LmNvb3JkaW5hdGVzO1xuXG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIFwiTGluZVN0cmluZ1wiOlxuICAgICAgICBpZiAoY2FsbGJhY2soZmVhdHVyZSwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCwgMCwgMCkgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiUG9seWdvblwiOlxuICAgICAgICBmb3IgKHZhciBnZW9tZXRyeUluZGV4ID0gMDsgZ2VvbWV0cnlJbmRleCA8IGNvb3Jkcy5sZW5ndGg7IGdlb21ldHJ5SW5kZXgrKykge1xuICAgICAgICAgIGlmIChjYWxsYmFjayhsaW5lU3RyaW5nKGNvb3Jkc1tnZW9tZXRyeUluZGV4XSwgZmVhdHVyZS5wcm9wZXJ0aWVzKSwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCwgZ2VvbWV0cnlJbmRleCkgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH0pO1xufVxuLyoqXG4gKiBDYWxsYmFjayBmb3IgbGluZVJlZHVjZVxuICpcbiAqIFRoZSBmaXJzdCB0aW1lIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBjYWxsZWQsIHRoZSB2YWx1ZXMgcHJvdmlkZWQgYXMgYXJndW1lbnRzIGRlcGVuZFxuICogb24gd2hldGhlciB0aGUgcmVkdWNlIG1ldGhvZCBoYXMgYW4gaW5pdGlhbFZhbHVlIGFyZ3VtZW50LlxuICpcbiAqIElmIGFuIGluaXRpYWxWYWx1ZSBpcyBwcm92aWRlZCB0byB0aGUgcmVkdWNlIG1ldGhvZDpcbiAqICAtIFRoZSBwcmV2aW91c1ZhbHVlIGFyZ3VtZW50IGlzIGluaXRpYWxWYWx1ZS5cbiAqICAtIFRoZSBjdXJyZW50VmFsdWUgYXJndW1lbnQgaXMgdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBlbGVtZW50IHByZXNlbnQgaW4gdGhlIGFycmF5LlxuICpcbiAqIElmIGFuIGluaXRpYWxWYWx1ZSBpcyBub3QgcHJvdmlkZWQ6XG4gKiAgLSBUaGUgcHJldmlvdXNWYWx1ZSBhcmd1bWVudCBpcyB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0IGVsZW1lbnQgcHJlc2VudCBpbiB0aGUgYXJyYXkuXG4gKiAgLSBUaGUgY3VycmVudFZhbHVlIGFyZ3VtZW50IGlzIHRoZSB2YWx1ZSBvZiB0aGUgc2Vjb25kIGVsZW1lbnQgcHJlc2VudCBpbiB0aGUgYXJyYXkuXG4gKlxuICogQGNhbGxiYWNrIGxpbmVSZWR1Y2VDYWxsYmFja1xuICogQHBhcmFtIHsqfSBwcmV2aW91c1ZhbHVlIFRoZSBhY2N1bXVsYXRlZCB2YWx1ZSBwcmV2aW91c2x5IHJldHVybmVkIGluIHRoZSBsYXN0IGludm9jYXRpb25cbiAqIG9mIHRoZSBjYWxsYmFjaywgb3IgaW5pdGlhbFZhbHVlLCBpZiBzdXBwbGllZC5cbiAqIEBwYXJhbSB7RmVhdHVyZTxMaW5lU3RyaW5nPn0gY3VycmVudExpbmUgVGhlIGN1cnJlbnQgTGluZVN0cmluZ3xMaW5lYXJSaW5nIGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmZWF0dXJlSW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIEZlYXR1cmUgYmVpbmcgcHJvY2Vzc2VkXG4gKiBAcGFyYW0ge251bWJlcn0gbXVsdGlGZWF0dXJlSW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIE11bHRpLUZlYXR1cmUgYmVpbmcgcHJvY2Vzc2VkXG4gKiBAcGFyYW0ge251bWJlcn0gZ2VvbWV0cnlJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgR2VvbWV0cnkgYmVpbmcgcHJvY2Vzc2VkXG4gKi9cblxuLyoqXG4gKiBSZWR1Y2UgZmVhdHVyZXMgaW4gYW55IEdlb0pTT04gb2JqZWN0LCBzaW1pbGFyIHRvIEFycmF5LnJlZHVjZSgpLlxuICpcbiAqIEBuYW1lIGxpbmVSZWR1Y2VcbiAqIEBwYXJhbSB7R2VvbWV0cnl8RmVhdHVyZTxMaW5lU3RyaW5nfFBvbHlnb258TXVsdGlMaW5lU3RyaW5nfE11bHRpUG9seWdvbj59IGdlb2pzb24gb2JqZWN0XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBhIG1ldGhvZCB0aGF0IHRha2VzIChwcmV2aW91c1ZhbHVlLCBjdXJyZW50TGluZSwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCwgZ2VvbWV0cnlJbmRleClcbiAqIEBwYXJhbSB7Kn0gW2luaXRpYWxWYWx1ZV0gVmFsdWUgdG8gdXNlIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgZmlyc3QgY2FsbCBvZiB0aGUgY2FsbGJhY2suXG4gKiBAcmV0dXJucyB7Kn0gVGhlIHZhbHVlIHRoYXQgcmVzdWx0cyBmcm9tIHRoZSByZWR1Y3Rpb24uXG4gKiBAZXhhbXBsZVxuICogdmFyIG11bHRpUG9seSA9IHR1cmYubXVsdGlQb2x5Z29uKFtcbiAqICAgdHVyZi5wb2x5Z29uKFtbWzEyLDQ4XSxbMiw0MV0sWzI0LDM4XSxbMTIsNDhdXSwgW1s5LDQ0XSxbMTMsNDFdLFsxMyw0NV0sWzksNDRdXV0pLFxuICogICB0dXJmLnBvbHlnb24oW1tbNSwgNV0sIFswLCAwXSwgWzIsIDJdLCBbNCwgNF0sIFs1LCA1XV1dKVxuICogXSk7XG4gKlxuICogdHVyZi5saW5lUmVkdWNlKG11bHRpUG9seSwgZnVuY3Rpb24gKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRMaW5lLCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4LCBnZW9tZXRyeUluZGV4KSB7XG4gKiAgIC8vPXByZXZpb3VzVmFsdWVcbiAqICAgLy89Y3VycmVudExpbmVcbiAqICAgLy89ZmVhdHVyZUluZGV4XG4gKiAgIC8vPW11bHRpRmVhdHVyZUluZGV4XG4gKiAgIC8vPWdlb21ldHJ5SW5kZXhcbiAqICAgcmV0dXJuIGN1cnJlbnRMaW5lXG4gKiB9KTtcbiAqL1xuXG5cbmZ1bmN0aW9uIGxpbmVSZWR1Y2UoZ2VvanNvbiwgY2FsbGJhY2ssIGluaXRpYWxWYWx1ZSkge1xuICB2YXIgcHJldmlvdXNWYWx1ZSA9IGluaXRpYWxWYWx1ZTtcbiAgbGluZUVhY2goZ2VvanNvbiwgZnVuY3Rpb24gKGN1cnJlbnRMaW5lLCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4LCBnZW9tZXRyeUluZGV4KSB7XG4gICAgaWYgKGZlYXR1cmVJbmRleCA9PT0gMCAmJiBpbml0aWFsVmFsdWUgPT09IHVuZGVmaW5lZCkgcHJldmlvdXNWYWx1ZSA9IGN1cnJlbnRMaW5lO2Vsc2UgcHJldmlvdXNWYWx1ZSA9IGNhbGxiYWNrKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRMaW5lLCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4LCBnZW9tZXRyeUluZGV4KTtcbiAgfSk7XG4gIHJldHVybiBwcmV2aW91c1ZhbHVlO1xufVxuLyoqXG4gKiBGaW5kcyBhIHBhcnRpY3VsYXIgMi12ZXJ0ZXggTGluZVN0cmluZyBTZWdtZW50IGZyb20gYSBHZW9KU09OIHVzaW5nIGBAdHVyZi9tZXRhYCBpbmRleGVzLlxuICpcbiAqIE5lZ2F0aXZlIGluZGV4ZXMgYXJlIHBlcm1pdHRlZC5cbiAqIFBvaW50ICYgTXVsdGlQb2ludCB3aWxsIGFsd2F5cyByZXR1cm4gbnVsbC5cbiAqXG4gKiBAcGFyYW0ge0ZlYXR1cmVDb2xsZWN0aW9ufEZlYXR1cmV8R2VvbWV0cnl9IGdlb2pzb24gQW55IEdlb0pTT04gRmVhdHVyZSBvciBHZW9tZXRyeVxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBPcHRpb25hbCBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuZmVhdHVyZUluZGV4PTBdIEZlYXR1cmUgSW5kZXhcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5tdWx0aUZlYXR1cmVJbmRleD0wXSBNdWx0aS1GZWF0dXJlIEluZGV4XG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuZ2VvbWV0cnlJbmRleD0wXSBHZW9tZXRyeSBJbmRleFxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLnNlZ21lbnRJbmRleD0wXSBTZWdtZW50IEluZGV4XG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnMucHJvcGVydGllcz17fV0gVHJhbnNsYXRlIFByb3BlcnRpZXMgdG8gb3V0cHV0IExpbmVTdHJpbmdcbiAqIEBwYXJhbSB7QkJveH0gW29wdGlvbnMuYmJveD17fV0gVHJhbnNsYXRlIEJCb3ggdG8gb3V0cHV0IExpbmVTdHJpbmdcbiAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gW29wdGlvbnMuaWQ9e31dIFRyYW5zbGF0ZSBJZCB0byBvdXRwdXQgTGluZVN0cmluZ1xuICogQHJldHVybnMge0ZlYXR1cmU8TGluZVN0cmluZz59IDItdmVydGV4IEdlb0pTT04gRmVhdHVyZSBMaW5lU3RyaW5nXG4gKiBAZXhhbXBsZVxuICogdmFyIG11bHRpTGluZSA9IHR1cmYubXVsdGlMaW5lU3RyaW5nKFtcbiAqICAgICBbWzEwLCAxMF0sIFs1MCwgMzBdLCBbMzAsIDQwXV0sXG4gKiAgICAgW1stMTAsIC0xMF0sIFstNTAsIC0zMF0sIFstMzAsIC00MF1dXG4gKiBdKTtcbiAqXG4gKiAvLyBGaXJzdCBTZWdtZW50IChkZWZhdWx0cyBhcmUgMClcbiAqIHR1cmYuZmluZFNlZ21lbnQobXVsdGlMaW5lKTtcbiAqIC8vID0+IEZlYXR1cmU8TGluZVN0cmluZzxbWzEwLCAxMF0sIFs1MCwgMzBdXT4+XG4gKlxuICogLy8gRmlyc3QgU2VnbWVudCBvZiAybmQgTXVsdGkgRmVhdHVyZVxuICogdHVyZi5maW5kU2VnbWVudChtdWx0aUxpbmUsIHttdWx0aUZlYXR1cmVJbmRleDogMX0pO1xuICogLy8gPT4gRmVhdHVyZTxMaW5lU3RyaW5nPFtbLTEwLCAtMTBdLCBbLTUwLCAtMzBdXT4+XG4gKlxuICogLy8gTGFzdCBTZWdtZW50IG9mIExhc3QgTXVsdGkgRmVhdHVyZVxuICogdHVyZi5maW5kU2VnbWVudChtdWx0aUxpbmUsIHttdWx0aUZlYXR1cmVJbmRleDogLTEsIHNlZ21lbnRJbmRleDogLTF9KTtcbiAqIC8vID0+IEZlYXR1cmU8TGluZVN0cmluZzxbWy01MCwgLTMwXSwgWy0zMCwgLTQwXV0+PlxuICovXG5cblxuZnVuY3Rpb24gZmluZFNlZ21lbnQoZ2VvanNvbiwgb3B0aW9ucykge1xuICAvLyBPcHRpb25hbCBQYXJhbWV0ZXJzXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBpZiAoIWlzT2JqZWN0KG9wdGlvbnMpKSB0aHJvdyBuZXcgRXJyb3IoXCJvcHRpb25zIGlzIGludmFsaWRcIik7XG4gIHZhciBmZWF0dXJlSW5kZXggPSBvcHRpb25zLmZlYXR1cmVJbmRleCB8fCAwO1xuICB2YXIgbXVsdGlGZWF0dXJlSW5kZXggPSBvcHRpb25zLm11bHRpRmVhdHVyZUluZGV4IHx8IDA7XG4gIHZhciBnZW9tZXRyeUluZGV4ID0gb3B0aW9ucy5nZW9tZXRyeUluZGV4IHx8IDA7XG4gIHZhciBzZWdtZW50SW5kZXggPSBvcHRpb25zLnNlZ21lbnRJbmRleCB8fCAwOyAvLyBGaW5kIEZlYXR1cmVJbmRleFxuXG4gIHZhciBwcm9wZXJ0aWVzID0gb3B0aW9ucy5wcm9wZXJ0aWVzO1xuICB2YXIgZ2VvbWV0cnk7XG5cbiAgc3dpdGNoIChnZW9qc29uLnR5cGUpIHtcbiAgICBjYXNlIFwiRmVhdHVyZUNvbGxlY3Rpb25cIjpcbiAgICAgIGlmIChmZWF0dXJlSW5kZXggPCAwKSBmZWF0dXJlSW5kZXggPSBnZW9qc29uLmZlYXR1cmVzLmxlbmd0aCArIGZlYXR1cmVJbmRleDtcbiAgICAgIHByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzIHx8IGdlb2pzb24uZmVhdHVyZXNbZmVhdHVyZUluZGV4XS5wcm9wZXJ0aWVzO1xuICAgICAgZ2VvbWV0cnkgPSBnZW9qc29uLmZlYXR1cmVzW2ZlYXR1cmVJbmRleF0uZ2VvbWV0cnk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgXCJGZWF0dXJlXCI6XG4gICAgICBwcm9wZXJ0aWVzID0gcHJvcGVydGllcyB8fCBnZW9qc29uLnByb3BlcnRpZXM7XG4gICAgICBnZW9tZXRyeSA9IGdlb2pzb24uZ2VvbWV0cnk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgXCJQb2ludFwiOlxuICAgIGNhc2UgXCJNdWx0aVBvaW50XCI6XG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIGNhc2UgXCJMaW5lU3RyaW5nXCI6XG4gICAgY2FzZSBcIlBvbHlnb25cIjpcbiAgICBjYXNlIFwiTXVsdGlMaW5lU3RyaW5nXCI6XG4gICAgY2FzZSBcIk11bHRpUG9seWdvblwiOlxuICAgICAgZ2VvbWV0cnkgPSBnZW9qc29uO1xuICAgICAgYnJlYWs7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZ2VvanNvbiBpcyBpbnZhbGlkXCIpO1xuICB9IC8vIEZpbmQgU2VnbWVudEluZGV4XG5cblxuICBpZiAoZ2VvbWV0cnkgPT09IG51bGwpIHJldHVybiBudWxsO1xuICB2YXIgY29vcmRzID0gZ2VvbWV0cnkuY29vcmRpbmF0ZXM7XG5cbiAgc3dpdGNoIChnZW9tZXRyeS50eXBlKSB7XG4gICAgY2FzZSBcIlBvaW50XCI6XG4gICAgY2FzZSBcIk11bHRpUG9pbnRcIjpcbiAgICAgIHJldHVybiBudWxsO1xuXG4gICAgY2FzZSBcIkxpbmVTdHJpbmdcIjpcbiAgICAgIGlmIChzZWdtZW50SW5kZXggPCAwKSBzZWdtZW50SW5kZXggPSBjb29yZHMubGVuZ3RoICsgc2VnbWVudEluZGV4IC0gMTtcbiAgICAgIHJldHVybiBsaW5lU3RyaW5nKFtjb29yZHNbc2VnbWVudEluZGV4XSwgY29vcmRzW3NlZ21lbnRJbmRleCArIDFdXSwgcHJvcGVydGllcywgb3B0aW9ucyk7XG5cbiAgICBjYXNlIFwiUG9seWdvblwiOlxuICAgICAgaWYgKGdlb21ldHJ5SW5kZXggPCAwKSBnZW9tZXRyeUluZGV4ID0gY29vcmRzLmxlbmd0aCArIGdlb21ldHJ5SW5kZXg7XG4gICAgICBpZiAoc2VnbWVudEluZGV4IDwgMCkgc2VnbWVudEluZGV4ID0gY29vcmRzW2dlb21ldHJ5SW5kZXhdLmxlbmd0aCArIHNlZ21lbnRJbmRleCAtIDE7XG4gICAgICByZXR1cm4gbGluZVN0cmluZyhbY29vcmRzW2dlb21ldHJ5SW5kZXhdW3NlZ21lbnRJbmRleF0sIGNvb3Jkc1tnZW9tZXRyeUluZGV4XVtzZWdtZW50SW5kZXggKyAxXV0sIHByb3BlcnRpZXMsIG9wdGlvbnMpO1xuXG4gICAgY2FzZSBcIk11bHRpTGluZVN0cmluZ1wiOlxuICAgICAgaWYgKG11bHRpRmVhdHVyZUluZGV4IDwgMCkgbXVsdGlGZWF0dXJlSW5kZXggPSBjb29yZHMubGVuZ3RoICsgbXVsdGlGZWF0dXJlSW5kZXg7XG4gICAgICBpZiAoc2VnbWVudEluZGV4IDwgMCkgc2VnbWVudEluZGV4ID0gY29vcmRzW211bHRpRmVhdHVyZUluZGV4XS5sZW5ndGggKyBzZWdtZW50SW5kZXggLSAxO1xuICAgICAgcmV0dXJuIGxpbmVTdHJpbmcoW2Nvb3Jkc1ttdWx0aUZlYXR1cmVJbmRleF1bc2VnbWVudEluZGV4XSwgY29vcmRzW211bHRpRmVhdHVyZUluZGV4XVtzZWdtZW50SW5kZXggKyAxXV0sIHByb3BlcnRpZXMsIG9wdGlvbnMpO1xuXG4gICAgY2FzZSBcIk11bHRpUG9seWdvblwiOlxuICAgICAgaWYgKG11bHRpRmVhdHVyZUluZGV4IDwgMCkgbXVsdGlGZWF0dXJlSW5kZXggPSBjb29yZHMubGVuZ3RoICsgbXVsdGlGZWF0dXJlSW5kZXg7XG4gICAgICBpZiAoZ2VvbWV0cnlJbmRleCA8IDApIGdlb21ldHJ5SW5kZXggPSBjb29yZHNbbXVsdGlGZWF0dXJlSW5kZXhdLmxlbmd0aCArIGdlb21ldHJ5SW5kZXg7XG4gICAgICBpZiAoc2VnbWVudEluZGV4IDwgMCkgc2VnbWVudEluZGV4ID0gY29vcmRzW211bHRpRmVhdHVyZUluZGV4XVtnZW9tZXRyeUluZGV4XS5sZW5ndGggLSBzZWdtZW50SW5kZXggLSAxO1xuICAgICAgcmV0dXJuIGxpbmVTdHJpbmcoW2Nvb3Jkc1ttdWx0aUZlYXR1cmVJbmRleF1bZ2VvbWV0cnlJbmRleF1bc2VnbWVudEluZGV4XSwgY29vcmRzW211bHRpRmVhdHVyZUluZGV4XVtnZW9tZXRyeUluZGV4XVtzZWdtZW50SW5kZXggKyAxXV0sIHByb3BlcnRpZXMsIG9wdGlvbnMpO1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKFwiZ2VvanNvbiBpcyBpbnZhbGlkXCIpO1xufVxuLyoqXG4gKiBGaW5kcyBhIHBhcnRpY3VsYXIgUG9pbnQgZnJvbSBhIEdlb0pTT04gdXNpbmcgYEB0dXJmL21ldGFgIGluZGV4ZXMuXG4gKlxuICogTmVnYXRpdmUgaW5kZXhlcyBhcmUgcGVybWl0dGVkLlxuICpcbiAqIEBwYXJhbSB7RmVhdHVyZUNvbGxlY3Rpb258RmVhdHVyZXxHZW9tZXRyeX0gZ2VvanNvbiBBbnkgR2VvSlNPTiBGZWF0dXJlIG9yIEdlb21ldHJ5XG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIE9wdGlvbmFsIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5mZWF0dXJlSW5kZXg9MF0gRmVhdHVyZSBJbmRleFxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLm11bHRpRmVhdHVyZUluZGV4PTBdIE11bHRpLUZlYXR1cmUgSW5kZXhcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5nZW9tZXRyeUluZGV4PTBdIEdlb21ldHJ5IEluZGV4XG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuY29vcmRJbmRleD0wXSBDb29yZCBJbmRleFxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zLnByb3BlcnRpZXM9e31dIFRyYW5zbGF0ZSBQcm9wZXJ0aWVzIHRvIG91dHB1dCBQb2ludFxuICogQHBhcmFtIHtCQm94fSBbb3B0aW9ucy5iYm94PXt9XSBUcmFuc2xhdGUgQkJveCB0byBvdXRwdXQgUG9pbnRcbiAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gW29wdGlvbnMuaWQ9e31dIFRyYW5zbGF0ZSBJZCB0byBvdXRwdXQgUG9pbnRcbiAqIEByZXR1cm5zIHtGZWF0dXJlPFBvaW50Pn0gMi12ZXJ0ZXggR2VvSlNPTiBGZWF0dXJlIFBvaW50XG4gKiBAZXhhbXBsZVxuICogdmFyIG11bHRpTGluZSA9IHR1cmYubXVsdGlMaW5lU3RyaW5nKFtcbiAqICAgICBbWzEwLCAxMF0sIFs1MCwgMzBdLCBbMzAsIDQwXV0sXG4gKiAgICAgW1stMTAsIC0xMF0sIFstNTAsIC0zMF0sIFstMzAsIC00MF1dXG4gKiBdKTtcbiAqXG4gKiAvLyBGaXJzdCBTZWdtZW50IChkZWZhdWx0cyBhcmUgMClcbiAqIHR1cmYuZmluZFBvaW50KG11bHRpTGluZSk7XG4gKiAvLyA9PiBGZWF0dXJlPFBvaW50PFsxMCwgMTBdPj5cbiAqXG4gKiAvLyBGaXJzdCBTZWdtZW50IG9mIHRoZSAybmQgTXVsdGktRmVhdHVyZVxuICogdHVyZi5maW5kUG9pbnQobXVsdGlMaW5lLCB7bXVsdGlGZWF0dXJlSW5kZXg6IDF9KTtcbiAqIC8vID0+IEZlYXR1cmU8UG9pbnQ8Wy0xMCwgLTEwXT4+XG4gKlxuICogLy8gTGFzdCBTZWdtZW50IG9mIGxhc3QgTXVsdGktRmVhdHVyZVxuICogdHVyZi5maW5kUG9pbnQobXVsdGlMaW5lLCB7bXVsdGlGZWF0dXJlSW5kZXg6IC0xLCBjb29yZEluZGV4OiAtMX0pO1xuICogLy8gPT4gRmVhdHVyZTxQb2ludDxbLTMwLCAtNDBdPj5cbiAqL1xuXG5cbmZ1bmN0aW9uIGZpbmRQb2ludChnZW9qc29uLCBvcHRpb25zKSB7XG4gIC8vIE9wdGlvbmFsIFBhcmFtZXRlcnNcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIGlmICghaXNPYmplY3Qob3B0aW9ucykpIHRocm93IG5ldyBFcnJvcihcIm9wdGlvbnMgaXMgaW52YWxpZFwiKTtcbiAgdmFyIGZlYXR1cmVJbmRleCA9IG9wdGlvbnMuZmVhdHVyZUluZGV4IHx8IDA7XG4gIHZhciBtdWx0aUZlYXR1cmVJbmRleCA9IG9wdGlvbnMubXVsdGlGZWF0dXJlSW5kZXggfHwgMDtcbiAgdmFyIGdlb21ldHJ5SW5kZXggPSBvcHRpb25zLmdlb21ldHJ5SW5kZXggfHwgMDtcbiAgdmFyIGNvb3JkSW5kZXggPSBvcHRpb25zLmNvb3JkSW5kZXggfHwgMDsgLy8gRmluZCBGZWF0dXJlSW5kZXhcblxuICB2YXIgcHJvcGVydGllcyA9IG9wdGlvbnMucHJvcGVydGllcztcbiAgdmFyIGdlb21ldHJ5O1xuXG4gIHN3aXRjaCAoZ2VvanNvbi50eXBlKSB7XG4gICAgY2FzZSBcIkZlYXR1cmVDb2xsZWN0aW9uXCI6XG4gICAgICBpZiAoZmVhdHVyZUluZGV4IDwgMCkgZmVhdHVyZUluZGV4ID0gZ2VvanNvbi5mZWF0dXJlcy5sZW5ndGggKyBmZWF0dXJlSW5kZXg7XG4gICAgICBwcm9wZXJ0aWVzID0gcHJvcGVydGllcyB8fCBnZW9qc29uLmZlYXR1cmVzW2ZlYXR1cmVJbmRleF0ucHJvcGVydGllcztcbiAgICAgIGdlb21ldHJ5ID0gZ2VvanNvbi5mZWF0dXJlc1tmZWF0dXJlSW5kZXhdLmdlb21ldHJ5O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwiRmVhdHVyZVwiOlxuICAgICAgcHJvcGVydGllcyA9IHByb3BlcnRpZXMgfHwgZ2VvanNvbi5wcm9wZXJ0aWVzO1xuICAgICAgZ2VvbWV0cnkgPSBnZW9qc29uLmdlb21ldHJ5O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwiUG9pbnRcIjpcbiAgICBjYXNlIFwiTXVsdGlQb2ludFwiOlxuICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICBjYXNlIFwiTGluZVN0cmluZ1wiOlxuICAgIGNhc2UgXCJQb2x5Z29uXCI6XG4gICAgY2FzZSBcIk11bHRpTGluZVN0cmluZ1wiOlxuICAgIGNhc2UgXCJNdWx0aVBvbHlnb25cIjpcbiAgICAgIGdlb21ldHJ5ID0gZ2VvanNvbjtcbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImdlb2pzb24gaXMgaW52YWxpZFwiKTtcbiAgfSAvLyBGaW5kIENvb3JkIEluZGV4XG5cblxuICBpZiAoZ2VvbWV0cnkgPT09IG51bGwpIHJldHVybiBudWxsO1xuICB2YXIgY29vcmRzID0gZ2VvbWV0cnkuY29vcmRpbmF0ZXM7XG5cbiAgc3dpdGNoIChnZW9tZXRyeS50eXBlKSB7XG4gICAgY2FzZSBcIlBvaW50XCI6XG4gICAgICByZXR1cm4gcG9pbnQoY29vcmRzLCBwcm9wZXJ0aWVzLCBvcHRpb25zKTtcblxuICAgIGNhc2UgXCJNdWx0aVBvaW50XCI6XG4gICAgICBpZiAobXVsdGlGZWF0dXJlSW5kZXggPCAwKSBtdWx0aUZlYXR1cmVJbmRleCA9IGNvb3Jkcy5sZW5ndGggKyBtdWx0aUZlYXR1cmVJbmRleDtcbiAgICAgIHJldHVybiBwb2ludChjb29yZHNbbXVsdGlGZWF0dXJlSW5kZXhdLCBwcm9wZXJ0aWVzLCBvcHRpb25zKTtcblxuICAgIGNhc2UgXCJMaW5lU3RyaW5nXCI6XG4gICAgICBpZiAoY29vcmRJbmRleCA8IDApIGNvb3JkSW5kZXggPSBjb29yZHMubGVuZ3RoICsgY29vcmRJbmRleDtcbiAgICAgIHJldHVybiBwb2ludChjb29yZHNbY29vcmRJbmRleF0sIHByb3BlcnRpZXMsIG9wdGlvbnMpO1xuXG4gICAgY2FzZSBcIlBvbHlnb25cIjpcbiAgICAgIGlmIChnZW9tZXRyeUluZGV4IDwgMCkgZ2VvbWV0cnlJbmRleCA9IGNvb3Jkcy5sZW5ndGggKyBnZW9tZXRyeUluZGV4O1xuICAgICAgaWYgKGNvb3JkSW5kZXggPCAwKSBjb29yZEluZGV4ID0gY29vcmRzW2dlb21ldHJ5SW5kZXhdLmxlbmd0aCArIGNvb3JkSW5kZXg7XG4gICAgICByZXR1cm4gcG9pbnQoY29vcmRzW2dlb21ldHJ5SW5kZXhdW2Nvb3JkSW5kZXhdLCBwcm9wZXJ0aWVzLCBvcHRpb25zKTtcblxuICAgIGNhc2UgXCJNdWx0aUxpbmVTdHJpbmdcIjpcbiAgICAgIGlmIChtdWx0aUZlYXR1cmVJbmRleCA8IDApIG11bHRpRmVhdHVyZUluZGV4ID0gY29vcmRzLmxlbmd0aCArIG11bHRpRmVhdHVyZUluZGV4O1xuICAgICAgaWYgKGNvb3JkSW5kZXggPCAwKSBjb29yZEluZGV4ID0gY29vcmRzW211bHRpRmVhdHVyZUluZGV4XS5sZW5ndGggKyBjb29yZEluZGV4O1xuICAgICAgcmV0dXJuIHBvaW50KGNvb3Jkc1ttdWx0aUZlYXR1cmVJbmRleF1bY29vcmRJbmRleF0sIHByb3BlcnRpZXMsIG9wdGlvbnMpO1xuXG4gICAgY2FzZSBcIk11bHRpUG9seWdvblwiOlxuICAgICAgaWYgKG11bHRpRmVhdHVyZUluZGV4IDwgMCkgbXVsdGlGZWF0dXJlSW5kZXggPSBjb29yZHMubGVuZ3RoICsgbXVsdGlGZWF0dXJlSW5kZXg7XG4gICAgICBpZiAoZ2VvbWV0cnlJbmRleCA8IDApIGdlb21ldHJ5SW5kZXggPSBjb29yZHNbbXVsdGlGZWF0dXJlSW5kZXhdLmxlbmd0aCArIGdlb21ldHJ5SW5kZXg7XG4gICAgICBpZiAoY29vcmRJbmRleCA8IDApIGNvb3JkSW5kZXggPSBjb29yZHNbbXVsdGlGZWF0dXJlSW5kZXhdW2dlb21ldHJ5SW5kZXhdLmxlbmd0aCAtIGNvb3JkSW5kZXg7XG4gICAgICByZXR1cm4gcG9pbnQoY29vcmRzW211bHRpRmVhdHVyZUluZGV4XVtnZW9tZXRyeUluZGV4XVtjb29yZEluZGV4XSwgcHJvcGVydGllcywgb3B0aW9ucyk7XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoXCJnZW9qc29uIGlzIGludmFsaWRcIik7XG59XG5cbmV4cG9ydCB7IGNvb3JkQWxsLCBjb29yZEVhY2gsIGNvb3JkUmVkdWNlLCBmZWF0dXJlRWFjaCwgZmVhdHVyZVJlZHVjZSwgZmluZFBvaW50LCBmaW5kU2VnbWVudCwgZmxhdHRlbkVhY2gsIGZsYXR0ZW5SZWR1Y2UsIGdlb21FYWNoLCBnZW9tUmVkdWNlLCBsaW5lRWFjaCwgbGluZVJlZHVjZSwgcHJvcEVhY2gsIHByb3BSZWR1Y2UsIHNlZ21lbnRFYWNoLCBzZWdtZW50UmVkdWNlIH07IiwiaW1wb3J0IHsgY29vcmRFYWNoIH0gZnJvbSBcIkB0dXJmL21ldGFcIjtcbi8qKlxuICogVGFrZXMgYSBzZXQgb2YgZmVhdHVyZXMsIGNhbGN1bGF0ZXMgdGhlIGJib3ggb2YgYWxsIGlucHV0IGZlYXR1cmVzLCBhbmQgcmV0dXJucyBhIGJvdW5kaW5nIGJveC5cbiAqXG4gKiBAbmFtZSBiYm94XG4gKiBAcGFyYW0ge0dlb0pTT059IGdlb2pzb24gYW55IEdlb0pTT04gb2JqZWN0XG4gKiBAcmV0dXJucyB7QkJveH0gYmJveCBleHRlbnQgaW4gW21pblgsIG1pblksIG1heFgsIG1heFldIG9yZGVyXG4gKiBAZXhhbXBsZVxuICogdmFyIGxpbmUgPSB0dXJmLmxpbmVTdHJpbmcoW1stNzQsIDQwXSwgWy03OCwgNDJdLCBbLTgyLCAzNV1dKTtcbiAqIHZhciBiYm94ID0gdHVyZi5iYm94KGxpbmUpO1xuICogdmFyIGJib3hQb2x5Z29uID0gdHVyZi5iYm94UG9seWdvbihiYm94KTtcbiAqXG4gKiAvL2FkZFRvTWFwXG4gKiB2YXIgYWRkVG9NYXAgPSBbbGluZSwgYmJveFBvbHlnb25dXG4gKi9cblxuZnVuY3Rpb24gYmJveChnZW9qc29uKSB7XG4gIHZhciByZXN1bHQgPSBbSW5maW5pdHksIEluZmluaXR5LCAtSW5maW5pdHksIC1JbmZpbml0eV07XG4gIGNvb3JkRWFjaChnZW9qc29uLCBmdW5jdGlvbiAoY29vcmQpIHtcbiAgICBpZiAocmVzdWx0WzBdID4gY29vcmRbMF0pIHtcbiAgICAgIHJlc3VsdFswXSA9IGNvb3JkWzBdO1xuICAgIH1cblxuICAgIGlmIChyZXN1bHRbMV0gPiBjb29yZFsxXSkge1xuICAgICAgcmVzdWx0WzFdID0gY29vcmRbMV07XG4gICAgfVxuXG4gICAgaWYgKHJlc3VsdFsyXSA8IGNvb3JkWzBdKSB7XG4gICAgICByZXN1bHRbMl0gPSBjb29yZFswXTtcbiAgICB9XG5cbiAgICBpZiAocmVzdWx0WzNdIDwgY29vcmRbMV0pIHtcbiAgICAgIHJlc3VsdFszXSA9IGNvb3JkWzFdO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmJib3hbXCJkZWZhdWx0XCJdID0gYmJveDtcbmV4cG9ydCBkZWZhdWx0IGJib3g7IiwiZXhwb3J0IGZ1bmN0aW9uIGN1YmljSW4odCkge1xuICByZXR1cm4gdCAqIHQgKiB0O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGN1YmljT3V0KHQpIHtcbiAgcmV0dXJuIC0tdCAqIHQgKiB0ICsgMTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjdWJpY0luT3V0KHQpIHtcbiAgcmV0dXJuICgodCAqPSAyKSA8PSAxID8gdCAqIHQgKiB0IDogKHQgLT0gMikgKiB0ICogdCArIDIpIC8gMjtcbn0iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCB2YXIgdGVycml0b3J5Rm9jdXNCdXR0b24gPSBcInRlcnJpdG9yeUZvY3VzQ29udHJvbC1tb2R1bGUtLXRlcnJpdG9yeUZvY3VzQnV0dG9uLS0zd1dvVlwiO1xuZXhwb3J0IHZhciB0ZXJyaXRvcnlGb2N1c0NvbnRhaW5lciA9IFwidGVycml0b3J5Rm9jdXNDb250cm9sLW1vZHVsZS0tdGVycml0b3J5Rm9jdXNDb250YWluZXItLTNOMFhNXCI7IiwiaW1wb3J0IHt1c2VJbnRsfSBmcm9tICdnYXRzYnktcGx1Z2luLWludGwnO1xuaW1wb3J0IFJlYWN0LCB7TW91c2VFdmVudEhhbmRsZXJ9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7X3VzZU1hcENvbnRyb2wgYXMgdXNlTWFwQ29udHJvbH0gZnJvbSAncmVhY3QtbWFwLWdsJztcbmltcG9ydCAqIGFzIHN0eWxlcyBmcm9tICcuL3RlcnJpdG9yeUZvY3VzQ29udHJvbC5tb2R1bGUuc2Nzcyc7XG5cbmludGVyZmFjZSBJVGVycml0b3J5Rm9jdXNDb250cm9sIHtcbiAgb25DbGlja1RlcnJpdG9yeUZvY3VzQnV0dG9uIDogTW91c2VFdmVudEhhbmRsZXI8SFRNTEJ1dHRvbkVsZW1lbnQ+O1xufVxuXG5jb25zdCBUZXJyaXRvcnlGb2N1c0NvbnRyb2wgPSAoe29uQ2xpY2tUZXJyaXRvcnlGb2N1c0J1dHRvbn0gOiBJVGVycml0b3J5Rm9jdXNDb250cm9sKSA9PiB7XG4gIGNvbnN0IGludGwgPSB1c2VJbnRsKCk7XG5cbiAgY29uc3Qge2NvbnRhaW5lclJlZn0gPSB1c2VNYXBDb250cm9sKHtcbiAgICAvLyBAdHMtaWdub3JlIC8vIFR5cGVzIGhhdmUgbm90IGNhdWdodCB1cCB5ZXQsIHNlZSBodHRwczovL2dpdGh1Yi5jb20vdmlzZ2wvcmVhY3QtbWFwLWdsL2lzc3Vlcy8xNDkyXG4gICAgb25DbGljazogb25DbGlja1RlcnJpdG9yeUZvY3VzQnV0dG9uLFxuICB9KTtcblxuICBjb25zdCB0ZXJyaXRvcmllcyA9IFtcbiAgICB7XG4gICAgICBzaG9ydDogaW50bC5mb3JtYXRNZXNzYWdlKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiAnbWFwLnRlcnJpdG9yeUZvY3VzLmxvd2VyNDguc2hvcnQnLFxuICAgICAgICAgICAgZGVmYXVsdE1lc3NhZ2U6ICc0OCcsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1RoZSBhYmJyZXZpYXRlZCBuYW1lIGluZGljYXRpbmcgdGhlIGJvdW5kcyBvZiB0aGUgTG93ZXIgNDggc3RhdGVzJyxcbiAgICAgICAgICB9LFxuICAgICAgKSxcbiAgICAgIGxvbmc6IGludGwuZm9ybWF0TWVzc2FnZShcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogJ21hcC50ZXJyaXRvcnlGb2N1cy5sb3dlcjQ4LmxvbmcnLFxuICAgICAgICAgICAgZGVmYXVsdE1lc3NhZ2U6ICdMb3dlciA0OCcsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1RoZSBsb25nZXIgbmFtZSBpbmRpY2F0aW5nIHRoZSBib3VuZHMgb2YgdGhlIExvd2VyIDQ4IHN0YXRlcycsXG4gICAgICAgICAgfSxcbiAgICAgICksXG4gICAgfSxcbiAgICB7XG4gICAgICBzaG9ydDogaW50bC5mb3JtYXRNZXNzYWdlKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiAnbWFwLnRlcnJpdG9yeUZvY3VzLmFsYXNrYS5zaG9ydCcsXG4gICAgICAgICAgICBkZWZhdWx0TWVzc2FnZTogJ0FLJyxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVGhlIGFiYnJldmlhdGVkIGluZGljYXRpbmcgdGhlIGJvdW5kcyBvZiBBbGFza2EnLFxuICAgICAgICAgIH0sXG4gICAgICApLFxuICAgICAgbG9uZzogaW50bC5mb3JtYXRNZXNzYWdlKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiAnbWFwLnRlcnJpdG9yeUZvY3VzLmFsYXNrYS5sb25nJyxcbiAgICAgICAgICAgIGRlZmF1bHRNZXNzYWdlOiAnQWxhc2thJyxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVGhlIGZ1bGwgbmFtZSBpbmRpY2F0aW5nIHRoZSBib3VuZHMgb2YgQWxhc2thJyxcbiAgICAgICAgICB9LFxuICAgICAgKSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHNob3J0OiBpbnRsLmZvcm1hdE1lc3NhZ2UoXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6ICdtYXAudGVycml0b3J5Rm9jdXMuaGF3YWlpLnNob3J0JyxcbiAgICAgICAgICAgIGRlZmF1bHRNZXNzYWdlOiAnSEknLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246ICdUaGUgYWJicmV2aWF0ZWQgbmFtZSBpbmRpY2F0aW5nIHRoZSBib3VuZHMgb2YgSGF3YWlpJyxcbiAgICAgICAgICB9LFxuICAgICAgKSxcbiAgICAgIGxvbmc6IGludGwuZm9ybWF0TWVzc2FnZShcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogJ21hcC50ZXJyaXRvcnlGb2N1cy5oYXdhaWkubG9uZycsXG4gICAgICAgICAgICBkZWZhdWx0TWVzc2FnZTogJ0hhd2FpaScsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1RoZSBsb25nZXIgbmFtZSBpbmRpY2F0aW5nIHRoZSBib3VuZHMgb2YgSGF3YWlpJyxcbiAgICAgICAgICB9LFxuICAgICAgKSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHNob3J0OiBpbnRsLmZvcm1hdE1lc3NhZ2UoXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6ICdtYXAudGVycml0b3J5Rm9jdXMucHVlcnRvX3JpY28uc2hvcnQnLFxuICAgICAgICAgICAgZGVmYXVsdE1lc3NhZ2U6ICdQUicsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1RoZSBhYmJyZXZpYXRlZCBuYW1lIGluZGljYXRpbmcgdGhlIGJvdW5kcyBvZiBQdWVydG8gUmljbycsXG4gICAgICAgICAgfSxcbiAgICAgICksXG4gICAgICBsb25nOiBpbnRsLmZvcm1hdE1lc3NhZ2UoXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6ICdtYXAudGVycml0b3J5Rm9jdXMucHVlcnRvX3JpY28ubG9uZycsXG4gICAgICAgICAgICBkZWZhdWx0TWVzc2FnZTogJ1B1ZXJ0byBSaWNvJyxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVGhlIGZ1bGwgbmFtZSBpbmRpY2F0aW5nIHRoZSBib3VuZHMgb2YgUHVlcnRvIFJpY28nLFxuICAgICAgICAgIH0sXG4gICAgICApLFxuICAgIH0sXG4gIF07XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IHJlZj17Y29udGFpbmVyUmVmfSBjbGFzc05hbWU9e3N0eWxlcy50ZXJyaXRvcnlGb2N1c0NvbnRhaW5lcn0+XG4gICAgICB7dGVycml0b3JpZXMubWFwKCh0ZXJyaXRvcnkpID0+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBpZD17dGVycml0b3J5LnNob3J0fVxuICAgICAgICAgIGtleT17dGVycml0b3J5LnNob3J0fVxuICAgICAgICAgIG9uQ2xpY2s9e29uQ2xpY2tUZXJyaXRvcnlGb2N1c0J1dHRvbn1cbiAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy50ZXJyaXRvcnlGb2N1c0J1dHRvbn1cbiAgICAgICAgICBhcmlhLWxhYmVsPXtpbnRsLmZvcm1hdE1lc3NhZ2UoXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZDogJ21hcC50ZXJyaXRvcnlGb2N1cy5mb2N1c09uJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0TWVzc2FnZTogJ0ZvY3VzIG9uIHt0ZXJyaXRvcnl9JyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0ZvY3VzIG9uIHRoZSBib3VuZHMgb2YgYSBzcGVjaWZpYyB0ZXJyaXRvcnknLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGVycml0b3J5OiB0ZXJyaXRvcnkubG9uZyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICApfT5cbiAgICAgICAgICB7dGVycml0b3J5LnNob3J0fVxuICAgICAgICA8L2J1dHRvbj4sXG4gICAgICApfVxuICAgIDwvZGl2PlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgVGVycml0b3J5Rm9jdXNDb250cm9sO1xuXG4iLCJleHBvcnQgZGVmYXVsdCBcImRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEhOMlp5QjRiV3h1Y3owaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNQzl6ZG1jaUlHVnVZV0pzWlMxaVlXTnJaM0p2ZFc1a1BTSnVaWGNnTUNBd0lESTBJREkwSWlCb1pXbG5hSFE5SWpJMElpQjJhV1YzUW05NFBTSXdJREFnTWpRZ01qUWlJSGRwWkhSb1BTSXlOQ0krUEdjK1BISmxZM1FnWm1sc2JEMGlibTl1WlNJZ2FHVnBaMmgwUFNJeU5DSWdkMmxrZEdnOUlqSTBJaTgrUEM5blBqeG5QanhuUGp4blBqeHdZWFJvSUdROUlrMDVMREl4WXpBc01DNDFOU3d3TGpRMUxERXNNU3d4YURSak1DNDFOU3d3TERFdE1DNDBOU3d4TFRGMkxURklPVll5TVhvZ1RURXlMREpET0M0eE5Dd3lMRFVzTlM0eE5DdzFMRGxqTUN3eUxqTTRMREV1TVRrc05DNDBOeXd6TERVdU56UldNVGNnWXpBc01DNDFOU3d3TGpRMUxERXNNU3d4YURaak1DNDFOU3d3TERFdE1DNDBOU3d4TFRGMkxUSXVNalpqTVM0NE1TMHhMakkzTERNdE15NHpOaXd6TFRVdU56UkRNVGtzTlM0eE5Dd3hOUzQ0Tml3eUxERXlMREo2SUUweE5Dd3hNeTQzVmpFMmFDMDBkaTB5TGpNZ1F6Z3VORGdzTVRJdU5qTXNOeXd4TVM0MU15dzNMRGxqTUMweUxqYzJMREl1TWpRdE5TdzFMVFZ6TlN3eUxqSTBMRFVzTlVNeE55d3hNUzQwT1N3eE5TNDBPU3d4TWk0Mk5Td3hOQ3d4TXk0M2VpSXZQand2Wno0OEwyYytQQzluUGp3dmMzWm5QZz09XCIiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCB2YXIgbWFwSW50cm9Db250YWluZXIgPSBcIm1hcEludHJvZHVjdGlvbi1tb2R1bGUtLW1hcEludHJvQ29udGFpbmVyLS0xSzhkdVwiO1xuZXhwb3J0IHZhciBtYXBJbnRyb0hlYWRlciA9IFwibWFwSW50cm9kdWN0aW9uLW1vZHVsZS0tbWFwSW50cm9IZWFkZXItLTMyTEJzXCI7XG5leHBvcnQgdmFyIG1hcEludHJvVGV4dCA9IFwibWFwSW50cm9kdWN0aW9uLW1vZHVsZS0tbWFwSW50cm9UZXh0LS1UaWI4TFwiO1xuZXhwb3J0IHZhciBtYXBJbnRyb0xpZ2h0YnVsYiA9IFwibWFwSW50cm9kdWN0aW9uLW1vZHVsZS0tbWFwSW50cm9MaWdodGJ1bGItLTNMQngwXCI7XG5leHBvcnQgdmFyIGRpZFlvdUtub3dCb3ggPSBcIm1hcEludHJvZHVjdGlvbi1tb2R1bGUtLWRpZFlvdUtub3dCb3gtLTN6dEV5XCI7XG5leHBvcnQgdmFyIGRpZFlvdUtub3cgPSBcIm1hcEludHJvZHVjdGlvbi1tb2R1bGUtLWRpZFlvdUtub3ctLTNfdl9pXCI7XG5leHBvcnQgdmFyIGRpZFlvdUtub3dUZXh0ID0gXCJtYXBJbnRyb2R1Y3Rpb24tbW9kdWxlLS1kaWRZb3VLbm93VGV4dC0tM3NnSHNcIjsiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHt1c2VJbnRsfSBmcm9tICdnYXRzYnktcGx1Z2luLWludGwnO1xuaW1wb3J0IHtkZWZpbmVNZXNzYWdlc30gZnJvbSAncmVhY3QtaW50bCc7XG5cbi8vIEB0cy1pZ25vcmVcbmltcG9ydCBsaWdodGJ1bGJJY29uIGZyb20gJy9ub2RlX21vZHVsZXMvdXN3ZHMvZGlzdC9pbWcvdXNhLWljb25zL2xpZ2h0YnVsYl9vdXRsaW5lLnN2Zyc7XG5pbXBvcnQgKiBhcyBzdHlsZXMgZnJvbSAnLi9tYXBJbnRyb2R1Y3Rpb24ubW9kdWxlLnNjc3MnO1xuXG5jb25zdCBNYXBJbnRyb2R1Y3Rpb24gPSAoKSA9PiB7XG4gIGNvbnN0IGludGwgPSB1c2VJbnRsKCk7XG4gIGNvbnN0IG1lc3NhZ2VzID0gZGVmaW5lTWVzc2FnZXMoe1xuICAgIG1hcEludHJvSGVhZGVyOiB7XG4gICAgICBpZDogJ21hcEludHJvLm1hcEludHJvSGVhZGVyJyxcbiAgICAgIGRlZmF1bHRNZXNzYWdlOiAnWm9vbSBhbmQgc2VsZWN0IGEgY2Vuc3VzIGJsb2NrIGdyb3VwIHRvIHZpZXcgZGF0YScsXG4gICAgICBkZXNjcmlwdGlvbjogJ2ludHJvZHVjdG9yeSB0ZXh0IG9mIHdheXMgdG8gdXNlIHRoZSBtYXAnLFxuICAgIH0sXG4gICAgZGlkWW91S25vdzoge1xuICAgICAgaWQ6ICdtYXBJbnRyby5kaWRZb3VLbm93JyxcbiAgICAgIGRlZmF1bHRNZXNzYWdlOiAnIERpZCB5b3Uga25vdz8nLFxuICAgICAgZGVzY3JpcHRpb246ICd0ZXh0IHByb21wdGluZyBhIGNpdGUgcGFyYWdyYXBoJyxcbiAgICB9LFxuICAgIGNlbnN1c0Jsb2NrR3JvdXBEZWZpbml0aW9uOiB7XG4gICAgICBpZDogJ21hcEludHJvLmNlbnN1c0Jsb2NrR3JvdXBEZWZpbml0aW9uJyxcbiAgICAgIGRlZmF1bHRNZXNzYWdlOiAnQSBjZW5zdXMgYmxvY2sgZ3JvdXAgaXMgZ2VuZXJhbGx5IGJldHdlZW4gNjAwIGFuZCAzLDAwMCBwZW9wbGUuICcgK1xuICAgICAgJ0l0IGlzIHRoZSBzbWFsbGVzdCBnZW9ncmFwaGljYWwgdW5pdCBmb3Igd2hpY2ggdGhlIFUuUy4gQ2Vuc3VzICcgK1xuICAgICAgJ0J1cmVhdSBwdWJsaXNoZXMgc2FtcGxlIGRhdGEuJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnY2l0ZXMgdGhlIGRlZmluaXRpb24gYW5kIGhlbHBmdWwgaW5mb3JtYXRpb24gYWJvdXQgY2Vuc3VzIGdyb3VwcycsXG4gICAgfSxcbiAgfSk7XG5cbiAgcmV0dXJuIChcbiAgICA8YXNpZGUgY2xhc3NOYW1lPXtzdHlsZXMubWFwSW50cm9Db250YWluZXJ9PlxuICAgICAgPGhlYWRlciBjbGFzc05hbWU9e3N0eWxlcy5tYXBJbnRyb0hlYWRlcn0+e2ludGwuZm9ybWF0TWVzc2FnZShtZXNzYWdlcy5tYXBJbnRyb0hlYWRlcil9PC9oZWFkZXI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm1hcEludHJvVGV4dH0+XG4gICAgICAgIDxpbWcgY2xhc3NOYW1lPXtzdHlsZXMubWFwSW50cm9MaWdodGJ1bGJ9IHNyYz17bGlnaHRidWxiSWNvbn0gLz5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5kaWRZb3VLbm93Qm94fT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmRpZFlvdUtub3d9PntpbnRsLmZvcm1hdE1lc3NhZ2UobWVzc2FnZXMuZGlkWW91S25vdyl9PC9kaXY+XG4gICAgICAgICAgPGNpdGUgY2xhc3NOYW1lPXtzdHlsZXMuZGlkWW91S25vd1RleHR9PntpbnRsLmZvcm1hdE1lc3NhZ2UobWVzc2FnZXMuY2Vuc3VzQmxvY2tHcm91cERlZmluaXRpb24pfTwvY2l0ZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2FzaWRlPlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgTWFwSW50cm9kdWN0aW9uO1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgdmFyIGFyZWFEZXRhaWxDb250YWluZXIgPSBcImFyZWFEZXRhaWwtbW9kdWxlLS1hcmVhRGV0YWlsQ29udGFpbmVyLS0xNWFlOVwiO1xuZXhwb3J0IHZhciB0b3BSb3cgPSBcImFyZWFEZXRhaWwtbW9kdWxlLS10b3BSb3ctLUdLZllqXCI7XG5leHBvcnQgdmFyIGN1bXVsYXRpdmVJbmRleFNjb3JlID0gXCJhcmVhRGV0YWlsLW1vZHVsZS0tY3VtdWxhdGl2ZUluZGV4U2NvcmUtLTZJako5XCI7XG5leHBvcnQgdmFyIGNhdGVnb3JpemF0aW9uID0gXCJhcmVhRGV0YWlsLW1vZHVsZS0tY2F0ZWdvcml6YXRpb24tLTNIUTNnXCI7XG5leHBvcnQgdmFyIHRvcFJvd1RpdGxlID0gXCJhcmVhRGV0YWlsLW1vZHVsZS0tdG9wUm93VGl0bGUtLTNwRHRhXCI7XG5leHBvcnQgdmFyIGNlbnN1c0xhYmVsID0gXCJhcmVhRGV0YWlsLW1vZHVsZS0tY2Vuc3VzTGFiZWwtLTJqREpsXCI7XG5leHBvcnQgdmFyIHRvcFJvd1N1YlRpdGxlID0gXCJhcmVhRGV0YWlsLW1vZHVsZS0tdG9wUm93U3ViVGl0bGUtLU44X0dQXCI7XG5leHBvcnQgdmFyIHNjb3JlID0gXCJhcmVhRGV0YWlsLW1vZHVsZS0tc2NvcmUtLTNpOHcxXCI7XG5leHBvcnQgdmFyIHNjb3JlU3VwZXJzY3JpcHQgPSBcImFyZWFEZXRhaWwtbW9kdWxlLS1zY29yZVN1cGVyc2NyaXB0LS13bUVJZ1wiO1xuZXhwb3J0IHZhciBwcmlvcml0eSA9IFwiYXJlYURldGFpbC1tb2R1bGUtLXByaW9yaXR5LS1QTE1jaFwiO1xuZXhwb3J0IHZhciBwcmlvcml0aXplZCA9IFwiYXJlYURldGFpbC1tb2R1bGUtLXByaW9yaXRpemVkLS0xZlZyUVwiO1xuZXhwb3J0IHZhciB0aHJlc2hvbGQgPSBcImFyZWFEZXRhaWwtbW9kdWxlLS10aHJlc2hvbGQtLTM0YklMXCI7XG5leHBvcnQgdmFyIG5vblByaW9yaXRpemVkID0gXCJhcmVhRGV0YWlsLW1vZHVsZS0tbm9uUHJpb3JpdGl6ZWQtLTFkRWZrXCI7XG5leHBvcnQgdmFyIHByaW9yaXRpemF0aW9uID0gXCJhcmVhRGV0YWlsLW1vZHVsZS0tcHJpb3JpdGl6YXRpb24tLTI4MmRMXCI7XG5leHBvcnQgdmFyIGNlbnN1c1JvdyA9IFwiYXJlYURldGFpbC1tb2R1bGUtLWNlbnN1c1Jvdy0tMWI5cm1cIjtcbmV4cG9ydCB2YXIgY2Vuc3VzVGV4dCA9IFwiYXJlYURldGFpbC1tb2R1bGUtLWNlbnN1c1RleHQtLTRoZ3ZyXCI7XG5leHBvcnQgdmFyIGluZGljYXRvckRlc2NyaXB0aW9uID0gXCJhcmVhRGV0YWlsLW1vZHVsZS0taW5kaWNhdG9yRGVzY3JpcHRpb24tLTJHQUJqXCI7XG5leHBvcnQgdmFyIGRpdmlkZXIgPSBcImFyZWFEZXRhaWwtbW9kdWxlLS1kaXZpZGVyLS0zcHRfYVwiO1xuZXhwb3J0IHZhciBpbmRpY2F0b3JCb3ggPSBcImFyZWFEZXRhaWwtbW9kdWxlLS1pbmRpY2F0b3JCb3gtLXdURWxkXCI7XG5leHBvcnQgdmFyIGluZGljYXRvclRpdGxlID0gXCJhcmVhRGV0YWlsLW1vZHVsZS0taW5kaWNhdG9yVGl0bGUtLTF0WE1BXCI7XG5leHBvcnQgdmFyIGluZGljYXRvclZhbHVlID0gXCJhcmVhRGV0YWlsLW1vZHVsZS0taW5kaWNhdG9yVmFsdWUtLTNwbU9JXCI7IiwiaW1wb3J0IHtMbmdMYXRCb3VuZHNMaWtlfSBmcm9tICdtYXBsaWJyZS1nbCc7XG5pbXBvcnQge2lzTW9iaWxlIGFzIGlzTW9iaWxlUmVhY3REZXZpY2VEZXRlY3R9IGZyb20gJ3JlYWN0LWRldmljZS1kZXRlY3QnO1xuXG4vLyBVUkxTXG5leHBvcnQgY29uc3QgRkVBVFVSRV9USUxFX0JBU0VfVVJMID0gJ2h0dHBzOi8vZDJ6amlkNm41amEycHQuY2xvdWRmcm9udC5uZXQnO1xuY29uc3QgWFlaX1NVRkZJWCA9ICd7en0ve3h9L3t5fS5wYmYnO1xuZXhwb3J0IGNvbnN0IGZlYXR1cmVVUkxGb3JUaWxlc2V0TmFtZSA9ICh0aWxlc2V0TmFtZSA6c3RyaW5nICkgOiBzdHJpbmcgPT4ge1xuICByZXR1cm4gYCR7RkVBVFVSRV9USUxFX0JBU0VfVVJMfS8ke3RpbGVzZXROYW1lfS8ke1hZWl9TVUZGSVh9YDtcbn07XG5leHBvcnQgY29uc3QgRkVBVFVSRV9USUxFX0hJR0hfWk9PTV9VUkwgPSBmZWF0dXJlVVJMRm9yVGlsZXNldE5hbWUoJzA3MTRfaGlnaCcpO1xuZXhwb3J0IGNvbnN0IEZFQVRVUkVfVElMRV9MT1dfWk9PTV9VUkwgPSBmZWF0dXJlVVJMRm9yVGlsZXNldE5hbWUoJ3RpbGVzX2xvdycpO1xuXG5cbi8vIFBlcmZvcm1hbmNlIG1hcmtlcnNcbmV4cG9ydCBjb25zdCBQRVJGT1JNQU5DRV9NQVJLRVJfTUFQX0lETEUgPSAnTUFQX0lETEUnO1xuXG4vLyBQcm9wZXJ0aWVzXG5leHBvcnQgY29uc3QgU0NPUkVfUFJPUEVSVFlfSElHSCA9ICdTY29yZSBEIChwZXJjZW50aWxlKSc7XG5leHBvcnQgY29uc3QgU0NPUkVfUFJPUEVSVFlfTE9XID0gJ0RfU0NPUkUnO1xuZXhwb3J0IGNvbnN0IEdFT0lEX1BST1BFUlRZID0gJ0dFT0lEMTAnO1xuZXhwb3J0IGNvbnN0IEhJR0hfU0NPUkVfU09VUkNFX05BTUUgPSAnc2NvcmUtaGlnaCc7XG5leHBvcnQgY29uc3QgSElHSF9TQ09SRV9MQVlFUl9OQU1FID0gJ3Njb3JlLWhpZ2gtbGF5ZXInO1xuZXhwb3J0IGNvbnN0IExPV19TQ09SRV9TT1VSQ0VfTkFNRSA9ICdzY29yZS1sb3cnO1xuZXhwb3J0IGNvbnN0IExPV19TQ09SRV9MQVlFUl9OQU1FID0gJ3Njb3JlLWxvdy1sYXllcic7XG5leHBvcnQgY29uc3QgU0VMRUNURURfUFJPUEVSVFkgPSAnc2VsZWN0ZWQnO1xuZXhwb3J0IGNvbnN0IENVUlJFTlRMWV9TRUxFQ1RFRF9GRUFUVVJFX0hJR0hMSUdIVF9MQVlFUl9OQU1FID0gJ2N1cnJlbnRseS1zZWxlY3RlZC1mZWF0dXJlLWhpZ2hsaWdodC1sYXllcic7XG5leHBvcnQgY29uc3QgQkxPQ0tfR1JPVVBfQk9VTkRBUllfTEFZRVJfTkFNRSA9ICdibG9jay1ncm91cC1ib3VuZGFyeS1sYXllcic7XG5cblxuLy8gUHJvcGVydGllc1xuZXhwb3J0IGNvbnN0IFBPVkVSVFlfUFJPUEVSVFlfUEVSQ0VOVElMRSA9ICdQb3ZlcnR5IChMZXNzIHRoYW4gMjAwJSBvZiBmZWRlcmFsIHBvdmVydHkgbGluZSkgKHBlcmNlbnRpbGUpJztcbmV4cG9ydCBjb25zdCBIT1VTSU5HX0JVUkRFTl9QUk9QRVJUWV9QRVJDRU5USUxFID0gJ0hvdXNpbmcgYnVyZGVuIChwZXJjZW50KSAocGVyY2VudGlsZSknO1xuZXhwb3J0IGNvbnN0IExJTkdVSVNUSUNfSVNPTEFUSU9OX1BST1BFUlRZX1BFUkNFTlRJTEUgPSAnTGluZ3Vpc3RpYyBpc29sYXRpb24gKHBlcmNlbnQpIChwZXJjZW50aWxlKSc7XG5leHBvcnQgY29uc3QgVU5FTVBMT1lNRU5UX1BST1BFUlRZX1BFUkNFTlRJTEUgPSAnVW5lbXBsb3llZCBjaXZpbGlhbnMgKHBlcmNlbnQpIChwZXJjZW50aWxlKSc7XG5leHBvcnQgY29uc3QgVE9UQUxfUE9QVUxBVElPTiA9ICdUb3RhbCBwb3B1bGF0aW9uJztcbmV4cG9ydCBjb25zdCBFRFVDQVRJT05fUFJPUEVSVFlfUEVSQ0VOVElMRSA9ICdQZXJjZW50IGluZGl2aWR1YWxzIGFnZSAyNSBvciBvdmVyICcgK1xuJ3dpdGggbGVzcyB0aGFuIGhpZ2ggc2Nob29sIGRlZ3JlZSAocGVyY2VudGlsZSknO1xuXG4vLyBUaGUgbmFtZSBvZiB0aGUgbGF5ZXIgd2l0aGluIHRoZSB0aWxlcyB0aGF0IGNvbnRhaW5zIHRoZSBzY29yZVxuZXhwb3J0IGNvbnN0IFNDT1JFX1NPVVJDRV9MQVlFUiA9ICdibG9ja3MnO1xuXG5leHBvcnQgdHlwZSBKNDBQcm9wZXJ0aWVzID0geyBba2V5OiBzdHJpbmddOiBhbnkgfTtcblxuLy8gWm9vbVxuZXhwb3J0IGNvbnN0IEdMT0JBTF9NSU5fWk9PTSA9IDM7XG5leHBvcnQgY29uc3QgR0xPQkFMX01BWF9aT09NID0gMjI7XG5leHBvcnQgY29uc3QgR0xPQkFMX01JTl9aT09NX0xPVyA9IDM7XG5leHBvcnQgY29uc3QgR0xPQkFMX01BWF9aT09NX0xPVyA9IDc7XG5leHBvcnQgY29uc3QgR0xPQkFMX01JTl9aT09NX0hJR0hMSUdIVCA9IDk7XG5leHBvcnQgY29uc3QgR0xPQkFMX01BWF9aT09NX0hJR0hMSUdIVCA9IDIyO1xuZXhwb3J0IGNvbnN0IEdMT0JBTF9NSU5fWk9PTV9ISUdIID0gNztcbmV4cG9ydCBjb25zdCBHTE9CQUxfTUFYX1pPT01fSElHSCA9IDExO1xuXG4vLyBCb3VuZHNcbmV4cG9ydCBjb25zdCBHTE9CQUxfTUFYX0JPVU5EUyA6IExuZ0xhdEJvdW5kc0xpa2UgPSBbXG4gIFstMTgwLjExODMwNiwgNS40OTk1NTBdLFxuICBbLTY1LjAsIDgzLjE2MjEwMl0sXG5dO1xuXG5leHBvcnQgY29uc3QgTE9XRVJfNDhfQk9VTkRTIDogTG5nTGF0Qm91bmRzTGlrZSA9IFtcbiAgWy0xMjQuNzg0NDA3OSwgMjQuNzQzMzE5NV0sXG4gIFstNjYuOTUxMzgxMiwgNDkuMzQ1Nzg2OF0sXG5dO1xuXG5leHBvcnQgY29uc3QgQUxBU0tBX0JPVU5EUyA6IExuZ0xhdEJvdW5kc0xpa2UgPSBbXG4gIFstMTgzLjg1Njg4OCwgNTAuODc1MzExXSxcbiAgWy0xNDAuOTMyNjE3LCA3MS45NTg3OTddLFxuXTtcblxuZXhwb3J0IGNvbnN0IEhBV0FJSV9CT1VORFMgOiBMbmdMYXRCb3VuZHNMaWtlID0gW1xuICBbLTE2OC4xMTgzMDYsIDE4Ljc0ODExNV0sXG4gIFstMTU0Ljc1Nzg4MSwgMjIuMzc4NDEzXSxcbl07XG5cbmV4cG9ydCBjb25zdCBQVUVSVE9fUklDT19CT1VORFMgOiBMbmdMYXRCb3VuZHNMaWtlID0gW1xuICBbLTY3Ljk0NTQwNCwgMTcuODgzMjhdLFxuICBbLTY1LjIyMDcwMywgMTguNTE1NjgzXSxcbl07XG5cbmV4cG9ydCBjb25zdCBHVUFNX0JPVU5EUyA6IExuZ0xhdEJvdW5kc0xpa2UgPSBbXG4gIFstMjE1LjM4OTcwOSwgMTMuMjI1OTA5XSxcbiAgWy0yMTUuMDQwODk0LCAxMy42NjMzMzVdLFxuXTtcblxuZXhwb3J0IGNvbnN0IE1BUklBTkFfSVNMQU5EX0JPVU5EUyA6IExuZ0xhdEJvdW5kc0xpa2UgPSBbXG4gIFstMjE1LjMxMzQ0OSwgMTQuMDA3ODAxXSxcbiAgWy0yMTMuNzQyNDA0LCAxOS43NTAzMjZdLFxuXTtcblxuZXhwb3J0IGNvbnN0IEFNRVJJQ0FOX1NBTU9BX0JPVU5EUyA6IExuZ0xhdEJvdW5kc0xpa2UgPSBbXG4gIFstMTcxLjA4OTg3NCwgLTE0LjU0ODY5OV0sXG4gIFstMTY4LjE0MzMsIC0xMS4wNDY5MzRdLFxuXTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfQ0VOVEVSID0gWzMyLjQ2ODcxMjYsIC04Ni41MDIxMzZdO1xuXG4vLyBPcGFjaXR5XG5leHBvcnQgY29uc3QgREVGQVVMVF9MQVlFUl9PUEFDSVRZID0gMC42O1xuXG4vLyBDb2xvcnNcbmV4cG9ydCBjb25zdCBERUZBVUxUX09VVExJTkVfQ09MT1IgPSAnIzRFQTVDRic7XG5leHBvcnQgY29uc3QgTUlOX0NPTE9SID0gJyNGRkZGRkYnO1xuZXhwb3J0IGNvbnN0IE1FRF9DT0xPUiA9ICcjRDFEQUU2JztcbmV4cG9ydCBjb25zdCBNQVhfQ09MT1IgPSAnIzc2OEZCMyc7XG5leHBvcnQgY29uc3QgQk9SREVSX0hJR0hMSUdIVF9DT0xPUiA9ICcjMDBCREUzJztcbmV4cG9ydCBjb25zdCBDVVJSRU5UTFlfU0VMRUNURURfRkVBVFVSRV9MQVlFUl9PUEFDSVRZID0gMC41O1xuXG4vLyBXaWR0aHNcbmV4cG9ydCBjb25zdCBISUdITElHSFRfQk9SREVSX1dJRFRIID0gNS4wO1xuZXhwb3J0IGNvbnN0IENVUlJFTlRMWV9TRUxFQ1RFRF9GRUFUVVJFX0xBWUVSX1dJRFRIID0gMC44O1xuXG4vLyBTY29yZSBib3VuZGFyaWVzXG5leHBvcnQgY29uc3QgU0NPUkVfQk9VTkRBUllfTE9XID0gMC4wO1xuZXhwb3J0IGNvbnN0IFNDT1JFX0JPVU5EQVJZX1RIUkVTSE9MRCA9IDAuNjtcbmV4cG9ydCBjb25zdCBTQ09SRV9CT1VOREFSWV9QUklPUklUSVpFRCA9IDAuNzU7XG5cbmV4cG9ydCBjb25zdCBpc01vYmlsZSA9IGlzTW9iaWxlUmVhY3REZXZpY2VEZXRlY3Q7XG4iLCIvLyBFeHRlcm5hbCBMaWJzOlxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHt1c2VJbnRsfSBmcm9tICdnYXRzYnktcGx1Z2luLWludGwnO1xuaW1wb3J0IHtkZWZpbmVNZXNzYWdlc30gZnJvbSAncmVhY3QtaW50bCc7XG5cbi8vIENvbXBvbmVudHM6XG5cbi8vIFN0eWxlcyBhbmQgY29uc3RhbnRzXG5pbXBvcnQgKiBhcyBzdHlsZXMgZnJvbSAnLi9hcmVhRGV0YWlsLm1vZHVsZS5zY3NzJztcbmltcG9ydCAqIGFzIGNvbnN0YW50cyBmcm9tICcuLi9kYXRhL2NvbnN0YW50cyc7XG5cbmV4cG9ydCBjb25zdCByZWFkYWJsZVBlcmNlbnQgPSAocGVyY2VudDogbnVtYmVyKSA9PiB7XG4gIHJldHVybiBgJHsocGVyY2VudCAqIDEwMCkudG9GaXhlZCgxKX1gO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENhdGVnb3JpemF0aW9uID0gKHBlcmNlbnRpbGU6IG51bWJlcikgPT4ge1xuICBsZXQgY2F0ZWdvcml6YXRpb247XG4gIGxldCBjYXRlZ29yeUNpcmNsZVN0eWxlO1xuXG4gIGlmIChwZXJjZW50aWxlID49IGNvbnN0YW50cy5TQ09SRV9CT1VOREFSWV9QUklPUklUSVpFRCApIHtcbiAgICBjYXRlZ29yaXphdGlvbiA9ICdQcmlvcml0aXplZCc7XG4gICAgY2F0ZWdvcnlDaXJjbGVTdHlsZSA9IHN0eWxlcy5wcmlvcml0aXplZDtcbiAgfSBlbHNlIGlmIChjb25zdGFudHMuU0NPUkVfQk9VTkRBUllfVEhSRVNIT0xEIDw9IHBlcmNlbnRpbGUgJiYgcGVyY2VudGlsZSA8IGNvbnN0YW50cy5TQ09SRV9CT1VOREFSWV9QUklPUklUSVpFRCkge1xuICAgIGNhdGVnb3JpemF0aW9uID0gJ1RocmVzaG9sZCc7XG4gICAgY2F0ZWdvcnlDaXJjbGVTdHlsZSA9IHN0eWxlcy50aHJlc2hvbGQ7XG4gIH0gZWxzZSB7XG4gICAgY2F0ZWdvcml6YXRpb24gPSAnTm9uLXByaW9yaXRpemVkJztcbiAgICBjYXRlZ29yeUNpcmNsZVN0eWxlID0gc3R5bGVzLm5vblByaW9yaXRpemVkO1xuICB9XG4gIHJldHVybiBbY2F0ZWdvcml6YXRpb24sIGNhdGVnb3J5Q2lyY2xlU3R5bGVdO1xufTtcblxuaW50ZXJmYWNlIElBcmVhRGV0YWlsUHJvcHMge1xuICBwcm9wZXJ0aWVzOiBjb25zdGFudHMuSjQwUHJvcGVydGllcyxcbn1cblxuY29uc3QgQXJlYURldGFpbCA9ICh7cHJvcGVydGllc306SUFyZWFEZXRhaWxQcm9wcykgPT4ge1xuICBjb25zdCBpbnRsID0gdXNlSW50bCgpO1xuICBjb25zdCBtZXNzYWdlcyA9IGRlZmluZU1lc3NhZ2VzKHtcbiAgICBjdW11bGF0aXZlSW5kZXhTY29yZToge1xuICAgICAgaWQ6ICdhcmVhRGV0YWlsLnByaW9yaXR5SW5mby5jdW11bGF0aXZlSW5kZXhTY29yZScsXG4gICAgICBkZWZhdWx0TWVzc2FnZTogJ0N1bXVsYXRpdmUgSW5kZXggU2NvcmUnLFxuICAgICAgZGVzY3JpcHRpb246ICd0aGUgY3VtdWxhdGl2ZSBzY29yZSBvZiB0aGUgZmVhdHVyZSBzZWxlY3RlZCcsXG4gICAgfSxcbiAgICBwZXJjZW50aWxlOiB7XG4gICAgICBpZDogJ2FyZWFEZXRhaWwucHJpb3JpdHlJbmZvLnBlcmNlbnRpbGUnLFxuICAgICAgZGVmYXVsdE1lc3NhZ2U6ICdwZXJjZW50aWxlJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAndGhlIHBlcmNlbnRpbCBvZiB0aGUgZmVhdHVyZSBzZWxlY3RlZCcsXG4gICAgfSxcbiAgICBjYXRlZ29yaXphdGlvbjoge1xuICAgICAgaWQ6ICdhcmVhRGV0YWlsLnByaW9yaXR5SW5mby5jYXRlZ29yaXphdGlvbicsXG4gICAgICBkZWZhdWx0TWVzc2FnZTogJ0NhdGVnb3JpemF0aW9uJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAndGhlIGNhdGVnb3JpemF0aW9uIG9mIHByaW9yaXRpemVkLCB0aHJlc2hvbGQgb3Igbm9uLXByaW9yaXRpemVkJyxcbiAgICB9LFxuICAgIGNlbnN1c0Jsb2NrR3JvdXA6IHtcbiAgICAgIGlkOiAnYXJlYURldGFpbC5nZW9ncmFwaGljSW5mby5jZW5zdXNCbG9ja0dyb3VwJyxcbiAgICAgIGRlZmF1bHRNZXNzYWdlOiAnQ2Vuc3VzIGJsb2NrIGdyb3VwOicsXG4gICAgICBkZXNjcmlwdGlvbjogJ3RoZSBjZW5zdXMgYmxvY2sgZ3JvdXAgaWQgbnVtYmVyIG9mIHRoZSBmZWF0dXJlIHNlbGVjdGVkJyxcbiAgICB9LFxuICAgIGNvdW50eToge1xuICAgICAgaWQ6ICdhcmVhRGV0YWlsLmdlb2dyYXBoaWNJbmZvLmNvdW50eScsXG4gICAgICBkZWZhdWx0TWVzc2FnZTogJ0NvdW50eTonLFxuICAgICAgZGVzY3JpcHRpb246ICd0aGUgY291bnR5IG9mIHRoZSBmZWF0dXJlIHNlbGVjdGVkJyxcbiAgICB9LFxuICAgIHN0YXRlOiB7XG4gICAgICBpZDogJ2FyZWFEZXRhaWwuZ2VvZ3JhcGhpY0luZm8uc3RhdGUnLFxuICAgICAgZGVmYXVsdE1lc3NhZ2U6ICdTdGF0ZTogJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAndGhlIHN0YXRlIG9mIHRoZSBmZWF0dXJlIHNlbGVjdGVkJyxcbiAgICB9LFxuICAgIHBvcHVsYXRpb246IHtcbiAgICAgIGlkOiAnYXJlYURldGFpbC5nZW9ncmFwaGljSW5mby5wb3B1bGF0aW9uJyxcbiAgICAgIGRlZmF1bHRNZXNzYWdlOiAnUG9wdWxhdGlvbjonLFxuICAgICAgZGVzY3JpcHRpb246ICd0aGUgcG9wdWxhdGlvbiBvZiB0aGUgZmVhdHVyZSBzZWxlY3RlZCcsXG4gICAgfSxcbiAgICBpbmRpY2F0b3JDb2x1bW5IZWFkZXI6IHtcbiAgICAgIGlkOiAnYXJlYURldGFpbC5pbmRpY2F0b3JzLmluZGljYXRvckNvbHVtbkhlYWRlcicsXG4gICAgICBkZWZhdWx0TWVzc2FnZTogJ0lORElDQVRPUlMnLFxuICAgICAgZGVzY3JpcHRpb246ICd0aGUgcG9wdWxhdGlvbiBvZiB0aGUgZmVhdHVyZSBzZWxlY3RlZCcsXG4gICAgfSxcbiAgICBwZXJjZW50aWxlQ29sdW1uSGVhZGVyOiB7XG4gICAgICBpZDogJ2FyZWFEZXRhaWwuaW5kaWNhdG9ycy5wZXJjZW50aWxlQ29sdW1uSGVhZGVyJyxcbiAgICAgIGRlZmF1bHRNZXNzYWdlOiAnUEVSQ0VOVElMRSAoMC0xMDApJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAndGhlIHBvcHVsYXRpb24gb2YgdGhlIGZlYXR1cmUgc2VsZWN0ZWQnLFxuICAgIH0sXG4gICAgcG92ZXJ0eToge1xuICAgICAgaWQ6ICdhcmVhRGV0YWlsLmluZGljYXRvci5wb3ZlcnR5JyxcbiAgICAgIGRlZmF1bHRNZXNzYWdlOiAnUG92ZXJ0eScsXG4gICAgICBkZXNjcmlwdGlvbjogJ0hvdXNlaG9sZCBpbmNvbWUgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHR3aWNlIHRoZSBmZWRlcmFsIFwicG92ZXJ0eSBsZXZlbFwiJyxcbiAgICB9LFxuICAgIGVkdWNhdGlvbjoge1xuICAgICAgaWQ6ICdhcmVhRGV0YWlsLmluZGljYXRvci5lZHVjYXRpb24nLFxuICAgICAgZGVmYXVsdE1lc3NhZ2U6ICdFZHVjYXRpb24nLFxuICAgICAgZGVzY3JpcHRpb246ICdQZXJjZW50IG9mIHBlb3BsZSBhZ2UgMjUgb3Igb2xkZXIgdGhhdCBkaWRu4oCZdCBnZXQgYSBoaWdoIHNjaG9vbCBkaXBsb21hJyxcbiAgICB9LFxuICAgIGxpbmd1aXN0aWNJc29sYXRpb246IHtcbiAgICAgIGlkOiAnYXJlYURldGFpbC5pbmRpY2F0b3IubGluZ3Vpc3RpY0lzb2xhdGlvbicsXG4gICAgICBkZWZhdWx0TWVzc2FnZTogJ0xpbmd1aXN0aWMgaXNvbGF0aW9uJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnSG91c2Vob2xkcyBpbiB3aGljaCBhbGwgbWVtYmVycyBzcGVhayBhIG5vbi1FbmdsaXNoIGxhbmd1YWdlIGFuZCAnICtcbiAgICAgICdzcGVhayBFbmdsaXNoIGxlc3MgdGhhbiBcInZlcnkgd2VsbFwiJyxcbiAgICB9LFxuICAgIHVuZW1wbG95bWVudDoge1xuICAgICAgaWQ6ICdhcmVhRGV0YWlsLmluZGljYXRvci51bmVtcGxveW1lbnQnLFxuICAgICAgZGVmYXVsdE1lc3NhZ2U6ICdVbmVtcGxveW1lbnQgcmF0ZScsXG4gICAgICBkZXNjcmlwdGlvbjogJ051bWJlciBvZiB1bmVtcGxveWVkIHBlb3BsZSBhcyBhIHBlcmNlbnRhZ2Ugb2YgdGhlIGxhYm9yIGZvcmNlJyxcbiAgICB9LFxuICAgIGhvdXNlQnVyZGVuOiB7XG4gICAgICBpZDogJ2FyZWFEZXRhaWwuaW5kaWNhdG9yLmhvdXNlQnVyZGVuJyxcbiAgICAgIGRlZmF1bHRNZXNzYWdlOiAnSG91c2luZyBCdXJkZW4nLFxuICAgICAgZGVzY3JpcHRpb246ICdIb3VzZWhvbGRzIHRoYXQgYXJlIGxvdyBpbmNvbWUgYW5kIHNwZW5kIG1vcmUgdGhhbiAzMCUgb2YgdGhlaXIgaW5jb21lIHRvIGhvdXNpbmcgY29zdHMnLFxuICAgIH0sXG4gIH0pO1xuXG4gIGNvbnN0IHNjb3JlID0gcHJvcGVydGllc1tjb25zdGFudHMuU0NPUkVfUFJPUEVSVFlfSElHSF0gYXMgbnVtYmVyO1xuICBjb25zdCBibG9ja0dyb3VwID0gcHJvcGVydGllc1tjb25zdGFudHMuR0VPSURfUFJPUEVSVFldO1xuICBjb25zdCBwb3B1bGF0aW9uID0gcHJvcGVydGllc1tjb25zdGFudHMuVE9UQUxfUE9QVUxBVElPTl07XG5cbiAgaW50ZXJmYWNlIGluZGljYXRvckluZm8ge1xuICAgIGxhYmVsOiBzdHJpbmcsXG4gICAgZGVzY3JpcHRpb246IHN0cmluZyxcbiAgICB2YWx1ZTogbnVtYmVyLFxuICB9XG5cbiAgLy8gVG9kbzogVGlja2V0ICMzNjcgd2lsbCBiZSByZXBsYWNpbmcgZGVzY3JpcHRpb25zIHdpdGggWUFNTCBmaWxlXG4gIGNvbnN0IHBvdmVydHlJbmZvOmluZGljYXRvckluZm8gPSB7XG4gICAgbGFiZWw6IGludGwuZm9ybWF0TWVzc2FnZShtZXNzYWdlcy5wb3ZlcnR5KSxcbiAgICBkZXNjcmlwdGlvbjogJ0hvdXNlaG9sZCBpbmNvbWUgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHR3aWNlIHRoZSBmZWRlcmFsIFwicG92ZXJ0eSBsZXZlbFwiJyxcbiAgICB2YWx1ZTogcHJvcGVydGllc1tjb25zdGFudHMuUE9WRVJUWV9QUk9QRVJUWV9QRVJDRU5USUxFXSxcbiAgfTtcbiAgY29uc3QgZWR1SW5mbzppbmRpY2F0b3JJbmZvID0ge1xuICAgIGxhYmVsOiBpbnRsLmZvcm1hdE1lc3NhZ2UobWVzc2FnZXMuZWR1Y2F0aW9uKSxcbiAgICBkZXNjcmlwdGlvbjogJ1BlcmNlbnQgb2YgcGVvcGxlIGFnZSAyNSBvciBvbGRlciB0aGF0IGRpZG7igJl0IGdldCBhIGhpZ2ggc2Nob29sIGRpcGxvbWEnLFxuICAgIHZhbHVlOiBwcm9wZXJ0aWVzW2NvbnN0YW50cy5FRFVDQVRJT05fUFJPUEVSVFlfUEVSQ0VOVElMRV0sXG4gIH07XG4gIGNvbnN0IGxpbklzb0luZm86aW5kaWNhdG9ySW5mbyA9IHtcbiAgICBsYWJlbDogaW50bC5mb3JtYXRNZXNzYWdlKG1lc3NhZ2VzLmxpbmd1aXN0aWNJc29sYXRpb24pLFxuICAgIGRlc2NyaXB0aW9uOiAnSG91c2Vob2xkcyBpbiB3aGljaCBhbGwgbWVtYmVycyBzcGVhayBhIG5vbi1FbmdsaXNoIGxhbmd1YWdlIGFuZCBzcGVhayBFbmdsaXNoIGxlc3MgdGhhbiBcInZlcnkgd2VsbFwiJyxcbiAgICB2YWx1ZTogcHJvcGVydGllc1tjb25zdGFudHMuTElOR1VJU1RJQ19JU09MQVRJT05fUFJPUEVSVFlfUEVSQ0VOVElMRV0sXG4gIH07XG4gIGNvbnN0IHVtZW1wbG95SW5mbzppbmRpY2F0b3JJbmZvID0ge1xuICAgIGxhYmVsOiBpbnRsLmZvcm1hdE1lc3NhZ2UobWVzc2FnZXMudW5lbXBsb3ltZW50KSxcbiAgICBkZXNjcmlwdGlvbjogJ051bWJlciBvZiB1bmVtcGxveWVkIHBlb3BsZSBhcyBhIHBlcmNlbnRhZ2Ugb2YgdGhlIGxhYm9yIGZvcmNlJyxcbiAgICB2YWx1ZTogcHJvcGVydGllc1tjb25zdGFudHMuVU5FTVBMT1lNRU5UX1BST1BFUlRZX1BFUkNFTlRJTEVdLFxuICB9O1xuICBjb25zdCBob3VzZUJ1cmRlbjppbmRpY2F0b3JJbmZvID0ge1xuICAgIGxhYmVsOiBpbnRsLmZvcm1hdE1lc3NhZ2UobWVzc2FnZXMuaG91c2VCdXJkZW4pLFxuICAgIGRlc2NyaXB0aW9uOiAnSG91c2Vob2xkcyB0aGF0IGFyZSBsb3cgaW5jb21lIGFuZCBzcGVuZCBtb3JlIHRoYW4gMzAlIG9mIHRoZWlyIGluY29tZSB0byBob3VzaW5nIGNvc3RzJyxcbiAgICB2YWx1ZTogcHJvcGVydGllc1tjb25zdGFudHMuSE9VU0lOR19CVVJERU5fUFJPUEVSVFlfUEVSQ0VOVElMRV0sXG4gIH07XG5cbiAgY29uc3QgaW5kaWNhdG9ycyA9IFtwb3ZlcnR5SW5mbywgZWR1SW5mbywgbGluSXNvSW5mbywgdW1lbXBsb3lJbmZvLCBob3VzZUJ1cmRlbl07XG5cbiAgY29uc3QgW2NhdGVnb3JpemF0aW9uLCBjYXRlZ29yeUNpcmNsZVN0eWxlXSA9IGdldENhdGVnb3JpemF0aW9uKHNjb3JlKTtcblxuICByZXR1cm4gKFxuICAgIDxhc2lkZSBjbGFzc05hbWU9e3N0eWxlcy5hcmVhRGV0YWlsQ29udGFpbmVyfSBkYXRhLWN5PXsnYXNpZGUnfT5cbiAgICAgIDxoZWFkZXIgY2xhc3NOYW1lPXtzdHlsZXMudG9wUm93IH0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY3VtdWxhdGl2ZUluZGV4U2NvcmV9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudG9wUm93VGl0bGV9PntpbnRsLmZvcm1hdE1lc3NhZ2UobWVzc2FnZXMuY3VtdWxhdGl2ZUluZGV4U2NvcmUpfTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuc2NvcmV9IGRhdGEtY3k9eydzY29yZSd9PntgJHtyZWFkYWJsZVBlcmNlbnQoc2NvcmUpfWB9XG4gICAgICAgICAgICA8c3VwIGNsYXNzTmFtZT17c3R5bGVzLnNjb3JlU3VwZXJzY3JpcHR9PjxzcGFuPnRoPC9zcGFuPjwvc3VwPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudG9wUm93U3ViVGl0bGV9PntpbnRsLmZvcm1hdE1lc3NhZ2UobWVzc2FnZXMucGVyY2VudGlsZSl9PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNhdGVnb3JpemF0aW9ufT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRvcFJvd1RpdGxlfT57aW50bC5mb3JtYXRNZXNzYWdlKG1lc3NhZ2VzLmNhdGVnb3JpemF0aW9uKX08L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnByaW9yaXR5fT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjYXRlZ29yeUNpcmNsZVN0eWxlfSAvPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5wcmlvcml0aXphdGlvbn0+e2NhdGVnb3JpemF0aW9ufTwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvaGVhZGVyPlxuICAgICAgPHVsIGNsYXNzTmFtZT17c3R5bGVzLmNlbnN1c1Jvd30+XG4gICAgICAgIDxsaT5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5jZW5zdXNMYWJlbH0+e2ludGwuZm9ybWF0TWVzc2FnZShtZXNzYWdlcy5jZW5zdXNCbG9ja0dyb3VwKX0gPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzLmNlbnN1c1RleHR9PntibG9ja0dyb3VwfTwvc3Bhbj5cbiAgICAgICAgPC9saT5cbiAgICAgICAgPGxpPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzLmNlbnN1c0xhYmVsfT57aW50bC5mb3JtYXRNZXNzYWdlKG1lc3NhZ2VzLmNvdW50eSl9IDwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5jZW5zdXNUZXh0fT57J1dhc2hpbmd0b24gQ291bnR5Kid9PC9zcGFuPlxuICAgICAgICA8L2xpPlxuICAgICAgICA8bGk+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMuY2Vuc3VzTGFiZWx9PntpbnRsLmZvcm1hdE1lc3NhZ2UobWVzc2FnZXMuc3RhdGUpfTwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5jZW5zdXNUZXh0fT57J0Rpc3RyaWN0IG9mIENvbHVtYmlhKid9PC9zcGFuPlxuICAgICAgICA8L2xpPlxuICAgICAgICA8bGk+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMuY2Vuc3VzTGFiZWx9PntpbnRsLmZvcm1hdE1lc3NhZ2UobWVzc2FnZXMucG9wdWxhdGlvbil9IDwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5jZW5zdXNUZXh0fT57cG9wdWxhdGlvbi50b0xvY2FsZVN0cmluZygpfTwvc3Bhbj5cbiAgICAgICAgPC9saT5cbiAgICAgIDwvdWw+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmRpdmlkZXJ9PlxuICAgICAgICA8ZGl2PntpbnRsLmZvcm1hdE1lc3NhZ2UobWVzc2FnZXMuaW5kaWNhdG9yQ29sdW1uSGVhZGVyKX08L2Rpdj5cbiAgICAgICAgPGRpdj57aW50bC5mb3JtYXRNZXNzYWdlKG1lc3NhZ2VzLnBlcmNlbnRpbGVDb2x1bW5IZWFkZXIpfTwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIHtpbmRpY2F0b3JzLm1hcCgoaW5kaWNhdG9yLCBpbmRleCkgPT4gKFxuICAgICAgICA8bGkga2V5PXtpbmRleH0gY2xhc3NOYW1lPXtzdHlsZXMuaW5kaWNhdG9yQm94fSBkYXRhLWN5PXsnaW5kaWNhdG9yQm94J30+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5pbmRpY2F0b3JJbmZvfT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaW5kaWNhdG9yVGl0bGV9PntpbmRpY2F0b3IubGFiZWx9PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmluZGljYXRvckRlc2NyaXB0aW9ufT5cbiAgICAgICAgICAgICAge2luZGljYXRvci5kZXNjcmlwdGlvbn1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaW5kaWNhdG9yVmFsdWV9PntyZWFkYWJsZVBlcmNlbnQoaW5kaWNhdG9yLnZhbHVlKX08L2Rpdj5cbiAgICAgICAgPC9saT5cbiAgICAgICkpfVxuXG4gICAgPC9hc2lkZT5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEFyZWFEZXRhaWw7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IE1hcEludHJvZHVjdGlvbiBmcm9tICcuL21hcEludHJvZHVjdGlvbic7XG5pbXBvcnQgQXJlYURldGFpbCBmcm9tICcuL2FyZWFEZXRhaWwnO1xuXG5pbnRlcmZhY2UgSU1hcEluZm9QYW5lbFByb3BzIHtcbiAgICBjbGFzc05hbWU6IHN0cmluZyxcbiAgICBmZWF0dXJlUHJvcGVydGllczogeyBba2V5OnN0cmluZ106IHN0cmluZyB8IG51bWJlciB9IHwgdW5kZWZpbmVkLFxuICAgIHNlbGVjdGVkRmVhdHVyZUlkOiBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWRcbiAgfVxuXG5jb25zdCBNYXBJbmZvUGFuZWwgPSAoe2NsYXNzTmFtZSwgZmVhdHVyZVByb3BlcnRpZXMsIHNlbGVjdGVkRmVhdHVyZUlkfTpJTWFwSW5mb1BhbmVsUHJvcHMpID0+IHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lfSA+XG4gICAgICB7KGZlYXR1cmVQcm9wZXJ0aWVzICYmIHNlbGVjdGVkRmVhdHVyZUlkICkgP1xuICAgICAgICAgIDxBcmVhRGV0YWlsIHByb3BlcnRpZXM9e2ZlYXR1cmVQcm9wZXJ0aWVzfSAvPiA6XG4gICAgICAgICAgPE1hcEludHJvZHVjdGlvbiAvPlxuICAgICAgfVxuICAgIDwvZGl2PlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgTWFwSW5mb1BhbmVsO1xuIiwiaW1wb3J0IHtTdHlsZSwgRmlsbFBhaW50fSBmcm9tICdtYXBsaWJyZS1nbCc7XG5pbXBvcnQgY2hyb21hIGZyb20gJ2Nocm9tYS1qcyc7XG5pbXBvcnQgKiBhcyBjb25zdGFudHMgZnJvbSAnLi4vZGF0YS9jb25zdGFudHMnO1xuaW1wb3J0IHtGbGFnQ29udGFpbmVyfSBmcm9tICcuLi9jb250ZXh0cy9GbGFnQ29udGV4dCc7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZXF1aXJlLWpzZG9jXG5mdW5jdGlvbiBoZXhUb0hTTEEoaGV4OnN0cmluZywgYWxwaGE6bnVtYmVyKSB7XG4gIHJldHVybiBjaHJvbWEoaGV4KS5hbHBoYShhbHBoYSkuY3NzKCdoc2wnKTtcbn1cblxuLyoqXG4gKiBgTWFrZVBhaW50YCBnZW5lcmF0ZXMgYSB6b29tLWZhZGVkIE1hcGxpYnJlIHN0eWxlIGZvcm1hdHRlZCBsYXllciBnaXZlbiBhIHNldCBvZiBwYXJhbWV0ZXJzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZCA6IHRoZSBmaWVsZCB3aXRoaW4gdGhlIGRhdGEgdG8gY29uc3VsdFxuICogQHBhcmFtIHtudW1iZXJ9IG1pblJhbXAgOiB0aGUgbWluaW11bSB2YWx1ZSB0aGlzIGNhbiBhc3N1bWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBtZWRSYW1wIDogdGhlIG1lZGl1bSB2YWx1ZSB0aGlzIGNhbiBhc3N1bWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBtYXhSYW1wIDogdGhlIG1heGltdW0gdmFsdWUgdGhpcyBjYW4gYXNzdW1lXG4gKiBAcmV0dXJuIHtGaWxsUGFpbnR9IGEgbWFwbGlicmVnbCBmaWxsIGxheWVyXG4gKiovXG5mdW5jdGlvbiBtYWtlUGFpbnQoe1xuICBmaWVsZCxcbiAgbWluUmFtcCxcbiAgbWVkUmFtcCxcbiAgbWF4UmFtcCxcbn06IHtcbiAgICBmaWVsZDogc3RyaW5nO1xuICAgIG1pblJhbXA6IG51bWJlcjtcbiAgICBtZWRSYW1wOiBudW1iZXI7XG4gICAgbWF4UmFtcDogbnVtYmVyO1xuICB9KTogRmlsbFBhaW50IHtcbiAgY29uc3QgcGFpbnREZXNjcmlwdG9yIDogRmlsbFBhaW50ID0ge1xuICAgICdmaWxsLWNvbG9yJzogW1xuICAgICAgJ3N0ZXAnLFxuICAgICAgWydnZXQnLCBmaWVsZF0sXG4gICAgICBoZXhUb0hTTEEoY29uc3RhbnRzLk1JTl9DT0xPUiwgY29uc3RhbnRzLkRFRkFVTFRfTEFZRVJfT1BBQ0lUWSApLFxuICAgICAgbWluUmFtcCxcbiAgICAgIGhleFRvSFNMQShjb25zdGFudHMuTUlOX0NPTE9SLCBjb25zdGFudHMuREVGQVVMVF9MQVlFUl9PUEFDSVRZICksXG4gICAgICBtZWRSYW1wLFxuICAgICAgaGV4VG9IU0xBKGNvbnN0YW50cy5NRURfQ09MT1IsIGNvbnN0YW50cy5ERUZBVUxUX0xBWUVSX09QQUNJVFkgKSxcbiAgICAgIG1heFJhbXAsXG4gICAgICBoZXhUb0hTTEEoY29uc3RhbnRzLk1BWF9DT0xPUiwgY29uc3RhbnRzLkRFRkFVTFRfTEFZRVJfT1BBQ0lUWSApLFxuICAgIF0sXG4gIH07XG4gIHJldHVybiBwYWludERlc2NyaXB0b3I7XG59XG5cbmNvbnN0IGltYWdlU3VmZml4ID0gY29uc3RhbnRzLmlzTW9iaWxlID8gJycgOiAnQDJ4JztcblxuZXhwb3J0IGNvbnN0IG1ha2VNYXBTdHlsZSA9IChmbGFnQ29udGFpbmVyOiBGbGFnQ29udGFpbmVyKSA6IFN0eWxlID0+IHtcbiAgcmV0dXJuIHtcbiAgICAndmVyc2lvbic6IDgsXG4gICAgJ3NvdXJjZXMnOiB7XG4gICAgICAnY2FydG8nOiB7XG4gICAgICAgICd0eXBlJzogJ3Jhc3RlcicsXG4gICAgICAgICd0aWxlcyc6XG4gICAgICBbXG4gICAgICAgIGBodHRwczovL2EuYmFzZW1hcHMuY2FydG9jZG4uY29tL2xpZ2h0X25vbGFiZWxzL3t6fS97eH0ve3l9JHtpbWFnZVN1ZmZpeH0ucG5nYCxcbiAgICAgICAgYGh0dHBzOi8vYi5iYXNlbWFwcy5jYXJ0b2Nkbi5jb20vbGlnaHRfbm9sYWJlbHMve3p9L3t4fS97eX0ke2ltYWdlU3VmZml4fS5wbmdgLFxuICAgICAgICBgaHR0cHM6Ly9jLmJhc2VtYXBzLmNhcnRvY2RuLmNvbS9saWdodF9ub2xhYmVscy97en0ve3h9L3t5fSR7aW1hZ2VTdWZmaXh9LnBuZ2AsXG4gICAgICAgIGBodHRwczovL2QuYmFzZW1hcHMuY2FydG9jZG4uY29tL2xpZ2h0X25vbGFiZWxzL3t6fS97eH0ve3l9JHtpbWFnZVN1ZmZpeH0ucG5nYCxcbiAgICAgIF0sXG4gICAgICAgICdtaW56b29tJzogY29uc3RhbnRzLkdMT0JBTF9NSU5fWk9PTSxcbiAgICAgICAgJ21heHpvb20nOiBjb25zdGFudHMuR0xPQkFMX01BWF9aT09NLFxuICAgICAgfSxcbiAgICAgICdnZW8nOiB7XG4gICAgICAgICd0eXBlJzogJ3Jhc3RlcicsXG4gICAgICAgICd0aWxlcyc6IFtcbiAgICAgICAgICAnaHR0cHM6Ly9tdDAuZ29vZ2xlLmNvbS92dC9seXJzPXAmaGw9ZW4meD17eH0meT17eX0mej17en0nLFxuICAgICAgICBdLFxuICAgICAgICAnbWluem9vbSc6IGNvbnN0YW50cy5HTE9CQUxfTUlOX1pPT00sXG4gICAgICAgICdtYXh6b29tJzogY29uc3RhbnRzLkdMT0JBTF9NQVhfWk9PTSxcbiAgICAgIH0sXG4gICAgICBbY29uc3RhbnRzLkhJR0hfU0NPUkVfU09VUkNFX05BTUVdOiB7XG4gICAgICAvLyBcIlNjb3JlLWhpZ2hcIiByZXByZXNlbnRzIHRoZSBmdWxsIHNldCBvZiBkYXRhXG4gICAgICAvLyBhdCB0aGUgY2Vuc3VzIGJsb2NrIGdyb3VwIGxldmVsLiBJdCBpcyBvbmx5IHNob3duXG4gICAgICAvLyBhdCBoaWdoIHpvb20gbGV2ZWxzIHRvIGF2b2lkIHBlcmZvcm1hbmNlIGlzc3VlcyBhdCBsb3dlciB6b29tc1xuICAgICAgICAndHlwZSc6ICd2ZWN0b3InLFxuICAgICAgICAvLyBPdXIgY3VycmVudCB0aXBwZWNhbm9lIGNvbW1hbmQgZG9lcyBub3Qgc2V0IGFuIGlkLlxuICAgICAgICAvLyBUaGUgYmVsb3cgbGluZSBwcm9tb3RlcyB0aGUgR0VPSUQxMCBwcm9wZXJ0eSB0byB0aGUgSURcbiAgICAgICAgJ3Byb21vdGVJZCc6IGNvbnN0YW50cy5HRU9JRF9QUk9QRVJUWSxcbiAgICAgICAgJ3RpbGVzJzogW1xuICAgICAgICAgICdoaWdoX3RpbGVzJyBpbiBmbGFnQ29udGFpbmVyID9cbiAgICAgICAgICBjb25zdGFudHMuZmVhdHVyZVVSTEZvclRpbGVzZXROYW1lKGZsYWdDb250YWluZXJbJ2hpZ2hfdGlsZXMnXSkgOlxuICAgICAgICAgIGNvbnN0YW50cy5GRUFUVVJFX1RJTEVfSElHSF9aT09NX1VSTCxcbiAgICAgICAgXSxcbiAgICAgICAgLy8gU2VldGluZyBtYXh6b29tIGhlcmUgZW5hYmxlcyAnb3Zlcnpvb21pbmcnXG4gICAgICAgIC8vIGUuZy4gY29udGludWVkIHpvb21pbmcgYmV5b25kIHRoZSBtYXggYm91bmRzLlxuICAgICAgICAvLyBNb3JlIGhlcmU6IGh0dHBzOi8vZG9jcy5tYXBib3guY29tL2hlbHAvZ2xvc3Nhcnkvb3Zlcnpvb20vXG4gICAgICAgICdtaW56b29tJzogY29uc3RhbnRzLkdMT0JBTF9NSU5fWk9PTV9ISUdILFxuICAgICAgICAnbWF4em9vbSc6IGNvbnN0YW50cy5HTE9CQUxfTUFYX1pPT01fSElHSCxcbiAgICAgIH0sXG4gICAgICBbY29uc3RhbnRzLkxPV19TQ09SRV9TT1VSQ0VfTkFNRV06IHtcbiAgICAgIC8vIFwiU2NvcmUtbG93XCIgcmVwcmVzZW50cyBhIHRpbGVzZXQgYXQgdGhlIGxldmVsIG9mIGJ1Y2tldGVkIHRyYWN0cy5cbiAgICAgIC8vIGNlbnN1cyBibG9jayBncm91cCBpbmZvcm1hdGlvbiBpcyBgZGlzc29sdmVgZCBpbnRvIHRyYWN0cywgdGhlblxuICAgICAgLy8gZWFjaCB0cmFjdCBpcyBgZGlzc29sdmVgZCBpbnRvIG9uZSBvZiB0ZW4gYnVja2V0cy4gSXQgaXMgbWVhbnRcbiAgICAgIC8vIHRvIGdpdmUgdXMgYSBmYXZvcmFibGUgdHJhZGVvZmYgYmV0d2VlbiBwZXJmb3JtYW5jZSBhbmQgZmlkZWxpdHkuXG4gICAgICAgICd0eXBlJzogJ3ZlY3RvcicsXG4gICAgICAgICdwcm9tb3RlSWQnOiBjb25zdGFudHMuR0VPSURfUFJPUEVSVFksXG4gICAgICAgICd0aWxlcyc6IFtcbiAgICAgICAgICAnbG93X3RpbGVzJyBpbiBmbGFnQ29udGFpbmVyID9cbiAgICAgICAgICBjb25zdGFudHMuZmVhdHVyZVVSTEZvclRpbGVzZXROYW1lKGZsYWdDb250YWluZXJbJ2xvd190aWxlcyddKSA6XG4gICAgICAgICAgY29uc3RhbnRzLkZFQVRVUkVfVElMRV9MT1dfWk9PTV9VUkwsXG4gICAgICAgIC8vIEZvciBsb2NhbCBkZXZlbG9wbWVudCwgdXNlOlxuICAgICAgICAvLyAnaHR0cDovL2xvY2FsaG9zdDo4MDgwL2RhdGEvdGxfMjAxMF9iZ193aXRoX2RhdGEve3p9L3t4fS97eX0ucGJmJyxcbiAgICAgICAgXSxcbiAgICAgICAgJ21pbnpvb20nOiBjb25zdGFudHMuR0xPQkFMX01JTl9aT09NX0xPVyxcbiAgICAgICAgJ21heHpvb20nOiBjb25zdGFudHMuR0xPQkFMX01BWF9aT09NX0xPVyxcbiAgICAgIH0sXG4gICAgICAnbGFiZWxzJzoge1xuICAgICAgICAndHlwZSc6ICdyYXN0ZXInLFxuICAgICAgICAndGlsZXMnOiBbXG4gICAgICAgICAgYGh0dHBzOi8vY2FydG9kYi1iYXNlbWFwcy1hLmdsb2JhbC5zc2wuZmFzdGx5Lm5ldC9saWdodF9vbmx5X2xhYmVscy97en0ve3h9L3t5fSR7aW1hZ2VTdWZmaXh9LnBuZ2AsXG4gICAgICAgICAgYGh0dHBzOi8vY2FydG9kYi1iYXNlbWFwcy1iLmdsb2JhbC5zc2wuZmFzdGx5Lm5ldC9saWdodF9vbmx5X2xhYmVscy97en0ve3h9L3t5fSR7aW1hZ2VTdWZmaXh9LnBuZ2AsXG4gICAgICAgICAgYGh0dHBzOi8vY2FydG9kYi1iYXNlbWFwcy1jLmdsb2JhbC5zc2wuZmFzdGx5Lm5ldC9saWdodF9vbmx5X2xhYmVscy97en0ve3h9L3t5fSR7aW1hZ2VTdWZmaXh9LnBuZ2AsXG4gICAgICAgICAgYGh0dHBzOi8vY2FydG9kYi1iYXNlbWFwcy1kLmdsb2JhbC5zc2wuZmFzdGx5Lm5ldC9saWdodF9vbmx5X2xhYmVscy97en0ve3h9L3t5fSR7aW1hZ2VTdWZmaXh9LnBuZ2AsXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIH0sXG4gICAgJ2xheWVycyc6IFtcbiAgICAgIHtcbiAgICAgICAgJ2lkJzogJ2NhcnRvJyxcbiAgICAgICAgJ3NvdXJjZSc6ICdjYXJ0bycsXG4gICAgICAgICd0eXBlJzogJ3Jhc3RlcicsXG4gICAgICAgICdtaW56b29tJzogY29uc3RhbnRzLkdMT0JBTF9NSU5fWk9PTSxcbiAgICAgICAgJ21heHpvb20nOiBjb25zdGFudHMuR0xPQkFMX01BWF9aT09NLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ2lkJzogJ2dlbycsXG4gICAgICAgICdzb3VyY2UnOiAnZ2VvJyxcbiAgICAgICAgJ3R5cGUnOiAncmFzdGVyJyxcbiAgICAgICAgJ2xheW91dCc6IHtcbiAgICAgICAgLy8gTWFrZSB0aGUgbGF5ZXIgaW52aXNpYmxlIGJ5IGRlZmF1bHQuXG4gICAgICAgICAgJ3Zpc2liaWxpdHknOiAnbm9uZScsXG4gICAgICAgIH0sXG4gICAgICAgICdtaW56b29tJzogY29uc3RhbnRzLkdMT0JBTF9NSU5fWk9PTSxcbiAgICAgICAgJ21heHpvb20nOiBjb25zdGFudHMuR0xPQkFMX01BWF9aT09NLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ2lkJzogY29uc3RhbnRzLkhJR0hfU0NPUkVfTEFZRVJfTkFNRSxcbiAgICAgICAgJ3NvdXJjZSc6IGNvbnN0YW50cy5ISUdIX1NDT1JFX1NPVVJDRV9OQU1FLFxuICAgICAgICAnc291cmNlLWxheWVyJzogY29uc3RhbnRzLlNDT1JFX1NPVVJDRV9MQVlFUixcbiAgICAgICAgJ3R5cGUnOiAnZmlsbCcsXG4gICAgICAgICdmaWx0ZXInOiBbJ2FsbCcsXG4gICAgICAgICAgWyc+JywgY29uc3RhbnRzLlNDT1JFX1BST1BFUlRZX0hJR0gsIGNvbnN0YW50cy5TQ09SRV9CT1VOREFSWV9USFJFU0hPTERdLFxuICAgICAgICBdLFxuICAgICAgICAncGFpbnQnOiBtYWtlUGFpbnQoe1xuICAgICAgICAgIGZpZWxkOiBjb25zdGFudHMuU0NPUkVfUFJPUEVSVFlfSElHSCxcbiAgICAgICAgICBtaW5SYW1wOiBjb25zdGFudHMuU0NPUkVfQk9VTkRBUllfTE9XLFxuICAgICAgICAgIG1lZFJhbXA6IGNvbnN0YW50cy5TQ09SRV9CT1VOREFSWV9USFJFU0hPTEQsXG4gICAgICAgICAgbWF4UmFtcDogY29uc3RhbnRzLlNDT1JFX0JPVU5EQVJZX1BSSU9SSVRJWkVELFxuICAgICAgICB9KSxcbiAgICAgICAgJ21pbnpvb20nOiBjb25zdGFudHMuR0xPQkFMX01JTl9aT09NX0hJR0gsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAnaWQnOiBjb25zdGFudHMuTE9XX1NDT1JFX0xBWUVSX05BTUUsXG4gICAgICAgICdzb3VyY2UnOiBjb25zdGFudHMuTE9XX1NDT1JFX1NPVVJDRV9OQU1FLFxuICAgICAgICAnc291cmNlLWxheWVyJzogY29uc3RhbnRzLlNDT1JFX1NPVVJDRV9MQVlFUixcbiAgICAgICAgJ3R5cGUnOiAnZmlsbCcsXG4gICAgICAgICdmaWx0ZXInOiBbJ2FsbCcsXG4gICAgICAgICAgWyc+JywgY29uc3RhbnRzLlNDT1JFX1BST1BFUlRZX0xPVywgY29uc3RhbnRzLlNDT1JFX0JPVU5EQVJZX1RIUkVTSE9MRF0sXG4gICAgICAgIF0sXG4gICAgICAgICdwYWludCc6IG1ha2VQYWludCh7XG4gICAgICAgICAgZmllbGQ6IGNvbnN0YW50cy5TQ09SRV9QUk9QRVJUWV9MT1csXG4gICAgICAgICAgbWluUmFtcDogY29uc3RhbnRzLlNDT1JFX0JPVU5EQVJZX0xPVyxcbiAgICAgICAgICBtZWRSYW1wOiBjb25zdGFudHMuU0NPUkVfQk9VTkRBUllfVEhSRVNIT0xELFxuICAgICAgICAgIG1heFJhbXA6IGNvbnN0YW50cy5TQ09SRV9CT1VOREFSWV9QUklPUklUSVpFRCxcbiAgICAgICAgfSksXG4gICAgICAgICdtaW56b29tJzogY29uc3RhbnRzLkdMT0JBTF9NSU5fWk9PTV9MT1csXG4gICAgICAgICdtYXh6b29tJzogY29uc3RhbnRzLkdMT0JBTF9NQVhfWk9PTV9MT1csXG4gICAgICB9LFxuICAgICAge1xuICAgICAgLy8gV2UgcHV0IGxhYmVscyBsYXN0IHRvIGVuc3VyZSBwcm9taW5lbmNlXG4gICAgICAgICdpZCc6ICdsYWJlbHMtb25seS1sYXllcicsXG4gICAgICAgICd0eXBlJzogJ3Jhc3RlcicsXG4gICAgICAgICdzb3VyY2UnOiAnbGFiZWxzJyxcbiAgICAgICAgJ21pbnpvb20nOiBjb25zdGFudHMuR0xPQkFMX01JTl9aT09NLFxuICAgICAgICAnbWF4em9vbSc6IGNvbnN0YW50cy5HTE9CQUxfTUFYX1pPT00sXG4gICAgICB9LFxuICAgIF0sXG4gIH07XG59O1xuXG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCB2YXIgbWFwQW5kSW5mb1BhbmVsQ29udGFpbmVyID0gXCJKNDBNYXAtbW9kdWxlLS1tYXBBbmRJbmZvUGFuZWxDb250YWluZXItLXEtb2R5XCI7XG5leHBvcnQgdmFyIGo0MFBvcHVwID0gXCJKNDBNYXAtbW9kdWxlLS1qNDBQb3B1cC0tM3lKR3JcIjtcbmV4cG9ydCB2YXIgbmF2aWdhdGlvbkNvbnRyb2wgPSBcIko0ME1hcC1tb2R1bGUtLW5hdmlnYXRpb25Db250cm9sLS0yQXliZlwiO1xuZXhwb3J0IHZhciBmdWxsc2NyZWVuQ29udHJvbCA9IFwiSjQwTWFwLW1vZHVsZS0tZnVsbHNjcmVlbkNvbnRyb2wtLTFVQktlXCI7XG5leHBvcnQgdmFyIGdlb2xvY2F0ZUNvbnRyb2wgPSBcIko0ME1hcC1tb2R1bGUtLWdlb2xvY2F0ZUNvbnRyb2wtLTNLVkFrXCI7XG5leHBvcnQgdmFyIG1hcEluZm9QYW5lbCA9IFwiSjQwTWFwLW1vZHVsZS0tbWFwSW5mb1BhbmVsLS1GM2pSNFwiOyIsIi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG4vLyBFeHRlcm5hbCBMaWJzOlxuaW1wb3J0IFJlYWN0LCB7TW91c2VFdmVudCwgdXNlUmVmLCB1c2VTdGF0ZSwgdXNlTWVtb30gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtNYXAsIE1hcGJveEdlb0pTT05GZWF0dXJlLCBMbmdMYXRCb3VuZHNMaWtlfSBmcm9tICdtYXBsaWJyZS1nbCc7XG5pbXBvcnQgUmVhY3RNYXBHTCwge1xuICBNYXBFdmVudCxcbiAgVmlld3BvcnRQcm9wcyxcbiAgV2ViTWVyY2F0b3JWaWV3cG9ydCxcbiAgTmF2aWdhdGlvbkNvbnRyb2wsXG4gIEdlb2xvY2F0ZUNvbnRyb2wsXG4gIFBvcHVwLFxuICBGbHlUb0ludGVycG9sYXRvcixcbiAgRnVsbHNjcmVlbkNvbnRyb2wsXG4gIE1hcFJlZiwgU291cmNlLCBMYXllcn0gZnJvbSAncmVhY3QtbWFwLWdsJztcbmltcG9ydCBiYm94IGZyb20gJ0B0dXJmL2Jib3gnO1xuaW1wb3J0ICogYXMgZDMgZnJvbSAnZDMtZWFzZSc7XG5pbXBvcnQge2lzTW9iaWxlfSBmcm9tICdyZWFjdC1kZXZpY2UtZGV0ZWN0JztcblxuLy8gQ29udGV4dHM6XG5pbXBvcnQge3VzZUZsYWdzfSBmcm9tICcuLi9jb250ZXh0cy9GbGFnQ29udGV4dCc7XG5cbi8vIENvbXBvbmVudHM6XG5pbXBvcnQgVGVycml0b3J5Rm9jdXNDb250cm9sIGZyb20gJy4vdGVycml0b3J5Rm9jdXNDb250cm9sJztcbmltcG9ydCBNYXBJbmZvUGFuZWwgZnJvbSAnLi9tYXBJbmZvUGFuZWwnO1xuaW1wb3J0IEFyZWFEZXRhaWwgZnJvbSAnLi9hcmVhRGV0YWlsJztcblxuLy8gU3R5bGVzIGFuZCBjb25zdGFudHNcbmltcG9ydCB7bWFrZU1hcFN0eWxlfSBmcm9tICcuLi9kYXRhL21hcFN0eWxlJztcbmltcG9ydCAnbWFwbGlicmUtZ2wvZGlzdC9tYXBsaWJyZS1nbC5jc3MnO1xuaW1wb3J0ICogYXMgY29uc3RhbnRzIGZyb20gJy4uL2RhdGEvY29uc3RhbnRzJztcbmltcG9ydCAqIGFzIHN0eWxlcyBmcm9tICcuL0o0ME1hcC5tb2R1bGUuc2Nzcyc7XG5cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgV2luZG93IHtcbiAgICBDeXByZXNzPzogb2JqZWN0O1xuICAgIHVuZGVybHlpbmdNYXA6IE1hcDtcbiAgfVxufVxuXG5pbnRlcmZhY2UgSUo0MEludGVyZmFjZSB7XG4gIGxvY2F0aW9uOiBMb2NhdGlvbjtcbn07XG5cblxuZXhwb3J0IGludGVyZmFjZSBJRGV0YWlsVmlld0ludGVyZmFjZSB7XG4gIGxhdGl0dWRlOiBudW1iZXJcbiAgbG9uZ2l0dWRlOiBudW1iZXJcbiAgem9vbTogbnVtYmVyXG4gIHByb3BlcnRpZXM6IGNvbnN0YW50cy5KNDBQcm9wZXJ0aWVzLFxufTtcblxuY29uc3QgSjQwTWFwID0gKHtsb2NhdGlvbn06IElKNDBJbnRlcmZhY2UpID0+IHtcbiAgY29uc3QgW3pvb20sIGxhdCwgbG5nXSA9IGxvY2F0aW9uLmhhc2guc2xpY2UoMSkuc3BsaXQoJy8nKTtcbiAgY29uc3QgW3ZpZXdwb3J0LCBzZXRWaWV3cG9ydF0gPSB1c2VTdGF0ZTxWaWV3cG9ydFByb3BzPih7XG4gICAgbGF0aXR1ZGU6IGxhdCAmJiBwYXJzZUZsb2F0KGxhdCkgfHwgY29uc3RhbnRzLkRFRkFVTFRfQ0VOVEVSWzBdLFxuICAgIGxvbmdpdHVkZTogbG5nICYmIHBhcnNlRmxvYXQobG5nKSB8fCBjb25zdGFudHMuREVGQVVMVF9DRU5URVJbMV0sXG4gICAgem9vbTogem9vbSAmJiBwYXJzZUZsb2F0KHpvb20pIHx8IGNvbnN0YW50cy5HTE9CQUxfTUlOX1pPT00sXG4gIH0pO1xuXG4gIGNvbnN0IFtzZWxlY3RlZEZlYXR1cmUsIHNldFNlbGVjdGVkRmVhdHVyZV0gPSB1c2VTdGF0ZTxNYXBib3hHZW9KU09ORmVhdHVyZT4oKTtcbiAgY29uc3QgW2RldGFpbFZpZXdEYXRhLCBzZXREZXRhaWxWaWV3RGF0YV0gPSB1c2VTdGF0ZTxJRGV0YWlsVmlld0ludGVyZmFjZT4oKTtcbiAgY29uc3QgW3RyYW5zaXRpb25JblByb2dyZXNzLCBzZXRUcmFuc2l0aW9uSW5Qcm9ncmVzc10gPSB1c2VTdGF0ZTxib29sZWFuPihmYWxzZSk7XG4gIGNvbnN0IFtnZW9sb2NhdGlvbkluUHJvZ3Jlc3MsIHNldEdlb2xvY2F0aW9uSW5Qcm9ncmVzc10gPSB1c2VTdGF0ZTxib29sZWFuPihmYWxzZSk7XG4gIGNvbnN0IFtpc01vYmlsZU1hcFN0YXRlLCBzZXRJc01vYmlsZU1hcFN0YXRlXSA9IHVzZVN0YXRlPGJvb2xlYW4+KGZhbHNlKTtcblxuICBjb25zdCBtYXBSZWYgPSB1c2VSZWY8TWFwUmVmPihudWxsKTtcbiAgY29uc3QgZmxhZ3MgPSB1c2VGbGFncygpO1xuXG4gIGNvbnN0IHNlbGVjdGVkRmVhdHVyZUlkID0gKHNlbGVjdGVkRmVhdHVyZSAmJiBzZWxlY3RlZEZlYXR1cmUuaWQpIHx8ICcnO1xuICBjb25zdCBmaWx0ZXIgPSB1c2VNZW1vKCgpID0+IFsnaW4nLCBjb25zdGFudHMuR0VPSURfUFJPUEVSVFksIHNlbGVjdGVkRmVhdHVyZUlkXSwgW3NlbGVjdGVkRmVhdHVyZV0pO1xuXG4gIGNvbnN0IG9uQ2xpY2sgPSAoZXZlbnQ6IE1hcEV2ZW50KSA9PiB7XG4gICAgY29uc3QgZmVhdHVyZSA9IGV2ZW50LmZlYXR1cmVzICYmIGV2ZW50LmZlYXR1cmVzWzBdO1xuICAgIGlmIChmZWF0dXJlKSB7XG4gICAgICBjb25zdCBbbWluTG5nLCBtaW5MYXQsIG1heExuZywgbWF4TGF0XSA9IGJib3goZmVhdHVyZSk7XG4gICAgICBjb25zdCBuZXdWaWV3UG9ydCA9IG5ldyBXZWJNZXJjYXRvclZpZXdwb3J0KHtoZWlnaHQ6IHZpZXdwb3J0LmhlaWdodCEsIHdpZHRoOiB2aWV3cG9ydC53aWR0aCF9KTtcbiAgICAgIGNvbnN0IHtsb25naXR1ZGUsIGxhdGl0dWRlLCB6b29tfSA9IG5ld1ZpZXdQb3J0LmZpdEJvdW5kcyhcbiAgICAgICAgICBbXG4gICAgICAgICAgICBbbWluTG5nLCBtaW5MYXRdLFxuICAgICAgICAgICAgW21heExuZywgbWF4TGF0XSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHBhZGRpbmc6IDQwLFxuICAgICAgICAgIH0sXG4gICAgICApO1xuICAgICAgaWYgKGZlYXR1cmUuaWQgIT09IHNlbGVjdGVkRmVhdHVyZUlkKSB7XG4gICAgICAgIHNldFNlbGVjdGVkRmVhdHVyZShmZWF0dXJlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldFNlbGVjdGVkRmVhdHVyZSh1bmRlZmluZWQpO1xuICAgICAgfVxuICAgICAgY29uc3QgcG9wdXBJbmZvID0ge1xuICAgICAgICBsb25naXR1ZGU6IGxvbmdpdHVkZSxcbiAgICAgICAgbGF0aXR1ZGU6IGxhdGl0dWRlLFxuICAgICAgICB6b29tOiB6b29tLFxuICAgICAgICBwcm9wZXJ0aWVzOiBmZWF0dXJlLnByb3BlcnRpZXMsXG4gICAgICB9O1xuICAgICAgZ29Ub1BsYWNlKFtcbiAgICAgICAgW21pbkxuZywgbWluTGF0XSxcbiAgICAgICAgW21heExuZywgbWF4TGF0XSxcbiAgICAgIF0pO1xuICAgICAgc2V0RGV0YWlsVmlld0RhdGEocG9wdXBJbmZvKTtcbiAgICB9XG4gIH07XG5cblxuICBjb25zdCBvbkxvYWQgPSAoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5DeXByZXNzICYmIG1hcFJlZi5jdXJyZW50KSB7XG4gICAgICB3aW5kb3cudW5kZXJseWluZ01hcCA9IG1hcFJlZi5jdXJyZW50LmdldE1hcCgpO1xuICAgIH1cblxuICAgIGlmIChpc01vYmlsZSkgc2V0SXNNb2JpbGVNYXBTdGF0ZSh0cnVlKTtcbiAgfTtcblxuXG4gIGNvbnN0IGdvVG9QbGFjZSA9IChib3VuZHM6IExuZ0xhdEJvdW5kc0xpa2UgKSA9PiB7XG4gICAgY29uc3Qge2xvbmdpdHVkZSwgbGF0aXR1ZGUsIHpvb219ID0gbmV3IFdlYk1lcmNhdG9yVmlld3BvcnQoe2hlaWdodDogdmlld3BvcnQuaGVpZ2h0ISwgd2lkdGg6IHZpZXdwb3J0LndpZHRoIX0pXG4gICAgICAgIC5maXRCb3VuZHMoYm91bmRzIGFzIFtbbnVtYmVyLCBudW1iZXJdLCBbbnVtYmVyLCBudW1iZXJdXSwge1xuICAgICAgICAgIHBhZGRpbmc6IDIwLFxuICAgICAgICAgIG9mZnNldDogWzAsIC0xMDBdLFxuICAgICAgICB9KTtcbiAgICBzZXRWaWV3cG9ydCh7XG4gICAgICAuLi52aWV3cG9ydCxcbiAgICAgIGxvbmdpdHVkZSxcbiAgICAgIGxhdGl0dWRlLFxuICAgICAgem9vbSxcbiAgICAgIHRyYW5zaXRpb25EdXJhdGlvbjogMTAwMCxcbiAgICAgIHRyYW5zaXRpb25JbnRlcnBvbGF0b3I6IG5ldyBGbHlUb0ludGVycG9sYXRvcigpLFxuICAgICAgdHJhbnNpdGlvbkVhc2luZzogZDMuZWFzZUN1YmljLFxuICAgIH0pO1xuICB9O1xuXG4gIGNvbnN0IG9uQ2xpY2tUZXJyaXRvcnlGb2N1c0J1dHRvbiA9IChldmVudDogTW91c2VFdmVudDxIVE1MQnV0dG9uRWxlbWVudD4pID0+IHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBjb25zdCBidXR0b25JRCA9IGV2ZW50LnRhcmdldCAmJiAoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5pZDtcblxuICAgIHN3aXRjaCAoYnV0dG9uSUQpIHtcbiAgICAgIGNhc2UgJzQ4JzpcbiAgICAgICAgZ29Ub1BsYWNlKGNvbnN0YW50cy5MT1dFUl80OF9CT1VORFMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0FLJzpcbiAgICAgICAgZ29Ub1BsYWNlKGNvbnN0YW50cy5BTEFTS0FfQk9VTkRTKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdISSc6XG4gICAgICAgIGdvVG9QbGFjZShjb25zdGFudHMuSEFXQUlJX0JPVU5EUyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnUFInOlxuICAgICAgICBnb1RvUGxhY2UoY29uc3RhbnRzLlBVRVJUT19SSUNPX0JPVU5EUyk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH07XG5cbiAgY29uc3Qgb25UcmFuc2l0aW9uU3RhcnQgPSAoKSA9PiB7XG4gICAgc2V0VHJhbnNpdGlvbkluUHJvZ3Jlc3ModHJ1ZSk7XG4gIH07XG5cbiAgY29uc3Qgb25UcmFuc2l0aW9uRW5kID0gKCkgPT4ge1xuICAgIHNldFRyYW5zaXRpb25JblByb2dyZXNzKGZhbHNlKTtcbiAgfTtcblxuICBjb25zdCBvbkdlb2xvY2F0ZSA9ICgpID0+IHtcbiAgICBzZXRHZW9sb2NhdGlvbkluUHJvZ3Jlc3MoZmFsc2UpO1xuICB9O1xuXG4gIGNvbnN0IG9uQ2xpY2tHZW9sb2NhdGUgPSAoKSA9PiB7XG4gICAgc2V0R2VvbG9jYXRpb25JblByb2dyZXNzKHRydWUpO1xuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5tYXBBbmRJbmZvUGFuZWxDb250YWluZXJ9PlxuICAgICAgPFJlYWN0TWFwR0xcbiAgICAgICAgey4uLnZpZXdwb3J0fVxuICAgICAgICBtYXBTdHlsZT17bWFrZU1hcFN0eWxlKGZsYWdzKX1cbiAgICAgICAgbWluWm9vbT17Y29uc3RhbnRzLkdMT0JBTF9NSU5fWk9PTX1cbiAgICAgICAgbWF4Wm9vbT17Y29uc3RhbnRzLkdMT0JBTF9NQVhfWk9PTX1cbiAgICAgICAgbWFwT3B0aW9ucz17e2hhc2g6IHRydWV9fVxuICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICBoZWlnaHQ9e2lzTW9iaWxlTWFwU3RhdGUgPyAnNDR2aCcgOiAnMTAwJSd9XG4gICAgICAgIGRyYWdSb3RhdGU9e2ZhbHNlfVxuICAgICAgICB0b3VjaFJvdGF0ZT17ZmFsc2V9XG4gICAgICAgIGludGVyYWN0aXZlTGF5ZXJJZHM9e1tjb25zdGFudHMuSElHSF9TQ09SRV9MQVlFUl9OQU1FXX1cbiAgICAgICAgb25WaWV3cG9ydENoYW5nZT17c2V0Vmlld3BvcnR9XG4gICAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgICAgIG9uTG9hZD17b25Mb2FkfVxuICAgICAgICBvblRyYW5zaXRpb25TdGFydD17b25UcmFuc2l0aW9uU3RhcnR9XG4gICAgICAgIG9uVHJhbnNpdGlvbkVuZD17b25UcmFuc2l0aW9uRW5kfVxuICAgICAgICByZWY9e21hcFJlZn1cbiAgICAgICAgZGF0YS1jeT17J3JlYWN0TWFwR0wnfVxuICAgICAgPlxuICAgICAgICA8U291cmNlXG4gICAgICAgICAgaWQ9e2NvbnN0YW50cy5ISUdIX1NDT1JFX1NPVVJDRV9OQU1FfVxuICAgICAgICAgIHR5cGU9XCJ2ZWN0b3JcIlxuICAgICAgICAgIHByb21vdGVJZD17Y29uc3RhbnRzLkdFT0lEX1BST1BFUlRZfVxuICAgICAgICAgIHRpbGVzPXtbY29uc3RhbnRzLkZFQVRVUkVfVElMRV9ISUdIX1pPT01fVVJMXX1cbiAgICAgICAgICBtYXh6b29tPXtjb25zdGFudHMuR0xPQkFMX01JTl9aT09NX0hJR0h9XG4gICAgICAgICAgbWluem9vbT17Y29uc3RhbnRzLkdMT0JBTF9NQVhfWk9PTV9ISUdIfVxuICAgICAgICA+XG4gICAgICAgICAgPExheWVyXG4gICAgICAgICAgICBpZD17Y29uc3RhbnRzLkNVUlJFTlRMWV9TRUxFQ1RFRF9GRUFUVVJFX0hJR0hMSUdIVF9MQVlFUl9OQU1FfVxuICAgICAgICAgICAgc291cmNlLWxheWVyPXtjb25zdGFudHMuU0NPUkVfU09VUkNFX0xBWUVSfVxuICAgICAgICAgICAgdHlwZT0nbGluZSdcbiAgICAgICAgICAgIHBhaW50PXt7XG4gICAgICAgICAgICAgICdsaW5lLWNvbG9yJzogY29uc3RhbnRzLkRFRkFVTFRfT1VUTElORV9DT0xPUixcbiAgICAgICAgICAgICAgJ2xpbmUtd2lkdGgnOiBjb25zdGFudHMuQ1VSUkVOVExZX1NFTEVDVEVEX0ZFQVRVUkVfTEFZRVJfV0lEVEgsXG4gICAgICAgICAgICAgICdsaW5lLW9wYWNpdHknOiBjb25zdGFudHMuQ1VSUkVOVExZX1NFTEVDVEVEX0ZFQVRVUkVfTEFZRVJfT1BBQ0lUWSxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBtaW56b29tPXtjb25zdGFudHMuR0xPQkFMX01JTl9aT09NX0hJR0hMSUdIVH1cbiAgICAgICAgICAgIG1heHpvb209e2NvbnN0YW50cy5HTE9CQUxfTUFYX1pPT01fSElHSExJR0hUfVxuICAgICAgICAgIC8+XG5cbiAgICAgICAgICA8TGF5ZXJcbiAgICAgICAgICAgIGlkPXtjb25zdGFudHMuQkxPQ0tfR1JPVVBfQk9VTkRBUllfTEFZRVJfTkFNRX1cbiAgICAgICAgICAgIHR5cGU9J2xpbmUnXG4gICAgICAgICAgICBzb3VyY2UtbGF5ZXI9e2NvbnN0YW50cy5TQ09SRV9TT1VSQ0VfTEFZRVJ9XG4gICAgICAgICAgICBwYWludD17e1xuICAgICAgICAgICAgICAnbGluZS1jb2xvcic6IGNvbnN0YW50cy5CT1JERVJfSElHSExJR0hUX0NPTE9SLFxuICAgICAgICAgICAgICAnbGluZS13aWR0aCc6IGNvbnN0YW50cy5ISUdITElHSFRfQk9SREVSX1dJRFRILFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIGZpbHRlcj17ZmlsdGVyfVxuICAgICAgICAgICAgbWluem9vbT17Y29uc3RhbnRzLkdMT0JBTF9NSU5fWk9PTV9ISUdIfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU291cmNlPlxuICAgICAgICB7KCdmcycgaW4gZmxhZ3MgJiYgZGV0YWlsVmlld0RhdGEgJiYgIXRyYW5zaXRpb25JblByb2dyZXNzKSAmJiAoXG4gICAgICAgICAgPFBvcHVwXG4gICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5qNDBQb3B1cH1cbiAgICAgICAgICAgIHRpcFNpemU9ezV9XG4gICAgICAgICAgICBhbmNob3I9XCJ0b3BcIlxuICAgICAgICAgICAgbG9uZ2l0dWRlPXtkZXRhaWxWaWV3RGF0YS5sb25naXR1ZGUhfVxuICAgICAgICAgICAgbGF0aXR1ZGU9e2RldGFpbFZpZXdEYXRhLmxhdGl0dWRlIX1cbiAgICAgICAgICAgIGNsb3NlT25DbGljaz17dHJ1ZX1cbiAgICAgICAgICAgIG9uQ2xvc2U9e3NldERldGFpbFZpZXdEYXRhfVxuICAgICAgICAgICAgY2FwdHVyZVNjcm9sbD17dHJ1ZX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8QXJlYURldGFpbCBwcm9wZXJ0aWVzPXtkZXRhaWxWaWV3RGF0YS5wcm9wZXJ0aWVzfSAvPlxuICAgICAgICAgIDwvUG9wdXA+XG4gICAgICAgICl9XG4gICAgICAgIDxOYXZpZ2F0aW9uQ29udHJvbFxuICAgICAgICAgIHNob3dDb21wYXNzPXtmYWxzZX1cbiAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5uYXZpZ2F0aW9uQ29udHJvbH1cbiAgICAgICAgLz5cbiAgICAgICAgeydnbCcgaW4gZmxhZ3MgPyA8R2VvbG9jYXRlQ29udHJvbFxuICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLmdlb2xvY2F0ZUNvbnRyb2x9XG4gICAgICAgICAgcG9zaXRpb25PcHRpb25zPXt7ZW5hYmxlSGlnaEFjY3VyYWN5OiB0cnVlfX1cbiAgICAgICAgICBvbkdlb2xvY2F0ZT17b25HZW9sb2NhdGV9XG4gICAgICAgICAgLy8gQHRzLWlnbm9yZSAvLyBUeXBlcyBoYXZlIG5vdCBjYXVnaHQgdXAgeWV0LCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3Zpc2dsL3JlYWN0LW1hcC1nbC9pc3N1ZXMvMTQ5MlxuICAgICAgICAgIG9uQ2xpY2s9e29uQ2xpY2tHZW9sb2NhdGV9XG4gICAgICAgIC8+IDogJyd9XG4gICAgICAgIHtnZW9sb2NhdGlvbkluUHJvZ3Jlc3MgPyA8ZGl2Pkdlb2xvY2F0aW9uIGluIHByb2dyZXNzLi4uPC9kaXY+IDogJyd9XG4gICAgICAgIDxUZXJyaXRvcnlGb2N1c0NvbnRyb2wgb25DbGlja1RlcnJpdG9yeUZvY3VzQnV0dG9uPXtvbkNsaWNrVGVycml0b3J5Rm9jdXNCdXR0b259Lz5cbiAgICAgICAgeydmcycgaW4gZmxhZ3MgPyA8RnVsbHNjcmVlbkNvbnRyb2wgY2xhc3NOYW1lPXtzdHlsZXMuZnVsbHNjcmVlbkNvbnRyb2x9Lz4gOicnIH1cbiAgICAgIDwvUmVhY3RNYXBHTD5cbiAgICAgIDxNYXBJbmZvUGFuZWxcbiAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMubWFwSW5mb1BhbmVsfVxuICAgICAgICBmZWF0dXJlUHJvcGVydGllcz17ZGV0YWlsVmlld0RhdGE/LnByb3BlcnRpZXN9XG4gICAgICAgIHNlbGVjdGVkRmVhdHVyZUlkPXtzZWxlY3RlZEZlYXR1cmU/LmlkfVxuICAgICAgLz5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEo0ME1hcDtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IHZhciBob3dZb3VDYW5IZWxwQ29udGFpbmVyID0gXCJIb3dZb3VDYW5IZWxwLW1vZHVsZS0taG93WW91Q2FuSGVscENvbnRhaW5lci0tMmtxQmFcIjsiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0ICogYXMgc3R5bGVzIGZyb20gJy4vSG93WW91Q2FuSGVscC5tb2R1bGUuc2Nzcyc7XG5cbmNvbnN0IEhvd1lvdUNhbkhlbHAgPSAoKSA9PiB7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5ob3dZb3VDYW5IZWxwQ29udGFpbmVyfT5cbiAgICAgIDxoMj5Ib3cgWW91IENhbiBIZWxwIEltcHJvdmUgdGhlIFRvb2w8L2gyPlxuICAgICAgPHVsIGNsYXNzTmFtZT17J3VzYS1saXN0J30+XG4gICAgICAgIDxsaT5JZiB5b3UgaGF2ZSBpbmZvcm1hdGlvbiB0aGF0IGNvdWxkIGhlbHAsIHdl4oCZZCBsb3ZlIHRvIGhlYXIgZnJvbSB5b3UuPC9saT5cbiAgICAgICAgPGxpPlZpZXcgb3VyIGZ1bGwgc2V0IG9mIGRhdGEgc291cmNlcyBhbmQgbWV0aG9kb2xvZ3lcbiAgICAgICAgICAgIHdoZXJlIHlvdSBjYW4gYWRkIG9yIGRvd25sb2FkIHNvdXJjZXMgYW5kIGNoZWNrIHN0YXR1c2VzIG9uIG91ciBkYXRhIHJvYWRtYXAuPC9saT5cbiAgICAgICAgPGxpPkNoZWNrIG91dCBvdXIgdGltZWxpbmUgYW5kIHNlbmQgZmVlZGJhY2sgb3IgYXR0ZW5kIHJlbGV2YW50IGV2ZW50cy48L2xpPlxuICAgICAgICA8bGk+Q29udGFjdCB1cyBhbmQgc2hhcmUgdGhlIHN0b3JpZXMgb2YgeW91ciBjb21tdW5pdHkuPC9saT5cbiAgICAgIDwvdWw+XG4gICAgPC9kaXY+XG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBIb3dZb3VDYW5IZWxwO1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgdmFyIGRvd25sb2FkQm94Q29udGFpbmVyID0gXCJkb3dubG9hZFBhY2tldC1tb2R1bGUtLWRvd25sb2FkQm94Q29udGFpbmVyLS1JZllTSVwiO1xuZXhwb3J0IHZhciBkb3dubG9hZEJveCA9IFwiZG93bmxvYWRQYWNrZXQtbW9kdWxlLS1kb3dubG9hZEJveC0tMjNxQUdcIjtcbmV4cG9ydCB2YXIgZG93bmxvYWRCb3hUZXh0Qm94ID0gXCJkb3dubG9hZFBhY2tldC1tb2R1bGUtLWRvd25sb2FkQm94VGV4dEJveC0tMkMwOElcIjtcbmV4cG9ydCB2YXIgZG93bmxvYWRCb3hUaXRsZSA9IFwiZG93bmxvYWRQYWNrZXQtbW9kdWxlLS1kb3dubG9hZEJveFRpdGxlLS0yb1FzUlwiO1xuZXhwb3J0IHZhciBkb3dubG9hZEJveFRleHQgPSBcImRvd25sb2FkUGFja2V0LW1vZHVsZS0tZG93bmxvYWRCb3hUZXh0LS1zMDlIOFwiO1xuZXhwb3J0IHZhciBkb3dubG9hZEJveEJ1dHRvbkNvbnRhaW5lciA9IFwiZG93bmxvYWRQYWNrZXQtbW9kdWxlLS1kb3dubG9hZEJveEJ1dHRvbkNvbnRhaW5lci0tRUJXVWZcIjtcbmV4cG9ydCB2YXIgZG93bmxvYWRCb3hCdXR0b24gPSBcImRvd25sb2FkUGFja2V0LW1vZHVsZS0tZG93bmxvYWRCb3hCdXR0b24tLTN3LW9rXCI7XG5leHBvcnQgdmFyIGRvd25sb2FkUGFja2V0VGV4dCA9IFwiZG93bmxvYWRQYWNrZXQtbW9kdWxlLS1kb3dubG9hZFBhY2tldFRleHQtLTJNeUVWXCI7IiwiZXhwb3J0IGRlZmF1bHQgXCJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUI0Yld4dWN6MGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TUM5emRtY2lJR2hsYVdkb2REMGlNalFpSUhacFpYZENiM2c5SWpBZ01DQXlOQ0F5TkNJZ2QybGtkR2c5SWpJMElqNDhjR0YwYUNCa1BTSk5NQ0F3YURJMGRqSTBTREI2SWlCbWFXeHNQU0p1YjI1bElpOCtQSEJoZEdnZ1pEMGlUVEU1SURsb0xUUldNMGc1ZGpaSU5XdzNJRGNnTnkwM2VrMDFJREU0ZGpKb01UUjJMVEpJTlhvaUx6NDhMM04yWno0PVwiIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7QnV0dG9ufSBmcm9tICdAdHJ1c3N3b3Jrcy9yZWFjdC11c3dkcyc7XG5pbXBvcnQgKiBhcyBzdHlsZXMgZnJvbSAnLi9kb3dubG9hZFBhY2tldC5tb2R1bGUuc2Nzcyc7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgZG93bmxvYWRJY29uIGZyb20gJy9ub2RlX21vZHVsZXMvdXN3ZHMvZGlzdC9pbWcvdXNhLWljb25zL2ZpbGVfZG93bmxvYWQuc3ZnJztcblxuZXhwb3J0IGNvbnN0IGNiZ0ZpbGVVUkwgPSAnaHR0cHM6Ly9qdXN0aWNlNDAtZGF0YS5zMy5hbWF6b25hd3MuY29tL1Njb3JlL3VzYS56aXAnO1xuXG5jb25zdCBEb3dubG9hZFBhY2tldCA9ICgpID0+IHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmRvd25sb2FkQm94Q29udGFpbmVyfT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuZG93bmxvYWRCb3h9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmRvd25sb2FkQm94VGV4dEJveH0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5kb3dubG9hZEJveFRpdGxlfT5KdXN0IFByb2dyZXNzIFBhY2tldDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuZG93bmxvYWRCb3hUZXh0fT5UaGlzIGRvd25sb2FkYWJsZSBwYWNrZXQgaW5jbHVkZXMgdGhlIGxpc3Qgb2YgSnVzdCBQcm9ncmVzc1xuICAgICAgICAgIHByaW9yaXRpemVkIGNvbW11bml0aWVzICgzMCwwMjEgY2Vuc3VzIGJsb2NrIGdyb3VwcykgYW5kIDE4IGRhdGFzZXRzLlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuZG93bmxvYWRCb3hCdXR0b25Db250YWluZXJ9PlxuICAgICAgICAgICAgPGEgaWQ9eydkb3dubG9hZC1saW5rJ30gaHJlZj17Y2JnRmlsZVVSTH0+XG4gICAgICAgICAgICAgIDxCdXR0b24gY2xhc3NOYW1lPXtzdHlsZXMuZG93bmxvYWRCb3hCdXR0b259IHR5cGU9XCJidXR0b25cIj5cbiAgICAgICAgICAgICAgICA8ZGl2PjxpbWcgc3JjPXtkb3dubG9hZEljb259IC8+IDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuZG93bmxvYWRQYWNrZXRUZXh0fT5Eb3dubG9hZCBwYWNrZXQ8L2Rpdj5cbiAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICA8L2E+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBEb3dubG9hZFBhY2tldDtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IHZhciBsZWdlbmRDb250YWluZXIgPSBcIm1hcExlZ2VuZC1tb2R1bGUtLWxlZ2VuZENvbnRhaW5lci0tMk4xRkNcIjtcbmV4cG9ydCB2YXIgc3dhdGNoQ29udGFpbmVyID0gXCJtYXBMZWdlbmQtbW9kdWxlLS1zd2F0Y2hDb250YWluZXItLTF5WlgxXCI7XG5leHBvcnQgdmFyIGxlZ2VuZEl0ZW0gPSBcIm1hcExlZ2VuZC1tb2R1bGUtLWxlZ2VuZEl0ZW0tLVdlelVmXCI7XG5leHBvcnQgdmFyIGNvbG9yU3dhdGNoID0gXCJtYXBMZWdlbmQtbW9kdWxlLS1jb2xvclN3YXRjaC0tb0JVTjJcIjtcbmV4cG9ydCB2YXIgcHJpb3JpdGl6ZWQgPSBcIm1hcExlZ2VuZC1tb2R1bGUtLXByaW9yaXRpemVkLS0xSTUzNFwiO1xuZXhwb3J0IHZhciB0aHJlc2hvbGQgPSBcIm1hcExlZ2VuZC1tb2R1bGUtLXRocmVzaG9sZC0tMXphbGlcIjtcbmV4cG9ydCB2YXIgbm9uUHJpb3JpdGl6ZWQgPSBcIm1hcExlZ2VuZC1tb2R1bGUtLW5vblByaW9yaXRpemVkLS0yeTBWbVwiOyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgKiBhcyBzdHlsZXMgZnJvbSAnLi9tYXBMZWdlbmQubW9kdWxlLnNjc3MnO1xuXG5jb25zdCBNYXBMZWdlbmQgPSAoKSA9PiB7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sZWdlbmRDb250YWluZXJ9PlxuICAgICAgPGgzIGNsYXNzTmFtZT17c3R5bGVzLmxlZ2VuZEhlYWRlcn0+Q09MT1IgS0VZPC9oMz5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuc3dhdGNoQ29udGFpbmVyfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sZWdlbmRJdGVtfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNvbG9yU3dhdGNofSBpZD17c3R5bGVzLnByaW9yaXRpemVkfSAvPlxuICAgICAgICAgIDxzcGFuPlByaW9yaXRpemVkIENvbW11bml0eTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubGVnZW5kSXRlbX0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb2xvclN3YXRjaH0gaWQ9e3N0eWxlcy50aHJlc2hvbGR9IC8+XG4gICAgICAgICAgPHNwYW4+VGhyZXNob2xkIENvbW11bml0eTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubGVnZW5kSXRlbX0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb2xvclN3YXRjaH0gaWQ9e3N0eWxlcy5ub25Qcmlvcml0aXplZH0gLz5cbiAgICAgICAgICA8c3Bhbj5Ob24tUHJpb3JpdGl6ZWQgQ29tbXVuaXR5PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgTWFwTGVnZW5kO1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgdmFyIGRpc2NsYWltZXIgPSBcImNlanN0LW1vZHVsZS0tZGlzY2xhaW1lci0tM0xDMXlcIjtcbmV4cG9ydCB2YXIgdGV4dEJveCA9IFwiY2Vqc3QtbW9kdWxlLS10ZXh0Qm94LS05d3VEd1wiOyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgTGF5b3V0IGZyb20gJy4uL2NvbXBvbmVudHMvbGF5b3V0JztcbmltcG9ydCBKNDBNYXAgZnJvbSAnLi4vY29tcG9uZW50cy9KNDBNYXAnO1xuaW1wb3J0IEhvd1lvdUNhbkhlbHAgZnJvbSAnLi4vY29tcG9uZW50cy9Ib3dZb3VDYW5IZWxwJztcbmltcG9ydCBEb3dubG9hZFBhY2tldCBmcm9tICcuLi9jb21wb25lbnRzL2Rvd25sb2FkUGFja2V0JztcbmltcG9ydCBNYXBMZWdlbmQgZnJvbSAnLi4vY29tcG9uZW50cy9tYXBMZWdlbmQnO1xuaW1wb3J0ICogYXMgc3R5bGVzIGZyb20gJy4vY2Vqc3QubW9kdWxlLnNjc3MnO1xuXG5pbnRlcmZhY2UgSU1hcFBhZ2VQcm9wcyB7XG4gIGxvY2F0aW9uOiBMb2NhdGlvbjtcbn1cblxuXG5jb25zdCBDRUpTVFBhZ2UgPSAoe2xvY2F0aW9ufTogSU1hcFBhZ2VQcm9wcykgPT4ge1xuICAvLyBXZSB0ZW1wb3JhcmlseSByZW1vdmVkIE1hcENvbnRyb2xzLCB3aGljaCB3b3VsZCBlbmFibGUgeW91IHRvIGBzZXRGZWF0dXJlc2AgYWxzbywgZm9yIG5vd1xuICAvLyAgIFdlIHdpbGwgYnJpbmcgYmFjayBsYXRlciB3aGVuIHdlIGhhdmUgaW50ZXJhY3RpdmUgY29udHJvbHMuXG4gIHJldHVybiAoXG4gICAgPExheW91dCBsb2NhdGlvbj17bG9jYXRpb259PlxuICAgICAgPG1haW4gaWQ9XCJtYWluLWNvbnRlbnRcIiByb2xlPVwibWFpblwiPlxuXG4gICAgICAgIDxzZWN0aW9uPlxuICAgICAgICAgIDxoMj5KdXN0IFByb2dyZXNzIGNvbW11bml0aWVzPC9oMj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmRpc2NsYWltZXJ9PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZXh0Qm94fT5cbiAgICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgICAgSnVzdCBQcm9ncmVzcyBoZWxwcyBpZGVudGlmeSBhbmQgcHJpb3JpdGl6ZSBjb21tdW5pdGllcyBhY3Jvc3MgdGhlIFVuaXRlZCBTdGF0ZXMgYW5kIFUuUy4gdGVycml0b3JpZXNcbiAgICAgICAgICAgICAgICB0aGF0IGhhdmUgYmVlbiBoaXN0b3JpY2FsbHkgb3ZlcmJ1cmRlbmVkIGFuZCB1bmRlcnNlcnZlZC4gVGhlc2UgY29tbXVuaXRpZXMgd2lsbCByZWNlaXZlIDQwJSBvZlxuICAgICAgICAgICAgICAgIHRoZSBiZW5lZml0cyBmcm9tIGludmVzdG1lbnRzIGluIGtleSBhcmVhcyBvdXRsaW5lZCBieSB0aGVcbiAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgaHJlZj17J2h0dHBzOi8vd3d3LndoaXRlaG91c2UuZ292L2JyaWVmaW5nLXJvb20vJyArXG4gICAgICAgICAgICAgICAgICAgICdwcmVzaWRlbnRpYWwtYWN0aW9ucy8yMDIxLzAxLzI3LycgK1xuICAgICAgICAgICAgICAgICAgICAnZXhlY3V0aXZlLW9yZGVyLW9uLXRhY2tsaW5nLXRoZS1jbGltYXRlLScgK1xuICAgICAgICAgICAgICAgICAgICAnY3Jpc2lzLWF0LWhvbWUtYW5kLWFicm9hZC8nfVxuICAgICAgICAgICAgICAgICAgdGFyZ2V0PXsnX2JsYW5rJ31cbiAgICAgICAgICAgICAgICAgIHJlbD17J25vcmVmZXJyZXInfT5cbiAgICAgICAgICAgICAgICAgIEV4ZWN1dGl2ZSBPcmRlciBvbiBUYWNrbGluZyB0aGUgQ2xpbWF0ZSBDcmlzaXMgYXQgSG9tZSBhbmQgQWJyb2FkXG4gICAgICAgICAgICAgICAgPC9hPi5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICA8cD5cbiAgICAgICAgICAgICAgICBEb3dubG9hZCB0aGUgSnVzdCBQcm9ncmVzcyBwYWNrZXQgb3IgZXhwbG9yZSB0aGUgbWFwIGJlbG93IHRvIHNlZSB0aGUgbGlzdCBvZiBwcmlvcml0aXplZCBjb21tdW5pdGVzLiBUb1xuICAgICAgICAgICAgICAgIGxlYXJuIG1vcmUgYWJvdXQgaG93IHRoZXNlIGNvbW11bml0aWVzIHdlcmUgcHJpb3JpdGl6ZWQgY2hlY2sgb3V0IHRoZVxuICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICBocmVmPXsnLi9tZXRob2RvbG9neSd9PlxuICAgICAgICAgICAgICAgICAgTWV0aG9kb2xvZ3lcbiAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgcGFnZS5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8RG93bmxvYWRQYWNrZXQgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICA8aDI+RXhwbG9yZSB0aGUgVG9vbDwvaDI+XG4gICAgICAgIDxKNDBNYXAgbG9jYXRpb249e2xvY2F0aW9ufS8+XG4gICAgICAgIDxNYXBMZWdlbmQgLz5cbiAgICAgICAgPEhvd1lvdUNhbkhlbHAgLz5cbiAgICAgIDwvbWFpbj5cbiAgICA8L0xheW91dD5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IENFSlNUUGFnZTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///386\n')}}]); \ No newline at end of file diff --git a/main/contact/index.html b/main/contact/index.html index 90b3a1f8..22f984a1 100644 --- a/main/contact/index.html +++ b/main/contact/index.html @@ -1 +1 @@ -
\ No newline at end of file +
\ No newline at end of file diff --git a/main/en/404.html b/main/en/404.html index 75c5034c..2165d685 100644 --- a/main/en/404.html +++ b/main/en/404.html @@ -1 +1 @@ -
Not found

Page not found

Sorry 😔 we couldn’t find what you were looking for.

Go home.

\ No newline at end of file +
Not found

Page not found

Sorry 😔 we couldn’t find what you were looking for.

Go home.

\ No newline at end of file diff --git a/main/en/404/index.html b/main/en/404/index.html index 3f9be6b0..4bf27062 100644 --- a/main/en/404/index.html +++ b/main/en/404/index.html @@ -1 +1 @@ -
Not found

Page not found

Sorry 😔 we couldn’t find what you were looking for.

Go home.

\ No newline at end of file +
Not found

Page not found

Sorry 😔 we couldn’t find what you were looking for.

Go home.

\ No newline at end of file diff --git a/main/en/cejst/index.html b/main/en/cejst/index.html index 28b9f370..d9f9ec70 100644 --- a/main/en/cejst/index.html +++ b/main/en/cejst/index.html @@ -1 +1 @@ -Justice40
U.S. flag

An official website of the United States government

Public beta — Welcome to the public beta of the Just Progress Map, a climate and economic justice screening tool. The tool will be continuously updated. Please submit feedback.

Limited data sources — This tool currently includes 16 datasets. Over time, datasets could be added, updated, or removed. The datasets come from a variety of sources based on availability, quality, and relevance to environmental, energy, and climate issues. Each dataset has limitations, such as how recently the data was updated.

Just Progress communities

Just Progress helps identify and prioritize communities across the United States and U.S. territories that have been historically overburdened and underserved. These communities will receive 40% of the benefits from investments in key areas outlined by the  Executive Order on Tackling the Climate Crisis at Home and Abroad.

Download the Just Progress packet or explore the map below to see the list of prioritized communites. To learn more about how these communities were prioritized check out the  Methodology  page.

Just Progress Packet
This downloadable packet includes the list of Just Progress prioritized communities (30,021 census block groups) and 18 datasets.

Explore the Tool

COLOR KEY

Prioritized Community
Threshold Community
Non-Prioritized Community

How You Can Help Improve the Tool

  • If you have information that could help, we’d love to hear from you.
  • View our full set of data sources and methodology where you can add or download sources and check statuses on our data roadmap.
  • Check out our timeline and send feedback or attend relevant events.
  • Contact us and share the stories of your community.
\ No newline at end of file +Justice40
U.S. flag

An official website of the United States government

Public beta — Welcome to the public beta of the Just Progress Map, a climate and economic justice screening tool. The tool will be continuously updated. Please submit feedback.

Limited data sources — This tool currently includes 16 datasets. Over time, datasets could be added, updated, or removed. The datasets come from a variety of sources based on availability, quality, and relevance to environmental, energy, and climate issues. Each dataset has limitations, such as how recently the data was updated.

Just Progress communities

Just Progress helps identify and prioritize communities across the United States and U.S. territories that have been historically overburdened and underserved. These communities will receive 40% of the benefits from investments in key areas outlined by the  Executive Order on Tackling the Climate Crisis at Home and Abroad.

Download the Just Progress packet or explore the map below to see the list of prioritized communites. To learn more about how these communities were prioritized check out the  Methodology  page.

Just Progress Packet
This downloadable packet includes the list of Just Progress prioritized communities (30,021 census block groups) and 18 datasets.

Explore the Tool

COLOR KEY

Prioritized Community
Threshold Community
Non-Prioritized Community

How You Can Help Improve the Tool

  • If you have information that could help, we’d love to hear from you.
  • View our full set of data sources and methodology where you can add or download sources and check statuses on our data roadmap.
  • Check out our timeline and send feedback or attend relevant events.
  • Contact us and share the stories of your community.
\ No newline at end of file diff --git a/main/en/contact/index.html b/main/en/contact/index.html index 0358bb3b..24fc28b2 100644 --- a/main/en/contact/index.html +++ b/main/en/contact/index.html @@ -1 +1 @@ -Justice40
U.S. flag

An official website of the United States government

Public beta — Welcome to the public beta of the Just Progress Map, a climate and economic justice screening tool. The tool will be continuously updated. Please submit feedback.

Limited data sources — This tool currently includes 16 datasets. Over time, datasets could be added, updated, or removed. The datasets come from a variety of sources based on availability, quality, and relevance to environmental, energy, and climate issues. Each dataset has limitations, such as how recently the data was updated.

Contact

Information pending

\ No newline at end of file +Justice40
U.S. flag

An official website of the United States government

Public beta — Welcome to the public beta of the Just Progress Map, a climate and economic justice screening tool. The tool will be continuously updated. Please submit feedback.

Limited data sources — This tool currently includes 16 datasets. Over time, datasets could be added, updated, or removed. The datasets come from a variety of sources based on availability, quality, and relevance to environmental, energy, and climate issues. Each dataset has limitations, such as how recently the data was updated.

Contact

Information pending

\ No newline at end of file diff --git a/main/en/index.html b/main/en/index.html index 577ea2ef..888fb2d4 100644 --- a/main/en/index.html +++ b/main/en/index.html @@ -1,4 +1,4 @@ -Justice40
U.S. flag

An official website of the United States government

Public beta — Welcome to the public beta of the Just Progress Map, a climate and economic justice screening tool. The tool will be continuously updated. Please submit feedback.

Limited data sources — This tool currently includes 16 datasets. Over time, datasets could be added, updated, or removed. The datasets come from a variety of sources based on availability, quality, and relevance to environmental, energy, and climate issues. Each dataset has limitations, such as how recently the data was updated.

About Justice40

+Justice40

U.S. flag

An official website of the United States government

Public beta — Welcome to the public beta of the Just Progress Map, a climate and economic justice screening tool. The tool will be continuously updated. Please submit feedback.

Limited data sources — This tool currently includes 16 datasets. Over time, datasets could be added, updated, or removed. The datasets come from a variety of sources based on availability, quality, and relevance to environmental, energy, and climate issues. Each dataset has limitations, such as how recently the data was updated.

About Justice40

In an effort to address historical environmental injustices, President Biden created the Justice40 Initiative on January 27, 2021. The Justice40 Initiative directs 40% of the @@ -47,4 +47,4 @@ and recommendations, CEQ will continue to improve the tools being built and the processes for stakeholder and public engagement. -

\ No newline at end of file +

\ No newline at end of file diff --git a/main/en/methodology/index.html b/main/en/methodology/index.html index 5dfc5b6a..2c16b2d8 100644 --- a/main/en/methodology/index.html +++ b/main/en/methodology/index.html @@ -1 +1 @@ -Justice40
U.S. flag

An official website of the United States government

Public beta — Welcome to the public beta of the Just Progress Map, a climate and economic justice screening tool. The tool will be continuously updated. Please submit feedback.

Limited data sources — This tool currently includes 16 datasets. Over time, datasets could be added, updated, or removed. The datasets come from a variety of sources based on availability, quality, and relevance to environmental, energy, and climate issues. Each dataset has limitations, such as how recently the data was updated.

Methodology

The Just Progress tool combines demographic, environmental, and socio-economic data to generate a cumulative index score, referred to as the Just Progress Index. The tool currently utilizes national, publically-available data from the United States Census Bureau’s American Community Survey (ACS) and the EPA’s EJScreen tool.

The various inputs into the Just Progress Index are averaged into 2 categories: Pollution Burden and Demographics.

Pollution Burden: health risks arising from proximity and potential exposures to pollution and other adverse environmental conditions

Demographics: sensitive populations and socioeconomic factors that make a community more vulnerable

Pollution Burden average x Demographics average = Just Progress Index

Just Progress Index datasets

Data pending

\ No newline at end of file +Justice40
U.S. flag

An official website of the United States government

Public beta — Welcome to the public beta of the Just Progress Map, a climate and economic justice screening tool. The tool will be continuously updated. Please submit feedback.

Limited data sources — This tool currently includes 16 datasets. Over time, datasets could be added, updated, or removed. The datasets come from a variety of sources based on availability, quality, and relevance to environmental, energy, and climate issues. Each dataset has limitations, such as how recently the data was updated.

Methodology

The Just Progress tool combines demographic, environmental, and socio-economic data to generate a cumulative index score, referred to as the Just Progress Index. The tool currently utilizes national, publically-available data from the United States Census Bureau’s American Community Survey (ACS) and the EPA’s EJScreen tool.

The various inputs into the Just Progress Index are averaged into 2 categories: Pollution Burden and Demographics.

Pollution Burden: health risks arising from proximity and potential exposures to pollution and other adverse environmental conditions

Demographics: sensitive populations and socioeconomic factors that make a community more vulnerable

Pollution Burden average x Demographics average = Just Progress Index

Just Progress Index datasets

Data pending

\ No newline at end of file diff --git a/main/en/timeline/index.html b/main/en/timeline/index.html index 875a789a..cdc72979 100644 --- a/main/en/timeline/index.html +++ b/main/en/timeline/index.html @@ -1 +1 @@ -Justice40
U.S. flag

An official website of the United States government

Public beta — Welcome to the public beta of the Just Progress Map, a climate and economic justice screening tool. The tool will be continuously updated. Please submit feedback.

Limited data sources — This tool currently includes 16 datasets. Over time, datasets could be added, updated, or removed. The datasets come from a variety of sources based on availability, quality, and relevance to environmental, energy, and climate issues. Each dataset has limitations, such as how recently the data was updated.

Timeline

Throughout the Process

renew icon

Continuously engage with stakeholders and community members to get feedback on the screening tool, scoring, and overall process.

Continuously source data that meets data principles as defined through community input.

Milestones

  1. Milestone 1

    Publish data principles on this site by June 2021.

  2. Milestone 2

    Make the first version of a screening tool available by July 2021.

  3. Milestone 3

    Create a public scorecard to ensure accountability of investments by February 2022.

\ No newline at end of file +Justice40
U.S. flag

An official website of the United States government

Public beta — Welcome to the public beta of the Just Progress Map, a climate and economic justice screening tool. The tool will be continuously updated. Please submit feedback.

Limited data sources — This tool currently includes 16 datasets. Over time, datasets could be added, updated, or removed. The datasets come from a variety of sources based on availability, quality, and relevance to environmental, energy, and climate issues. Each dataset has limitations, such as how recently the data was updated.

Timeline

Throughout the Process

renew icon

Continuously engage with stakeholders and community members to get feedback on the screening tool, scoring, and overall process.

Continuously source data that meets data principles as defined through community input.

Milestones

  1. Milestone 1

    Publish data principles on this site by June 2021.

  2. Milestone 2

    Make the first version of a screening tool available by July 2021.

  3. Milestone 3

    Create a public scorecard to ensure accountability of investments by February 2022.

\ No newline at end of file diff --git a/main/es/404.html b/main/es/404.html index 26209202..3188b267 100644 --- a/main/es/404.html +++ b/main/es/404.html @@ -1 +1 @@ -
Not found

Page not found

Sorry 😔 we couldn’t find what you were looking for.

Go home.

\ No newline at end of file +
Not found

Page not found

Sorry 😔 we couldn’t find what you were looking for.

Go home.

\ No newline at end of file diff --git a/main/es/404/index.html b/main/es/404/index.html index 6dc62e0e..1079b96e 100644 --- a/main/es/404/index.html +++ b/main/es/404/index.html @@ -1 +1 @@ -
Not found

Page not found

Sorry 😔 we couldn’t find what you were looking for.

Go home.

\ No newline at end of file +
Not found

Page not found

Sorry 😔 we couldn’t find what you were looking for.

Go home.

\ No newline at end of file diff --git a/main/es/cejst/index.html b/main/es/cejst/index.html index fbfaae13..59587f68 100644 --- a/main/es/cejst/index.html +++ b/main/es/cejst/index.html @@ -1 +1 @@ -Justice40
U.S. flag

An official website of the United States government

Public beta — Welcome to the public beta of the Just Progress Map, a climate and economic justice screening tool. The tool will be continuously updated. Please submit feedback.

Limited data sources — This tool currently includes 16 datasets. Over time, datasets could be added, updated, or removed. The datasets come from a variety of sources based on availability, quality, and relevance to environmental, energy, and climate issues. Each dataset has limitations, such as how recently the data was updated.

Just Progress communities

Just Progress helps identify and prioritize communities across the United States and U.S. territories that have been historically overburdened and underserved. These communities will receive 40% of the benefits from investments in key areas outlined by the  Executive Order on Tackling the Climate Crisis at Home and Abroad.

Download the Just Progress packet or explore the map below to see the list of prioritized communites. To learn more about how these communities were prioritized check out the  Methodology  page.

Just Progress Packet
This downloadable packet includes the list of Just Progress prioritized communities (30,021 census block groups) and 18 datasets.

Explore the Tool

COLOR KEY

Prioritized Community
Threshold Community
Non-Prioritized Community

How You Can Help Improve the Tool

  • If you have information that could help, we’d love to hear from you.
  • View our full set of data sources and methodology where you can add or download sources and check statuses on our data roadmap.
  • Check out our timeline and send feedback or attend relevant events.
  • Contact us and share the stories of your community.
\ No newline at end of file +Justice40
U.S. flag

An official website of the United States government

Public beta — Welcome to the public beta of the Just Progress Map, a climate and economic justice screening tool. The tool will be continuously updated. Please submit feedback.

Limited data sources — This tool currently includes 16 datasets. Over time, datasets could be added, updated, or removed. The datasets come from a variety of sources based on availability, quality, and relevance to environmental, energy, and climate issues. Each dataset has limitations, such as how recently the data was updated.

Just Progress communities

Just Progress helps identify and prioritize communities across the United States and U.S. territories that have been historically overburdened and underserved. These communities will receive 40% of the benefits from investments in key areas outlined by the  Executive Order on Tackling the Climate Crisis at Home and Abroad.

Download the Just Progress packet or explore the map below to see the list of prioritized communites. To learn more about how these communities were prioritized check out the  Methodology  page.

Just Progress Packet
This downloadable packet includes the list of Just Progress prioritized communities (30,021 census block groups) and 18 datasets.

Explore the Tool

COLOR KEY

Prioritized Community
Threshold Community
Non-Prioritized Community

How You Can Help Improve the Tool

  • If you have information that could help, we’d love to hear from you.
  • View our full set of data sources and methodology where you can add or download sources and check statuses on our data roadmap.
  • Check out our timeline and send feedback or attend relevant events.
  • Contact us and share the stories of your community.
\ No newline at end of file diff --git a/main/es/contact/index.html b/main/es/contact/index.html index 5538e655..cc5b60c2 100644 --- a/main/es/contact/index.html +++ b/main/es/contact/index.html @@ -1 +1 @@ -Justice40
U.S. flag

An official website of the United States government

Public beta — Welcome to the public beta of the Just Progress Map, a climate and economic justice screening tool. The tool will be continuously updated. Please submit feedback.

Limited data sources — This tool currently includes 16 datasets. Over time, datasets could be added, updated, or removed. The datasets come from a variety of sources based on availability, quality, and relevance to environmental, energy, and climate issues. Each dataset has limitations, such as how recently the data was updated.

Contact

Information pending

\ No newline at end of file +Justice40
U.S. flag

An official website of the United States government

Public beta — Welcome to the public beta of the Just Progress Map, a climate and economic justice screening tool. The tool will be continuously updated. Please submit feedback.

Limited data sources — This tool currently includes 16 datasets. Over time, datasets could be added, updated, or removed. The datasets come from a variety of sources based on availability, quality, and relevance to environmental, energy, and climate issues. Each dataset has limitations, such as how recently the data was updated.

Contact

Information pending

\ No newline at end of file diff --git a/main/es/index.html b/main/es/index.html index 08788538..4df70eeb 100644 --- a/main/es/index.html +++ b/main/es/index.html @@ -1 +1 @@ -Justice40
U.S. flag

An official website of the United States government

Public beta — Welcome to the public beta of the Just Progress Map, a climate and economic justice screening tool. The tool will be continuously updated. Please submit feedback.

Limited data sources — This tool currently includes 16 datasets. Over time, datasets could be added, updated, or removed. The datasets come from a variety of sources based on availability, quality, and relevance to environmental, energy, and climate issues. Each dataset has limitations, such as how recently the data was updated.

Acerca de Justice40

En un esfuerzo por abordar las injusticias ambientales históricas, el presidente Biden creó la Iniciativa Justice40 el 27 de enero de 2021. La Iniciativa Justice40 dirige el 40% de los beneficios de las inversiones federales en siete áreas clave a comunidades sobrecargadas y desatendidas.

Las agencias federales darán prioridad a los beneficios utilizando una nueva herramienta de evaluación de la justicia económica y climática. Esta herramienta de selección será un mapa que visualiza datos para comparar los impactos acumulativos de factores ambientales, climáticos y económicos. Está siendo desarrollado por el Consejo de Calidad Ambiental (Council on Environmental Quality - CEQ) con la orientación de líderes de justicia ambiental y comunidades afectadas por injusticias ambientales. La primera versión de la herramienta de detección se lanzará en julio de 2021. Sin embargo, la herramienta de detección y los datos que se utilizan se actualizarán continuamente para reflejar mejor las experiencias vividas por los miembros de la comunidad.

Lea más sobre la Iniciativa Justice40 en Orden ejecutiva sobre la lucha contra la crisis climática en el país y en el extranjero. del presidente Biden.

Áreas de enfoque

  • Cambio climático icon
    Cambio climático
  • Energía limpia y eficiencia energética icon
    Energía limpia y eficiencia energética
  • Transporte limpio icon
    Transporte limpio
  • Vivienda asequible y sostenible icon
    Vivienda asequible y sostenible
  • Capacitación y desarrollo de la fuerza laboral icon
    Capacitación y desarrollo de la fuerza laboral
  • Remediación de la contaminación heredada icon
    Remediación de la contaminación heredada
  • Infraestructura de agua limpia icon
    Infraestructura de agua limpia

Un enfoque transparente, centrado en la comunidad

Las iniciativas exitosas están guiadas por aportes directos de las comunidades a las que sirven. CEQ se compromete con la transparencia, la inclusión y la iteración en la construcción de esta herramienta de evaluación.

Transparencia: El código y los datos detrás de la herramienta de detección son de código abierto, lo que significa que está disponible para que el público los revise y contribuya. Esta herramienta se está desarrollando públicamente para que las comunidades, los expertos académicos y cualquier persona interesada puedan participar en el proceso de creación de herramientas.

Inclusivo: Muchas áreas que carecen de inversiones también carecen de datos ambientales y se pasarían por alto utilizando los datos ambientales disponibles. CEQ se está acercando activamente a grupos que históricamente han sido excluidos de la toma de decisiones, como grupos en áreas rurales y tribales, para comprender sus necesidades y solicitar su opinión.

Iterativo: La lista de priorización de la comunidad inicial proporcionada por la herramienta de evaluación es el comienzo de un proceso de colaboración en el refinamiento de la puntuación, en lugar de una respuesta final. CEQ ha recibido recomendaciones sobre conjuntos de datos de entrevistas comunitarias, el Consejo Asesor de Justicia Ambiental de la Casa Blanca y mediante comentarios públicos, pero establecer una puntuación que sea verdaderamente representativa será un proceso continuo a largo plazo. A medida que las comunidades envíen comentarios y recomendaciones, CEQ continuará mejorando las herramientas que se están construyendo y los procesos para la participación pública y de las partes interesadas.

\ No newline at end of file +Justice40
U.S. flag

An official website of the United States government

Public beta — Welcome to the public beta of the Just Progress Map, a climate and economic justice screening tool. The tool will be continuously updated. Please submit feedback.

Limited data sources — This tool currently includes 16 datasets. Over time, datasets could be added, updated, or removed. The datasets come from a variety of sources based on availability, quality, and relevance to environmental, energy, and climate issues. Each dataset has limitations, such as how recently the data was updated.

Acerca de Justice40

En un esfuerzo por abordar las injusticias ambientales históricas, el presidente Biden creó la Iniciativa Justice40 el 27 de enero de 2021. La Iniciativa Justice40 dirige el 40% de los beneficios de las inversiones federales en siete áreas clave a comunidades sobrecargadas y desatendidas.

Las agencias federales darán prioridad a los beneficios utilizando una nueva herramienta de evaluación de la justicia económica y climática. Esta herramienta de selección será un mapa que visualiza datos para comparar los impactos acumulativos de factores ambientales, climáticos y económicos. Está siendo desarrollado por el Consejo de Calidad Ambiental (Council on Environmental Quality - CEQ) con la orientación de líderes de justicia ambiental y comunidades afectadas por injusticias ambientales. La primera versión de la herramienta de detección se lanzará en julio de 2021. Sin embargo, la herramienta de detección y los datos que se utilizan se actualizarán continuamente para reflejar mejor las experiencias vividas por los miembros de la comunidad.

Lea más sobre la Iniciativa Justice40 en Orden ejecutiva sobre la lucha contra la crisis climática en el país y en el extranjero. del presidente Biden.

Áreas de enfoque

  • Cambio climático icon
    Cambio climático
  • Energía limpia y eficiencia energética icon
    Energía limpia y eficiencia energética
  • Transporte limpio icon
    Transporte limpio
  • Vivienda asequible y sostenible icon
    Vivienda asequible y sostenible
  • Capacitación y desarrollo de la fuerza laboral icon
    Capacitación y desarrollo de la fuerza laboral
  • Remediación de la contaminación heredada icon
    Remediación de la contaminación heredada
  • Infraestructura de agua limpia icon
    Infraestructura de agua limpia

Un enfoque transparente, centrado en la comunidad

Las iniciativas exitosas están guiadas por aportes directos de las comunidades a las que sirven. CEQ se compromete con la transparencia, la inclusión y la iteración en la construcción de esta herramienta de evaluación.

Transparencia: El código y los datos detrás de la herramienta de detección son de código abierto, lo que significa que está disponible para que el público los revise y contribuya. Esta herramienta se está desarrollando públicamente para que las comunidades, los expertos académicos y cualquier persona interesada puedan participar en el proceso de creación de herramientas.

Inclusivo: Muchas áreas que carecen de inversiones también carecen de datos ambientales y se pasarían por alto utilizando los datos ambientales disponibles. CEQ se está acercando activamente a grupos que históricamente han sido excluidos de la toma de decisiones, como grupos en áreas rurales y tribales, para comprender sus necesidades y solicitar su opinión.

Iterativo: La lista de priorización de la comunidad inicial proporcionada por la herramienta de evaluación es el comienzo de un proceso de colaboración en el refinamiento de la puntuación, en lugar de una respuesta final. CEQ ha recibido recomendaciones sobre conjuntos de datos de entrevistas comunitarias, el Consejo Asesor de Justicia Ambiental de la Casa Blanca y mediante comentarios públicos, pero establecer una puntuación que sea verdaderamente representativa será un proceso continuo a largo plazo. A medida que las comunidades envíen comentarios y recomendaciones, CEQ continuará mejorando las herramientas que se están construyendo y los procesos para la participación pública y de las partes interesadas.

\ No newline at end of file diff --git a/main/es/methodology/index.html b/main/es/methodology/index.html index 00889faa..4d847f2d 100644 --- a/main/es/methodology/index.html +++ b/main/es/methodology/index.html @@ -1 +1 @@ -Justice40
U.S. flag

An official website of the United States government

Public beta — Welcome to the public beta of the Just Progress Map, a climate and economic justice screening tool. The tool will be continuously updated. Please submit feedback.

Limited data sources — This tool currently includes 16 datasets. Over time, datasets could be added, updated, or removed. The datasets come from a variety of sources based on availability, quality, and relevance to environmental, energy, and climate issues. Each dataset has limitations, such as how recently the data was updated.

Methodology

The Just Progress tool combines demographic, environmental, and socio-economic data to generate a cumulative index score, referred to as the Just Progress Index. The tool currently utilizes national, publically-available data from the United States Census Bureau’s American Community Survey (ACS) and the EPA’s EJScreen tool.

The various inputs into the Just Progress Index are averaged into 2 categories: Pollution Burden and Demographics.

Pollution Burden: health risks arising from proximity and potential exposures to pollution and other adverse environmental conditions

Demographics: sensitive populations and socioeconomic factors that make a community more vulnerable

Pollution Burden average x Demographics average = Just Progress Index

Just Progress Index datasets

Data pending

\ No newline at end of file +Justice40
U.S. flag

An official website of the United States government

Public beta — Welcome to the public beta of the Just Progress Map, a climate and economic justice screening tool. The tool will be continuously updated. Please submit feedback.

Limited data sources — This tool currently includes 16 datasets. Over time, datasets could be added, updated, or removed. The datasets come from a variety of sources based on availability, quality, and relevance to environmental, energy, and climate issues. Each dataset has limitations, such as how recently the data was updated.

Methodology

The Just Progress tool combines demographic, environmental, and socio-economic data to generate a cumulative index score, referred to as the Just Progress Index. The tool currently utilizes national, publically-available data from the United States Census Bureau’s American Community Survey (ACS) and the EPA’s EJScreen tool.

The various inputs into the Just Progress Index are averaged into 2 categories: Pollution Burden and Demographics.

Pollution Burden: health risks arising from proximity and potential exposures to pollution and other adverse environmental conditions

Demographics: sensitive populations and socioeconomic factors that make a community more vulnerable

Pollution Burden average x Demographics average = Just Progress Index

Just Progress Index datasets

Data pending

\ No newline at end of file diff --git a/main/es/timeline/index.html b/main/es/timeline/index.html index 15281fe3..37cf4945 100644 --- a/main/es/timeline/index.html +++ b/main/es/timeline/index.html @@ -1 +1 @@ -Justice40
U.S. flag

An official website of the United States government

Public beta — Welcome to the public beta of the Just Progress Map, a climate and economic justice screening tool. The tool will be continuously updated. Please submit feedback.

Limited data sources — This tool currently includes 16 datasets. Over time, datasets could be added, updated, or removed. The datasets come from a variety of sources based on availability, quality, and relevance to environmental, energy, and climate issues. Each dataset has limitations, such as how recently the data was updated.

Timeline

Throughout the Process

renew icon

Continuously engage with stakeholders and community members to get feedback on the screening tool, scoring, and overall process.

Continuously source data that meets data principles as defined through community input.

Milestones

  1. Milestone 1

    Publish data principles on this site by June 2021.

  2. Milestone 2

    Make the first version of a screening tool available by July 2021.

  3. Milestone 3

    Create a public scorecard to ensure accountability of investments by February 2022.

\ No newline at end of file +Justice40
U.S. flag

An official website of the United States government

Public beta — Welcome to the public beta of the Just Progress Map, a climate and economic justice screening tool. The tool will be continuously updated. Please submit feedback.

Limited data sources — This tool currently includes 16 datasets. Over time, datasets could be added, updated, or removed. The datasets come from a variety of sources based on availability, quality, and relevance to environmental, energy, and climate issues. Each dataset has limitations, such as how recently the data was updated.

Timeline

Throughout the Process

renew icon

Continuously engage with stakeholders and community members to get feedback on the screening tool, scoring, and overall process.

Continuously source data that meets data principles as defined through community input.

Milestones

  1. Milestone 1

    Publish data principles on this site by June 2021.

  2. Milestone 2

    Make the first version of a screening tool available by July 2021.

  3. Milestone 3

    Create a public scorecard to ensure accountability of investments by February 2022.

\ No newline at end of file diff --git a/main/index.html b/main/index.html index 408b69ab..b124b1f0 100644 --- a/main/index.html +++ b/main/index.html @@ -1 +1 @@ -
\ No newline at end of file +
\ No newline at end of file diff --git a/main/methodology/index.html b/main/methodology/index.html index e8ea1a5f..4aafb099 100644 --- a/main/methodology/index.html +++ b/main/methodology/index.html @@ -1 +1 @@ -
\ No newline at end of file +
\ No newline at end of file diff --git a/main/page-data/app-data.json b/main/page-data/app-data.json index 66e98ff3..73084daa 100644 --- a/main/page-data/app-data.json +++ b/main/page-data/app-data.json @@ -1 +1 @@ -{"webpackCompilationHash":"17a81a635ca1310084a6"} +{"webpackCompilationHash":"ff84d6d8c5cb75bd86c2"} diff --git a/main/styles.b061829a1cb2fc5449b0.css b/main/styles.e3bb5bc21a277dc41dd7.css similarity index 99% rename from main/styles.b061829a1cb2fc5449b0.css rename to main/styles.e3bb5bc21a277dc41dd7.css index cefb5cae..9e362885 100644 --- a/main/styles.b061829a1cb2fc5449b0.css +++ b/main/styles.e3bb5bc21a277dc41dd7.css @@ -1,2 +1,2 @@ .bg-info-lighter{background-color:#e7f6f8}.bg-info-light{background-color:#99deea}.bg-info{background-color:#00bde3}.bg-info-dark{background-color:#009ec1}.bg-info-darker{background-color:#2e6276}.bg-error-lighter{background-color:#f4e3db}.bg-error-light{background-color:#f39268}.bg-error{background-color:#d54309}.bg-error-dark{background-color:#b50909}.bg-error-darker{background-color:#6f3331}.bg-warning-lighter{background-color:#faf3d1}.bg-warning-light{background-color:#fee685}.bg-warning{background-color:#ffbe2e}.bg-warning-dark{background-color:#e5a000}.bg-warning-darker{background-color:#936f38}.bg-success-lighter{background-color:#ecf3ec}.bg-success-light{background-color:#70e17b}.bg-success{background-color:#00a91c}.bg-success-dark{background-color:#4d8055}.bg-success-darker{background-color:#446443}.bg-disabled-light{background-color:#e6e6e6}.bg-disabled{background-color:#c9c9c9}.bg-disabled-dark{background-color:#adadad}.text-info-lighter{color:#e7f6f8}.text-info-light{color:#99deea}.text-info{color:#00bde3}.text-info-dark{color:#009ec1}.text-info-darker{color:#2e6276}.text-error-lighter{color:#f4e3db}.text-error-light{color:#f39268}.text-error{color:#d54309}.text-error-dark{color:#b50909}.text-error-darker{color:#6f3331}.text-warning-lighter{color:#faf3d1}.text-warning-light{color:#fee685}.text-warning{color:#ffbe2e}.text-warning-dark{color:#e5a000}.text-warning-darker{color:#936f38}.text-success-lighter{color:#ecf3ec}.text-success-light{color:#70e17b}.text-success{color:#00a91c}.text-success-dark{color:#4d8055}.text-success-darker{color:#446443}.text-disabled-light{color:#e6e6e6}.text-disabled{color:#c9c9c9}.text-disabled-dark{color:#adadad}.src-components-Alert-Alert-module__alertWithCTA--1frj5{align-items:center;display:flex;justify-content:space-between}.src-components-Table-Table-module__fullwidth--3-K3t{width:100%}.src-components-Table-Table-module__fixed--2Awcy{table-layout:fixed}.src-components-Modal-Modal-module__title--3YHHD h2{margin:0}.src-components-Modal-Modal-module__actions--2Ur9N{text-align:right}.src-components-Modal-Modal-module__content--3-4_Y+.src-components-Modal-Modal-module__actions--2Ur9N,.src-components-Modal-Modal-module__title--3YHHD+.src-components-Modal-Modal-module__content--3-4_Y{border-top:1px solid #dfe1e2}.src-components-Modal-Modal-module__modal--1uszs{background-color:#fff;border-radius:2px;box-shadow:0 .5rem 1rem 0 rgba(0,0,0,.1);max-width:630px;min-width:400px}.src-components-Modal-Modal-module__modal--1uszs .src-components-Modal-Modal-module__actions--2Ur9N,.src-components-Modal-Modal-module__modal--1uszs .src-components-Modal-Modal-module__content--3-4_Y,.src-components-Modal-Modal-module__modal--1uszs .src-components-Modal-Modal-module__title--3YHHD{padding:1rem}.src-components-Modal-Modal-module__overlay--WSsyO{background-color:rgba(0,0,0,.3);height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:999}.src-components-Modal-Modal-module__modalContainer--2Zv9O{align-items:center;display:flex;height:100vh;justify-content:center;left:0;position:fixed;top:0;width:100vw;z-index:1000}.mapboxgl-map{-webkit-tap-highlight-color:rgba(0,0,0,0);font:12px/20px Helvetica Neue,Arial,Helvetica,sans-serif;overflow:hidden;position:relative}.mapboxgl-canvas{left:0;position:absolute;top:0}.mapboxgl-map:-webkit-full-screen{height:100%;width:100%}.mapboxgl-canary{background-color:salmon}.mapboxgl-canvas-container.mapboxgl-interactive,.mapboxgl-ctrl-group button.mapboxgl-ctrl-compass{cursor:-webkit-grab;cursor:-moz-grab;cursor:grab;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.mapboxgl-canvas-container.mapboxgl-interactive.mapboxgl-track-pointer{cursor:pointer}.mapboxgl-canvas-container.mapboxgl-interactive:active,.mapboxgl-ctrl-group button.mapboxgl-ctrl-compass:active{cursor:-webkit-grabbing;cursor:-moz-grabbing;cursor:grabbing}.mapboxgl-canvas-container.mapboxgl-touch-zoom-rotate,.mapboxgl-canvas-container.mapboxgl-touch-zoom-rotate .mapboxgl-canvas{touch-action:pan-x pan-y}.mapboxgl-canvas-container.mapboxgl-touch-drag-pan,.mapboxgl-canvas-container.mapboxgl-touch-drag-pan .mapboxgl-canvas{touch-action:pinch-zoom}.mapboxgl-canvas-container.mapboxgl-touch-zoom-rotate.mapboxgl-touch-drag-pan,.mapboxgl-canvas-container.mapboxgl-touch-zoom-rotate.mapboxgl-touch-drag-pan .mapboxgl-canvas{touch-action:none}.mapboxgl-ctrl-bottom-left,.mapboxgl-ctrl-bottom-right,.mapboxgl-ctrl-top-left,.mapboxgl-ctrl-top-right{pointer-events:none;position:absolute;z-index:2}.mapboxgl-ctrl-top-left{left:0;top:0}.mapboxgl-ctrl-top-right{right:0;top:0}.mapboxgl-ctrl-bottom-left{bottom:0;left:0}.mapboxgl-ctrl-bottom-right{bottom:0;right:0}.mapboxgl-ctrl{clear:both;pointer-events:auto;transform:translate(0)}.mapboxgl-ctrl-top-left .mapboxgl-ctrl{float:left;margin:10px 0 0 10px}.mapboxgl-ctrl-top-right .mapboxgl-ctrl{float:right;margin:10px 10px 0 0}.mapboxgl-ctrl-bottom-left .mapboxgl-ctrl{float:left;margin:0 0 10px 10px}.mapboxgl-ctrl-bottom-right .mapboxgl-ctrl{float:right;margin:0 10px 10px 0}.mapboxgl-ctrl-group{background:#fff;border-radius:4px}.mapboxgl-ctrl-group:not(:empty){-moz-box-shadow:0 0 2px rgba(0,0,0,.1);-webkit-box-shadow:0 0 2px rgba(0,0,0,.1);box-shadow:0 0 0 2px rgba(0,0,0,.1)}@media (-ms-high-contrast:active){.mapboxgl-ctrl-group:not(:empty){box-shadow:0 0 0 2px ButtonText}}.mapboxgl-ctrl-group button{background-color:transparent;border:0;box-sizing:border-box;cursor:pointer;display:block;height:29px;outline:none;padding:0;width:29px}.mapboxgl-ctrl-group button+button{border-top:1px solid #ddd}.mapboxgl-ctrl button .mapboxgl-ctrl-icon{background-position:50%;background-repeat:no-repeat;display:block;height:100%;width:100%}@media (-ms-high-contrast:active){.mapboxgl-ctrl-icon{background-color:transparent}.mapboxgl-ctrl-group button+button{border-top:1px solid ButtonText}}.mapboxgl-ctrl button::-moz-focus-inner{border:0;padding:0}.mapboxgl-ctrl-attrib-button:focus,.mapboxgl-ctrl-group button:focus{box-shadow:0 0 2px 2px #0096ff}.mapboxgl-ctrl button:disabled{cursor:not-allowed}.mapboxgl-ctrl button:disabled .mapboxgl-ctrl-icon{opacity:.25}.mapboxgl-ctrl button:not(:disabled):hover{background-color:rgba(0,0,0,.05)}.mapboxgl-ctrl-group button:focus:focus-visible{box-shadow:0 0 2px 2px #0096ff}.mapboxgl-ctrl-group button:focus:not(:focus-visible){box-shadow:none}.mapboxgl-ctrl-group button:focus:first-child{border-radius:4px 4px 0 0}.mapboxgl-ctrl-group button:focus:last-child{border-radius:0 0 4px 4px}.mapboxgl-ctrl-group button:focus:only-child{border-radius:inherit}.mapboxgl-ctrl button.mapboxgl-ctrl-zoom-out .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23333' viewBox='0 0 29 29'%3E%3Cpath d='M10 13c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h9c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-9z'/%3E%3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-zoom-in .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23333' viewBox='0 0 29 29'%3E%3Cpath d='M14.5 8.5c-.75 0-1.5.75-1.5 1.5v3h-3c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h3v3c0 .75.75 1.5 1.5 1.5S16 19.75 16 19v-3h3c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-3v-3c0-.75-.75-1.5-1.5-1.5z'/%3E%3C/svg%3E")}@media (-ms-high-contrast:active){.mapboxgl-ctrl button.mapboxgl-ctrl-zoom-out .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 29 29'%3E%3Cpath d='M10 13c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h9c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-9z'/%3E%3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-zoom-in .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 29 29'%3E%3Cpath d='M14.5 8.5c-.75 0-1.5.75-1.5 1.5v3h-3c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h3v3c0 .75.75 1.5 1.5 1.5S16 19.75 16 19v-3h3c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-3v-3c0-.75-.75-1.5-1.5-1.5z'/%3E%3C/svg%3E")}}@media (-ms-high-contrast:black-on-white){.mapboxgl-ctrl button.mapboxgl-ctrl-zoom-out .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 29 29'%3E%3Cpath d='M10 13c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h9c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-9z'/%3E%3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-zoom-in .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 29 29'%3E%3Cpath d='M14.5 8.5c-.75 0-1.5.75-1.5 1.5v3h-3c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h3v3c0 .75.75 1.5 1.5 1.5S16 19.75 16 19v-3h3c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-3v-3c0-.75-.75-1.5-1.5-1.5z'/%3E%3C/svg%3E")}}.mapboxgl-ctrl button.mapboxgl-ctrl-fullscreen .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23333' viewBox='0 0 29 29'%3E%3Cpath d='M24 16v5.5c0 1.75-.75 2.5-2.5 2.5H16v-1l3-1.5-4-5.5 1-1 5.5 4 1.5-3h1zM6 16l1.5 3 5.5-4 1 1-4 5.5 3 1.5v1H7.5C5.75 24 5 23.25 5 21.5V16h1zm7-11v1l-3 1.5 4 5.5-1 1-5.5-4L6 13H5V7.5C5 5.75 5.75 5 7.5 5H13zm11 2.5c0-1.75-.75-2.5-2.5-2.5H16v1l3 1.5-4 5.5 1 1 5.5-4 1.5 3h1V7.5z'/%3E%3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-shrink .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 29 29'%3E%3Cpath d='M18.5 16c-1.75 0-2.5.75-2.5 2.5V24h1l1.5-3 5.5 4 1-1-4-5.5 3-1.5v-1h-5.5zM13 18.5c0-1.75-.75-2.5-2.5-2.5H5v1l3 1.5L4 24l1 1 5.5-4 1.5 3h1v-5.5zm3-8c0 1.75.75 2.5 2.5 2.5H24v-1l-3-1.5L25 5l-1-1-5.5 4L17 5h-1v5.5zM10.5 13c1.75 0 2.5-.75 2.5-2.5V5h-1l-1.5 3L5 4 4 5l4 5.5L5 12v1h5.5z'/%3E%3C/svg%3E")}@media (-ms-high-contrast:active){.mapboxgl-ctrl button.mapboxgl-ctrl-fullscreen .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 29 29'%3E%3Cpath d='M24 16v5.5c0 1.75-.75 2.5-2.5 2.5H16v-1l3-1.5-4-5.5 1-1 5.5 4 1.5-3h1zM6 16l1.5 3 5.5-4 1 1-4 5.5 3 1.5v1H7.5C5.75 24 5 23.25 5 21.5V16h1zm7-11v1l-3 1.5 4 5.5-1 1-5.5-4L6 13H5V7.5C5 5.75 5.75 5 7.5 5H13zm11 2.5c0-1.75-.75-2.5-2.5-2.5H16v1l3 1.5-4 5.5 1 1 5.5-4 1.5 3h1V7.5z'/%3E%3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-shrink .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 29 29'%3E%3Cpath d='M18.5 16c-1.75 0-2.5.75-2.5 2.5V24h1l1.5-3 5.5 4 1-1-4-5.5 3-1.5v-1h-5.5zM13 18.5c0-1.75-.75-2.5-2.5-2.5H5v1l3 1.5L4 24l1 1 5.5-4 1.5 3h1v-5.5zm3-8c0 1.75.75 2.5 2.5 2.5H24v-1l-3-1.5L25 5l-1-1-5.5 4L17 5h-1v5.5zM10.5 13c1.75 0 2.5-.75 2.5-2.5V5h-1l-1.5 3L5 4 4 5l4 5.5L5 12v1h5.5z'/%3E%3C/svg%3E")}}@media (-ms-high-contrast:black-on-white){.mapboxgl-ctrl button.mapboxgl-ctrl-fullscreen .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 29 29'%3E%3Cpath d='M24 16v5.5c0 1.75-.75 2.5-2.5 2.5H16v-1l3-1.5-4-5.5 1-1 5.5 4 1.5-3h1zM6 16l1.5 3 5.5-4 1 1-4 5.5 3 1.5v1H7.5C5.75 24 5 23.25 5 21.5V16h1zm7-11v1l-3 1.5 4 5.5-1 1-5.5-4L6 13H5V7.5C5 5.75 5.75 5 7.5 5H13zm11 2.5c0-1.75-.75-2.5-2.5-2.5H16v1l3 1.5-4 5.5 1 1 5.5-4 1.5 3h1V7.5z'/%3E%3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-shrink .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 29 29'%3E%3Cpath d='M18.5 16c-1.75 0-2.5.75-2.5 2.5V24h1l1.5-3 5.5 4 1-1-4-5.5 3-1.5v-1h-5.5zM13 18.5c0-1.75-.75-2.5-2.5-2.5H5v1l3 1.5L4 24l1 1 5.5-4 1.5 3h1v-5.5zm3-8c0 1.75.75 2.5 2.5 2.5H24v-1l-3-1.5L25 5l-1-1-5.5 4L17 5h-1v5.5zM10.5 13c1.75 0 2.5-.75 2.5-2.5V5h-1l-1.5 3L5 4 4 5l4 5.5L5 12v1h5.5z'/%3E%3C/svg%3E")}}.mapboxgl-ctrl button.mapboxgl-ctrl-compass .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23333' viewBox='0 0 29 29'%3E%3Cpath d='m10.5 14 4-8 4 8h-8z'/%3E%3Cpath fill='%23ccc' d='m10.5 16 4 8 4-8h-8z'/%3E%3C/svg%3E")}@media (-ms-high-contrast:active){.mapboxgl-ctrl button.mapboxgl-ctrl-compass .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 29 29'%3E%3Cpath d='m10.5 14 4-8 4 8h-8z'/%3E%3Cpath fill='%23999' d='m10.5 16 4 8 4-8h-8z'/%3E%3C/svg%3E")}}@media (-ms-high-contrast:black-on-white){.mapboxgl-ctrl button.mapboxgl-ctrl-compass .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 29 29'%3E%3Cpath d='m10.5 14 4-8 4 8h-8z'/%3E%3Cpath fill='%23ccc' d='m10.5 16 4 8 4-8h-8z'/%3E%3C/svg%3E")}}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23333' viewBox='0 0 20 20'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle cx='10' cy='10' r='2'/%3E%3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate:disabled .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23aaa' viewBox='0 0 20 20'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle cx='10' cy='10' r='2'/%3E%3Cpath fill='red' d='m14 5 1 1-9 9-1-1 9-9z'/%3E%3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-active .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%2333b5e5' viewBox='0 0 20 20'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle cx='10' cy='10' r='2'/%3E%3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-active-error .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23e58978' viewBox='0 0 20 20'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle cx='10' cy='10' r='2'/%3E%3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-background .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%2333b5e5' viewBox='0 0 20 20'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-background-error .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23e54e33' viewBox='0 0 20 20'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-waiting .mapboxgl-ctrl-icon{-webkit-animation:mapboxgl-spin 2s linear infinite;-moz-animation:mapboxgl-spin 2s linear infinite;-o-animation:mapboxgl-spin 2s linear infinite;-ms-animation:mapboxgl-spin 2s linear infinite;animation:mapboxgl-spin 2s linear infinite}@media (-ms-high-contrast:active){.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 20 20'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle cx='10' cy='10' r='2'/%3E%3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate:disabled .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23999' viewBox='0 0 20 20'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle cx='10' cy='10' r='2'/%3E%3Cpath fill='red' d='m14 5 1 1-9 9-1-1 9-9z'/%3E%3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-active .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%2333b5e5' viewBox='0 0 20 20'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle cx='10' cy='10' r='2'/%3E%3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-active-error .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23e58978' viewBox='0 0 20 20'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle cx='10' cy='10' r='2'/%3E%3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-background .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%2333b5e5' viewBox='0 0 20 20'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-background-error .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23e54e33' viewBox='0 0 20 20'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3C/svg%3E")}}@media (-ms-high-contrast:black-on-white){.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle cx='10' cy='10' r='2'/%3E%3C/svg%3E")}.mapboxgl-ctrl button.mapboxgl-ctrl-geolocate:disabled .mapboxgl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23666' viewBox='0 0 20 20'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle cx='10' cy='10' r='2'/%3E%3Cpath fill='red' d='m14 5 1 1-9 9-1-1 9-9z'/%3E%3C/svg%3E")}}@-webkit-keyframes mapboxgl-spin{0%{-webkit-transform:rotate(0deg)}to{-webkit-transform:rotate(1turn)}}@-moz-keyframes mapboxgl-spin{0%{-moz-transform:rotate(0deg)}to{-moz-transform:rotate(1turn)}}@-o-keyframes mapboxgl-spin{0%{-o-transform:rotate(0deg)}to{-o-transform:rotate(1turn)}}@-ms-keyframes mapboxgl-spin{0%{-ms-transform:rotate(0deg)}to{-ms-transform:rotate(1turn)}}@keyframes mapboxgl-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}a.mapboxgl-ctrl-logo{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' fill-rule='evenodd' viewBox='0 0 88 23'%3E%3Cdefs%3E%3Cpath id='prefix__a' d='M11.5 2.25c5.105 0 9.25 4.145 9.25 9.25s-4.145 9.25-9.25 9.25-9.25-4.145-9.25-9.25 4.145-9.25 9.25-9.25zM6.997 15.983c-.051-.338-.828-5.802 2.233-8.873a4.395 4.395 0 0 1 3.13-1.28c1.27 0 2.49.51 3.39 1.42.91.9 1.42 2.12 1.42 3.39 0 1.18-.449 2.301-1.28 3.13C12.72 16.93 7 16 7 16l-.003-.017zM15.3 10.5l-2 .8-.8 2-.8-2-2-.8 2-.8.8-2 .8 2 2 .8z'/%3E%3Cpath id='prefix__b' d='M50.63 8c.13 0 .23.1.23.23V9c.7-.76 1.7-1.18 2.73-1.18 2.17 0 3.95 1.85 3.95 4.17s-1.77 4.19-3.94 4.19c-1.04 0-2.03-.43-2.74-1.18v3.77c0 .13-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V8.23c0-.12.1-.23.23-.23h1.4zm-3.86.01c.01 0 .01 0 .01-.01.13 0 .22.1.22.22v7.55c0 .12-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V15c-.7.76-1.69 1.19-2.73 1.19-2.17 0-3.94-1.87-3.94-4.19 0-2.32 1.77-4.19 3.94-4.19 1.03 0 2.02.43 2.73 1.18v-.75c0-.12.1-.23.23-.23h1.4zm26.375-.19a4.24 4.24 0 0 0-4.16 3.29c-.13.59-.13 1.19 0 1.77a4.233 4.233 0 0 0 4.17 3.3c2.35 0 4.26-1.87 4.26-4.19 0-2.32-1.9-4.17-4.27-4.17zM60.63 5c.13 0 .23.1.23.23v3.76c.7-.76 1.7-1.18 2.73-1.18 1.88 0 3.45 1.4 3.84 3.28.13.59.13 1.2 0 1.8-.39 1.88-1.96 3.29-3.84 3.29-1.03 0-2.02-.43-2.73-1.18v.77c0 .12-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V5.23c0-.12.1-.23.23-.23h1.4zm-34 11h-1.4c-.13 0-.23-.11-.23-.23V8.22c.01-.13.1-.22.23-.22h1.4c.13 0 .22.11.23.22v.68c.5-.68 1.3-1.09 2.16-1.1h.03c1.09 0 2.09.6 2.6 1.55.45-.95 1.4-1.55 2.44-1.56 1.62 0 2.93 1.25 2.9 2.78l.03 5.2c0 .13-.1.23-.23.23h-1.41c-.13 0-.23-.11-.23-.23v-4.59c0-.98-.74-1.71-1.62-1.71-.8 0-1.46.7-1.59 1.62l.01 4.68c0 .13-.11.23-.23.23h-1.41c-.13 0-.23-.11-.23-.23v-4.59c0-.98-.74-1.71-1.62-1.71-.85 0-1.54.79-1.6 1.8v4.5c0 .13-.1.23-.23.23zm53.615 0h-1.61c-.04 0-.08-.01-.12-.03-.09-.06-.13-.19-.06-.28l2.43-3.71-2.39-3.65a.213.213 0 0 1-.03-.12c0-.12.09-.21.21-.21h1.61c.13 0 .24.06.3.17l1.41 2.37 1.4-2.37a.34.34 0 0 1 .3-.17h1.6c.04 0 .08.01.12.03.09.06.13.19.06.28l-2.37 3.65 2.43 3.7c0 .05.01.09.01.13 0 .12-.09.21-.21.21h-1.61c-.13 0-.24-.06-.3-.17l-1.44-2.42-1.44 2.42a.34.34 0 0 1-.3.17zm-7.12-1.49c-1.33 0-2.42-1.12-2.42-2.51 0-1.39 1.08-2.52 2.42-2.52 1.33 0 2.42 1.12 2.42 2.51 0 1.39-1.08 2.51-2.42 2.52zm-19.865 0c-1.32 0-2.39-1.11-2.42-2.48v-.07c.02-1.38 1.09-2.49 2.4-2.49 1.32 0 2.41 1.12 2.41 2.51 0 1.39-1.07 2.52-2.39 2.53zm-8.11-2.48c-.01 1.37-1.09 2.47-2.41 2.47s-2.42-1.12-2.42-2.51c0-1.39 1.08-2.52 2.4-2.52 1.33 0 2.39 1.11 2.41 2.48l.02.08zm18.12 2.47c-1.32 0-2.39-1.11-2.41-2.48v-.06c.02-1.38 1.09-2.48 2.41-2.48s2.42 1.12 2.42 2.51c0 1.39-1.09 2.51-2.42 2.51z'/%3E%3C/defs%3E%3Cmask id='prefix__c'%3E%3Crect width='100%25' height='100%25' fill='%23fff'/%3E%3Cuse xlink:href='%23prefix__a'/%3E%3Cuse xlink:href='%23prefix__b'/%3E%3C/mask%3E%3Cg stroke='%23000' stroke-width='3' opacity='.3'%3E%3Ccircle cx='11.5' cy='11.5' r='9.25' mask='url(%23prefix__c)'/%3E%3Cuse mask='url(%23prefix__c)' xlink:href='%23prefix__b'/%3E%3C/g%3E%3Cg fill='%23fff' opacity='.9'%3E%3Cuse xlink:href='%23prefix__a'/%3E%3Cuse xlink:href='%23prefix__b'/%3E%3C/g%3E%3C/svg%3E");background-repeat:no-repeat;cursor:pointer;display:block;height:23px;margin:0 0 -4px -4px;overflow:hidden;width:88px}a.mapboxgl-ctrl-logo.mapboxgl-compact{width:23px}@media (-ms-high-contrast:active){a.mapboxgl-ctrl-logo{background-color:transparent;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' fill-rule='evenodd' viewBox='0 0 88 23'%3E%3Cdefs%3E%3Cpath id='prefix__a' d='M11.5 2.25c5.105 0 9.25 4.145 9.25 9.25s-4.145 9.25-9.25 9.25-9.25-4.145-9.25-9.25 4.145-9.25 9.25-9.25zM6.997 15.983c-.051-.338-.828-5.802 2.233-8.873a4.395 4.395 0 0 1 3.13-1.28c1.27 0 2.49.51 3.39 1.42.91.9 1.42 2.12 1.42 3.39 0 1.18-.449 2.301-1.28 3.13C12.72 16.93 7 16 7 16l-.003-.017zM15.3 10.5l-2 .8-.8 2-.8-2-2-.8 2-.8.8-2 .8 2 2 .8z'/%3E%3Cpath id='prefix__b' d='M50.63 8c.13 0 .23.1.23.23V9c.7-.76 1.7-1.18 2.73-1.18 2.17 0 3.95 1.85 3.95 4.17s-1.77 4.19-3.94 4.19c-1.04 0-2.03-.43-2.74-1.18v3.77c0 .13-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V8.23c0-.12.1-.23.23-.23h1.4zm-3.86.01c.01 0 .01 0 .01-.01.13 0 .22.1.22.22v7.55c0 .12-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V15c-.7.76-1.69 1.19-2.73 1.19-2.17 0-3.94-1.87-3.94-4.19 0-2.32 1.77-4.19 3.94-4.19 1.03 0 2.02.43 2.73 1.18v-.75c0-.12.1-.23.23-.23h1.4zm26.375-.19a4.24 4.24 0 0 0-4.16 3.29c-.13.59-.13 1.19 0 1.77a4.233 4.233 0 0 0 4.17 3.3c2.35 0 4.26-1.87 4.26-4.19 0-2.32-1.9-4.17-4.27-4.17zM60.63 5c.13 0 .23.1.23.23v3.76c.7-.76 1.7-1.18 2.73-1.18 1.88 0 3.45 1.4 3.84 3.28.13.59.13 1.2 0 1.8-.39 1.88-1.96 3.29-3.84 3.29-1.03 0-2.02-.43-2.73-1.18v.77c0 .12-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V5.23c0-.12.1-.23.23-.23h1.4zm-34 11h-1.4c-.13 0-.23-.11-.23-.23V8.22c.01-.13.1-.22.23-.22h1.4c.13 0 .22.11.23.22v.68c.5-.68 1.3-1.09 2.16-1.1h.03c1.09 0 2.09.6 2.6 1.55.45-.95 1.4-1.55 2.44-1.56 1.62 0 2.93 1.25 2.9 2.78l.03 5.2c0 .13-.1.23-.23.23h-1.41c-.13 0-.23-.11-.23-.23v-4.59c0-.98-.74-1.71-1.62-1.71-.8 0-1.46.7-1.59 1.62l.01 4.68c0 .13-.11.23-.23.23h-1.41c-.13 0-.23-.11-.23-.23v-4.59c0-.98-.74-1.71-1.62-1.71-.85 0-1.54.79-1.6 1.8v4.5c0 .13-.1.23-.23.23zm53.615 0h-1.61c-.04 0-.08-.01-.12-.03-.09-.06-.13-.19-.06-.28l2.43-3.71-2.39-3.65a.213.213 0 0 1-.03-.12c0-.12.09-.21.21-.21h1.61c.13 0 .24.06.3.17l1.41 2.37 1.4-2.37a.34.34 0 0 1 .3-.17h1.6c.04 0 .08.01.12.03.09.06.13.19.06.28l-2.37 3.65 2.43 3.7c0 .05.01.09.01.13 0 .12-.09.21-.21.21h-1.61c-.13 0-.24-.06-.3-.17l-1.44-2.42-1.44 2.42a.34.34 0 0 1-.3.17zm-7.12-1.49c-1.33 0-2.42-1.12-2.42-2.51 0-1.39 1.08-2.52 2.42-2.52 1.33 0 2.42 1.12 2.42 2.51 0 1.39-1.08 2.51-2.42 2.52zm-19.865 0c-1.32 0-2.39-1.11-2.42-2.48v-.07c.02-1.38 1.09-2.49 2.4-2.49 1.32 0 2.41 1.12 2.41 2.51 0 1.39-1.07 2.52-2.39 2.53zm-8.11-2.48c-.01 1.37-1.09 2.47-2.41 2.47s-2.42-1.12-2.42-2.51c0-1.39 1.08-2.52 2.4-2.52 1.33 0 2.39 1.11 2.41 2.48l.02.08zm18.12 2.47c-1.32 0-2.39-1.11-2.41-2.48v-.06c.02-1.38 1.09-2.48 2.41-2.48s2.42 1.12 2.42 2.51c0 1.39-1.09 2.51-2.42 2.51z'/%3E%3C/defs%3E%3Cmask id='prefix__c'%3E%3Crect width='100%25' height='100%25' fill='%23fff'/%3E%3Cuse xlink:href='%23prefix__a'/%3E%3Cuse xlink:href='%23prefix__b'/%3E%3C/mask%3E%3Cg stroke='%23000' stroke-width='3'%3E%3Ccircle cx='11.5' cy='11.5' r='9.25' mask='url(%23prefix__c)'/%3E%3Cuse mask='url(%23prefix__c)' xlink:href='%23prefix__b'/%3E%3C/g%3E%3Cg fill='%23fff'%3E%3Cuse xlink:href='%23prefix__a'/%3E%3Cuse xlink:href='%23prefix__b'/%3E%3C/g%3E%3C/svg%3E")}}@media (-ms-high-contrast:black-on-white){a.mapboxgl-ctrl-logo{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' fill-rule='evenodd' viewBox='0 0 88 23'%3E%3Cdefs%3E%3Cpath id='prefix__a' d='M11.5 2.25c5.105 0 9.25 4.145 9.25 9.25s-4.145 9.25-9.25 9.25-9.25-4.145-9.25-9.25 4.145-9.25 9.25-9.25zM6.997 15.983c-.051-.338-.828-5.802 2.233-8.873a4.395 4.395 0 0 1 3.13-1.28c1.27 0 2.49.51 3.39 1.42.91.9 1.42 2.12 1.42 3.39 0 1.18-.449 2.301-1.28 3.13C12.72 16.93 7 16 7 16l-.003-.017zM15.3 10.5l-2 .8-.8 2-.8-2-2-.8 2-.8.8-2 .8 2 2 .8z'/%3E%3Cpath id='prefix__b' d='M50.63 8c.13 0 .23.1.23.23V9c.7-.76 1.7-1.18 2.73-1.18 2.17 0 3.95 1.85 3.95 4.17s-1.77 4.19-3.94 4.19c-1.04 0-2.03-.43-2.74-1.18v3.77c0 .13-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V8.23c0-.12.1-.23.23-.23h1.4zm-3.86.01c.01 0 .01 0 .01-.01.13 0 .22.1.22.22v7.55c0 .12-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V15c-.7.76-1.69 1.19-2.73 1.19-2.17 0-3.94-1.87-3.94-4.19 0-2.32 1.77-4.19 3.94-4.19 1.03 0 2.02.43 2.73 1.18v-.75c0-.12.1-.23.23-.23h1.4zm26.375-.19a4.24 4.24 0 0 0-4.16 3.29c-.13.59-.13 1.19 0 1.77a4.233 4.233 0 0 0 4.17 3.3c2.35 0 4.26-1.87 4.26-4.19 0-2.32-1.9-4.17-4.27-4.17zM60.63 5c.13 0 .23.1.23.23v3.76c.7-.76 1.7-1.18 2.73-1.18 1.88 0 3.45 1.4 3.84 3.28.13.59.13 1.2 0 1.8-.39 1.88-1.96 3.29-3.84 3.29-1.03 0-2.02-.43-2.73-1.18v.77c0 .12-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V5.23c0-.12.1-.23.23-.23h1.4zm-34 11h-1.4c-.13 0-.23-.11-.23-.23V8.22c.01-.13.1-.22.23-.22h1.4c.13 0 .22.11.23.22v.68c.5-.68 1.3-1.09 2.16-1.1h.03c1.09 0 2.09.6 2.6 1.55.45-.95 1.4-1.55 2.44-1.56 1.62 0 2.93 1.25 2.9 2.78l.03 5.2c0 .13-.1.23-.23.23h-1.41c-.13 0-.23-.11-.23-.23v-4.59c0-.98-.74-1.71-1.62-1.71-.8 0-1.46.7-1.59 1.62l.01 4.68c0 .13-.11.23-.23.23h-1.41c-.13 0-.23-.11-.23-.23v-4.59c0-.98-.74-1.71-1.62-1.71-.85 0-1.54.79-1.6 1.8v4.5c0 .13-.1.23-.23.23zm53.615 0h-1.61c-.04 0-.08-.01-.12-.03-.09-.06-.13-.19-.06-.28l2.43-3.71-2.39-3.65a.213.213 0 0 1-.03-.12c0-.12.09-.21.21-.21h1.61c.13 0 .24.06.3.17l1.41 2.37 1.4-2.37a.34.34 0 0 1 .3-.17h1.6c.04 0 .08.01.12.03.09.06.13.19.06.28l-2.37 3.65 2.43 3.7c0 .05.01.09.01.13 0 .12-.09.21-.21.21h-1.61c-.13 0-.24-.06-.3-.17l-1.44-2.42-1.44 2.42a.34.34 0 0 1-.3.17zm-7.12-1.49c-1.33 0-2.42-1.12-2.42-2.51 0-1.39 1.08-2.52 2.42-2.52 1.33 0 2.42 1.12 2.42 2.51 0 1.39-1.08 2.51-2.42 2.52zm-19.865 0c-1.32 0-2.39-1.11-2.42-2.48v-.07c.02-1.38 1.09-2.49 2.4-2.49 1.32 0 2.41 1.12 2.41 2.51 0 1.39-1.07 2.52-2.39 2.53zm-8.11-2.48c-.01 1.37-1.09 2.47-2.41 2.47s-2.42-1.12-2.42-2.51c0-1.39 1.08-2.52 2.4-2.52 1.33 0 2.39 1.11 2.41 2.48l.02.08zm18.12 2.47c-1.32 0-2.39-1.11-2.41-2.48v-.06c.02-1.38 1.09-2.48 2.41-2.48s2.42 1.12 2.42 2.51c0 1.39-1.09 2.51-2.42 2.51z'/%3E%3C/defs%3E%3Cmask id='prefix__c'%3E%3Crect width='100%25' height='100%25' fill='%23fff'/%3E%3Cuse xlink:href='%23prefix__a'/%3E%3Cuse xlink:href='%23prefix__b'/%3E%3C/mask%3E%3Cg fill='%23fff' stroke='%23fff' stroke-width='3'%3E%3Ccircle cx='11.5' cy='11.5' r='9.25' mask='url(%23prefix__c)'/%3E%3Cuse mask='url(%23prefix__c)' xlink:href='%23prefix__b'/%3E%3C/g%3E%3Cuse xlink:href='%23prefix__a'/%3E%3Cuse xlink:href='%23prefix__b'/%3E%3C/svg%3E")}}.mapboxgl-ctrl.mapboxgl-ctrl-attrib{background-color:hsla(0,0%,100%,.5);margin:0;padding:0 5px}@media screen{.mapboxgl-ctrl-attrib.mapboxgl-compact{background-color:#fff;border-radius:12px;margin:10px;min-height:20px;padding:2px 24px 2px 0;position:relative}.mapboxgl-ctrl-attrib.mapboxgl-compact-show{padding:2px 28px 2px 8px;visibility:visible}.mapboxgl-ctrl-bottom-left>.mapboxgl-ctrl-attrib.mapboxgl-compact-show,.mapboxgl-ctrl-top-left>.mapboxgl-ctrl-attrib.mapboxgl-compact-show{border-radius:12px;padding:2px 8px 2px 28px}.mapboxgl-ctrl-attrib.mapboxgl-compact .mapboxgl-ctrl-attrib-inner{display:none}.mapboxgl-ctrl-attrib-button{background-color:hsla(0,0%,100%,.5);background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill-rule='evenodd' viewBox='0 0 20 20'%3E%3Cpath d='M4 10a6 6 0 1 0 12 0 6 6 0 1 0-12 0m5-3a1 1 0 1 0 2 0 1 1 0 1 0-2 0m0 3a1 1 0 1 1 2 0v3a1 1 0 1 1-2 0'/%3E%3C/svg%3E");border:0;border-radius:12px;box-sizing:border-box;cursor:pointer;display:none;height:24px;outline:none;position:absolute;right:0;top:0;width:24px}.mapboxgl-ctrl-bottom-left .mapboxgl-ctrl-attrib-button,.mapboxgl-ctrl-top-left .mapboxgl-ctrl-attrib-button{left:0}.mapboxgl-ctrl-attrib.mapboxgl-compact-show .mapboxgl-ctrl-attrib-inner,.mapboxgl-ctrl-attrib.mapboxgl-compact .mapboxgl-ctrl-attrib-button{display:block}.mapboxgl-ctrl-attrib.mapboxgl-compact-show .mapboxgl-ctrl-attrib-button{background-color:rgba(0,0,0,.05)}.mapboxgl-ctrl-bottom-right>.mapboxgl-ctrl-attrib.mapboxgl-compact:after{bottom:0;right:0}.mapboxgl-ctrl-top-right>.mapboxgl-ctrl-attrib.mapboxgl-compact:after{right:0;top:0}.mapboxgl-ctrl-top-left>.mapboxgl-ctrl-attrib.mapboxgl-compact:after{left:0;top:0}.mapboxgl-ctrl-bottom-left>.mapboxgl-ctrl-attrib.mapboxgl-compact:after{bottom:0;left:0}}@media screen and (-ms-high-contrast:active){.mapboxgl-ctrl-attrib.mapboxgl-compact:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' fill-rule='evenodd' viewBox='0 0 20 20'%3E%3Cpath d='M4 10a6 6 0 1 0 12 0 6 6 0 1 0-12 0m5-3a1 1 0 1 0 2 0 1 1 0 1 0-2 0m0 3a1 1 0 1 1 2 0v3a1 1 0 1 1-2 0'/%3E%3C/svg%3E")}}@media screen and (-ms-high-contrast:black-on-white){.mapboxgl-ctrl-attrib.mapboxgl-compact:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill-rule='evenodd' viewBox='0 0 20 20'%3E%3Cpath d='M4 10a6 6 0 1 0 12 0 6 6 0 1 0-12 0m5-3a1 1 0 1 0 2 0 1 1 0 1 0-2 0m0 3a1 1 0 1 1 2 0v3a1 1 0 1 1-2 0'/%3E%3C/svg%3E")}}.mapboxgl-ctrl-attrib a{color:rgba(0,0,0,.75);text-decoration:none}.mapboxgl-ctrl-attrib a:hover{color:inherit;text-decoration:underline}.mapboxgl-ctrl-attrib .mapbox-improve-map{font-weight:700;margin-left:2px}.mapboxgl-attrib-empty{display:none}.mapboxgl-ctrl-scale{background-color:hsla(0,0%,100%,.75);border:2px solid #333;border-top:#333;box-sizing:border-box;color:#333;font-size:10px;padding:0 5px}.mapboxgl-popup{display:-webkit-flex;display:flex;left:0;pointer-events:none;position:absolute;top:0;will-change:transform}.mapboxgl-popup-anchor-top,.mapboxgl-popup-anchor-top-left,.mapboxgl-popup-anchor-top-right{-webkit-flex-direction:column;flex-direction:column}.mapboxgl-popup-anchor-bottom,.mapboxgl-popup-anchor-bottom-left,.mapboxgl-popup-anchor-bottom-right{-webkit-flex-direction:column-reverse;flex-direction:column-reverse}.mapboxgl-popup-anchor-left{-webkit-flex-direction:row;flex-direction:row}.mapboxgl-popup-anchor-right{-webkit-flex-direction:row-reverse;flex-direction:row-reverse}.mapboxgl-popup-tip{border:10px solid transparent;height:0;width:0;z-index:1}.mapboxgl-popup-anchor-top .mapboxgl-popup-tip{-webkit-align-self:center;align-self:center;border-bottom-color:#fff;border-top:none}.mapboxgl-popup-anchor-top-left .mapboxgl-popup-tip{-webkit-align-self:flex-start;align-self:flex-start;border-bottom-color:#fff;border-left:none;border-top:none}.mapboxgl-popup-anchor-top-right .mapboxgl-popup-tip{-webkit-align-self:flex-end;align-self:flex-end;border-bottom-color:#fff;border-right:none;border-top:none}.mapboxgl-popup-anchor-bottom .mapboxgl-popup-tip{-webkit-align-self:center;align-self:center;border-bottom:none;border-top-color:#fff}.mapboxgl-popup-anchor-bottom-left .mapboxgl-popup-tip{-webkit-align-self:flex-start;align-self:flex-start;border-bottom:none;border-left:none;border-top-color:#fff}.mapboxgl-popup-anchor-bottom-right .mapboxgl-popup-tip{-webkit-align-self:flex-end;align-self:flex-end;border-bottom:none;border-right:none;border-top-color:#fff}.mapboxgl-popup-anchor-left .mapboxgl-popup-tip{-webkit-align-self:center;align-self:center;border-left:none;border-right-color:#fff}.mapboxgl-popup-anchor-right .mapboxgl-popup-tip{-webkit-align-self:center;align-self:center;border-left-color:#fff;border-right:none}.mapboxgl-popup-close-button{background-color:transparent;border:0;border-radius:0 3px 0 0;cursor:pointer;position:absolute;right:0;top:0}.mapboxgl-popup-close-button:hover{background-color:rgba(0,0,0,.05)}.mapboxgl-popup-content{background:#fff;border-radius:3px;box-shadow:0 1px 2px rgba(0,0,0,.1);padding:10px 10px 15px;pointer-events:auto;position:relative}.mapboxgl-popup-anchor-top-left .mapboxgl-popup-content{border-top-left-radius:0}.mapboxgl-popup-anchor-top-right .mapboxgl-popup-content{border-top-right-radius:0}.mapboxgl-popup-anchor-bottom-left .mapboxgl-popup-content{border-bottom-left-radius:0}.mapboxgl-popup-anchor-bottom-right .mapboxgl-popup-content{border-bottom-right-radius:0}.mapboxgl-popup-track-pointer{display:none}.mapboxgl-popup-track-pointer *{pointer-events:none;user-select:none}.mapboxgl-map:hover .mapboxgl-popup-track-pointer{display:flex}.mapboxgl-map:active .mapboxgl-popup-track-pointer{display:none}.mapboxgl-marker{left:0;position:absolute;top:0;will-change:transform}.mapboxgl-user-location-dot,.mapboxgl-user-location-dot:before{background-color:#1da1f2;border-radius:50%;height:15px;width:15px}.mapboxgl-user-location-dot:before{-webkit-animation:mapboxgl-user-location-dot-pulse 2s infinite;-moz-animation:mapboxgl-user-location-dot-pulse 2s infinite;-ms-animation:mapboxgl-user-location-dot-pulse 2s infinite;animation:mapboxgl-user-location-dot-pulse 2s infinite;content:"";position:absolute}.mapboxgl-user-location-dot:after{border:2px solid #fff;border-radius:50%;box-shadow:0 0 3px rgba(0,0,0,.35);box-sizing:border-box;content:"";height:19px;left:-2px;position:absolute;top:-2px;width:19px}@-webkit-keyframes mapboxgl-user-location-dot-pulse{0%{opacity:1;-webkit-transform:scale(1)}70%{opacity:0;-webkit-transform:scale(3)}to{opacity:0;-webkit-transform:scale(1)}}@-ms-keyframes mapboxgl-user-location-dot-pulse{0%{opacity:1;-ms-transform:scale(1)}70%{opacity:0;-ms-transform:scale(3)}to{opacity:0;-ms-transform:scale(1)}}@keyframes mapboxgl-user-location-dot-pulse{0%{opacity:1;transform:scale(1)}70%{opacity:0;transform:scale(3)}to{opacity:0;transform:scale(1)}}.mapboxgl-user-location-dot-stale{background-color:#aaa}.mapboxgl-user-location-dot-stale:after{display:none}.mapboxgl-user-location-accuracy-circle{background-color:rgba(29,161,242,.2);border-radius:100%;height:1px;width:1px}.mapboxgl-crosshair,.mapboxgl-crosshair .mapboxgl-interactive,.mapboxgl-crosshair .mapboxgl-interactive:active{cursor:crosshair}.mapboxgl-boxzoom{background:#fff;border:2px dotted #202020;height:0;left:0;opacity:.5;position:absolute;top:0;width:0} -/*! uswds @version */.usa-collection,.usa-list,.usa-prose .usa-collection,.usa-prose>ol,.usa-prose>ul{line-height:1.5;margin-bottom:1em;margin-top:1em;padding-left:3ch}.usa-collection:last-child,.usa-list:last-child,.usa-prose>ol:last-child,.usa-prose>ul:last-child{margin-bottom:0}.usa-collection ol,.usa-collection ul,.usa-list ol,.usa-list ul,.usa-prose .usa-collection ol,.usa-prose .usa-collection ul,.usa-prose>ol ol,.usa-prose>ol ul,.usa-prose>ul ol,.usa-prose>ul ul{margin-top:.25em}.usa-collection__item,.usa-list li,.usa-prose .usa-collection__item,.usa-prose>ol li,.usa-prose>ul li{margin-bottom:.25em;max-width:68ex}.usa-collection__item:last-child,.usa-list li:last-child,.usa-prose>ol li:last-child,.usa-prose>ul li:last-child{margin-bottom:0}.usa-prose>table,.usa-table{border-collapse:collapse;border-spacing:0;color:#1b1b1b;font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.06rem;line-height:1.5;margin:1.25rem 0;text-align:left}.usa-prose>table thead th,.usa-table thead th{font-weight:700}.usa-prose>table thead td,.usa-prose>table thead th,.usa-table thead td,.usa-table thead th{background-color:#dfe1e2;color:#1b1b1b}.usa-prose>table td,.usa-prose>table th,.usa-table td,.usa-table th{background-color:#fff;border:1px solid #1b1b1b;font-weight:400;padding:.5rem 1rem;text-align:inherit}.usa-prose>table caption,.usa-table caption{font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1rem;font-weight:700;margin-bottom:.75rem;text-align:left}.usa-prose>.usa-table--borderless thead th,.usa-table--borderless thead th{background-color:transparent;border-top:0}.usa-prose>.usa-table--borderless td,.usa-prose>.usa-table--borderless th,.usa-table--borderless td,.usa-table--borderless th{border-left:0;border-right:0}.usa-prose>.usa-table--compact td,.usa-prose>.usa-table--compact th,.usa-table--compact td,.usa-table--compact th{padding:.25rem .75rem}.usa-table--striped tbody tr:nth-child(odd) td,.usa-table--striped tbody tr:nth-child(odd) th{background-color:#f0f0f0;color:#1b1b1b}.usa-prose>.width-mobile .usa-table--stacked thead,.width-mobile .usa-table--stacked thead{display:none}.usa-prose>.width-mobile .usa-table--stacked td,.usa-prose>.width-mobile .usa-table--stacked th,.width-mobile .usa-table--stacked td,.width-mobile .usa-table--stacked th{border-bottom-width:0;display:block;width:100%}.usa-prose>.width-mobile .usa-table--stacked tr,.width-mobile .usa-table--stacked tr{border-bottom:.25rem solid #1b1b1b;border-top-width:0;display:block;width:100%}.width-mobile .usa-table--stacked tr td:first-child,.width-mobile .usa-table--stacked tr th:first-child{border-top-width:0}.width-mobile .usa-table--stacked tr:nth-child(odd) td,.width-mobile .usa-table--stacked tr:nth-child(odd) th{background-color:inherit}.width-mobile .usa-table--stacked tr:first-child td:first-child,.width-mobile .usa-table--stacked tr:first-child th:first-child{border-top:.25rem solid #1b1b1b}.width-mobile .usa-table--stacked td[data-label],.width-mobile .usa-table--stacked th[data-label]{padding-bottom:.75rem}.width-mobile .usa-table--stacked td[data-label]:before,.width-mobile .usa-table--stacked th[data-label]:before{content:attr(data-label);display:block;font-weight:700;margin:-.5rem -1rem 0;padding:.75rem 1rem .25rem}.usa-prose>.width-mobile .usa-table--stacked-header thead,.width-mobile .usa-table--stacked-header thead{display:none}.usa-prose>.width-mobile .usa-table--stacked-header td,.usa-prose>.width-mobile .usa-table--stacked-header th,.width-mobile .usa-table--stacked-header td,.width-mobile .usa-table--stacked-header th{border-bottom-width:0;display:block;width:100%}.usa-prose>.width-mobile .usa-table--stacked-header tr,.width-mobile .usa-table--stacked-header tr{border-bottom:.25rem solid #1b1b1b;border-top-width:0;display:block;width:100%}.width-mobile .usa-table--stacked-header tr td:first-child,.width-mobile .usa-table--stacked-header tr th:first-child{border-top-width:0}.width-mobile .usa-table--stacked-header tr:nth-child(odd) td,.width-mobile .usa-table--stacked-header tr:nth-child(odd) th{background-color:inherit}.width-mobile .usa-table--stacked-header tr:first-child td:first-child,.width-mobile .usa-table--stacked-header tr:first-child th:first-child{border-top:.25rem solid #1b1b1b}.width-mobile .usa-table--stacked-header td[data-label],.width-mobile .usa-table--stacked-header th[data-label]{padding-bottom:.75rem}.width-mobile .usa-table--stacked-header td[data-label]:before,.width-mobile .usa-table--stacked-header th[data-label]:before{content:attr(data-label);display:block;font-weight:700;margin:-.5rem -1rem 0;padding:.75rem 1rem .25rem}.width-mobile .usa-table--stacked-header tr td:first-child,.width-mobile .usa-table--stacked-header tr th:first-child{background-color:#dfe1e2;color:#1b1b1b;font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.06rem;font-weight:700;line-height:1.1;padding:.75rem 1rem}.width-mobile .usa-table--stacked-header tr td:first-child:before,.width-mobile .usa-table--stacked-header tr th:first-child:before{display:none}.usa-prose>.usa-table-container--scrollable,.usa-table-container--scrollable{margin:1.25rem 0;overflow-y:hidden}.usa-table-container--scrollable .usa-table{margin:0}.usa-prose>.usa-table-container--scrollable td,.usa-prose>.usa-table-container--scrollable th,.usa-table-container--scrollable td,.usa-table-container--scrollable th{white-space:nowrap}/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{-webkit-text-size-adjust:100%;line-height:1.15}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}[hidden],template{display:none}@font-face{font-display:fallback;font-family:Roboto Mono Web;font-style:normal;font-weight:300;src:url(/justice40-tool/main/static/roboto-mono-v5-latin-300-316b1352cc4ab2054de67541c69539d9.woff2) format("woff2"),url(/justice40-tool/main/static/roboto-mono-v5-latin-300-92dd8f0ccfaebc33f817da19369100d8.woff) format("woff"),url(/justice40-tool/main/static/roboto-mono-v5-latin-300-ce3838471d62f8364e125cc74923e05b.ttf) format("truetype")}@font-face{font-display:fallback;font-family:Roboto Mono Web;font-style:normal;font-weight:400;src:url(/justice40-tool/main/static/roboto-mono-v5-latin-regular-f1dc10a756c2c544588b7408095ffed7.woff2) format("woff2"),url(/justice40-tool/main/static/roboto-mono-v5-latin-regular-a3246d29b40a8b0da142caea1bc84974.woff) format("woff"),url(/justice40-tool/main/static/roboto-mono-v5-latin-regular-215adb34128fcb20668b963ec7926ef2.ttf) format("truetype")}@font-face{font-display:fallback;font-family:Roboto Mono Web;font-style:normal;font-weight:700;src:url(/justice40-tool/main/static/roboto-mono-v5-latin-700-936869ba46988c2387481468c25686bc.woff2) format("woff2"),url(/justice40-tool/main/static/roboto-mono-v5-latin-700-d85b43c39f4620dfa5b47b16e842c8a9.woff) format("woff"),url(/justice40-tool/main/static/roboto-mono-v5-latin-700-e57caf7ea634a258a9b2e06137755ec6.ttf) format("truetype")}@font-face{font-display:fallback;font-family:Roboto Mono Web;font-style:italic;font-weight:300;src:url(/justice40-tool/main/static/roboto-mono-v5-latin-300italic-09cc62a8fbd32c8b28124eecc228bc36.woff2) format("woff2"),url(/justice40-tool/main/static/roboto-mono-v5-latin-300italic-1b8d46dae0a077f999ae901c213dcbd2.woff) format("woff"),url(/justice40-tool/main/static/roboto-mono-v5-latin-300italic-93511dbad22ceb584f036ab660a563ba.ttf) format("truetype")}@font-face{font-display:fallback;font-family:Roboto Mono Web;font-style:italic;font-weight:400;src:url(/justice40-tool/main/static/roboto-mono-v5-latin-italic-087069a9f454e2581ed6a7a84b142327.woff2) format("woff2"),url(/justice40-tool/main/static/roboto-mono-v5-latin-italic-756750acefdb77704c08c235510f6e4c.woff) format("woff"),url(/justice40-tool/main/static/roboto-mono-v5-latin-italic-4863add4d566a55b6a971780f0328e05.ttf) format("truetype")}@font-face{font-display:fallback;font-family:Roboto Mono Web;font-style:italic;font-weight:700;src:url(/justice40-tool/main/static/roboto-mono-v5-latin-700italic-5a8f743549cc6cef9a001f0c21d55e5b.woff2) format("woff2"),url(/justice40-tool/main/static/roboto-mono-v5-latin-700italic-0a6791447401e0ebd70d98b0e4ecc5ff.woff) format("woff"),url(/justice40-tool/main/static/roboto-mono-v5-latin-700italic-da78bf0b1b435f40ca198525361d3b84.ttf) format("truetype")}@font-face{font-display:fallback;font-family:Source Sans Pro Web;font-style:normal;font-weight:300;src:url(/justice40-tool/main/static/sourcesanspro-light-webfont-e5f1a42e1c2b97e2587641dea75c548f.woff2) format("woff2"),url(/justice40-tool/main/static/sourcesanspro-light-webfont-70e7d719e258c9a7e68b19236a49bcc4.woff) format("woff"),url(/justice40-tool/main/static/sourcesanspro-light-webfont-d6f73cf7210d3b5c2fa95f00e38396a2.ttf) format("truetype")}@font-face{font-display:fallback;font-family:Source Sans Pro Web;font-style:normal;font-weight:400;src:url(/justice40-tool/main/static/sourcesanspro-regular-webfont-e7bccfa631a0017f31da9e0c2fd2627b.woff2) format("woff2"),url(/justice40-tool/main/static/sourcesanspro-regular-webfont-c4e25ab10baa365dfc6620c04ea9202b.woff) format("woff"),url(/justice40-tool/main/static/sourcesanspro-regular-webfont-5acfe0d0f69444765ba489e2091c95cc.ttf) format("truetype")}@font-face{font-display:fallback;font-family:Source Sans Pro Web;font-style:normal;font-weight:700;src:url(/justice40-tool/main/static/sourcesanspro-bold-webfont-4a1efbe82eaa84ff89ed34a0bd374991.woff2) format("woff2"),url(/justice40-tool/main/static/sourcesanspro-bold-webfont-e7e051e1bc64fa89931760a52d0c8bd3.woff) format("woff"),url(/justice40-tool/main/static/sourcesanspro-bold-webfont-9a76932911f04be25044af15855ffeb2.ttf) format("truetype")}@font-face{font-display:fallback;font-family:Source Sans Pro Web;font-style:italic;font-weight:300;src:url(/justice40-tool/main/static/sourcesanspro-lightitalic-webfont-9c5bf2190b2471c2f22b96bb92249ecb.woff2) format("woff2"),url(/justice40-tool/main/static/sourcesanspro-lightitalic-webfont-455d120362f79aa219d465e39fc66e82.woff) format("woff"),url(/justice40-tool/main/static/sourcesanspro-lightitalic-webfont-43ea3d39e6aa59fb6f1b4f974dfdc76b.ttf) format("truetype")}@font-face{font-display:fallback;font-family:Source Sans Pro Web;font-style:italic;font-weight:400;src:url(/justice40-tool/main/static/sourcesanspro-italic-webfont-c6c9fd228e87eefaf1d4e4d8f439760b.woff2) format("woff2"),url(/justice40-tool/main/static/sourcesanspro-italic-webfont-0aaeabbaba38453310786c387d4a052a.woff) format("woff"),url(/justice40-tool/main/static/sourcesanspro-italic-webfont-3efee318468995ac04affb6a907a6b03.ttf) format("truetype")}@font-face{font-display:fallback;font-family:Source Sans Pro Web;font-style:italic;font-weight:700;src:url(/justice40-tool/main/static/sourcesanspro-bolditalic-webfont-ef69f0d737406260319a2c5ec73da3a8.woff2) format("woff2"),url(/justice40-tool/main/static/sourcesanspro-bolditalic-webfont-73021f1aabd43f50e16a6a0771c45689.woff) format("woff"),url(/justice40-tool/main/static/sourcesanspro-bolditalic-webfont-af3dd40e0ac8e2ca50ac3943d5d7014d.ttf) format("truetype")}@font-face{font-display:fallback;font-family:Merriweather Web;font-style:normal;font-weight:300;src:url(/justice40-tool/main/static/Latin-Merriweather-Light-f347d9834a5feacbcefb85461ac77e70.woff2) format("woff2"),url(/justice40-tool/main/static/Latin-Merriweather-Light-7b2a6350fcb212efe521caae9cf0d29b.woff) format("woff"),url(/justice40-tool/main/static/Latin-Merriweather-Light-30dd683b4fcfe95b030b8c07c3482121.ttf) format("truetype")}@font-face{font-display:fallback;font-family:Merriweather Web;font-style:normal;font-weight:400;src:url(/justice40-tool/main/static/Latin-Merriweather-Regular-a30c1b8fcb759e9fe728873f84044227.woff2) format("woff2"),url(/justice40-tool/main/static/Latin-Merriweather-Regular-add503b41601df15b97ed98d3ed46c95.woff) format("woff"),url(/justice40-tool/main/static/Latin-Merriweather-Regular-43dc3080728216519bf08e82557e1912.ttf) format("truetype")}@font-face{font-display:fallback;font-family:Merriweather Web;font-style:normal;font-weight:700;src:url(/justice40-tool/main/static/Latin-Merriweather-Bold-9caa42f21e4ae090b755f99d14c3a2fd.woff2) format("woff2"),url(/justice40-tool/main/static/Latin-Merriweather-Bold-b6cbc321678701d773c6f86934c55901.woff) format("woff"),url(/justice40-tool/main/static/Latin-Merriweather-Bold-b87366633b1019e8c63c28ce979a1d44.ttf) format("truetype")}@font-face{font-display:fallback;font-family:Merriweather Web;font-style:italic;font-weight:300;src:url(/justice40-tool/main/static/Latin-Merriweather-LightItalic-506121dad559538d44eda8fe540f9224.woff2) format("woff2"),url(/justice40-tool/main/static/Latin-Merriweather-LightItalic-8a239a410a47b6192e059fcf26556101.woff) format("woff"),url(/justice40-tool/main/static/Latin-Merriweather-LightItalic-26ebdd3b8f1d039bc3dd95691ce27164.ttf) format("truetype")}@font-face{font-display:fallback;font-family:Merriweather Web;font-style:italic;font-weight:400;src:url(/justice40-tool/main/static/Latin-Merriweather-Italic-c63d4066b0f133fc519f0504abf6ac55.woff2) format("woff2"),url(/justice40-tool/main/static/Latin-Merriweather-Italic-80d8a9aff0d8bdeb966d443e9cfaa19d.woff) format("woff"),url(/justice40-tool/main/static/Latin-Merriweather-Italic-b60043e65fa5cbcedb809c19a4cdd4d6.ttf) format("truetype")}@font-face{font-display:fallback;font-family:Merriweather Web;font-style:italic;font-weight:700;src:url(/justice40-tool/main/static/Latin-Merriweather-BoldItalic-dc8b76b44a8a6e5fad1c8c46568a5951.woff2) format("woff2"),url(/justice40-tool/main/static/Latin-Merriweather-BoldItalic-a0bcf832ed51501c237c07d8909087e6.woff) format("woff"),url(/justice40-tool/main/static/Latin-Merriweather-BoldItalic-4d74f3bda45f5aba1abf8d2a12313b56.ttf) format("truetype")}.usa-focus,[contentEditable=true]:focus,[href]:focus,[tabindex]:focus,button:not([disabled]):focus,iframe:focus,input:not([disabled]):focus,select:not([disabled]):focus,textarea:not([disabled]):focus{outline:.25rem solid #2491ff;outline-offset:0}html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}html{-webkit-font-feature-settings:"kern" 1;font-feature-settings:"kern" 1;font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-kerning:normal;font-size:100%}address,cite,dfn,var{font-style:normal}/*! uswds @version */body{background-color:#fff;color:#1b1b1b;overflow-x:hidden}.usa-sr-only{left:-999em;position:absolute;right:auto}.usa-button{-webkit-appearance:none;appearance:none;background-color:#005ea2;border:0;border-radius:.25rem;color:#fff;cursor:pointer;display:inline-block;font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.06rem;font-weight:700;line-height:.9;margin-right:.5rem;padding:.75rem 1.25rem;text-align:center;text-decoration:none;width:100%}@media (min-width:30em){.usa-button{width:auto}}.usa-button:visited{color:#fff}.usa-button.usa-button--hover,.usa-button:hover{background-color:#1a4480;border-bottom:0;color:#fff;text-decoration:none}.usa-button.usa-button--active,.usa-button:active{background-color:#162e51;color:#fff}.usa-button:not([disabled]).usa-focus,.usa-button:not([disabled]):focus{outline-offset:.25rem}.usa-button:disabled{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;background-color:#c9c9c9;color:#fff;pointer-events:none}.usa-button:disabled.usa-button--active,.usa-button:disabled.usa-button--hover,.usa-button:disabled.usa-focus,.usa-button:disabled:active,.usa-button:disabled:focus,.usa-button:disabled:hover{background-color:#c9c9c9;border:0;box-shadow:none}.usa-button--accent-cool,.usa-button--accent-cool:visited{background-color:#00bde3;color:#1b1b1b}.usa-button--accent-cool.usa-button--hover,.usa-button--accent-cool:hover{background-color:#28a0cb;color:#1b1b1b}.usa-button--accent-cool.usa-button--active,.usa-button--accent-cool:active{background-color:#07648d;color:#fff}.usa-button--accent-warm,.usa-button--accent-warm:visited{background-color:#fa9441;color:#1b1b1b}.usa-button--accent-warm.usa-button--hover,.usa-button--accent-warm:hover{background-color:#c05600;color:#fff}.usa-button--accent-warm.usa-button--active,.usa-button--accent-warm:active{background-color:#775540;color:#fff}.usa-button--outline{background-color:transparent;box-shadow:inset 0 0 0 2px #005ea2;color:#005ea2}.usa-button--outline:visited{color:#005ea2}.usa-button--outline.usa-button--hover,.usa-button--outline:hover{background-color:transparent;box-shadow:inset 0 0 0 2px #1a4480;color:#1a4480}.usa-button--outline.usa-button--active,.usa-button--outline:active{background-color:transparent;box-shadow:inset 0 0 0 2px #162e51;color:#162e51}.usa-button--outline.usa-button--inverse{box-shadow:inset 0 0 0 2px #dfe1e2;color:#dfe1e2}.usa-button--outline.usa-button--inverse:visited{color:#dfe1e2}.usa-button--outline.usa-button--inverse.usa-button--hover,.usa-button--outline.usa-button--inverse:hover{box-shadow:inset 0 0 0 2px #f0f0f0;color:#f0f0f0}.usa-button--outline.usa-button--inverse.usa-button--active,.usa-button--outline.usa-button--inverse:active{background-color:transparent;box-shadow:inset 0 0 0 2px #fff;color:#fff}.usa-button--outline.usa-button--inverse.usa-button--unstyled{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:subpixel-antialiased;background-color:transparent;border:0;border-radius:0;box-shadow:none;color:#005ea2;color:#dfe1e2;font-weight:400;margin:0;padding:0;text-align:left;text-decoration:underline}.usa-button--outline.usa-button--inverse.usa-button--unstyled:visited{color:#54278f}.usa-button--outline.usa-button--inverse.usa-button--unstyled:hover{color:#1a4480}.usa-button--outline.usa-button--inverse.usa-button--unstyled:active{color:#162e51}.usa-button--outline.usa-button--inverse.usa-button--unstyled:focus{outline:.25rem solid #2491ff;outline-offset:0}.usa-button--outline.usa-button--inverse.usa-button--unstyled:active,.usa-button--outline.usa-button--inverse.usa-button--unstyled:hover{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:subpixel-antialiased;background-color:transparent;box-shadow:none;text-decoration:underline}.usa-button--outline.usa-button--inverse.usa-button--unstyled:visited{color:#dfe1e2}.usa-button--outline.usa-button--inverse.usa-button--unstyled.usa-button--hover,.usa-button--outline.usa-button--inverse.usa-button--unstyled:hover{color:#f0f0f0}.usa-button--outline.usa-button--inverse.usa-button--unstyled.usa-button--active,.usa-button--outline.usa-button--inverse.usa-button--unstyled:active{color:#fff}.usa-button--base{background-color:#71767a;color:#fff}.usa-button--base.usa-button--hover,.usa-button--base:hover{background-color:#565c65;color:#fff}.usa-button--base.usa-button--active,.usa-button--base:active{background-color:#3d4551;color:#fff}.usa-button--secondary{background-color:#d83933;color:#fff}.usa-button--secondary.usa-button--hover,.usa-button--secondary:hover{background-color:#b50909;color:#fff}.usa-button--secondary.usa-button--active,.usa-button--secondary:active{background-color:#8b0a03;color:#fff}.usa-button--big{border-radius:.25rem;font-size:1.46rem;padding:1rem 1.5rem}.usa-button--disabled{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;background-color:#c9c9c9;color:#fff;pointer-events:none}.usa-button--disabled.usa-button--active,.usa-button--disabled.usa-button--hover,.usa-button--disabled.usa-focus,.usa-button--disabled:active,.usa-button--disabled:focus,.usa-button--disabled:hover{background-color:#c9c9c9;border:0;box-shadow:none}.usa-button--outline-disabled,.usa-button--outline-inverse-disabled,.usa-button--outline-inverse:disabled,.usa-button--outline:disabled{background-color:transparent;pointer-events:none}.usa-button--outline-disabled.usa-button--active,.usa-button--outline-disabled.usa-button--hover,.usa-button--outline-disabled.usa-focus,.usa-button--outline-disabled:active,.usa-button--outline-disabled:focus,.usa-button--outline-disabled:hover,.usa-button--outline-inverse-disabled.usa-button--active,.usa-button--outline-inverse-disabled.usa-button--hover,.usa-button--outline-inverse-disabled.usa-focus,.usa-button--outline-inverse-disabled:active,.usa-button--outline-inverse-disabled:focus,.usa-button--outline-inverse-disabled:hover,.usa-button--outline-inverse:disabled.usa-button--active,.usa-button--outline-inverse:disabled.usa-button--hover,.usa-button--outline-inverse:disabled.usa-focus,.usa-button--outline-inverse:disabled:active,.usa-button--outline-inverse:disabled:focus,.usa-button--outline-inverse:disabled:hover,.usa-button--outline:disabled.usa-button--active,.usa-button--outline:disabled.usa-button--hover,.usa-button--outline:disabled.usa-focus,.usa-button--outline:disabled:active,.usa-button--outline:disabled:focus,.usa-button--outline:disabled:hover{background-color:transparent;border:0}.usa-button--outline-disabled,.usa-button--outline:disabled{box-shadow:inset 0 0 0 2px #c9c9c9;color:#c9c9c9}.usa-button--outline-disabled.usa-button--inverse,.usa-button--outline:disabled.usa-button--inverse{background-color:transparent;box-shadow:inset 0 0 0 2px #71767a;color:#71767a}.usa-button--unstyled{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:subpixel-antialiased;background-color:transparent;border:0;border-radius:0;box-shadow:none;color:#005ea2;font-weight:400;margin:0;padding:0;text-align:left;text-decoration:underline}.usa-button--unstyled:visited{color:#54278f}.usa-button--unstyled:hover{color:#1a4480}.usa-button--unstyled:active{color:#162e51}.usa-button--unstyled:focus{outline:.25rem solid #2491ff;outline-offset:0}.usa-button--unstyled:active,.usa-button--unstyled:hover{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:subpixel-antialiased;background-color:transparent;box-shadow:none;text-decoration:underline}.usa-embed-container embed,.usa-embed-container iframe,.usa-embed-container object{height:100%;left:0;position:absolute;top:0;width:100%}.usa-embed-container{height:0;max-width:100%;overflow:hidden;padding-bottom:56.25%;position:relative}img{max-width:100%}.usa-media-link{display:inline-block;line-height:0}.usa-combo-box__input,.usa-combo-box__list,.usa-fieldset,.usa-hint,.usa-input,.usa-range,.usa-select,.usa-textarea{font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.06rem;line-height:1.3}.usa-combo-box__input,.usa-input,.usa-range,.usa-select,.usa-textarea{-webkit-appearance:none;appearance:none;border:1px solid #565c65;border-radius:0;color:#1b1b1b;display:block;height:2.5rem;margin-top:.5rem;max-width:30rem;padding:.5rem;width:100%}.usa-input--success.usa-combo-box__input,.usa-input--success.usa-input,.usa-input--success.usa-range,.usa-input--success.usa-select,.usa-input--success.usa-textarea{border:.25rem solid #00a91c}.usa-fieldset{border:none;margin:0;padding:0}.usa-form-group--error{border-left:.25rem solid #b50909;margin-top:2rem;padding-left:1rem;position:relative}@media (min-width:64em){.usa-form-group--error{margin-left:-1.25rem}}.usa-error-message{color:#b50909;display:block;font-weight:700;padding-bottom:.25rem;padding-top:.25rem}.usa-hint{color:#71767a}.usa-label,.usa-legend{display:block;font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.06rem;font-weight:400;line-height:1.3;margin-top:1.5rem;max-width:30rem}.usa-label--error{font-weight:700;margin-top:0}.usa-hint--required,.usa-label--required{color:#b50909}.usa-legend--large{font-size:2.13rem;font-weight:700;margin-top:1rem}abbr[title=required]{text-decoration:none}.usa-input-list{list-style-type:none;margin-bottom:0;margin-top:0;padding-left:0}.usa-input-list li{line-height:1.3}.usa-prose .usa-input-list{list-style-type:none;margin-bottom:0;margin-top:0;padding-left:0}.usa-prose .usa-input-list li{line-height:1.3}.usa-checkbox__input,.usa-radio__input{left:-999em;position:absolute;right:auto}.lt-ie9 .usa-checkbox__input,.lt-ie9 .usa-radio__input{border:0;float:left;margin:.25rem .25rem 0 0;position:static;width:auto}.usa-checkbox__label,.usa-radio__label{cursor:pointer;display:inherit;font-weight:400;margin-top:.75rem;padding-left:2rem;position:relative;text-indent:-2rem}.usa-checkbox__label:before,.usa-radio__label:before{background:#fff;content:" ";display:inline-block;left:2px;position:relative;vertical-align:middle\0 }.usa-checkbox__label:before{border-radius:2px;height:1.25rem;width:1.25rem}.usa-radio__label:before{border-radius:99rem;height:1.25rem;width:1.25rem}.usa-checkbox__label:before,.usa-radio__label:before{box-shadow:0 0 0 2px #71767a;line-height:1.25rem;margin-right:.75rem;text-indent:0}.usa-checkbox__input:checked+.usa-checkbox__label:before,.usa-radio__input:checked+.usa-radio__label:before{background-color:#005ea2;box-shadow:0 0 0 2px #005ea2}.usa-radio__input:checked+.usa-radio__label:before{box-shadow:0 0 0 2px #005ea2,inset 0 0 0 2px #fff}@media print{.usa-radio__input:checked+.usa-radio__label:before{box-shadow:inset 0 0 0 2px #fff,inset 0 0 0 1rem #005ea2,0 0 0 2px #005ea2}}.usa-checkbox__input:checked+.usa-checkbox__label:before,.usa-checkbox__input:checked:disabled+.usa-checkbox__label:before{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2NSA1MCI+PHBhdGggZmlsbD0iI0ZGRiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJtNjMuMjY4IDcuMDYzLTUuNjE2LTUuNjFDNTYuODgyLjY4NSA1NS45NDYuMyA1NC44NDUuM3MtMi4wMzguMzg1LTIuODA4IDEuMTU1TDI0Ljk1MSAyOC41NTIgMTIuODEgMTYuMzg1Yy0uNzctLjc3LTEuNzA3LTEuMTU1LTIuODA4LTEuMTU1LTEuMSAwLTIuMDM3LjM4NS0yLjgwNyAxLjE1NGwtNS42MTYgNS42MUMuODEgMjIuNzY0LjQyNSAyMy43LjQyNSAyNC44cy4zODUgMi4wMzUgMS4xNTUgMi44MDVsMTQuOTQ3IDE0LjkzIDUuNjE2IDUuNjFjLjc3Ljc3IDEuNzA2IDEuMTU0IDIuODA3IDEuMTU0czIuMDM4LS4zODQgMi44MDgtMS4xNTRsNS42MTYtNS42MSAyOS44OTQtMjkuODZjLjc3LS43NyAxLjE1Ny0xLjcwNyAxLjE1Ny0yLjgwNSAwLTEuMTAxLS4zODUtMi4wMzYtMS4xNTYtMi44MDVsLS4wMDEtLjAwMnoiLz48L3N2Zz4=),linear-gradient(transparent,transparent);background-position:50%;background-repeat:no-repeat;background-size:.75rem auto}@media print{.usa-checkbox__input:checked+.usa-checkbox__label:before,.usa-checkbox__input:checked:disabled+.usa-checkbox__label:before{background-color:#fff;background-image:none;content:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMCAxMSI+PHBhdGggZmlsbD0iIzE3MTcxNyIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMTUuNzgzIDEuMjQyIDE0LjczLjIxMkEuNzI1LjcyNSAwIDAgMCAxNC4yMDQgMGEuNzI1LjcyNSAwIDAgMC0uNTI3LjIxMkw4LjYgNS4xODkgNi4zMjIgMi45NTVhLjcyNC43MjQgMCAwIDAtLjUyNi0uMjEzLjcyNS43MjUgMCAwIDAtLjUyNi4yMTJsLTEuMDUzIDEuMDNBLjY5NS42OTUgMCAwIDAgNCA0LjVjMCAuMjAyLjA3Mi4zNzQuMjE3LjUxNWwyLjgwMiAyLjc0MyAxLjA1MyAxLjAzYy4xNDUuMTQxLjMyLjIxMi41MjcuMjEyLjIwNiAwIC4zODItLjA3LjUyNi0uMjEybDEuMDUzLTEuMDMgNS42MDUtNS40ODVBLjY5NS42OTUgMCAwIDAgMTYgMS43NThhLjY5NC42OTQgMCAwIDAtLjIxNy0uNTE1eiIvPjwvc3ZnPg==);text-indent:0}}.usa-radio__input:focus+.usa-radio__label:before{outline:.25rem solid #2491ff;outline-offset:.25rem}.usa-checkbox__input:disabled+.usa-checkbox__label,.usa-radio__input:disabled+.usa-radio__label{color:#c9c9c9;cursor:not-allowed}.usa-checkbox__input:focus+.usa-checkbox__label:before{outline:.25rem solid #2491ff;outline-offset:0}.usa-checkbox__input:disabled+.usa-checkbox__label:before,.usa-radio__input:disabled+.usa-radio__label:before{background:#e6e6e6;box-shadow:0 0 0 2px #c9c9c9;cursor:not-allowed}.usa-checkbox__input--tile+.usa-checkbox__label,.usa-radio__input--tile+.usa-radio__label{border:2px solid #dfe1e2;border-radius:.25rem;margin:.5rem 0;padding:.75rem 1rem .75rem 2.5rem}.usa-checkbox__input--tile:checked+.usa-checkbox__label,.usa-radio__input--tile:checked+.usa-radio__label{background-color:#d9e8f6;border-color:#73b3e7}.usa-checkbox__label-description,.usa-radio__label-description{display:block;font-size:.93rem;margin-top:.5rem;text-indent:0}.usa-memorable-date{display:flex}.usa-memorable-date [type=number]{-moz-appearance:textfield}.usa-memorable-date [type=number]::-webkit-inner-spin-button{-webkit-appearance:none;appearance:none}.usa-memorable-date [type=number]::-webkit-contacts-auto-fill-button{display:none!important;height:0;margin:0;pointer-events:none;visibility:hidden;width:0}.usa-form-group--day,.usa-form-group--month,.usa-form-group--year{flex:0 1 auto;margin-right:1rem;width:3rem}.usa-form-group--year{width:4.5rem}.usa-select{-webkit-appearance:none;appearance:none;background-color:#fff;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGQ9Ik0xMiA1LjgzIDE1LjE3IDlsMS40MS0xLjQxTDEyIDMgNy40MSA3LjU5IDguODMgOSAxMiA1Ljgzem0wIDEyLjM0TDguODMgMTVsLTEuNDEgMS40MUwxMiAyMWw0LjU5LTQuNTlMMTUuMTcgMTUgMTIgMTguMTd6Ii8+PC9zdmc+),linear-gradient(transparent,transparent);background-position:right .5rem center;background-repeat:no-repeat;background-size:1.25rem;padding-right:2rem}.usa-select::-ms-expand{display:none}.usa-select:-webkit-autofill{-webkit-appearance:menulist;appearance:menulist}.usa-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #000}[type=file]{border:none;margin-top:.5rem;padding-left:0;padding-top:.2rem}.usa-file-input{display:block;max-width:30rem;width:100%}.usa-file-input__target{border:1px dashed #a9aeb1;display:block;font-size:.93rem;margin-top:.5rem;position:relative;text-align:center;width:100%}.usa-file-input__target:hover{border-color:#71767a}.usa-file-input__target.has-invalid-file{border-color:#fa9441}.usa-file-input__accepted-files-message{font-weight:700;margin:-1.5rem 0 1.5rem;pointer-events:none;position:relative;z-index:3}.has-invalid-file .usa-file-input__accepted-files-message{color:#b50909}.usa-file-input__choose{color:#005ea2;font-weight:400;text-decoration:underline}.usa-file-input__choose:visited{color:#54278f}.usa-file-input__choose:hover{color:#1a4480}.usa-file-input__choose:active{color:#162e51}.usa-file-input__choose:focus{outline:.25rem solid #2491ff;outline-offset:0}.usa-file-input__instructions{display:inline-block;padding:2rem 1rem;pointer-events:none;position:relative;z-index:3}.usa-file-input__instructions.display-none{display:none}.usa-file-input__box{background:#fff;height:100%;left:0;pointer-events:none;position:absolute;top:0;width:100%;z-index:2}.usa-file-input .usa-file-input__input[type]{cursor:pointer;height:100%;left:0;margin:0;max-width:none;padding:.5rem;position:absolute;text-indent:-999em;top:0;width:100%;z-index:1}.usa-file-input .usa-file-input__input[type]::-webkit-file-upload-button{display:none}.usa-file-input--drag .usa-file-input__target{border-color:#005ea2}.usa-file-input--drag .usa-file-input__box{background-color:#d9e8f6!important}.usa-file-input--drag .usa-file-input__preview{opacity:.1}.usa-file-input__preview-heading{font-weight:700;justify-content:space-between;padding:.5rem}.usa-file-input__preview,.usa-file-input__preview-heading{align-items:center;background:#d9e8f6;display:flex;pointer-events:none;position:relative;z-index:3}.usa-file-input__preview{word-wrap:anywhere;font-size:.87rem;margin-top:1px;padding:.25rem .5rem;text-align:left}.usa-file-input__preview:last-child{margin-bottom:-1.5rem}.usa-file-input__preview-image{border:none;display:block;height:2.5rem;margin-right:.5rem;-o-object-fit:contain;object-fit:contain;width:2.5rem}.usa-file-input__preview-image.is-loading{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMCIgdmlld0JveD0iMCAwIDEyOCAxMjgiIHhtbDpzcGFjZT0icHJlc2VydmUiPjxnPjxwYXRoIGQ9Ik0zOC41MiAzMy4zNyAyMS4zNiAxNi4yQTYzLjYgNjMuNiAwIDAgMSA1OS41LjE2djI0LjNhMzkuNSAzOS41IDAgMCAwLTIwLjk4IDguOTJ6Ii8+PHBhdGggZmlsbD0ic2lsdmVyIiBmaWxsLW9wYWNpdHk9Ii4yNSIgZD0iTTY3LjY0MiAyNC4zMjQgNjcuNjQ5LjA1YTYzLjYgNjMuNiAwIDAgMSAzOC4zMSAxNS42MjdMODguNzc4IDMyLjg2YTM5LjUgMzkuNSAwIDAgMC0yMS4xNDItOC41Mjh6TTk0LjYzIDM4LjUybDE3LjE3LTE3LjE2YTYzLjYgNjMuNiAwIDAgMSAxNi4wNCAzOC4xNGgtMjQuM2EzOS41IDM5LjUgMCAwIDAtOC45Mi0yMC45OHpNMTAzLjY3NiA2Ny42NDJsMjQuMjc1LjAwN2E2My42IDYzLjYgMCAwIDEtMTUuNjI3IDM4LjMxTDk1LjE0IDg4Ljc3OGEzOS41IDM5LjUgMCAwIDAgOC41MjgtMjEuMTQyek04OS40OCA5NC42M2wxNy4xNiAxNy4xN2E2My42IDYzLjYgMCAwIDEtMzguMTQgMTYuMDR2LTI0LjNhMzkuNSAzOS41IDAgMCAwIDIwLjk4LTguOTJ6TTYwLjM1OCAxMDMuNjc2bC0uMDA3IDI0LjI3NWE2My42IDYzLjYgMCAwIDEtMzguMzEtMTUuNjI3TDM5LjIyMiA5NS4xNGEzOS41IDM5LjUgMCAwIDAgMjEuMTQyIDguNTI4ek0zMy4zNyA4OS40OCAxNi4yIDEwNi42NEE2My42IDYzLjYgMCAwIDEgLjE2IDY4LjVoMjQuM2EzOS41IDM5LjUgMCAwIDAgOC45MiAyMC45OHpNMjQuMzI0IDYwLjM1OC4wNSA2MC4zNTFhNjMuNiA2My42IDAgMCAxIDE1LjYyNy0zOC4zMUwzMi44NiAzOS4yMjJhMzkuNSAzOS41IDAgMCAwLTguNTI4IDIxLjE0MnoiLz48YW5pbWF0ZVRyYW5zZm9ybSBhdHRyaWJ1dGVOYW1lPSJ0cmFuc2Zvcm0iIGNhbGNNb2RlPSJkaXNjcmV0ZSIgZHVyPSI3MjBtcyIgcmVwZWF0Q291bnQ9ImluZGVmaW5pdGUiIHR5cGU9InJvdGF0ZSIgdmFsdWVzPSIwIDY0IDY0OzQ1IDY0IDY0OzkwIDY0IDY0OzEzNSA2NCA2NDsxODAgNjQgNjQ7MjI1IDY0IDY0OzI3MCA2NCA2NDszMTUgNjQgNjQiLz48L2c+PC9zdmc+),linear-gradient(transparent,transparent);background-position:50%;background-repeat:no-repeat;background-size:2rem}.usa-file-input__preview-image--excel,.usa-file-input__preview-image--generic,.usa-file-input__preview-image--pdf,.usa-file-input__preview-image--video,.usa-file-input__preview-image--word{background-position:50%;background-repeat:no-repeat;background-size:1.5rem}.usa-file-input__preview-image--pdf{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9IiMwNzY0OGQiIHZpZXdCb3g9IjAgMCAzODQgNTEyIj48cGF0aCBkPSJNMTgxLjkgMjU2LjFjLTUtMTYtNC45LTQ2LjktMi00Ni45IDguNCAwIDcuNiAzNi45IDIgNDYuOXptLTEuNyA0Ny4yYy03LjcgMjAuMi0xNy4zIDQzLjMtMjguNCA2Mi43IDE4LjMtNyAzOS0xNy4yIDYyLjktMjEuOS0xMi43LTkuNi0yNC45LTIzLjQtMzQuNS00MC44ek04Ni4xIDQyOC4xYzAgLjggMTMuMi01LjQgMzQuOS00MC4yLTYuNyA2LjMtMjkuMSAyNC41LTM0LjkgNDAuMnpNMjQ4IDE2MGgxMzZ2MzI4YzAgMTMuMy0xMC43IDI0LTI0IDI0SDI0Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNFYyNEMwIDEwLjcgMTAuNyAwIDI0IDBoMjAwdjEzNmMwIDEzLjIgMTAuOCAyNCAyNCAyNHptLTggMTcxLjhjLTIwLTEyLjItMzMuMy0yOS00Mi43LTUzLjggNC41LTE4LjUgMTEuNi00Ni42IDYuMi02NC4yLTQuNy0yOS40LTQyLjQtMjYuNS00Ny44LTYuOC01IDE4LjMtLjQgNDQuMSA4LjEgNzctMTEuNiAyNy42LTI4LjcgNjQuNi00MC44IDg1LjgtLjEgMC0uMS4xLS4yLjEtMjcuMSAxMy45LTczLjYgNDQuNS01NC41IDY4IDUuNiA2LjkgMTYgMTAgMjEuNSAxMCAxNy45IDAgMzUuNy0xOCA2MS4xLTYxLjggMjUuOC04LjUgNTQuMS0xOS4xIDc5LTIzLjIgMjEuNyAxMS44IDQ3LjEgMTkuNSA2NCAxOS41IDI5LjIgMCAzMS4yLTMyIDE5LjctNDMuNC0xMy45LTEzLjYtNTQuMy05LjctNzMuNi03LjJ6TTM3NyAxMDUgMjc5IDdjLTQuNS00LjUtMTAuNi03LTE3LTdoLTZ2MTI4aDEyOHYtNi4xYzAtNi4zLTIuNS0xMi40LTctMTYuOXptLTc0LjEgMjU1LjNjNC4xLTIuNy0yLjUtMTEuOS00Mi44LTkgMzcuMSAxNS44IDQyLjggOSA0Mi44IDl6Ii8+PC9zdmc+),linear-gradient(transparent,transparent);background-repeat:no-repeat}.usa-file-input__preview-image--generic{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9IiMwNzY0OGQiIHZpZXdCb3g9IjAgMCAzODQgNTEyIj48cGF0aCBkPSJNMjI0IDEzNlYwSDI0QzEwLjcgMCAwIDEwLjcgMCAyNHY0NjRjMCAxMy4zIDEwLjcgMjQgMjQgMjRoMzM2YzEzLjMgMCAyNC0xMC43IDI0LTI0VjE2MEgyNDhjLTEzLjIgMC0yNC0xMC44LTI0LTI0em0xNjAtMTQuMXY2LjFIMjU2VjBoNi4xYzYuNCAwIDEyLjUgMi41IDE3IDdsOTcuOSA5OGM0LjUgNC41IDcgMTAuNiA3IDE2Ljl6Ii8+PC9zdmc+),linear-gradient(transparent,transparent);background-repeat:no-repeat}.usa-file-input__preview-image--word{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9IiMwNzY0OGQiIHZpZXdCb3g9IjAgMCAzODQgNTEyIj48cGF0aCBkPSJNMjI0IDEzNlYwSDI0QzEwLjcgMCAwIDEwLjcgMCAyNHY0NjRjMCAxMy4zIDEwLjcgMjQgMjQgMjRoMzM2YzEzLjMgMCAyNC0xMC43IDI0LTI0VjE2MEgyNDhjLTEzLjIgMC0yNC0xMC44LTI0LTI0em01Ny4xIDEyMEgzMDVjNy43IDAgMTMuNCA3LjEgMTEuNyAxNC43bC0zOCAxNjhjLTEuMiA1LjUtNi4xIDkuMy0xMS43IDkuM2gtMzhjLTUuNSAwLTEwLjMtMy44LTExLjYtOS4xLTI1LjgtMTAzLjUtMjAuOC04MS4yLTI1LjYtMTEwLjVoLS41Yy0xLjEgMTQuMy0yLjQgMTcuNC0yNS42IDExMC41LTEuMyA1LjMtNi4xIDkuMS0xMS42IDkuMUgxMTdjLTUuNiAwLTEwLjUtMy45LTExLjctOS40bC0zNy44LTE2OGMtMS43LTcuNSA0LTE0LjYgMTEuNy0xNC42aDI0LjVjNS43IDAgMTAuNyA0IDExLjggOS43IDE1LjYgNzggMjAuMSAxMDkuNSAyMSAxMjIuMiAxLjYtMTAuMiA3LjMtMzIuNyAyOS40LTEyMi43IDEuMy01LjQgNi4xLTkuMSAxMS43LTkuMWgyOS4xYzUuNiAwIDEwLjQgMy44IDExLjcgOS4yIDI0IDEwMC40IDI4LjggMTI0IDI5LjYgMTI5LjQtLjItMTEuMi0yLjYtMTcuOCAyMS42LTEyOS4yIDEtNS42IDUuOS05LjUgMTEuNS05LjV6TTM4NCAxMjEuOXY2LjFIMjU2VjBoNi4xYzYuNCAwIDEyLjUgMi41IDE3IDdsOTcuOSA5OGM0LjUgNC41IDcgMTAuNiA3IDE2Ljl6Ii8+PC9zdmc+),linear-gradient(transparent,transparent);background-repeat:no-repeat}.usa-file-input__preview-image--excel{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9IiMwNzY0OGQiIHZpZXdCb3g9IjAgMCAzODQgNTEyIj48cGF0aCBkPSJNMjI0IDEzNlYwSDI0QzEwLjcgMCAwIDEwLjcgMCAyNHY0NjRjMCAxMy4zIDEwLjcgMjQgMjQgMjRoMzM2YzEzLjMgMCAyNC0xMC43IDI0LTI0VjE2MEgyNDhjLTEzLjIgMC0yNC0xMC44LTI0LTI0em02MC4xIDEwNi41TDIyNCAzMzZsNjAuMSA5My41YzUuMSA4LS42IDE4LjUtMTAuMSAxOC41aC0zNC45Yy00LjQgMC04LjUtMi40LTEwLjYtNi4zQzIwOC45IDQwNS41IDE5MiAzNzMgMTkyIDM3M2MtNi40IDE0LjgtMTAgMjAtMzYuNiA2OC44LTIuMSAzLjktNi4xIDYuMy0xMC41IDYuM0gxMTBjLTkuNSAwLTE1LjItMTAuNS0xMC4xLTE4LjVsNjAuMy05My41LTYwLjMtOTMuNWMtNS4yLTggLjYtMTguNSAxMC4xLTE4LjVoMzQuOGM0LjQgMCA4LjUgMi40IDEwLjYgNi4zIDI2LjEgNDguOCAyMCAzMy42IDM2LjYgNjguNSAwIDAgNi4xLTExLjcgMzYuNi02OC41IDIuMS0zLjkgNi4yLTYuMyAxMC42LTYuM0gyNzRjOS41LS4xIDE1LjIgMTAuNCAxMC4xIDE4LjR6TTM4NCAxMjEuOXY2LjFIMjU2VjBoNi4xYzYuNCAwIDEyLjUgMi41IDE3IDdsOTcuOSA5OGM0LjUgNC41IDcgMTAuNiA3IDE2Ljl6Ii8+PC9zdmc+),linear-gradient(transparent,transparent);background-repeat:no-repeat}.usa-file-input__preview-image--video{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9IiMwNzY0OGQiIHZpZXdCb3g9IjAgMCAzODQgNTEyIj48cGF0aCBkPSJNMzg0IDEyMS45NDFWMTI4SDI1NlYwaDYuMDU5YzYuMzY1IDAgMTIuNDcgMi41MjkgMTYuOTcxIDcuMDI5bDk3Ljk0MSA5Ny45NDFBMjQuMDA1IDI0LjAwNSAwIDAgMSAzODQgMTIxLjk0MXpNMjI0IDEzNlYwSDI0QzEwLjc0NSAwIDAgMTAuNzQ1IDAgMjR2NDY0YzAgMTMuMjU1IDEwLjc0NSAyNCAyNCAyNGgzMzZjMTMuMjU1IDAgMjQtMTAuNzQ1IDI0LTI0VjE2MEgyNDhjLTEzLjIgMC0yNC0xMC44LTI0LTI0em05NiAxNDQuMDE2djExMS45NjNjMCAyMS40NDUtMjUuOTQzIDMxLjk5OC00MC45NzEgMTYuOTcxTDIyNCAzNTMuOTQxVjM5MmMwIDEzLjI1NS0xMC43NDUgMjQtMjQgMjRIODhjLTEzLjI1NSAwLTI0LTEwLjc0NS0yNC0yNFYyODBjMC0xMy4yNTUgMTAuNzQ1LTI0IDI0LTI0aDExMmMxMy4yNTUgMCAyNCAxMC43NDUgMjQgMjR2MzguMDU5bDU1LjAyOS01NS4wMTNjMTUuMDExLTE1LjAxIDQwLjk3MS00LjQ5MSA0MC45NzEgMTYuOTd6Ii8+PC9zdmc+),linear-gradient(transparent,transparent);background-repeat:no-repeat}.usa-form-group--error .usa-file-input__target{border-color:#b50909;border-width:2px}.usa-file-input--disabled{pointer-events:none}.usa-file-input--disabled .usa-file-input__instructions{opacity:.5}.usa-file-input--disabled .usa-file-input__box{background-color:#e6e6e6}.usa-file-input--disabled .usa-file-input__input[type]{cursor:default}.usa-range{-webkit-appearance:none;appearance:none;border:none;padding-left:1px;width:100%}.usa-range:focus{outline:none}.usa-range:focus::-webkit-slider-thumb{background-color:#fff;box-shadow:0 0 0 2px #2491ff}.usa-range:focus::-moz-range-thumb{background-color:#fff;box-shadow:0 0 0 2px #2491ff}.usa-range:focus::-ms-thumb{background-color:#fff;box-shadow:0 0 0 2px #2491ff}.usa-range::-webkit-slider-runnable-track{background-color:#f0f0f0;border:1px solid #71767a;border-radius:99rem;cursor:pointer;height:1rem;width:100%}.usa-range::-moz-range-track{background-color:#f0f0f0;border:1px solid #71767a;border-radius:99rem;cursor:pointer;height:1rem;width:100%}.usa-range::-ms-track{background-color:#f0f0f0;border:1px solid #71767a;border-radius:99rem;cursor:pointer;height:1rem;width:100%}.usa-range::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;background:#f0f0f0;border:none;border-radius:99rem;box-shadow:0 0 0 2px #71767a;cursor:pointer;height:1.25rem;margin-top:-.19rem;width:1.25rem}.usa-range::-moz-range-thumb{background:#f0f0f0;border:none;border-radius:99rem;box-shadow:0 0 0 2px #71767a;cursor:pointer;height:1.25rem;width:1.25rem}.usa-range::-ms-thumb{background:#f0f0f0;border:none;border-radius:99rem;box-shadow:0 0 0 2px #71767a;cursor:pointer;height:1.25rem;width:1.25rem}.usa-range::-ms-fill-lower,.usa-range::-ms-fill-upper{background-color:#f0f0f0;border:1px solid #71767a;border-radius:99rem}.usa-textarea{height:10rem}.usa-input--error{border:.25rem solid #b50909}.usa-character-count__message{display:inline-block;padding-top:.25rem}.usa-character-count__message--invalid{color:#b50909;font-weight:700}.usa-combo-box{max-width:30rem;position:relative}.usa-combo-box--pristine .usa-combo-box__input{padding-right:calc(5em + 4px)}.usa-combo-box--pristine .usa-combo-box__input::-ms-clear{display:none}.usa-combo-box--pristine .usa-combo-box__clear-input{display:block}.usa-combo-box__input{-webkit-appearance:none;appearance:none;margin-bottom:0;max-width:none;padding-right:calc(2.5em + 3px)}button.usa-combo-box__clear-input:focus,button.usa-combo-box__toggle-list:focus{outline-offset:-4px}.usa-combo-box__clear-input__wrapper:focus,.usa-combo-box__toggle-list__wrapper:focus{outline:0}.usa-combo-box__clear-input,.usa-combo-box__toggle-list{background-color:transparent;background-position:50%;background-size:auto 1.5rem;border:0;bottom:1px;cursor:pointer;margin-bottom:0;opacity:.6;padding-right:2rem;position:absolute;top:1px;z-index:100}.usa-combo-box__clear-input{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGQ9Ik0xOSA2LjQxIDE3LjU5IDUgMTIgMTAuNTkgNi40MSA1IDUgNi40MSAxMC41OSAxMiA1IDE3LjU5IDYuNDEgMTkgMTIgMTMuNDEgMTcuNTkgMTkgMTkgMTcuNTkgMTMuNDEgMTJ6Ii8+PC9zdmc+),linear-gradient(transparent,transparent);background-repeat:no-repeat;display:none;right:calc(2.5em + 3px)}.usa-combo-box__toggle-list{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGQ9Ik0xNi41OSA4LjU5IDEyIDEzLjE3IDcuNDEgOC41OSA2IDEwbDYgNiA2LTZ6Ii8+PC9zdmc+),linear-gradient(transparent,transparent);background-repeat:no-repeat;background-size:auto 2rem;right:1px}.usa-combo-box__input-button-separator{background-color:#c6cace;box-sizing:border-box;margin-bottom:8px;margin-top:8px;position:absolute;right:calc(2.5em + 2px);top:1px;width:1px;z-index:200}.usa-combo-box__list{background-color:#fff;border:1px solid #565c65;border-radius:0;border-top:0;margin:0;max-height:12.1em;overflow-x:hidden;overflow-y:scroll;padding:0;position:absolute;width:100%;z-index:300}.usa-combo-box__list:focus{outline:0}.usa-combo-box__list-option{border-bottom:1px solid #dfe1e2;cursor:pointer;display:block;padding:.5rem}.usa-combo-box__list-option--focused{outline:2px solid #162e51;outline-offset:-2px;position:relative;z-index:100}.usa-combo-box__list-option--focused:focus{outline-offset:-4px}.usa-combo-box__list-option--selected{background-color:#005ea2;border-color:#005ea2;color:#fff}.usa-combo-box__list-option--no-results{cursor:not-allowed;display:block;padding:.5rem}.usa-date-picker__wrapper{display:none;position:relative}.usa-date-picker__wrapper:focus{outline:0}.usa-date-picker__button,.usa-date-picker__calendar__date,.usa-date-picker__calendar__month,.usa-date-picker__calendar__month-selection,.usa-date-picker__calendar__next-month,.usa-date-picker__calendar__next-year,.usa-date-picker__calendar__next-year-chunk,.usa-date-picker__calendar__previous-month,.usa-date-picker__calendar__previous-year,.usa-date-picker__calendar__previous-year-chunk,.usa-date-picker__calendar__year,.usa-date-picker__calendar__year-selection{background-color:#f0f0f0;border:0;width:100%}.usa-date-picker__button:not([disabled]),.usa-date-picker__calendar__date:not([disabled]),.usa-date-picker__calendar__month-selection:not([disabled]),.usa-date-picker__calendar__month:not([disabled]),.usa-date-picker__calendar__next-month:not([disabled]),.usa-date-picker__calendar__next-year-chunk:not([disabled]),.usa-date-picker__calendar__next-year:not([disabled]),.usa-date-picker__calendar__previous-month:not([disabled]),.usa-date-picker__calendar__previous-year-chunk:not([disabled]),.usa-date-picker__calendar__previous-year:not([disabled]),.usa-date-picker__calendar__year-selection:not([disabled]),.usa-date-picker__calendar__year:not([disabled]){cursor:pointer}.usa-date-picker__button:not([disabled]):focus,.usa-date-picker__calendar__date:not([disabled]):focus,.usa-date-picker__calendar__month-selection:not([disabled]):focus,.usa-date-picker__calendar__month:not([disabled]):focus,.usa-date-picker__calendar__next-month:not([disabled]):focus,.usa-date-picker__calendar__next-year-chunk:not([disabled]):focus,.usa-date-picker__calendar__next-year:not([disabled]):focus,.usa-date-picker__calendar__previous-month:not([disabled]):focus,.usa-date-picker__calendar__previous-year-chunk:not([disabled]):focus,.usa-date-picker__calendar__previous-year:not([disabled]):focus,.usa-date-picker__calendar__year-selection:not([disabled]):focus,.usa-date-picker__calendar__year:not([disabled]):focus{outline-offset:-4px}.usa-date-picker__button:not([disabled]):hover,.usa-date-picker__calendar__date:not([disabled]):hover,.usa-date-picker__calendar__month-selection:not([disabled]):hover,.usa-date-picker__calendar__month:not([disabled]):hover,.usa-date-picker__calendar__next-month:not([disabled]):hover,.usa-date-picker__calendar__next-year-chunk:not([disabled]):hover,.usa-date-picker__calendar__next-year:not([disabled]):hover,.usa-date-picker__calendar__previous-month:not([disabled]):hover,.usa-date-picker__calendar__previous-year-chunk:not([disabled]):hover,.usa-date-picker__calendar__previous-year:not([disabled]):hover,.usa-date-picker__calendar__year-selection:not([disabled]):hover,.usa-date-picker__calendar__year:not([disabled]):hover{background-color:#dfe1e2}.usa-date-picker__button:not([disabled]):active,.usa-date-picker__calendar__date:not([disabled]):active,.usa-date-picker__calendar__month-selection:not([disabled]):active,.usa-date-picker__calendar__month:not([disabled]):active,.usa-date-picker__calendar__next-month:not([disabled]):active,.usa-date-picker__calendar__next-year-chunk:not([disabled]):active,.usa-date-picker__calendar__next-year:not([disabled]):active,.usa-date-picker__calendar__previous-month:not([disabled]):active,.usa-date-picker__calendar__previous-year-chunk:not([disabled]):active,.usa-date-picker__calendar__previous-year:not([disabled]):active,.usa-date-picker__calendar__year-selection:not([disabled]):active,.usa-date-picker__calendar__year:not([disabled]):active{background-color:#a9aeb1}.usa-date-picker--active .usa-date-picker__button{background-color:#f0f0f0}.usa-date-picker--active .usa-date-picker__calendar{z-index:400}.usa-date-picker__button{align-self:stretch;background-color:transparent;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGQ9Ik0yMCAzaC0xVjFoLTJ2Mkg3VjFINXYySDRjLTEuMSAwLTIgLjktMiAydjE2YzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptMCAxOEg0VjhoMTZ2MTN6Ii8+PC9zdmc+),linear-gradient(transparent,transparent);background-position:50%;background-repeat:no-repeat;background-size:1.5rem;margin-top:.5em;width:3em}.usa-date-picker--initialized .usa-date-picker__wrapper{display:flex}.usa-date-picker__calendar{background-color:#f0f0f0;left:0;position:absolute;width:100%;z-index:100}.usa-date-picker__calendar__table{border-collapse:collapse;border-spacing:0;table-layout:fixed;text-align:center;width:100%}.usa-date-picker__calendar__table th{font-weight:400}.usa-date-picker__calendar__table td{padding:0}.usa-date-picker__calendar__row{display:flex;flex-wrap:wrap;text-align:center;width:100%}.usa-date-picker__calendar__cell{background-color:#f0f0f0;flex:1 1}.usa-date-picker__calendar__cell--center-items{align-items:center;display:flex;justify-content:center}.usa-date-picker__calendar__next-month,.usa-date-picker__calendar__next-year,.usa-date-picker__calendar__previous-month,.usa-date-picker__calendar__previous-year{background-position:50%;background-size:auto 1.5rem;height:1.5rem;padding:20px 10px}.usa-date-picker__calendar__previous-year:not([disabled]){background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48cG9seWdvbiBwb2ludHM9IjAgMCAyNCAwIDI0IDI0IDAgMjQiLz48cG9seWdvbiBmaWxsPSIjMDAwIiBmaWxsLXJ1bGU9Im5vbnplcm8iIHBvaW50cz0iMTEuNDEgNy40MSAxMCA2IDQgMTIgMTAgMTggMTEuNDEgMTYuNTkgNi44MyAxMiIvPjxwb2x5Z29uIGZpbGw9IiMwMDAiIGZpbGwtcnVsZT0ibm9uemVybyIgcG9pbnRzPSIxOS40MSA3LjQxIDE4IDYgMTIgMTIgMTggMTggMTkuNDEgMTYuNTkgMTQuODMgMTIiLz48L2c+PC9zdmc+),linear-gradient(transparent,transparent);background-repeat:no-repeat}.usa-date-picker__calendar__previous-month:not([disabled]){background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGQ9Ik0xNS40MSA3LjQxIDE0IDZsLTYgNiA2IDYgMS40MS0xLjQxTDEwLjgzIDEyeiIvPjwvc3ZnPg==),linear-gradient(transparent,transparent);background-repeat:no-repeat}.usa-date-picker__calendar__next-year:not([disabled]){background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48cG9seWdvbiBwb2ludHM9IjAgMCAyNCAwIDI0IDI0IDAgMjQiLz48ZyBmaWxsPSIjMDAwIiBmaWxsLXJ1bGU9Im5vbnplcm8iIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQuNTkgNikiPjxwb2x5Z29uIHBvaW50cz0iOS40MSAwIDggMS40MSAxMi41OCA2IDggMTAuNTkgOS40MSAxMiAxNS40MSA2Ii8+PHBvbHlnb24gcG9pbnRzPSIxLjQxIDAgMCAxLjQxIDQuNTggNiAwIDEwLjU5IDEuNDEgMTIgNy40MSA2Ii8+PC9nPjwvZz48L3N2Zz4=),linear-gradient(transparent,transparent);background-repeat:no-repeat}.usa-date-picker__calendar__next-month:not([disabled]){background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGQ9Ik0xMCA2IDguNTkgNy40MSAxMy4xNyAxMmwtNC41OCA0LjU5TDEwIDE4bDYtNnoiLz48L3N2Zz4=),linear-gradient(transparent,transparent);background-repeat:no-repeat}.usa-date-picker__calendar__day-of-week{padding:6px 0}.usa-date-picker__calendar__date{padding:10px 0}.usa-date-picker__calendar__date--focused{outline:2px solid #162e51;outline-offset:-2px;position:relative;z-index:100}.usa-date-picker__calendar__date--next-month:not([disabled]),.usa-date-picker__calendar__date--previous-month:not([disabled]){color:#5d5d52}.usa-date-picker__calendar__date--range-date,.usa-date-picker__calendar__date--range-date:not([disabled]),.usa-date-picker__calendar__date--selected,.usa-date-picker__calendar__date--selected:not([disabled]){background-color:#0050d8;color:#f9f9f9}.usa-date-picker__calendar__date--range-date:not([disabled]):hover,.usa-date-picker__calendar__date--selected:not([disabled]):hover{background-color:#0050d8;color:#e6e6e6}.usa-date-picker__calendar__date--range-date:not([disabled]):focus,.usa-date-picker__calendar__date--selected:not([disabled]):focus{background-color:#0050d8;color:#f9f9f9}.usa-date-picker__calendar__date--range-date:not([disabled]):active,.usa-date-picker__calendar__date--selected:not([disabled]):active{background-color:#1a4480}.usa-date-picker__calendar__date--range-date-start{border-bottom-left-radius:10%;border-top-left-radius:10%}.usa-date-picker__calendar__date--range-date-end{border-bottom-right-radius:10%;border-top-right-radius:10%}.usa-date-picker__calendar__date--within-range,.usa-date-picker__calendar__date--within-range:not([disabled]),.usa-date-picker__calendar__date--within-range:not([disabled]):active,.usa-date-picker__calendar__date--within-range:not([disabled]):focus,.usa-date-picker__calendar__date--within-range:not([disabled]):hover{background-color:#cfe8ff}.usa-date-picker__calendar__month-label{flex:4 1;text-align:center}.usa-date-picker__calendar__month-selection,.usa-date-picker__calendar__year-selection{display:inline-block;height:100%;padding:8px 4px;width:auto}.usa-date-picker__calendar__month-picker{padding:20px 5px}.usa-date-picker__calendar__month{padding:10px 0}.usa-date-picker__calendar__month--focused{outline:2px solid #162e51;outline-offset:-2px;position:relative;z-index:100}.usa-date-picker__calendar__month--selected,.usa-date-picker__calendar__month--selected:not([disabled]){background-color:#0050d8;color:#f9f9f9}.usa-date-picker__calendar__month--selected:not([disabled]):hover{background-color:#0050d8;color:#e6e6e6}.usa-date-picker__calendar__month--selected:not([disabled]):focus{background-color:#0050d8;color:#f9f9f9}.usa-date-picker__calendar__month--selected:not([disabled]):active{background-color:#1a4480}.usa-date-picker__calendar__year-picker{padding:20px 5px}.usa-date-picker__calendar__next-year-chunk,.usa-date-picker__calendar__previous-year-chunk{background-position:50%;background-size:auto 2rem;margin:auto;padding:40px 0}.usa-date-picker__calendar__previous-year-chunk:not([disabled]){background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGQ9Ik0xNS40MSA3LjQxIDE0IDZsLTYgNiA2IDYgMS40MS0xLjQxTDEwLjgzIDEyeiIvPjwvc3ZnPg==),linear-gradient(transparent,transparent);background-repeat:no-repeat}.usa-date-picker__calendar__next-year-chunk:not([disabled]){background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGQ9Ik0xMCA2IDguNTkgNy40MSAxMy4xNyAxMmwtNC41OCA0LjU5TDEwIDE4bDYtNnoiLz48L3N2Zz4=),linear-gradient(transparent,transparent);background-repeat:no-repeat}.usa-date-picker__calendar__year{padding:10px 0}.usa-date-picker__calendar__year--focused{outline:2px solid #162e51;outline-offset:-2px;position:relative;z-index:100}.usa-date-picker__calendar__year--selected,.usa-date-picker__calendar__year--selected:not([disabled]){background-color:#0050d8;color:#f9f9f9}.usa-date-picker__calendar__year--selected:not([disabled]):hover{background-color:#0050d8;color:#e6e6e6}.usa-date-picker__calendar__year--selected:not([disabled]):focus{background-color:#0050d8;color:#f9f9f9}.usa-date-picker__calendar__year--selected:not([disabled]):active{background-color:#1a4480}.usa-time-picker{width:10em}.grid-container{margin-left:auto;margin-right:auto;max-width:64rem;padding-left:1rem;padding-right:1rem}@media (min-width:64em){.grid-container{padding-left:2rem;padding-right:2rem}}.grid-container-card{margin-left:auto;margin-right:auto;max-width:10rem;padding-left:1rem;padding-right:1rem}@media (min-width:64em){.grid-container-card{padding-left:2rem;padding-right:2rem}}.grid-container-card-lg{margin-left:auto;margin-right:auto;max-width:15rem;padding-left:1rem;padding-right:1rem}@media (min-width:64em){.grid-container-card-lg{padding-left:2rem;padding-right:2rem}}.grid-container-mobile{margin-left:auto;margin-right:auto;max-width:20rem;padding-left:1rem;padding-right:1rem}@media (min-width:64em){.grid-container-mobile{padding-left:2rem;padding-right:2rem}}.grid-container-mobile-lg{margin-left:auto;margin-right:auto;max-width:30rem;padding-left:1rem;padding-right:1rem}@media (min-width:64em){.grid-container-mobile-lg{padding-left:2rem;padding-right:2rem}}.grid-container-tablet{margin-left:auto;margin-right:auto;max-width:40rem;padding-left:1rem;padding-right:1rem}@media (min-width:64em){.grid-container-tablet{padding-left:2rem;padding-right:2rem}}.grid-container-tablet-lg{margin-left:auto;margin-right:auto;max-width:55rem;padding-left:1rem;padding-right:1rem}@media (min-width:64em){.grid-container-tablet-lg{padding-left:2rem;padding-right:2rem}}.grid-container-desktop{margin-left:auto;margin-right:auto;max-width:64rem;padding-left:1rem;padding-right:1rem}@media (min-width:64em){.grid-container-desktop{padding-left:2rem;padding-right:2rem}}.grid-container-desktop-lg{margin-left:auto;margin-right:auto;max-width:75rem;padding-left:1rem;padding-right:1rem}@media (min-width:64em){.grid-container-desktop-lg{padding-left:2rem;padding-right:2rem}}.grid-container-widescreen{margin-left:auto;margin-right:auto;max-width:87.5rem;padding-left:1rem;padding-right:1rem}@media (min-width:64em){.grid-container-widescreen{padding-left:2rem;padding-right:2rem}}@media (min-width:30em){.mobile-lg\:grid-container{margin-left:auto;margin-right:auto;max-width:64rem;padding-left:1rem;padding-right:1rem}}@media (min-width:30em)and (min-width:64em){.mobile-lg\:grid-container{padding-left:2rem;padding-right:2rem}}@media (min-width:30em){.mobile-lg\:grid-container-card{margin-left:auto;margin-right:auto;max-width:10rem;padding-left:1rem;padding-right:1rem}}@media (min-width:30em)and (min-width:64em){.mobile-lg\:grid-container-card{padding-left:2rem;padding-right:2rem}}@media (min-width:30em){.mobile-lg\:grid-container-card-lg{margin-left:auto;margin-right:auto;max-width:15rem;padding-left:1rem;padding-right:1rem}}@media (min-width:30em)and (min-width:64em){.mobile-lg\:grid-container-card-lg{padding-left:2rem;padding-right:2rem}}@media (min-width:30em){.mobile-lg\:grid-container-mobile{margin-left:auto;margin-right:auto;max-width:20rem;padding-left:1rem;padding-right:1rem}}@media (min-width:30em)and (min-width:64em){.mobile-lg\:grid-container-mobile{padding-left:2rem;padding-right:2rem}}@media (min-width:30em){.mobile-lg\:grid-container-mobile-lg{margin-left:auto;margin-right:auto;max-width:30rem;padding-left:1rem;padding-right:1rem}}@media (min-width:30em)and (min-width:64em){.mobile-lg\:grid-container-mobile-lg{padding-left:2rem;padding-right:2rem}}@media (min-width:30em){.mobile-lg\:grid-container-tablet{margin-left:auto;margin-right:auto;max-width:40rem;padding-left:1rem;padding-right:1rem}}@media (min-width:30em)and (min-width:64em){.mobile-lg\:grid-container-tablet{padding-left:2rem;padding-right:2rem}}@media (min-width:30em){.mobile-lg\:grid-container-tablet-lg{margin-left:auto;margin-right:auto;max-width:55rem;padding-left:1rem;padding-right:1rem}}@media (min-width:30em)and (min-width:64em){.mobile-lg\:grid-container-tablet-lg{padding-left:2rem;padding-right:2rem}}@media (min-width:30em){.mobile-lg\:grid-container-desktop{margin-left:auto;margin-right:auto;max-width:64rem;padding-left:1rem;padding-right:1rem}}@media (min-width:30em)and (min-width:64em){.mobile-lg\:grid-container-desktop{padding-left:2rem;padding-right:2rem}}@media (min-width:30em){.mobile-lg\:grid-container-desktop-lg{margin-left:auto;margin-right:auto;max-width:75rem;padding-left:1rem;padding-right:1rem}}@media (min-width:30em)and (min-width:64em){.mobile-lg\:grid-container-desktop-lg{padding-left:2rem;padding-right:2rem}}@media (min-width:30em){.mobile-lg\:grid-container-widescreen{margin-left:auto;margin-right:auto;max-width:87.5rem;padding-left:1rem;padding-right:1rem}}@media (min-width:30em)and (min-width:64em){.mobile-lg\:grid-container-widescreen{padding-left:2rem;padding-right:2rem}}@media (min-width:40em){.tablet\:grid-container{margin-left:auto;margin-right:auto;max-width:64rem;padding-left:1rem;padding-right:1rem}}@media (min-width:40em)and (min-width:64em){.tablet\:grid-container{padding-left:2rem;padding-right:2rem}}@media (min-width:40em){.tablet\:grid-container-card{margin-left:auto;margin-right:auto;max-width:10rem;padding-left:1rem;padding-right:1rem}}@media (min-width:40em)and (min-width:64em){.tablet\:grid-container-card{padding-left:2rem;padding-right:2rem}}@media (min-width:40em){.tablet\:grid-container-card-lg{margin-left:auto;margin-right:auto;max-width:15rem;padding-left:1rem;padding-right:1rem}}@media (min-width:40em)and (min-width:64em){.tablet\:grid-container-card-lg{padding-left:2rem;padding-right:2rem}}@media (min-width:40em){.tablet\:grid-container-mobile{margin-left:auto;margin-right:auto;max-width:20rem;padding-left:1rem;padding-right:1rem}}@media (min-width:40em)and (min-width:64em){.tablet\:grid-container-mobile{padding-left:2rem;padding-right:2rem}}@media (min-width:40em){.tablet\:grid-container-mobile-lg{margin-left:auto;margin-right:auto;max-width:30rem;padding-left:1rem;padding-right:1rem}}@media (min-width:40em)and (min-width:64em){.tablet\:grid-container-mobile-lg{padding-left:2rem;padding-right:2rem}}@media (min-width:40em){.tablet\:grid-container-tablet{margin-left:auto;margin-right:auto;max-width:40rem;padding-left:1rem;padding-right:1rem}}@media (min-width:40em)and (min-width:64em){.tablet\:grid-container-tablet{padding-left:2rem;padding-right:2rem}}@media (min-width:40em){.tablet\:grid-container-tablet-lg{margin-left:auto;margin-right:auto;max-width:55rem;padding-left:1rem;padding-right:1rem}}@media (min-width:40em)and (min-width:64em){.tablet\:grid-container-tablet-lg{padding-left:2rem;padding-right:2rem}}@media (min-width:40em){.tablet\:grid-container-desktop{margin-left:auto;margin-right:auto;max-width:64rem;padding-left:1rem;padding-right:1rem}}@media (min-width:40em)and (min-width:64em){.tablet\:grid-container-desktop{padding-left:2rem;padding-right:2rem}}@media (min-width:40em){.tablet\:grid-container-desktop-lg{margin-left:auto;margin-right:auto;max-width:75rem;padding-left:1rem;padding-right:1rem}}@media (min-width:40em)and (min-width:64em){.tablet\:grid-container-desktop-lg{padding-left:2rem;padding-right:2rem}}@media (min-width:40em){.tablet\:grid-container-widescreen{margin-left:auto;margin-right:auto;max-width:87.5rem;padding-left:1rem;padding-right:1rem}}@media (min-width:40em)and (min-width:64em){.tablet\:grid-container-widescreen{padding-left:2rem;padding-right:2rem}}@media (min-width:64em){.desktop\:grid-container{margin-left:auto;margin-right:auto;max-width:64rem;padding-left:1rem;padding-right:1rem}}@media (min-width:64em)and (min-width:64em){.desktop\:grid-container{padding-left:2rem;padding-right:2rem}}@media (min-width:64em){.desktop\:grid-container-card{margin-left:auto;margin-right:auto;max-width:10rem;padding-left:1rem;padding-right:1rem}}@media (min-width:64em)and (min-width:64em){.desktop\:grid-container-card{padding-left:2rem;padding-right:2rem}}@media (min-width:64em){.desktop\:grid-container-card-lg{margin-left:auto;margin-right:auto;max-width:15rem;padding-left:1rem;padding-right:1rem}}@media (min-width:64em)and (min-width:64em){.desktop\:grid-container-card-lg{padding-left:2rem;padding-right:2rem}}@media (min-width:64em){.desktop\:grid-container-mobile{margin-left:auto;margin-right:auto;max-width:20rem;padding-left:1rem;padding-right:1rem}}@media (min-width:64em)and (min-width:64em){.desktop\:grid-container-mobile{padding-left:2rem;padding-right:2rem}}@media (min-width:64em){.desktop\:grid-container-mobile-lg{margin-left:auto;margin-right:auto;max-width:30rem;padding-left:1rem;padding-right:1rem}}@media (min-width:64em)and (min-width:64em){.desktop\:grid-container-mobile-lg{padding-left:2rem;padding-right:2rem}}@media (min-width:64em){.desktop\:grid-container-tablet{margin-left:auto;margin-right:auto;max-width:40rem;padding-left:1rem;padding-right:1rem}}@media (min-width:64em)and (min-width:64em){.desktop\:grid-container-tablet{padding-left:2rem;padding-right:2rem}}@media (min-width:64em){.desktop\:grid-container-tablet-lg{margin-left:auto;margin-right:auto;max-width:55rem;padding-left:1rem;padding-right:1rem}}@media (min-width:64em)and (min-width:64em){.desktop\:grid-container-tablet-lg{padding-left:2rem;padding-right:2rem}}@media (min-width:64em){.desktop\:grid-container-desktop{margin-left:auto;margin-right:auto;max-width:64rem;padding-left:1rem;padding-right:1rem}}@media (min-width:64em)and (min-width:64em){.desktop\:grid-container-desktop{padding-left:2rem;padding-right:2rem}}@media (min-width:64em){.desktop\:grid-container-desktop-lg{margin-left:auto;margin-right:auto;max-width:75rem;padding-left:1rem;padding-right:1rem}}@media (min-width:64em)and (min-width:64em){.desktop\:grid-container-desktop-lg{padding-left:2rem;padding-right:2rem}}@media (min-width:64em){.desktop\:grid-container-widescreen{margin-left:auto;margin-right:auto;max-width:87.5rem;padding-left:1rem;padding-right:1rem}}@media (min-width:64em)and (min-width:64em){.desktop\:grid-container-widescreen{padding-left:2rem;padding-right:2rem}}.grid-row{display:flex;flex-wrap:wrap}.grid-row.grid-gap{margin-left:-.5rem;margin-right:-.5rem}.grid-row.grid-gap>*{padding-left:.5rem;padding-right:.5rem}@media (min-width:64em){.grid-row.grid-gap{margin-left:-1rem;margin-right:-1rem}.grid-row.grid-gap>*{padding-left:1rem;padding-right:1rem}}.grid-row.grid-gap-0{margin-left:0;margin-right:0}.grid-row.grid-gap-0>*{padding-left:0;padding-right:0}.grid-row.grid-gap-2px{margin-left:-1px;margin-right:-1px}.grid-row.grid-gap-2px>*{padding-left:1px;padding-right:1px}.grid-row.grid-gap-05{margin-left:-2px;margin-right:-2px}.grid-row.grid-gap-05>*{padding-left:2px;padding-right:2px}.grid-row.grid-gap-1{margin-left:-.25rem;margin-right:-.25rem}.grid-row.grid-gap-1>*{padding-left:.25rem;padding-right:.25rem}.grid-row.grid-gap-2{margin-left:-.5rem;margin-right:-.5rem}.grid-row.grid-gap-2>*{padding-left:.5rem;padding-right:.5rem}.grid-row.grid-gap-3{margin-left:-.75rem;margin-right:-.75rem}.grid-row.grid-gap-3>*{padding-left:.75rem;padding-right:.75rem}.grid-row.grid-gap-4{margin-left:-1rem;margin-right:-1rem}.grid-row.grid-gap-4>*{padding-left:1rem;padding-right:1rem}.grid-row.grid-gap-5{margin-left:-1.25rem;margin-right:-1.25rem}.grid-row.grid-gap-5>*{padding-left:1.25rem;padding-right:1.25rem}.grid-row.grid-gap-6{margin-left:-1.5rem;margin-right:-1.5rem}.grid-row.grid-gap-6>*{padding-left:1.5rem;padding-right:1.5rem}.grid-row.grid-gap-sm{margin-left:-1px;margin-right:-1px}.grid-row.grid-gap-sm>*{padding-left:1px;padding-right:1px}.grid-row.grid-gap-md{margin-left:-.5rem;margin-right:-.5rem}.grid-row.grid-gap-md>*{padding-left:.5rem;padding-right:.5rem}.grid-row.grid-gap-lg{margin-left:-.75rem;margin-right:-.75rem}.grid-row.grid-gap-lg>*{padding-left:.75rem;padding-right:.75rem}@media (min-width:30em){.grid-row.mobile-lg\:grid-gap-0{margin-left:0;margin-right:0}.grid-row.mobile-lg\:grid-gap-0>*{padding-left:0;padding-right:0}.grid-row.mobile-lg\:grid-gap-2px{margin-left:-1px;margin-right:-1px}.grid-row.mobile-lg\:grid-gap-2px>*{padding-left:1px;padding-right:1px}.grid-row.mobile-lg\:grid-gap-05{margin-left:-2px;margin-right:-2px}.grid-row.mobile-lg\:grid-gap-05>*{padding-left:2px;padding-right:2px}.grid-row.mobile-lg\:grid-gap-1{margin-left:-.25rem;margin-right:-.25rem}.grid-row.mobile-lg\:grid-gap-1>*{padding-left:.25rem;padding-right:.25rem}.grid-row.mobile-lg\:grid-gap-2{margin-left:-.5rem;margin-right:-.5rem}.grid-row.mobile-lg\:grid-gap-2>*{padding-left:.5rem;padding-right:.5rem}.grid-row.mobile-lg\:grid-gap-3{margin-left:-.75rem;margin-right:-.75rem}.grid-row.mobile-lg\:grid-gap-3>*{padding-left:.75rem;padding-right:.75rem}.grid-row.mobile-lg\:grid-gap-4{margin-left:-1rem;margin-right:-1rem}.grid-row.mobile-lg\:grid-gap-4>*{padding-left:1rem;padding-right:1rem}.grid-row.mobile-lg\:grid-gap-5{margin-left:-1.25rem;margin-right:-1.25rem}.grid-row.mobile-lg\:grid-gap-5>*{padding-left:1.25rem;padding-right:1.25rem}.grid-row.mobile-lg\:grid-gap-6{margin-left:-1.5rem;margin-right:-1.5rem}.grid-row.mobile-lg\:grid-gap-6>*{padding-left:1.5rem;padding-right:1.5rem}.grid-row.mobile-lg\:grid-gap-sm{margin-left:-1px;margin-right:-1px}.grid-row.mobile-lg\:grid-gap-sm>*{padding-left:1px;padding-right:1px}.grid-row.mobile-lg\:grid-gap-md{margin-left:-.5rem;margin-right:-.5rem}.grid-row.mobile-lg\:grid-gap-md>*{padding-left:.5rem;padding-right:.5rem}.grid-row.mobile-lg\:grid-gap-lg{margin-left:-.75rem;margin-right:-.75rem}.grid-row.mobile-lg\:grid-gap-lg>*{padding-left:.75rem;padding-right:.75rem}}@media (min-width:40em){.grid-row.tablet\:grid-gap-0{margin-left:0;margin-right:0}.grid-row.tablet\:grid-gap-0>*{padding-left:0;padding-right:0}.grid-row.tablet\:grid-gap-2px{margin-left:-1px;margin-right:-1px}.grid-row.tablet\:grid-gap-2px>*{padding-left:1px;padding-right:1px}.grid-row.tablet\:grid-gap-05{margin-left:-2px;margin-right:-2px}.grid-row.tablet\:grid-gap-05>*{padding-left:2px;padding-right:2px}.grid-row.tablet\:grid-gap-1{margin-left:-.25rem;margin-right:-.25rem}.grid-row.tablet\:grid-gap-1>*{padding-left:.25rem;padding-right:.25rem}.grid-row.tablet\:grid-gap-2{margin-left:-.5rem;margin-right:-.5rem}.grid-row.tablet\:grid-gap-2>*{padding-left:.5rem;padding-right:.5rem}.grid-row.tablet\:grid-gap-3{margin-left:-.75rem;margin-right:-.75rem}.grid-row.tablet\:grid-gap-3>*{padding-left:.75rem;padding-right:.75rem}.grid-row.tablet\:grid-gap-4{margin-left:-1rem;margin-right:-1rem}.grid-row.tablet\:grid-gap-4>*{padding-left:1rem;padding-right:1rem}.grid-row.tablet\:grid-gap-5{margin-left:-1.25rem;margin-right:-1.25rem}.grid-row.tablet\:grid-gap-5>*{padding-left:1.25rem;padding-right:1.25rem}.grid-row.tablet\:grid-gap-6{margin-left:-1.5rem;margin-right:-1.5rem}.grid-row.tablet\:grid-gap-6>*{padding-left:1.5rem;padding-right:1.5rem}.grid-row.tablet\:grid-gap-sm{margin-left:-1px;margin-right:-1px}.grid-row.tablet\:grid-gap-sm>*{padding-left:1px;padding-right:1px}.grid-row.tablet\:grid-gap-md{margin-left:-.5rem;margin-right:-.5rem}.grid-row.tablet\:grid-gap-md>*{padding-left:.5rem;padding-right:.5rem}.grid-row.tablet\:grid-gap-lg{margin-left:-.75rem;margin-right:-.75rem}.grid-row.tablet\:grid-gap-lg>*{padding-left:.75rem;padding-right:.75rem}}@media (min-width:64em){.grid-row.desktop\:grid-gap-0{margin-left:0;margin-right:0}.grid-row.desktop\:grid-gap-0>*{padding-left:0;padding-right:0}.grid-row.desktop\:grid-gap-2px{margin-left:-1px;margin-right:-1px}.grid-row.desktop\:grid-gap-2px>*{padding-left:1px;padding-right:1px}.grid-row.desktop\:grid-gap-05{margin-left:-2px;margin-right:-2px}.grid-row.desktop\:grid-gap-05>*{padding-left:2px;padding-right:2px}.grid-row.desktop\:grid-gap-1{margin-left:-.25rem;margin-right:-.25rem}.grid-row.desktop\:grid-gap-1>*{padding-left:.25rem;padding-right:.25rem}.grid-row.desktop\:grid-gap-2{margin-left:-.5rem;margin-right:-.5rem}.grid-row.desktop\:grid-gap-2>*{padding-left:.5rem;padding-right:.5rem}.grid-row.desktop\:grid-gap-3{margin-left:-.75rem;margin-right:-.75rem}.grid-row.desktop\:grid-gap-3>*{padding-left:.75rem;padding-right:.75rem}.grid-row.desktop\:grid-gap-4{margin-left:-1rem;margin-right:-1rem}.grid-row.desktop\:grid-gap-4>*{padding-left:1rem;padding-right:1rem}.grid-row.desktop\:grid-gap-5{margin-left:-1.25rem;margin-right:-1.25rem}.grid-row.desktop\:grid-gap-5>*{padding-left:1.25rem;padding-right:1.25rem}.grid-row.desktop\:grid-gap-6{margin-left:-1.5rem;margin-right:-1.5rem}.grid-row.desktop\:grid-gap-6>*{padding-left:1.5rem;padding-right:1.5rem}.grid-row.desktop\:grid-gap-sm{margin-left:-1px;margin-right:-1px}.grid-row.desktop\:grid-gap-sm>*{padding-left:1px;padding-right:1px}.grid-row.desktop\:grid-gap-md{margin-left:-.5rem;margin-right:-.5rem}.grid-row.desktop\:grid-gap-md>*{padding-left:.5rem;padding-right:.5rem}.grid-row.desktop\:grid-gap-lg{margin-left:-.75rem;margin-right:-.75rem}.grid-row.desktop\:grid-gap-lg>*{padding-left:.75rem;padding-right:.75rem}}[class*=grid-col]{box-sizing:border-box;position:relative;width:100%}.grid-col{flex:1 1;min-width:1px}.grid-col,.grid-col-auto{max-width:100%;width:auto}.grid-col-auto{flex:0 1 auto}.grid-col-fill{flex:1 1;max-width:100%;min-width:1px;width:auto}.grid-col-1{flex:0 1 auto;width:8.3333333333%}.grid-col-2{flex:0 1 auto;width:16.6666666667%}.grid-col-3{flex:0 1 auto;width:25%}.grid-col-4{flex:0 1 auto;width:33.3333333333%}.grid-col-5{flex:0 1 auto;width:41.6666666667%}.grid-col-6{flex:0 1 auto;width:50%}.grid-col-7{flex:0 1 auto;width:58.3333333333%}.grid-col-8{flex:0 1 auto;width:66.6666666667%}.grid-col-9{flex:0 1 auto;width:75%}.grid-col-10{flex:0 1 auto;width:83.3333333333%}.grid-col-11{flex:0 1 auto;width:91.6666666667%}.grid-col-12{flex:0 1 auto;width:100%}@media (min-width:30em){.mobile-lg\:grid-col,.mobile-lg\:grid-col-fill{flex:1 1;max-width:100%;min-width:1px;width:auto}.mobile-lg\:grid-col-auto{flex:0 1 auto;max-width:100%;width:auto}.mobile-lg\:grid-col-1{flex:0 1 auto;width:8.3333333333%}.mobile-lg\:grid-col-2{flex:0 1 auto;width:16.6666666667%}.mobile-lg\:grid-col-3{flex:0 1 auto;width:25%}.mobile-lg\:grid-col-4{flex:0 1 auto;width:33.3333333333%}.mobile-lg\:grid-col-5{flex:0 1 auto;width:41.6666666667%}.mobile-lg\:grid-col-6{flex:0 1 auto;width:50%}.mobile-lg\:grid-col-7{flex:0 1 auto;width:58.3333333333%}.mobile-lg\:grid-col-8{flex:0 1 auto;width:66.6666666667%}.mobile-lg\:grid-col-9{flex:0 1 auto;width:75%}.mobile-lg\:grid-col-10{flex:0 1 auto;width:83.3333333333%}.mobile-lg\:grid-col-11{flex:0 1 auto;width:91.6666666667%}.mobile-lg\:grid-col-12{flex:0 1 auto;width:100%}}@media (min-width:40em){.tablet\:grid-col,.tablet\:grid-col-fill{flex:1 1;max-width:100%;min-width:1px;width:auto}.tablet\:grid-col-auto{flex:0 1 auto;max-width:100%;width:auto}.tablet\:grid-col-1{flex:0 1 auto;width:8.3333333333%}.tablet\:grid-col-2{flex:0 1 auto;width:16.6666666667%}.tablet\:grid-col-3{flex:0 1 auto;width:25%}.tablet\:grid-col-4{flex:0 1 auto;width:33.3333333333%}.tablet\:grid-col-5{flex:0 1 auto;width:41.6666666667%}.tablet\:grid-col-6{flex:0 1 auto;width:50%}.tablet\:grid-col-7{flex:0 1 auto;width:58.3333333333%}.tablet\:grid-col-8{flex:0 1 auto;width:66.6666666667%}.tablet\:grid-col-9{flex:0 1 auto;width:75%}.tablet\:grid-col-10{flex:0 1 auto;width:83.3333333333%}.tablet\:grid-col-11{flex:0 1 auto;width:91.6666666667%}.tablet\:grid-col-12{flex:0 1 auto;width:100%}}@media (min-width:64em){.desktop\:grid-col,.desktop\:grid-col-fill{flex:1 1;max-width:100%;min-width:1px;width:auto}.desktop\:grid-col-auto{flex:0 1 auto;max-width:100%;width:auto}.desktop\:grid-col-1{flex:0 1 auto;width:8.3333333333%}.desktop\:grid-col-2{flex:0 1 auto;width:16.6666666667%}.desktop\:grid-col-3{flex:0 1 auto;width:25%}.desktop\:grid-col-4{flex:0 1 auto;width:33.3333333333%}.desktop\:grid-col-5{flex:0 1 auto;width:41.6666666667%}.desktop\:grid-col-6{flex:0 1 auto;width:50%}.desktop\:grid-col-7{flex:0 1 auto;width:58.3333333333%}.desktop\:grid-col-8{flex:0 1 auto;width:66.6666666667%}.desktop\:grid-col-9{flex:0 1 auto;width:75%}.desktop\:grid-col-10{flex:0 1 auto;width:83.3333333333%}.desktop\:grid-col-11{flex:0 1 auto;width:91.6666666667%}.desktop\:grid-col-12{flex:0 1 auto;width:100%}}.grid-offset-1{margin-left:8.3333333333%}.grid-offset-2{margin-left:16.6666666667%}.grid-offset-3{margin-left:25%}.grid-offset-4{margin-left:33.3333333333%}.grid-offset-5{margin-left:41.6666666667%}.grid-offset-6{margin-left:50%}.grid-offset-7{margin-left:58.3333333333%}.grid-offset-8{margin-left:66.6666666667%}.grid-offset-9{margin-left:75%}.grid-offset-10{margin-left:83.3333333333%}.grid-offset-11{margin-left:91.6666666667%}.grid-offset-12{margin-left:100%}.grid-offset-none{margin-left:0}@media (min-width:30em){.mobile-lg\:grid-offset-1{margin-left:8.3333333333%}.mobile-lg\:grid-offset-2{margin-left:16.6666666667%}.mobile-lg\:grid-offset-3{margin-left:25%}.mobile-lg\:grid-offset-4{margin-left:33.3333333333%}.mobile-lg\:grid-offset-5{margin-left:41.6666666667%}.mobile-lg\:grid-offset-6{margin-left:50%}.mobile-lg\:grid-offset-7{margin-left:58.3333333333%}.mobile-lg\:grid-offset-8{margin-left:66.6666666667%}.mobile-lg\:grid-offset-9{margin-left:75%}.mobile-lg\:grid-offset-10{margin-left:83.3333333333%}.mobile-lg\:grid-offset-11{margin-left:91.6666666667%}.mobile-lg\:grid-offset-12{margin-left:100%}.mobile-lg\:grid-offset-none{margin-left:0}}@media (min-width:40em){.tablet\:grid-offset-1{margin-left:8.3333333333%}.tablet\:grid-offset-2{margin-left:16.6666666667%}.tablet\:grid-offset-3{margin-left:25%}.tablet\:grid-offset-4{margin-left:33.3333333333%}.tablet\:grid-offset-5{margin-left:41.6666666667%}.tablet\:grid-offset-6{margin-left:50%}.tablet\:grid-offset-7{margin-left:58.3333333333%}.tablet\:grid-offset-8{margin-left:66.6666666667%}.tablet\:grid-offset-9{margin-left:75%}.tablet\:grid-offset-10{margin-left:83.3333333333%}.tablet\:grid-offset-11{margin-left:91.6666666667%}.tablet\:grid-offset-12{margin-left:100%}.tablet\:grid-offset-none{margin-left:0}}@media (min-width:64em){.desktop\:grid-offset-1{margin-left:8.3333333333%}.desktop\:grid-offset-2{margin-left:16.6666666667%}.desktop\:grid-offset-3{margin-left:25%}.desktop\:grid-offset-4{margin-left:33.3333333333%}.desktop\:grid-offset-5{margin-left:41.6666666667%}.desktop\:grid-offset-6{margin-left:50%}.desktop\:grid-offset-7{margin-left:58.3333333333%}.desktop\:grid-offset-8{margin-left:66.6666666667%}.desktop\:grid-offset-9{margin-left:75%}.desktop\:grid-offset-10{margin-left:83.3333333333%}.desktop\:grid-offset-11{margin-left:91.6666666667%}.desktop\:grid-offset-12{margin-left:100%}.desktop\:grid-offset-none{margin-left:0}}@media (max-width:29.99em){.usa-table--stacked thead{display:none}.usa-table--stacked td,.usa-table--stacked th{border-bottom-width:0;display:block;width:100%}.usa-table--stacked tr{border-bottom:.25rem solid #1b1b1b;border-top-width:0;display:block;width:100%}.usa-table--stacked tr td:first-child,.usa-table--stacked tr th:first-child{border-top-width:0}.usa-table--stacked tr:nth-child(odd) td,.usa-table--stacked tr:nth-child(odd) th{background-color:inherit}.usa-table--stacked tr:first-child td:first-child,.usa-table--stacked tr:first-child th:first-child{border-top:.25rem solid #1b1b1b}.usa-table--stacked td[data-label],.usa-table--stacked th[data-label]{padding-bottom:.75rem}.usa-table--stacked td[data-label]:before,.usa-table--stacked th[data-label]:before{content:attr(data-label);display:block;font-weight:700;margin:-.5rem -1rem 0;padding:.75rem 1rem .25rem}.usa-table--stacked-header thead{display:none}.usa-table--stacked-header td,.usa-table--stacked-header th{border-bottom-width:0;display:block;width:100%}.usa-table--stacked-header tr{border-bottom:.25rem solid #1b1b1b;border-top-width:0;display:block;width:100%}.usa-table--stacked-header tr td:first-child,.usa-table--stacked-header tr th:first-child{border-top-width:0}.usa-table--stacked-header tr:nth-child(odd) td,.usa-table--stacked-header tr:nth-child(odd) th{background-color:inherit}.usa-table--stacked-header tr:first-child td:first-child,.usa-table--stacked-header tr:first-child th:first-child{border-top:.25rem solid #1b1b1b}.usa-table--stacked-header td[data-label],.usa-table--stacked-header th[data-label]{padding-bottom:.75rem}.usa-table--stacked-header td[data-label]:before,.usa-table--stacked-header th[data-label]:before{content:attr(data-label);display:block;font-weight:700;margin:-.5rem -1rem 0;padding:.75rem 1rem .25rem}.usa-table--stacked-header tr td:first-child,.usa-table--stacked-header tr th:first-child{background-color:#dfe1e2;color:#1b1b1b;font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.06rem;font-weight:700;line-height:1.1;padding:.75rem 1rem}.usa-table--stacked-header tr td:first-child:before,.usa-table--stacked-header tr th:first-child:before{display:none}}.usa-tag{background-color:#565c65;border-radius:2px;color:#fff;font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:.93rem;margin-right:.25rem;padding:1px .5rem;text-transform:uppercase}.usa-tag:only-of-type{margin-right:0}.usa-tag--big{font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.06rem;padding-left:.5rem;padding-right:.5rem}.usa-paragraph{line-height:1.5;margin-bottom:0;margin-top:0;max-width:68ex}*+.usa-paragraph,.usa-paragraph+*{margin-top:1em}.usa-content ol:not(.usa-accordion):not(.usa-accordion--bordered),.usa-content p,.usa-content ul:not(.usa-accordion):not(.usa-accordion--bordered){max-width:68ex}.usa-display{clear:both;font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.46rem;font-weight:700;line-height:1.1;margin-bottom:0;margin-top:0}*+.usa-display{margin-top:1.5em}.usa-display+*{margin-top:1em}@media (min-width:30em){.usa-display{clear:both;font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:2.66rem;font-weight:700;line-height:1.1;margin-bottom:0;margin-top:0}*+.usa-display{margin-top:1.5em}.usa-display+*{margin-top:1em}}@media (min-width:40em){.usa-display{clear:both;font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:3.19rem;font-weight:700;line-height:1.1;margin-bottom:0;margin-top:0}*+.usa-display{margin-top:1.5em}.usa-display+*{margin-top:1em}}.usa-intro{font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.46rem;font-weight:400;line-height:1.6;max-width:88ex}.usa-dark-background{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;background-color:#3d4551}.usa-dark-background p,.usa-dark-background span{color:#fff}.usa-dark-background a,.usa-dark-background a:visited{color:#dfe1e2}.usa-dark-background a:hover{color:#f0f0f0}.usa-prose>p{line-height:1.5;margin-bottom:0;margin-top:0;max-width:68ex}.usa-prose>*+p,.usa-prose>p+*{margin-top:1em}.usa-prose>h1,.usa-prose>h2,.usa-prose>h3,.usa-prose>h4,.usa-prose>h5,.usa-prose>h6{clear:both;margin-bottom:0;margin-top:0}.usa-prose>*+h1,.usa-prose>*+h2,.usa-prose>*+h3,.usa-prose>*+h4,.usa-prose>*+h5,.usa-prose>*+h6{margin-top:1.5em}.usa-prose>h1+*,.usa-prose>h2+*,.usa-prose>h3+*,.usa-prose>h4+*,.usa-prose>h5+*,.usa-prose>h6+*{margin-top:1em}.usa-link{color:#005ea2;text-decoration:underline}.usa-link:visited{color:#54278f}.usa-link:hover{color:#1a4480}.usa-link:active{color:#162e51}.usa-link:focus{outline:.25rem solid #2491ff;outline-offset:0}.usa-link--external:after{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGZpbGw9IiMwMDVlYTIiIGQ9Ik0xOSAxOUg1VjVoN1YzSDVhMiAyIDAgMCAwLTIgMnYxNGEyIDIgMCAwIDAgMiAyaDE0YzEuMSAwIDItLjkgMi0ydi03aC0ydjd6TTE0IDN2MmgzLjU5bC05LjgzIDkuODMgMS40MSAxLjQxTDE5IDYuNDFWMTBoMlYzaC03eiIvPjwvc3ZnPg==);background-position:50% 60%;background-repeat:no-repeat;background-size:100%;content:"";display:inline;margin-left:2px;padding-left:.65em}.usa-link--external:hover:after{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGZpbGw9IiMwYjQ3NzgiIGQ9Ik0xOSAxOUg1VjVoN1YzSDVhMiAyIDAgMCAwLTIgMnYxNGEyIDIgMCAwIDAgMiAyaDE0YzEuMSAwIDItLjkgMi0ydi03aC0ydjd6TTE0IDN2MmgzLjU5bC05LjgzIDkuODMgMS40MSAxLjQxTDE5IDYuNDFWMTBoMlYzaC03eiIvPjwvc3ZnPg==),linear-gradient(transparent,transparent);background-repeat:no-repeat}.usa-link--external.usa-link--alt:after{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGZpbGw9IiNmMGYwZjAiIGQ9Ik0xOSAxOUg1VjVoN1YzSDVhMiAyIDAgMCAwLTIgMnYxNGEyIDIgMCAwIDAgMiAyaDE0YzEuMSAwIDItLjkgMi0ydi03aC0ydjd6TTE0IDN2MmgzLjU5bC05LjgzIDkuODMgMS40MSAxLjQxTDE5IDYuNDFWMTBoMlYzaC03eiIvPjwvc3ZnPg==);background-position:50% 60%;background-repeat:no-repeat;background-size:100%;content:"";display:inline;margin-left:2px;padding-left:.65em}.usa-link--external.usa-link--alt:hover:after{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0xOSAxOUg1VjVoN1YzSDVhMiAyIDAgMCAwLTIgMnYxNGEyIDIgMCAwIDAgMiAyaDE0YzEuMSAwIDItLjkgMi0ydi03aC0ydjd6TTE0IDN2MmgzLjU5bC05LjgzIDkuODMgMS40MSAxLjQxTDE5IDYuNDFWMTBoMlYzaC03eiIvPjwvc3ZnPg==),linear-gradient(transparent,transparent);background-repeat:no-repeat}.usa-list--unstyled{list-style-type:none;margin-bottom:0;margin-top:0;padding-left:0}.usa-list--unstyled>li{margin-bottom:0;max-width:unset}.usa-prose .usa-list--unstyled{list-style-type:none;margin-bottom:0;margin-top:0;padding-left:0}.usa-prose .usa-list--unstyled>li{margin-bottom:0;max-width:unset}.usa-prose{font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.06rem;line-height:1.5}.usa-prose>a{color:#005ea2;text-decoration:underline}.usa-prose>a:visited{color:#54278f}.usa-prose>a:hover{color:#1a4480}.usa-prose>a:active{color:#162e51}.usa-prose>a:focus{outline:.25rem solid #2491ff;outline-offset:0}.usa-prose>h1{font-size:2.66rem}.usa-prose>h1,.usa-prose>h2{font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-weight:700;line-height:1.1}.usa-prose>h2{font-size:2.13rem}.usa-prose>h3{font-size:1.46rem}.usa-prose>h3,.usa-prose>h4{font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-weight:700;line-height:1.1}.usa-prose>h4{font-size:1.06rem}.usa-prose>h5{font-size:1rem;font-weight:700}.usa-prose>h5,.usa-prose>h6{font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;line-height:1.1}.usa-prose>h6{font-size:.87rem;font-weight:400;letter-spacing:.025em;text-transform:uppercase}@media (max-width:29.99em){.usa-prose>.usa-table--stacked thead{display:none}.usa-prose>.usa-table--stacked td,.usa-prose>.usa-table--stacked th{border-bottom-width:0;display:block;width:100%}.usa-prose>.usa-table--stacked tr{border-bottom:.25rem solid #1b1b1b;border-top-width:0;display:block;width:100%}.usa-prose>.usa-table--stacked tr td:first-child,.usa-prose>.usa-table--stacked tr th:first-child{border-top-width:0}.usa-prose>.usa-table--stacked tr:nth-child(odd) td,.usa-prose>.usa-table--stacked tr:nth-child(odd) th{background-color:inherit}.usa-prose>.usa-table--stacked tr:first-child td:first-child,.usa-prose>.usa-table--stacked tr:first-child th:first-child{border-top:.25rem solid #1b1b1b}.usa-prose>.usa-table--stacked td[data-label],.usa-prose>.usa-table--stacked th[data-label]{padding-bottom:.75rem}.usa-prose>.usa-table--stacked td[data-label]:before,.usa-prose>.usa-table--stacked th[data-label]:before{content:attr(data-label);display:block;font-weight:700;margin:-.5rem -1rem 0;padding:.75rem 1rem .25rem}.usa-prose>.usa-table--stacked-header thead{display:none}.usa-prose>.usa-table--stacked-header td,.usa-prose>.usa-table--stacked-header th{border-bottom-width:0;display:block;width:100%}.usa-prose>.usa-table--stacked-header tr{border-bottom:.25rem solid #1b1b1b;border-top-width:0;display:block;width:100%}.usa-prose>.usa-table--stacked-header tr td:first-child,.usa-prose>.usa-table--stacked-header tr th:first-child{border-top-width:0}.usa-prose>.usa-table--stacked-header tr:nth-child(odd) td,.usa-prose>.usa-table--stacked-header tr:nth-child(odd) th{background-color:inherit}.usa-prose>.usa-table--stacked-header tr:first-child td:first-child,.usa-prose>.usa-table--stacked-header tr:first-child th:first-child{border-top:.25rem solid #1b1b1b}.usa-prose>.usa-table--stacked-header td[data-label],.usa-prose>.usa-table--stacked-header th[data-label]{padding-bottom:.75rem}.usa-prose>.usa-table--stacked-header td[data-label]:before,.usa-prose>.usa-table--stacked-header th[data-label]:before{content:attr(data-label);display:block;font-weight:700;margin:-.5rem -1rem 0;padding:.75rem 1rem .25rem}.usa-prose>.usa-table--stacked-header tr td:first-child,.usa-prose>.usa-table--stacked-header tr th:first-child{background-color:#dfe1e2;color:#1b1b1b;font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.06rem;font-weight:700;line-height:1.1;padding:.75rem 1rem}.usa-prose>.usa-table--stacked-header tr td:first-child:before,.usa-prose>.usa-table--stacked-header tr th:first-child:before{display:none}}.usa-accordion{color:#1b1b1b;font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.06rem;line-height:1.5;list-style-type:none;margin:0;padding:0;width:100%}.usa-accordion>li{margin-bottom:0;max-width:unset}.usa-accordion>ul li ul{list-style:disc}.usa-accordion>ul li ul>li>ul{list-style:circle}.usa-accordion>ul li ul>li>ul>li>ul{list-style:square}.usa-accordion+.usa-accordion,.usa-accordion+.usa-accordion--bordered{margin-top:.5rem}.usa-accordion--bordered .usa-accordion__content{border-bottom:.25rem solid #f0f0f0;border-left:.25rem solid #f0f0f0;border-right:.25rem solid #f0f0f0;padding-bottom:1rem}.usa-accordion--bordered .usa-accordion__heading{margin-bottom:0}.usa-accordion__heading,.usa-prose .usa-accordion__heading{font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.06rem;line-height:.9;margin:0}.usa-accordion__heading:not(:first-child),.usa-prose .usa-accordion__heading:not(:first-child){margin-top:.5rem}.usa-accordion__content{background-color:#fff;margin-top:0;overflow:auto;padding:1rem 1.25rem .75rem}.usa-accordion__content>:first-child{margin-top:0}.usa-accordion__content>:last-child{margin-bottom:0}.usa-accordion__button{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:subpixel-antialiased;background-color:transparent;background-color:#f0f0f0;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGQ9Ik0xOSAxM0g1di0yaDE0djJ6Ii8+PC9zdmc+),linear-gradient(transparent,transparent);background-position:right 1.25rem center;background-repeat:no-repeat;background-size:1.5rem;border:0;border-radius:0;box-shadow:none;color:#005ea2;color:#1b1b1b;cursor:pointer;display:inline-block;font-weight:400;font-weight:700;margin:0;padding:1rem 3.5rem 1rem 1.25rem;text-align:left;text-decoration:underline;text-decoration:none;width:100%}.usa-accordion__button:visited{color:#54278f}.usa-accordion__button:hover{color:#1a4480}.usa-accordion__button:active{color:#162e51}.usa-accordion__button:focus{outline:.25rem solid #2491ff;outline-offset:0}.usa-accordion__button:active,.usa-accordion__button:hover{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:subpixel-antialiased;background-color:transparent;box-shadow:none;text-decoration:underline}.usa-accordion__button:hover{background-color:#dfe1e2;color:#1b1b1b;text-decoration:none}.usa-accordion__button[aria-expanded=false]{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGQ9Ik0xOSAxM2gtNnY2aC0ydi02SDV2LTJoNlY1aDJ2Nmg2djJ6Ii8+PC9zdmc+),linear-gradient(transparent,transparent);background-repeat:no-repeat;background-size:1.5rem}.usa-alert{background-color:#f0f0f0;background-position:1.75rem .75rem;background-repeat:no-repeat;background-size:2.5rem;font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.06rem;line-height:1.5;padding:1.25rem 1.25rem 1rem 1.75rem;position:relative}*+.usa-alert{margin-top:1rem}.usa-alert:before{background-color:#a9aeb1;content:"";height:100%;left:0;position:absolute;top:0;width:.5rem}.usa-alert .usa-alert__body>.usa-list,.usa-alert>.usa-list{padding-left:0}.usa-alert .usa-alert__body>.usa-list:last-child,.usa-alert>.usa-list:last-child{margin-bottom:0}.usa-alert__icon{display:table-cell;padding-right:.5rem}.usa-alert__body{display:table-cell;vertical-align:top}.usa-alert__heading{font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.46rem;line-height:.9;margin-bottom:.5rem;margin-top:0}.usa-alert__text{margin-bottom:0;margin-top:0}.usa-alert__text a{color:#005ea2;text-decoration:underline}.usa-alert__text a:visited{color:#54278f}.usa-alert__text a:hover{color:#1a4480}.usa-alert__text a:active{color:#162e51}.usa-alert__text a:focus{outline:.25rem solid #2491ff;outline-offset:0}.usa-alert__text:only-child{margin-bottom:.5rem;padding-top:.25rem}.usa-alert--success{background-color:#ecf3ec;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0tMiAxNS01LTUgMS40MS0xLjQxTDEwIDE0LjE3bDcuNTktNy41OUwxOSA4bC05IDl6Ii8+PC9zdmc+),linear-gradient(transparent,transparent);background-repeat:no-repeat;color:#1b1b1b}.usa-alert--success:before{background-color:#00a91c}.usa-alert--success .usa-alert__body{padding-left:3.75rem}.usa-alert--success .usa-link{color:#005ea2}.usa-alert--success .usa-link:visited{color:#54278f}.usa-alert--success .usa-link:active,.usa-alert--success .usa-link:hover{color:#1a4480}.usa-alert--success.usa-alert--no-icon{background-image:none}.usa-alert--success.usa-alert--no-icon .usa-alert__body{padding-left:0}.usa-alert--warning{background-color:#faf3d1;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGQ9Ik0xIDIxaDIyTDEyIDIgMSAyMXptMTItM2gtMnYtMmgydjJ6bTAtNGgtMnYtNGgydjR6Ii8+PC9zdmc+),linear-gradient(transparent,transparent);background-repeat:no-repeat;color:#1b1b1b}.usa-alert--warning:before{background-color:#ffbe2e}.usa-alert--warning .usa-alert__body{padding-left:3.75rem}.usa-alert--warning .usa-link{color:#005ea2}.usa-alert--warning .usa-link:visited{color:#54278f}.usa-alert--warning .usa-link:active,.usa-alert--warning .usa-link:hover{color:#1a4480}.usa-alert--warning.usa-alert--no-icon{background-image:none}.usa-alert--warning.usa-alert--no-icon .usa-alert__body{padding-left:0}.usa-alert--error{background-color:#f4e3db;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0xIDE1aC0ydi0yaDJ2MnptMC00aC0yVjdoMnY2eiIvPjwvc3ZnPg==),linear-gradient(transparent,transparent);background-repeat:no-repeat;color:#1b1b1b}.usa-alert--error:before{background-color:#d54309}.usa-alert--error .usa-alert__body{padding-left:3.75rem}.usa-alert--error .usa-link{color:#005ea2}.usa-alert--error .usa-link:visited{color:#54278f}.usa-alert--error .usa-link:active,.usa-alert--error .usa-link:hover{color:#1a4480}.usa-alert--error.usa-alert--no-icon{background-image:none}.usa-alert--error.usa-alert--no-icon .usa-alert__body{padding-left:0}.usa-alert--info{background-color:#e7f6f8;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0xIDE1aC0ydi02aDJ2NnptMC04aC0yVjdoMnYyeiIvPjwvc3ZnPg==),linear-gradient(transparent,transparent);background-repeat:no-repeat;color:#1b1b1b}.usa-alert--info:before{background-color:#00bde3}.usa-alert--info .usa-alert__body{padding-left:3.75rem}.usa-alert--info .usa-link{color:#005ea2}.usa-alert--info .usa-link:visited{color:#54278f}.usa-alert--info .usa-link:active,.usa-alert--info .usa-link:hover{color:#1a4480}.usa-alert--info.usa-alert--no-icon{background-image:none}.usa-alert--info.usa-alert--no-icon .usa-alert__body{padding-left:0}.usa-alert--emergency{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0xIDE1aC0ydi0yaDJ2MnptMC00aC0yVjdoMnY2eiIvPjwvc3ZnPg==),linear-gradient(transparent,transparent);background-repeat:no-repeat;color:#fff}.usa-alert--emergency,.usa-alert--emergency:before{background-color:#9c3d10}.usa-alert--emergency .usa-alert__body{padding-left:3.75rem}.usa-alert--emergency .usa-link,.usa-alert--emergency .usa-link:visited{color:#dfe1e2}.usa-alert--emergency .usa-link:active,.usa-alert--emergency .usa-link:hover{color:#f0f0f0}.usa-alert--emergency.usa-alert--no-icon{background-image:none}.usa-alert--emergency.usa-alert--no-icon .usa-alert__body{padding-left:0}.usa-alert--slim{background-position:1.75rem .75rem;background-size:1.5rem;padding-bottom:.5rem;padding-top:.5rem}.usa-alert--slim .usa-alert__body{padding-left:2rem}.usa-alert--slim .usa-alert__text:only-child{margin-bottom:.25rem;padding-top:.25rem}.usa-alert--no-heading{background-position:1.75rem 1rem}.usa-alert--validation{background-position:1.75rem calc(1.25rem - 2px);background-size:1.5rem}.usa-alert--validation .usa-alert__body{padding-left:2.5rem}.usa-alert--validation .usa-checklist{margin-top:1rem}.usa-identifier{background-color:#1b1b1b;color:#fff;font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.06rem;line-height:1.3;padding-bottom:1rem}.usa-identifier__container{margin-left:auto;margin-right:auto;max-width:64rem;padding-left:1rem;padding-right:1rem}@media (min-width:64em){.usa-identifier__container{padding-left:2rem;padding-right:2rem}}.usa-identifier__section{padding-bottom:1rem;padding-top:1rem}@media (min-width:40em){.usa-identifier__section--masthead .usa-identifier__container{align-items:center;display:flex}}.usa-identifier__logos{display:flex;margin-right:1rem}.usa-identifier__logo{display:block;height:3rem;text-decoration:none}.usa-identifier__logo+.usa-identifier__logo{margin-left:.5rem}.usa-identifier__logo-img{height:100%;width:auto}.usa-identifier__identity{flex:1 1;margin-top:1rem}@media (min-width:40em){.usa-identifier__identity{margin-top:0}}.usa-identifier__identity-disclaimer,.usa-identifier__identity-domain{margin:0;padding:0}.usa-identifier__identity-domain{color:#a9aeb1}.usa-identifier__identity-disclaimer{font-weight:700}.usa-identifier__identity-disclaimer a,.usa-identifier__identity-disclaimer a:visited{color:#dfe1e2}.usa-identifier__identity-disclaimer a:active,.usa-identifier__identity-disclaimer a:hover{color:#f0f0f0}@media (min-width:40em){.usa-identifier__section--required-links{padding-bottom:.5rem;padding-top:.5rem}}@media (min-width:64em){.usa-identifier__section--required-links{font-size:1rem}}.usa-identifier__required-links-list{list-style-type:none;margin-bottom:0;margin-top:0;padding-left:0}@media (min-width:40em){.usa-identifier__required-links-list{-webkit-column-count:2;column-count:2;-webkit-column-fill:balance;column-fill:balance;-webkit-column-gap:2rem;column-gap:2rem}}@media (min-width:64em){.usa-identifier__required-links-list{-webkit-column-count:4;column-count:4}}.usa-identifier__required-links-item{-webkit-column-break-inside:avoid;break-inside:avoid;margin-bottom:.75rem}.usa-identifier__required-links-item:last-child{margin-bottom:0}@media (min-width:64em){.usa-identifier__required-links-item{margin-bottom:.5rem}}.usa-identifier__required-link{color:#a9aeb1;display:inline-block}.usa-identifier__required-link:visited{color:#a9aeb1}.usa-identifier__required-link:active,.usa-identifier__required-link:hover{color:#dfe1e2}.usa-identifier__section--usagov a{color:#dfe1e2;display:inline-block;font-weight:700;margin-top:.5rem}.usa-identifier__section--usagov a:visited{color:#dfe1e2}.usa-identifier__section--usagov a:active,.usa-identifier__section--usagov a:hover{color:#f0f0f0}@media (min-width:40em){.usa-identifier__section--usagov a{margin-top:0}.usa-identifier__usagov-description{display:inline-flex}}.usa-banner{background-color:#f0f0f0;font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.06rem;line-height:1.5}@media (min-width:40em){.usa-banner{font-size:.87rem;padding-bottom:0}}.usa-banner .usa-accordion{font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.06rem;line-height:1.5}.usa-banner__content,.usa-banner__header{color:#1b1b1b}.usa-banner__content{background-color:transparent;font-size:1rem;margin-left:auto;margin-right:auto;max-width:64rem;overflow:hidden;padding:.25rem 1rem 1rem .5rem;width:100%}@media (min-width:64em){.usa-banner__content{padding-left:2rem;padding-right:2rem}}@media (min-width:40em){.usa-banner__content{padding-bottom:1.5rem;padding-top:1.5rem}}.usa-banner__content p:first-child{margin:0}.usa-banner__guidance{align-items:flex-start;display:flex;max-width:64ex;padding-top:1rem}@media (min-width:40em){.usa-banner__guidance{padding-top:0}}.usa-banner__lock-image{height:1.5ex;width:1.21875ex}.usa-banner__lock-image path{fill:currentColor}.usa-banner__inner{align-items:flex-start;display:flex;flex-wrap:wrap;margin-left:auto;margin-right:auto;max-width:64rem;padding-left:1rem;padding-right:0}@media (min-width:64em){.usa-banner__inner{padding-left:2rem;padding-right:2rem}}@media (min-width:40em){.usa-banner__inner{align-items:center}}.usa-banner__header{font-size:.8rem;font-weight:400;min-height:3rem;padding-bottom:.5rem;padding-top:.5rem;position:relative}@media (min-width:40em){.usa-banner__header{min-height:0;padding-bottom:.25rem;padding-top:.25rem}}.usa-banner__header-text{font-size:.8rem;line-height:1.1;margin-bottom:0;margin-top:0}.usa-banner__header-action{color:#005ea2;line-height:1.1;margin-bottom:0;margin-top:2px;text-decoration:underline}.usa-banner__header-action:after{background:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2NCAzOSI+PHBhdGggZD0iTTYzLjM2IDQuMDA0IDYwLjE1NS43NDFjLS40MjctLjQzNi0uOTE5LS42NTQtMS40NzUtLjY1NC0uNTU1IDAtMS4wNDcuMjE4LTEuNDc1LjY1NEwzMiAyNi40IDYuNzk4Ljc0QzYuMzcuMzA2IDUuODc4LjA4OCA1LjMyMy4wODhjLS41NTYgMC0xLjA0OC4yMTgtMS40NzYuNjU0TC42NDIgNC4wMDVDLjIxMyA0LjQ0IDAgNC45NDEgMCA1LjUwN2MwIC41NjUuMjE0IDEuMDY2LjY0MiAxLjUwMWwyOS44ODMgMzAuNDI3Yy40MjcuNDM1LjkyLjY1MiAxLjQ3NS42NTIuNTU2IDAgMS4wNDctLjIxNyAxLjQ3NC0uNjUyTDYzLjM2MSA3LjAwOGMuNDI3LS40MzUuNjM5LS45MzYuNjM5LTEuNTAxIDAtLjU2Ni0uMjEyLTEuMDY3LS42NC0xLjUwM3oiLz48L3N2Zz4=) no-repeat 50%/1.3128205128ex .8ex;content:"";display:inline-block;height:.8ex;margin-left:2px;vertical-align:middle;width:1.3128205128ex}@supports((-webkit-mask:url("")) or (mask:url(""))){.usa-banner__header-action:after{background:none;background-color:#005ea2;-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2NCAzOSI+PHBhdGggZD0iTTYzLjM2IDQuMDA0IDYwLjE1NS43NDFjLS40MjctLjQzNi0uOTE5LS42NTQtMS40NzUtLjY1NC0uNTU1IDAtMS4wNDcuMjE4LTEuNDc1LjY1NEwzMiAyNi40IDYuNzk4Ljc0QzYuMzcuMzA2IDUuODc4LjA4OCA1LjMyMy4wODhjLS41NTYgMC0xLjA0OC4yMTgtMS40NzYuNjU0TC42NDIgNC4wMDVDLjIxMyA0LjQ0IDAgNC45NDEgMCA1LjUwN2MwIC41NjUuMjE0IDEuMDY2LjY0MiAxLjUwMWwyOS44ODMgMzAuNDI3Yy40MjcuNDM1LjkyLjY1MiAxLjQ3NS42NTIuNTU2IDAgMS4wNDctLjIxNyAxLjQ3NC0uNjUyTDYzLjM2MSA3LjAwOGMuNDI3LS40MzUuNjM5LS45MzYuNjM5LTEuNTAxIDAtLjU2Ni0uMjEyLTEuMDY3LS42NC0xLjUwM3oiLz48L3N2Zz4=) no-repeat center/1.3128205128ex .8ex;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2NCAzOSI+PHBhdGggZD0iTTYzLjM2IDQuMDA0IDYwLjE1NS43NDFjLS40MjctLjQzNi0uOTE5LS42NTQtMS40NzUtLjY1NC0uNTU1IDAtMS4wNDcuMjE4LTEuNDc1LjY1NEwzMiAyNi40IDYuNzk4Ljc0QzYuMzcuMzA2IDUuODc4LjA4OCA1LjMyMy4wODhjLS41NTYgMC0xLjA0OC4yMTgtMS40NzYuNjU0TC42NDIgNC4wMDVDLjIxMyA0LjQ0IDAgNC45NDEgMCA1LjUwN2MwIC41NjUuMjE0IDEuMDY2LjY0MiAxLjUwMWwyOS44ODMgMzAuNDI3Yy40MjcuNDM1LjkyLjY1MiAxLjQ3NS42NTIuNTU2IDAgMS4wNDctLjIxNyAxLjQ3NC0uNjUyTDYzLjM2MSA3LjAwOGMuNDI3LS40MzUuNjM5LS45MzYuNjM5LTEuNTAxIDAtLjU2Ni0uMjEyLTEuMDY3LS42NC0xLjUwM3oiLz48L3N2Zz4=) no-repeat center/1.3128205128ex .8ex}.usa-banner__header-action:after:hover{background-color:#1a4480}}.usa-banner__header-action:hover:after{background-color:#1a4480;content:""}.usa-banner__header-action:visited{color:#54278f}.usa-banner__header-action:active,.usa-banner__header-action:hover{color:#1a4480}@media (min-width:40em){.usa-banner__header-action{display:none}}.usa-banner__header-flag{float:left;margin-right:.5rem;width:1rem}@media (min-width:40em){.usa-banner__header-flag{margin-right:.5rem;padding-top:0}}.usa-banner__header--expanded{padding-right:3.5rem}@media (min-width:40em){.usa-banner__header--expanded{background-color:transparent;display:block;font-size:.8rem;font-weight:400;min-height:0;padding-right:0}}.usa-banner__header--expanded .usa-banner__inner{margin-left:0}@media (min-width:40em){.usa-banner__header--expanded .usa-banner__inner{margin-left:auto}}.usa-banner__header--expanded .usa-banner__header-action{display:none}.usa-banner__button{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:subpixel-antialiased;background-color:transparent;border:0;border-radius:0;bottom:0;box-shadow:none;color:#005ea2;display:block;font-size:.8rem;font-weight:400;height:auto;left:0;line-height:1.1;margin:0;padding:0;position:absolute;text-align:left;text-decoration:underline;text-decoration:none;top:0;vertical-align:baseline;width:auto}.usa-banner__button:hover{color:#1a4480}.usa-banner__button:active{color:#162e51}.usa-banner__button:focus{outline:.25rem solid #2491ff;outline-offset:0}.usa-banner__button:active,.usa-banner__button:hover{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:subpixel-antialiased;background-color:transparent;box-shadow:none;text-decoration:underline}.usa-banner__button:visited{color:#54278f}.usa-banner__button:active,.usa-banner__button:hover{color:#1a4480}@media (max-width:39.99em){.usa-banner__button{width:100%}}@media (min-width:40em){.usa-banner__button{bottom:auto;color:#005ea2;display:inline;left:auto;margin-left:.5rem;position:static;position:relative;right:auto;top:auto}.usa-banner__button:after{background:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2NCAzOSI+PHBhdGggZD0iTTYzLjM2IDQuMDA0IDYwLjE1NS43NDFjLS40MjctLjQzNi0uOTE5LS42NTQtMS40NzUtLjY1NC0uNTU1IDAtMS4wNDcuMjE4LTEuNDc1LjY1NEwzMiAyNi40IDYuNzk4Ljc0QzYuMzcuMzA2IDUuODc4LjA4OCA1LjMyMy4wODhjLS41NTYgMC0xLjA0OC4yMTgtMS40NzYuNjU0TC42NDIgNC4wMDVDLjIxMyA0LjQ0IDAgNC45NDEgMCA1LjUwN2MwIC41NjUuMjE0IDEuMDY2LjY0MiAxLjUwMWwyOS44ODMgMzAuNDI3Yy40MjcuNDM1LjkyLjY1MiAxLjQ3NS42NTIuNTU2IDAgMS4wNDctLjIxNyAxLjQ3NC0uNjUyTDYzLjM2MSA3LjAwOGMuNDI3LS40MzUuNjM5LS45MzYuNjM5LTEuNTAxIDAtLjU2Ni0uMjEyLTEuMDY3LS42NC0xLjUwM3oiLz48L3N2Zz4=) no-repeat 50%/1.3128205128ex .8ex;content:"";display:inline-block;height:.8ex;margin-left:2px;vertical-align:middle;width:1.3128205128ex}@supports((-webkit-mask:url("")) or (mask:url(""))){.usa-banner__button:after{background:none;background-color:#005ea2;-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2NCAzOSI+PHBhdGggZD0iTTYzLjM2IDQuMDA0IDYwLjE1NS43NDFjLS40MjctLjQzNi0uOTE5LS42NTQtMS40NzUtLjY1NC0uNTU1IDAtMS4wNDcuMjE4LTEuNDc1LjY1NEwzMiAyNi40IDYuNzk4Ljc0QzYuMzcuMzA2IDUuODc4LjA4OCA1LjMyMy4wODhjLS41NTYgMC0xLjA0OC4yMTgtMS40NzYuNjU0TC42NDIgNC4wMDVDLjIxMyA0LjQ0IDAgNC45NDEgMCA1LjUwN2MwIC41NjUuMjE0IDEuMDY2LjY0MiAxLjUwMWwyOS44ODMgMzAuNDI3Yy40MjcuNDM1LjkyLjY1MiAxLjQ3NS42NTIuNTU2IDAgMS4wNDctLjIxNyAxLjQ3NC0uNjUyTDYzLjM2MSA3LjAwOGMuNDI3LS40MzUuNjM5LS45MzYuNjM5LTEuNTAxIDAtLjU2Ni0uMjEyLTEuMDY3LS42NC0xLjUwM3oiLz48L3N2Zz4=) no-repeat center/1.3128205128ex .8ex;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2NCAzOSI+PHBhdGggZD0iTTYzLjM2IDQuMDA0IDYwLjE1NS43NDFjLS40MjctLjQzNi0uOTE5LS42NTQtMS40NzUtLjY1NC0uNTU1IDAtMS4wNDcuMjE4LTEuNDc1LjY1NEwzMiAyNi40IDYuNzk4Ljc0QzYuMzcuMzA2IDUuODc4LjA4OCA1LjMyMy4wODhjLS41NTYgMC0xLjA0OC4yMTgtMS40NzYuNjU0TC42NDIgNC4wMDVDLjIxMyA0LjQ0IDAgNC45NDEgMCA1LjUwN2MwIC41NjUuMjE0IDEuMDY2LjY0MiAxLjUwMWwyOS44ODMgMzAuNDI3Yy40MjcuNDM1LjkyLjY1MiAxLjQ3NS42NTIuNTU2IDAgMS4wNDctLjIxNyAxLjQ3NC0uNjUyTDYzLjM2MSA3LjAwOGMuNDI3LS40MzUuNjM5LS45MzYuNjM5LTEuNTAxIDAtLjU2Ni0uMjEyLTEuMDY3LS42NC0xLjUwM3oiLz48L3N2Zz4=) no-repeat center/1.3128205128ex .8ex}.usa-banner__button:after:hover{background-color:#1a4480}}.usa-banner__button:hover:after{background-color:#1a4480;content:""}.usa-banner__button:visited{color:#54278f}.usa-banner__button:active,.usa-banner__button:hover{color:#1a4480}.usa-banner__button:hover{text-decoration:none}}.usa-banner__button[aria-expanded=false],.usa-banner__button[aria-expanded=true]{background-image:none}@media (max-width:39.99em){.usa-banner__button[aria-expanded=true]:after{background:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGQ9Ik0xOSA2LjQxIDE3LjU5IDUgMTIgMTAuNTkgNi40MSA1IDUgNi40MSAxMC41OSAxMiA1IDE3LjU5IDYuNDEgMTkgMTIgMTMuNDEgMTcuNTkgMTkgMTkgMTcuNTkgMTMuNDEgMTJ6Ii8+PC9zdmc+) no-repeat 50%/1.5rem 1.5rem;content:"";display:inline-block;height:3rem;margin-left:0;vertical-align:middle;width:3rem}@supports((-webkit-mask:url("")) or (mask:url(""))){.usa-banner__button[aria-expanded=true]:after{background:none;background-color:#005ea2;-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGQ9Ik0xOSA2LjQxIDE3LjU5IDUgMTIgMTAuNTkgNi40MSA1IDUgNi40MSAxMC41OSAxMiA1IDE3LjU5IDYuNDEgMTkgMTIgMTMuNDEgMTcuNTkgMTkgMTkgMTcuNTkgMTMuNDEgMTJ6Ii8+PC9zdmc+) no-repeat center/1.5rem 1.5rem;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGQ9Ik0xOSA2LjQxIDE3LjU5IDUgMTIgMTAuNTkgNi40MSA1IDUgNi40MSAxMC41OSAxMiA1IDE3LjU5IDYuNDEgMTkgMTIgMTMuNDEgMTcuNTkgMTkgMTkgMTcuNTkgMTMuNDEgMTJ6Ii8+PC9zdmc+) no-repeat center/1.5rem 1.5rem}}.usa-banner__button[aria-expanded=true]:before{background-color:#dfe1e2;bottom:0;content:"";display:block;height:3rem;position:absolute;right:0;top:0;width:3rem}.usa-banner__button[aria-expanded=true]:after{bottom:0;position:absolute;right:0;top:0}}@media (min-width:40em){.usa-banner__button[aria-expanded=true]{height:auto;padding:0;position:relative}.usa-banner__button[aria-expanded=true]:after{background:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2NCAzOSI+PHBhdGggZD0iTTYzLjM2IDQuMDA0IDYwLjE1NS43NDFjLS40MjctLjQzNi0uOTE5LS42NTQtMS40NzUtLjY1NC0uNTU1IDAtMS4wNDcuMjE4LTEuNDc1LjY1NEwzMiAyNi40IDYuNzk4Ljc0QzYuMzcuMzA2IDUuODc4LjA4OCA1LjMyMy4wODhjLS41NTYgMC0xLjA0OC4yMTgtMS40NzYuNjU0TC42NDIgNC4wMDVDLjIxMyA0LjQ0IDAgNC45NDEgMCA1LjUwN2MwIC41NjUuMjE0IDEuMDY2LjY0MiAxLjUwMWwyOS44ODMgMzAuNDI3Yy40MjcuNDM1LjkyLjY1MiAxLjQ3NS42NTIuNTU2IDAgMS4wNDctLjIxNyAxLjQ3NC0uNjUyTDYzLjM2MSA3LjAwOGMuNDI3LS40MzUuNjM5LS45MzYuNjM5LTEuNTAxIDAtLjU2Ni0uMjEyLTEuMDY3LS42NC0xLjUwM3oiLz48L3N2Zz4=) no-repeat 50%/1.3128205128ex .8ex;content:"";display:inline-block;height:.8ex;margin-left:2px;-webkit-transform:rotate(180deg);transform:rotate(180deg);vertical-align:middle;width:1.3128205128ex}@supports((-webkit-mask:url("")) or (mask:url(""))){.usa-banner__button[aria-expanded=true]:after{background:none;background-color:#005ea2;-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2NCAzOSI+PHBhdGggZD0iTTYzLjM2IDQuMDA0IDYwLjE1NS43NDFjLS40MjctLjQzNi0uOTE5LS42NTQtMS40NzUtLjY1NC0uNTU1IDAtMS4wNDcuMjE4LTEuNDc1LjY1NEwzMiAyNi40IDYuNzk4Ljc0QzYuMzcuMzA2IDUuODc4LjA4OCA1LjMyMy4wODhjLS41NTYgMC0xLjA0OC4yMTgtMS40NzYuNjU0TC42NDIgNC4wMDVDLjIxMyA0LjQ0IDAgNC45NDEgMCA1LjUwN2MwIC41NjUuMjE0IDEuMDY2LjY0MiAxLjUwMWwyOS44ODMgMzAuNDI3Yy40MjcuNDM1LjkyLjY1MiAxLjQ3NS42NTIuNTU2IDAgMS4wNDctLjIxNyAxLjQ3NC0uNjUyTDYzLjM2MSA3LjAwOGMuNDI3LS40MzUuNjM5LS45MzYuNjM5LTEuNTAxIDAtLjU2Ni0uMjEyLTEuMDY3LS42NC0xLjUwM3oiLz48L3N2Zz4=) no-repeat center/1.3128205128ex .8ex;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2NCAzOSI+PHBhdGggZD0iTTYzLjM2IDQuMDA0IDYwLjE1NS43NDFjLS40MjctLjQzNi0uOTE5LS42NTQtMS40NzUtLjY1NC0uNTU1IDAtMS4wNDcuMjE4LTEuNDc1LjY1NEwzMiAyNi40IDYuNzk4Ljc0QzYuMzcuMzA2IDUuODc4LjA4OCA1LjMyMy4wODhjLS41NTYgMC0xLjA0OC4yMTgtMS40NzYuNjU0TC42NDIgNC4wMDVDLjIxMyA0LjQ0IDAgNC45NDEgMCA1LjUwN2MwIC41NjUuMjE0IDEuMDY2LjY0MiAxLjUwMWwyOS44ODMgMzAuNDI3Yy40MjcuNDM1LjkyLjY1MiAxLjQ3NS42NTIuNTU2IDAgMS4wNDctLjIxNyAxLjQ3NC0uNjUyTDYzLjM2MSA3LjAwOGMuNDI3LS40MzUuNjM5LS45MzYuNjM5LTEuNTAxIDAtLjU2Ni0uMjEyLTEuMDY3LS42NC0xLjUwM3oiLz48L3N2Zz4=) no-repeat center/1.3128205128ex .8ex}.usa-banner__button[aria-expanded=true]:after:hover{background-color:#1a4480}}.usa-banner__button[aria-expanded=true]:hover:after{background-color:#1a4480;content:""}}.usa-banner__button-text{left:-999em;position:absolute;right:auto;text-decoration:underline}@media (min-width:40em){.usa-banner__button-text{display:inline;position:static}}.usa-banner__icon{width:2.5rem}.usa-js-loading .usa-banner__content{left:-999em;position:absolute;right:auto}.usa-breadcrumb{background-color:#fff;color:#1b1b1b;font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.06rem;line-height:1.3;padding-left:0;padding-right:0}@media (min-width:30em){.usa-breadcrumb{padding-bottom:1rem;padding-top:1rem}.usa-breadcrumb:not(.usa-breadcrumb--wrap) .usa-breadcrumb__list{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}.usa-breadcrumb__list{display:block;list-style-type:none;margin:-.25rem;padding:.25rem}.usa-breadcrumb__list>li{margin-bottom:0;max-width:unset}.usa-breadcrumb__list-item{display:inline;left:-999em;position:absolute;right:auto;white-space:nowrap}@media (max-width:29.99em){.usa-breadcrumb__list-item{white-space:normal}.usa-breadcrumb__list-item:nth-last-child(2){position:static}.usa-breadcrumb__list-item:nth-last-child(2) .usa-breadcrumb__link{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:subpixel-antialiased;background-color:transparent;border:0;border-radius:0;box-shadow:none;color:#005ea2;display:inline-block;font-weight:400;margin:0;padding:1rem 0 1rem 2ex;text-align:left;text-decoration:underline;text-indent:-2ex}.usa-breadcrumb__list-item:nth-last-child(2) .usa-breadcrumb__link:hover{color:#1a4480}.usa-breadcrumb__list-item:nth-last-child(2) .usa-breadcrumb__link:active{color:#162e51}.usa-breadcrumb__list-item:nth-last-child(2) .usa-breadcrumb__link:focus{outline:.25rem solid #2491ff;outline-offset:0}.usa-breadcrumb__list-item:nth-last-child(2) .usa-breadcrumb__link:active,.usa-breadcrumb__list-item:nth-last-child(2) .usa-breadcrumb__link:hover{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:subpixel-antialiased;background-color:transparent;box-shadow:none;text-decoration:underline}.usa-breadcrumb__list-item:nth-last-child(2) .usa-breadcrumb__link:before{background:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGQ9Ik0yMCAxMUg3LjgzbDUuNTktNS41OUwxMiA0bC04IDggOCA4IDEuNDEtMS40MUw3LjgzIDEzSDIwdi0yeiIvPjwvc3ZnPg==) no-repeat 50%/2ex 2ex;content:"";display:inline-block;vertical-align:baseline;width:2ex}@supports((-webkit-mask:url("")) or (mask:url(""))){.usa-breadcrumb__list-item:nth-last-child(2) .usa-breadcrumb__link:before{background:none;background-color:#71767a;-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGQ9Ik0yMCAxMUg3LjgzbDUuNTktNS41OUwxMiA0bC04IDggOCA4IDEuNDEtMS40MUw3LjgzIDEzSDIwdi0yeiIvPjwvc3ZnPg==) no-repeat center/2ex 2ex;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGQ9Ik0yMCAxMUg3LjgzbDUuNTktNS41OUwxMiA0bC04IDggOCA4IDEuNDEtMS40MUw3LjgzIDEzSDIwdi0yeiIvPjwvc3ZnPg==) no-repeat center/2ex 2ex}}.usa-breadcrumb__list-item:nth-last-child(2) .usa-breadcrumb__link:visited{color:#54278f}.usa-breadcrumb__list-item:nth-last-child(2) .usa-breadcrumb__link:active,.usa-breadcrumb__list-item:nth-last-child(2) .usa-breadcrumb__link:hover{color:#1a4480}.usa-breadcrumb__list-item:nth-last-child(2) .usa-breadcrumb__link:before{bottom:-.2em;height:2ex;position:relative}.usa-breadcrumb__list-item:nth-last-child(2) .usa-breadcrumb__link,.usa-breadcrumb__list-item:nth-last-child(2) .usa-breadcrumb__link:active,.usa-breadcrumb__list-item:nth-last-child(2) .usa-breadcrumb__link:hover{text-decoration:none}.usa-breadcrumb__list-item:nth-last-child(2) .usa-breadcrumb__link span{text-decoration:underline}.usa-breadcrumb__list-item:nth-last-child(2) .usa-breadcrumb__link:before{margin-right:0}}@media (min-width:30em){.usa-breadcrumb__list-item{position:static}.usa-breadcrumb__list-item:not(:last-child):after{background:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGQ9Ik0xMCA2IDguNTkgNy40MSAxMy4xNyAxMmwtNC41OCA0LjU5TDEwIDE4bDYtNnoiLz48L3N2Zz4=) no-repeat 50%/2ex 2ex;content:"";display:inline-block;vertical-align:baseline;width:2ex}@supports((-webkit-mask:url("")) or (mask:url(""))){.usa-breadcrumb__list-item:not(:last-child):after{background:none;background-color:#71767a;-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGQ9Ik0xMCA2IDguNTkgNy40MSAxMy4xNyAxMmwtNC41OCA0LjU5TDEwIDE4bDYtNnoiLz48L3N2Zz4=) no-repeat center/2ex 2ex;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGQ9Ik0xMCA2IDguNTkgNy40MSAxMy4xNyAxMmwtNC41OCA0LjU5TDEwIDE4bDYtNnoiLz48L3N2Zz4=) no-repeat center/2ex 2ex}}.usa-breadcrumb__list-item:not(:last-child):after{bottom:-.2em;height:2ex;margin-left:0;margin-right:0;position:relative}}.usa-breadcrumb__link{color:#005ea2;display:inline;text-decoration:none}.usa-breadcrumb__link:visited{color:#54278f}.usa-breadcrumb__link:active,.usa-breadcrumb__link:hover{color:#1a4480}.usa-breadcrumb__link span{text-decoration:underline}@media (min-width:30em){.usa-breadcrumb--wrap{line-height:1.4}}.usa-breadcrumb--wrap .usa-breadcrumb__list-item{display:inline-block}.usa-button-group{display:flex;flex-direction:column;flex-wrap:wrap;list-style-type:none;margin:0 -.25rem;padding-left:0}@media (min-width:30em){.usa-button-group{flex-direction:row}}.usa-button-group__item{margin:.25rem}@media (min-width:30em){.usa-button-group__item:last-child{margin-right:0}}.usa-button-group__item .usa-button{margin-left:0;margin-right:0}.usa-button-group--segmented{flex-direction:row;flex-wrap:nowrap;justify-content:space-between;margin-left:0;margin-right:0}@media (min-width:30em){.usa-button-group--segmented{justify-content:flex-start}}.usa-button-group--segmented .usa-button{position:relative;width:calc(100% + 2px)}@media (min-width:30em){.usa-button-group--segmented .usa-button{width:auto}}.usa-button-group--segmented .usa-button:active,.usa-button-group--segmented .usa-button:hover{z-index:2}.usa-button-group--segmented .usa-button:focus{z-index:3}.usa-button-group--segmented .usa-button-group__item{margin-left:0;margin-right:0;width:100%}@media (min-width:30em){.usa-button-group--segmented .usa-button-group__item{width:auto}}.usa-button-group--segmented .usa-button-group__item:first-child>.usa-button{border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}.usa-button-group--segmented .usa-button-group__item:last-child>.usa-button{border-bottom-left-radius:0;border-top-left-radius:0;margin-left:-2px;margin-right:0;width:calc(100% + 2px)}@media (min-width:30em){.usa-button-group--segmented .usa-button-group__item:last-child>.usa-button{margin-left:-1px;width:auto}}.usa-button-group--segmented .usa-button-group__item:not(:first-child):not(:last-child)>.usa-button{border-radius:0;margin-left:-1px;margin-right:-1px}.usa-button-group--segmented .usa-button-group__item:not(:last-child) .usa-button:before{border-right:1px solid #1a4480;bottom:0;content:"";display:block;height:100%;position:absolute;right:1px;top:0;width:1px;z-index:3}.usa-button-group--segmented .usa-button-group__item:not(:last-child) .usa-button--secondary:before{border-right-color:#b50909}.usa-button-group--segmented .usa-button-group__item:not(:last-child) .usa-button--accent-cool:before{border-right-color:#28a0cb}.usa-button-group--segmented .usa-button-group__item:not(:last-child) .usa-button--base:before{border-right-color:#565c65}.usa-button-group--segmented .usa-button-group__item:not(:last-child) .usa-button--accent-cool:disabled:before,.usa-button-group--segmented .usa-button-group__item:not(:last-child) .usa-button--base:disabled:before,.usa-button-group--segmented .usa-button-group__item:not(:last-child) .usa-button--secondary:disabled:before{border-right-color:#71767a}.usa-button-group--segmented .usa-button-group__item:not(:last-child) .usa-button--outline:before,.usa-button-group--segmented .usa-button-group__item:not(:last-child) .usa-button:active:before{display:none}.usa-card-group,.usa-prose .usa-card-group{list-style-type:none;margin-bottom:0;margin-top:0;padding-left:0}.usa-card-group{align-items:stretch;display:flex;flex-direction:column;flex-wrap:wrap;margin-left:-.5rem;margin-right:-.5rem}@media (min-width:40em){.usa-card-group{flex-direction:row}}.usa-card{max-width:none}.usa-card,.usa-card:last-child{margin-bottom:2.5rem}@media (min-width:40em){.usa-card,.usa-card:last-child{margin-bottom:2rem}}.usa-prose .usa-card{margin-bottom:2.5rem;max-width:none}.usa-prose .usa-card:last-child{margin-bottom:2.5rem}@media (min-width:40em){.usa-prose .usa-card,.usa-prose .usa-card:last-child{margin-bottom:2rem}}.usa-card__container{background-color:#fff;border:2px solid #dfe1e2;border-radius:.5rem;display:flex;flex-direction:column;font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.06rem;height:100%;line-height:1.5;margin-left:.5rem;margin-right:.5rem;position:relative}.usa-card:not(.usa-card--flag) .usa-card__container>:only-child{padding:1.5rem}.usa-card .usa-card__img{display:block}.usa-card__header{padding:1.5rem 1.5rem .5rem}.usa-card__header:last-child{padding-bottom:1.5rem}.usa-card__heading{font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.46rem;line-height:1.1;margin:0}.usa-card__media{min-height:1px;order:-1}.usa-card__img{background-color:#f0f0f0;border-top-left-radius:calc(.5rem - 2px);border-top-right-radius:calc(.5rem - 2px);overflow:hidden;position:relative}.usa-card__img img{display:block;height:100%;-o-object-fit:cover;object-fit:cover;width:100%}.usa-card__media--inset{padding-left:1.5rem;padding-right:1.5rem;padding-top:1.5rem}.usa-card__media--inset .usa-card__img{border-radius:0}.usa-card__body{flex:1 1;flex-basis:auto;padding:.5rem 1.5rem}.usa-card__body:last-child{padding-bottom:1.5rem}.usa-card__body:first-child{padding-top:1.5rem}.usa-card__body:only-child{padding-bottom:1.5rem;padding-top:1.5rem}.usa-card__footer{padding:.5rem 1.5rem 1.5rem}.usa-card__footer .usa-button:only-of-type{margin-right:0}.usa-card__body>:last-child,.usa-card__header>:last-child{margin-bottom:0;padding-bottom:0}.usa-card__body>:first-child,.usa-card__header>:first-child{margin-top:0;padding-top:0}.usa-card__body>:only-child,.usa-card__header>:only-child{margin-bottom:0;margin-top:0;padding-bottom:0;padding-top:0}.usa-card__footer--exdent,.usa-card__header--exdent,.usa-card__media--exdent{margin-left:-2px;margin-right:-2px}.usa-card__footer--exdent>*,.usa-card__header--exdent>*{padding-left:2px;padding-right:2px}.usa-card__media--exdent{margin-top:-2px}.usa-card__media--exdent .usa-card__img{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.usa-card--header-first .usa-card__header{border-top-left-radius:calc(.5rem - 2px);border-top-right-radius:calc(.5rem - 2px);padding-bottom:1rem}.usa-card--header-first .usa-card__header--exdent{border-top-left-radius:.5rem;border-top-right-radius:.5rem;margin-top:-2px}.usa-card--header-first .usa-card__media--inset{padding-top:0}.usa-card--header-first .usa-card__media{order:0}.usa-card--header-first .usa-card__img{border-radius:0}.usa-card--header-first .usa-card__body{padding-top:1rem}@media (min-width:40em){.usa-card--flag .usa-card__media{bottom:0;display:flex;left:0;overflow:hidden;position:absolute;top:0;width:15rem}.usa-card--flag .usa-card__img{border-radius:0;border-bottom-left-radius:calc(.5rem - 2px);border-top-left-radius:calc(.5rem - 2px)}.usa-card--flag .usa-card__body,.usa-card--flag .usa-card__footer,.usa-card--flag .usa-card__header{margin-left:15rem}.usa-card--flag .usa-card__media--exdent{margin:-2px 0 -2px -2px}.usa-card--flag .usa-card__media--exdent .usa-card__img{border-bottom-left-radius:.5rem;border-top-left-radius:.5rem}.usa-card--flag .usa-card__media--inset{padding-bottom:1.5rem;padding-right:0}.usa-card--flag .usa-card__media--inset .usa-card__img{border-radius:0}.usa-card--flag.usa-card--header-first .usa-card__header{padding-bottom:.5rem}.usa-card--flag.usa-card--header-first .usa-card__body{padding-top:.5rem}.usa-card--flag.usa-card--header-first .usa-card__media--inset{padding-top:1.5rem}.usa-card--flag.usa-card--media-right .usa-card__media{left:auto;right:0}.usa-card--flag.usa-card--media-right .usa-card__media--inset{padding-left:0;padding-right:1.5rem}.usa-card--flag.usa-card--media-right .usa-card__media--inset .usa-card__img{border-radius:0}.usa-card--flag.usa-card--media-right .usa-card__img{border-radius:0;border-bottom-right-radius:calc(.5rem - 2px);border-top-right-radius:calc(.5rem - 2px)}.usa-card--flag.usa-card--media-right .usa-card__body,.usa-card--flag.usa-card--media-right .usa-card__footer,.usa-card--flag.usa-card--media-right .usa-card__header{margin-left:0;margin-right:15rem}.usa-card--flag.usa-card--media-right .usa-card__media--exdent{margin-left:0;margin-right:-2px}.usa-card--flag.usa-card--media-right .usa-card__media--exdent .usa-card__img{border-radius:0;border-bottom-right-radius:.5rem;border-top-right-radius:.5rem}}.usa-card:not(.usa-card--flag).usa-card__media--set-aspect{box-sizing:border-box;height:0;overflow:hidden;padding:0 0 56.25%;position:relative}.usa-card:not(.usa-card--flag).usa-card__media--set-aspect .usa-card__img{bottom:0;left:0;position:absolute;right:0;top:0}.usa-checklist{font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.06rem;line-height:1.5;list-style-type:none;margin-bottom:0;margin-top:0;padding-left:0}.usa-checklist__item{margin-bottom:0;margin-top:.5rem;text-indent:-2.5rem}.usa-checklist__item:before{content:" ";display:inline-block;height:1rem;margin-left:-.25rem;margin-right:.75rem;width:2rem}.usa-checklist__item.usa-checklist__item--checked:before{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGZpbGw9IiMwMDVlYTIiIGQ9Ik05IDE2LjE3IDQuODMgMTJsLTEuNDIgMS40MUw5IDE5IDIxIDdsLTEuNDEtMS40MXoiLz48L3N2Zz4=),linear-gradient(transparent,transparent);background-position:50%;background-repeat:no-repeat;background-size:1.5rem}.usa-collection{font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.06rem;line-height:1.3;padding-left:0}.usa-collection__item{align-items:flex-start;border-top-style:solid;border-top-width:1px;display:flex;list-style-type:none;margin-bottom:1rem;margin-top:1rem;padding-left:0;padding-top:1rem}.usa-collection__item>li{margin-bottom:0;max-width:unset}.usa-prose .usa-collection{font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.06rem;line-height:1.3;padding-left:0}.usa-prose .usa-collection__item{align-items:flex-start;border-top-style:solid;border-top-width:1px;display:flex;list-style-type:none;margin-bottom:1rem;margin-top:1rem;padding-left:0;padding-top:1rem}.usa-prose .usa-collection__item>li{margin-bottom:0;max-width:unset}.usa-collection__calendar-date,.usa-collection__img{flex-shrink:0;margin-right:1rem;width:4rem}@media (min-width:40em){.usa-collection__calendar-date,.usa-collection__img{width:5rem}}.usa-collection__body{flex:1 1}.usa-collection__heading{font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.13rem;line-height:1.3;margin-bottom:0;margin-top:0}.usa-collection__description{margin-bottom:.5rem;margin-top:.5rem}.usa-collection__meta{list-style-type:none;margin-bottom:0;margin-top:.25rem;padding-left:0}.usa-collection__meta>li{margin-bottom:0;max-width:unset}.usa-collection__meta-item{display:block;font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:.93rem;line-height:1.3;margin-right:.5rem;margin-top:.25rem}.usa-collection__meta-item.usa-tag{background-color:#dfe1e2;color:#1b1b1b;display:inline-block;line-height:.9;margin-top:.25rem;padding-bottom:.25rem;padding-top:.25rem}.usa-collection__meta-item.usa-tag--new{background-color:#c05600;color:#fff}.usa-collection__calendar-date{text-decoration:none}.usa-collection__calendar-date-day,.usa-collection__calendar-date-month{display:block;font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.13rem;font-weight:700;padding:.25rem;text-align:center}@media (min-width:40em){.usa-collection__calendar-date-day,.usa-collection__calendar-date-month{padding:.5rem}}.usa-collection__calendar-date-month{background-color:#005ea2;border-top-left-radius:2px;border-top-right-radius:2px;color:#fff}.usa-collection__calendar-date-day{border:1px solid #005ea2;border-bottom-left-radius:2px;border-bottom-right-radius:2px;color:#005ea2}.usa-collection--condensed .usa-collection__item{margin-bottom:.5rem;margin-top:.5rem;padding-top:.5rem}.usa-footer{font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.06rem;line-height:1.5;overflow:hidden}.usa-footer>.grid-container{margin-left:auto;margin-right:auto;max-width:64rem;padding-left:1rem;padding-right:1rem}@media (min-width:64em){.usa-footer>.grid-container{padding-left:2rem;padding-right:2rem}}.usa-footer__return-to-top{line-height:.9;padding-bottom:1.25rem;padding-top:1.25rem}.usa-footer__return-to-top a{color:#005ea2;text-decoration:underline}.usa-footer__return-to-top a:visited{color:#54278f}.usa-footer__return-to-top a:hover{color:#1a4480}.usa-footer__return-to-top a:active{color:#162e51}.usa-footer__return-to-top a:focus{outline:.25rem solid #2491ff;outline-offset:0}.usa-footer__nav{border-bottom:1px solid #a9aeb1;margin-left:auto;margin-right:auto;max-width:64rem;padding-left:0;padding-right:0}@media (min-width:64em){.usa-footer__nav{padding-left:2rem;padding-right:2rem}}@media (min-width:30em){.usa-footer__nav{border-bottom:none;padding-left:1rem;padding-right:1rem}}@media (min-width:30em)and (min-width:64em){.usa-footer__nav{padding-left:2rem;padding-right:2rem}}.usa-footer__nav>ul{list-style-type:none;margin-bottom:0;margin-top:0;padding-left:0}.usa-footer__primary-section{background-color:#f0f0f0}.usa-footer__primary-section>.grid-container{margin-left:auto;margin-right:auto;max-width:64rem;padding-left:1rem;padding-right:1rem}@media (min-width:64em){.usa-footer__primary-section>.grid-container{padding-left:2rem;padding-right:2rem}}.usa-footer__primary-container{margin-left:auto;margin-right:auto;max-width:64rem;padding-left:1rem;padding-right:1rem}@media (min-width:64em){.usa-footer__primary-container{padding-left:2rem;padding-right:2rem}}.usa-footer__primary-content{line-height:1.1}.usa-footer__primary-link a,.usa-footer__secondary-link a{text-decoration:none}.usa-footer__primary-link a:hover,.usa-footer__secondary-link a:hover{text-decoration:underline}.usa-footer__primary-link{color:#1b1b1b;display:block;font-weight:700;padding:1rem;text-decoration:none}@media (min-width:30em){.usa-footer__primary-link{padding-left:0;padding-right:0}}.usa-footer__primary-link:hover{cursor:pointer;text-decoration:underline}.usa-footer__secondary-link{line-height:1.1;margin-left:1rem;padding:0}.usa-footer__secondary-link a{color:#005ea2;text-decoration:underline}.usa-footer__secondary-link a:visited{color:#54278f}.usa-footer__secondary-link a:hover{color:#1a4480}.usa-footer__secondary-link a:active{color:#162e51}.usa-footer__secondary-link a:focus{outline:.25rem solid #2491ff;outline-offset:0}.usa-footer__secondary-link+.usa-footer__secondary-link{padding-top:1rem}@media (min-width:30em){.usa-footer__secondary-link{margin-left:0}}.usa-footer__contact-info{line-height:1.1}.usa-footer__contact-info a{color:#1b1b1b;text-decoration:none}.usa-footer__contact-info a:hover{text-decoration:underline}@media (min-width:30em){.usa-footer__contact-info{justify-content:flex-end;margin-top:.5rem}}.usa-footer__primary-content{border-top:1px solid #a9aeb1}@media (min-width:30em){.usa-footer__primary-content{border:none}}.usa-sign-up{padding-bottom:2rem;padding-top:1.5rem}.usa-sign-up .usa-button,.usa-sign-up .usa-label{margin-top:.75rem}.usa-sign-up__heading{font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.46rem;font-weight:700;line-height:1.1;margin:0}.usa-footer__secondary-section{background-color:#dfe1e2;padding-bottom:1.25rem;padding-top:1.25rem}.usa-footer__secondary-section>.grid-container{margin-left:auto;margin-right:auto;max-width:64rem;padding-left:1rem;padding-right:1rem}@media (min-width:64em){.usa-footer__secondary-section>.grid-container{padding-left:2rem;padding-right:2rem}}.usa-footer__secondary-section a{color:#1b1b1b}.usa-footer__logo{margin-bottom:.5rem;margin-top:.5rem}@media (min-width:30em){.usa-footer__logo{align-items:center;margin-bottom:0;margin-top:0}}.usa-footer__logo-img{max-width:5rem}.usa-footer__logo-heading{font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.46rem;font-weight:700;line-height:.9;margin-bottom:.5rem;margin-top:.5rem}.usa-footer__contact-links{margin-top:1.5rem}@media (min-width:30em){.usa-footer__contact-links{margin-top:0;text-align:right}}.usa-footer__contact-heading{font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.46rem;line-height:1.1;margin-top:0}@media (min-width:30em){.usa-footer__contact-heading{margin-bottom:.25rem;margin-top:.25rem}}.usa-footer__social-links{line-height:.9;padding-bottom:.5rem}.usa-footer__social-links a{text-decoration:none}@media (min-width:30em){.usa-footer__social-links{justify-content:flex-end}}.usa-social-link{background-color:rgba(0,0,0,.1);background-position:50%;background-size:auto 2rem;display:inline-block;height:3rem;width:3rem}.usa-social-link span{left:-999em;position:absolute;right:auto}.usa-social-link--facebook{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHJlY3Qgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTIyIDEyYzAtNS41Mi00LjQ4LTEwLTEwLTEwUzIgNi40OCAyIDEyYzAgNC44NCAzLjQ0IDguODcgOCA5LjhWMTVIOHYtM2gyVjkuNUMxMCA3LjU3IDExLjU3IDYgMTMuNSA2SDE2djNoLTJjLS41NSAwLTEgLjQ1LTEgMXYyaDN2M2gtM3Y2Ljk1YzUuMDUtLjUgOS00Ljc2IDktOS45NXoiLz48L3N2Zz4=),linear-gradient(transparent,transparent);background-repeat:no-repeat}.usa-social-link--twitter{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEyIDJhMTAgMTAgMCAxIDAgMTAgMTBBMTAgMTAgMCAwIDAgMTIgMnptNSA4LjF2LjMxYTYuODEgNi44MSAwIDAgMS02Ljg2IDYuODYgNi43NCA2Ljc0IDAgMCAxLTMuNjktMS4wOCA1LjYzIDUuNjMgMCAwIDAgLjU4IDAgNC43OSA0Ljc5IDAgMCAwIDMtMSAyLjQxIDIuNDEgMCAwIDEtMi4yMy0xLjY4IDEuNzUgMS43NSAwIDAgMCAuNDYuMDUgMi41OSAyLjU5IDAgMCAwIC42My0uMDhBMi40MiAyLjQyIDAgMCAxIDcgMTEuMTFhMi4zMyAyLjMzIDAgMCAwIDEuMDkuMyAyLjQzIDIuNDMgMCAwIDEtLjc5LTMuMjUgNi44NCA2Ljg0IDAgMCAwIDUgMi41MyAyLjU5IDIuNTkgMCAwIDEtLjA3LS41NSAyLjQxIDIuNDEgMCAwIDEgMi40MS0yLjQxIDIuMzggMi4zOCAwIDAgMSAxLjc3Ljc2IDQuNjcgNC42NyAwIDAgMCAxLjQ5LS41OSAyLjM5IDIuMzkgMCAwIDEtMS4wNiAxLjM0IDQuNTUgNC41NSAwIDAgMCAxLjM5LS4zOUE1IDUgMCAwIDEgMTcgMTAuMXoiLz48L3N2Zz4=),linear-gradient(transparent,transparent);background-repeat:no-repeat}.usa-social-link--youtube{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEyIDJhMTAgMTAgMCAxIDAgMTAgMTBBMTAgMTAgMCAwIDAgMTIgMnptNS43NSAxMi45MUExLjQ5IDEuNDkgMCAwIDEgMTYuNjkgMTZhMzQuNjUgMzQuNjUgMCAwIDEtNC42OS4yNkEzNC42NSAzNC42NSAwIDAgMSA3LjMxIDE2YTEuNDkgMS40OSAwIDAgMS0xLjA2LTEuMDZBMTUuODggMTUuODggMCAwIDEgNiAxMmExNS44OCAxNS44OCAwIDAgMSAuMjUtMi45MUExLjQ5IDEuNDkgMCAwIDEgNy4zMSA4IDM0LjY1IDM0LjY1IDAgMCAxIDEyIDcuNzdhMzQuNjUgMzQuNjUgMCAwIDEgNC42OS4yMyAxLjQ5IDEuNDkgMCAwIDEgMS4wNiAxLjA2QTE1Ljg4IDE1Ljg4IDAgMCAxIDE4IDEyYTE1Ljg4IDE1Ljg4IDAgMCAxLS4yNSAyLjkxeiIvPjxwb2x5Z29uIHBvaW50cz0iMTAuNzcgMTMuNzggMTMuOTEgMTIgMTAuNzcgMTAuMjIgMTAuNzcgMTMuNzgiLz48L3N2Zz4=),linear-gradient(transparent,transparent);background-repeat:no-repeat}.usa-social-link--instagram{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEyIDEwYTIgMiAwIDEgMCAyIDIgMiAyIDAgMCAwLTItMnoiLz48cGF0aCBkPSJNMTIgMmExMCAxMCAwIDEgMCAxMCAxMEExMCAxMCAwIDAgMCAxMiAyem02IDEyLjY5QTMuMzIgMy4zMiAwIDAgMSAxNC42OSAxOEg5LjMxQTMuMzIgMy4zMiAwIDAgMSA2IDE0LjY5VjkuMzFBMy4zMiAzLjMyIDAgMCAxIDkuMzEgNmg1LjM4QTMuMzIgMy4zMiAwIDAgMSAxOCA5LjMxeiIvPjxwYXRoIGQ9Ik0xNi45NCA5LjMxYTIuMjUgMi4yNSAwIDAgMC0yLjI1LTIuMjVIOS4zMWEyLjI1IDIuMjUgMCAwIDAtMi4yNSAyLjI1djUuMzhhMi4yNSAyLjI1IDAgMCAwIDIuMjUgMi4yNWg1LjM4YTIuMjUgMi4yNSAwIDAgMCAyLjI1LTIuMjV6TTEyIDE1LjA5QTMuMDkgMy4wOSAwIDEgMSAxNS4wOSAxMiAzLjA5IDMuMDkgMCAwIDEgMTIgMTUuMDl6bTMuNzctNS43NWEuNzkuNzkgMCAwIDEtLjU1LjIzLjgzLjgzIDAgMCAxLS41NS0uMjMuNzguNzggMCAwIDEgMC0xLjExLjgyLjgyIDAgMCAxIC41NS0uMjMuNzguNzggMCAwIDEgLjU1IDEuMzN6Ii8+PC9zdmc+),linear-gradient(transparent,transparent);background-repeat:no-repeat}.usa-social-link--rss{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxjaXJjbGUgY3g9IjYuMTgiIGN5PSIxNy44MiIgcj0iMi4xOCIvPjxwYXRoIGQ9Ik00IDQuNDR2Mi44M2M3LjAzIDAgMTIuNzMgNS43IDEyLjczIDEyLjczaDIuODNjMC04LjU5LTYuOTctMTUuNTYtMTUuNTYtMTUuNTZ6bTAgNS42NnYyLjgzYzMuOSAwIDcuMDcgMy4xNyA3LjA3IDcuMDdoMi44M2MwLTUuNDctNC40My05LjktOS45LTkuOXoiLz48L3N2Zz4=),linear-gradient(transparent,transparent);background-repeat:no-repeat}@media (min-width:30em){.usa-footer__address{justify-content:flex-end}}@media (min-width:64em){.usa-footer--slim .usa-footer__nav{padding-left:0;padding-right:0}}.usa-footer--slim .usa-footer__address{padding:1rem}@media (min-width:30em){.usa-footer--slim .usa-footer__address{padding:0}}.usa-footer--slim .usa-footer__logo{align-items:center}.usa-footer--slim .usa-footer__logo-img{max-width:3rem}.usa-footer--slim .usa-footer__contact-info{display:inline-block}@media (min-width:30em){.usa-footer--slim .usa-footer__contact-info{margin-top:0;padding-bottom:1rem;padding-top:1rem}}.usa-footer--big .usa-footer__nav{margin-left:-1rem;margin-right:-1rem}@media (min-width:30em){.usa-footer--big .usa-footer__nav{border-bottom:1px solid #a9aeb1;padding-top:2rem}}@media (min-width:40em){.usa-footer--big .usa-footer__nav{border-bottom:none;margin-left:0;margin-right:0;padding-left:0;padding-right:0}}.usa-footer--big .usa-footer__primary-link{font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.06rem;font-weight:700;line-height:1.1;margin:0}@media (min-width:30em){.usa-footer--big .usa-footer__primary-link{margin-bottom:.5rem;padding-bottom:0;padding-top:0}.usa-footer--big .usa-footer__primary-link:hover{cursor:auto;text-decoration:none}}.usa-footer--big .usa-footer__primary-content--collapsible .usa-footer__primary-link{align-items:center;cursor:pointer;display:flex;justify-content:flex-start}.usa-footer--big .usa-footer__primary-content--collapsible .usa-footer__primary-link:before{align-items:center;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGQ9Ik0xNi41OSA4LjU5IDEyIDEzLjE3IDcuNDEgOC41OSA2IDEwbDYgNiA2LTZ6Ii8+PC9zdmc+),linear-gradient(transparent,transparent);background-repeat:no-repeat;background-size:contain;content:"";display:inline-flex;height:1.25rem;justify-content:center;margin-left:-.25rem;margin-right:.25rem;width:1.25rem}@media (min-width:30em){.usa-footer--big .usa-footer__primary-content--collapsible .usa-footer__primary-link:before{content:none}}.usa-footer--big .usa-footer__primary-content--collapsible.hidden .usa-list--unstyled{display:none}.usa-footer--big .usa-footer__primary-content--collapsible.hidden .usa-footer__primary-link:before{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGQ9Ik0xMCA2IDguNTkgNy40MSAxMy4xNyAxMmwtNC41OCA0LjU5TDEwIDE4bDYtNnoiLz48L3N2Zz4=),linear-gradient(transparent,transparent);background-repeat:no-repeat}@media (min-width:30em){.usa-footer--big .usa-footer__primary-content--collapsible.hidden .usa-footer__primary-link{margin:0}}.usa-footer--big .usa-footer__primary-content--collapsible .usa-list--unstyled{padding-bottom:1.25rem;padding-left:1rem;padding-right:1rem}@media (min-width:30em){.usa-footer--big .usa-footer__primary-content--collapsible .usa-list--unstyled{padding:.75rem 0 2rem}}.usa-form{font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.06rem;line-height:1.3}@media (min-width:30em){.usa-form{max-width:20rem}}.usa-form .usa-input,.usa-form .usa-range,.usa-form .usa-select,.usa-form .usa-textarea{max-width:none}.usa-form .usa-input--2xs{max-width:4ex}.usa-form .usa-input--xs{max-width:7ex}.usa-form .usa-input--sm,.usa-form .usa-input--small{max-width:10ex}.usa-form .usa-input--md,.usa-form .usa-input--medium{max-width:20ex}.usa-form .usa-input--lg{max-width:30ex}.usa-form .usa-input--xl{max-width:40ex}.usa-form .usa-input--2xl{max-width:50ex}.usa-form .usa-button{margin-top:.5rem}@media (min-width:30em){.usa-form .usa-button{margin-top:1.5rem}}.usa-form a{color:#005ea2;text-decoration:underline}.usa-form a:visited{color:#54278f}.usa-form a:hover{color:#1a4480}.usa-form a:active{color:#162e51}.usa-form a:focus{outline:.25rem solid #2491ff;outline-offset:0}@media (min-width:30em){.usa-form--large{max-width:30rem}}.usa-form__note{float:right;font-size:.93rem;line-height:1.3;margin:.25rem 0 1rem}.usa-form__note,.usa-graphic-list{font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif}.usa-graphic-list{font-size:1.06rem;line-height:1.5}.usa-graphic-list .usa-graphic-list__row .usa-media-block{margin-bottom:2rem}@media (min-width:40em){.usa-graphic-list .usa-graphic-list__row .usa-media-block{margin-bottom:4rem}.usa-graphic-list .usa-graphic-list__row:last-child .usa-media-block{margin-bottom:0}}.usa-graphic-list .usa-graphic-list__row:last-child .usa-media-block:last-child{margin-bottom:0}.usa-graphic-list .usa-media-block__img{margin-right:1.5rem}.usa-graphic-list .usa-media-block__body>:first-child{margin-top:0}.usa-graphic-list__heading{clear:both;font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.46rem;font-weight:700;line-height:1.1;margin-bottom:0;margin-top:0}*+.usa-graphic-list__heading{margin-top:1.5em}.usa-graphic-list__heading+*{margin-top:1em}.usa-header{font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.06rem;line-height:1.5;z-index:300}.usa-header:after{clear:both;content:"";display:block}.usa-header a{border-bottom:none}@media (min-width:64em){.usa-header .usa-search{float:right}.usa-header [role=search]{float:right;max-width:calc(27ch + 3rem);width:100%}}.usa-header [type=search]{min-width:0}@media (min-width:64em){.usa-header+.usa-hero{border-top:1px solid #fff}.usa-header+.usa-section,.usa-header+main{border-top:1px solid #dfe1e2}}@media (max-width:63.99em){.usa-logo{flex:1 1;font-size:.93rem;line-height:.9;margin-left:1rem}}@media (min-width:64em){.usa-logo{font-size:1.46rem;line-height:1.1;margin-bottom:1rem;margin-top:2rem}}.usa-logo a{color:#1b1b1b;text-decoration:none}.usa-logo__text{display:block;font-style:normal;font-weight:700;margin:0}.usa-menu-btn{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:subpixel-antialiased;background-color:transparent;background-color:#005ea2;border:0;border-radius:0;box-shadow:none;color:#005ea2;color:#fff;flex:0 1 auto;font-size:.87rem;font-weight:400;height:3rem;margin:0;padding:0 .75rem;text-align:left;text-align:center;text-decoration:underline;text-decoration:none;text-transform:uppercase}.usa-menu-btn:visited{color:#54278f}.usa-menu-btn:hover{color:#1a4480}.usa-menu-btn:active{color:#162e51}.usa-menu-btn:focus{outline:.25rem solid #2491ff;outline-offset:0}.usa-menu-btn:active,.usa-menu-btn:hover{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:subpixel-antialiased;background-color:transparent;box-shadow:none;text-decoration:underline}@media (min-width:64em){.usa-menu-btn{display:none}}.usa-menu-btn:hover{background-color:#1a4480;color:#fff;text-decoration:none}.usa-menu-btn:active,.usa-menu-btn:visited{color:#fff}.usa-overlay{background:#000;bottom:0;left:0;opacity:0;position:absolute;position:fixed;right:0;top:0;transition:opacity .2s ease-in-out;visibility:hidden;z-index:400}.usa-overlay.is-visible{opacity:.2;visibility:visible}@media (min-width:64em){.usa-header--basic .usa-navbar{position:relative;width:33%}.usa-header--basic .usa-nav{align-items:center;display:flex;flex-direction:row;justify-content:flex-end;padding:0 0 .25rem .5rem;width:100%}.usa-header--basic .usa-nav-container{align-items:flex-end;display:flex;justify-content:space-between}.usa-header--basic .usa-nav__link:hover,.usa-header--basic .usa-nav__primary-item>.usa-current{position:relative}.usa-header--basic .usa-nav__link:hover:after,.usa-header--basic .usa-nav__primary-item>.usa-current:after{background-color:#005ea2;border-radius:0;bottom:-.25rem;content:"";display:block;height:.25rem;left:1rem;position:absolute;right:1rem}.usa-header--basic .usa-nav__link[aria-expanded=true]:after,.usa-header--basic .usa-nav__link[aria-expanded=true]:hover:after{display:none}.usa-header--basic .usa-nav__primary{width:auto}.usa-header--basic .usa-nav__primary-item:last-of-type{position:relative}.usa-header--basic .usa-nav__primary-item:last-of-type .usa-nav__submenu{position:absolute;right:0}.usa-header--basic .usa-search{top:0}}.usa-header--basic.usa-header--megamenu .usa-nav__inner{display:flex;flex-direction:column}@media (min-width:64em){.usa-header--basic.usa-header--megamenu .usa-nav__inner{display:block;float:right;margin-top:-2.5rem}.usa-header--basic.usa-header--megamenu .usa-nav__primary-item:last-of-type{position:static}.usa-header--extended{padding-top:0}.usa-header--extended .usa-nav__primary-item>.usa-current,.usa-header--extended .usa-nav__primary-item>.usa-nav__link:hover{position:relative}.usa-header--extended .usa-nav__primary-item>.usa-current:after,.usa-header--extended .usa-nav__primary-item>.usa-nav__link:hover:after{background-color:#005ea2;border-radius:0;bottom:0;content:"";display:block;height:.25rem;left:1rem;position:absolute;right:1rem}.usa-header--extended .usa-nav__link[aria-expanded=true]:after,.usa-header--extended .usa-nav__link[aria-expanded=true]:hover:after{display:none}.usa-header--extended .usa-logo{font-size:2.13rem;margin:2rem 0 1.5rem;max-width:50%}.usa-header--extended .usa-navbar{display:block;height:auto;margin-left:auto;margin-right:auto;max-width:64rem;overflow:auto;padding-left:1rem;padding-right:1rem}}@media (min-width:64em)and (min-width:64em){.usa-header--extended .usa-navbar{padding-left:2rem;padding-right:2rem}}@media (min-width:64em){.usa-header--extended .usa-nav{border-top:1px solid #dfe1e2;padding:0;width:100%}.usa-header--extended .usa-nav__inner{margin-left:auto;margin-right:auto;max-width:64rem;padding-left:1rem;padding-right:1rem;position:relative}}@media (min-width:64em)and (min-width:64em){.usa-header--extended .usa-nav__inner{padding-left:2rem;padding-right:2rem}}@media (min-width:64em){.usa-header--extended .usa-nav__primary{margin-left:-1rem}.usa-header--extended .usa-nav__primary:after{clear:both;content:"";display:block}.usa-header--extended .usa-nav__link{padding-bottom:1rem;padding-top:1rem}.usa-header--extended .usa-nav__submenu .usa-grid-full{padding-left:.75rem}.usa-header--extended .usa-nav__submenu.usa-megamenu{left:0;padding-left:2rem}}html.usa-js-loading .usa-nav__submenu,html.usa-js-loading .usa-nav__submenu.usa-megamenu{left:-999em;position:absolute;right:auto}.usa-hero{background-image:url(/justice40-tool/main/static/hero-64da0bc09eaff1000d48c416c82ea2db.png);background-position:50%;background-size:cover;color:#fff;font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.06rem;line-height:1.5;padding-bottom:2rem;padding-top:2rem}.usa-hero__callout{background-color:#162e51;padding:2rem}@media (min-width:40em){.usa-hero__callout{max-width:20rem}}.usa-hero__heading{clear:both;color:#00bde3;font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:2.13rem;font-weight:700;line-height:1.1;margin-bottom:0;margin-top:0}*+.usa-hero__heading{margin-top:1.5em}.usa-hero__heading+*{margin-top:1em}.usa-hero__heading--alt{color:#fff;display:block}.usa-icon{fill:currentColor;display:inline-block;height:1em;position:relative;width:1em}.usa-icon--size-3{height:1.5rem;width:1.5rem}.usa-icon--size-4{height:2rem;width:2rem}.usa-icon--size-5{height:2.5rem;width:2.5rem}.usa-icon--size-6{height:3rem;width:3rem}.usa-icon--size-7{height:3.5rem;width:3.5rem}.usa-icon--size-8{height:4rem;width:4rem}.usa-icon--size-9{height:4.5rem;width:4.5rem}.usa-layout-docs__sidenav{order:2;padding-top:2rem}@media (min-width:64em){.usa-layout-docs__sidenav{padding-top:0}.usa-layout-docs__main{order:2}}.usa-media-block{align-items:flex-start;display:flex}.usa-media-block__img{flex-shrink:0;margin-right:.5rem}.usa-media-block__body{flex:1 1}.usa-megamenu .usa-col{flex:1 1 auto}@media (min-width:64em){.usa-megamenu .usa-col{flex:4 1}.usa-megamenu.usa-nav__submenu{left:-33%;padding:2rem 0;right:0;width:auto}.usa-megamenu.usa-nav__submenu:before{right:100%}.usa-megamenu.usa-nav__submenu:after,.usa-megamenu.usa-nav__submenu:before{background-color:#162e51;bottom:0;content:"";display:block;position:absolute;top:0;width:100%}.usa-megamenu.usa-nav__submenu:after{left:100%}.usa-nav-container{margin-left:auto;margin-right:auto;max-width:64rem;padding-left:2rem;padding-right:2rem}.usa-nav-container:after{clear:both;content:"";display:block}}@media (min-width:64em)and (min-width:64em){.usa-nav-container{padding-left:2rem;padding-right:2rem}}.usa-navbar{height:3rem}@media (max-width:63.99em){.usa-navbar{align-items:center;border-bottom:1px solid #dfe1e2;display:flex}}@media (min-width:64em){.usa-navbar{border-bottom:none;display:inline-block;height:auto}}@-webkit-keyframes slidein-left{0%{-webkit-transform:translateX(15rem);transform:translateX(15rem)}to{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes slidein-left{0%{-webkit-transform:translateX(15rem);transform:translateX(15rem)}to{-webkit-transform:translateX(0);transform:translateX(0)}}.usa-nav{font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.06rem;line-height:.9}@media (max-width:63.99em){.usa-nav{background:#fff;border-right:0;bottom:0;display:none;flex-direction:column;overflow-y:auto;padding:1rem;position:absolute;position:fixed;right:0;top:0;width:15rem;z-index:500}.usa-nav.is-visible{-webkit-animation:slidein-left .3s ease-in-out;animation:slidein-left .3s ease-in-out;display:flex}}@media (min-width:64em){.usa-nav{float:right;position:relative}.usa-nav .usa-search{margin-left:1rem}}.usa-nav .usa-accordion{font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.06rem;line-height:.9}@media (max-width:63.99em){.usa-nav__primary{list-style-type:none;margin-bottom:0;margin-top:1.5rem;order:2;padding-left:0}.usa-nav__primary>li{margin-bottom:0;max-width:unset}.usa-nav__primary-item{border-top:1px solid #dfe1e2}.usa-nav__primary a:not(.usa-button){color:#565c65;display:block;padding:.5rem 1rem;text-decoration:none}.usa-nav__primary a:not(.usa-button):hover{background-color:#f0f0f0;color:#005ea2;text-decoration:none}.usa-nav__primary a:not(.usa-button):focus{outline-offset:0}.usa-nav__primary .usa-current{color:#005ea2;font-weight:700;position:relative}.usa-nav__primary .usa-current:after{background-color:#005ea2;border-radius:99rem;bottom:.25rem;content:"";display:block;left:.25rem;position:absolute;top:.25rem;width:.25rem}}@media (max-width:63.99em)and (min-width:40em){.usa-nav__primary .usa-current{position:relative}.usa-nav__primary .usa-current:after{background-color:#005ea2;border-radius:99rem;bottom:.25rem;content:"";display:block;left:0;position:absolute;top:.25rem;width:.25rem}}@media (max-width:63.99em){.usa-nav__primary a{padding-bottom:.75rem;padding-top:.75rem}}@media (min-width:64em){.usa-nav__primary{display:flex}}.usa-nav__primary .usa-nav__primary-item a{text-decoration:none}.usa-nav__primary>.usa-nav__primary-item{line-height:1.1}@media (min-width:64em){.usa-nav__primary>.usa-nav__primary-item{font-size:.93rem;line-height:.9}.usa-nav__primary>.usa-nav__primary-item>a{color:#565c65;display:block;font-weight:700;line-height:.9;padding:1rem}.usa-nav__primary>.usa-nav__primary-item>a:hover{color:#005ea2}.usa-nav__primary a{padding-bottom:.5rem;padding-top:.5rem}}.usa-nav__primary button{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:subpixel-antialiased;background-color:transparent;border:0;border-radius:0;box-shadow:none;color:#005ea2;color:#565c65;font-weight:400;line-height:1.1;margin:0;padding:.75rem 1rem;text-align:left;text-decoration:underline;text-decoration:none}.usa-nav__primary button:visited{color:#54278f}.usa-nav__primary button:hover{color:#1a4480}.usa-nav__primary button:active{color:#162e51}.usa-nav__primary button:focus{outline:.25rem solid #2491ff;outline-offset:0}.usa-nav__primary button:active,.usa-nav__primary button:hover{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:subpixel-antialiased;background-color:transparent;box-shadow:none;text-decoration:underline}@media (min-width:64em){.usa-nav__primary button{font-size:.93rem;font-weight:700;line-height:.9;padding:1rem}}.usa-nav__primary button:hover{background-color:#f0f0f0;color:#005ea2;text-decoration:none}@media (min-width:64em){.usa-nav__primary button:hover{background-color:transparent}}.usa-nav__primary button[aria-expanded=false]{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGQ9Ik0xOSAxM2gtNnY2aC0ydi02SDV2LTJoNlY1aDJ2Nmg2djJ6Ii8+PC9zdmc+),linear-gradient(transparent,transparent);background-position:right 0 center;background-repeat:no-repeat;background-size:1.25rem}@media (min-width:64em){.usa-nav__primary button[aria-expanded=false]{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGQ9Ik0xNi41OSA4LjU5IDEyIDEzLjE3IDcuNDEgOC41OSA2IDEwbDYgNiA2LTZ6Ii8+PC9zdmc+),linear-gradient(transparent,transparent);background-position:right .75rem top 53%;background-repeat:no-repeat;background-size:1rem}.usa-nav__primary button[aria-expanded=false]:hover{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGZpbGw9IiMxYTQ0ODAiIGQ9Ik0xNi41OSA4LjU5IDEyIDEzLjE3IDcuNDEgOC41OSA2IDEwbDYgNiA2LTZ6Ii8+PC9zdmc+),linear-gradient(transparent,transparent);background-repeat:no-repeat}}.usa-nav__primary button[aria-expanded=true]{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGQ9Ik0xOSAxM0g1di0yaDE0djJ6Ii8+PC9zdmc+),linear-gradient(transparent,transparent);background-position:right 0 center;background-repeat:no-repeat;background-size:1.25rem}@media (min-width:64em){.usa-nav__primary button[aria-expanded=true]{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;background-color:#162e51;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Im0xMiA4LTYgNiAxLjQxIDEuNDFMMTIgMTAuODNsNC41OSA0LjU4TDE4IDE0eiIvPjwvc3ZnPg==),linear-gradient(transparent,transparent);background-position:right .75rem top 53%;background-repeat:no-repeat;background-size:1rem;color:#fff}.usa-nav__primary .usa-accordion__button span{margin-right:0;padding-right:1rem}}.usa-nav__secondary{margin-top:1rem}@media (min-width:64em){.usa-nav__secondary{align-items:flex-end;bottom:4rem;display:flex;flex-direction:column;font-size:.93rem;margin-top:.5rem;min-width:calc(27ch + 3rem);position:absolute;right:2rem}}.usa-nav__secondary .usa-search{margin-top:1rem;width:100%}@media (min-width:64em){.usa-nav__secondary .usa-search{margin-left:0;margin-top:.5rem}}.usa-nav__secondary-links{line-height:1.3;list-style-type:none;margin-bottom:0;margin-top:1.5rem;padding-left:0}@media (min-width:64em){.usa-nav__secondary-links{float:right;line-height:.9;margin-bottom:.25rem;margin-top:0}.usa-nav__secondary-links .usa-nav__secondary-item{display:inline;padding-left:.25rem}.usa-nav__secondary-links .usa-nav__secondary-item+.usa-nav__secondary-item:before{color:#dfe1e2;content:"|";padding-right:.25rem}}.usa-nav__secondary-links a{color:#71767a;display:inline-block;font-size:.93rem;text-decoration:none}.usa-nav__secondary-links a:hover{color:#005ea2;text-decoration:underline}@media (max-width:63.99em){.usa-nav__submenu{list-style-type:none;margin:0;padding-left:0}.usa-nav__submenu>li{margin-bottom:0;max-width:unset}.usa-nav__submenu-item{border-top:1px solid #dfe1e2;font-size:.93rem}.usa-nav__submenu .usa-current:after{display:none}}@media (max-width:63.99em)and (min-width:40em){.usa-nav__submenu .usa-current:after{display:none}}@media (max-width:63.99em){.usa-nav__submenu a:not(.usa-button){padding-left:2rem}.usa-nav__submenu .usa-nav__submenu a:not(.usa-button){padding-left:3rem}.usa-nav__submenu .usa-nav__submenu .usa-nav__submenu a:not(.usa-button){content:"foobar";padding-left:4rem}}@media (min-width:64em){.usa-nav__submenu{background-color:#162e51;list-style-type:none;margin-bottom:0;margin-top:0;padding:1rem;position:absolute;width:15rem;z-index:400}}.usa-nav__submenu[aria-hidden=true]{display:none}@media (min-width:64em){.usa-nav__submenu .usa-nav__submenu-item+*{margin-top:.75rem}.usa-nav__submenu .usa-nav__submenu-item a{color:#fff;line-height:1.3;padding:0}.usa-nav__submenu .usa-nav__submenu-item a:hover{background-color:transparent;color:#fff;padding:0;text-decoration:underline}}.usa-nav__submenu-list{list-style-type:none;margin-bottom:0;margin-top:0;padding-left:0}.usa-nav__submenu-list>li{margin-bottom:0;max-width:unset}.usa-nav__submenu-list .usa-nav__submenu-list-item{font-size:.93rem;margin:0}.usa-nav__submenu-list .usa-nav__submenu-list-item a{line-height:1.3}.usa-nav__close{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:subpixel-antialiased;background-color:transparent;border:0;border-radius:0;box-shadow:none;color:#005ea2;color:currentColor;flex:none;float:right;font-weight:400;height:3rem;margin:-.75rem -1rem 1rem auto;padding:0;text-align:left;text-align:center;text-decoration:underline;width:3rem}.usa-nav__close:visited{color:#54278f}.usa-nav__close:hover{color:#1a4480}.usa-nav__close:active{color:#162e51}.usa-nav__close:focus{outline:.25rem solid #2491ff;outline-offset:0}.usa-nav__close:active,.usa-nav__close:hover{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:subpixel-antialiased;background-color:transparent;box-shadow:none;text-decoration:underline}.usa-nav__close:hover{color:currentColor;text-decoration:none}@media (min-width:64em){.usa-nav__close{display:none}}.usa-nav__close img{width:1.5rem}.usa-nav__close+*{clear:both}.usa-js-mobile-nav--active{overflow:hidden}.usa-process-list{counter-reset:usa-numbered-list;font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.06rem;line-height:1.5;list-style-type:none;margin-bottom:0;margin-top:0;padding:20px 0 0 1rem;position:relative}.usa-process-list>li{margin-bottom:0;max-width:unset}.usa-process-list>.usa-process-list__item{max-width:72ex}.usa-process-list__item{border-left:.5rem solid #d9e8f6;font-size:1.06rem;margin-bottom:0;padding-bottom:2rem;padding-left:2rem}.usa-prose .usa-process-list{counter-reset:usa-numbered-list;font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.06rem;line-height:1.5;list-style-type:none;margin-bottom:0;margin-top:0;padding:20px 0 0 1rem;position:relative}.usa-prose .usa-process-list>li{margin-bottom:0;max-width:unset}.usa-prose .usa-process-list>.usa-process-list__item{max-width:72ex}.usa-prose .usa-process-list__item{border-left:.5rem solid #d9e8f6;font-size:1.06rem;margin-bottom:0;padding-bottom:2rem;padding-left:2rem}.usa-process-list__item:last-child{border-left:.5rem solid transparent}.usa-process-list__item:before{align-items:center;background-color:#fff;border:.25rem solid #1b1b1b;border-radius:99rem;box-shadow:0 0 0 .25rem #fff;color:#1b1b1b;content:counter(usa-numbered-list,decimal);counter-increment:usa-numbered-list;display:flex;flex-direction:row;font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.46rem;font-weight:700;height:2.5rem;justify-content:center;left:0;line-height:.9;margin-top:-.4rem;position:absolute;width:2.5rem}.usa-process-list__item ul{list-style-type:disc}.usa-process-list__item ul li{margin-bottom:.25rem}.usa-process-list__item ul li:last-child{margin-bottom:0}.usa-process-list__item>:first-child{margin-top:0}.usa-process-list__item>:last-child{margin-bottom:0}.usa-process-list__heading{color:#1b1b1b;font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.46rem;font-weight:700;line-height:1.1;margin:0}.usa-process-list__heading+*{margin-top:.25rem}.usa-step-indicator{background-color:#fff;font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.06rem;line-height:1.1;margin-bottom:2rem;margin-left:-1px;margin-right:-1px}@media (min-width:40em){.usa-step-indicator{margin-left:0;margin-right:0}}.usa-step-indicator__segments{counter-reset:usa-step-indicator;display:flex;list-style:none;margin:0;padding:0}.usa-step-indicator__segment{counter-increment:usa-step-indicator;flex:1 1;margin-left:1px;margin-right:1px;max-width:15rem;min-height:.5rem;position:relative}.usa-step-indicator__segment:after{background-color:#dfe1e2;content:"";display:block;height:.5rem;left:0;position:absolute;right:0;top:0}@media (min-width:40em){.usa-step-indicator__segment:after{height:.5rem}}.usa-step-indicator__segment--complete:after{background-color:#162e51}.usa-step-indicator__segment--complete .usa-step-indicator__segment-label{color:#162e51}.usa-step-indicator__segment--current:after{background-color:#005ea2}.usa-step-indicator__segment--current .usa-step-indicator__segment-label{color:#005ea2;font-weight:700}.usa-step-indicator__segment-label{display:none}@media (min-width:40em){.usa-step-indicator__segment-label{color:#565c65;display:block;font-size:1.06rem;margin-top:1rem;padding-right:2rem;text-align:left}}.usa-step-indicator__header{align-items:baseline;display:flex}.usa-step-indicator__heading{color:#1b1b1b;font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.13rem;font-weight:700;margin:1rem 0 0}@media (min-width:40em){.usa-step-indicator__heading{font-size:1.46rem;margin-top:2rem}}.usa-step-indicator__current-step{background-color:#005ea2;border-radius:99rem;color:#fff;display:inline-block;height:2.5rem;padding:calc(1.25rem - 1.1ex);text-align:center;width:2.5rem}.usa-step-indicator__current-step,.usa-step-indicator__total-steps{-webkit-font-feature-settings:"tnum" 1,"kern" 1;font-feature-settings:"tnum" 1,"kern" 1;font-weight:400}.usa-step-indicator__total-steps{color:#005ea2;margin-right:.5rem}@media (min-width:40em){.usa-step-indicator--counters-sm .usa-step-indicator__segment,.usa-step-indicator--counters .usa-step-indicator__segment{margin-left:0;margin-right:0;margin-top:1.25rem}.usa-step-indicator--counters-sm .usa-step-indicator__segment:before,.usa-step-indicator--counters .usa-step-indicator__segment:before{-webkit-font-feature-settings:"tnum" 1,"kern" 1;font-feature-settings:"tnum" 1,"kern" 1;background-color:#fff;border-radius:99rem;box-shadow:inset 0 0 0 .25rem #dfe1e2,0 0 0 .25rem #fff;color:#565c65;content:counter(usa-step-indicator);display:block;font-weight:700;height:2.5rem;left:0;line-height:.9;padding:calc(1.25rem - .9ex);position:absolute;text-align:center;top:-1rem;width:2.5rem;z-index:100}.usa-step-indicator--counters-sm .usa-step-indicator__segment:last-child:after,.usa-step-indicator--counters .usa-step-indicator__segment:last-child:after{display:none}}.usa-step-indicator--counters-sm .usa-step-indicator__segment--complete:before,.usa-step-indicator--counters .usa-step-indicator__segment--complete:before{background-color:#162e51;box-shadow:0 0 0 .25rem #fff;color:#fff}.usa-step-indicator--counters-sm .usa-step-indicator__segment--current:before,.usa-step-indicator--counters .usa-step-indicator__segment--current:before{background-color:#005ea2;box-shadow:0 0 0 .25rem #fff;color:#fff}@media (min-width:40em){.usa-step-indicator--counters-sm .usa-step-indicator__segment-label,.usa-step-indicator--counters .usa-step-indicator__segment-label{margin-top:2rem}.usa-step-indicator--counters-sm.usa-step-indicator--center .usa-step-indicator__segment:first-child:after,.usa-step-indicator--counters.usa-step-indicator--center .usa-step-indicator__segment:first-child:after{left:50%;right:0;width:auto}.usa-step-indicator--counters-sm.usa-step-indicator--center .usa-step-indicator__segment:last-child:after,.usa-step-indicator--counters.usa-step-indicator--center .usa-step-indicator__segment:last-child:after{display:block;left:0;right:50%;width:auto}.usa-step-indicator--counters-sm .usa-step-indicator__segment{margin-top:.75rem}.usa-step-indicator--counters-sm .usa-step-indicator__segment:before{border-radius:99rem;font-size:.93rem;height:1.5rem;padding:calc(.25rem + 1px);top:-.5rem;width:1.5rem}.usa-step-indicator--counters-sm .usa-step-indicator__segment:last-child:after{display:none}.usa-step-indicator--counters-sm .usa-step-indicator__segment-label{margin-top:1.5rem}}.usa-step-indicator--no-labels{margin-left:-1px;margin-right:-1px}.usa-step-indicator--no-labels .usa-step-indicator__segment{margin-left:1px;margin-right:1px;margin-top:0}.usa-step-indicator--no-labels .usa-step-indicator__segment:before{display:none}.usa-step-indicator--no-labels .usa-step-indicator__segment:last-child:after{display:block}.usa-step-indicator--no-labels .usa-step-indicator__heading{margin-top:1rem}.usa-step-indicator--no-labels .usa-step-indicator__segment-label{display:none}.usa-step-indicator--center{margin-left:-1px;margin-right:-1px}.usa-step-indicator--center .usa-step-indicator__segment{margin-left:1px;margin-right:1px}.usa-step-indicator--center .usa-step-indicator__segment:before{left:calc(50% - 1.375rem)}.usa-step-indicator--center .usa-step-indicator__segment-label{padding-left:.5rem;padding-right:.5rem;text-align:center}.usa-step-indicator--center.usa-step-indicator--no-labels .usa-step-indicator__segment:first-child:after{left:0}.usa-step-indicator--center.usa-step-indicator--no-labels .usa-step-indicator__segment:last-child:after{right:0}.usa-step-indicator--center.usa-step-indicator--counters-sm .usa-step-indicator__segment:before{left:calc(50% - .875rem)}.usa-search{font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.06rem;line-height:1.5;position:relative}.usa-search:after{clear:both;content:"";display:block}.usa-search[role=search],.usa-search [role=search],.usa-search[role=search]>div{display:flex}.usa-search [type=submit]{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0xNS41IDE0aC0uNzlsLS4yOC0uMjdBNi40NzEgNi40NzEgMCAwIDAgMTYgOS41IDYuNSA2LjUgMCAxIDAgOS41IDE2YzEuNjEgMCAzLjA5LS41OSA0LjIzLTEuNTdsLjI3LjI4di43OWw1IDQuOTlMMjAuNDkgMTlsLTQuOTktNXptLTYgMEM3LjAxIDE0IDUgMTEuOTkgNSA5LjVTNy4wMSA1IDkuNSA1IDE0IDcuMDEgMTQgOS41IDExLjk5IDE0IDkuNSAxNHoiLz48L3N2Zz4=),linear-gradient(transparent,transparent);background-position:50%;background-repeat:no-repeat;background-size:1.5rem;border-bottom-left-radius:0;border-top-left-radius:0;height:2rem;margin:0;padding:0;width:3rem}@media (min-width:30em){.usa-search [type=submit]{background-image:none;padding-left:1rem;padding-right:1rem;width:auto}.usa-search--big .usa-search__input,.usa-search--big [type=search]{font-size:1.06rem;height:3rem}.usa-search--big .usa-search__submit,.usa-search--big [type=submit]{font-size:1.46rem;height:3rem;padding-left:2rem;padding-right:2rem;width:auto}.usa-search--small .usa-search__submit,.usa-search--small [type=submit]{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0xNS41IDE0aC0uNzlsLS4yOC0uMjdBNi40NzEgNi40NzEgMCAwIDAgMTYgOS41IDYuNSA2LjUgMCAxIDAgOS41IDE2YzEuNjEgMCAzLjA5LS41OSA0LjIzLTEuNTdsLjI3LjI4di43OWw1IDQuOTlMMjAuNDkgMTlsLTQuOTktNXptLTYgMEM3LjAxIDE0IDUgMTEuOTkgNSA5LjVTNy4wMSA1IDkuNSA1IDE0IDcuMDEgMTQgOS41IDExLjk5IDE0IDkuNSAxNHoiLz48L3N2Zz4=),linear-gradient(transparent,transparent);background-position:50%;background-repeat:no-repeat;background-size:1.5rem;width:3rem}}input[type=search]{-webkit-appearance:none;appearance:none;box-sizing:border-box}.usa-search__input,[type=search]{border-bottom-right-radius:0;border-right:none;border-top-right-radius:0;box-sizing:border-box;float:left;font-size:1rem;height:2rem;margin:0;padding-bottom:0;padding-top:0}.usa-search__submit-text{left:-999em;position:absolute;right:auto}@media (min-width:30em){.usa-search__submit-text{position:static}}.usa-section{padding-bottom:2rem;padding-top:2rem}@media (min-width:40em){.usa-section{padding-bottom:4rem;padding-top:4rem}}.usa-section--light{background-color:#f0f0f0}.usa-section--dark{background-color:#162e51;color:#fff}.usa-section--dark h1,.usa-section--dark h2,.usa-section--dark h3,.usa-section--dark h4,.usa-section--dark h5,.usa-section--dark h6{color:#00bde3}.usa-section--dark p{color:#fff}.usa-section--dark a{color:#dfe1e2}.usa-section--dark a:hover{color:#f0f0f0}.usa-section--dark a:active{color:#fff}.usa-sidenav{border-bottom:1px solid #dfe1e2;font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.06rem;line-height:1.3;list-style-type:none;margin-bottom:0;margin-top:0;padding-left:0}.usa-sidenav>li{margin-bottom:0;max-width:unset}.usa-sidenav__item{border-top:1px solid #dfe1e2}.usa-sidenav a:not(.usa-button){color:#565c65;display:block;padding:.5rem 1rem;text-decoration:none}.usa-sidenav a:not(.usa-button):hover{background-color:#f0f0f0;color:#005ea2;text-decoration:none}.usa-sidenav a:not(.usa-button):focus{outline-offset:0}.usa-sidenav .usa-current{color:#005ea2;font-weight:700;position:relative}.usa-sidenav .usa-current:after{background-color:#005ea2;border-radius:99rem;bottom:.25rem;content:"";display:block;left:.25rem;position:absolute;top:.25rem;width:.25rem}@media (min-width:40em){.usa-sidenav .usa-current{position:relative}.usa-sidenav .usa-current:after{background-color:#005ea2;border-radius:99rem;bottom:.25rem;content:"";display:block;left:0;position:absolute;top:.25rem;width:.25rem}}.grid-container .usa-sidenav{margin-left:-1rem;margin-right:-1rem}@media (min-width:40em){.grid-container .usa-sidenav{margin-left:0;margin-right:0}}.usa-sidenav__sublist{font-size:1rem;list-style-type:none;margin:0;padding-left:0}.usa-sidenav__sublist>li{margin-bottom:0;max-width:unset}.usa-sidenav__sublist-item{border-top:1px solid #dfe1e2;font-size:.93rem}.usa-sidenav__sublist .usa-current:after{display:none}@media (min-width:40em){.usa-sidenav__sublist .usa-current:after{display:none}}.usa-sidenav__sublist a:not(.usa-button){padding-left:2rem}.usa-sidenav__sublist .usa-sidenav__sublist a:not(.usa-button){padding-left:3rem}.usa-sidenav__sublist .usa-sidenav__sublist .usa-sidenav__sublist a:not(.usa-button){content:"foobar";padding-left:4rem}.usa-site-alert{background-color:#f0f0f0;position:relative}.usa-site-alert .usa-alert{background-position-x:1rem;margin-left:auto;margin-right:auto;max-width:64rem;padding-left:1rem;padding-right:1rem}@media (min-width:64em){.usa-site-alert .usa-alert{background-position-x:2rem;padding-left:2rem;padding-right:2rem}}.usa-site-alert .usa-alert:before{display:none}.usa-site-alert .usa-alert .usa-alert__body>.usa-list,.usa-site-alert .usa-alert>.usa-list{padding-left:2ch}.usa-site-alert .usa-alert__body{display:block}@media (min-width:40em){.usa-site-alert .usa-alert__body{position:relative}}.usa-site-alert--info,.usa-site-alert--info .usa-alert{background-color:#e7f6f8;color:#1b1b1b}.usa-site-alert--info .usa-alert{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0xIDE1aC0ydi02aDJ2NnptMC04aC0yVjdoMnYyeiIvPjwvc3ZnPg==),linear-gradient(transparent,transparent);background-repeat:no-repeat}.usa-site-alert--info .usa-alert:before{background-color:#00bde3}.usa-site-alert--info .usa-alert .usa-alert__body{padding-left:3.75rem}.usa-site-alert--info .usa-alert .usa-link{color:#005ea2}.usa-site-alert--info .usa-alert .usa-link:visited{color:#54278f}.usa-site-alert--info .usa-alert .usa-link:active,.usa-site-alert--info .usa-alert .usa-link:hover{color:#1a4480}.usa-site-alert--info .usa-alert.usa-alert--no-icon{background-image:none}.usa-site-alert--info .usa-alert.usa-alert--no-icon .usa-alert__body{padding-left:0}.usa-site-alert--emergency{background-color:#9c3d10;color:#fff}.usa-site-alert--emergency .usa-alert{background-color:#9c3d10;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0xIDE1aC0ydi0yaDJ2MnptMC00aC0yVjdoMnY2eiIvPjwvc3ZnPg==),linear-gradient(transparent,transparent);background-repeat:no-repeat;color:#fff}.usa-site-alert--emergency .usa-alert:before{background-color:#9c3d10}.usa-site-alert--emergency .usa-alert .usa-alert__body{padding-left:3.75rem}.usa-site-alert--emergency .usa-alert .usa-link,.usa-site-alert--emergency .usa-alert .usa-link:visited{color:#dfe1e2}.usa-site-alert--emergency .usa-alert .usa-link:active,.usa-site-alert--emergency .usa-alert .usa-link:hover{color:#f0f0f0}.usa-site-alert--emergency .usa-alert.usa-alert--no-icon{background-image:none}.usa-site-alert--emergency .usa-alert.usa-alert--no-icon .usa-alert__body{padding-left:0}.usa-site-alert--no-icon .usa-alert{background-image:none}.usa-site-alert--no-icon .usa-alert .usa-alert__body{padding-left:0}.usa-site-alert--slim .usa-alert{background-position:1.75rem .75rem;background-position-x:1rem;background-size:1.5rem;padding-bottom:.5rem;padding-top:.5rem}.usa-site-alert--slim .usa-alert .usa-alert__body{padding-left:2rem}.usa-site-alert--slim .usa-alert .usa-alert__text:only-child{margin-bottom:.25rem;padding-top:.25rem}@media (min-width:64em){.usa-site-alert--slim .usa-alert{background-position-x:2rem}}.usa-site-alert--no-heading .usa-alert{background-position-y:1rem}.usa-skipnav{background:transparent;color:#005ea2;font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.06rem;left:0;line-height:1.5;padding:.5rem 1rem;position:absolute;text-decoration:underline;top:-3.8rem;transition:.2s ease-in-out;z-index:100}.usa-skipnav:visited{color:#54278f}.usa-skipnav:hover{color:#1a4480}.usa-skipnav:active{color:#162e51}.usa-skipnav:focus{outline:.25rem solid #2491ff;outline-offset:0}.usa-skipnav.usa-focus,.usa-skipnav:focus{background:#fff;left:0;position:absolute;top:0;transition:.2s ease-in-out}.usa-summary-box{background-color:#e7f6f8;border:1px solid #99deea;border-radius:.25rem;color:#1b1b1b;font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.06rem;line-height:1.5;padding:1.5rem;position:relative}.usa-summary-box .usa-list:last-child{margin-bottom:0}*+.usa-summary-box{margin-top:1rem}.usa-summary-box__body{display:table-cell;vertical-align:top}.usa-summary-box__heading{font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.46rem;line-height:1.1;margin-bottom:.5rem;margin-top:0}.usa-summary-box__text{margin-bottom:0;margin-top:0}.usa-summary-box__text:only-child{margin-bottom:1px;padding-top:.25rem}.usa-summary-box__link{color:#005ea2}.usa-summary-box__link:visited{color:#54278f}.usa-summary-box__link:active,.usa-summary-box__link:hover{color:#1a4480}.usa-summary-box__link[href^="#"]:visited{color:#005ea2}.usa-summary-box__link[href^="#"]:hover{color:#1a4480}.usa-tooltip{display:inline-block;position:relative}.usa-tooltip__trigger{cursor:pointer}.usa-tooltip__trigger>svg{display:block;pointer-events:none}.usa-tooltip__body{background-color:#1b1b1b;border-radius:.25rem;bottom:0;color:#f0f0f0;display:none;font-size:1rem;left:0;opacity:0;padding:.5rem;pointer-events:none;position:absolute;-webkit-transform:translateX(-50%);transform:translateX(-50%);transition:opacity .08s ease-in-out;white-space:pre;width:auto;z-index:100000}.usa-tooltip__body:after{border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #1b1b1b;bottom:-5px;content:"";display:block;height:0;left:50%;margin-left:-5px;pointer-events:none;position:absolute;width:0}.usa-tooltip__body--wrap{white-space:normal;width:100%}.usa-tooltip__body.is-set{display:block}.usa-tooltip__body.is-visible{opacity:1}.usa-tooltip__body--bottom{bottom:auto;top:0}.usa-tooltip__body--bottom:after{border-bottom:5px solid #1b1b1b;border-left:5px solid transparent;border-right:5px solid transparent;border-top:0;bottom:auto;top:-5px}.usa-tooltip__body--right{top:auto;-webkit-transform:translateX(0);transform:translateX(0)}.usa-tooltip__body--right:after{border-bottom:5px solid transparent;border-left:0;border-right:5px solid #1b1b1b;border-top:5px solid transparent;bottom:0;left:-5px;margin:-5px 0 0;right:auto;top:50%}.usa-tooltip__body--left{left:0;right:auto;top:auto;-webkit-transform:translateX(0);transform:translateX(0)}.usa-tooltip__body--left:after{border-bottom:5px solid transparent;border-left:5px solid #1b1b1b;border-right:0;border-top:5px solid transparent;bottom:0;left:auto;margin:-5px 0 0;right:-5px;top:50%}[class*=font-mono-]{font-family:Roboto Mono Web,Bitstream Vera Sans Mono,Consolas,Courier,monospace}[class*=font-sans-]{font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif}[class*=font-serif-]{font-family:Merriweather Web,Georgia,Cambria,Times New Roman,Times,serif}[class*=font-body-],[class*=font-heading-],[class*=font-ui-]{font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif}[class*=font-code-]{font-family:Roboto Mono Web,Bitstream Vera Sans Mono,Consolas,Courier,monospace}[class*=font-alt-]{font-family:Merriweather Web,Georgia,Cambria,Times New Roman,Times,serif}.add-aspect-9x16{padding:0 0 177.77778%}.add-aspect-1x1,.add-aspect-9x16{box-sizing:border-box;height:0;overflow:hidden;position:relative}.add-aspect-1x1{padding:0 0 100%}.add-aspect-4x3{padding:0 0 75%}.add-aspect-4x3,.add-aspect-16x9{box-sizing:border-box;height:0;overflow:hidden;position:relative}.add-aspect-16x9{padding:0 0 56.25%}.add-aspect-2x1{box-sizing:border-box;height:0;overflow:hidden;padding:0 0 50%;position:relative}.add-list-reset{list-style:none;margin-bottom:0;margin-top:0;padding-left:0}.flex-align-start{align-items:flex-start}.flex-align-end{align-items:flex-end}.flex-align-center{align-items:center}.flex-align-stretch{align-items:stretch}.flex-align-baseline{align-items:baseline}.flex-align-self-start{align-self:flex-start}.flex-align-self-end{align-self:flex-end}.flex-align-self-center{align-self:center}.flex-align-self-stretch{align-self:stretch}.flex-align-self-baseline{align-self:baseline}.bg-transparent,.hover\:bg-transparent:hover{background-color:transparent}.bg-black,.hover\:bg-black:hover{background-color:#000}.bg-white,.hover\:bg-white:hover{background-color:#fff}.bg-red,.hover\:bg-red:hover{background-color:#e52207}.bg-orange,.hover\:bg-orange:hover{background-color:#e66f0e}.bg-gold,.hover\:bg-gold:hover{background-color:#ffbe2e}.bg-yellow,.hover\:bg-yellow:hover{background-color:#fee685}.bg-green,.hover\:bg-green:hover{background-color:#538200}.bg-mint,.hover\:bg-mint:hover{background-color:#04c585}.bg-cyan,.hover\:bg-cyan:hover{background-color:#009ec1}.bg-blue,.hover\:bg-blue:hover{background-color:#0076d6}.bg-indigo,.hover\:bg-indigo:hover{background-color:#676cc8}.bg-violet,.hover\:bg-violet:hover{background-color:#8168b3}.bg-magenta,.hover\:bg-magenta:hover{background-color:#d72d79}.bg-gray-5,.hover\:bg-gray-5:hover{background-color:#f0f0f0}.bg-gray-10,.hover\:bg-gray-10:hover{background-color:#e6e6e6}.bg-gray-30,.hover\:bg-gray-30:hover{background-color:#adadad}.bg-gray-50,.hover\:bg-gray-50:hover{background-color:#757575}.bg-gray-70,.hover\:bg-gray-70:hover{background-color:#454545}.bg-gray-90,.hover\:bg-gray-90:hover{background-color:#1b1b1b}.bg-base-lightest,.hover\:bg-base-lightest:hover{background-color:#f0f0f0}.bg-base-lighter,.hover\:bg-base-lighter:hover{background-color:#dfe1e2}.bg-base-light,.hover\:bg-base-light:hover{background-color:#a9aeb1}.bg-base,.hover\:bg-base:hover{background-color:#71767a}.bg-base-dark,.hover\:bg-base-dark:hover{background-color:#565c65}.bg-base-darker,.hover\:bg-base-darker:hover{background-color:#3d4551}.bg-base-darkest,.bg-ink,.hover\:bg-base-darkest:hover,.hover\:bg-ink:hover{background-color:#1b1b1b}.bg-primary-lighter,.hover\:bg-primary-lighter:hover{background-color:#d9e8f6}.bg-primary-light,.hover\:bg-primary-light:hover{background-color:#73b3e7}.bg-primary,.hover\:bg-primary:hover{background-color:#005ea2}.bg-primary-vivid,.hover\:bg-primary-vivid:hover{background-color:#0050d8}.bg-primary-dark,.hover\:bg-primary-dark:hover{background-color:#1a4480}.bg-primary-darker,.hover\:bg-primary-darker:hover{background-color:#162e51}.bg-secondary-lighter,.hover\:bg-secondary-lighter:hover{background-color:#f3e1e4}.bg-secondary-light,.hover\:bg-secondary-light:hover{background-color:#f2938c}.bg-secondary,.hover\:bg-secondary:hover{background-color:#d83933}.bg-secondary-vivid,.hover\:bg-secondary-vivid:hover{background-color:#e41d3d}.bg-secondary-dark,.hover\:bg-secondary-dark:hover{background-color:#b50909}.bg-secondary-darker,.hover\:bg-secondary-darker:hover{background-color:#8b0a03}.bg-accent-warm-darker,.hover\:bg-accent-warm-darker:hover{background-color:#775540}.bg-accent-warm-dark,.hover\:bg-accent-warm-dark:hover{background-color:#c05600}.bg-accent-warm,.hover\:bg-accent-warm:hover{background-color:#fa9441}.bg-accent-warm-light,.hover\:bg-accent-warm-light:hover{background-color:#ffbc78}.bg-accent-warm-lighter,.hover\:bg-accent-warm-lighter:hover{background-color:#f2e4d4}.bg-accent-cool-darker,.hover\:bg-accent-cool-darker:hover{background-color:#07648d}.bg-accent-cool-dark,.hover\:bg-accent-cool-dark:hover{background-color:#28a0cb}.bg-accent-cool,.hover\:bg-accent-cool:hover{background-color:#00bde3}.bg-accent-cool-light,.hover\:bg-accent-cool-light:hover{background-color:#97d4ea}.bg-accent-cool-lighter,.hover\:bg-accent-cool-lighter:hover{background-color:#e1f3f8}.border-1px,.hover\:border-1px:hover{border:1px solid}.border-y-1px,.hover\:border-y-1px:hover{border-bottom:1px solid;border-top:1px solid}.border-x-1px,.hover\:border-x-1px:hover{border-left:1px solid;border-right:1px solid}.border-top-1px,.hover\:border-top-1px:hover{border-top:1px solid}.border-right-1px,.hover\:border-right-1px:hover{border-right:1px solid}.border-bottom-1px,.hover\:border-bottom-1px:hover{border-bottom:1px solid}.border-left-1px,.hover\:border-left-1px:hover{border-left:1px solid}.border-2px,.hover\:border-2px:hover{border:2px solid}.border-y-2px,.hover\:border-y-2px:hover{border-bottom:2px solid;border-top:2px solid}.border-x-2px,.hover\:border-x-2px:hover{border-left:2px solid;border-right:2px solid}.border-top-2px,.hover\:border-top-2px:hover{border-top:2px solid}.border-right-2px,.hover\:border-right-2px:hover{border-right:2px solid}.border-bottom-2px,.hover\:border-bottom-2px:hover{border-bottom:2px solid}.border-left-2px,.hover\:border-left-2px:hover{border-left:2px solid}.border-05,.hover\:border-05:hover{border:.25rem solid}.border-y-05,.hover\:border-y-05:hover{border-bottom:.25rem solid;border-top:.25rem solid}.border-x-05,.hover\:border-x-05:hover{border-left:.25rem solid;border-right:.25rem solid}.border-top-05,.hover\:border-top-05:hover{border-top:.25rem solid}.border-right-05,.hover\:border-right-05:hover{border-right:.25rem solid}.border-bottom-05,.hover\:border-bottom-05:hover{border-bottom:.25rem solid}.border-left-05,.hover\:border-left-05:hover{border-left:.25rem solid}.border-1,.hover\:border-1:hover{border:.5rem solid}.border-y-1,.hover\:border-y-1:hover{border-bottom:.5rem solid;border-top:.5rem solid}.border-x-1,.hover\:border-x-1:hover{border-left:.5rem solid;border-right:.5rem solid}.border-top-1,.hover\:border-top-1:hover{border-top:.5rem solid}.border-right-1,.hover\:border-right-1:hover{border-right:.5rem solid}.border-bottom-1,.hover\:border-bottom-1:hover{border-bottom:.5rem solid}.border-left-1,.hover\:border-left-1:hover{border-left:.5rem solid}.border-105,.hover\:border-105:hover{border:.75rem solid}.border-y-105,.hover\:border-y-105:hover{border-bottom:.75rem solid;border-top:.75rem solid}.border-x-105,.hover\:border-x-105:hover{border-left:.75rem solid;border-right:.75rem solid}.border-top-105,.hover\:border-top-105:hover{border-top:.75rem solid}.border-right-105,.hover\:border-right-105:hover{border-right:.75rem solid}.border-bottom-105,.hover\:border-bottom-105:hover{border-bottom:.75rem solid}.border-left-105,.hover\:border-left-105:hover{border-left:.75rem solid}.border-2,.hover\:border-2:hover{border:1rem solid}.border-y-2,.hover\:border-y-2:hover{border-bottom:1rem solid;border-top:1rem solid}.border-x-2,.hover\:border-x-2:hover{border-left:1rem solid;border-right:1rem solid}.border-top-2,.hover\:border-top-2:hover{border-top:1rem solid}.border-right-2,.hover\:border-right-2:hover{border-right:1rem solid}.border-bottom-2,.hover\:border-bottom-2:hover{border-bottom:1rem solid}.border-left-2,.hover\:border-left-2:hover{border-left:1rem solid}.border-205,.hover\:border-205:hover{border:1.25rem solid}.border-y-205,.hover\:border-y-205:hover{border-bottom:1.25rem solid;border-top:1.25rem solid}.border-x-205,.hover\:border-x-205:hover{border-left:1.25rem solid;border-right:1.25rem solid}.border-top-205,.hover\:border-top-205:hover{border-top:1.25rem solid}.border-right-205,.hover\:border-right-205:hover{border-right:1.25rem solid}.border-bottom-205,.hover\:border-bottom-205:hover{border-bottom:1.25rem solid}.border-left-205,.hover\:border-left-205:hover{border-left:1.25rem solid}.border-3,.hover\:border-3:hover{border:1.5rem solid}.border-y-3,.hover\:border-y-3:hover{border-bottom:1.5rem solid;border-top:1.5rem solid}.border-x-3,.hover\:border-x-3:hover{border-left:1.5rem solid;border-right:1.5rem solid}.border-top-3,.hover\:border-top-3:hover{border-top:1.5rem solid}.border-right-3,.hover\:border-right-3:hover{border-right:1.5rem solid}.border-bottom-3,.hover\:border-bottom-3:hover{border-bottom:1.5rem solid}.border-left-3,.hover\:border-left-3:hover{border-left:1.5rem solid}.border-0,.hover\:border-0:hover{border:0 solid}.border-y-0,.hover\:border-y-0:hover{border-bottom:0 solid;border-top:0 solid}.border-x-0,.hover\:border-x-0:hover{border-left:0 solid;border-right:0 solid}.border-top-0,.hover\:border-top-0:hover{border-top:0 solid}.border-right-0,.hover\:border-right-0:hover{border-right:0 solid}.border-bottom-0,.hover\:border-bottom-0:hover{border-bottom:0 solid}.border-left-0,.hover\:border-left-0:hover{border-left:0 solid}.border,.hover\:border:hover{border:1px solid}.border-y,.hover\:border-y:hover{border-bottom:1px solid;border-top:1px solid}.border-x,.hover\:border-x:hover{border-left:1px solid;border-right:1px solid}.border-top,.hover\:border-top:hover{border-top:1px solid}.border-right,.hover\:border-right:hover{border-right:1px solid}.border-bottom,.hover\:border-bottom:hover{border-bottom:1px solid}.border-left,.hover\:border-left:hover{border-left:1px solid}.border-transparent,.hover\:border-transparent:hover{border-color:transparent}.border-black,.hover\:border-black:hover{border-color:#000}.border-white,.hover\:border-white:hover{border-color:#fff}.border-red,.hover\:border-red:hover{border-color:#e52207}.border-orange,.hover\:border-orange:hover{border-color:#e66f0e}.border-gold,.hover\:border-gold:hover{border-color:#ffbe2e}.border-yellow,.hover\:border-yellow:hover{border-color:#fee685}.border-green,.hover\:border-green:hover{border-color:#538200}.border-mint,.hover\:border-mint:hover{border-color:#04c585}.border-cyan,.hover\:border-cyan:hover{border-color:#009ec1}.border-blue,.hover\:border-blue:hover{border-color:#0076d6}.border-indigo,.hover\:border-indigo:hover{border-color:#676cc8}.border-violet,.hover\:border-violet:hover{border-color:#8168b3}.border-magenta,.hover\:border-magenta:hover{border-color:#d72d79}.border-gray-5,.hover\:border-gray-5:hover{border-color:#f0f0f0}.border-gray-10,.hover\:border-gray-10:hover{border-color:#e6e6e6}.border-gray-30,.hover\:border-gray-30:hover{border-color:#adadad}.border-gray-50,.hover\:border-gray-50:hover{border-color:#757575}.border-gray-70,.hover\:border-gray-70:hover{border-color:#454545}.border-gray-90,.hover\:border-gray-90:hover{border-color:#1b1b1b}.border-base-lightest,.hover\:border-base-lightest:hover{border-color:#f0f0f0}.border-base-lighter,.hover\:border-base-lighter:hover{border-color:#dfe1e2}.border-base-light,.hover\:border-base-light:hover{border-color:#a9aeb1}.border-base,.hover\:border-base:hover{border-color:#71767a}.border-base-dark,.hover\:border-base-dark:hover{border-color:#565c65}.border-base-darker,.hover\:border-base-darker:hover{border-color:#3d4551}.border-base-darkest,.border-ink,.hover\:border-base-darkest:hover,.hover\:border-ink:hover{border-color:#1b1b1b}.border-primary-lighter,.hover\:border-primary-lighter:hover{border-color:#d9e8f6}.border-primary-light,.hover\:border-primary-light:hover{border-color:#73b3e7}.border-primary,.hover\:border-primary:hover{border-color:#005ea2}.border-primary-vivid,.hover\:border-primary-vivid:hover{border-color:#0050d8}.border-primary-dark,.hover\:border-primary-dark:hover{border-color:#1a4480}.border-primary-darker,.hover\:border-primary-darker:hover{border-color:#162e51}.border-secondary-lighter,.hover\:border-secondary-lighter:hover{border-color:#f3e1e4}.border-secondary-light,.hover\:border-secondary-light:hover{border-color:#f2938c}.border-secondary,.hover\:border-secondary:hover{border-color:#d83933}.border-secondary-vivid,.hover\:border-secondary-vivid:hover{border-color:#e41d3d}.border-secondary-dark,.hover\:border-secondary-dark:hover{border-color:#b50909}.border-secondary-darker,.hover\:border-secondary-darker:hover{border-color:#8b0a03}.border-accent-warm-darker,.hover\:border-accent-warm-darker:hover{border-color:#775540}.border-accent-warm-dark,.hover\:border-accent-warm-dark:hover{border-color:#c05600}.border-accent-warm,.hover\:border-accent-warm:hover{border-color:#fa9441}.border-accent-warm-light,.hover\:border-accent-warm-light:hover{border-color:#ffbc78}.border-accent-warm-lighter,.hover\:border-accent-warm-lighter:hover{border-color:#f2e4d4}.border-accent-cool-darker,.hover\:border-accent-cool-darker:hover{border-color:#07648d}.border-accent-cool-dark,.hover\:border-accent-cool-dark:hover{border-color:#28a0cb}.border-accent-cool,.hover\:border-accent-cool:hover{border-color:#00bde3}.border-accent-cool-light,.hover\:border-accent-cool-light:hover{border-color:#97d4ea}.border-accent-cool-lighter,.hover\:border-accent-cool-lighter:hover{border-color:#e1f3f8}.radius-0{border-radius:0}.radius-top-0{border-top-left-radius:0;border-top-right-radius:0}.radius-right-0{border-bottom-right-radius:0;border-top-right-radius:0}.radius-bottom-0{border-bottom-left-radius:0;border-bottom-right-radius:0}.radius-left-0{border-bottom-left-radius:0;border-top-left-radius:0}.radius-none{border-radius:0}.radius-top-none{border-top-left-radius:0;border-top-right-radius:0}.radius-right-none{border-bottom-right-radius:0;border-top-right-radius:0}.radius-bottom-none{border-bottom-left-radius:0;border-bottom-right-radius:0}.radius-left-none{border-bottom-left-radius:0;border-top-left-radius:0}.radius-sm{border-radius:2px}.radius-top-sm{border-top-left-radius:2px;border-top-right-radius:2px}.radius-right-sm{border-bottom-right-radius:2px;border-top-right-radius:2px}.radius-bottom-sm{border-bottom-left-radius:2px;border-bottom-right-radius:2px}.radius-left-sm{border-bottom-left-radius:2px;border-top-left-radius:2px}.radius-md{border-radius:.25rem}.radius-top-md{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.radius-right-md{border-bottom-right-radius:.25rem;border-top-right-radius:.25rem}.radius-bottom-md{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.radius-left-md{border-bottom-left-radius:.25rem;border-top-left-radius:.25rem}.radius-lg{border-radius:.5rem}.radius-top-lg{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.radius-right-lg{border-bottom-right-radius:.5rem;border-top-right-radius:.5rem}.radius-bottom-lg{border-bottom-left-radius:.5rem;border-bottom-right-radius:.5rem}.radius-left-lg{border-bottom-left-radius:.5rem;border-top-left-radius:.5rem}.radius-pill{border-radius:99rem}.radius-top-pill{border-top-left-radius:99rem;border-top-right-radius:99rem}.radius-right-pill{border-bottom-right-radius:99rem;border-top-right-radius:99rem}.radius-bottom-pill{border-bottom-left-radius:99rem;border-bottom-right-radius:99rem}.radius-left-pill{border-bottom-left-radius:99rem;border-top-left-radius:99rem}.border-dashed{border-style:dashed}.border-dotted{border-style:dotted}.border-solid{border-style:solid}.border-width-1px{border-width:1px}.border-y-width-1px{border-bottom-width:1px;border-top-width:1px}.border-x-width-1px{border-left-width:1px;border-right-width:1px}.border-top-width-1px{border-top-width:1px}.border-right-width-1px{border-right-width:1px}.border-bottom-width-1px{border-bottom-width:1px}.border-left-width-1px{border-left-width:1px}.border-width-2px{border-width:2px}.border-y-width-2px{border-bottom-width:2px;border-top-width:2px}.border-x-width-2px{border-left-width:2px;border-right-width:2px}.border-top-width-2px{border-top-width:2px}.border-right-width-2px{border-right-width:2px}.border-bottom-width-2px{border-bottom-width:2px}.border-left-width-2px{border-left-width:2px}.border-width-05{border-width:.25rem}.border-y-width-05{border-bottom-width:.25rem;border-top-width:.25rem}.border-x-width-05{border-left-width:.25rem;border-right-width:.25rem}.border-top-width-05{border-top-width:.25rem}.border-right-width-05{border-right-width:.25rem}.border-bottom-width-05{border-bottom-width:.25rem}.border-left-width-05{border-left-width:.25rem}.border-width-1{border-width:.5rem}.border-y-width-1{border-bottom-width:.5rem;border-top-width:.5rem}.border-x-width-1{border-left-width:.5rem;border-right-width:.5rem}.border-top-width-1{border-top-width:.5rem}.border-right-width-1{border-right-width:.5rem}.border-bottom-width-1{border-bottom-width:.5rem}.border-left-width-1{border-left-width:.5rem}.border-width-105{border-width:.75rem}.border-y-width-105{border-bottom-width:.75rem;border-top-width:.75rem}.border-x-width-105{border-left-width:.75rem;border-right-width:.75rem}.border-top-width-105{border-top-width:.75rem}.border-right-width-105{border-right-width:.75rem}.border-bottom-width-105{border-bottom-width:.75rem}.border-left-width-105{border-left-width:.75rem}.border-width-2{border-width:1rem}.border-y-width-2{border-bottom-width:1rem;border-top-width:1rem}.border-x-width-2{border-left-width:1rem;border-right-width:1rem}.border-top-width-2{border-top-width:1rem}.border-right-width-2{border-right-width:1rem}.border-bottom-width-2{border-bottom-width:1rem}.border-left-width-2{border-left-width:1rem}.border-width-205{border-width:1.25rem}.border-y-width-205{border-bottom-width:1.25rem;border-top-width:1.25rem}.border-x-width-205{border-left-width:1.25rem;border-right-width:1.25rem}.border-top-width-205{border-top-width:1.25rem}.border-right-width-205{border-right-width:1.25rem}.border-bottom-width-205{border-bottom-width:1.25rem}.border-left-width-205{border-left-width:1.25rem}.border-width-3{border-width:1.5rem}.border-y-width-3{border-bottom-width:1.5rem;border-top-width:1.5rem}.border-x-width-3{border-left-width:1.5rem;border-right-width:1.5rem}.border-top-width-3{border-top-width:1.5rem}.border-right-width-3{border-right-width:1.5rem}.border-bottom-width-3{border-bottom-width:1.5rem}.border-left-width-3{border-left-width:1.5rem}.border-width-0{border-width:0}.border-y-width-0{border-bottom-width:0;border-top-width:0}.border-x-width-0{border-left-width:0;border-right-width:0}.border-top-width-0{border-top-width:0}.border-right-width-0{border-right-width:0}.border-bottom-width-0{border-bottom-width:0}.border-left-width-0{border-left-width:0}.bottom-1px{bottom:1px}.bottom-2px{bottom:2px}.bottom-05{bottom:.25rem}.bottom-1{bottom:.5rem}.bottom-105{bottom:.75rem}.bottom-2{bottom:1rem}.bottom-205{bottom:1.25rem}.bottom-3{bottom:1.5rem}.bottom-neg-1px{bottom:-1px}.bottom-neg-2px{bottom:-2px}.bottom-neg-05{bottom:-.25rem}.bottom-neg-1{bottom:-.5rem}.bottom-neg-105{bottom:-.75rem}.bottom-neg-2{bottom:-1rem}.bottom-neg-205{bottom:-1.25rem}.bottom-neg-3{bottom:-1.5rem}.bottom-0{bottom:0}.bottom-auto{bottom:auto}.bottom-full{bottom:100%}.hover\:shadow-none:hover,.shadow-none{box-shadow:none}.hover\:shadow-1:hover,.shadow-1{box-shadow:0 1px .25rem 0 rgba(0,0,0,.1)}.hover\:shadow-2:hover,.shadow-2{box-shadow:0 .25rem .5rem 0 rgba(0,0,0,.1)}.hover\:shadow-3:hover,.shadow-3{box-shadow:0 .5rem 1rem 0 rgba(0,0,0,.1)}.hover\:shadow-4:hover,.shadow-4{box-shadow:0 .75rem 1.5rem 0 rgba(0,0,0,.1)}.hover\:shadow-5:hover,.shadow-5{box-shadow:0 1rem 2rem 0 rgba(0,0,0,.1)}.circle-1px{border-radius:50%;height:1px;width:1px}.circle-2px{border-radius:50%;height:2px;width:2px}.circle-05{border-radius:50%;height:.25rem;width:.25rem}.circle-1{border-radius:50%;height:.5rem;width:.5rem}.circle-105{border-radius:50%;height:.75rem;width:.75rem}.circle-2{border-radius:50%;height:1rem;width:1rem}.circle-205{border-radius:50%;height:1.25rem;width:1.25rem}.circle-3{border-radius:50%;height:1.5rem;width:1.5rem}.circle-4{border-radius:50%;height:2rem;width:2rem}.circle-5{border-radius:50%;height:2.5rem;width:2.5rem}.circle-6{border-radius:50%;height:3rem;width:3rem}.circle-7{border-radius:50%;height:3.5rem;width:3.5rem}.circle-8{border-radius:50%;height:4rem;width:4rem}.circle-9{border-radius:50%;height:4.5rem;width:4.5rem}.circle-10{border-radius:50%;height:5rem;width:5rem}.circle-15{border-radius:50%;height:7.5rem;width:7.5rem}.circle-card{border-radius:50%;height:10rem;width:10rem}.circle-card-lg{border-radius:50%;height:15rem;width:15rem}.circle-mobile{border-radius:50%;height:20rem;width:20rem}.clearfix:after{clear:both;content:"";display:block}.hover\:text-transparent:hover,.text-transparent{color:transparent}.hover\:text-black:hover,.text-black{color:#000}.hover\:text-white:hover,.text-white{color:#fff}.hover\:text-red:hover,.text-red{color:#e52207}.hover\:text-orange:hover,.text-orange{color:#e66f0e}.hover\:text-gold:hover,.text-gold{color:#ffbe2e}.hover\:text-yellow:hover,.text-yellow{color:#fee685}.hover\:text-green:hover,.text-green{color:#538200}.hover\:text-mint:hover,.text-mint{color:#04c585}.hover\:text-cyan:hover,.text-cyan{color:#009ec1}.hover\:text-blue:hover,.text-blue{color:#0076d6}.hover\:text-indigo:hover,.text-indigo{color:#676cc8}.hover\:text-violet:hover,.text-violet{color:#8168b3}.hover\:text-magenta:hover,.text-magenta{color:#d72d79}.hover\:text-gray-5:hover,.text-gray-5{color:#f0f0f0}.hover\:text-gray-10:hover,.text-gray-10{color:#e6e6e6}.hover\:text-gray-30:hover,.text-gray-30{color:#adadad}.hover\:text-gray-50:hover,.text-gray-50{color:#757575}.hover\:text-gray-70:hover,.text-gray-70{color:#454545}.hover\:text-gray-90:hover,.text-gray-90{color:#1b1b1b}.hover\:text-base-lightest:hover,.text-base-lightest{color:#f0f0f0}.hover\:text-base-lighter:hover,.text-base-lighter{color:#dfe1e2}.hover\:text-base-light:hover,.text-base-light{color:#a9aeb1}.hover\:text-base:hover,.text-base{color:#71767a}.hover\:text-base-dark:hover,.text-base-dark{color:#565c65}.hover\:text-base-darker:hover,.text-base-darker{color:#3d4551}.hover\:text-base-darkest:hover,.hover\:text-ink:hover,.text-base-darkest,.text-ink{color:#1b1b1b}.hover\:text-primary-lighter:hover,.text-primary-lighter{color:#d9e8f6}.hover\:text-primary-light:hover,.text-primary-light{color:#73b3e7}.hover\:text-primary:hover,.text-primary{color:#005ea2}.hover\:text-primary-vivid:hover,.text-primary-vivid{color:#0050d8}.hover\:text-primary-dark:hover,.text-primary-dark{color:#1a4480}.hover\:text-primary-darker:hover,.text-primary-darker{color:#162e51}.hover\:text-secondary-lighter:hover,.text-secondary-lighter{color:#f3e1e4}.hover\:text-secondary-light:hover,.text-secondary-light{color:#f2938c}.hover\:text-secondary:hover,.text-secondary{color:#d83933}.hover\:text-secondary-vivid:hover,.text-secondary-vivid{color:#e41d3d}.hover\:text-secondary-dark:hover,.text-secondary-dark{color:#b50909}.hover\:text-secondary-darker:hover,.text-secondary-darker{color:#8b0a03}.hover\:text-accent-warm-darker:hover,.text-accent-warm-darker{color:#775540}.hover\:text-accent-warm-dark:hover,.text-accent-warm-dark{color:#c05600}.hover\:text-accent-warm:hover,.text-accent-warm{color:#fa9441}.hover\:text-accent-warm-light:hover,.text-accent-warm-light{color:#ffbc78}.hover\:text-accent-warm-lighter:hover,.text-accent-warm-lighter{color:#f2e4d4}.hover\:text-accent-cool-darker:hover,.text-accent-cool-darker{color:#07648d}.hover\:text-accent-cool-dark:hover,.text-accent-cool-dark{color:#28a0cb}.hover\:text-accent-cool:hover,.text-accent-cool{color:#00bde3}.hover\:text-accent-cool-light:hover,.text-accent-cool-light{color:#97d4ea}.hover\:text-accent-cool-lighter:hover,.text-accent-cool-lighter{color:#e1f3f8}.cursor-auto{cursor:auto}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.cursor-wait{cursor:wait}.cursor-move{cursor:move}.cursor-not-allowed{cursor:not-allowed}.display-block{display:block}.display-flex{display:flex}.display-none{display:none}.display-inline{display:inline}.display-inline-block{display:inline-block}.display-inline-flex{display:inline-flex}.display-table{display:table}.display-table-cell{display:table-cell}.display-table-row{display:table-row}.flex-1{flex:1 1}.flex-2{flex:2 1}.flex-3{flex:3 1}.flex-4{flex:4 1}.flex-5{flex:5 1}.flex-6{flex:6 1}.flex-7{flex:7 1}.flex-8{flex:8 1}.flex-9{flex:9 1}.flex-10{flex:10 1}.flex-11{flex:11 1}.flex-12{flex:12 1}.flex-fill{flex:1 1}.flex-auto{flex:0 1 auto}.flex-row{flex-direction:row}.flex-column{flex-direction:column}.flex-wrap{flex-wrap:wrap}.flex-no-wrap{flex-wrap:nowrap}.float-left{float:left}.float-none{float:none}.float-right{float:right}.font-mono-3xs{font-size:.77rem}.font-mono-2xs{font-size:.83rem}.font-mono-xs{font-size:.89rem}.font-mono-sm{font-size:.95rem}.font-mono-md{font-size:1.01rem}.font-mono-lg{font-size:1.31rem}.font-mono-xl{font-size:1.91rem}.font-mono-2xl{font-size:2.38rem}.font-mono-3xl{font-size:2.86rem}.font-sans-3xs{font-size:.87rem}.font-sans-2xs{font-size:.93rem}.font-sans-xs{font-size:1rem}.font-sans-sm{font-size:1.06rem}.font-sans-md{font-size:1.13rem}.font-sans-lg{font-size:1.46rem}.font-sans-xl{font-size:2.13rem}.font-sans-2xl{font-size:2.66rem}.font-sans-3xl{font-size:3.19rem}.font-serif-3xs{font-size:.79rem}.font-serif-2xs{font-size:.85rem}.font-serif-xs{font-size:.91rem}.font-serif-sm{font-size:.98rem}.font-serif-md{font-size:1.04rem}.font-serif-lg{font-size:1.34rem}.font-serif-xl{font-size:1.95rem}.font-serif-2xl{font-size:2.44rem}.font-serif-3xl{font-size:2.93rem}.font-heading-3xs{font-size:.87rem}.font-heading-2xs{font-size:.93rem}.font-heading-xs{font-size:1rem}.font-heading-sm{font-size:1.06rem}.font-heading-md{font-size:1.13rem}.font-heading-lg{font-size:1.46rem}.font-heading-xl{font-size:2.13rem}.font-heading-2xl{font-size:2.66rem}.font-heading-3xl{font-size:3.19rem}.font-body-3xs{font-size:.87rem}.font-body-2xs{font-size:.93rem}.font-body-xs{font-size:1rem}.font-body-sm{font-size:1.06rem}.font-body-md{font-size:1.13rem}.font-body-lg{font-size:1.46rem}.font-body-xl{font-size:2.13rem}.font-body-2xl{font-size:2.66rem}.font-body-3xl{font-size:3.19rem}.font-code-3xs{font-size:.77rem}.font-code-2xs{font-size:.83rem}.font-code-xs{font-size:.89rem}.font-code-sm{font-size:.95rem}.font-code-md{font-size:1.01rem}.font-code-lg{font-size:1.31rem}.font-code-xl{font-size:1.91rem}.font-code-2xl{font-size:2.38rem}.font-code-3xl{font-size:2.86rem}.font-alt-3xs{font-size:.79rem}.font-alt-2xs{font-size:.85rem}.font-alt-xs{font-size:.91rem}.font-alt-sm{font-size:.98rem}.font-alt-md{font-size:1.04rem}.font-alt-lg{font-size:1.34rem}.font-alt-xl{font-size:1.95rem}.font-alt-2xl{font-size:2.44rem}.font-alt-3xl{font-size:2.93rem}.font-ui-3xs{font-size:.87rem}.font-ui-2xs{font-size:.93rem}.font-ui-xs{font-size:1rem}.font-ui-sm{font-size:1.06rem}.font-ui-md{font-size:1.13rem}.font-ui-lg{font-size:1.46rem}.font-ui-xl{font-size:2.13rem}.font-ui-2xl{font-size:2.66rem}.font-ui-3xl{font-size:3.19rem}.font-family-mono{font-family:Roboto Mono Web,Bitstream Vera Sans Mono,Consolas,Courier,monospace}.font-family-sans{font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif}.font-family-serif{font-family:Merriweather Web,Georgia,Cambria,Times New Roman,Times,serif}.font-family-body,.font-family-heading,.font-family-ui{font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif}.font-family-code{font-family:Roboto Mono Web,Bitstream Vera Sans Mono,Consolas,Courier,monospace}.font-family-alt{font-family:Merriweather Web,Georgia,Cambria,Times New Roman,Times,serif}.text-tabular{-webkit-font-feature-settings:"tnum" 1,"kern" 1;font-feature-settings:"tnum" 1,"kern" 1}.text-no-tabular{-webkit-font-feature-settings:"kern" 1;font-feature-settings:"kern" 1}.text-italic{font-style:italic}.text-no-italic{font-style:normal}.text-light{font-weight:300}.text-normal{font-weight:400}.text-bold{font-weight:700}.height-1px{height:1px}.height-2px{height:2px}.height-05{height:.25rem}.height-1{height:.5rem}.height-105{height:.75rem}.height-2{height:1rem}.height-205{height:1.25rem}.height-3{height:1.5rem}.height-4{height:2rem}.height-5{height:2.5rem}.height-6{height:3rem}.height-7{height:3.5rem}.height-8{height:4rem}.height-9{height:4.5rem}.height-10{height:5rem}.height-15{height:7.5rem}.height-card{height:10rem}.height-card-lg{height:15rem}.height-mobile{height:20rem}.height-0{height:0}.height-auto{height:auto}.height-full{height:100%}.height-viewport{height:100vh}.flex-justify-center{justify-content:center}.flex-justify-start{justify-content:flex-start}.flex-justify-end{justify-content:flex-end}.flex-justify{justify-content:space-between}.left-1px{left:1px}.left-2px{left:2px}.left-05{left:.25rem}.left-1{left:.5rem}.left-105{left:.75rem}.left-2{left:1rem}.left-205{left:1.25rem}.left-3{left:1.5rem}.left-neg-1px{left:-1px}.left-neg-2px{left:-2px}.left-neg-05{left:-.25rem}.left-neg-1{left:-.5rem}.left-neg-105{left:-.75rem}.left-neg-2{left:-1rem}.left-neg-205{left:-1.25rem}.left-neg-3{left:-1.5rem}.left-0{left:0}.left-auto{left:auto}.text-ls-auto{letter-spacing:normal}.text-ls-neg-3{letter-spacing:-.03em}.text-ls-neg-2{letter-spacing:-.02em}.text-ls-neg-1{letter-spacing:-.01em}.text-ls-1{letter-spacing:.025em}.text-ls-2{letter-spacing:.1em}.text-ls-3{letter-spacing:.15em}.line-height-sans-1{line-height:.9}.line-height-sans-2{line-height:1.1}.line-height-sans-3{line-height:1.3}.line-height-sans-4{line-height:1.4}.line-height-sans-5{line-height:1.5}.line-height-sans-6{line-height:1.6}.line-height-serif-1{line-height:1}.line-height-serif-2{line-height:1.2}.line-height-serif-3{line-height:1.4}.line-height-serif-4{line-height:1.5}.line-height-serif-5{line-height:1.7}.line-height-serif-6{line-height:1.8}.line-height-mono-1{line-height:1}.line-height-mono-2{line-height:1.3}.line-height-mono-3{line-height:1.4}.line-height-mono-4{line-height:1.6}.line-height-mono-5{line-height:1.7}.line-height-mono-6{line-height:1.8}.line-height-heading-1{line-height:.9}.line-height-heading-2{line-height:1.1}.line-height-heading-3{line-height:1.3}.line-height-heading-4{line-height:1.4}.line-height-heading-5{line-height:1.5}.line-height-heading-6{line-height:1.6}.line-height-ui-1{line-height:.9}.line-height-ui-2{line-height:1.1}.line-height-ui-3{line-height:1.3}.line-height-ui-4{line-height:1.4}.line-height-ui-5{line-height:1.5}.line-height-ui-6{line-height:1.6}.line-height-body-1{line-height:.9}.line-height-body-2{line-height:1.1}.line-height-body-3{line-height:1.3}.line-height-body-4{line-height:1.4}.line-height-body-5{line-height:1.5}.line-height-body-6{line-height:1.6}.line-height-code-1{line-height:1}.line-height-code-2{line-height:1.3}.line-height-code-3{line-height:1.4}.line-height-code-4{line-height:1.6}.line-height-code-5{line-height:1.7}.line-height-code-6{line-height:1.8}.line-height-alt-1{line-height:1}.line-height-alt-2{line-height:1.2}.line-height-alt-3{line-height:1.4}.line-height-alt-4{line-height:1.5}.line-height-alt-5{line-height:1.7}.line-height-alt-6{line-height:1.8}.margin-neg-1px{margin:-1px}.margin-neg-2px{margin:-2px}.margin-neg-05{margin:-.25rem}.margin-neg-1{margin:-.5rem}.margin-neg-105{margin:-.75rem}.margin-neg-2{margin:-1rem}.margin-neg-205{margin:-1.25rem}.margin-neg-3{margin:-1.5rem}.margin-1px{margin:1px}.margin-2px{margin:2px}.margin-05{margin:.25rem}.margin-1{margin:.5rem}.margin-105{margin:.75rem}.margin-2{margin:1rem}.margin-205{margin:1.25rem}.margin-3{margin:1.5rem}.margin-4{margin:2rem}.margin-5{margin:2.5rem}.margin-6{margin:3rem}.margin-7{margin:3.5rem}.margin-8{margin:4rem}.margin-9{margin:4.5rem}.margin-10{margin:5rem}.margin-15{margin:7.5rem}.margin-05em{margin:.5em}.margin-1em{margin:1em}.margin-105em{margin:1.5em}.margin-2em{margin:2em}.margin-0{margin:0}.margin-y-1px{margin-bottom:1px}.margin-top-1px,.margin-y-1px{margin-top:1px}.margin-bottom-1px{margin-bottom:1px}.margin-y-2px{margin-bottom:2px}.margin-top-2px,.margin-y-2px{margin-top:2px}.margin-bottom-2px{margin-bottom:2px}.margin-y-05{margin-bottom:.25rem}.margin-top-05,.margin-y-05{margin-top:.25rem}.margin-bottom-05{margin-bottom:.25rem}.margin-y-1{margin-bottom:.5rem}.margin-top-1,.margin-y-1{margin-top:.5rem}.margin-bottom-1{margin-bottom:.5rem}.margin-y-105{margin-bottom:.75rem}.margin-top-105,.margin-y-105{margin-top:.75rem}.margin-bottom-105{margin-bottom:.75rem}.margin-y-2{margin-bottom:1rem}.margin-top-2,.margin-y-2{margin-top:1rem}.margin-bottom-2{margin-bottom:1rem}.margin-y-205{margin-bottom:1.25rem}.margin-top-205,.margin-y-205{margin-top:1.25rem}.margin-bottom-205{margin-bottom:1.25rem}.margin-y-3{margin-bottom:1.5rem}.margin-top-3,.margin-y-3{margin-top:1.5rem}.margin-bottom-3{margin-bottom:1.5rem}.margin-y-neg-1px{margin-bottom:-1px;margin-top:-1px}.margin-top-neg-1px{margin-top:-1px}.margin-bottom-neg-1px{margin-bottom:-1px}.margin-y-neg-2px{margin-bottom:-2px;margin-top:-2px}.margin-top-neg-2px{margin-top:-2px}.margin-bottom-neg-2px{margin-bottom:-2px}.margin-y-neg-05{margin-bottom:-.25rem}.margin-top-neg-05,.margin-y-neg-05{margin-top:-.25rem}.margin-bottom-neg-05{margin-bottom:-.25rem}.margin-y-neg-1{margin-bottom:-.5rem}.margin-top-neg-1,.margin-y-neg-1{margin-top:-.5rem}.margin-bottom-neg-1{margin-bottom:-.5rem}.margin-y-neg-105{margin-bottom:-.75rem}.margin-top-neg-105,.margin-y-neg-105{margin-top:-.75rem}.margin-bottom-neg-105{margin-bottom:-.75rem}.margin-y-neg-2{margin-bottom:-1rem}.margin-top-neg-2,.margin-y-neg-2{margin-top:-1rem}.margin-bottom-neg-2{margin-bottom:-1rem}.margin-y-neg-205{margin-bottom:-1.25rem}.margin-top-neg-205,.margin-y-neg-205{margin-top:-1.25rem}.margin-bottom-neg-205{margin-bottom:-1.25rem}.margin-y-neg-3{margin-bottom:-1.5rem}.margin-top-neg-3,.margin-y-neg-3{margin-top:-1.5rem}.margin-bottom-neg-3{margin-bottom:-1.5rem}.margin-y-4{margin-bottom:2rem}.margin-top-4,.margin-y-4{margin-top:2rem}.margin-bottom-4{margin-bottom:2rem}.margin-y-5{margin-bottom:2.5rem}.margin-top-5,.margin-y-5{margin-top:2.5rem}.margin-bottom-5{margin-bottom:2.5rem}.margin-y-6{margin-bottom:3rem}.margin-top-6,.margin-y-6{margin-top:3rem}.margin-bottom-6{margin-bottom:3rem}.margin-y-7{margin-bottom:3.5rem}.margin-top-7,.margin-y-7{margin-top:3.5rem}.margin-bottom-7{margin-bottom:3.5rem}.margin-y-8{margin-bottom:4rem}.margin-top-8,.margin-y-8{margin-top:4rem}.margin-bottom-8{margin-bottom:4rem}.margin-y-9{margin-bottom:4.5rem}.margin-top-9,.margin-y-9{margin-top:4.5rem}.margin-bottom-9{margin-bottom:4.5rem}.margin-y-10{margin-bottom:5rem}.margin-top-10,.margin-y-10{margin-top:5rem}.margin-bottom-10{margin-bottom:5rem}.margin-y-15{margin-bottom:7.5rem}.margin-top-15,.margin-y-15{margin-top:7.5rem}.margin-bottom-15{margin-bottom:7.5rem}.margin-y-05em{margin-bottom:.5em}.margin-top-05em,.margin-y-05em{margin-top:.5em}.margin-bottom-05em{margin-bottom:.5em}.margin-y-1em{margin-bottom:1em}.margin-top-1em,.margin-y-1em{margin-top:1em}.margin-bottom-1em{margin-bottom:1em}.margin-y-105em{margin-bottom:1.5em}.margin-top-105em,.margin-y-105em{margin-top:1.5em}.margin-bottom-105em{margin-bottom:1.5em}.margin-y-2em{margin-bottom:2em}.margin-top-2em,.margin-y-2em{margin-top:2em}.margin-bottom-2em{margin-bottom:2em}.margin-y-0{margin-bottom:0}.margin-top-0,.margin-y-0{margin-top:0}.margin-bottom-0{margin-bottom:0}.margin-y-auto{margin-bottom:auto}.margin-top-auto,.margin-y-auto{margin-top:auto}.margin-bottom-auto{margin-bottom:auto}.margin-x-1px{margin-left:1px}.margin-right-1px,.margin-x-1px{margin-right:1px}.margin-left-1px{margin-left:1px}.margin-x-2px{margin-left:2px}.margin-right-2px,.margin-x-2px{margin-right:2px}.margin-left-2px{margin-left:2px}.margin-x-05{margin-left:.25rem}.margin-right-05,.margin-x-05{margin-right:.25rem}.margin-left-05{margin-left:.25rem}.margin-x-1{margin-left:.5rem}.margin-right-1,.margin-x-1{margin-right:.5rem}.margin-left-1{margin-left:.5rem}.margin-x-105{margin-left:.75rem}.margin-right-105,.margin-x-105{margin-right:.75rem}.margin-left-105{margin-left:.75rem}.margin-x-2{margin-left:1rem}.margin-right-2,.margin-x-2{margin-right:1rem}.margin-left-2{margin-left:1rem}.margin-x-205{margin-left:1.25rem}.margin-right-205,.margin-x-205{margin-right:1.25rem}.margin-left-205{margin-left:1.25rem}.margin-x-3{margin-left:1.5rem}.margin-right-3,.margin-x-3{margin-right:1.5rem}.margin-left-3{margin-left:1.5rem}.margin-x-neg-1px{margin-left:-1px;margin-right:-1px}.margin-right-neg-1px{margin-right:-1px}.margin-left-neg-1px{margin-left:-1px}.margin-x-neg-2px{margin-left:-2px;margin-right:-2px}.margin-right-neg-2px{margin-right:-2px}.margin-left-neg-2px{margin-left:-2px}.margin-x-neg-05{margin-left:-.25rem}.margin-right-neg-05,.margin-x-neg-05{margin-right:-.25rem}.margin-left-neg-05{margin-left:-.25rem}.margin-x-neg-1{margin-left:-.5rem}.margin-right-neg-1,.margin-x-neg-1{margin-right:-.5rem}.margin-left-neg-1{margin-left:-.5rem}.margin-x-neg-105{margin-left:-.75rem}.margin-right-neg-105,.margin-x-neg-105{margin-right:-.75rem}.margin-left-neg-105{margin-left:-.75rem}.margin-x-neg-2{margin-left:-1rem}.margin-right-neg-2,.margin-x-neg-2{margin-right:-1rem}.margin-left-neg-2{margin-left:-1rem}.margin-x-neg-205{margin-left:-1.25rem}.margin-right-neg-205,.margin-x-neg-205{margin-right:-1.25rem}.margin-left-neg-205{margin-left:-1.25rem}.margin-x-neg-3{margin-left:-1.5rem}.margin-right-neg-3,.margin-x-neg-3{margin-right:-1.5rem}.margin-left-neg-3{margin-left:-1.5rem}.margin-x-4{margin-left:2rem}.margin-right-4,.margin-x-4{margin-right:2rem}.margin-left-4{margin-left:2rem}.margin-x-5{margin-left:2.5rem}.margin-right-5,.margin-x-5{margin-right:2.5rem}.margin-left-5{margin-left:2.5rem}.margin-x-6{margin-left:3rem}.margin-right-6,.margin-x-6{margin-right:3rem}.margin-left-6{margin-left:3rem}.margin-x-7{margin-left:3.5rem}.margin-right-7,.margin-x-7{margin-right:3.5rem}.margin-left-7{margin-left:3.5rem}.margin-x-8{margin-left:4rem}.margin-right-8,.margin-x-8{margin-right:4rem}.margin-left-8{margin-left:4rem}.margin-x-9{margin-left:4.5rem}.margin-right-9,.margin-x-9{margin-right:4.5rem}.margin-left-9{margin-left:4.5rem}.margin-x-10{margin-left:5rem}.margin-right-10,.margin-x-10{margin-right:5rem}.margin-left-10{margin-left:5rem}.margin-x-15{margin-left:7.5rem}.margin-right-15,.margin-x-15{margin-right:7.5rem}.margin-left-15{margin-left:7.5rem}.margin-x-card{margin-left:10rem}.margin-right-card,.margin-x-card{margin-right:10rem}.margin-left-card{margin-left:10rem}.margin-x-card-lg{margin-left:15rem}.margin-right-card-lg,.margin-x-card-lg{margin-right:15rem}.margin-left-card-lg{margin-left:15rem}.margin-x-mobile{margin-left:20rem}.margin-right-mobile,.margin-x-mobile{margin-right:20rem}.margin-left-mobile{margin-left:20rem}.margin-x-05em{margin-left:.5em}.margin-right-05em,.margin-x-05em{margin-right:.5em}.margin-left-05em{margin-left:.5em}.margin-x-1em{margin-left:1em}.margin-right-1em,.margin-x-1em{margin-right:1em}.margin-left-1em{margin-left:1em}.margin-x-105em{margin-left:1.5em}.margin-right-105em,.margin-x-105em{margin-right:1.5em}.margin-left-105em{margin-left:1.5em}.margin-x-2em{margin-left:2em}.margin-right-2em,.margin-x-2em{margin-right:2em}.margin-left-2em{margin-left:2em}.margin-x-0{margin-left:0}.margin-right-0,.margin-x-0{margin-right:0}.margin-left-0{margin-left:0}.margin-x-auto{margin-left:auto}.margin-right-auto,.margin-x-auto{margin-right:auto}.margin-left-auto{margin-left:auto}.maxh-05{max-height:.25rem}.maxh-1{max-height:.5rem}.maxh-105{max-height:.75rem}.maxh-2{max-height:1rem}.maxh-205{max-height:1.25rem}.maxh-3{max-height:1.5rem}.maxh-4{max-height:2rem}.maxh-5{max-height:2.5rem}.maxh-6{max-height:3rem}.maxh-7{max-height:3.5rem}.maxh-8{max-height:4rem}.maxh-9{max-height:4.5rem}.maxh-10{max-height:5rem}.maxh-15{max-height:7.5rem}.maxh-card{max-height:10rem}.maxh-card-lg{max-height:15rem}.maxh-mobile{max-height:20rem}.maxh-mobile-lg{max-height:30rem}.maxh-tablet{max-height:40rem}.maxh-tablet-lg{max-height:55rem}.maxh-none{max-height:none}.maxh-viewport{max-height:100vh}.maxw-05{max-width:.25rem}.maxw-1{max-width:.5rem}.maxw-105{max-width:.75rem}.maxw-2{max-width:1rem}.maxw-205{max-width:1.25rem}.maxw-3{max-width:1.5rem}.maxw-4{max-width:2rem}.maxw-5{max-width:2.5rem}.maxw-6{max-width:3rem}.maxw-7{max-width:3.5rem}.maxw-8{max-width:4rem}.maxw-9{max-width:4.5rem}.maxw-10{max-width:5rem}.maxw-15{max-width:7.5rem}.maxw-card{max-width:10rem}.maxw-card-lg{max-width:15rem}.maxw-mobile{max-width:20rem}.maxw-mobile-lg{max-width:30rem}.maxw-tablet{max-width:40rem}.maxw-tablet-lg{max-width:55rem}.maxw-desktop{max-width:64rem}.maxw-desktop-lg{max-width:75rem}.maxw-widescreen{max-width:87.5rem}.maxw-none{max-width:none}.maxw-full{max-width:100%}.measure-1{max-width:44ex}.measure-2{max-width:60ex}.measure-3{max-width:64ex}.measure-4{max-width:68ex}.measure-5{max-width:72ex}.measure-6{max-width:88ex}.measure-none{max-width:none}.minh-1px{min-height:1px}.minh-2px{min-height:2px}.minh-05{min-height:.25rem}.minh-1{min-height:.5rem}.minh-105{min-height:.75rem}.minh-2{min-height:1rem}.minh-205{min-height:1.25rem}.minh-3{min-height:1.5rem}.minh-4{min-height:2rem}.minh-5{min-height:2.5rem}.minh-6{min-height:3rem}.minh-7{min-height:3.5rem}.minh-8{min-height:4rem}.minh-9{min-height:4.5rem}.minh-10{min-height:5rem}.minh-15{min-height:7.5rem}.minh-card{min-height:10rem}.minh-card-lg{min-height:15rem}.minh-mobile{min-height:20rem}.minh-mobile-lg{min-height:30rem}.minh-tablet{min-height:40rem}.minh-tablet-lg{min-height:55rem}.minh-0{min-height:0}.minh-full{min-height:100%}.minh-viewport{min-height:100vh}.minw-05{min-width:.25rem}.minw-1{min-width:.5rem}.minw-105{min-width:.75rem}.minw-2{min-width:1rem}.minw-205{min-width:1.25rem}.minw-3{min-width:1.5rem}.minw-4{min-width:2rem}.minw-5{min-width:2.5rem}.minw-6{min-width:3rem}.minw-7{min-width:3.5rem}.minw-8{min-width:4rem}.minw-9{min-width:4.5rem}.minw-10{min-width:5rem}.minw-15{min-width:7.5rem}.minw-0{min-width:0}.opacity-0{opacity:0}.opacity-10{opacity:.1}.opacity-20{opacity:.2}.opacity-30{opacity:.3}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.opacity-90{opacity:.9}.opacity-100{opacity:1}.order-first{order:-1}.order-last{order:999}.order-0,.order-initial{order:0}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.order-5{order:5}.order-6{order:6}.order-7{order:7}.order-8{order:8}.order-9{order:9}.order-10{order:10}.order-11{order:11}.outline-1px{outline:1px solid}.outline-2px{outline:2px solid}.outline-0{outline:0 solid}.outline-05{outline:.25rem solid}.outline-transparent{outline-color:transparent}.outline-black{outline-color:#000}.outline-white{outline-color:#fff}.outline-red{outline-color:#e52207}.outline-orange{outline-color:#e66f0e}.outline-gold{outline-color:#ffbe2e}.outline-yellow{outline-color:#fee685}.outline-green{outline-color:#538200}.outline-mint{outline-color:#04c585}.outline-cyan{outline-color:#009ec1}.outline-blue{outline-color:#0076d6}.outline-indigo{outline-color:#676cc8}.outline-violet{outline-color:#8168b3}.outline-magenta{outline-color:#d72d79}.outline-gray-5{outline-color:#f0f0f0}.outline-gray-10{outline-color:#e6e6e6}.outline-gray-30{outline-color:#adadad}.outline-gray-50{outline-color:#757575}.outline-gray-70{outline-color:#454545}.outline-gray-90{outline-color:#1b1b1b}.outline-base-lightest{outline-color:#f0f0f0}.outline-base-lighter{outline-color:#dfe1e2}.outline-base-light{outline-color:#a9aeb1}.outline-base{outline-color:#71767a}.outline-base-dark{outline-color:#565c65}.outline-base-darker{outline-color:#3d4551}.outline-base-darkest,.outline-ink{outline-color:#1b1b1b}.outline-primary-lighter{outline-color:#d9e8f6}.outline-primary-light{outline-color:#73b3e7}.outline-primary{outline-color:#005ea2}.outline-primary-vivid{outline-color:#0050d8}.outline-primary-dark{outline-color:#1a4480}.outline-primary-darker{outline-color:#162e51}.outline-secondary-lighter{outline-color:#f3e1e4}.outline-secondary-light{outline-color:#f2938c}.outline-secondary{outline-color:#d83933}.outline-secondary-vivid{outline-color:#e41d3d}.outline-secondary-dark{outline-color:#b50909}.outline-secondary-darker{outline-color:#8b0a03}.outline-accent-warm-darker{outline-color:#775540}.outline-accent-warm-dark{outline-color:#c05600}.outline-accent-warm{outline-color:#fa9441}.outline-accent-warm-light{outline-color:#ffbc78}.outline-accent-warm-lighter{outline-color:#f2e4d4}.outline-accent-cool-darker{outline-color:#07648d}.outline-accent-cool-dark{outline-color:#28a0cb}.outline-accent-cool{outline-color:#00bde3}.outline-accent-cool-light{outline-color:#97d4ea}.outline-accent-cool-lighter{outline-color:#e1f3f8}.overflow-hidden{overflow:hidden}.overflow-y-hidden{overflow-y:hidden}.overflow-x-hidden{overflow-x:hidden}.overflow-scroll{overflow:scroll}.overflow-y-scroll{overflow-y:scroll}.overflow-x-scroll{overflow-x:scroll}.overflow-auto{overflow:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-auto{overflow-x:auto}.overflow-visible{overflow:visible}.overflow-y-visible{overflow-y:visible}.overflow-x-visible{overflow-x:visible}.padding-1px{padding:1px}.padding-y-1px{padding-bottom:1px;padding-top:1px}.padding-x-1px{padding-left:1px;padding-right:1px}.padding-top-1px{padding-top:1px}.padding-right-1px{padding-right:1px}.padding-bottom-1px{padding-bottom:1px}.padding-left-1px{padding-left:1px}.padding-2px{padding:2px}.padding-y-2px{padding-bottom:2px;padding-top:2px}.padding-x-2px{padding-left:2px;padding-right:2px}.padding-top-2px{padding-top:2px}.padding-right-2px{padding-right:2px}.padding-bottom-2px{padding-bottom:2px}.padding-left-2px{padding-left:2px}.padding-05{padding:.25rem}.padding-y-05{padding-bottom:.25rem;padding-top:.25rem}.padding-x-05{padding-left:.25rem;padding-right:.25rem}.padding-top-05{padding-top:.25rem}.padding-right-05{padding-right:.25rem}.padding-bottom-05{padding-bottom:.25rem}.padding-left-05{padding-left:.25rem}.padding-1{padding:.5rem}.padding-y-1{padding-bottom:.5rem;padding-top:.5rem}.padding-x-1{padding-left:.5rem;padding-right:.5rem}.padding-top-1{padding-top:.5rem}.padding-right-1{padding-right:.5rem}.padding-bottom-1{padding-bottom:.5rem}.padding-left-1{padding-left:.5rem}.padding-105{padding:.75rem}.padding-y-105{padding-bottom:.75rem;padding-top:.75rem}.padding-x-105{padding-left:.75rem;padding-right:.75rem}.padding-top-105{padding-top:.75rem}.padding-right-105{padding-right:.75rem}.padding-bottom-105{padding-bottom:.75rem}.padding-left-105{padding-left:.75rem}.padding-2{padding:1rem}.padding-y-2{padding-bottom:1rem;padding-top:1rem}.padding-x-2{padding-left:1rem;padding-right:1rem}.padding-top-2{padding-top:1rem}.padding-right-2{padding-right:1rem}.padding-bottom-2{padding-bottom:1rem}.padding-left-2{padding-left:1rem}.padding-205{padding:1.25rem}.padding-y-205{padding-bottom:1.25rem;padding-top:1.25rem}.padding-x-205{padding-left:1.25rem;padding-right:1.25rem}.padding-top-205{padding-top:1.25rem}.padding-right-205{padding-right:1.25rem}.padding-bottom-205{padding-bottom:1.25rem}.padding-left-205{padding-left:1.25rem}.padding-3{padding:1.5rem}.padding-y-3{padding-bottom:1.5rem;padding-top:1.5rem}.padding-x-3{padding-left:1.5rem;padding-right:1.5rem}.padding-top-3{padding-top:1.5rem}.padding-right-3{padding-right:1.5rem}.padding-bottom-3{padding-bottom:1.5rem}.padding-left-3{padding-left:1.5rem}.padding-4{padding:2rem}.padding-y-4{padding-bottom:2rem;padding-top:2rem}.padding-x-4{padding-left:2rem;padding-right:2rem}.padding-top-4{padding-top:2rem}.padding-right-4{padding-right:2rem}.padding-bottom-4{padding-bottom:2rem}.padding-left-4{padding-left:2rem}.padding-5{padding:2.5rem}.padding-y-5{padding-bottom:2.5rem;padding-top:2.5rem}.padding-x-5{padding-left:2.5rem;padding-right:2.5rem}.padding-top-5{padding-top:2.5rem}.padding-right-5{padding-right:2.5rem}.padding-bottom-5{padding-bottom:2.5rem}.padding-left-5{padding-left:2.5rem}.padding-6{padding:3rem}.padding-y-6{padding-bottom:3rem;padding-top:3rem}.padding-x-6{padding-left:3rem;padding-right:3rem}.padding-top-6{padding-top:3rem}.padding-right-6{padding-right:3rem}.padding-bottom-6{padding-bottom:3rem}.padding-left-6{padding-left:3rem}.padding-7{padding:3.5rem}.padding-y-7{padding-bottom:3.5rem;padding-top:3.5rem}.padding-x-7{padding-left:3.5rem;padding-right:3.5rem}.padding-top-7{padding-top:3.5rem}.padding-right-7{padding-right:3.5rem}.padding-bottom-7{padding-bottom:3.5rem}.padding-left-7{padding-left:3.5rem}.padding-8{padding:4rem}.padding-y-8{padding-bottom:4rem;padding-top:4rem}.padding-x-8{padding-left:4rem;padding-right:4rem}.padding-top-8{padding-top:4rem}.padding-right-8{padding-right:4rem}.padding-bottom-8{padding-bottom:4rem}.padding-left-8{padding-left:4rem}.padding-9{padding:4.5rem}.padding-y-9{padding-bottom:4.5rem;padding-top:4.5rem}.padding-x-9{padding-left:4.5rem;padding-right:4.5rem}.padding-top-9{padding-top:4.5rem}.padding-right-9{padding-right:4.5rem}.padding-bottom-9{padding-bottom:4.5rem}.padding-left-9{padding-left:4.5rem}.padding-10{padding:5rem}.padding-y-10{padding-bottom:5rem;padding-top:5rem}.padding-x-10{padding-left:5rem;padding-right:5rem}.padding-top-10{padding-top:5rem}.padding-right-10{padding-right:5rem}.padding-bottom-10{padding-bottom:5rem}.padding-left-10{padding-left:5rem}.padding-15{padding:7.5rem}.padding-y-15{padding-bottom:7.5rem;padding-top:7.5rem}.padding-x-15{padding-left:7.5rem;padding-right:7.5rem}.padding-top-15{padding-top:7.5rem}.padding-right-15{padding-right:7.5rem}.padding-bottom-15{padding-bottom:7.5rem}.padding-left-15{padding-left:7.5rem}.padding-0{padding:0}.padding-y-0{padding-bottom:0;padding-top:0}.padding-x-0{padding-left:0;padding-right:0}.padding-top-0{padding-top:0}.padding-right-0{padding-right:0}.padding-bottom-0{padding-bottom:0}.padding-left-0{padding-left:0}.pin-all{bottom:0;top:0}.pin-all,.pin-x{left:0;position:absolute;right:0}.pin-y{top:0}.pin-bottom,.pin-y{bottom:0;position:absolute}.pin-left{left:0;position:absolute}.pin-right{position:absolute;right:0}.pin-top{position:absolute;top:0}.pin-none{bottom:auto;left:auto;position:static;right:auto;top:auto}.position-absolute{position:absolute}.position-fixed{position:fixed}.position-relative{position:relative}.position-static{position:static}.position-sticky{position:sticky}.right-1px{right:1px}.right-2px{right:2px}.right-05{right:.25rem}.right-1{right:.5rem}.right-105{right:.75rem}.right-2{right:1rem}.right-205{right:1.25rem}.right-3{right:1.5rem}.right-neg-1px{right:-1px}.right-neg-2px{right:-2px}.right-neg-05{right:-.25rem}.right-neg-1{right:-.5rem}.right-neg-105{right:-.75rem}.right-neg-2{right:-1rem}.right-neg-205{right:-1.25rem}.right-neg-3{right:-1.5rem}.right-0{right:0}.right-auto{right:auto}.square-1px{height:1px;width:1px}.square-2px{height:2px;width:2px}.square-05{height:.25rem;width:.25rem}.square-1{height:.5rem;width:.5rem}.square-105{height:.75rem;width:.75rem}.square-2{height:1rem;width:1rem}.square-205{height:1.25rem;width:1.25rem}.square-3{height:1.5rem;width:1.5rem}.square-4{height:2rem;width:2rem}.square-5{height:2.5rem;width:2.5rem}.square-6{height:3rem;width:3rem}.square-7{height:3.5rem;width:3.5rem}.square-8{height:4rem;width:4rem}.square-9{height:4.5rem;width:4.5rem}.square-10{height:5rem;width:5rem}.square-15{height:7.5rem;width:7.5rem}.square-card{height:10rem;width:10rem}.square-card-lg{height:15rem;width:15rem}.square-mobile{height:20rem;width:20rem}.text-center{text-align:center}.text-left{text-align:left}.text-justify{text-align:justify}.text-right{text-align:right}.hover\:text-strike:hover,.text-strike{text-decoration:line-through}.hover\:text-underline:hover,.text-underline{text-decoration:underline}.hover\:text-no-strike:hover,.hover\:text-no-underline:hover,.text-no-strike,.text-no-underline{text-decoration:none}.hover\:underline-red:hover,.underline-red{-webkit-text-decoration-color:#e52207;text-decoration-color:#e52207}.hover\:underline-orange:hover,.underline-orange{-webkit-text-decoration-color:#e66f0e;text-decoration-color:#e66f0e}.hover\:underline-gold:hover,.underline-gold{-webkit-text-decoration-color:#ffbe2e;text-decoration-color:#ffbe2e}.hover\:underline-yellow:hover,.underline-yellow{-webkit-text-decoration-color:#fee685;text-decoration-color:#fee685}.hover\:underline-green:hover,.underline-green{-webkit-text-decoration-color:#538200;text-decoration-color:#538200}.hover\:underline-mint:hover,.underline-mint{-webkit-text-decoration-color:#04c585;text-decoration-color:#04c585}.hover\:underline-cyan:hover,.underline-cyan{-webkit-text-decoration-color:#009ec1;text-decoration-color:#009ec1}.hover\:underline-blue:hover,.underline-blue{-webkit-text-decoration-color:#0076d6;text-decoration-color:#0076d6}.hover\:underline-indigo:hover,.underline-indigo{-webkit-text-decoration-color:#676cc8;text-decoration-color:#676cc8}.hover\:underline-violet:hover,.underline-violet{-webkit-text-decoration-color:#8168b3;text-decoration-color:#8168b3}.hover\:underline-magenta:hover,.underline-magenta{-webkit-text-decoration-color:#d72d79;text-decoration-color:#d72d79}.hover\:underline-gray-5:hover,.underline-gray-5{-webkit-text-decoration-color:#f0f0f0;text-decoration-color:#f0f0f0}.hover\:underline-gray-10:hover,.underline-gray-10{-webkit-text-decoration-color:#e6e6e6;text-decoration-color:#e6e6e6}.hover\:underline-gray-30:hover,.underline-gray-30{-webkit-text-decoration-color:#adadad;text-decoration-color:#adadad}.hover\:underline-gray-50:hover,.underline-gray-50{-webkit-text-decoration-color:#757575;text-decoration-color:#757575}.hover\:underline-gray-70:hover,.underline-gray-70{-webkit-text-decoration-color:#454545;text-decoration-color:#454545}.hover\:underline-gray-90:hover,.underline-gray-90{-webkit-text-decoration-color:#1b1b1b;text-decoration-color:#1b1b1b}.hover\:underline-base-lightest:hover,.underline-base-lightest{-webkit-text-decoration-color:#f0f0f0;text-decoration-color:#f0f0f0}.hover\:underline-base-lighter:hover,.underline-base-lighter{-webkit-text-decoration-color:#dfe1e2;text-decoration-color:#dfe1e2}.hover\:underline-base-light:hover,.underline-base-light{-webkit-text-decoration-color:#a9aeb1;text-decoration-color:#a9aeb1}.hover\:underline-base:hover,.underline-base{-webkit-text-decoration-color:#71767a;text-decoration-color:#71767a}.hover\:underline-base-dark:hover,.underline-base-dark{-webkit-text-decoration-color:#565c65;text-decoration-color:#565c65}.hover\:underline-base-darker:hover,.underline-base-darker{-webkit-text-decoration-color:#3d4551;text-decoration-color:#3d4551}.hover\:underline-base-darkest:hover,.hover\:underline-ink:hover,.underline-base-darkest,.underline-ink{-webkit-text-decoration-color:#1b1b1b;text-decoration-color:#1b1b1b}.hover\:underline-primary-lighter:hover,.underline-primary-lighter{-webkit-text-decoration-color:#d9e8f6;text-decoration-color:#d9e8f6}.hover\:underline-primary-light:hover,.underline-primary-light{-webkit-text-decoration-color:#73b3e7;text-decoration-color:#73b3e7}.hover\:underline-primary:hover,.underline-primary{-webkit-text-decoration-color:#005ea2;text-decoration-color:#005ea2}.hover\:underline-primary-vivid:hover,.underline-primary-vivid{-webkit-text-decoration-color:#0050d8;text-decoration-color:#0050d8}.hover\:underline-primary-dark:hover,.underline-primary-dark{-webkit-text-decoration-color:#1a4480;text-decoration-color:#1a4480}.hover\:underline-primary-darker:hover,.underline-primary-darker{-webkit-text-decoration-color:#162e51;text-decoration-color:#162e51}.hover\:underline-secondary-lighter:hover,.underline-secondary-lighter{-webkit-text-decoration-color:#f3e1e4;text-decoration-color:#f3e1e4}.hover\:underline-secondary-light:hover,.underline-secondary-light{-webkit-text-decoration-color:#f2938c;text-decoration-color:#f2938c}.hover\:underline-secondary:hover,.underline-secondary{-webkit-text-decoration-color:#d83933;text-decoration-color:#d83933}.hover\:underline-secondary-vivid:hover,.underline-secondary-vivid{-webkit-text-decoration-color:#e41d3d;text-decoration-color:#e41d3d}.hover\:underline-secondary-dark:hover,.underline-secondary-dark{-webkit-text-decoration-color:#b50909;text-decoration-color:#b50909}.hover\:underline-secondary-darker:hover,.underline-secondary-darker{-webkit-text-decoration-color:#8b0a03;text-decoration-color:#8b0a03}.hover\:underline-accent-warm-darker:hover,.underline-accent-warm-darker{-webkit-text-decoration-color:#775540;text-decoration-color:#775540}.hover\:underline-accent-warm-dark:hover,.underline-accent-warm-dark{-webkit-text-decoration-color:#c05600;text-decoration-color:#c05600}.hover\:underline-accent-warm:hover,.underline-accent-warm{-webkit-text-decoration-color:#fa9441;text-decoration-color:#fa9441}.hover\:underline-accent-warm-light:hover,.underline-accent-warm-light{-webkit-text-decoration-color:#ffbc78;text-decoration-color:#ffbc78}.hover\:underline-accent-warm-lighter:hover,.underline-accent-warm-lighter{-webkit-text-decoration-color:#f2e4d4;text-decoration-color:#f2e4d4}.hover\:underline-accent-cool-darker:hover,.underline-accent-cool-darker{-webkit-text-decoration-color:#07648d;text-decoration-color:#07648d}.hover\:underline-accent-cool-dark:hover,.underline-accent-cool-dark{-webkit-text-decoration-color:#28a0cb;text-decoration-color:#28a0cb}.hover\:underline-accent-cool:hover,.underline-accent-cool{-webkit-text-decoration-color:#00bde3;text-decoration-color:#00bde3}.hover\:underline-accent-cool-light:hover,.underline-accent-cool-light{-webkit-text-decoration-color:#97d4ea;text-decoration-color:#97d4ea}.hover\:underline-accent-cool-lighter:hover,.underline-accent-cool-lighter{-webkit-text-decoration-color:#e1f3f8;text-decoration-color:#e1f3f8}.text-indent-0{text-indent:0}.text-indent-05{text-indent:.25rem}.text-indent-1{text-indent:.5rem}.text-indent-105{text-indent:.75rem}.text-indent-2{text-indent:1rem}.text-indent-205{text-indent:1.25rem}.text-indent-3{text-indent:1.5rem}.text-indent-neg-05{text-indent:-.25rem}.text-indent-neg-1{text-indent:-.5rem}.text-indent-neg-105{text-indent:-.75rem}.text-indent-neg-2{text-indent:-1rem}.text-indent-neg-205{text-indent:-1.25rem}.text-indent-neg-3{text-indent:-1.5rem}.text-indent-4{text-indent:2rem}.text-indent-5{text-indent:2.5rem}.text-indent-6{text-indent:3rem}.text-indent-7{text-indent:3.5rem}.text-indent-8{text-indent:4rem}.text-indent-9{text-indent:4.5rem}.text-indent-10{text-indent:5rem}.text-indent-15{text-indent:7.5rem}.text-indent-neg-4{text-indent:-2rem}.text-indent-neg-5{text-indent:-2.5rem}.text-indent-neg-6{text-indent:-3rem}.text-indent-neg-7{text-indent:-3.5rem}.text-indent-neg-8{text-indent:-4rem}.text-indent-neg-9{text-indent:-4.5rem}.text-indent-neg-10{text-indent:-5rem}.text-indent-neg-15{text-indent:-7.5rem}.text-uppercase{text-transform:uppercase}.text-no-uppercase{text-transform:none}.text-lowercase{text-transform:lowercase}.text-no-lowercase{text-transform:none}.top-1px{top:1px}.top-2px{top:2px}.top-05{top:.25rem}.top-1{top:.5rem}.top-105{top:.75rem}.top-2{top:1rem}.top-205{top:1.25rem}.top-3{top:1.5rem}.top-neg-1px{top:-1px}.top-neg-2px{top:-2px}.top-neg-05{top:-.25rem}.top-neg-1{top:-.5rem}.top-neg-105{top:-.75rem}.top-neg-2{top:-1rem}.top-neg-205{top:-1.25rem}.top-neg-3{top:-1.5rem}.top-0{top:0}.top-auto{top:auto}.text-baseline{vertical-align:baseline}.text-bottom{vertical-align:bottom}.text-middle{vertical-align:middle}.text-sub{vertical-align:sub}.text-super{vertical-align:super}.text-tbottom{vertical-align:text-bottom}.text-ttop{vertical-align:text-top}.text-top{vertical-align:top}.text-pre{white-space:pre}.text-pre-line{white-space:pre-line}.text-pre-wrap{white-space:pre-wrap}.text-wrap{white-space:normal}.text-no-wrap{white-space:nowrap}.width-1px{width:1px}.width-2px{width:2px}.width-05{width:.25rem}.width-1{width:.5rem}.width-105{width:.75rem}.width-2{width:1rem}.width-205{width:1.25rem}.width-3{width:1.5rem}.width-4{width:2rem}.width-5{width:2.5rem}.width-6{width:3rem}.width-7{width:3.5rem}.width-8{width:4rem}.width-9{width:4.5rem}.width-10{width:5rem}.width-15{width:7.5rem}.width-card{width:10rem}.width-card-lg{width:15rem}.width-mobile{width:20rem}.width-mobile-lg{width:30rem}.width-tablet{width:40rem}.width-tablet-lg{width:55rem}.width-desktop{width:64rem}.width-desktop-lg{width:75rem}.width-widescreen{width:87.5rem}.width-0{width:0}.width-full{width:100%}.width-auto{width:auto}.z-auto{z-index:auto}.z-bottom{z-index:-100}.z-top{z-index:99999}.z-0{z-index:0}.z-100{z-index:100}.z-200{z-index:200}.z-300{z-index:300}.z-400{z-index:400}.z-500{z-index:500}@media (min-width:30em){.mobile-lg\:border-1px,.mobile-lg\:hover\:border-1px:hover{border:1px solid}.mobile-lg\:border-y-1px,.mobile-lg\:hover\:border-y-1px:hover{border-bottom:1px solid;border-top:1px solid}.mobile-lg\:border-x-1px,.mobile-lg\:hover\:border-x-1px:hover{border-left:1px solid;border-right:1px solid}.mobile-lg\:border-top-1px,.mobile-lg\:hover\:border-top-1px:hover{border-top:1px solid}.mobile-lg\:border-right-1px,.mobile-lg\:hover\:border-right-1px:hover{border-right:1px solid}.mobile-lg\:border-bottom-1px,.mobile-lg\:hover\:border-bottom-1px:hover{border-bottom:1px solid}.mobile-lg\:border-left-1px,.mobile-lg\:hover\:border-left-1px:hover{border-left:1px solid}.mobile-lg\:border-2px,.mobile-lg\:hover\:border-2px:hover{border:2px solid}.mobile-lg\:border-y-2px,.mobile-lg\:hover\:border-y-2px:hover{border-bottom:2px solid;border-top:2px solid}.mobile-lg\:border-x-2px,.mobile-lg\:hover\:border-x-2px:hover{border-left:2px solid;border-right:2px solid}.mobile-lg\:border-top-2px,.mobile-lg\:hover\:border-top-2px:hover{border-top:2px solid}.mobile-lg\:border-right-2px,.mobile-lg\:hover\:border-right-2px:hover{border-right:2px solid}.mobile-lg\:border-bottom-2px,.mobile-lg\:hover\:border-bottom-2px:hover{border-bottom:2px solid}.mobile-lg\:border-left-2px,.mobile-lg\:hover\:border-left-2px:hover{border-left:2px solid}.mobile-lg\:border-05,.mobile-lg\:hover\:border-05:hover{border:.25rem solid}.mobile-lg\:border-y-05,.mobile-lg\:hover\:border-y-05:hover{border-bottom:.25rem solid;border-top:.25rem solid}.mobile-lg\:border-x-05,.mobile-lg\:hover\:border-x-05:hover{border-left:.25rem solid;border-right:.25rem solid}.mobile-lg\:border-top-05,.mobile-lg\:hover\:border-top-05:hover{border-top:.25rem solid}.mobile-lg\:border-right-05,.mobile-lg\:hover\:border-right-05:hover{border-right:.25rem solid}.mobile-lg\:border-bottom-05,.mobile-lg\:hover\:border-bottom-05:hover{border-bottom:.25rem solid}.mobile-lg\:border-left-05,.mobile-lg\:hover\:border-left-05:hover{border-left:.25rem solid}.mobile-lg\:border-1,.mobile-lg\:hover\:border-1:hover{border:.5rem solid}.mobile-lg\:border-y-1,.mobile-lg\:hover\:border-y-1:hover{border-bottom:.5rem solid;border-top:.5rem solid}.mobile-lg\:border-x-1,.mobile-lg\:hover\:border-x-1:hover{border-left:.5rem solid;border-right:.5rem solid}.mobile-lg\:border-top-1,.mobile-lg\:hover\:border-top-1:hover{border-top:.5rem solid}.mobile-lg\:border-right-1,.mobile-lg\:hover\:border-right-1:hover{border-right:.5rem solid}.mobile-lg\:border-bottom-1,.mobile-lg\:hover\:border-bottom-1:hover{border-bottom:.5rem solid}.mobile-lg\:border-left-1,.mobile-lg\:hover\:border-left-1:hover{border-left:.5rem solid}.mobile-lg\:border-105,.mobile-lg\:hover\:border-105:hover{border:.75rem solid}.mobile-lg\:border-y-105,.mobile-lg\:hover\:border-y-105:hover{border-bottom:.75rem solid;border-top:.75rem solid}.mobile-lg\:border-x-105,.mobile-lg\:hover\:border-x-105:hover{border-left:.75rem solid;border-right:.75rem solid}.mobile-lg\:border-top-105,.mobile-lg\:hover\:border-top-105:hover{border-top:.75rem solid}.mobile-lg\:border-right-105,.mobile-lg\:hover\:border-right-105:hover{border-right:.75rem solid}.mobile-lg\:border-bottom-105,.mobile-lg\:hover\:border-bottom-105:hover{border-bottom:.75rem solid}.mobile-lg\:border-left-105,.mobile-lg\:hover\:border-left-105:hover{border-left:.75rem solid}.mobile-lg\:border-2,.mobile-lg\:hover\:border-2:hover{border:1rem solid}.mobile-lg\:border-y-2,.mobile-lg\:hover\:border-y-2:hover{border-bottom:1rem solid;border-top:1rem solid}.mobile-lg\:border-x-2,.mobile-lg\:hover\:border-x-2:hover{border-left:1rem solid;border-right:1rem solid}.mobile-lg\:border-top-2,.mobile-lg\:hover\:border-top-2:hover{border-top:1rem solid}.mobile-lg\:border-right-2,.mobile-lg\:hover\:border-right-2:hover{border-right:1rem solid}.mobile-lg\:border-bottom-2,.mobile-lg\:hover\:border-bottom-2:hover{border-bottom:1rem solid}.mobile-lg\:border-left-2,.mobile-lg\:hover\:border-left-2:hover{border-left:1rem solid}.mobile-lg\:border-205,.mobile-lg\:hover\:border-205:hover{border:1.25rem solid}.mobile-lg\:border-y-205,.mobile-lg\:hover\:border-y-205:hover{border-bottom:1.25rem solid;border-top:1.25rem solid}.mobile-lg\:border-x-205,.mobile-lg\:hover\:border-x-205:hover{border-left:1.25rem solid;border-right:1.25rem solid}.mobile-lg\:border-top-205,.mobile-lg\:hover\:border-top-205:hover{border-top:1.25rem solid}.mobile-lg\:border-right-205,.mobile-lg\:hover\:border-right-205:hover{border-right:1.25rem solid}.mobile-lg\:border-bottom-205,.mobile-lg\:hover\:border-bottom-205:hover{border-bottom:1.25rem solid}.mobile-lg\:border-left-205,.mobile-lg\:hover\:border-left-205:hover{border-left:1.25rem solid}.mobile-lg\:border-3,.mobile-lg\:hover\:border-3:hover{border:1.5rem solid}.mobile-lg\:border-y-3,.mobile-lg\:hover\:border-y-3:hover{border-bottom:1.5rem solid;border-top:1.5rem solid}.mobile-lg\:border-x-3,.mobile-lg\:hover\:border-x-3:hover{border-left:1.5rem solid;border-right:1.5rem solid}.mobile-lg\:border-top-3,.mobile-lg\:hover\:border-top-3:hover{border-top:1.5rem solid}.mobile-lg\:border-right-3,.mobile-lg\:hover\:border-right-3:hover{border-right:1.5rem solid}.mobile-lg\:border-bottom-3,.mobile-lg\:hover\:border-bottom-3:hover{border-bottom:1.5rem solid}.mobile-lg\:border-left-3,.mobile-lg\:hover\:border-left-3:hover{border-left:1.5rem solid}.mobile-lg\:border-0,.mobile-lg\:hover\:border-0:hover{border:0 solid}.mobile-lg\:border-y-0,.mobile-lg\:hover\:border-y-0:hover{border-bottom:0 solid;border-top:0 solid}.mobile-lg\:border-x-0,.mobile-lg\:hover\:border-x-0:hover{border-left:0 solid;border-right:0 solid}.mobile-lg\:border-top-0,.mobile-lg\:hover\:border-top-0:hover{border-top:0 solid}.mobile-lg\:border-right-0,.mobile-lg\:hover\:border-right-0:hover{border-right:0 solid}.mobile-lg\:border-bottom-0,.mobile-lg\:hover\:border-bottom-0:hover{border-bottom:0 solid}.mobile-lg\:border-left-0,.mobile-lg\:hover\:border-left-0:hover{border-left:0 solid}.mobile-lg\:border,.mobile-lg\:hover\:border:hover{border:1px solid}.mobile-lg\:border-y,.mobile-lg\:hover\:border-y:hover{border-bottom:1px solid;border-top:1px solid}.mobile-lg\:border-x,.mobile-lg\:hover\:border-x:hover{border-left:1px solid;border-right:1px solid}.mobile-lg\:border-top,.mobile-lg\:hover\:border-top:hover{border-top:1px solid}.mobile-lg\:border-right,.mobile-lg\:hover\:border-right:hover{border-right:1px solid}.mobile-lg\:border-bottom,.mobile-lg\:hover\:border-bottom:hover{border-bottom:1px solid}.mobile-lg\:border-left,.mobile-lg\:hover\:border-left:hover{border-left:1px solid}.mobile-lg\:border-transparent,.mobile-lg\:hover\:border-transparent:hover{border-color:transparent}.mobile-lg\:border-black,.mobile-lg\:hover\:border-black:hover{border-color:#000}.mobile-lg\:border-white,.mobile-lg\:hover\:border-white:hover{border-color:#fff}.mobile-lg\:border-red,.mobile-lg\:hover\:border-red:hover{border-color:#e52207}.mobile-lg\:border-orange,.mobile-lg\:hover\:border-orange:hover{border-color:#e66f0e}.mobile-lg\:border-gold,.mobile-lg\:hover\:border-gold:hover{border-color:#ffbe2e}.mobile-lg\:border-yellow,.mobile-lg\:hover\:border-yellow:hover{border-color:#fee685}.mobile-lg\:border-green,.mobile-lg\:hover\:border-green:hover{border-color:#538200}.mobile-lg\:border-mint,.mobile-lg\:hover\:border-mint:hover{border-color:#04c585}.mobile-lg\:border-cyan,.mobile-lg\:hover\:border-cyan:hover{border-color:#009ec1}.mobile-lg\:border-blue,.mobile-lg\:hover\:border-blue:hover{border-color:#0076d6}.mobile-lg\:border-indigo,.mobile-lg\:hover\:border-indigo:hover{border-color:#676cc8}.mobile-lg\:border-violet,.mobile-lg\:hover\:border-violet:hover{border-color:#8168b3}.mobile-lg\:border-magenta,.mobile-lg\:hover\:border-magenta:hover{border-color:#d72d79}.mobile-lg\:border-gray-5,.mobile-lg\:hover\:border-gray-5:hover{border-color:#f0f0f0}.mobile-lg\:border-gray-10,.mobile-lg\:hover\:border-gray-10:hover{border-color:#e6e6e6}.mobile-lg\:border-gray-30,.mobile-lg\:hover\:border-gray-30:hover{border-color:#adadad}.mobile-lg\:border-gray-50,.mobile-lg\:hover\:border-gray-50:hover{border-color:#757575}.mobile-lg\:border-gray-70,.mobile-lg\:hover\:border-gray-70:hover{border-color:#454545}.mobile-lg\:border-gray-90,.mobile-lg\:hover\:border-gray-90:hover{border-color:#1b1b1b}.mobile-lg\:border-base-lightest,.mobile-lg\:hover\:border-base-lightest:hover{border-color:#f0f0f0}.mobile-lg\:border-base-lighter,.mobile-lg\:hover\:border-base-lighter:hover{border-color:#dfe1e2}.mobile-lg\:border-base-light,.mobile-lg\:hover\:border-base-light:hover{border-color:#a9aeb1}.mobile-lg\:border-base,.mobile-lg\:hover\:border-base:hover{border-color:#71767a}.mobile-lg\:border-base-dark,.mobile-lg\:hover\:border-base-dark:hover{border-color:#565c65}.mobile-lg\:border-base-darker,.mobile-lg\:hover\:border-base-darker:hover{border-color:#3d4551}.mobile-lg\:border-base-darkest,.mobile-lg\:border-ink,.mobile-lg\:hover\:border-base-darkest:hover,.mobile-lg\:hover\:border-ink:hover{border-color:#1b1b1b}.mobile-lg\:border-primary-lighter,.mobile-lg\:hover\:border-primary-lighter:hover{border-color:#d9e8f6}.mobile-lg\:border-primary-light,.mobile-lg\:hover\:border-primary-light:hover{border-color:#73b3e7}.mobile-lg\:border-primary,.mobile-lg\:hover\:border-primary:hover{border-color:#005ea2}.mobile-lg\:border-primary-vivid,.mobile-lg\:hover\:border-primary-vivid:hover{border-color:#0050d8}.mobile-lg\:border-primary-dark,.mobile-lg\:hover\:border-primary-dark:hover{border-color:#1a4480}.mobile-lg\:border-primary-darker,.mobile-lg\:hover\:border-primary-darker:hover{border-color:#162e51}.mobile-lg\:border-secondary-lighter,.mobile-lg\:hover\:border-secondary-lighter:hover{border-color:#f3e1e4}.mobile-lg\:border-secondary-light,.mobile-lg\:hover\:border-secondary-light:hover{border-color:#f2938c}.mobile-lg\:border-secondary,.mobile-lg\:hover\:border-secondary:hover{border-color:#d83933}.mobile-lg\:border-secondary-vivid,.mobile-lg\:hover\:border-secondary-vivid:hover{border-color:#e41d3d}.mobile-lg\:border-secondary-dark,.mobile-lg\:hover\:border-secondary-dark:hover{border-color:#b50909}.mobile-lg\:border-secondary-darker,.mobile-lg\:hover\:border-secondary-darker:hover{border-color:#8b0a03}.mobile-lg\:border-accent-warm-darker,.mobile-lg\:hover\:border-accent-warm-darker:hover{border-color:#775540}.mobile-lg\:border-accent-warm-dark,.mobile-lg\:hover\:border-accent-warm-dark:hover{border-color:#c05600}.mobile-lg\:border-accent-warm,.mobile-lg\:hover\:border-accent-warm:hover{border-color:#fa9441}.mobile-lg\:border-accent-warm-light,.mobile-lg\:hover\:border-accent-warm-light:hover{border-color:#ffbc78}.mobile-lg\:border-accent-warm-lighter,.mobile-lg\:hover\:border-accent-warm-lighter:hover{border-color:#f2e4d4}.mobile-lg\:border-accent-cool-darker,.mobile-lg\:hover\:border-accent-cool-darker:hover{border-color:#07648d}.mobile-lg\:border-accent-cool-dark,.mobile-lg\:hover\:border-accent-cool-dark:hover{border-color:#28a0cb}.mobile-lg\:border-accent-cool,.mobile-lg\:hover\:border-accent-cool:hover{border-color:#00bde3}.mobile-lg\:border-accent-cool-light,.mobile-lg\:hover\:border-accent-cool-light:hover{border-color:#97d4ea}.mobile-lg\:border-accent-cool-lighter,.mobile-lg\:hover\:border-accent-cool-lighter:hover{border-color:#e1f3f8}.mobile-lg\:radius-0{border-radius:0}.mobile-lg\:radius-top-0{border-top-left-radius:0;border-top-right-radius:0}.mobile-lg\:radius-right-0{border-bottom-right-radius:0;border-top-right-radius:0}.mobile-lg\:radius-bottom-0{border-bottom-left-radius:0;border-bottom-right-radius:0}.mobile-lg\:radius-left-0{border-bottom-left-radius:0;border-top-left-radius:0}.mobile-lg\:radius-none{border-radius:0}.mobile-lg\:radius-top-none{border-top-left-radius:0;border-top-right-radius:0}.mobile-lg\:radius-right-none{border-bottom-right-radius:0;border-top-right-radius:0}.mobile-lg\:radius-bottom-none{border-bottom-left-radius:0;border-bottom-right-radius:0}.mobile-lg\:radius-left-none{border-bottom-left-radius:0;border-top-left-radius:0}.mobile-lg\:radius-sm{border-radius:2px}.mobile-lg\:radius-top-sm{border-top-left-radius:2px;border-top-right-radius:2px}.mobile-lg\:radius-right-sm{border-bottom-right-radius:2px;border-top-right-radius:2px}.mobile-lg\:radius-bottom-sm{border-bottom-left-radius:2px;border-bottom-right-radius:2px}.mobile-lg\:radius-left-sm{border-bottom-left-radius:2px;border-top-left-radius:2px}.mobile-lg\:radius-md{border-radius:.25rem}.mobile-lg\:radius-top-md{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.mobile-lg\:radius-right-md{border-bottom-right-radius:.25rem;border-top-right-radius:.25rem}.mobile-lg\:radius-bottom-md{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.mobile-lg\:radius-left-md{border-bottom-left-radius:.25rem;border-top-left-radius:.25rem}.mobile-lg\:radius-lg{border-radius:.5rem}.mobile-lg\:radius-top-lg{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.mobile-lg\:radius-right-lg{border-bottom-right-radius:.5rem;border-top-right-radius:.5rem}.mobile-lg\:radius-bottom-lg{border-bottom-left-radius:.5rem;border-bottom-right-radius:.5rem}.mobile-lg\:radius-left-lg{border-bottom-left-radius:.5rem;border-top-left-radius:.5rem}.mobile-lg\:radius-pill{border-radius:99rem}.mobile-lg\:radius-top-pill{border-top-left-radius:99rem;border-top-right-radius:99rem}.mobile-lg\:radius-right-pill{border-bottom-right-radius:99rem;border-top-right-radius:99rem}.mobile-lg\:radius-bottom-pill{border-bottom-left-radius:99rem;border-bottom-right-radius:99rem}.mobile-lg\:radius-left-pill{border-bottom-left-radius:99rem;border-top-left-radius:99rem}.mobile-lg\:display-block{display:block}.mobile-lg\:display-flex{display:flex}.mobile-lg\:display-none{display:none}.mobile-lg\:display-inline{display:inline}.mobile-lg\:display-inline-block{display:inline-block}.mobile-lg\:display-inline-flex{display:inline-flex}.mobile-lg\:display-table{display:table}.mobile-lg\:display-table-cell{display:table-cell}.mobile-lg\:display-table-row{display:table-row}.mobile-lg\:font-mono-3xs{font-size:.77rem}.mobile-lg\:font-mono-2xs{font-size:.83rem}.mobile-lg\:font-mono-xs{font-size:.89rem}.mobile-lg\:font-mono-sm{font-size:.95rem}.mobile-lg\:font-mono-md{font-size:1.01rem}.mobile-lg\:font-mono-lg{font-size:1.31rem}.mobile-lg\:font-mono-xl{font-size:1.91rem}.mobile-lg\:font-mono-2xl{font-size:2.38rem}.mobile-lg\:font-mono-3xl{font-size:2.86rem}.mobile-lg\:font-sans-3xs{font-size:.87rem}.mobile-lg\:font-sans-2xs{font-size:.93rem}.mobile-lg\:font-sans-xs{font-size:1rem}.mobile-lg\:font-sans-sm{font-size:1.06rem}.mobile-lg\:font-sans-md{font-size:1.13rem}.mobile-lg\:font-sans-lg{font-size:1.46rem}.mobile-lg\:font-sans-xl{font-size:2.13rem}.mobile-lg\:font-sans-2xl{font-size:2.66rem}.mobile-lg\:font-sans-3xl{font-size:3.19rem}.mobile-lg\:font-serif-3xs{font-size:.79rem}.mobile-lg\:font-serif-2xs{font-size:.85rem}.mobile-lg\:font-serif-xs{font-size:.91rem}.mobile-lg\:font-serif-sm{font-size:.98rem}.mobile-lg\:font-serif-md{font-size:1.04rem}.mobile-lg\:font-serif-lg{font-size:1.34rem}.mobile-lg\:font-serif-xl{font-size:1.95rem}.mobile-lg\:font-serif-2xl{font-size:2.44rem}.mobile-lg\:font-serif-3xl{font-size:2.93rem}.mobile-lg\:font-heading-3xs{font-size:.87rem}.mobile-lg\:font-heading-2xs{font-size:.93rem}.mobile-lg\:font-heading-xs{font-size:1rem}.mobile-lg\:font-heading-sm{font-size:1.06rem}.mobile-lg\:font-heading-md{font-size:1.13rem}.mobile-lg\:font-heading-lg{font-size:1.46rem}.mobile-lg\:font-heading-xl{font-size:2.13rem}.mobile-lg\:font-heading-2xl{font-size:2.66rem}.mobile-lg\:font-heading-3xl{font-size:3.19rem}.mobile-lg\:font-body-3xs{font-size:.87rem}.mobile-lg\:font-body-2xs{font-size:.93rem}.mobile-lg\:font-body-xs{font-size:1rem}.mobile-lg\:font-body-sm{font-size:1.06rem}.mobile-lg\:font-body-md{font-size:1.13rem}.mobile-lg\:font-body-lg{font-size:1.46rem}.mobile-lg\:font-body-xl{font-size:2.13rem}.mobile-lg\:font-body-2xl{font-size:2.66rem}.mobile-lg\:font-body-3xl{font-size:3.19rem}.mobile-lg\:font-code-3xs{font-size:.77rem}.mobile-lg\:font-code-2xs{font-size:.83rem}.mobile-lg\:font-code-xs{font-size:.89rem}.mobile-lg\:font-code-sm{font-size:.95rem}.mobile-lg\:font-code-md{font-size:1.01rem}.mobile-lg\:font-code-lg{font-size:1.31rem}.mobile-lg\:font-code-xl{font-size:1.91rem}.mobile-lg\:font-code-2xl{font-size:2.38rem}.mobile-lg\:font-code-3xl{font-size:2.86rem}.mobile-lg\:font-alt-3xs{font-size:.79rem}.mobile-lg\:font-alt-2xs{font-size:.85rem}.mobile-lg\:font-alt-xs{font-size:.91rem}.mobile-lg\:font-alt-sm{font-size:.98rem}.mobile-lg\:font-alt-md{font-size:1.04rem}.mobile-lg\:font-alt-lg{font-size:1.34rem}.mobile-lg\:font-alt-xl{font-size:1.95rem}.mobile-lg\:font-alt-2xl{font-size:2.44rem}.mobile-lg\:font-alt-3xl{font-size:2.93rem}.mobile-lg\:font-ui-3xs{font-size:.87rem}.mobile-lg\:font-ui-2xs{font-size:.93rem}.mobile-lg\:font-ui-xs{font-size:1rem}.mobile-lg\:font-ui-sm{font-size:1.06rem}.mobile-lg\:font-ui-md{font-size:1.13rem}.mobile-lg\:font-ui-lg{font-size:1.46rem}.mobile-lg\:font-ui-xl{font-size:2.13rem}.mobile-lg\:font-ui-2xl{font-size:2.66rem}.mobile-lg\:font-ui-3xl{font-size:3.19rem}.mobile-lg\:text-light{font-weight:300}.mobile-lg\:text-normal{font-weight:400}.mobile-lg\:text-bold{font-weight:700}.mobile-lg\:flex-justify-center{justify-content:center}.mobile-lg\:flex-justify-start{justify-content:flex-start}.mobile-lg\:flex-justify-end{justify-content:flex-end}.mobile-lg\:flex-justify{justify-content:space-between}.mobile-lg\:line-height-sans-1{line-height:.9}.mobile-lg\:line-height-sans-2{line-height:1.1}.mobile-lg\:line-height-sans-3{line-height:1.3}.mobile-lg\:line-height-sans-4{line-height:1.4}.mobile-lg\:line-height-sans-5{line-height:1.5}.mobile-lg\:line-height-sans-6{line-height:1.6}.mobile-lg\:line-height-serif-1{line-height:1}.mobile-lg\:line-height-serif-2{line-height:1.2}.mobile-lg\:line-height-serif-3{line-height:1.4}.mobile-lg\:line-height-serif-4{line-height:1.5}.mobile-lg\:line-height-serif-5{line-height:1.7}.mobile-lg\:line-height-serif-6{line-height:1.8}.mobile-lg\:line-height-mono-1{line-height:1}.mobile-lg\:line-height-mono-2{line-height:1.3}.mobile-lg\:line-height-mono-3{line-height:1.4}.mobile-lg\:line-height-mono-4{line-height:1.6}.mobile-lg\:line-height-mono-5{line-height:1.7}.mobile-lg\:line-height-mono-6{line-height:1.8}.mobile-lg\:line-height-heading-1{line-height:.9}.mobile-lg\:line-height-heading-2{line-height:1.1}.mobile-lg\:line-height-heading-3{line-height:1.3}.mobile-lg\:line-height-heading-4{line-height:1.4}.mobile-lg\:line-height-heading-5{line-height:1.5}.mobile-lg\:line-height-heading-6{line-height:1.6}.mobile-lg\:line-height-ui-1{line-height:.9}.mobile-lg\:line-height-ui-2{line-height:1.1}.mobile-lg\:line-height-ui-3{line-height:1.3}.mobile-lg\:line-height-ui-4{line-height:1.4}.mobile-lg\:line-height-ui-5{line-height:1.5}.mobile-lg\:line-height-ui-6{line-height:1.6}.mobile-lg\:line-height-body-1{line-height:.9}.mobile-lg\:line-height-body-2{line-height:1.1}.mobile-lg\:line-height-body-3{line-height:1.3}.mobile-lg\:line-height-body-4{line-height:1.4}.mobile-lg\:line-height-body-5{line-height:1.5}.mobile-lg\:line-height-body-6{line-height:1.6}.mobile-lg\:line-height-code-1{line-height:1}.mobile-lg\:line-height-code-2{line-height:1.3}.mobile-lg\:line-height-code-3{line-height:1.4}.mobile-lg\:line-height-code-4{line-height:1.6}.mobile-lg\:line-height-code-5{line-height:1.7}.mobile-lg\:line-height-code-6{line-height:1.8}.mobile-lg\:line-height-alt-1{line-height:1}.mobile-lg\:line-height-alt-2{line-height:1.2}.mobile-lg\:line-height-alt-3{line-height:1.4}.mobile-lg\:line-height-alt-4{line-height:1.5}.mobile-lg\:line-height-alt-5{line-height:1.7}.mobile-lg\:line-height-alt-6{line-height:1.8}.mobile-lg\:margin-neg-1px{margin:-1px}.mobile-lg\:margin-neg-2px{margin:-2px}.mobile-lg\:margin-neg-05{margin:-.25rem}.mobile-lg\:margin-neg-1{margin:-.5rem}.mobile-lg\:margin-neg-105{margin:-.75rem}.mobile-lg\:margin-neg-2{margin:-1rem}.mobile-lg\:margin-neg-205{margin:-1.25rem}.mobile-lg\:margin-neg-3{margin:-1.5rem}.mobile-lg\:margin-1px{margin:1px}.mobile-lg\:margin-2px{margin:2px}.mobile-lg\:margin-05{margin:.25rem}.mobile-lg\:margin-1{margin:.5rem}.mobile-lg\:margin-105{margin:.75rem}.mobile-lg\:margin-2{margin:1rem}.mobile-lg\:margin-205{margin:1.25rem}.mobile-lg\:margin-3{margin:1.5rem}.mobile-lg\:margin-4{margin:2rem}.mobile-lg\:margin-5{margin:2.5rem}.mobile-lg\:margin-6{margin:3rem}.mobile-lg\:margin-7{margin:3.5rem}.mobile-lg\:margin-8{margin:4rem}.mobile-lg\:margin-9{margin:4.5rem}.mobile-lg\:margin-10{margin:5rem}.mobile-lg\:margin-15{margin:7.5rem}.mobile-lg\:margin-05em{margin:.5em}.mobile-lg\:margin-1em{margin:1em}.mobile-lg\:margin-105em{margin:1.5em}.mobile-lg\:margin-2em{margin:2em}.mobile-lg\:margin-0{margin:0}.mobile-lg\:margin-y-1px{margin-bottom:1px;margin-top:1px}.mobile-lg\:margin-top-1px{margin-top:1px}.mobile-lg\:margin-bottom-1px{margin-bottom:1px}.mobile-lg\:margin-y-2px{margin-bottom:2px;margin-top:2px}.mobile-lg\:margin-top-2px{margin-top:2px}.mobile-lg\:margin-bottom-2px{margin-bottom:2px}.mobile-lg\:margin-y-05{margin-bottom:.25rem;margin-top:.25rem}.mobile-lg\:margin-top-05{margin-top:.25rem}.mobile-lg\:margin-bottom-05{margin-bottom:.25rem}.mobile-lg\:margin-y-1{margin-bottom:.5rem;margin-top:.5rem}.mobile-lg\:margin-top-1{margin-top:.5rem}.mobile-lg\:margin-bottom-1{margin-bottom:.5rem}.mobile-lg\:margin-y-105{margin-bottom:.75rem;margin-top:.75rem}.mobile-lg\:margin-top-105{margin-top:.75rem}.mobile-lg\:margin-bottom-105{margin-bottom:.75rem}.mobile-lg\:margin-y-2{margin-bottom:1rem;margin-top:1rem}.mobile-lg\:margin-top-2{margin-top:1rem}.mobile-lg\:margin-bottom-2{margin-bottom:1rem}.mobile-lg\:margin-y-205{margin-bottom:1.25rem;margin-top:1.25rem}.mobile-lg\:margin-top-205{margin-top:1.25rem}.mobile-lg\:margin-bottom-205{margin-bottom:1.25rem}.mobile-lg\:margin-y-3{margin-bottom:1.5rem;margin-top:1.5rem}.mobile-lg\:margin-top-3{margin-top:1.5rem}.mobile-lg\:margin-bottom-3{margin-bottom:1.5rem}.mobile-lg\:margin-y-neg-1px{margin-bottom:-1px;margin-top:-1px}.mobile-lg\:margin-top-neg-1px{margin-top:-1px}.mobile-lg\:margin-bottom-neg-1px{margin-bottom:-1px}.mobile-lg\:margin-y-neg-2px{margin-bottom:-2px;margin-top:-2px}.mobile-lg\:margin-top-neg-2px{margin-top:-2px}.mobile-lg\:margin-bottom-neg-2px{margin-bottom:-2px}.mobile-lg\:margin-y-neg-05{margin-bottom:-.25rem;margin-top:-.25rem}.mobile-lg\:margin-top-neg-05{margin-top:-.25rem}.mobile-lg\:margin-bottom-neg-05{margin-bottom:-.25rem}.mobile-lg\:margin-y-neg-1{margin-bottom:-.5rem;margin-top:-.5rem}.mobile-lg\:margin-top-neg-1{margin-top:-.5rem}.mobile-lg\:margin-bottom-neg-1{margin-bottom:-.5rem}.mobile-lg\:margin-y-neg-105{margin-bottom:-.75rem;margin-top:-.75rem}.mobile-lg\:margin-top-neg-105{margin-top:-.75rem}.mobile-lg\:margin-bottom-neg-105{margin-bottom:-.75rem}.mobile-lg\:margin-y-neg-2{margin-bottom:-1rem;margin-top:-1rem}.mobile-lg\:margin-top-neg-2{margin-top:-1rem}.mobile-lg\:margin-bottom-neg-2{margin-bottom:-1rem}.mobile-lg\:margin-y-neg-205{margin-bottom:-1.25rem;margin-top:-1.25rem}.mobile-lg\:margin-top-neg-205{margin-top:-1.25rem}.mobile-lg\:margin-bottom-neg-205{margin-bottom:-1.25rem}.mobile-lg\:margin-y-neg-3{margin-bottom:-1.5rem;margin-top:-1.5rem}.mobile-lg\:margin-top-neg-3{margin-top:-1.5rem}.mobile-lg\:margin-bottom-neg-3{margin-bottom:-1.5rem}.mobile-lg\:margin-y-4{margin-bottom:2rem;margin-top:2rem}.mobile-lg\:margin-top-4{margin-top:2rem}.mobile-lg\:margin-bottom-4{margin-bottom:2rem}.mobile-lg\:margin-y-5{margin-bottom:2.5rem;margin-top:2.5rem}.mobile-lg\:margin-top-5{margin-top:2.5rem}.mobile-lg\:margin-bottom-5{margin-bottom:2.5rem}.mobile-lg\:margin-y-6{margin-bottom:3rem;margin-top:3rem}.mobile-lg\:margin-top-6{margin-top:3rem}.mobile-lg\:margin-bottom-6{margin-bottom:3rem}.mobile-lg\:margin-y-7{margin-bottom:3.5rem;margin-top:3.5rem}.mobile-lg\:margin-top-7{margin-top:3.5rem}.mobile-lg\:margin-bottom-7{margin-bottom:3.5rem}.mobile-lg\:margin-y-8{margin-bottom:4rem;margin-top:4rem}.mobile-lg\:margin-top-8{margin-top:4rem}.mobile-lg\:margin-bottom-8{margin-bottom:4rem}.mobile-lg\:margin-y-9{margin-bottom:4.5rem;margin-top:4.5rem}.mobile-lg\:margin-top-9{margin-top:4.5rem}.mobile-lg\:margin-bottom-9{margin-bottom:4.5rem}.mobile-lg\:margin-y-10{margin-bottom:5rem;margin-top:5rem}.mobile-lg\:margin-top-10{margin-top:5rem}.mobile-lg\:margin-bottom-10{margin-bottom:5rem}.mobile-lg\:margin-y-15{margin-bottom:7.5rem;margin-top:7.5rem}.mobile-lg\:margin-top-15{margin-top:7.5rem}.mobile-lg\:margin-bottom-15{margin-bottom:7.5rem}.mobile-lg\:margin-y-05em{margin-bottom:.5em;margin-top:.5em}.mobile-lg\:margin-top-05em{margin-top:.5em}.mobile-lg\:margin-bottom-05em{margin-bottom:.5em}.mobile-lg\:margin-y-1em{margin-bottom:1em;margin-top:1em}.mobile-lg\:margin-top-1em{margin-top:1em}.mobile-lg\:margin-bottom-1em{margin-bottom:1em}.mobile-lg\:margin-y-105em{margin-bottom:1.5em;margin-top:1.5em}.mobile-lg\:margin-top-105em{margin-top:1.5em}.mobile-lg\:margin-bottom-105em{margin-bottom:1.5em}.mobile-lg\:margin-y-2em{margin-bottom:2em;margin-top:2em}.mobile-lg\:margin-top-2em{margin-top:2em}.mobile-lg\:margin-bottom-2em{margin-bottom:2em}.mobile-lg\:margin-y-0{margin-bottom:0;margin-top:0}.mobile-lg\:margin-top-0{margin-top:0}.mobile-lg\:margin-bottom-0{margin-bottom:0}.mobile-lg\:margin-y-auto{margin-bottom:auto;margin-top:auto}.mobile-lg\:margin-top-auto{margin-top:auto}.mobile-lg\:margin-bottom-auto{margin-bottom:auto}.mobile-lg\:margin-x-1px{margin-left:1px;margin-right:1px}.mobile-lg\:margin-right-1px{margin-right:1px}.mobile-lg\:margin-left-1px{margin-left:1px}.mobile-lg\:margin-x-2px{margin-left:2px;margin-right:2px}.mobile-lg\:margin-right-2px{margin-right:2px}.mobile-lg\:margin-left-2px{margin-left:2px}.mobile-lg\:margin-x-05{margin-left:.25rem;margin-right:.25rem}.mobile-lg\:margin-right-05{margin-right:.25rem}.mobile-lg\:margin-left-05{margin-left:.25rem}.mobile-lg\:margin-x-1{margin-left:.5rem;margin-right:.5rem}.mobile-lg\:margin-right-1{margin-right:.5rem}.mobile-lg\:margin-left-1{margin-left:.5rem}.mobile-lg\:margin-x-105{margin-left:.75rem;margin-right:.75rem}.mobile-lg\:margin-right-105{margin-right:.75rem}.mobile-lg\:margin-left-105{margin-left:.75rem}.mobile-lg\:margin-x-2{margin-left:1rem;margin-right:1rem}.mobile-lg\:margin-right-2{margin-right:1rem}.mobile-lg\:margin-left-2{margin-left:1rem}.mobile-lg\:margin-x-205{margin-left:1.25rem;margin-right:1.25rem}.mobile-lg\:margin-right-205{margin-right:1.25rem}.mobile-lg\:margin-left-205{margin-left:1.25rem}.mobile-lg\:margin-x-3{margin-left:1.5rem;margin-right:1.5rem}.mobile-lg\:margin-right-3{margin-right:1.5rem}.mobile-lg\:margin-left-3{margin-left:1.5rem}.mobile-lg\:margin-x-neg-1px{margin-left:-1px;margin-right:-1px}.mobile-lg\:margin-right-neg-1px{margin-right:-1px}.mobile-lg\:margin-left-neg-1px{margin-left:-1px}.mobile-lg\:margin-x-neg-2px{margin-left:-2px;margin-right:-2px}.mobile-lg\:margin-right-neg-2px{margin-right:-2px}.mobile-lg\:margin-left-neg-2px{margin-left:-2px}.mobile-lg\:margin-x-neg-05{margin-left:-.25rem;margin-right:-.25rem}.mobile-lg\:margin-right-neg-05{margin-right:-.25rem}.mobile-lg\:margin-left-neg-05{margin-left:-.25rem}.mobile-lg\:margin-x-neg-1{margin-left:-.5rem;margin-right:-.5rem}.mobile-lg\:margin-right-neg-1{margin-right:-.5rem}.mobile-lg\:margin-left-neg-1{margin-left:-.5rem}.mobile-lg\:margin-x-neg-105{margin-left:-.75rem;margin-right:-.75rem}.mobile-lg\:margin-right-neg-105{margin-right:-.75rem}.mobile-lg\:margin-left-neg-105{margin-left:-.75rem}.mobile-lg\:margin-x-neg-2{margin-left:-1rem;margin-right:-1rem}.mobile-lg\:margin-right-neg-2{margin-right:-1rem}.mobile-lg\:margin-left-neg-2{margin-left:-1rem}.mobile-lg\:margin-x-neg-205{margin-left:-1.25rem;margin-right:-1.25rem}.mobile-lg\:margin-right-neg-205{margin-right:-1.25rem}.mobile-lg\:margin-left-neg-205{margin-left:-1.25rem}.mobile-lg\:margin-x-neg-3{margin-left:-1.5rem;margin-right:-1.5rem}.mobile-lg\:margin-right-neg-3{margin-right:-1.5rem}.mobile-lg\:margin-left-neg-3{margin-left:-1.5rem}.mobile-lg\:margin-x-4{margin-left:2rem;margin-right:2rem}.mobile-lg\:margin-right-4{margin-right:2rem}.mobile-lg\:margin-left-4{margin-left:2rem}.mobile-lg\:margin-x-5{margin-left:2.5rem;margin-right:2.5rem}.mobile-lg\:margin-right-5{margin-right:2.5rem}.mobile-lg\:margin-left-5{margin-left:2.5rem}.mobile-lg\:margin-x-6{margin-left:3rem;margin-right:3rem}.mobile-lg\:margin-right-6{margin-right:3rem}.mobile-lg\:margin-left-6{margin-left:3rem}.mobile-lg\:margin-x-7{margin-left:3.5rem;margin-right:3.5rem}.mobile-lg\:margin-right-7{margin-right:3.5rem}.mobile-lg\:margin-left-7{margin-left:3.5rem}.mobile-lg\:margin-x-8{margin-left:4rem;margin-right:4rem}.mobile-lg\:margin-right-8{margin-right:4rem}.mobile-lg\:margin-left-8{margin-left:4rem}.mobile-lg\:margin-x-9{margin-left:4.5rem;margin-right:4.5rem}.mobile-lg\:margin-right-9{margin-right:4.5rem}.mobile-lg\:margin-left-9{margin-left:4.5rem}.mobile-lg\:margin-x-10{margin-left:5rem;margin-right:5rem}.mobile-lg\:margin-right-10{margin-right:5rem}.mobile-lg\:margin-left-10{margin-left:5rem}.mobile-lg\:margin-x-15{margin-left:7.5rem;margin-right:7.5rem}.mobile-lg\:margin-right-15{margin-right:7.5rem}.mobile-lg\:margin-left-15{margin-left:7.5rem}.mobile-lg\:margin-x-card{margin-left:10rem;margin-right:10rem}.mobile-lg\:margin-right-card{margin-right:10rem}.mobile-lg\:margin-left-card{margin-left:10rem}.mobile-lg\:margin-x-card-lg{margin-left:15rem;margin-right:15rem}.mobile-lg\:margin-right-card-lg{margin-right:15rem}.mobile-lg\:margin-left-card-lg{margin-left:15rem}.mobile-lg\:margin-x-mobile{margin-left:20rem;margin-right:20rem}.mobile-lg\:margin-right-mobile{margin-right:20rem}.mobile-lg\:margin-left-mobile{margin-left:20rem}.mobile-lg\:margin-x-05em{margin-left:.5em;margin-right:.5em}.mobile-lg\:margin-right-05em{margin-right:.5em}.mobile-lg\:margin-left-05em{margin-left:.5em}.mobile-lg\:margin-x-1em{margin-left:1em;margin-right:1em}.mobile-lg\:margin-right-1em{margin-right:1em}.mobile-lg\:margin-left-1em{margin-left:1em}.mobile-lg\:margin-x-105em{margin-left:1.5em;margin-right:1.5em}.mobile-lg\:margin-right-105em{margin-right:1.5em}.mobile-lg\:margin-left-105em{margin-left:1.5em}.mobile-lg\:margin-x-2em{margin-left:2em;margin-right:2em}.mobile-lg\:margin-right-2em{margin-right:2em}.mobile-lg\:margin-left-2em{margin-left:2em}.mobile-lg\:margin-x-0{margin-left:0;margin-right:0}.mobile-lg\:margin-right-0{margin-right:0}.mobile-lg\:margin-left-0{margin-left:0}.mobile-lg\:margin-x-auto{margin-left:auto;margin-right:auto}.mobile-lg\:margin-right-auto{margin-right:auto}.mobile-lg\:margin-left-auto{margin-left:auto}.mobile-lg\:measure-1{max-width:44ex}.mobile-lg\:measure-2{max-width:60ex}.mobile-lg\:measure-3{max-width:64ex}.mobile-lg\:measure-4{max-width:68ex}.mobile-lg\:measure-5{max-width:72ex}.mobile-lg\:measure-6{max-width:88ex}.mobile-lg\:measure-none{max-width:none}.mobile-lg\:order-first{order:-1}.mobile-lg\:order-last{order:999}.mobile-lg\:order-0,.mobile-lg\:order-initial{order:0}.mobile-lg\:order-1{order:1}.mobile-lg\:order-2{order:2}.mobile-lg\:order-3{order:3}.mobile-lg\:order-4{order:4}.mobile-lg\:order-5{order:5}.mobile-lg\:order-6{order:6}.mobile-lg\:order-7{order:7}.mobile-lg\:order-8{order:8}.mobile-lg\:order-9{order:9}.mobile-lg\:order-10{order:10}.mobile-lg\:order-11{order:11}.mobile-lg\:padding-1px{padding:1px}.mobile-lg\:padding-y-1px{padding-bottom:1px;padding-top:1px}.mobile-lg\:padding-x-1px{padding-left:1px;padding-right:1px}.mobile-lg\:padding-top-1px{padding-top:1px}.mobile-lg\:padding-right-1px{padding-right:1px}.mobile-lg\:padding-bottom-1px{padding-bottom:1px}.mobile-lg\:padding-left-1px{padding-left:1px}.mobile-lg\:padding-2px{padding:2px}.mobile-lg\:padding-y-2px{padding-bottom:2px;padding-top:2px}.mobile-lg\:padding-x-2px{padding-left:2px;padding-right:2px}.mobile-lg\:padding-top-2px{padding-top:2px}.mobile-lg\:padding-right-2px{padding-right:2px}.mobile-lg\:padding-bottom-2px{padding-bottom:2px}.mobile-lg\:padding-left-2px{padding-left:2px}.mobile-lg\:padding-05{padding:.25rem}.mobile-lg\:padding-y-05{padding-bottom:.25rem;padding-top:.25rem}.mobile-lg\:padding-x-05{padding-left:.25rem;padding-right:.25rem}.mobile-lg\:padding-top-05{padding-top:.25rem}.mobile-lg\:padding-right-05{padding-right:.25rem}.mobile-lg\:padding-bottom-05{padding-bottom:.25rem}.mobile-lg\:padding-left-05{padding-left:.25rem}.mobile-lg\:padding-1{padding:.5rem}.mobile-lg\:padding-y-1{padding-bottom:.5rem;padding-top:.5rem}.mobile-lg\:padding-x-1{padding-left:.5rem;padding-right:.5rem}.mobile-lg\:padding-top-1{padding-top:.5rem}.mobile-lg\:padding-right-1{padding-right:.5rem}.mobile-lg\:padding-bottom-1{padding-bottom:.5rem}.mobile-lg\:padding-left-1{padding-left:.5rem}.mobile-lg\:padding-105{padding:.75rem}.mobile-lg\:padding-y-105{padding-bottom:.75rem;padding-top:.75rem}.mobile-lg\:padding-x-105{padding-left:.75rem;padding-right:.75rem}.mobile-lg\:padding-top-105{padding-top:.75rem}.mobile-lg\:padding-right-105{padding-right:.75rem}.mobile-lg\:padding-bottom-105{padding-bottom:.75rem}.mobile-lg\:padding-left-105{padding-left:.75rem}.mobile-lg\:padding-2{padding:1rem}.mobile-lg\:padding-y-2{padding-bottom:1rem;padding-top:1rem}.mobile-lg\:padding-x-2{padding-left:1rem;padding-right:1rem}.mobile-lg\:padding-top-2{padding-top:1rem}.mobile-lg\:padding-right-2{padding-right:1rem}.mobile-lg\:padding-bottom-2{padding-bottom:1rem}.mobile-lg\:padding-left-2{padding-left:1rem}.mobile-lg\:padding-205{padding:1.25rem}.mobile-lg\:padding-y-205{padding-bottom:1.25rem;padding-top:1.25rem}.mobile-lg\:padding-x-205{padding-left:1.25rem;padding-right:1.25rem}.mobile-lg\:padding-top-205{padding-top:1.25rem}.mobile-lg\:padding-right-205{padding-right:1.25rem}.mobile-lg\:padding-bottom-205{padding-bottom:1.25rem}.mobile-lg\:padding-left-205{padding-left:1.25rem}.mobile-lg\:padding-3{padding:1.5rem}.mobile-lg\:padding-y-3{padding-bottom:1.5rem;padding-top:1.5rem}.mobile-lg\:padding-x-3{padding-left:1.5rem;padding-right:1.5rem}.mobile-lg\:padding-top-3{padding-top:1.5rem}.mobile-lg\:padding-right-3{padding-right:1.5rem}.mobile-lg\:padding-bottom-3{padding-bottom:1.5rem}.mobile-lg\:padding-left-3{padding-left:1.5rem}.mobile-lg\:padding-4{padding:2rem}.mobile-lg\:padding-y-4{padding-bottom:2rem;padding-top:2rem}.mobile-lg\:padding-x-4{padding-left:2rem;padding-right:2rem}.mobile-lg\:padding-top-4{padding-top:2rem}.mobile-lg\:padding-right-4{padding-right:2rem}.mobile-lg\:padding-bottom-4{padding-bottom:2rem}.mobile-lg\:padding-left-4{padding-left:2rem}.mobile-lg\:padding-5{padding:2.5rem}.mobile-lg\:padding-y-5{padding-bottom:2.5rem;padding-top:2.5rem}.mobile-lg\:padding-x-5{padding-left:2.5rem;padding-right:2.5rem}.mobile-lg\:padding-top-5{padding-top:2.5rem}.mobile-lg\:padding-right-5{padding-right:2.5rem}.mobile-lg\:padding-bottom-5{padding-bottom:2.5rem}.mobile-lg\:padding-left-5{padding-left:2.5rem}.mobile-lg\:padding-6{padding:3rem}.mobile-lg\:padding-y-6{padding-bottom:3rem;padding-top:3rem}.mobile-lg\:padding-x-6{padding-left:3rem;padding-right:3rem}.mobile-lg\:padding-top-6{padding-top:3rem}.mobile-lg\:padding-right-6{padding-right:3rem}.mobile-lg\:padding-bottom-6{padding-bottom:3rem}.mobile-lg\:padding-left-6{padding-left:3rem}.mobile-lg\:padding-7{padding:3.5rem}.mobile-lg\:padding-y-7{padding-bottom:3.5rem;padding-top:3.5rem}.mobile-lg\:padding-x-7{padding-left:3.5rem;padding-right:3.5rem}.mobile-lg\:padding-top-7{padding-top:3.5rem}.mobile-lg\:padding-right-7{padding-right:3.5rem}.mobile-lg\:padding-bottom-7{padding-bottom:3.5rem}.mobile-lg\:padding-left-7{padding-left:3.5rem}.mobile-lg\:padding-8{padding:4rem}.mobile-lg\:padding-y-8{padding-bottom:4rem;padding-top:4rem}.mobile-lg\:padding-x-8{padding-left:4rem;padding-right:4rem}.mobile-lg\:padding-top-8{padding-top:4rem}.mobile-lg\:padding-right-8{padding-right:4rem}.mobile-lg\:padding-bottom-8{padding-bottom:4rem}.mobile-lg\:padding-left-8{padding-left:4rem}.mobile-lg\:padding-9{padding:4.5rem}.mobile-lg\:padding-y-9{padding-bottom:4.5rem;padding-top:4.5rem}.mobile-lg\:padding-x-9{padding-left:4.5rem;padding-right:4.5rem}.mobile-lg\:padding-top-9{padding-top:4.5rem}.mobile-lg\:padding-right-9{padding-right:4.5rem}.mobile-lg\:padding-bottom-9{padding-bottom:4.5rem}.mobile-lg\:padding-left-9{padding-left:4.5rem}.mobile-lg\:padding-10{padding:5rem}.mobile-lg\:padding-y-10{padding-bottom:5rem;padding-top:5rem}.mobile-lg\:padding-x-10{padding-left:5rem;padding-right:5rem}.mobile-lg\:padding-top-10{padding-top:5rem}.mobile-lg\:padding-right-10{padding-right:5rem}.mobile-lg\:padding-bottom-10{padding-bottom:5rem}.mobile-lg\:padding-left-10{padding-left:5rem}.mobile-lg\:padding-15{padding:7.5rem}.mobile-lg\:padding-y-15{padding-bottom:7.5rem;padding-top:7.5rem}.mobile-lg\:padding-x-15{padding-left:7.5rem;padding-right:7.5rem}.mobile-lg\:padding-top-15{padding-top:7.5rem}.mobile-lg\:padding-right-15{padding-right:7.5rem}.mobile-lg\:padding-bottom-15{padding-bottom:7.5rem}.mobile-lg\:padding-left-15{padding-left:7.5rem}.mobile-lg\:padding-0{padding:0}.mobile-lg\:padding-y-0{padding-bottom:0;padding-top:0}.mobile-lg\:padding-x-0{padding-left:0;padding-right:0}.mobile-lg\:padding-top-0{padding-top:0}.mobile-lg\:padding-right-0{padding-right:0}.mobile-lg\:padding-bottom-0{padding-bottom:0}.mobile-lg\:padding-left-0{padding-left:0}.mobile-lg\:width-1px{width:1px}.mobile-lg\:width-2px{width:2px}.mobile-lg\:width-05{width:.25rem}.mobile-lg\:width-1{width:.5rem}.mobile-lg\:width-105{width:.75rem}.mobile-lg\:width-2{width:1rem}.mobile-lg\:width-205{width:1.25rem}.mobile-lg\:width-3{width:1.5rem}.mobile-lg\:width-4{width:2rem}.mobile-lg\:width-5{width:2.5rem}.mobile-lg\:width-6{width:3rem}.mobile-lg\:width-7{width:3.5rem}.mobile-lg\:width-8{width:4rem}.mobile-lg\:width-9{width:4.5rem}.mobile-lg\:width-10{width:5rem}.mobile-lg\:width-15{width:7.5rem}.mobile-lg\:width-card{width:10rem}.mobile-lg\:width-card-lg{width:15rem}.mobile-lg\:width-mobile{width:20rem}.mobile-lg\:width-mobile-lg{width:30rem}.mobile-lg\:width-tablet{width:40rem}.mobile-lg\:width-tablet-lg{width:55rem}.mobile-lg\:width-desktop{width:64rem}.mobile-lg\:width-desktop-lg{width:75rem}.mobile-lg\:width-widescreen{width:87.5rem}.mobile-lg\:width-0{width:0}.mobile-lg\:width-full{width:100%}.mobile-lg\:width-auto{width:auto}}@media (min-width:40em){.tablet\:border-1px,.tablet\:hover\:border-1px:hover{border:1px solid}.tablet\:border-y-1px,.tablet\:hover\:border-y-1px:hover{border-bottom:1px solid;border-top:1px solid}.tablet\:border-x-1px,.tablet\:hover\:border-x-1px:hover{border-left:1px solid;border-right:1px solid}.tablet\:border-top-1px,.tablet\:hover\:border-top-1px:hover{border-top:1px solid}.tablet\:border-right-1px,.tablet\:hover\:border-right-1px:hover{border-right:1px solid}.tablet\:border-bottom-1px,.tablet\:hover\:border-bottom-1px:hover{border-bottom:1px solid}.tablet\:border-left-1px,.tablet\:hover\:border-left-1px:hover{border-left:1px solid}.tablet\:border-2px,.tablet\:hover\:border-2px:hover{border:2px solid}.tablet\:border-y-2px,.tablet\:hover\:border-y-2px:hover{border-bottom:2px solid;border-top:2px solid}.tablet\:border-x-2px,.tablet\:hover\:border-x-2px:hover{border-left:2px solid;border-right:2px solid}.tablet\:border-top-2px,.tablet\:hover\:border-top-2px:hover{border-top:2px solid}.tablet\:border-right-2px,.tablet\:hover\:border-right-2px:hover{border-right:2px solid}.tablet\:border-bottom-2px,.tablet\:hover\:border-bottom-2px:hover{border-bottom:2px solid}.tablet\:border-left-2px,.tablet\:hover\:border-left-2px:hover{border-left:2px solid}.tablet\:border-05,.tablet\:hover\:border-05:hover{border:.25rem solid}.tablet\:border-y-05,.tablet\:hover\:border-y-05:hover{border-bottom:.25rem solid;border-top:.25rem solid}.tablet\:border-x-05,.tablet\:hover\:border-x-05:hover{border-left:.25rem solid;border-right:.25rem solid}.tablet\:border-top-05,.tablet\:hover\:border-top-05:hover{border-top:.25rem solid}.tablet\:border-right-05,.tablet\:hover\:border-right-05:hover{border-right:.25rem solid}.tablet\:border-bottom-05,.tablet\:hover\:border-bottom-05:hover{border-bottom:.25rem solid}.tablet\:border-left-05,.tablet\:hover\:border-left-05:hover{border-left:.25rem solid}.tablet\:border-1,.tablet\:hover\:border-1:hover{border:.5rem solid}.tablet\:border-y-1,.tablet\:hover\:border-y-1:hover{border-bottom:.5rem solid;border-top:.5rem solid}.tablet\:border-x-1,.tablet\:hover\:border-x-1:hover{border-left:.5rem solid;border-right:.5rem solid}.tablet\:border-top-1,.tablet\:hover\:border-top-1:hover{border-top:.5rem solid}.tablet\:border-right-1,.tablet\:hover\:border-right-1:hover{border-right:.5rem solid}.tablet\:border-bottom-1,.tablet\:hover\:border-bottom-1:hover{border-bottom:.5rem solid}.tablet\:border-left-1,.tablet\:hover\:border-left-1:hover{border-left:.5rem solid}.tablet\:border-105,.tablet\:hover\:border-105:hover{border:.75rem solid}.tablet\:border-y-105,.tablet\:hover\:border-y-105:hover{border-bottom:.75rem solid;border-top:.75rem solid}.tablet\:border-x-105,.tablet\:hover\:border-x-105:hover{border-left:.75rem solid;border-right:.75rem solid}.tablet\:border-top-105,.tablet\:hover\:border-top-105:hover{border-top:.75rem solid}.tablet\:border-right-105,.tablet\:hover\:border-right-105:hover{border-right:.75rem solid}.tablet\:border-bottom-105,.tablet\:hover\:border-bottom-105:hover{border-bottom:.75rem solid}.tablet\:border-left-105,.tablet\:hover\:border-left-105:hover{border-left:.75rem solid}.tablet\:border-2,.tablet\:hover\:border-2:hover{border:1rem solid}.tablet\:border-y-2,.tablet\:hover\:border-y-2:hover{border-bottom:1rem solid;border-top:1rem solid}.tablet\:border-x-2,.tablet\:hover\:border-x-2:hover{border-left:1rem solid;border-right:1rem solid}.tablet\:border-top-2,.tablet\:hover\:border-top-2:hover{border-top:1rem solid}.tablet\:border-right-2,.tablet\:hover\:border-right-2:hover{border-right:1rem solid}.tablet\:border-bottom-2,.tablet\:hover\:border-bottom-2:hover{border-bottom:1rem solid}.tablet\:border-left-2,.tablet\:hover\:border-left-2:hover{border-left:1rem solid}.tablet\:border-205,.tablet\:hover\:border-205:hover{border:1.25rem solid}.tablet\:border-y-205,.tablet\:hover\:border-y-205:hover{border-bottom:1.25rem solid;border-top:1.25rem solid}.tablet\:border-x-205,.tablet\:hover\:border-x-205:hover{border-left:1.25rem solid;border-right:1.25rem solid}.tablet\:border-top-205,.tablet\:hover\:border-top-205:hover{border-top:1.25rem solid}.tablet\:border-right-205,.tablet\:hover\:border-right-205:hover{border-right:1.25rem solid}.tablet\:border-bottom-205,.tablet\:hover\:border-bottom-205:hover{border-bottom:1.25rem solid}.tablet\:border-left-205,.tablet\:hover\:border-left-205:hover{border-left:1.25rem solid}.tablet\:border-3,.tablet\:hover\:border-3:hover{border:1.5rem solid}.tablet\:border-y-3,.tablet\:hover\:border-y-3:hover{border-bottom:1.5rem solid;border-top:1.5rem solid}.tablet\:border-x-3,.tablet\:hover\:border-x-3:hover{border-left:1.5rem solid;border-right:1.5rem solid}.tablet\:border-top-3,.tablet\:hover\:border-top-3:hover{border-top:1.5rem solid}.tablet\:border-right-3,.tablet\:hover\:border-right-3:hover{border-right:1.5rem solid}.tablet\:border-bottom-3,.tablet\:hover\:border-bottom-3:hover{border-bottom:1.5rem solid}.tablet\:border-left-3,.tablet\:hover\:border-left-3:hover{border-left:1.5rem solid}.tablet\:border-0,.tablet\:hover\:border-0:hover{border:0 solid}.tablet\:border-y-0,.tablet\:hover\:border-y-0:hover{border-bottom:0 solid;border-top:0 solid}.tablet\:border-x-0,.tablet\:hover\:border-x-0:hover{border-left:0 solid;border-right:0 solid}.tablet\:border-top-0,.tablet\:hover\:border-top-0:hover{border-top:0 solid}.tablet\:border-right-0,.tablet\:hover\:border-right-0:hover{border-right:0 solid}.tablet\:border-bottom-0,.tablet\:hover\:border-bottom-0:hover{border-bottom:0 solid}.tablet\:border-left-0,.tablet\:hover\:border-left-0:hover{border-left:0 solid}.tablet\:border,.tablet\:hover\:border:hover{border:1px solid}.tablet\:border-y,.tablet\:hover\:border-y:hover{border-bottom:1px solid;border-top:1px solid}.tablet\:border-x,.tablet\:hover\:border-x:hover{border-left:1px solid;border-right:1px solid}.tablet\:border-top,.tablet\:hover\:border-top:hover{border-top:1px solid}.tablet\:border-right,.tablet\:hover\:border-right:hover{border-right:1px solid}.tablet\:border-bottom,.tablet\:hover\:border-bottom:hover{border-bottom:1px solid}.tablet\:border-left,.tablet\:hover\:border-left:hover{border-left:1px solid}.tablet\:border-transparent,.tablet\:hover\:border-transparent:hover{border-color:transparent}.tablet\:border-black,.tablet\:hover\:border-black:hover{border-color:#000}.tablet\:border-white,.tablet\:hover\:border-white:hover{border-color:#fff}.tablet\:border-red,.tablet\:hover\:border-red:hover{border-color:#e52207}.tablet\:border-orange,.tablet\:hover\:border-orange:hover{border-color:#e66f0e}.tablet\:border-gold,.tablet\:hover\:border-gold:hover{border-color:#ffbe2e}.tablet\:border-yellow,.tablet\:hover\:border-yellow:hover{border-color:#fee685}.tablet\:border-green,.tablet\:hover\:border-green:hover{border-color:#538200}.tablet\:border-mint,.tablet\:hover\:border-mint:hover{border-color:#04c585}.tablet\:border-cyan,.tablet\:hover\:border-cyan:hover{border-color:#009ec1}.tablet\:border-blue,.tablet\:hover\:border-blue:hover{border-color:#0076d6}.tablet\:border-indigo,.tablet\:hover\:border-indigo:hover{border-color:#676cc8}.tablet\:border-violet,.tablet\:hover\:border-violet:hover{border-color:#8168b3}.tablet\:border-magenta,.tablet\:hover\:border-magenta:hover{border-color:#d72d79}.tablet\:border-gray-5,.tablet\:hover\:border-gray-5:hover{border-color:#f0f0f0}.tablet\:border-gray-10,.tablet\:hover\:border-gray-10:hover{border-color:#e6e6e6}.tablet\:border-gray-30,.tablet\:hover\:border-gray-30:hover{border-color:#adadad}.tablet\:border-gray-50,.tablet\:hover\:border-gray-50:hover{border-color:#757575}.tablet\:border-gray-70,.tablet\:hover\:border-gray-70:hover{border-color:#454545}.tablet\:border-gray-90,.tablet\:hover\:border-gray-90:hover{border-color:#1b1b1b}.tablet\:border-base-lightest,.tablet\:hover\:border-base-lightest:hover{border-color:#f0f0f0}.tablet\:border-base-lighter,.tablet\:hover\:border-base-lighter:hover{border-color:#dfe1e2}.tablet\:border-base-light,.tablet\:hover\:border-base-light:hover{border-color:#a9aeb1}.tablet\:border-base,.tablet\:hover\:border-base:hover{border-color:#71767a}.tablet\:border-base-dark,.tablet\:hover\:border-base-dark:hover{border-color:#565c65}.tablet\:border-base-darker,.tablet\:hover\:border-base-darker:hover{border-color:#3d4551}.tablet\:border-base-darkest,.tablet\:border-ink,.tablet\:hover\:border-base-darkest:hover,.tablet\:hover\:border-ink:hover{border-color:#1b1b1b}.tablet\:border-primary-lighter,.tablet\:hover\:border-primary-lighter:hover{border-color:#d9e8f6}.tablet\:border-primary-light,.tablet\:hover\:border-primary-light:hover{border-color:#73b3e7}.tablet\:border-primary,.tablet\:hover\:border-primary:hover{border-color:#005ea2}.tablet\:border-primary-vivid,.tablet\:hover\:border-primary-vivid:hover{border-color:#0050d8}.tablet\:border-primary-dark,.tablet\:hover\:border-primary-dark:hover{border-color:#1a4480}.tablet\:border-primary-darker,.tablet\:hover\:border-primary-darker:hover{border-color:#162e51}.tablet\:border-secondary-lighter,.tablet\:hover\:border-secondary-lighter:hover{border-color:#f3e1e4}.tablet\:border-secondary-light,.tablet\:hover\:border-secondary-light:hover{border-color:#f2938c}.tablet\:border-secondary,.tablet\:hover\:border-secondary:hover{border-color:#d83933}.tablet\:border-secondary-vivid,.tablet\:hover\:border-secondary-vivid:hover{border-color:#e41d3d}.tablet\:border-secondary-dark,.tablet\:hover\:border-secondary-dark:hover{border-color:#b50909}.tablet\:border-secondary-darker,.tablet\:hover\:border-secondary-darker:hover{border-color:#8b0a03}.tablet\:border-accent-warm-darker,.tablet\:hover\:border-accent-warm-darker:hover{border-color:#775540}.tablet\:border-accent-warm-dark,.tablet\:hover\:border-accent-warm-dark:hover{border-color:#c05600}.tablet\:border-accent-warm,.tablet\:hover\:border-accent-warm:hover{border-color:#fa9441}.tablet\:border-accent-warm-light,.tablet\:hover\:border-accent-warm-light:hover{border-color:#ffbc78}.tablet\:border-accent-warm-lighter,.tablet\:hover\:border-accent-warm-lighter:hover{border-color:#f2e4d4}.tablet\:border-accent-cool-darker,.tablet\:hover\:border-accent-cool-darker:hover{border-color:#07648d}.tablet\:border-accent-cool-dark,.tablet\:hover\:border-accent-cool-dark:hover{border-color:#28a0cb}.tablet\:border-accent-cool,.tablet\:hover\:border-accent-cool:hover{border-color:#00bde3}.tablet\:border-accent-cool-light,.tablet\:hover\:border-accent-cool-light:hover{border-color:#97d4ea}.tablet\:border-accent-cool-lighter,.tablet\:hover\:border-accent-cool-lighter:hover{border-color:#e1f3f8}.tablet\:radius-0{border-radius:0}.tablet\:radius-top-0{border-top-left-radius:0;border-top-right-radius:0}.tablet\:radius-right-0{border-bottom-right-radius:0;border-top-right-radius:0}.tablet\:radius-bottom-0{border-bottom-left-radius:0;border-bottom-right-radius:0}.tablet\:radius-left-0{border-bottom-left-radius:0;border-top-left-radius:0}.tablet\:radius-none{border-radius:0}.tablet\:radius-top-none{border-top-left-radius:0;border-top-right-radius:0}.tablet\:radius-right-none{border-bottom-right-radius:0;border-top-right-radius:0}.tablet\:radius-bottom-none{border-bottom-left-radius:0;border-bottom-right-radius:0}.tablet\:radius-left-none{border-bottom-left-radius:0;border-top-left-radius:0}.tablet\:radius-sm{border-radius:2px}.tablet\:radius-top-sm{border-top-left-radius:2px;border-top-right-radius:2px}.tablet\:radius-right-sm{border-bottom-right-radius:2px;border-top-right-radius:2px}.tablet\:radius-bottom-sm{border-bottom-left-radius:2px;border-bottom-right-radius:2px}.tablet\:radius-left-sm{border-bottom-left-radius:2px;border-top-left-radius:2px}.tablet\:radius-md{border-radius:.25rem}.tablet\:radius-top-md{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.tablet\:radius-right-md{border-bottom-right-radius:.25rem;border-top-right-radius:.25rem}.tablet\:radius-bottom-md{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.tablet\:radius-left-md{border-bottom-left-radius:.25rem;border-top-left-radius:.25rem}.tablet\:radius-lg{border-radius:.5rem}.tablet\:radius-top-lg{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.tablet\:radius-right-lg{border-bottom-right-radius:.5rem;border-top-right-radius:.5rem}.tablet\:radius-bottom-lg{border-bottom-left-radius:.5rem;border-bottom-right-radius:.5rem}.tablet\:radius-left-lg{border-bottom-left-radius:.5rem;border-top-left-radius:.5rem}.tablet\:radius-pill{border-radius:99rem}.tablet\:radius-top-pill{border-top-left-radius:99rem;border-top-right-radius:99rem}.tablet\:radius-right-pill{border-bottom-right-radius:99rem;border-top-right-radius:99rem}.tablet\:radius-bottom-pill{border-bottom-left-radius:99rem;border-bottom-right-radius:99rem}.tablet\:radius-left-pill{border-bottom-left-radius:99rem;border-top-left-radius:99rem}.tablet\:display-block{display:block}.tablet\:display-flex{display:flex}.tablet\:display-none{display:none}.tablet\:display-inline{display:inline}.tablet\:display-inline-block{display:inline-block}.tablet\:display-inline-flex{display:inline-flex}.tablet\:display-table{display:table}.tablet\:display-table-cell{display:table-cell}.tablet\:display-table-row{display:table-row}.tablet\:font-mono-3xs{font-size:.77rem}.tablet\:font-mono-2xs{font-size:.83rem}.tablet\:font-mono-xs{font-size:.89rem}.tablet\:font-mono-sm{font-size:.95rem}.tablet\:font-mono-md{font-size:1.01rem}.tablet\:font-mono-lg{font-size:1.31rem}.tablet\:font-mono-xl{font-size:1.91rem}.tablet\:font-mono-2xl{font-size:2.38rem}.tablet\:font-mono-3xl{font-size:2.86rem}.tablet\:font-sans-3xs{font-size:.87rem}.tablet\:font-sans-2xs{font-size:.93rem}.tablet\:font-sans-xs{font-size:1rem}.tablet\:font-sans-sm{font-size:1.06rem}.tablet\:font-sans-md{font-size:1.13rem}.tablet\:font-sans-lg{font-size:1.46rem}.tablet\:font-sans-xl{font-size:2.13rem}.tablet\:font-sans-2xl{font-size:2.66rem}.tablet\:font-sans-3xl{font-size:3.19rem}.tablet\:font-serif-3xs{font-size:.79rem}.tablet\:font-serif-2xs{font-size:.85rem}.tablet\:font-serif-xs{font-size:.91rem}.tablet\:font-serif-sm{font-size:.98rem}.tablet\:font-serif-md{font-size:1.04rem}.tablet\:font-serif-lg{font-size:1.34rem}.tablet\:font-serif-xl{font-size:1.95rem}.tablet\:font-serif-2xl{font-size:2.44rem}.tablet\:font-serif-3xl{font-size:2.93rem}.tablet\:font-heading-3xs{font-size:.87rem}.tablet\:font-heading-2xs{font-size:.93rem}.tablet\:font-heading-xs{font-size:1rem}.tablet\:font-heading-sm{font-size:1.06rem}.tablet\:font-heading-md{font-size:1.13rem}.tablet\:font-heading-lg{font-size:1.46rem}.tablet\:font-heading-xl{font-size:2.13rem}.tablet\:font-heading-2xl{font-size:2.66rem}.tablet\:font-heading-3xl{font-size:3.19rem}.tablet\:font-body-3xs{font-size:.87rem}.tablet\:font-body-2xs{font-size:.93rem}.tablet\:font-body-xs{font-size:1rem}.tablet\:font-body-sm{font-size:1.06rem}.tablet\:font-body-md{font-size:1.13rem}.tablet\:font-body-lg{font-size:1.46rem}.tablet\:font-body-xl{font-size:2.13rem}.tablet\:font-body-2xl{font-size:2.66rem}.tablet\:font-body-3xl{font-size:3.19rem}.tablet\:font-code-3xs{font-size:.77rem}.tablet\:font-code-2xs{font-size:.83rem}.tablet\:font-code-xs{font-size:.89rem}.tablet\:font-code-sm{font-size:.95rem}.tablet\:font-code-md{font-size:1.01rem}.tablet\:font-code-lg{font-size:1.31rem}.tablet\:font-code-xl{font-size:1.91rem}.tablet\:font-code-2xl{font-size:2.38rem}.tablet\:font-code-3xl{font-size:2.86rem}.tablet\:font-alt-3xs{font-size:.79rem}.tablet\:font-alt-2xs{font-size:.85rem}.tablet\:font-alt-xs{font-size:.91rem}.tablet\:font-alt-sm{font-size:.98rem}.tablet\:font-alt-md{font-size:1.04rem}.tablet\:font-alt-lg{font-size:1.34rem}.tablet\:font-alt-xl{font-size:1.95rem}.tablet\:font-alt-2xl{font-size:2.44rem}.tablet\:font-alt-3xl{font-size:2.93rem}.tablet\:font-ui-3xs{font-size:.87rem}.tablet\:font-ui-2xs{font-size:.93rem}.tablet\:font-ui-xs{font-size:1rem}.tablet\:font-ui-sm{font-size:1.06rem}.tablet\:font-ui-md{font-size:1.13rem}.tablet\:font-ui-lg{font-size:1.46rem}.tablet\:font-ui-xl{font-size:2.13rem}.tablet\:font-ui-2xl{font-size:2.66rem}.tablet\:font-ui-3xl{font-size:3.19rem}.tablet\:text-light{font-weight:300}.tablet\:text-normal{font-weight:400}.tablet\:text-bold{font-weight:700}.tablet\:flex-justify-center{justify-content:center}.tablet\:flex-justify-start{justify-content:flex-start}.tablet\:flex-justify-end{justify-content:flex-end}.tablet\:flex-justify{justify-content:space-between}.tablet\:line-height-sans-1{line-height:.9}.tablet\:line-height-sans-2{line-height:1.1}.tablet\:line-height-sans-3{line-height:1.3}.tablet\:line-height-sans-4{line-height:1.4}.tablet\:line-height-sans-5{line-height:1.5}.tablet\:line-height-sans-6{line-height:1.6}.tablet\:line-height-serif-1{line-height:1}.tablet\:line-height-serif-2{line-height:1.2}.tablet\:line-height-serif-3{line-height:1.4}.tablet\:line-height-serif-4{line-height:1.5}.tablet\:line-height-serif-5{line-height:1.7}.tablet\:line-height-serif-6{line-height:1.8}.tablet\:line-height-mono-1{line-height:1}.tablet\:line-height-mono-2{line-height:1.3}.tablet\:line-height-mono-3{line-height:1.4}.tablet\:line-height-mono-4{line-height:1.6}.tablet\:line-height-mono-5{line-height:1.7}.tablet\:line-height-mono-6{line-height:1.8}.tablet\:line-height-heading-1{line-height:.9}.tablet\:line-height-heading-2{line-height:1.1}.tablet\:line-height-heading-3{line-height:1.3}.tablet\:line-height-heading-4{line-height:1.4}.tablet\:line-height-heading-5{line-height:1.5}.tablet\:line-height-heading-6{line-height:1.6}.tablet\:line-height-ui-1{line-height:.9}.tablet\:line-height-ui-2{line-height:1.1}.tablet\:line-height-ui-3{line-height:1.3}.tablet\:line-height-ui-4{line-height:1.4}.tablet\:line-height-ui-5{line-height:1.5}.tablet\:line-height-ui-6{line-height:1.6}.tablet\:line-height-body-1{line-height:.9}.tablet\:line-height-body-2{line-height:1.1}.tablet\:line-height-body-3{line-height:1.3}.tablet\:line-height-body-4{line-height:1.4}.tablet\:line-height-body-5{line-height:1.5}.tablet\:line-height-body-6{line-height:1.6}.tablet\:line-height-code-1{line-height:1}.tablet\:line-height-code-2{line-height:1.3}.tablet\:line-height-code-3{line-height:1.4}.tablet\:line-height-code-4{line-height:1.6}.tablet\:line-height-code-5{line-height:1.7}.tablet\:line-height-code-6{line-height:1.8}.tablet\:line-height-alt-1{line-height:1}.tablet\:line-height-alt-2{line-height:1.2}.tablet\:line-height-alt-3{line-height:1.4}.tablet\:line-height-alt-4{line-height:1.5}.tablet\:line-height-alt-5{line-height:1.7}.tablet\:line-height-alt-6{line-height:1.8}.tablet\:margin-neg-1px{margin:-1px}.tablet\:margin-neg-2px{margin:-2px}.tablet\:margin-neg-05{margin:-.25rem}.tablet\:margin-neg-1{margin:-.5rem}.tablet\:margin-neg-105{margin:-.75rem}.tablet\:margin-neg-2{margin:-1rem}.tablet\:margin-neg-205{margin:-1.25rem}.tablet\:margin-neg-3{margin:-1.5rem}.tablet\:margin-1px{margin:1px}.tablet\:margin-2px{margin:2px}.tablet\:margin-05{margin:.25rem}.tablet\:margin-1{margin:.5rem}.tablet\:margin-105{margin:.75rem}.tablet\:margin-2{margin:1rem}.tablet\:margin-205{margin:1.25rem}.tablet\:margin-3{margin:1.5rem}.tablet\:margin-4{margin:2rem}.tablet\:margin-5{margin:2.5rem}.tablet\:margin-6{margin:3rem}.tablet\:margin-7{margin:3.5rem}.tablet\:margin-8{margin:4rem}.tablet\:margin-9{margin:4.5rem}.tablet\:margin-10{margin:5rem}.tablet\:margin-15{margin:7.5rem}.tablet\:margin-05em{margin:.5em}.tablet\:margin-1em{margin:1em}.tablet\:margin-105em{margin:1.5em}.tablet\:margin-2em{margin:2em}.tablet\:margin-0{margin:0}.tablet\:margin-y-1px{margin-bottom:1px;margin-top:1px}.tablet\:margin-top-1px{margin-top:1px}.tablet\:margin-bottom-1px{margin-bottom:1px}.tablet\:margin-y-2px{margin-bottom:2px;margin-top:2px}.tablet\:margin-top-2px{margin-top:2px}.tablet\:margin-bottom-2px{margin-bottom:2px}.tablet\:margin-y-05{margin-bottom:.25rem;margin-top:.25rem}.tablet\:margin-top-05{margin-top:.25rem}.tablet\:margin-bottom-05{margin-bottom:.25rem}.tablet\:margin-y-1{margin-bottom:.5rem;margin-top:.5rem}.tablet\:margin-top-1{margin-top:.5rem}.tablet\:margin-bottom-1{margin-bottom:.5rem}.tablet\:margin-y-105{margin-bottom:.75rem;margin-top:.75rem}.tablet\:margin-top-105{margin-top:.75rem}.tablet\:margin-bottom-105{margin-bottom:.75rem}.tablet\:margin-y-2{margin-bottom:1rem;margin-top:1rem}.tablet\:margin-top-2{margin-top:1rem}.tablet\:margin-bottom-2{margin-bottom:1rem}.tablet\:margin-y-205{margin-bottom:1.25rem;margin-top:1.25rem}.tablet\:margin-top-205{margin-top:1.25rem}.tablet\:margin-bottom-205{margin-bottom:1.25rem}.tablet\:margin-y-3{margin-bottom:1.5rem;margin-top:1.5rem}.tablet\:margin-top-3{margin-top:1.5rem}.tablet\:margin-bottom-3{margin-bottom:1.5rem}.tablet\:margin-y-neg-1px{margin-bottom:-1px;margin-top:-1px}.tablet\:margin-top-neg-1px{margin-top:-1px}.tablet\:margin-bottom-neg-1px{margin-bottom:-1px}.tablet\:margin-y-neg-2px{margin-bottom:-2px;margin-top:-2px}.tablet\:margin-top-neg-2px{margin-top:-2px}.tablet\:margin-bottom-neg-2px{margin-bottom:-2px}.tablet\:margin-y-neg-05{margin-bottom:-.25rem;margin-top:-.25rem}.tablet\:margin-top-neg-05{margin-top:-.25rem}.tablet\:margin-bottom-neg-05{margin-bottom:-.25rem}.tablet\:margin-y-neg-1{margin-bottom:-.5rem;margin-top:-.5rem}.tablet\:margin-top-neg-1{margin-top:-.5rem}.tablet\:margin-bottom-neg-1{margin-bottom:-.5rem}.tablet\:margin-y-neg-105{margin-bottom:-.75rem;margin-top:-.75rem}.tablet\:margin-top-neg-105{margin-top:-.75rem}.tablet\:margin-bottom-neg-105{margin-bottom:-.75rem}.tablet\:margin-y-neg-2{margin-bottom:-1rem;margin-top:-1rem}.tablet\:margin-top-neg-2{margin-top:-1rem}.tablet\:margin-bottom-neg-2{margin-bottom:-1rem}.tablet\:margin-y-neg-205{margin-bottom:-1.25rem;margin-top:-1.25rem}.tablet\:margin-top-neg-205{margin-top:-1.25rem}.tablet\:margin-bottom-neg-205{margin-bottom:-1.25rem}.tablet\:margin-y-neg-3{margin-bottom:-1.5rem;margin-top:-1.5rem}.tablet\:margin-top-neg-3{margin-top:-1.5rem}.tablet\:margin-bottom-neg-3{margin-bottom:-1.5rem}.tablet\:margin-y-4{margin-bottom:2rem;margin-top:2rem}.tablet\:margin-top-4{margin-top:2rem}.tablet\:margin-bottom-4{margin-bottom:2rem}.tablet\:margin-y-5{margin-bottom:2.5rem;margin-top:2.5rem}.tablet\:margin-top-5{margin-top:2.5rem}.tablet\:margin-bottom-5{margin-bottom:2.5rem}.tablet\:margin-y-6{margin-bottom:3rem;margin-top:3rem}.tablet\:margin-top-6{margin-top:3rem}.tablet\:margin-bottom-6{margin-bottom:3rem}.tablet\:margin-y-7{margin-bottom:3.5rem;margin-top:3.5rem}.tablet\:margin-top-7{margin-top:3.5rem}.tablet\:margin-bottom-7{margin-bottom:3.5rem}.tablet\:margin-y-8{margin-bottom:4rem;margin-top:4rem}.tablet\:margin-top-8{margin-top:4rem}.tablet\:margin-bottom-8{margin-bottom:4rem}.tablet\:margin-y-9{margin-bottom:4.5rem;margin-top:4.5rem}.tablet\:margin-top-9{margin-top:4.5rem}.tablet\:margin-bottom-9{margin-bottom:4.5rem}.tablet\:margin-y-10{margin-bottom:5rem;margin-top:5rem}.tablet\:margin-top-10{margin-top:5rem}.tablet\:margin-bottom-10{margin-bottom:5rem}.tablet\:margin-y-15{margin-bottom:7.5rem;margin-top:7.5rem}.tablet\:margin-top-15{margin-top:7.5rem}.tablet\:margin-bottom-15{margin-bottom:7.5rem}.tablet\:margin-y-05em{margin-bottom:.5em;margin-top:.5em}.tablet\:margin-top-05em{margin-top:.5em}.tablet\:margin-bottom-05em{margin-bottom:.5em}.tablet\:margin-y-1em{margin-bottom:1em;margin-top:1em}.tablet\:margin-top-1em{margin-top:1em}.tablet\:margin-bottom-1em{margin-bottom:1em}.tablet\:margin-y-105em{margin-bottom:1.5em;margin-top:1.5em}.tablet\:margin-top-105em{margin-top:1.5em}.tablet\:margin-bottom-105em{margin-bottom:1.5em}.tablet\:margin-y-2em{margin-bottom:2em;margin-top:2em}.tablet\:margin-top-2em{margin-top:2em}.tablet\:margin-bottom-2em{margin-bottom:2em}.tablet\:margin-y-0{margin-bottom:0;margin-top:0}.tablet\:margin-top-0{margin-top:0}.tablet\:margin-bottom-0{margin-bottom:0}.tablet\:margin-y-auto{margin-bottom:auto;margin-top:auto}.tablet\:margin-top-auto{margin-top:auto}.tablet\:margin-bottom-auto{margin-bottom:auto}.tablet\:margin-x-1px{margin-left:1px;margin-right:1px}.tablet\:margin-right-1px{margin-right:1px}.tablet\:margin-left-1px{margin-left:1px}.tablet\:margin-x-2px{margin-left:2px;margin-right:2px}.tablet\:margin-right-2px{margin-right:2px}.tablet\:margin-left-2px{margin-left:2px}.tablet\:margin-x-05{margin-left:.25rem;margin-right:.25rem}.tablet\:margin-right-05{margin-right:.25rem}.tablet\:margin-left-05{margin-left:.25rem}.tablet\:margin-x-1{margin-left:.5rem;margin-right:.5rem}.tablet\:margin-right-1{margin-right:.5rem}.tablet\:margin-left-1{margin-left:.5rem}.tablet\:margin-x-105{margin-left:.75rem;margin-right:.75rem}.tablet\:margin-right-105{margin-right:.75rem}.tablet\:margin-left-105{margin-left:.75rem}.tablet\:margin-x-2{margin-left:1rem;margin-right:1rem}.tablet\:margin-right-2{margin-right:1rem}.tablet\:margin-left-2{margin-left:1rem}.tablet\:margin-x-205{margin-left:1.25rem;margin-right:1.25rem}.tablet\:margin-right-205{margin-right:1.25rem}.tablet\:margin-left-205{margin-left:1.25rem}.tablet\:margin-x-3{margin-left:1.5rem;margin-right:1.5rem}.tablet\:margin-right-3{margin-right:1.5rem}.tablet\:margin-left-3{margin-left:1.5rem}.tablet\:margin-x-neg-1px{margin-left:-1px;margin-right:-1px}.tablet\:margin-right-neg-1px{margin-right:-1px}.tablet\:margin-left-neg-1px{margin-left:-1px}.tablet\:margin-x-neg-2px{margin-left:-2px;margin-right:-2px}.tablet\:margin-right-neg-2px{margin-right:-2px}.tablet\:margin-left-neg-2px{margin-left:-2px}.tablet\:margin-x-neg-05{margin-left:-.25rem;margin-right:-.25rem}.tablet\:margin-right-neg-05{margin-right:-.25rem}.tablet\:margin-left-neg-05{margin-left:-.25rem}.tablet\:margin-x-neg-1{margin-left:-.5rem;margin-right:-.5rem}.tablet\:margin-right-neg-1{margin-right:-.5rem}.tablet\:margin-left-neg-1{margin-left:-.5rem}.tablet\:margin-x-neg-105{margin-left:-.75rem;margin-right:-.75rem}.tablet\:margin-right-neg-105{margin-right:-.75rem}.tablet\:margin-left-neg-105{margin-left:-.75rem}.tablet\:margin-x-neg-2{margin-left:-1rem;margin-right:-1rem}.tablet\:margin-right-neg-2{margin-right:-1rem}.tablet\:margin-left-neg-2{margin-left:-1rem}.tablet\:margin-x-neg-205{margin-left:-1.25rem;margin-right:-1.25rem}.tablet\:margin-right-neg-205{margin-right:-1.25rem}.tablet\:margin-left-neg-205{margin-left:-1.25rem}.tablet\:margin-x-neg-3{margin-left:-1.5rem;margin-right:-1.5rem}.tablet\:margin-right-neg-3{margin-right:-1.5rem}.tablet\:margin-left-neg-3{margin-left:-1.5rem}.tablet\:margin-x-4{margin-left:2rem;margin-right:2rem}.tablet\:margin-right-4{margin-right:2rem}.tablet\:margin-left-4{margin-left:2rem}.tablet\:margin-x-5{margin-left:2.5rem;margin-right:2.5rem}.tablet\:margin-right-5{margin-right:2.5rem}.tablet\:margin-left-5{margin-left:2.5rem}.tablet\:margin-x-6{margin-left:3rem;margin-right:3rem}.tablet\:margin-right-6{margin-right:3rem}.tablet\:margin-left-6{margin-left:3rem}.tablet\:margin-x-7{margin-left:3.5rem;margin-right:3.5rem}.tablet\:margin-right-7{margin-right:3.5rem}.tablet\:margin-left-7{margin-left:3.5rem}.tablet\:margin-x-8{margin-left:4rem;margin-right:4rem}.tablet\:margin-right-8{margin-right:4rem}.tablet\:margin-left-8{margin-left:4rem}.tablet\:margin-x-9{margin-left:4.5rem;margin-right:4.5rem}.tablet\:margin-right-9{margin-right:4.5rem}.tablet\:margin-left-9{margin-left:4.5rem}.tablet\:margin-x-10{margin-left:5rem;margin-right:5rem}.tablet\:margin-right-10{margin-right:5rem}.tablet\:margin-left-10{margin-left:5rem}.tablet\:margin-x-15{margin-left:7.5rem;margin-right:7.5rem}.tablet\:margin-right-15{margin-right:7.5rem}.tablet\:margin-left-15{margin-left:7.5rem}.tablet\:margin-x-card{margin-left:10rem;margin-right:10rem}.tablet\:margin-right-card{margin-right:10rem}.tablet\:margin-left-card{margin-left:10rem}.tablet\:margin-x-card-lg{margin-left:15rem;margin-right:15rem}.tablet\:margin-right-card-lg{margin-right:15rem}.tablet\:margin-left-card-lg{margin-left:15rem}.tablet\:margin-x-mobile{margin-left:20rem;margin-right:20rem}.tablet\:margin-right-mobile{margin-right:20rem}.tablet\:margin-left-mobile{margin-left:20rem}.tablet\:margin-x-05em{margin-left:.5em;margin-right:.5em}.tablet\:margin-right-05em{margin-right:.5em}.tablet\:margin-left-05em{margin-left:.5em}.tablet\:margin-x-1em{margin-left:1em;margin-right:1em}.tablet\:margin-right-1em{margin-right:1em}.tablet\:margin-left-1em{margin-left:1em}.tablet\:margin-x-105em{margin-left:1.5em;margin-right:1.5em}.tablet\:margin-right-105em{margin-right:1.5em}.tablet\:margin-left-105em{margin-left:1.5em}.tablet\:margin-x-2em{margin-left:2em;margin-right:2em}.tablet\:margin-right-2em{margin-right:2em}.tablet\:margin-left-2em{margin-left:2em}.tablet\:margin-x-0{margin-left:0;margin-right:0}.tablet\:margin-right-0{margin-right:0}.tablet\:margin-left-0{margin-left:0}.tablet\:margin-x-auto{margin-left:auto;margin-right:auto}.tablet\:margin-right-auto{margin-right:auto}.tablet\:margin-left-auto{margin-left:auto}.tablet\:measure-1{max-width:44ex}.tablet\:measure-2{max-width:60ex}.tablet\:measure-3{max-width:64ex}.tablet\:measure-4{max-width:68ex}.tablet\:measure-5{max-width:72ex}.tablet\:measure-6{max-width:88ex}.tablet\:measure-none{max-width:none}.tablet\:order-first{order:-1}.tablet\:order-last{order:999}.tablet\:order-0,.tablet\:order-initial{order:0}.tablet\:order-1{order:1}.tablet\:order-2{order:2}.tablet\:order-3{order:3}.tablet\:order-4{order:4}.tablet\:order-5{order:5}.tablet\:order-6{order:6}.tablet\:order-7{order:7}.tablet\:order-8{order:8}.tablet\:order-9{order:9}.tablet\:order-10{order:10}.tablet\:order-11{order:11}.tablet\:padding-1px{padding:1px}.tablet\:padding-y-1px{padding-bottom:1px;padding-top:1px}.tablet\:padding-x-1px{padding-left:1px;padding-right:1px}.tablet\:padding-top-1px{padding-top:1px}.tablet\:padding-right-1px{padding-right:1px}.tablet\:padding-bottom-1px{padding-bottom:1px}.tablet\:padding-left-1px{padding-left:1px}.tablet\:padding-2px{padding:2px}.tablet\:padding-y-2px{padding-bottom:2px;padding-top:2px}.tablet\:padding-x-2px{padding-left:2px;padding-right:2px}.tablet\:padding-top-2px{padding-top:2px}.tablet\:padding-right-2px{padding-right:2px}.tablet\:padding-bottom-2px{padding-bottom:2px}.tablet\:padding-left-2px{padding-left:2px}.tablet\:padding-05{padding:.25rem}.tablet\:padding-y-05{padding-bottom:.25rem;padding-top:.25rem}.tablet\:padding-x-05{padding-left:.25rem;padding-right:.25rem}.tablet\:padding-top-05{padding-top:.25rem}.tablet\:padding-right-05{padding-right:.25rem}.tablet\:padding-bottom-05{padding-bottom:.25rem}.tablet\:padding-left-05{padding-left:.25rem}.tablet\:padding-1{padding:.5rem}.tablet\:padding-y-1{padding-bottom:.5rem;padding-top:.5rem}.tablet\:padding-x-1{padding-left:.5rem;padding-right:.5rem}.tablet\:padding-top-1{padding-top:.5rem}.tablet\:padding-right-1{padding-right:.5rem}.tablet\:padding-bottom-1{padding-bottom:.5rem}.tablet\:padding-left-1{padding-left:.5rem}.tablet\:padding-105{padding:.75rem}.tablet\:padding-y-105{padding-bottom:.75rem;padding-top:.75rem}.tablet\:padding-x-105{padding-left:.75rem;padding-right:.75rem}.tablet\:padding-top-105{padding-top:.75rem}.tablet\:padding-right-105{padding-right:.75rem}.tablet\:padding-bottom-105{padding-bottom:.75rem}.tablet\:padding-left-105{padding-left:.75rem}.tablet\:padding-2{padding:1rem}.tablet\:padding-y-2{padding-bottom:1rem;padding-top:1rem}.tablet\:padding-x-2{padding-left:1rem;padding-right:1rem}.tablet\:padding-top-2{padding-top:1rem}.tablet\:padding-right-2{padding-right:1rem}.tablet\:padding-bottom-2{padding-bottom:1rem}.tablet\:padding-left-2{padding-left:1rem}.tablet\:padding-205{padding:1.25rem}.tablet\:padding-y-205{padding-bottom:1.25rem;padding-top:1.25rem}.tablet\:padding-x-205{padding-left:1.25rem;padding-right:1.25rem}.tablet\:padding-top-205{padding-top:1.25rem}.tablet\:padding-right-205{padding-right:1.25rem}.tablet\:padding-bottom-205{padding-bottom:1.25rem}.tablet\:padding-left-205{padding-left:1.25rem}.tablet\:padding-3{padding:1.5rem}.tablet\:padding-y-3{padding-bottom:1.5rem;padding-top:1.5rem}.tablet\:padding-x-3{padding-left:1.5rem;padding-right:1.5rem}.tablet\:padding-top-3{padding-top:1.5rem}.tablet\:padding-right-3{padding-right:1.5rem}.tablet\:padding-bottom-3{padding-bottom:1.5rem}.tablet\:padding-left-3{padding-left:1.5rem}.tablet\:padding-4{padding:2rem}.tablet\:padding-y-4{padding-bottom:2rem;padding-top:2rem}.tablet\:padding-x-4{padding-left:2rem;padding-right:2rem}.tablet\:padding-top-4{padding-top:2rem}.tablet\:padding-right-4{padding-right:2rem}.tablet\:padding-bottom-4{padding-bottom:2rem}.tablet\:padding-left-4{padding-left:2rem}.tablet\:padding-5{padding:2.5rem}.tablet\:padding-y-5{padding-bottom:2.5rem;padding-top:2.5rem}.tablet\:padding-x-5{padding-left:2.5rem;padding-right:2.5rem}.tablet\:padding-top-5{padding-top:2.5rem}.tablet\:padding-right-5{padding-right:2.5rem}.tablet\:padding-bottom-5{padding-bottom:2.5rem}.tablet\:padding-left-5{padding-left:2.5rem}.tablet\:padding-6{padding:3rem}.tablet\:padding-y-6{padding-bottom:3rem;padding-top:3rem}.tablet\:padding-x-6{padding-left:3rem;padding-right:3rem}.tablet\:padding-top-6{padding-top:3rem}.tablet\:padding-right-6{padding-right:3rem}.tablet\:padding-bottom-6{padding-bottom:3rem}.tablet\:padding-left-6{padding-left:3rem}.tablet\:padding-7{padding:3.5rem}.tablet\:padding-y-7{padding-bottom:3.5rem;padding-top:3.5rem}.tablet\:padding-x-7{padding-left:3.5rem;padding-right:3.5rem}.tablet\:padding-top-7{padding-top:3.5rem}.tablet\:padding-right-7{padding-right:3.5rem}.tablet\:padding-bottom-7{padding-bottom:3.5rem}.tablet\:padding-left-7{padding-left:3.5rem}.tablet\:padding-8{padding:4rem}.tablet\:padding-y-8{padding-bottom:4rem;padding-top:4rem}.tablet\:padding-x-8{padding-left:4rem;padding-right:4rem}.tablet\:padding-top-8{padding-top:4rem}.tablet\:padding-right-8{padding-right:4rem}.tablet\:padding-bottom-8{padding-bottom:4rem}.tablet\:padding-left-8{padding-left:4rem}.tablet\:padding-9{padding:4.5rem}.tablet\:padding-y-9{padding-bottom:4.5rem;padding-top:4.5rem}.tablet\:padding-x-9{padding-left:4.5rem;padding-right:4.5rem}.tablet\:padding-top-9{padding-top:4.5rem}.tablet\:padding-right-9{padding-right:4.5rem}.tablet\:padding-bottom-9{padding-bottom:4.5rem}.tablet\:padding-left-9{padding-left:4.5rem}.tablet\:padding-10{padding:5rem}.tablet\:padding-y-10{padding-bottom:5rem;padding-top:5rem}.tablet\:padding-x-10{padding-left:5rem;padding-right:5rem}.tablet\:padding-top-10{padding-top:5rem}.tablet\:padding-right-10{padding-right:5rem}.tablet\:padding-bottom-10{padding-bottom:5rem}.tablet\:padding-left-10{padding-left:5rem}.tablet\:padding-15{padding:7.5rem}.tablet\:padding-y-15{padding-bottom:7.5rem;padding-top:7.5rem}.tablet\:padding-x-15{padding-left:7.5rem;padding-right:7.5rem}.tablet\:padding-top-15{padding-top:7.5rem}.tablet\:padding-right-15{padding-right:7.5rem}.tablet\:padding-bottom-15{padding-bottom:7.5rem}.tablet\:padding-left-15{padding-left:7.5rem}.tablet\:padding-0{padding:0}.tablet\:padding-y-0{padding-bottom:0;padding-top:0}.tablet\:padding-x-0{padding-left:0;padding-right:0}.tablet\:padding-top-0{padding-top:0}.tablet\:padding-right-0{padding-right:0}.tablet\:padding-bottom-0{padding-bottom:0}.tablet\:padding-left-0{padding-left:0}.tablet\:width-1px{width:1px}.tablet\:width-2px{width:2px}.tablet\:width-05{width:.25rem}.tablet\:width-1{width:.5rem}.tablet\:width-105{width:.75rem}.tablet\:width-2{width:1rem}.tablet\:width-205{width:1.25rem}.tablet\:width-3{width:1.5rem}.tablet\:width-4{width:2rem}.tablet\:width-5{width:2.5rem}.tablet\:width-6{width:3rem}.tablet\:width-7{width:3.5rem}.tablet\:width-8{width:4rem}.tablet\:width-9{width:4.5rem}.tablet\:width-10{width:5rem}.tablet\:width-15{width:7.5rem}.tablet\:width-card{width:10rem}.tablet\:width-card-lg{width:15rem}.tablet\:width-mobile{width:20rem}.tablet\:width-mobile-lg{width:30rem}.tablet\:width-tablet{width:40rem}.tablet\:width-tablet-lg{width:55rem}.tablet\:width-desktop{width:64rem}.tablet\:width-desktop-lg{width:75rem}.tablet\:width-widescreen{width:87.5rem}.tablet\:width-0{width:0}.tablet\:width-full{width:100%}.tablet\:width-auto{width:auto}}@media (min-width:64em){.desktop\:border-1px,.desktop\:hover\:border-1px:hover{border:1px solid}.desktop\:border-y-1px,.desktop\:hover\:border-y-1px:hover{border-bottom:1px solid;border-top:1px solid}.desktop\:border-x-1px,.desktop\:hover\:border-x-1px:hover{border-left:1px solid;border-right:1px solid}.desktop\:border-top-1px,.desktop\:hover\:border-top-1px:hover{border-top:1px solid}.desktop\:border-right-1px,.desktop\:hover\:border-right-1px:hover{border-right:1px solid}.desktop\:border-bottom-1px,.desktop\:hover\:border-bottom-1px:hover{border-bottom:1px solid}.desktop\:border-left-1px,.desktop\:hover\:border-left-1px:hover{border-left:1px solid}.desktop\:border-2px,.desktop\:hover\:border-2px:hover{border:2px solid}.desktop\:border-y-2px,.desktop\:hover\:border-y-2px:hover{border-bottom:2px solid;border-top:2px solid}.desktop\:border-x-2px,.desktop\:hover\:border-x-2px:hover{border-left:2px solid;border-right:2px solid}.desktop\:border-top-2px,.desktop\:hover\:border-top-2px:hover{border-top:2px solid}.desktop\:border-right-2px,.desktop\:hover\:border-right-2px:hover{border-right:2px solid}.desktop\:border-bottom-2px,.desktop\:hover\:border-bottom-2px:hover{border-bottom:2px solid}.desktop\:border-left-2px,.desktop\:hover\:border-left-2px:hover{border-left:2px solid}.desktop\:border-05,.desktop\:hover\:border-05:hover{border:.25rem solid}.desktop\:border-y-05,.desktop\:hover\:border-y-05:hover{border-bottom:.25rem solid;border-top:.25rem solid}.desktop\:border-x-05,.desktop\:hover\:border-x-05:hover{border-left:.25rem solid;border-right:.25rem solid}.desktop\:border-top-05,.desktop\:hover\:border-top-05:hover{border-top:.25rem solid}.desktop\:border-right-05,.desktop\:hover\:border-right-05:hover{border-right:.25rem solid}.desktop\:border-bottom-05,.desktop\:hover\:border-bottom-05:hover{border-bottom:.25rem solid}.desktop\:border-left-05,.desktop\:hover\:border-left-05:hover{border-left:.25rem solid}.desktop\:border-1,.desktop\:hover\:border-1:hover{border:.5rem solid}.desktop\:border-y-1,.desktop\:hover\:border-y-1:hover{border-bottom:.5rem solid;border-top:.5rem solid}.desktop\:border-x-1,.desktop\:hover\:border-x-1:hover{border-left:.5rem solid;border-right:.5rem solid}.desktop\:border-top-1,.desktop\:hover\:border-top-1:hover{border-top:.5rem solid}.desktop\:border-right-1,.desktop\:hover\:border-right-1:hover{border-right:.5rem solid}.desktop\:border-bottom-1,.desktop\:hover\:border-bottom-1:hover{border-bottom:.5rem solid}.desktop\:border-left-1,.desktop\:hover\:border-left-1:hover{border-left:.5rem solid}.desktop\:border-105,.desktop\:hover\:border-105:hover{border:.75rem solid}.desktop\:border-y-105,.desktop\:hover\:border-y-105:hover{border-bottom:.75rem solid;border-top:.75rem solid}.desktop\:border-x-105,.desktop\:hover\:border-x-105:hover{border-left:.75rem solid;border-right:.75rem solid}.desktop\:border-top-105,.desktop\:hover\:border-top-105:hover{border-top:.75rem solid}.desktop\:border-right-105,.desktop\:hover\:border-right-105:hover{border-right:.75rem solid}.desktop\:border-bottom-105,.desktop\:hover\:border-bottom-105:hover{border-bottom:.75rem solid}.desktop\:border-left-105,.desktop\:hover\:border-left-105:hover{border-left:.75rem solid}.desktop\:border-2,.desktop\:hover\:border-2:hover{border:1rem solid}.desktop\:border-y-2,.desktop\:hover\:border-y-2:hover{border-bottom:1rem solid;border-top:1rem solid}.desktop\:border-x-2,.desktop\:hover\:border-x-2:hover{border-left:1rem solid;border-right:1rem solid}.desktop\:border-top-2,.desktop\:hover\:border-top-2:hover{border-top:1rem solid}.desktop\:border-right-2,.desktop\:hover\:border-right-2:hover{border-right:1rem solid}.desktop\:border-bottom-2,.desktop\:hover\:border-bottom-2:hover{border-bottom:1rem solid}.desktop\:border-left-2,.desktop\:hover\:border-left-2:hover{border-left:1rem solid}.desktop\:border-205,.desktop\:hover\:border-205:hover{border:1.25rem solid}.desktop\:border-y-205,.desktop\:hover\:border-y-205:hover{border-bottom:1.25rem solid;border-top:1.25rem solid}.desktop\:border-x-205,.desktop\:hover\:border-x-205:hover{border-left:1.25rem solid;border-right:1.25rem solid}.desktop\:border-top-205,.desktop\:hover\:border-top-205:hover{border-top:1.25rem solid}.desktop\:border-right-205,.desktop\:hover\:border-right-205:hover{border-right:1.25rem solid}.desktop\:border-bottom-205,.desktop\:hover\:border-bottom-205:hover{border-bottom:1.25rem solid}.desktop\:border-left-205,.desktop\:hover\:border-left-205:hover{border-left:1.25rem solid}.desktop\:border-3,.desktop\:hover\:border-3:hover{border:1.5rem solid}.desktop\:border-y-3,.desktop\:hover\:border-y-3:hover{border-bottom:1.5rem solid;border-top:1.5rem solid}.desktop\:border-x-3,.desktop\:hover\:border-x-3:hover{border-left:1.5rem solid;border-right:1.5rem solid}.desktop\:border-top-3,.desktop\:hover\:border-top-3:hover{border-top:1.5rem solid}.desktop\:border-right-3,.desktop\:hover\:border-right-3:hover{border-right:1.5rem solid}.desktop\:border-bottom-3,.desktop\:hover\:border-bottom-3:hover{border-bottom:1.5rem solid}.desktop\:border-left-3,.desktop\:hover\:border-left-3:hover{border-left:1.5rem solid}.desktop\:border-0,.desktop\:hover\:border-0:hover{border:0 solid}.desktop\:border-y-0,.desktop\:hover\:border-y-0:hover{border-bottom:0 solid;border-top:0 solid}.desktop\:border-x-0,.desktop\:hover\:border-x-0:hover{border-left:0 solid;border-right:0 solid}.desktop\:border-top-0,.desktop\:hover\:border-top-0:hover{border-top:0 solid}.desktop\:border-right-0,.desktop\:hover\:border-right-0:hover{border-right:0 solid}.desktop\:border-bottom-0,.desktop\:hover\:border-bottom-0:hover{border-bottom:0 solid}.desktop\:border-left-0,.desktop\:hover\:border-left-0:hover{border-left:0 solid}.desktop\:border,.desktop\:hover\:border:hover{border:1px solid}.desktop\:border-y,.desktop\:hover\:border-y:hover{border-bottom:1px solid;border-top:1px solid}.desktop\:border-x,.desktop\:hover\:border-x:hover{border-left:1px solid;border-right:1px solid}.desktop\:border-top,.desktop\:hover\:border-top:hover{border-top:1px solid}.desktop\:border-right,.desktop\:hover\:border-right:hover{border-right:1px solid}.desktop\:border-bottom,.desktop\:hover\:border-bottom:hover{border-bottom:1px solid}.desktop\:border-left,.desktop\:hover\:border-left:hover{border-left:1px solid}.desktop\:border-transparent,.desktop\:hover\:border-transparent:hover{border-color:transparent}.desktop\:border-black,.desktop\:hover\:border-black:hover{border-color:#000}.desktop\:border-white,.desktop\:hover\:border-white:hover{border-color:#fff}.desktop\:border-red,.desktop\:hover\:border-red:hover{border-color:#e52207}.desktop\:border-orange,.desktop\:hover\:border-orange:hover{border-color:#e66f0e}.desktop\:border-gold,.desktop\:hover\:border-gold:hover{border-color:#ffbe2e}.desktop\:border-yellow,.desktop\:hover\:border-yellow:hover{border-color:#fee685}.desktop\:border-green,.desktop\:hover\:border-green:hover{border-color:#538200}.desktop\:border-mint,.desktop\:hover\:border-mint:hover{border-color:#04c585}.desktop\:border-cyan,.desktop\:hover\:border-cyan:hover{border-color:#009ec1}.desktop\:border-blue,.desktop\:hover\:border-blue:hover{border-color:#0076d6}.desktop\:border-indigo,.desktop\:hover\:border-indigo:hover{border-color:#676cc8}.desktop\:border-violet,.desktop\:hover\:border-violet:hover{border-color:#8168b3}.desktop\:border-magenta,.desktop\:hover\:border-magenta:hover{border-color:#d72d79}.desktop\:border-gray-5,.desktop\:hover\:border-gray-5:hover{border-color:#f0f0f0}.desktop\:border-gray-10,.desktop\:hover\:border-gray-10:hover{border-color:#e6e6e6}.desktop\:border-gray-30,.desktop\:hover\:border-gray-30:hover{border-color:#adadad}.desktop\:border-gray-50,.desktop\:hover\:border-gray-50:hover{border-color:#757575}.desktop\:border-gray-70,.desktop\:hover\:border-gray-70:hover{border-color:#454545}.desktop\:border-gray-90,.desktop\:hover\:border-gray-90:hover{border-color:#1b1b1b}.desktop\:border-base-lightest,.desktop\:hover\:border-base-lightest:hover{border-color:#f0f0f0}.desktop\:border-base-lighter,.desktop\:hover\:border-base-lighter:hover{border-color:#dfe1e2}.desktop\:border-base-light,.desktop\:hover\:border-base-light:hover{border-color:#a9aeb1}.desktop\:border-base,.desktop\:hover\:border-base:hover{border-color:#71767a}.desktop\:border-base-dark,.desktop\:hover\:border-base-dark:hover{border-color:#565c65}.desktop\:border-base-darker,.desktop\:hover\:border-base-darker:hover{border-color:#3d4551}.desktop\:border-base-darkest,.desktop\:border-ink,.desktop\:hover\:border-base-darkest:hover,.desktop\:hover\:border-ink:hover{border-color:#1b1b1b}.desktop\:border-primary-lighter,.desktop\:hover\:border-primary-lighter:hover{border-color:#d9e8f6}.desktop\:border-primary-light,.desktop\:hover\:border-primary-light:hover{border-color:#73b3e7}.desktop\:border-primary,.desktop\:hover\:border-primary:hover{border-color:#005ea2}.desktop\:border-primary-vivid,.desktop\:hover\:border-primary-vivid:hover{border-color:#0050d8}.desktop\:border-primary-dark,.desktop\:hover\:border-primary-dark:hover{border-color:#1a4480}.desktop\:border-primary-darker,.desktop\:hover\:border-primary-darker:hover{border-color:#162e51}.desktop\:border-secondary-lighter,.desktop\:hover\:border-secondary-lighter:hover{border-color:#f3e1e4}.desktop\:border-secondary-light,.desktop\:hover\:border-secondary-light:hover{border-color:#f2938c}.desktop\:border-secondary,.desktop\:hover\:border-secondary:hover{border-color:#d83933}.desktop\:border-secondary-vivid,.desktop\:hover\:border-secondary-vivid:hover{border-color:#e41d3d}.desktop\:border-secondary-dark,.desktop\:hover\:border-secondary-dark:hover{border-color:#b50909}.desktop\:border-secondary-darker,.desktop\:hover\:border-secondary-darker:hover{border-color:#8b0a03}.desktop\:border-accent-warm-darker,.desktop\:hover\:border-accent-warm-darker:hover{border-color:#775540}.desktop\:border-accent-warm-dark,.desktop\:hover\:border-accent-warm-dark:hover{border-color:#c05600}.desktop\:border-accent-warm,.desktop\:hover\:border-accent-warm:hover{border-color:#fa9441}.desktop\:border-accent-warm-light,.desktop\:hover\:border-accent-warm-light:hover{border-color:#ffbc78}.desktop\:border-accent-warm-lighter,.desktop\:hover\:border-accent-warm-lighter:hover{border-color:#f2e4d4}.desktop\:border-accent-cool-darker,.desktop\:hover\:border-accent-cool-darker:hover{border-color:#07648d}.desktop\:border-accent-cool-dark,.desktop\:hover\:border-accent-cool-dark:hover{border-color:#28a0cb}.desktop\:border-accent-cool,.desktop\:hover\:border-accent-cool:hover{border-color:#00bde3}.desktop\:border-accent-cool-light,.desktop\:hover\:border-accent-cool-light:hover{border-color:#97d4ea}.desktop\:border-accent-cool-lighter,.desktop\:hover\:border-accent-cool-lighter:hover{border-color:#e1f3f8}.desktop\:radius-0{border-radius:0}.desktop\:radius-top-0{border-top-left-radius:0;border-top-right-radius:0}.desktop\:radius-right-0{border-bottom-right-radius:0;border-top-right-radius:0}.desktop\:radius-bottom-0{border-bottom-left-radius:0;border-bottom-right-radius:0}.desktop\:radius-left-0{border-bottom-left-radius:0;border-top-left-radius:0}.desktop\:radius-none{border-radius:0}.desktop\:radius-top-none{border-top-left-radius:0;border-top-right-radius:0}.desktop\:radius-right-none{border-bottom-right-radius:0;border-top-right-radius:0}.desktop\:radius-bottom-none{border-bottom-left-radius:0;border-bottom-right-radius:0}.desktop\:radius-left-none{border-bottom-left-radius:0;border-top-left-radius:0}.desktop\:radius-sm{border-radius:2px}.desktop\:radius-top-sm{border-top-left-radius:2px;border-top-right-radius:2px}.desktop\:radius-right-sm{border-bottom-right-radius:2px;border-top-right-radius:2px}.desktop\:radius-bottom-sm{border-bottom-left-radius:2px;border-bottom-right-radius:2px}.desktop\:radius-left-sm{border-bottom-left-radius:2px;border-top-left-radius:2px}.desktop\:radius-md{border-radius:.25rem}.desktop\:radius-top-md{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.desktop\:radius-right-md{border-bottom-right-radius:.25rem;border-top-right-radius:.25rem}.desktop\:radius-bottom-md{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.desktop\:radius-left-md{border-bottom-left-radius:.25rem;border-top-left-radius:.25rem}.desktop\:radius-lg{border-radius:.5rem}.desktop\:radius-top-lg{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.desktop\:radius-right-lg{border-bottom-right-radius:.5rem;border-top-right-radius:.5rem}.desktop\:radius-bottom-lg{border-bottom-left-radius:.5rem;border-bottom-right-radius:.5rem}.desktop\:radius-left-lg{border-bottom-left-radius:.5rem;border-top-left-radius:.5rem}.desktop\:radius-pill{border-radius:99rem}.desktop\:radius-top-pill{border-top-left-radius:99rem;border-top-right-radius:99rem}.desktop\:radius-right-pill{border-bottom-right-radius:99rem;border-top-right-radius:99rem}.desktop\:radius-bottom-pill{border-bottom-left-radius:99rem;border-bottom-right-radius:99rem}.desktop\:radius-left-pill{border-bottom-left-radius:99rem;border-top-left-radius:99rem}.desktop\:display-block{display:block}.desktop\:display-flex{display:flex}.desktop\:display-none{display:none}.desktop\:display-inline{display:inline}.desktop\:display-inline-block{display:inline-block}.desktop\:display-inline-flex{display:inline-flex}.desktop\:display-table{display:table}.desktop\:display-table-cell{display:table-cell}.desktop\:display-table-row{display:table-row}.desktop\:font-mono-3xs{font-size:.77rem}.desktop\:font-mono-2xs{font-size:.83rem}.desktop\:font-mono-xs{font-size:.89rem}.desktop\:font-mono-sm{font-size:.95rem}.desktop\:font-mono-md{font-size:1.01rem}.desktop\:font-mono-lg{font-size:1.31rem}.desktop\:font-mono-xl{font-size:1.91rem}.desktop\:font-mono-2xl{font-size:2.38rem}.desktop\:font-mono-3xl{font-size:2.86rem}.desktop\:font-sans-3xs{font-size:.87rem}.desktop\:font-sans-2xs{font-size:.93rem}.desktop\:font-sans-xs{font-size:1rem}.desktop\:font-sans-sm{font-size:1.06rem}.desktop\:font-sans-md{font-size:1.13rem}.desktop\:font-sans-lg{font-size:1.46rem}.desktop\:font-sans-xl{font-size:2.13rem}.desktop\:font-sans-2xl{font-size:2.66rem}.desktop\:font-sans-3xl{font-size:3.19rem}.desktop\:font-serif-3xs{font-size:.79rem}.desktop\:font-serif-2xs{font-size:.85rem}.desktop\:font-serif-xs{font-size:.91rem}.desktop\:font-serif-sm{font-size:.98rem}.desktop\:font-serif-md{font-size:1.04rem}.desktop\:font-serif-lg{font-size:1.34rem}.desktop\:font-serif-xl{font-size:1.95rem}.desktop\:font-serif-2xl{font-size:2.44rem}.desktop\:font-serif-3xl{font-size:2.93rem}.desktop\:font-heading-3xs{font-size:.87rem}.desktop\:font-heading-2xs{font-size:.93rem}.desktop\:font-heading-xs{font-size:1rem}.desktop\:font-heading-sm{font-size:1.06rem}.desktop\:font-heading-md{font-size:1.13rem}.desktop\:font-heading-lg{font-size:1.46rem}.desktop\:font-heading-xl{font-size:2.13rem}.desktop\:font-heading-2xl{font-size:2.66rem}.desktop\:font-heading-3xl{font-size:3.19rem}.desktop\:font-body-3xs{font-size:.87rem}.desktop\:font-body-2xs{font-size:.93rem}.desktop\:font-body-xs{font-size:1rem}.desktop\:font-body-sm{font-size:1.06rem}.desktop\:font-body-md{font-size:1.13rem}.desktop\:font-body-lg{font-size:1.46rem}.desktop\:font-body-xl{font-size:2.13rem}.desktop\:font-body-2xl{font-size:2.66rem}.desktop\:font-body-3xl{font-size:3.19rem}.desktop\:font-code-3xs{font-size:.77rem}.desktop\:font-code-2xs{font-size:.83rem}.desktop\:font-code-xs{font-size:.89rem}.desktop\:font-code-sm{font-size:.95rem}.desktop\:font-code-md{font-size:1.01rem}.desktop\:font-code-lg{font-size:1.31rem}.desktop\:font-code-xl{font-size:1.91rem}.desktop\:font-code-2xl{font-size:2.38rem}.desktop\:font-code-3xl{font-size:2.86rem}.desktop\:font-alt-3xs{font-size:.79rem}.desktop\:font-alt-2xs{font-size:.85rem}.desktop\:font-alt-xs{font-size:.91rem}.desktop\:font-alt-sm{font-size:.98rem}.desktop\:font-alt-md{font-size:1.04rem}.desktop\:font-alt-lg{font-size:1.34rem}.desktop\:font-alt-xl{font-size:1.95rem}.desktop\:font-alt-2xl{font-size:2.44rem}.desktop\:font-alt-3xl{font-size:2.93rem}.desktop\:font-ui-3xs{font-size:.87rem}.desktop\:font-ui-2xs{font-size:.93rem}.desktop\:font-ui-xs{font-size:1rem}.desktop\:font-ui-sm{font-size:1.06rem}.desktop\:font-ui-md{font-size:1.13rem}.desktop\:font-ui-lg{font-size:1.46rem}.desktop\:font-ui-xl{font-size:2.13rem}.desktop\:font-ui-2xl{font-size:2.66rem}.desktop\:font-ui-3xl{font-size:3.19rem}.desktop\:text-light{font-weight:300}.desktop\:text-normal{font-weight:400}.desktop\:text-bold{font-weight:700}.desktop\:flex-justify-center{justify-content:center}.desktop\:flex-justify-start{justify-content:flex-start}.desktop\:flex-justify-end{justify-content:flex-end}.desktop\:flex-justify{justify-content:space-between}.desktop\:line-height-sans-1{line-height:.9}.desktop\:line-height-sans-2{line-height:1.1}.desktop\:line-height-sans-3{line-height:1.3}.desktop\:line-height-sans-4{line-height:1.4}.desktop\:line-height-sans-5{line-height:1.5}.desktop\:line-height-sans-6{line-height:1.6}.desktop\:line-height-serif-1{line-height:1}.desktop\:line-height-serif-2{line-height:1.2}.desktop\:line-height-serif-3{line-height:1.4}.desktop\:line-height-serif-4{line-height:1.5}.desktop\:line-height-serif-5{line-height:1.7}.desktop\:line-height-serif-6{line-height:1.8}.desktop\:line-height-mono-1{line-height:1}.desktop\:line-height-mono-2{line-height:1.3}.desktop\:line-height-mono-3{line-height:1.4}.desktop\:line-height-mono-4{line-height:1.6}.desktop\:line-height-mono-5{line-height:1.7}.desktop\:line-height-mono-6{line-height:1.8}.desktop\:line-height-heading-1{line-height:.9}.desktop\:line-height-heading-2{line-height:1.1}.desktop\:line-height-heading-3{line-height:1.3}.desktop\:line-height-heading-4{line-height:1.4}.desktop\:line-height-heading-5{line-height:1.5}.desktop\:line-height-heading-6{line-height:1.6}.desktop\:line-height-ui-1{line-height:.9}.desktop\:line-height-ui-2{line-height:1.1}.desktop\:line-height-ui-3{line-height:1.3}.desktop\:line-height-ui-4{line-height:1.4}.desktop\:line-height-ui-5{line-height:1.5}.desktop\:line-height-ui-6{line-height:1.6}.desktop\:line-height-body-1{line-height:.9}.desktop\:line-height-body-2{line-height:1.1}.desktop\:line-height-body-3{line-height:1.3}.desktop\:line-height-body-4{line-height:1.4}.desktop\:line-height-body-5{line-height:1.5}.desktop\:line-height-body-6{line-height:1.6}.desktop\:line-height-code-1{line-height:1}.desktop\:line-height-code-2{line-height:1.3}.desktop\:line-height-code-3{line-height:1.4}.desktop\:line-height-code-4{line-height:1.6}.desktop\:line-height-code-5{line-height:1.7}.desktop\:line-height-code-6{line-height:1.8}.desktop\:line-height-alt-1{line-height:1}.desktop\:line-height-alt-2{line-height:1.2}.desktop\:line-height-alt-3{line-height:1.4}.desktop\:line-height-alt-4{line-height:1.5}.desktop\:line-height-alt-5{line-height:1.7}.desktop\:line-height-alt-6{line-height:1.8}.desktop\:margin-neg-1px{margin:-1px}.desktop\:margin-neg-2px{margin:-2px}.desktop\:margin-neg-05{margin:-.25rem}.desktop\:margin-neg-1{margin:-.5rem}.desktop\:margin-neg-105{margin:-.75rem}.desktop\:margin-neg-2{margin:-1rem}.desktop\:margin-neg-205{margin:-1.25rem}.desktop\:margin-neg-3{margin:-1.5rem}.desktop\:margin-1px{margin:1px}.desktop\:margin-2px{margin:2px}.desktop\:margin-05{margin:.25rem}.desktop\:margin-1{margin:.5rem}.desktop\:margin-105{margin:.75rem}.desktop\:margin-2{margin:1rem}.desktop\:margin-205{margin:1.25rem}.desktop\:margin-3{margin:1.5rem}.desktop\:margin-4{margin:2rem}.desktop\:margin-5{margin:2.5rem}.desktop\:margin-6{margin:3rem}.desktop\:margin-7{margin:3.5rem}.desktop\:margin-8{margin:4rem}.desktop\:margin-9{margin:4.5rem}.desktop\:margin-10{margin:5rem}.desktop\:margin-15{margin:7.5rem}.desktop\:margin-05em{margin:.5em}.desktop\:margin-1em{margin:1em}.desktop\:margin-105em{margin:1.5em}.desktop\:margin-2em{margin:2em}.desktop\:margin-0{margin:0}.desktop\:margin-y-1px{margin-bottom:1px;margin-top:1px}.desktop\:margin-top-1px{margin-top:1px}.desktop\:margin-bottom-1px{margin-bottom:1px}.desktop\:margin-y-2px{margin-bottom:2px;margin-top:2px}.desktop\:margin-top-2px{margin-top:2px}.desktop\:margin-bottom-2px{margin-bottom:2px}.desktop\:margin-y-05{margin-bottom:.25rem;margin-top:.25rem}.desktop\:margin-top-05{margin-top:.25rem}.desktop\:margin-bottom-05{margin-bottom:.25rem}.desktop\:margin-y-1{margin-bottom:.5rem;margin-top:.5rem}.desktop\:margin-top-1{margin-top:.5rem}.desktop\:margin-bottom-1{margin-bottom:.5rem}.desktop\:margin-y-105{margin-bottom:.75rem;margin-top:.75rem}.desktop\:margin-top-105{margin-top:.75rem}.desktop\:margin-bottom-105{margin-bottom:.75rem}.desktop\:margin-y-2{margin-bottom:1rem;margin-top:1rem}.desktop\:margin-top-2{margin-top:1rem}.desktop\:margin-bottom-2{margin-bottom:1rem}.desktop\:margin-y-205{margin-bottom:1.25rem;margin-top:1.25rem}.desktop\:margin-top-205{margin-top:1.25rem}.desktop\:margin-bottom-205{margin-bottom:1.25rem}.desktop\:margin-y-3{margin-bottom:1.5rem;margin-top:1.5rem}.desktop\:margin-top-3{margin-top:1.5rem}.desktop\:margin-bottom-3{margin-bottom:1.5rem}.desktop\:margin-y-neg-1px{margin-bottom:-1px;margin-top:-1px}.desktop\:margin-top-neg-1px{margin-top:-1px}.desktop\:margin-bottom-neg-1px{margin-bottom:-1px}.desktop\:margin-y-neg-2px{margin-bottom:-2px;margin-top:-2px}.desktop\:margin-top-neg-2px{margin-top:-2px}.desktop\:margin-bottom-neg-2px{margin-bottom:-2px}.desktop\:margin-y-neg-05{margin-bottom:-.25rem;margin-top:-.25rem}.desktop\:margin-top-neg-05{margin-top:-.25rem}.desktop\:margin-bottom-neg-05{margin-bottom:-.25rem}.desktop\:margin-y-neg-1{margin-bottom:-.5rem;margin-top:-.5rem}.desktop\:margin-top-neg-1{margin-top:-.5rem}.desktop\:margin-bottom-neg-1{margin-bottom:-.5rem}.desktop\:margin-y-neg-105{margin-bottom:-.75rem;margin-top:-.75rem}.desktop\:margin-top-neg-105{margin-top:-.75rem}.desktop\:margin-bottom-neg-105{margin-bottom:-.75rem}.desktop\:margin-y-neg-2{margin-bottom:-1rem;margin-top:-1rem}.desktop\:margin-top-neg-2{margin-top:-1rem}.desktop\:margin-bottom-neg-2{margin-bottom:-1rem}.desktop\:margin-y-neg-205{margin-bottom:-1.25rem;margin-top:-1.25rem}.desktop\:margin-top-neg-205{margin-top:-1.25rem}.desktop\:margin-bottom-neg-205{margin-bottom:-1.25rem}.desktop\:margin-y-neg-3{margin-bottom:-1.5rem;margin-top:-1.5rem}.desktop\:margin-top-neg-3{margin-top:-1.5rem}.desktop\:margin-bottom-neg-3{margin-bottom:-1.5rem}.desktop\:margin-y-4{margin-bottom:2rem;margin-top:2rem}.desktop\:margin-top-4{margin-top:2rem}.desktop\:margin-bottom-4{margin-bottom:2rem}.desktop\:margin-y-5{margin-bottom:2.5rem;margin-top:2.5rem}.desktop\:margin-top-5{margin-top:2.5rem}.desktop\:margin-bottom-5{margin-bottom:2.5rem}.desktop\:margin-y-6{margin-bottom:3rem;margin-top:3rem}.desktop\:margin-top-6{margin-top:3rem}.desktop\:margin-bottom-6{margin-bottom:3rem}.desktop\:margin-y-7{margin-bottom:3.5rem;margin-top:3.5rem}.desktop\:margin-top-7{margin-top:3.5rem}.desktop\:margin-bottom-7{margin-bottom:3.5rem}.desktop\:margin-y-8{margin-bottom:4rem;margin-top:4rem}.desktop\:margin-top-8{margin-top:4rem}.desktop\:margin-bottom-8{margin-bottom:4rem}.desktop\:margin-y-9{margin-bottom:4.5rem;margin-top:4.5rem}.desktop\:margin-top-9{margin-top:4.5rem}.desktop\:margin-bottom-9{margin-bottom:4.5rem}.desktop\:margin-y-10{margin-bottom:5rem;margin-top:5rem}.desktop\:margin-top-10{margin-top:5rem}.desktop\:margin-bottom-10{margin-bottom:5rem}.desktop\:margin-y-15{margin-bottom:7.5rem;margin-top:7.5rem}.desktop\:margin-top-15{margin-top:7.5rem}.desktop\:margin-bottom-15{margin-bottom:7.5rem}.desktop\:margin-y-05em{margin-bottom:.5em;margin-top:.5em}.desktop\:margin-top-05em{margin-top:.5em}.desktop\:margin-bottom-05em{margin-bottom:.5em}.desktop\:margin-y-1em{margin-bottom:1em;margin-top:1em}.desktop\:margin-top-1em{margin-top:1em}.desktop\:margin-bottom-1em{margin-bottom:1em}.desktop\:margin-y-105em{margin-bottom:1.5em;margin-top:1.5em}.desktop\:margin-top-105em{margin-top:1.5em}.desktop\:margin-bottom-105em{margin-bottom:1.5em}.desktop\:margin-y-2em{margin-bottom:2em;margin-top:2em}.desktop\:margin-top-2em{margin-top:2em}.desktop\:margin-bottom-2em{margin-bottom:2em}.desktop\:margin-y-0{margin-bottom:0;margin-top:0}.desktop\:margin-top-0{margin-top:0}.desktop\:margin-bottom-0{margin-bottom:0}.desktop\:margin-y-auto{margin-bottom:auto;margin-top:auto}.desktop\:margin-top-auto{margin-top:auto}.desktop\:margin-bottom-auto{margin-bottom:auto}.desktop\:margin-x-1px{margin-left:1px;margin-right:1px}.desktop\:margin-right-1px{margin-right:1px}.desktop\:margin-left-1px{margin-left:1px}.desktop\:margin-x-2px{margin-left:2px;margin-right:2px}.desktop\:margin-right-2px{margin-right:2px}.desktop\:margin-left-2px{margin-left:2px}.desktop\:margin-x-05{margin-left:.25rem;margin-right:.25rem}.desktop\:margin-right-05{margin-right:.25rem}.desktop\:margin-left-05{margin-left:.25rem}.desktop\:margin-x-1{margin-left:.5rem;margin-right:.5rem}.desktop\:margin-right-1{margin-right:.5rem}.desktop\:margin-left-1{margin-left:.5rem}.desktop\:margin-x-105{margin-left:.75rem;margin-right:.75rem}.desktop\:margin-right-105{margin-right:.75rem}.desktop\:margin-left-105{margin-left:.75rem}.desktop\:margin-x-2{margin-left:1rem;margin-right:1rem}.desktop\:margin-right-2{margin-right:1rem}.desktop\:margin-left-2{margin-left:1rem}.desktop\:margin-x-205{margin-left:1.25rem;margin-right:1.25rem}.desktop\:margin-right-205{margin-right:1.25rem}.desktop\:margin-left-205{margin-left:1.25rem}.desktop\:margin-x-3{margin-left:1.5rem;margin-right:1.5rem}.desktop\:margin-right-3{margin-right:1.5rem}.desktop\:margin-left-3{margin-left:1.5rem}.desktop\:margin-x-neg-1px{margin-left:-1px;margin-right:-1px}.desktop\:margin-right-neg-1px{margin-right:-1px}.desktop\:margin-left-neg-1px{margin-left:-1px}.desktop\:margin-x-neg-2px{margin-left:-2px;margin-right:-2px}.desktop\:margin-right-neg-2px{margin-right:-2px}.desktop\:margin-left-neg-2px{margin-left:-2px}.desktop\:margin-x-neg-05{margin-left:-.25rem;margin-right:-.25rem}.desktop\:margin-right-neg-05{margin-right:-.25rem}.desktop\:margin-left-neg-05{margin-left:-.25rem}.desktop\:margin-x-neg-1{margin-left:-.5rem;margin-right:-.5rem}.desktop\:margin-right-neg-1{margin-right:-.5rem}.desktop\:margin-left-neg-1{margin-left:-.5rem}.desktop\:margin-x-neg-105{margin-left:-.75rem;margin-right:-.75rem}.desktop\:margin-right-neg-105{margin-right:-.75rem}.desktop\:margin-left-neg-105{margin-left:-.75rem}.desktop\:margin-x-neg-2{margin-left:-1rem;margin-right:-1rem}.desktop\:margin-right-neg-2{margin-right:-1rem}.desktop\:margin-left-neg-2{margin-left:-1rem}.desktop\:margin-x-neg-205{margin-left:-1.25rem;margin-right:-1.25rem}.desktop\:margin-right-neg-205{margin-right:-1.25rem}.desktop\:margin-left-neg-205{margin-left:-1.25rem}.desktop\:margin-x-neg-3{margin-left:-1.5rem;margin-right:-1.5rem}.desktop\:margin-right-neg-3{margin-right:-1.5rem}.desktop\:margin-left-neg-3{margin-left:-1.5rem}.desktop\:margin-x-4{margin-left:2rem;margin-right:2rem}.desktop\:margin-right-4{margin-right:2rem}.desktop\:margin-left-4{margin-left:2rem}.desktop\:margin-x-5{margin-left:2.5rem;margin-right:2.5rem}.desktop\:margin-right-5{margin-right:2.5rem}.desktop\:margin-left-5{margin-left:2.5rem}.desktop\:margin-x-6{margin-left:3rem;margin-right:3rem}.desktop\:margin-right-6{margin-right:3rem}.desktop\:margin-left-6{margin-left:3rem}.desktop\:margin-x-7{margin-left:3.5rem;margin-right:3.5rem}.desktop\:margin-right-7{margin-right:3.5rem}.desktop\:margin-left-7{margin-left:3.5rem}.desktop\:margin-x-8{margin-left:4rem;margin-right:4rem}.desktop\:margin-right-8{margin-right:4rem}.desktop\:margin-left-8{margin-left:4rem}.desktop\:margin-x-9{margin-left:4.5rem;margin-right:4.5rem}.desktop\:margin-right-9{margin-right:4.5rem}.desktop\:margin-left-9{margin-left:4.5rem}.desktop\:margin-x-10{margin-left:5rem;margin-right:5rem}.desktop\:margin-right-10{margin-right:5rem}.desktop\:margin-left-10{margin-left:5rem}.desktop\:margin-x-15{margin-left:7.5rem;margin-right:7.5rem}.desktop\:margin-right-15{margin-right:7.5rem}.desktop\:margin-left-15{margin-left:7.5rem}.desktop\:margin-x-card{margin-left:10rem;margin-right:10rem}.desktop\:margin-right-card{margin-right:10rem}.desktop\:margin-left-card{margin-left:10rem}.desktop\:margin-x-card-lg{margin-left:15rem;margin-right:15rem}.desktop\:margin-right-card-lg{margin-right:15rem}.desktop\:margin-left-card-lg{margin-left:15rem}.desktop\:margin-x-mobile{margin-left:20rem;margin-right:20rem}.desktop\:margin-right-mobile{margin-right:20rem}.desktop\:margin-left-mobile{margin-left:20rem}.desktop\:margin-x-05em{margin-left:.5em;margin-right:.5em}.desktop\:margin-right-05em{margin-right:.5em}.desktop\:margin-left-05em{margin-left:.5em}.desktop\:margin-x-1em{margin-left:1em;margin-right:1em}.desktop\:margin-right-1em{margin-right:1em}.desktop\:margin-left-1em{margin-left:1em}.desktop\:margin-x-105em{margin-left:1.5em;margin-right:1.5em}.desktop\:margin-right-105em{margin-right:1.5em}.desktop\:margin-left-105em{margin-left:1.5em}.desktop\:margin-x-2em{margin-left:2em;margin-right:2em}.desktop\:margin-right-2em{margin-right:2em}.desktop\:margin-left-2em{margin-left:2em}.desktop\:margin-x-0{margin-left:0;margin-right:0}.desktop\:margin-right-0{margin-right:0}.desktop\:margin-left-0{margin-left:0}.desktop\:margin-x-auto{margin-left:auto;margin-right:auto}.desktop\:margin-right-auto{margin-right:auto}.desktop\:margin-left-auto{margin-left:auto}.desktop\:measure-1{max-width:44ex}.desktop\:measure-2{max-width:60ex}.desktop\:measure-3{max-width:64ex}.desktop\:measure-4{max-width:68ex}.desktop\:measure-5{max-width:72ex}.desktop\:measure-6{max-width:88ex}.desktop\:measure-none{max-width:none}.desktop\:order-first{order:-1}.desktop\:order-last{order:999}.desktop\:order-0,.desktop\:order-initial{order:0}.desktop\:order-1{order:1}.desktop\:order-2{order:2}.desktop\:order-3{order:3}.desktop\:order-4{order:4}.desktop\:order-5{order:5}.desktop\:order-6{order:6}.desktop\:order-7{order:7}.desktop\:order-8{order:8}.desktop\:order-9{order:9}.desktop\:order-10{order:10}.desktop\:order-11{order:11}.desktop\:padding-1px{padding:1px}.desktop\:padding-y-1px{padding-bottom:1px;padding-top:1px}.desktop\:padding-x-1px{padding-left:1px;padding-right:1px}.desktop\:padding-top-1px{padding-top:1px}.desktop\:padding-right-1px{padding-right:1px}.desktop\:padding-bottom-1px{padding-bottom:1px}.desktop\:padding-left-1px{padding-left:1px}.desktop\:padding-2px{padding:2px}.desktop\:padding-y-2px{padding-bottom:2px;padding-top:2px}.desktop\:padding-x-2px{padding-left:2px;padding-right:2px}.desktop\:padding-top-2px{padding-top:2px}.desktop\:padding-right-2px{padding-right:2px}.desktop\:padding-bottom-2px{padding-bottom:2px}.desktop\:padding-left-2px{padding-left:2px}.desktop\:padding-05{padding:.25rem}.desktop\:padding-y-05{padding-bottom:.25rem;padding-top:.25rem}.desktop\:padding-x-05{padding-left:.25rem;padding-right:.25rem}.desktop\:padding-top-05{padding-top:.25rem}.desktop\:padding-right-05{padding-right:.25rem}.desktop\:padding-bottom-05{padding-bottom:.25rem}.desktop\:padding-left-05{padding-left:.25rem}.desktop\:padding-1{padding:.5rem}.desktop\:padding-y-1{padding-bottom:.5rem;padding-top:.5rem}.desktop\:padding-x-1{padding-left:.5rem;padding-right:.5rem}.desktop\:padding-top-1{padding-top:.5rem}.desktop\:padding-right-1{padding-right:.5rem}.desktop\:padding-bottom-1{padding-bottom:.5rem}.desktop\:padding-left-1{padding-left:.5rem}.desktop\:padding-105{padding:.75rem}.desktop\:padding-y-105{padding-bottom:.75rem;padding-top:.75rem}.desktop\:padding-x-105{padding-left:.75rem;padding-right:.75rem}.desktop\:padding-top-105{padding-top:.75rem}.desktop\:padding-right-105{padding-right:.75rem}.desktop\:padding-bottom-105{padding-bottom:.75rem}.desktop\:padding-left-105{padding-left:.75rem}.desktop\:padding-2{padding:1rem}.desktop\:padding-y-2{padding-bottom:1rem;padding-top:1rem}.desktop\:padding-x-2{padding-left:1rem;padding-right:1rem}.desktop\:padding-top-2{padding-top:1rem}.desktop\:padding-right-2{padding-right:1rem}.desktop\:padding-bottom-2{padding-bottom:1rem}.desktop\:padding-left-2{padding-left:1rem}.desktop\:padding-205{padding:1.25rem}.desktop\:padding-y-205{padding-bottom:1.25rem;padding-top:1.25rem}.desktop\:padding-x-205{padding-left:1.25rem;padding-right:1.25rem}.desktop\:padding-top-205{padding-top:1.25rem}.desktop\:padding-right-205{padding-right:1.25rem}.desktop\:padding-bottom-205{padding-bottom:1.25rem}.desktop\:padding-left-205{padding-left:1.25rem}.desktop\:padding-3{padding:1.5rem}.desktop\:padding-y-3{padding-bottom:1.5rem;padding-top:1.5rem}.desktop\:padding-x-3{padding-left:1.5rem;padding-right:1.5rem}.desktop\:padding-top-3{padding-top:1.5rem}.desktop\:padding-right-3{padding-right:1.5rem}.desktop\:padding-bottom-3{padding-bottom:1.5rem}.desktop\:padding-left-3{padding-left:1.5rem}.desktop\:padding-4{padding:2rem}.desktop\:padding-y-4{padding-bottom:2rem;padding-top:2rem}.desktop\:padding-x-4{padding-left:2rem;padding-right:2rem}.desktop\:padding-top-4{padding-top:2rem}.desktop\:padding-right-4{padding-right:2rem}.desktop\:padding-bottom-4{padding-bottom:2rem}.desktop\:padding-left-4{padding-left:2rem}.desktop\:padding-5{padding:2.5rem}.desktop\:padding-y-5{padding-bottom:2.5rem;padding-top:2.5rem}.desktop\:padding-x-5{padding-left:2.5rem;padding-right:2.5rem}.desktop\:padding-top-5{padding-top:2.5rem}.desktop\:padding-right-5{padding-right:2.5rem}.desktop\:padding-bottom-5{padding-bottom:2.5rem}.desktop\:padding-left-5{padding-left:2.5rem}.desktop\:padding-6{padding:3rem}.desktop\:padding-y-6{padding-bottom:3rem;padding-top:3rem}.desktop\:padding-x-6{padding-left:3rem;padding-right:3rem}.desktop\:padding-top-6{padding-top:3rem}.desktop\:padding-right-6{padding-right:3rem}.desktop\:padding-bottom-6{padding-bottom:3rem}.desktop\:padding-left-6{padding-left:3rem}.desktop\:padding-7{padding:3.5rem}.desktop\:padding-y-7{padding-bottom:3.5rem;padding-top:3.5rem}.desktop\:padding-x-7{padding-left:3.5rem;padding-right:3.5rem}.desktop\:padding-top-7{padding-top:3.5rem}.desktop\:padding-right-7{padding-right:3.5rem}.desktop\:padding-bottom-7{padding-bottom:3.5rem}.desktop\:padding-left-7{padding-left:3.5rem}.desktop\:padding-8{padding:4rem}.desktop\:padding-y-8{padding-bottom:4rem;padding-top:4rem}.desktop\:padding-x-8{padding-left:4rem;padding-right:4rem}.desktop\:padding-top-8{padding-top:4rem}.desktop\:padding-right-8{padding-right:4rem}.desktop\:padding-bottom-8{padding-bottom:4rem}.desktop\:padding-left-8{padding-left:4rem}.desktop\:padding-9{padding:4.5rem}.desktop\:padding-y-9{padding-bottom:4.5rem;padding-top:4.5rem}.desktop\:padding-x-9{padding-left:4.5rem;padding-right:4.5rem}.desktop\:padding-top-9{padding-top:4.5rem}.desktop\:padding-right-9{padding-right:4.5rem}.desktop\:padding-bottom-9{padding-bottom:4.5rem}.desktop\:padding-left-9{padding-left:4.5rem}.desktop\:padding-10{padding:5rem}.desktop\:padding-y-10{padding-bottom:5rem;padding-top:5rem}.desktop\:padding-x-10{padding-left:5rem;padding-right:5rem}.desktop\:padding-top-10{padding-top:5rem}.desktop\:padding-right-10{padding-right:5rem}.desktop\:padding-bottom-10{padding-bottom:5rem}.desktop\:padding-left-10{padding-left:5rem}.desktop\:padding-15{padding:7.5rem}.desktop\:padding-y-15{padding-bottom:7.5rem;padding-top:7.5rem}.desktop\:padding-x-15{padding-left:7.5rem;padding-right:7.5rem}.desktop\:padding-top-15{padding-top:7.5rem}.desktop\:padding-right-15{padding-right:7.5rem}.desktop\:padding-bottom-15{padding-bottom:7.5rem}.desktop\:padding-left-15{padding-left:7.5rem}.desktop\:padding-0{padding:0}.desktop\:padding-y-0{padding-bottom:0;padding-top:0}.desktop\:padding-x-0{padding-left:0;padding-right:0}.desktop\:padding-top-0{padding-top:0}.desktop\:padding-right-0{padding-right:0}.desktop\:padding-bottom-0{padding-bottom:0}.desktop\:padding-left-0{padding-left:0}.desktop\:width-1px{width:1px}.desktop\:width-2px{width:2px}.desktop\:width-05{width:.25rem}.desktop\:width-1{width:.5rem}.desktop\:width-105{width:.75rem}.desktop\:width-2{width:1rem}.desktop\:width-205{width:1.25rem}.desktop\:width-3{width:1.5rem}.desktop\:width-4{width:2rem}.desktop\:width-5{width:2.5rem}.desktop\:width-6{width:3rem}.desktop\:width-7{width:3.5rem}.desktop\:width-8{width:4rem}.desktop\:width-9{width:4.5rem}.desktop\:width-10{width:5rem}.desktop\:width-15{width:7.5rem}.desktop\:width-card{width:10rem}.desktop\:width-card-lg{width:15rem}.desktop\:width-mobile{width:20rem}.desktop\:width-mobile-lg{width:30rem}.desktop\:width-tablet{width:40rem}.desktop\:width-tablet-lg{width:55rem}.desktop\:width-desktop{width:64rem}.desktop\:width-desktop-lg{width:75rem}.desktop\:width-widescreen{width:87.5rem}.desktop\:width-0{width:0}.desktop\:width-full{width:100%}.desktop\:width-auto{width:auto}}.j40-two-column{overflow:hidden;padding:0}@media(min-width:40em){.j40-two-column{-webkit-column-count:2;column-count:2;-webkit-column-gap:1em;column-gap:1em}}@media(max-width:40em){.j40-two-column{-webkit-column-count:1;column-count:1;-webkit-column-gap:0;column-gap:0}}.j40-two-column>*{display:inline-flex;padding-bottom:1.2em;padding-left:1em;width:90%}.j40-two-column-icons-spacing{max-width:revert;padding-right:1em;width:2.3em}.j40-two-column-confine{display:inline-flex;max-width:-webkit-fit-content;max-width:-moz-fit-content;max-width:fit-content}@media (min-width:30em){.j40-grid-container{padding-right:0}}.j40-header,.j40-header>li>a,.j40-primary-nav{color:#112f4e!important;z-index:5}.j40-header .usa-nav-container,.j40-header>li>a .usa-nav-container,.j40-primary-nav .usa-nav-container{max-width:160ex}.j40-header>li>a span,.j40-header span,.j40-primary-nav span{color:#112f4e}.j40-header .usa-logo__text,.j40-header>li>a .usa-logo__text,.j40-primary-nav .usa-logo__text{font-family:"serif";font-size:1.8em}.j40-header .usa-nav__primary,.j40-header>li>a .usa-nav__primary,.j40-primary-nav .usa-nav__primary{font-size:1.2em}.j40-header .byline,.j40-header>li>a .byline,.j40-primary-nav .byline{font-size:.3em;font-weight:400}.j40-aside{background-color:#eff6fb;padding-left:1em;padding-right:1em}.j40-aside h2{font-size:2em;font-weight:100}.j40-aside h3{font-size:1.4em;font-weight:100}.j40-aside .j40-aside-icon{display:flex;margin-bottom:12px;margin-top:3px}.j40-footer .usa-footer__contact-info{justify-content:center;line-height:1.5;text-align:center}.j40-footer .j40-footer-logo{display:inline-block;text-align:center}@media (min-width:30em){.j40-main-content{margin-bottom:2rem;margin-top:2.5rem}}.j40-main-content h1{font-size:2.13rem}.j40-main-content h2{font-size:1.46rem}.j40-usa-process-list__item--complete{border-left-color:#005ea2!important}.j40-usa-process-list__item--complete:before{background-color:#00a91c;color:#fff}.usa-prose h1,.usa-prose h2,.usa-prose h3,.usa-prose h4{font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif}.usa-prose div,.usa-prose p{max-width:80ex}.j40-sitealert{min-height:4em;padding-bottom:7px;padding-top:7px}.j40-sitealert p{margin:0}.j40-sitealert *+.usa-alert{margin:0!important}.mapboxgl-popup-close-button{font-size:3em;margin-right:12px;margin-top:15px}.mapboxgl-popup-content{border-radius:8px!important;box-shadow:0 2px 4px 0 rgba(0,0,0,.5)!important;pointer-events:all!important;width:auto}.mapboxgl-ctrl-group:not(:empty){box-shadow:none}@media(-ms-high-contrast:active){.mapboxgl-ctrl-group:not(:empty){box-shadow:none}}.mapboxgl-ctrl-group{border-radius:0}.mapboxgl-ctrl button+button{border-top:1px}.mapboxgl-ctrl button{background-color:#fff;border:2px solid #000;border-radius:0;box-sizing:border-box;font-size:1.5em;height:1.66em;width:1.66em}.mapboxgl-ctrl button .mapboxgl-ctrl-icon{height:1em}.mapboxgl-ctrl button.mapboxgl-ctrl-zoom-in .mapboxgl-ctrl-icon{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGQ9Ik0xOSAxM2gtNnY2aC0ydi02SDV2LTJoNlY1aDJ2Nmg2djJ6Ii8+PC9zdmc+)}.mapboxgl-ctrl button.mapboxgl-ctrl-zoom-out .mapboxgl-ctrl-icon{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGQ9Ik0xOSAxM0g1di0yaDE0djJ6Ii8+PC9zdmc+)}.territoryFocusControl-module--territoryFocusButton--3wWoV{background-color:#fff;border-color:#000;border-style:solid;border-width:1px 2px;height:2.5em;width:2.5em}.territoryFocusControl-module--territoryFocusButton--3wWoV:not(:disabled):hover{background-color:#f4f4f4}.territoryFocusControl-module--territoryFocusContainer--3N0XM{display:flex;flex-direction:column;font-size:16px;left:20px;line-height:1.75em;position:absolute;text-align:center;top:300px;top:150px;z-index:10}.territoryFocusControl-module--territoryFocusButton--3wWoV:first-child{border-top-width:2px}.territoryFocusControl-module--territoryFocusButton--3wWoV:last-child{border-bottom-width:2px}.mapIntroduction-module--mapIntroContainer--1K8du{padding:20px}.mapIntroduction-module--mapIntroHeader--32LBs{font-size:xx-large;line-height:1.9rem;padding-left:.3rem;padding-top:.8rem}.mapIntroduction-module--mapIntroText--Tib8L{display:flex;margin-top:2.4rem}.mapIntroduction-module--mapIntroLightbulb--3LBx0{align-self:flex-start;flex:1 0 10%}.mapIntroduction-module--didYouKnowBox--3ztEy{font-size:large;padding-left:.4rem;padding-top:.2rem}.mapIntroduction-module--didYouKnow--3_v_i{font-weight:600}.mapIntroduction-module--didYouKnowText--3sgHs{line-height:1.5rem;padding-top:.3rem;width:95%}.areaDetail-module--areaDetailContainer--15ae9{display:flex;flex-direction:column}.areaDetail-module--topRow--GKfYj{display:flex}.areaDetail-module--categorization--3HQ3g,.areaDetail-module--cumulativeIndexScore--6IjJ9{align-items:center;border-bottom:2px solid #f2f2f2;display:flex;flex:1 0 50%;flex-direction:column;height:7.7rem;padding-top:2rem}.areaDetail-module--censusLabel--2jDJl,.areaDetail-module--topRowTitle--3pDta{color:#171716;font-size:small;font-weight:600}.areaDetail-module--topRowSubTitle--N8_GP{color:#171716;font-size:small}.areaDetail-module--score--3i8w1{font-size:xx-large;font-weight:bolder}.areaDetail-module--scoreSuperscript--wmEIg{font-size:large;padding-bottom:1rem}.areaDetail-module--categorization--3HQ3g{border-left:2px solid #f2f2f2}.areaDetail-module--priority--PLMch{display:flex}.areaDetail-module--prioritized--1fVrQ{background:#1a4480}.areaDetail-module--prioritized--1fVrQ,.areaDetail-module--threshold--34bIL{align-self:center;border:1px solid #00bde3;border-radius:100%;height:.6rem;margin-right:.5rem;margin-top:.8rem;opacity:.6;width:.6rem}.areaDetail-module--threshold--34bIL{background:#d7dde7}.areaDetail-module--nonPrioritized--1dEfk{align-self:center;border:1px solid #00bde3;border-radius:100%;height:.6rem;margin-right:.5rem;margin-top:.8rem;opacity:.6;width:.6rem}.areaDetail-module--prioritization--282dL{font-size:large;font-weight:700;padding-top:.8rem}.areaDetail-module--censusRow--1b9rm{border-bottom:2px solid #f2f2f2;display:flex;flex-direction:column;list-style:none;margin:0;padding:1rem}.areaDetail-module--censusText--4hgvr,.areaDetail-module--indicatorDescription--2GABj{font-size:small}.areaDetail-module--divider--3pt_a{background-color:#edeef0;border-bottom:2px solid #f2f2f2;color:#171716;display:flex;font-size:small;font-weight:600;justify-content:space-between;padding:.3rem .5rem .3rem 1rem}.areaDetail-module--indicatorBox--wTEld{border-bottom:2px solid #f2f2f2;display:flex;padding:1.5rem 1rem}@media screen and (max-width:400px){.areaDetail-module--indicatorBox--wTEld{justify-content:space-between;padding-bottom:.5rem;padding-top:.5rem}}.areaDetail-module--indicatorBox--wTEld:last-child{border-bottom:none}.areaDetail-module--indicatorTitle--1tXMA{font-size:large;font-weight:bolder}.areaDetail-module--indicatorValue--3pmOI{align-self:center;flex:1 0 37%;font-size:large;padding-left:2.4rem}@media screen and (max-width:400px){.areaDetail-module--indicatorValue--3pmOI{align-self:inherit;flex:1 0 40%;padding-left:3rem;padding-top:1rem}}.maplibregl-map{-webkit-tap-highlight-color:rgba(0,0,0,0);font:12px/20px Helvetica Neue,Arial,Helvetica,sans-serif;overflow:hidden;position:relative}.maplibregl-canvas{left:0;position:absolute;top:0}.maplibregl-map:-webkit-full-screen{height:100%;width:100%}.maplibregl-canvas-container.maplibregl-interactive,.maplibregl-ctrl-group button.maplibregl-ctrl-compass{cursor:grab;-webkit-user-select:none;-ms-user-select:none;user-select:none}.maplibregl-canvas-container.maplibregl-interactive.maplibregl-track-pointer{cursor:pointer}.maplibregl-canvas-container.maplibregl-interactive:active,.maplibregl-ctrl-group button.maplibregl-ctrl-compass:active{cursor:grabbing}.maplibregl-canvas-container.maplibregl-touch-zoom-rotate,.maplibregl-canvas-container.maplibregl-touch-zoom-rotate .maplibregl-canvas{touch-action:pan-x pan-y}.maplibregl-canvas-container.maplibregl-touch-drag-pan,.maplibregl-canvas-container.maplibregl-touch-drag-pan .maplibregl-canvas{touch-action:pinch-zoom}.maplibregl-canvas-container.maplibregl-touch-zoom-rotate.maplibregl-touch-drag-pan,.maplibregl-canvas-container.maplibregl-touch-zoom-rotate.maplibregl-touch-drag-pan .maplibregl-canvas{touch-action:none}.maplibregl-ctrl-bottom-left,.maplibregl-ctrl-bottom-right,.maplibregl-ctrl-top-left,.maplibregl-ctrl-top-right{pointer-events:none;position:absolute;z-index:2}.maplibregl-ctrl-top-left{left:0;top:0}.maplibregl-ctrl-top-right{right:0;top:0}.maplibregl-ctrl-bottom-left{bottom:0;left:0}.maplibregl-ctrl-bottom-right{bottom:0;right:0}.maplibregl-ctrl{clear:both;pointer-events:auto;-webkit-transform:translate(0);transform:translate(0)}.maplibregl-ctrl-top-left .maplibregl-ctrl{float:left;margin:10px 0 0 10px}.maplibregl-ctrl-top-right .maplibregl-ctrl{float:right;margin:10px 10px 0 0}.maplibregl-ctrl-bottom-left .maplibregl-ctrl{float:left;margin:0 0 10px 10px}.maplibregl-ctrl-bottom-right .maplibregl-ctrl{float:right;margin:0 10px 10px 0}.maplibregl-ctrl-group{background:#fff;border-radius:4px}.maplibregl-ctrl-group:not(:empty){box-shadow:0 0 0 2px rgba(0,0,0,.1)}@media (-ms-high-contrast:active){.maplibregl-ctrl-group:not(:empty){box-shadow:0 0 0 2px ButtonText}}.maplibregl-ctrl-group button{background-color:transparent;border:0;box-sizing:border-box;cursor:pointer;display:block;height:29px;outline:none;padding:0;width:29px}.maplibregl-ctrl-group button+button{border-top:1px solid #ddd}.maplibregl-ctrl button .maplibregl-ctrl-icon{background-position:50%;background-repeat:no-repeat;display:block;height:100%;width:100%}@media (-ms-high-contrast:active){.maplibregl-ctrl-icon{background-color:transparent}.maplibregl-ctrl-group button+button{border-top:1px solid ButtonText}}.maplibregl-ctrl button::-moz-focus-inner{border:0;padding:0}.maplibregl-ctrl-attrib-button:focus,.maplibregl-ctrl-group button:focus{box-shadow:0 0 2px 2px #0096ff}.maplibregl-ctrl button:disabled{cursor:not-allowed}.maplibregl-ctrl button:disabled .maplibregl-ctrl-icon{opacity:.25}.maplibregl-ctrl button:not(:disabled):hover{background-color:rgba(0,0,0,.05)}.maplibregl-ctrl-group button:focus:focus-visible{box-shadow:0 0 2px 2px #0096ff}.maplibregl-ctrl-group button:focus:not(:focus-visible){box-shadow:none}.maplibregl-ctrl-group button:focus:first-child{border-radius:4px 4px 0 0}.maplibregl-ctrl-group button:focus:last-child{border-radius:0 0 4px 4px}.maplibregl-ctrl-group button:focus:only-child{border-radius:inherit}.maplibregl-ctrl button.maplibregl-ctrl-zoom-out .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23333' viewBox='0 0 29 29'%3E%3Cpath d='M10 13c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h9c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-9z'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-zoom-in .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23333' viewBox='0 0 29 29'%3E%3Cpath d='M14.5 8.5c-.75 0-1.5.75-1.5 1.5v3h-3c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h3v3c0 .75.75 1.5 1.5 1.5S16 19.75 16 19v-3h3c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-3v-3c0-.75-.75-1.5-1.5-1.5z'/%3E%3C/svg%3E")}@media (-ms-high-contrast:active){.maplibregl-ctrl button.maplibregl-ctrl-zoom-out .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 29 29'%3E%3Cpath d='M10 13c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h9c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-9z'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-zoom-in .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 29 29'%3E%3Cpath d='M14.5 8.5c-.75 0-1.5.75-1.5 1.5v3h-3c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h3v3c0 .75.75 1.5 1.5 1.5S16 19.75 16 19v-3h3c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-3v-3c0-.75-.75-1.5-1.5-1.5z'/%3E%3C/svg%3E")}}@media (-ms-high-contrast:black-on-white){.maplibregl-ctrl button.maplibregl-ctrl-zoom-out .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 29 29'%3E%3Cpath d='M10 13c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h9c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-9z'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-zoom-in .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 29 29'%3E%3Cpath d='M14.5 8.5c-.75 0-1.5.75-1.5 1.5v3h-3c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h3v3c0 .75.75 1.5 1.5 1.5S16 19.75 16 19v-3h3c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-3v-3c0-.75-.75-1.5-1.5-1.5z'/%3E%3C/svg%3E")}}.maplibregl-ctrl button.maplibregl-ctrl-fullscreen .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23333' viewBox='0 0 29 29'%3E%3Cpath d='M24 16v5.5c0 1.75-.75 2.5-2.5 2.5H16v-1l3-1.5-4-5.5 1-1 5.5 4 1.5-3h1zM6 16l1.5 3 5.5-4 1 1-4 5.5 3 1.5v1H7.5C5.75 24 5 23.25 5 21.5V16h1zm7-11v1l-3 1.5 4 5.5-1 1-5.5-4L6 13H5V7.5C5 5.75 5.75 5 7.5 5H13zm11 2.5c0-1.75-.75-2.5-2.5-2.5H16v1l3 1.5-4 5.5 1 1 5.5-4 1.5 3h1V7.5z'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-shrink .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 29 29'%3E%3Cpath d='M18.5 16c-1.75 0-2.5.75-2.5 2.5V24h1l1.5-3 5.5 4 1-1-4-5.5 3-1.5v-1h-5.5zM13 18.5c0-1.75-.75-2.5-2.5-2.5H5v1l3 1.5L4 24l1 1 5.5-4 1.5 3h1v-5.5zm3-8c0 1.75.75 2.5 2.5 2.5H24v-1l-3-1.5L25 5l-1-1-5.5 4L17 5h-1v5.5zM10.5 13c1.75 0 2.5-.75 2.5-2.5V5h-1l-1.5 3L5 4 4 5l4 5.5L5 12v1h5.5z'/%3E%3C/svg%3E")}@media (-ms-high-contrast:active){.maplibregl-ctrl button.maplibregl-ctrl-fullscreen .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 29 29'%3E%3Cpath d='M24 16v5.5c0 1.75-.75 2.5-2.5 2.5H16v-1l3-1.5-4-5.5 1-1 5.5 4 1.5-3h1zM6 16l1.5 3 5.5-4 1 1-4 5.5 3 1.5v1H7.5C5.75 24 5 23.25 5 21.5V16h1zm7-11v1l-3 1.5 4 5.5-1 1-5.5-4L6 13H5V7.5C5 5.75 5.75 5 7.5 5H13zm11 2.5c0-1.75-.75-2.5-2.5-2.5H16v1l3 1.5-4 5.5 1 1 5.5-4 1.5 3h1V7.5z'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-shrink .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 29 29'%3E%3Cpath d='M18.5 16c-1.75 0-2.5.75-2.5 2.5V24h1l1.5-3 5.5 4 1-1-4-5.5 3-1.5v-1h-5.5zM13 18.5c0-1.75-.75-2.5-2.5-2.5H5v1l3 1.5L4 24l1 1 5.5-4 1.5 3h1v-5.5zm3-8c0 1.75.75 2.5 2.5 2.5H24v-1l-3-1.5L25 5l-1-1-5.5 4L17 5h-1v5.5zM10.5 13c1.75 0 2.5-.75 2.5-2.5V5h-1l-1.5 3L5 4 4 5l4 5.5L5 12v1h5.5z'/%3E%3C/svg%3E")}}@media (-ms-high-contrast:black-on-white){.maplibregl-ctrl button.maplibregl-ctrl-fullscreen .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 29 29'%3E%3Cpath d='M24 16v5.5c0 1.75-.75 2.5-2.5 2.5H16v-1l3-1.5-4-5.5 1-1 5.5 4 1.5-3h1zM6 16l1.5 3 5.5-4 1 1-4 5.5 3 1.5v1H7.5C5.75 24 5 23.25 5 21.5V16h1zm7-11v1l-3 1.5 4 5.5-1 1-5.5-4L6 13H5V7.5C5 5.75 5.75 5 7.5 5H13zm11 2.5c0-1.75-.75-2.5-2.5-2.5H16v1l3 1.5-4 5.5 1 1 5.5-4 1.5 3h1V7.5z'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-shrink .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 29 29'%3E%3Cpath d='M18.5 16c-1.75 0-2.5.75-2.5 2.5V24h1l1.5-3 5.5 4 1-1-4-5.5 3-1.5v-1h-5.5zM13 18.5c0-1.75-.75-2.5-2.5-2.5H5v1l3 1.5L4 24l1 1 5.5-4 1.5 3h1v-5.5zm3-8c0 1.75.75 2.5 2.5 2.5H24v-1l-3-1.5L25 5l-1-1-5.5 4L17 5h-1v5.5zM10.5 13c1.75 0 2.5-.75 2.5-2.5V5h-1l-1.5 3L5 4 4 5l4 5.5L5 12v1h5.5z'/%3E%3C/svg%3E")}}.maplibregl-ctrl button.maplibregl-ctrl-compass .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23333' viewBox='0 0 29 29'%3E%3Cpath d='m10.5 14 4-8 4 8h-8z'/%3E%3Cpath fill='%23ccc' d='m10.5 16 4 8 4-8h-8z'/%3E%3C/svg%3E")}@media (-ms-high-contrast:active){.maplibregl-ctrl button.maplibregl-ctrl-compass .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 29 29'%3E%3Cpath d='m10.5 14 4-8 4 8h-8z'/%3E%3Cpath fill='%23999' d='m10.5 16 4 8 4-8h-8z'/%3E%3C/svg%3E")}}@media (-ms-high-contrast:black-on-white){.maplibregl-ctrl button.maplibregl-ctrl-compass .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 29 29'%3E%3Cpath d='m10.5 14 4-8 4 8h-8z'/%3E%3Cpath fill='%23ccc' d='m10.5 16 4 8 4-8h-8z'/%3E%3C/svg%3E")}}.maplibregl-ctrl button.maplibregl-ctrl-geolocate .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23333' viewBox='0 0 20 20'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle cx='10' cy='10' r='2'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate:disabled .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23aaa' viewBox='0 0 20 20'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle cx='10' cy='10' r='2'/%3E%3Cpath fill='red' d='m14 5 1 1-9 9-1-1 9-9z'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate.maplibregl-ctrl-geolocate-active .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%2333b5e5' viewBox='0 0 20 20'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle cx='10' cy='10' r='2'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate.maplibregl-ctrl-geolocate-active-error .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23e58978' viewBox='0 0 20 20'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle cx='10' cy='10' r='2'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate.maplibregl-ctrl-geolocate-background .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%2333b5e5' viewBox='0 0 20 20'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate.maplibregl-ctrl-geolocate-background-error .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23e54e33' viewBox='0 0 20 20'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate.maplibregl-ctrl-geolocate-waiting .maplibregl-ctrl-icon{-webkit-animation:maplibregl-spin 2s linear infinite;animation:maplibregl-spin 2s linear infinite}@media (-ms-high-contrast:active){.maplibregl-ctrl button.maplibregl-ctrl-geolocate .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 20 20'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle cx='10' cy='10' r='2'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate:disabled .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23999' viewBox='0 0 20 20'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle cx='10' cy='10' r='2'/%3E%3Cpath fill='red' d='m14 5 1 1-9 9-1-1 9-9z'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate.maplibregl-ctrl-geolocate-active .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%2333b5e5' viewBox='0 0 20 20'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle cx='10' cy='10' r='2'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate.maplibregl-ctrl-geolocate-active-error .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23e58978' viewBox='0 0 20 20'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle cx='10' cy='10' r='2'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate.maplibregl-ctrl-geolocate-background .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%2333b5e5' viewBox='0 0 20 20'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate.maplibregl-ctrl-geolocate-background-error .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23e54e33' viewBox='0 0 20 20'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3C/svg%3E")}}@media (-ms-high-contrast:black-on-white){.maplibregl-ctrl button.maplibregl-ctrl-geolocate .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle cx='10' cy='10' r='2'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate:disabled .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23666' viewBox='0 0 20 20'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle cx='10' cy='10' r='2'/%3E%3Cpath fill='red' d='m14 5 1 1-9 9-1-1 9-9z'/%3E%3C/svg%3E")}}@-webkit-keyframes maplibregl-spin{0%{-webkit-transform:rotate(0deg)}to{-webkit-transform:rotate(1turn)}}@keyframes maplibregl-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}a.maplibregl-ctrl-logo{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 88 23'%3E%3Cpath fill='%23000' fill-opacity='.4' fill-rule='evenodd' d='M17.408 16.796h-1.827l2.501-12.095h.198l3.324 6.533.988 2.19.988-2.19 3.258-6.533h.181l2.6 12.095h-1.81l-1.218-5.644-.362-1.71-.658 1.71-2.929 5.644h-.098l-2.914-5.644-.757-1.71-.345 1.71zm1.958-3.42-.726 3.663a1.255 1.255 0 0 1-1.232 1.011h-1.827a1.255 1.255 0 0 1-1.229-1.509l2.501-12.095a1.255 1.255 0 0 1 1.23-1.001h.197a1.255 1.255 0 0 1 1.12.685l3.19 6.273 3.125-6.263a1.255 1.255 0 0 1 1.123-.695h.181a1.255 1.255 0 0 1 1.227.991l1.443 6.71a5.11 5.11 0 0 1 .314-.787l.009-.016a4.623 4.623 0 0 1 1.777-1.887c.782-.46 1.668-.667 2.611-.667a4.548 4.548 0 0 1 1.7.32l.306.134c.21-.16.474-.256.759-.256h1.694a1.255 1.255 0 0 1 1.212.925 1.255 1.255 0 0 1 1.212-.925h1.711c.284 0 .545.094.755.252.613-.3 1.312-.45 2.075-.45 1.356 0 2.557.445 3.482 1.4.314.319.566.676.763 1.064V4.701a1.255 1.255 0 0 1 1.255-1.255h1.86A1.255 1.255 0 0 1 54.44 4.7v9.194h2.217c.19 0 .37.043.532.118v-4.77c0-.356.147-.678.385-.906a2.416 2.416 0 0 1-.682-1.71c0-.665.267-1.253.735-1.7a2.448 2.448 0 0 1 1.722-.674 2.43 2.43 0 0 1 1.705.675c.211.2.381.43.504.683V4.7a1.255 1.255 0 0 1 1.255-1.255h1.744A1.255 1.255 0 0 1 65.812 4.7v3.335a4.76 4.76 0 0 1 1.526-.246c.938 0 1.817.214 2.59.69a4.47 4.47 0 0 1 1.67 1.743v-.98a1.255 1.255 0 0 1 1.256-1.256h1.777c.233 0 .451.064.639.174a3.407 3.407 0 0 1 1.567-.372c.346 0 .861.02 1.285.232a1.255 1.255 0 0 1 .689 1.004 4.73 4.73 0 0 1 .853-.588c.795-.44 1.675-.647 2.61-.647 1.385 0 2.65.39 3.525 1.396.836.938 1.168 2.173 1.168 3.528 0 .343-.02.694-.056 1.051a1.255 1.255 0 0 1-.947 1.09l.408.952a1.255 1.255 0 0 1-.477 1.552c-.418.268-.92.463-1.458.612-.613.171-1.304.244-2.049.244-1.06 0-2.043-.207-2.886-.698l-.015-.008c-.798-.48-1.419-1.135-1.818-1.963l-.004-.008a5.815 5.815 0 0 1-.548-2.512c0-.286.017-.567.053-.843a1.255 1.255 0 0 1-.333-.086l-.166-.004c-.223 0-.426.062-.643.228-.03.024-.142.139-.142.59v3.883a1.255 1.255 0 0 1-1.256 1.256h-1.777a1.255 1.255 0 0 1-1.256-1.256V15.69l-.032.057a4.778 4.778 0 0 1-1.86 1.833 5.04 5.04 0 0 1-2.484.634 4.47 4.47 0 0 1-1.935-.424 1.252 1.252 0 0 1-.764.258h-1.71a1.255 1.255 0 0 1-1.256-1.255V7.687a2.402 2.402 0 0 1-.428.625c.253.23.412.561.412.93v7.553a1.255 1.255 0 0 1-1.256 1.255h-1.843a1.25 1.25 0 0 1-.894-.373c-.228.23-.544.373-.894.373H51.32a1.255 1.255 0 0 1-1.256-1.255v-1.251l-.061.117a4.703 4.703 0 0 1-1.782 1.884 4.767 4.767 0 0 1-2.485.67 5.6 5.6 0 0 1-1.485-.188l.009 2.764a1.255 1.255 0 0 1-1.255 1.259h-1.729a1.255 1.255 0 0 1-1.255-1.255v-3.537a1.255 1.255 0 0 1-1.167.793h-1.679a1.25 1.25 0 0 1-.77-.263 4.47 4.47 0 0 1-1.945.429c-.885 0-1.724-.21-2.495-.632l-.017-.01a4.983 4.983 0 0 1-1.081-.836 1.255 1.255 0 0 1-1.254 1.312h-1.81a1.255 1.255 0 0 1-1.228-.99l-.782-3.625-2.044 3.939a1.255 1.255 0 0 1-1.115.676h-.098a1.255 1.255 0 0 1-1.116-.68l-2.061-3.994zM35.92 16.63l.207-.114.223-.15c.329-.237.574-.499.735-.785l.061-.118.033 1.332h1.678V9.242h-1.694l-.033 1.267c-.088-.22-.264-.438-.526-.658l-.032-.028a3.16 3.16 0 0 0-.668-.428l-.27-.12a3.293 3.293 0 0 0-1.235-.23c-.757 0-1.415.163-1.974.493a3.36 3.36 0 0 0-1.3 1.382c-.297.593-.444 1.284-.444 2.074 0 .8.17 1.503.51 2.107a3.795 3.795 0 0 0 1.382 1.381 3.883 3.883 0 0 0 1.893.477c.53 0 1.015-.11 1.455-.33zm-2.789-5.38c-.384.45-.575 1.038-.575 1.762 0 .735.186 1.332.559 1.794.384.45.933.675 1.645.675a2.25 2.25 0 0 0 .934-.19 2.17 2.17 0 0 0 .468-.29l.178-.161a2.163 2.163 0 0 0 .397-.561c.163-.333.244-.717.244-1.15v-.115c0-.472-.098-.894-.296-1.267l-.043-.077a2.211 2.211 0 0 0-.633-.709l-.13-.086-.047-.028a2.099 2.099 0 0 0-1.073-.285c-.702 0-1.244.231-1.629.692zm2.316 2.706c.163-.17.28-.407.28-.83v-.114c0-.292-.06-.508-.15-.68a.958.958 0 0 0-.353-.389.851.851 0 0 0-.464-.127c-.4 0-.56.114-.664.239l-.01.012c-.148.174-.275.45-.275.945 0 .506.122.801.27.99.097.11.266.224.68.224.303 0 .504-.09.687-.269zm7.545 1.705a2.626 2.626 0 0 0 .331.423c.213.22.464.402.755.548l.173.074c.433.17.93.255 1.49.255.68 0 1.295-.165 1.844-.493a3.447 3.447 0 0 0 1.316-1.4c.329-.603.493-1.299.493-2.089 0-1.273-.33-2.243-.988-2.913-.658-.68-1.52-1.02-2.584-1.02-.598 0-1.124.115-1.575.347a2.807 2.807 0 0 0-.415.262l-.199.166a3.35 3.35 0 0 0-.64.82V9.242h-1.712v11.553h1.729l-.017-5.134zm.53-1.138c.137.193.297.36.48.5l.155.11.053.034c.34.197.713.297 1.119.297.714 0 1.262-.225 1.645-.675.385-.46.576-1.048.576-1.762 0-.746-.192-1.338-.576-1.777-.372-.45-.92-.675-1.645-.675-.29 0-.569.053-.835.16a2.366 2.366 0 0 0-.284.136 1.99 1.99 0 0 0-.363.254 2.237 2.237 0 0 0-.46.569l-.082.162a2.56 2.56 0 0 0-.213 1.072v.115c0 .471.098.894.296 1.267l.135.211zm.964-.818a1.11 1.11 0 0 0 .367.385.937.937 0 0 0 .476.118c.423 0 .59-.117.687-.23.159-.194.28-.478.28-.95 0-.53-.133-.8-.266-.952l-.021-.025c-.078-.094-.231-.221-.68-.221a.995.995 0 0 0-.503.135l-.012.007a.859.859 0 0 0-.335.343c-.073.133-.132.324-.132.614v.115a1.43 1.43 0 0 0 .14.66zm15.7-6.222c.232-.23.346-.516.346-.856a1.053 1.053 0 0 0-.345-.79 1.175 1.175 0 0 0-.84-.329c-.34 0-.625.11-.855.33a1.053 1.053 0 0 0-.346.79c0 .34.115.625.346.855.23.23.516.346.856.346.34 0 .62-.115.839-.346zm4.337 9.314.033-1.332c.128.269.324.518.59.747l.098.081a3.727 3.727 0 0 0 .316.224l.223.122a3.21 3.21 0 0 0 1.44.322 3.785 3.785 0 0 0 1.875-.477 3.52 3.52 0 0 0 1.382-1.366c.352-.593.526-1.29.526-2.09 0-.79-.147-1.48-.444-2.073a3.235 3.235 0 0 0-1.283-1.399c-.549-.34-1.195-.51-1.942-.51a3.476 3.476 0 0 0-1.527.344l-.086.043-.165.09a3.412 3.412 0 0 0-.33.214c-.288.21-.507.446-.656.707a1.893 1.893 0 0 0-.099.198l.082-1.283V4.701h-1.744v12.095zm.473-2.509a2.482 2.482 0 0 0 .566.7c.078.065.159.125.245.18l.144.08a2.105 2.105 0 0 0 .975.232c.713 0 1.262-.225 1.645-.675.384-.46.576-1.053.576-1.778 0-.734-.192-1.327-.576-1.777-.373-.46-.921-.692-1.645-.692a2.18 2.18 0 0 0-1.015.235c-.147.075-.285.17-.415.282l-.15.142a2.086 2.086 0 0 0-.42.594c-.149.32-.223.685-.223 1.1v.115c0 .47.097.89.293 1.26zm2.616-.293c.157-.191.28-.479.28-.967 0-.51-.13-.79-.276-.961l-.021-.026c-.082-.1-.232-.225-.67-.225a.868.868 0 0 0-.681.279l-.012.011c-.154.155-.274.38-.274.807v.115c0 .285.057.499.144.669a1.13 1.13 0 0 0 .367.405c.137.082.28.123.455.123.423 0 .59-.118.686-.23zm8.266-3.013c.23-.087.472-.134.724-.14l.069-.002c.329 0 .542.033.642.099l.247-1.794c-.13-.066-.37-.099-.717-.099a2.3 2.3 0 0 0-.545.063 2.086 2.086 0 0 0-.411.148 2.18 2.18 0 0 0-.4.249 2.482 2.482 0 0 0-.485.499 2.659 2.659 0 0 0-.32.581l-.05.137v-1.48h-1.778v7.553h1.777v-3.884c0-.364.053-.678.159-.943a1.49 1.49 0 0 1 .466-.636 2.52 2.52 0 0 1 .399-.253 2.19 2.19 0 0 1 .224-.099zm9.784 2.656.05-.922c0-1.162-.285-2.062-.856-2.698-.559-.647-1.42-.97-2.584-.97-.746 0-1.415.163-2.007.493a3.462 3.462 0 0 0-1.4 1.382c-.329.604-.493 1.306-.493 2.106 0 .714.143 1.371.428 1.975.285.593.73 1.07 1.332 1.432.604.351 1.355.526 2.255.526.649 0 1.204-.062 1.668-.185l.044-.012.135-.04c.409-.122.736-.263.984-.421l-.542-1.267c-.2.108-.415.199-.642.274l-.297.087c-.34.088-.773.131-1.3.131-.636 0-1.135-.147-1.497-.444a1.573 1.573 0 0 1-.192-.193c-.244-.294-.415-.705-.512-1.234l-.004-.021h5.43zm-5.427-1.256-.003.022h3.752v-.138c-.007-.485-.104-.857-.288-1.118a1.056 1.056 0 0 0-.156-.176c-.307-.285-.746-.428-1.316-.428-.657 0-1.155.202-1.494.604-.253.3-.417.712-.494 1.234zm-27.053 2.77V4.7h-1.86v12.095h5.333V15.15zm7.103-5.908v7.553h-1.843V9.242h1.843z'/%3E%3Cpath fill='%23fff' d='m19.63 11.151-.757-1.71-.345 1.71-1.12 5.644h-1.827L18.083 4.7h.197l3.325 6.533.988 2.19.988-2.19L26.839 4.7h.181l2.6 12.095h-1.81l-1.218-5.644-.362-1.71-.658 1.71-2.93 5.644h-.098l-2.913-5.644zm14.836 5.81c-.68 0-1.311-.16-1.893-.478a3.795 3.795 0 0 1-1.381-1.382c-.34-.604-.51-1.306-.51-2.106 0-.79.147-1.482.444-2.074a3.364 3.364 0 0 1 1.3-1.382c.559-.33 1.217-.494 1.974-.494a3.293 3.293 0 0 1 1.234.231 3.341 3.341 0 0 1 .97.575c.264.22.44.439.527.659l.033-1.267h1.694v7.553H37.18l-.033-1.332c-.186.395-.526.746-1.02 1.053a3.167 3.167 0 0 1-1.662.444zm.296-1.482c.626 0 1.152-.214 1.58-.642.428-.44.642-1.01.642-1.711v-.115c0-.472-.098-.894-.296-1.267a2.211 2.211 0 0 0-.807-.872 2.098 2.098 0 0 0-1.119-.313c-.702 0-1.245.231-1.629.692-.384.45-.575 1.037-.575 1.76 0 .736.186 1.333.559 1.795.384.45.933.675 1.645.675zm6.521-6.237h1.711v1.4c.604-1.065 1.547-1.597 2.83-1.597 1.064 0 1.926.34 2.584 1.02.659.67.988 1.641.988 2.914 0 .79-.164 1.487-.493 2.09a3.456 3.456 0 0 1-1.316 1.399 3.51 3.51 0 0 1-1.844.493c-.636 0-1.19-.11-1.662-.329a2.665 2.665 0 0 1-1.086-.97l.017 5.134h-1.728V9.242zm4.048 6.22c.714 0 1.262-.224 1.645-.674.385-.46.576-1.048.576-1.762 0-.746-.192-1.338-.576-1.777-.372-.45-.92-.675-1.645-.675-.395 0-.768.098-1.12.296-.34.187-.613.46-.822.823-.197.351-.296.763-.296 1.234v.115c0 .472.098.894.296 1.267.209.362.483.647.823.855.34.197.713.297 1.119.297z'/%3E%3Cpath fill='%23e1e3e9' d='M51.325 4.7h1.86v10.45h3.473v1.646h-5.333zm7.12 4.542h1.843v7.553h-1.843zm.905-1.415a1.159 1.159 0 0 1-.856-.346 1.165 1.165 0 0 1-.346-.856 1.053 1.053 0 0 1 .346-.79c.23-.219.516-.329.856-.329.329 0 .609.11.839.33a1.053 1.053 0 0 1 .345.79 1.159 1.159 0 0 1-.345.855c-.22.23-.5.346-.84.346zm7.875 9.133a3.167 3.167 0 0 1-1.662-.444c-.482-.307-.817-.658-1.004-1.053l-.033 1.332h-1.71V4.701h1.743v4.657l-.082 1.283c.186-.438.548-.812 1.086-1.119a3.486 3.486 0 0 1 1.778-.477c.746 0 1.393.17 1.942.51a3.235 3.235 0 0 1 1.283 1.4c.297.592.444 1.282.444 2.072 0 .8-.175 1.498-.526 2.09a3.52 3.52 0 0 1-1.382 1.366 3.785 3.785 0 0 1-1.876.477zm-.296-1.481c.713 0 1.26-.225 1.645-.675.384-.46.577-1.053.577-1.778 0-.734-.193-1.327-.577-1.776-.373-.46-.921-.692-1.645-.692a2.115 2.115 0 0 0-1.58.659c-.428.428-.642.992-.642 1.694v.115c0 .473.098.895.296 1.267a2.385 2.385 0 0 0 .807.872 2.1 2.1 0 0 0 1.119.313zm5.927-6.237h1.777v1.481c.176-.505.46-.91.856-1.217a2.14 2.14 0 0 1 1.349-.46c.351 0 .593.032.724.098l-.247 1.794c-.099-.066-.313-.099-.642-.099-.516 0-.988.164-1.416.494-.417.329-.626.855-.626 1.58v3.883h-1.777V9.242zm9.534 7.718c-.9 0-1.651-.175-2.255-.526-.603-.362-1.047-.84-1.332-1.432a4.567 4.567 0 0 1-.428-1.975c0-.8.164-1.502.493-2.106a3.462 3.462 0 0 1 1.4-1.382c.592-.33 1.262-.494 2.007-.494 1.163 0 2.024.324 2.584.97.57.637.856 1.537.856 2.7 0 .296-.017.603-.05.92h-5.43c.12.67.356 1.153.708 1.45.362.296.86.443 1.497.443.526 0 .96-.044 1.3-.131a4.123 4.123 0 0 0 .938-.362l.542 1.267c-.274.175-.647.329-1.119.46-.472.132-1.042.197-1.711.197zm1.596-4.558c.01-.68-.137-1.158-.444-1.432-.307-.285-.746-.428-1.316-.428-1.152 0-1.815.62-1.991 1.86h3.752z'/%3E%3Cg fill-rule='evenodd' stroke-width='1.036'%3E%3Cpath fill='%23000' fill-opacity='.4' d='m8.166 16.146-.002.002a1.54 1.54 0 0 1-2.009 0l-.002-.002-.043-.034-.002-.002-.199-.162H4.377a.657.657 0 0 0-.659.659v1.84a.657.657 0 0 0 .659.659h5.565a.657.657 0 0 0 .659-.659v-1.84a.657.657 0 0 0-.659-.659H8.411l-.202.164zm-1.121-.905a.29.29 0 0 0 .113.023.286.286 0 0 0 .189-.07l.077-.063c.634-.508 4.672-3.743 4.672-7.575 0-2.55-2.215-4.625-4.938-4.625S2.221 5.006 2.221 7.556c0 3.225 2.86 6.027 4.144 7.137h.004l.04.038.484.4.077.063a.628.628 0 0 0 .074.047zm-2.52-.548a16.898 16.898 0 0 1-1.183-1.315C2.187 11.942.967 9.897.967 7.555c0-3.319 2.855-5.88 6.192-5.88 3.338 0 6.193 2.561 6.193 5.881 0 2.34-1.22 4.387-2.376 5.822a16.898 16.898 0 0 1-1.182 1.315h.15a1.912 1.912 0 0 1 1.914 1.914v1.84a1.912 1.912 0 0 1-1.914 1.914H4.377a1.912 1.912 0 0 1-1.914-1.914v-1.84a1.912 1.912 0 0 1 1.914-1.914zm3.82-6.935c0 .692-.55 1.222-1.187 1.222s-1.185-.529-1.185-1.222.548-1.222 1.185-1.222c.638 0 1.186.529 1.186 1.222zm-1.186 2.477c1.348 0 2.442-1.11 2.442-2.478S8.507 5.28 7.159 5.28 4.72 6.39 4.72 7.758s1.092 2.477 2.44 2.477zm2.048 7.71H5.114v-.838h4.093z'/%3E%3Cpath fill='%23e1e3e9' d='M2.222 7.555c0-2.55 2.214-4.625 4.937-4.625 2.723 0 4.938 2.075 4.938 4.625 0 3.832-4.038 7.068-4.672 7.575l-.077.063a.286.286 0 0 1-.189.07.286.286 0 0 1-.188-.07l-.077-.063c-.634-.507-4.672-3.743-4.672-7.575zm4.937 2.68c1.348 0 2.442-1.11 2.442-2.478S8.507 5.28 7.159 5.28 4.72 6.39 4.72 7.758s1.092 2.477 2.44 2.477z'/%3E%3Cpath fill='%23fff' d='M4.377 15.948a.657.657 0 0 0-.659.659v1.84a.657.657 0 0 0 .659.659h5.565a.657.657 0 0 0 .659-.659v-1.84a.657.657 0 0 0-.659-.659zm4.83 1.16H5.114v.838h4.093z'/%3E%3C/g%3E%3C/svg%3E");background-repeat:no-repeat;cursor:pointer;display:block;height:23px;margin:0 0 -4px -4px;overflow:hidden;width:88px}a.maplibregl-ctrl-logo.maplibregl-compact{width:14px}@media (-ms-high-contrast:active){a.maplibregl-ctrl-logo{background-color:transparent;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 88 23'%3E%3Cpath fill='%23000' fill-opacity='.4' fill-rule='evenodd' d='M17.408 16.796h-1.827l2.501-12.095h.198l3.324 6.533.988 2.19.988-2.19 3.258-6.533h.181l2.6 12.095h-1.81l-1.218-5.644-.362-1.71-.658 1.71-2.929 5.644h-.098l-2.914-5.644-.757-1.71-.345 1.71zm1.958-3.42-.726 3.663a1.255 1.255 0 0 1-1.232 1.011h-1.827a1.255 1.255 0 0 1-1.229-1.509l2.501-12.095a1.255 1.255 0 0 1 1.23-1.001h.197a1.255 1.255 0 0 1 1.12.685l3.19 6.273 3.125-6.263a1.255 1.255 0 0 1 1.123-.695h.181a1.255 1.255 0 0 1 1.227.991l1.443 6.71a5.11 5.11 0 0 1 .314-.787l.009-.016a4.623 4.623 0 0 1 1.777-1.887c.782-.46 1.668-.667 2.611-.667a4.548 4.548 0 0 1 1.7.32l.306.134c.21-.16.474-.256.759-.256h1.694a1.255 1.255 0 0 1 1.212.925 1.255 1.255 0 0 1 1.212-.925h1.711c.284 0 .545.094.755.252.613-.3 1.312-.45 2.075-.45 1.356 0 2.557.445 3.482 1.4.314.319.566.676.763 1.064V4.701a1.255 1.255 0 0 1 1.255-1.255h1.86A1.255 1.255 0 0 1 54.44 4.7v9.194h2.217c.19 0 .37.043.532.118v-4.77c0-.356.147-.678.385-.906a2.416 2.416 0 0 1-.682-1.71c0-.665.267-1.253.735-1.7a2.448 2.448 0 0 1 1.722-.674 2.43 2.43 0 0 1 1.705.675c.211.2.381.43.504.683V4.7a1.255 1.255 0 0 1 1.255-1.255h1.744A1.255 1.255 0 0 1 65.812 4.7v3.335a4.76 4.76 0 0 1 1.526-.246c.938 0 1.817.214 2.59.69a4.47 4.47 0 0 1 1.67 1.743v-.98a1.255 1.255 0 0 1 1.256-1.256h1.777c.233 0 .451.064.639.174a3.407 3.407 0 0 1 1.567-.372c.346 0 .861.02 1.285.232a1.255 1.255 0 0 1 .689 1.004 4.73 4.73 0 0 1 .853-.588c.795-.44 1.675-.647 2.61-.647 1.385 0 2.65.39 3.525 1.396.836.938 1.168 2.173 1.168 3.528 0 .343-.02.694-.056 1.051a1.255 1.255 0 0 1-.947 1.09l.408.952a1.255 1.255 0 0 1-.477 1.552c-.418.268-.92.463-1.458.612-.613.171-1.304.244-2.049.244-1.06 0-2.043-.207-2.886-.698l-.015-.008c-.798-.48-1.419-1.135-1.818-1.963l-.004-.008a5.815 5.815 0 0 1-.548-2.512c0-.286.017-.567.053-.843a1.255 1.255 0 0 1-.333-.086l-.166-.004c-.223 0-.426.062-.643.228-.03.024-.142.139-.142.59v3.883a1.255 1.255 0 0 1-1.256 1.256h-1.777a1.255 1.255 0 0 1-1.256-1.256V15.69l-.032.057a4.778 4.778 0 0 1-1.86 1.833 5.04 5.04 0 0 1-2.484.634 4.47 4.47 0 0 1-1.935-.424 1.252 1.252 0 0 1-.764.258h-1.71a1.255 1.255 0 0 1-1.256-1.255V7.687a2.402 2.402 0 0 1-.428.625c.253.23.412.561.412.93v7.553a1.255 1.255 0 0 1-1.256 1.255h-1.843a1.25 1.25 0 0 1-.894-.373c-.228.23-.544.373-.894.373H51.32a1.255 1.255 0 0 1-1.256-1.255v-1.251l-.061.117a4.703 4.703 0 0 1-1.782 1.884 4.767 4.767 0 0 1-2.485.67 5.6 5.6 0 0 1-1.485-.188l.009 2.764a1.255 1.255 0 0 1-1.255 1.259h-1.729a1.255 1.255 0 0 1-1.255-1.255v-3.537a1.255 1.255 0 0 1-1.167.793h-1.679a1.25 1.25 0 0 1-.77-.263 4.47 4.47 0 0 1-1.945.429c-.885 0-1.724-.21-2.495-.632l-.017-.01a4.983 4.983 0 0 1-1.081-.836 1.255 1.255 0 0 1-1.254 1.312h-1.81a1.255 1.255 0 0 1-1.228-.99l-.782-3.625-2.044 3.939a1.255 1.255 0 0 1-1.115.676h-.098a1.255 1.255 0 0 1-1.116-.68l-2.061-3.994zM35.92 16.63l.207-.114.223-.15c.329-.237.574-.499.735-.785l.061-.118.033 1.332h1.678V9.242h-1.694l-.033 1.267c-.088-.22-.264-.438-.526-.658l-.032-.028a3.16 3.16 0 0 0-.668-.428l-.27-.12a3.293 3.293 0 0 0-1.235-.23c-.757 0-1.415.163-1.974.493a3.36 3.36 0 0 0-1.3 1.382c-.297.593-.444 1.284-.444 2.074 0 .8.17 1.503.51 2.107a3.795 3.795 0 0 0 1.382 1.381 3.883 3.883 0 0 0 1.893.477c.53 0 1.015-.11 1.455-.33zm-2.789-5.38c-.384.45-.575 1.038-.575 1.762 0 .735.186 1.332.559 1.794.384.45.933.675 1.645.675a2.25 2.25 0 0 0 .934-.19 2.17 2.17 0 0 0 .468-.29l.178-.161a2.163 2.163 0 0 0 .397-.561c.163-.333.244-.717.244-1.15v-.115c0-.472-.098-.894-.296-1.267l-.043-.077a2.211 2.211 0 0 0-.633-.709l-.13-.086-.047-.028a2.099 2.099 0 0 0-1.073-.285c-.702 0-1.244.231-1.629.692zm2.316 2.706c.163-.17.28-.407.28-.83v-.114c0-.292-.06-.508-.15-.68a.958.958 0 0 0-.353-.389.851.851 0 0 0-.464-.127c-.4 0-.56.114-.664.239l-.01.012c-.148.174-.275.45-.275.945 0 .506.122.801.27.99.097.11.266.224.68.224.303 0 .504-.09.687-.269zm7.545 1.705a2.626 2.626 0 0 0 .331.423c.213.22.464.402.755.548l.173.074c.433.17.93.255 1.49.255.68 0 1.295-.165 1.844-.493a3.447 3.447 0 0 0 1.316-1.4c.329-.603.493-1.299.493-2.089 0-1.273-.33-2.243-.988-2.913-.658-.68-1.52-1.02-2.584-1.02-.598 0-1.124.115-1.575.347a2.807 2.807 0 0 0-.415.262l-.199.166a3.35 3.35 0 0 0-.64.82V9.242h-1.712v11.553h1.729l-.017-5.134zm.53-1.138c.137.193.297.36.48.5l.155.11.053.034c.34.197.713.297 1.119.297.714 0 1.262-.225 1.645-.675.385-.46.576-1.048.576-1.762 0-.746-.192-1.338-.576-1.777-.372-.45-.92-.675-1.645-.675-.29 0-.569.053-.835.16a2.366 2.366 0 0 0-.284.136 1.99 1.99 0 0 0-.363.254 2.237 2.237 0 0 0-.46.569l-.082.162a2.56 2.56 0 0 0-.213 1.072v.115c0 .471.098.894.296 1.267l.135.211zm.964-.818a1.11 1.11 0 0 0 .367.385.937.937 0 0 0 .476.118c.423 0 .59-.117.687-.23.159-.194.28-.478.28-.95 0-.53-.133-.8-.266-.952l-.021-.025c-.078-.094-.231-.221-.68-.221a.995.995 0 0 0-.503.135l-.012.007a.859.859 0 0 0-.335.343c-.073.133-.132.324-.132.614v.115a1.43 1.43 0 0 0 .14.66zm15.7-6.222c.232-.23.346-.516.346-.856a1.053 1.053 0 0 0-.345-.79 1.175 1.175 0 0 0-.84-.329c-.34 0-.625.11-.855.33a1.053 1.053 0 0 0-.346.79c0 .34.115.625.346.855.23.23.516.346.856.346.34 0 .62-.115.839-.346zm4.337 9.314.033-1.332c.128.269.324.518.59.747l.098.081a3.727 3.727 0 0 0 .316.224l.223.122a3.21 3.21 0 0 0 1.44.322 3.785 3.785 0 0 0 1.875-.477 3.52 3.52 0 0 0 1.382-1.366c.352-.593.526-1.29.526-2.09 0-.79-.147-1.48-.444-2.073a3.235 3.235 0 0 0-1.283-1.399c-.549-.34-1.195-.51-1.942-.51a3.476 3.476 0 0 0-1.527.344l-.086.043-.165.09a3.412 3.412 0 0 0-.33.214c-.288.21-.507.446-.656.707a1.893 1.893 0 0 0-.099.198l.082-1.283V4.701h-1.744v12.095zm.473-2.509a2.482 2.482 0 0 0 .566.7c.078.065.159.125.245.18l.144.08a2.105 2.105 0 0 0 .975.232c.713 0 1.262-.225 1.645-.675.384-.46.576-1.053.576-1.778 0-.734-.192-1.327-.576-1.777-.373-.46-.921-.692-1.645-.692a2.18 2.18 0 0 0-1.015.235c-.147.075-.285.17-.415.282l-.15.142a2.086 2.086 0 0 0-.42.594c-.149.32-.223.685-.223 1.1v.115c0 .47.097.89.293 1.26zm2.616-.293c.157-.191.28-.479.28-.967 0-.51-.13-.79-.276-.961l-.021-.026c-.082-.1-.232-.225-.67-.225a.868.868 0 0 0-.681.279l-.012.011c-.154.155-.274.38-.274.807v.115c0 .285.057.499.144.669a1.13 1.13 0 0 0 .367.405c.137.082.28.123.455.123.423 0 .59-.118.686-.23zm8.266-3.013c.23-.087.472-.134.724-.14l.069-.002c.329 0 .542.033.642.099l.247-1.794c-.13-.066-.37-.099-.717-.099a2.3 2.3 0 0 0-.545.063 2.086 2.086 0 0 0-.411.148 2.18 2.18 0 0 0-.4.249 2.482 2.482 0 0 0-.485.499 2.659 2.659 0 0 0-.32.581l-.05.137v-1.48h-1.778v7.553h1.777v-3.884c0-.364.053-.678.159-.943a1.49 1.49 0 0 1 .466-.636 2.52 2.52 0 0 1 .399-.253 2.19 2.19 0 0 1 .224-.099zm9.784 2.656.05-.922c0-1.162-.285-2.062-.856-2.698-.559-.647-1.42-.97-2.584-.97-.746 0-1.415.163-2.007.493a3.462 3.462 0 0 0-1.4 1.382c-.329.604-.493 1.306-.493 2.106 0 .714.143 1.371.428 1.975.285.593.73 1.07 1.332 1.432.604.351 1.355.526 2.255.526.649 0 1.204-.062 1.668-.185l.044-.012.135-.04c.409-.122.736-.263.984-.421l-.542-1.267c-.2.108-.415.199-.642.274l-.297.087c-.34.088-.773.131-1.3.131-.636 0-1.135-.147-1.497-.444a1.573 1.573 0 0 1-.192-.193c-.244-.294-.415-.705-.512-1.234l-.004-.021h5.43zm-5.427-1.256-.003.022h3.752v-.138c-.007-.485-.104-.857-.288-1.118a1.056 1.056 0 0 0-.156-.176c-.307-.285-.746-.428-1.316-.428-.657 0-1.155.202-1.494.604-.253.3-.417.712-.494 1.234zm-27.053 2.77V4.7h-1.86v12.095h5.333V15.15zm7.103-5.908v7.553h-1.843V9.242h1.843z'/%3E%3Cpath fill='%23fff' d='m19.63 11.151-.757-1.71-.345 1.71-1.12 5.644h-1.827L18.083 4.7h.197l3.325 6.533.988 2.19.988-2.19L26.839 4.7h.181l2.6 12.095h-1.81l-1.218-5.644-.362-1.71-.658 1.71-2.93 5.644h-.098l-2.913-5.644zm14.836 5.81c-.68 0-1.311-.16-1.893-.478a3.795 3.795 0 0 1-1.381-1.382c-.34-.604-.51-1.306-.51-2.106 0-.79.147-1.482.444-2.074a3.364 3.364 0 0 1 1.3-1.382c.559-.33 1.217-.494 1.974-.494a3.293 3.293 0 0 1 1.234.231 3.341 3.341 0 0 1 .97.575c.264.22.44.439.527.659l.033-1.267h1.694v7.553H37.18l-.033-1.332c-.186.395-.526.746-1.02 1.053a3.167 3.167 0 0 1-1.662.444zm.296-1.482c.626 0 1.152-.214 1.58-.642.428-.44.642-1.01.642-1.711v-.115c0-.472-.098-.894-.296-1.267a2.211 2.211 0 0 0-.807-.872 2.098 2.098 0 0 0-1.119-.313c-.702 0-1.245.231-1.629.692-.384.45-.575 1.037-.575 1.76 0 .736.186 1.333.559 1.795.384.45.933.675 1.645.675zm6.521-6.237h1.711v1.4c.604-1.065 1.547-1.597 2.83-1.597 1.064 0 1.926.34 2.584 1.02.659.67.988 1.641.988 2.914 0 .79-.164 1.487-.493 2.09a3.456 3.456 0 0 1-1.316 1.399 3.51 3.51 0 0 1-1.844.493c-.636 0-1.19-.11-1.662-.329a2.665 2.665 0 0 1-1.086-.97l.017 5.134h-1.728V9.242zm4.048 6.22c.714 0 1.262-.224 1.645-.674.385-.46.576-1.048.576-1.762 0-.746-.192-1.338-.576-1.777-.372-.45-.92-.675-1.645-.675-.395 0-.768.098-1.12.296-.34.187-.613.46-.822.823-.197.351-.296.763-.296 1.234v.115c0 .472.098.894.296 1.267.209.362.483.647.823.855.34.197.713.297 1.119.297z'/%3E%3Cpath fill='%23e1e3e9' d='M51.325 4.7h1.86v10.45h3.473v1.646h-5.333zm7.12 4.542h1.843v7.553h-1.843zm.905-1.415a1.159 1.159 0 0 1-.856-.346 1.165 1.165 0 0 1-.346-.856 1.053 1.053 0 0 1 .346-.79c.23-.219.516-.329.856-.329.329 0 .609.11.839.33a1.053 1.053 0 0 1 .345.79 1.159 1.159 0 0 1-.345.855c-.22.23-.5.346-.84.346zm7.875 9.133a3.167 3.167 0 0 1-1.662-.444c-.482-.307-.817-.658-1.004-1.053l-.033 1.332h-1.71V4.701h1.743v4.657l-.082 1.283c.186-.438.548-.812 1.086-1.119a3.486 3.486 0 0 1 1.778-.477c.746 0 1.393.17 1.942.51a3.235 3.235 0 0 1 1.283 1.4c.297.592.444 1.282.444 2.072 0 .8-.175 1.498-.526 2.09a3.52 3.52 0 0 1-1.382 1.366 3.785 3.785 0 0 1-1.876.477zm-.296-1.481c.713 0 1.26-.225 1.645-.675.384-.46.577-1.053.577-1.778 0-.734-.193-1.327-.577-1.776-.373-.46-.921-.692-1.645-.692a2.115 2.115 0 0 0-1.58.659c-.428.428-.642.992-.642 1.694v.115c0 .473.098.895.296 1.267a2.385 2.385 0 0 0 .807.872 2.1 2.1 0 0 0 1.119.313zm5.927-6.237h1.777v1.481c.176-.505.46-.91.856-1.217a2.14 2.14 0 0 1 1.349-.46c.351 0 .593.032.724.098l-.247 1.794c-.099-.066-.313-.099-.642-.099-.516 0-.988.164-1.416.494-.417.329-.626.855-.626 1.58v3.883h-1.777V9.242zm9.534 7.718c-.9 0-1.651-.175-2.255-.526-.603-.362-1.047-.84-1.332-1.432a4.567 4.567 0 0 1-.428-1.975c0-.8.164-1.502.493-2.106a3.462 3.462 0 0 1 1.4-1.382c.592-.33 1.262-.494 2.007-.494 1.163 0 2.024.324 2.584.97.57.637.856 1.537.856 2.7 0 .296-.017.603-.05.92h-5.43c.12.67.356 1.153.708 1.45.362.296.86.443 1.497.443.526 0 .96-.044 1.3-.131a4.123 4.123 0 0 0 .938-.362l.542 1.267c-.274.175-.647.329-1.119.46-.472.132-1.042.197-1.711.197zm1.596-4.558c.01-.68-.137-1.158-.444-1.432-.307-.285-.746-.428-1.316-.428-1.152 0-1.815.62-1.991 1.86h3.752z'/%3E%3Cg fill-rule='evenodd' stroke-width='1.036'%3E%3Cpath fill='%23000' fill-opacity='.4' d='m8.166 16.146-.002.002a1.54 1.54 0 0 1-2.009 0l-.002-.002-.043-.034-.002-.002-.199-.162H4.377a.657.657 0 0 0-.659.659v1.84a.657.657 0 0 0 .659.659h5.565a.657.657 0 0 0 .659-.659v-1.84a.657.657 0 0 0-.659-.659H8.411l-.202.164zm-1.121-.905a.29.29 0 0 0 .113.023.286.286 0 0 0 .189-.07l.077-.063c.634-.508 4.672-3.743 4.672-7.575 0-2.55-2.215-4.625-4.938-4.625S2.221 5.006 2.221 7.556c0 3.225 2.86 6.027 4.144 7.137h.004l.04.038.484.4.077.063a.628.628 0 0 0 .074.047zm-2.52-.548a16.898 16.898 0 0 1-1.183-1.315C2.187 11.942.967 9.897.967 7.555c0-3.319 2.855-5.88 6.192-5.88 3.338 0 6.193 2.561 6.193 5.881 0 2.34-1.22 4.387-2.376 5.822a16.898 16.898 0 0 1-1.182 1.315h.15a1.912 1.912 0 0 1 1.914 1.914v1.84a1.912 1.912 0 0 1-1.914 1.914H4.377a1.912 1.912 0 0 1-1.914-1.914v-1.84a1.912 1.912 0 0 1 1.914-1.914zm3.82-6.935c0 .692-.55 1.222-1.187 1.222s-1.185-.529-1.185-1.222.548-1.222 1.185-1.222c.638 0 1.186.529 1.186 1.222zm-1.186 2.477c1.348 0 2.442-1.11 2.442-2.478S8.507 5.28 7.159 5.28 4.72 6.39 4.72 7.758s1.092 2.477 2.44 2.477zm2.048 7.71H5.114v-.838h4.093z'/%3E%3Cpath fill='%23e1e3e9' d='M2.222 7.555c0-2.55 2.214-4.625 4.937-4.625 2.723 0 4.938 2.075 4.938 4.625 0 3.832-4.038 7.068-4.672 7.575l-.077.063a.286.286 0 0 1-.189.07.286.286 0 0 1-.188-.07l-.077-.063c-.634-.507-4.672-3.743-4.672-7.575zm4.937 2.68c1.348 0 2.442-1.11 2.442-2.478S8.507 5.28 7.159 5.28 4.72 6.39 4.72 7.758s1.092 2.477 2.44 2.477z'/%3E%3Cpath fill='%23fff' d='M4.377 15.948a.657.657 0 0 0-.659.659v1.84a.657.657 0 0 0 .659.659h5.565a.657.657 0 0 0 .659-.659v-1.84a.657.657 0 0 0-.659-.659zm4.83 1.16H5.114v.838h4.093z'/%3E%3C/g%3E%3C/svg%3E")}}@media (-ms-high-contrast:black-on-white){a.maplibregl-ctrl-logo{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 88 23'%3E%3Cpath fill='%23000' fill-opacity='.4' fill-rule='evenodd' d='M17.408 16.796h-1.827l2.501-12.095h.198l3.324 6.533.988 2.19.988-2.19 3.258-6.533h.181l2.6 12.095h-1.81l-1.218-5.644-.362-1.71-.658 1.71-2.929 5.644h-.098l-2.914-5.644-.757-1.71-.345 1.71zm1.958-3.42-.726 3.663a1.255 1.255 0 0 1-1.232 1.011h-1.827a1.255 1.255 0 0 1-1.229-1.509l2.501-12.095a1.255 1.255 0 0 1 1.23-1.001h.197a1.255 1.255 0 0 1 1.12.685l3.19 6.273 3.125-6.263a1.255 1.255 0 0 1 1.123-.695h.181a1.255 1.255 0 0 1 1.227.991l1.443 6.71a5.11 5.11 0 0 1 .314-.787l.009-.016a4.623 4.623 0 0 1 1.777-1.887c.782-.46 1.668-.667 2.611-.667a4.548 4.548 0 0 1 1.7.32l.306.134c.21-.16.474-.256.759-.256h1.694a1.255 1.255 0 0 1 1.212.925 1.255 1.255 0 0 1 1.212-.925h1.711c.284 0 .545.094.755.252.613-.3 1.312-.45 2.075-.45 1.356 0 2.557.445 3.482 1.4.314.319.566.676.763 1.064V4.701a1.255 1.255 0 0 1 1.255-1.255h1.86A1.255 1.255 0 0 1 54.44 4.7v9.194h2.217c.19 0 .37.043.532.118v-4.77c0-.356.147-.678.385-.906a2.416 2.416 0 0 1-.682-1.71c0-.665.267-1.253.735-1.7a2.448 2.448 0 0 1 1.722-.674 2.43 2.43 0 0 1 1.705.675c.211.2.381.43.504.683V4.7a1.255 1.255 0 0 1 1.255-1.255h1.744A1.255 1.255 0 0 1 65.812 4.7v3.335a4.76 4.76 0 0 1 1.526-.246c.938 0 1.817.214 2.59.69a4.47 4.47 0 0 1 1.67 1.743v-.98a1.255 1.255 0 0 1 1.256-1.256h1.777c.233 0 .451.064.639.174a3.407 3.407 0 0 1 1.567-.372c.346 0 .861.02 1.285.232a1.255 1.255 0 0 1 .689 1.004 4.73 4.73 0 0 1 .853-.588c.795-.44 1.675-.647 2.61-.647 1.385 0 2.65.39 3.525 1.396.836.938 1.168 2.173 1.168 3.528 0 .343-.02.694-.056 1.051a1.255 1.255 0 0 1-.947 1.09l.408.952a1.255 1.255 0 0 1-.477 1.552c-.418.268-.92.463-1.458.612-.613.171-1.304.244-2.049.244-1.06 0-2.043-.207-2.886-.698l-.015-.008c-.798-.48-1.419-1.135-1.818-1.963l-.004-.008a5.815 5.815 0 0 1-.548-2.512c0-.286.017-.567.053-.843a1.255 1.255 0 0 1-.333-.086l-.166-.004c-.223 0-.426.062-.643.228-.03.024-.142.139-.142.59v3.883a1.255 1.255 0 0 1-1.256 1.256h-1.777a1.255 1.255 0 0 1-1.256-1.256V15.69l-.032.057a4.778 4.778 0 0 1-1.86 1.833 5.04 5.04 0 0 1-2.484.634 4.47 4.47 0 0 1-1.935-.424 1.252 1.252 0 0 1-.764.258h-1.71a1.255 1.255 0 0 1-1.256-1.255V7.687a2.402 2.402 0 0 1-.428.625c.253.23.412.561.412.93v7.553a1.255 1.255 0 0 1-1.256 1.255h-1.843a1.25 1.25 0 0 1-.894-.373c-.228.23-.544.373-.894.373H51.32a1.255 1.255 0 0 1-1.256-1.255v-1.251l-.061.117a4.703 4.703 0 0 1-1.782 1.884 4.767 4.767 0 0 1-2.485.67 5.6 5.6 0 0 1-1.485-.188l.009 2.764a1.255 1.255 0 0 1-1.255 1.259h-1.729a1.255 1.255 0 0 1-1.255-1.255v-3.537a1.255 1.255 0 0 1-1.167.793h-1.679a1.25 1.25 0 0 1-.77-.263 4.47 4.47 0 0 1-1.945.429c-.885 0-1.724-.21-2.495-.632l-.017-.01a4.983 4.983 0 0 1-1.081-.836 1.255 1.255 0 0 1-1.254 1.312h-1.81a1.255 1.255 0 0 1-1.228-.99l-.782-3.625-2.044 3.939a1.255 1.255 0 0 1-1.115.676h-.098a1.255 1.255 0 0 1-1.116-.68l-2.061-3.994zM35.92 16.63l.207-.114.223-.15c.329-.237.574-.499.735-.785l.061-.118.033 1.332h1.678V9.242h-1.694l-.033 1.267c-.088-.22-.264-.438-.526-.658l-.032-.028a3.16 3.16 0 0 0-.668-.428l-.27-.12a3.293 3.293 0 0 0-1.235-.23c-.757 0-1.415.163-1.974.493a3.36 3.36 0 0 0-1.3 1.382c-.297.593-.444 1.284-.444 2.074 0 .8.17 1.503.51 2.107a3.795 3.795 0 0 0 1.382 1.381 3.883 3.883 0 0 0 1.893.477c.53 0 1.015-.11 1.455-.33zm-2.789-5.38c-.384.45-.575 1.038-.575 1.762 0 .735.186 1.332.559 1.794.384.45.933.675 1.645.675a2.25 2.25 0 0 0 .934-.19 2.17 2.17 0 0 0 .468-.29l.178-.161a2.163 2.163 0 0 0 .397-.561c.163-.333.244-.717.244-1.15v-.115c0-.472-.098-.894-.296-1.267l-.043-.077a2.211 2.211 0 0 0-.633-.709l-.13-.086-.047-.028a2.099 2.099 0 0 0-1.073-.285c-.702 0-1.244.231-1.629.692zm2.316 2.706c.163-.17.28-.407.28-.83v-.114c0-.292-.06-.508-.15-.68a.958.958 0 0 0-.353-.389.851.851 0 0 0-.464-.127c-.4 0-.56.114-.664.239l-.01.012c-.148.174-.275.45-.275.945 0 .506.122.801.27.99.097.11.266.224.68.224.303 0 .504-.09.687-.269zm7.545 1.705a2.626 2.626 0 0 0 .331.423c.213.22.464.402.755.548l.173.074c.433.17.93.255 1.49.255.68 0 1.295-.165 1.844-.493a3.447 3.447 0 0 0 1.316-1.4c.329-.603.493-1.299.493-2.089 0-1.273-.33-2.243-.988-2.913-.658-.68-1.52-1.02-2.584-1.02-.598 0-1.124.115-1.575.347a2.807 2.807 0 0 0-.415.262l-.199.166a3.35 3.35 0 0 0-.64.82V9.242h-1.712v11.553h1.729l-.017-5.134zm.53-1.138c.137.193.297.36.48.5l.155.11.053.034c.34.197.713.297 1.119.297.714 0 1.262-.225 1.645-.675.385-.46.576-1.048.576-1.762 0-.746-.192-1.338-.576-1.777-.372-.45-.92-.675-1.645-.675-.29 0-.569.053-.835.16a2.366 2.366 0 0 0-.284.136 1.99 1.99 0 0 0-.363.254 2.237 2.237 0 0 0-.46.569l-.082.162a2.56 2.56 0 0 0-.213 1.072v.115c0 .471.098.894.296 1.267l.135.211zm.964-.818a1.11 1.11 0 0 0 .367.385.937.937 0 0 0 .476.118c.423 0 .59-.117.687-.23.159-.194.28-.478.28-.95 0-.53-.133-.8-.266-.952l-.021-.025c-.078-.094-.231-.221-.68-.221a.995.995 0 0 0-.503.135l-.012.007a.859.859 0 0 0-.335.343c-.073.133-.132.324-.132.614v.115a1.43 1.43 0 0 0 .14.66zm15.7-6.222c.232-.23.346-.516.346-.856a1.053 1.053 0 0 0-.345-.79 1.175 1.175 0 0 0-.84-.329c-.34 0-.625.11-.855.33a1.053 1.053 0 0 0-.346.79c0 .34.115.625.346.855.23.23.516.346.856.346.34 0 .62-.115.839-.346zm4.337 9.314.033-1.332c.128.269.324.518.59.747l.098.081a3.727 3.727 0 0 0 .316.224l.223.122a3.21 3.21 0 0 0 1.44.322 3.785 3.785 0 0 0 1.875-.477 3.52 3.52 0 0 0 1.382-1.366c.352-.593.526-1.29.526-2.09 0-.79-.147-1.48-.444-2.073a3.235 3.235 0 0 0-1.283-1.399c-.549-.34-1.195-.51-1.942-.51a3.476 3.476 0 0 0-1.527.344l-.086.043-.165.09a3.412 3.412 0 0 0-.33.214c-.288.21-.507.446-.656.707a1.893 1.893 0 0 0-.099.198l.082-1.283V4.701h-1.744v12.095zm.473-2.509a2.482 2.482 0 0 0 .566.7c.078.065.159.125.245.18l.144.08a2.105 2.105 0 0 0 .975.232c.713 0 1.262-.225 1.645-.675.384-.46.576-1.053.576-1.778 0-.734-.192-1.327-.576-1.777-.373-.46-.921-.692-1.645-.692a2.18 2.18 0 0 0-1.015.235c-.147.075-.285.17-.415.282l-.15.142a2.086 2.086 0 0 0-.42.594c-.149.32-.223.685-.223 1.1v.115c0 .47.097.89.293 1.26zm2.616-.293c.157-.191.28-.479.28-.967 0-.51-.13-.79-.276-.961l-.021-.026c-.082-.1-.232-.225-.67-.225a.868.868 0 0 0-.681.279l-.012.011c-.154.155-.274.38-.274.807v.115c0 .285.057.499.144.669a1.13 1.13 0 0 0 .367.405c.137.082.28.123.455.123.423 0 .59-.118.686-.23zm8.266-3.013c.23-.087.472-.134.724-.14l.069-.002c.329 0 .542.033.642.099l.247-1.794c-.13-.066-.37-.099-.717-.099a2.3 2.3 0 0 0-.545.063 2.086 2.086 0 0 0-.411.148 2.18 2.18 0 0 0-.4.249 2.482 2.482 0 0 0-.485.499 2.659 2.659 0 0 0-.32.581l-.05.137v-1.48h-1.778v7.553h1.777v-3.884c0-.364.053-.678.159-.943a1.49 1.49 0 0 1 .466-.636 2.52 2.52 0 0 1 .399-.253 2.19 2.19 0 0 1 .224-.099zm9.784 2.656.05-.922c0-1.162-.285-2.062-.856-2.698-.559-.647-1.42-.97-2.584-.97-.746 0-1.415.163-2.007.493a3.462 3.462 0 0 0-1.4 1.382c-.329.604-.493 1.306-.493 2.106 0 .714.143 1.371.428 1.975.285.593.73 1.07 1.332 1.432.604.351 1.355.526 2.255.526.649 0 1.204-.062 1.668-.185l.044-.012.135-.04c.409-.122.736-.263.984-.421l-.542-1.267c-.2.108-.415.199-.642.274l-.297.087c-.34.088-.773.131-1.3.131-.636 0-1.135-.147-1.497-.444a1.573 1.573 0 0 1-.192-.193c-.244-.294-.415-.705-.512-1.234l-.004-.021h5.43zm-5.427-1.256-.003.022h3.752v-.138c-.007-.485-.104-.857-.288-1.118a1.056 1.056 0 0 0-.156-.176c-.307-.285-.746-.428-1.316-.428-.657 0-1.155.202-1.494.604-.253.3-.417.712-.494 1.234zm-27.053 2.77V4.7h-1.86v12.095h5.333V15.15zm7.103-5.908v7.553h-1.843V9.242h1.843z'/%3E%3Cpath fill='%23fff' d='m19.63 11.151-.757-1.71-.345 1.71-1.12 5.644h-1.827L18.083 4.7h.197l3.325 6.533.988 2.19.988-2.19L26.839 4.7h.181l2.6 12.095h-1.81l-1.218-5.644-.362-1.71-.658 1.71-2.93 5.644h-.098l-2.913-5.644zm14.836 5.81c-.68 0-1.311-.16-1.893-.478a3.795 3.795 0 0 1-1.381-1.382c-.34-.604-.51-1.306-.51-2.106 0-.79.147-1.482.444-2.074a3.364 3.364 0 0 1 1.3-1.382c.559-.33 1.217-.494 1.974-.494a3.293 3.293 0 0 1 1.234.231 3.341 3.341 0 0 1 .97.575c.264.22.44.439.527.659l.033-1.267h1.694v7.553H37.18l-.033-1.332c-.186.395-.526.746-1.02 1.053a3.167 3.167 0 0 1-1.662.444zm.296-1.482c.626 0 1.152-.214 1.58-.642.428-.44.642-1.01.642-1.711v-.115c0-.472-.098-.894-.296-1.267a2.211 2.211 0 0 0-.807-.872 2.098 2.098 0 0 0-1.119-.313c-.702 0-1.245.231-1.629.692-.384.45-.575 1.037-.575 1.76 0 .736.186 1.333.559 1.795.384.45.933.675 1.645.675zm6.521-6.237h1.711v1.4c.604-1.065 1.547-1.597 2.83-1.597 1.064 0 1.926.34 2.584 1.02.659.67.988 1.641.988 2.914 0 .79-.164 1.487-.493 2.09a3.456 3.456 0 0 1-1.316 1.399 3.51 3.51 0 0 1-1.844.493c-.636 0-1.19-.11-1.662-.329a2.665 2.665 0 0 1-1.086-.97l.017 5.134h-1.728V9.242zm4.048 6.22c.714 0 1.262-.224 1.645-.674.385-.46.576-1.048.576-1.762 0-.746-.192-1.338-.576-1.777-.372-.45-.92-.675-1.645-.675-.395 0-.768.098-1.12.296-.34.187-.613.46-.822.823-.197.351-.296.763-.296 1.234v.115c0 .472.098.894.296 1.267.209.362.483.647.823.855.34.197.713.297 1.119.297z'/%3E%3Cpath fill='%23e1e3e9' d='M51.325 4.7h1.86v10.45h3.473v1.646h-5.333zm7.12 4.542h1.843v7.553h-1.843zm.905-1.415a1.159 1.159 0 0 1-.856-.346 1.165 1.165 0 0 1-.346-.856 1.053 1.053 0 0 1 .346-.79c.23-.219.516-.329.856-.329.329 0 .609.11.839.33a1.053 1.053 0 0 1 .345.79 1.159 1.159 0 0 1-.345.855c-.22.23-.5.346-.84.346zm7.875 9.133a3.167 3.167 0 0 1-1.662-.444c-.482-.307-.817-.658-1.004-1.053l-.033 1.332h-1.71V4.701h1.743v4.657l-.082 1.283c.186-.438.548-.812 1.086-1.119a3.486 3.486 0 0 1 1.778-.477c.746 0 1.393.17 1.942.51a3.235 3.235 0 0 1 1.283 1.4c.297.592.444 1.282.444 2.072 0 .8-.175 1.498-.526 2.09a3.52 3.52 0 0 1-1.382 1.366 3.785 3.785 0 0 1-1.876.477zm-.296-1.481c.713 0 1.26-.225 1.645-.675.384-.46.577-1.053.577-1.778 0-.734-.193-1.327-.577-1.776-.373-.46-.921-.692-1.645-.692a2.115 2.115 0 0 0-1.58.659c-.428.428-.642.992-.642 1.694v.115c0 .473.098.895.296 1.267a2.385 2.385 0 0 0 .807.872 2.1 2.1 0 0 0 1.119.313zm5.927-6.237h1.777v1.481c.176-.505.46-.91.856-1.217a2.14 2.14 0 0 1 1.349-.46c.351 0 .593.032.724.098l-.247 1.794c-.099-.066-.313-.099-.642-.099-.516 0-.988.164-1.416.494-.417.329-.626.855-.626 1.58v3.883h-1.777V9.242zm9.534 7.718c-.9 0-1.651-.175-2.255-.526-.603-.362-1.047-.84-1.332-1.432a4.567 4.567 0 0 1-.428-1.975c0-.8.164-1.502.493-2.106a3.462 3.462 0 0 1 1.4-1.382c.592-.33 1.262-.494 2.007-.494 1.163 0 2.024.324 2.584.97.57.637.856 1.537.856 2.7 0 .296-.017.603-.05.92h-5.43c.12.67.356 1.153.708 1.45.362.296.86.443 1.497.443.526 0 .96-.044 1.3-.131a4.123 4.123 0 0 0 .938-.362l.542 1.267c-.274.175-.647.329-1.119.46-.472.132-1.042.197-1.711.197zm1.596-4.558c.01-.68-.137-1.158-.444-1.432-.307-.285-.746-.428-1.316-.428-1.152 0-1.815.62-1.991 1.86h3.752z'/%3E%3Cg fill-rule='evenodd' stroke-width='1.036'%3E%3Cpath fill='%23000' fill-opacity='.4' d='m8.166 16.146-.002.002a1.54 1.54 0 0 1-2.009 0l-.002-.002-.043-.034-.002-.002-.199-.162H4.377a.657.657 0 0 0-.659.659v1.84a.657.657 0 0 0 .659.659h5.565a.657.657 0 0 0 .659-.659v-1.84a.657.657 0 0 0-.659-.659H8.411l-.202.164zm-1.121-.905a.29.29 0 0 0 .113.023.286.286 0 0 0 .189-.07l.077-.063c.634-.508 4.672-3.743 4.672-7.575 0-2.55-2.215-4.625-4.938-4.625S2.221 5.006 2.221 7.556c0 3.225 2.86 6.027 4.144 7.137h.004l.04.038.484.4.077.063a.628.628 0 0 0 .074.047zm-2.52-.548a16.898 16.898 0 0 1-1.183-1.315C2.187 11.942.967 9.897.967 7.555c0-3.319 2.855-5.88 6.192-5.88 3.338 0 6.193 2.561 6.193 5.881 0 2.34-1.22 4.387-2.376 5.822a16.898 16.898 0 0 1-1.182 1.315h.15a1.912 1.912 0 0 1 1.914 1.914v1.84a1.912 1.912 0 0 1-1.914 1.914H4.377a1.912 1.912 0 0 1-1.914-1.914v-1.84a1.912 1.912 0 0 1 1.914-1.914zm3.82-6.935c0 .692-.55 1.222-1.187 1.222s-1.185-.529-1.185-1.222.548-1.222 1.185-1.222c.638 0 1.186.529 1.186 1.222zm-1.186 2.477c1.348 0 2.442-1.11 2.442-2.478S8.507 5.28 7.159 5.28 4.72 6.39 4.72 7.758s1.092 2.477 2.44 2.477zm2.048 7.71H5.114v-.838h4.093z'/%3E%3Cpath fill='%23e1e3e9' d='M2.222 7.555c0-2.55 2.214-4.625 4.937-4.625 2.723 0 4.938 2.075 4.938 4.625 0 3.832-4.038 7.068-4.672 7.575l-.077.063a.286.286 0 0 1-.189.07.286.286 0 0 1-.188-.07l-.077-.063c-.634-.507-4.672-3.743-4.672-7.575zm4.937 2.68c1.348 0 2.442-1.11 2.442-2.478S8.507 5.28 7.159 5.28 4.72 6.39 4.72 7.758s1.092 2.477 2.44 2.477z'/%3E%3Cpath fill='%23fff' d='M4.377 15.948a.657.657 0 0 0-.659.659v1.84a.657.657 0 0 0 .659.659h5.565a.657.657 0 0 0 .659-.659v-1.84a.657.657 0 0 0-.659-.659zm4.83 1.16H5.114v.838h4.093z'/%3E%3C/g%3E%3C/svg%3E")}}.maplibregl-ctrl.maplibregl-ctrl-attrib{background-color:hsla(0,0%,100%,.5);margin:0;padding:0 5px}@media screen{.maplibregl-ctrl-attrib.maplibregl-compact{background-color:#fff;border-radius:12px;margin:10px;min-height:20px;padding:2px 24px 2px 0;position:relative}.maplibregl-ctrl-attrib.maplibregl-compact-show{padding:2px 28px 2px 8px;visibility:visible}.maplibregl-ctrl-bottom-left>.maplibregl-ctrl-attrib.maplibregl-compact-show,.maplibregl-ctrl-top-left>.maplibregl-ctrl-attrib.maplibregl-compact-show{border-radius:12px;padding:2px 8px 2px 28px}.maplibregl-ctrl-attrib.maplibregl-compact .maplibregl-ctrl-attrib-inner{display:none}.maplibregl-ctrl-attrib-button{background-color:hsla(0,0%,100%,.5);background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill-rule='evenodd' viewBox='0 0 20 20'%3E%3Cpath d='M4 10a6 6 0 1 0 12 0 6 6 0 1 0-12 0m5-3a1 1 0 1 0 2 0 1 1 0 1 0-2 0m0 3a1 1 0 1 1 2 0v3a1 1 0 1 1-2 0'/%3E%3C/svg%3E");border:0;border-radius:12px;box-sizing:border-box;cursor:pointer;display:none;height:24px;outline:none;position:absolute;right:0;top:0;width:24px}.maplibregl-ctrl-bottom-left .maplibregl-ctrl-attrib-button,.maplibregl-ctrl-top-left .maplibregl-ctrl-attrib-button{left:0}.maplibregl-ctrl-attrib.maplibregl-compact-show .maplibregl-ctrl-attrib-inner,.maplibregl-ctrl-attrib.maplibregl-compact .maplibregl-ctrl-attrib-button{display:block}.maplibregl-ctrl-attrib.maplibregl-compact-show .maplibregl-ctrl-attrib-button{background-color:rgba(0,0,0,.05)}.maplibregl-ctrl-bottom-right>.maplibregl-ctrl-attrib.maplibregl-compact:after{bottom:0;right:0}.maplibregl-ctrl-top-right>.maplibregl-ctrl-attrib.maplibregl-compact:after{right:0;top:0}.maplibregl-ctrl-top-left>.maplibregl-ctrl-attrib.maplibregl-compact:after{left:0;top:0}.maplibregl-ctrl-bottom-left>.maplibregl-ctrl-attrib.maplibregl-compact:after{bottom:0;left:0}}@media screen and (-ms-high-contrast:active){.maplibregl-ctrl-attrib.maplibregl-compact:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' fill-rule='evenodd' viewBox='0 0 20 20'%3E%3Cpath d='M4 10a6 6 0 1 0 12 0 6 6 0 1 0-12 0m5-3a1 1 0 1 0 2 0 1 1 0 1 0-2 0m0 3a1 1 0 1 1 2 0v3a1 1 0 1 1-2 0'/%3E%3C/svg%3E")}}@media screen and (-ms-high-contrast:black-on-white){.maplibregl-ctrl-attrib.maplibregl-compact:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill-rule='evenodd' viewBox='0 0 20 20'%3E%3Cpath d='M4 10a6 6 0 1 0 12 0 6 6 0 1 0-12 0m5-3a1 1 0 1 0 2 0 1 1 0 1 0-2 0m0 3a1 1 0 1 1 2 0v3a1 1 0 1 1-2 0'/%3E%3C/svg%3E")}}.maplibregl-ctrl-attrib a{color:rgba(0,0,0,.75);text-decoration:none}.maplibregl-ctrl-attrib a:hover{color:inherit;text-decoration:underline}.maplibregl-ctrl-attrib .mapbox-improve-map{font-weight:700;margin-left:2px}.maplibregl-attrib-empty{display:none}.maplibregl-ctrl-scale{background-color:hsla(0,0%,100%,.75);border:2px solid #333;border-top:#333;box-sizing:border-box;color:#333;font-size:10px;padding:0 5px}.maplibregl-popup{display:flex;left:0;pointer-events:none;position:absolute;top:0;will-change:transform}.maplibregl-popup-anchor-top,.maplibregl-popup-anchor-top-left,.maplibregl-popup-anchor-top-right{flex-direction:column}.maplibregl-popup-anchor-bottom,.maplibregl-popup-anchor-bottom-left,.maplibregl-popup-anchor-bottom-right{flex-direction:column-reverse}.maplibregl-popup-anchor-left{flex-direction:row}.maplibregl-popup-anchor-right{flex-direction:row-reverse}.maplibregl-popup-tip{border:10px solid transparent;height:0;width:0;z-index:1}.maplibregl-popup-anchor-top .maplibregl-popup-tip{align-self:center;border-bottom-color:#fff;border-top:none}.maplibregl-popup-anchor-top-left .maplibregl-popup-tip{align-self:flex-start;border-bottom-color:#fff;border-left:none;border-top:none}.maplibregl-popup-anchor-top-right .maplibregl-popup-tip{align-self:flex-end;border-bottom-color:#fff;border-right:none;border-top:none}.maplibregl-popup-anchor-bottom .maplibregl-popup-tip{align-self:center;border-bottom:none;border-top-color:#fff}.maplibregl-popup-anchor-bottom-left .maplibregl-popup-tip{align-self:flex-start;border-bottom:none;border-left:none;border-top-color:#fff}.maplibregl-popup-anchor-bottom-right .maplibregl-popup-tip{align-self:flex-end;border-bottom:none;border-right:none;border-top-color:#fff}.maplibregl-popup-anchor-left .maplibregl-popup-tip{align-self:center;border-left:none;border-right-color:#fff}.maplibregl-popup-anchor-right .maplibregl-popup-tip{align-self:center;border-left-color:#fff;border-right:none}.maplibregl-popup-close-button{background-color:transparent;border:0;border-radius:0 3px 0 0;cursor:pointer;position:absolute;right:0;top:0}.maplibregl-popup-close-button:hover{background-color:rgba(0,0,0,.05)}.maplibregl-popup-content{background:#fff;border-radius:3px;box-shadow:0 1px 2px rgba(0,0,0,.1);padding:10px 10px 15px;pointer-events:auto;position:relative}.maplibregl-popup-anchor-top-left .maplibregl-popup-content{border-top-left-radius:0}.maplibregl-popup-anchor-top-right .maplibregl-popup-content{border-top-right-radius:0}.maplibregl-popup-anchor-bottom-left .maplibregl-popup-content{border-bottom-left-radius:0}.maplibregl-popup-anchor-bottom-right .maplibregl-popup-content{border-bottom-right-radius:0}.maplibregl-popup-track-pointer{display:none}.maplibregl-popup-track-pointer *{pointer-events:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.maplibregl-map:hover .maplibregl-popup-track-pointer{display:flex}.maplibregl-map:active .maplibregl-popup-track-pointer{display:none}.maplibregl-marker{left:0;position:absolute;top:0;will-change:transform}.maplibregl-user-location-dot,.maplibregl-user-location-dot:before{background-color:#1da1f2;border-radius:50%;height:15px;width:15px}.maplibregl-user-location-dot:before{-webkit-animation:maplibregl-user-location-dot-pulse 2s infinite;animation:maplibregl-user-location-dot-pulse 2s infinite;content:"";position:absolute}.maplibregl-user-location-dot:after{border:2px solid #fff;border-radius:50%;box-shadow:0 0 3px rgba(0,0,0,.35);box-sizing:border-box;content:"";height:19px;left:-2px;position:absolute;top:-2px;width:19px}@-webkit-keyframes maplibregl-user-location-dot-pulse{0%{opacity:1;-webkit-transform:scale(1)}70%{opacity:0;-webkit-transform:scale(3)}to{opacity:0;-webkit-transform:scale(1)}}@keyframes maplibregl-user-location-dot-pulse{0%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}70%{opacity:0;-webkit-transform:scale(3);transform:scale(3)}to{opacity:0;-webkit-transform:scale(1);transform:scale(1)}}.maplibregl-user-location-dot-stale{background-color:#aaa}.maplibregl-user-location-dot-stale:after{display:none}.maplibregl-user-location-accuracy-circle{background-color:rgba(29,161,242,.2);border-radius:100%;height:1px;width:1px}.maplibregl-crosshair,.maplibregl-crosshair .maplibregl-interactive,.maplibregl-crosshair .maplibregl-interactive:active{cursor:crosshair}.maplibregl-boxzoom{background:#fff;border:2px dotted #202020;height:0;left:0;opacity:.5;position:absolute;top:0;width:0}@media print{.mapbox-improve-map{display:none}}.J40Map-module--mapAndInfoPanelContainer--q-ody{display:flex;height:81vh}@media screen and (max-width:400px){.J40Map-module--mapAndInfoPanelContainer--q-ody{flex-direction:column;height:-webkit-fit-content;height:-moz-fit-content;height:fit-content}}.J40Map-module--j40Popup--3yJGr{width:375px}.J40Map-module--navigationControl--2Aybf{left:1.25em;top:2.5em;width:2.5em}.J40Map-module--fullscreenControl--1UBKe{right:1.25em;top:2.5em}.J40Map-module--geolocateControl--3KVAk{right:1.25em;top:5em}.J40Map-module--mapInfoPanel--F3jR4{border:2px solid #f2f2f2;max-width:22rem;overflow-y:auto}.mapLegend-module--legendContainer--2N1FC{font-size:.8em;margin-top:19px}.mapLegend-module--swatchContainer--1yZX1{display:flex;flex-direction:row;justify-content:flex-start}.mapLegend-module--legendItem--WezUf{align-items:center;display:flex;flex-direction:row;margin-right:29px}.mapLegend-module--colorSwatch--oBUN2{border:1px solid #1a4480;box-sizing:border-box;height:20px;margin-right:10px;width:20px}#mapLegend-module--prioritized--1I534{background-color:rgba(26,68,128,.6)}#mapLegend-module--threshold--1zali{background-color:rgba(26,68,128,.2)}#mapLegend-module--nonPrioritized--2y0Vm{background-color:#fafaf8}.HowYouCanHelp-module--howYouCanHelpContainer--2kqBa{margin:29px 24px 49px 42px}.downloadPacket-module--downloadBoxContainer--IfYSI{color:#f5f5f5;flex:0 0 350px;margin:auto}.downloadPacket-module--downloadBoxContainer--IfYSI .downloadPacket-module--downloadBox--23qAG{background-color:#112f4e;border-radius:6px 6px;min-width:400px}.downloadPacket-module--downloadBoxContainer--IfYSI .downloadPacket-module--downloadBox--23qAG .downloadPacket-module--downloadBoxTextBox--2C08I{display:flex;flex-direction:column;padding:25px}.downloadPacket-module--downloadBoxContainer--IfYSI .downloadPacket-module--downloadBox--23qAG .downloadPacket-module--downloadBoxTextBox--2C08I .downloadPacket-module--downloadBoxTitle--2oQsR{font-weight:700;margin-bottom:10px}.downloadPacket-module--downloadBoxContainer--IfYSI .downloadPacket-module--downloadBox--23qAG .downloadPacket-module--downloadBoxTextBox--2C08I .downloadPacket-module--downloadBoxText--s09H8{margin-bottom:20px}.downloadPacket-module--downloadBoxContainer--IfYSI .downloadPacket-module--downloadBox--23qAG .downloadPacket-module--downloadBoxTextBox--2C08I .downloadPacket-module--downloadBoxButtonContainer--EBWUf{align-self:center;margin-top:20px 0 0 0}.downloadPacket-module--downloadBoxContainer--IfYSI .downloadPacket-module--downloadBox--23qAG .downloadPacket-module--downloadBoxTextBox--2C08I .downloadPacket-module--downloadBoxButtonContainer--EBWUf a{text-decoration:none}.downloadPacket-module--downloadBoxContainer--IfYSI .downloadPacket-module--downloadBox--23qAG .downloadPacket-module--downloadBoxTextBox--2C08I .downloadPacket-module--downloadBoxButtonContainer--EBWUf img{-webkit-filter:invert(15%) sepia(9%) saturate(5666%) hue-rotate(175deg) brightness(96%) contrast(95%);filter:invert(15%) sepia(9%) saturate(5666%) hue-rotate(175deg) brightness(96%) contrast(95%)}.downloadPacket-module--downloadBoxContainer--IfYSI .downloadPacket-module--downloadBox--23qAG .downloadPacket-module--downloadBoxTextBox--2C08I .downloadPacket-module--downloadBoxButton--3w-ok{background-color:#fff;color:#112f4e;display:flex}.downloadPacket-module--downloadBoxContainer--IfYSI .downloadPacket-module--downloadBox--23qAG .downloadPacket-module--downloadBoxTextBox--2C08I .downloadPacket-module--downloadBoxButton--3w-ok .downloadPacket-module--downloadPacketText--2MyEV{padding-left:5px;padding-top:4px}.cejst-module--disclaimer--3LC1y{display:flex;flex-wrap:wrap;line-height:25px}.cejst-module--disclaimer--3LC1y .cejst-module--textBox--9wuDw{flex:2 1;max-width:700px} \ No newline at end of file +/*! uswds @version */.usa-collection,.usa-list,.usa-prose .usa-collection,.usa-prose>ol,.usa-prose>ul{line-height:1.5;margin-bottom:1em;margin-top:1em;padding-left:3ch}.usa-collection:last-child,.usa-list:last-child,.usa-prose>ol:last-child,.usa-prose>ul:last-child{margin-bottom:0}.usa-collection ol,.usa-collection ul,.usa-list ol,.usa-list ul,.usa-prose .usa-collection ol,.usa-prose .usa-collection ul,.usa-prose>ol ol,.usa-prose>ol ul,.usa-prose>ul ol,.usa-prose>ul ul{margin-top:.25em}.usa-collection__item,.usa-list li,.usa-prose .usa-collection__item,.usa-prose>ol li,.usa-prose>ul li{margin-bottom:.25em;max-width:68ex}.usa-collection__item:last-child,.usa-list li:last-child,.usa-prose>ol li:last-child,.usa-prose>ul li:last-child{margin-bottom:0}.usa-prose>table,.usa-table{border-collapse:collapse;border-spacing:0;color:#1b1b1b;font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.06rem;line-height:1.5;margin:1.25rem 0;text-align:left}.usa-prose>table thead th,.usa-table thead th{font-weight:700}.usa-prose>table thead td,.usa-prose>table thead th,.usa-table thead td,.usa-table thead th{background-color:#dfe1e2;color:#1b1b1b}.usa-prose>table td,.usa-prose>table th,.usa-table td,.usa-table th{background-color:#fff;border:1px solid #1b1b1b;font-weight:400;padding:.5rem 1rem;text-align:inherit}.usa-prose>table caption,.usa-table caption{font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1rem;font-weight:700;margin-bottom:.75rem;text-align:left}.usa-prose>.usa-table--borderless thead th,.usa-table--borderless thead th{background-color:transparent;border-top:0}.usa-prose>.usa-table--borderless td,.usa-prose>.usa-table--borderless th,.usa-table--borderless td,.usa-table--borderless th{border-left:0;border-right:0}.usa-prose>.usa-table--compact td,.usa-prose>.usa-table--compact th,.usa-table--compact td,.usa-table--compact th{padding:.25rem .75rem}.usa-table--striped tbody tr:nth-child(odd) td,.usa-table--striped tbody tr:nth-child(odd) th{background-color:#f0f0f0;color:#1b1b1b}.usa-prose>.width-mobile .usa-table--stacked thead,.width-mobile .usa-table--stacked thead{display:none}.usa-prose>.width-mobile .usa-table--stacked td,.usa-prose>.width-mobile .usa-table--stacked th,.width-mobile .usa-table--stacked td,.width-mobile .usa-table--stacked th{border-bottom-width:0;display:block;width:100%}.usa-prose>.width-mobile .usa-table--stacked tr,.width-mobile .usa-table--stacked tr{border-bottom:.25rem solid #1b1b1b;border-top-width:0;display:block;width:100%}.width-mobile .usa-table--stacked tr td:first-child,.width-mobile .usa-table--stacked tr th:first-child{border-top-width:0}.width-mobile .usa-table--stacked tr:nth-child(odd) td,.width-mobile .usa-table--stacked tr:nth-child(odd) th{background-color:inherit}.width-mobile .usa-table--stacked tr:first-child td:first-child,.width-mobile .usa-table--stacked tr:first-child th:first-child{border-top:.25rem solid #1b1b1b}.width-mobile .usa-table--stacked td[data-label],.width-mobile .usa-table--stacked th[data-label]{padding-bottom:.75rem}.width-mobile .usa-table--stacked td[data-label]:before,.width-mobile .usa-table--stacked th[data-label]:before{content:attr(data-label);display:block;font-weight:700;margin:-.5rem -1rem 0;padding:.75rem 1rem .25rem}.usa-prose>.width-mobile .usa-table--stacked-header thead,.width-mobile .usa-table--stacked-header thead{display:none}.usa-prose>.width-mobile .usa-table--stacked-header td,.usa-prose>.width-mobile .usa-table--stacked-header th,.width-mobile .usa-table--stacked-header td,.width-mobile .usa-table--stacked-header th{border-bottom-width:0;display:block;width:100%}.usa-prose>.width-mobile .usa-table--stacked-header tr,.width-mobile .usa-table--stacked-header tr{border-bottom:.25rem solid #1b1b1b;border-top-width:0;display:block;width:100%}.width-mobile .usa-table--stacked-header tr td:first-child,.width-mobile .usa-table--stacked-header tr th:first-child{border-top-width:0}.width-mobile .usa-table--stacked-header tr:nth-child(odd) td,.width-mobile .usa-table--stacked-header tr:nth-child(odd) th{background-color:inherit}.width-mobile .usa-table--stacked-header tr:first-child td:first-child,.width-mobile .usa-table--stacked-header tr:first-child th:first-child{border-top:.25rem solid #1b1b1b}.width-mobile .usa-table--stacked-header td[data-label],.width-mobile .usa-table--stacked-header th[data-label]{padding-bottom:.75rem}.width-mobile .usa-table--stacked-header td[data-label]:before,.width-mobile .usa-table--stacked-header th[data-label]:before{content:attr(data-label);display:block;font-weight:700;margin:-.5rem -1rem 0;padding:.75rem 1rem .25rem}.width-mobile .usa-table--stacked-header tr td:first-child,.width-mobile .usa-table--stacked-header tr th:first-child{background-color:#dfe1e2;color:#1b1b1b;font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.06rem;font-weight:700;line-height:1.1;padding:.75rem 1rem}.width-mobile .usa-table--stacked-header tr td:first-child:before,.width-mobile .usa-table--stacked-header tr th:first-child:before{display:none}.usa-prose>.usa-table-container--scrollable,.usa-table-container--scrollable{margin:1.25rem 0;overflow-y:hidden}.usa-table-container--scrollable .usa-table{margin:0}.usa-prose>.usa-table-container--scrollable td,.usa-prose>.usa-table-container--scrollable th,.usa-table-container--scrollable td,.usa-table-container--scrollable th{white-space:nowrap}/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{-webkit-text-size-adjust:100%;line-height:1.15}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}[hidden],template{display:none}@font-face{font-display:fallback;font-family:Roboto Mono Web;font-style:normal;font-weight:300;src:url(/justice40-tool/main/static/roboto-mono-v5-latin-300-316b1352cc4ab2054de67541c69539d9.woff2) format("woff2"),url(/justice40-tool/main/static/roboto-mono-v5-latin-300-92dd8f0ccfaebc33f817da19369100d8.woff) format("woff"),url(/justice40-tool/main/static/roboto-mono-v5-latin-300-ce3838471d62f8364e125cc74923e05b.ttf) format("truetype")}@font-face{font-display:fallback;font-family:Roboto Mono Web;font-style:normal;font-weight:400;src:url(/justice40-tool/main/static/roboto-mono-v5-latin-regular-f1dc10a756c2c544588b7408095ffed7.woff2) format("woff2"),url(/justice40-tool/main/static/roboto-mono-v5-latin-regular-a3246d29b40a8b0da142caea1bc84974.woff) format("woff"),url(/justice40-tool/main/static/roboto-mono-v5-latin-regular-215adb34128fcb20668b963ec7926ef2.ttf) format("truetype")}@font-face{font-display:fallback;font-family:Roboto Mono Web;font-style:normal;font-weight:700;src:url(/justice40-tool/main/static/roboto-mono-v5-latin-700-936869ba46988c2387481468c25686bc.woff2) format("woff2"),url(/justice40-tool/main/static/roboto-mono-v5-latin-700-d85b43c39f4620dfa5b47b16e842c8a9.woff) format("woff"),url(/justice40-tool/main/static/roboto-mono-v5-latin-700-e57caf7ea634a258a9b2e06137755ec6.ttf) format("truetype")}@font-face{font-display:fallback;font-family:Roboto Mono Web;font-style:italic;font-weight:300;src:url(/justice40-tool/main/static/roboto-mono-v5-latin-300italic-09cc62a8fbd32c8b28124eecc228bc36.woff2) format("woff2"),url(/justice40-tool/main/static/roboto-mono-v5-latin-300italic-1b8d46dae0a077f999ae901c213dcbd2.woff) format("woff"),url(/justice40-tool/main/static/roboto-mono-v5-latin-300italic-93511dbad22ceb584f036ab660a563ba.ttf) format("truetype")}@font-face{font-display:fallback;font-family:Roboto Mono Web;font-style:italic;font-weight:400;src:url(/justice40-tool/main/static/roboto-mono-v5-latin-italic-087069a9f454e2581ed6a7a84b142327.woff2) format("woff2"),url(/justice40-tool/main/static/roboto-mono-v5-latin-italic-756750acefdb77704c08c235510f6e4c.woff) format("woff"),url(/justice40-tool/main/static/roboto-mono-v5-latin-italic-4863add4d566a55b6a971780f0328e05.ttf) format("truetype")}@font-face{font-display:fallback;font-family:Roboto Mono Web;font-style:italic;font-weight:700;src:url(/justice40-tool/main/static/roboto-mono-v5-latin-700italic-5a8f743549cc6cef9a001f0c21d55e5b.woff2) format("woff2"),url(/justice40-tool/main/static/roboto-mono-v5-latin-700italic-0a6791447401e0ebd70d98b0e4ecc5ff.woff) format("woff"),url(/justice40-tool/main/static/roboto-mono-v5-latin-700italic-da78bf0b1b435f40ca198525361d3b84.ttf) format("truetype")}@font-face{font-display:fallback;font-family:Source Sans Pro Web;font-style:normal;font-weight:300;src:url(/justice40-tool/main/static/sourcesanspro-light-webfont-e5f1a42e1c2b97e2587641dea75c548f.woff2) format("woff2"),url(/justice40-tool/main/static/sourcesanspro-light-webfont-70e7d719e258c9a7e68b19236a49bcc4.woff) format("woff"),url(/justice40-tool/main/static/sourcesanspro-light-webfont-d6f73cf7210d3b5c2fa95f00e38396a2.ttf) format("truetype")}@font-face{font-display:fallback;font-family:Source Sans Pro Web;font-style:normal;font-weight:400;src:url(/justice40-tool/main/static/sourcesanspro-regular-webfont-e7bccfa631a0017f31da9e0c2fd2627b.woff2) format("woff2"),url(/justice40-tool/main/static/sourcesanspro-regular-webfont-c4e25ab10baa365dfc6620c04ea9202b.woff) format("woff"),url(/justice40-tool/main/static/sourcesanspro-regular-webfont-5acfe0d0f69444765ba489e2091c95cc.ttf) format("truetype")}@font-face{font-display:fallback;font-family:Source Sans Pro Web;font-style:normal;font-weight:700;src:url(/justice40-tool/main/static/sourcesanspro-bold-webfont-4a1efbe82eaa84ff89ed34a0bd374991.woff2) format("woff2"),url(/justice40-tool/main/static/sourcesanspro-bold-webfont-e7e051e1bc64fa89931760a52d0c8bd3.woff) format("woff"),url(/justice40-tool/main/static/sourcesanspro-bold-webfont-9a76932911f04be25044af15855ffeb2.ttf) format("truetype")}@font-face{font-display:fallback;font-family:Source Sans Pro Web;font-style:italic;font-weight:300;src:url(/justice40-tool/main/static/sourcesanspro-lightitalic-webfont-9c5bf2190b2471c2f22b96bb92249ecb.woff2) format("woff2"),url(/justice40-tool/main/static/sourcesanspro-lightitalic-webfont-455d120362f79aa219d465e39fc66e82.woff) format("woff"),url(/justice40-tool/main/static/sourcesanspro-lightitalic-webfont-43ea3d39e6aa59fb6f1b4f974dfdc76b.ttf) format("truetype")}@font-face{font-display:fallback;font-family:Source Sans Pro Web;font-style:italic;font-weight:400;src:url(/justice40-tool/main/static/sourcesanspro-italic-webfont-c6c9fd228e87eefaf1d4e4d8f439760b.woff2) format("woff2"),url(/justice40-tool/main/static/sourcesanspro-italic-webfont-0aaeabbaba38453310786c387d4a052a.woff) format("woff"),url(/justice40-tool/main/static/sourcesanspro-italic-webfont-3efee318468995ac04affb6a907a6b03.ttf) format("truetype")}@font-face{font-display:fallback;font-family:Source Sans Pro Web;font-style:italic;font-weight:700;src:url(/justice40-tool/main/static/sourcesanspro-bolditalic-webfont-ef69f0d737406260319a2c5ec73da3a8.woff2) format("woff2"),url(/justice40-tool/main/static/sourcesanspro-bolditalic-webfont-73021f1aabd43f50e16a6a0771c45689.woff) format("woff"),url(/justice40-tool/main/static/sourcesanspro-bolditalic-webfont-af3dd40e0ac8e2ca50ac3943d5d7014d.ttf) format("truetype")}@font-face{font-display:fallback;font-family:Merriweather Web;font-style:normal;font-weight:300;src:url(/justice40-tool/main/static/Latin-Merriweather-Light-f347d9834a5feacbcefb85461ac77e70.woff2) format("woff2"),url(/justice40-tool/main/static/Latin-Merriweather-Light-7b2a6350fcb212efe521caae9cf0d29b.woff) format("woff"),url(/justice40-tool/main/static/Latin-Merriweather-Light-30dd683b4fcfe95b030b8c07c3482121.ttf) format("truetype")}@font-face{font-display:fallback;font-family:Merriweather Web;font-style:normal;font-weight:400;src:url(/justice40-tool/main/static/Latin-Merriweather-Regular-a30c1b8fcb759e9fe728873f84044227.woff2) format("woff2"),url(/justice40-tool/main/static/Latin-Merriweather-Regular-add503b41601df15b97ed98d3ed46c95.woff) format("woff"),url(/justice40-tool/main/static/Latin-Merriweather-Regular-43dc3080728216519bf08e82557e1912.ttf) format("truetype")}@font-face{font-display:fallback;font-family:Merriweather Web;font-style:normal;font-weight:700;src:url(/justice40-tool/main/static/Latin-Merriweather-Bold-9caa42f21e4ae090b755f99d14c3a2fd.woff2) format("woff2"),url(/justice40-tool/main/static/Latin-Merriweather-Bold-b6cbc321678701d773c6f86934c55901.woff) format("woff"),url(/justice40-tool/main/static/Latin-Merriweather-Bold-b87366633b1019e8c63c28ce979a1d44.ttf) format("truetype")}@font-face{font-display:fallback;font-family:Merriweather Web;font-style:italic;font-weight:300;src:url(/justice40-tool/main/static/Latin-Merriweather-LightItalic-506121dad559538d44eda8fe540f9224.woff2) format("woff2"),url(/justice40-tool/main/static/Latin-Merriweather-LightItalic-8a239a410a47b6192e059fcf26556101.woff) format("woff"),url(/justice40-tool/main/static/Latin-Merriweather-LightItalic-26ebdd3b8f1d039bc3dd95691ce27164.ttf) format("truetype")}@font-face{font-display:fallback;font-family:Merriweather Web;font-style:italic;font-weight:400;src:url(/justice40-tool/main/static/Latin-Merriweather-Italic-c63d4066b0f133fc519f0504abf6ac55.woff2) format("woff2"),url(/justice40-tool/main/static/Latin-Merriweather-Italic-80d8a9aff0d8bdeb966d443e9cfaa19d.woff) format("woff"),url(/justice40-tool/main/static/Latin-Merriweather-Italic-b60043e65fa5cbcedb809c19a4cdd4d6.ttf) format("truetype")}@font-face{font-display:fallback;font-family:Merriweather Web;font-style:italic;font-weight:700;src:url(/justice40-tool/main/static/Latin-Merriweather-BoldItalic-dc8b76b44a8a6e5fad1c8c46568a5951.woff2) format("woff2"),url(/justice40-tool/main/static/Latin-Merriweather-BoldItalic-a0bcf832ed51501c237c07d8909087e6.woff) format("woff"),url(/justice40-tool/main/static/Latin-Merriweather-BoldItalic-4d74f3bda45f5aba1abf8d2a12313b56.ttf) format("truetype")}.usa-focus,[contentEditable=true]:focus,[href]:focus,[tabindex]:focus,button:not([disabled]):focus,iframe:focus,input:not([disabled]):focus,select:not([disabled]):focus,textarea:not([disabled]):focus{outline:.25rem solid #2491ff;outline-offset:0}html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}html{-webkit-font-feature-settings:"kern" 1;font-feature-settings:"kern" 1;font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-kerning:normal;font-size:100%}address,cite,dfn,var{font-style:normal}/*! uswds @version */body{background-color:#fff;color:#1b1b1b;overflow-x:hidden}.usa-sr-only{left:-999em;position:absolute;right:auto}.usa-button{-webkit-appearance:none;appearance:none;background-color:#005ea2;border:0;border-radius:.25rem;color:#fff;cursor:pointer;display:inline-block;font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.06rem;font-weight:700;line-height:.9;margin-right:.5rem;padding:.75rem 1.25rem;text-align:center;text-decoration:none;width:100%}@media (min-width:30em){.usa-button{width:auto}}.usa-button:visited{color:#fff}.usa-button.usa-button--hover,.usa-button:hover{background-color:#1a4480;border-bottom:0;color:#fff;text-decoration:none}.usa-button.usa-button--active,.usa-button:active{background-color:#162e51;color:#fff}.usa-button:not([disabled]).usa-focus,.usa-button:not([disabled]):focus{outline-offset:.25rem}.usa-button:disabled{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;background-color:#c9c9c9;color:#fff;pointer-events:none}.usa-button:disabled.usa-button--active,.usa-button:disabled.usa-button--hover,.usa-button:disabled.usa-focus,.usa-button:disabled:active,.usa-button:disabled:focus,.usa-button:disabled:hover{background-color:#c9c9c9;border:0;box-shadow:none}.usa-button--accent-cool,.usa-button--accent-cool:visited{background-color:#00bde3;color:#1b1b1b}.usa-button--accent-cool.usa-button--hover,.usa-button--accent-cool:hover{background-color:#28a0cb;color:#1b1b1b}.usa-button--accent-cool.usa-button--active,.usa-button--accent-cool:active{background-color:#07648d;color:#fff}.usa-button--accent-warm,.usa-button--accent-warm:visited{background-color:#fa9441;color:#1b1b1b}.usa-button--accent-warm.usa-button--hover,.usa-button--accent-warm:hover{background-color:#c05600;color:#fff}.usa-button--accent-warm.usa-button--active,.usa-button--accent-warm:active{background-color:#775540;color:#fff}.usa-button--outline{background-color:transparent;box-shadow:inset 0 0 0 2px #005ea2;color:#005ea2}.usa-button--outline:visited{color:#005ea2}.usa-button--outline.usa-button--hover,.usa-button--outline:hover{background-color:transparent;box-shadow:inset 0 0 0 2px #1a4480;color:#1a4480}.usa-button--outline.usa-button--active,.usa-button--outline:active{background-color:transparent;box-shadow:inset 0 0 0 2px #162e51;color:#162e51}.usa-button--outline.usa-button--inverse{box-shadow:inset 0 0 0 2px #dfe1e2;color:#dfe1e2}.usa-button--outline.usa-button--inverse:visited{color:#dfe1e2}.usa-button--outline.usa-button--inverse.usa-button--hover,.usa-button--outline.usa-button--inverse:hover{box-shadow:inset 0 0 0 2px #f0f0f0;color:#f0f0f0}.usa-button--outline.usa-button--inverse.usa-button--active,.usa-button--outline.usa-button--inverse:active{background-color:transparent;box-shadow:inset 0 0 0 2px #fff;color:#fff}.usa-button--outline.usa-button--inverse.usa-button--unstyled{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:subpixel-antialiased;background-color:transparent;border:0;border-radius:0;box-shadow:none;color:#005ea2;color:#dfe1e2;font-weight:400;margin:0;padding:0;text-align:left;text-decoration:underline}.usa-button--outline.usa-button--inverse.usa-button--unstyled:visited{color:#54278f}.usa-button--outline.usa-button--inverse.usa-button--unstyled:hover{color:#1a4480}.usa-button--outline.usa-button--inverse.usa-button--unstyled:active{color:#162e51}.usa-button--outline.usa-button--inverse.usa-button--unstyled:focus{outline:.25rem solid #2491ff;outline-offset:0}.usa-button--outline.usa-button--inverse.usa-button--unstyled:active,.usa-button--outline.usa-button--inverse.usa-button--unstyled:hover{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:subpixel-antialiased;background-color:transparent;box-shadow:none;text-decoration:underline}.usa-button--outline.usa-button--inverse.usa-button--unstyled:visited{color:#dfe1e2}.usa-button--outline.usa-button--inverse.usa-button--unstyled.usa-button--hover,.usa-button--outline.usa-button--inverse.usa-button--unstyled:hover{color:#f0f0f0}.usa-button--outline.usa-button--inverse.usa-button--unstyled.usa-button--active,.usa-button--outline.usa-button--inverse.usa-button--unstyled:active{color:#fff}.usa-button--base{background-color:#71767a;color:#fff}.usa-button--base.usa-button--hover,.usa-button--base:hover{background-color:#565c65;color:#fff}.usa-button--base.usa-button--active,.usa-button--base:active{background-color:#3d4551;color:#fff}.usa-button--secondary{background-color:#d83933;color:#fff}.usa-button--secondary.usa-button--hover,.usa-button--secondary:hover{background-color:#b50909;color:#fff}.usa-button--secondary.usa-button--active,.usa-button--secondary:active{background-color:#8b0a03;color:#fff}.usa-button--big{border-radius:.25rem;font-size:1.46rem;padding:1rem 1.5rem}.usa-button--disabled{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;background-color:#c9c9c9;color:#fff;pointer-events:none}.usa-button--disabled.usa-button--active,.usa-button--disabled.usa-button--hover,.usa-button--disabled.usa-focus,.usa-button--disabled:active,.usa-button--disabled:focus,.usa-button--disabled:hover{background-color:#c9c9c9;border:0;box-shadow:none}.usa-button--outline-disabled,.usa-button--outline-inverse-disabled,.usa-button--outline-inverse:disabled,.usa-button--outline:disabled{background-color:transparent;pointer-events:none}.usa-button--outline-disabled.usa-button--active,.usa-button--outline-disabled.usa-button--hover,.usa-button--outline-disabled.usa-focus,.usa-button--outline-disabled:active,.usa-button--outline-disabled:focus,.usa-button--outline-disabled:hover,.usa-button--outline-inverse-disabled.usa-button--active,.usa-button--outline-inverse-disabled.usa-button--hover,.usa-button--outline-inverse-disabled.usa-focus,.usa-button--outline-inverse-disabled:active,.usa-button--outline-inverse-disabled:focus,.usa-button--outline-inverse-disabled:hover,.usa-button--outline-inverse:disabled.usa-button--active,.usa-button--outline-inverse:disabled.usa-button--hover,.usa-button--outline-inverse:disabled.usa-focus,.usa-button--outline-inverse:disabled:active,.usa-button--outline-inverse:disabled:focus,.usa-button--outline-inverse:disabled:hover,.usa-button--outline:disabled.usa-button--active,.usa-button--outline:disabled.usa-button--hover,.usa-button--outline:disabled.usa-focus,.usa-button--outline:disabled:active,.usa-button--outline:disabled:focus,.usa-button--outline:disabled:hover{background-color:transparent;border:0}.usa-button--outline-disabled,.usa-button--outline:disabled{box-shadow:inset 0 0 0 2px #c9c9c9;color:#c9c9c9}.usa-button--outline-disabled.usa-button--inverse,.usa-button--outline:disabled.usa-button--inverse{background-color:transparent;box-shadow:inset 0 0 0 2px #71767a;color:#71767a}.usa-button--unstyled{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:subpixel-antialiased;background-color:transparent;border:0;border-radius:0;box-shadow:none;color:#005ea2;font-weight:400;margin:0;padding:0;text-align:left;text-decoration:underline}.usa-button--unstyled:visited{color:#54278f}.usa-button--unstyled:hover{color:#1a4480}.usa-button--unstyled:active{color:#162e51}.usa-button--unstyled:focus{outline:.25rem solid #2491ff;outline-offset:0}.usa-button--unstyled:active,.usa-button--unstyled:hover{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:subpixel-antialiased;background-color:transparent;box-shadow:none;text-decoration:underline}.usa-embed-container embed,.usa-embed-container iframe,.usa-embed-container object{height:100%;left:0;position:absolute;top:0;width:100%}.usa-embed-container{height:0;max-width:100%;overflow:hidden;padding-bottom:56.25%;position:relative}img{max-width:100%}.usa-media-link{display:inline-block;line-height:0}.usa-combo-box__input,.usa-combo-box__list,.usa-fieldset,.usa-hint,.usa-input,.usa-range,.usa-select,.usa-textarea{font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.06rem;line-height:1.3}.usa-combo-box__input,.usa-input,.usa-range,.usa-select,.usa-textarea{-webkit-appearance:none;appearance:none;border:1px solid #565c65;border-radius:0;color:#1b1b1b;display:block;height:2.5rem;margin-top:.5rem;max-width:30rem;padding:.5rem;width:100%}.usa-input--success.usa-combo-box__input,.usa-input--success.usa-input,.usa-input--success.usa-range,.usa-input--success.usa-select,.usa-input--success.usa-textarea{border:.25rem solid #00a91c}.usa-fieldset{border:none;margin:0;padding:0}.usa-form-group--error{border-left:.25rem solid #b50909;margin-top:2rem;padding-left:1rem;position:relative}@media (min-width:64em){.usa-form-group--error{margin-left:-1.25rem}}.usa-error-message{color:#b50909;display:block;font-weight:700;padding-bottom:.25rem;padding-top:.25rem}.usa-hint{color:#71767a}.usa-label,.usa-legend{display:block;font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.06rem;font-weight:400;line-height:1.3;margin-top:1.5rem;max-width:30rem}.usa-label--error{font-weight:700;margin-top:0}.usa-hint--required,.usa-label--required{color:#b50909}.usa-legend--large{font-size:2.13rem;font-weight:700;margin-top:1rem}abbr[title=required]{text-decoration:none}.usa-input-list{list-style-type:none;margin-bottom:0;margin-top:0;padding-left:0}.usa-input-list li{line-height:1.3}.usa-prose .usa-input-list{list-style-type:none;margin-bottom:0;margin-top:0;padding-left:0}.usa-prose .usa-input-list li{line-height:1.3}.usa-checkbox__input,.usa-radio__input{left:-999em;position:absolute;right:auto}.lt-ie9 .usa-checkbox__input,.lt-ie9 .usa-radio__input{border:0;float:left;margin:.25rem .25rem 0 0;position:static;width:auto}.usa-checkbox__label,.usa-radio__label{cursor:pointer;display:inherit;font-weight:400;margin-top:.75rem;padding-left:2rem;position:relative;text-indent:-2rem}.usa-checkbox__label:before,.usa-radio__label:before{background:#fff;content:" ";display:inline-block;left:2px;position:relative;vertical-align:middle\0 }.usa-checkbox__label:before{border-radius:2px;height:1.25rem;width:1.25rem}.usa-radio__label:before{border-radius:99rem;height:1.25rem;width:1.25rem}.usa-checkbox__label:before,.usa-radio__label:before{box-shadow:0 0 0 2px #71767a;line-height:1.25rem;margin-right:.75rem;text-indent:0}.usa-checkbox__input:checked+.usa-checkbox__label:before,.usa-radio__input:checked+.usa-radio__label:before{background-color:#005ea2;box-shadow:0 0 0 2px #005ea2}.usa-radio__input:checked+.usa-radio__label:before{box-shadow:0 0 0 2px #005ea2,inset 0 0 0 2px #fff}@media print{.usa-radio__input:checked+.usa-radio__label:before{box-shadow:inset 0 0 0 2px #fff,inset 0 0 0 1rem #005ea2,0 0 0 2px #005ea2}}.usa-checkbox__input:checked+.usa-checkbox__label:before,.usa-checkbox__input:checked:disabled+.usa-checkbox__label:before{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2NSA1MCI+PHBhdGggZmlsbD0iI0ZGRiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJtNjMuMjY4IDcuMDYzLTUuNjE2LTUuNjFDNTYuODgyLjY4NSA1NS45NDYuMyA1NC44NDUuM3MtMi4wMzguMzg1LTIuODA4IDEuMTU1TDI0Ljk1MSAyOC41NTIgMTIuODEgMTYuMzg1Yy0uNzctLjc3LTEuNzA3LTEuMTU1LTIuODA4LTEuMTU1LTEuMSAwLTIuMDM3LjM4NS0yLjgwNyAxLjE1NGwtNS42MTYgNS42MUMuODEgMjIuNzY0LjQyNSAyMy43LjQyNSAyNC44cy4zODUgMi4wMzUgMS4xNTUgMi44MDVsMTQuOTQ3IDE0LjkzIDUuNjE2IDUuNjFjLjc3Ljc3IDEuNzA2IDEuMTU0IDIuODA3IDEuMTU0czIuMDM4LS4zODQgMi44MDgtMS4xNTRsNS42MTYtNS42MSAyOS44OTQtMjkuODZjLjc3LS43NyAxLjE1Ny0xLjcwNyAxLjE1Ny0yLjgwNSAwLTEuMTAxLS4zODUtMi4wMzYtMS4xNTYtMi44MDVsLS4wMDEtLjAwMnoiLz48L3N2Zz4=),linear-gradient(transparent,transparent);background-position:50%;background-repeat:no-repeat;background-size:.75rem auto}@media print{.usa-checkbox__input:checked+.usa-checkbox__label:before,.usa-checkbox__input:checked:disabled+.usa-checkbox__label:before{background-color:#fff;background-image:none;content:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMCAxMSI+PHBhdGggZmlsbD0iIzE3MTcxNyIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMTUuNzgzIDEuMjQyIDE0LjczLjIxMkEuNzI1LjcyNSAwIDAgMCAxNC4yMDQgMGEuNzI1LjcyNSAwIDAgMC0uNTI3LjIxMkw4LjYgNS4xODkgNi4zMjIgMi45NTVhLjcyNC43MjQgMCAwIDAtLjUyNi0uMjEzLjcyNS43MjUgMCAwIDAtLjUyNi4yMTJsLTEuMDUzIDEuMDNBLjY5NS42OTUgMCAwIDAgNCA0LjVjMCAuMjAyLjA3Mi4zNzQuMjE3LjUxNWwyLjgwMiAyLjc0MyAxLjA1MyAxLjAzYy4xNDUuMTQxLjMyLjIxMi41MjcuMjEyLjIwNiAwIC4zODItLjA3LjUyNi0uMjEybDEuMDUzLTEuMDMgNS42MDUtNS40ODVBLjY5NS42OTUgMCAwIDAgMTYgMS43NThhLjY5NC42OTQgMCAwIDAtLjIxNy0uNTE1eiIvPjwvc3ZnPg==);text-indent:0}}.usa-radio__input:focus+.usa-radio__label:before{outline:.25rem solid #2491ff;outline-offset:.25rem}.usa-checkbox__input:disabled+.usa-checkbox__label,.usa-radio__input:disabled+.usa-radio__label{color:#c9c9c9;cursor:not-allowed}.usa-checkbox__input:focus+.usa-checkbox__label:before{outline:.25rem solid #2491ff;outline-offset:0}.usa-checkbox__input:disabled+.usa-checkbox__label:before,.usa-radio__input:disabled+.usa-radio__label:before{background:#e6e6e6;box-shadow:0 0 0 2px #c9c9c9;cursor:not-allowed}.usa-checkbox__input--tile+.usa-checkbox__label,.usa-radio__input--tile+.usa-radio__label{border:2px solid #dfe1e2;border-radius:.25rem;margin:.5rem 0;padding:.75rem 1rem .75rem 2.5rem}.usa-checkbox__input--tile:checked+.usa-checkbox__label,.usa-radio__input--tile:checked+.usa-radio__label{background-color:#d9e8f6;border-color:#73b3e7}.usa-checkbox__label-description,.usa-radio__label-description{display:block;font-size:.93rem;margin-top:.5rem;text-indent:0}.usa-memorable-date{display:flex}.usa-memorable-date [type=number]{-moz-appearance:textfield}.usa-memorable-date [type=number]::-webkit-inner-spin-button{-webkit-appearance:none;appearance:none}.usa-memorable-date [type=number]::-webkit-contacts-auto-fill-button{display:none!important;height:0;margin:0;pointer-events:none;visibility:hidden;width:0}.usa-form-group--day,.usa-form-group--month,.usa-form-group--year{flex:0 1 auto;margin-right:1rem;width:3rem}.usa-form-group--year{width:4.5rem}.usa-select{-webkit-appearance:none;appearance:none;background-color:#fff;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGQ9Ik0xMiA1LjgzIDE1LjE3IDlsMS40MS0xLjQxTDEyIDMgNy40MSA3LjU5IDguODMgOSAxMiA1Ljgzem0wIDEyLjM0TDguODMgMTVsLTEuNDEgMS40MUwxMiAyMWw0LjU5LTQuNTlMMTUuMTcgMTUgMTIgMTguMTd6Ii8+PC9zdmc+),linear-gradient(transparent,transparent);background-position:right .5rem center;background-repeat:no-repeat;background-size:1.25rem;padding-right:2rem}.usa-select::-ms-expand{display:none}.usa-select:-webkit-autofill{-webkit-appearance:menulist;appearance:menulist}.usa-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #000}[type=file]{border:none;margin-top:.5rem;padding-left:0;padding-top:.2rem}.usa-file-input{display:block;max-width:30rem;width:100%}.usa-file-input__target{border:1px dashed #a9aeb1;display:block;font-size:.93rem;margin-top:.5rem;position:relative;text-align:center;width:100%}.usa-file-input__target:hover{border-color:#71767a}.usa-file-input__target.has-invalid-file{border-color:#fa9441}.usa-file-input__accepted-files-message{font-weight:700;margin:-1.5rem 0 1.5rem;pointer-events:none;position:relative;z-index:3}.has-invalid-file .usa-file-input__accepted-files-message{color:#b50909}.usa-file-input__choose{color:#005ea2;font-weight:400;text-decoration:underline}.usa-file-input__choose:visited{color:#54278f}.usa-file-input__choose:hover{color:#1a4480}.usa-file-input__choose:active{color:#162e51}.usa-file-input__choose:focus{outline:.25rem solid #2491ff;outline-offset:0}.usa-file-input__instructions{display:inline-block;padding:2rem 1rem;pointer-events:none;position:relative;z-index:3}.usa-file-input__instructions.display-none{display:none}.usa-file-input__box{background:#fff;height:100%;left:0;pointer-events:none;position:absolute;top:0;width:100%;z-index:2}.usa-file-input .usa-file-input__input[type]{cursor:pointer;height:100%;left:0;margin:0;max-width:none;padding:.5rem;position:absolute;text-indent:-999em;top:0;width:100%;z-index:1}.usa-file-input .usa-file-input__input[type]::-webkit-file-upload-button{display:none}.usa-file-input--drag .usa-file-input__target{border-color:#005ea2}.usa-file-input--drag .usa-file-input__box{background-color:#d9e8f6!important}.usa-file-input--drag .usa-file-input__preview{opacity:.1}.usa-file-input__preview-heading{font-weight:700;justify-content:space-between;padding:.5rem}.usa-file-input__preview,.usa-file-input__preview-heading{align-items:center;background:#d9e8f6;display:flex;pointer-events:none;position:relative;z-index:3}.usa-file-input__preview{word-wrap:anywhere;font-size:.87rem;margin-top:1px;padding:.25rem .5rem;text-align:left}.usa-file-input__preview:last-child{margin-bottom:-1.5rem}.usa-file-input__preview-image{border:none;display:block;height:2.5rem;margin-right:.5rem;-o-object-fit:contain;object-fit:contain;width:2.5rem}.usa-file-input__preview-image.is-loading{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMCIgdmlld0JveD0iMCAwIDEyOCAxMjgiIHhtbDpzcGFjZT0icHJlc2VydmUiPjxnPjxwYXRoIGQ9Ik0zOC41MiAzMy4zNyAyMS4zNiAxNi4yQTYzLjYgNjMuNiAwIDAgMSA1OS41LjE2djI0LjNhMzkuNSAzOS41IDAgMCAwLTIwLjk4IDguOTJ6Ii8+PHBhdGggZmlsbD0ic2lsdmVyIiBmaWxsLW9wYWNpdHk9Ii4yNSIgZD0iTTY3LjY0MiAyNC4zMjQgNjcuNjQ5LjA1YTYzLjYgNjMuNiAwIDAgMSAzOC4zMSAxNS42MjdMODguNzc4IDMyLjg2YTM5LjUgMzkuNSAwIDAgMC0yMS4xNDItOC41Mjh6TTk0LjYzIDM4LjUybDE3LjE3LTE3LjE2YTYzLjYgNjMuNiAwIDAgMSAxNi4wNCAzOC4xNGgtMjQuM2EzOS41IDM5LjUgMCAwIDAtOC45Mi0yMC45OHpNMTAzLjY3NiA2Ny42NDJsMjQuMjc1LjAwN2E2My42IDYzLjYgMCAwIDEtMTUuNjI3IDM4LjMxTDk1LjE0IDg4Ljc3OGEzOS41IDM5LjUgMCAwIDAgOC41MjgtMjEuMTQyek04OS40OCA5NC42M2wxNy4xNiAxNy4xN2E2My42IDYzLjYgMCAwIDEtMzguMTQgMTYuMDR2LTI0LjNhMzkuNSAzOS41IDAgMCAwIDIwLjk4LTguOTJ6TTYwLjM1OCAxMDMuNjc2bC0uMDA3IDI0LjI3NWE2My42IDYzLjYgMCAwIDEtMzguMzEtMTUuNjI3TDM5LjIyMiA5NS4xNGEzOS41IDM5LjUgMCAwIDAgMjEuMTQyIDguNTI4ek0zMy4zNyA4OS40OCAxNi4yIDEwNi42NEE2My42IDYzLjYgMCAwIDEgLjE2IDY4LjVoMjQuM2EzOS41IDM5LjUgMCAwIDAgOC45MiAyMC45OHpNMjQuMzI0IDYwLjM1OC4wNSA2MC4zNTFhNjMuNiA2My42IDAgMCAxIDE1LjYyNy0zOC4zMUwzMi44NiAzOS4yMjJhMzkuNSAzOS41IDAgMCAwLTguNTI4IDIxLjE0MnoiLz48YW5pbWF0ZVRyYW5zZm9ybSBhdHRyaWJ1dGVOYW1lPSJ0cmFuc2Zvcm0iIGNhbGNNb2RlPSJkaXNjcmV0ZSIgZHVyPSI3MjBtcyIgcmVwZWF0Q291bnQ9ImluZGVmaW5pdGUiIHR5cGU9InJvdGF0ZSIgdmFsdWVzPSIwIDY0IDY0OzQ1IDY0IDY0OzkwIDY0IDY0OzEzNSA2NCA2NDsxODAgNjQgNjQ7MjI1IDY0IDY0OzI3MCA2NCA2NDszMTUgNjQgNjQiLz48L2c+PC9zdmc+),linear-gradient(transparent,transparent);background-position:50%;background-repeat:no-repeat;background-size:2rem}.usa-file-input__preview-image--excel,.usa-file-input__preview-image--generic,.usa-file-input__preview-image--pdf,.usa-file-input__preview-image--video,.usa-file-input__preview-image--word{background-position:50%;background-repeat:no-repeat;background-size:1.5rem}.usa-file-input__preview-image--pdf{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9IiMwNzY0OGQiIHZpZXdCb3g9IjAgMCAzODQgNTEyIj48cGF0aCBkPSJNMTgxLjkgMjU2LjFjLTUtMTYtNC45LTQ2LjktMi00Ni45IDguNCAwIDcuNiAzNi45IDIgNDYuOXptLTEuNyA0Ny4yYy03LjcgMjAuMi0xNy4zIDQzLjMtMjguNCA2Mi43IDE4LjMtNyAzOS0xNy4yIDYyLjktMjEuOS0xMi43LTkuNi0yNC45LTIzLjQtMzQuNS00MC44ek04Ni4xIDQyOC4xYzAgLjggMTMuMi01LjQgMzQuOS00MC4yLTYuNyA2LjMtMjkuMSAyNC41LTM0LjkgNDAuMnpNMjQ4IDE2MGgxMzZ2MzI4YzAgMTMuMy0xMC43IDI0LTI0IDI0SDI0Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNFYyNEMwIDEwLjcgMTAuNyAwIDI0IDBoMjAwdjEzNmMwIDEzLjIgMTAuOCAyNCAyNCAyNHptLTggMTcxLjhjLTIwLTEyLjItMzMuMy0yOS00Mi43LTUzLjggNC41LTE4LjUgMTEuNi00Ni42IDYuMi02NC4yLTQuNy0yOS40LTQyLjQtMjYuNS00Ny44LTYuOC01IDE4LjMtLjQgNDQuMSA4LjEgNzctMTEuNiAyNy42LTI4LjcgNjQuNi00MC44IDg1LjgtLjEgMC0uMS4xLS4yLjEtMjcuMSAxMy45LTczLjYgNDQuNS01NC41IDY4IDUuNiA2LjkgMTYgMTAgMjEuNSAxMCAxNy45IDAgMzUuNy0xOCA2MS4xLTYxLjggMjUuOC04LjUgNTQuMS0xOS4xIDc5LTIzLjIgMjEuNyAxMS44IDQ3LjEgMTkuNSA2NCAxOS41IDI5LjIgMCAzMS4yLTMyIDE5LjctNDMuNC0xMy45LTEzLjYtNTQuMy05LjctNzMuNi03LjJ6TTM3NyAxMDUgMjc5IDdjLTQuNS00LjUtMTAuNi03LTE3LTdoLTZ2MTI4aDEyOHYtNi4xYzAtNi4zLTIuNS0xMi40LTctMTYuOXptLTc0LjEgMjU1LjNjNC4xLTIuNy0yLjUtMTEuOS00Mi44LTkgMzcuMSAxNS44IDQyLjggOSA0Mi44IDl6Ii8+PC9zdmc+),linear-gradient(transparent,transparent);background-repeat:no-repeat}.usa-file-input__preview-image--generic{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9IiMwNzY0OGQiIHZpZXdCb3g9IjAgMCAzODQgNTEyIj48cGF0aCBkPSJNMjI0IDEzNlYwSDI0QzEwLjcgMCAwIDEwLjcgMCAyNHY0NjRjMCAxMy4zIDEwLjcgMjQgMjQgMjRoMzM2YzEzLjMgMCAyNC0xMC43IDI0LTI0VjE2MEgyNDhjLTEzLjIgMC0yNC0xMC44LTI0LTI0em0xNjAtMTQuMXY2LjFIMjU2VjBoNi4xYzYuNCAwIDEyLjUgMi41IDE3IDdsOTcuOSA5OGM0LjUgNC41IDcgMTAuNiA3IDE2Ljl6Ii8+PC9zdmc+),linear-gradient(transparent,transparent);background-repeat:no-repeat}.usa-file-input__preview-image--word{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9IiMwNzY0OGQiIHZpZXdCb3g9IjAgMCAzODQgNTEyIj48cGF0aCBkPSJNMjI0IDEzNlYwSDI0QzEwLjcgMCAwIDEwLjcgMCAyNHY0NjRjMCAxMy4zIDEwLjcgMjQgMjQgMjRoMzM2YzEzLjMgMCAyNC0xMC43IDI0LTI0VjE2MEgyNDhjLTEzLjIgMC0yNC0xMC44LTI0LTI0em01Ny4xIDEyMEgzMDVjNy43IDAgMTMuNCA3LjEgMTEuNyAxNC43bC0zOCAxNjhjLTEuMiA1LjUtNi4xIDkuMy0xMS43IDkuM2gtMzhjLTUuNSAwLTEwLjMtMy44LTExLjYtOS4xLTI1LjgtMTAzLjUtMjAuOC04MS4yLTI1LjYtMTEwLjVoLS41Yy0xLjEgMTQuMy0yLjQgMTcuNC0yNS42IDExMC41LTEuMyA1LjMtNi4xIDkuMS0xMS42IDkuMUgxMTdjLTUuNiAwLTEwLjUtMy45LTExLjctOS40bC0zNy44LTE2OGMtMS43LTcuNSA0LTE0LjYgMTEuNy0xNC42aDI0LjVjNS43IDAgMTAuNyA0IDExLjggOS43IDE1LjYgNzggMjAuMSAxMDkuNSAyMSAxMjIuMiAxLjYtMTAuMiA3LjMtMzIuNyAyOS40LTEyMi43IDEuMy01LjQgNi4xLTkuMSAxMS43LTkuMWgyOS4xYzUuNiAwIDEwLjQgMy44IDExLjcgOS4yIDI0IDEwMC40IDI4LjggMTI0IDI5LjYgMTI5LjQtLjItMTEuMi0yLjYtMTcuOCAyMS42LTEyOS4yIDEtNS42IDUuOS05LjUgMTEuNS05LjV6TTM4NCAxMjEuOXY2LjFIMjU2VjBoNi4xYzYuNCAwIDEyLjUgMi41IDE3IDdsOTcuOSA5OGM0LjUgNC41IDcgMTAuNiA3IDE2Ljl6Ii8+PC9zdmc+),linear-gradient(transparent,transparent);background-repeat:no-repeat}.usa-file-input__preview-image--excel{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9IiMwNzY0OGQiIHZpZXdCb3g9IjAgMCAzODQgNTEyIj48cGF0aCBkPSJNMjI0IDEzNlYwSDI0QzEwLjcgMCAwIDEwLjcgMCAyNHY0NjRjMCAxMy4zIDEwLjcgMjQgMjQgMjRoMzM2YzEzLjMgMCAyNC0xMC43IDI0LTI0VjE2MEgyNDhjLTEzLjIgMC0yNC0xMC44LTI0LTI0em02MC4xIDEwNi41TDIyNCAzMzZsNjAuMSA5My41YzUuMSA4LS42IDE4LjUtMTAuMSAxOC41aC0zNC45Yy00LjQgMC04LjUtMi40LTEwLjYtNi4zQzIwOC45IDQwNS41IDE5MiAzNzMgMTkyIDM3M2MtNi40IDE0LjgtMTAgMjAtMzYuNiA2OC44LTIuMSAzLjktNi4xIDYuMy0xMC41IDYuM0gxMTBjLTkuNSAwLTE1LjItMTAuNS0xMC4xLTE4LjVsNjAuMy05My41LTYwLjMtOTMuNWMtNS4yLTggLjYtMTguNSAxMC4xLTE4LjVoMzQuOGM0LjQgMCA4LjUgMi40IDEwLjYgNi4zIDI2LjEgNDguOCAyMCAzMy42IDM2LjYgNjguNSAwIDAgNi4xLTExLjcgMzYuNi02OC41IDIuMS0zLjkgNi4yLTYuMyAxMC42LTYuM0gyNzRjOS41LS4xIDE1LjIgMTAuNCAxMC4xIDE4LjR6TTM4NCAxMjEuOXY2LjFIMjU2VjBoNi4xYzYuNCAwIDEyLjUgMi41IDE3IDdsOTcuOSA5OGM0LjUgNC41IDcgMTAuNiA3IDE2Ljl6Ii8+PC9zdmc+),linear-gradient(transparent,transparent);background-repeat:no-repeat}.usa-file-input__preview-image--video{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9IiMwNzY0OGQiIHZpZXdCb3g9IjAgMCAzODQgNTEyIj48cGF0aCBkPSJNMzg0IDEyMS45NDFWMTI4SDI1NlYwaDYuMDU5YzYuMzY1IDAgMTIuNDcgMi41MjkgMTYuOTcxIDcuMDI5bDk3Ljk0MSA5Ny45NDFBMjQuMDA1IDI0LjAwNSAwIDAgMSAzODQgMTIxLjk0MXpNMjI0IDEzNlYwSDI0QzEwLjc0NSAwIDAgMTAuNzQ1IDAgMjR2NDY0YzAgMTMuMjU1IDEwLjc0NSAyNCAyNCAyNGgzMzZjMTMuMjU1IDAgMjQtMTAuNzQ1IDI0LTI0VjE2MEgyNDhjLTEzLjIgMC0yNC0xMC44LTI0LTI0em05NiAxNDQuMDE2djExMS45NjNjMCAyMS40NDUtMjUuOTQzIDMxLjk5OC00MC45NzEgMTYuOTcxTDIyNCAzNTMuOTQxVjM5MmMwIDEzLjI1NS0xMC43NDUgMjQtMjQgMjRIODhjLTEzLjI1NSAwLTI0LTEwLjc0NS0yNC0yNFYyODBjMC0xMy4yNTUgMTAuNzQ1LTI0IDI0LTI0aDExMmMxMy4yNTUgMCAyNCAxMC43NDUgMjQgMjR2MzguMDU5bDU1LjAyOS01NS4wMTNjMTUuMDExLTE1LjAxIDQwLjk3MS00LjQ5MSA0MC45NzEgMTYuOTd6Ii8+PC9zdmc+),linear-gradient(transparent,transparent);background-repeat:no-repeat}.usa-form-group--error .usa-file-input__target{border-color:#b50909;border-width:2px}.usa-file-input--disabled{pointer-events:none}.usa-file-input--disabled .usa-file-input__instructions{opacity:.5}.usa-file-input--disabled .usa-file-input__box{background-color:#e6e6e6}.usa-file-input--disabled .usa-file-input__input[type]{cursor:default}.usa-range{-webkit-appearance:none;appearance:none;border:none;padding-left:1px;width:100%}.usa-range:focus{outline:none}.usa-range:focus::-webkit-slider-thumb{background-color:#fff;box-shadow:0 0 0 2px #2491ff}.usa-range:focus::-moz-range-thumb{background-color:#fff;box-shadow:0 0 0 2px #2491ff}.usa-range:focus::-ms-thumb{background-color:#fff;box-shadow:0 0 0 2px #2491ff}.usa-range::-webkit-slider-runnable-track{background-color:#f0f0f0;border:1px solid #71767a;border-radius:99rem;cursor:pointer;height:1rem;width:100%}.usa-range::-moz-range-track{background-color:#f0f0f0;border:1px solid #71767a;border-radius:99rem;cursor:pointer;height:1rem;width:100%}.usa-range::-ms-track{background-color:#f0f0f0;border:1px solid #71767a;border-radius:99rem;cursor:pointer;height:1rem;width:100%}.usa-range::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;background:#f0f0f0;border:none;border-radius:99rem;box-shadow:0 0 0 2px #71767a;cursor:pointer;height:1.25rem;margin-top:-.19rem;width:1.25rem}.usa-range::-moz-range-thumb{background:#f0f0f0;border:none;border-radius:99rem;box-shadow:0 0 0 2px #71767a;cursor:pointer;height:1.25rem;width:1.25rem}.usa-range::-ms-thumb{background:#f0f0f0;border:none;border-radius:99rem;box-shadow:0 0 0 2px #71767a;cursor:pointer;height:1.25rem;width:1.25rem}.usa-range::-ms-fill-lower,.usa-range::-ms-fill-upper{background-color:#f0f0f0;border:1px solid #71767a;border-radius:99rem}.usa-textarea{height:10rem}.usa-input--error{border:.25rem solid #b50909}.usa-character-count__message{display:inline-block;padding-top:.25rem}.usa-character-count__message--invalid{color:#b50909;font-weight:700}.usa-combo-box{max-width:30rem;position:relative}.usa-combo-box--pristine .usa-combo-box__input{padding-right:calc(5em + 4px)}.usa-combo-box--pristine .usa-combo-box__input::-ms-clear{display:none}.usa-combo-box--pristine .usa-combo-box__clear-input{display:block}.usa-combo-box__input{-webkit-appearance:none;appearance:none;margin-bottom:0;max-width:none;padding-right:calc(2.5em + 3px)}button.usa-combo-box__clear-input:focus,button.usa-combo-box__toggle-list:focus{outline-offset:-4px}.usa-combo-box__clear-input__wrapper:focus,.usa-combo-box__toggle-list__wrapper:focus{outline:0}.usa-combo-box__clear-input,.usa-combo-box__toggle-list{background-color:transparent;background-position:50%;background-size:auto 1.5rem;border:0;bottom:1px;cursor:pointer;margin-bottom:0;opacity:.6;padding-right:2rem;position:absolute;top:1px;z-index:100}.usa-combo-box__clear-input{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGQ9Ik0xOSA2LjQxIDE3LjU5IDUgMTIgMTAuNTkgNi40MSA1IDUgNi40MSAxMC41OSAxMiA1IDE3LjU5IDYuNDEgMTkgMTIgMTMuNDEgMTcuNTkgMTkgMTkgMTcuNTkgMTMuNDEgMTJ6Ii8+PC9zdmc+),linear-gradient(transparent,transparent);background-repeat:no-repeat;display:none;right:calc(2.5em + 3px)}.usa-combo-box__toggle-list{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGQ9Ik0xNi41OSA4LjU5IDEyIDEzLjE3IDcuNDEgOC41OSA2IDEwbDYgNiA2LTZ6Ii8+PC9zdmc+),linear-gradient(transparent,transparent);background-repeat:no-repeat;background-size:auto 2rem;right:1px}.usa-combo-box__input-button-separator{background-color:#c6cace;box-sizing:border-box;margin-bottom:8px;margin-top:8px;position:absolute;right:calc(2.5em + 2px);top:1px;width:1px;z-index:200}.usa-combo-box__list{background-color:#fff;border:1px solid #565c65;border-radius:0;border-top:0;margin:0;max-height:12.1em;overflow-x:hidden;overflow-y:scroll;padding:0;position:absolute;width:100%;z-index:300}.usa-combo-box__list:focus{outline:0}.usa-combo-box__list-option{border-bottom:1px solid #dfe1e2;cursor:pointer;display:block;padding:.5rem}.usa-combo-box__list-option--focused{outline:2px solid #162e51;outline-offset:-2px;position:relative;z-index:100}.usa-combo-box__list-option--focused:focus{outline-offset:-4px}.usa-combo-box__list-option--selected{background-color:#005ea2;border-color:#005ea2;color:#fff}.usa-combo-box__list-option--no-results{cursor:not-allowed;display:block;padding:.5rem}.usa-date-picker__wrapper{display:none;position:relative}.usa-date-picker__wrapper:focus{outline:0}.usa-date-picker__button,.usa-date-picker__calendar__date,.usa-date-picker__calendar__month,.usa-date-picker__calendar__month-selection,.usa-date-picker__calendar__next-month,.usa-date-picker__calendar__next-year,.usa-date-picker__calendar__next-year-chunk,.usa-date-picker__calendar__previous-month,.usa-date-picker__calendar__previous-year,.usa-date-picker__calendar__previous-year-chunk,.usa-date-picker__calendar__year,.usa-date-picker__calendar__year-selection{background-color:#f0f0f0;border:0;width:100%}.usa-date-picker__button:not([disabled]),.usa-date-picker__calendar__date:not([disabled]),.usa-date-picker__calendar__month-selection:not([disabled]),.usa-date-picker__calendar__month:not([disabled]),.usa-date-picker__calendar__next-month:not([disabled]),.usa-date-picker__calendar__next-year-chunk:not([disabled]),.usa-date-picker__calendar__next-year:not([disabled]),.usa-date-picker__calendar__previous-month:not([disabled]),.usa-date-picker__calendar__previous-year-chunk:not([disabled]),.usa-date-picker__calendar__previous-year:not([disabled]),.usa-date-picker__calendar__year-selection:not([disabled]),.usa-date-picker__calendar__year:not([disabled]){cursor:pointer}.usa-date-picker__button:not([disabled]):focus,.usa-date-picker__calendar__date:not([disabled]):focus,.usa-date-picker__calendar__month-selection:not([disabled]):focus,.usa-date-picker__calendar__month:not([disabled]):focus,.usa-date-picker__calendar__next-month:not([disabled]):focus,.usa-date-picker__calendar__next-year-chunk:not([disabled]):focus,.usa-date-picker__calendar__next-year:not([disabled]):focus,.usa-date-picker__calendar__previous-month:not([disabled]):focus,.usa-date-picker__calendar__previous-year-chunk:not([disabled]):focus,.usa-date-picker__calendar__previous-year:not([disabled]):focus,.usa-date-picker__calendar__year-selection:not([disabled]):focus,.usa-date-picker__calendar__year:not([disabled]):focus{outline-offset:-4px}.usa-date-picker__button:not([disabled]):hover,.usa-date-picker__calendar__date:not([disabled]):hover,.usa-date-picker__calendar__month-selection:not([disabled]):hover,.usa-date-picker__calendar__month:not([disabled]):hover,.usa-date-picker__calendar__next-month:not([disabled]):hover,.usa-date-picker__calendar__next-year-chunk:not([disabled]):hover,.usa-date-picker__calendar__next-year:not([disabled]):hover,.usa-date-picker__calendar__previous-month:not([disabled]):hover,.usa-date-picker__calendar__previous-year-chunk:not([disabled]):hover,.usa-date-picker__calendar__previous-year:not([disabled]):hover,.usa-date-picker__calendar__year-selection:not([disabled]):hover,.usa-date-picker__calendar__year:not([disabled]):hover{background-color:#dfe1e2}.usa-date-picker__button:not([disabled]):active,.usa-date-picker__calendar__date:not([disabled]):active,.usa-date-picker__calendar__month-selection:not([disabled]):active,.usa-date-picker__calendar__month:not([disabled]):active,.usa-date-picker__calendar__next-month:not([disabled]):active,.usa-date-picker__calendar__next-year-chunk:not([disabled]):active,.usa-date-picker__calendar__next-year:not([disabled]):active,.usa-date-picker__calendar__previous-month:not([disabled]):active,.usa-date-picker__calendar__previous-year-chunk:not([disabled]):active,.usa-date-picker__calendar__previous-year:not([disabled]):active,.usa-date-picker__calendar__year-selection:not([disabled]):active,.usa-date-picker__calendar__year:not([disabled]):active{background-color:#a9aeb1}.usa-date-picker--active .usa-date-picker__button{background-color:#f0f0f0}.usa-date-picker--active .usa-date-picker__calendar{z-index:400}.usa-date-picker__button{align-self:stretch;background-color:transparent;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGQ9Ik0yMCAzaC0xVjFoLTJ2Mkg3VjFINXYySDRjLTEuMSAwLTIgLjktMiAydjE2YzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptMCAxOEg0VjhoMTZ2MTN6Ii8+PC9zdmc+),linear-gradient(transparent,transparent);background-position:50%;background-repeat:no-repeat;background-size:1.5rem;margin-top:.5em;width:3em}.usa-date-picker--initialized .usa-date-picker__wrapper{display:flex}.usa-date-picker__calendar{background-color:#f0f0f0;left:0;position:absolute;width:100%;z-index:100}.usa-date-picker__calendar__table{border-collapse:collapse;border-spacing:0;table-layout:fixed;text-align:center;width:100%}.usa-date-picker__calendar__table th{font-weight:400}.usa-date-picker__calendar__table td{padding:0}.usa-date-picker__calendar__row{display:flex;flex-wrap:wrap;text-align:center;width:100%}.usa-date-picker__calendar__cell{background-color:#f0f0f0;flex:1 1}.usa-date-picker__calendar__cell--center-items{align-items:center;display:flex;justify-content:center}.usa-date-picker__calendar__next-month,.usa-date-picker__calendar__next-year,.usa-date-picker__calendar__previous-month,.usa-date-picker__calendar__previous-year{background-position:50%;background-size:auto 1.5rem;height:1.5rem;padding:20px 10px}.usa-date-picker__calendar__previous-year:not([disabled]){background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48cG9seWdvbiBwb2ludHM9IjAgMCAyNCAwIDI0IDI0IDAgMjQiLz48cG9seWdvbiBmaWxsPSIjMDAwIiBmaWxsLXJ1bGU9Im5vbnplcm8iIHBvaW50cz0iMTEuNDEgNy40MSAxMCA2IDQgMTIgMTAgMTggMTEuNDEgMTYuNTkgNi44MyAxMiIvPjxwb2x5Z29uIGZpbGw9IiMwMDAiIGZpbGwtcnVsZT0ibm9uemVybyIgcG9pbnRzPSIxOS40MSA3LjQxIDE4IDYgMTIgMTIgMTggMTggMTkuNDEgMTYuNTkgMTQuODMgMTIiLz48L2c+PC9zdmc+),linear-gradient(transparent,transparent);background-repeat:no-repeat}.usa-date-picker__calendar__previous-month:not([disabled]){background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGQ9Ik0xNS40MSA3LjQxIDE0IDZsLTYgNiA2IDYgMS40MS0xLjQxTDEwLjgzIDEyeiIvPjwvc3ZnPg==),linear-gradient(transparent,transparent);background-repeat:no-repeat}.usa-date-picker__calendar__next-year:not([disabled]){background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48cG9seWdvbiBwb2ludHM9IjAgMCAyNCAwIDI0IDI0IDAgMjQiLz48ZyBmaWxsPSIjMDAwIiBmaWxsLXJ1bGU9Im5vbnplcm8iIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQuNTkgNikiPjxwb2x5Z29uIHBvaW50cz0iOS40MSAwIDggMS40MSAxMi41OCA2IDggMTAuNTkgOS40MSAxMiAxNS40MSA2Ii8+PHBvbHlnb24gcG9pbnRzPSIxLjQxIDAgMCAxLjQxIDQuNTggNiAwIDEwLjU5IDEuNDEgMTIgNy40MSA2Ii8+PC9nPjwvZz48L3N2Zz4=),linear-gradient(transparent,transparent);background-repeat:no-repeat}.usa-date-picker__calendar__next-month:not([disabled]){background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGQ9Ik0xMCA2IDguNTkgNy40MSAxMy4xNyAxMmwtNC41OCA0LjU5TDEwIDE4bDYtNnoiLz48L3N2Zz4=),linear-gradient(transparent,transparent);background-repeat:no-repeat}.usa-date-picker__calendar__day-of-week{padding:6px 0}.usa-date-picker__calendar__date{padding:10px 0}.usa-date-picker__calendar__date--focused{outline:2px solid #162e51;outline-offset:-2px;position:relative;z-index:100}.usa-date-picker__calendar__date--next-month:not([disabled]),.usa-date-picker__calendar__date--previous-month:not([disabled]){color:#5d5d52}.usa-date-picker__calendar__date--range-date,.usa-date-picker__calendar__date--range-date:not([disabled]),.usa-date-picker__calendar__date--selected,.usa-date-picker__calendar__date--selected:not([disabled]){background-color:#0050d8;color:#f9f9f9}.usa-date-picker__calendar__date--range-date:not([disabled]):hover,.usa-date-picker__calendar__date--selected:not([disabled]):hover{background-color:#0050d8;color:#e6e6e6}.usa-date-picker__calendar__date--range-date:not([disabled]):focus,.usa-date-picker__calendar__date--selected:not([disabled]):focus{background-color:#0050d8;color:#f9f9f9}.usa-date-picker__calendar__date--range-date:not([disabled]):active,.usa-date-picker__calendar__date--selected:not([disabled]):active{background-color:#1a4480}.usa-date-picker__calendar__date--range-date-start{border-bottom-left-radius:10%;border-top-left-radius:10%}.usa-date-picker__calendar__date--range-date-end{border-bottom-right-radius:10%;border-top-right-radius:10%}.usa-date-picker__calendar__date--within-range,.usa-date-picker__calendar__date--within-range:not([disabled]),.usa-date-picker__calendar__date--within-range:not([disabled]):active,.usa-date-picker__calendar__date--within-range:not([disabled]):focus,.usa-date-picker__calendar__date--within-range:not([disabled]):hover{background-color:#cfe8ff}.usa-date-picker__calendar__month-label{flex:4 1;text-align:center}.usa-date-picker__calendar__month-selection,.usa-date-picker__calendar__year-selection{display:inline-block;height:100%;padding:8px 4px;width:auto}.usa-date-picker__calendar__month-picker{padding:20px 5px}.usa-date-picker__calendar__month{padding:10px 0}.usa-date-picker__calendar__month--focused{outline:2px solid #162e51;outline-offset:-2px;position:relative;z-index:100}.usa-date-picker__calendar__month--selected,.usa-date-picker__calendar__month--selected:not([disabled]){background-color:#0050d8;color:#f9f9f9}.usa-date-picker__calendar__month--selected:not([disabled]):hover{background-color:#0050d8;color:#e6e6e6}.usa-date-picker__calendar__month--selected:not([disabled]):focus{background-color:#0050d8;color:#f9f9f9}.usa-date-picker__calendar__month--selected:not([disabled]):active{background-color:#1a4480}.usa-date-picker__calendar__year-picker{padding:20px 5px}.usa-date-picker__calendar__next-year-chunk,.usa-date-picker__calendar__previous-year-chunk{background-position:50%;background-size:auto 2rem;margin:auto;padding:40px 0}.usa-date-picker__calendar__previous-year-chunk:not([disabled]){background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGQ9Ik0xNS40MSA3LjQxIDE0IDZsLTYgNiA2IDYgMS40MS0xLjQxTDEwLjgzIDEyeiIvPjwvc3ZnPg==),linear-gradient(transparent,transparent);background-repeat:no-repeat}.usa-date-picker__calendar__next-year-chunk:not([disabled]){background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGQ9Ik0xMCA2IDguNTkgNy40MSAxMy4xNyAxMmwtNC41OCA0LjU5TDEwIDE4bDYtNnoiLz48L3N2Zz4=),linear-gradient(transparent,transparent);background-repeat:no-repeat}.usa-date-picker__calendar__year{padding:10px 0}.usa-date-picker__calendar__year--focused{outline:2px solid #162e51;outline-offset:-2px;position:relative;z-index:100}.usa-date-picker__calendar__year--selected,.usa-date-picker__calendar__year--selected:not([disabled]){background-color:#0050d8;color:#f9f9f9}.usa-date-picker__calendar__year--selected:not([disabled]):hover{background-color:#0050d8;color:#e6e6e6}.usa-date-picker__calendar__year--selected:not([disabled]):focus{background-color:#0050d8;color:#f9f9f9}.usa-date-picker__calendar__year--selected:not([disabled]):active{background-color:#1a4480}.usa-time-picker{width:10em}.grid-container{margin-left:auto;margin-right:auto;max-width:64rem;padding-left:1rem;padding-right:1rem}@media (min-width:64em){.grid-container{padding-left:2rem;padding-right:2rem}}.grid-container-card{margin-left:auto;margin-right:auto;max-width:10rem;padding-left:1rem;padding-right:1rem}@media (min-width:64em){.grid-container-card{padding-left:2rem;padding-right:2rem}}.grid-container-card-lg{margin-left:auto;margin-right:auto;max-width:15rem;padding-left:1rem;padding-right:1rem}@media (min-width:64em){.grid-container-card-lg{padding-left:2rem;padding-right:2rem}}.grid-container-mobile{margin-left:auto;margin-right:auto;max-width:20rem;padding-left:1rem;padding-right:1rem}@media (min-width:64em){.grid-container-mobile{padding-left:2rem;padding-right:2rem}}.grid-container-mobile-lg{margin-left:auto;margin-right:auto;max-width:30rem;padding-left:1rem;padding-right:1rem}@media (min-width:64em){.grid-container-mobile-lg{padding-left:2rem;padding-right:2rem}}.grid-container-tablet{margin-left:auto;margin-right:auto;max-width:40rem;padding-left:1rem;padding-right:1rem}@media (min-width:64em){.grid-container-tablet{padding-left:2rem;padding-right:2rem}}.grid-container-tablet-lg{margin-left:auto;margin-right:auto;max-width:55rem;padding-left:1rem;padding-right:1rem}@media (min-width:64em){.grid-container-tablet-lg{padding-left:2rem;padding-right:2rem}}.grid-container-desktop{margin-left:auto;margin-right:auto;max-width:64rem;padding-left:1rem;padding-right:1rem}@media (min-width:64em){.grid-container-desktop{padding-left:2rem;padding-right:2rem}}.grid-container-desktop-lg{margin-left:auto;margin-right:auto;max-width:75rem;padding-left:1rem;padding-right:1rem}@media (min-width:64em){.grid-container-desktop-lg{padding-left:2rem;padding-right:2rem}}.grid-container-widescreen{margin-left:auto;margin-right:auto;max-width:87.5rem;padding-left:1rem;padding-right:1rem}@media (min-width:64em){.grid-container-widescreen{padding-left:2rem;padding-right:2rem}}@media (min-width:30em){.mobile-lg\:grid-container{margin-left:auto;margin-right:auto;max-width:64rem;padding-left:1rem;padding-right:1rem}}@media (min-width:30em)and (min-width:64em){.mobile-lg\:grid-container{padding-left:2rem;padding-right:2rem}}@media (min-width:30em){.mobile-lg\:grid-container-card{margin-left:auto;margin-right:auto;max-width:10rem;padding-left:1rem;padding-right:1rem}}@media (min-width:30em)and (min-width:64em){.mobile-lg\:grid-container-card{padding-left:2rem;padding-right:2rem}}@media (min-width:30em){.mobile-lg\:grid-container-card-lg{margin-left:auto;margin-right:auto;max-width:15rem;padding-left:1rem;padding-right:1rem}}@media (min-width:30em)and (min-width:64em){.mobile-lg\:grid-container-card-lg{padding-left:2rem;padding-right:2rem}}@media (min-width:30em){.mobile-lg\:grid-container-mobile{margin-left:auto;margin-right:auto;max-width:20rem;padding-left:1rem;padding-right:1rem}}@media (min-width:30em)and (min-width:64em){.mobile-lg\:grid-container-mobile{padding-left:2rem;padding-right:2rem}}@media (min-width:30em){.mobile-lg\:grid-container-mobile-lg{margin-left:auto;margin-right:auto;max-width:30rem;padding-left:1rem;padding-right:1rem}}@media (min-width:30em)and (min-width:64em){.mobile-lg\:grid-container-mobile-lg{padding-left:2rem;padding-right:2rem}}@media (min-width:30em){.mobile-lg\:grid-container-tablet{margin-left:auto;margin-right:auto;max-width:40rem;padding-left:1rem;padding-right:1rem}}@media (min-width:30em)and (min-width:64em){.mobile-lg\:grid-container-tablet{padding-left:2rem;padding-right:2rem}}@media (min-width:30em){.mobile-lg\:grid-container-tablet-lg{margin-left:auto;margin-right:auto;max-width:55rem;padding-left:1rem;padding-right:1rem}}@media (min-width:30em)and (min-width:64em){.mobile-lg\:grid-container-tablet-lg{padding-left:2rem;padding-right:2rem}}@media (min-width:30em){.mobile-lg\:grid-container-desktop{margin-left:auto;margin-right:auto;max-width:64rem;padding-left:1rem;padding-right:1rem}}@media (min-width:30em)and (min-width:64em){.mobile-lg\:grid-container-desktop{padding-left:2rem;padding-right:2rem}}@media (min-width:30em){.mobile-lg\:grid-container-desktop-lg{margin-left:auto;margin-right:auto;max-width:75rem;padding-left:1rem;padding-right:1rem}}@media (min-width:30em)and (min-width:64em){.mobile-lg\:grid-container-desktop-lg{padding-left:2rem;padding-right:2rem}}@media (min-width:30em){.mobile-lg\:grid-container-widescreen{margin-left:auto;margin-right:auto;max-width:87.5rem;padding-left:1rem;padding-right:1rem}}@media (min-width:30em)and (min-width:64em){.mobile-lg\:grid-container-widescreen{padding-left:2rem;padding-right:2rem}}@media (min-width:40em){.tablet\:grid-container{margin-left:auto;margin-right:auto;max-width:64rem;padding-left:1rem;padding-right:1rem}}@media (min-width:40em)and (min-width:64em){.tablet\:grid-container{padding-left:2rem;padding-right:2rem}}@media (min-width:40em){.tablet\:grid-container-card{margin-left:auto;margin-right:auto;max-width:10rem;padding-left:1rem;padding-right:1rem}}@media (min-width:40em)and (min-width:64em){.tablet\:grid-container-card{padding-left:2rem;padding-right:2rem}}@media (min-width:40em){.tablet\:grid-container-card-lg{margin-left:auto;margin-right:auto;max-width:15rem;padding-left:1rem;padding-right:1rem}}@media (min-width:40em)and (min-width:64em){.tablet\:grid-container-card-lg{padding-left:2rem;padding-right:2rem}}@media (min-width:40em){.tablet\:grid-container-mobile{margin-left:auto;margin-right:auto;max-width:20rem;padding-left:1rem;padding-right:1rem}}@media (min-width:40em)and (min-width:64em){.tablet\:grid-container-mobile{padding-left:2rem;padding-right:2rem}}@media (min-width:40em){.tablet\:grid-container-mobile-lg{margin-left:auto;margin-right:auto;max-width:30rem;padding-left:1rem;padding-right:1rem}}@media (min-width:40em)and (min-width:64em){.tablet\:grid-container-mobile-lg{padding-left:2rem;padding-right:2rem}}@media (min-width:40em){.tablet\:grid-container-tablet{margin-left:auto;margin-right:auto;max-width:40rem;padding-left:1rem;padding-right:1rem}}@media (min-width:40em)and (min-width:64em){.tablet\:grid-container-tablet{padding-left:2rem;padding-right:2rem}}@media (min-width:40em){.tablet\:grid-container-tablet-lg{margin-left:auto;margin-right:auto;max-width:55rem;padding-left:1rem;padding-right:1rem}}@media (min-width:40em)and (min-width:64em){.tablet\:grid-container-tablet-lg{padding-left:2rem;padding-right:2rem}}@media (min-width:40em){.tablet\:grid-container-desktop{margin-left:auto;margin-right:auto;max-width:64rem;padding-left:1rem;padding-right:1rem}}@media (min-width:40em)and (min-width:64em){.tablet\:grid-container-desktop{padding-left:2rem;padding-right:2rem}}@media (min-width:40em){.tablet\:grid-container-desktop-lg{margin-left:auto;margin-right:auto;max-width:75rem;padding-left:1rem;padding-right:1rem}}@media (min-width:40em)and (min-width:64em){.tablet\:grid-container-desktop-lg{padding-left:2rem;padding-right:2rem}}@media (min-width:40em){.tablet\:grid-container-widescreen{margin-left:auto;margin-right:auto;max-width:87.5rem;padding-left:1rem;padding-right:1rem}}@media (min-width:40em)and (min-width:64em){.tablet\:grid-container-widescreen{padding-left:2rem;padding-right:2rem}}@media (min-width:64em){.desktop\:grid-container{margin-left:auto;margin-right:auto;max-width:64rem;padding-left:1rem;padding-right:1rem}}@media (min-width:64em)and (min-width:64em){.desktop\:grid-container{padding-left:2rem;padding-right:2rem}}@media (min-width:64em){.desktop\:grid-container-card{margin-left:auto;margin-right:auto;max-width:10rem;padding-left:1rem;padding-right:1rem}}@media (min-width:64em)and (min-width:64em){.desktop\:grid-container-card{padding-left:2rem;padding-right:2rem}}@media (min-width:64em){.desktop\:grid-container-card-lg{margin-left:auto;margin-right:auto;max-width:15rem;padding-left:1rem;padding-right:1rem}}@media (min-width:64em)and (min-width:64em){.desktop\:grid-container-card-lg{padding-left:2rem;padding-right:2rem}}@media (min-width:64em){.desktop\:grid-container-mobile{margin-left:auto;margin-right:auto;max-width:20rem;padding-left:1rem;padding-right:1rem}}@media (min-width:64em)and (min-width:64em){.desktop\:grid-container-mobile{padding-left:2rem;padding-right:2rem}}@media (min-width:64em){.desktop\:grid-container-mobile-lg{margin-left:auto;margin-right:auto;max-width:30rem;padding-left:1rem;padding-right:1rem}}@media (min-width:64em)and (min-width:64em){.desktop\:grid-container-mobile-lg{padding-left:2rem;padding-right:2rem}}@media (min-width:64em){.desktop\:grid-container-tablet{margin-left:auto;margin-right:auto;max-width:40rem;padding-left:1rem;padding-right:1rem}}@media (min-width:64em)and (min-width:64em){.desktop\:grid-container-tablet{padding-left:2rem;padding-right:2rem}}@media (min-width:64em){.desktop\:grid-container-tablet-lg{margin-left:auto;margin-right:auto;max-width:55rem;padding-left:1rem;padding-right:1rem}}@media (min-width:64em)and (min-width:64em){.desktop\:grid-container-tablet-lg{padding-left:2rem;padding-right:2rem}}@media (min-width:64em){.desktop\:grid-container-desktop{margin-left:auto;margin-right:auto;max-width:64rem;padding-left:1rem;padding-right:1rem}}@media (min-width:64em)and (min-width:64em){.desktop\:grid-container-desktop{padding-left:2rem;padding-right:2rem}}@media (min-width:64em){.desktop\:grid-container-desktop-lg{margin-left:auto;margin-right:auto;max-width:75rem;padding-left:1rem;padding-right:1rem}}@media (min-width:64em)and (min-width:64em){.desktop\:grid-container-desktop-lg{padding-left:2rem;padding-right:2rem}}@media (min-width:64em){.desktop\:grid-container-widescreen{margin-left:auto;margin-right:auto;max-width:87.5rem;padding-left:1rem;padding-right:1rem}}@media (min-width:64em)and (min-width:64em){.desktop\:grid-container-widescreen{padding-left:2rem;padding-right:2rem}}.grid-row{display:flex;flex-wrap:wrap}.grid-row.grid-gap{margin-left:-.5rem;margin-right:-.5rem}.grid-row.grid-gap>*{padding-left:.5rem;padding-right:.5rem}@media (min-width:64em){.grid-row.grid-gap{margin-left:-1rem;margin-right:-1rem}.grid-row.grid-gap>*{padding-left:1rem;padding-right:1rem}}.grid-row.grid-gap-0{margin-left:0;margin-right:0}.grid-row.grid-gap-0>*{padding-left:0;padding-right:0}.grid-row.grid-gap-2px{margin-left:-1px;margin-right:-1px}.grid-row.grid-gap-2px>*{padding-left:1px;padding-right:1px}.grid-row.grid-gap-05{margin-left:-2px;margin-right:-2px}.grid-row.grid-gap-05>*{padding-left:2px;padding-right:2px}.grid-row.grid-gap-1{margin-left:-.25rem;margin-right:-.25rem}.grid-row.grid-gap-1>*{padding-left:.25rem;padding-right:.25rem}.grid-row.grid-gap-2{margin-left:-.5rem;margin-right:-.5rem}.grid-row.grid-gap-2>*{padding-left:.5rem;padding-right:.5rem}.grid-row.grid-gap-3{margin-left:-.75rem;margin-right:-.75rem}.grid-row.grid-gap-3>*{padding-left:.75rem;padding-right:.75rem}.grid-row.grid-gap-4{margin-left:-1rem;margin-right:-1rem}.grid-row.grid-gap-4>*{padding-left:1rem;padding-right:1rem}.grid-row.grid-gap-5{margin-left:-1.25rem;margin-right:-1.25rem}.grid-row.grid-gap-5>*{padding-left:1.25rem;padding-right:1.25rem}.grid-row.grid-gap-6{margin-left:-1.5rem;margin-right:-1.5rem}.grid-row.grid-gap-6>*{padding-left:1.5rem;padding-right:1.5rem}.grid-row.grid-gap-sm{margin-left:-1px;margin-right:-1px}.grid-row.grid-gap-sm>*{padding-left:1px;padding-right:1px}.grid-row.grid-gap-md{margin-left:-.5rem;margin-right:-.5rem}.grid-row.grid-gap-md>*{padding-left:.5rem;padding-right:.5rem}.grid-row.grid-gap-lg{margin-left:-.75rem;margin-right:-.75rem}.grid-row.grid-gap-lg>*{padding-left:.75rem;padding-right:.75rem}@media (min-width:30em){.grid-row.mobile-lg\:grid-gap-0{margin-left:0;margin-right:0}.grid-row.mobile-lg\:grid-gap-0>*{padding-left:0;padding-right:0}.grid-row.mobile-lg\:grid-gap-2px{margin-left:-1px;margin-right:-1px}.grid-row.mobile-lg\:grid-gap-2px>*{padding-left:1px;padding-right:1px}.grid-row.mobile-lg\:grid-gap-05{margin-left:-2px;margin-right:-2px}.grid-row.mobile-lg\:grid-gap-05>*{padding-left:2px;padding-right:2px}.grid-row.mobile-lg\:grid-gap-1{margin-left:-.25rem;margin-right:-.25rem}.grid-row.mobile-lg\:grid-gap-1>*{padding-left:.25rem;padding-right:.25rem}.grid-row.mobile-lg\:grid-gap-2{margin-left:-.5rem;margin-right:-.5rem}.grid-row.mobile-lg\:grid-gap-2>*{padding-left:.5rem;padding-right:.5rem}.grid-row.mobile-lg\:grid-gap-3{margin-left:-.75rem;margin-right:-.75rem}.grid-row.mobile-lg\:grid-gap-3>*{padding-left:.75rem;padding-right:.75rem}.grid-row.mobile-lg\:grid-gap-4{margin-left:-1rem;margin-right:-1rem}.grid-row.mobile-lg\:grid-gap-4>*{padding-left:1rem;padding-right:1rem}.grid-row.mobile-lg\:grid-gap-5{margin-left:-1.25rem;margin-right:-1.25rem}.grid-row.mobile-lg\:grid-gap-5>*{padding-left:1.25rem;padding-right:1.25rem}.grid-row.mobile-lg\:grid-gap-6{margin-left:-1.5rem;margin-right:-1.5rem}.grid-row.mobile-lg\:grid-gap-6>*{padding-left:1.5rem;padding-right:1.5rem}.grid-row.mobile-lg\:grid-gap-sm{margin-left:-1px;margin-right:-1px}.grid-row.mobile-lg\:grid-gap-sm>*{padding-left:1px;padding-right:1px}.grid-row.mobile-lg\:grid-gap-md{margin-left:-.5rem;margin-right:-.5rem}.grid-row.mobile-lg\:grid-gap-md>*{padding-left:.5rem;padding-right:.5rem}.grid-row.mobile-lg\:grid-gap-lg{margin-left:-.75rem;margin-right:-.75rem}.grid-row.mobile-lg\:grid-gap-lg>*{padding-left:.75rem;padding-right:.75rem}}@media (min-width:40em){.grid-row.tablet\:grid-gap-0{margin-left:0;margin-right:0}.grid-row.tablet\:grid-gap-0>*{padding-left:0;padding-right:0}.grid-row.tablet\:grid-gap-2px{margin-left:-1px;margin-right:-1px}.grid-row.tablet\:grid-gap-2px>*{padding-left:1px;padding-right:1px}.grid-row.tablet\:grid-gap-05{margin-left:-2px;margin-right:-2px}.grid-row.tablet\:grid-gap-05>*{padding-left:2px;padding-right:2px}.grid-row.tablet\:grid-gap-1{margin-left:-.25rem;margin-right:-.25rem}.grid-row.tablet\:grid-gap-1>*{padding-left:.25rem;padding-right:.25rem}.grid-row.tablet\:grid-gap-2{margin-left:-.5rem;margin-right:-.5rem}.grid-row.tablet\:grid-gap-2>*{padding-left:.5rem;padding-right:.5rem}.grid-row.tablet\:grid-gap-3{margin-left:-.75rem;margin-right:-.75rem}.grid-row.tablet\:grid-gap-3>*{padding-left:.75rem;padding-right:.75rem}.grid-row.tablet\:grid-gap-4{margin-left:-1rem;margin-right:-1rem}.grid-row.tablet\:grid-gap-4>*{padding-left:1rem;padding-right:1rem}.grid-row.tablet\:grid-gap-5{margin-left:-1.25rem;margin-right:-1.25rem}.grid-row.tablet\:grid-gap-5>*{padding-left:1.25rem;padding-right:1.25rem}.grid-row.tablet\:grid-gap-6{margin-left:-1.5rem;margin-right:-1.5rem}.grid-row.tablet\:grid-gap-6>*{padding-left:1.5rem;padding-right:1.5rem}.grid-row.tablet\:grid-gap-sm{margin-left:-1px;margin-right:-1px}.grid-row.tablet\:grid-gap-sm>*{padding-left:1px;padding-right:1px}.grid-row.tablet\:grid-gap-md{margin-left:-.5rem;margin-right:-.5rem}.grid-row.tablet\:grid-gap-md>*{padding-left:.5rem;padding-right:.5rem}.grid-row.tablet\:grid-gap-lg{margin-left:-.75rem;margin-right:-.75rem}.grid-row.tablet\:grid-gap-lg>*{padding-left:.75rem;padding-right:.75rem}}@media (min-width:64em){.grid-row.desktop\:grid-gap-0{margin-left:0;margin-right:0}.grid-row.desktop\:grid-gap-0>*{padding-left:0;padding-right:0}.grid-row.desktop\:grid-gap-2px{margin-left:-1px;margin-right:-1px}.grid-row.desktop\:grid-gap-2px>*{padding-left:1px;padding-right:1px}.grid-row.desktop\:grid-gap-05{margin-left:-2px;margin-right:-2px}.grid-row.desktop\:grid-gap-05>*{padding-left:2px;padding-right:2px}.grid-row.desktop\:grid-gap-1{margin-left:-.25rem;margin-right:-.25rem}.grid-row.desktop\:grid-gap-1>*{padding-left:.25rem;padding-right:.25rem}.grid-row.desktop\:grid-gap-2{margin-left:-.5rem;margin-right:-.5rem}.grid-row.desktop\:grid-gap-2>*{padding-left:.5rem;padding-right:.5rem}.grid-row.desktop\:grid-gap-3{margin-left:-.75rem;margin-right:-.75rem}.grid-row.desktop\:grid-gap-3>*{padding-left:.75rem;padding-right:.75rem}.grid-row.desktop\:grid-gap-4{margin-left:-1rem;margin-right:-1rem}.grid-row.desktop\:grid-gap-4>*{padding-left:1rem;padding-right:1rem}.grid-row.desktop\:grid-gap-5{margin-left:-1.25rem;margin-right:-1.25rem}.grid-row.desktop\:grid-gap-5>*{padding-left:1.25rem;padding-right:1.25rem}.grid-row.desktop\:grid-gap-6{margin-left:-1.5rem;margin-right:-1.5rem}.grid-row.desktop\:grid-gap-6>*{padding-left:1.5rem;padding-right:1.5rem}.grid-row.desktop\:grid-gap-sm{margin-left:-1px;margin-right:-1px}.grid-row.desktop\:grid-gap-sm>*{padding-left:1px;padding-right:1px}.grid-row.desktop\:grid-gap-md{margin-left:-.5rem;margin-right:-.5rem}.grid-row.desktop\:grid-gap-md>*{padding-left:.5rem;padding-right:.5rem}.grid-row.desktop\:grid-gap-lg{margin-left:-.75rem;margin-right:-.75rem}.grid-row.desktop\:grid-gap-lg>*{padding-left:.75rem;padding-right:.75rem}}[class*=grid-col]{box-sizing:border-box;position:relative;width:100%}.grid-col{flex:1 1;min-width:1px}.grid-col,.grid-col-auto{max-width:100%;width:auto}.grid-col-auto{flex:0 1 auto}.grid-col-fill{flex:1 1;max-width:100%;min-width:1px;width:auto}.grid-col-1{flex:0 1 auto;width:8.3333333333%}.grid-col-2{flex:0 1 auto;width:16.6666666667%}.grid-col-3{flex:0 1 auto;width:25%}.grid-col-4{flex:0 1 auto;width:33.3333333333%}.grid-col-5{flex:0 1 auto;width:41.6666666667%}.grid-col-6{flex:0 1 auto;width:50%}.grid-col-7{flex:0 1 auto;width:58.3333333333%}.grid-col-8{flex:0 1 auto;width:66.6666666667%}.grid-col-9{flex:0 1 auto;width:75%}.grid-col-10{flex:0 1 auto;width:83.3333333333%}.grid-col-11{flex:0 1 auto;width:91.6666666667%}.grid-col-12{flex:0 1 auto;width:100%}@media (min-width:30em){.mobile-lg\:grid-col,.mobile-lg\:grid-col-fill{flex:1 1;max-width:100%;min-width:1px;width:auto}.mobile-lg\:grid-col-auto{flex:0 1 auto;max-width:100%;width:auto}.mobile-lg\:grid-col-1{flex:0 1 auto;width:8.3333333333%}.mobile-lg\:grid-col-2{flex:0 1 auto;width:16.6666666667%}.mobile-lg\:grid-col-3{flex:0 1 auto;width:25%}.mobile-lg\:grid-col-4{flex:0 1 auto;width:33.3333333333%}.mobile-lg\:grid-col-5{flex:0 1 auto;width:41.6666666667%}.mobile-lg\:grid-col-6{flex:0 1 auto;width:50%}.mobile-lg\:grid-col-7{flex:0 1 auto;width:58.3333333333%}.mobile-lg\:grid-col-8{flex:0 1 auto;width:66.6666666667%}.mobile-lg\:grid-col-9{flex:0 1 auto;width:75%}.mobile-lg\:grid-col-10{flex:0 1 auto;width:83.3333333333%}.mobile-lg\:grid-col-11{flex:0 1 auto;width:91.6666666667%}.mobile-lg\:grid-col-12{flex:0 1 auto;width:100%}}@media (min-width:40em){.tablet\:grid-col,.tablet\:grid-col-fill{flex:1 1;max-width:100%;min-width:1px;width:auto}.tablet\:grid-col-auto{flex:0 1 auto;max-width:100%;width:auto}.tablet\:grid-col-1{flex:0 1 auto;width:8.3333333333%}.tablet\:grid-col-2{flex:0 1 auto;width:16.6666666667%}.tablet\:grid-col-3{flex:0 1 auto;width:25%}.tablet\:grid-col-4{flex:0 1 auto;width:33.3333333333%}.tablet\:grid-col-5{flex:0 1 auto;width:41.6666666667%}.tablet\:grid-col-6{flex:0 1 auto;width:50%}.tablet\:grid-col-7{flex:0 1 auto;width:58.3333333333%}.tablet\:grid-col-8{flex:0 1 auto;width:66.6666666667%}.tablet\:grid-col-9{flex:0 1 auto;width:75%}.tablet\:grid-col-10{flex:0 1 auto;width:83.3333333333%}.tablet\:grid-col-11{flex:0 1 auto;width:91.6666666667%}.tablet\:grid-col-12{flex:0 1 auto;width:100%}}@media (min-width:64em){.desktop\:grid-col,.desktop\:grid-col-fill{flex:1 1;max-width:100%;min-width:1px;width:auto}.desktop\:grid-col-auto{flex:0 1 auto;max-width:100%;width:auto}.desktop\:grid-col-1{flex:0 1 auto;width:8.3333333333%}.desktop\:grid-col-2{flex:0 1 auto;width:16.6666666667%}.desktop\:grid-col-3{flex:0 1 auto;width:25%}.desktop\:grid-col-4{flex:0 1 auto;width:33.3333333333%}.desktop\:grid-col-5{flex:0 1 auto;width:41.6666666667%}.desktop\:grid-col-6{flex:0 1 auto;width:50%}.desktop\:grid-col-7{flex:0 1 auto;width:58.3333333333%}.desktop\:grid-col-8{flex:0 1 auto;width:66.6666666667%}.desktop\:grid-col-9{flex:0 1 auto;width:75%}.desktop\:grid-col-10{flex:0 1 auto;width:83.3333333333%}.desktop\:grid-col-11{flex:0 1 auto;width:91.6666666667%}.desktop\:grid-col-12{flex:0 1 auto;width:100%}}.grid-offset-1{margin-left:8.3333333333%}.grid-offset-2{margin-left:16.6666666667%}.grid-offset-3{margin-left:25%}.grid-offset-4{margin-left:33.3333333333%}.grid-offset-5{margin-left:41.6666666667%}.grid-offset-6{margin-left:50%}.grid-offset-7{margin-left:58.3333333333%}.grid-offset-8{margin-left:66.6666666667%}.grid-offset-9{margin-left:75%}.grid-offset-10{margin-left:83.3333333333%}.grid-offset-11{margin-left:91.6666666667%}.grid-offset-12{margin-left:100%}.grid-offset-none{margin-left:0}@media (min-width:30em){.mobile-lg\:grid-offset-1{margin-left:8.3333333333%}.mobile-lg\:grid-offset-2{margin-left:16.6666666667%}.mobile-lg\:grid-offset-3{margin-left:25%}.mobile-lg\:grid-offset-4{margin-left:33.3333333333%}.mobile-lg\:grid-offset-5{margin-left:41.6666666667%}.mobile-lg\:grid-offset-6{margin-left:50%}.mobile-lg\:grid-offset-7{margin-left:58.3333333333%}.mobile-lg\:grid-offset-8{margin-left:66.6666666667%}.mobile-lg\:grid-offset-9{margin-left:75%}.mobile-lg\:grid-offset-10{margin-left:83.3333333333%}.mobile-lg\:grid-offset-11{margin-left:91.6666666667%}.mobile-lg\:grid-offset-12{margin-left:100%}.mobile-lg\:grid-offset-none{margin-left:0}}@media (min-width:40em){.tablet\:grid-offset-1{margin-left:8.3333333333%}.tablet\:grid-offset-2{margin-left:16.6666666667%}.tablet\:grid-offset-3{margin-left:25%}.tablet\:grid-offset-4{margin-left:33.3333333333%}.tablet\:grid-offset-5{margin-left:41.6666666667%}.tablet\:grid-offset-6{margin-left:50%}.tablet\:grid-offset-7{margin-left:58.3333333333%}.tablet\:grid-offset-8{margin-left:66.6666666667%}.tablet\:grid-offset-9{margin-left:75%}.tablet\:grid-offset-10{margin-left:83.3333333333%}.tablet\:grid-offset-11{margin-left:91.6666666667%}.tablet\:grid-offset-12{margin-left:100%}.tablet\:grid-offset-none{margin-left:0}}@media (min-width:64em){.desktop\:grid-offset-1{margin-left:8.3333333333%}.desktop\:grid-offset-2{margin-left:16.6666666667%}.desktop\:grid-offset-3{margin-left:25%}.desktop\:grid-offset-4{margin-left:33.3333333333%}.desktop\:grid-offset-5{margin-left:41.6666666667%}.desktop\:grid-offset-6{margin-left:50%}.desktop\:grid-offset-7{margin-left:58.3333333333%}.desktop\:grid-offset-8{margin-left:66.6666666667%}.desktop\:grid-offset-9{margin-left:75%}.desktop\:grid-offset-10{margin-left:83.3333333333%}.desktop\:grid-offset-11{margin-left:91.6666666667%}.desktop\:grid-offset-12{margin-left:100%}.desktop\:grid-offset-none{margin-left:0}}@media (max-width:29.99em){.usa-table--stacked thead{display:none}.usa-table--stacked td,.usa-table--stacked th{border-bottom-width:0;display:block;width:100%}.usa-table--stacked tr{border-bottom:.25rem solid #1b1b1b;border-top-width:0;display:block;width:100%}.usa-table--stacked tr td:first-child,.usa-table--stacked tr th:first-child{border-top-width:0}.usa-table--stacked tr:nth-child(odd) td,.usa-table--stacked tr:nth-child(odd) th{background-color:inherit}.usa-table--stacked tr:first-child td:first-child,.usa-table--stacked tr:first-child th:first-child{border-top:.25rem solid #1b1b1b}.usa-table--stacked td[data-label],.usa-table--stacked th[data-label]{padding-bottom:.75rem}.usa-table--stacked td[data-label]:before,.usa-table--stacked th[data-label]:before{content:attr(data-label);display:block;font-weight:700;margin:-.5rem -1rem 0;padding:.75rem 1rem .25rem}.usa-table--stacked-header thead{display:none}.usa-table--stacked-header td,.usa-table--stacked-header th{border-bottom-width:0;display:block;width:100%}.usa-table--stacked-header tr{border-bottom:.25rem solid #1b1b1b;border-top-width:0;display:block;width:100%}.usa-table--stacked-header tr td:first-child,.usa-table--stacked-header tr th:first-child{border-top-width:0}.usa-table--stacked-header tr:nth-child(odd) td,.usa-table--stacked-header tr:nth-child(odd) th{background-color:inherit}.usa-table--stacked-header tr:first-child td:first-child,.usa-table--stacked-header tr:first-child th:first-child{border-top:.25rem solid #1b1b1b}.usa-table--stacked-header td[data-label],.usa-table--stacked-header th[data-label]{padding-bottom:.75rem}.usa-table--stacked-header td[data-label]:before,.usa-table--stacked-header th[data-label]:before{content:attr(data-label);display:block;font-weight:700;margin:-.5rem -1rem 0;padding:.75rem 1rem .25rem}.usa-table--stacked-header tr td:first-child,.usa-table--stacked-header tr th:first-child{background-color:#dfe1e2;color:#1b1b1b;font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.06rem;font-weight:700;line-height:1.1;padding:.75rem 1rem}.usa-table--stacked-header tr td:first-child:before,.usa-table--stacked-header tr th:first-child:before{display:none}}.usa-tag{background-color:#565c65;border-radius:2px;color:#fff;font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:.93rem;margin-right:.25rem;padding:1px .5rem;text-transform:uppercase}.usa-tag:only-of-type{margin-right:0}.usa-tag--big{font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.06rem;padding-left:.5rem;padding-right:.5rem}.usa-paragraph{line-height:1.5;margin-bottom:0;margin-top:0;max-width:68ex}*+.usa-paragraph,.usa-paragraph+*{margin-top:1em}.usa-content ol:not(.usa-accordion):not(.usa-accordion--bordered),.usa-content p,.usa-content ul:not(.usa-accordion):not(.usa-accordion--bordered){max-width:68ex}.usa-display{clear:both;font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.46rem;font-weight:700;line-height:1.1;margin-bottom:0;margin-top:0}*+.usa-display{margin-top:1.5em}.usa-display+*{margin-top:1em}@media (min-width:30em){.usa-display{clear:both;font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:2.66rem;font-weight:700;line-height:1.1;margin-bottom:0;margin-top:0}*+.usa-display{margin-top:1.5em}.usa-display+*{margin-top:1em}}@media (min-width:40em){.usa-display{clear:both;font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:3.19rem;font-weight:700;line-height:1.1;margin-bottom:0;margin-top:0}*+.usa-display{margin-top:1.5em}.usa-display+*{margin-top:1em}}.usa-intro{font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.46rem;font-weight:400;line-height:1.6;max-width:88ex}.usa-dark-background{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;background-color:#3d4551}.usa-dark-background p,.usa-dark-background span{color:#fff}.usa-dark-background a,.usa-dark-background a:visited{color:#dfe1e2}.usa-dark-background a:hover{color:#f0f0f0}.usa-prose>p{line-height:1.5;margin-bottom:0;margin-top:0;max-width:68ex}.usa-prose>*+p,.usa-prose>p+*{margin-top:1em}.usa-prose>h1,.usa-prose>h2,.usa-prose>h3,.usa-prose>h4,.usa-prose>h5,.usa-prose>h6{clear:both;margin-bottom:0;margin-top:0}.usa-prose>*+h1,.usa-prose>*+h2,.usa-prose>*+h3,.usa-prose>*+h4,.usa-prose>*+h5,.usa-prose>*+h6{margin-top:1.5em}.usa-prose>h1+*,.usa-prose>h2+*,.usa-prose>h3+*,.usa-prose>h4+*,.usa-prose>h5+*,.usa-prose>h6+*{margin-top:1em}.usa-link{color:#005ea2;text-decoration:underline}.usa-link:visited{color:#54278f}.usa-link:hover{color:#1a4480}.usa-link:active{color:#162e51}.usa-link:focus{outline:.25rem solid #2491ff;outline-offset:0}.usa-link--external:after{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGZpbGw9IiMwMDVlYTIiIGQ9Ik0xOSAxOUg1VjVoN1YzSDVhMiAyIDAgMCAwLTIgMnYxNGEyIDIgMCAwIDAgMiAyaDE0YzEuMSAwIDItLjkgMi0ydi03aC0ydjd6TTE0IDN2MmgzLjU5bC05LjgzIDkuODMgMS40MSAxLjQxTDE5IDYuNDFWMTBoMlYzaC03eiIvPjwvc3ZnPg==);background-position:50% 60%;background-repeat:no-repeat;background-size:100%;content:"";display:inline;margin-left:2px;padding-left:.65em}.usa-link--external:hover:after{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGZpbGw9IiMwYjQ3NzgiIGQ9Ik0xOSAxOUg1VjVoN1YzSDVhMiAyIDAgMCAwLTIgMnYxNGEyIDIgMCAwIDAgMiAyaDE0YzEuMSAwIDItLjkgMi0ydi03aC0ydjd6TTE0IDN2MmgzLjU5bC05LjgzIDkuODMgMS40MSAxLjQxTDE5IDYuNDFWMTBoMlYzaC03eiIvPjwvc3ZnPg==),linear-gradient(transparent,transparent);background-repeat:no-repeat}.usa-link--external.usa-link--alt:after{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGZpbGw9IiNmMGYwZjAiIGQ9Ik0xOSAxOUg1VjVoN1YzSDVhMiAyIDAgMCAwLTIgMnYxNGEyIDIgMCAwIDAgMiAyaDE0YzEuMSAwIDItLjkgMi0ydi03aC0ydjd6TTE0IDN2MmgzLjU5bC05LjgzIDkuODMgMS40MSAxLjQxTDE5IDYuNDFWMTBoMlYzaC03eiIvPjwvc3ZnPg==);background-position:50% 60%;background-repeat:no-repeat;background-size:100%;content:"";display:inline;margin-left:2px;padding-left:.65em}.usa-link--external.usa-link--alt:hover:after{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0xOSAxOUg1VjVoN1YzSDVhMiAyIDAgMCAwLTIgMnYxNGEyIDIgMCAwIDAgMiAyaDE0YzEuMSAwIDItLjkgMi0ydi03aC0ydjd6TTE0IDN2MmgzLjU5bC05LjgzIDkuODMgMS40MSAxLjQxTDE5IDYuNDFWMTBoMlYzaC03eiIvPjwvc3ZnPg==),linear-gradient(transparent,transparent);background-repeat:no-repeat}.usa-list--unstyled{list-style-type:none;margin-bottom:0;margin-top:0;padding-left:0}.usa-list--unstyled>li{margin-bottom:0;max-width:unset}.usa-prose .usa-list--unstyled{list-style-type:none;margin-bottom:0;margin-top:0;padding-left:0}.usa-prose .usa-list--unstyled>li{margin-bottom:0;max-width:unset}.usa-prose{font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.06rem;line-height:1.5}.usa-prose>a{color:#005ea2;text-decoration:underline}.usa-prose>a:visited{color:#54278f}.usa-prose>a:hover{color:#1a4480}.usa-prose>a:active{color:#162e51}.usa-prose>a:focus{outline:.25rem solid #2491ff;outline-offset:0}.usa-prose>h1{font-size:2.66rem}.usa-prose>h1,.usa-prose>h2{font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-weight:700;line-height:1.1}.usa-prose>h2{font-size:2.13rem}.usa-prose>h3{font-size:1.46rem}.usa-prose>h3,.usa-prose>h4{font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-weight:700;line-height:1.1}.usa-prose>h4{font-size:1.06rem}.usa-prose>h5{font-size:1rem;font-weight:700}.usa-prose>h5,.usa-prose>h6{font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;line-height:1.1}.usa-prose>h6{font-size:.87rem;font-weight:400;letter-spacing:.025em;text-transform:uppercase}@media (max-width:29.99em){.usa-prose>.usa-table--stacked thead{display:none}.usa-prose>.usa-table--stacked td,.usa-prose>.usa-table--stacked th{border-bottom-width:0;display:block;width:100%}.usa-prose>.usa-table--stacked tr{border-bottom:.25rem solid #1b1b1b;border-top-width:0;display:block;width:100%}.usa-prose>.usa-table--stacked tr td:first-child,.usa-prose>.usa-table--stacked tr th:first-child{border-top-width:0}.usa-prose>.usa-table--stacked tr:nth-child(odd) td,.usa-prose>.usa-table--stacked tr:nth-child(odd) th{background-color:inherit}.usa-prose>.usa-table--stacked tr:first-child td:first-child,.usa-prose>.usa-table--stacked tr:first-child th:first-child{border-top:.25rem solid #1b1b1b}.usa-prose>.usa-table--stacked td[data-label],.usa-prose>.usa-table--stacked th[data-label]{padding-bottom:.75rem}.usa-prose>.usa-table--stacked td[data-label]:before,.usa-prose>.usa-table--stacked th[data-label]:before{content:attr(data-label);display:block;font-weight:700;margin:-.5rem -1rem 0;padding:.75rem 1rem .25rem}.usa-prose>.usa-table--stacked-header thead{display:none}.usa-prose>.usa-table--stacked-header td,.usa-prose>.usa-table--stacked-header th{border-bottom-width:0;display:block;width:100%}.usa-prose>.usa-table--stacked-header tr{border-bottom:.25rem solid #1b1b1b;border-top-width:0;display:block;width:100%}.usa-prose>.usa-table--stacked-header tr td:first-child,.usa-prose>.usa-table--stacked-header tr th:first-child{border-top-width:0}.usa-prose>.usa-table--stacked-header tr:nth-child(odd) td,.usa-prose>.usa-table--stacked-header tr:nth-child(odd) th{background-color:inherit}.usa-prose>.usa-table--stacked-header tr:first-child td:first-child,.usa-prose>.usa-table--stacked-header tr:first-child th:first-child{border-top:.25rem solid #1b1b1b}.usa-prose>.usa-table--stacked-header td[data-label],.usa-prose>.usa-table--stacked-header th[data-label]{padding-bottom:.75rem}.usa-prose>.usa-table--stacked-header td[data-label]:before,.usa-prose>.usa-table--stacked-header th[data-label]:before{content:attr(data-label);display:block;font-weight:700;margin:-.5rem -1rem 0;padding:.75rem 1rem .25rem}.usa-prose>.usa-table--stacked-header tr td:first-child,.usa-prose>.usa-table--stacked-header tr th:first-child{background-color:#dfe1e2;color:#1b1b1b;font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.06rem;font-weight:700;line-height:1.1;padding:.75rem 1rem}.usa-prose>.usa-table--stacked-header tr td:first-child:before,.usa-prose>.usa-table--stacked-header tr th:first-child:before{display:none}}.usa-accordion{color:#1b1b1b;font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.06rem;line-height:1.5;list-style-type:none;margin:0;padding:0;width:100%}.usa-accordion>li{margin-bottom:0;max-width:unset}.usa-accordion>ul li ul{list-style:disc}.usa-accordion>ul li ul>li>ul{list-style:circle}.usa-accordion>ul li ul>li>ul>li>ul{list-style:square}.usa-accordion+.usa-accordion,.usa-accordion+.usa-accordion--bordered{margin-top:.5rem}.usa-accordion--bordered .usa-accordion__content{border-bottom:.25rem solid #f0f0f0;border-left:.25rem solid #f0f0f0;border-right:.25rem solid #f0f0f0;padding-bottom:1rem}.usa-accordion--bordered .usa-accordion__heading{margin-bottom:0}.usa-accordion__heading,.usa-prose .usa-accordion__heading{font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.06rem;line-height:.9;margin:0}.usa-accordion__heading:not(:first-child),.usa-prose .usa-accordion__heading:not(:first-child){margin-top:.5rem}.usa-accordion__content{background-color:#fff;margin-top:0;overflow:auto;padding:1rem 1.25rem .75rem}.usa-accordion__content>:first-child{margin-top:0}.usa-accordion__content>:last-child{margin-bottom:0}.usa-accordion__button{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:subpixel-antialiased;background-color:transparent;background-color:#f0f0f0;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGQ9Ik0xOSAxM0g1di0yaDE0djJ6Ii8+PC9zdmc+),linear-gradient(transparent,transparent);background-position:right 1.25rem center;background-repeat:no-repeat;background-size:1.5rem;border:0;border-radius:0;box-shadow:none;color:#005ea2;color:#1b1b1b;cursor:pointer;display:inline-block;font-weight:400;font-weight:700;margin:0;padding:1rem 3.5rem 1rem 1.25rem;text-align:left;text-decoration:underline;text-decoration:none;width:100%}.usa-accordion__button:visited{color:#54278f}.usa-accordion__button:hover{color:#1a4480}.usa-accordion__button:active{color:#162e51}.usa-accordion__button:focus{outline:.25rem solid #2491ff;outline-offset:0}.usa-accordion__button:active,.usa-accordion__button:hover{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:subpixel-antialiased;background-color:transparent;box-shadow:none;text-decoration:underline}.usa-accordion__button:hover{background-color:#dfe1e2;color:#1b1b1b;text-decoration:none}.usa-accordion__button[aria-expanded=false]{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGQ9Ik0xOSAxM2gtNnY2aC0ydi02SDV2LTJoNlY1aDJ2Nmg2djJ6Ii8+PC9zdmc+),linear-gradient(transparent,transparent);background-repeat:no-repeat;background-size:1.5rem}.usa-alert{background-color:#f0f0f0;background-position:1.75rem .75rem;background-repeat:no-repeat;background-size:2.5rem;font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.06rem;line-height:1.5;padding:1.25rem 1.25rem 1rem 1.75rem;position:relative}*+.usa-alert{margin-top:1rem}.usa-alert:before{background-color:#a9aeb1;content:"";height:100%;left:0;position:absolute;top:0;width:.5rem}.usa-alert .usa-alert__body>.usa-list,.usa-alert>.usa-list{padding-left:0}.usa-alert .usa-alert__body>.usa-list:last-child,.usa-alert>.usa-list:last-child{margin-bottom:0}.usa-alert__icon{display:table-cell;padding-right:.5rem}.usa-alert__body{display:table-cell;vertical-align:top}.usa-alert__heading{font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.46rem;line-height:.9;margin-bottom:.5rem;margin-top:0}.usa-alert__text{margin-bottom:0;margin-top:0}.usa-alert__text a{color:#005ea2;text-decoration:underline}.usa-alert__text a:visited{color:#54278f}.usa-alert__text a:hover{color:#1a4480}.usa-alert__text a:active{color:#162e51}.usa-alert__text a:focus{outline:.25rem solid #2491ff;outline-offset:0}.usa-alert__text:only-child{margin-bottom:.5rem;padding-top:.25rem}.usa-alert--success{background-color:#ecf3ec;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0tMiAxNS01LTUgMS40MS0xLjQxTDEwIDE0LjE3bDcuNTktNy41OUwxOSA4bC05IDl6Ii8+PC9zdmc+),linear-gradient(transparent,transparent);background-repeat:no-repeat;color:#1b1b1b}.usa-alert--success:before{background-color:#00a91c}.usa-alert--success .usa-alert__body{padding-left:3.75rem}.usa-alert--success .usa-link{color:#005ea2}.usa-alert--success .usa-link:visited{color:#54278f}.usa-alert--success .usa-link:active,.usa-alert--success .usa-link:hover{color:#1a4480}.usa-alert--success.usa-alert--no-icon{background-image:none}.usa-alert--success.usa-alert--no-icon .usa-alert__body{padding-left:0}.usa-alert--warning{background-color:#faf3d1;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGQ9Ik0xIDIxaDIyTDEyIDIgMSAyMXptMTItM2gtMnYtMmgydjJ6bTAtNGgtMnYtNGgydjR6Ii8+PC9zdmc+),linear-gradient(transparent,transparent);background-repeat:no-repeat;color:#1b1b1b}.usa-alert--warning:before{background-color:#ffbe2e}.usa-alert--warning .usa-alert__body{padding-left:3.75rem}.usa-alert--warning .usa-link{color:#005ea2}.usa-alert--warning .usa-link:visited{color:#54278f}.usa-alert--warning .usa-link:active,.usa-alert--warning .usa-link:hover{color:#1a4480}.usa-alert--warning.usa-alert--no-icon{background-image:none}.usa-alert--warning.usa-alert--no-icon .usa-alert__body{padding-left:0}.usa-alert--error{background-color:#f4e3db;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0xIDE1aC0ydi0yaDJ2MnptMC00aC0yVjdoMnY2eiIvPjwvc3ZnPg==),linear-gradient(transparent,transparent);background-repeat:no-repeat;color:#1b1b1b}.usa-alert--error:before{background-color:#d54309}.usa-alert--error .usa-alert__body{padding-left:3.75rem}.usa-alert--error .usa-link{color:#005ea2}.usa-alert--error .usa-link:visited{color:#54278f}.usa-alert--error .usa-link:active,.usa-alert--error .usa-link:hover{color:#1a4480}.usa-alert--error.usa-alert--no-icon{background-image:none}.usa-alert--error.usa-alert--no-icon .usa-alert__body{padding-left:0}.usa-alert--info{background-color:#e7f6f8;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0xIDE1aC0ydi02aDJ2NnptMC04aC0yVjdoMnYyeiIvPjwvc3ZnPg==),linear-gradient(transparent,transparent);background-repeat:no-repeat;color:#1b1b1b}.usa-alert--info:before{background-color:#00bde3}.usa-alert--info .usa-alert__body{padding-left:3.75rem}.usa-alert--info .usa-link{color:#005ea2}.usa-alert--info .usa-link:visited{color:#54278f}.usa-alert--info .usa-link:active,.usa-alert--info .usa-link:hover{color:#1a4480}.usa-alert--info.usa-alert--no-icon{background-image:none}.usa-alert--info.usa-alert--no-icon .usa-alert__body{padding-left:0}.usa-alert--emergency{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0xIDE1aC0ydi0yaDJ2MnptMC00aC0yVjdoMnY2eiIvPjwvc3ZnPg==),linear-gradient(transparent,transparent);background-repeat:no-repeat;color:#fff}.usa-alert--emergency,.usa-alert--emergency:before{background-color:#9c3d10}.usa-alert--emergency .usa-alert__body{padding-left:3.75rem}.usa-alert--emergency .usa-link,.usa-alert--emergency .usa-link:visited{color:#dfe1e2}.usa-alert--emergency .usa-link:active,.usa-alert--emergency .usa-link:hover{color:#f0f0f0}.usa-alert--emergency.usa-alert--no-icon{background-image:none}.usa-alert--emergency.usa-alert--no-icon .usa-alert__body{padding-left:0}.usa-alert--slim{background-position:1.75rem .75rem;background-size:1.5rem;padding-bottom:.5rem;padding-top:.5rem}.usa-alert--slim .usa-alert__body{padding-left:2rem}.usa-alert--slim .usa-alert__text:only-child{margin-bottom:.25rem;padding-top:.25rem}.usa-alert--no-heading{background-position:1.75rem 1rem}.usa-alert--validation{background-position:1.75rem calc(1.25rem - 2px);background-size:1.5rem}.usa-alert--validation .usa-alert__body{padding-left:2.5rem}.usa-alert--validation .usa-checklist{margin-top:1rem}.usa-identifier{background-color:#1b1b1b;color:#fff;font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.06rem;line-height:1.3;padding-bottom:1rem}.usa-identifier__container{margin-left:auto;margin-right:auto;max-width:64rem;padding-left:1rem;padding-right:1rem}@media (min-width:64em){.usa-identifier__container{padding-left:2rem;padding-right:2rem}}.usa-identifier__section{padding-bottom:1rem;padding-top:1rem}@media (min-width:40em){.usa-identifier__section--masthead .usa-identifier__container{align-items:center;display:flex}}.usa-identifier__logos{display:flex;margin-right:1rem}.usa-identifier__logo{display:block;height:3rem;text-decoration:none}.usa-identifier__logo+.usa-identifier__logo{margin-left:.5rem}.usa-identifier__logo-img{height:100%;width:auto}.usa-identifier__identity{flex:1 1;margin-top:1rem}@media (min-width:40em){.usa-identifier__identity{margin-top:0}}.usa-identifier__identity-disclaimer,.usa-identifier__identity-domain{margin:0;padding:0}.usa-identifier__identity-domain{color:#a9aeb1}.usa-identifier__identity-disclaimer{font-weight:700}.usa-identifier__identity-disclaimer a,.usa-identifier__identity-disclaimer a:visited{color:#dfe1e2}.usa-identifier__identity-disclaimer a:active,.usa-identifier__identity-disclaimer a:hover{color:#f0f0f0}@media (min-width:40em){.usa-identifier__section--required-links{padding-bottom:.5rem;padding-top:.5rem}}@media (min-width:64em){.usa-identifier__section--required-links{font-size:1rem}}.usa-identifier__required-links-list{list-style-type:none;margin-bottom:0;margin-top:0;padding-left:0}@media (min-width:40em){.usa-identifier__required-links-list{-webkit-column-count:2;column-count:2;-webkit-column-fill:balance;column-fill:balance;-webkit-column-gap:2rem;column-gap:2rem}}@media (min-width:64em){.usa-identifier__required-links-list{-webkit-column-count:4;column-count:4}}.usa-identifier__required-links-item{-webkit-column-break-inside:avoid;break-inside:avoid;margin-bottom:.75rem}.usa-identifier__required-links-item:last-child{margin-bottom:0}@media (min-width:64em){.usa-identifier__required-links-item{margin-bottom:.5rem}}.usa-identifier__required-link{color:#a9aeb1;display:inline-block}.usa-identifier__required-link:visited{color:#a9aeb1}.usa-identifier__required-link:active,.usa-identifier__required-link:hover{color:#dfe1e2}.usa-identifier__section--usagov a{color:#dfe1e2;display:inline-block;font-weight:700;margin-top:.5rem}.usa-identifier__section--usagov a:visited{color:#dfe1e2}.usa-identifier__section--usagov a:active,.usa-identifier__section--usagov a:hover{color:#f0f0f0}@media (min-width:40em){.usa-identifier__section--usagov a{margin-top:0}.usa-identifier__usagov-description{display:inline-flex}}.usa-banner{background-color:#f0f0f0;font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.06rem;line-height:1.5}@media (min-width:40em){.usa-banner{font-size:.87rem;padding-bottom:0}}.usa-banner .usa-accordion{font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.06rem;line-height:1.5}.usa-banner__content,.usa-banner__header{color:#1b1b1b}.usa-banner__content{background-color:transparent;font-size:1rem;margin-left:auto;margin-right:auto;max-width:64rem;overflow:hidden;padding:.25rem 1rem 1rem .5rem;width:100%}@media (min-width:64em){.usa-banner__content{padding-left:2rem;padding-right:2rem}}@media (min-width:40em){.usa-banner__content{padding-bottom:1.5rem;padding-top:1.5rem}}.usa-banner__content p:first-child{margin:0}.usa-banner__guidance{align-items:flex-start;display:flex;max-width:64ex;padding-top:1rem}@media (min-width:40em){.usa-banner__guidance{padding-top:0}}.usa-banner__lock-image{height:1.5ex;width:1.21875ex}.usa-banner__lock-image path{fill:currentColor}.usa-banner__inner{align-items:flex-start;display:flex;flex-wrap:wrap;margin-left:auto;margin-right:auto;max-width:64rem;padding-left:1rem;padding-right:0}@media (min-width:64em){.usa-banner__inner{padding-left:2rem;padding-right:2rem}}@media (min-width:40em){.usa-banner__inner{align-items:center}}.usa-banner__header{font-size:.8rem;font-weight:400;min-height:3rem;padding-bottom:.5rem;padding-top:.5rem;position:relative}@media (min-width:40em){.usa-banner__header{min-height:0;padding-bottom:.25rem;padding-top:.25rem}}.usa-banner__header-text{font-size:.8rem;line-height:1.1;margin-bottom:0;margin-top:0}.usa-banner__header-action{color:#005ea2;line-height:1.1;margin-bottom:0;margin-top:2px;text-decoration:underline}.usa-banner__header-action:after{background:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2NCAzOSI+PHBhdGggZD0iTTYzLjM2IDQuMDA0IDYwLjE1NS43NDFjLS40MjctLjQzNi0uOTE5LS42NTQtMS40NzUtLjY1NC0uNTU1IDAtMS4wNDcuMjE4LTEuNDc1LjY1NEwzMiAyNi40IDYuNzk4Ljc0QzYuMzcuMzA2IDUuODc4LjA4OCA1LjMyMy4wODhjLS41NTYgMC0xLjA0OC4yMTgtMS40NzYuNjU0TC42NDIgNC4wMDVDLjIxMyA0LjQ0IDAgNC45NDEgMCA1LjUwN2MwIC41NjUuMjE0IDEuMDY2LjY0MiAxLjUwMWwyOS44ODMgMzAuNDI3Yy40MjcuNDM1LjkyLjY1MiAxLjQ3NS42NTIuNTU2IDAgMS4wNDctLjIxNyAxLjQ3NC0uNjUyTDYzLjM2MSA3LjAwOGMuNDI3LS40MzUuNjM5LS45MzYuNjM5LTEuNTAxIDAtLjU2Ni0uMjEyLTEuMDY3LS42NC0xLjUwM3oiLz48L3N2Zz4=) no-repeat 50%/1.3128205128ex .8ex;content:"";display:inline-block;height:.8ex;margin-left:2px;vertical-align:middle;width:1.3128205128ex}@supports((-webkit-mask:url("")) or (mask:url(""))){.usa-banner__header-action:after{background:none;background-color:#005ea2;-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2NCAzOSI+PHBhdGggZD0iTTYzLjM2IDQuMDA0IDYwLjE1NS43NDFjLS40MjctLjQzNi0uOTE5LS42NTQtMS40NzUtLjY1NC0uNTU1IDAtMS4wNDcuMjE4LTEuNDc1LjY1NEwzMiAyNi40IDYuNzk4Ljc0QzYuMzcuMzA2IDUuODc4LjA4OCA1LjMyMy4wODhjLS41NTYgMC0xLjA0OC4yMTgtMS40NzYuNjU0TC42NDIgNC4wMDVDLjIxMyA0LjQ0IDAgNC45NDEgMCA1LjUwN2MwIC41NjUuMjE0IDEuMDY2LjY0MiAxLjUwMWwyOS44ODMgMzAuNDI3Yy40MjcuNDM1LjkyLjY1MiAxLjQ3NS42NTIuNTU2IDAgMS4wNDctLjIxNyAxLjQ3NC0uNjUyTDYzLjM2MSA3LjAwOGMuNDI3LS40MzUuNjM5LS45MzYuNjM5LTEuNTAxIDAtLjU2Ni0uMjEyLTEuMDY3LS42NC0xLjUwM3oiLz48L3N2Zz4=) no-repeat center/1.3128205128ex .8ex;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2NCAzOSI+PHBhdGggZD0iTTYzLjM2IDQuMDA0IDYwLjE1NS43NDFjLS40MjctLjQzNi0uOTE5LS42NTQtMS40NzUtLjY1NC0uNTU1IDAtMS4wNDcuMjE4LTEuNDc1LjY1NEwzMiAyNi40IDYuNzk4Ljc0QzYuMzcuMzA2IDUuODc4LjA4OCA1LjMyMy4wODhjLS41NTYgMC0xLjA0OC4yMTgtMS40NzYuNjU0TC42NDIgNC4wMDVDLjIxMyA0LjQ0IDAgNC45NDEgMCA1LjUwN2MwIC41NjUuMjE0IDEuMDY2LjY0MiAxLjUwMWwyOS44ODMgMzAuNDI3Yy40MjcuNDM1LjkyLjY1MiAxLjQ3NS42NTIuNTU2IDAgMS4wNDctLjIxNyAxLjQ3NC0uNjUyTDYzLjM2MSA3LjAwOGMuNDI3LS40MzUuNjM5LS45MzYuNjM5LTEuNTAxIDAtLjU2Ni0uMjEyLTEuMDY3LS42NC0xLjUwM3oiLz48L3N2Zz4=) no-repeat center/1.3128205128ex .8ex}.usa-banner__header-action:after:hover{background-color:#1a4480}}.usa-banner__header-action:hover:after{background-color:#1a4480;content:""}.usa-banner__header-action:visited{color:#54278f}.usa-banner__header-action:active,.usa-banner__header-action:hover{color:#1a4480}@media (min-width:40em){.usa-banner__header-action{display:none}}.usa-banner__header-flag{float:left;margin-right:.5rem;width:1rem}@media (min-width:40em){.usa-banner__header-flag{margin-right:.5rem;padding-top:0}}.usa-banner__header--expanded{padding-right:3.5rem}@media (min-width:40em){.usa-banner__header--expanded{background-color:transparent;display:block;font-size:.8rem;font-weight:400;min-height:0;padding-right:0}}.usa-banner__header--expanded .usa-banner__inner{margin-left:0}@media (min-width:40em){.usa-banner__header--expanded .usa-banner__inner{margin-left:auto}}.usa-banner__header--expanded .usa-banner__header-action{display:none}.usa-banner__button{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:subpixel-antialiased;background-color:transparent;border:0;border-radius:0;bottom:0;box-shadow:none;color:#005ea2;display:block;font-size:.8rem;font-weight:400;height:auto;left:0;line-height:1.1;margin:0;padding:0;position:absolute;text-align:left;text-decoration:underline;text-decoration:none;top:0;vertical-align:baseline;width:auto}.usa-banner__button:hover{color:#1a4480}.usa-banner__button:active{color:#162e51}.usa-banner__button:focus{outline:.25rem solid #2491ff;outline-offset:0}.usa-banner__button:active,.usa-banner__button:hover{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:subpixel-antialiased;background-color:transparent;box-shadow:none;text-decoration:underline}.usa-banner__button:visited{color:#54278f}.usa-banner__button:active,.usa-banner__button:hover{color:#1a4480}@media (max-width:39.99em){.usa-banner__button{width:100%}}@media (min-width:40em){.usa-banner__button{bottom:auto;color:#005ea2;display:inline;left:auto;margin-left:.5rem;position:static;position:relative;right:auto;top:auto}.usa-banner__button:after{background:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2NCAzOSI+PHBhdGggZD0iTTYzLjM2IDQuMDA0IDYwLjE1NS43NDFjLS40MjctLjQzNi0uOTE5LS42NTQtMS40NzUtLjY1NC0uNTU1IDAtMS4wNDcuMjE4LTEuNDc1LjY1NEwzMiAyNi40IDYuNzk4Ljc0QzYuMzcuMzA2IDUuODc4LjA4OCA1LjMyMy4wODhjLS41NTYgMC0xLjA0OC4yMTgtMS40NzYuNjU0TC42NDIgNC4wMDVDLjIxMyA0LjQ0IDAgNC45NDEgMCA1LjUwN2MwIC41NjUuMjE0IDEuMDY2LjY0MiAxLjUwMWwyOS44ODMgMzAuNDI3Yy40MjcuNDM1LjkyLjY1MiAxLjQ3NS42NTIuNTU2IDAgMS4wNDctLjIxNyAxLjQ3NC0uNjUyTDYzLjM2MSA3LjAwOGMuNDI3LS40MzUuNjM5LS45MzYuNjM5LTEuNTAxIDAtLjU2Ni0uMjEyLTEuMDY3LS42NC0xLjUwM3oiLz48L3N2Zz4=) no-repeat 50%/1.3128205128ex .8ex;content:"";display:inline-block;height:.8ex;margin-left:2px;vertical-align:middle;width:1.3128205128ex}@supports((-webkit-mask:url("")) or (mask:url(""))){.usa-banner__button:after{background:none;background-color:#005ea2;-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2NCAzOSI+PHBhdGggZD0iTTYzLjM2IDQuMDA0IDYwLjE1NS43NDFjLS40MjctLjQzNi0uOTE5LS42NTQtMS40NzUtLjY1NC0uNTU1IDAtMS4wNDcuMjE4LTEuNDc1LjY1NEwzMiAyNi40IDYuNzk4Ljc0QzYuMzcuMzA2IDUuODc4LjA4OCA1LjMyMy4wODhjLS41NTYgMC0xLjA0OC4yMTgtMS40NzYuNjU0TC42NDIgNC4wMDVDLjIxMyA0LjQ0IDAgNC45NDEgMCA1LjUwN2MwIC41NjUuMjE0IDEuMDY2LjY0MiAxLjUwMWwyOS44ODMgMzAuNDI3Yy40MjcuNDM1LjkyLjY1MiAxLjQ3NS42NTIuNTU2IDAgMS4wNDctLjIxNyAxLjQ3NC0uNjUyTDYzLjM2MSA3LjAwOGMuNDI3LS40MzUuNjM5LS45MzYuNjM5LTEuNTAxIDAtLjU2Ni0uMjEyLTEuMDY3LS42NC0xLjUwM3oiLz48L3N2Zz4=) no-repeat center/1.3128205128ex .8ex;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2NCAzOSI+PHBhdGggZD0iTTYzLjM2IDQuMDA0IDYwLjE1NS43NDFjLS40MjctLjQzNi0uOTE5LS42NTQtMS40NzUtLjY1NC0uNTU1IDAtMS4wNDcuMjE4LTEuNDc1LjY1NEwzMiAyNi40IDYuNzk4Ljc0QzYuMzcuMzA2IDUuODc4LjA4OCA1LjMyMy4wODhjLS41NTYgMC0xLjA0OC4yMTgtMS40NzYuNjU0TC42NDIgNC4wMDVDLjIxMyA0LjQ0IDAgNC45NDEgMCA1LjUwN2MwIC41NjUuMjE0IDEuMDY2LjY0MiAxLjUwMWwyOS44ODMgMzAuNDI3Yy40MjcuNDM1LjkyLjY1MiAxLjQ3NS42NTIuNTU2IDAgMS4wNDctLjIxNyAxLjQ3NC0uNjUyTDYzLjM2MSA3LjAwOGMuNDI3LS40MzUuNjM5LS45MzYuNjM5LTEuNTAxIDAtLjU2Ni0uMjEyLTEuMDY3LS42NC0xLjUwM3oiLz48L3N2Zz4=) no-repeat center/1.3128205128ex .8ex}.usa-banner__button:after:hover{background-color:#1a4480}}.usa-banner__button:hover:after{background-color:#1a4480;content:""}.usa-banner__button:visited{color:#54278f}.usa-banner__button:active,.usa-banner__button:hover{color:#1a4480}.usa-banner__button:hover{text-decoration:none}}.usa-banner__button[aria-expanded=false],.usa-banner__button[aria-expanded=true]{background-image:none}@media (max-width:39.99em){.usa-banner__button[aria-expanded=true]:after{background:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGQ9Ik0xOSA2LjQxIDE3LjU5IDUgMTIgMTAuNTkgNi40MSA1IDUgNi40MSAxMC41OSAxMiA1IDE3LjU5IDYuNDEgMTkgMTIgMTMuNDEgMTcuNTkgMTkgMTkgMTcuNTkgMTMuNDEgMTJ6Ii8+PC9zdmc+) no-repeat 50%/1.5rem 1.5rem;content:"";display:inline-block;height:3rem;margin-left:0;vertical-align:middle;width:3rem}@supports((-webkit-mask:url("")) or (mask:url(""))){.usa-banner__button[aria-expanded=true]:after{background:none;background-color:#005ea2;-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGQ9Ik0xOSA2LjQxIDE3LjU5IDUgMTIgMTAuNTkgNi40MSA1IDUgNi40MSAxMC41OSAxMiA1IDE3LjU5IDYuNDEgMTkgMTIgMTMuNDEgMTcuNTkgMTkgMTkgMTcuNTkgMTMuNDEgMTJ6Ii8+PC9zdmc+) no-repeat center/1.5rem 1.5rem;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGQ9Ik0xOSA2LjQxIDE3LjU5IDUgMTIgMTAuNTkgNi40MSA1IDUgNi40MSAxMC41OSAxMiA1IDE3LjU5IDYuNDEgMTkgMTIgMTMuNDEgMTcuNTkgMTkgMTkgMTcuNTkgMTMuNDEgMTJ6Ii8+PC9zdmc+) no-repeat center/1.5rem 1.5rem}}.usa-banner__button[aria-expanded=true]:before{background-color:#dfe1e2;bottom:0;content:"";display:block;height:3rem;position:absolute;right:0;top:0;width:3rem}.usa-banner__button[aria-expanded=true]:after{bottom:0;position:absolute;right:0;top:0}}@media (min-width:40em){.usa-banner__button[aria-expanded=true]{height:auto;padding:0;position:relative}.usa-banner__button[aria-expanded=true]:after{background:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2NCAzOSI+PHBhdGggZD0iTTYzLjM2IDQuMDA0IDYwLjE1NS43NDFjLS40MjctLjQzNi0uOTE5LS42NTQtMS40NzUtLjY1NC0uNTU1IDAtMS4wNDcuMjE4LTEuNDc1LjY1NEwzMiAyNi40IDYuNzk4Ljc0QzYuMzcuMzA2IDUuODc4LjA4OCA1LjMyMy4wODhjLS41NTYgMC0xLjA0OC4yMTgtMS40NzYuNjU0TC42NDIgNC4wMDVDLjIxMyA0LjQ0IDAgNC45NDEgMCA1LjUwN2MwIC41NjUuMjE0IDEuMDY2LjY0MiAxLjUwMWwyOS44ODMgMzAuNDI3Yy40MjcuNDM1LjkyLjY1MiAxLjQ3NS42NTIuNTU2IDAgMS4wNDctLjIxNyAxLjQ3NC0uNjUyTDYzLjM2MSA3LjAwOGMuNDI3LS40MzUuNjM5LS45MzYuNjM5LTEuNTAxIDAtLjU2Ni0uMjEyLTEuMDY3LS42NC0xLjUwM3oiLz48L3N2Zz4=) no-repeat 50%/1.3128205128ex .8ex;content:"";display:inline-block;height:.8ex;margin-left:2px;-webkit-transform:rotate(180deg);transform:rotate(180deg);vertical-align:middle;width:1.3128205128ex}@supports((-webkit-mask:url("")) or (mask:url(""))){.usa-banner__button[aria-expanded=true]:after{background:none;background-color:#005ea2;-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2NCAzOSI+PHBhdGggZD0iTTYzLjM2IDQuMDA0IDYwLjE1NS43NDFjLS40MjctLjQzNi0uOTE5LS42NTQtMS40NzUtLjY1NC0uNTU1IDAtMS4wNDcuMjE4LTEuNDc1LjY1NEwzMiAyNi40IDYuNzk4Ljc0QzYuMzcuMzA2IDUuODc4LjA4OCA1LjMyMy4wODhjLS41NTYgMC0xLjA0OC4yMTgtMS40NzYuNjU0TC42NDIgNC4wMDVDLjIxMyA0LjQ0IDAgNC45NDEgMCA1LjUwN2MwIC41NjUuMjE0IDEuMDY2LjY0MiAxLjUwMWwyOS44ODMgMzAuNDI3Yy40MjcuNDM1LjkyLjY1MiAxLjQ3NS42NTIuNTU2IDAgMS4wNDctLjIxNyAxLjQ3NC0uNjUyTDYzLjM2MSA3LjAwOGMuNDI3LS40MzUuNjM5LS45MzYuNjM5LTEuNTAxIDAtLjU2Ni0uMjEyLTEuMDY3LS42NC0xLjUwM3oiLz48L3N2Zz4=) no-repeat center/1.3128205128ex .8ex;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2NCAzOSI+PHBhdGggZD0iTTYzLjM2IDQuMDA0IDYwLjE1NS43NDFjLS40MjctLjQzNi0uOTE5LS42NTQtMS40NzUtLjY1NC0uNTU1IDAtMS4wNDcuMjE4LTEuNDc1LjY1NEwzMiAyNi40IDYuNzk4Ljc0QzYuMzcuMzA2IDUuODc4LjA4OCA1LjMyMy4wODhjLS41NTYgMC0xLjA0OC4yMTgtMS40NzYuNjU0TC42NDIgNC4wMDVDLjIxMyA0LjQ0IDAgNC45NDEgMCA1LjUwN2MwIC41NjUuMjE0IDEuMDY2LjY0MiAxLjUwMWwyOS44ODMgMzAuNDI3Yy40MjcuNDM1LjkyLjY1MiAxLjQ3NS42NTIuNTU2IDAgMS4wNDctLjIxNyAxLjQ3NC0uNjUyTDYzLjM2MSA3LjAwOGMuNDI3LS40MzUuNjM5LS45MzYuNjM5LTEuNTAxIDAtLjU2Ni0uMjEyLTEuMDY3LS42NC0xLjUwM3oiLz48L3N2Zz4=) no-repeat center/1.3128205128ex .8ex}.usa-banner__button[aria-expanded=true]:after:hover{background-color:#1a4480}}.usa-banner__button[aria-expanded=true]:hover:after{background-color:#1a4480;content:""}}.usa-banner__button-text{left:-999em;position:absolute;right:auto;text-decoration:underline}@media (min-width:40em){.usa-banner__button-text{display:inline;position:static}}.usa-banner__icon{width:2.5rem}.usa-js-loading .usa-banner__content{left:-999em;position:absolute;right:auto}.usa-breadcrumb{background-color:#fff;color:#1b1b1b;font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.06rem;line-height:1.3;padding-left:0;padding-right:0}@media (min-width:30em){.usa-breadcrumb{padding-bottom:1rem;padding-top:1rem}.usa-breadcrumb:not(.usa-breadcrumb--wrap) .usa-breadcrumb__list{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}.usa-breadcrumb__list{display:block;list-style-type:none;margin:-.25rem;padding:.25rem}.usa-breadcrumb__list>li{margin-bottom:0;max-width:unset}.usa-breadcrumb__list-item{display:inline;left:-999em;position:absolute;right:auto;white-space:nowrap}@media (max-width:29.99em){.usa-breadcrumb__list-item{white-space:normal}.usa-breadcrumb__list-item:nth-last-child(2){position:static}.usa-breadcrumb__list-item:nth-last-child(2) .usa-breadcrumb__link{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:subpixel-antialiased;background-color:transparent;border:0;border-radius:0;box-shadow:none;color:#005ea2;display:inline-block;font-weight:400;margin:0;padding:1rem 0 1rem 2ex;text-align:left;text-decoration:underline;text-indent:-2ex}.usa-breadcrumb__list-item:nth-last-child(2) .usa-breadcrumb__link:hover{color:#1a4480}.usa-breadcrumb__list-item:nth-last-child(2) .usa-breadcrumb__link:active{color:#162e51}.usa-breadcrumb__list-item:nth-last-child(2) .usa-breadcrumb__link:focus{outline:.25rem solid #2491ff;outline-offset:0}.usa-breadcrumb__list-item:nth-last-child(2) .usa-breadcrumb__link:active,.usa-breadcrumb__list-item:nth-last-child(2) .usa-breadcrumb__link:hover{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:subpixel-antialiased;background-color:transparent;box-shadow:none;text-decoration:underline}.usa-breadcrumb__list-item:nth-last-child(2) .usa-breadcrumb__link:before{background:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGQ9Ik0yMCAxMUg3LjgzbDUuNTktNS41OUwxMiA0bC04IDggOCA4IDEuNDEtMS40MUw3LjgzIDEzSDIwdi0yeiIvPjwvc3ZnPg==) no-repeat 50%/2ex 2ex;content:"";display:inline-block;vertical-align:baseline;width:2ex}@supports((-webkit-mask:url("")) or (mask:url(""))){.usa-breadcrumb__list-item:nth-last-child(2) .usa-breadcrumb__link:before{background:none;background-color:#71767a;-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGQ9Ik0yMCAxMUg3LjgzbDUuNTktNS41OUwxMiA0bC04IDggOCA4IDEuNDEtMS40MUw3LjgzIDEzSDIwdi0yeiIvPjwvc3ZnPg==) no-repeat center/2ex 2ex;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGQ9Ik0yMCAxMUg3LjgzbDUuNTktNS41OUwxMiA0bC04IDggOCA4IDEuNDEtMS40MUw3LjgzIDEzSDIwdi0yeiIvPjwvc3ZnPg==) no-repeat center/2ex 2ex}}.usa-breadcrumb__list-item:nth-last-child(2) .usa-breadcrumb__link:visited{color:#54278f}.usa-breadcrumb__list-item:nth-last-child(2) .usa-breadcrumb__link:active,.usa-breadcrumb__list-item:nth-last-child(2) .usa-breadcrumb__link:hover{color:#1a4480}.usa-breadcrumb__list-item:nth-last-child(2) .usa-breadcrumb__link:before{bottom:-.2em;height:2ex;position:relative}.usa-breadcrumb__list-item:nth-last-child(2) .usa-breadcrumb__link,.usa-breadcrumb__list-item:nth-last-child(2) .usa-breadcrumb__link:active,.usa-breadcrumb__list-item:nth-last-child(2) .usa-breadcrumb__link:hover{text-decoration:none}.usa-breadcrumb__list-item:nth-last-child(2) .usa-breadcrumb__link span{text-decoration:underline}.usa-breadcrumb__list-item:nth-last-child(2) .usa-breadcrumb__link:before{margin-right:0}}@media (min-width:30em){.usa-breadcrumb__list-item{position:static}.usa-breadcrumb__list-item:not(:last-child):after{background:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGQ9Ik0xMCA2IDguNTkgNy40MSAxMy4xNyAxMmwtNC41OCA0LjU5TDEwIDE4bDYtNnoiLz48L3N2Zz4=) no-repeat 50%/2ex 2ex;content:"";display:inline-block;vertical-align:baseline;width:2ex}@supports((-webkit-mask:url("")) or (mask:url(""))){.usa-breadcrumb__list-item:not(:last-child):after{background:none;background-color:#71767a;-webkit-mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGQ9Ik0xMCA2IDguNTkgNy40MSAxMy4xNyAxMmwtNC41OCA0LjU5TDEwIDE4bDYtNnoiLz48L3N2Zz4=) no-repeat center/2ex 2ex;mask:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGQ9Ik0xMCA2IDguNTkgNy40MSAxMy4xNyAxMmwtNC41OCA0LjU5TDEwIDE4bDYtNnoiLz48L3N2Zz4=) no-repeat center/2ex 2ex}}.usa-breadcrumb__list-item:not(:last-child):after{bottom:-.2em;height:2ex;margin-left:0;margin-right:0;position:relative}}.usa-breadcrumb__link{color:#005ea2;display:inline;text-decoration:none}.usa-breadcrumb__link:visited{color:#54278f}.usa-breadcrumb__link:active,.usa-breadcrumb__link:hover{color:#1a4480}.usa-breadcrumb__link span{text-decoration:underline}@media (min-width:30em){.usa-breadcrumb--wrap{line-height:1.4}}.usa-breadcrumb--wrap .usa-breadcrumb__list-item{display:inline-block}.usa-button-group{display:flex;flex-direction:column;flex-wrap:wrap;list-style-type:none;margin:0 -.25rem;padding-left:0}@media (min-width:30em){.usa-button-group{flex-direction:row}}.usa-button-group__item{margin:.25rem}@media (min-width:30em){.usa-button-group__item:last-child{margin-right:0}}.usa-button-group__item .usa-button{margin-left:0;margin-right:0}.usa-button-group--segmented{flex-direction:row;flex-wrap:nowrap;justify-content:space-between;margin-left:0;margin-right:0}@media (min-width:30em){.usa-button-group--segmented{justify-content:flex-start}}.usa-button-group--segmented .usa-button{position:relative;width:calc(100% + 2px)}@media (min-width:30em){.usa-button-group--segmented .usa-button{width:auto}}.usa-button-group--segmented .usa-button:active,.usa-button-group--segmented .usa-button:hover{z-index:2}.usa-button-group--segmented .usa-button:focus{z-index:3}.usa-button-group--segmented .usa-button-group__item{margin-left:0;margin-right:0;width:100%}@media (min-width:30em){.usa-button-group--segmented .usa-button-group__item{width:auto}}.usa-button-group--segmented .usa-button-group__item:first-child>.usa-button{border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}.usa-button-group--segmented .usa-button-group__item:last-child>.usa-button{border-bottom-left-radius:0;border-top-left-radius:0;margin-left:-2px;margin-right:0;width:calc(100% + 2px)}@media (min-width:30em){.usa-button-group--segmented .usa-button-group__item:last-child>.usa-button{margin-left:-1px;width:auto}}.usa-button-group--segmented .usa-button-group__item:not(:first-child):not(:last-child)>.usa-button{border-radius:0;margin-left:-1px;margin-right:-1px}.usa-button-group--segmented .usa-button-group__item:not(:last-child) .usa-button:before{border-right:1px solid #1a4480;bottom:0;content:"";display:block;height:100%;position:absolute;right:1px;top:0;width:1px;z-index:3}.usa-button-group--segmented .usa-button-group__item:not(:last-child) .usa-button--secondary:before{border-right-color:#b50909}.usa-button-group--segmented .usa-button-group__item:not(:last-child) .usa-button--accent-cool:before{border-right-color:#28a0cb}.usa-button-group--segmented .usa-button-group__item:not(:last-child) .usa-button--base:before{border-right-color:#565c65}.usa-button-group--segmented .usa-button-group__item:not(:last-child) .usa-button--accent-cool:disabled:before,.usa-button-group--segmented .usa-button-group__item:not(:last-child) .usa-button--base:disabled:before,.usa-button-group--segmented .usa-button-group__item:not(:last-child) .usa-button--secondary:disabled:before{border-right-color:#71767a}.usa-button-group--segmented .usa-button-group__item:not(:last-child) .usa-button--outline:before,.usa-button-group--segmented .usa-button-group__item:not(:last-child) .usa-button:active:before{display:none}.usa-card-group,.usa-prose .usa-card-group{list-style-type:none;margin-bottom:0;margin-top:0;padding-left:0}.usa-card-group{align-items:stretch;display:flex;flex-direction:column;flex-wrap:wrap;margin-left:-.5rem;margin-right:-.5rem}@media (min-width:40em){.usa-card-group{flex-direction:row}}.usa-card{max-width:none}.usa-card,.usa-card:last-child{margin-bottom:2.5rem}@media (min-width:40em){.usa-card,.usa-card:last-child{margin-bottom:2rem}}.usa-prose .usa-card{margin-bottom:2.5rem;max-width:none}.usa-prose .usa-card:last-child{margin-bottom:2.5rem}@media (min-width:40em){.usa-prose .usa-card,.usa-prose .usa-card:last-child{margin-bottom:2rem}}.usa-card__container{background-color:#fff;border:2px solid #dfe1e2;border-radius:.5rem;display:flex;flex-direction:column;font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.06rem;height:100%;line-height:1.5;margin-left:.5rem;margin-right:.5rem;position:relative}.usa-card:not(.usa-card--flag) .usa-card__container>:only-child{padding:1.5rem}.usa-card .usa-card__img{display:block}.usa-card__header{padding:1.5rem 1.5rem .5rem}.usa-card__header:last-child{padding-bottom:1.5rem}.usa-card__heading{font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.46rem;line-height:1.1;margin:0}.usa-card__media{min-height:1px;order:-1}.usa-card__img{background-color:#f0f0f0;border-top-left-radius:calc(.5rem - 2px);border-top-right-radius:calc(.5rem - 2px);overflow:hidden;position:relative}.usa-card__img img{display:block;height:100%;-o-object-fit:cover;object-fit:cover;width:100%}.usa-card__media--inset{padding-left:1.5rem;padding-right:1.5rem;padding-top:1.5rem}.usa-card__media--inset .usa-card__img{border-radius:0}.usa-card__body{flex:1 1;flex-basis:auto;padding:.5rem 1.5rem}.usa-card__body:last-child{padding-bottom:1.5rem}.usa-card__body:first-child{padding-top:1.5rem}.usa-card__body:only-child{padding-bottom:1.5rem;padding-top:1.5rem}.usa-card__footer{padding:.5rem 1.5rem 1.5rem}.usa-card__footer .usa-button:only-of-type{margin-right:0}.usa-card__body>:last-child,.usa-card__header>:last-child{margin-bottom:0;padding-bottom:0}.usa-card__body>:first-child,.usa-card__header>:first-child{margin-top:0;padding-top:0}.usa-card__body>:only-child,.usa-card__header>:only-child{margin-bottom:0;margin-top:0;padding-bottom:0;padding-top:0}.usa-card__footer--exdent,.usa-card__header--exdent,.usa-card__media--exdent{margin-left:-2px;margin-right:-2px}.usa-card__footer--exdent>*,.usa-card__header--exdent>*{padding-left:2px;padding-right:2px}.usa-card__media--exdent{margin-top:-2px}.usa-card__media--exdent .usa-card__img{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.usa-card--header-first .usa-card__header{border-top-left-radius:calc(.5rem - 2px);border-top-right-radius:calc(.5rem - 2px);padding-bottom:1rem}.usa-card--header-first .usa-card__header--exdent{border-top-left-radius:.5rem;border-top-right-radius:.5rem;margin-top:-2px}.usa-card--header-first .usa-card__media--inset{padding-top:0}.usa-card--header-first .usa-card__media{order:0}.usa-card--header-first .usa-card__img{border-radius:0}.usa-card--header-first .usa-card__body{padding-top:1rem}@media (min-width:40em){.usa-card--flag .usa-card__media{bottom:0;display:flex;left:0;overflow:hidden;position:absolute;top:0;width:15rem}.usa-card--flag .usa-card__img{border-radius:0;border-bottom-left-radius:calc(.5rem - 2px);border-top-left-radius:calc(.5rem - 2px)}.usa-card--flag .usa-card__body,.usa-card--flag .usa-card__footer,.usa-card--flag .usa-card__header{margin-left:15rem}.usa-card--flag .usa-card__media--exdent{margin:-2px 0 -2px -2px}.usa-card--flag .usa-card__media--exdent .usa-card__img{border-bottom-left-radius:.5rem;border-top-left-radius:.5rem}.usa-card--flag .usa-card__media--inset{padding-bottom:1.5rem;padding-right:0}.usa-card--flag .usa-card__media--inset .usa-card__img{border-radius:0}.usa-card--flag.usa-card--header-first .usa-card__header{padding-bottom:.5rem}.usa-card--flag.usa-card--header-first .usa-card__body{padding-top:.5rem}.usa-card--flag.usa-card--header-first .usa-card__media--inset{padding-top:1.5rem}.usa-card--flag.usa-card--media-right .usa-card__media{left:auto;right:0}.usa-card--flag.usa-card--media-right .usa-card__media--inset{padding-left:0;padding-right:1.5rem}.usa-card--flag.usa-card--media-right .usa-card__media--inset .usa-card__img{border-radius:0}.usa-card--flag.usa-card--media-right .usa-card__img{border-radius:0;border-bottom-right-radius:calc(.5rem - 2px);border-top-right-radius:calc(.5rem - 2px)}.usa-card--flag.usa-card--media-right .usa-card__body,.usa-card--flag.usa-card--media-right .usa-card__footer,.usa-card--flag.usa-card--media-right .usa-card__header{margin-left:0;margin-right:15rem}.usa-card--flag.usa-card--media-right .usa-card__media--exdent{margin-left:0;margin-right:-2px}.usa-card--flag.usa-card--media-right .usa-card__media--exdent .usa-card__img{border-radius:0;border-bottom-right-radius:.5rem;border-top-right-radius:.5rem}}.usa-card:not(.usa-card--flag).usa-card__media--set-aspect{box-sizing:border-box;height:0;overflow:hidden;padding:0 0 56.25%;position:relative}.usa-card:not(.usa-card--flag).usa-card__media--set-aspect .usa-card__img{bottom:0;left:0;position:absolute;right:0;top:0}.usa-checklist{font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.06rem;line-height:1.5;list-style-type:none;margin-bottom:0;margin-top:0;padding-left:0}.usa-checklist__item{margin-bottom:0;margin-top:.5rem;text-indent:-2.5rem}.usa-checklist__item:before{content:" ";display:inline-block;height:1rem;margin-left:-.25rem;margin-right:.75rem;width:2rem}.usa-checklist__item.usa-checklist__item--checked:before{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGZpbGw9IiMwMDVlYTIiIGQ9Ik05IDE2LjE3IDQuODMgMTJsLTEuNDIgMS40MUw5IDE5IDIxIDdsLTEuNDEtMS40MXoiLz48L3N2Zz4=),linear-gradient(transparent,transparent);background-position:50%;background-repeat:no-repeat;background-size:1.5rem}.usa-collection{font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.06rem;line-height:1.3;padding-left:0}.usa-collection__item{align-items:flex-start;border-top-style:solid;border-top-width:1px;display:flex;list-style-type:none;margin-bottom:1rem;margin-top:1rem;padding-left:0;padding-top:1rem}.usa-collection__item>li{margin-bottom:0;max-width:unset}.usa-prose .usa-collection{font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.06rem;line-height:1.3;padding-left:0}.usa-prose .usa-collection__item{align-items:flex-start;border-top-style:solid;border-top-width:1px;display:flex;list-style-type:none;margin-bottom:1rem;margin-top:1rem;padding-left:0;padding-top:1rem}.usa-prose .usa-collection__item>li{margin-bottom:0;max-width:unset}.usa-collection__calendar-date,.usa-collection__img{flex-shrink:0;margin-right:1rem;width:4rem}@media (min-width:40em){.usa-collection__calendar-date,.usa-collection__img{width:5rem}}.usa-collection__body{flex:1 1}.usa-collection__heading{font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.13rem;line-height:1.3;margin-bottom:0;margin-top:0}.usa-collection__description{margin-bottom:.5rem;margin-top:.5rem}.usa-collection__meta{list-style-type:none;margin-bottom:0;margin-top:.25rem;padding-left:0}.usa-collection__meta>li{margin-bottom:0;max-width:unset}.usa-collection__meta-item{display:block;font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:.93rem;line-height:1.3;margin-right:.5rem;margin-top:.25rem}.usa-collection__meta-item.usa-tag{background-color:#dfe1e2;color:#1b1b1b;display:inline-block;line-height:.9;margin-top:.25rem;padding-bottom:.25rem;padding-top:.25rem}.usa-collection__meta-item.usa-tag--new{background-color:#c05600;color:#fff}.usa-collection__calendar-date{text-decoration:none}.usa-collection__calendar-date-day,.usa-collection__calendar-date-month{display:block;font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.13rem;font-weight:700;padding:.25rem;text-align:center}@media (min-width:40em){.usa-collection__calendar-date-day,.usa-collection__calendar-date-month{padding:.5rem}}.usa-collection__calendar-date-month{background-color:#005ea2;border-top-left-radius:2px;border-top-right-radius:2px;color:#fff}.usa-collection__calendar-date-day{border:1px solid #005ea2;border-bottom-left-radius:2px;border-bottom-right-radius:2px;color:#005ea2}.usa-collection--condensed .usa-collection__item{margin-bottom:.5rem;margin-top:.5rem;padding-top:.5rem}.usa-footer{font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.06rem;line-height:1.5;overflow:hidden}.usa-footer>.grid-container{margin-left:auto;margin-right:auto;max-width:64rem;padding-left:1rem;padding-right:1rem}@media (min-width:64em){.usa-footer>.grid-container{padding-left:2rem;padding-right:2rem}}.usa-footer__return-to-top{line-height:.9;padding-bottom:1.25rem;padding-top:1.25rem}.usa-footer__return-to-top a{color:#005ea2;text-decoration:underline}.usa-footer__return-to-top a:visited{color:#54278f}.usa-footer__return-to-top a:hover{color:#1a4480}.usa-footer__return-to-top a:active{color:#162e51}.usa-footer__return-to-top a:focus{outline:.25rem solid #2491ff;outline-offset:0}.usa-footer__nav{border-bottom:1px solid #a9aeb1;margin-left:auto;margin-right:auto;max-width:64rem;padding-left:0;padding-right:0}@media (min-width:64em){.usa-footer__nav{padding-left:2rem;padding-right:2rem}}@media (min-width:30em){.usa-footer__nav{border-bottom:none;padding-left:1rem;padding-right:1rem}}@media (min-width:30em)and (min-width:64em){.usa-footer__nav{padding-left:2rem;padding-right:2rem}}.usa-footer__nav>ul{list-style-type:none;margin-bottom:0;margin-top:0;padding-left:0}.usa-footer__primary-section{background-color:#f0f0f0}.usa-footer__primary-section>.grid-container{margin-left:auto;margin-right:auto;max-width:64rem;padding-left:1rem;padding-right:1rem}@media (min-width:64em){.usa-footer__primary-section>.grid-container{padding-left:2rem;padding-right:2rem}}.usa-footer__primary-container{margin-left:auto;margin-right:auto;max-width:64rem;padding-left:1rem;padding-right:1rem}@media (min-width:64em){.usa-footer__primary-container{padding-left:2rem;padding-right:2rem}}.usa-footer__primary-content{line-height:1.1}.usa-footer__primary-link a,.usa-footer__secondary-link a{text-decoration:none}.usa-footer__primary-link a:hover,.usa-footer__secondary-link a:hover{text-decoration:underline}.usa-footer__primary-link{color:#1b1b1b;display:block;font-weight:700;padding:1rem;text-decoration:none}@media (min-width:30em){.usa-footer__primary-link{padding-left:0;padding-right:0}}.usa-footer__primary-link:hover{cursor:pointer;text-decoration:underline}.usa-footer__secondary-link{line-height:1.1;margin-left:1rem;padding:0}.usa-footer__secondary-link a{color:#005ea2;text-decoration:underline}.usa-footer__secondary-link a:visited{color:#54278f}.usa-footer__secondary-link a:hover{color:#1a4480}.usa-footer__secondary-link a:active{color:#162e51}.usa-footer__secondary-link a:focus{outline:.25rem solid #2491ff;outline-offset:0}.usa-footer__secondary-link+.usa-footer__secondary-link{padding-top:1rem}@media (min-width:30em){.usa-footer__secondary-link{margin-left:0}}.usa-footer__contact-info{line-height:1.1}.usa-footer__contact-info a{color:#1b1b1b;text-decoration:none}.usa-footer__contact-info a:hover{text-decoration:underline}@media (min-width:30em){.usa-footer__contact-info{justify-content:flex-end;margin-top:.5rem}}.usa-footer__primary-content{border-top:1px solid #a9aeb1}@media (min-width:30em){.usa-footer__primary-content{border:none}}.usa-sign-up{padding-bottom:2rem;padding-top:1.5rem}.usa-sign-up .usa-button,.usa-sign-up .usa-label{margin-top:.75rem}.usa-sign-up__heading{font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.46rem;font-weight:700;line-height:1.1;margin:0}.usa-footer__secondary-section{background-color:#dfe1e2;padding-bottom:1.25rem;padding-top:1.25rem}.usa-footer__secondary-section>.grid-container{margin-left:auto;margin-right:auto;max-width:64rem;padding-left:1rem;padding-right:1rem}@media (min-width:64em){.usa-footer__secondary-section>.grid-container{padding-left:2rem;padding-right:2rem}}.usa-footer__secondary-section a{color:#1b1b1b}.usa-footer__logo{margin-bottom:.5rem;margin-top:.5rem}@media (min-width:30em){.usa-footer__logo{align-items:center;margin-bottom:0;margin-top:0}}.usa-footer__logo-img{max-width:5rem}.usa-footer__logo-heading{font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.46rem;font-weight:700;line-height:.9;margin-bottom:.5rem;margin-top:.5rem}.usa-footer__contact-links{margin-top:1.5rem}@media (min-width:30em){.usa-footer__contact-links{margin-top:0;text-align:right}}.usa-footer__contact-heading{font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.46rem;line-height:1.1;margin-top:0}@media (min-width:30em){.usa-footer__contact-heading{margin-bottom:.25rem;margin-top:.25rem}}.usa-footer__social-links{line-height:.9;padding-bottom:.5rem}.usa-footer__social-links a{text-decoration:none}@media (min-width:30em){.usa-footer__social-links{justify-content:flex-end}}.usa-social-link{background-color:rgba(0,0,0,.1);background-position:50%;background-size:auto 2rem;display:inline-block;height:3rem;width:3rem}.usa-social-link span{left:-999em;position:absolute;right:auto}.usa-social-link--facebook{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHJlY3Qgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTIyIDEyYzAtNS41Mi00LjQ4LTEwLTEwLTEwUzIgNi40OCAyIDEyYzAgNC44NCAzLjQ0IDguODcgOCA5LjhWMTVIOHYtM2gyVjkuNUMxMCA3LjU3IDExLjU3IDYgMTMuNSA2SDE2djNoLTJjLS41NSAwLTEgLjQ1LTEgMXYyaDN2M2gtM3Y2Ljk1YzUuMDUtLjUgOS00Ljc2IDktOS45NXoiLz48L3N2Zz4=),linear-gradient(transparent,transparent);background-repeat:no-repeat}.usa-social-link--twitter{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEyIDJhMTAgMTAgMCAxIDAgMTAgMTBBMTAgMTAgMCAwIDAgMTIgMnptNSA4LjF2LjMxYTYuODEgNi44MSAwIDAgMS02Ljg2IDYuODYgNi43NCA2Ljc0IDAgMCAxLTMuNjktMS4wOCA1LjYzIDUuNjMgMCAwIDAgLjU4IDAgNC43OSA0Ljc5IDAgMCAwIDMtMSAyLjQxIDIuNDEgMCAwIDEtMi4yMy0xLjY4IDEuNzUgMS43NSAwIDAgMCAuNDYuMDUgMi41OSAyLjU5IDAgMCAwIC42My0uMDhBMi40MiAyLjQyIDAgMCAxIDcgMTEuMTFhMi4zMyAyLjMzIDAgMCAwIDEuMDkuMyAyLjQzIDIuNDMgMCAwIDEtLjc5LTMuMjUgNi44NCA2Ljg0IDAgMCAwIDUgMi41MyAyLjU5IDIuNTkgMCAwIDEtLjA3LS41NSAyLjQxIDIuNDEgMCAwIDEgMi40MS0yLjQxIDIuMzggMi4zOCAwIDAgMSAxLjc3Ljc2IDQuNjcgNC42NyAwIDAgMCAxLjQ5LS41OSAyLjM5IDIuMzkgMCAwIDEtMS4wNiAxLjM0IDQuNTUgNC41NSAwIDAgMCAxLjM5LS4zOUE1IDUgMCAwIDEgMTcgMTAuMXoiLz48L3N2Zz4=),linear-gradient(transparent,transparent);background-repeat:no-repeat}.usa-social-link--youtube{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEyIDJhMTAgMTAgMCAxIDAgMTAgMTBBMTAgMTAgMCAwIDAgMTIgMnptNS43NSAxMi45MUExLjQ5IDEuNDkgMCAwIDEgMTYuNjkgMTZhMzQuNjUgMzQuNjUgMCAwIDEtNC42OS4yNkEzNC42NSAzNC42NSAwIDAgMSA3LjMxIDE2YTEuNDkgMS40OSAwIDAgMS0xLjA2LTEuMDZBMTUuODggMTUuODggMCAwIDEgNiAxMmExNS44OCAxNS44OCAwIDAgMSAuMjUtMi45MUExLjQ5IDEuNDkgMCAwIDEgNy4zMSA4IDM0LjY1IDM0LjY1IDAgMCAxIDEyIDcuNzdhMzQuNjUgMzQuNjUgMCAwIDEgNC42OS4yMyAxLjQ5IDEuNDkgMCAwIDEgMS4wNiAxLjA2QTE1Ljg4IDE1Ljg4IDAgMCAxIDE4IDEyYTE1Ljg4IDE1Ljg4IDAgMCAxLS4yNSAyLjkxeiIvPjxwb2x5Z29uIHBvaW50cz0iMTAuNzcgMTMuNzggMTMuOTEgMTIgMTAuNzcgMTAuMjIgMTAuNzcgMTMuNzgiLz48L3N2Zz4=),linear-gradient(transparent,transparent);background-repeat:no-repeat}.usa-social-link--instagram{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEyIDEwYTIgMiAwIDEgMCAyIDIgMiAyIDAgMCAwLTItMnoiLz48cGF0aCBkPSJNMTIgMmExMCAxMCAwIDEgMCAxMCAxMEExMCAxMCAwIDAgMCAxMiAyem02IDEyLjY5QTMuMzIgMy4zMiAwIDAgMSAxNC42OSAxOEg5LjMxQTMuMzIgMy4zMiAwIDAgMSA2IDE0LjY5VjkuMzFBMy4zMiAzLjMyIDAgMCAxIDkuMzEgNmg1LjM4QTMuMzIgMy4zMiAwIDAgMSAxOCA5LjMxeiIvPjxwYXRoIGQ9Ik0xNi45NCA5LjMxYTIuMjUgMi4yNSAwIDAgMC0yLjI1LTIuMjVIOS4zMWEyLjI1IDIuMjUgMCAwIDAtMi4yNSAyLjI1djUuMzhhMi4yNSAyLjI1IDAgMCAwIDIuMjUgMi4yNWg1LjM4YTIuMjUgMi4yNSAwIDAgMCAyLjI1LTIuMjV6TTEyIDE1LjA5QTMuMDkgMy4wOSAwIDEgMSAxNS4wOSAxMiAzLjA5IDMuMDkgMCAwIDEgMTIgMTUuMDl6bTMuNzctNS43NWEuNzkuNzkgMCAwIDEtLjU1LjIzLjgzLjgzIDAgMCAxLS41NS0uMjMuNzguNzggMCAwIDEgMC0xLjExLjgyLjgyIDAgMCAxIC41NS0uMjMuNzguNzggMCAwIDEgLjU1IDEuMzN6Ii8+PC9zdmc+),linear-gradient(transparent,transparent);background-repeat:no-repeat}.usa-social-link--rss{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxjaXJjbGUgY3g9IjYuMTgiIGN5PSIxNy44MiIgcj0iMi4xOCIvPjxwYXRoIGQ9Ik00IDQuNDR2Mi44M2M3LjAzIDAgMTIuNzMgNS43IDEyLjczIDEyLjczaDIuODNjMC04LjU5LTYuOTctMTUuNTYtMTUuNTYtMTUuNTZ6bTAgNS42NnYyLjgzYzMuOSAwIDcuMDcgMy4xNyA3LjA3IDcuMDdoMi44M2MwLTUuNDctNC40My05LjktOS45LTkuOXoiLz48L3N2Zz4=),linear-gradient(transparent,transparent);background-repeat:no-repeat}@media (min-width:30em){.usa-footer__address{justify-content:flex-end}}@media (min-width:64em){.usa-footer--slim .usa-footer__nav{padding-left:0;padding-right:0}}.usa-footer--slim .usa-footer__address{padding:1rem}@media (min-width:30em){.usa-footer--slim .usa-footer__address{padding:0}}.usa-footer--slim .usa-footer__logo{align-items:center}.usa-footer--slim .usa-footer__logo-img{max-width:3rem}.usa-footer--slim .usa-footer__contact-info{display:inline-block}@media (min-width:30em){.usa-footer--slim .usa-footer__contact-info{margin-top:0;padding-bottom:1rem;padding-top:1rem}}.usa-footer--big .usa-footer__nav{margin-left:-1rem;margin-right:-1rem}@media (min-width:30em){.usa-footer--big .usa-footer__nav{border-bottom:1px solid #a9aeb1;padding-top:2rem}}@media (min-width:40em){.usa-footer--big .usa-footer__nav{border-bottom:none;margin-left:0;margin-right:0;padding-left:0;padding-right:0}}.usa-footer--big .usa-footer__primary-link{font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.06rem;font-weight:700;line-height:1.1;margin:0}@media (min-width:30em){.usa-footer--big .usa-footer__primary-link{margin-bottom:.5rem;padding-bottom:0;padding-top:0}.usa-footer--big .usa-footer__primary-link:hover{cursor:auto;text-decoration:none}}.usa-footer--big .usa-footer__primary-content--collapsible .usa-footer__primary-link{align-items:center;cursor:pointer;display:flex;justify-content:flex-start}.usa-footer--big .usa-footer__primary-content--collapsible .usa-footer__primary-link:before{align-items:center;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGQ9Ik0xNi41OSA4LjU5IDEyIDEzLjE3IDcuNDEgOC41OSA2IDEwbDYgNiA2LTZ6Ii8+PC9zdmc+),linear-gradient(transparent,transparent);background-repeat:no-repeat;background-size:contain;content:"";display:inline-flex;height:1.25rem;justify-content:center;margin-left:-.25rem;margin-right:.25rem;width:1.25rem}@media (min-width:30em){.usa-footer--big .usa-footer__primary-content--collapsible .usa-footer__primary-link:before{content:none}}.usa-footer--big .usa-footer__primary-content--collapsible.hidden .usa-list--unstyled{display:none}.usa-footer--big .usa-footer__primary-content--collapsible.hidden .usa-footer__primary-link:before{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGQ9Ik0xMCA2IDguNTkgNy40MSAxMy4xNyAxMmwtNC41OCA0LjU5TDEwIDE4bDYtNnoiLz48L3N2Zz4=),linear-gradient(transparent,transparent);background-repeat:no-repeat}@media (min-width:30em){.usa-footer--big .usa-footer__primary-content--collapsible.hidden .usa-footer__primary-link{margin:0}}.usa-footer--big .usa-footer__primary-content--collapsible .usa-list--unstyled{padding-bottom:1.25rem;padding-left:1rem;padding-right:1rem}@media (min-width:30em){.usa-footer--big .usa-footer__primary-content--collapsible .usa-list--unstyled{padding:.75rem 0 2rem}}.usa-form{font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.06rem;line-height:1.3}@media (min-width:30em){.usa-form{max-width:20rem}}.usa-form .usa-input,.usa-form .usa-range,.usa-form .usa-select,.usa-form .usa-textarea{max-width:none}.usa-form .usa-input--2xs{max-width:4ex}.usa-form .usa-input--xs{max-width:7ex}.usa-form .usa-input--sm,.usa-form .usa-input--small{max-width:10ex}.usa-form .usa-input--md,.usa-form .usa-input--medium{max-width:20ex}.usa-form .usa-input--lg{max-width:30ex}.usa-form .usa-input--xl{max-width:40ex}.usa-form .usa-input--2xl{max-width:50ex}.usa-form .usa-button{margin-top:.5rem}@media (min-width:30em){.usa-form .usa-button{margin-top:1.5rem}}.usa-form a{color:#005ea2;text-decoration:underline}.usa-form a:visited{color:#54278f}.usa-form a:hover{color:#1a4480}.usa-form a:active{color:#162e51}.usa-form a:focus{outline:.25rem solid #2491ff;outline-offset:0}@media (min-width:30em){.usa-form--large{max-width:30rem}}.usa-form__note{float:right;font-size:.93rem;line-height:1.3;margin:.25rem 0 1rem}.usa-form__note,.usa-graphic-list{font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif}.usa-graphic-list{font-size:1.06rem;line-height:1.5}.usa-graphic-list .usa-graphic-list__row .usa-media-block{margin-bottom:2rem}@media (min-width:40em){.usa-graphic-list .usa-graphic-list__row .usa-media-block{margin-bottom:4rem}.usa-graphic-list .usa-graphic-list__row:last-child .usa-media-block{margin-bottom:0}}.usa-graphic-list .usa-graphic-list__row:last-child .usa-media-block:last-child{margin-bottom:0}.usa-graphic-list .usa-media-block__img{margin-right:1.5rem}.usa-graphic-list .usa-media-block__body>:first-child{margin-top:0}.usa-graphic-list__heading{clear:both;font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.46rem;font-weight:700;line-height:1.1;margin-bottom:0;margin-top:0}*+.usa-graphic-list__heading{margin-top:1.5em}.usa-graphic-list__heading+*{margin-top:1em}.usa-header{font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.06rem;line-height:1.5;z-index:300}.usa-header:after{clear:both;content:"";display:block}.usa-header a{border-bottom:none}@media (min-width:64em){.usa-header .usa-search{float:right}.usa-header [role=search]{float:right;max-width:calc(27ch + 3rem);width:100%}}.usa-header [type=search]{min-width:0}@media (min-width:64em){.usa-header+.usa-hero{border-top:1px solid #fff}.usa-header+.usa-section,.usa-header+main{border-top:1px solid #dfe1e2}}@media (max-width:63.99em){.usa-logo{flex:1 1;font-size:.93rem;line-height:.9;margin-left:1rem}}@media (min-width:64em){.usa-logo{font-size:1.46rem;line-height:1.1;margin-bottom:1rem;margin-top:2rem}}.usa-logo a{color:#1b1b1b;text-decoration:none}.usa-logo__text{display:block;font-style:normal;font-weight:700;margin:0}.usa-menu-btn{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:subpixel-antialiased;background-color:transparent;background-color:#005ea2;border:0;border-radius:0;box-shadow:none;color:#005ea2;color:#fff;flex:0 1 auto;font-size:.87rem;font-weight:400;height:3rem;margin:0;padding:0 .75rem;text-align:left;text-align:center;text-decoration:underline;text-decoration:none;text-transform:uppercase}.usa-menu-btn:visited{color:#54278f}.usa-menu-btn:hover{color:#1a4480}.usa-menu-btn:active{color:#162e51}.usa-menu-btn:focus{outline:.25rem solid #2491ff;outline-offset:0}.usa-menu-btn:active,.usa-menu-btn:hover{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:subpixel-antialiased;background-color:transparent;box-shadow:none;text-decoration:underline}@media (min-width:64em){.usa-menu-btn{display:none}}.usa-menu-btn:hover{background-color:#1a4480;color:#fff;text-decoration:none}.usa-menu-btn:active,.usa-menu-btn:visited{color:#fff}.usa-overlay{background:#000;bottom:0;left:0;opacity:0;position:absolute;position:fixed;right:0;top:0;transition:opacity .2s ease-in-out;visibility:hidden;z-index:400}.usa-overlay.is-visible{opacity:.2;visibility:visible}@media (min-width:64em){.usa-header--basic .usa-navbar{position:relative;width:33%}.usa-header--basic .usa-nav{align-items:center;display:flex;flex-direction:row;justify-content:flex-end;padding:0 0 .25rem .5rem;width:100%}.usa-header--basic .usa-nav-container{align-items:flex-end;display:flex;justify-content:space-between}.usa-header--basic .usa-nav__link:hover,.usa-header--basic .usa-nav__primary-item>.usa-current{position:relative}.usa-header--basic .usa-nav__link:hover:after,.usa-header--basic .usa-nav__primary-item>.usa-current:after{background-color:#005ea2;border-radius:0;bottom:-.25rem;content:"";display:block;height:.25rem;left:1rem;position:absolute;right:1rem}.usa-header--basic .usa-nav__link[aria-expanded=true]:after,.usa-header--basic .usa-nav__link[aria-expanded=true]:hover:after{display:none}.usa-header--basic .usa-nav__primary{width:auto}.usa-header--basic .usa-nav__primary-item:last-of-type{position:relative}.usa-header--basic .usa-nav__primary-item:last-of-type .usa-nav__submenu{position:absolute;right:0}.usa-header--basic .usa-search{top:0}}.usa-header--basic.usa-header--megamenu .usa-nav__inner{display:flex;flex-direction:column}@media (min-width:64em){.usa-header--basic.usa-header--megamenu .usa-nav__inner{display:block;float:right;margin-top:-2.5rem}.usa-header--basic.usa-header--megamenu .usa-nav__primary-item:last-of-type{position:static}.usa-header--extended{padding-top:0}.usa-header--extended .usa-nav__primary-item>.usa-current,.usa-header--extended .usa-nav__primary-item>.usa-nav__link:hover{position:relative}.usa-header--extended .usa-nav__primary-item>.usa-current:after,.usa-header--extended .usa-nav__primary-item>.usa-nav__link:hover:after{background-color:#005ea2;border-radius:0;bottom:0;content:"";display:block;height:.25rem;left:1rem;position:absolute;right:1rem}.usa-header--extended .usa-nav__link[aria-expanded=true]:after,.usa-header--extended .usa-nav__link[aria-expanded=true]:hover:after{display:none}.usa-header--extended .usa-logo{font-size:2.13rem;margin:2rem 0 1.5rem;max-width:50%}.usa-header--extended .usa-navbar{display:block;height:auto;margin-left:auto;margin-right:auto;max-width:64rem;overflow:auto;padding-left:1rem;padding-right:1rem}}@media (min-width:64em)and (min-width:64em){.usa-header--extended .usa-navbar{padding-left:2rem;padding-right:2rem}}@media (min-width:64em){.usa-header--extended .usa-nav{border-top:1px solid #dfe1e2;padding:0;width:100%}.usa-header--extended .usa-nav__inner{margin-left:auto;margin-right:auto;max-width:64rem;padding-left:1rem;padding-right:1rem;position:relative}}@media (min-width:64em)and (min-width:64em){.usa-header--extended .usa-nav__inner{padding-left:2rem;padding-right:2rem}}@media (min-width:64em){.usa-header--extended .usa-nav__primary{margin-left:-1rem}.usa-header--extended .usa-nav__primary:after{clear:both;content:"";display:block}.usa-header--extended .usa-nav__link{padding-bottom:1rem;padding-top:1rem}.usa-header--extended .usa-nav__submenu .usa-grid-full{padding-left:.75rem}.usa-header--extended .usa-nav__submenu.usa-megamenu{left:0;padding-left:2rem}}html.usa-js-loading .usa-nav__submenu,html.usa-js-loading .usa-nav__submenu.usa-megamenu{left:-999em;position:absolute;right:auto}.usa-hero{background-image:url(/justice40-tool/main/static/hero-64da0bc09eaff1000d48c416c82ea2db.png);background-position:50%;background-size:cover;color:#fff;font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.06rem;line-height:1.5;padding-bottom:2rem;padding-top:2rem}.usa-hero__callout{background-color:#162e51;padding:2rem}@media (min-width:40em){.usa-hero__callout{max-width:20rem}}.usa-hero__heading{clear:both;color:#00bde3;font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:2.13rem;font-weight:700;line-height:1.1;margin-bottom:0;margin-top:0}*+.usa-hero__heading{margin-top:1.5em}.usa-hero__heading+*{margin-top:1em}.usa-hero__heading--alt{color:#fff;display:block}.usa-icon{fill:currentColor;display:inline-block;height:1em;position:relative;width:1em}.usa-icon--size-3{height:1.5rem;width:1.5rem}.usa-icon--size-4{height:2rem;width:2rem}.usa-icon--size-5{height:2.5rem;width:2.5rem}.usa-icon--size-6{height:3rem;width:3rem}.usa-icon--size-7{height:3.5rem;width:3.5rem}.usa-icon--size-8{height:4rem;width:4rem}.usa-icon--size-9{height:4.5rem;width:4.5rem}.usa-layout-docs__sidenav{order:2;padding-top:2rem}@media (min-width:64em){.usa-layout-docs__sidenav{padding-top:0}.usa-layout-docs__main{order:2}}.usa-media-block{align-items:flex-start;display:flex}.usa-media-block__img{flex-shrink:0;margin-right:.5rem}.usa-media-block__body{flex:1 1}.usa-megamenu .usa-col{flex:1 1 auto}@media (min-width:64em){.usa-megamenu .usa-col{flex:4 1}.usa-megamenu.usa-nav__submenu{left:-33%;padding:2rem 0;right:0;width:auto}.usa-megamenu.usa-nav__submenu:before{right:100%}.usa-megamenu.usa-nav__submenu:after,.usa-megamenu.usa-nav__submenu:before{background-color:#162e51;bottom:0;content:"";display:block;position:absolute;top:0;width:100%}.usa-megamenu.usa-nav__submenu:after{left:100%}.usa-nav-container{margin-left:auto;margin-right:auto;max-width:64rem;padding-left:2rem;padding-right:2rem}.usa-nav-container:after{clear:both;content:"";display:block}}@media (min-width:64em)and (min-width:64em){.usa-nav-container{padding-left:2rem;padding-right:2rem}}.usa-navbar{height:3rem}@media (max-width:63.99em){.usa-navbar{align-items:center;border-bottom:1px solid #dfe1e2;display:flex}}@media (min-width:64em){.usa-navbar{border-bottom:none;display:inline-block;height:auto}}@-webkit-keyframes slidein-left{0%{-webkit-transform:translateX(15rem);transform:translateX(15rem)}to{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes slidein-left{0%{-webkit-transform:translateX(15rem);transform:translateX(15rem)}to{-webkit-transform:translateX(0);transform:translateX(0)}}.usa-nav{font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.06rem;line-height:.9}@media (max-width:63.99em){.usa-nav{background:#fff;border-right:0;bottom:0;display:none;flex-direction:column;overflow-y:auto;padding:1rem;position:absolute;position:fixed;right:0;top:0;width:15rem;z-index:500}.usa-nav.is-visible{-webkit-animation:slidein-left .3s ease-in-out;animation:slidein-left .3s ease-in-out;display:flex}}@media (min-width:64em){.usa-nav{float:right;position:relative}.usa-nav .usa-search{margin-left:1rem}}.usa-nav .usa-accordion{font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.06rem;line-height:.9}@media (max-width:63.99em){.usa-nav__primary{list-style-type:none;margin-bottom:0;margin-top:1.5rem;order:2;padding-left:0}.usa-nav__primary>li{margin-bottom:0;max-width:unset}.usa-nav__primary-item{border-top:1px solid #dfe1e2}.usa-nav__primary a:not(.usa-button){color:#565c65;display:block;padding:.5rem 1rem;text-decoration:none}.usa-nav__primary a:not(.usa-button):hover{background-color:#f0f0f0;color:#005ea2;text-decoration:none}.usa-nav__primary a:not(.usa-button):focus{outline-offset:0}.usa-nav__primary .usa-current{color:#005ea2;font-weight:700;position:relative}.usa-nav__primary .usa-current:after{background-color:#005ea2;border-radius:99rem;bottom:.25rem;content:"";display:block;left:.25rem;position:absolute;top:.25rem;width:.25rem}}@media (max-width:63.99em)and (min-width:40em){.usa-nav__primary .usa-current{position:relative}.usa-nav__primary .usa-current:after{background-color:#005ea2;border-radius:99rem;bottom:.25rem;content:"";display:block;left:0;position:absolute;top:.25rem;width:.25rem}}@media (max-width:63.99em){.usa-nav__primary a{padding-bottom:.75rem;padding-top:.75rem}}@media (min-width:64em){.usa-nav__primary{display:flex}}.usa-nav__primary .usa-nav__primary-item a{text-decoration:none}.usa-nav__primary>.usa-nav__primary-item{line-height:1.1}@media (min-width:64em){.usa-nav__primary>.usa-nav__primary-item{font-size:.93rem;line-height:.9}.usa-nav__primary>.usa-nav__primary-item>a{color:#565c65;display:block;font-weight:700;line-height:.9;padding:1rem}.usa-nav__primary>.usa-nav__primary-item>a:hover{color:#005ea2}.usa-nav__primary a{padding-bottom:.5rem;padding-top:.5rem}}.usa-nav__primary button{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:subpixel-antialiased;background-color:transparent;border:0;border-radius:0;box-shadow:none;color:#005ea2;color:#565c65;font-weight:400;line-height:1.1;margin:0;padding:.75rem 1rem;text-align:left;text-decoration:underline;text-decoration:none}.usa-nav__primary button:visited{color:#54278f}.usa-nav__primary button:hover{color:#1a4480}.usa-nav__primary button:active{color:#162e51}.usa-nav__primary button:focus{outline:.25rem solid #2491ff;outline-offset:0}.usa-nav__primary button:active,.usa-nav__primary button:hover{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:subpixel-antialiased;background-color:transparent;box-shadow:none;text-decoration:underline}@media (min-width:64em){.usa-nav__primary button{font-size:.93rem;font-weight:700;line-height:.9;padding:1rem}}.usa-nav__primary button:hover{background-color:#f0f0f0;color:#005ea2;text-decoration:none}@media (min-width:64em){.usa-nav__primary button:hover{background-color:transparent}}.usa-nav__primary button[aria-expanded=false]{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGQ9Ik0xOSAxM2gtNnY2aC0ydi02SDV2LTJoNlY1aDJ2Nmg2djJ6Ii8+PC9zdmc+),linear-gradient(transparent,transparent);background-position:right 0 center;background-repeat:no-repeat;background-size:1.25rem}@media (min-width:64em){.usa-nav__primary button[aria-expanded=false]{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGQ9Ik0xNi41OSA4LjU5IDEyIDEzLjE3IDcuNDEgOC41OSA2IDEwbDYgNiA2LTZ6Ii8+PC9zdmc+),linear-gradient(transparent,transparent);background-position:right .75rem top 53%;background-repeat:no-repeat;background-size:1rem}.usa-nav__primary button[aria-expanded=false]:hover{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGZpbGw9IiMxYTQ0ODAiIGQ9Ik0xNi41OSA4LjU5IDEyIDEzLjE3IDcuNDEgOC41OSA2IDEwbDYgNiA2LTZ6Ii8+PC9zdmc+),linear-gradient(transparent,transparent);background-repeat:no-repeat}}.usa-nav__primary button[aria-expanded=true]{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGQ9Ik0xOSAxM0g1di0yaDE0djJ6Ii8+PC9zdmc+),linear-gradient(transparent,transparent);background-position:right 0 center;background-repeat:no-repeat;background-size:1.25rem}@media (min-width:64em){.usa-nav__primary button[aria-expanded=true]{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;background-color:#162e51;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Im0xMiA4LTYgNiAxLjQxIDEuNDFMMTIgMTAuODNsNC41OSA0LjU4TDE4IDE0eiIvPjwvc3ZnPg==),linear-gradient(transparent,transparent);background-position:right .75rem top 53%;background-repeat:no-repeat;background-size:1rem;color:#fff}.usa-nav__primary .usa-accordion__button span{margin-right:0;padding-right:1rem}}.usa-nav__secondary{margin-top:1rem}@media (min-width:64em){.usa-nav__secondary{align-items:flex-end;bottom:4rem;display:flex;flex-direction:column;font-size:.93rem;margin-top:.5rem;min-width:calc(27ch + 3rem);position:absolute;right:2rem}}.usa-nav__secondary .usa-search{margin-top:1rem;width:100%}@media (min-width:64em){.usa-nav__secondary .usa-search{margin-left:0;margin-top:.5rem}}.usa-nav__secondary-links{line-height:1.3;list-style-type:none;margin-bottom:0;margin-top:1.5rem;padding-left:0}@media (min-width:64em){.usa-nav__secondary-links{float:right;line-height:.9;margin-bottom:.25rem;margin-top:0}.usa-nav__secondary-links .usa-nav__secondary-item{display:inline;padding-left:.25rem}.usa-nav__secondary-links .usa-nav__secondary-item+.usa-nav__secondary-item:before{color:#dfe1e2;content:"|";padding-right:.25rem}}.usa-nav__secondary-links a{color:#71767a;display:inline-block;font-size:.93rem;text-decoration:none}.usa-nav__secondary-links a:hover{color:#005ea2;text-decoration:underline}@media (max-width:63.99em){.usa-nav__submenu{list-style-type:none;margin:0;padding-left:0}.usa-nav__submenu>li{margin-bottom:0;max-width:unset}.usa-nav__submenu-item{border-top:1px solid #dfe1e2;font-size:.93rem}.usa-nav__submenu .usa-current:after{display:none}}@media (max-width:63.99em)and (min-width:40em){.usa-nav__submenu .usa-current:after{display:none}}@media (max-width:63.99em){.usa-nav__submenu a:not(.usa-button){padding-left:2rem}.usa-nav__submenu .usa-nav__submenu a:not(.usa-button){padding-left:3rem}.usa-nav__submenu .usa-nav__submenu .usa-nav__submenu a:not(.usa-button){content:"foobar";padding-left:4rem}}@media (min-width:64em){.usa-nav__submenu{background-color:#162e51;list-style-type:none;margin-bottom:0;margin-top:0;padding:1rem;position:absolute;width:15rem;z-index:400}}.usa-nav__submenu[aria-hidden=true]{display:none}@media (min-width:64em){.usa-nav__submenu .usa-nav__submenu-item+*{margin-top:.75rem}.usa-nav__submenu .usa-nav__submenu-item a{color:#fff;line-height:1.3;padding:0}.usa-nav__submenu .usa-nav__submenu-item a:hover{background-color:transparent;color:#fff;padding:0;text-decoration:underline}}.usa-nav__submenu-list{list-style-type:none;margin-bottom:0;margin-top:0;padding-left:0}.usa-nav__submenu-list>li{margin-bottom:0;max-width:unset}.usa-nav__submenu-list .usa-nav__submenu-list-item{font-size:.93rem;margin:0}.usa-nav__submenu-list .usa-nav__submenu-list-item a{line-height:1.3}.usa-nav__close{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:subpixel-antialiased;background-color:transparent;border:0;border-radius:0;box-shadow:none;color:#005ea2;color:currentColor;flex:none;float:right;font-weight:400;height:3rem;margin:-.75rem -1rem 1rem auto;padding:0;text-align:left;text-align:center;text-decoration:underline;width:3rem}.usa-nav__close:visited{color:#54278f}.usa-nav__close:hover{color:#1a4480}.usa-nav__close:active{color:#162e51}.usa-nav__close:focus{outline:.25rem solid #2491ff;outline-offset:0}.usa-nav__close:active,.usa-nav__close:hover{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:subpixel-antialiased;background-color:transparent;box-shadow:none;text-decoration:underline}.usa-nav__close:hover{color:currentColor;text-decoration:none}@media (min-width:64em){.usa-nav__close{display:none}}.usa-nav__close img{width:1.5rem}.usa-nav__close+*{clear:both}.usa-js-mobile-nav--active{overflow:hidden}.usa-process-list{counter-reset:usa-numbered-list;font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.06rem;line-height:1.5;list-style-type:none;margin-bottom:0;margin-top:0;padding:20px 0 0 1rem;position:relative}.usa-process-list>li{margin-bottom:0;max-width:unset}.usa-process-list>.usa-process-list__item{max-width:72ex}.usa-process-list__item{border-left:.5rem solid #d9e8f6;font-size:1.06rem;margin-bottom:0;padding-bottom:2rem;padding-left:2rem}.usa-prose .usa-process-list{counter-reset:usa-numbered-list;font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.06rem;line-height:1.5;list-style-type:none;margin-bottom:0;margin-top:0;padding:20px 0 0 1rem;position:relative}.usa-prose .usa-process-list>li{margin-bottom:0;max-width:unset}.usa-prose .usa-process-list>.usa-process-list__item{max-width:72ex}.usa-prose .usa-process-list__item{border-left:.5rem solid #d9e8f6;font-size:1.06rem;margin-bottom:0;padding-bottom:2rem;padding-left:2rem}.usa-process-list__item:last-child{border-left:.5rem solid transparent}.usa-process-list__item:before{align-items:center;background-color:#fff;border:.25rem solid #1b1b1b;border-radius:99rem;box-shadow:0 0 0 .25rem #fff;color:#1b1b1b;content:counter(usa-numbered-list,decimal);counter-increment:usa-numbered-list;display:flex;flex-direction:row;font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.46rem;font-weight:700;height:2.5rem;justify-content:center;left:0;line-height:.9;margin-top:-.4rem;position:absolute;width:2.5rem}.usa-process-list__item ul{list-style-type:disc}.usa-process-list__item ul li{margin-bottom:.25rem}.usa-process-list__item ul li:last-child{margin-bottom:0}.usa-process-list__item>:first-child{margin-top:0}.usa-process-list__item>:last-child{margin-bottom:0}.usa-process-list__heading{color:#1b1b1b;font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.46rem;font-weight:700;line-height:1.1;margin:0}.usa-process-list__heading+*{margin-top:.25rem}.usa-step-indicator{background-color:#fff;font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.06rem;line-height:1.1;margin-bottom:2rem;margin-left:-1px;margin-right:-1px}@media (min-width:40em){.usa-step-indicator{margin-left:0;margin-right:0}}.usa-step-indicator__segments{counter-reset:usa-step-indicator;display:flex;list-style:none;margin:0;padding:0}.usa-step-indicator__segment{counter-increment:usa-step-indicator;flex:1 1;margin-left:1px;margin-right:1px;max-width:15rem;min-height:.5rem;position:relative}.usa-step-indicator__segment:after{background-color:#dfe1e2;content:"";display:block;height:.5rem;left:0;position:absolute;right:0;top:0}@media (min-width:40em){.usa-step-indicator__segment:after{height:.5rem}}.usa-step-indicator__segment--complete:after{background-color:#162e51}.usa-step-indicator__segment--complete .usa-step-indicator__segment-label{color:#162e51}.usa-step-indicator__segment--current:after{background-color:#005ea2}.usa-step-indicator__segment--current .usa-step-indicator__segment-label{color:#005ea2;font-weight:700}.usa-step-indicator__segment-label{display:none}@media (min-width:40em){.usa-step-indicator__segment-label{color:#565c65;display:block;font-size:1.06rem;margin-top:1rem;padding-right:2rem;text-align:left}}.usa-step-indicator__header{align-items:baseline;display:flex}.usa-step-indicator__heading{color:#1b1b1b;font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.13rem;font-weight:700;margin:1rem 0 0}@media (min-width:40em){.usa-step-indicator__heading{font-size:1.46rem;margin-top:2rem}}.usa-step-indicator__current-step{background-color:#005ea2;border-radius:99rem;color:#fff;display:inline-block;height:2.5rem;padding:calc(1.25rem - 1.1ex);text-align:center;width:2.5rem}.usa-step-indicator__current-step,.usa-step-indicator__total-steps{-webkit-font-feature-settings:"tnum" 1,"kern" 1;font-feature-settings:"tnum" 1,"kern" 1;font-weight:400}.usa-step-indicator__total-steps{color:#005ea2;margin-right:.5rem}@media (min-width:40em){.usa-step-indicator--counters-sm .usa-step-indicator__segment,.usa-step-indicator--counters .usa-step-indicator__segment{margin-left:0;margin-right:0;margin-top:1.25rem}.usa-step-indicator--counters-sm .usa-step-indicator__segment:before,.usa-step-indicator--counters .usa-step-indicator__segment:before{-webkit-font-feature-settings:"tnum" 1,"kern" 1;font-feature-settings:"tnum" 1,"kern" 1;background-color:#fff;border-radius:99rem;box-shadow:inset 0 0 0 .25rem #dfe1e2,0 0 0 .25rem #fff;color:#565c65;content:counter(usa-step-indicator);display:block;font-weight:700;height:2.5rem;left:0;line-height:.9;padding:calc(1.25rem - .9ex);position:absolute;text-align:center;top:-1rem;width:2.5rem;z-index:100}.usa-step-indicator--counters-sm .usa-step-indicator__segment:last-child:after,.usa-step-indicator--counters .usa-step-indicator__segment:last-child:after{display:none}}.usa-step-indicator--counters-sm .usa-step-indicator__segment--complete:before,.usa-step-indicator--counters .usa-step-indicator__segment--complete:before{background-color:#162e51;box-shadow:0 0 0 .25rem #fff;color:#fff}.usa-step-indicator--counters-sm .usa-step-indicator__segment--current:before,.usa-step-indicator--counters .usa-step-indicator__segment--current:before{background-color:#005ea2;box-shadow:0 0 0 .25rem #fff;color:#fff}@media (min-width:40em){.usa-step-indicator--counters-sm .usa-step-indicator__segment-label,.usa-step-indicator--counters .usa-step-indicator__segment-label{margin-top:2rem}.usa-step-indicator--counters-sm.usa-step-indicator--center .usa-step-indicator__segment:first-child:after,.usa-step-indicator--counters.usa-step-indicator--center .usa-step-indicator__segment:first-child:after{left:50%;right:0;width:auto}.usa-step-indicator--counters-sm.usa-step-indicator--center .usa-step-indicator__segment:last-child:after,.usa-step-indicator--counters.usa-step-indicator--center .usa-step-indicator__segment:last-child:after{display:block;left:0;right:50%;width:auto}.usa-step-indicator--counters-sm .usa-step-indicator__segment{margin-top:.75rem}.usa-step-indicator--counters-sm .usa-step-indicator__segment:before{border-radius:99rem;font-size:.93rem;height:1.5rem;padding:calc(.25rem + 1px);top:-.5rem;width:1.5rem}.usa-step-indicator--counters-sm .usa-step-indicator__segment:last-child:after{display:none}.usa-step-indicator--counters-sm .usa-step-indicator__segment-label{margin-top:1.5rem}}.usa-step-indicator--no-labels{margin-left:-1px;margin-right:-1px}.usa-step-indicator--no-labels .usa-step-indicator__segment{margin-left:1px;margin-right:1px;margin-top:0}.usa-step-indicator--no-labels .usa-step-indicator__segment:before{display:none}.usa-step-indicator--no-labels .usa-step-indicator__segment:last-child:after{display:block}.usa-step-indicator--no-labels .usa-step-indicator__heading{margin-top:1rem}.usa-step-indicator--no-labels .usa-step-indicator__segment-label{display:none}.usa-step-indicator--center{margin-left:-1px;margin-right:-1px}.usa-step-indicator--center .usa-step-indicator__segment{margin-left:1px;margin-right:1px}.usa-step-indicator--center .usa-step-indicator__segment:before{left:calc(50% - 1.375rem)}.usa-step-indicator--center .usa-step-indicator__segment-label{padding-left:.5rem;padding-right:.5rem;text-align:center}.usa-step-indicator--center.usa-step-indicator--no-labels .usa-step-indicator__segment:first-child:after{left:0}.usa-step-indicator--center.usa-step-indicator--no-labels .usa-step-indicator__segment:last-child:after{right:0}.usa-step-indicator--center.usa-step-indicator--counters-sm .usa-step-indicator__segment:before{left:calc(50% - .875rem)}.usa-search{font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.06rem;line-height:1.5;position:relative}.usa-search:after{clear:both;content:"";display:block}.usa-search[role=search],.usa-search [role=search],.usa-search[role=search]>div{display:flex}.usa-search [type=submit]{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0xNS41IDE0aC0uNzlsLS4yOC0uMjdBNi40NzEgNi40NzEgMCAwIDAgMTYgOS41IDYuNSA2LjUgMCAxIDAgOS41IDE2YzEuNjEgMCAzLjA5LS41OSA0LjIzLTEuNTdsLjI3LjI4di43OWw1IDQuOTlMMjAuNDkgMTlsLTQuOTktNXptLTYgMEM3LjAxIDE0IDUgMTEuOTkgNSA5LjVTNy4wMSA1IDkuNSA1IDE0IDcuMDEgMTQgOS41IDExLjk5IDE0IDkuNSAxNHoiLz48L3N2Zz4=),linear-gradient(transparent,transparent);background-position:50%;background-repeat:no-repeat;background-size:1.5rem;border-bottom-left-radius:0;border-top-left-radius:0;height:2rem;margin:0;padding:0;width:3rem}@media (min-width:30em){.usa-search [type=submit]{background-image:none;padding-left:1rem;padding-right:1rem;width:auto}.usa-search--big .usa-search__input,.usa-search--big [type=search]{font-size:1.06rem;height:3rem}.usa-search--big .usa-search__submit,.usa-search--big [type=submit]{font-size:1.46rem;height:3rem;padding-left:2rem;padding-right:2rem;width:auto}.usa-search--small .usa-search__submit,.usa-search--small [type=submit]{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0xNS41IDE0aC0uNzlsLS4yOC0uMjdBNi40NzEgNi40NzEgMCAwIDAgMTYgOS41IDYuNSA2LjUgMCAxIDAgOS41IDE2YzEuNjEgMCAzLjA5LS41OSA0LjIzLTEuNTdsLjI3LjI4di43OWw1IDQuOTlMMjAuNDkgMTlsLTQuOTktNXptLTYgMEM3LjAxIDE0IDUgMTEuOTkgNSA5LjVTNy4wMSA1IDkuNSA1IDE0IDcuMDEgMTQgOS41IDExLjk5IDE0IDkuNSAxNHoiLz48L3N2Zz4=),linear-gradient(transparent,transparent);background-position:50%;background-repeat:no-repeat;background-size:1.5rem;width:3rem}}input[type=search]{-webkit-appearance:none;appearance:none;box-sizing:border-box}.usa-search__input,[type=search]{border-bottom-right-radius:0;border-right:none;border-top-right-radius:0;box-sizing:border-box;float:left;font-size:1rem;height:2rem;margin:0;padding-bottom:0;padding-top:0}.usa-search__submit-text{left:-999em;position:absolute;right:auto}@media (min-width:30em){.usa-search__submit-text{position:static}}.usa-section{padding-bottom:2rem;padding-top:2rem}@media (min-width:40em){.usa-section{padding-bottom:4rem;padding-top:4rem}}.usa-section--light{background-color:#f0f0f0}.usa-section--dark{background-color:#162e51;color:#fff}.usa-section--dark h1,.usa-section--dark h2,.usa-section--dark h3,.usa-section--dark h4,.usa-section--dark h5,.usa-section--dark h6{color:#00bde3}.usa-section--dark p{color:#fff}.usa-section--dark a{color:#dfe1e2}.usa-section--dark a:hover{color:#f0f0f0}.usa-section--dark a:active{color:#fff}.usa-sidenav{border-bottom:1px solid #dfe1e2;font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.06rem;line-height:1.3;list-style-type:none;margin-bottom:0;margin-top:0;padding-left:0}.usa-sidenav>li{margin-bottom:0;max-width:unset}.usa-sidenav__item{border-top:1px solid #dfe1e2}.usa-sidenav a:not(.usa-button){color:#565c65;display:block;padding:.5rem 1rem;text-decoration:none}.usa-sidenav a:not(.usa-button):hover{background-color:#f0f0f0;color:#005ea2;text-decoration:none}.usa-sidenav a:not(.usa-button):focus{outline-offset:0}.usa-sidenav .usa-current{color:#005ea2;font-weight:700;position:relative}.usa-sidenav .usa-current:after{background-color:#005ea2;border-radius:99rem;bottom:.25rem;content:"";display:block;left:.25rem;position:absolute;top:.25rem;width:.25rem}@media (min-width:40em){.usa-sidenav .usa-current{position:relative}.usa-sidenav .usa-current:after{background-color:#005ea2;border-radius:99rem;bottom:.25rem;content:"";display:block;left:0;position:absolute;top:.25rem;width:.25rem}}.grid-container .usa-sidenav{margin-left:-1rem;margin-right:-1rem}@media (min-width:40em){.grid-container .usa-sidenav{margin-left:0;margin-right:0}}.usa-sidenav__sublist{font-size:1rem;list-style-type:none;margin:0;padding-left:0}.usa-sidenav__sublist>li{margin-bottom:0;max-width:unset}.usa-sidenav__sublist-item{border-top:1px solid #dfe1e2;font-size:.93rem}.usa-sidenav__sublist .usa-current:after{display:none}@media (min-width:40em){.usa-sidenav__sublist .usa-current:after{display:none}}.usa-sidenav__sublist a:not(.usa-button){padding-left:2rem}.usa-sidenav__sublist .usa-sidenav__sublist a:not(.usa-button){padding-left:3rem}.usa-sidenav__sublist .usa-sidenav__sublist .usa-sidenav__sublist a:not(.usa-button){content:"foobar";padding-left:4rem}.usa-site-alert{background-color:#f0f0f0;position:relative}.usa-site-alert .usa-alert{background-position-x:1rem;margin-left:auto;margin-right:auto;max-width:64rem;padding-left:1rem;padding-right:1rem}@media (min-width:64em){.usa-site-alert .usa-alert{background-position-x:2rem;padding-left:2rem;padding-right:2rem}}.usa-site-alert .usa-alert:before{display:none}.usa-site-alert .usa-alert .usa-alert__body>.usa-list,.usa-site-alert .usa-alert>.usa-list{padding-left:2ch}.usa-site-alert .usa-alert__body{display:block}@media (min-width:40em){.usa-site-alert .usa-alert__body{position:relative}}.usa-site-alert--info,.usa-site-alert--info .usa-alert{background-color:#e7f6f8;color:#1b1b1b}.usa-site-alert--info .usa-alert{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0xIDE1aC0ydi02aDJ2NnptMC04aC0yVjdoMnYyeiIvPjwvc3ZnPg==),linear-gradient(transparent,transparent);background-repeat:no-repeat}.usa-site-alert--info .usa-alert:before{background-color:#00bde3}.usa-site-alert--info .usa-alert .usa-alert__body{padding-left:3.75rem}.usa-site-alert--info .usa-alert .usa-link{color:#005ea2}.usa-site-alert--info .usa-alert .usa-link:visited{color:#54278f}.usa-site-alert--info .usa-alert .usa-link:active,.usa-site-alert--info .usa-alert .usa-link:hover{color:#1a4480}.usa-site-alert--info .usa-alert.usa-alert--no-icon{background-image:none}.usa-site-alert--info .usa-alert.usa-alert--no-icon .usa-alert__body{padding-left:0}.usa-site-alert--emergency{background-color:#9c3d10;color:#fff}.usa-site-alert--emergency .usa-alert{background-color:#9c3d10;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0xIDE1aC0ydi0yaDJ2MnptMC00aC0yVjdoMnY2eiIvPjwvc3ZnPg==),linear-gradient(transparent,transparent);background-repeat:no-repeat;color:#fff}.usa-site-alert--emergency .usa-alert:before{background-color:#9c3d10}.usa-site-alert--emergency .usa-alert .usa-alert__body{padding-left:3.75rem}.usa-site-alert--emergency .usa-alert .usa-link,.usa-site-alert--emergency .usa-alert .usa-link:visited{color:#dfe1e2}.usa-site-alert--emergency .usa-alert .usa-link:active,.usa-site-alert--emergency .usa-alert .usa-link:hover{color:#f0f0f0}.usa-site-alert--emergency .usa-alert.usa-alert--no-icon{background-image:none}.usa-site-alert--emergency .usa-alert.usa-alert--no-icon .usa-alert__body{padding-left:0}.usa-site-alert--no-icon .usa-alert{background-image:none}.usa-site-alert--no-icon .usa-alert .usa-alert__body{padding-left:0}.usa-site-alert--slim .usa-alert{background-position:1.75rem .75rem;background-position-x:1rem;background-size:1.5rem;padding-bottom:.5rem;padding-top:.5rem}.usa-site-alert--slim .usa-alert .usa-alert__body{padding-left:2rem}.usa-site-alert--slim .usa-alert .usa-alert__text:only-child{margin-bottom:.25rem;padding-top:.25rem}@media (min-width:64em){.usa-site-alert--slim .usa-alert{background-position-x:2rem}}.usa-site-alert--no-heading .usa-alert{background-position-y:1rem}.usa-skipnav{background:transparent;color:#005ea2;font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.06rem;left:0;line-height:1.5;padding:.5rem 1rem;position:absolute;text-decoration:underline;top:-3.8rem;transition:.2s ease-in-out;z-index:100}.usa-skipnav:visited{color:#54278f}.usa-skipnav:hover{color:#1a4480}.usa-skipnav:active{color:#162e51}.usa-skipnav:focus{outline:.25rem solid #2491ff;outline-offset:0}.usa-skipnav.usa-focus,.usa-skipnav:focus{background:#fff;left:0;position:absolute;top:0;transition:.2s ease-in-out}.usa-summary-box{background-color:#e7f6f8;border:1px solid #99deea;border-radius:.25rem;color:#1b1b1b;font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.06rem;line-height:1.5;padding:1.5rem;position:relative}.usa-summary-box .usa-list:last-child{margin-bottom:0}*+.usa-summary-box{margin-top:1rem}.usa-summary-box__body{display:table-cell;vertical-align:top}.usa-summary-box__heading{font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;font-size:1.46rem;line-height:1.1;margin-bottom:.5rem;margin-top:0}.usa-summary-box__text{margin-bottom:0;margin-top:0}.usa-summary-box__text:only-child{margin-bottom:1px;padding-top:.25rem}.usa-summary-box__link{color:#005ea2}.usa-summary-box__link:visited{color:#54278f}.usa-summary-box__link:active,.usa-summary-box__link:hover{color:#1a4480}.usa-summary-box__link[href^="#"]:visited{color:#005ea2}.usa-summary-box__link[href^="#"]:hover{color:#1a4480}.usa-tooltip{display:inline-block;position:relative}.usa-tooltip__trigger{cursor:pointer}.usa-tooltip__trigger>svg{display:block;pointer-events:none}.usa-tooltip__body{background-color:#1b1b1b;border-radius:.25rem;bottom:0;color:#f0f0f0;display:none;font-size:1rem;left:0;opacity:0;padding:.5rem;pointer-events:none;position:absolute;-webkit-transform:translateX(-50%);transform:translateX(-50%);transition:opacity .08s ease-in-out;white-space:pre;width:auto;z-index:100000}.usa-tooltip__body:after{border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #1b1b1b;bottom:-5px;content:"";display:block;height:0;left:50%;margin-left:-5px;pointer-events:none;position:absolute;width:0}.usa-tooltip__body--wrap{white-space:normal;width:100%}.usa-tooltip__body.is-set{display:block}.usa-tooltip__body.is-visible{opacity:1}.usa-tooltip__body--bottom{bottom:auto;top:0}.usa-tooltip__body--bottom:after{border-bottom:5px solid #1b1b1b;border-left:5px solid transparent;border-right:5px solid transparent;border-top:0;bottom:auto;top:-5px}.usa-tooltip__body--right{top:auto;-webkit-transform:translateX(0);transform:translateX(0)}.usa-tooltip__body--right:after{border-bottom:5px solid transparent;border-left:0;border-right:5px solid #1b1b1b;border-top:5px solid transparent;bottom:0;left:-5px;margin:-5px 0 0;right:auto;top:50%}.usa-tooltip__body--left{left:0;right:auto;top:auto;-webkit-transform:translateX(0);transform:translateX(0)}.usa-tooltip__body--left:after{border-bottom:5px solid transparent;border-left:5px solid #1b1b1b;border-right:0;border-top:5px solid transparent;bottom:0;left:auto;margin:-5px 0 0;right:-5px;top:50%}[class*=font-mono-]{font-family:Roboto Mono Web,Bitstream Vera Sans Mono,Consolas,Courier,monospace}[class*=font-sans-]{font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif}[class*=font-serif-]{font-family:Merriweather Web,Georgia,Cambria,Times New Roman,Times,serif}[class*=font-body-],[class*=font-heading-],[class*=font-ui-]{font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif}[class*=font-code-]{font-family:Roboto Mono Web,Bitstream Vera Sans Mono,Consolas,Courier,monospace}[class*=font-alt-]{font-family:Merriweather Web,Georgia,Cambria,Times New Roman,Times,serif}.add-aspect-9x16{padding:0 0 177.77778%}.add-aspect-1x1,.add-aspect-9x16{box-sizing:border-box;height:0;overflow:hidden;position:relative}.add-aspect-1x1{padding:0 0 100%}.add-aspect-4x3{padding:0 0 75%}.add-aspect-4x3,.add-aspect-16x9{box-sizing:border-box;height:0;overflow:hidden;position:relative}.add-aspect-16x9{padding:0 0 56.25%}.add-aspect-2x1{box-sizing:border-box;height:0;overflow:hidden;padding:0 0 50%;position:relative}.add-list-reset{list-style:none;margin-bottom:0;margin-top:0;padding-left:0}.flex-align-start{align-items:flex-start}.flex-align-end{align-items:flex-end}.flex-align-center{align-items:center}.flex-align-stretch{align-items:stretch}.flex-align-baseline{align-items:baseline}.flex-align-self-start{align-self:flex-start}.flex-align-self-end{align-self:flex-end}.flex-align-self-center{align-self:center}.flex-align-self-stretch{align-self:stretch}.flex-align-self-baseline{align-self:baseline}.bg-transparent,.hover\:bg-transparent:hover{background-color:transparent}.bg-black,.hover\:bg-black:hover{background-color:#000}.bg-white,.hover\:bg-white:hover{background-color:#fff}.bg-red,.hover\:bg-red:hover{background-color:#e52207}.bg-orange,.hover\:bg-orange:hover{background-color:#e66f0e}.bg-gold,.hover\:bg-gold:hover{background-color:#ffbe2e}.bg-yellow,.hover\:bg-yellow:hover{background-color:#fee685}.bg-green,.hover\:bg-green:hover{background-color:#538200}.bg-mint,.hover\:bg-mint:hover{background-color:#04c585}.bg-cyan,.hover\:bg-cyan:hover{background-color:#009ec1}.bg-blue,.hover\:bg-blue:hover{background-color:#0076d6}.bg-indigo,.hover\:bg-indigo:hover{background-color:#676cc8}.bg-violet,.hover\:bg-violet:hover{background-color:#8168b3}.bg-magenta,.hover\:bg-magenta:hover{background-color:#d72d79}.bg-gray-5,.hover\:bg-gray-5:hover{background-color:#f0f0f0}.bg-gray-10,.hover\:bg-gray-10:hover{background-color:#e6e6e6}.bg-gray-30,.hover\:bg-gray-30:hover{background-color:#adadad}.bg-gray-50,.hover\:bg-gray-50:hover{background-color:#757575}.bg-gray-70,.hover\:bg-gray-70:hover{background-color:#454545}.bg-gray-90,.hover\:bg-gray-90:hover{background-color:#1b1b1b}.bg-base-lightest,.hover\:bg-base-lightest:hover{background-color:#f0f0f0}.bg-base-lighter,.hover\:bg-base-lighter:hover{background-color:#dfe1e2}.bg-base-light,.hover\:bg-base-light:hover{background-color:#a9aeb1}.bg-base,.hover\:bg-base:hover{background-color:#71767a}.bg-base-dark,.hover\:bg-base-dark:hover{background-color:#565c65}.bg-base-darker,.hover\:bg-base-darker:hover{background-color:#3d4551}.bg-base-darkest,.bg-ink,.hover\:bg-base-darkest:hover,.hover\:bg-ink:hover{background-color:#1b1b1b}.bg-primary-lighter,.hover\:bg-primary-lighter:hover{background-color:#d9e8f6}.bg-primary-light,.hover\:bg-primary-light:hover{background-color:#73b3e7}.bg-primary,.hover\:bg-primary:hover{background-color:#005ea2}.bg-primary-vivid,.hover\:bg-primary-vivid:hover{background-color:#0050d8}.bg-primary-dark,.hover\:bg-primary-dark:hover{background-color:#1a4480}.bg-primary-darker,.hover\:bg-primary-darker:hover{background-color:#162e51}.bg-secondary-lighter,.hover\:bg-secondary-lighter:hover{background-color:#f3e1e4}.bg-secondary-light,.hover\:bg-secondary-light:hover{background-color:#f2938c}.bg-secondary,.hover\:bg-secondary:hover{background-color:#d83933}.bg-secondary-vivid,.hover\:bg-secondary-vivid:hover{background-color:#e41d3d}.bg-secondary-dark,.hover\:bg-secondary-dark:hover{background-color:#b50909}.bg-secondary-darker,.hover\:bg-secondary-darker:hover{background-color:#8b0a03}.bg-accent-warm-darker,.hover\:bg-accent-warm-darker:hover{background-color:#775540}.bg-accent-warm-dark,.hover\:bg-accent-warm-dark:hover{background-color:#c05600}.bg-accent-warm,.hover\:bg-accent-warm:hover{background-color:#fa9441}.bg-accent-warm-light,.hover\:bg-accent-warm-light:hover{background-color:#ffbc78}.bg-accent-warm-lighter,.hover\:bg-accent-warm-lighter:hover{background-color:#f2e4d4}.bg-accent-cool-darker,.hover\:bg-accent-cool-darker:hover{background-color:#07648d}.bg-accent-cool-dark,.hover\:bg-accent-cool-dark:hover{background-color:#28a0cb}.bg-accent-cool,.hover\:bg-accent-cool:hover{background-color:#00bde3}.bg-accent-cool-light,.hover\:bg-accent-cool-light:hover{background-color:#97d4ea}.bg-accent-cool-lighter,.hover\:bg-accent-cool-lighter:hover{background-color:#e1f3f8}.border-1px,.hover\:border-1px:hover{border:1px solid}.border-y-1px,.hover\:border-y-1px:hover{border-bottom:1px solid;border-top:1px solid}.border-x-1px,.hover\:border-x-1px:hover{border-left:1px solid;border-right:1px solid}.border-top-1px,.hover\:border-top-1px:hover{border-top:1px solid}.border-right-1px,.hover\:border-right-1px:hover{border-right:1px solid}.border-bottom-1px,.hover\:border-bottom-1px:hover{border-bottom:1px solid}.border-left-1px,.hover\:border-left-1px:hover{border-left:1px solid}.border-2px,.hover\:border-2px:hover{border:2px solid}.border-y-2px,.hover\:border-y-2px:hover{border-bottom:2px solid;border-top:2px solid}.border-x-2px,.hover\:border-x-2px:hover{border-left:2px solid;border-right:2px solid}.border-top-2px,.hover\:border-top-2px:hover{border-top:2px solid}.border-right-2px,.hover\:border-right-2px:hover{border-right:2px solid}.border-bottom-2px,.hover\:border-bottom-2px:hover{border-bottom:2px solid}.border-left-2px,.hover\:border-left-2px:hover{border-left:2px solid}.border-05,.hover\:border-05:hover{border:.25rem solid}.border-y-05,.hover\:border-y-05:hover{border-bottom:.25rem solid;border-top:.25rem solid}.border-x-05,.hover\:border-x-05:hover{border-left:.25rem solid;border-right:.25rem solid}.border-top-05,.hover\:border-top-05:hover{border-top:.25rem solid}.border-right-05,.hover\:border-right-05:hover{border-right:.25rem solid}.border-bottom-05,.hover\:border-bottom-05:hover{border-bottom:.25rem solid}.border-left-05,.hover\:border-left-05:hover{border-left:.25rem solid}.border-1,.hover\:border-1:hover{border:.5rem solid}.border-y-1,.hover\:border-y-1:hover{border-bottom:.5rem solid;border-top:.5rem solid}.border-x-1,.hover\:border-x-1:hover{border-left:.5rem solid;border-right:.5rem solid}.border-top-1,.hover\:border-top-1:hover{border-top:.5rem solid}.border-right-1,.hover\:border-right-1:hover{border-right:.5rem solid}.border-bottom-1,.hover\:border-bottom-1:hover{border-bottom:.5rem solid}.border-left-1,.hover\:border-left-1:hover{border-left:.5rem solid}.border-105,.hover\:border-105:hover{border:.75rem solid}.border-y-105,.hover\:border-y-105:hover{border-bottom:.75rem solid;border-top:.75rem solid}.border-x-105,.hover\:border-x-105:hover{border-left:.75rem solid;border-right:.75rem solid}.border-top-105,.hover\:border-top-105:hover{border-top:.75rem solid}.border-right-105,.hover\:border-right-105:hover{border-right:.75rem solid}.border-bottom-105,.hover\:border-bottom-105:hover{border-bottom:.75rem solid}.border-left-105,.hover\:border-left-105:hover{border-left:.75rem solid}.border-2,.hover\:border-2:hover{border:1rem solid}.border-y-2,.hover\:border-y-2:hover{border-bottom:1rem solid;border-top:1rem solid}.border-x-2,.hover\:border-x-2:hover{border-left:1rem solid;border-right:1rem solid}.border-top-2,.hover\:border-top-2:hover{border-top:1rem solid}.border-right-2,.hover\:border-right-2:hover{border-right:1rem solid}.border-bottom-2,.hover\:border-bottom-2:hover{border-bottom:1rem solid}.border-left-2,.hover\:border-left-2:hover{border-left:1rem solid}.border-205,.hover\:border-205:hover{border:1.25rem solid}.border-y-205,.hover\:border-y-205:hover{border-bottom:1.25rem solid;border-top:1.25rem solid}.border-x-205,.hover\:border-x-205:hover{border-left:1.25rem solid;border-right:1.25rem solid}.border-top-205,.hover\:border-top-205:hover{border-top:1.25rem solid}.border-right-205,.hover\:border-right-205:hover{border-right:1.25rem solid}.border-bottom-205,.hover\:border-bottom-205:hover{border-bottom:1.25rem solid}.border-left-205,.hover\:border-left-205:hover{border-left:1.25rem solid}.border-3,.hover\:border-3:hover{border:1.5rem solid}.border-y-3,.hover\:border-y-3:hover{border-bottom:1.5rem solid;border-top:1.5rem solid}.border-x-3,.hover\:border-x-3:hover{border-left:1.5rem solid;border-right:1.5rem solid}.border-top-3,.hover\:border-top-3:hover{border-top:1.5rem solid}.border-right-3,.hover\:border-right-3:hover{border-right:1.5rem solid}.border-bottom-3,.hover\:border-bottom-3:hover{border-bottom:1.5rem solid}.border-left-3,.hover\:border-left-3:hover{border-left:1.5rem solid}.border-0,.hover\:border-0:hover{border:0 solid}.border-y-0,.hover\:border-y-0:hover{border-bottom:0 solid;border-top:0 solid}.border-x-0,.hover\:border-x-0:hover{border-left:0 solid;border-right:0 solid}.border-top-0,.hover\:border-top-0:hover{border-top:0 solid}.border-right-0,.hover\:border-right-0:hover{border-right:0 solid}.border-bottom-0,.hover\:border-bottom-0:hover{border-bottom:0 solid}.border-left-0,.hover\:border-left-0:hover{border-left:0 solid}.border,.hover\:border:hover{border:1px solid}.border-y,.hover\:border-y:hover{border-bottom:1px solid;border-top:1px solid}.border-x,.hover\:border-x:hover{border-left:1px solid;border-right:1px solid}.border-top,.hover\:border-top:hover{border-top:1px solid}.border-right,.hover\:border-right:hover{border-right:1px solid}.border-bottom,.hover\:border-bottom:hover{border-bottom:1px solid}.border-left,.hover\:border-left:hover{border-left:1px solid}.border-transparent,.hover\:border-transparent:hover{border-color:transparent}.border-black,.hover\:border-black:hover{border-color:#000}.border-white,.hover\:border-white:hover{border-color:#fff}.border-red,.hover\:border-red:hover{border-color:#e52207}.border-orange,.hover\:border-orange:hover{border-color:#e66f0e}.border-gold,.hover\:border-gold:hover{border-color:#ffbe2e}.border-yellow,.hover\:border-yellow:hover{border-color:#fee685}.border-green,.hover\:border-green:hover{border-color:#538200}.border-mint,.hover\:border-mint:hover{border-color:#04c585}.border-cyan,.hover\:border-cyan:hover{border-color:#009ec1}.border-blue,.hover\:border-blue:hover{border-color:#0076d6}.border-indigo,.hover\:border-indigo:hover{border-color:#676cc8}.border-violet,.hover\:border-violet:hover{border-color:#8168b3}.border-magenta,.hover\:border-magenta:hover{border-color:#d72d79}.border-gray-5,.hover\:border-gray-5:hover{border-color:#f0f0f0}.border-gray-10,.hover\:border-gray-10:hover{border-color:#e6e6e6}.border-gray-30,.hover\:border-gray-30:hover{border-color:#adadad}.border-gray-50,.hover\:border-gray-50:hover{border-color:#757575}.border-gray-70,.hover\:border-gray-70:hover{border-color:#454545}.border-gray-90,.hover\:border-gray-90:hover{border-color:#1b1b1b}.border-base-lightest,.hover\:border-base-lightest:hover{border-color:#f0f0f0}.border-base-lighter,.hover\:border-base-lighter:hover{border-color:#dfe1e2}.border-base-light,.hover\:border-base-light:hover{border-color:#a9aeb1}.border-base,.hover\:border-base:hover{border-color:#71767a}.border-base-dark,.hover\:border-base-dark:hover{border-color:#565c65}.border-base-darker,.hover\:border-base-darker:hover{border-color:#3d4551}.border-base-darkest,.border-ink,.hover\:border-base-darkest:hover,.hover\:border-ink:hover{border-color:#1b1b1b}.border-primary-lighter,.hover\:border-primary-lighter:hover{border-color:#d9e8f6}.border-primary-light,.hover\:border-primary-light:hover{border-color:#73b3e7}.border-primary,.hover\:border-primary:hover{border-color:#005ea2}.border-primary-vivid,.hover\:border-primary-vivid:hover{border-color:#0050d8}.border-primary-dark,.hover\:border-primary-dark:hover{border-color:#1a4480}.border-primary-darker,.hover\:border-primary-darker:hover{border-color:#162e51}.border-secondary-lighter,.hover\:border-secondary-lighter:hover{border-color:#f3e1e4}.border-secondary-light,.hover\:border-secondary-light:hover{border-color:#f2938c}.border-secondary,.hover\:border-secondary:hover{border-color:#d83933}.border-secondary-vivid,.hover\:border-secondary-vivid:hover{border-color:#e41d3d}.border-secondary-dark,.hover\:border-secondary-dark:hover{border-color:#b50909}.border-secondary-darker,.hover\:border-secondary-darker:hover{border-color:#8b0a03}.border-accent-warm-darker,.hover\:border-accent-warm-darker:hover{border-color:#775540}.border-accent-warm-dark,.hover\:border-accent-warm-dark:hover{border-color:#c05600}.border-accent-warm,.hover\:border-accent-warm:hover{border-color:#fa9441}.border-accent-warm-light,.hover\:border-accent-warm-light:hover{border-color:#ffbc78}.border-accent-warm-lighter,.hover\:border-accent-warm-lighter:hover{border-color:#f2e4d4}.border-accent-cool-darker,.hover\:border-accent-cool-darker:hover{border-color:#07648d}.border-accent-cool-dark,.hover\:border-accent-cool-dark:hover{border-color:#28a0cb}.border-accent-cool,.hover\:border-accent-cool:hover{border-color:#00bde3}.border-accent-cool-light,.hover\:border-accent-cool-light:hover{border-color:#97d4ea}.border-accent-cool-lighter,.hover\:border-accent-cool-lighter:hover{border-color:#e1f3f8}.radius-0{border-radius:0}.radius-top-0{border-top-left-radius:0;border-top-right-radius:0}.radius-right-0{border-bottom-right-radius:0;border-top-right-radius:0}.radius-bottom-0{border-bottom-left-radius:0;border-bottom-right-radius:0}.radius-left-0{border-bottom-left-radius:0;border-top-left-radius:0}.radius-none{border-radius:0}.radius-top-none{border-top-left-radius:0;border-top-right-radius:0}.radius-right-none{border-bottom-right-radius:0;border-top-right-radius:0}.radius-bottom-none{border-bottom-left-radius:0;border-bottom-right-radius:0}.radius-left-none{border-bottom-left-radius:0;border-top-left-radius:0}.radius-sm{border-radius:2px}.radius-top-sm{border-top-left-radius:2px;border-top-right-radius:2px}.radius-right-sm{border-bottom-right-radius:2px;border-top-right-radius:2px}.radius-bottom-sm{border-bottom-left-radius:2px;border-bottom-right-radius:2px}.radius-left-sm{border-bottom-left-radius:2px;border-top-left-radius:2px}.radius-md{border-radius:.25rem}.radius-top-md{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.radius-right-md{border-bottom-right-radius:.25rem;border-top-right-radius:.25rem}.radius-bottom-md{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.radius-left-md{border-bottom-left-radius:.25rem;border-top-left-radius:.25rem}.radius-lg{border-radius:.5rem}.radius-top-lg{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.radius-right-lg{border-bottom-right-radius:.5rem;border-top-right-radius:.5rem}.radius-bottom-lg{border-bottom-left-radius:.5rem;border-bottom-right-radius:.5rem}.radius-left-lg{border-bottom-left-radius:.5rem;border-top-left-radius:.5rem}.radius-pill{border-radius:99rem}.radius-top-pill{border-top-left-radius:99rem;border-top-right-radius:99rem}.radius-right-pill{border-bottom-right-radius:99rem;border-top-right-radius:99rem}.radius-bottom-pill{border-bottom-left-radius:99rem;border-bottom-right-radius:99rem}.radius-left-pill{border-bottom-left-radius:99rem;border-top-left-radius:99rem}.border-dashed{border-style:dashed}.border-dotted{border-style:dotted}.border-solid{border-style:solid}.border-width-1px{border-width:1px}.border-y-width-1px{border-bottom-width:1px;border-top-width:1px}.border-x-width-1px{border-left-width:1px;border-right-width:1px}.border-top-width-1px{border-top-width:1px}.border-right-width-1px{border-right-width:1px}.border-bottom-width-1px{border-bottom-width:1px}.border-left-width-1px{border-left-width:1px}.border-width-2px{border-width:2px}.border-y-width-2px{border-bottom-width:2px;border-top-width:2px}.border-x-width-2px{border-left-width:2px;border-right-width:2px}.border-top-width-2px{border-top-width:2px}.border-right-width-2px{border-right-width:2px}.border-bottom-width-2px{border-bottom-width:2px}.border-left-width-2px{border-left-width:2px}.border-width-05{border-width:.25rem}.border-y-width-05{border-bottom-width:.25rem;border-top-width:.25rem}.border-x-width-05{border-left-width:.25rem;border-right-width:.25rem}.border-top-width-05{border-top-width:.25rem}.border-right-width-05{border-right-width:.25rem}.border-bottom-width-05{border-bottom-width:.25rem}.border-left-width-05{border-left-width:.25rem}.border-width-1{border-width:.5rem}.border-y-width-1{border-bottom-width:.5rem;border-top-width:.5rem}.border-x-width-1{border-left-width:.5rem;border-right-width:.5rem}.border-top-width-1{border-top-width:.5rem}.border-right-width-1{border-right-width:.5rem}.border-bottom-width-1{border-bottom-width:.5rem}.border-left-width-1{border-left-width:.5rem}.border-width-105{border-width:.75rem}.border-y-width-105{border-bottom-width:.75rem;border-top-width:.75rem}.border-x-width-105{border-left-width:.75rem;border-right-width:.75rem}.border-top-width-105{border-top-width:.75rem}.border-right-width-105{border-right-width:.75rem}.border-bottom-width-105{border-bottom-width:.75rem}.border-left-width-105{border-left-width:.75rem}.border-width-2{border-width:1rem}.border-y-width-2{border-bottom-width:1rem;border-top-width:1rem}.border-x-width-2{border-left-width:1rem;border-right-width:1rem}.border-top-width-2{border-top-width:1rem}.border-right-width-2{border-right-width:1rem}.border-bottom-width-2{border-bottom-width:1rem}.border-left-width-2{border-left-width:1rem}.border-width-205{border-width:1.25rem}.border-y-width-205{border-bottom-width:1.25rem;border-top-width:1.25rem}.border-x-width-205{border-left-width:1.25rem;border-right-width:1.25rem}.border-top-width-205{border-top-width:1.25rem}.border-right-width-205{border-right-width:1.25rem}.border-bottom-width-205{border-bottom-width:1.25rem}.border-left-width-205{border-left-width:1.25rem}.border-width-3{border-width:1.5rem}.border-y-width-3{border-bottom-width:1.5rem;border-top-width:1.5rem}.border-x-width-3{border-left-width:1.5rem;border-right-width:1.5rem}.border-top-width-3{border-top-width:1.5rem}.border-right-width-3{border-right-width:1.5rem}.border-bottom-width-3{border-bottom-width:1.5rem}.border-left-width-3{border-left-width:1.5rem}.border-width-0{border-width:0}.border-y-width-0{border-bottom-width:0;border-top-width:0}.border-x-width-0{border-left-width:0;border-right-width:0}.border-top-width-0{border-top-width:0}.border-right-width-0{border-right-width:0}.border-bottom-width-0{border-bottom-width:0}.border-left-width-0{border-left-width:0}.bottom-1px{bottom:1px}.bottom-2px{bottom:2px}.bottom-05{bottom:.25rem}.bottom-1{bottom:.5rem}.bottom-105{bottom:.75rem}.bottom-2{bottom:1rem}.bottom-205{bottom:1.25rem}.bottom-3{bottom:1.5rem}.bottom-neg-1px{bottom:-1px}.bottom-neg-2px{bottom:-2px}.bottom-neg-05{bottom:-.25rem}.bottom-neg-1{bottom:-.5rem}.bottom-neg-105{bottom:-.75rem}.bottom-neg-2{bottom:-1rem}.bottom-neg-205{bottom:-1.25rem}.bottom-neg-3{bottom:-1.5rem}.bottom-0{bottom:0}.bottom-auto{bottom:auto}.bottom-full{bottom:100%}.hover\:shadow-none:hover,.shadow-none{box-shadow:none}.hover\:shadow-1:hover,.shadow-1{box-shadow:0 1px .25rem 0 rgba(0,0,0,.1)}.hover\:shadow-2:hover,.shadow-2{box-shadow:0 .25rem .5rem 0 rgba(0,0,0,.1)}.hover\:shadow-3:hover,.shadow-3{box-shadow:0 .5rem 1rem 0 rgba(0,0,0,.1)}.hover\:shadow-4:hover,.shadow-4{box-shadow:0 .75rem 1.5rem 0 rgba(0,0,0,.1)}.hover\:shadow-5:hover,.shadow-5{box-shadow:0 1rem 2rem 0 rgba(0,0,0,.1)}.circle-1px{border-radius:50%;height:1px;width:1px}.circle-2px{border-radius:50%;height:2px;width:2px}.circle-05{border-radius:50%;height:.25rem;width:.25rem}.circle-1{border-radius:50%;height:.5rem;width:.5rem}.circle-105{border-radius:50%;height:.75rem;width:.75rem}.circle-2{border-radius:50%;height:1rem;width:1rem}.circle-205{border-radius:50%;height:1.25rem;width:1.25rem}.circle-3{border-radius:50%;height:1.5rem;width:1.5rem}.circle-4{border-radius:50%;height:2rem;width:2rem}.circle-5{border-radius:50%;height:2.5rem;width:2.5rem}.circle-6{border-radius:50%;height:3rem;width:3rem}.circle-7{border-radius:50%;height:3.5rem;width:3.5rem}.circle-8{border-radius:50%;height:4rem;width:4rem}.circle-9{border-radius:50%;height:4.5rem;width:4.5rem}.circle-10{border-radius:50%;height:5rem;width:5rem}.circle-15{border-radius:50%;height:7.5rem;width:7.5rem}.circle-card{border-radius:50%;height:10rem;width:10rem}.circle-card-lg{border-radius:50%;height:15rem;width:15rem}.circle-mobile{border-radius:50%;height:20rem;width:20rem}.clearfix:after{clear:both;content:"";display:block}.hover\:text-transparent:hover,.text-transparent{color:transparent}.hover\:text-black:hover,.text-black{color:#000}.hover\:text-white:hover,.text-white{color:#fff}.hover\:text-red:hover,.text-red{color:#e52207}.hover\:text-orange:hover,.text-orange{color:#e66f0e}.hover\:text-gold:hover,.text-gold{color:#ffbe2e}.hover\:text-yellow:hover,.text-yellow{color:#fee685}.hover\:text-green:hover,.text-green{color:#538200}.hover\:text-mint:hover,.text-mint{color:#04c585}.hover\:text-cyan:hover,.text-cyan{color:#009ec1}.hover\:text-blue:hover,.text-blue{color:#0076d6}.hover\:text-indigo:hover,.text-indigo{color:#676cc8}.hover\:text-violet:hover,.text-violet{color:#8168b3}.hover\:text-magenta:hover,.text-magenta{color:#d72d79}.hover\:text-gray-5:hover,.text-gray-5{color:#f0f0f0}.hover\:text-gray-10:hover,.text-gray-10{color:#e6e6e6}.hover\:text-gray-30:hover,.text-gray-30{color:#adadad}.hover\:text-gray-50:hover,.text-gray-50{color:#757575}.hover\:text-gray-70:hover,.text-gray-70{color:#454545}.hover\:text-gray-90:hover,.text-gray-90{color:#1b1b1b}.hover\:text-base-lightest:hover,.text-base-lightest{color:#f0f0f0}.hover\:text-base-lighter:hover,.text-base-lighter{color:#dfe1e2}.hover\:text-base-light:hover,.text-base-light{color:#a9aeb1}.hover\:text-base:hover,.text-base{color:#71767a}.hover\:text-base-dark:hover,.text-base-dark{color:#565c65}.hover\:text-base-darker:hover,.text-base-darker{color:#3d4551}.hover\:text-base-darkest:hover,.hover\:text-ink:hover,.text-base-darkest,.text-ink{color:#1b1b1b}.hover\:text-primary-lighter:hover,.text-primary-lighter{color:#d9e8f6}.hover\:text-primary-light:hover,.text-primary-light{color:#73b3e7}.hover\:text-primary:hover,.text-primary{color:#005ea2}.hover\:text-primary-vivid:hover,.text-primary-vivid{color:#0050d8}.hover\:text-primary-dark:hover,.text-primary-dark{color:#1a4480}.hover\:text-primary-darker:hover,.text-primary-darker{color:#162e51}.hover\:text-secondary-lighter:hover,.text-secondary-lighter{color:#f3e1e4}.hover\:text-secondary-light:hover,.text-secondary-light{color:#f2938c}.hover\:text-secondary:hover,.text-secondary{color:#d83933}.hover\:text-secondary-vivid:hover,.text-secondary-vivid{color:#e41d3d}.hover\:text-secondary-dark:hover,.text-secondary-dark{color:#b50909}.hover\:text-secondary-darker:hover,.text-secondary-darker{color:#8b0a03}.hover\:text-accent-warm-darker:hover,.text-accent-warm-darker{color:#775540}.hover\:text-accent-warm-dark:hover,.text-accent-warm-dark{color:#c05600}.hover\:text-accent-warm:hover,.text-accent-warm{color:#fa9441}.hover\:text-accent-warm-light:hover,.text-accent-warm-light{color:#ffbc78}.hover\:text-accent-warm-lighter:hover,.text-accent-warm-lighter{color:#f2e4d4}.hover\:text-accent-cool-darker:hover,.text-accent-cool-darker{color:#07648d}.hover\:text-accent-cool-dark:hover,.text-accent-cool-dark{color:#28a0cb}.hover\:text-accent-cool:hover,.text-accent-cool{color:#00bde3}.hover\:text-accent-cool-light:hover,.text-accent-cool-light{color:#97d4ea}.hover\:text-accent-cool-lighter:hover,.text-accent-cool-lighter{color:#e1f3f8}.cursor-auto{cursor:auto}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.cursor-wait{cursor:wait}.cursor-move{cursor:move}.cursor-not-allowed{cursor:not-allowed}.display-block{display:block}.display-flex{display:flex}.display-none{display:none}.display-inline{display:inline}.display-inline-block{display:inline-block}.display-inline-flex{display:inline-flex}.display-table{display:table}.display-table-cell{display:table-cell}.display-table-row{display:table-row}.flex-1{flex:1 1}.flex-2{flex:2 1}.flex-3{flex:3 1}.flex-4{flex:4 1}.flex-5{flex:5 1}.flex-6{flex:6 1}.flex-7{flex:7 1}.flex-8{flex:8 1}.flex-9{flex:9 1}.flex-10{flex:10 1}.flex-11{flex:11 1}.flex-12{flex:12 1}.flex-fill{flex:1 1}.flex-auto{flex:0 1 auto}.flex-row{flex-direction:row}.flex-column{flex-direction:column}.flex-wrap{flex-wrap:wrap}.flex-no-wrap{flex-wrap:nowrap}.float-left{float:left}.float-none{float:none}.float-right{float:right}.font-mono-3xs{font-size:.77rem}.font-mono-2xs{font-size:.83rem}.font-mono-xs{font-size:.89rem}.font-mono-sm{font-size:.95rem}.font-mono-md{font-size:1.01rem}.font-mono-lg{font-size:1.31rem}.font-mono-xl{font-size:1.91rem}.font-mono-2xl{font-size:2.38rem}.font-mono-3xl{font-size:2.86rem}.font-sans-3xs{font-size:.87rem}.font-sans-2xs{font-size:.93rem}.font-sans-xs{font-size:1rem}.font-sans-sm{font-size:1.06rem}.font-sans-md{font-size:1.13rem}.font-sans-lg{font-size:1.46rem}.font-sans-xl{font-size:2.13rem}.font-sans-2xl{font-size:2.66rem}.font-sans-3xl{font-size:3.19rem}.font-serif-3xs{font-size:.79rem}.font-serif-2xs{font-size:.85rem}.font-serif-xs{font-size:.91rem}.font-serif-sm{font-size:.98rem}.font-serif-md{font-size:1.04rem}.font-serif-lg{font-size:1.34rem}.font-serif-xl{font-size:1.95rem}.font-serif-2xl{font-size:2.44rem}.font-serif-3xl{font-size:2.93rem}.font-heading-3xs{font-size:.87rem}.font-heading-2xs{font-size:.93rem}.font-heading-xs{font-size:1rem}.font-heading-sm{font-size:1.06rem}.font-heading-md{font-size:1.13rem}.font-heading-lg{font-size:1.46rem}.font-heading-xl{font-size:2.13rem}.font-heading-2xl{font-size:2.66rem}.font-heading-3xl{font-size:3.19rem}.font-body-3xs{font-size:.87rem}.font-body-2xs{font-size:.93rem}.font-body-xs{font-size:1rem}.font-body-sm{font-size:1.06rem}.font-body-md{font-size:1.13rem}.font-body-lg{font-size:1.46rem}.font-body-xl{font-size:2.13rem}.font-body-2xl{font-size:2.66rem}.font-body-3xl{font-size:3.19rem}.font-code-3xs{font-size:.77rem}.font-code-2xs{font-size:.83rem}.font-code-xs{font-size:.89rem}.font-code-sm{font-size:.95rem}.font-code-md{font-size:1.01rem}.font-code-lg{font-size:1.31rem}.font-code-xl{font-size:1.91rem}.font-code-2xl{font-size:2.38rem}.font-code-3xl{font-size:2.86rem}.font-alt-3xs{font-size:.79rem}.font-alt-2xs{font-size:.85rem}.font-alt-xs{font-size:.91rem}.font-alt-sm{font-size:.98rem}.font-alt-md{font-size:1.04rem}.font-alt-lg{font-size:1.34rem}.font-alt-xl{font-size:1.95rem}.font-alt-2xl{font-size:2.44rem}.font-alt-3xl{font-size:2.93rem}.font-ui-3xs{font-size:.87rem}.font-ui-2xs{font-size:.93rem}.font-ui-xs{font-size:1rem}.font-ui-sm{font-size:1.06rem}.font-ui-md{font-size:1.13rem}.font-ui-lg{font-size:1.46rem}.font-ui-xl{font-size:2.13rem}.font-ui-2xl{font-size:2.66rem}.font-ui-3xl{font-size:3.19rem}.font-family-mono{font-family:Roboto Mono Web,Bitstream Vera Sans Mono,Consolas,Courier,monospace}.font-family-sans{font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif}.font-family-serif{font-family:Merriweather Web,Georgia,Cambria,Times New Roman,Times,serif}.font-family-body,.font-family-heading,.font-family-ui{font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif}.font-family-code{font-family:Roboto Mono Web,Bitstream Vera Sans Mono,Consolas,Courier,monospace}.font-family-alt{font-family:Merriweather Web,Georgia,Cambria,Times New Roman,Times,serif}.text-tabular{-webkit-font-feature-settings:"tnum" 1,"kern" 1;font-feature-settings:"tnum" 1,"kern" 1}.text-no-tabular{-webkit-font-feature-settings:"kern" 1;font-feature-settings:"kern" 1}.text-italic{font-style:italic}.text-no-italic{font-style:normal}.text-light{font-weight:300}.text-normal{font-weight:400}.text-bold{font-weight:700}.height-1px{height:1px}.height-2px{height:2px}.height-05{height:.25rem}.height-1{height:.5rem}.height-105{height:.75rem}.height-2{height:1rem}.height-205{height:1.25rem}.height-3{height:1.5rem}.height-4{height:2rem}.height-5{height:2.5rem}.height-6{height:3rem}.height-7{height:3.5rem}.height-8{height:4rem}.height-9{height:4.5rem}.height-10{height:5rem}.height-15{height:7.5rem}.height-card{height:10rem}.height-card-lg{height:15rem}.height-mobile{height:20rem}.height-0{height:0}.height-auto{height:auto}.height-full{height:100%}.height-viewport{height:100vh}.flex-justify-center{justify-content:center}.flex-justify-start{justify-content:flex-start}.flex-justify-end{justify-content:flex-end}.flex-justify{justify-content:space-between}.left-1px{left:1px}.left-2px{left:2px}.left-05{left:.25rem}.left-1{left:.5rem}.left-105{left:.75rem}.left-2{left:1rem}.left-205{left:1.25rem}.left-3{left:1.5rem}.left-neg-1px{left:-1px}.left-neg-2px{left:-2px}.left-neg-05{left:-.25rem}.left-neg-1{left:-.5rem}.left-neg-105{left:-.75rem}.left-neg-2{left:-1rem}.left-neg-205{left:-1.25rem}.left-neg-3{left:-1.5rem}.left-0{left:0}.left-auto{left:auto}.text-ls-auto{letter-spacing:normal}.text-ls-neg-3{letter-spacing:-.03em}.text-ls-neg-2{letter-spacing:-.02em}.text-ls-neg-1{letter-spacing:-.01em}.text-ls-1{letter-spacing:.025em}.text-ls-2{letter-spacing:.1em}.text-ls-3{letter-spacing:.15em}.line-height-sans-1{line-height:.9}.line-height-sans-2{line-height:1.1}.line-height-sans-3{line-height:1.3}.line-height-sans-4{line-height:1.4}.line-height-sans-5{line-height:1.5}.line-height-sans-6{line-height:1.6}.line-height-serif-1{line-height:1}.line-height-serif-2{line-height:1.2}.line-height-serif-3{line-height:1.4}.line-height-serif-4{line-height:1.5}.line-height-serif-5{line-height:1.7}.line-height-serif-6{line-height:1.8}.line-height-mono-1{line-height:1}.line-height-mono-2{line-height:1.3}.line-height-mono-3{line-height:1.4}.line-height-mono-4{line-height:1.6}.line-height-mono-5{line-height:1.7}.line-height-mono-6{line-height:1.8}.line-height-heading-1{line-height:.9}.line-height-heading-2{line-height:1.1}.line-height-heading-3{line-height:1.3}.line-height-heading-4{line-height:1.4}.line-height-heading-5{line-height:1.5}.line-height-heading-6{line-height:1.6}.line-height-ui-1{line-height:.9}.line-height-ui-2{line-height:1.1}.line-height-ui-3{line-height:1.3}.line-height-ui-4{line-height:1.4}.line-height-ui-5{line-height:1.5}.line-height-ui-6{line-height:1.6}.line-height-body-1{line-height:.9}.line-height-body-2{line-height:1.1}.line-height-body-3{line-height:1.3}.line-height-body-4{line-height:1.4}.line-height-body-5{line-height:1.5}.line-height-body-6{line-height:1.6}.line-height-code-1{line-height:1}.line-height-code-2{line-height:1.3}.line-height-code-3{line-height:1.4}.line-height-code-4{line-height:1.6}.line-height-code-5{line-height:1.7}.line-height-code-6{line-height:1.8}.line-height-alt-1{line-height:1}.line-height-alt-2{line-height:1.2}.line-height-alt-3{line-height:1.4}.line-height-alt-4{line-height:1.5}.line-height-alt-5{line-height:1.7}.line-height-alt-6{line-height:1.8}.margin-neg-1px{margin:-1px}.margin-neg-2px{margin:-2px}.margin-neg-05{margin:-.25rem}.margin-neg-1{margin:-.5rem}.margin-neg-105{margin:-.75rem}.margin-neg-2{margin:-1rem}.margin-neg-205{margin:-1.25rem}.margin-neg-3{margin:-1.5rem}.margin-1px{margin:1px}.margin-2px{margin:2px}.margin-05{margin:.25rem}.margin-1{margin:.5rem}.margin-105{margin:.75rem}.margin-2{margin:1rem}.margin-205{margin:1.25rem}.margin-3{margin:1.5rem}.margin-4{margin:2rem}.margin-5{margin:2.5rem}.margin-6{margin:3rem}.margin-7{margin:3.5rem}.margin-8{margin:4rem}.margin-9{margin:4.5rem}.margin-10{margin:5rem}.margin-15{margin:7.5rem}.margin-05em{margin:.5em}.margin-1em{margin:1em}.margin-105em{margin:1.5em}.margin-2em{margin:2em}.margin-0{margin:0}.margin-y-1px{margin-bottom:1px}.margin-top-1px,.margin-y-1px{margin-top:1px}.margin-bottom-1px{margin-bottom:1px}.margin-y-2px{margin-bottom:2px}.margin-top-2px,.margin-y-2px{margin-top:2px}.margin-bottom-2px{margin-bottom:2px}.margin-y-05{margin-bottom:.25rem}.margin-top-05,.margin-y-05{margin-top:.25rem}.margin-bottom-05{margin-bottom:.25rem}.margin-y-1{margin-bottom:.5rem}.margin-top-1,.margin-y-1{margin-top:.5rem}.margin-bottom-1{margin-bottom:.5rem}.margin-y-105{margin-bottom:.75rem}.margin-top-105,.margin-y-105{margin-top:.75rem}.margin-bottom-105{margin-bottom:.75rem}.margin-y-2{margin-bottom:1rem}.margin-top-2,.margin-y-2{margin-top:1rem}.margin-bottom-2{margin-bottom:1rem}.margin-y-205{margin-bottom:1.25rem}.margin-top-205,.margin-y-205{margin-top:1.25rem}.margin-bottom-205{margin-bottom:1.25rem}.margin-y-3{margin-bottom:1.5rem}.margin-top-3,.margin-y-3{margin-top:1.5rem}.margin-bottom-3{margin-bottom:1.5rem}.margin-y-neg-1px{margin-bottom:-1px;margin-top:-1px}.margin-top-neg-1px{margin-top:-1px}.margin-bottom-neg-1px{margin-bottom:-1px}.margin-y-neg-2px{margin-bottom:-2px;margin-top:-2px}.margin-top-neg-2px{margin-top:-2px}.margin-bottom-neg-2px{margin-bottom:-2px}.margin-y-neg-05{margin-bottom:-.25rem}.margin-top-neg-05,.margin-y-neg-05{margin-top:-.25rem}.margin-bottom-neg-05{margin-bottom:-.25rem}.margin-y-neg-1{margin-bottom:-.5rem}.margin-top-neg-1,.margin-y-neg-1{margin-top:-.5rem}.margin-bottom-neg-1{margin-bottom:-.5rem}.margin-y-neg-105{margin-bottom:-.75rem}.margin-top-neg-105,.margin-y-neg-105{margin-top:-.75rem}.margin-bottom-neg-105{margin-bottom:-.75rem}.margin-y-neg-2{margin-bottom:-1rem}.margin-top-neg-2,.margin-y-neg-2{margin-top:-1rem}.margin-bottom-neg-2{margin-bottom:-1rem}.margin-y-neg-205{margin-bottom:-1.25rem}.margin-top-neg-205,.margin-y-neg-205{margin-top:-1.25rem}.margin-bottom-neg-205{margin-bottom:-1.25rem}.margin-y-neg-3{margin-bottom:-1.5rem}.margin-top-neg-3,.margin-y-neg-3{margin-top:-1.5rem}.margin-bottom-neg-3{margin-bottom:-1.5rem}.margin-y-4{margin-bottom:2rem}.margin-top-4,.margin-y-4{margin-top:2rem}.margin-bottom-4{margin-bottom:2rem}.margin-y-5{margin-bottom:2.5rem}.margin-top-5,.margin-y-5{margin-top:2.5rem}.margin-bottom-5{margin-bottom:2.5rem}.margin-y-6{margin-bottom:3rem}.margin-top-6,.margin-y-6{margin-top:3rem}.margin-bottom-6{margin-bottom:3rem}.margin-y-7{margin-bottom:3.5rem}.margin-top-7,.margin-y-7{margin-top:3.5rem}.margin-bottom-7{margin-bottom:3.5rem}.margin-y-8{margin-bottom:4rem}.margin-top-8,.margin-y-8{margin-top:4rem}.margin-bottom-8{margin-bottom:4rem}.margin-y-9{margin-bottom:4.5rem}.margin-top-9,.margin-y-9{margin-top:4.5rem}.margin-bottom-9{margin-bottom:4.5rem}.margin-y-10{margin-bottom:5rem}.margin-top-10,.margin-y-10{margin-top:5rem}.margin-bottom-10{margin-bottom:5rem}.margin-y-15{margin-bottom:7.5rem}.margin-top-15,.margin-y-15{margin-top:7.5rem}.margin-bottom-15{margin-bottom:7.5rem}.margin-y-05em{margin-bottom:.5em}.margin-top-05em,.margin-y-05em{margin-top:.5em}.margin-bottom-05em{margin-bottom:.5em}.margin-y-1em{margin-bottom:1em}.margin-top-1em,.margin-y-1em{margin-top:1em}.margin-bottom-1em{margin-bottom:1em}.margin-y-105em{margin-bottom:1.5em}.margin-top-105em,.margin-y-105em{margin-top:1.5em}.margin-bottom-105em{margin-bottom:1.5em}.margin-y-2em{margin-bottom:2em}.margin-top-2em,.margin-y-2em{margin-top:2em}.margin-bottom-2em{margin-bottom:2em}.margin-y-0{margin-bottom:0}.margin-top-0,.margin-y-0{margin-top:0}.margin-bottom-0{margin-bottom:0}.margin-y-auto{margin-bottom:auto}.margin-top-auto,.margin-y-auto{margin-top:auto}.margin-bottom-auto{margin-bottom:auto}.margin-x-1px{margin-left:1px}.margin-right-1px,.margin-x-1px{margin-right:1px}.margin-left-1px{margin-left:1px}.margin-x-2px{margin-left:2px}.margin-right-2px,.margin-x-2px{margin-right:2px}.margin-left-2px{margin-left:2px}.margin-x-05{margin-left:.25rem}.margin-right-05,.margin-x-05{margin-right:.25rem}.margin-left-05{margin-left:.25rem}.margin-x-1{margin-left:.5rem}.margin-right-1,.margin-x-1{margin-right:.5rem}.margin-left-1{margin-left:.5rem}.margin-x-105{margin-left:.75rem}.margin-right-105,.margin-x-105{margin-right:.75rem}.margin-left-105{margin-left:.75rem}.margin-x-2{margin-left:1rem}.margin-right-2,.margin-x-2{margin-right:1rem}.margin-left-2{margin-left:1rem}.margin-x-205{margin-left:1.25rem}.margin-right-205,.margin-x-205{margin-right:1.25rem}.margin-left-205{margin-left:1.25rem}.margin-x-3{margin-left:1.5rem}.margin-right-3,.margin-x-3{margin-right:1.5rem}.margin-left-3{margin-left:1.5rem}.margin-x-neg-1px{margin-left:-1px;margin-right:-1px}.margin-right-neg-1px{margin-right:-1px}.margin-left-neg-1px{margin-left:-1px}.margin-x-neg-2px{margin-left:-2px;margin-right:-2px}.margin-right-neg-2px{margin-right:-2px}.margin-left-neg-2px{margin-left:-2px}.margin-x-neg-05{margin-left:-.25rem}.margin-right-neg-05,.margin-x-neg-05{margin-right:-.25rem}.margin-left-neg-05{margin-left:-.25rem}.margin-x-neg-1{margin-left:-.5rem}.margin-right-neg-1,.margin-x-neg-1{margin-right:-.5rem}.margin-left-neg-1{margin-left:-.5rem}.margin-x-neg-105{margin-left:-.75rem}.margin-right-neg-105,.margin-x-neg-105{margin-right:-.75rem}.margin-left-neg-105{margin-left:-.75rem}.margin-x-neg-2{margin-left:-1rem}.margin-right-neg-2,.margin-x-neg-2{margin-right:-1rem}.margin-left-neg-2{margin-left:-1rem}.margin-x-neg-205{margin-left:-1.25rem}.margin-right-neg-205,.margin-x-neg-205{margin-right:-1.25rem}.margin-left-neg-205{margin-left:-1.25rem}.margin-x-neg-3{margin-left:-1.5rem}.margin-right-neg-3,.margin-x-neg-3{margin-right:-1.5rem}.margin-left-neg-3{margin-left:-1.5rem}.margin-x-4{margin-left:2rem}.margin-right-4,.margin-x-4{margin-right:2rem}.margin-left-4{margin-left:2rem}.margin-x-5{margin-left:2.5rem}.margin-right-5,.margin-x-5{margin-right:2.5rem}.margin-left-5{margin-left:2.5rem}.margin-x-6{margin-left:3rem}.margin-right-6,.margin-x-6{margin-right:3rem}.margin-left-6{margin-left:3rem}.margin-x-7{margin-left:3.5rem}.margin-right-7,.margin-x-7{margin-right:3.5rem}.margin-left-7{margin-left:3.5rem}.margin-x-8{margin-left:4rem}.margin-right-8,.margin-x-8{margin-right:4rem}.margin-left-8{margin-left:4rem}.margin-x-9{margin-left:4.5rem}.margin-right-9,.margin-x-9{margin-right:4.5rem}.margin-left-9{margin-left:4.5rem}.margin-x-10{margin-left:5rem}.margin-right-10,.margin-x-10{margin-right:5rem}.margin-left-10{margin-left:5rem}.margin-x-15{margin-left:7.5rem}.margin-right-15,.margin-x-15{margin-right:7.5rem}.margin-left-15{margin-left:7.5rem}.margin-x-card{margin-left:10rem}.margin-right-card,.margin-x-card{margin-right:10rem}.margin-left-card{margin-left:10rem}.margin-x-card-lg{margin-left:15rem}.margin-right-card-lg,.margin-x-card-lg{margin-right:15rem}.margin-left-card-lg{margin-left:15rem}.margin-x-mobile{margin-left:20rem}.margin-right-mobile,.margin-x-mobile{margin-right:20rem}.margin-left-mobile{margin-left:20rem}.margin-x-05em{margin-left:.5em}.margin-right-05em,.margin-x-05em{margin-right:.5em}.margin-left-05em{margin-left:.5em}.margin-x-1em{margin-left:1em}.margin-right-1em,.margin-x-1em{margin-right:1em}.margin-left-1em{margin-left:1em}.margin-x-105em{margin-left:1.5em}.margin-right-105em,.margin-x-105em{margin-right:1.5em}.margin-left-105em{margin-left:1.5em}.margin-x-2em{margin-left:2em}.margin-right-2em,.margin-x-2em{margin-right:2em}.margin-left-2em{margin-left:2em}.margin-x-0{margin-left:0}.margin-right-0,.margin-x-0{margin-right:0}.margin-left-0{margin-left:0}.margin-x-auto{margin-left:auto}.margin-right-auto,.margin-x-auto{margin-right:auto}.margin-left-auto{margin-left:auto}.maxh-05{max-height:.25rem}.maxh-1{max-height:.5rem}.maxh-105{max-height:.75rem}.maxh-2{max-height:1rem}.maxh-205{max-height:1.25rem}.maxh-3{max-height:1.5rem}.maxh-4{max-height:2rem}.maxh-5{max-height:2.5rem}.maxh-6{max-height:3rem}.maxh-7{max-height:3.5rem}.maxh-8{max-height:4rem}.maxh-9{max-height:4.5rem}.maxh-10{max-height:5rem}.maxh-15{max-height:7.5rem}.maxh-card{max-height:10rem}.maxh-card-lg{max-height:15rem}.maxh-mobile{max-height:20rem}.maxh-mobile-lg{max-height:30rem}.maxh-tablet{max-height:40rem}.maxh-tablet-lg{max-height:55rem}.maxh-none{max-height:none}.maxh-viewport{max-height:100vh}.maxw-05{max-width:.25rem}.maxw-1{max-width:.5rem}.maxw-105{max-width:.75rem}.maxw-2{max-width:1rem}.maxw-205{max-width:1.25rem}.maxw-3{max-width:1.5rem}.maxw-4{max-width:2rem}.maxw-5{max-width:2.5rem}.maxw-6{max-width:3rem}.maxw-7{max-width:3.5rem}.maxw-8{max-width:4rem}.maxw-9{max-width:4.5rem}.maxw-10{max-width:5rem}.maxw-15{max-width:7.5rem}.maxw-card{max-width:10rem}.maxw-card-lg{max-width:15rem}.maxw-mobile{max-width:20rem}.maxw-mobile-lg{max-width:30rem}.maxw-tablet{max-width:40rem}.maxw-tablet-lg{max-width:55rem}.maxw-desktop{max-width:64rem}.maxw-desktop-lg{max-width:75rem}.maxw-widescreen{max-width:87.5rem}.maxw-none{max-width:none}.maxw-full{max-width:100%}.measure-1{max-width:44ex}.measure-2{max-width:60ex}.measure-3{max-width:64ex}.measure-4{max-width:68ex}.measure-5{max-width:72ex}.measure-6{max-width:88ex}.measure-none{max-width:none}.minh-1px{min-height:1px}.minh-2px{min-height:2px}.minh-05{min-height:.25rem}.minh-1{min-height:.5rem}.minh-105{min-height:.75rem}.minh-2{min-height:1rem}.minh-205{min-height:1.25rem}.minh-3{min-height:1.5rem}.minh-4{min-height:2rem}.minh-5{min-height:2.5rem}.minh-6{min-height:3rem}.minh-7{min-height:3.5rem}.minh-8{min-height:4rem}.minh-9{min-height:4.5rem}.minh-10{min-height:5rem}.minh-15{min-height:7.5rem}.minh-card{min-height:10rem}.minh-card-lg{min-height:15rem}.minh-mobile{min-height:20rem}.minh-mobile-lg{min-height:30rem}.minh-tablet{min-height:40rem}.minh-tablet-lg{min-height:55rem}.minh-0{min-height:0}.minh-full{min-height:100%}.minh-viewport{min-height:100vh}.minw-05{min-width:.25rem}.minw-1{min-width:.5rem}.minw-105{min-width:.75rem}.minw-2{min-width:1rem}.minw-205{min-width:1.25rem}.minw-3{min-width:1.5rem}.minw-4{min-width:2rem}.minw-5{min-width:2.5rem}.minw-6{min-width:3rem}.minw-7{min-width:3.5rem}.minw-8{min-width:4rem}.minw-9{min-width:4.5rem}.minw-10{min-width:5rem}.minw-15{min-width:7.5rem}.minw-0{min-width:0}.opacity-0{opacity:0}.opacity-10{opacity:.1}.opacity-20{opacity:.2}.opacity-30{opacity:.3}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.opacity-90{opacity:.9}.opacity-100{opacity:1}.order-first{order:-1}.order-last{order:999}.order-0,.order-initial{order:0}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.order-5{order:5}.order-6{order:6}.order-7{order:7}.order-8{order:8}.order-9{order:9}.order-10{order:10}.order-11{order:11}.outline-1px{outline:1px solid}.outline-2px{outline:2px solid}.outline-0{outline:0 solid}.outline-05{outline:.25rem solid}.outline-transparent{outline-color:transparent}.outline-black{outline-color:#000}.outline-white{outline-color:#fff}.outline-red{outline-color:#e52207}.outline-orange{outline-color:#e66f0e}.outline-gold{outline-color:#ffbe2e}.outline-yellow{outline-color:#fee685}.outline-green{outline-color:#538200}.outline-mint{outline-color:#04c585}.outline-cyan{outline-color:#009ec1}.outline-blue{outline-color:#0076d6}.outline-indigo{outline-color:#676cc8}.outline-violet{outline-color:#8168b3}.outline-magenta{outline-color:#d72d79}.outline-gray-5{outline-color:#f0f0f0}.outline-gray-10{outline-color:#e6e6e6}.outline-gray-30{outline-color:#adadad}.outline-gray-50{outline-color:#757575}.outline-gray-70{outline-color:#454545}.outline-gray-90{outline-color:#1b1b1b}.outline-base-lightest{outline-color:#f0f0f0}.outline-base-lighter{outline-color:#dfe1e2}.outline-base-light{outline-color:#a9aeb1}.outline-base{outline-color:#71767a}.outline-base-dark{outline-color:#565c65}.outline-base-darker{outline-color:#3d4551}.outline-base-darkest,.outline-ink{outline-color:#1b1b1b}.outline-primary-lighter{outline-color:#d9e8f6}.outline-primary-light{outline-color:#73b3e7}.outline-primary{outline-color:#005ea2}.outline-primary-vivid{outline-color:#0050d8}.outline-primary-dark{outline-color:#1a4480}.outline-primary-darker{outline-color:#162e51}.outline-secondary-lighter{outline-color:#f3e1e4}.outline-secondary-light{outline-color:#f2938c}.outline-secondary{outline-color:#d83933}.outline-secondary-vivid{outline-color:#e41d3d}.outline-secondary-dark{outline-color:#b50909}.outline-secondary-darker{outline-color:#8b0a03}.outline-accent-warm-darker{outline-color:#775540}.outline-accent-warm-dark{outline-color:#c05600}.outline-accent-warm{outline-color:#fa9441}.outline-accent-warm-light{outline-color:#ffbc78}.outline-accent-warm-lighter{outline-color:#f2e4d4}.outline-accent-cool-darker{outline-color:#07648d}.outline-accent-cool-dark{outline-color:#28a0cb}.outline-accent-cool{outline-color:#00bde3}.outline-accent-cool-light{outline-color:#97d4ea}.outline-accent-cool-lighter{outline-color:#e1f3f8}.overflow-hidden{overflow:hidden}.overflow-y-hidden{overflow-y:hidden}.overflow-x-hidden{overflow-x:hidden}.overflow-scroll{overflow:scroll}.overflow-y-scroll{overflow-y:scroll}.overflow-x-scroll{overflow-x:scroll}.overflow-auto{overflow:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-auto{overflow-x:auto}.overflow-visible{overflow:visible}.overflow-y-visible{overflow-y:visible}.overflow-x-visible{overflow-x:visible}.padding-1px{padding:1px}.padding-y-1px{padding-bottom:1px;padding-top:1px}.padding-x-1px{padding-left:1px;padding-right:1px}.padding-top-1px{padding-top:1px}.padding-right-1px{padding-right:1px}.padding-bottom-1px{padding-bottom:1px}.padding-left-1px{padding-left:1px}.padding-2px{padding:2px}.padding-y-2px{padding-bottom:2px;padding-top:2px}.padding-x-2px{padding-left:2px;padding-right:2px}.padding-top-2px{padding-top:2px}.padding-right-2px{padding-right:2px}.padding-bottom-2px{padding-bottom:2px}.padding-left-2px{padding-left:2px}.padding-05{padding:.25rem}.padding-y-05{padding-bottom:.25rem;padding-top:.25rem}.padding-x-05{padding-left:.25rem;padding-right:.25rem}.padding-top-05{padding-top:.25rem}.padding-right-05{padding-right:.25rem}.padding-bottom-05{padding-bottom:.25rem}.padding-left-05{padding-left:.25rem}.padding-1{padding:.5rem}.padding-y-1{padding-bottom:.5rem;padding-top:.5rem}.padding-x-1{padding-left:.5rem;padding-right:.5rem}.padding-top-1{padding-top:.5rem}.padding-right-1{padding-right:.5rem}.padding-bottom-1{padding-bottom:.5rem}.padding-left-1{padding-left:.5rem}.padding-105{padding:.75rem}.padding-y-105{padding-bottom:.75rem;padding-top:.75rem}.padding-x-105{padding-left:.75rem;padding-right:.75rem}.padding-top-105{padding-top:.75rem}.padding-right-105{padding-right:.75rem}.padding-bottom-105{padding-bottom:.75rem}.padding-left-105{padding-left:.75rem}.padding-2{padding:1rem}.padding-y-2{padding-bottom:1rem;padding-top:1rem}.padding-x-2{padding-left:1rem;padding-right:1rem}.padding-top-2{padding-top:1rem}.padding-right-2{padding-right:1rem}.padding-bottom-2{padding-bottom:1rem}.padding-left-2{padding-left:1rem}.padding-205{padding:1.25rem}.padding-y-205{padding-bottom:1.25rem;padding-top:1.25rem}.padding-x-205{padding-left:1.25rem;padding-right:1.25rem}.padding-top-205{padding-top:1.25rem}.padding-right-205{padding-right:1.25rem}.padding-bottom-205{padding-bottom:1.25rem}.padding-left-205{padding-left:1.25rem}.padding-3{padding:1.5rem}.padding-y-3{padding-bottom:1.5rem;padding-top:1.5rem}.padding-x-3{padding-left:1.5rem;padding-right:1.5rem}.padding-top-3{padding-top:1.5rem}.padding-right-3{padding-right:1.5rem}.padding-bottom-3{padding-bottom:1.5rem}.padding-left-3{padding-left:1.5rem}.padding-4{padding:2rem}.padding-y-4{padding-bottom:2rem;padding-top:2rem}.padding-x-4{padding-left:2rem;padding-right:2rem}.padding-top-4{padding-top:2rem}.padding-right-4{padding-right:2rem}.padding-bottom-4{padding-bottom:2rem}.padding-left-4{padding-left:2rem}.padding-5{padding:2.5rem}.padding-y-5{padding-bottom:2.5rem;padding-top:2.5rem}.padding-x-5{padding-left:2.5rem;padding-right:2.5rem}.padding-top-5{padding-top:2.5rem}.padding-right-5{padding-right:2.5rem}.padding-bottom-5{padding-bottom:2.5rem}.padding-left-5{padding-left:2.5rem}.padding-6{padding:3rem}.padding-y-6{padding-bottom:3rem;padding-top:3rem}.padding-x-6{padding-left:3rem;padding-right:3rem}.padding-top-6{padding-top:3rem}.padding-right-6{padding-right:3rem}.padding-bottom-6{padding-bottom:3rem}.padding-left-6{padding-left:3rem}.padding-7{padding:3.5rem}.padding-y-7{padding-bottom:3.5rem;padding-top:3.5rem}.padding-x-7{padding-left:3.5rem;padding-right:3.5rem}.padding-top-7{padding-top:3.5rem}.padding-right-7{padding-right:3.5rem}.padding-bottom-7{padding-bottom:3.5rem}.padding-left-7{padding-left:3.5rem}.padding-8{padding:4rem}.padding-y-8{padding-bottom:4rem;padding-top:4rem}.padding-x-8{padding-left:4rem;padding-right:4rem}.padding-top-8{padding-top:4rem}.padding-right-8{padding-right:4rem}.padding-bottom-8{padding-bottom:4rem}.padding-left-8{padding-left:4rem}.padding-9{padding:4.5rem}.padding-y-9{padding-bottom:4.5rem;padding-top:4.5rem}.padding-x-9{padding-left:4.5rem;padding-right:4.5rem}.padding-top-9{padding-top:4.5rem}.padding-right-9{padding-right:4.5rem}.padding-bottom-9{padding-bottom:4.5rem}.padding-left-9{padding-left:4.5rem}.padding-10{padding:5rem}.padding-y-10{padding-bottom:5rem;padding-top:5rem}.padding-x-10{padding-left:5rem;padding-right:5rem}.padding-top-10{padding-top:5rem}.padding-right-10{padding-right:5rem}.padding-bottom-10{padding-bottom:5rem}.padding-left-10{padding-left:5rem}.padding-15{padding:7.5rem}.padding-y-15{padding-bottom:7.5rem;padding-top:7.5rem}.padding-x-15{padding-left:7.5rem;padding-right:7.5rem}.padding-top-15{padding-top:7.5rem}.padding-right-15{padding-right:7.5rem}.padding-bottom-15{padding-bottom:7.5rem}.padding-left-15{padding-left:7.5rem}.padding-0{padding:0}.padding-y-0{padding-bottom:0;padding-top:0}.padding-x-0{padding-left:0;padding-right:0}.padding-top-0{padding-top:0}.padding-right-0{padding-right:0}.padding-bottom-0{padding-bottom:0}.padding-left-0{padding-left:0}.pin-all{bottom:0;top:0}.pin-all,.pin-x{left:0;position:absolute;right:0}.pin-y{top:0}.pin-bottom,.pin-y{bottom:0;position:absolute}.pin-left{left:0;position:absolute}.pin-right{position:absolute;right:0}.pin-top{position:absolute;top:0}.pin-none{bottom:auto;left:auto;position:static;right:auto;top:auto}.position-absolute{position:absolute}.position-fixed{position:fixed}.position-relative{position:relative}.position-static{position:static}.position-sticky{position:sticky}.right-1px{right:1px}.right-2px{right:2px}.right-05{right:.25rem}.right-1{right:.5rem}.right-105{right:.75rem}.right-2{right:1rem}.right-205{right:1.25rem}.right-3{right:1.5rem}.right-neg-1px{right:-1px}.right-neg-2px{right:-2px}.right-neg-05{right:-.25rem}.right-neg-1{right:-.5rem}.right-neg-105{right:-.75rem}.right-neg-2{right:-1rem}.right-neg-205{right:-1.25rem}.right-neg-3{right:-1.5rem}.right-0{right:0}.right-auto{right:auto}.square-1px{height:1px;width:1px}.square-2px{height:2px;width:2px}.square-05{height:.25rem;width:.25rem}.square-1{height:.5rem;width:.5rem}.square-105{height:.75rem;width:.75rem}.square-2{height:1rem;width:1rem}.square-205{height:1.25rem;width:1.25rem}.square-3{height:1.5rem;width:1.5rem}.square-4{height:2rem;width:2rem}.square-5{height:2.5rem;width:2.5rem}.square-6{height:3rem;width:3rem}.square-7{height:3.5rem;width:3.5rem}.square-8{height:4rem;width:4rem}.square-9{height:4.5rem;width:4.5rem}.square-10{height:5rem;width:5rem}.square-15{height:7.5rem;width:7.5rem}.square-card{height:10rem;width:10rem}.square-card-lg{height:15rem;width:15rem}.square-mobile{height:20rem;width:20rem}.text-center{text-align:center}.text-left{text-align:left}.text-justify{text-align:justify}.text-right{text-align:right}.hover\:text-strike:hover,.text-strike{text-decoration:line-through}.hover\:text-underline:hover,.text-underline{text-decoration:underline}.hover\:text-no-strike:hover,.hover\:text-no-underline:hover,.text-no-strike,.text-no-underline{text-decoration:none}.hover\:underline-red:hover,.underline-red{-webkit-text-decoration-color:#e52207;text-decoration-color:#e52207}.hover\:underline-orange:hover,.underline-orange{-webkit-text-decoration-color:#e66f0e;text-decoration-color:#e66f0e}.hover\:underline-gold:hover,.underline-gold{-webkit-text-decoration-color:#ffbe2e;text-decoration-color:#ffbe2e}.hover\:underline-yellow:hover,.underline-yellow{-webkit-text-decoration-color:#fee685;text-decoration-color:#fee685}.hover\:underline-green:hover,.underline-green{-webkit-text-decoration-color:#538200;text-decoration-color:#538200}.hover\:underline-mint:hover,.underline-mint{-webkit-text-decoration-color:#04c585;text-decoration-color:#04c585}.hover\:underline-cyan:hover,.underline-cyan{-webkit-text-decoration-color:#009ec1;text-decoration-color:#009ec1}.hover\:underline-blue:hover,.underline-blue{-webkit-text-decoration-color:#0076d6;text-decoration-color:#0076d6}.hover\:underline-indigo:hover,.underline-indigo{-webkit-text-decoration-color:#676cc8;text-decoration-color:#676cc8}.hover\:underline-violet:hover,.underline-violet{-webkit-text-decoration-color:#8168b3;text-decoration-color:#8168b3}.hover\:underline-magenta:hover,.underline-magenta{-webkit-text-decoration-color:#d72d79;text-decoration-color:#d72d79}.hover\:underline-gray-5:hover,.underline-gray-5{-webkit-text-decoration-color:#f0f0f0;text-decoration-color:#f0f0f0}.hover\:underline-gray-10:hover,.underline-gray-10{-webkit-text-decoration-color:#e6e6e6;text-decoration-color:#e6e6e6}.hover\:underline-gray-30:hover,.underline-gray-30{-webkit-text-decoration-color:#adadad;text-decoration-color:#adadad}.hover\:underline-gray-50:hover,.underline-gray-50{-webkit-text-decoration-color:#757575;text-decoration-color:#757575}.hover\:underline-gray-70:hover,.underline-gray-70{-webkit-text-decoration-color:#454545;text-decoration-color:#454545}.hover\:underline-gray-90:hover,.underline-gray-90{-webkit-text-decoration-color:#1b1b1b;text-decoration-color:#1b1b1b}.hover\:underline-base-lightest:hover,.underline-base-lightest{-webkit-text-decoration-color:#f0f0f0;text-decoration-color:#f0f0f0}.hover\:underline-base-lighter:hover,.underline-base-lighter{-webkit-text-decoration-color:#dfe1e2;text-decoration-color:#dfe1e2}.hover\:underline-base-light:hover,.underline-base-light{-webkit-text-decoration-color:#a9aeb1;text-decoration-color:#a9aeb1}.hover\:underline-base:hover,.underline-base{-webkit-text-decoration-color:#71767a;text-decoration-color:#71767a}.hover\:underline-base-dark:hover,.underline-base-dark{-webkit-text-decoration-color:#565c65;text-decoration-color:#565c65}.hover\:underline-base-darker:hover,.underline-base-darker{-webkit-text-decoration-color:#3d4551;text-decoration-color:#3d4551}.hover\:underline-base-darkest:hover,.hover\:underline-ink:hover,.underline-base-darkest,.underline-ink{-webkit-text-decoration-color:#1b1b1b;text-decoration-color:#1b1b1b}.hover\:underline-primary-lighter:hover,.underline-primary-lighter{-webkit-text-decoration-color:#d9e8f6;text-decoration-color:#d9e8f6}.hover\:underline-primary-light:hover,.underline-primary-light{-webkit-text-decoration-color:#73b3e7;text-decoration-color:#73b3e7}.hover\:underline-primary:hover,.underline-primary{-webkit-text-decoration-color:#005ea2;text-decoration-color:#005ea2}.hover\:underline-primary-vivid:hover,.underline-primary-vivid{-webkit-text-decoration-color:#0050d8;text-decoration-color:#0050d8}.hover\:underline-primary-dark:hover,.underline-primary-dark{-webkit-text-decoration-color:#1a4480;text-decoration-color:#1a4480}.hover\:underline-primary-darker:hover,.underline-primary-darker{-webkit-text-decoration-color:#162e51;text-decoration-color:#162e51}.hover\:underline-secondary-lighter:hover,.underline-secondary-lighter{-webkit-text-decoration-color:#f3e1e4;text-decoration-color:#f3e1e4}.hover\:underline-secondary-light:hover,.underline-secondary-light{-webkit-text-decoration-color:#f2938c;text-decoration-color:#f2938c}.hover\:underline-secondary:hover,.underline-secondary{-webkit-text-decoration-color:#d83933;text-decoration-color:#d83933}.hover\:underline-secondary-vivid:hover,.underline-secondary-vivid{-webkit-text-decoration-color:#e41d3d;text-decoration-color:#e41d3d}.hover\:underline-secondary-dark:hover,.underline-secondary-dark{-webkit-text-decoration-color:#b50909;text-decoration-color:#b50909}.hover\:underline-secondary-darker:hover,.underline-secondary-darker{-webkit-text-decoration-color:#8b0a03;text-decoration-color:#8b0a03}.hover\:underline-accent-warm-darker:hover,.underline-accent-warm-darker{-webkit-text-decoration-color:#775540;text-decoration-color:#775540}.hover\:underline-accent-warm-dark:hover,.underline-accent-warm-dark{-webkit-text-decoration-color:#c05600;text-decoration-color:#c05600}.hover\:underline-accent-warm:hover,.underline-accent-warm{-webkit-text-decoration-color:#fa9441;text-decoration-color:#fa9441}.hover\:underline-accent-warm-light:hover,.underline-accent-warm-light{-webkit-text-decoration-color:#ffbc78;text-decoration-color:#ffbc78}.hover\:underline-accent-warm-lighter:hover,.underline-accent-warm-lighter{-webkit-text-decoration-color:#f2e4d4;text-decoration-color:#f2e4d4}.hover\:underline-accent-cool-darker:hover,.underline-accent-cool-darker{-webkit-text-decoration-color:#07648d;text-decoration-color:#07648d}.hover\:underline-accent-cool-dark:hover,.underline-accent-cool-dark{-webkit-text-decoration-color:#28a0cb;text-decoration-color:#28a0cb}.hover\:underline-accent-cool:hover,.underline-accent-cool{-webkit-text-decoration-color:#00bde3;text-decoration-color:#00bde3}.hover\:underline-accent-cool-light:hover,.underline-accent-cool-light{-webkit-text-decoration-color:#97d4ea;text-decoration-color:#97d4ea}.hover\:underline-accent-cool-lighter:hover,.underline-accent-cool-lighter{-webkit-text-decoration-color:#e1f3f8;text-decoration-color:#e1f3f8}.text-indent-0{text-indent:0}.text-indent-05{text-indent:.25rem}.text-indent-1{text-indent:.5rem}.text-indent-105{text-indent:.75rem}.text-indent-2{text-indent:1rem}.text-indent-205{text-indent:1.25rem}.text-indent-3{text-indent:1.5rem}.text-indent-neg-05{text-indent:-.25rem}.text-indent-neg-1{text-indent:-.5rem}.text-indent-neg-105{text-indent:-.75rem}.text-indent-neg-2{text-indent:-1rem}.text-indent-neg-205{text-indent:-1.25rem}.text-indent-neg-3{text-indent:-1.5rem}.text-indent-4{text-indent:2rem}.text-indent-5{text-indent:2.5rem}.text-indent-6{text-indent:3rem}.text-indent-7{text-indent:3.5rem}.text-indent-8{text-indent:4rem}.text-indent-9{text-indent:4.5rem}.text-indent-10{text-indent:5rem}.text-indent-15{text-indent:7.5rem}.text-indent-neg-4{text-indent:-2rem}.text-indent-neg-5{text-indent:-2.5rem}.text-indent-neg-6{text-indent:-3rem}.text-indent-neg-7{text-indent:-3.5rem}.text-indent-neg-8{text-indent:-4rem}.text-indent-neg-9{text-indent:-4.5rem}.text-indent-neg-10{text-indent:-5rem}.text-indent-neg-15{text-indent:-7.5rem}.text-uppercase{text-transform:uppercase}.text-no-uppercase{text-transform:none}.text-lowercase{text-transform:lowercase}.text-no-lowercase{text-transform:none}.top-1px{top:1px}.top-2px{top:2px}.top-05{top:.25rem}.top-1{top:.5rem}.top-105{top:.75rem}.top-2{top:1rem}.top-205{top:1.25rem}.top-3{top:1.5rem}.top-neg-1px{top:-1px}.top-neg-2px{top:-2px}.top-neg-05{top:-.25rem}.top-neg-1{top:-.5rem}.top-neg-105{top:-.75rem}.top-neg-2{top:-1rem}.top-neg-205{top:-1.25rem}.top-neg-3{top:-1.5rem}.top-0{top:0}.top-auto{top:auto}.text-baseline{vertical-align:baseline}.text-bottom{vertical-align:bottom}.text-middle{vertical-align:middle}.text-sub{vertical-align:sub}.text-super{vertical-align:super}.text-tbottom{vertical-align:text-bottom}.text-ttop{vertical-align:text-top}.text-top{vertical-align:top}.text-pre{white-space:pre}.text-pre-line{white-space:pre-line}.text-pre-wrap{white-space:pre-wrap}.text-wrap{white-space:normal}.text-no-wrap{white-space:nowrap}.width-1px{width:1px}.width-2px{width:2px}.width-05{width:.25rem}.width-1{width:.5rem}.width-105{width:.75rem}.width-2{width:1rem}.width-205{width:1.25rem}.width-3{width:1.5rem}.width-4{width:2rem}.width-5{width:2.5rem}.width-6{width:3rem}.width-7{width:3.5rem}.width-8{width:4rem}.width-9{width:4.5rem}.width-10{width:5rem}.width-15{width:7.5rem}.width-card{width:10rem}.width-card-lg{width:15rem}.width-mobile{width:20rem}.width-mobile-lg{width:30rem}.width-tablet{width:40rem}.width-tablet-lg{width:55rem}.width-desktop{width:64rem}.width-desktop-lg{width:75rem}.width-widescreen{width:87.5rem}.width-0{width:0}.width-full{width:100%}.width-auto{width:auto}.z-auto{z-index:auto}.z-bottom{z-index:-100}.z-top{z-index:99999}.z-0{z-index:0}.z-100{z-index:100}.z-200{z-index:200}.z-300{z-index:300}.z-400{z-index:400}.z-500{z-index:500}@media (min-width:30em){.mobile-lg\:border-1px,.mobile-lg\:hover\:border-1px:hover{border:1px solid}.mobile-lg\:border-y-1px,.mobile-lg\:hover\:border-y-1px:hover{border-bottom:1px solid;border-top:1px solid}.mobile-lg\:border-x-1px,.mobile-lg\:hover\:border-x-1px:hover{border-left:1px solid;border-right:1px solid}.mobile-lg\:border-top-1px,.mobile-lg\:hover\:border-top-1px:hover{border-top:1px solid}.mobile-lg\:border-right-1px,.mobile-lg\:hover\:border-right-1px:hover{border-right:1px solid}.mobile-lg\:border-bottom-1px,.mobile-lg\:hover\:border-bottom-1px:hover{border-bottom:1px solid}.mobile-lg\:border-left-1px,.mobile-lg\:hover\:border-left-1px:hover{border-left:1px solid}.mobile-lg\:border-2px,.mobile-lg\:hover\:border-2px:hover{border:2px solid}.mobile-lg\:border-y-2px,.mobile-lg\:hover\:border-y-2px:hover{border-bottom:2px solid;border-top:2px solid}.mobile-lg\:border-x-2px,.mobile-lg\:hover\:border-x-2px:hover{border-left:2px solid;border-right:2px solid}.mobile-lg\:border-top-2px,.mobile-lg\:hover\:border-top-2px:hover{border-top:2px solid}.mobile-lg\:border-right-2px,.mobile-lg\:hover\:border-right-2px:hover{border-right:2px solid}.mobile-lg\:border-bottom-2px,.mobile-lg\:hover\:border-bottom-2px:hover{border-bottom:2px solid}.mobile-lg\:border-left-2px,.mobile-lg\:hover\:border-left-2px:hover{border-left:2px solid}.mobile-lg\:border-05,.mobile-lg\:hover\:border-05:hover{border:.25rem solid}.mobile-lg\:border-y-05,.mobile-lg\:hover\:border-y-05:hover{border-bottom:.25rem solid;border-top:.25rem solid}.mobile-lg\:border-x-05,.mobile-lg\:hover\:border-x-05:hover{border-left:.25rem solid;border-right:.25rem solid}.mobile-lg\:border-top-05,.mobile-lg\:hover\:border-top-05:hover{border-top:.25rem solid}.mobile-lg\:border-right-05,.mobile-lg\:hover\:border-right-05:hover{border-right:.25rem solid}.mobile-lg\:border-bottom-05,.mobile-lg\:hover\:border-bottom-05:hover{border-bottom:.25rem solid}.mobile-lg\:border-left-05,.mobile-lg\:hover\:border-left-05:hover{border-left:.25rem solid}.mobile-lg\:border-1,.mobile-lg\:hover\:border-1:hover{border:.5rem solid}.mobile-lg\:border-y-1,.mobile-lg\:hover\:border-y-1:hover{border-bottom:.5rem solid;border-top:.5rem solid}.mobile-lg\:border-x-1,.mobile-lg\:hover\:border-x-1:hover{border-left:.5rem solid;border-right:.5rem solid}.mobile-lg\:border-top-1,.mobile-lg\:hover\:border-top-1:hover{border-top:.5rem solid}.mobile-lg\:border-right-1,.mobile-lg\:hover\:border-right-1:hover{border-right:.5rem solid}.mobile-lg\:border-bottom-1,.mobile-lg\:hover\:border-bottom-1:hover{border-bottom:.5rem solid}.mobile-lg\:border-left-1,.mobile-lg\:hover\:border-left-1:hover{border-left:.5rem solid}.mobile-lg\:border-105,.mobile-lg\:hover\:border-105:hover{border:.75rem solid}.mobile-lg\:border-y-105,.mobile-lg\:hover\:border-y-105:hover{border-bottom:.75rem solid;border-top:.75rem solid}.mobile-lg\:border-x-105,.mobile-lg\:hover\:border-x-105:hover{border-left:.75rem solid;border-right:.75rem solid}.mobile-lg\:border-top-105,.mobile-lg\:hover\:border-top-105:hover{border-top:.75rem solid}.mobile-lg\:border-right-105,.mobile-lg\:hover\:border-right-105:hover{border-right:.75rem solid}.mobile-lg\:border-bottom-105,.mobile-lg\:hover\:border-bottom-105:hover{border-bottom:.75rem solid}.mobile-lg\:border-left-105,.mobile-lg\:hover\:border-left-105:hover{border-left:.75rem solid}.mobile-lg\:border-2,.mobile-lg\:hover\:border-2:hover{border:1rem solid}.mobile-lg\:border-y-2,.mobile-lg\:hover\:border-y-2:hover{border-bottom:1rem solid;border-top:1rem solid}.mobile-lg\:border-x-2,.mobile-lg\:hover\:border-x-2:hover{border-left:1rem solid;border-right:1rem solid}.mobile-lg\:border-top-2,.mobile-lg\:hover\:border-top-2:hover{border-top:1rem solid}.mobile-lg\:border-right-2,.mobile-lg\:hover\:border-right-2:hover{border-right:1rem solid}.mobile-lg\:border-bottom-2,.mobile-lg\:hover\:border-bottom-2:hover{border-bottom:1rem solid}.mobile-lg\:border-left-2,.mobile-lg\:hover\:border-left-2:hover{border-left:1rem solid}.mobile-lg\:border-205,.mobile-lg\:hover\:border-205:hover{border:1.25rem solid}.mobile-lg\:border-y-205,.mobile-lg\:hover\:border-y-205:hover{border-bottom:1.25rem solid;border-top:1.25rem solid}.mobile-lg\:border-x-205,.mobile-lg\:hover\:border-x-205:hover{border-left:1.25rem solid;border-right:1.25rem solid}.mobile-lg\:border-top-205,.mobile-lg\:hover\:border-top-205:hover{border-top:1.25rem solid}.mobile-lg\:border-right-205,.mobile-lg\:hover\:border-right-205:hover{border-right:1.25rem solid}.mobile-lg\:border-bottom-205,.mobile-lg\:hover\:border-bottom-205:hover{border-bottom:1.25rem solid}.mobile-lg\:border-left-205,.mobile-lg\:hover\:border-left-205:hover{border-left:1.25rem solid}.mobile-lg\:border-3,.mobile-lg\:hover\:border-3:hover{border:1.5rem solid}.mobile-lg\:border-y-3,.mobile-lg\:hover\:border-y-3:hover{border-bottom:1.5rem solid;border-top:1.5rem solid}.mobile-lg\:border-x-3,.mobile-lg\:hover\:border-x-3:hover{border-left:1.5rem solid;border-right:1.5rem solid}.mobile-lg\:border-top-3,.mobile-lg\:hover\:border-top-3:hover{border-top:1.5rem solid}.mobile-lg\:border-right-3,.mobile-lg\:hover\:border-right-3:hover{border-right:1.5rem solid}.mobile-lg\:border-bottom-3,.mobile-lg\:hover\:border-bottom-3:hover{border-bottom:1.5rem solid}.mobile-lg\:border-left-3,.mobile-lg\:hover\:border-left-3:hover{border-left:1.5rem solid}.mobile-lg\:border-0,.mobile-lg\:hover\:border-0:hover{border:0 solid}.mobile-lg\:border-y-0,.mobile-lg\:hover\:border-y-0:hover{border-bottom:0 solid;border-top:0 solid}.mobile-lg\:border-x-0,.mobile-lg\:hover\:border-x-0:hover{border-left:0 solid;border-right:0 solid}.mobile-lg\:border-top-0,.mobile-lg\:hover\:border-top-0:hover{border-top:0 solid}.mobile-lg\:border-right-0,.mobile-lg\:hover\:border-right-0:hover{border-right:0 solid}.mobile-lg\:border-bottom-0,.mobile-lg\:hover\:border-bottom-0:hover{border-bottom:0 solid}.mobile-lg\:border-left-0,.mobile-lg\:hover\:border-left-0:hover{border-left:0 solid}.mobile-lg\:border,.mobile-lg\:hover\:border:hover{border:1px solid}.mobile-lg\:border-y,.mobile-lg\:hover\:border-y:hover{border-bottom:1px solid;border-top:1px solid}.mobile-lg\:border-x,.mobile-lg\:hover\:border-x:hover{border-left:1px solid;border-right:1px solid}.mobile-lg\:border-top,.mobile-lg\:hover\:border-top:hover{border-top:1px solid}.mobile-lg\:border-right,.mobile-lg\:hover\:border-right:hover{border-right:1px solid}.mobile-lg\:border-bottom,.mobile-lg\:hover\:border-bottom:hover{border-bottom:1px solid}.mobile-lg\:border-left,.mobile-lg\:hover\:border-left:hover{border-left:1px solid}.mobile-lg\:border-transparent,.mobile-lg\:hover\:border-transparent:hover{border-color:transparent}.mobile-lg\:border-black,.mobile-lg\:hover\:border-black:hover{border-color:#000}.mobile-lg\:border-white,.mobile-lg\:hover\:border-white:hover{border-color:#fff}.mobile-lg\:border-red,.mobile-lg\:hover\:border-red:hover{border-color:#e52207}.mobile-lg\:border-orange,.mobile-lg\:hover\:border-orange:hover{border-color:#e66f0e}.mobile-lg\:border-gold,.mobile-lg\:hover\:border-gold:hover{border-color:#ffbe2e}.mobile-lg\:border-yellow,.mobile-lg\:hover\:border-yellow:hover{border-color:#fee685}.mobile-lg\:border-green,.mobile-lg\:hover\:border-green:hover{border-color:#538200}.mobile-lg\:border-mint,.mobile-lg\:hover\:border-mint:hover{border-color:#04c585}.mobile-lg\:border-cyan,.mobile-lg\:hover\:border-cyan:hover{border-color:#009ec1}.mobile-lg\:border-blue,.mobile-lg\:hover\:border-blue:hover{border-color:#0076d6}.mobile-lg\:border-indigo,.mobile-lg\:hover\:border-indigo:hover{border-color:#676cc8}.mobile-lg\:border-violet,.mobile-lg\:hover\:border-violet:hover{border-color:#8168b3}.mobile-lg\:border-magenta,.mobile-lg\:hover\:border-magenta:hover{border-color:#d72d79}.mobile-lg\:border-gray-5,.mobile-lg\:hover\:border-gray-5:hover{border-color:#f0f0f0}.mobile-lg\:border-gray-10,.mobile-lg\:hover\:border-gray-10:hover{border-color:#e6e6e6}.mobile-lg\:border-gray-30,.mobile-lg\:hover\:border-gray-30:hover{border-color:#adadad}.mobile-lg\:border-gray-50,.mobile-lg\:hover\:border-gray-50:hover{border-color:#757575}.mobile-lg\:border-gray-70,.mobile-lg\:hover\:border-gray-70:hover{border-color:#454545}.mobile-lg\:border-gray-90,.mobile-lg\:hover\:border-gray-90:hover{border-color:#1b1b1b}.mobile-lg\:border-base-lightest,.mobile-lg\:hover\:border-base-lightest:hover{border-color:#f0f0f0}.mobile-lg\:border-base-lighter,.mobile-lg\:hover\:border-base-lighter:hover{border-color:#dfe1e2}.mobile-lg\:border-base-light,.mobile-lg\:hover\:border-base-light:hover{border-color:#a9aeb1}.mobile-lg\:border-base,.mobile-lg\:hover\:border-base:hover{border-color:#71767a}.mobile-lg\:border-base-dark,.mobile-lg\:hover\:border-base-dark:hover{border-color:#565c65}.mobile-lg\:border-base-darker,.mobile-lg\:hover\:border-base-darker:hover{border-color:#3d4551}.mobile-lg\:border-base-darkest,.mobile-lg\:border-ink,.mobile-lg\:hover\:border-base-darkest:hover,.mobile-lg\:hover\:border-ink:hover{border-color:#1b1b1b}.mobile-lg\:border-primary-lighter,.mobile-lg\:hover\:border-primary-lighter:hover{border-color:#d9e8f6}.mobile-lg\:border-primary-light,.mobile-lg\:hover\:border-primary-light:hover{border-color:#73b3e7}.mobile-lg\:border-primary,.mobile-lg\:hover\:border-primary:hover{border-color:#005ea2}.mobile-lg\:border-primary-vivid,.mobile-lg\:hover\:border-primary-vivid:hover{border-color:#0050d8}.mobile-lg\:border-primary-dark,.mobile-lg\:hover\:border-primary-dark:hover{border-color:#1a4480}.mobile-lg\:border-primary-darker,.mobile-lg\:hover\:border-primary-darker:hover{border-color:#162e51}.mobile-lg\:border-secondary-lighter,.mobile-lg\:hover\:border-secondary-lighter:hover{border-color:#f3e1e4}.mobile-lg\:border-secondary-light,.mobile-lg\:hover\:border-secondary-light:hover{border-color:#f2938c}.mobile-lg\:border-secondary,.mobile-lg\:hover\:border-secondary:hover{border-color:#d83933}.mobile-lg\:border-secondary-vivid,.mobile-lg\:hover\:border-secondary-vivid:hover{border-color:#e41d3d}.mobile-lg\:border-secondary-dark,.mobile-lg\:hover\:border-secondary-dark:hover{border-color:#b50909}.mobile-lg\:border-secondary-darker,.mobile-lg\:hover\:border-secondary-darker:hover{border-color:#8b0a03}.mobile-lg\:border-accent-warm-darker,.mobile-lg\:hover\:border-accent-warm-darker:hover{border-color:#775540}.mobile-lg\:border-accent-warm-dark,.mobile-lg\:hover\:border-accent-warm-dark:hover{border-color:#c05600}.mobile-lg\:border-accent-warm,.mobile-lg\:hover\:border-accent-warm:hover{border-color:#fa9441}.mobile-lg\:border-accent-warm-light,.mobile-lg\:hover\:border-accent-warm-light:hover{border-color:#ffbc78}.mobile-lg\:border-accent-warm-lighter,.mobile-lg\:hover\:border-accent-warm-lighter:hover{border-color:#f2e4d4}.mobile-lg\:border-accent-cool-darker,.mobile-lg\:hover\:border-accent-cool-darker:hover{border-color:#07648d}.mobile-lg\:border-accent-cool-dark,.mobile-lg\:hover\:border-accent-cool-dark:hover{border-color:#28a0cb}.mobile-lg\:border-accent-cool,.mobile-lg\:hover\:border-accent-cool:hover{border-color:#00bde3}.mobile-lg\:border-accent-cool-light,.mobile-lg\:hover\:border-accent-cool-light:hover{border-color:#97d4ea}.mobile-lg\:border-accent-cool-lighter,.mobile-lg\:hover\:border-accent-cool-lighter:hover{border-color:#e1f3f8}.mobile-lg\:radius-0{border-radius:0}.mobile-lg\:radius-top-0{border-top-left-radius:0;border-top-right-radius:0}.mobile-lg\:radius-right-0{border-bottom-right-radius:0;border-top-right-radius:0}.mobile-lg\:radius-bottom-0{border-bottom-left-radius:0;border-bottom-right-radius:0}.mobile-lg\:radius-left-0{border-bottom-left-radius:0;border-top-left-radius:0}.mobile-lg\:radius-none{border-radius:0}.mobile-lg\:radius-top-none{border-top-left-radius:0;border-top-right-radius:0}.mobile-lg\:radius-right-none{border-bottom-right-radius:0;border-top-right-radius:0}.mobile-lg\:radius-bottom-none{border-bottom-left-radius:0;border-bottom-right-radius:0}.mobile-lg\:radius-left-none{border-bottom-left-radius:0;border-top-left-radius:0}.mobile-lg\:radius-sm{border-radius:2px}.mobile-lg\:radius-top-sm{border-top-left-radius:2px;border-top-right-radius:2px}.mobile-lg\:radius-right-sm{border-bottom-right-radius:2px;border-top-right-radius:2px}.mobile-lg\:radius-bottom-sm{border-bottom-left-radius:2px;border-bottom-right-radius:2px}.mobile-lg\:radius-left-sm{border-bottom-left-radius:2px;border-top-left-radius:2px}.mobile-lg\:radius-md{border-radius:.25rem}.mobile-lg\:radius-top-md{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.mobile-lg\:radius-right-md{border-bottom-right-radius:.25rem;border-top-right-radius:.25rem}.mobile-lg\:radius-bottom-md{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.mobile-lg\:radius-left-md{border-bottom-left-radius:.25rem;border-top-left-radius:.25rem}.mobile-lg\:radius-lg{border-radius:.5rem}.mobile-lg\:radius-top-lg{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.mobile-lg\:radius-right-lg{border-bottom-right-radius:.5rem;border-top-right-radius:.5rem}.mobile-lg\:radius-bottom-lg{border-bottom-left-radius:.5rem;border-bottom-right-radius:.5rem}.mobile-lg\:radius-left-lg{border-bottom-left-radius:.5rem;border-top-left-radius:.5rem}.mobile-lg\:radius-pill{border-radius:99rem}.mobile-lg\:radius-top-pill{border-top-left-radius:99rem;border-top-right-radius:99rem}.mobile-lg\:radius-right-pill{border-bottom-right-radius:99rem;border-top-right-radius:99rem}.mobile-lg\:radius-bottom-pill{border-bottom-left-radius:99rem;border-bottom-right-radius:99rem}.mobile-lg\:radius-left-pill{border-bottom-left-radius:99rem;border-top-left-radius:99rem}.mobile-lg\:display-block{display:block}.mobile-lg\:display-flex{display:flex}.mobile-lg\:display-none{display:none}.mobile-lg\:display-inline{display:inline}.mobile-lg\:display-inline-block{display:inline-block}.mobile-lg\:display-inline-flex{display:inline-flex}.mobile-lg\:display-table{display:table}.mobile-lg\:display-table-cell{display:table-cell}.mobile-lg\:display-table-row{display:table-row}.mobile-lg\:font-mono-3xs{font-size:.77rem}.mobile-lg\:font-mono-2xs{font-size:.83rem}.mobile-lg\:font-mono-xs{font-size:.89rem}.mobile-lg\:font-mono-sm{font-size:.95rem}.mobile-lg\:font-mono-md{font-size:1.01rem}.mobile-lg\:font-mono-lg{font-size:1.31rem}.mobile-lg\:font-mono-xl{font-size:1.91rem}.mobile-lg\:font-mono-2xl{font-size:2.38rem}.mobile-lg\:font-mono-3xl{font-size:2.86rem}.mobile-lg\:font-sans-3xs{font-size:.87rem}.mobile-lg\:font-sans-2xs{font-size:.93rem}.mobile-lg\:font-sans-xs{font-size:1rem}.mobile-lg\:font-sans-sm{font-size:1.06rem}.mobile-lg\:font-sans-md{font-size:1.13rem}.mobile-lg\:font-sans-lg{font-size:1.46rem}.mobile-lg\:font-sans-xl{font-size:2.13rem}.mobile-lg\:font-sans-2xl{font-size:2.66rem}.mobile-lg\:font-sans-3xl{font-size:3.19rem}.mobile-lg\:font-serif-3xs{font-size:.79rem}.mobile-lg\:font-serif-2xs{font-size:.85rem}.mobile-lg\:font-serif-xs{font-size:.91rem}.mobile-lg\:font-serif-sm{font-size:.98rem}.mobile-lg\:font-serif-md{font-size:1.04rem}.mobile-lg\:font-serif-lg{font-size:1.34rem}.mobile-lg\:font-serif-xl{font-size:1.95rem}.mobile-lg\:font-serif-2xl{font-size:2.44rem}.mobile-lg\:font-serif-3xl{font-size:2.93rem}.mobile-lg\:font-heading-3xs{font-size:.87rem}.mobile-lg\:font-heading-2xs{font-size:.93rem}.mobile-lg\:font-heading-xs{font-size:1rem}.mobile-lg\:font-heading-sm{font-size:1.06rem}.mobile-lg\:font-heading-md{font-size:1.13rem}.mobile-lg\:font-heading-lg{font-size:1.46rem}.mobile-lg\:font-heading-xl{font-size:2.13rem}.mobile-lg\:font-heading-2xl{font-size:2.66rem}.mobile-lg\:font-heading-3xl{font-size:3.19rem}.mobile-lg\:font-body-3xs{font-size:.87rem}.mobile-lg\:font-body-2xs{font-size:.93rem}.mobile-lg\:font-body-xs{font-size:1rem}.mobile-lg\:font-body-sm{font-size:1.06rem}.mobile-lg\:font-body-md{font-size:1.13rem}.mobile-lg\:font-body-lg{font-size:1.46rem}.mobile-lg\:font-body-xl{font-size:2.13rem}.mobile-lg\:font-body-2xl{font-size:2.66rem}.mobile-lg\:font-body-3xl{font-size:3.19rem}.mobile-lg\:font-code-3xs{font-size:.77rem}.mobile-lg\:font-code-2xs{font-size:.83rem}.mobile-lg\:font-code-xs{font-size:.89rem}.mobile-lg\:font-code-sm{font-size:.95rem}.mobile-lg\:font-code-md{font-size:1.01rem}.mobile-lg\:font-code-lg{font-size:1.31rem}.mobile-lg\:font-code-xl{font-size:1.91rem}.mobile-lg\:font-code-2xl{font-size:2.38rem}.mobile-lg\:font-code-3xl{font-size:2.86rem}.mobile-lg\:font-alt-3xs{font-size:.79rem}.mobile-lg\:font-alt-2xs{font-size:.85rem}.mobile-lg\:font-alt-xs{font-size:.91rem}.mobile-lg\:font-alt-sm{font-size:.98rem}.mobile-lg\:font-alt-md{font-size:1.04rem}.mobile-lg\:font-alt-lg{font-size:1.34rem}.mobile-lg\:font-alt-xl{font-size:1.95rem}.mobile-lg\:font-alt-2xl{font-size:2.44rem}.mobile-lg\:font-alt-3xl{font-size:2.93rem}.mobile-lg\:font-ui-3xs{font-size:.87rem}.mobile-lg\:font-ui-2xs{font-size:.93rem}.mobile-lg\:font-ui-xs{font-size:1rem}.mobile-lg\:font-ui-sm{font-size:1.06rem}.mobile-lg\:font-ui-md{font-size:1.13rem}.mobile-lg\:font-ui-lg{font-size:1.46rem}.mobile-lg\:font-ui-xl{font-size:2.13rem}.mobile-lg\:font-ui-2xl{font-size:2.66rem}.mobile-lg\:font-ui-3xl{font-size:3.19rem}.mobile-lg\:text-light{font-weight:300}.mobile-lg\:text-normal{font-weight:400}.mobile-lg\:text-bold{font-weight:700}.mobile-lg\:flex-justify-center{justify-content:center}.mobile-lg\:flex-justify-start{justify-content:flex-start}.mobile-lg\:flex-justify-end{justify-content:flex-end}.mobile-lg\:flex-justify{justify-content:space-between}.mobile-lg\:line-height-sans-1{line-height:.9}.mobile-lg\:line-height-sans-2{line-height:1.1}.mobile-lg\:line-height-sans-3{line-height:1.3}.mobile-lg\:line-height-sans-4{line-height:1.4}.mobile-lg\:line-height-sans-5{line-height:1.5}.mobile-lg\:line-height-sans-6{line-height:1.6}.mobile-lg\:line-height-serif-1{line-height:1}.mobile-lg\:line-height-serif-2{line-height:1.2}.mobile-lg\:line-height-serif-3{line-height:1.4}.mobile-lg\:line-height-serif-4{line-height:1.5}.mobile-lg\:line-height-serif-5{line-height:1.7}.mobile-lg\:line-height-serif-6{line-height:1.8}.mobile-lg\:line-height-mono-1{line-height:1}.mobile-lg\:line-height-mono-2{line-height:1.3}.mobile-lg\:line-height-mono-3{line-height:1.4}.mobile-lg\:line-height-mono-4{line-height:1.6}.mobile-lg\:line-height-mono-5{line-height:1.7}.mobile-lg\:line-height-mono-6{line-height:1.8}.mobile-lg\:line-height-heading-1{line-height:.9}.mobile-lg\:line-height-heading-2{line-height:1.1}.mobile-lg\:line-height-heading-3{line-height:1.3}.mobile-lg\:line-height-heading-4{line-height:1.4}.mobile-lg\:line-height-heading-5{line-height:1.5}.mobile-lg\:line-height-heading-6{line-height:1.6}.mobile-lg\:line-height-ui-1{line-height:.9}.mobile-lg\:line-height-ui-2{line-height:1.1}.mobile-lg\:line-height-ui-3{line-height:1.3}.mobile-lg\:line-height-ui-4{line-height:1.4}.mobile-lg\:line-height-ui-5{line-height:1.5}.mobile-lg\:line-height-ui-6{line-height:1.6}.mobile-lg\:line-height-body-1{line-height:.9}.mobile-lg\:line-height-body-2{line-height:1.1}.mobile-lg\:line-height-body-3{line-height:1.3}.mobile-lg\:line-height-body-4{line-height:1.4}.mobile-lg\:line-height-body-5{line-height:1.5}.mobile-lg\:line-height-body-6{line-height:1.6}.mobile-lg\:line-height-code-1{line-height:1}.mobile-lg\:line-height-code-2{line-height:1.3}.mobile-lg\:line-height-code-3{line-height:1.4}.mobile-lg\:line-height-code-4{line-height:1.6}.mobile-lg\:line-height-code-5{line-height:1.7}.mobile-lg\:line-height-code-6{line-height:1.8}.mobile-lg\:line-height-alt-1{line-height:1}.mobile-lg\:line-height-alt-2{line-height:1.2}.mobile-lg\:line-height-alt-3{line-height:1.4}.mobile-lg\:line-height-alt-4{line-height:1.5}.mobile-lg\:line-height-alt-5{line-height:1.7}.mobile-lg\:line-height-alt-6{line-height:1.8}.mobile-lg\:margin-neg-1px{margin:-1px}.mobile-lg\:margin-neg-2px{margin:-2px}.mobile-lg\:margin-neg-05{margin:-.25rem}.mobile-lg\:margin-neg-1{margin:-.5rem}.mobile-lg\:margin-neg-105{margin:-.75rem}.mobile-lg\:margin-neg-2{margin:-1rem}.mobile-lg\:margin-neg-205{margin:-1.25rem}.mobile-lg\:margin-neg-3{margin:-1.5rem}.mobile-lg\:margin-1px{margin:1px}.mobile-lg\:margin-2px{margin:2px}.mobile-lg\:margin-05{margin:.25rem}.mobile-lg\:margin-1{margin:.5rem}.mobile-lg\:margin-105{margin:.75rem}.mobile-lg\:margin-2{margin:1rem}.mobile-lg\:margin-205{margin:1.25rem}.mobile-lg\:margin-3{margin:1.5rem}.mobile-lg\:margin-4{margin:2rem}.mobile-lg\:margin-5{margin:2.5rem}.mobile-lg\:margin-6{margin:3rem}.mobile-lg\:margin-7{margin:3.5rem}.mobile-lg\:margin-8{margin:4rem}.mobile-lg\:margin-9{margin:4.5rem}.mobile-lg\:margin-10{margin:5rem}.mobile-lg\:margin-15{margin:7.5rem}.mobile-lg\:margin-05em{margin:.5em}.mobile-lg\:margin-1em{margin:1em}.mobile-lg\:margin-105em{margin:1.5em}.mobile-lg\:margin-2em{margin:2em}.mobile-lg\:margin-0{margin:0}.mobile-lg\:margin-y-1px{margin-bottom:1px;margin-top:1px}.mobile-lg\:margin-top-1px{margin-top:1px}.mobile-lg\:margin-bottom-1px{margin-bottom:1px}.mobile-lg\:margin-y-2px{margin-bottom:2px;margin-top:2px}.mobile-lg\:margin-top-2px{margin-top:2px}.mobile-lg\:margin-bottom-2px{margin-bottom:2px}.mobile-lg\:margin-y-05{margin-bottom:.25rem;margin-top:.25rem}.mobile-lg\:margin-top-05{margin-top:.25rem}.mobile-lg\:margin-bottom-05{margin-bottom:.25rem}.mobile-lg\:margin-y-1{margin-bottom:.5rem;margin-top:.5rem}.mobile-lg\:margin-top-1{margin-top:.5rem}.mobile-lg\:margin-bottom-1{margin-bottom:.5rem}.mobile-lg\:margin-y-105{margin-bottom:.75rem;margin-top:.75rem}.mobile-lg\:margin-top-105{margin-top:.75rem}.mobile-lg\:margin-bottom-105{margin-bottom:.75rem}.mobile-lg\:margin-y-2{margin-bottom:1rem;margin-top:1rem}.mobile-lg\:margin-top-2{margin-top:1rem}.mobile-lg\:margin-bottom-2{margin-bottom:1rem}.mobile-lg\:margin-y-205{margin-bottom:1.25rem;margin-top:1.25rem}.mobile-lg\:margin-top-205{margin-top:1.25rem}.mobile-lg\:margin-bottom-205{margin-bottom:1.25rem}.mobile-lg\:margin-y-3{margin-bottom:1.5rem;margin-top:1.5rem}.mobile-lg\:margin-top-3{margin-top:1.5rem}.mobile-lg\:margin-bottom-3{margin-bottom:1.5rem}.mobile-lg\:margin-y-neg-1px{margin-bottom:-1px;margin-top:-1px}.mobile-lg\:margin-top-neg-1px{margin-top:-1px}.mobile-lg\:margin-bottom-neg-1px{margin-bottom:-1px}.mobile-lg\:margin-y-neg-2px{margin-bottom:-2px;margin-top:-2px}.mobile-lg\:margin-top-neg-2px{margin-top:-2px}.mobile-lg\:margin-bottom-neg-2px{margin-bottom:-2px}.mobile-lg\:margin-y-neg-05{margin-bottom:-.25rem;margin-top:-.25rem}.mobile-lg\:margin-top-neg-05{margin-top:-.25rem}.mobile-lg\:margin-bottom-neg-05{margin-bottom:-.25rem}.mobile-lg\:margin-y-neg-1{margin-bottom:-.5rem;margin-top:-.5rem}.mobile-lg\:margin-top-neg-1{margin-top:-.5rem}.mobile-lg\:margin-bottom-neg-1{margin-bottom:-.5rem}.mobile-lg\:margin-y-neg-105{margin-bottom:-.75rem;margin-top:-.75rem}.mobile-lg\:margin-top-neg-105{margin-top:-.75rem}.mobile-lg\:margin-bottom-neg-105{margin-bottom:-.75rem}.mobile-lg\:margin-y-neg-2{margin-bottom:-1rem;margin-top:-1rem}.mobile-lg\:margin-top-neg-2{margin-top:-1rem}.mobile-lg\:margin-bottom-neg-2{margin-bottom:-1rem}.mobile-lg\:margin-y-neg-205{margin-bottom:-1.25rem;margin-top:-1.25rem}.mobile-lg\:margin-top-neg-205{margin-top:-1.25rem}.mobile-lg\:margin-bottom-neg-205{margin-bottom:-1.25rem}.mobile-lg\:margin-y-neg-3{margin-bottom:-1.5rem;margin-top:-1.5rem}.mobile-lg\:margin-top-neg-3{margin-top:-1.5rem}.mobile-lg\:margin-bottom-neg-3{margin-bottom:-1.5rem}.mobile-lg\:margin-y-4{margin-bottom:2rem;margin-top:2rem}.mobile-lg\:margin-top-4{margin-top:2rem}.mobile-lg\:margin-bottom-4{margin-bottom:2rem}.mobile-lg\:margin-y-5{margin-bottom:2.5rem;margin-top:2.5rem}.mobile-lg\:margin-top-5{margin-top:2.5rem}.mobile-lg\:margin-bottom-5{margin-bottom:2.5rem}.mobile-lg\:margin-y-6{margin-bottom:3rem;margin-top:3rem}.mobile-lg\:margin-top-6{margin-top:3rem}.mobile-lg\:margin-bottom-6{margin-bottom:3rem}.mobile-lg\:margin-y-7{margin-bottom:3.5rem;margin-top:3.5rem}.mobile-lg\:margin-top-7{margin-top:3.5rem}.mobile-lg\:margin-bottom-7{margin-bottom:3.5rem}.mobile-lg\:margin-y-8{margin-bottom:4rem;margin-top:4rem}.mobile-lg\:margin-top-8{margin-top:4rem}.mobile-lg\:margin-bottom-8{margin-bottom:4rem}.mobile-lg\:margin-y-9{margin-bottom:4.5rem;margin-top:4.5rem}.mobile-lg\:margin-top-9{margin-top:4.5rem}.mobile-lg\:margin-bottom-9{margin-bottom:4.5rem}.mobile-lg\:margin-y-10{margin-bottom:5rem;margin-top:5rem}.mobile-lg\:margin-top-10{margin-top:5rem}.mobile-lg\:margin-bottom-10{margin-bottom:5rem}.mobile-lg\:margin-y-15{margin-bottom:7.5rem;margin-top:7.5rem}.mobile-lg\:margin-top-15{margin-top:7.5rem}.mobile-lg\:margin-bottom-15{margin-bottom:7.5rem}.mobile-lg\:margin-y-05em{margin-bottom:.5em;margin-top:.5em}.mobile-lg\:margin-top-05em{margin-top:.5em}.mobile-lg\:margin-bottom-05em{margin-bottom:.5em}.mobile-lg\:margin-y-1em{margin-bottom:1em;margin-top:1em}.mobile-lg\:margin-top-1em{margin-top:1em}.mobile-lg\:margin-bottom-1em{margin-bottom:1em}.mobile-lg\:margin-y-105em{margin-bottom:1.5em;margin-top:1.5em}.mobile-lg\:margin-top-105em{margin-top:1.5em}.mobile-lg\:margin-bottom-105em{margin-bottom:1.5em}.mobile-lg\:margin-y-2em{margin-bottom:2em;margin-top:2em}.mobile-lg\:margin-top-2em{margin-top:2em}.mobile-lg\:margin-bottom-2em{margin-bottom:2em}.mobile-lg\:margin-y-0{margin-bottom:0;margin-top:0}.mobile-lg\:margin-top-0{margin-top:0}.mobile-lg\:margin-bottom-0{margin-bottom:0}.mobile-lg\:margin-y-auto{margin-bottom:auto;margin-top:auto}.mobile-lg\:margin-top-auto{margin-top:auto}.mobile-lg\:margin-bottom-auto{margin-bottom:auto}.mobile-lg\:margin-x-1px{margin-left:1px;margin-right:1px}.mobile-lg\:margin-right-1px{margin-right:1px}.mobile-lg\:margin-left-1px{margin-left:1px}.mobile-lg\:margin-x-2px{margin-left:2px;margin-right:2px}.mobile-lg\:margin-right-2px{margin-right:2px}.mobile-lg\:margin-left-2px{margin-left:2px}.mobile-lg\:margin-x-05{margin-left:.25rem;margin-right:.25rem}.mobile-lg\:margin-right-05{margin-right:.25rem}.mobile-lg\:margin-left-05{margin-left:.25rem}.mobile-lg\:margin-x-1{margin-left:.5rem;margin-right:.5rem}.mobile-lg\:margin-right-1{margin-right:.5rem}.mobile-lg\:margin-left-1{margin-left:.5rem}.mobile-lg\:margin-x-105{margin-left:.75rem;margin-right:.75rem}.mobile-lg\:margin-right-105{margin-right:.75rem}.mobile-lg\:margin-left-105{margin-left:.75rem}.mobile-lg\:margin-x-2{margin-left:1rem;margin-right:1rem}.mobile-lg\:margin-right-2{margin-right:1rem}.mobile-lg\:margin-left-2{margin-left:1rem}.mobile-lg\:margin-x-205{margin-left:1.25rem;margin-right:1.25rem}.mobile-lg\:margin-right-205{margin-right:1.25rem}.mobile-lg\:margin-left-205{margin-left:1.25rem}.mobile-lg\:margin-x-3{margin-left:1.5rem;margin-right:1.5rem}.mobile-lg\:margin-right-3{margin-right:1.5rem}.mobile-lg\:margin-left-3{margin-left:1.5rem}.mobile-lg\:margin-x-neg-1px{margin-left:-1px;margin-right:-1px}.mobile-lg\:margin-right-neg-1px{margin-right:-1px}.mobile-lg\:margin-left-neg-1px{margin-left:-1px}.mobile-lg\:margin-x-neg-2px{margin-left:-2px;margin-right:-2px}.mobile-lg\:margin-right-neg-2px{margin-right:-2px}.mobile-lg\:margin-left-neg-2px{margin-left:-2px}.mobile-lg\:margin-x-neg-05{margin-left:-.25rem;margin-right:-.25rem}.mobile-lg\:margin-right-neg-05{margin-right:-.25rem}.mobile-lg\:margin-left-neg-05{margin-left:-.25rem}.mobile-lg\:margin-x-neg-1{margin-left:-.5rem;margin-right:-.5rem}.mobile-lg\:margin-right-neg-1{margin-right:-.5rem}.mobile-lg\:margin-left-neg-1{margin-left:-.5rem}.mobile-lg\:margin-x-neg-105{margin-left:-.75rem;margin-right:-.75rem}.mobile-lg\:margin-right-neg-105{margin-right:-.75rem}.mobile-lg\:margin-left-neg-105{margin-left:-.75rem}.mobile-lg\:margin-x-neg-2{margin-left:-1rem;margin-right:-1rem}.mobile-lg\:margin-right-neg-2{margin-right:-1rem}.mobile-lg\:margin-left-neg-2{margin-left:-1rem}.mobile-lg\:margin-x-neg-205{margin-left:-1.25rem;margin-right:-1.25rem}.mobile-lg\:margin-right-neg-205{margin-right:-1.25rem}.mobile-lg\:margin-left-neg-205{margin-left:-1.25rem}.mobile-lg\:margin-x-neg-3{margin-left:-1.5rem;margin-right:-1.5rem}.mobile-lg\:margin-right-neg-3{margin-right:-1.5rem}.mobile-lg\:margin-left-neg-3{margin-left:-1.5rem}.mobile-lg\:margin-x-4{margin-left:2rem;margin-right:2rem}.mobile-lg\:margin-right-4{margin-right:2rem}.mobile-lg\:margin-left-4{margin-left:2rem}.mobile-lg\:margin-x-5{margin-left:2.5rem;margin-right:2.5rem}.mobile-lg\:margin-right-5{margin-right:2.5rem}.mobile-lg\:margin-left-5{margin-left:2.5rem}.mobile-lg\:margin-x-6{margin-left:3rem;margin-right:3rem}.mobile-lg\:margin-right-6{margin-right:3rem}.mobile-lg\:margin-left-6{margin-left:3rem}.mobile-lg\:margin-x-7{margin-left:3.5rem;margin-right:3.5rem}.mobile-lg\:margin-right-7{margin-right:3.5rem}.mobile-lg\:margin-left-7{margin-left:3.5rem}.mobile-lg\:margin-x-8{margin-left:4rem;margin-right:4rem}.mobile-lg\:margin-right-8{margin-right:4rem}.mobile-lg\:margin-left-8{margin-left:4rem}.mobile-lg\:margin-x-9{margin-left:4.5rem;margin-right:4.5rem}.mobile-lg\:margin-right-9{margin-right:4.5rem}.mobile-lg\:margin-left-9{margin-left:4.5rem}.mobile-lg\:margin-x-10{margin-left:5rem;margin-right:5rem}.mobile-lg\:margin-right-10{margin-right:5rem}.mobile-lg\:margin-left-10{margin-left:5rem}.mobile-lg\:margin-x-15{margin-left:7.5rem;margin-right:7.5rem}.mobile-lg\:margin-right-15{margin-right:7.5rem}.mobile-lg\:margin-left-15{margin-left:7.5rem}.mobile-lg\:margin-x-card{margin-left:10rem;margin-right:10rem}.mobile-lg\:margin-right-card{margin-right:10rem}.mobile-lg\:margin-left-card{margin-left:10rem}.mobile-lg\:margin-x-card-lg{margin-left:15rem;margin-right:15rem}.mobile-lg\:margin-right-card-lg{margin-right:15rem}.mobile-lg\:margin-left-card-lg{margin-left:15rem}.mobile-lg\:margin-x-mobile{margin-left:20rem;margin-right:20rem}.mobile-lg\:margin-right-mobile{margin-right:20rem}.mobile-lg\:margin-left-mobile{margin-left:20rem}.mobile-lg\:margin-x-05em{margin-left:.5em;margin-right:.5em}.mobile-lg\:margin-right-05em{margin-right:.5em}.mobile-lg\:margin-left-05em{margin-left:.5em}.mobile-lg\:margin-x-1em{margin-left:1em;margin-right:1em}.mobile-lg\:margin-right-1em{margin-right:1em}.mobile-lg\:margin-left-1em{margin-left:1em}.mobile-lg\:margin-x-105em{margin-left:1.5em;margin-right:1.5em}.mobile-lg\:margin-right-105em{margin-right:1.5em}.mobile-lg\:margin-left-105em{margin-left:1.5em}.mobile-lg\:margin-x-2em{margin-left:2em;margin-right:2em}.mobile-lg\:margin-right-2em{margin-right:2em}.mobile-lg\:margin-left-2em{margin-left:2em}.mobile-lg\:margin-x-0{margin-left:0;margin-right:0}.mobile-lg\:margin-right-0{margin-right:0}.mobile-lg\:margin-left-0{margin-left:0}.mobile-lg\:margin-x-auto{margin-left:auto;margin-right:auto}.mobile-lg\:margin-right-auto{margin-right:auto}.mobile-lg\:margin-left-auto{margin-left:auto}.mobile-lg\:measure-1{max-width:44ex}.mobile-lg\:measure-2{max-width:60ex}.mobile-lg\:measure-3{max-width:64ex}.mobile-lg\:measure-4{max-width:68ex}.mobile-lg\:measure-5{max-width:72ex}.mobile-lg\:measure-6{max-width:88ex}.mobile-lg\:measure-none{max-width:none}.mobile-lg\:order-first{order:-1}.mobile-lg\:order-last{order:999}.mobile-lg\:order-0,.mobile-lg\:order-initial{order:0}.mobile-lg\:order-1{order:1}.mobile-lg\:order-2{order:2}.mobile-lg\:order-3{order:3}.mobile-lg\:order-4{order:4}.mobile-lg\:order-5{order:5}.mobile-lg\:order-6{order:6}.mobile-lg\:order-7{order:7}.mobile-lg\:order-8{order:8}.mobile-lg\:order-9{order:9}.mobile-lg\:order-10{order:10}.mobile-lg\:order-11{order:11}.mobile-lg\:padding-1px{padding:1px}.mobile-lg\:padding-y-1px{padding-bottom:1px;padding-top:1px}.mobile-lg\:padding-x-1px{padding-left:1px;padding-right:1px}.mobile-lg\:padding-top-1px{padding-top:1px}.mobile-lg\:padding-right-1px{padding-right:1px}.mobile-lg\:padding-bottom-1px{padding-bottom:1px}.mobile-lg\:padding-left-1px{padding-left:1px}.mobile-lg\:padding-2px{padding:2px}.mobile-lg\:padding-y-2px{padding-bottom:2px;padding-top:2px}.mobile-lg\:padding-x-2px{padding-left:2px;padding-right:2px}.mobile-lg\:padding-top-2px{padding-top:2px}.mobile-lg\:padding-right-2px{padding-right:2px}.mobile-lg\:padding-bottom-2px{padding-bottom:2px}.mobile-lg\:padding-left-2px{padding-left:2px}.mobile-lg\:padding-05{padding:.25rem}.mobile-lg\:padding-y-05{padding-bottom:.25rem;padding-top:.25rem}.mobile-lg\:padding-x-05{padding-left:.25rem;padding-right:.25rem}.mobile-lg\:padding-top-05{padding-top:.25rem}.mobile-lg\:padding-right-05{padding-right:.25rem}.mobile-lg\:padding-bottom-05{padding-bottom:.25rem}.mobile-lg\:padding-left-05{padding-left:.25rem}.mobile-lg\:padding-1{padding:.5rem}.mobile-lg\:padding-y-1{padding-bottom:.5rem;padding-top:.5rem}.mobile-lg\:padding-x-1{padding-left:.5rem;padding-right:.5rem}.mobile-lg\:padding-top-1{padding-top:.5rem}.mobile-lg\:padding-right-1{padding-right:.5rem}.mobile-lg\:padding-bottom-1{padding-bottom:.5rem}.mobile-lg\:padding-left-1{padding-left:.5rem}.mobile-lg\:padding-105{padding:.75rem}.mobile-lg\:padding-y-105{padding-bottom:.75rem;padding-top:.75rem}.mobile-lg\:padding-x-105{padding-left:.75rem;padding-right:.75rem}.mobile-lg\:padding-top-105{padding-top:.75rem}.mobile-lg\:padding-right-105{padding-right:.75rem}.mobile-lg\:padding-bottom-105{padding-bottom:.75rem}.mobile-lg\:padding-left-105{padding-left:.75rem}.mobile-lg\:padding-2{padding:1rem}.mobile-lg\:padding-y-2{padding-bottom:1rem;padding-top:1rem}.mobile-lg\:padding-x-2{padding-left:1rem;padding-right:1rem}.mobile-lg\:padding-top-2{padding-top:1rem}.mobile-lg\:padding-right-2{padding-right:1rem}.mobile-lg\:padding-bottom-2{padding-bottom:1rem}.mobile-lg\:padding-left-2{padding-left:1rem}.mobile-lg\:padding-205{padding:1.25rem}.mobile-lg\:padding-y-205{padding-bottom:1.25rem;padding-top:1.25rem}.mobile-lg\:padding-x-205{padding-left:1.25rem;padding-right:1.25rem}.mobile-lg\:padding-top-205{padding-top:1.25rem}.mobile-lg\:padding-right-205{padding-right:1.25rem}.mobile-lg\:padding-bottom-205{padding-bottom:1.25rem}.mobile-lg\:padding-left-205{padding-left:1.25rem}.mobile-lg\:padding-3{padding:1.5rem}.mobile-lg\:padding-y-3{padding-bottom:1.5rem;padding-top:1.5rem}.mobile-lg\:padding-x-3{padding-left:1.5rem;padding-right:1.5rem}.mobile-lg\:padding-top-3{padding-top:1.5rem}.mobile-lg\:padding-right-3{padding-right:1.5rem}.mobile-lg\:padding-bottom-3{padding-bottom:1.5rem}.mobile-lg\:padding-left-3{padding-left:1.5rem}.mobile-lg\:padding-4{padding:2rem}.mobile-lg\:padding-y-4{padding-bottom:2rem;padding-top:2rem}.mobile-lg\:padding-x-4{padding-left:2rem;padding-right:2rem}.mobile-lg\:padding-top-4{padding-top:2rem}.mobile-lg\:padding-right-4{padding-right:2rem}.mobile-lg\:padding-bottom-4{padding-bottom:2rem}.mobile-lg\:padding-left-4{padding-left:2rem}.mobile-lg\:padding-5{padding:2.5rem}.mobile-lg\:padding-y-5{padding-bottom:2.5rem;padding-top:2.5rem}.mobile-lg\:padding-x-5{padding-left:2.5rem;padding-right:2.5rem}.mobile-lg\:padding-top-5{padding-top:2.5rem}.mobile-lg\:padding-right-5{padding-right:2.5rem}.mobile-lg\:padding-bottom-5{padding-bottom:2.5rem}.mobile-lg\:padding-left-5{padding-left:2.5rem}.mobile-lg\:padding-6{padding:3rem}.mobile-lg\:padding-y-6{padding-bottom:3rem;padding-top:3rem}.mobile-lg\:padding-x-6{padding-left:3rem;padding-right:3rem}.mobile-lg\:padding-top-6{padding-top:3rem}.mobile-lg\:padding-right-6{padding-right:3rem}.mobile-lg\:padding-bottom-6{padding-bottom:3rem}.mobile-lg\:padding-left-6{padding-left:3rem}.mobile-lg\:padding-7{padding:3.5rem}.mobile-lg\:padding-y-7{padding-bottom:3.5rem;padding-top:3.5rem}.mobile-lg\:padding-x-7{padding-left:3.5rem;padding-right:3.5rem}.mobile-lg\:padding-top-7{padding-top:3.5rem}.mobile-lg\:padding-right-7{padding-right:3.5rem}.mobile-lg\:padding-bottom-7{padding-bottom:3.5rem}.mobile-lg\:padding-left-7{padding-left:3.5rem}.mobile-lg\:padding-8{padding:4rem}.mobile-lg\:padding-y-8{padding-bottom:4rem;padding-top:4rem}.mobile-lg\:padding-x-8{padding-left:4rem;padding-right:4rem}.mobile-lg\:padding-top-8{padding-top:4rem}.mobile-lg\:padding-right-8{padding-right:4rem}.mobile-lg\:padding-bottom-8{padding-bottom:4rem}.mobile-lg\:padding-left-8{padding-left:4rem}.mobile-lg\:padding-9{padding:4.5rem}.mobile-lg\:padding-y-9{padding-bottom:4.5rem;padding-top:4.5rem}.mobile-lg\:padding-x-9{padding-left:4.5rem;padding-right:4.5rem}.mobile-lg\:padding-top-9{padding-top:4.5rem}.mobile-lg\:padding-right-9{padding-right:4.5rem}.mobile-lg\:padding-bottom-9{padding-bottom:4.5rem}.mobile-lg\:padding-left-9{padding-left:4.5rem}.mobile-lg\:padding-10{padding:5rem}.mobile-lg\:padding-y-10{padding-bottom:5rem;padding-top:5rem}.mobile-lg\:padding-x-10{padding-left:5rem;padding-right:5rem}.mobile-lg\:padding-top-10{padding-top:5rem}.mobile-lg\:padding-right-10{padding-right:5rem}.mobile-lg\:padding-bottom-10{padding-bottom:5rem}.mobile-lg\:padding-left-10{padding-left:5rem}.mobile-lg\:padding-15{padding:7.5rem}.mobile-lg\:padding-y-15{padding-bottom:7.5rem;padding-top:7.5rem}.mobile-lg\:padding-x-15{padding-left:7.5rem;padding-right:7.5rem}.mobile-lg\:padding-top-15{padding-top:7.5rem}.mobile-lg\:padding-right-15{padding-right:7.5rem}.mobile-lg\:padding-bottom-15{padding-bottom:7.5rem}.mobile-lg\:padding-left-15{padding-left:7.5rem}.mobile-lg\:padding-0{padding:0}.mobile-lg\:padding-y-0{padding-bottom:0;padding-top:0}.mobile-lg\:padding-x-0{padding-left:0;padding-right:0}.mobile-lg\:padding-top-0{padding-top:0}.mobile-lg\:padding-right-0{padding-right:0}.mobile-lg\:padding-bottom-0{padding-bottom:0}.mobile-lg\:padding-left-0{padding-left:0}.mobile-lg\:width-1px{width:1px}.mobile-lg\:width-2px{width:2px}.mobile-lg\:width-05{width:.25rem}.mobile-lg\:width-1{width:.5rem}.mobile-lg\:width-105{width:.75rem}.mobile-lg\:width-2{width:1rem}.mobile-lg\:width-205{width:1.25rem}.mobile-lg\:width-3{width:1.5rem}.mobile-lg\:width-4{width:2rem}.mobile-lg\:width-5{width:2.5rem}.mobile-lg\:width-6{width:3rem}.mobile-lg\:width-7{width:3.5rem}.mobile-lg\:width-8{width:4rem}.mobile-lg\:width-9{width:4.5rem}.mobile-lg\:width-10{width:5rem}.mobile-lg\:width-15{width:7.5rem}.mobile-lg\:width-card{width:10rem}.mobile-lg\:width-card-lg{width:15rem}.mobile-lg\:width-mobile{width:20rem}.mobile-lg\:width-mobile-lg{width:30rem}.mobile-lg\:width-tablet{width:40rem}.mobile-lg\:width-tablet-lg{width:55rem}.mobile-lg\:width-desktop{width:64rem}.mobile-lg\:width-desktop-lg{width:75rem}.mobile-lg\:width-widescreen{width:87.5rem}.mobile-lg\:width-0{width:0}.mobile-lg\:width-full{width:100%}.mobile-lg\:width-auto{width:auto}}@media (min-width:40em){.tablet\:border-1px,.tablet\:hover\:border-1px:hover{border:1px solid}.tablet\:border-y-1px,.tablet\:hover\:border-y-1px:hover{border-bottom:1px solid;border-top:1px solid}.tablet\:border-x-1px,.tablet\:hover\:border-x-1px:hover{border-left:1px solid;border-right:1px solid}.tablet\:border-top-1px,.tablet\:hover\:border-top-1px:hover{border-top:1px solid}.tablet\:border-right-1px,.tablet\:hover\:border-right-1px:hover{border-right:1px solid}.tablet\:border-bottom-1px,.tablet\:hover\:border-bottom-1px:hover{border-bottom:1px solid}.tablet\:border-left-1px,.tablet\:hover\:border-left-1px:hover{border-left:1px solid}.tablet\:border-2px,.tablet\:hover\:border-2px:hover{border:2px solid}.tablet\:border-y-2px,.tablet\:hover\:border-y-2px:hover{border-bottom:2px solid;border-top:2px solid}.tablet\:border-x-2px,.tablet\:hover\:border-x-2px:hover{border-left:2px solid;border-right:2px solid}.tablet\:border-top-2px,.tablet\:hover\:border-top-2px:hover{border-top:2px solid}.tablet\:border-right-2px,.tablet\:hover\:border-right-2px:hover{border-right:2px solid}.tablet\:border-bottom-2px,.tablet\:hover\:border-bottom-2px:hover{border-bottom:2px solid}.tablet\:border-left-2px,.tablet\:hover\:border-left-2px:hover{border-left:2px solid}.tablet\:border-05,.tablet\:hover\:border-05:hover{border:.25rem solid}.tablet\:border-y-05,.tablet\:hover\:border-y-05:hover{border-bottom:.25rem solid;border-top:.25rem solid}.tablet\:border-x-05,.tablet\:hover\:border-x-05:hover{border-left:.25rem solid;border-right:.25rem solid}.tablet\:border-top-05,.tablet\:hover\:border-top-05:hover{border-top:.25rem solid}.tablet\:border-right-05,.tablet\:hover\:border-right-05:hover{border-right:.25rem solid}.tablet\:border-bottom-05,.tablet\:hover\:border-bottom-05:hover{border-bottom:.25rem solid}.tablet\:border-left-05,.tablet\:hover\:border-left-05:hover{border-left:.25rem solid}.tablet\:border-1,.tablet\:hover\:border-1:hover{border:.5rem solid}.tablet\:border-y-1,.tablet\:hover\:border-y-1:hover{border-bottom:.5rem solid;border-top:.5rem solid}.tablet\:border-x-1,.tablet\:hover\:border-x-1:hover{border-left:.5rem solid;border-right:.5rem solid}.tablet\:border-top-1,.tablet\:hover\:border-top-1:hover{border-top:.5rem solid}.tablet\:border-right-1,.tablet\:hover\:border-right-1:hover{border-right:.5rem solid}.tablet\:border-bottom-1,.tablet\:hover\:border-bottom-1:hover{border-bottom:.5rem solid}.tablet\:border-left-1,.tablet\:hover\:border-left-1:hover{border-left:.5rem solid}.tablet\:border-105,.tablet\:hover\:border-105:hover{border:.75rem solid}.tablet\:border-y-105,.tablet\:hover\:border-y-105:hover{border-bottom:.75rem solid;border-top:.75rem solid}.tablet\:border-x-105,.tablet\:hover\:border-x-105:hover{border-left:.75rem solid;border-right:.75rem solid}.tablet\:border-top-105,.tablet\:hover\:border-top-105:hover{border-top:.75rem solid}.tablet\:border-right-105,.tablet\:hover\:border-right-105:hover{border-right:.75rem solid}.tablet\:border-bottom-105,.tablet\:hover\:border-bottom-105:hover{border-bottom:.75rem solid}.tablet\:border-left-105,.tablet\:hover\:border-left-105:hover{border-left:.75rem solid}.tablet\:border-2,.tablet\:hover\:border-2:hover{border:1rem solid}.tablet\:border-y-2,.tablet\:hover\:border-y-2:hover{border-bottom:1rem solid;border-top:1rem solid}.tablet\:border-x-2,.tablet\:hover\:border-x-2:hover{border-left:1rem solid;border-right:1rem solid}.tablet\:border-top-2,.tablet\:hover\:border-top-2:hover{border-top:1rem solid}.tablet\:border-right-2,.tablet\:hover\:border-right-2:hover{border-right:1rem solid}.tablet\:border-bottom-2,.tablet\:hover\:border-bottom-2:hover{border-bottom:1rem solid}.tablet\:border-left-2,.tablet\:hover\:border-left-2:hover{border-left:1rem solid}.tablet\:border-205,.tablet\:hover\:border-205:hover{border:1.25rem solid}.tablet\:border-y-205,.tablet\:hover\:border-y-205:hover{border-bottom:1.25rem solid;border-top:1.25rem solid}.tablet\:border-x-205,.tablet\:hover\:border-x-205:hover{border-left:1.25rem solid;border-right:1.25rem solid}.tablet\:border-top-205,.tablet\:hover\:border-top-205:hover{border-top:1.25rem solid}.tablet\:border-right-205,.tablet\:hover\:border-right-205:hover{border-right:1.25rem solid}.tablet\:border-bottom-205,.tablet\:hover\:border-bottom-205:hover{border-bottom:1.25rem solid}.tablet\:border-left-205,.tablet\:hover\:border-left-205:hover{border-left:1.25rem solid}.tablet\:border-3,.tablet\:hover\:border-3:hover{border:1.5rem solid}.tablet\:border-y-3,.tablet\:hover\:border-y-3:hover{border-bottom:1.5rem solid;border-top:1.5rem solid}.tablet\:border-x-3,.tablet\:hover\:border-x-3:hover{border-left:1.5rem solid;border-right:1.5rem solid}.tablet\:border-top-3,.tablet\:hover\:border-top-3:hover{border-top:1.5rem solid}.tablet\:border-right-3,.tablet\:hover\:border-right-3:hover{border-right:1.5rem solid}.tablet\:border-bottom-3,.tablet\:hover\:border-bottom-3:hover{border-bottom:1.5rem solid}.tablet\:border-left-3,.tablet\:hover\:border-left-3:hover{border-left:1.5rem solid}.tablet\:border-0,.tablet\:hover\:border-0:hover{border:0 solid}.tablet\:border-y-0,.tablet\:hover\:border-y-0:hover{border-bottom:0 solid;border-top:0 solid}.tablet\:border-x-0,.tablet\:hover\:border-x-0:hover{border-left:0 solid;border-right:0 solid}.tablet\:border-top-0,.tablet\:hover\:border-top-0:hover{border-top:0 solid}.tablet\:border-right-0,.tablet\:hover\:border-right-0:hover{border-right:0 solid}.tablet\:border-bottom-0,.tablet\:hover\:border-bottom-0:hover{border-bottom:0 solid}.tablet\:border-left-0,.tablet\:hover\:border-left-0:hover{border-left:0 solid}.tablet\:border,.tablet\:hover\:border:hover{border:1px solid}.tablet\:border-y,.tablet\:hover\:border-y:hover{border-bottom:1px solid;border-top:1px solid}.tablet\:border-x,.tablet\:hover\:border-x:hover{border-left:1px solid;border-right:1px solid}.tablet\:border-top,.tablet\:hover\:border-top:hover{border-top:1px solid}.tablet\:border-right,.tablet\:hover\:border-right:hover{border-right:1px solid}.tablet\:border-bottom,.tablet\:hover\:border-bottom:hover{border-bottom:1px solid}.tablet\:border-left,.tablet\:hover\:border-left:hover{border-left:1px solid}.tablet\:border-transparent,.tablet\:hover\:border-transparent:hover{border-color:transparent}.tablet\:border-black,.tablet\:hover\:border-black:hover{border-color:#000}.tablet\:border-white,.tablet\:hover\:border-white:hover{border-color:#fff}.tablet\:border-red,.tablet\:hover\:border-red:hover{border-color:#e52207}.tablet\:border-orange,.tablet\:hover\:border-orange:hover{border-color:#e66f0e}.tablet\:border-gold,.tablet\:hover\:border-gold:hover{border-color:#ffbe2e}.tablet\:border-yellow,.tablet\:hover\:border-yellow:hover{border-color:#fee685}.tablet\:border-green,.tablet\:hover\:border-green:hover{border-color:#538200}.tablet\:border-mint,.tablet\:hover\:border-mint:hover{border-color:#04c585}.tablet\:border-cyan,.tablet\:hover\:border-cyan:hover{border-color:#009ec1}.tablet\:border-blue,.tablet\:hover\:border-blue:hover{border-color:#0076d6}.tablet\:border-indigo,.tablet\:hover\:border-indigo:hover{border-color:#676cc8}.tablet\:border-violet,.tablet\:hover\:border-violet:hover{border-color:#8168b3}.tablet\:border-magenta,.tablet\:hover\:border-magenta:hover{border-color:#d72d79}.tablet\:border-gray-5,.tablet\:hover\:border-gray-5:hover{border-color:#f0f0f0}.tablet\:border-gray-10,.tablet\:hover\:border-gray-10:hover{border-color:#e6e6e6}.tablet\:border-gray-30,.tablet\:hover\:border-gray-30:hover{border-color:#adadad}.tablet\:border-gray-50,.tablet\:hover\:border-gray-50:hover{border-color:#757575}.tablet\:border-gray-70,.tablet\:hover\:border-gray-70:hover{border-color:#454545}.tablet\:border-gray-90,.tablet\:hover\:border-gray-90:hover{border-color:#1b1b1b}.tablet\:border-base-lightest,.tablet\:hover\:border-base-lightest:hover{border-color:#f0f0f0}.tablet\:border-base-lighter,.tablet\:hover\:border-base-lighter:hover{border-color:#dfe1e2}.tablet\:border-base-light,.tablet\:hover\:border-base-light:hover{border-color:#a9aeb1}.tablet\:border-base,.tablet\:hover\:border-base:hover{border-color:#71767a}.tablet\:border-base-dark,.tablet\:hover\:border-base-dark:hover{border-color:#565c65}.tablet\:border-base-darker,.tablet\:hover\:border-base-darker:hover{border-color:#3d4551}.tablet\:border-base-darkest,.tablet\:border-ink,.tablet\:hover\:border-base-darkest:hover,.tablet\:hover\:border-ink:hover{border-color:#1b1b1b}.tablet\:border-primary-lighter,.tablet\:hover\:border-primary-lighter:hover{border-color:#d9e8f6}.tablet\:border-primary-light,.tablet\:hover\:border-primary-light:hover{border-color:#73b3e7}.tablet\:border-primary,.tablet\:hover\:border-primary:hover{border-color:#005ea2}.tablet\:border-primary-vivid,.tablet\:hover\:border-primary-vivid:hover{border-color:#0050d8}.tablet\:border-primary-dark,.tablet\:hover\:border-primary-dark:hover{border-color:#1a4480}.tablet\:border-primary-darker,.tablet\:hover\:border-primary-darker:hover{border-color:#162e51}.tablet\:border-secondary-lighter,.tablet\:hover\:border-secondary-lighter:hover{border-color:#f3e1e4}.tablet\:border-secondary-light,.tablet\:hover\:border-secondary-light:hover{border-color:#f2938c}.tablet\:border-secondary,.tablet\:hover\:border-secondary:hover{border-color:#d83933}.tablet\:border-secondary-vivid,.tablet\:hover\:border-secondary-vivid:hover{border-color:#e41d3d}.tablet\:border-secondary-dark,.tablet\:hover\:border-secondary-dark:hover{border-color:#b50909}.tablet\:border-secondary-darker,.tablet\:hover\:border-secondary-darker:hover{border-color:#8b0a03}.tablet\:border-accent-warm-darker,.tablet\:hover\:border-accent-warm-darker:hover{border-color:#775540}.tablet\:border-accent-warm-dark,.tablet\:hover\:border-accent-warm-dark:hover{border-color:#c05600}.tablet\:border-accent-warm,.tablet\:hover\:border-accent-warm:hover{border-color:#fa9441}.tablet\:border-accent-warm-light,.tablet\:hover\:border-accent-warm-light:hover{border-color:#ffbc78}.tablet\:border-accent-warm-lighter,.tablet\:hover\:border-accent-warm-lighter:hover{border-color:#f2e4d4}.tablet\:border-accent-cool-darker,.tablet\:hover\:border-accent-cool-darker:hover{border-color:#07648d}.tablet\:border-accent-cool-dark,.tablet\:hover\:border-accent-cool-dark:hover{border-color:#28a0cb}.tablet\:border-accent-cool,.tablet\:hover\:border-accent-cool:hover{border-color:#00bde3}.tablet\:border-accent-cool-light,.tablet\:hover\:border-accent-cool-light:hover{border-color:#97d4ea}.tablet\:border-accent-cool-lighter,.tablet\:hover\:border-accent-cool-lighter:hover{border-color:#e1f3f8}.tablet\:radius-0{border-radius:0}.tablet\:radius-top-0{border-top-left-radius:0;border-top-right-radius:0}.tablet\:radius-right-0{border-bottom-right-radius:0;border-top-right-radius:0}.tablet\:radius-bottom-0{border-bottom-left-radius:0;border-bottom-right-radius:0}.tablet\:radius-left-0{border-bottom-left-radius:0;border-top-left-radius:0}.tablet\:radius-none{border-radius:0}.tablet\:radius-top-none{border-top-left-radius:0;border-top-right-radius:0}.tablet\:radius-right-none{border-bottom-right-radius:0;border-top-right-radius:0}.tablet\:radius-bottom-none{border-bottom-left-radius:0;border-bottom-right-radius:0}.tablet\:radius-left-none{border-bottom-left-radius:0;border-top-left-radius:0}.tablet\:radius-sm{border-radius:2px}.tablet\:radius-top-sm{border-top-left-radius:2px;border-top-right-radius:2px}.tablet\:radius-right-sm{border-bottom-right-radius:2px;border-top-right-radius:2px}.tablet\:radius-bottom-sm{border-bottom-left-radius:2px;border-bottom-right-radius:2px}.tablet\:radius-left-sm{border-bottom-left-radius:2px;border-top-left-radius:2px}.tablet\:radius-md{border-radius:.25rem}.tablet\:radius-top-md{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.tablet\:radius-right-md{border-bottom-right-radius:.25rem;border-top-right-radius:.25rem}.tablet\:radius-bottom-md{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.tablet\:radius-left-md{border-bottom-left-radius:.25rem;border-top-left-radius:.25rem}.tablet\:radius-lg{border-radius:.5rem}.tablet\:radius-top-lg{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.tablet\:radius-right-lg{border-bottom-right-radius:.5rem;border-top-right-radius:.5rem}.tablet\:radius-bottom-lg{border-bottom-left-radius:.5rem;border-bottom-right-radius:.5rem}.tablet\:radius-left-lg{border-bottom-left-radius:.5rem;border-top-left-radius:.5rem}.tablet\:radius-pill{border-radius:99rem}.tablet\:radius-top-pill{border-top-left-radius:99rem;border-top-right-radius:99rem}.tablet\:radius-right-pill{border-bottom-right-radius:99rem;border-top-right-radius:99rem}.tablet\:radius-bottom-pill{border-bottom-left-radius:99rem;border-bottom-right-radius:99rem}.tablet\:radius-left-pill{border-bottom-left-radius:99rem;border-top-left-radius:99rem}.tablet\:display-block{display:block}.tablet\:display-flex{display:flex}.tablet\:display-none{display:none}.tablet\:display-inline{display:inline}.tablet\:display-inline-block{display:inline-block}.tablet\:display-inline-flex{display:inline-flex}.tablet\:display-table{display:table}.tablet\:display-table-cell{display:table-cell}.tablet\:display-table-row{display:table-row}.tablet\:font-mono-3xs{font-size:.77rem}.tablet\:font-mono-2xs{font-size:.83rem}.tablet\:font-mono-xs{font-size:.89rem}.tablet\:font-mono-sm{font-size:.95rem}.tablet\:font-mono-md{font-size:1.01rem}.tablet\:font-mono-lg{font-size:1.31rem}.tablet\:font-mono-xl{font-size:1.91rem}.tablet\:font-mono-2xl{font-size:2.38rem}.tablet\:font-mono-3xl{font-size:2.86rem}.tablet\:font-sans-3xs{font-size:.87rem}.tablet\:font-sans-2xs{font-size:.93rem}.tablet\:font-sans-xs{font-size:1rem}.tablet\:font-sans-sm{font-size:1.06rem}.tablet\:font-sans-md{font-size:1.13rem}.tablet\:font-sans-lg{font-size:1.46rem}.tablet\:font-sans-xl{font-size:2.13rem}.tablet\:font-sans-2xl{font-size:2.66rem}.tablet\:font-sans-3xl{font-size:3.19rem}.tablet\:font-serif-3xs{font-size:.79rem}.tablet\:font-serif-2xs{font-size:.85rem}.tablet\:font-serif-xs{font-size:.91rem}.tablet\:font-serif-sm{font-size:.98rem}.tablet\:font-serif-md{font-size:1.04rem}.tablet\:font-serif-lg{font-size:1.34rem}.tablet\:font-serif-xl{font-size:1.95rem}.tablet\:font-serif-2xl{font-size:2.44rem}.tablet\:font-serif-3xl{font-size:2.93rem}.tablet\:font-heading-3xs{font-size:.87rem}.tablet\:font-heading-2xs{font-size:.93rem}.tablet\:font-heading-xs{font-size:1rem}.tablet\:font-heading-sm{font-size:1.06rem}.tablet\:font-heading-md{font-size:1.13rem}.tablet\:font-heading-lg{font-size:1.46rem}.tablet\:font-heading-xl{font-size:2.13rem}.tablet\:font-heading-2xl{font-size:2.66rem}.tablet\:font-heading-3xl{font-size:3.19rem}.tablet\:font-body-3xs{font-size:.87rem}.tablet\:font-body-2xs{font-size:.93rem}.tablet\:font-body-xs{font-size:1rem}.tablet\:font-body-sm{font-size:1.06rem}.tablet\:font-body-md{font-size:1.13rem}.tablet\:font-body-lg{font-size:1.46rem}.tablet\:font-body-xl{font-size:2.13rem}.tablet\:font-body-2xl{font-size:2.66rem}.tablet\:font-body-3xl{font-size:3.19rem}.tablet\:font-code-3xs{font-size:.77rem}.tablet\:font-code-2xs{font-size:.83rem}.tablet\:font-code-xs{font-size:.89rem}.tablet\:font-code-sm{font-size:.95rem}.tablet\:font-code-md{font-size:1.01rem}.tablet\:font-code-lg{font-size:1.31rem}.tablet\:font-code-xl{font-size:1.91rem}.tablet\:font-code-2xl{font-size:2.38rem}.tablet\:font-code-3xl{font-size:2.86rem}.tablet\:font-alt-3xs{font-size:.79rem}.tablet\:font-alt-2xs{font-size:.85rem}.tablet\:font-alt-xs{font-size:.91rem}.tablet\:font-alt-sm{font-size:.98rem}.tablet\:font-alt-md{font-size:1.04rem}.tablet\:font-alt-lg{font-size:1.34rem}.tablet\:font-alt-xl{font-size:1.95rem}.tablet\:font-alt-2xl{font-size:2.44rem}.tablet\:font-alt-3xl{font-size:2.93rem}.tablet\:font-ui-3xs{font-size:.87rem}.tablet\:font-ui-2xs{font-size:.93rem}.tablet\:font-ui-xs{font-size:1rem}.tablet\:font-ui-sm{font-size:1.06rem}.tablet\:font-ui-md{font-size:1.13rem}.tablet\:font-ui-lg{font-size:1.46rem}.tablet\:font-ui-xl{font-size:2.13rem}.tablet\:font-ui-2xl{font-size:2.66rem}.tablet\:font-ui-3xl{font-size:3.19rem}.tablet\:text-light{font-weight:300}.tablet\:text-normal{font-weight:400}.tablet\:text-bold{font-weight:700}.tablet\:flex-justify-center{justify-content:center}.tablet\:flex-justify-start{justify-content:flex-start}.tablet\:flex-justify-end{justify-content:flex-end}.tablet\:flex-justify{justify-content:space-between}.tablet\:line-height-sans-1{line-height:.9}.tablet\:line-height-sans-2{line-height:1.1}.tablet\:line-height-sans-3{line-height:1.3}.tablet\:line-height-sans-4{line-height:1.4}.tablet\:line-height-sans-5{line-height:1.5}.tablet\:line-height-sans-6{line-height:1.6}.tablet\:line-height-serif-1{line-height:1}.tablet\:line-height-serif-2{line-height:1.2}.tablet\:line-height-serif-3{line-height:1.4}.tablet\:line-height-serif-4{line-height:1.5}.tablet\:line-height-serif-5{line-height:1.7}.tablet\:line-height-serif-6{line-height:1.8}.tablet\:line-height-mono-1{line-height:1}.tablet\:line-height-mono-2{line-height:1.3}.tablet\:line-height-mono-3{line-height:1.4}.tablet\:line-height-mono-4{line-height:1.6}.tablet\:line-height-mono-5{line-height:1.7}.tablet\:line-height-mono-6{line-height:1.8}.tablet\:line-height-heading-1{line-height:.9}.tablet\:line-height-heading-2{line-height:1.1}.tablet\:line-height-heading-3{line-height:1.3}.tablet\:line-height-heading-4{line-height:1.4}.tablet\:line-height-heading-5{line-height:1.5}.tablet\:line-height-heading-6{line-height:1.6}.tablet\:line-height-ui-1{line-height:.9}.tablet\:line-height-ui-2{line-height:1.1}.tablet\:line-height-ui-3{line-height:1.3}.tablet\:line-height-ui-4{line-height:1.4}.tablet\:line-height-ui-5{line-height:1.5}.tablet\:line-height-ui-6{line-height:1.6}.tablet\:line-height-body-1{line-height:.9}.tablet\:line-height-body-2{line-height:1.1}.tablet\:line-height-body-3{line-height:1.3}.tablet\:line-height-body-4{line-height:1.4}.tablet\:line-height-body-5{line-height:1.5}.tablet\:line-height-body-6{line-height:1.6}.tablet\:line-height-code-1{line-height:1}.tablet\:line-height-code-2{line-height:1.3}.tablet\:line-height-code-3{line-height:1.4}.tablet\:line-height-code-4{line-height:1.6}.tablet\:line-height-code-5{line-height:1.7}.tablet\:line-height-code-6{line-height:1.8}.tablet\:line-height-alt-1{line-height:1}.tablet\:line-height-alt-2{line-height:1.2}.tablet\:line-height-alt-3{line-height:1.4}.tablet\:line-height-alt-4{line-height:1.5}.tablet\:line-height-alt-5{line-height:1.7}.tablet\:line-height-alt-6{line-height:1.8}.tablet\:margin-neg-1px{margin:-1px}.tablet\:margin-neg-2px{margin:-2px}.tablet\:margin-neg-05{margin:-.25rem}.tablet\:margin-neg-1{margin:-.5rem}.tablet\:margin-neg-105{margin:-.75rem}.tablet\:margin-neg-2{margin:-1rem}.tablet\:margin-neg-205{margin:-1.25rem}.tablet\:margin-neg-3{margin:-1.5rem}.tablet\:margin-1px{margin:1px}.tablet\:margin-2px{margin:2px}.tablet\:margin-05{margin:.25rem}.tablet\:margin-1{margin:.5rem}.tablet\:margin-105{margin:.75rem}.tablet\:margin-2{margin:1rem}.tablet\:margin-205{margin:1.25rem}.tablet\:margin-3{margin:1.5rem}.tablet\:margin-4{margin:2rem}.tablet\:margin-5{margin:2.5rem}.tablet\:margin-6{margin:3rem}.tablet\:margin-7{margin:3.5rem}.tablet\:margin-8{margin:4rem}.tablet\:margin-9{margin:4.5rem}.tablet\:margin-10{margin:5rem}.tablet\:margin-15{margin:7.5rem}.tablet\:margin-05em{margin:.5em}.tablet\:margin-1em{margin:1em}.tablet\:margin-105em{margin:1.5em}.tablet\:margin-2em{margin:2em}.tablet\:margin-0{margin:0}.tablet\:margin-y-1px{margin-bottom:1px;margin-top:1px}.tablet\:margin-top-1px{margin-top:1px}.tablet\:margin-bottom-1px{margin-bottom:1px}.tablet\:margin-y-2px{margin-bottom:2px;margin-top:2px}.tablet\:margin-top-2px{margin-top:2px}.tablet\:margin-bottom-2px{margin-bottom:2px}.tablet\:margin-y-05{margin-bottom:.25rem;margin-top:.25rem}.tablet\:margin-top-05{margin-top:.25rem}.tablet\:margin-bottom-05{margin-bottom:.25rem}.tablet\:margin-y-1{margin-bottom:.5rem;margin-top:.5rem}.tablet\:margin-top-1{margin-top:.5rem}.tablet\:margin-bottom-1{margin-bottom:.5rem}.tablet\:margin-y-105{margin-bottom:.75rem;margin-top:.75rem}.tablet\:margin-top-105{margin-top:.75rem}.tablet\:margin-bottom-105{margin-bottom:.75rem}.tablet\:margin-y-2{margin-bottom:1rem;margin-top:1rem}.tablet\:margin-top-2{margin-top:1rem}.tablet\:margin-bottom-2{margin-bottom:1rem}.tablet\:margin-y-205{margin-bottom:1.25rem;margin-top:1.25rem}.tablet\:margin-top-205{margin-top:1.25rem}.tablet\:margin-bottom-205{margin-bottom:1.25rem}.tablet\:margin-y-3{margin-bottom:1.5rem;margin-top:1.5rem}.tablet\:margin-top-3{margin-top:1.5rem}.tablet\:margin-bottom-3{margin-bottom:1.5rem}.tablet\:margin-y-neg-1px{margin-bottom:-1px;margin-top:-1px}.tablet\:margin-top-neg-1px{margin-top:-1px}.tablet\:margin-bottom-neg-1px{margin-bottom:-1px}.tablet\:margin-y-neg-2px{margin-bottom:-2px;margin-top:-2px}.tablet\:margin-top-neg-2px{margin-top:-2px}.tablet\:margin-bottom-neg-2px{margin-bottom:-2px}.tablet\:margin-y-neg-05{margin-bottom:-.25rem;margin-top:-.25rem}.tablet\:margin-top-neg-05{margin-top:-.25rem}.tablet\:margin-bottom-neg-05{margin-bottom:-.25rem}.tablet\:margin-y-neg-1{margin-bottom:-.5rem;margin-top:-.5rem}.tablet\:margin-top-neg-1{margin-top:-.5rem}.tablet\:margin-bottom-neg-1{margin-bottom:-.5rem}.tablet\:margin-y-neg-105{margin-bottom:-.75rem;margin-top:-.75rem}.tablet\:margin-top-neg-105{margin-top:-.75rem}.tablet\:margin-bottom-neg-105{margin-bottom:-.75rem}.tablet\:margin-y-neg-2{margin-bottom:-1rem;margin-top:-1rem}.tablet\:margin-top-neg-2{margin-top:-1rem}.tablet\:margin-bottom-neg-2{margin-bottom:-1rem}.tablet\:margin-y-neg-205{margin-bottom:-1.25rem;margin-top:-1.25rem}.tablet\:margin-top-neg-205{margin-top:-1.25rem}.tablet\:margin-bottom-neg-205{margin-bottom:-1.25rem}.tablet\:margin-y-neg-3{margin-bottom:-1.5rem;margin-top:-1.5rem}.tablet\:margin-top-neg-3{margin-top:-1.5rem}.tablet\:margin-bottom-neg-3{margin-bottom:-1.5rem}.tablet\:margin-y-4{margin-bottom:2rem;margin-top:2rem}.tablet\:margin-top-4{margin-top:2rem}.tablet\:margin-bottom-4{margin-bottom:2rem}.tablet\:margin-y-5{margin-bottom:2.5rem;margin-top:2.5rem}.tablet\:margin-top-5{margin-top:2.5rem}.tablet\:margin-bottom-5{margin-bottom:2.5rem}.tablet\:margin-y-6{margin-bottom:3rem;margin-top:3rem}.tablet\:margin-top-6{margin-top:3rem}.tablet\:margin-bottom-6{margin-bottom:3rem}.tablet\:margin-y-7{margin-bottom:3.5rem;margin-top:3.5rem}.tablet\:margin-top-7{margin-top:3.5rem}.tablet\:margin-bottom-7{margin-bottom:3.5rem}.tablet\:margin-y-8{margin-bottom:4rem;margin-top:4rem}.tablet\:margin-top-8{margin-top:4rem}.tablet\:margin-bottom-8{margin-bottom:4rem}.tablet\:margin-y-9{margin-bottom:4.5rem;margin-top:4.5rem}.tablet\:margin-top-9{margin-top:4.5rem}.tablet\:margin-bottom-9{margin-bottom:4.5rem}.tablet\:margin-y-10{margin-bottom:5rem;margin-top:5rem}.tablet\:margin-top-10{margin-top:5rem}.tablet\:margin-bottom-10{margin-bottom:5rem}.tablet\:margin-y-15{margin-bottom:7.5rem;margin-top:7.5rem}.tablet\:margin-top-15{margin-top:7.5rem}.tablet\:margin-bottom-15{margin-bottom:7.5rem}.tablet\:margin-y-05em{margin-bottom:.5em;margin-top:.5em}.tablet\:margin-top-05em{margin-top:.5em}.tablet\:margin-bottom-05em{margin-bottom:.5em}.tablet\:margin-y-1em{margin-bottom:1em;margin-top:1em}.tablet\:margin-top-1em{margin-top:1em}.tablet\:margin-bottom-1em{margin-bottom:1em}.tablet\:margin-y-105em{margin-bottom:1.5em;margin-top:1.5em}.tablet\:margin-top-105em{margin-top:1.5em}.tablet\:margin-bottom-105em{margin-bottom:1.5em}.tablet\:margin-y-2em{margin-bottom:2em;margin-top:2em}.tablet\:margin-top-2em{margin-top:2em}.tablet\:margin-bottom-2em{margin-bottom:2em}.tablet\:margin-y-0{margin-bottom:0;margin-top:0}.tablet\:margin-top-0{margin-top:0}.tablet\:margin-bottom-0{margin-bottom:0}.tablet\:margin-y-auto{margin-bottom:auto;margin-top:auto}.tablet\:margin-top-auto{margin-top:auto}.tablet\:margin-bottom-auto{margin-bottom:auto}.tablet\:margin-x-1px{margin-left:1px;margin-right:1px}.tablet\:margin-right-1px{margin-right:1px}.tablet\:margin-left-1px{margin-left:1px}.tablet\:margin-x-2px{margin-left:2px;margin-right:2px}.tablet\:margin-right-2px{margin-right:2px}.tablet\:margin-left-2px{margin-left:2px}.tablet\:margin-x-05{margin-left:.25rem;margin-right:.25rem}.tablet\:margin-right-05{margin-right:.25rem}.tablet\:margin-left-05{margin-left:.25rem}.tablet\:margin-x-1{margin-left:.5rem;margin-right:.5rem}.tablet\:margin-right-1{margin-right:.5rem}.tablet\:margin-left-1{margin-left:.5rem}.tablet\:margin-x-105{margin-left:.75rem;margin-right:.75rem}.tablet\:margin-right-105{margin-right:.75rem}.tablet\:margin-left-105{margin-left:.75rem}.tablet\:margin-x-2{margin-left:1rem;margin-right:1rem}.tablet\:margin-right-2{margin-right:1rem}.tablet\:margin-left-2{margin-left:1rem}.tablet\:margin-x-205{margin-left:1.25rem;margin-right:1.25rem}.tablet\:margin-right-205{margin-right:1.25rem}.tablet\:margin-left-205{margin-left:1.25rem}.tablet\:margin-x-3{margin-left:1.5rem;margin-right:1.5rem}.tablet\:margin-right-3{margin-right:1.5rem}.tablet\:margin-left-3{margin-left:1.5rem}.tablet\:margin-x-neg-1px{margin-left:-1px;margin-right:-1px}.tablet\:margin-right-neg-1px{margin-right:-1px}.tablet\:margin-left-neg-1px{margin-left:-1px}.tablet\:margin-x-neg-2px{margin-left:-2px;margin-right:-2px}.tablet\:margin-right-neg-2px{margin-right:-2px}.tablet\:margin-left-neg-2px{margin-left:-2px}.tablet\:margin-x-neg-05{margin-left:-.25rem;margin-right:-.25rem}.tablet\:margin-right-neg-05{margin-right:-.25rem}.tablet\:margin-left-neg-05{margin-left:-.25rem}.tablet\:margin-x-neg-1{margin-left:-.5rem;margin-right:-.5rem}.tablet\:margin-right-neg-1{margin-right:-.5rem}.tablet\:margin-left-neg-1{margin-left:-.5rem}.tablet\:margin-x-neg-105{margin-left:-.75rem;margin-right:-.75rem}.tablet\:margin-right-neg-105{margin-right:-.75rem}.tablet\:margin-left-neg-105{margin-left:-.75rem}.tablet\:margin-x-neg-2{margin-left:-1rem;margin-right:-1rem}.tablet\:margin-right-neg-2{margin-right:-1rem}.tablet\:margin-left-neg-2{margin-left:-1rem}.tablet\:margin-x-neg-205{margin-left:-1.25rem;margin-right:-1.25rem}.tablet\:margin-right-neg-205{margin-right:-1.25rem}.tablet\:margin-left-neg-205{margin-left:-1.25rem}.tablet\:margin-x-neg-3{margin-left:-1.5rem;margin-right:-1.5rem}.tablet\:margin-right-neg-3{margin-right:-1.5rem}.tablet\:margin-left-neg-3{margin-left:-1.5rem}.tablet\:margin-x-4{margin-left:2rem;margin-right:2rem}.tablet\:margin-right-4{margin-right:2rem}.tablet\:margin-left-4{margin-left:2rem}.tablet\:margin-x-5{margin-left:2.5rem;margin-right:2.5rem}.tablet\:margin-right-5{margin-right:2.5rem}.tablet\:margin-left-5{margin-left:2.5rem}.tablet\:margin-x-6{margin-left:3rem;margin-right:3rem}.tablet\:margin-right-6{margin-right:3rem}.tablet\:margin-left-6{margin-left:3rem}.tablet\:margin-x-7{margin-left:3.5rem;margin-right:3.5rem}.tablet\:margin-right-7{margin-right:3.5rem}.tablet\:margin-left-7{margin-left:3.5rem}.tablet\:margin-x-8{margin-left:4rem;margin-right:4rem}.tablet\:margin-right-8{margin-right:4rem}.tablet\:margin-left-8{margin-left:4rem}.tablet\:margin-x-9{margin-left:4.5rem;margin-right:4.5rem}.tablet\:margin-right-9{margin-right:4.5rem}.tablet\:margin-left-9{margin-left:4.5rem}.tablet\:margin-x-10{margin-left:5rem;margin-right:5rem}.tablet\:margin-right-10{margin-right:5rem}.tablet\:margin-left-10{margin-left:5rem}.tablet\:margin-x-15{margin-left:7.5rem;margin-right:7.5rem}.tablet\:margin-right-15{margin-right:7.5rem}.tablet\:margin-left-15{margin-left:7.5rem}.tablet\:margin-x-card{margin-left:10rem;margin-right:10rem}.tablet\:margin-right-card{margin-right:10rem}.tablet\:margin-left-card{margin-left:10rem}.tablet\:margin-x-card-lg{margin-left:15rem;margin-right:15rem}.tablet\:margin-right-card-lg{margin-right:15rem}.tablet\:margin-left-card-lg{margin-left:15rem}.tablet\:margin-x-mobile{margin-left:20rem;margin-right:20rem}.tablet\:margin-right-mobile{margin-right:20rem}.tablet\:margin-left-mobile{margin-left:20rem}.tablet\:margin-x-05em{margin-left:.5em;margin-right:.5em}.tablet\:margin-right-05em{margin-right:.5em}.tablet\:margin-left-05em{margin-left:.5em}.tablet\:margin-x-1em{margin-left:1em;margin-right:1em}.tablet\:margin-right-1em{margin-right:1em}.tablet\:margin-left-1em{margin-left:1em}.tablet\:margin-x-105em{margin-left:1.5em;margin-right:1.5em}.tablet\:margin-right-105em{margin-right:1.5em}.tablet\:margin-left-105em{margin-left:1.5em}.tablet\:margin-x-2em{margin-left:2em;margin-right:2em}.tablet\:margin-right-2em{margin-right:2em}.tablet\:margin-left-2em{margin-left:2em}.tablet\:margin-x-0{margin-left:0;margin-right:0}.tablet\:margin-right-0{margin-right:0}.tablet\:margin-left-0{margin-left:0}.tablet\:margin-x-auto{margin-left:auto;margin-right:auto}.tablet\:margin-right-auto{margin-right:auto}.tablet\:margin-left-auto{margin-left:auto}.tablet\:measure-1{max-width:44ex}.tablet\:measure-2{max-width:60ex}.tablet\:measure-3{max-width:64ex}.tablet\:measure-4{max-width:68ex}.tablet\:measure-5{max-width:72ex}.tablet\:measure-6{max-width:88ex}.tablet\:measure-none{max-width:none}.tablet\:order-first{order:-1}.tablet\:order-last{order:999}.tablet\:order-0,.tablet\:order-initial{order:0}.tablet\:order-1{order:1}.tablet\:order-2{order:2}.tablet\:order-3{order:3}.tablet\:order-4{order:4}.tablet\:order-5{order:5}.tablet\:order-6{order:6}.tablet\:order-7{order:7}.tablet\:order-8{order:8}.tablet\:order-9{order:9}.tablet\:order-10{order:10}.tablet\:order-11{order:11}.tablet\:padding-1px{padding:1px}.tablet\:padding-y-1px{padding-bottom:1px;padding-top:1px}.tablet\:padding-x-1px{padding-left:1px;padding-right:1px}.tablet\:padding-top-1px{padding-top:1px}.tablet\:padding-right-1px{padding-right:1px}.tablet\:padding-bottom-1px{padding-bottom:1px}.tablet\:padding-left-1px{padding-left:1px}.tablet\:padding-2px{padding:2px}.tablet\:padding-y-2px{padding-bottom:2px;padding-top:2px}.tablet\:padding-x-2px{padding-left:2px;padding-right:2px}.tablet\:padding-top-2px{padding-top:2px}.tablet\:padding-right-2px{padding-right:2px}.tablet\:padding-bottom-2px{padding-bottom:2px}.tablet\:padding-left-2px{padding-left:2px}.tablet\:padding-05{padding:.25rem}.tablet\:padding-y-05{padding-bottom:.25rem;padding-top:.25rem}.tablet\:padding-x-05{padding-left:.25rem;padding-right:.25rem}.tablet\:padding-top-05{padding-top:.25rem}.tablet\:padding-right-05{padding-right:.25rem}.tablet\:padding-bottom-05{padding-bottom:.25rem}.tablet\:padding-left-05{padding-left:.25rem}.tablet\:padding-1{padding:.5rem}.tablet\:padding-y-1{padding-bottom:.5rem;padding-top:.5rem}.tablet\:padding-x-1{padding-left:.5rem;padding-right:.5rem}.tablet\:padding-top-1{padding-top:.5rem}.tablet\:padding-right-1{padding-right:.5rem}.tablet\:padding-bottom-1{padding-bottom:.5rem}.tablet\:padding-left-1{padding-left:.5rem}.tablet\:padding-105{padding:.75rem}.tablet\:padding-y-105{padding-bottom:.75rem;padding-top:.75rem}.tablet\:padding-x-105{padding-left:.75rem;padding-right:.75rem}.tablet\:padding-top-105{padding-top:.75rem}.tablet\:padding-right-105{padding-right:.75rem}.tablet\:padding-bottom-105{padding-bottom:.75rem}.tablet\:padding-left-105{padding-left:.75rem}.tablet\:padding-2{padding:1rem}.tablet\:padding-y-2{padding-bottom:1rem;padding-top:1rem}.tablet\:padding-x-2{padding-left:1rem;padding-right:1rem}.tablet\:padding-top-2{padding-top:1rem}.tablet\:padding-right-2{padding-right:1rem}.tablet\:padding-bottom-2{padding-bottom:1rem}.tablet\:padding-left-2{padding-left:1rem}.tablet\:padding-205{padding:1.25rem}.tablet\:padding-y-205{padding-bottom:1.25rem;padding-top:1.25rem}.tablet\:padding-x-205{padding-left:1.25rem;padding-right:1.25rem}.tablet\:padding-top-205{padding-top:1.25rem}.tablet\:padding-right-205{padding-right:1.25rem}.tablet\:padding-bottom-205{padding-bottom:1.25rem}.tablet\:padding-left-205{padding-left:1.25rem}.tablet\:padding-3{padding:1.5rem}.tablet\:padding-y-3{padding-bottom:1.5rem;padding-top:1.5rem}.tablet\:padding-x-3{padding-left:1.5rem;padding-right:1.5rem}.tablet\:padding-top-3{padding-top:1.5rem}.tablet\:padding-right-3{padding-right:1.5rem}.tablet\:padding-bottom-3{padding-bottom:1.5rem}.tablet\:padding-left-3{padding-left:1.5rem}.tablet\:padding-4{padding:2rem}.tablet\:padding-y-4{padding-bottom:2rem;padding-top:2rem}.tablet\:padding-x-4{padding-left:2rem;padding-right:2rem}.tablet\:padding-top-4{padding-top:2rem}.tablet\:padding-right-4{padding-right:2rem}.tablet\:padding-bottom-4{padding-bottom:2rem}.tablet\:padding-left-4{padding-left:2rem}.tablet\:padding-5{padding:2.5rem}.tablet\:padding-y-5{padding-bottom:2.5rem;padding-top:2.5rem}.tablet\:padding-x-5{padding-left:2.5rem;padding-right:2.5rem}.tablet\:padding-top-5{padding-top:2.5rem}.tablet\:padding-right-5{padding-right:2.5rem}.tablet\:padding-bottom-5{padding-bottom:2.5rem}.tablet\:padding-left-5{padding-left:2.5rem}.tablet\:padding-6{padding:3rem}.tablet\:padding-y-6{padding-bottom:3rem;padding-top:3rem}.tablet\:padding-x-6{padding-left:3rem;padding-right:3rem}.tablet\:padding-top-6{padding-top:3rem}.tablet\:padding-right-6{padding-right:3rem}.tablet\:padding-bottom-6{padding-bottom:3rem}.tablet\:padding-left-6{padding-left:3rem}.tablet\:padding-7{padding:3.5rem}.tablet\:padding-y-7{padding-bottom:3.5rem;padding-top:3.5rem}.tablet\:padding-x-7{padding-left:3.5rem;padding-right:3.5rem}.tablet\:padding-top-7{padding-top:3.5rem}.tablet\:padding-right-7{padding-right:3.5rem}.tablet\:padding-bottom-7{padding-bottom:3.5rem}.tablet\:padding-left-7{padding-left:3.5rem}.tablet\:padding-8{padding:4rem}.tablet\:padding-y-8{padding-bottom:4rem;padding-top:4rem}.tablet\:padding-x-8{padding-left:4rem;padding-right:4rem}.tablet\:padding-top-8{padding-top:4rem}.tablet\:padding-right-8{padding-right:4rem}.tablet\:padding-bottom-8{padding-bottom:4rem}.tablet\:padding-left-8{padding-left:4rem}.tablet\:padding-9{padding:4.5rem}.tablet\:padding-y-9{padding-bottom:4.5rem;padding-top:4.5rem}.tablet\:padding-x-9{padding-left:4.5rem;padding-right:4.5rem}.tablet\:padding-top-9{padding-top:4.5rem}.tablet\:padding-right-9{padding-right:4.5rem}.tablet\:padding-bottom-9{padding-bottom:4.5rem}.tablet\:padding-left-9{padding-left:4.5rem}.tablet\:padding-10{padding:5rem}.tablet\:padding-y-10{padding-bottom:5rem;padding-top:5rem}.tablet\:padding-x-10{padding-left:5rem;padding-right:5rem}.tablet\:padding-top-10{padding-top:5rem}.tablet\:padding-right-10{padding-right:5rem}.tablet\:padding-bottom-10{padding-bottom:5rem}.tablet\:padding-left-10{padding-left:5rem}.tablet\:padding-15{padding:7.5rem}.tablet\:padding-y-15{padding-bottom:7.5rem;padding-top:7.5rem}.tablet\:padding-x-15{padding-left:7.5rem;padding-right:7.5rem}.tablet\:padding-top-15{padding-top:7.5rem}.tablet\:padding-right-15{padding-right:7.5rem}.tablet\:padding-bottom-15{padding-bottom:7.5rem}.tablet\:padding-left-15{padding-left:7.5rem}.tablet\:padding-0{padding:0}.tablet\:padding-y-0{padding-bottom:0;padding-top:0}.tablet\:padding-x-0{padding-left:0;padding-right:0}.tablet\:padding-top-0{padding-top:0}.tablet\:padding-right-0{padding-right:0}.tablet\:padding-bottom-0{padding-bottom:0}.tablet\:padding-left-0{padding-left:0}.tablet\:width-1px{width:1px}.tablet\:width-2px{width:2px}.tablet\:width-05{width:.25rem}.tablet\:width-1{width:.5rem}.tablet\:width-105{width:.75rem}.tablet\:width-2{width:1rem}.tablet\:width-205{width:1.25rem}.tablet\:width-3{width:1.5rem}.tablet\:width-4{width:2rem}.tablet\:width-5{width:2.5rem}.tablet\:width-6{width:3rem}.tablet\:width-7{width:3.5rem}.tablet\:width-8{width:4rem}.tablet\:width-9{width:4.5rem}.tablet\:width-10{width:5rem}.tablet\:width-15{width:7.5rem}.tablet\:width-card{width:10rem}.tablet\:width-card-lg{width:15rem}.tablet\:width-mobile{width:20rem}.tablet\:width-mobile-lg{width:30rem}.tablet\:width-tablet{width:40rem}.tablet\:width-tablet-lg{width:55rem}.tablet\:width-desktop{width:64rem}.tablet\:width-desktop-lg{width:75rem}.tablet\:width-widescreen{width:87.5rem}.tablet\:width-0{width:0}.tablet\:width-full{width:100%}.tablet\:width-auto{width:auto}}@media (min-width:64em){.desktop\:border-1px,.desktop\:hover\:border-1px:hover{border:1px solid}.desktop\:border-y-1px,.desktop\:hover\:border-y-1px:hover{border-bottom:1px solid;border-top:1px solid}.desktop\:border-x-1px,.desktop\:hover\:border-x-1px:hover{border-left:1px solid;border-right:1px solid}.desktop\:border-top-1px,.desktop\:hover\:border-top-1px:hover{border-top:1px solid}.desktop\:border-right-1px,.desktop\:hover\:border-right-1px:hover{border-right:1px solid}.desktop\:border-bottom-1px,.desktop\:hover\:border-bottom-1px:hover{border-bottom:1px solid}.desktop\:border-left-1px,.desktop\:hover\:border-left-1px:hover{border-left:1px solid}.desktop\:border-2px,.desktop\:hover\:border-2px:hover{border:2px solid}.desktop\:border-y-2px,.desktop\:hover\:border-y-2px:hover{border-bottom:2px solid;border-top:2px solid}.desktop\:border-x-2px,.desktop\:hover\:border-x-2px:hover{border-left:2px solid;border-right:2px solid}.desktop\:border-top-2px,.desktop\:hover\:border-top-2px:hover{border-top:2px solid}.desktop\:border-right-2px,.desktop\:hover\:border-right-2px:hover{border-right:2px solid}.desktop\:border-bottom-2px,.desktop\:hover\:border-bottom-2px:hover{border-bottom:2px solid}.desktop\:border-left-2px,.desktop\:hover\:border-left-2px:hover{border-left:2px solid}.desktop\:border-05,.desktop\:hover\:border-05:hover{border:.25rem solid}.desktop\:border-y-05,.desktop\:hover\:border-y-05:hover{border-bottom:.25rem solid;border-top:.25rem solid}.desktop\:border-x-05,.desktop\:hover\:border-x-05:hover{border-left:.25rem solid;border-right:.25rem solid}.desktop\:border-top-05,.desktop\:hover\:border-top-05:hover{border-top:.25rem solid}.desktop\:border-right-05,.desktop\:hover\:border-right-05:hover{border-right:.25rem solid}.desktop\:border-bottom-05,.desktop\:hover\:border-bottom-05:hover{border-bottom:.25rem solid}.desktop\:border-left-05,.desktop\:hover\:border-left-05:hover{border-left:.25rem solid}.desktop\:border-1,.desktop\:hover\:border-1:hover{border:.5rem solid}.desktop\:border-y-1,.desktop\:hover\:border-y-1:hover{border-bottom:.5rem solid;border-top:.5rem solid}.desktop\:border-x-1,.desktop\:hover\:border-x-1:hover{border-left:.5rem solid;border-right:.5rem solid}.desktop\:border-top-1,.desktop\:hover\:border-top-1:hover{border-top:.5rem solid}.desktop\:border-right-1,.desktop\:hover\:border-right-1:hover{border-right:.5rem solid}.desktop\:border-bottom-1,.desktop\:hover\:border-bottom-1:hover{border-bottom:.5rem solid}.desktop\:border-left-1,.desktop\:hover\:border-left-1:hover{border-left:.5rem solid}.desktop\:border-105,.desktop\:hover\:border-105:hover{border:.75rem solid}.desktop\:border-y-105,.desktop\:hover\:border-y-105:hover{border-bottom:.75rem solid;border-top:.75rem solid}.desktop\:border-x-105,.desktop\:hover\:border-x-105:hover{border-left:.75rem solid;border-right:.75rem solid}.desktop\:border-top-105,.desktop\:hover\:border-top-105:hover{border-top:.75rem solid}.desktop\:border-right-105,.desktop\:hover\:border-right-105:hover{border-right:.75rem solid}.desktop\:border-bottom-105,.desktop\:hover\:border-bottom-105:hover{border-bottom:.75rem solid}.desktop\:border-left-105,.desktop\:hover\:border-left-105:hover{border-left:.75rem solid}.desktop\:border-2,.desktop\:hover\:border-2:hover{border:1rem solid}.desktop\:border-y-2,.desktop\:hover\:border-y-2:hover{border-bottom:1rem solid;border-top:1rem solid}.desktop\:border-x-2,.desktop\:hover\:border-x-2:hover{border-left:1rem solid;border-right:1rem solid}.desktop\:border-top-2,.desktop\:hover\:border-top-2:hover{border-top:1rem solid}.desktop\:border-right-2,.desktop\:hover\:border-right-2:hover{border-right:1rem solid}.desktop\:border-bottom-2,.desktop\:hover\:border-bottom-2:hover{border-bottom:1rem solid}.desktop\:border-left-2,.desktop\:hover\:border-left-2:hover{border-left:1rem solid}.desktop\:border-205,.desktop\:hover\:border-205:hover{border:1.25rem solid}.desktop\:border-y-205,.desktop\:hover\:border-y-205:hover{border-bottom:1.25rem solid;border-top:1.25rem solid}.desktop\:border-x-205,.desktop\:hover\:border-x-205:hover{border-left:1.25rem solid;border-right:1.25rem solid}.desktop\:border-top-205,.desktop\:hover\:border-top-205:hover{border-top:1.25rem solid}.desktop\:border-right-205,.desktop\:hover\:border-right-205:hover{border-right:1.25rem solid}.desktop\:border-bottom-205,.desktop\:hover\:border-bottom-205:hover{border-bottom:1.25rem solid}.desktop\:border-left-205,.desktop\:hover\:border-left-205:hover{border-left:1.25rem solid}.desktop\:border-3,.desktop\:hover\:border-3:hover{border:1.5rem solid}.desktop\:border-y-3,.desktop\:hover\:border-y-3:hover{border-bottom:1.5rem solid;border-top:1.5rem solid}.desktop\:border-x-3,.desktop\:hover\:border-x-3:hover{border-left:1.5rem solid;border-right:1.5rem solid}.desktop\:border-top-3,.desktop\:hover\:border-top-3:hover{border-top:1.5rem solid}.desktop\:border-right-3,.desktop\:hover\:border-right-3:hover{border-right:1.5rem solid}.desktop\:border-bottom-3,.desktop\:hover\:border-bottom-3:hover{border-bottom:1.5rem solid}.desktop\:border-left-3,.desktop\:hover\:border-left-3:hover{border-left:1.5rem solid}.desktop\:border-0,.desktop\:hover\:border-0:hover{border:0 solid}.desktop\:border-y-0,.desktop\:hover\:border-y-0:hover{border-bottom:0 solid;border-top:0 solid}.desktop\:border-x-0,.desktop\:hover\:border-x-0:hover{border-left:0 solid;border-right:0 solid}.desktop\:border-top-0,.desktop\:hover\:border-top-0:hover{border-top:0 solid}.desktop\:border-right-0,.desktop\:hover\:border-right-0:hover{border-right:0 solid}.desktop\:border-bottom-0,.desktop\:hover\:border-bottom-0:hover{border-bottom:0 solid}.desktop\:border-left-0,.desktop\:hover\:border-left-0:hover{border-left:0 solid}.desktop\:border,.desktop\:hover\:border:hover{border:1px solid}.desktop\:border-y,.desktop\:hover\:border-y:hover{border-bottom:1px solid;border-top:1px solid}.desktop\:border-x,.desktop\:hover\:border-x:hover{border-left:1px solid;border-right:1px solid}.desktop\:border-top,.desktop\:hover\:border-top:hover{border-top:1px solid}.desktop\:border-right,.desktop\:hover\:border-right:hover{border-right:1px solid}.desktop\:border-bottom,.desktop\:hover\:border-bottom:hover{border-bottom:1px solid}.desktop\:border-left,.desktop\:hover\:border-left:hover{border-left:1px solid}.desktop\:border-transparent,.desktop\:hover\:border-transparent:hover{border-color:transparent}.desktop\:border-black,.desktop\:hover\:border-black:hover{border-color:#000}.desktop\:border-white,.desktop\:hover\:border-white:hover{border-color:#fff}.desktop\:border-red,.desktop\:hover\:border-red:hover{border-color:#e52207}.desktop\:border-orange,.desktop\:hover\:border-orange:hover{border-color:#e66f0e}.desktop\:border-gold,.desktop\:hover\:border-gold:hover{border-color:#ffbe2e}.desktop\:border-yellow,.desktop\:hover\:border-yellow:hover{border-color:#fee685}.desktop\:border-green,.desktop\:hover\:border-green:hover{border-color:#538200}.desktop\:border-mint,.desktop\:hover\:border-mint:hover{border-color:#04c585}.desktop\:border-cyan,.desktop\:hover\:border-cyan:hover{border-color:#009ec1}.desktop\:border-blue,.desktop\:hover\:border-blue:hover{border-color:#0076d6}.desktop\:border-indigo,.desktop\:hover\:border-indigo:hover{border-color:#676cc8}.desktop\:border-violet,.desktop\:hover\:border-violet:hover{border-color:#8168b3}.desktop\:border-magenta,.desktop\:hover\:border-magenta:hover{border-color:#d72d79}.desktop\:border-gray-5,.desktop\:hover\:border-gray-5:hover{border-color:#f0f0f0}.desktop\:border-gray-10,.desktop\:hover\:border-gray-10:hover{border-color:#e6e6e6}.desktop\:border-gray-30,.desktop\:hover\:border-gray-30:hover{border-color:#adadad}.desktop\:border-gray-50,.desktop\:hover\:border-gray-50:hover{border-color:#757575}.desktop\:border-gray-70,.desktop\:hover\:border-gray-70:hover{border-color:#454545}.desktop\:border-gray-90,.desktop\:hover\:border-gray-90:hover{border-color:#1b1b1b}.desktop\:border-base-lightest,.desktop\:hover\:border-base-lightest:hover{border-color:#f0f0f0}.desktop\:border-base-lighter,.desktop\:hover\:border-base-lighter:hover{border-color:#dfe1e2}.desktop\:border-base-light,.desktop\:hover\:border-base-light:hover{border-color:#a9aeb1}.desktop\:border-base,.desktop\:hover\:border-base:hover{border-color:#71767a}.desktop\:border-base-dark,.desktop\:hover\:border-base-dark:hover{border-color:#565c65}.desktop\:border-base-darker,.desktop\:hover\:border-base-darker:hover{border-color:#3d4551}.desktop\:border-base-darkest,.desktop\:border-ink,.desktop\:hover\:border-base-darkest:hover,.desktop\:hover\:border-ink:hover{border-color:#1b1b1b}.desktop\:border-primary-lighter,.desktop\:hover\:border-primary-lighter:hover{border-color:#d9e8f6}.desktop\:border-primary-light,.desktop\:hover\:border-primary-light:hover{border-color:#73b3e7}.desktop\:border-primary,.desktop\:hover\:border-primary:hover{border-color:#005ea2}.desktop\:border-primary-vivid,.desktop\:hover\:border-primary-vivid:hover{border-color:#0050d8}.desktop\:border-primary-dark,.desktop\:hover\:border-primary-dark:hover{border-color:#1a4480}.desktop\:border-primary-darker,.desktop\:hover\:border-primary-darker:hover{border-color:#162e51}.desktop\:border-secondary-lighter,.desktop\:hover\:border-secondary-lighter:hover{border-color:#f3e1e4}.desktop\:border-secondary-light,.desktop\:hover\:border-secondary-light:hover{border-color:#f2938c}.desktop\:border-secondary,.desktop\:hover\:border-secondary:hover{border-color:#d83933}.desktop\:border-secondary-vivid,.desktop\:hover\:border-secondary-vivid:hover{border-color:#e41d3d}.desktop\:border-secondary-dark,.desktop\:hover\:border-secondary-dark:hover{border-color:#b50909}.desktop\:border-secondary-darker,.desktop\:hover\:border-secondary-darker:hover{border-color:#8b0a03}.desktop\:border-accent-warm-darker,.desktop\:hover\:border-accent-warm-darker:hover{border-color:#775540}.desktop\:border-accent-warm-dark,.desktop\:hover\:border-accent-warm-dark:hover{border-color:#c05600}.desktop\:border-accent-warm,.desktop\:hover\:border-accent-warm:hover{border-color:#fa9441}.desktop\:border-accent-warm-light,.desktop\:hover\:border-accent-warm-light:hover{border-color:#ffbc78}.desktop\:border-accent-warm-lighter,.desktop\:hover\:border-accent-warm-lighter:hover{border-color:#f2e4d4}.desktop\:border-accent-cool-darker,.desktop\:hover\:border-accent-cool-darker:hover{border-color:#07648d}.desktop\:border-accent-cool-dark,.desktop\:hover\:border-accent-cool-dark:hover{border-color:#28a0cb}.desktop\:border-accent-cool,.desktop\:hover\:border-accent-cool:hover{border-color:#00bde3}.desktop\:border-accent-cool-light,.desktop\:hover\:border-accent-cool-light:hover{border-color:#97d4ea}.desktop\:border-accent-cool-lighter,.desktop\:hover\:border-accent-cool-lighter:hover{border-color:#e1f3f8}.desktop\:radius-0{border-radius:0}.desktop\:radius-top-0{border-top-left-radius:0;border-top-right-radius:0}.desktop\:radius-right-0{border-bottom-right-radius:0;border-top-right-radius:0}.desktop\:radius-bottom-0{border-bottom-left-radius:0;border-bottom-right-radius:0}.desktop\:radius-left-0{border-bottom-left-radius:0;border-top-left-radius:0}.desktop\:radius-none{border-radius:0}.desktop\:radius-top-none{border-top-left-radius:0;border-top-right-radius:0}.desktop\:radius-right-none{border-bottom-right-radius:0;border-top-right-radius:0}.desktop\:radius-bottom-none{border-bottom-left-radius:0;border-bottom-right-radius:0}.desktop\:radius-left-none{border-bottom-left-radius:0;border-top-left-radius:0}.desktop\:radius-sm{border-radius:2px}.desktop\:radius-top-sm{border-top-left-radius:2px;border-top-right-radius:2px}.desktop\:radius-right-sm{border-bottom-right-radius:2px;border-top-right-radius:2px}.desktop\:radius-bottom-sm{border-bottom-left-radius:2px;border-bottom-right-radius:2px}.desktop\:radius-left-sm{border-bottom-left-radius:2px;border-top-left-radius:2px}.desktop\:radius-md{border-radius:.25rem}.desktop\:radius-top-md{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.desktop\:radius-right-md{border-bottom-right-radius:.25rem;border-top-right-radius:.25rem}.desktop\:radius-bottom-md{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.desktop\:radius-left-md{border-bottom-left-radius:.25rem;border-top-left-radius:.25rem}.desktop\:radius-lg{border-radius:.5rem}.desktop\:radius-top-lg{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.desktop\:radius-right-lg{border-bottom-right-radius:.5rem;border-top-right-radius:.5rem}.desktop\:radius-bottom-lg{border-bottom-left-radius:.5rem;border-bottom-right-radius:.5rem}.desktop\:radius-left-lg{border-bottom-left-radius:.5rem;border-top-left-radius:.5rem}.desktop\:radius-pill{border-radius:99rem}.desktop\:radius-top-pill{border-top-left-radius:99rem;border-top-right-radius:99rem}.desktop\:radius-right-pill{border-bottom-right-radius:99rem;border-top-right-radius:99rem}.desktop\:radius-bottom-pill{border-bottom-left-radius:99rem;border-bottom-right-radius:99rem}.desktop\:radius-left-pill{border-bottom-left-radius:99rem;border-top-left-radius:99rem}.desktop\:display-block{display:block}.desktop\:display-flex{display:flex}.desktop\:display-none{display:none}.desktop\:display-inline{display:inline}.desktop\:display-inline-block{display:inline-block}.desktop\:display-inline-flex{display:inline-flex}.desktop\:display-table{display:table}.desktop\:display-table-cell{display:table-cell}.desktop\:display-table-row{display:table-row}.desktop\:font-mono-3xs{font-size:.77rem}.desktop\:font-mono-2xs{font-size:.83rem}.desktop\:font-mono-xs{font-size:.89rem}.desktop\:font-mono-sm{font-size:.95rem}.desktop\:font-mono-md{font-size:1.01rem}.desktop\:font-mono-lg{font-size:1.31rem}.desktop\:font-mono-xl{font-size:1.91rem}.desktop\:font-mono-2xl{font-size:2.38rem}.desktop\:font-mono-3xl{font-size:2.86rem}.desktop\:font-sans-3xs{font-size:.87rem}.desktop\:font-sans-2xs{font-size:.93rem}.desktop\:font-sans-xs{font-size:1rem}.desktop\:font-sans-sm{font-size:1.06rem}.desktop\:font-sans-md{font-size:1.13rem}.desktop\:font-sans-lg{font-size:1.46rem}.desktop\:font-sans-xl{font-size:2.13rem}.desktop\:font-sans-2xl{font-size:2.66rem}.desktop\:font-sans-3xl{font-size:3.19rem}.desktop\:font-serif-3xs{font-size:.79rem}.desktop\:font-serif-2xs{font-size:.85rem}.desktop\:font-serif-xs{font-size:.91rem}.desktop\:font-serif-sm{font-size:.98rem}.desktop\:font-serif-md{font-size:1.04rem}.desktop\:font-serif-lg{font-size:1.34rem}.desktop\:font-serif-xl{font-size:1.95rem}.desktop\:font-serif-2xl{font-size:2.44rem}.desktop\:font-serif-3xl{font-size:2.93rem}.desktop\:font-heading-3xs{font-size:.87rem}.desktop\:font-heading-2xs{font-size:.93rem}.desktop\:font-heading-xs{font-size:1rem}.desktop\:font-heading-sm{font-size:1.06rem}.desktop\:font-heading-md{font-size:1.13rem}.desktop\:font-heading-lg{font-size:1.46rem}.desktop\:font-heading-xl{font-size:2.13rem}.desktop\:font-heading-2xl{font-size:2.66rem}.desktop\:font-heading-3xl{font-size:3.19rem}.desktop\:font-body-3xs{font-size:.87rem}.desktop\:font-body-2xs{font-size:.93rem}.desktop\:font-body-xs{font-size:1rem}.desktop\:font-body-sm{font-size:1.06rem}.desktop\:font-body-md{font-size:1.13rem}.desktop\:font-body-lg{font-size:1.46rem}.desktop\:font-body-xl{font-size:2.13rem}.desktop\:font-body-2xl{font-size:2.66rem}.desktop\:font-body-3xl{font-size:3.19rem}.desktop\:font-code-3xs{font-size:.77rem}.desktop\:font-code-2xs{font-size:.83rem}.desktop\:font-code-xs{font-size:.89rem}.desktop\:font-code-sm{font-size:.95rem}.desktop\:font-code-md{font-size:1.01rem}.desktop\:font-code-lg{font-size:1.31rem}.desktop\:font-code-xl{font-size:1.91rem}.desktop\:font-code-2xl{font-size:2.38rem}.desktop\:font-code-3xl{font-size:2.86rem}.desktop\:font-alt-3xs{font-size:.79rem}.desktop\:font-alt-2xs{font-size:.85rem}.desktop\:font-alt-xs{font-size:.91rem}.desktop\:font-alt-sm{font-size:.98rem}.desktop\:font-alt-md{font-size:1.04rem}.desktop\:font-alt-lg{font-size:1.34rem}.desktop\:font-alt-xl{font-size:1.95rem}.desktop\:font-alt-2xl{font-size:2.44rem}.desktop\:font-alt-3xl{font-size:2.93rem}.desktop\:font-ui-3xs{font-size:.87rem}.desktop\:font-ui-2xs{font-size:.93rem}.desktop\:font-ui-xs{font-size:1rem}.desktop\:font-ui-sm{font-size:1.06rem}.desktop\:font-ui-md{font-size:1.13rem}.desktop\:font-ui-lg{font-size:1.46rem}.desktop\:font-ui-xl{font-size:2.13rem}.desktop\:font-ui-2xl{font-size:2.66rem}.desktop\:font-ui-3xl{font-size:3.19rem}.desktop\:text-light{font-weight:300}.desktop\:text-normal{font-weight:400}.desktop\:text-bold{font-weight:700}.desktop\:flex-justify-center{justify-content:center}.desktop\:flex-justify-start{justify-content:flex-start}.desktop\:flex-justify-end{justify-content:flex-end}.desktop\:flex-justify{justify-content:space-between}.desktop\:line-height-sans-1{line-height:.9}.desktop\:line-height-sans-2{line-height:1.1}.desktop\:line-height-sans-3{line-height:1.3}.desktop\:line-height-sans-4{line-height:1.4}.desktop\:line-height-sans-5{line-height:1.5}.desktop\:line-height-sans-6{line-height:1.6}.desktop\:line-height-serif-1{line-height:1}.desktop\:line-height-serif-2{line-height:1.2}.desktop\:line-height-serif-3{line-height:1.4}.desktop\:line-height-serif-4{line-height:1.5}.desktop\:line-height-serif-5{line-height:1.7}.desktop\:line-height-serif-6{line-height:1.8}.desktop\:line-height-mono-1{line-height:1}.desktop\:line-height-mono-2{line-height:1.3}.desktop\:line-height-mono-3{line-height:1.4}.desktop\:line-height-mono-4{line-height:1.6}.desktop\:line-height-mono-5{line-height:1.7}.desktop\:line-height-mono-6{line-height:1.8}.desktop\:line-height-heading-1{line-height:.9}.desktop\:line-height-heading-2{line-height:1.1}.desktop\:line-height-heading-3{line-height:1.3}.desktop\:line-height-heading-4{line-height:1.4}.desktop\:line-height-heading-5{line-height:1.5}.desktop\:line-height-heading-6{line-height:1.6}.desktop\:line-height-ui-1{line-height:.9}.desktop\:line-height-ui-2{line-height:1.1}.desktop\:line-height-ui-3{line-height:1.3}.desktop\:line-height-ui-4{line-height:1.4}.desktop\:line-height-ui-5{line-height:1.5}.desktop\:line-height-ui-6{line-height:1.6}.desktop\:line-height-body-1{line-height:.9}.desktop\:line-height-body-2{line-height:1.1}.desktop\:line-height-body-3{line-height:1.3}.desktop\:line-height-body-4{line-height:1.4}.desktop\:line-height-body-5{line-height:1.5}.desktop\:line-height-body-6{line-height:1.6}.desktop\:line-height-code-1{line-height:1}.desktop\:line-height-code-2{line-height:1.3}.desktop\:line-height-code-3{line-height:1.4}.desktop\:line-height-code-4{line-height:1.6}.desktop\:line-height-code-5{line-height:1.7}.desktop\:line-height-code-6{line-height:1.8}.desktop\:line-height-alt-1{line-height:1}.desktop\:line-height-alt-2{line-height:1.2}.desktop\:line-height-alt-3{line-height:1.4}.desktop\:line-height-alt-4{line-height:1.5}.desktop\:line-height-alt-5{line-height:1.7}.desktop\:line-height-alt-6{line-height:1.8}.desktop\:margin-neg-1px{margin:-1px}.desktop\:margin-neg-2px{margin:-2px}.desktop\:margin-neg-05{margin:-.25rem}.desktop\:margin-neg-1{margin:-.5rem}.desktop\:margin-neg-105{margin:-.75rem}.desktop\:margin-neg-2{margin:-1rem}.desktop\:margin-neg-205{margin:-1.25rem}.desktop\:margin-neg-3{margin:-1.5rem}.desktop\:margin-1px{margin:1px}.desktop\:margin-2px{margin:2px}.desktop\:margin-05{margin:.25rem}.desktop\:margin-1{margin:.5rem}.desktop\:margin-105{margin:.75rem}.desktop\:margin-2{margin:1rem}.desktop\:margin-205{margin:1.25rem}.desktop\:margin-3{margin:1.5rem}.desktop\:margin-4{margin:2rem}.desktop\:margin-5{margin:2.5rem}.desktop\:margin-6{margin:3rem}.desktop\:margin-7{margin:3.5rem}.desktop\:margin-8{margin:4rem}.desktop\:margin-9{margin:4.5rem}.desktop\:margin-10{margin:5rem}.desktop\:margin-15{margin:7.5rem}.desktop\:margin-05em{margin:.5em}.desktop\:margin-1em{margin:1em}.desktop\:margin-105em{margin:1.5em}.desktop\:margin-2em{margin:2em}.desktop\:margin-0{margin:0}.desktop\:margin-y-1px{margin-bottom:1px;margin-top:1px}.desktop\:margin-top-1px{margin-top:1px}.desktop\:margin-bottom-1px{margin-bottom:1px}.desktop\:margin-y-2px{margin-bottom:2px;margin-top:2px}.desktop\:margin-top-2px{margin-top:2px}.desktop\:margin-bottom-2px{margin-bottom:2px}.desktop\:margin-y-05{margin-bottom:.25rem;margin-top:.25rem}.desktop\:margin-top-05{margin-top:.25rem}.desktop\:margin-bottom-05{margin-bottom:.25rem}.desktop\:margin-y-1{margin-bottom:.5rem;margin-top:.5rem}.desktop\:margin-top-1{margin-top:.5rem}.desktop\:margin-bottom-1{margin-bottom:.5rem}.desktop\:margin-y-105{margin-bottom:.75rem;margin-top:.75rem}.desktop\:margin-top-105{margin-top:.75rem}.desktop\:margin-bottom-105{margin-bottom:.75rem}.desktop\:margin-y-2{margin-bottom:1rem;margin-top:1rem}.desktop\:margin-top-2{margin-top:1rem}.desktop\:margin-bottom-2{margin-bottom:1rem}.desktop\:margin-y-205{margin-bottom:1.25rem;margin-top:1.25rem}.desktop\:margin-top-205{margin-top:1.25rem}.desktop\:margin-bottom-205{margin-bottom:1.25rem}.desktop\:margin-y-3{margin-bottom:1.5rem;margin-top:1.5rem}.desktop\:margin-top-3{margin-top:1.5rem}.desktop\:margin-bottom-3{margin-bottom:1.5rem}.desktop\:margin-y-neg-1px{margin-bottom:-1px;margin-top:-1px}.desktop\:margin-top-neg-1px{margin-top:-1px}.desktop\:margin-bottom-neg-1px{margin-bottom:-1px}.desktop\:margin-y-neg-2px{margin-bottom:-2px;margin-top:-2px}.desktop\:margin-top-neg-2px{margin-top:-2px}.desktop\:margin-bottom-neg-2px{margin-bottom:-2px}.desktop\:margin-y-neg-05{margin-bottom:-.25rem;margin-top:-.25rem}.desktop\:margin-top-neg-05{margin-top:-.25rem}.desktop\:margin-bottom-neg-05{margin-bottom:-.25rem}.desktop\:margin-y-neg-1{margin-bottom:-.5rem;margin-top:-.5rem}.desktop\:margin-top-neg-1{margin-top:-.5rem}.desktop\:margin-bottom-neg-1{margin-bottom:-.5rem}.desktop\:margin-y-neg-105{margin-bottom:-.75rem;margin-top:-.75rem}.desktop\:margin-top-neg-105{margin-top:-.75rem}.desktop\:margin-bottom-neg-105{margin-bottom:-.75rem}.desktop\:margin-y-neg-2{margin-bottom:-1rem;margin-top:-1rem}.desktop\:margin-top-neg-2{margin-top:-1rem}.desktop\:margin-bottom-neg-2{margin-bottom:-1rem}.desktop\:margin-y-neg-205{margin-bottom:-1.25rem;margin-top:-1.25rem}.desktop\:margin-top-neg-205{margin-top:-1.25rem}.desktop\:margin-bottom-neg-205{margin-bottom:-1.25rem}.desktop\:margin-y-neg-3{margin-bottom:-1.5rem;margin-top:-1.5rem}.desktop\:margin-top-neg-3{margin-top:-1.5rem}.desktop\:margin-bottom-neg-3{margin-bottom:-1.5rem}.desktop\:margin-y-4{margin-bottom:2rem;margin-top:2rem}.desktop\:margin-top-4{margin-top:2rem}.desktop\:margin-bottom-4{margin-bottom:2rem}.desktop\:margin-y-5{margin-bottom:2.5rem;margin-top:2.5rem}.desktop\:margin-top-5{margin-top:2.5rem}.desktop\:margin-bottom-5{margin-bottom:2.5rem}.desktop\:margin-y-6{margin-bottom:3rem;margin-top:3rem}.desktop\:margin-top-6{margin-top:3rem}.desktop\:margin-bottom-6{margin-bottom:3rem}.desktop\:margin-y-7{margin-bottom:3.5rem;margin-top:3.5rem}.desktop\:margin-top-7{margin-top:3.5rem}.desktop\:margin-bottom-7{margin-bottom:3.5rem}.desktop\:margin-y-8{margin-bottom:4rem;margin-top:4rem}.desktop\:margin-top-8{margin-top:4rem}.desktop\:margin-bottom-8{margin-bottom:4rem}.desktop\:margin-y-9{margin-bottom:4.5rem;margin-top:4.5rem}.desktop\:margin-top-9{margin-top:4.5rem}.desktop\:margin-bottom-9{margin-bottom:4.5rem}.desktop\:margin-y-10{margin-bottom:5rem;margin-top:5rem}.desktop\:margin-top-10{margin-top:5rem}.desktop\:margin-bottom-10{margin-bottom:5rem}.desktop\:margin-y-15{margin-bottom:7.5rem;margin-top:7.5rem}.desktop\:margin-top-15{margin-top:7.5rem}.desktop\:margin-bottom-15{margin-bottom:7.5rem}.desktop\:margin-y-05em{margin-bottom:.5em;margin-top:.5em}.desktop\:margin-top-05em{margin-top:.5em}.desktop\:margin-bottom-05em{margin-bottom:.5em}.desktop\:margin-y-1em{margin-bottom:1em;margin-top:1em}.desktop\:margin-top-1em{margin-top:1em}.desktop\:margin-bottom-1em{margin-bottom:1em}.desktop\:margin-y-105em{margin-bottom:1.5em;margin-top:1.5em}.desktop\:margin-top-105em{margin-top:1.5em}.desktop\:margin-bottom-105em{margin-bottom:1.5em}.desktop\:margin-y-2em{margin-bottom:2em;margin-top:2em}.desktop\:margin-top-2em{margin-top:2em}.desktop\:margin-bottom-2em{margin-bottom:2em}.desktop\:margin-y-0{margin-bottom:0;margin-top:0}.desktop\:margin-top-0{margin-top:0}.desktop\:margin-bottom-0{margin-bottom:0}.desktop\:margin-y-auto{margin-bottom:auto;margin-top:auto}.desktop\:margin-top-auto{margin-top:auto}.desktop\:margin-bottom-auto{margin-bottom:auto}.desktop\:margin-x-1px{margin-left:1px;margin-right:1px}.desktop\:margin-right-1px{margin-right:1px}.desktop\:margin-left-1px{margin-left:1px}.desktop\:margin-x-2px{margin-left:2px;margin-right:2px}.desktop\:margin-right-2px{margin-right:2px}.desktop\:margin-left-2px{margin-left:2px}.desktop\:margin-x-05{margin-left:.25rem;margin-right:.25rem}.desktop\:margin-right-05{margin-right:.25rem}.desktop\:margin-left-05{margin-left:.25rem}.desktop\:margin-x-1{margin-left:.5rem;margin-right:.5rem}.desktop\:margin-right-1{margin-right:.5rem}.desktop\:margin-left-1{margin-left:.5rem}.desktop\:margin-x-105{margin-left:.75rem;margin-right:.75rem}.desktop\:margin-right-105{margin-right:.75rem}.desktop\:margin-left-105{margin-left:.75rem}.desktop\:margin-x-2{margin-left:1rem;margin-right:1rem}.desktop\:margin-right-2{margin-right:1rem}.desktop\:margin-left-2{margin-left:1rem}.desktop\:margin-x-205{margin-left:1.25rem;margin-right:1.25rem}.desktop\:margin-right-205{margin-right:1.25rem}.desktop\:margin-left-205{margin-left:1.25rem}.desktop\:margin-x-3{margin-left:1.5rem;margin-right:1.5rem}.desktop\:margin-right-3{margin-right:1.5rem}.desktop\:margin-left-3{margin-left:1.5rem}.desktop\:margin-x-neg-1px{margin-left:-1px;margin-right:-1px}.desktop\:margin-right-neg-1px{margin-right:-1px}.desktop\:margin-left-neg-1px{margin-left:-1px}.desktop\:margin-x-neg-2px{margin-left:-2px;margin-right:-2px}.desktop\:margin-right-neg-2px{margin-right:-2px}.desktop\:margin-left-neg-2px{margin-left:-2px}.desktop\:margin-x-neg-05{margin-left:-.25rem;margin-right:-.25rem}.desktop\:margin-right-neg-05{margin-right:-.25rem}.desktop\:margin-left-neg-05{margin-left:-.25rem}.desktop\:margin-x-neg-1{margin-left:-.5rem;margin-right:-.5rem}.desktop\:margin-right-neg-1{margin-right:-.5rem}.desktop\:margin-left-neg-1{margin-left:-.5rem}.desktop\:margin-x-neg-105{margin-left:-.75rem;margin-right:-.75rem}.desktop\:margin-right-neg-105{margin-right:-.75rem}.desktop\:margin-left-neg-105{margin-left:-.75rem}.desktop\:margin-x-neg-2{margin-left:-1rem;margin-right:-1rem}.desktop\:margin-right-neg-2{margin-right:-1rem}.desktop\:margin-left-neg-2{margin-left:-1rem}.desktop\:margin-x-neg-205{margin-left:-1.25rem;margin-right:-1.25rem}.desktop\:margin-right-neg-205{margin-right:-1.25rem}.desktop\:margin-left-neg-205{margin-left:-1.25rem}.desktop\:margin-x-neg-3{margin-left:-1.5rem;margin-right:-1.5rem}.desktop\:margin-right-neg-3{margin-right:-1.5rem}.desktop\:margin-left-neg-3{margin-left:-1.5rem}.desktop\:margin-x-4{margin-left:2rem;margin-right:2rem}.desktop\:margin-right-4{margin-right:2rem}.desktop\:margin-left-4{margin-left:2rem}.desktop\:margin-x-5{margin-left:2.5rem;margin-right:2.5rem}.desktop\:margin-right-5{margin-right:2.5rem}.desktop\:margin-left-5{margin-left:2.5rem}.desktop\:margin-x-6{margin-left:3rem;margin-right:3rem}.desktop\:margin-right-6{margin-right:3rem}.desktop\:margin-left-6{margin-left:3rem}.desktop\:margin-x-7{margin-left:3.5rem;margin-right:3.5rem}.desktop\:margin-right-7{margin-right:3.5rem}.desktop\:margin-left-7{margin-left:3.5rem}.desktop\:margin-x-8{margin-left:4rem;margin-right:4rem}.desktop\:margin-right-8{margin-right:4rem}.desktop\:margin-left-8{margin-left:4rem}.desktop\:margin-x-9{margin-left:4.5rem;margin-right:4.5rem}.desktop\:margin-right-9{margin-right:4.5rem}.desktop\:margin-left-9{margin-left:4.5rem}.desktop\:margin-x-10{margin-left:5rem;margin-right:5rem}.desktop\:margin-right-10{margin-right:5rem}.desktop\:margin-left-10{margin-left:5rem}.desktop\:margin-x-15{margin-left:7.5rem;margin-right:7.5rem}.desktop\:margin-right-15{margin-right:7.5rem}.desktop\:margin-left-15{margin-left:7.5rem}.desktop\:margin-x-card{margin-left:10rem;margin-right:10rem}.desktop\:margin-right-card{margin-right:10rem}.desktop\:margin-left-card{margin-left:10rem}.desktop\:margin-x-card-lg{margin-left:15rem;margin-right:15rem}.desktop\:margin-right-card-lg{margin-right:15rem}.desktop\:margin-left-card-lg{margin-left:15rem}.desktop\:margin-x-mobile{margin-left:20rem;margin-right:20rem}.desktop\:margin-right-mobile{margin-right:20rem}.desktop\:margin-left-mobile{margin-left:20rem}.desktop\:margin-x-05em{margin-left:.5em;margin-right:.5em}.desktop\:margin-right-05em{margin-right:.5em}.desktop\:margin-left-05em{margin-left:.5em}.desktop\:margin-x-1em{margin-left:1em;margin-right:1em}.desktop\:margin-right-1em{margin-right:1em}.desktop\:margin-left-1em{margin-left:1em}.desktop\:margin-x-105em{margin-left:1.5em;margin-right:1.5em}.desktop\:margin-right-105em{margin-right:1.5em}.desktop\:margin-left-105em{margin-left:1.5em}.desktop\:margin-x-2em{margin-left:2em;margin-right:2em}.desktop\:margin-right-2em{margin-right:2em}.desktop\:margin-left-2em{margin-left:2em}.desktop\:margin-x-0{margin-left:0;margin-right:0}.desktop\:margin-right-0{margin-right:0}.desktop\:margin-left-0{margin-left:0}.desktop\:margin-x-auto{margin-left:auto;margin-right:auto}.desktop\:margin-right-auto{margin-right:auto}.desktop\:margin-left-auto{margin-left:auto}.desktop\:measure-1{max-width:44ex}.desktop\:measure-2{max-width:60ex}.desktop\:measure-3{max-width:64ex}.desktop\:measure-4{max-width:68ex}.desktop\:measure-5{max-width:72ex}.desktop\:measure-6{max-width:88ex}.desktop\:measure-none{max-width:none}.desktop\:order-first{order:-1}.desktop\:order-last{order:999}.desktop\:order-0,.desktop\:order-initial{order:0}.desktop\:order-1{order:1}.desktop\:order-2{order:2}.desktop\:order-3{order:3}.desktop\:order-4{order:4}.desktop\:order-5{order:5}.desktop\:order-6{order:6}.desktop\:order-7{order:7}.desktop\:order-8{order:8}.desktop\:order-9{order:9}.desktop\:order-10{order:10}.desktop\:order-11{order:11}.desktop\:padding-1px{padding:1px}.desktop\:padding-y-1px{padding-bottom:1px;padding-top:1px}.desktop\:padding-x-1px{padding-left:1px;padding-right:1px}.desktop\:padding-top-1px{padding-top:1px}.desktop\:padding-right-1px{padding-right:1px}.desktop\:padding-bottom-1px{padding-bottom:1px}.desktop\:padding-left-1px{padding-left:1px}.desktop\:padding-2px{padding:2px}.desktop\:padding-y-2px{padding-bottom:2px;padding-top:2px}.desktop\:padding-x-2px{padding-left:2px;padding-right:2px}.desktop\:padding-top-2px{padding-top:2px}.desktop\:padding-right-2px{padding-right:2px}.desktop\:padding-bottom-2px{padding-bottom:2px}.desktop\:padding-left-2px{padding-left:2px}.desktop\:padding-05{padding:.25rem}.desktop\:padding-y-05{padding-bottom:.25rem;padding-top:.25rem}.desktop\:padding-x-05{padding-left:.25rem;padding-right:.25rem}.desktop\:padding-top-05{padding-top:.25rem}.desktop\:padding-right-05{padding-right:.25rem}.desktop\:padding-bottom-05{padding-bottom:.25rem}.desktop\:padding-left-05{padding-left:.25rem}.desktop\:padding-1{padding:.5rem}.desktop\:padding-y-1{padding-bottom:.5rem;padding-top:.5rem}.desktop\:padding-x-1{padding-left:.5rem;padding-right:.5rem}.desktop\:padding-top-1{padding-top:.5rem}.desktop\:padding-right-1{padding-right:.5rem}.desktop\:padding-bottom-1{padding-bottom:.5rem}.desktop\:padding-left-1{padding-left:.5rem}.desktop\:padding-105{padding:.75rem}.desktop\:padding-y-105{padding-bottom:.75rem;padding-top:.75rem}.desktop\:padding-x-105{padding-left:.75rem;padding-right:.75rem}.desktop\:padding-top-105{padding-top:.75rem}.desktop\:padding-right-105{padding-right:.75rem}.desktop\:padding-bottom-105{padding-bottom:.75rem}.desktop\:padding-left-105{padding-left:.75rem}.desktop\:padding-2{padding:1rem}.desktop\:padding-y-2{padding-bottom:1rem;padding-top:1rem}.desktop\:padding-x-2{padding-left:1rem;padding-right:1rem}.desktop\:padding-top-2{padding-top:1rem}.desktop\:padding-right-2{padding-right:1rem}.desktop\:padding-bottom-2{padding-bottom:1rem}.desktop\:padding-left-2{padding-left:1rem}.desktop\:padding-205{padding:1.25rem}.desktop\:padding-y-205{padding-bottom:1.25rem;padding-top:1.25rem}.desktop\:padding-x-205{padding-left:1.25rem;padding-right:1.25rem}.desktop\:padding-top-205{padding-top:1.25rem}.desktop\:padding-right-205{padding-right:1.25rem}.desktop\:padding-bottom-205{padding-bottom:1.25rem}.desktop\:padding-left-205{padding-left:1.25rem}.desktop\:padding-3{padding:1.5rem}.desktop\:padding-y-3{padding-bottom:1.5rem;padding-top:1.5rem}.desktop\:padding-x-3{padding-left:1.5rem;padding-right:1.5rem}.desktop\:padding-top-3{padding-top:1.5rem}.desktop\:padding-right-3{padding-right:1.5rem}.desktop\:padding-bottom-3{padding-bottom:1.5rem}.desktop\:padding-left-3{padding-left:1.5rem}.desktop\:padding-4{padding:2rem}.desktop\:padding-y-4{padding-bottom:2rem;padding-top:2rem}.desktop\:padding-x-4{padding-left:2rem;padding-right:2rem}.desktop\:padding-top-4{padding-top:2rem}.desktop\:padding-right-4{padding-right:2rem}.desktop\:padding-bottom-4{padding-bottom:2rem}.desktop\:padding-left-4{padding-left:2rem}.desktop\:padding-5{padding:2.5rem}.desktop\:padding-y-5{padding-bottom:2.5rem;padding-top:2.5rem}.desktop\:padding-x-5{padding-left:2.5rem;padding-right:2.5rem}.desktop\:padding-top-5{padding-top:2.5rem}.desktop\:padding-right-5{padding-right:2.5rem}.desktop\:padding-bottom-5{padding-bottom:2.5rem}.desktop\:padding-left-5{padding-left:2.5rem}.desktop\:padding-6{padding:3rem}.desktop\:padding-y-6{padding-bottom:3rem;padding-top:3rem}.desktop\:padding-x-6{padding-left:3rem;padding-right:3rem}.desktop\:padding-top-6{padding-top:3rem}.desktop\:padding-right-6{padding-right:3rem}.desktop\:padding-bottom-6{padding-bottom:3rem}.desktop\:padding-left-6{padding-left:3rem}.desktop\:padding-7{padding:3.5rem}.desktop\:padding-y-7{padding-bottom:3.5rem;padding-top:3.5rem}.desktop\:padding-x-7{padding-left:3.5rem;padding-right:3.5rem}.desktop\:padding-top-7{padding-top:3.5rem}.desktop\:padding-right-7{padding-right:3.5rem}.desktop\:padding-bottom-7{padding-bottom:3.5rem}.desktop\:padding-left-7{padding-left:3.5rem}.desktop\:padding-8{padding:4rem}.desktop\:padding-y-8{padding-bottom:4rem;padding-top:4rem}.desktop\:padding-x-8{padding-left:4rem;padding-right:4rem}.desktop\:padding-top-8{padding-top:4rem}.desktop\:padding-right-8{padding-right:4rem}.desktop\:padding-bottom-8{padding-bottom:4rem}.desktop\:padding-left-8{padding-left:4rem}.desktop\:padding-9{padding:4.5rem}.desktop\:padding-y-9{padding-bottom:4.5rem;padding-top:4.5rem}.desktop\:padding-x-9{padding-left:4.5rem;padding-right:4.5rem}.desktop\:padding-top-9{padding-top:4.5rem}.desktop\:padding-right-9{padding-right:4.5rem}.desktop\:padding-bottom-9{padding-bottom:4.5rem}.desktop\:padding-left-9{padding-left:4.5rem}.desktop\:padding-10{padding:5rem}.desktop\:padding-y-10{padding-bottom:5rem;padding-top:5rem}.desktop\:padding-x-10{padding-left:5rem;padding-right:5rem}.desktop\:padding-top-10{padding-top:5rem}.desktop\:padding-right-10{padding-right:5rem}.desktop\:padding-bottom-10{padding-bottom:5rem}.desktop\:padding-left-10{padding-left:5rem}.desktop\:padding-15{padding:7.5rem}.desktop\:padding-y-15{padding-bottom:7.5rem;padding-top:7.5rem}.desktop\:padding-x-15{padding-left:7.5rem;padding-right:7.5rem}.desktop\:padding-top-15{padding-top:7.5rem}.desktop\:padding-right-15{padding-right:7.5rem}.desktop\:padding-bottom-15{padding-bottom:7.5rem}.desktop\:padding-left-15{padding-left:7.5rem}.desktop\:padding-0{padding:0}.desktop\:padding-y-0{padding-bottom:0;padding-top:0}.desktop\:padding-x-0{padding-left:0;padding-right:0}.desktop\:padding-top-0{padding-top:0}.desktop\:padding-right-0{padding-right:0}.desktop\:padding-bottom-0{padding-bottom:0}.desktop\:padding-left-0{padding-left:0}.desktop\:width-1px{width:1px}.desktop\:width-2px{width:2px}.desktop\:width-05{width:.25rem}.desktop\:width-1{width:.5rem}.desktop\:width-105{width:.75rem}.desktop\:width-2{width:1rem}.desktop\:width-205{width:1.25rem}.desktop\:width-3{width:1.5rem}.desktop\:width-4{width:2rem}.desktop\:width-5{width:2.5rem}.desktop\:width-6{width:3rem}.desktop\:width-7{width:3.5rem}.desktop\:width-8{width:4rem}.desktop\:width-9{width:4.5rem}.desktop\:width-10{width:5rem}.desktop\:width-15{width:7.5rem}.desktop\:width-card{width:10rem}.desktop\:width-card-lg{width:15rem}.desktop\:width-mobile{width:20rem}.desktop\:width-mobile-lg{width:30rem}.desktop\:width-tablet{width:40rem}.desktop\:width-tablet-lg{width:55rem}.desktop\:width-desktop{width:64rem}.desktop\:width-desktop-lg{width:75rem}.desktop\:width-widescreen{width:87.5rem}.desktop\:width-0{width:0}.desktop\:width-full{width:100%}.desktop\:width-auto{width:auto}}.j40-two-column{overflow:hidden;padding:0}@media(min-width:40em){.j40-two-column{-webkit-column-count:2;column-count:2;-webkit-column-gap:1em;column-gap:1em}}@media(max-width:40em){.j40-two-column{-webkit-column-count:1;column-count:1;-webkit-column-gap:0;column-gap:0}}.j40-two-column>*{display:inline-flex;padding-bottom:1.2em;padding-left:1em;width:90%}.j40-two-column-icons-spacing{max-width:revert;padding-right:1em;width:2.3em}.j40-two-column-confine{display:inline-flex;max-width:-webkit-fit-content;max-width:-moz-fit-content;max-width:fit-content}@media (min-width:30em){.j40-grid-container{padding-right:0}}.j40-header,.j40-header>li>a,.j40-primary-nav{color:#112f4e!important;z-index:5}.j40-header .usa-nav-container,.j40-header>li>a .usa-nav-container,.j40-primary-nav .usa-nav-container{max-width:160ex}.j40-header>li>a span,.j40-header span,.j40-primary-nav span{color:#112f4e}.j40-header .usa-logo__text,.j40-header>li>a .usa-logo__text,.j40-primary-nav .usa-logo__text{font-family:"serif";font-size:1.8em}.j40-header .usa-nav__primary,.j40-header>li>a .usa-nav__primary,.j40-primary-nav .usa-nav__primary{font-size:1.2em}.j40-header .byline,.j40-header>li>a .byline,.j40-primary-nav .byline{font-size:.3em;font-weight:400}.j40-aside{background-color:#eff6fb;padding-left:1em;padding-right:1em}.j40-aside h2{font-size:2em;font-weight:100}.j40-aside h3{font-size:1.4em;font-weight:100}.j40-aside .j40-aside-icon{display:flex;margin-bottom:12px;margin-top:3px}.j40-footer .usa-footer__contact-info{justify-content:center;line-height:1.5;text-align:center}.j40-footer .j40-footer-logo{display:inline-block;text-align:center}@media (min-width:30em){.j40-main-content{margin-bottom:2rem;margin-top:2.5rem}}.j40-main-content h1{font-size:2.13rem}.j40-main-content h2{font-size:1.46rem}.j40-usa-process-list__item--complete{border-left-color:#005ea2!important}.j40-usa-process-list__item--complete:before{background-color:#00a91c;color:#fff}.usa-prose h1,.usa-prose h2,.usa-prose h3,.usa-prose h4{font-family:Source Sans Pro Web,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif}.usa-prose div,.usa-prose p{max-width:80ex}.j40-sitealert{min-height:4em;padding-bottom:7px;padding-top:7px}.j40-sitealert p{margin:0}.j40-sitealert *+.usa-alert{margin:0!important}.mapboxgl-popup-close-button{font-size:3em;margin-right:12px;margin-top:15px}.mapboxgl-popup-content{border-radius:8px!important;box-shadow:0 2px 4px 0 rgba(0,0,0,.5)!important;pointer-events:all!important;width:auto}.mapboxgl-ctrl-group:not(:empty){box-shadow:none}@media(-ms-high-contrast:active){.mapboxgl-ctrl-group:not(:empty){box-shadow:none}}.mapboxgl-ctrl-group{border-radius:0}.mapboxgl-ctrl button+button{border-top:1px}.mapboxgl-ctrl button{background-color:#fff;border:2px solid #000;border-radius:0;box-sizing:border-box;font-size:1.5em;height:1.66em;width:1.66em}.mapboxgl-ctrl button .mapboxgl-ctrl-icon{height:1em}.mapboxgl-ctrl button.mapboxgl-ctrl-zoom-in .mapboxgl-ctrl-icon{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGQ9Ik0xOSAxM2gtNnY2aC0ydi02SDV2LTJoNlY1aDJ2Nmg2djJ6Ii8+PC9zdmc+)}.mapboxgl-ctrl button.mapboxgl-ctrl-zoom-out .mapboxgl-ctrl-icon{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGQ9Ik0xOSAxM0g1di0yaDE0djJ6Ii8+PC9zdmc+)}.territoryFocusControl-module--territoryFocusButton--3wWoV{background-color:#fff;border-color:#000;border-style:solid;border-width:1px 2px;height:2.5em;width:2.5em}.territoryFocusControl-module--territoryFocusButton--3wWoV:not(:disabled):hover{background-color:#f4f4f4}.territoryFocusControl-module--territoryFocusContainer--3N0XM{display:flex;flex-direction:column;font-size:16px;left:20px;line-height:1.75em;position:absolute;text-align:center;top:300px;top:150px;z-index:10}.territoryFocusControl-module--territoryFocusButton--3wWoV:first-child{border-top-width:2px}.territoryFocusControl-module--territoryFocusButton--3wWoV:last-child{border-bottom-width:2px}.mapIntroduction-module--mapIntroContainer--1K8du{padding:20px}.mapIntroduction-module--mapIntroHeader--32LBs{font-size:xx-large;line-height:1.9rem;padding-left:.3rem;padding-top:.8rem}.mapIntroduction-module--mapIntroText--Tib8L{display:flex;margin-top:2.4rem}.mapIntroduction-module--mapIntroLightbulb--3LBx0{align-self:flex-start;flex:1 0 10%}.mapIntroduction-module--didYouKnowBox--3ztEy{font-size:large;padding-left:.4rem;padding-top:.2rem}.mapIntroduction-module--didYouKnow--3_v_i{font-weight:600}.mapIntroduction-module--didYouKnowText--3sgHs{line-height:1.5rem;padding-top:.3rem;width:95%}.areaDetail-module--areaDetailContainer--15ae9{display:flex;flex-direction:column}.areaDetail-module--topRow--GKfYj{display:flex}.areaDetail-module--categorization--3HQ3g,.areaDetail-module--cumulativeIndexScore--6IjJ9{align-items:center;border-bottom:2px solid #f2f2f2;display:flex;flex:1 0 50%;flex-direction:column;height:7.7rem;padding-top:2rem}.areaDetail-module--censusLabel--2jDJl,.areaDetail-module--topRowTitle--3pDta{color:#171716;font-size:small;font-weight:600}.areaDetail-module--topRowSubTitle--N8_GP{color:#171716;font-size:small}.areaDetail-module--score--3i8w1{font-size:xx-large;font-weight:bolder}.areaDetail-module--scoreSuperscript--wmEIg{font-size:large;padding-bottom:1rem}.areaDetail-module--categorization--3HQ3g{border-left:2px solid #f2f2f2}.areaDetail-module--priority--PLMch{display:flex}.areaDetail-module--prioritized--1fVrQ{background:#1a4480}.areaDetail-module--prioritized--1fVrQ,.areaDetail-module--threshold--34bIL{align-self:center;border:1px solid #00bde3;border-radius:100%;height:.6rem;margin-right:.5rem;margin-top:.8rem;opacity:.6;width:.6rem}.areaDetail-module--threshold--34bIL{background:#d7dde7}.areaDetail-module--nonPrioritized--1dEfk{align-self:center;border:1px solid #00bde3;border-radius:100%;height:.6rem;margin-right:.5rem;margin-top:.8rem;opacity:.6;width:.6rem}.areaDetail-module--prioritization--282dL{font-size:large;font-weight:700;padding-top:.8rem}.areaDetail-module--censusRow--1b9rm{border-bottom:2px solid #f2f2f2;display:flex;flex-direction:column;list-style:none;margin:0;padding:1rem}.areaDetail-module--censusText--4hgvr,.areaDetail-module--indicatorDescription--2GABj{font-size:small}.areaDetail-module--divider--3pt_a{background-color:#edeef0;border-bottom:2px solid #f2f2f2;color:#171716;display:flex;font-size:small;font-weight:600;justify-content:space-between;padding:.3rem .5rem .3rem 1rem}.areaDetail-module--indicatorBox--wTEld{border-bottom:2px solid #f2f2f2;display:flex;padding:1.5rem 1rem}@media screen and (max-width:400px){.areaDetail-module--indicatorBox--wTEld{justify-content:space-between;padding-bottom:.5rem;padding-top:.5rem}}.areaDetail-module--indicatorBox--wTEld:last-child{border-bottom:none}.areaDetail-module--indicatorTitle--1tXMA{font-size:large;font-weight:bolder}.areaDetail-module--indicatorValue--3pmOI{align-self:center;flex:1 0 37%;font-size:large;padding-left:2.4rem}@media screen and (max-width:400px){.areaDetail-module--indicatorValue--3pmOI{align-self:inherit;flex:1 0 40%;padding-left:3rem;padding-top:1rem}}.maplibregl-map{-webkit-tap-highlight-color:rgba(0,0,0,0);font:12px/20px Helvetica Neue,Arial,Helvetica,sans-serif;overflow:hidden;position:relative}.maplibregl-canvas{left:0;position:absolute;top:0}.maplibregl-map:-webkit-full-screen{height:100%;width:100%}.maplibregl-canvas-container.maplibregl-interactive,.maplibregl-ctrl-group button.maplibregl-ctrl-compass{cursor:grab;-webkit-user-select:none;-ms-user-select:none;user-select:none}.maplibregl-canvas-container.maplibregl-interactive.maplibregl-track-pointer{cursor:pointer}.maplibregl-canvas-container.maplibregl-interactive:active,.maplibregl-ctrl-group button.maplibregl-ctrl-compass:active{cursor:grabbing}.maplibregl-canvas-container.maplibregl-touch-zoom-rotate,.maplibregl-canvas-container.maplibregl-touch-zoom-rotate .maplibregl-canvas{touch-action:pan-x pan-y}.maplibregl-canvas-container.maplibregl-touch-drag-pan,.maplibregl-canvas-container.maplibregl-touch-drag-pan .maplibregl-canvas{touch-action:pinch-zoom}.maplibregl-canvas-container.maplibregl-touch-zoom-rotate.maplibregl-touch-drag-pan,.maplibregl-canvas-container.maplibregl-touch-zoom-rotate.maplibregl-touch-drag-pan .maplibregl-canvas{touch-action:none}.maplibregl-ctrl-bottom-left,.maplibregl-ctrl-bottom-right,.maplibregl-ctrl-top-left,.maplibregl-ctrl-top-right{pointer-events:none;position:absolute;z-index:2}.maplibregl-ctrl-top-left{left:0;top:0}.maplibregl-ctrl-top-right{right:0;top:0}.maplibregl-ctrl-bottom-left{bottom:0;left:0}.maplibregl-ctrl-bottom-right{bottom:0;right:0}.maplibregl-ctrl{clear:both;pointer-events:auto;-webkit-transform:translate(0);transform:translate(0)}.maplibregl-ctrl-top-left .maplibregl-ctrl{float:left;margin:10px 0 0 10px}.maplibregl-ctrl-top-right .maplibregl-ctrl{float:right;margin:10px 10px 0 0}.maplibregl-ctrl-bottom-left .maplibregl-ctrl{float:left;margin:0 0 10px 10px}.maplibregl-ctrl-bottom-right .maplibregl-ctrl{float:right;margin:0 10px 10px 0}.maplibregl-ctrl-group{background:#fff;border-radius:4px}.maplibregl-ctrl-group:not(:empty){box-shadow:0 0 0 2px rgba(0,0,0,.1)}@media (-ms-high-contrast:active){.maplibregl-ctrl-group:not(:empty){box-shadow:0 0 0 2px ButtonText}}.maplibregl-ctrl-group button{background-color:transparent;border:0;box-sizing:border-box;cursor:pointer;display:block;height:29px;outline:none;padding:0;width:29px}.maplibregl-ctrl-group button+button{border-top:1px solid #ddd}.maplibregl-ctrl button .maplibregl-ctrl-icon{background-position:50%;background-repeat:no-repeat;display:block;height:100%;width:100%}@media (-ms-high-contrast:active){.maplibregl-ctrl-icon{background-color:transparent}.maplibregl-ctrl-group button+button{border-top:1px solid ButtonText}}.maplibregl-ctrl button::-moz-focus-inner{border:0;padding:0}.maplibregl-ctrl-attrib-button:focus,.maplibregl-ctrl-group button:focus{box-shadow:0 0 2px 2px #0096ff}.maplibregl-ctrl button:disabled{cursor:not-allowed}.maplibregl-ctrl button:disabled .maplibregl-ctrl-icon{opacity:.25}.maplibregl-ctrl button:not(:disabled):hover{background-color:rgba(0,0,0,.05)}.maplibregl-ctrl-group button:focus:focus-visible{box-shadow:0 0 2px 2px #0096ff}.maplibregl-ctrl-group button:focus:not(:focus-visible){box-shadow:none}.maplibregl-ctrl-group button:focus:first-child{border-radius:4px 4px 0 0}.maplibregl-ctrl-group button:focus:last-child{border-radius:0 0 4px 4px}.maplibregl-ctrl-group button:focus:only-child{border-radius:inherit}.maplibregl-ctrl button.maplibregl-ctrl-zoom-out .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23333' viewBox='0 0 29 29'%3E%3Cpath d='M10 13c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h9c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-9z'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-zoom-in .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23333' viewBox='0 0 29 29'%3E%3Cpath d='M14.5 8.5c-.75 0-1.5.75-1.5 1.5v3h-3c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h3v3c0 .75.75 1.5 1.5 1.5S16 19.75 16 19v-3h3c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-3v-3c0-.75-.75-1.5-1.5-1.5z'/%3E%3C/svg%3E")}@media (-ms-high-contrast:active){.maplibregl-ctrl button.maplibregl-ctrl-zoom-out .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 29 29'%3E%3Cpath d='M10 13c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h9c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-9z'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-zoom-in .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 29 29'%3E%3Cpath d='M14.5 8.5c-.75 0-1.5.75-1.5 1.5v3h-3c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h3v3c0 .75.75 1.5 1.5 1.5S16 19.75 16 19v-3h3c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-3v-3c0-.75-.75-1.5-1.5-1.5z'/%3E%3C/svg%3E")}}@media (-ms-high-contrast:black-on-white){.maplibregl-ctrl button.maplibregl-ctrl-zoom-out .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 29 29'%3E%3Cpath d='M10 13c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h9c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-9z'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-zoom-in .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 29 29'%3E%3Cpath d='M14.5 8.5c-.75 0-1.5.75-1.5 1.5v3h-3c-.75 0-1.5.75-1.5 1.5S9.25 16 10 16h3v3c0 .75.75 1.5 1.5 1.5S16 19.75 16 19v-3h3c.75 0 1.5-.75 1.5-1.5S19.75 13 19 13h-3v-3c0-.75-.75-1.5-1.5-1.5z'/%3E%3C/svg%3E")}}.maplibregl-ctrl button.maplibregl-ctrl-fullscreen .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23333' viewBox='0 0 29 29'%3E%3Cpath d='M24 16v5.5c0 1.75-.75 2.5-2.5 2.5H16v-1l3-1.5-4-5.5 1-1 5.5 4 1.5-3h1zM6 16l1.5 3 5.5-4 1 1-4 5.5 3 1.5v1H7.5C5.75 24 5 23.25 5 21.5V16h1zm7-11v1l-3 1.5 4 5.5-1 1-5.5-4L6 13H5V7.5C5 5.75 5.75 5 7.5 5H13zm11 2.5c0-1.75-.75-2.5-2.5-2.5H16v1l3 1.5-4 5.5 1 1 5.5-4 1.5 3h1V7.5z'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-shrink .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 29 29'%3E%3Cpath d='M18.5 16c-1.75 0-2.5.75-2.5 2.5V24h1l1.5-3 5.5 4 1-1-4-5.5 3-1.5v-1h-5.5zM13 18.5c0-1.75-.75-2.5-2.5-2.5H5v1l3 1.5L4 24l1 1 5.5-4 1.5 3h1v-5.5zm3-8c0 1.75.75 2.5 2.5 2.5H24v-1l-3-1.5L25 5l-1-1-5.5 4L17 5h-1v5.5zM10.5 13c1.75 0 2.5-.75 2.5-2.5V5h-1l-1.5 3L5 4 4 5l4 5.5L5 12v1h5.5z'/%3E%3C/svg%3E")}@media (-ms-high-contrast:active){.maplibregl-ctrl button.maplibregl-ctrl-fullscreen .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 29 29'%3E%3Cpath d='M24 16v5.5c0 1.75-.75 2.5-2.5 2.5H16v-1l3-1.5-4-5.5 1-1 5.5 4 1.5-3h1zM6 16l1.5 3 5.5-4 1 1-4 5.5 3 1.5v1H7.5C5.75 24 5 23.25 5 21.5V16h1zm7-11v1l-3 1.5 4 5.5-1 1-5.5-4L6 13H5V7.5C5 5.75 5.75 5 7.5 5H13zm11 2.5c0-1.75-.75-2.5-2.5-2.5H16v1l3 1.5-4 5.5 1 1 5.5-4 1.5 3h1V7.5z'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-shrink .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 29 29'%3E%3Cpath d='M18.5 16c-1.75 0-2.5.75-2.5 2.5V24h1l1.5-3 5.5 4 1-1-4-5.5 3-1.5v-1h-5.5zM13 18.5c0-1.75-.75-2.5-2.5-2.5H5v1l3 1.5L4 24l1 1 5.5-4 1.5 3h1v-5.5zm3-8c0 1.75.75 2.5 2.5 2.5H24v-1l-3-1.5L25 5l-1-1-5.5 4L17 5h-1v5.5zM10.5 13c1.75 0 2.5-.75 2.5-2.5V5h-1l-1.5 3L5 4 4 5l4 5.5L5 12v1h5.5z'/%3E%3C/svg%3E")}}@media (-ms-high-contrast:black-on-white){.maplibregl-ctrl button.maplibregl-ctrl-fullscreen .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 29 29'%3E%3Cpath d='M24 16v5.5c0 1.75-.75 2.5-2.5 2.5H16v-1l3-1.5-4-5.5 1-1 5.5 4 1.5-3h1zM6 16l1.5 3 5.5-4 1 1-4 5.5 3 1.5v1H7.5C5.75 24 5 23.25 5 21.5V16h1zm7-11v1l-3 1.5 4 5.5-1 1-5.5-4L6 13H5V7.5C5 5.75 5.75 5 7.5 5H13zm11 2.5c0-1.75-.75-2.5-2.5-2.5H16v1l3 1.5-4 5.5 1 1 5.5-4 1.5 3h1V7.5z'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-shrink .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 29 29'%3E%3Cpath d='M18.5 16c-1.75 0-2.5.75-2.5 2.5V24h1l1.5-3 5.5 4 1-1-4-5.5 3-1.5v-1h-5.5zM13 18.5c0-1.75-.75-2.5-2.5-2.5H5v1l3 1.5L4 24l1 1 5.5-4 1.5 3h1v-5.5zm3-8c0 1.75.75 2.5 2.5 2.5H24v-1l-3-1.5L25 5l-1-1-5.5 4L17 5h-1v5.5zM10.5 13c1.75 0 2.5-.75 2.5-2.5V5h-1l-1.5 3L5 4 4 5l4 5.5L5 12v1h5.5z'/%3E%3C/svg%3E")}}.maplibregl-ctrl button.maplibregl-ctrl-compass .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23333' viewBox='0 0 29 29'%3E%3Cpath d='m10.5 14 4-8 4 8h-8z'/%3E%3Cpath fill='%23ccc' d='m10.5 16 4 8 4-8h-8z'/%3E%3C/svg%3E")}@media (-ms-high-contrast:active){.maplibregl-ctrl button.maplibregl-ctrl-compass .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 29 29'%3E%3Cpath d='m10.5 14 4-8 4 8h-8z'/%3E%3Cpath fill='%23999' d='m10.5 16 4 8 4-8h-8z'/%3E%3C/svg%3E")}}@media (-ms-high-contrast:black-on-white){.maplibregl-ctrl button.maplibregl-ctrl-compass .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 29 29'%3E%3Cpath d='m10.5 14 4-8 4 8h-8z'/%3E%3Cpath fill='%23ccc' d='m10.5 16 4 8 4-8h-8z'/%3E%3C/svg%3E")}}.maplibregl-ctrl button.maplibregl-ctrl-geolocate .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23333' viewBox='0 0 20 20'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle cx='10' cy='10' r='2'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate:disabled .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23aaa' viewBox='0 0 20 20'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle cx='10' cy='10' r='2'/%3E%3Cpath fill='red' d='m14 5 1 1-9 9-1-1 9-9z'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate.maplibregl-ctrl-geolocate-active .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%2333b5e5' viewBox='0 0 20 20'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle cx='10' cy='10' r='2'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate.maplibregl-ctrl-geolocate-active-error .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23e58978' viewBox='0 0 20 20'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle cx='10' cy='10' r='2'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate.maplibregl-ctrl-geolocate-background .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%2333b5e5' viewBox='0 0 20 20'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate.maplibregl-ctrl-geolocate-background-error .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23e54e33' viewBox='0 0 20 20'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate.maplibregl-ctrl-geolocate-waiting .maplibregl-ctrl-icon{-webkit-animation:maplibregl-spin 2s linear infinite;animation:maplibregl-spin 2s linear infinite}@media (-ms-high-contrast:active){.maplibregl-ctrl button.maplibregl-ctrl-geolocate .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 20 20'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle cx='10' cy='10' r='2'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate:disabled .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23999' viewBox='0 0 20 20'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle cx='10' cy='10' r='2'/%3E%3Cpath fill='red' d='m14 5 1 1-9 9-1-1 9-9z'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate.maplibregl-ctrl-geolocate-active .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%2333b5e5' viewBox='0 0 20 20'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle cx='10' cy='10' r='2'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate.maplibregl-ctrl-geolocate-active-error .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23e58978' viewBox='0 0 20 20'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle cx='10' cy='10' r='2'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate.maplibregl-ctrl-geolocate-background .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%2333b5e5' viewBox='0 0 20 20'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate.maplibregl-ctrl-geolocate-background-error .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23e54e33' viewBox='0 0 20 20'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3C/svg%3E")}}@media (-ms-high-contrast:black-on-white){.maplibregl-ctrl button.maplibregl-ctrl-geolocate .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle cx='10' cy='10' r='2'/%3E%3C/svg%3E")}.maplibregl-ctrl button.maplibregl-ctrl-geolocate:disabled .maplibregl-ctrl-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23666' viewBox='0 0 20 20'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 1 1 0-7z'/%3E%3Ccircle cx='10' cy='10' r='2'/%3E%3Cpath fill='red' d='m14 5 1 1-9 9-1-1 9-9z'/%3E%3C/svg%3E")}}@-webkit-keyframes maplibregl-spin{0%{-webkit-transform:rotate(0deg)}to{-webkit-transform:rotate(1turn)}}@keyframes maplibregl-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}a.maplibregl-ctrl-logo{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 88 23'%3E%3Cpath fill='%23000' fill-opacity='.4' fill-rule='evenodd' d='M17.408 16.796h-1.827l2.501-12.095h.198l3.324 6.533.988 2.19.988-2.19 3.258-6.533h.181l2.6 12.095h-1.81l-1.218-5.644-.362-1.71-.658 1.71-2.929 5.644h-.098l-2.914-5.644-.757-1.71-.345 1.71zm1.958-3.42-.726 3.663a1.255 1.255 0 0 1-1.232 1.011h-1.827a1.255 1.255 0 0 1-1.229-1.509l2.501-12.095a1.255 1.255 0 0 1 1.23-1.001h.197a1.255 1.255 0 0 1 1.12.685l3.19 6.273 3.125-6.263a1.255 1.255 0 0 1 1.123-.695h.181a1.255 1.255 0 0 1 1.227.991l1.443 6.71a5.11 5.11 0 0 1 .314-.787l.009-.016a4.623 4.623 0 0 1 1.777-1.887c.782-.46 1.668-.667 2.611-.667a4.548 4.548 0 0 1 1.7.32l.306.134c.21-.16.474-.256.759-.256h1.694a1.255 1.255 0 0 1 1.212.925 1.255 1.255 0 0 1 1.212-.925h1.711c.284 0 .545.094.755.252.613-.3 1.312-.45 2.075-.45 1.356 0 2.557.445 3.482 1.4.314.319.566.676.763 1.064V4.701a1.255 1.255 0 0 1 1.255-1.255h1.86A1.255 1.255 0 0 1 54.44 4.7v9.194h2.217c.19 0 .37.043.532.118v-4.77c0-.356.147-.678.385-.906a2.416 2.416 0 0 1-.682-1.71c0-.665.267-1.253.735-1.7a2.448 2.448 0 0 1 1.722-.674 2.43 2.43 0 0 1 1.705.675c.211.2.381.43.504.683V4.7a1.255 1.255 0 0 1 1.255-1.255h1.744A1.255 1.255 0 0 1 65.812 4.7v3.335a4.76 4.76 0 0 1 1.526-.246c.938 0 1.817.214 2.59.69a4.47 4.47 0 0 1 1.67 1.743v-.98a1.255 1.255 0 0 1 1.256-1.256h1.777c.233 0 .451.064.639.174a3.407 3.407 0 0 1 1.567-.372c.346 0 .861.02 1.285.232a1.255 1.255 0 0 1 .689 1.004 4.73 4.73 0 0 1 .853-.588c.795-.44 1.675-.647 2.61-.647 1.385 0 2.65.39 3.525 1.396.836.938 1.168 2.173 1.168 3.528 0 .343-.02.694-.056 1.051a1.255 1.255 0 0 1-.947 1.09l.408.952a1.255 1.255 0 0 1-.477 1.552c-.418.268-.92.463-1.458.612-.613.171-1.304.244-2.049.244-1.06 0-2.043-.207-2.886-.698l-.015-.008c-.798-.48-1.419-1.135-1.818-1.963l-.004-.008a5.815 5.815 0 0 1-.548-2.512c0-.286.017-.567.053-.843a1.255 1.255 0 0 1-.333-.086l-.166-.004c-.223 0-.426.062-.643.228-.03.024-.142.139-.142.59v3.883a1.255 1.255 0 0 1-1.256 1.256h-1.777a1.255 1.255 0 0 1-1.256-1.256V15.69l-.032.057a4.778 4.778 0 0 1-1.86 1.833 5.04 5.04 0 0 1-2.484.634 4.47 4.47 0 0 1-1.935-.424 1.252 1.252 0 0 1-.764.258h-1.71a1.255 1.255 0 0 1-1.256-1.255V7.687a2.402 2.402 0 0 1-.428.625c.253.23.412.561.412.93v7.553a1.255 1.255 0 0 1-1.256 1.255h-1.843a1.25 1.25 0 0 1-.894-.373c-.228.23-.544.373-.894.373H51.32a1.255 1.255 0 0 1-1.256-1.255v-1.251l-.061.117a4.703 4.703 0 0 1-1.782 1.884 4.767 4.767 0 0 1-2.485.67 5.6 5.6 0 0 1-1.485-.188l.009 2.764a1.255 1.255 0 0 1-1.255 1.259h-1.729a1.255 1.255 0 0 1-1.255-1.255v-3.537a1.255 1.255 0 0 1-1.167.793h-1.679a1.25 1.25 0 0 1-.77-.263 4.47 4.47 0 0 1-1.945.429c-.885 0-1.724-.21-2.495-.632l-.017-.01a4.983 4.983 0 0 1-1.081-.836 1.255 1.255 0 0 1-1.254 1.312h-1.81a1.255 1.255 0 0 1-1.228-.99l-.782-3.625-2.044 3.939a1.255 1.255 0 0 1-1.115.676h-.098a1.255 1.255 0 0 1-1.116-.68l-2.061-3.994zM35.92 16.63l.207-.114.223-.15c.329-.237.574-.499.735-.785l.061-.118.033 1.332h1.678V9.242h-1.694l-.033 1.267c-.088-.22-.264-.438-.526-.658l-.032-.028a3.16 3.16 0 0 0-.668-.428l-.27-.12a3.293 3.293 0 0 0-1.235-.23c-.757 0-1.415.163-1.974.493a3.36 3.36 0 0 0-1.3 1.382c-.297.593-.444 1.284-.444 2.074 0 .8.17 1.503.51 2.107a3.795 3.795 0 0 0 1.382 1.381 3.883 3.883 0 0 0 1.893.477c.53 0 1.015-.11 1.455-.33zm-2.789-5.38c-.384.45-.575 1.038-.575 1.762 0 .735.186 1.332.559 1.794.384.45.933.675 1.645.675a2.25 2.25 0 0 0 .934-.19 2.17 2.17 0 0 0 .468-.29l.178-.161a2.163 2.163 0 0 0 .397-.561c.163-.333.244-.717.244-1.15v-.115c0-.472-.098-.894-.296-1.267l-.043-.077a2.211 2.211 0 0 0-.633-.709l-.13-.086-.047-.028a2.099 2.099 0 0 0-1.073-.285c-.702 0-1.244.231-1.629.692zm2.316 2.706c.163-.17.28-.407.28-.83v-.114c0-.292-.06-.508-.15-.68a.958.958 0 0 0-.353-.389.851.851 0 0 0-.464-.127c-.4 0-.56.114-.664.239l-.01.012c-.148.174-.275.45-.275.945 0 .506.122.801.27.99.097.11.266.224.68.224.303 0 .504-.09.687-.269zm7.545 1.705a2.626 2.626 0 0 0 .331.423c.213.22.464.402.755.548l.173.074c.433.17.93.255 1.49.255.68 0 1.295-.165 1.844-.493a3.447 3.447 0 0 0 1.316-1.4c.329-.603.493-1.299.493-2.089 0-1.273-.33-2.243-.988-2.913-.658-.68-1.52-1.02-2.584-1.02-.598 0-1.124.115-1.575.347a2.807 2.807 0 0 0-.415.262l-.199.166a3.35 3.35 0 0 0-.64.82V9.242h-1.712v11.553h1.729l-.017-5.134zm.53-1.138c.137.193.297.36.48.5l.155.11.053.034c.34.197.713.297 1.119.297.714 0 1.262-.225 1.645-.675.385-.46.576-1.048.576-1.762 0-.746-.192-1.338-.576-1.777-.372-.45-.92-.675-1.645-.675-.29 0-.569.053-.835.16a2.366 2.366 0 0 0-.284.136 1.99 1.99 0 0 0-.363.254 2.237 2.237 0 0 0-.46.569l-.082.162a2.56 2.56 0 0 0-.213 1.072v.115c0 .471.098.894.296 1.267l.135.211zm.964-.818a1.11 1.11 0 0 0 .367.385.937.937 0 0 0 .476.118c.423 0 .59-.117.687-.23.159-.194.28-.478.28-.95 0-.53-.133-.8-.266-.952l-.021-.025c-.078-.094-.231-.221-.68-.221a.995.995 0 0 0-.503.135l-.012.007a.859.859 0 0 0-.335.343c-.073.133-.132.324-.132.614v.115a1.43 1.43 0 0 0 .14.66zm15.7-6.222c.232-.23.346-.516.346-.856a1.053 1.053 0 0 0-.345-.79 1.175 1.175 0 0 0-.84-.329c-.34 0-.625.11-.855.33a1.053 1.053 0 0 0-.346.79c0 .34.115.625.346.855.23.23.516.346.856.346.34 0 .62-.115.839-.346zm4.337 9.314.033-1.332c.128.269.324.518.59.747l.098.081a3.727 3.727 0 0 0 .316.224l.223.122a3.21 3.21 0 0 0 1.44.322 3.785 3.785 0 0 0 1.875-.477 3.52 3.52 0 0 0 1.382-1.366c.352-.593.526-1.29.526-2.09 0-.79-.147-1.48-.444-2.073a3.235 3.235 0 0 0-1.283-1.399c-.549-.34-1.195-.51-1.942-.51a3.476 3.476 0 0 0-1.527.344l-.086.043-.165.09a3.412 3.412 0 0 0-.33.214c-.288.21-.507.446-.656.707a1.893 1.893 0 0 0-.099.198l.082-1.283V4.701h-1.744v12.095zm.473-2.509a2.482 2.482 0 0 0 .566.7c.078.065.159.125.245.18l.144.08a2.105 2.105 0 0 0 .975.232c.713 0 1.262-.225 1.645-.675.384-.46.576-1.053.576-1.778 0-.734-.192-1.327-.576-1.777-.373-.46-.921-.692-1.645-.692a2.18 2.18 0 0 0-1.015.235c-.147.075-.285.17-.415.282l-.15.142a2.086 2.086 0 0 0-.42.594c-.149.32-.223.685-.223 1.1v.115c0 .47.097.89.293 1.26zm2.616-.293c.157-.191.28-.479.28-.967 0-.51-.13-.79-.276-.961l-.021-.026c-.082-.1-.232-.225-.67-.225a.868.868 0 0 0-.681.279l-.012.011c-.154.155-.274.38-.274.807v.115c0 .285.057.499.144.669a1.13 1.13 0 0 0 .367.405c.137.082.28.123.455.123.423 0 .59-.118.686-.23zm8.266-3.013c.23-.087.472-.134.724-.14l.069-.002c.329 0 .542.033.642.099l.247-1.794c-.13-.066-.37-.099-.717-.099a2.3 2.3 0 0 0-.545.063 2.086 2.086 0 0 0-.411.148 2.18 2.18 0 0 0-.4.249 2.482 2.482 0 0 0-.485.499 2.659 2.659 0 0 0-.32.581l-.05.137v-1.48h-1.778v7.553h1.777v-3.884c0-.364.053-.678.159-.943a1.49 1.49 0 0 1 .466-.636 2.52 2.52 0 0 1 .399-.253 2.19 2.19 0 0 1 .224-.099zm9.784 2.656.05-.922c0-1.162-.285-2.062-.856-2.698-.559-.647-1.42-.97-2.584-.97-.746 0-1.415.163-2.007.493a3.462 3.462 0 0 0-1.4 1.382c-.329.604-.493 1.306-.493 2.106 0 .714.143 1.371.428 1.975.285.593.73 1.07 1.332 1.432.604.351 1.355.526 2.255.526.649 0 1.204-.062 1.668-.185l.044-.012.135-.04c.409-.122.736-.263.984-.421l-.542-1.267c-.2.108-.415.199-.642.274l-.297.087c-.34.088-.773.131-1.3.131-.636 0-1.135-.147-1.497-.444a1.573 1.573 0 0 1-.192-.193c-.244-.294-.415-.705-.512-1.234l-.004-.021h5.43zm-5.427-1.256-.003.022h3.752v-.138c-.007-.485-.104-.857-.288-1.118a1.056 1.056 0 0 0-.156-.176c-.307-.285-.746-.428-1.316-.428-.657 0-1.155.202-1.494.604-.253.3-.417.712-.494 1.234zm-27.053 2.77V4.7h-1.86v12.095h5.333V15.15zm7.103-5.908v7.553h-1.843V9.242h1.843z'/%3E%3Cpath fill='%23fff' d='m19.63 11.151-.757-1.71-.345 1.71-1.12 5.644h-1.827L18.083 4.7h.197l3.325 6.533.988 2.19.988-2.19L26.839 4.7h.181l2.6 12.095h-1.81l-1.218-5.644-.362-1.71-.658 1.71-2.93 5.644h-.098l-2.913-5.644zm14.836 5.81c-.68 0-1.311-.16-1.893-.478a3.795 3.795 0 0 1-1.381-1.382c-.34-.604-.51-1.306-.51-2.106 0-.79.147-1.482.444-2.074a3.364 3.364 0 0 1 1.3-1.382c.559-.33 1.217-.494 1.974-.494a3.293 3.293 0 0 1 1.234.231 3.341 3.341 0 0 1 .97.575c.264.22.44.439.527.659l.033-1.267h1.694v7.553H37.18l-.033-1.332c-.186.395-.526.746-1.02 1.053a3.167 3.167 0 0 1-1.662.444zm.296-1.482c.626 0 1.152-.214 1.58-.642.428-.44.642-1.01.642-1.711v-.115c0-.472-.098-.894-.296-1.267a2.211 2.211 0 0 0-.807-.872 2.098 2.098 0 0 0-1.119-.313c-.702 0-1.245.231-1.629.692-.384.45-.575 1.037-.575 1.76 0 .736.186 1.333.559 1.795.384.45.933.675 1.645.675zm6.521-6.237h1.711v1.4c.604-1.065 1.547-1.597 2.83-1.597 1.064 0 1.926.34 2.584 1.02.659.67.988 1.641.988 2.914 0 .79-.164 1.487-.493 2.09a3.456 3.456 0 0 1-1.316 1.399 3.51 3.51 0 0 1-1.844.493c-.636 0-1.19-.11-1.662-.329a2.665 2.665 0 0 1-1.086-.97l.017 5.134h-1.728V9.242zm4.048 6.22c.714 0 1.262-.224 1.645-.674.385-.46.576-1.048.576-1.762 0-.746-.192-1.338-.576-1.777-.372-.45-.92-.675-1.645-.675-.395 0-.768.098-1.12.296-.34.187-.613.46-.822.823-.197.351-.296.763-.296 1.234v.115c0 .472.098.894.296 1.267.209.362.483.647.823.855.34.197.713.297 1.119.297z'/%3E%3Cpath fill='%23e1e3e9' d='M51.325 4.7h1.86v10.45h3.473v1.646h-5.333zm7.12 4.542h1.843v7.553h-1.843zm.905-1.415a1.159 1.159 0 0 1-.856-.346 1.165 1.165 0 0 1-.346-.856 1.053 1.053 0 0 1 .346-.79c.23-.219.516-.329.856-.329.329 0 .609.11.839.33a1.053 1.053 0 0 1 .345.79 1.159 1.159 0 0 1-.345.855c-.22.23-.5.346-.84.346zm7.875 9.133a3.167 3.167 0 0 1-1.662-.444c-.482-.307-.817-.658-1.004-1.053l-.033 1.332h-1.71V4.701h1.743v4.657l-.082 1.283c.186-.438.548-.812 1.086-1.119a3.486 3.486 0 0 1 1.778-.477c.746 0 1.393.17 1.942.51a3.235 3.235 0 0 1 1.283 1.4c.297.592.444 1.282.444 2.072 0 .8-.175 1.498-.526 2.09a3.52 3.52 0 0 1-1.382 1.366 3.785 3.785 0 0 1-1.876.477zm-.296-1.481c.713 0 1.26-.225 1.645-.675.384-.46.577-1.053.577-1.778 0-.734-.193-1.327-.577-1.776-.373-.46-.921-.692-1.645-.692a2.115 2.115 0 0 0-1.58.659c-.428.428-.642.992-.642 1.694v.115c0 .473.098.895.296 1.267a2.385 2.385 0 0 0 .807.872 2.1 2.1 0 0 0 1.119.313zm5.927-6.237h1.777v1.481c.176-.505.46-.91.856-1.217a2.14 2.14 0 0 1 1.349-.46c.351 0 .593.032.724.098l-.247 1.794c-.099-.066-.313-.099-.642-.099-.516 0-.988.164-1.416.494-.417.329-.626.855-.626 1.58v3.883h-1.777V9.242zm9.534 7.718c-.9 0-1.651-.175-2.255-.526-.603-.362-1.047-.84-1.332-1.432a4.567 4.567 0 0 1-.428-1.975c0-.8.164-1.502.493-2.106a3.462 3.462 0 0 1 1.4-1.382c.592-.33 1.262-.494 2.007-.494 1.163 0 2.024.324 2.584.97.57.637.856 1.537.856 2.7 0 .296-.017.603-.05.92h-5.43c.12.67.356 1.153.708 1.45.362.296.86.443 1.497.443.526 0 .96-.044 1.3-.131a4.123 4.123 0 0 0 .938-.362l.542 1.267c-.274.175-.647.329-1.119.46-.472.132-1.042.197-1.711.197zm1.596-4.558c.01-.68-.137-1.158-.444-1.432-.307-.285-.746-.428-1.316-.428-1.152 0-1.815.62-1.991 1.86h3.752z'/%3E%3Cg fill-rule='evenodd' stroke-width='1.036'%3E%3Cpath fill='%23000' fill-opacity='.4' d='m8.166 16.146-.002.002a1.54 1.54 0 0 1-2.009 0l-.002-.002-.043-.034-.002-.002-.199-.162H4.377a.657.657 0 0 0-.659.659v1.84a.657.657 0 0 0 .659.659h5.565a.657.657 0 0 0 .659-.659v-1.84a.657.657 0 0 0-.659-.659H8.411l-.202.164zm-1.121-.905a.29.29 0 0 0 .113.023.286.286 0 0 0 .189-.07l.077-.063c.634-.508 4.672-3.743 4.672-7.575 0-2.55-2.215-4.625-4.938-4.625S2.221 5.006 2.221 7.556c0 3.225 2.86 6.027 4.144 7.137h.004l.04.038.484.4.077.063a.628.628 0 0 0 .074.047zm-2.52-.548a16.898 16.898 0 0 1-1.183-1.315C2.187 11.942.967 9.897.967 7.555c0-3.319 2.855-5.88 6.192-5.88 3.338 0 6.193 2.561 6.193 5.881 0 2.34-1.22 4.387-2.376 5.822a16.898 16.898 0 0 1-1.182 1.315h.15a1.912 1.912 0 0 1 1.914 1.914v1.84a1.912 1.912 0 0 1-1.914 1.914H4.377a1.912 1.912 0 0 1-1.914-1.914v-1.84a1.912 1.912 0 0 1 1.914-1.914zm3.82-6.935c0 .692-.55 1.222-1.187 1.222s-1.185-.529-1.185-1.222.548-1.222 1.185-1.222c.638 0 1.186.529 1.186 1.222zm-1.186 2.477c1.348 0 2.442-1.11 2.442-2.478S8.507 5.28 7.159 5.28 4.72 6.39 4.72 7.758s1.092 2.477 2.44 2.477zm2.048 7.71H5.114v-.838h4.093z'/%3E%3Cpath fill='%23e1e3e9' d='M2.222 7.555c0-2.55 2.214-4.625 4.937-4.625 2.723 0 4.938 2.075 4.938 4.625 0 3.832-4.038 7.068-4.672 7.575l-.077.063a.286.286 0 0 1-.189.07.286.286 0 0 1-.188-.07l-.077-.063c-.634-.507-4.672-3.743-4.672-7.575zm4.937 2.68c1.348 0 2.442-1.11 2.442-2.478S8.507 5.28 7.159 5.28 4.72 6.39 4.72 7.758s1.092 2.477 2.44 2.477z'/%3E%3Cpath fill='%23fff' d='M4.377 15.948a.657.657 0 0 0-.659.659v1.84a.657.657 0 0 0 .659.659h5.565a.657.657 0 0 0 .659-.659v-1.84a.657.657 0 0 0-.659-.659zm4.83 1.16H5.114v.838h4.093z'/%3E%3C/g%3E%3C/svg%3E");background-repeat:no-repeat;cursor:pointer;display:block;height:23px;margin:0 0 -4px -4px;overflow:hidden;width:88px}a.maplibregl-ctrl-logo.maplibregl-compact{width:14px}@media (-ms-high-contrast:active){a.maplibregl-ctrl-logo{background-color:transparent;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 88 23'%3E%3Cpath fill='%23000' fill-opacity='.4' fill-rule='evenodd' d='M17.408 16.796h-1.827l2.501-12.095h.198l3.324 6.533.988 2.19.988-2.19 3.258-6.533h.181l2.6 12.095h-1.81l-1.218-5.644-.362-1.71-.658 1.71-2.929 5.644h-.098l-2.914-5.644-.757-1.71-.345 1.71zm1.958-3.42-.726 3.663a1.255 1.255 0 0 1-1.232 1.011h-1.827a1.255 1.255 0 0 1-1.229-1.509l2.501-12.095a1.255 1.255 0 0 1 1.23-1.001h.197a1.255 1.255 0 0 1 1.12.685l3.19 6.273 3.125-6.263a1.255 1.255 0 0 1 1.123-.695h.181a1.255 1.255 0 0 1 1.227.991l1.443 6.71a5.11 5.11 0 0 1 .314-.787l.009-.016a4.623 4.623 0 0 1 1.777-1.887c.782-.46 1.668-.667 2.611-.667a4.548 4.548 0 0 1 1.7.32l.306.134c.21-.16.474-.256.759-.256h1.694a1.255 1.255 0 0 1 1.212.925 1.255 1.255 0 0 1 1.212-.925h1.711c.284 0 .545.094.755.252.613-.3 1.312-.45 2.075-.45 1.356 0 2.557.445 3.482 1.4.314.319.566.676.763 1.064V4.701a1.255 1.255 0 0 1 1.255-1.255h1.86A1.255 1.255 0 0 1 54.44 4.7v9.194h2.217c.19 0 .37.043.532.118v-4.77c0-.356.147-.678.385-.906a2.416 2.416 0 0 1-.682-1.71c0-.665.267-1.253.735-1.7a2.448 2.448 0 0 1 1.722-.674 2.43 2.43 0 0 1 1.705.675c.211.2.381.43.504.683V4.7a1.255 1.255 0 0 1 1.255-1.255h1.744A1.255 1.255 0 0 1 65.812 4.7v3.335a4.76 4.76 0 0 1 1.526-.246c.938 0 1.817.214 2.59.69a4.47 4.47 0 0 1 1.67 1.743v-.98a1.255 1.255 0 0 1 1.256-1.256h1.777c.233 0 .451.064.639.174a3.407 3.407 0 0 1 1.567-.372c.346 0 .861.02 1.285.232a1.255 1.255 0 0 1 .689 1.004 4.73 4.73 0 0 1 .853-.588c.795-.44 1.675-.647 2.61-.647 1.385 0 2.65.39 3.525 1.396.836.938 1.168 2.173 1.168 3.528 0 .343-.02.694-.056 1.051a1.255 1.255 0 0 1-.947 1.09l.408.952a1.255 1.255 0 0 1-.477 1.552c-.418.268-.92.463-1.458.612-.613.171-1.304.244-2.049.244-1.06 0-2.043-.207-2.886-.698l-.015-.008c-.798-.48-1.419-1.135-1.818-1.963l-.004-.008a5.815 5.815 0 0 1-.548-2.512c0-.286.017-.567.053-.843a1.255 1.255 0 0 1-.333-.086l-.166-.004c-.223 0-.426.062-.643.228-.03.024-.142.139-.142.59v3.883a1.255 1.255 0 0 1-1.256 1.256h-1.777a1.255 1.255 0 0 1-1.256-1.256V15.69l-.032.057a4.778 4.778 0 0 1-1.86 1.833 5.04 5.04 0 0 1-2.484.634 4.47 4.47 0 0 1-1.935-.424 1.252 1.252 0 0 1-.764.258h-1.71a1.255 1.255 0 0 1-1.256-1.255V7.687a2.402 2.402 0 0 1-.428.625c.253.23.412.561.412.93v7.553a1.255 1.255 0 0 1-1.256 1.255h-1.843a1.25 1.25 0 0 1-.894-.373c-.228.23-.544.373-.894.373H51.32a1.255 1.255 0 0 1-1.256-1.255v-1.251l-.061.117a4.703 4.703 0 0 1-1.782 1.884 4.767 4.767 0 0 1-2.485.67 5.6 5.6 0 0 1-1.485-.188l.009 2.764a1.255 1.255 0 0 1-1.255 1.259h-1.729a1.255 1.255 0 0 1-1.255-1.255v-3.537a1.255 1.255 0 0 1-1.167.793h-1.679a1.25 1.25 0 0 1-.77-.263 4.47 4.47 0 0 1-1.945.429c-.885 0-1.724-.21-2.495-.632l-.017-.01a4.983 4.983 0 0 1-1.081-.836 1.255 1.255 0 0 1-1.254 1.312h-1.81a1.255 1.255 0 0 1-1.228-.99l-.782-3.625-2.044 3.939a1.255 1.255 0 0 1-1.115.676h-.098a1.255 1.255 0 0 1-1.116-.68l-2.061-3.994zM35.92 16.63l.207-.114.223-.15c.329-.237.574-.499.735-.785l.061-.118.033 1.332h1.678V9.242h-1.694l-.033 1.267c-.088-.22-.264-.438-.526-.658l-.032-.028a3.16 3.16 0 0 0-.668-.428l-.27-.12a3.293 3.293 0 0 0-1.235-.23c-.757 0-1.415.163-1.974.493a3.36 3.36 0 0 0-1.3 1.382c-.297.593-.444 1.284-.444 2.074 0 .8.17 1.503.51 2.107a3.795 3.795 0 0 0 1.382 1.381 3.883 3.883 0 0 0 1.893.477c.53 0 1.015-.11 1.455-.33zm-2.789-5.38c-.384.45-.575 1.038-.575 1.762 0 .735.186 1.332.559 1.794.384.45.933.675 1.645.675a2.25 2.25 0 0 0 .934-.19 2.17 2.17 0 0 0 .468-.29l.178-.161a2.163 2.163 0 0 0 .397-.561c.163-.333.244-.717.244-1.15v-.115c0-.472-.098-.894-.296-1.267l-.043-.077a2.211 2.211 0 0 0-.633-.709l-.13-.086-.047-.028a2.099 2.099 0 0 0-1.073-.285c-.702 0-1.244.231-1.629.692zm2.316 2.706c.163-.17.28-.407.28-.83v-.114c0-.292-.06-.508-.15-.68a.958.958 0 0 0-.353-.389.851.851 0 0 0-.464-.127c-.4 0-.56.114-.664.239l-.01.012c-.148.174-.275.45-.275.945 0 .506.122.801.27.99.097.11.266.224.68.224.303 0 .504-.09.687-.269zm7.545 1.705a2.626 2.626 0 0 0 .331.423c.213.22.464.402.755.548l.173.074c.433.17.93.255 1.49.255.68 0 1.295-.165 1.844-.493a3.447 3.447 0 0 0 1.316-1.4c.329-.603.493-1.299.493-2.089 0-1.273-.33-2.243-.988-2.913-.658-.68-1.52-1.02-2.584-1.02-.598 0-1.124.115-1.575.347a2.807 2.807 0 0 0-.415.262l-.199.166a3.35 3.35 0 0 0-.64.82V9.242h-1.712v11.553h1.729l-.017-5.134zm.53-1.138c.137.193.297.36.48.5l.155.11.053.034c.34.197.713.297 1.119.297.714 0 1.262-.225 1.645-.675.385-.46.576-1.048.576-1.762 0-.746-.192-1.338-.576-1.777-.372-.45-.92-.675-1.645-.675-.29 0-.569.053-.835.16a2.366 2.366 0 0 0-.284.136 1.99 1.99 0 0 0-.363.254 2.237 2.237 0 0 0-.46.569l-.082.162a2.56 2.56 0 0 0-.213 1.072v.115c0 .471.098.894.296 1.267l.135.211zm.964-.818a1.11 1.11 0 0 0 .367.385.937.937 0 0 0 .476.118c.423 0 .59-.117.687-.23.159-.194.28-.478.28-.95 0-.53-.133-.8-.266-.952l-.021-.025c-.078-.094-.231-.221-.68-.221a.995.995 0 0 0-.503.135l-.012.007a.859.859 0 0 0-.335.343c-.073.133-.132.324-.132.614v.115a1.43 1.43 0 0 0 .14.66zm15.7-6.222c.232-.23.346-.516.346-.856a1.053 1.053 0 0 0-.345-.79 1.175 1.175 0 0 0-.84-.329c-.34 0-.625.11-.855.33a1.053 1.053 0 0 0-.346.79c0 .34.115.625.346.855.23.23.516.346.856.346.34 0 .62-.115.839-.346zm4.337 9.314.033-1.332c.128.269.324.518.59.747l.098.081a3.727 3.727 0 0 0 .316.224l.223.122a3.21 3.21 0 0 0 1.44.322 3.785 3.785 0 0 0 1.875-.477 3.52 3.52 0 0 0 1.382-1.366c.352-.593.526-1.29.526-2.09 0-.79-.147-1.48-.444-2.073a3.235 3.235 0 0 0-1.283-1.399c-.549-.34-1.195-.51-1.942-.51a3.476 3.476 0 0 0-1.527.344l-.086.043-.165.09a3.412 3.412 0 0 0-.33.214c-.288.21-.507.446-.656.707a1.893 1.893 0 0 0-.099.198l.082-1.283V4.701h-1.744v12.095zm.473-2.509a2.482 2.482 0 0 0 .566.7c.078.065.159.125.245.18l.144.08a2.105 2.105 0 0 0 .975.232c.713 0 1.262-.225 1.645-.675.384-.46.576-1.053.576-1.778 0-.734-.192-1.327-.576-1.777-.373-.46-.921-.692-1.645-.692a2.18 2.18 0 0 0-1.015.235c-.147.075-.285.17-.415.282l-.15.142a2.086 2.086 0 0 0-.42.594c-.149.32-.223.685-.223 1.1v.115c0 .47.097.89.293 1.26zm2.616-.293c.157-.191.28-.479.28-.967 0-.51-.13-.79-.276-.961l-.021-.026c-.082-.1-.232-.225-.67-.225a.868.868 0 0 0-.681.279l-.012.011c-.154.155-.274.38-.274.807v.115c0 .285.057.499.144.669a1.13 1.13 0 0 0 .367.405c.137.082.28.123.455.123.423 0 .59-.118.686-.23zm8.266-3.013c.23-.087.472-.134.724-.14l.069-.002c.329 0 .542.033.642.099l.247-1.794c-.13-.066-.37-.099-.717-.099a2.3 2.3 0 0 0-.545.063 2.086 2.086 0 0 0-.411.148 2.18 2.18 0 0 0-.4.249 2.482 2.482 0 0 0-.485.499 2.659 2.659 0 0 0-.32.581l-.05.137v-1.48h-1.778v7.553h1.777v-3.884c0-.364.053-.678.159-.943a1.49 1.49 0 0 1 .466-.636 2.52 2.52 0 0 1 .399-.253 2.19 2.19 0 0 1 .224-.099zm9.784 2.656.05-.922c0-1.162-.285-2.062-.856-2.698-.559-.647-1.42-.97-2.584-.97-.746 0-1.415.163-2.007.493a3.462 3.462 0 0 0-1.4 1.382c-.329.604-.493 1.306-.493 2.106 0 .714.143 1.371.428 1.975.285.593.73 1.07 1.332 1.432.604.351 1.355.526 2.255.526.649 0 1.204-.062 1.668-.185l.044-.012.135-.04c.409-.122.736-.263.984-.421l-.542-1.267c-.2.108-.415.199-.642.274l-.297.087c-.34.088-.773.131-1.3.131-.636 0-1.135-.147-1.497-.444a1.573 1.573 0 0 1-.192-.193c-.244-.294-.415-.705-.512-1.234l-.004-.021h5.43zm-5.427-1.256-.003.022h3.752v-.138c-.007-.485-.104-.857-.288-1.118a1.056 1.056 0 0 0-.156-.176c-.307-.285-.746-.428-1.316-.428-.657 0-1.155.202-1.494.604-.253.3-.417.712-.494 1.234zm-27.053 2.77V4.7h-1.86v12.095h5.333V15.15zm7.103-5.908v7.553h-1.843V9.242h1.843z'/%3E%3Cpath fill='%23fff' d='m19.63 11.151-.757-1.71-.345 1.71-1.12 5.644h-1.827L18.083 4.7h.197l3.325 6.533.988 2.19.988-2.19L26.839 4.7h.181l2.6 12.095h-1.81l-1.218-5.644-.362-1.71-.658 1.71-2.93 5.644h-.098l-2.913-5.644zm14.836 5.81c-.68 0-1.311-.16-1.893-.478a3.795 3.795 0 0 1-1.381-1.382c-.34-.604-.51-1.306-.51-2.106 0-.79.147-1.482.444-2.074a3.364 3.364 0 0 1 1.3-1.382c.559-.33 1.217-.494 1.974-.494a3.293 3.293 0 0 1 1.234.231 3.341 3.341 0 0 1 .97.575c.264.22.44.439.527.659l.033-1.267h1.694v7.553H37.18l-.033-1.332c-.186.395-.526.746-1.02 1.053a3.167 3.167 0 0 1-1.662.444zm.296-1.482c.626 0 1.152-.214 1.58-.642.428-.44.642-1.01.642-1.711v-.115c0-.472-.098-.894-.296-1.267a2.211 2.211 0 0 0-.807-.872 2.098 2.098 0 0 0-1.119-.313c-.702 0-1.245.231-1.629.692-.384.45-.575 1.037-.575 1.76 0 .736.186 1.333.559 1.795.384.45.933.675 1.645.675zm6.521-6.237h1.711v1.4c.604-1.065 1.547-1.597 2.83-1.597 1.064 0 1.926.34 2.584 1.02.659.67.988 1.641.988 2.914 0 .79-.164 1.487-.493 2.09a3.456 3.456 0 0 1-1.316 1.399 3.51 3.51 0 0 1-1.844.493c-.636 0-1.19-.11-1.662-.329a2.665 2.665 0 0 1-1.086-.97l.017 5.134h-1.728V9.242zm4.048 6.22c.714 0 1.262-.224 1.645-.674.385-.46.576-1.048.576-1.762 0-.746-.192-1.338-.576-1.777-.372-.45-.92-.675-1.645-.675-.395 0-.768.098-1.12.296-.34.187-.613.46-.822.823-.197.351-.296.763-.296 1.234v.115c0 .472.098.894.296 1.267.209.362.483.647.823.855.34.197.713.297 1.119.297z'/%3E%3Cpath fill='%23e1e3e9' d='M51.325 4.7h1.86v10.45h3.473v1.646h-5.333zm7.12 4.542h1.843v7.553h-1.843zm.905-1.415a1.159 1.159 0 0 1-.856-.346 1.165 1.165 0 0 1-.346-.856 1.053 1.053 0 0 1 .346-.79c.23-.219.516-.329.856-.329.329 0 .609.11.839.33a1.053 1.053 0 0 1 .345.79 1.159 1.159 0 0 1-.345.855c-.22.23-.5.346-.84.346zm7.875 9.133a3.167 3.167 0 0 1-1.662-.444c-.482-.307-.817-.658-1.004-1.053l-.033 1.332h-1.71V4.701h1.743v4.657l-.082 1.283c.186-.438.548-.812 1.086-1.119a3.486 3.486 0 0 1 1.778-.477c.746 0 1.393.17 1.942.51a3.235 3.235 0 0 1 1.283 1.4c.297.592.444 1.282.444 2.072 0 .8-.175 1.498-.526 2.09a3.52 3.52 0 0 1-1.382 1.366 3.785 3.785 0 0 1-1.876.477zm-.296-1.481c.713 0 1.26-.225 1.645-.675.384-.46.577-1.053.577-1.778 0-.734-.193-1.327-.577-1.776-.373-.46-.921-.692-1.645-.692a2.115 2.115 0 0 0-1.58.659c-.428.428-.642.992-.642 1.694v.115c0 .473.098.895.296 1.267a2.385 2.385 0 0 0 .807.872 2.1 2.1 0 0 0 1.119.313zm5.927-6.237h1.777v1.481c.176-.505.46-.91.856-1.217a2.14 2.14 0 0 1 1.349-.46c.351 0 .593.032.724.098l-.247 1.794c-.099-.066-.313-.099-.642-.099-.516 0-.988.164-1.416.494-.417.329-.626.855-.626 1.58v3.883h-1.777V9.242zm9.534 7.718c-.9 0-1.651-.175-2.255-.526-.603-.362-1.047-.84-1.332-1.432a4.567 4.567 0 0 1-.428-1.975c0-.8.164-1.502.493-2.106a3.462 3.462 0 0 1 1.4-1.382c.592-.33 1.262-.494 2.007-.494 1.163 0 2.024.324 2.584.97.57.637.856 1.537.856 2.7 0 .296-.017.603-.05.92h-5.43c.12.67.356 1.153.708 1.45.362.296.86.443 1.497.443.526 0 .96-.044 1.3-.131a4.123 4.123 0 0 0 .938-.362l.542 1.267c-.274.175-.647.329-1.119.46-.472.132-1.042.197-1.711.197zm1.596-4.558c.01-.68-.137-1.158-.444-1.432-.307-.285-.746-.428-1.316-.428-1.152 0-1.815.62-1.991 1.86h3.752z'/%3E%3Cg fill-rule='evenodd' stroke-width='1.036'%3E%3Cpath fill='%23000' fill-opacity='.4' d='m8.166 16.146-.002.002a1.54 1.54 0 0 1-2.009 0l-.002-.002-.043-.034-.002-.002-.199-.162H4.377a.657.657 0 0 0-.659.659v1.84a.657.657 0 0 0 .659.659h5.565a.657.657 0 0 0 .659-.659v-1.84a.657.657 0 0 0-.659-.659H8.411l-.202.164zm-1.121-.905a.29.29 0 0 0 .113.023.286.286 0 0 0 .189-.07l.077-.063c.634-.508 4.672-3.743 4.672-7.575 0-2.55-2.215-4.625-4.938-4.625S2.221 5.006 2.221 7.556c0 3.225 2.86 6.027 4.144 7.137h.004l.04.038.484.4.077.063a.628.628 0 0 0 .074.047zm-2.52-.548a16.898 16.898 0 0 1-1.183-1.315C2.187 11.942.967 9.897.967 7.555c0-3.319 2.855-5.88 6.192-5.88 3.338 0 6.193 2.561 6.193 5.881 0 2.34-1.22 4.387-2.376 5.822a16.898 16.898 0 0 1-1.182 1.315h.15a1.912 1.912 0 0 1 1.914 1.914v1.84a1.912 1.912 0 0 1-1.914 1.914H4.377a1.912 1.912 0 0 1-1.914-1.914v-1.84a1.912 1.912 0 0 1 1.914-1.914zm3.82-6.935c0 .692-.55 1.222-1.187 1.222s-1.185-.529-1.185-1.222.548-1.222 1.185-1.222c.638 0 1.186.529 1.186 1.222zm-1.186 2.477c1.348 0 2.442-1.11 2.442-2.478S8.507 5.28 7.159 5.28 4.72 6.39 4.72 7.758s1.092 2.477 2.44 2.477zm2.048 7.71H5.114v-.838h4.093z'/%3E%3Cpath fill='%23e1e3e9' d='M2.222 7.555c0-2.55 2.214-4.625 4.937-4.625 2.723 0 4.938 2.075 4.938 4.625 0 3.832-4.038 7.068-4.672 7.575l-.077.063a.286.286 0 0 1-.189.07.286.286 0 0 1-.188-.07l-.077-.063c-.634-.507-4.672-3.743-4.672-7.575zm4.937 2.68c1.348 0 2.442-1.11 2.442-2.478S8.507 5.28 7.159 5.28 4.72 6.39 4.72 7.758s1.092 2.477 2.44 2.477z'/%3E%3Cpath fill='%23fff' d='M4.377 15.948a.657.657 0 0 0-.659.659v1.84a.657.657 0 0 0 .659.659h5.565a.657.657 0 0 0 .659-.659v-1.84a.657.657 0 0 0-.659-.659zm4.83 1.16H5.114v.838h4.093z'/%3E%3C/g%3E%3C/svg%3E")}}@media (-ms-high-contrast:black-on-white){a.maplibregl-ctrl-logo{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 88 23'%3E%3Cpath fill='%23000' fill-opacity='.4' fill-rule='evenodd' d='M17.408 16.796h-1.827l2.501-12.095h.198l3.324 6.533.988 2.19.988-2.19 3.258-6.533h.181l2.6 12.095h-1.81l-1.218-5.644-.362-1.71-.658 1.71-2.929 5.644h-.098l-2.914-5.644-.757-1.71-.345 1.71zm1.958-3.42-.726 3.663a1.255 1.255 0 0 1-1.232 1.011h-1.827a1.255 1.255 0 0 1-1.229-1.509l2.501-12.095a1.255 1.255 0 0 1 1.23-1.001h.197a1.255 1.255 0 0 1 1.12.685l3.19 6.273 3.125-6.263a1.255 1.255 0 0 1 1.123-.695h.181a1.255 1.255 0 0 1 1.227.991l1.443 6.71a5.11 5.11 0 0 1 .314-.787l.009-.016a4.623 4.623 0 0 1 1.777-1.887c.782-.46 1.668-.667 2.611-.667a4.548 4.548 0 0 1 1.7.32l.306.134c.21-.16.474-.256.759-.256h1.694a1.255 1.255 0 0 1 1.212.925 1.255 1.255 0 0 1 1.212-.925h1.711c.284 0 .545.094.755.252.613-.3 1.312-.45 2.075-.45 1.356 0 2.557.445 3.482 1.4.314.319.566.676.763 1.064V4.701a1.255 1.255 0 0 1 1.255-1.255h1.86A1.255 1.255 0 0 1 54.44 4.7v9.194h2.217c.19 0 .37.043.532.118v-4.77c0-.356.147-.678.385-.906a2.416 2.416 0 0 1-.682-1.71c0-.665.267-1.253.735-1.7a2.448 2.448 0 0 1 1.722-.674 2.43 2.43 0 0 1 1.705.675c.211.2.381.43.504.683V4.7a1.255 1.255 0 0 1 1.255-1.255h1.744A1.255 1.255 0 0 1 65.812 4.7v3.335a4.76 4.76 0 0 1 1.526-.246c.938 0 1.817.214 2.59.69a4.47 4.47 0 0 1 1.67 1.743v-.98a1.255 1.255 0 0 1 1.256-1.256h1.777c.233 0 .451.064.639.174a3.407 3.407 0 0 1 1.567-.372c.346 0 .861.02 1.285.232a1.255 1.255 0 0 1 .689 1.004 4.73 4.73 0 0 1 .853-.588c.795-.44 1.675-.647 2.61-.647 1.385 0 2.65.39 3.525 1.396.836.938 1.168 2.173 1.168 3.528 0 .343-.02.694-.056 1.051a1.255 1.255 0 0 1-.947 1.09l.408.952a1.255 1.255 0 0 1-.477 1.552c-.418.268-.92.463-1.458.612-.613.171-1.304.244-2.049.244-1.06 0-2.043-.207-2.886-.698l-.015-.008c-.798-.48-1.419-1.135-1.818-1.963l-.004-.008a5.815 5.815 0 0 1-.548-2.512c0-.286.017-.567.053-.843a1.255 1.255 0 0 1-.333-.086l-.166-.004c-.223 0-.426.062-.643.228-.03.024-.142.139-.142.59v3.883a1.255 1.255 0 0 1-1.256 1.256h-1.777a1.255 1.255 0 0 1-1.256-1.256V15.69l-.032.057a4.778 4.778 0 0 1-1.86 1.833 5.04 5.04 0 0 1-2.484.634 4.47 4.47 0 0 1-1.935-.424 1.252 1.252 0 0 1-.764.258h-1.71a1.255 1.255 0 0 1-1.256-1.255V7.687a2.402 2.402 0 0 1-.428.625c.253.23.412.561.412.93v7.553a1.255 1.255 0 0 1-1.256 1.255h-1.843a1.25 1.25 0 0 1-.894-.373c-.228.23-.544.373-.894.373H51.32a1.255 1.255 0 0 1-1.256-1.255v-1.251l-.061.117a4.703 4.703 0 0 1-1.782 1.884 4.767 4.767 0 0 1-2.485.67 5.6 5.6 0 0 1-1.485-.188l.009 2.764a1.255 1.255 0 0 1-1.255 1.259h-1.729a1.255 1.255 0 0 1-1.255-1.255v-3.537a1.255 1.255 0 0 1-1.167.793h-1.679a1.25 1.25 0 0 1-.77-.263 4.47 4.47 0 0 1-1.945.429c-.885 0-1.724-.21-2.495-.632l-.017-.01a4.983 4.983 0 0 1-1.081-.836 1.255 1.255 0 0 1-1.254 1.312h-1.81a1.255 1.255 0 0 1-1.228-.99l-.782-3.625-2.044 3.939a1.255 1.255 0 0 1-1.115.676h-.098a1.255 1.255 0 0 1-1.116-.68l-2.061-3.994zM35.92 16.63l.207-.114.223-.15c.329-.237.574-.499.735-.785l.061-.118.033 1.332h1.678V9.242h-1.694l-.033 1.267c-.088-.22-.264-.438-.526-.658l-.032-.028a3.16 3.16 0 0 0-.668-.428l-.27-.12a3.293 3.293 0 0 0-1.235-.23c-.757 0-1.415.163-1.974.493a3.36 3.36 0 0 0-1.3 1.382c-.297.593-.444 1.284-.444 2.074 0 .8.17 1.503.51 2.107a3.795 3.795 0 0 0 1.382 1.381 3.883 3.883 0 0 0 1.893.477c.53 0 1.015-.11 1.455-.33zm-2.789-5.38c-.384.45-.575 1.038-.575 1.762 0 .735.186 1.332.559 1.794.384.45.933.675 1.645.675a2.25 2.25 0 0 0 .934-.19 2.17 2.17 0 0 0 .468-.29l.178-.161a2.163 2.163 0 0 0 .397-.561c.163-.333.244-.717.244-1.15v-.115c0-.472-.098-.894-.296-1.267l-.043-.077a2.211 2.211 0 0 0-.633-.709l-.13-.086-.047-.028a2.099 2.099 0 0 0-1.073-.285c-.702 0-1.244.231-1.629.692zm2.316 2.706c.163-.17.28-.407.28-.83v-.114c0-.292-.06-.508-.15-.68a.958.958 0 0 0-.353-.389.851.851 0 0 0-.464-.127c-.4 0-.56.114-.664.239l-.01.012c-.148.174-.275.45-.275.945 0 .506.122.801.27.99.097.11.266.224.68.224.303 0 .504-.09.687-.269zm7.545 1.705a2.626 2.626 0 0 0 .331.423c.213.22.464.402.755.548l.173.074c.433.17.93.255 1.49.255.68 0 1.295-.165 1.844-.493a3.447 3.447 0 0 0 1.316-1.4c.329-.603.493-1.299.493-2.089 0-1.273-.33-2.243-.988-2.913-.658-.68-1.52-1.02-2.584-1.02-.598 0-1.124.115-1.575.347a2.807 2.807 0 0 0-.415.262l-.199.166a3.35 3.35 0 0 0-.64.82V9.242h-1.712v11.553h1.729l-.017-5.134zm.53-1.138c.137.193.297.36.48.5l.155.11.053.034c.34.197.713.297 1.119.297.714 0 1.262-.225 1.645-.675.385-.46.576-1.048.576-1.762 0-.746-.192-1.338-.576-1.777-.372-.45-.92-.675-1.645-.675-.29 0-.569.053-.835.16a2.366 2.366 0 0 0-.284.136 1.99 1.99 0 0 0-.363.254 2.237 2.237 0 0 0-.46.569l-.082.162a2.56 2.56 0 0 0-.213 1.072v.115c0 .471.098.894.296 1.267l.135.211zm.964-.818a1.11 1.11 0 0 0 .367.385.937.937 0 0 0 .476.118c.423 0 .59-.117.687-.23.159-.194.28-.478.28-.95 0-.53-.133-.8-.266-.952l-.021-.025c-.078-.094-.231-.221-.68-.221a.995.995 0 0 0-.503.135l-.012.007a.859.859 0 0 0-.335.343c-.073.133-.132.324-.132.614v.115a1.43 1.43 0 0 0 .14.66zm15.7-6.222c.232-.23.346-.516.346-.856a1.053 1.053 0 0 0-.345-.79 1.175 1.175 0 0 0-.84-.329c-.34 0-.625.11-.855.33a1.053 1.053 0 0 0-.346.79c0 .34.115.625.346.855.23.23.516.346.856.346.34 0 .62-.115.839-.346zm4.337 9.314.033-1.332c.128.269.324.518.59.747l.098.081a3.727 3.727 0 0 0 .316.224l.223.122a3.21 3.21 0 0 0 1.44.322 3.785 3.785 0 0 0 1.875-.477 3.52 3.52 0 0 0 1.382-1.366c.352-.593.526-1.29.526-2.09 0-.79-.147-1.48-.444-2.073a3.235 3.235 0 0 0-1.283-1.399c-.549-.34-1.195-.51-1.942-.51a3.476 3.476 0 0 0-1.527.344l-.086.043-.165.09a3.412 3.412 0 0 0-.33.214c-.288.21-.507.446-.656.707a1.893 1.893 0 0 0-.099.198l.082-1.283V4.701h-1.744v12.095zm.473-2.509a2.482 2.482 0 0 0 .566.7c.078.065.159.125.245.18l.144.08a2.105 2.105 0 0 0 .975.232c.713 0 1.262-.225 1.645-.675.384-.46.576-1.053.576-1.778 0-.734-.192-1.327-.576-1.777-.373-.46-.921-.692-1.645-.692a2.18 2.18 0 0 0-1.015.235c-.147.075-.285.17-.415.282l-.15.142a2.086 2.086 0 0 0-.42.594c-.149.32-.223.685-.223 1.1v.115c0 .47.097.89.293 1.26zm2.616-.293c.157-.191.28-.479.28-.967 0-.51-.13-.79-.276-.961l-.021-.026c-.082-.1-.232-.225-.67-.225a.868.868 0 0 0-.681.279l-.012.011c-.154.155-.274.38-.274.807v.115c0 .285.057.499.144.669a1.13 1.13 0 0 0 .367.405c.137.082.28.123.455.123.423 0 .59-.118.686-.23zm8.266-3.013c.23-.087.472-.134.724-.14l.069-.002c.329 0 .542.033.642.099l.247-1.794c-.13-.066-.37-.099-.717-.099a2.3 2.3 0 0 0-.545.063 2.086 2.086 0 0 0-.411.148 2.18 2.18 0 0 0-.4.249 2.482 2.482 0 0 0-.485.499 2.659 2.659 0 0 0-.32.581l-.05.137v-1.48h-1.778v7.553h1.777v-3.884c0-.364.053-.678.159-.943a1.49 1.49 0 0 1 .466-.636 2.52 2.52 0 0 1 .399-.253 2.19 2.19 0 0 1 .224-.099zm9.784 2.656.05-.922c0-1.162-.285-2.062-.856-2.698-.559-.647-1.42-.97-2.584-.97-.746 0-1.415.163-2.007.493a3.462 3.462 0 0 0-1.4 1.382c-.329.604-.493 1.306-.493 2.106 0 .714.143 1.371.428 1.975.285.593.73 1.07 1.332 1.432.604.351 1.355.526 2.255.526.649 0 1.204-.062 1.668-.185l.044-.012.135-.04c.409-.122.736-.263.984-.421l-.542-1.267c-.2.108-.415.199-.642.274l-.297.087c-.34.088-.773.131-1.3.131-.636 0-1.135-.147-1.497-.444a1.573 1.573 0 0 1-.192-.193c-.244-.294-.415-.705-.512-1.234l-.004-.021h5.43zm-5.427-1.256-.003.022h3.752v-.138c-.007-.485-.104-.857-.288-1.118a1.056 1.056 0 0 0-.156-.176c-.307-.285-.746-.428-1.316-.428-.657 0-1.155.202-1.494.604-.253.3-.417.712-.494 1.234zm-27.053 2.77V4.7h-1.86v12.095h5.333V15.15zm7.103-5.908v7.553h-1.843V9.242h1.843z'/%3E%3Cpath fill='%23fff' d='m19.63 11.151-.757-1.71-.345 1.71-1.12 5.644h-1.827L18.083 4.7h.197l3.325 6.533.988 2.19.988-2.19L26.839 4.7h.181l2.6 12.095h-1.81l-1.218-5.644-.362-1.71-.658 1.71-2.93 5.644h-.098l-2.913-5.644zm14.836 5.81c-.68 0-1.311-.16-1.893-.478a3.795 3.795 0 0 1-1.381-1.382c-.34-.604-.51-1.306-.51-2.106 0-.79.147-1.482.444-2.074a3.364 3.364 0 0 1 1.3-1.382c.559-.33 1.217-.494 1.974-.494a3.293 3.293 0 0 1 1.234.231 3.341 3.341 0 0 1 .97.575c.264.22.44.439.527.659l.033-1.267h1.694v7.553H37.18l-.033-1.332c-.186.395-.526.746-1.02 1.053a3.167 3.167 0 0 1-1.662.444zm.296-1.482c.626 0 1.152-.214 1.58-.642.428-.44.642-1.01.642-1.711v-.115c0-.472-.098-.894-.296-1.267a2.211 2.211 0 0 0-.807-.872 2.098 2.098 0 0 0-1.119-.313c-.702 0-1.245.231-1.629.692-.384.45-.575 1.037-.575 1.76 0 .736.186 1.333.559 1.795.384.45.933.675 1.645.675zm6.521-6.237h1.711v1.4c.604-1.065 1.547-1.597 2.83-1.597 1.064 0 1.926.34 2.584 1.02.659.67.988 1.641.988 2.914 0 .79-.164 1.487-.493 2.09a3.456 3.456 0 0 1-1.316 1.399 3.51 3.51 0 0 1-1.844.493c-.636 0-1.19-.11-1.662-.329a2.665 2.665 0 0 1-1.086-.97l.017 5.134h-1.728V9.242zm4.048 6.22c.714 0 1.262-.224 1.645-.674.385-.46.576-1.048.576-1.762 0-.746-.192-1.338-.576-1.777-.372-.45-.92-.675-1.645-.675-.395 0-.768.098-1.12.296-.34.187-.613.46-.822.823-.197.351-.296.763-.296 1.234v.115c0 .472.098.894.296 1.267.209.362.483.647.823.855.34.197.713.297 1.119.297z'/%3E%3Cpath fill='%23e1e3e9' d='M51.325 4.7h1.86v10.45h3.473v1.646h-5.333zm7.12 4.542h1.843v7.553h-1.843zm.905-1.415a1.159 1.159 0 0 1-.856-.346 1.165 1.165 0 0 1-.346-.856 1.053 1.053 0 0 1 .346-.79c.23-.219.516-.329.856-.329.329 0 .609.11.839.33a1.053 1.053 0 0 1 .345.79 1.159 1.159 0 0 1-.345.855c-.22.23-.5.346-.84.346zm7.875 9.133a3.167 3.167 0 0 1-1.662-.444c-.482-.307-.817-.658-1.004-1.053l-.033 1.332h-1.71V4.701h1.743v4.657l-.082 1.283c.186-.438.548-.812 1.086-1.119a3.486 3.486 0 0 1 1.778-.477c.746 0 1.393.17 1.942.51a3.235 3.235 0 0 1 1.283 1.4c.297.592.444 1.282.444 2.072 0 .8-.175 1.498-.526 2.09a3.52 3.52 0 0 1-1.382 1.366 3.785 3.785 0 0 1-1.876.477zm-.296-1.481c.713 0 1.26-.225 1.645-.675.384-.46.577-1.053.577-1.778 0-.734-.193-1.327-.577-1.776-.373-.46-.921-.692-1.645-.692a2.115 2.115 0 0 0-1.58.659c-.428.428-.642.992-.642 1.694v.115c0 .473.098.895.296 1.267a2.385 2.385 0 0 0 .807.872 2.1 2.1 0 0 0 1.119.313zm5.927-6.237h1.777v1.481c.176-.505.46-.91.856-1.217a2.14 2.14 0 0 1 1.349-.46c.351 0 .593.032.724.098l-.247 1.794c-.099-.066-.313-.099-.642-.099-.516 0-.988.164-1.416.494-.417.329-.626.855-.626 1.58v3.883h-1.777V9.242zm9.534 7.718c-.9 0-1.651-.175-2.255-.526-.603-.362-1.047-.84-1.332-1.432a4.567 4.567 0 0 1-.428-1.975c0-.8.164-1.502.493-2.106a3.462 3.462 0 0 1 1.4-1.382c.592-.33 1.262-.494 2.007-.494 1.163 0 2.024.324 2.584.97.57.637.856 1.537.856 2.7 0 .296-.017.603-.05.92h-5.43c.12.67.356 1.153.708 1.45.362.296.86.443 1.497.443.526 0 .96-.044 1.3-.131a4.123 4.123 0 0 0 .938-.362l.542 1.267c-.274.175-.647.329-1.119.46-.472.132-1.042.197-1.711.197zm1.596-4.558c.01-.68-.137-1.158-.444-1.432-.307-.285-.746-.428-1.316-.428-1.152 0-1.815.62-1.991 1.86h3.752z'/%3E%3Cg fill-rule='evenodd' stroke-width='1.036'%3E%3Cpath fill='%23000' fill-opacity='.4' d='m8.166 16.146-.002.002a1.54 1.54 0 0 1-2.009 0l-.002-.002-.043-.034-.002-.002-.199-.162H4.377a.657.657 0 0 0-.659.659v1.84a.657.657 0 0 0 .659.659h5.565a.657.657 0 0 0 .659-.659v-1.84a.657.657 0 0 0-.659-.659H8.411l-.202.164zm-1.121-.905a.29.29 0 0 0 .113.023.286.286 0 0 0 .189-.07l.077-.063c.634-.508 4.672-3.743 4.672-7.575 0-2.55-2.215-4.625-4.938-4.625S2.221 5.006 2.221 7.556c0 3.225 2.86 6.027 4.144 7.137h.004l.04.038.484.4.077.063a.628.628 0 0 0 .074.047zm-2.52-.548a16.898 16.898 0 0 1-1.183-1.315C2.187 11.942.967 9.897.967 7.555c0-3.319 2.855-5.88 6.192-5.88 3.338 0 6.193 2.561 6.193 5.881 0 2.34-1.22 4.387-2.376 5.822a16.898 16.898 0 0 1-1.182 1.315h.15a1.912 1.912 0 0 1 1.914 1.914v1.84a1.912 1.912 0 0 1-1.914 1.914H4.377a1.912 1.912 0 0 1-1.914-1.914v-1.84a1.912 1.912 0 0 1 1.914-1.914zm3.82-6.935c0 .692-.55 1.222-1.187 1.222s-1.185-.529-1.185-1.222.548-1.222 1.185-1.222c.638 0 1.186.529 1.186 1.222zm-1.186 2.477c1.348 0 2.442-1.11 2.442-2.478S8.507 5.28 7.159 5.28 4.72 6.39 4.72 7.758s1.092 2.477 2.44 2.477zm2.048 7.71H5.114v-.838h4.093z'/%3E%3Cpath fill='%23e1e3e9' d='M2.222 7.555c0-2.55 2.214-4.625 4.937-4.625 2.723 0 4.938 2.075 4.938 4.625 0 3.832-4.038 7.068-4.672 7.575l-.077.063a.286.286 0 0 1-.189.07.286.286 0 0 1-.188-.07l-.077-.063c-.634-.507-4.672-3.743-4.672-7.575zm4.937 2.68c1.348 0 2.442-1.11 2.442-2.478S8.507 5.28 7.159 5.28 4.72 6.39 4.72 7.758s1.092 2.477 2.44 2.477z'/%3E%3Cpath fill='%23fff' d='M4.377 15.948a.657.657 0 0 0-.659.659v1.84a.657.657 0 0 0 .659.659h5.565a.657.657 0 0 0 .659-.659v-1.84a.657.657 0 0 0-.659-.659zm4.83 1.16H5.114v.838h4.093z'/%3E%3C/g%3E%3C/svg%3E")}}.maplibregl-ctrl.maplibregl-ctrl-attrib{background-color:hsla(0,0%,100%,.5);margin:0;padding:0 5px}@media screen{.maplibregl-ctrl-attrib.maplibregl-compact{background-color:#fff;border-radius:12px;margin:10px;min-height:20px;padding:2px 24px 2px 0;position:relative}.maplibregl-ctrl-attrib.maplibregl-compact-show{padding:2px 28px 2px 8px;visibility:visible}.maplibregl-ctrl-bottom-left>.maplibregl-ctrl-attrib.maplibregl-compact-show,.maplibregl-ctrl-top-left>.maplibregl-ctrl-attrib.maplibregl-compact-show{border-radius:12px;padding:2px 8px 2px 28px}.maplibregl-ctrl-attrib.maplibregl-compact .maplibregl-ctrl-attrib-inner{display:none}.maplibregl-ctrl-attrib-button{background-color:hsla(0,0%,100%,.5);background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill-rule='evenodd' viewBox='0 0 20 20'%3E%3Cpath d='M4 10a6 6 0 1 0 12 0 6 6 0 1 0-12 0m5-3a1 1 0 1 0 2 0 1 1 0 1 0-2 0m0 3a1 1 0 1 1 2 0v3a1 1 0 1 1-2 0'/%3E%3C/svg%3E");border:0;border-radius:12px;box-sizing:border-box;cursor:pointer;display:none;height:24px;outline:none;position:absolute;right:0;top:0;width:24px}.maplibregl-ctrl-bottom-left .maplibregl-ctrl-attrib-button,.maplibregl-ctrl-top-left .maplibregl-ctrl-attrib-button{left:0}.maplibregl-ctrl-attrib.maplibregl-compact-show .maplibregl-ctrl-attrib-inner,.maplibregl-ctrl-attrib.maplibregl-compact .maplibregl-ctrl-attrib-button{display:block}.maplibregl-ctrl-attrib.maplibregl-compact-show .maplibregl-ctrl-attrib-button{background-color:rgba(0,0,0,.05)}.maplibregl-ctrl-bottom-right>.maplibregl-ctrl-attrib.maplibregl-compact:after{bottom:0;right:0}.maplibregl-ctrl-top-right>.maplibregl-ctrl-attrib.maplibregl-compact:after{right:0;top:0}.maplibregl-ctrl-top-left>.maplibregl-ctrl-attrib.maplibregl-compact:after{left:0;top:0}.maplibregl-ctrl-bottom-left>.maplibregl-ctrl-attrib.maplibregl-compact:after{bottom:0;left:0}}@media screen and (-ms-high-contrast:active){.maplibregl-ctrl-attrib.maplibregl-compact:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' fill-rule='evenodd' viewBox='0 0 20 20'%3E%3Cpath d='M4 10a6 6 0 1 0 12 0 6 6 0 1 0-12 0m5-3a1 1 0 1 0 2 0 1 1 0 1 0-2 0m0 3a1 1 0 1 1 2 0v3a1 1 0 1 1-2 0'/%3E%3C/svg%3E")}}@media screen and (-ms-high-contrast:black-on-white){.maplibregl-ctrl-attrib.maplibregl-compact:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill-rule='evenodd' viewBox='0 0 20 20'%3E%3Cpath d='M4 10a6 6 0 1 0 12 0 6 6 0 1 0-12 0m5-3a1 1 0 1 0 2 0 1 1 0 1 0-2 0m0 3a1 1 0 1 1 2 0v3a1 1 0 1 1-2 0'/%3E%3C/svg%3E")}}.maplibregl-ctrl-attrib a{color:rgba(0,0,0,.75);text-decoration:none}.maplibregl-ctrl-attrib a:hover{color:inherit;text-decoration:underline}.maplibregl-ctrl-attrib .mapbox-improve-map{font-weight:700;margin-left:2px}.maplibregl-attrib-empty{display:none}.maplibregl-ctrl-scale{background-color:hsla(0,0%,100%,.75);border:2px solid #333;border-top:#333;box-sizing:border-box;color:#333;font-size:10px;padding:0 5px}.maplibregl-popup{display:flex;left:0;pointer-events:none;position:absolute;top:0;will-change:transform}.maplibregl-popup-anchor-top,.maplibregl-popup-anchor-top-left,.maplibregl-popup-anchor-top-right{flex-direction:column}.maplibregl-popup-anchor-bottom,.maplibregl-popup-anchor-bottom-left,.maplibregl-popup-anchor-bottom-right{flex-direction:column-reverse}.maplibregl-popup-anchor-left{flex-direction:row}.maplibregl-popup-anchor-right{flex-direction:row-reverse}.maplibregl-popup-tip{border:10px solid transparent;height:0;width:0;z-index:1}.maplibregl-popup-anchor-top .maplibregl-popup-tip{align-self:center;border-bottom-color:#fff;border-top:none}.maplibregl-popup-anchor-top-left .maplibregl-popup-tip{align-self:flex-start;border-bottom-color:#fff;border-left:none;border-top:none}.maplibregl-popup-anchor-top-right .maplibregl-popup-tip{align-self:flex-end;border-bottom-color:#fff;border-right:none;border-top:none}.maplibregl-popup-anchor-bottom .maplibregl-popup-tip{align-self:center;border-bottom:none;border-top-color:#fff}.maplibregl-popup-anchor-bottom-left .maplibregl-popup-tip{align-self:flex-start;border-bottom:none;border-left:none;border-top-color:#fff}.maplibregl-popup-anchor-bottom-right .maplibregl-popup-tip{align-self:flex-end;border-bottom:none;border-right:none;border-top-color:#fff}.maplibregl-popup-anchor-left .maplibregl-popup-tip{align-self:center;border-left:none;border-right-color:#fff}.maplibregl-popup-anchor-right .maplibregl-popup-tip{align-self:center;border-left-color:#fff;border-right:none}.maplibregl-popup-close-button{background-color:transparent;border:0;border-radius:0 3px 0 0;cursor:pointer;position:absolute;right:0;top:0}.maplibregl-popup-close-button:hover{background-color:rgba(0,0,0,.05)}.maplibregl-popup-content{background:#fff;border-radius:3px;box-shadow:0 1px 2px rgba(0,0,0,.1);padding:10px 10px 15px;pointer-events:auto;position:relative}.maplibregl-popup-anchor-top-left .maplibregl-popup-content{border-top-left-radius:0}.maplibregl-popup-anchor-top-right .maplibregl-popup-content{border-top-right-radius:0}.maplibregl-popup-anchor-bottom-left .maplibregl-popup-content{border-bottom-left-radius:0}.maplibregl-popup-anchor-bottom-right .maplibregl-popup-content{border-bottom-right-radius:0}.maplibregl-popup-track-pointer{display:none}.maplibregl-popup-track-pointer *{pointer-events:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.maplibregl-map:hover .maplibregl-popup-track-pointer{display:flex}.maplibregl-map:active .maplibregl-popup-track-pointer{display:none}.maplibregl-marker{left:0;position:absolute;top:0;will-change:transform}.maplibregl-user-location-dot,.maplibregl-user-location-dot:before{background-color:#1da1f2;border-radius:50%;height:15px;width:15px}.maplibregl-user-location-dot:before{-webkit-animation:maplibregl-user-location-dot-pulse 2s infinite;animation:maplibregl-user-location-dot-pulse 2s infinite;content:"";position:absolute}.maplibregl-user-location-dot:after{border:2px solid #fff;border-radius:50%;box-shadow:0 0 3px rgba(0,0,0,.35);box-sizing:border-box;content:"";height:19px;left:-2px;position:absolute;top:-2px;width:19px}@-webkit-keyframes maplibregl-user-location-dot-pulse{0%{opacity:1;-webkit-transform:scale(1)}70%{opacity:0;-webkit-transform:scale(3)}to{opacity:0;-webkit-transform:scale(1)}}@keyframes maplibregl-user-location-dot-pulse{0%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}70%{opacity:0;-webkit-transform:scale(3);transform:scale(3)}to{opacity:0;-webkit-transform:scale(1);transform:scale(1)}}.maplibregl-user-location-dot-stale{background-color:#aaa}.maplibregl-user-location-dot-stale:after{display:none}.maplibregl-user-location-accuracy-circle{background-color:rgba(29,161,242,.2);border-radius:100%;height:1px;width:1px}.maplibregl-crosshair,.maplibregl-crosshair .maplibregl-interactive,.maplibregl-crosshair .maplibregl-interactive:active{cursor:crosshair}.maplibregl-boxzoom{background:#fff;border:2px dotted #202020;height:0;left:0;opacity:.5;position:absolute;top:0;width:0}@media print{.mapbox-improve-map{display:none}}.J40Map-module--mapAndInfoPanelContainer--q-ody{display:flex;height:81vh}@media screen and (max-width:400px){.J40Map-module--mapAndInfoPanelContainer--q-ody{flex-direction:column;height:-webkit-fit-content;height:-moz-fit-content;height:fit-content}}.J40Map-module--j40Popup--3yJGr{width:375px}.J40Map-module--navigationControl--2Aybf{left:1.25em;top:2.5em;width:2.5em}.J40Map-module--fullscreenControl--1UBKe{right:1.25em;top:2.5em}.J40Map-module--geolocateControl--3KVAk{right:1.25em;top:5em}.J40Map-module--mapInfoPanel--F3jR4{border:2px solid #f2f2f2;max-width:22rem;overflow-y:auto}.HowYouCanHelp-module--howYouCanHelpContainer--2kqBa{margin:29px 24px 49px 42px}.downloadPacket-module--downloadBoxContainer--IfYSI{color:#f5f5f5;flex:0 0 350px;margin:auto}.downloadPacket-module--downloadBoxContainer--IfYSI .downloadPacket-module--downloadBox--23qAG{background-color:#112f4e;border-radius:6px 6px;min-width:400px}.downloadPacket-module--downloadBoxContainer--IfYSI .downloadPacket-module--downloadBox--23qAG .downloadPacket-module--downloadBoxTextBox--2C08I{display:flex;flex-direction:column;padding:25px}.downloadPacket-module--downloadBoxContainer--IfYSI .downloadPacket-module--downloadBox--23qAG .downloadPacket-module--downloadBoxTextBox--2C08I .downloadPacket-module--downloadBoxTitle--2oQsR{font-weight:700;margin-bottom:10px}.downloadPacket-module--downloadBoxContainer--IfYSI .downloadPacket-module--downloadBox--23qAG .downloadPacket-module--downloadBoxTextBox--2C08I .downloadPacket-module--downloadBoxText--s09H8{margin-bottom:20px}.downloadPacket-module--downloadBoxContainer--IfYSI .downloadPacket-module--downloadBox--23qAG .downloadPacket-module--downloadBoxTextBox--2C08I .downloadPacket-module--downloadBoxButtonContainer--EBWUf{align-self:center;margin-top:20px 0 0 0}.downloadPacket-module--downloadBoxContainer--IfYSI .downloadPacket-module--downloadBox--23qAG .downloadPacket-module--downloadBoxTextBox--2C08I .downloadPacket-module--downloadBoxButtonContainer--EBWUf a{text-decoration:none}.downloadPacket-module--downloadBoxContainer--IfYSI .downloadPacket-module--downloadBox--23qAG .downloadPacket-module--downloadBoxTextBox--2C08I .downloadPacket-module--downloadBoxButtonContainer--EBWUf img{-webkit-filter:invert(15%) sepia(9%) saturate(5666%) hue-rotate(175deg) brightness(96%) contrast(95%);filter:invert(15%) sepia(9%) saturate(5666%) hue-rotate(175deg) brightness(96%) contrast(95%)}.downloadPacket-module--downloadBoxContainer--IfYSI .downloadPacket-module--downloadBox--23qAG .downloadPacket-module--downloadBoxTextBox--2C08I .downloadPacket-module--downloadBoxButton--3w-ok{background-color:#fff;color:#112f4e;display:flex}.downloadPacket-module--downloadBoxContainer--IfYSI .downloadPacket-module--downloadBox--23qAG .downloadPacket-module--downloadBoxTextBox--2C08I .downloadPacket-module--downloadBoxButton--3w-ok .downloadPacket-module--downloadPacketText--2MyEV{padding-left:5px;padding-top:4px}.mapLegend-module--legendContainer--2N1FC{font-size:.8em;margin-top:19px}.mapLegend-module--swatchContainer--1yZX1{display:flex;flex-direction:row;justify-content:flex-start}.mapLegend-module--legendItem--WezUf{align-items:center;display:flex;flex-direction:row;margin-right:29px}.mapLegend-module--colorSwatch--oBUN2{border:1px solid #1a4480;box-sizing:border-box;height:20px;margin-right:10px;width:20px}#mapLegend-module--prioritized--1I534{background-color:rgba(26,68,128,.6)}#mapLegend-module--threshold--1zali{background-color:rgba(26,68,128,.2)}#mapLegend-module--nonPrioritized--2y0Vm{background-color:#fafaf8}.cejst-module--disclaimer--3LC1y{display:flex;flex-wrap:wrap;line-height:25px}.cejst-module--disclaimer--3LC1y .cejst-module--textBox--9wuDw{flex:2 1;max-width:700px} \ No newline at end of file diff --git a/main/timeline/index.html b/main/timeline/index.html index 257af17c..48f6de0f 100644 --- a/main/timeline/index.html +++ b/main/timeline/index.html @@ -1 +1 @@ -
\ No newline at end of file +
\ No newline at end of file diff --git a/main/webpack-runtime-022d7d69b0f150326e1e.js b/main/webpack-runtime-739ca2ab4750c148e2ab.js similarity index 74% rename from main/webpack-runtime-022d7d69b0f150326e1e.js rename to main/webpack-runtime-739ca2ab4750c148e2ab.js index 8311c3b0..9a10610f 100644 --- a/main/webpack-runtime-022d7d69b0f150326e1e.js +++ b/main/webpack-runtime-739ca2ab4750c148e2ab.js @@ -1 +1 @@ -!function(){"use strict";var e,t,n,r,o,c,i,f={},u={};function a(e){var t=u[e];if(void 0!==t)return t.exports;var n=u[e]={exports:{}};return f[e].call(n.exports,n,n.exports,a),n.exports}a.m=f,e=[],a.O=function(t,n,r,o){if(!n){var c=1/0;for(u=0;u=o)&&Object.keys(a.O).every((function(e){return a.O[e](n[f])}))?n.splice(f--,1):(i=!1,o0&&e[u-1][2]>o;u--)e[u]=e[u-1];e[u]=[n,r,o]},a.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(t,{a:t}),t},n=Object.getPrototypeOf?function(e){return Object.getPrototypeOf(e)}:function(e){return e.__proto__},a.t=function(e,r){if(1&r&&(e=this(e)),8&r)return e;if("object"==typeof e&&e){if(4&r&&e.__esModule)return e;if(16&r&&"function"==typeof e.then)return e}var o=Object.create(null);a.r(o);var c={};t=t||[null,n({}),n([]),n(n)];for(var i=2&r&&e;"object"==typeof i&&!~t.indexOf(i);i=n(i))Object.getOwnPropertyNames(i).forEach((function(t){c[t]=function(){return e[t]}}));return c.default=function(){return e},a.d(o,c),o},a.d=function(e,t){for(var n in t)a.o(t,n)&&!a.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},a.f={},a.e=function(e){return Promise.all(Object.keys(a.f).reduce((function(t,n){return a.f[n](e,t),t}),[]))},a.u=function(e){return{30:"40194750",90:"f71c28d7eb4893bc8b1655bb2418fc6b743e7cb1",218:"component---src-pages-404-tsx",281:"component---src-pages-cejst-tsx",532:"styles",644:"d94c0b71",647:"component---src-pages-methodology-tsx",650:"component---src-pages-contact-tsx",691:"component---src-pages-index-tsx",914:"component---src-pages-timeline-tsx",947:"6b63c6c0fcce4d72b6f5055042135daff9ef2bac"}[e]+"-"+{30:"c4fc0b9862c31a9e6cdd",90:"815397a0207af77f594b",218:"c3f620370544ae9a30d7",281:"7759b5df9211fee71e5a",532:"97d21f5fb2f189cf7308",644:"011c029866557a05ad48",647:"221d358a1d4d241bfbb0",650:"fe9965b24f0b7fc7ea56",691:"0c8ca3be98fe355d7492",914:"c4b25d3fa997a646ffb9",947:"22722d48fc00defd3ff3"}[e]+".js"},a.miniCssF=function(e){return"styles.b061829a1cb2fc5449b0.css"},a.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),a.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r={},o="justice40-tool:",a.l=function(e,t,n,c){if(r[e])r[e].push(t);else{var i,f;if(void 0!==n)for(var u=document.getElementsByTagName("script"),s=0;s=o)&&Object.keys(a.O).every((function(e){return a.O[e](n[u])}))?n.splice(u--,1):(i=!1,o0&&e[f-1][2]>o;f--)e[f]=e[f-1];e[f]=[n,r,o]},a.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(t,{a:t}),t},n=Object.getPrototypeOf?function(e){return Object.getPrototypeOf(e)}:function(e){return e.__proto__},a.t=function(e,r){if(1&r&&(e=this(e)),8&r)return e;if("object"==typeof e&&e){if(4&r&&e.__esModule)return e;if(16&r&&"function"==typeof e.then)return e}var o=Object.create(null);a.r(o);var c={};t=t||[null,n({}),n([]),n(n)];for(var i=2&r&&e;"object"==typeof i&&!~t.indexOf(i);i=n(i))Object.getOwnPropertyNames(i).forEach((function(t){c[t]=function(){return e[t]}}));return c.default=function(){return e},a.d(o,c),o},a.d=function(e,t){for(var n in t)a.o(t,n)&&!a.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},a.f={},a.e=function(e){return Promise.all(Object.keys(a.f).reduce((function(t,n){return a.f[n](e,t),t}),[]))},a.u=function(e){return{30:"40194750",90:"f71c28d7eb4893bc8b1655bb2418fc6b743e7cb1",218:"component---src-pages-404-tsx",281:"component---src-pages-cejst-tsx",532:"styles",644:"d94c0b71",647:"component---src-pages-methodology-tsx",650:"component---src-pages-contact-tsx",691:"component---src-pages-index-tsx",914:"component---src-pages-timeline-tsx",947:"6b63c6c0fcce4d72b6f5055042135daff9ef2bac"}[e]+"-"+{30:"c4fc0b9862c31a9e6cdd",90:"815397a0207af77f594b",218:"c3f620370544ae9a30d7",281:"9a5d0d7c1c3d9bda33e2",532:"97d21f5fb2f189cf7308",644:"011c029866557a05ad48",647:"221d358a1d4d241bfbb0",650:"fe9965b24f0b7fc7ea56",691:"0c8ca3be98fe355d7492",914:"c4b25d3fa997a646ffb9",947:"22722d48fc00defd3ff3"}[e]+".js"},a.miniCssF=function(e){return"styles.e3bb5bc21a277dc41dd7.css"},a.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),a.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r={},o="justice40-tool:",a.l=function(e,t,n,c){if(r[e])r[e].push(t);else{var i,u;if(void 0!==n)for(var f=document.getElementsByTagName("script"),s=0;s